DBA Data[Home] [Help]

PACKAGE BODY: APPS.AP_ACCOUNTING_EVENTS_PKG

Source


1 PACKAGE BODY AP_ACCOUNTING_EVENTS_PKG AS
2 /* $Header: apeventb.pls 120.123.12020000.3 2012/09/26 07:11:41 aaalla ship $ */
3 
4 G_CURRENT_RUNTIME_LEVEL     NUMBER       := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5 G_LEVEL_UNEXPECTED CONSTANT NUMBER       := FND_LOG.LEVEL_UNEXPECTED;
6 G_LEVEL_ERROR      CONSTANT NUMBER       := FND_LOG.LEVEL_ERROR;
7 G_LEVEL_EXCEPTION  CONSTANT NUMBER       := FND_LOG.LEVEL_EXCEPTION;
8 G_LEVEL_EVENT      CONSTANT NUMBER       := FND_LOG.LEVEL_EVENT;
9 G_LEVEL_PROCEDURE  CONSTANT NUMBER       := FND_LOG.LEVEL_PROCEDURE;
10 G_LEVEL_STATEMENT  CONSTANT NUMBER       := FND_LOG.LEVEL_STATEMENT;
11 G_MODULE_NAME      CONSTANT VARCHAR2(50) :='AP.PLSQL.AP_ACCOUNTING_EVENT_PKG.';
12 
13 ---------------------------------------------------------------------
14 -- Definition of Accounting Event Entities, Classes and Types.
15 ---------------------------------------------------------------------
16 ---------------------------------------------------------------------
17 --INVOICES_ENTITY
18 ---------------------------------------------------------------------
19 INVOICES_ENTITY CONSTANT VARCHAR2(30)            := 'AP_INVOICES';
20 
21 INVOICES_CLASS CONSTANT VARCHAR2(30)               := 'INVOICES';
22   INVOICE_VALIDATED_TYPE CONSTANT VARCHAR2(30)     := 'INVOICE VALIDATED';
23   --INVOICE_ADJUSTED_TYPE CONSTANT VARCHAR2(30)      := 'INVOICE ADJUSTED';
24   INVOICE_ADJUSTED_TYPE CONSTANT VARCHAR2(30)      := 'INVOICE VALIDATED';
25   INVOICE_CANCELLED_TYPE CONSTANT VARCHAR2(30)     := 'INVOICE CANCELLED';
26 
30   CREDIT_MEMO_ADJUSTED_TYPE CONSTANT VARCHAR2(30)  := 'CREDIT MEMO VALIDATED';
27 CREDIT_MEMOS_CLASS CONSTANT VARCHAR2(30)           := 'CREDIT MEMOS';
28   CREDIT_MEMO_VALIDATED_TYPE CONSTANT VARCHAR2(30) := 'CREDIT MEMO VALIDATED';
29   --CREDIT_MEMO_ADJUSTED_TYPE CONSTANT VARCHAR2(30)  := 'CREDIT MEMO ADJUSTED';
31   CREDIT_MEMO_CANCELLED_TYPE CONSTANT VARCHAR2(30) := 'CREDIT MEMO CANCELLED';
32 
33 DEBIT_MEMOS_CLASS CONSTANT VARCHAR2(30)            := 'DEBIT MEMOS';
34   DEBIT_MEMO_VALIDATED_TYPE CONSTANT VARCHAR2(30)  := 'DEBIT MEMO VALIDATED';
35   --DEBIT_MEMO_ADJUSTED_TYPE CONSTANT VARCHAR2(30)   := 'DEBIT MEMO ADJUSTED';
36   DEBIT_MEMO_ADJUSTED_TYPE CONSTANT VARCHAR2(30)   := 'DEBIT MEMO VALIDATED';
37   DEBIT_MEMO_CANCELLED_TYPE CONSTANT VARCHAR2(30)  := 'DEBIT MEMO CANCELLED';
38 
39 PREPAYMENTS_CLASS CONSTANT VARCHAR2(30)             := 'PREPAYMENTS';
40   PREPAYMENT_VALIDATED_TYPE CONSTANT VARCHAR2(30)   := 'PREPAYMENT VALIDATED';
41   --PREPAYMENT_ADJUSTED_TYPE CONSTANT VARCHAR2(30)    := 'PREPAYMENT ADJUSTED';
42   PREPAYMENT_ADJUSTED_TYPE CONSTANT VARCHAR2(30)    := 'PREPAYMENT VALIDATED';
43   PREPAYMENT_CANCELLED_TYPE CONSTANT VARCHAR2(30)   := 'PREPAYMENT CANCELLED';
44 
45 PREPAYMENT_APPLICATIONS_CLASS CONSTANT VARCHAR2(30):=
46                                              'PREPAYMENT APPLICATIONS';
47   PREPAYMENT_APPLIED_TYPE CONSTANT VARCHAR2(30)     := 'PREPAYMENT APPLIED';
48   PREPAYMENT_UNAPPLIED_TYPE CONSTANT VARCHAR2(30)   := 'PREPAYMENT UNAPPLIED';
49   PREPAY_APP_ADJUSTED_TYPE CONSTANT VARCHAR2(30)    :=
50 -- bug fix 5656160
51 --                                             'PREPAY APPLICATION ADJUSTED';
52                                              'PREPAYMENT APPLICATION ADJ';
53 
54 --------------------------------------------------------------------
55 --PAYMENTS_ENTITY
56 ---------------------------------------------------------------------
57 
58 PAYMENTS_ENTITY CONSTANT VARCHAR2(30)              := 'AP_PAYMENTS';
59 
60 PAYMENTS_CLASS CONSTANT VARCHAR2(30)                 := 'PAYMENTS';
61   PAYMENT_CREATED_TYPE CONSTANT VARCHAR2(30)         := 'PAYMENT CREATED';
62   PAYMENT_CANCELLED_TYPE CONSTANT VARCHAR2(30)       := 'PAYMENT CANCELLED';
63   MANUAL_PAYMENT_ADJUSTED_TYPE CONSTANT VARCHAR2(30) :=
64                                         'MANUAL PAYMENT ADJUSTED';
65   PAYMENT_ADJUSTED_TYPE CONSTANT VARCHAR2(30)        := 'PAYMENT ADJUSTED';
66   UPGRADED_MAN_PAY_REV_TYPE  CONSTANT VARCHAR2(30)   :=
67                                            'UPGRADED MANUAL PMT REVERSED';
68   UPGRADED_MAN_PAY_ADJ_TYPE  CONSTANT VARCHAR2(30)   :=
69                                            'UPGRADED MANUAL PMT ADJUSTED';
70 
71 REFUNDS_CLASS CONSTANT VARCHAR2(30)           := 'REFUNDS';
72   REFUND_RECORDED_TYPE CONSTANT VARCHAR2(30)  := 'REFUND RECORDED';
73   REFUND_CANCELLED_TYPE CONSTANT VARCHAR2(30) := 'REFUND CANCELLED';
74   REFUND_ADJUSTED_TYPE CONSTANT VARCHAR2(30)  := 'REFUND ADJUSTED';
75   MANUAL_REFUND_ADJUSTED_TYPE CONSTANT VARCHAR2(30) :=
76                                        'MANUAL REFUND ADJUSTED'; --bug 10336668
77 
78 FUTURE_DATED_PAYMENTS_CLASS CONSTANT VARCHAR2(30)   := 'FUTURE DATED PAYMENTS';
79   PAYMENT_MATURED_TYPE CONSTANT VARCHAR2(30)          := 'PAYMENT MATURED';
80   PAYMENT_MATURITY_REVERSED_TYPE CONSTANT VARCHAR2(30):=
81                                         'PAYMENT MATURITY REVERSED';
82 
83   PAYMENT_MATURTY_RVRSL_TRX_TYPE CONSTANT VARCHAR2(30):=
84                                         'PAYMENT MATURITY REVERSAL';
85   PAYMENT_MATURTY_TRX_TYPE CONSTANT VARCHAR2(30):=
86                                         'PAYMENT MATURITY';
87 
88   PAYMENT_MATURITY_ADJUSTED_TYPE CONSTANT VARCHAR2(30):=
89                                         'PAYMENT MATURITY ADJUSTED';
90 
91 RECONCILED_PAYMENTS_CLASS CONSTANT VARCHAR2(30) := 'RECONCILED PAYMENTS';
92   PAYMENT_CLEARED_TYPE CONSTANT VARCHAR2(30)    := 'PAYMENT CLEARED';
93   PAYMENT_UNCLEARED_TYPE CONSTANT VARCHAR2(30)  := 'PAYMENT UNCLEARED';
94   PAYMENT_CLEARING_ADJUSTED_TYPE CONSTANT VARCHAR2(30) :=
95                                         'PAYMENT CLEARING ADJUSTED';
96 
97   PAYMENT_CLEARED_TRX_TYPE CONSTANT VARCHAR2(30) := 'PAYMENT CLEARING';
98   PAYMENT_UNCLEARED_TRX_TYPE CONSTANT VARCHAR2(30) := 'PAYMENT UNCLEARING';
99 
100 ---------------------------------------------------------------------
101 --Definition of derive_invoice_events procedure (private)
102 ---------------------------------------------------------------------
103 PROCEDURE derive_invoice_events
104 ( p_invoice_id IN NUMBER,
105   p_calling_sequence IN VARCHAR2
106 );
107 
108 ---------------------------------------------------------------------
109 --Definition of create_invoice_event procedure (private)
110 ---------------------------------------------------------------------
111 FUNCTION create_invoice_event
112 ( p_event_type IN VARCHAR2,
113   p_invoice_id IN NUMBER,
114   p_event_date IN DATE,
115   p_calling_sequence IN VARCHAR2
116 ) RETURN NUMBER;
117 
118 ---------------------------------------------------------------------
119 --Definition of create_payment_event procedure (private)
120 ---------------------------------------------------------------------
121 FUNCTION create_payment_event
122 ( p_event_type IN VARCHAR2,
123   p_check_id IN NUMBER,
124   p_event_date IN DATE,
125   p_calling_sequence IN VARCHAR2
126 ) RETURN NUMBER;
127 
128 ---------------------------------------------------------------------
129 --Definition of is_event_complete function (private)
130 ---------------------------------------------------------------------
131 FUNCTION is_event_complete
132 ( p_doc_type IN VARCHAR2,
133   p_source_id IN NUMBER,
134   p_calling_sequence IN VARCHAR2
135 ) RETURN VARCHAR2;
136 
137 ---------------------------------------------------------------------
141 ( p_check_id IN NUMBER,
138 --Definition of derive_payment_adj_event procedurs (private)
139 ---------------------------------------------------------------------
140 PROCEDURE derive_payment_adj_event
142   p_accounting_date IN DATE,
143   p_event_type      IN VARCHAR2,
144   p_accounting_event_id OUT NOCOPY NUMBER,
145   p_calling_sequence IN VARCHAR2
146 );
147 
148 ---------------------------------------------------------------------
149 --Definition of derive_cascade_events procedure (private)
150 ---------------------------------------------------------------------
151 -- Bug 6996047. Added accounting date parameter
152 PROCEDURE derive_cascade_events
153 ( p_invoice_id IN NUMBER,
154   p_adj_accounting_event_id IN NUMBER,
155   p_accounting_date IN DATE,
156   p_calling_sequence IN VARCHAR2
157 );
158 
159 ---------------------------------------------------------------------
160 --Definition of derive_invoice_cancel_event procedure (private)
161 ---------------------------------------------------------------------
162 PROCEDURE derive_invoice_cancel_events
163 ( p_invoice_id IN NUMBER,
164   p_calling_sequence IN VARCHAR2
165 );
166 
167 ---------------------------------------------------------------------
168 --Definition of no_action_pmt_event_update procedure (private)
169 ---------------------------------------------------------------------
170 PROCEDURE no_action_pmt_event_update
171 ( p_check_id IN NUMBER,
172   p_event_type_code IN VARCHAR2,
173   p_accounting_date IN DATE,
174   p_accounting_event_id IN NUMBER,
175   p_calling_sequence IN VARCHAR2
176 );
177 
178 ---------------------------------------------------------------------
179 --Definition of get_event_class function (private)
180 ---------------------------------------------------------------------
181 FUNCTION get_event_class
182 ( p_event_type IN VARCHAR2,
183   p_calling_sequence IN VARCHAR2
184 ) RETURN VARCHAR2;
185 
186 ---------------------------------------------------------------------
187 --Definition of event_security_context function (private)
188 ---------------------------------------------------------------------
189 FUNCTION get_event_security_context
190 ( p_org_id IN NUMBER,
191   p_calling_sequence IN VARCHAR2
192 ) RETURN XLA_EVENTS_PUB_PKG.T_SECURITY;
193 
194 ---------------------------------------------------------------------
195 --Definition of get_invoice_event_source_info function (private)
196 ---------------------------------------------------------------------
197 FUNCTION get_invoice_event_source_info
198 ( p_legal_entity_id IN NUMBER,
199   p_ledger_id IN NUMBER,
200   p_invoice_id IN NUMBER,
201   p_calling_sequence IN VARCHAR2
202 ) RETURN XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
203 
204 ---------------------------------------------------------------------
205 --Definition of get_payment_event_source_info function (private)
206 ---------------------------------------------------------------------
207 FUNCTION get_payment_event_source_info
208 ( p_legal_entity_id IN NUMBER,
209   p_ledger_id IN NUMBER,
210   p_check_id IN NUMBER,
211   p_calling_sequence IN VARCHAR2
212 ) RETURN XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
213 
214 ---------------------------------------------------------------------
215 --Definition of get_invoice_info procedure (private)
216 ---------------------------------------------------------------------
217 PROCEDURE get_invoice_info
218 ( p_invoice_id IN NUMBER,
219   p_org_id OUT NOCOPY NUMBER,
220   p_legal_entity_id OUT NOCOPY NUMBER,
221   p_ledger_id OUT NOCOPY NUMBER,
222   p_transaction_date OUT NOCOPY DATE,
223   p_calling_sequence IN VARCHAR2
224 );
225 
226 ---------------------------------------------------------------------
227 --Definition of get_payment_info procedure (private)
228 ---------------------------------------------------------------------
229 PROCEDURE get_payment_info
230 ( p_check_id IN NUMBER,
231   p_org_id OUT NOCOPY NUMBER,
232   p_legal_entity_id OUT NOCOPY NUMBER,
233   p_ledger_id OUT NOCOPY NUMBER,
234   p_calling_sequence IN VARCHAR2
235 );
236 
237 ---------------------------------------------------------------------
238 --Definition of Insert_Prepayment_Header procedure (private)
239 ---------------------------------------------------------------------
240 PROCEDURE Insert_Prepayment_Header
241 ( p_invoice_id            IN NUMBER,
242   p_invoice_line_number   IN NUMBER,
243   p_accounting_event_id   IN NUMBER,
244   p_accounting_date       IN DATE,
245   p_invoice_adjustment_id IN NUMBER,
246   p_calling_sequence      IN VARCHAR2
247 );
248 
249 ---------------------------------------------------------------------
250 --Definition of Update_Prepayment_Header procedure (private)
251 ---------------------------------------------------------------------
252 -- Bug 4996808 Creating procedure to update the event_id on header
253 PROCEDURE Update_Prepayment_Header
254 ( p_invoice_id            IN NUMBER,
255   p_invoice_line_number   IN NUMBER,
256   p_accounting_event_id   IN NUMBER,
257   p_accounting_date       IN DATE,
258   p_transaction_type      IN VARCHAR2,
259   p_calling_sequence      IN VARCHAR2
260 );
261 
262 --added procedure for bug 8527163
263 PROCEDURE delete_invoice_event
264 (
265   p_accounting_event_id IN NUMBER,
266   p_Invoice_Id IN NUMBER,
267   p_calling_sequence IN VARCHAR2 DEFAULT NULL
268 )
269 IS
270 
271 l_curr_calling_sequence VARCHAR2(2000);
272 
273    -- Logging:
274   l_procedure_name CONSTANT VARCHAR2(30) := 'delete_invoice_event';
275   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
276 
277 l_event_status VARCHAR2(1);
278    l_legal_entity_id NUMBER(15);
279    l_ledger_id NUMBER(15);
280    l_org_id NUMBER(15);
281    l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
282    l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
283    l_transaction_date  AP_INVOICES_ALL.invoice_date%TYPE;
284 
285 BEGIN
286 
287     l_curr_calling_sequence :=
288     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.CREATE_EVENTS';
289 
290   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
291 
292   l_log_msg := 'Begin of procedure '|| l_procedure_name;
293   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
294     FND_LOG.STRING(G_LEVEL_PROCEDURE,
295                    G_MODULE_NAME||l_procedure_name||'.begin',
296                    l_log_msg);
297   END IF;
298    get_invoice_info
299      ( p_invoice_id => p_Invoice_Id,
300        p_org_id => l_org_id, -- OUT
301        p_legal_entity_id => l_legal_entity_id, -- OUT
302        p_ledger_id => l_ledger_id, -- OUT
303        p_transaction_date => l_transaction_date, -- OUT
304        p_calling_sequence => l_curr_calling_sequence
305      );
306 
307     l_event_security_context :=
308       get_event_security_context
309       ( p_org_id => l_org_id,
310         p_calling_sequence => l_curr_calling_sequence
311       );
312 
313 
314     l_event_source_info :=
315       get_invoice_event_source_info
316       ( p_legal_entity_id => l_legal_entity_id,
317         p_ledger_id => l_ledger_id,
318         p_invoice_id => p_Invoice_Id,
319         p_calling_sequence => l_curr_calling_sequence
320       );
321 
322 
323       AP_XLA_EVENTS_PKG.delete_event
324       ( p_event_source_info => l_event_source_info,
325         p_event_id => p_accounting_event_id,
326         p_valuation_method => NULL,
327          p_security_context => l_event_security_context,
328         p_calling_sequence => l_curr_calling_sequence
329        );
330 
331   EXCEPTION
332   WHEN OTHERS THEN
333     IF (SQLCODE <> -20001) THEN
334        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
335        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
336        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
337                     l_curr_calling_sequence);
338        FND_MESSAGE.SET_TOKEN('PARAMETERS',
339               'p_accounting_event_id = '||p_accounting_event_id
340           ||', p_Invoice_Id = '||p_Invoice_Id);
341           FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
342     END IF;
343     APP_EXCEPTION.RAISE_EXCEPTION();
344   END;
345 
346 
347 /*============================================================================
348  |  PROCEDURE -  CREATE_EVENTS (PUBLIC)
349  |
350  |  DESCRIPTION
351  |    This procedure is the single point of entry for the creation of all
352  |    events resulting from user actions. Events not resulting from user
353  |    actions (i.e. Cascade events and Commitment events which are created
354  |    automatically as a result of another event being created) will be
355  |    created from the procedure which is called by Create_Events.
356  |
357  |  PRAMETERS
358  |          p_event_type:Possible values:
359  |                   'INVOICES', 'INVOICE CANCELLATION', 'PAYMENT',
360  |                   'PAYMENT ADJUSTMENT','UPGRADED MANUAL REVERSED PAYMENT',
361  |                   'UPGRADED MANUAL ADJUSTED PAYMENT','PAYMENT CANCELLATION',
362  |                   'PAYMENT CLEARING', 'PAYMENT MATURITY',
363  |                   'PAYMENT MATURITY REVERSAL', 'PAYMENT BATCH'
364  |          p_doc_type(IN):This parameter will be necessary to create events
365  |                    under the classes Credit Memos, Debit Memos, Prpayments,
366  |                    Refunds, Future Dated payments and Reconciled Payments.
367  |                    Possible values:
368  |                    p_event_type 'INVOICES' or 'INVOICE CANCELLATION':
369  |                             'AWT',  'CREDIT,DEBIT',' EXPENSE REPORT',
370  |                             'MIXED','INTEREST', 'PREPAYMENT','QUICKDEFAULT',
371  |                             'QUICKMATCH', 'STANDARD'
372  |                    p_event_type: 'PAYMENT' or 'PAYMENT CANCELLATION':
373  |                             'A' - payment batches
374  |                             'M' - manual payments
375  |                             'Q' - quick payments
376  |                             'R' - refunds
377  |          P_doc_id: check_id for payment
378  |                    invoice_id for invoice
379  |          P_accounting_date:    Accounting Date
380  |          p_accounting_event_id:Accounting event id generated in this
381  |                                procedure
382  |          p_checkrun_name:   Payment batch name
383  |          p_calling_sequence:Debug information
384  |
385  |  KNOWN ISSUES:
386  |
387  |  NOTES:
388  |
389  |  MODIFICATION HISTORY
390  |  Date         Author             Description of Change
391  |
392  *===========================================================================*/
393 
394 PROCEDURE Create_Events(p_event_type           IN    VARCHAR2,
395                         p_doc_type             IN    VARCHAR2,
396                         p_doc_id               IN    NUMBER DEFAULT NULL,
397                         p_accounting_date      IN    DATE,
398                         p_accounting_event_id  OUT   NOCOPY NUMBER,
399                         p_checkrun_name        IN    VARCHAR2,
400                         p_calling_sequence     IN    VARCHAR2 DEFAULT NULL)
401 IS
402 
403   l_event_type VARCHAR2(30);
404   l_curr_calling_sequence VARCHAR2(2000);
405 
406    -- Logging:
407   l_procedure_name CONSTANT VARCHAR2(30) := 'Create_Events';
408   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
409 
410 BEGIN
411 
412   l_curr_calling_sequence :=
413     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.CREATE_EVENTS';
414 
415   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
416 
417   l_log_msg := 'Begin of procedure '|| l_procedure_name;
418   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
419     FND_LOG.STRING(G_LEVEL_PROCEDURE,
420                    G_MODULE_NAME||l_procedure_name||'.begin',
421                    l_log_msg);
422   END IF;
423 
424   ----------------------------------------------------------------
425   -- Calling private procedure to handle differenct events
426   ----------------------------------------------------------------
427 
428   CASE (p_event_type)
429 
430     --------------------------------------------------------------
431     -- CASE: 'INVOICES'
432     --------------------------------------------------------------
433     WHEN ('INVOICES') THEN
434 
435       l_log_msg := 'Before calling procedure Derive_invoice_events';
436       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
437         FND_LOG.STRING(G_LEVEL_PROCEDURE,
438                        G_MODULE_NAME || l_procedure_name,
439                        l_log_msg);
440       END IF;
441 
442       derive_invoice_events(p_invoice_id => p_doc_id,
443                             p_calling_sequence => l_curr_calling_sequence);
444 
445       l_log_msg := 'After Calling Derive_invoice_events procedure';
446       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
447         FND_LOG.STRING(G_LEVEL_PROCEDURE,
448                         G_MODULE_NAME || l_procedure_name,
449                         l_log_msg);
450       END IF;
451 
452     -------------------------------------------------------------
453     -- CASE: 'INVOICE CANCELLATION
454     -------------------------------------------------------------
455     WHEN ('INVOICE CANCELLATION') THEN
456 
457       l_log_msg := 'Before calling procedure Derive_invoice_cancel_events';
458       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
459         FND_LOG.STRING(G_LEVEL_PROCEDURE,
460                        G_MODULE_NAME || l_procedure_name,
461                        l_log_msg);
462       END IF;
463 
464       derive_invoice_cancel_events
465                         (p_invoice_id => p_doc_id,
466                          p_calling_sequence => l_curr_calling_sequence);
467 
468       l_log_msg := 'After calling procedure Derive_invoice_cancel_event';
469       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
470         FND_LOG.STRING(G_LEVEL_PROCEDURE,
471                        G_MODULE_NAME || l_procedure_name,
472                        l_log_msg);
473        END IF;
474     ------------------------------------------------------------
475     -- CASE: 'PAYMENT'
476     ------------------------------------------------------------
477     WHEN ('PAYMENT') THEN
478 
479       l_log_msg := 'Before calling procedure create_payment_event';
480       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
481         FND_LOG.STRING(G_LEVEL_PROCEDURE,
482                        G_MODULE_NAME || l_procedure_name,
483                        l_log_msg);
484       END IF;
485 
486       IF (p_doc_type = 'R') THEN
487         l_event_type := REFUND_RECORDED_TYPE;
488       ELSE
489         l_event_type := PAYMENT_CREATED_TYPE;
490       END IF;
491 
492       p_accounting_event_id :=
493           create_payment_event(p_event_type => l_event_type,
494                                p_check_id => p_doc_id,
495                                p_event_date => p_accounting_date,
496                                p_calling_sequence => l_curr_calling_sequence);
497 
498       l_log_msg := 'p_accounting_event_id = '|| p_accounting_event_id;
499       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
500         FND_LOG.STRING(G_LEVEL_STATEMENT,
501                        G_MODULE_NAME || l_procedure_name,
502                        l_log_msg);
503        END IF;
504 
505       l_log_msg := 'After calling procedure create_payment_event';
506       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
507         FND_LOG.STRING(G_LEVEL_PROCEDURE,
508                        G_MODULE_NAME || l_procedure_name,
509                        l_log_msg);
510        END IF;
511     ------------------------------------------------------------
512     -- CASE: 'REFUND ADJUSTMENT'
513     ------------------------------------------------------------
514     WHEN ('REFUND ADJUSTMENT') THEN  --bug 10336668
515 
516 
517       l_log_msg := 'Before calling procedure derive_payment_adj_event';
518       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
519         FND_LOG.STRING(G_LEVEL_PROCEDURE,
520                        G_MODULE_NAME || l_procedure_name,
521                        l_log_msg);
522       END IF;
523 
524       derive_payment_adj_event
525                        (p_check_id => p_doc_id,
526                         p_accounting_date => p_accounting_date,
527                         p_event_type => MANUAL_REFUND_ADJUSTED_TYPE,
528                         p_accounting_event_id => p_accounting_event_id, --OUT
529                         p_calling_sequence => l_curr_calling_sequence);
530 
531       l_log_msg := 'After calling procedure derive_payment_adj_event';
532       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
533         FND_LOG.STRING(G_LEVEL_PROCEDURE,
534                        G_MODULE_NAME || l_procedure_name,
535                        l_log_msg);
536       END IF;
537     ------------------------------------------------------------
538     -- CASE: 'PAYMENT ADJUSTMENT'
539     ------------------------------------------------------------
540     WHEN ('PAYMENT ADJUSTMENT') THEN
541 
542       l_log_msg := 'Before calling procedure derive_payment_adj_event';
543       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
544         FND_LOG.STRING(G_LEVEL_PROCEDURE,
545                        G_MODULE_NAME || l_procedure_name,
546                        l_log_msg);
547       END IF;
548 
549       derive_payment_adj_event
550                        (p_check_id => p_doc_id,
551                         p_accounting_date => p_accounting_date,
552                         p_event_type => MANUAL_PAYMENT_ADJUSTED_TYPE,
553                         p_accounting_event_id => p_accounting_event_id, --OUT
554                         p_calling_sequence => l_curr_calling_sequence);
555 
556       l_log_msg := 'After calling procedure derive_payment_adj_event';
557       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
558         FND_LOG.STRING(G_LEVEL_PROCEDURE,
559                        G_MODULE_NAME || l_procedure_name,
560                        l_log_msg);
561       END IF;
562     ------------------------------------------------------------
563     -- CASE: 'UPGRADED MANUAL REVERSED PAYMENT'
564     ------------------------------------------------------------
565     WHEN ('UPGRADED MANUAL REVERSED PAYMENT') THEN
566 
567       l_log_msg := 'Before calling procedure derive_payment_adj_event';
568       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
569         FND_LOG.STRING(G_LEVEL_PROCEDURE,
570                        G_MODULE_NAME || l_procedure_name,
571                        l_log_msg);
572       END IF;
573 
574       derive_payment_adj_event
575                        (p_check_id => p_doc_id,
576                         p_accounting_date => p_accounting_date,
577                         p_event_type => UPGRADED_MAN_PAY_REV_TYPE,
578                         p_accounting_event_id => p_accounting_event_id, --OUT
579                         p_calling_sequence => l_curr_calling_sequence);
580 
581       l_log_msg := 'After calling procedure derive_payment_adj_event';
582       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
583         FND_LOG.STRING(G_LEVEL_PROCEDURE,
584                        G_MODULE_NAME || l_procedure_name,
585                        l_log_msg);
586       END IF;
587 
588     ------------------------------------------------------------
589     -- CASE: 'UPGRADED MANUAL ADJUSTED PAYMENT'
590     ------------------------------------------------------------
591     WHEN ('UPGRADED MANUAL ADJUSTED PAYMENT') THEN
592 
593       l_log_msg := 'Before calling procedure derive_payment_adj_event';
594       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
595         FND_LOG.STRING(G_LEVEL_PROCEDURE,
596                        G_MODULE_NAME || l_procedure_name,
597                        l_log_msg);
598       END IF;
599 
600       derive_payment_adj_event
601                        (p_check_id => p_doc_id,
602                         p_accounting_date => p_accounting_date,
603                         p_event_type => UPGRADED_MAN_PAY_ADJ_TYPE,
604                         p_accounting_event_id => p_accounting_event_id, --OUT
605                         p_calling_sequence => l_curr_calling_sequence);
606 
607       l_log_msg := 'After calling procedure derive_payment_adj_event';
608       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
609         FND_LOG.STRING(G_LEVEL_PROCEDURE,
610                        G_MODULE_NAME || l_procedure_name,
611                        l_log_msg);
612       END IF;
613 
614     ------------------------------------------------------------
615     -- CASE: 'PAYMENT CANCELLATION'
616     ------------------------------------------------------------
617     WHEN ('PAYMENT CANCELLATION') THEN
618 
619       IF (p_doc_type = 'R') THEN
620         l_event_type := REFUND_CANCELLED_TYPE;
621       ELSE
622         l_event_type := PAYMENT_CANCELLED_TYPE;
623       END IF;
624 
625       ----------------------------------------------------
626       -- Step 1: Create payment event
627       ----------------------------------------------------
628       l_log_msg := 'Before calling procedure create_payment_event';
629       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
630                FND_LOG.STRING(G_LEVEL_PROCEDURE,
631                               G_MODULE_NAME || l_procedure_name,
632                               l_log_msg);
633       END IF;
634 
635 
636       p_accounting_event_id :=
637          create_payment_event(p_event_type => l_event_type,
638                               p_check_id => p_doc_id,
639                               p_event_date => p_accounting_date,
640                               p_calling_sequence => l_curr_calling_sequence);
641 
642       l_log_msg := 'p_accounting_event_id = '|| p_accounting_event_id;
643       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
647       END IF;
644         FND_LOG.STRING(G_LEVEL_STATEMENT,
645                        G_MODULE_NAME || l_procedure_name,
646                        l_log_msg);
648 
649       l_log_msg := 'After calling Procedure create_payment_event';
650       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
651         FND_LOG.STRING(G_LEVEL_PROCEDURE,
652                        G_MODULE_NAME || l_procedure_name,
653                        l_log_msg);
654       END IF;
655 
656 
657 
658       -----------------------------------------------------
659       -- Step 2: calling update payment event to 'No Action'
660       -----------------------------------------------------
661       l_log_msg := 'comment out procedure no_action_pmt_event_update';
662       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
663         FND_LOG.STRING(G_LEVEL_PROCEDURE,
664                        G_MODULE_NAME || l_procedure_name,
665                        l_log_msg);
666       END IF;
667 
668       -- Bug 4927664  comment out the NoAction update
669       /* start to comment out
670       no_action_pmt_event_update(p_check_id => p_doc_id,
671                                 p_event_type_code => l_event_type,
672                                 p_accounting_date => p_accounting_date,
673                                 p_accounting_event_id => p_accounting_event_id,
674                                 p_calling_sequence => l_curr_calling_sequence);
675 
676       l_log_msg := 'After calling procedure no_action_pmt_event_update';
677       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
678         FND_LOG.STRING(G_LEVEL_PROCEDURE,
679                        G_MODULE_NAME || l_procedure_name,
680                        l_log_msg);
681       END IF;    End of comment out */
682 
683     ------------------------------------------------------------
684     -- CASE: 'PAYMENT CLEARING'
685     ------------------------------------------------------------
686     WHEN ('PAYMENT CLEARING') THEN
687 
688 
689       l_log_msg := 'Before calling procedure create_payment_event';
690       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
691         FND_LOG.STRING(G_LEVEL_PROCEDURE,
692                        G_MODULE_NAME || l_procedure_name,
693                        l_log_msg);
694       END IF;
695 
696       p_accounting_event_id :=
697           create_payment_event(p_event_type => PAYMENT_CLEARED_TYPE,
698                                p_check_id => p_doc_id,
699                                p_event_date => p_accounting_date,
700                                p_calling_sequence => l_curr_calling_sequence);
701 
702       l_log_msg := 'p_accounting_event_id = '|| p_accounting_event_id;
703       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
704         FND_LOG.STRING(G_LEVEL_STATEMENT,
705                        G_MODULE_NAME || l_procedure_name,
706                        l_log_msg);
707       END IF;
708 
709       l_log_msg := 'After calling procedure create_payment_event';
710       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
711         FND_LOG.STRING(G_LEVEL_PROCEDURE,
712                        G_MODULE_NAME || l_procedure_name,
713                        l_log_msg);
714       END IF;
715 
716     ------------------------------------------------------------
717     -- CASE: 'PAYMENT UNCLEARING'
718     ------------------------------------------------------------
719     WHEN ('PAYMENT UNCLEARING') THEN
720 
721       ----------------------------------------------------
722       -- Step 1: Create payment event
723       ----------------------------------------------------
724       l_log_msg := 'Before calling procedure create_payment_event';
725       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
726          FND_LOG.STRING(G_LEVEL_PROCEDURE,
727                         G_MODULE_NAME || l_procedure_name,
728                         l_log_msg);
729       END IF;
730 
731       p_accounting_event_id :=
732         create_payment_event
733         ( p_event_type => PAYMENT_UNCLEARED_TYPE,
734           p_check_id => p_doc_id,
735           p_event_date => p_accounting_date,
736           p_calling_sequence => l_curr_calling_sequence
737         );
738 
739       l_log_msg := 'p_accounting_event_id = '|| p_accounting_event_id;
740       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
741         FND_LOG.STRING(G_LEVEL_STATEMENT,
742                        G_MODULE_NAME || l_procedure_name,
743                        l_log_msg);
744        END IF;
745 
746       l_log_msg := 'After calling procedure create_payment_event';
747       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
748         FND_LOG.STRING(G_LEVEL_PROCEDURE,
749                        G_MODULE_NAME || l_procedure_name,
750                        l_log_msg);
751       END IF;
752 
753       ----------------------------------------------------
754       -- Step 2: Update payment event to 'No Action'
755       ----------------------------------------------------
756       l_log_msg := 'comment out calling procedure no_action_pmt_event_update';
757       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
758         FND_LOG.STRING(G_LEVEL_PROCEDURE,
759                        G_MODULE_NAME || l_procedure_name,
760                        l_log_msg);
761       END IF;
762 
763       -- Bug 4927664  comment out the NoAction update
764       /* start to comment out
765       no_action_pmt_event_update
766       ( p_check_id => p_doc_id,
767         p_event_type_code => PAYMENT_UNCLEARED_TYPE,
768         p_accounting_date => p_accounting_date,
769         p_accounting_event_id => p_accounting_event_id,
770         p_calling_sequence => l_curr_calling_sequence
771       );
772 
773       l_log_msg := 'After calling procedure no_action_pmt_event_update';
774       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
775         FND_LOG.STRING(G_LEVEL_PROCEDURE,
776                        G_MODULE_NAME || l_procedure_name,
777                        l_log_msg);
778       END IF;    End of comment out */
779 
780     ------------------------------------------------------------
781     -- CASE: 'PAYMENT MATURITY'
782     ------------------------------------------------------------
783     WHEN ('PAYMENT MATURITY') THEN
784 
785       l_log_msg := 'Before calling procedure create_payment_event';
786       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
787         FND_LOG.STRING(G_LEVEL_PROCEDURE,
788                        G_MODULE_NAME || l_procedure_name,
789                        l_log_msg);
790       END IF;
791 
792       p_accounting_event_id :=
793         create_payment_event
794         ( p_event_type => PAYMENT_MATURED_TYPE,
795           p_check_id => p_doc_id,
796           p_event_date => p_accounting_date,
797           p_calling_sequence => l_curr_calling_sequence
798         );
799 
800       l_log_msg := 'p_accounting_event_id = '|| p_accounting_event_id;
801       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
802         FND_LOG.STRING(G_LEVEL_STATEMENT,
803                        G_MODULE_NAME || l_procedure_name,
804                        l_log_msg);
805       END IF;
806 
807       l_log_msg := 'After calling procedure create_payment_event';
808       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
809         FND_LOG.STRING(G_LEVEL_PROCEDURE,
810                        G_MODULE_NAME || l_procedure_name,
811                        l_log_msg);
812       END IF;
813 
814     ------------------------------------------------------------
815     -- CASE: 'PAYMENT MATURITY REVERSAL'
816     ------------------------------------------------------------
817     WHEN ('PAYMENT MATURITY REVERSAL') THEN
818 
819        ----------------------------------------------------
820       -- Step 1: Create payment event
821       ----------------------------------------------------
822       l_log_msg := 'Before calling procedure create_payment_event';
823       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
824         FND_LOG.STRING(G_LEVEL_PROCEDURE,
825                        G_MODULE_NAME || l_procedure_name,
826                        l_log_msg);
827       END IF;
828 
829       p_accounting_event_id :=
830         create_payment_event
831         ( p_event_type => PAYMENT_MATURITY_REVERSED_TYPE,
832           p_check_id => p_doc_id,
833           p_event_date => p_accounting_date,
834           p_calling_sequence => l_curr_calling_sequence
835         );
836 
837       l_log_msg := 'p_accounting_event_id = '|| p_accounting_event_id;
838       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
839         FND_LOG.STRING(G_LEVEL_STATEMENT,
840                        G_MODULE_NAME || l_procedure_name,
841                        l_log_msg);
842       END IF;
843 
844       l_log_msg := 'After calling procedure create_payment_event';
845       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
846         FND_LOG.STRING(G_LEVEL_PROCEDURE,
847                        G_MODULE_NAME || l_procedure_name,
848                        l_log_msg);
849       END IF;
850 
851       ----------------------------------------------------
852       -- Step 2: Update payment event status to 'No Action'
853       ----------------------------------------------------
854       l_log_msg := 'comment out procedure no_action_pmt_event_update';
855       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
856          FND_LOG.STRING(G_LEVEL_PROCEDURE,
857                         G_MODULE_NAME || l_procedure_name,
858                         l_log_msg);
859       END IF;
860 
861       -- Bug 4927664  comment out the NoAction update
862       /* start to comment out
863       no_action_pmt_event_update
864       ( p_check_id => p_doc_id,
865         p_event_type_code => PAYMENT_MATURITY_REVERSED_TYPE,
866         p_accounting_date => p_accounting_date,
867         p_accounting_event_id => p_accounting_event_id,
868         p_calling_sequence => l_curr_calling_sequence
869       );
870 
871       l_log_msg := 'After Calling procedure no_pmt_event_update';
872       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
873         FND_LOG.STRING(G_LEVEL_PROCEDURE,
874                        G_MODULE_NAME || l_procedure_name,
875                        l_log_msg);
876       END IF;  End of comment out */
877 
878     ELSE --other p_event_type
879 
880       l_log_msg := 'Exception calling sequence '
881                      ||l_curr_calling_sequence
882                      ||' Error:Wrong p_event_type= '
883                      ||p_event_type;
884       IF (G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL ) THEN
885         FND_LOG.STRING(G_LEVEL_EXCEPTION,
886                        G_MODULE_NAME || l_procedure_name,
887                        l_log_msg);
888       END IF;
889 
890       APP_EXCEPTION.RAISE_EXCEPTION();
891 
892   END CASE; --p_event_type
893 
894   l_log_msg := 'End of procedure '|| l_procedure_name;
895   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
896     FND_LOG.STRING(G_LEVEL_PROCEDURE,
897                    G_MODULE_NAME||l_procedure_name||'.end',
898                    l_log_msg);
899   END IF;
900 
901 EXCEPTION
902   WHEN OTHERS THEN
903     IF (SQLCODE <> -20001) THEN
904        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
905        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
906        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
907                     l_curr_calling_sequence);
908        FND_MESSAGE.SET_TOKEN('PARAMETERS',
909               'p_doc_type = '||p_doc_type
910           ||', p_doc_id = '||p_doc_id
911           ||', p_accounting_date = '||p_accounting_date
912           ||', p_checkrun_name = '||p_checkrun_name);
913           FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
914     END IF;
915     APP_EXCEPTION.RAISE_EXCEPTION();
916 
917 END create_events;
918 
919 /*============================================================================
920  |  PROCEDURE -  DERIVE_INVOICE_EVENTS (PRIVATE)
921  |
922  |  DESCRIPTION
923  |    This procedure is responsible for creating Invoice Validated, Invoice
924  |    Adjusted (and corresponding events for Credit Memos, Debit Memos, and |    Prepayments), Prepayment Applied and Unapplied Events.
925  |
926  |  PRAMETERS
927  |          p_invoice_id: Invoice ID
928  |          p_calling_sequence: Debug info
929  |
930  |  KNOWN ISSUES:
931  |
932  |  NOTES:
933  |
934  |  MODIFICATION HISTORY
935  |  Date         Author             Description of Change
936  |
937  *===========================================================================*/
938 
939 PROCEDURE Derive_Invoice_Events (p_invoice_id       IN     NUMBER,
940                                  p_calling_sequence IN     VARCHAR2)
941 IS
942 
943 ----------------------------------------------------------------------------
944 -- We will check if the invoice is approved and that an event does not
945 -- already exist for this distribution.  If encumbrances are being used, we
946 -- only want to select distributions with a match_status_flag of 'A',
947 -- otherwise we want to choose distributions with a status of 'A' or 'T'.
948 -----------------------------------------------------------------------------
949   --bug 7421528  commented the previous select statement and added a new one.
950 
951 CURSOR Inv_event_dists
952 IS
953   SELECT accounting_date accounting_date,
954          SUM(amount) dist_amount,
955          DECODE (line_type_lookup_code, 'PREPAY','PREPAY','OTHER') dist_type,
956         /*decode (line_type_lookup_code, 'PREPAY', invoice_distribution_id, -1)
957                                 invoice_distribution_id,*/
958         /* Bug 6931461: invoice_line_number invoice_line_number */
959         DECODE(line_type_lookup_code, 'PREPAY', invoice_line_number, 1)
960         invoice_line_number
961   FROM
962     (
963       SELECT accounting_date ,
964         accounting_event_id ,
965         invoice_line_number,
966         invoice_id ,
967         amount ,
968         line_type_lookup_code ,
969         parent_reversal_id ,
970         set_of_books_id ,
971         org_id ,
972         prepay_distribution_id ,
973         charge_applicable_to_dist_id ,
974         cancellation_flag ,
975         match_status_flag ,
976         awt_invoice_payment_id
977       FROM ap_invoice_distributions_all
978     UNION
979     SELECT accounting_date ,
980       accounting_event_id ,
981       invoice_line_number,
982       invoice_id ,
983       amount ,
984       line_type_lookup_code ,
985       parent_reversal_id ,
986       set_of_books_id ,
987       org_id ,
988       prepay_distribution_id ,
989       charge_applicable_to_dist_id ,
990       cancellation_flag ,
991       match_status_flag ,
992       awt_invoice_payment_id
993     FROM ap_self_assessed_tax_dist_all ) AID,
994     financials_system_parameters FSP
995   WHERE AID.invoice_id = P_invoice_id
996   AND AID.awt_invoice_payment_id IS NULL
997   AND AID.org_id = FSP.org_id -- Bug 4516136
998   AND AID.set_of_books_id = FSP.set_of_books_id
999   /*Bug 5608968 Avoid full index scan of fsp */
1000   AND (AID.prepay_distribution_id IS NULL -- prepay_tax_parent_id obsoleted
1001   OR AID.charge_Applicable_to_dist_id IS NULL) --Added for bug 4643339
1002   AND AID.accounting_event_id IS NULL
1003   AND NVL(AID.cancellation_flag, 'N') = 'N' -- replaced cancellation_date
1004   AND ( (NVL(FSP.purch_encumbrance_flag,'N') = 'N'
1005   AND match_Status_flag IN ('T','A') )
1006   OR ((NVL(FSP.purch_encumbrance_flag,'N') = 'Y'
1007   AND match_Status_flag = 'A')))
1008     /*since 'OTHER' comes before 'PREPAY' alphabetically, a prepayment
1009       event will not be created first */
1010   GROUP BY accounting_date,
1011     DECODE (line_type_lookup_code, 'PREPAY','PREPAY','OTHER'),
1012     /* Bug 6718967. Fix to create two events for prepayment applied
1013      and unapplied. */
1014     DECODE (line_type_lookup_code, 'PREPAY', DECODE(NVL(parent_reversal_id,-99)
1015     , -99, 1, 2), 3),
1016     /* decode (line_type_lookup_code, 'PREPAY',
1017                                        invoice_distribution_id, -1), */
1018     DECODE(line_type_lookup_code, 'PREPAY', invoice_line_number, 1) --Bug6931461
1019   ORDER BY dist_type,
1020     accounting_date;
1021 
1022   CURSOR prepay_adj_events(l_prepay_app_event_id NUMBER,
1023                           l_accounting_date DATE) is
1024   SELECT APPH.accounting_event_id
1025   FROM AP_PREPAY_HISTORY_ALL APPH, AP_INVOICE_DISTRIBUTIONS AID
1026   WHERE APPH.related_prepay_app_Event_id = l_prepay_app_event_id
1027   AND   APPH.invoice_adjustment_event_id = AID.accounting_event_id
1028   AND   nvl(APPH.posted_flag,'N') = 'N';
1029   --AND   AID.accounting_date = l_accounting_date; Commented for bug 10132577
1030 
1031   l_event_num NUMBER;
1032   l_accounting_event_id NUMBER := NULL;
1033 
1034   l_event_type VARCHAR2(30);
1035   l_event_class VARCHAR2(30);
1036   l_same_gl_prepay_date DATE;
1037   l_accounting_date DATE;
1038   l_pay_accounting_event_id NUMBER;
1039   l_prepay_event_id NUMBER;
1040   l_event_status VARCHAR2(1);
1041   l_prepay_Adj_count NUMBER;
1042 
1043   l_legal_entity_id NUMBER(15);
1044   l_ledger_id NUMBER(15);
1045   l_org_id NUMBER(15);
1046   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
1047   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
1048   l_prepay_app_event_id NUMBER;
1049   l_inv_adj_event_id    NUMBER;
1050   l_curr_calling_sequence VARCHAR2(2000);
1051   l_transaction_date  AP_INVOICES_ALL.invoice_date%TYPE;
1052 
1053   -- Logging:
1054   l_procedure_name CONSTANT VARCHAR2(30) := 'DERIVE_INVOICE_EVENTS';
1055   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
1056 
1057   TYPE l_inv_dist_list IS TABLE OF ap_invoice_distributions.invoice_distribution_id%TYPE;
1058   l_inv_dist_tab  l_inv_dist_list;
1059 
1060 BEGIN
1061 
1062   l_curr_calling_sequence :=
1063     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.DERIVE_INVOICE_EVENTS';
1064 
1065   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1066 
1067   l_log_msg := 'Begin of procedure '|| l_procedure_name;
1068   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1069       FND_LOG.STRING(G_LEVEL_PROCEDURE,
1070                      G_MODULE_NAME||l_procedure_name||'.begin',
1071                      l_log_msg);
1072   END IF;
1073 
1074   --------------------------------------------------------------------
1075   -- Figure out the existing adjustment event id.
1076   --------------------------------------------------------------------
1077   FOR event_dist_rec IN inv_event_dists LOOP
1078 
1079     l_accounting_event_id := NULL;
1080     l_pay_accounting_event_id := NULL;     --bug9973070
1081     l_prepay_event_id := NULL;             --bug9973070
1082 
1083     SELECT COUNT(distinct(accounting_event_id))
1084     INTO   l_event_num
1085     FROM   ap_invoice_distributions
1086     WHERE  invoice_id = p_invoice_id;
1087 
1088 
1089 
1090     -- Added for prepayment events
1091     IF (event_dist_rec.dist_type = 'PREPAY') THEN
1092 
1093       IF (event_dist_rec.dist_amount < 0) THEN
1094         l_event_type := PREPAYMENT_APPLIED_TYPE;
1095       ELSE
1096         l_event_type := PREPAYMENT_UNAPPLIED_TYPE;
1097       END IF;
1098       l_event_class := PREPAYMENT_APPLICATIONS_CLASS;
1099 
1100       -- if an accounting event already exists for the invoice line related
1101       -- to this distribution
1102       -- then stamp this distribution with that the ID of that
1103       BEGIN
1104 --11659317
1105         SELECT distinct(AID.accounting_event_id)
1106         INTO   l_accounting_event_id
1107         FROM   ap_invoice_distributions AID,
1108                ap_invoice_lines AIL,
1109 	       xla_events xe
1110         WHERE  AID.accounting_date = event_dist_rec.accounting_date
1111         AND    AIL.invoice_id = P_invoice_id
1112         AND    AIL.line_number = event_dist_rec.invoice_line_number
1113         AND    AIL.invoice_id = AID.invoice_id
1114         AND    AIL.line_number = AID.invoice_line_number
1115         AND    AID.accounting_date = AIL.accounting_date
1116         AND    AID.line_type_lookup_code = 'PREPAY'
1117         AND    nvl(posted_flag,'N') = 'N'
1118         AND    sign(AID.amount) = sign(event_dist_rec.dist_amount)
1119         AND    AID.accounting_event_id IS NOT NULL
1120 	AND    xe.application_id =200
1121         AND    xe.event_id =AID.accounting_event_id
1122         AND     xe.process_status_code <> 'P';
1123 
1124       EXCEPTION
1125         WHEN NO_DATA_FOUND THEN
1126           l_log_msg := 'When no_data_found';
1127           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1128             FND_LOG.STRING(G_LEVEL_PROCEDURE,
1129                            G_MODULE_NAME || l_procedure_name,
1130                            l_log_msg);
1131           END IF;
1132 
1133           l_log_msg := 'Before calling procedure create_invoice_event';
1134           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1135             FND_LOG.STRING(G_LEVEL_PROCEDURE,
1136                            G_MODULE_NAME || l_procedure_name,
1137                            l_log_msg);
1138           END IF;
1139 
1140           l_accounting_event_id :=
1141           create_invoice_event (p_event_type => l_event_type,
1142                                 p_invoice_id => p_invoice_id,
1143                                 p_event_date => event_dist_rec.accounting_date,
1144                                 p_calling_sequence => l_curr_calling_sequence);
1145 
1146 
1147          l_log_msg := 'After calling procedure create_invoice_event';
1148          IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1149            FND_LOG.STRING(G_LEVEL_PROCEDURE,
1150                           G_MODULE_NAME || l_procedure_name,
1151                           l_log_msg);
1152          END IF;
1153 
1154          IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1155            FND_LOG.STRING(G_LEVEL_PROCEDURE,
1156                           G_MODULE_NAME || l_procedure_name,
1157                           l_log_msg);
1158          END IF;
1159 
1160          -- Bug 4996808. Calling the update prepay header instead of the
1161          -- insert since the prepay header will be created during validation
1162          -- before the events are created.
1163          Update_Prepayment_Header
1164                  (p_invoice_id ,
1165                   p_invoice_line_number => event_dist_rec.invoice_line_number,
1166                   p_accounting_event_id => l_accounting_event_id,
1167                   p_accounting_date => event_dist_rec.accounting_date,
1168                   p_transaction_type => l_event_type,
1169                   p_calling_sequence => l_curr_calling_sequence);
1170 
1171          l_log_msg := 'After calling procedure update_prepayment_header';
1172          IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1173            FND_LOG.STRING(G_LEVEL_PROCEDURE,
1174                           G_MODULE_NAME || l_procedure_name,
1175                           l_log_msg);
1176          END IF;
1177       END;
1178 
1179       IF (l_event_type = PREPAYMENT_UNAPPLIED_TYPE) THEN
1180 
1181         -- Update event Prepay Application Adjustment events related to this
1182         -- Prepayment Application to 'No Action'
1183         -- Bug 8547225, posted_flag should be 'N' for AID, not AID2
1184 
1185         BEGIN
1186           SELECT MAX(AID2.accounting_event_id)
1187           INTO   l_prepay_app_event_id
1188           FROM   AP_INVOICE_DISTRIBUTIONS AID, AP_INVOICE_DISTRIBUTIONS AID2
1189           WHERE  AID.invoice_id = p_invoice_id
1190           AND    AID.invoice_line_number = event_dist_rec.invoice_line_number
1191           AND    AID.parent_reversal_id = AID2.invoice_distribution_id
1192           --AND    AID.accounting_date = AID2.accounting_date Commented for bug 10132577
1193           AND    nvl(AID.posted_flag,'N') = 'N';
1194 
1195         EXCEPTION
1196           WHEN NO_DATA_FOUND THEN
1197              l_prepay_app_event_id := -1;
1198 
1199         END;
1200 
1201         IF l_prepay_app_event_id <> -1 THEN
1202 
1203             l_log_msg := 'Before calling procedure get_invoice_info';
1204             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1205               FND_LOG.STRING(G_LEVEL_PROCEDURE,
1206                              G_MODULE_NAME || l_procedure_name,
1207                              l_log_msg);
1208             END IF;
1209 
1210             get_invoice_info(p_invoice_id => p_invoice_id,
1211                          p_org_id => l_org_id, -- OUT
1212                          p_legal_entity_id => l_legal_entity_id, -- OUT
1213                          p_ledger_id => l_ledger_id, -- OUT
1214                          p_transaction_date => l_transaction_date, -- OUT
1215                          p_calling_sequence => l_curr_calling_sequence);
1216 
1217             l_log_msg := 'After calling procedure get_insert_info executed';
1218             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1219                FND_LOG.STRING(G_LEVEL_PROCEDURE,
1220                               G_MODULE_NAME || l_procedure_name,
1221                               l_log_msg);
1222             END IF;
1223 
1224             l_log_msg :='Before calling proc get_event_security_context';
1225             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1226               FND_LOG.STRING(G_LEVEL_PROCEDURE,
1227                              G_MODULE_NAME || l_procedure_name,
1228                              l_log_msg);
1229             END IF;
1230 
1231             l_event_security_context :=
1232                    get_event_security_context(p_org_id => l_org_id,
1233                             p_calling_sequence => l_curr_calling_sequence);
1234 
1235             l_log_msg := 'After calling proc get_event_security_context';
1236             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1237               FND_LOG.STRING(G_LEVEL_PROCEDURE,
1238                              G_MODULE_NAME || l_procedure_name,
1242             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1239                              l_log_msg);
1240             END IF;
1241 
1243               l_log_msg := 'Before calling proc get_invoice_event_source_info';
1244               FND_LOG.STRING(G_LEVEL_PROCEDURE,
1245                              G_MODULE_NAME || l_procedure_name,
1246                              l_log_msg);
1247             END IF;
1248 
1249             l_event_source_info :=
1250                get_invoice_event_source_info
1251                    (p_legal_entity_id => l_legal_entity_id,
1252                     p_ledger_id => l_ledger_id,
1253                     p_invoice_id => p_invoice_id,
1254                     p_calling_sequence => l_curr_calling_sequence);
1255 
1256             l_log_msg := 'After calling proc get_invoice_envent_source_info';
1257             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1258               FND_LOG.STRING(G_LEVEL_PROCEDURE,
1259                              G_MODULE_NAME || l_procedure_name,
1260                              l_log_msg);
1261             END IF;
1262 
1263             l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.UPDATE_EVENT';
1264             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1265               FND_LOG.STRING(G_LEVEL_PROCEDURE,
1266                              G_MODULE_NAME || l_procedure_name,
1267                              l_log_msg);
1268             END IF;
1269 
1270             -- Bug 4748373. Modified the event type to PREPAYMENT UNAPPLIED from
1271             -- PREPAYMENT APPLICATION UNAPPLIED
1272             --Update the Prepayment Unapplication event to No Action
1273 
1274             -- Bug 4927664. For now comment out the event NOACTION update
1275             /* Start comment out
1276              AP_XLA_EVENTS_PKG.UPDATE_EVENT
1277                 (p_event_source_info => l_event_source_info,
1278                  p_event_id          => l_Accounting_Event_id,
1279                  p_event_type_code   => 'PREPAYMENT UNAPPLIED',
1280                  p_event_date        => NULL,
1281                  p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION,
1282                  p_valuation_method  => NULL,
1283                  p_security_context  => l_event_security_context,
1284                  p_calling_sequence  => l_curr_calling_sequence);
1285 
1286             l_log_msg := 'After calling AP_XLA_EVENTS_PKG.UPDATE_EVENT';
1287             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1288               FND_LOG.STRING(G_LEVEL_PROCEDURE,
1289                              G_MODULE_NAME || l_procedure_name,
1290                              l_log_msg);
1291             END IF;    End comment out */
1292 
1293             l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.UPDATE_EVENT';
1294             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1295               FND_LOG.STRING(G_LEVEL_PROCEDURE,
1296                              G_MODULE_NAME || l_procedure_name,
1297                              l_log_msg);
1298             END IF;
1299 
1300             -- Bug 4748373. Modified the event type to PREPAYMENT APPLIED from
1301             -- PREPAYMENT APPLICATION APPLIED
1302             --Update the Prepayment Application Event to No Action
1303             -- Bug 4927664. For now comment out the event NOACTION update
1304             /* Start comment out
1305             AP_XLA_EVENTS_PKG.UPDATE_EVENT
1306                 (p_event_source_info => l_event_source_info,
1307                  p_event_id          => l_prepay_app_event_id,
1308                  p_event_type_code   => 'PREPAYMENT APPLIED',
1309                  p_event_date        => NULL,
1310                  p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION,
1311                  p_valuation_method  => NULL,
1312                  p_security_context  => l_event_security_context,
1313                  p_calling_sequence  => l_curr_calling_sequence);
1314 
1315             l_log_msg := 'After calling AP_XLA_EVENTS_PKG.UPDATE_EVENT';
1316             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1317               FND_LOG.STRING(G_LEVEL_PROCEDURE,
1318                              G_MODULE_NAME || l_procedure_name,
1319                              l_log_msg);
1320             END IF;   End of comment out */
1321 
1322 
1323             l_Accounting_date:= event_dist_rec.accounting_date;
1324 
1325             l_log_msg := 'prepay_adj_event loop begin.';
1326             IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1327               FND_LOG.STRING(G_LEVEL_STATEMENT,
1328                              G_MODULE_NAME || l_procedure_name,
1329                              l_log_msg);
1330             END IF;
1331 
1332             FOR l_prepay_adj_event_id IN
1333                      prepay_adj_events
1334                          (l_prepay_app_event_id,
1335                           l_Accounting_date) LOOP
1336 
1337               l_log_msg := 'Inside the prepay_adj_events cursor loop';
1338               IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1339                 FND_LOG.STRING(G_LEVEL_PROCEDURE,
1340                                G_MODULE_NAME || l_procedure_name,
1341                                l_log_msg);
1342               END IF;
1343 
1344               -- Bug 4748373. Modified the event type to PREPAYMENT APPLIED from
1345               -- PREPAYMENT APPLICATION UNAPPLIED
1346               --Update the Prepayment Application Adjusted Event to No Action
1347               -- Bug 4927664. For now comment out the event NOACTION update
1348               -- Bug 8547225 Uncomment the event NOACTION update for PREPAYMENT
1349               -- APPL ADJUSTMENT event type, and pass appropriate adj event_id
1350 
1351               AP_XLA_EVENTS_PKG.UPDATE_EVENT
1352                 (p_event_source_info => l_event_source_info,
1356                  p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION,
1353                  p_event_id          => l_prepay_adj_event_id.accounting_event_id,
1354                  p_event_type_code   => NULL,
1355                  p_event_date        => NULL,
1357                  p_valuation_method  => NULL,
1358                  p_security_context  => l_event_security_context,
1359                  p_calling_sequence  => l_curr_calling_sequence);
1360 
1361               l_log_msg := 'After calling AP_XLA_EVENTS_PKG.UPDATE_EVENT';
1362               IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1363                 FND_LOG.STRING(G_LEVEL_PROCEDURE,
1364                                G_MODULE_NAME || l_procedure_name,
1365                                l_log_msg);
1366               END IF;          --bug 8547225, uncommented the call to update_event
1367 
1368             END LOOP; --prepay_adj_events
1369 
1370             l_log_msg := 'prepay_adj_event loop end.';
1371             IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
1372               FND_LOG.STRING(G_LEVEL_STATEMENT,
1373                              G_MODULE_NAME || l_procedure_name,
1374                              l_log_msg);
1375             END IF;
1376           END IF;
1377 
1378         END IF;
1379 
1380     ELSIF NVL(l_event_num,0)= 0 THEN
1381 
1382       SELECT DECODE ( AI.invoice_type_lookup_code,
1383                       'CREDIT', CREDIT_MEMO_VALIDATED_TYPE,
1384                       'DEBIT', DEBIT_MEMO_VALIDATED_TYPE,
1385                       'PREPAYMENT', PREPAYMENT_VALIDATED_TYPE,
1386                        INVOICE_VALIDATED_TYPE) event_type,
1387              DECODE ( AI.invoice_type_lookup_code,
1388                       'CREDIT', CREDIT_MEMOS_CLASS,
1389                       'DEBIT', DEBIT_MEMOS_CLASS,
1390                       'PREPAYMENT', PREPAYMENTS_CLASS,
1391                        INVOICES_CLASS) event_class
1392       INTO l_event_type, l_event_class
1393       FROM ap_invoices_all AI
1394       WHERE AI.invoice_id = p_invoice_id;
1395 
1396       l_log_msg := 'Before calling procedure create_invoice_event';
1397       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1398         FND_LOG.STRING(G_LEVEL_PROCEDURE,
1399                        G_MODULE_NAME || l_procedure_name,
1400                        l_log_msg);
1401       END IF;
1402 
1403       l_accounting_event_id :=
1404         create_invoice_event
1405         ( p_event_type => l_event_type,
1406           p_invoice_id => p_invoice_id,
1407           p_event_date => event_dist_rec.accounting_date,
1408           p_calling_sequence => l_curr_calling_sequence
1409         );
1410 
1411       l_log_msg := 'After calling procedure create_invoice_event executed';
1412       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1413         FND_LOG.STRING(G_LEVEL_PROCEDURE,
1414                        G_MODULE_NAME || l_procedure_name,
1415                        l_log_msg);
1416       END IF;
1417 
1418     ELSE
1419 
1420       SELECT DECODE ( AI.invoice_type_lookup_code,
1421              'CREDIT', CREDIT_MEMO_ADJUSTED_TYPE,
1422              'DEBIT', DEBIT_MEMO_ADJUSTED_TYPE,
1423              'PREPAYMENT', PREPAYMENT_ADJUSTED_TYPE,
1424              INVOICE_ADJUSTED_TYPE) event_type,
1425         DECODE ( AI.invoice_type_lookup_code,
1426              'CREDIT', CREDIT_MEMOS_CLASS,
1427              'DEBIT', DEBIT_MEMOS_CLASS,
1428              'PREPAYMENT', PREPAYMENTS_CLASS,
1429              INVOICES_CLASS) event_class
1430       INTO l_event_type, l_event_class
1431       FROM ap_invoices_all AI
1432       WHERE AI.invoice_id = p_invoice_id;
1433    --11659317
1434       BEGIN
1435         SELECT MAX(accounting_event_id)
1436         INTO   l_accounting_event_id
1437         FROM   ap_invoice_distributions,
1438  	       xla_events xe,
1439 	       xla_transaction_entities_upg xte --bug 13508211
1440         WHERE  invoice_id = p_invoice_id
1441         AND    NVL(posted_flag, 'N') <> 'Y'
1442         AND    line_type_lookup_code <> 'PREPAY'
1443         AND    prepay_distribution_id is NULL --for prepay tax
1444         AND    accounting_date = event_dist_rec.accounting_date
1445         AND    nvl(cancellation_flag, 'N') = 'N' /* Bug 11663644 */
1446         AND    awt_invoice_payment_id is null -- Bug 7410001
1447         AND    xe.application_id =200
1448         AND    xe.event_id = accounting_event_id
1449 	--bug 13508211
1450 	AND    xe.application_id = xte.application_id
1451 	AND    xe.entity_id = xte.entity_id
1452 	AND    xte.entity_code <> 'AP_PAYMENTS'
1453         AND    xe.process_status_code <> 'P';
1454 
1455       EXCEPTION
1456         WHEN NO_DATA_FOUND THEN
1457           l_accounting_event_id := NULL;
1458       END;
1459 
1460       BEGIN
1461         -- bug9973070, considering the Encumbered prepay distribution
1462         -- as well.
1463         --
1464         SELECT MAX(accounting_event_id)
1465         INTO   l_prepay_event_id
1466         FROM   ap_invoice_distributions AID
1467         WHERE  AID.invoice_id = p_invoice_id
1468         AND    AID.line_type_lookup_code = 'PREPAY'
1469         AND    AID.amount < 0
1470         AND    (AID.posted_flag = 'Y' OR
1471                 AID.encumbered_flag = 'Y');
1472 
1473       EXCEPTION
1474         WHEN NO_DATA_FOUND THEN
1475           l_prepay_event_id := NULL;
1476       END;
1477 
1478      BEGIN
1479         SELECT MAX(accounting_event_id)
1480         INTO   l_pay_accounting_event_id
1481         FROM   ap_invoice_payments AIP
1482         WHERE  AIP.invoice_id = p_invoice_id
1483         AND    AIP.posted_flag = 'Y';
1484       EXCEPTION
1485         WHEN NO_DATA_FOUND THEN
1486           l_pay_accounting_event_id := NULL;
1487       END;
1488 
1492 
1489       -- If an unaccounted Invoice Validates or Invoice Adjustment
1490       -- event does not already exist for that date, we will create
1491       -- a new event.
1493       -- bug fix 5694577: fixed the following condition to raise invoice
1494       -- validate events properly.
1495       -- IF ( (l_accounting_event_id IS NULL)
1496       --      OR
1497       --      (l_pay_accounting_event_id IS NOT NULL)
1498       --      OR
1499       --      (l_prepay_event_id IS NOT NULL)
1500       --    ) THEN
1501 
1502       IF (l_accounting_event_id IS NULL) THEN
1503 
1504         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1505           l_log_msg := 'Before calling procedure create_invoice_event';
1506           FND_LOG.STRING(G_LEVEL_PROCEDURE,
1507                          G_MODULE_NAME || l_procedure_name,
1508                          l_log_msg);
1509         END IF;
1510 
1511         l_accounting_event_id :=
1512           create_invoice_event
1513           ( p_event_type => l_event_type,
1514             p_invoice_id => p_invoice_id,
1515             p_event_date => event_dist_rec.accounting_date,
1516             p_calling_sequence => l_curr_calling_sequence
1517           );
1518 
1519         l_log_msg := 'After calling procedure create_invoice_event executed';
1520         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1521           FND_LOG.STRING(G_LEVEL_PROCEDURE,
1522                          G_MODULE_NAME || l_procedure_name,
1523                          l_log_msg);
1524         END IF;
1525 
1526 /*   start commented by abhsaxen for bug 9159069
1527  *   Moving this code because cascade event will work only
1528  *   if invoice_distribution is populated earlier
1529  *   This code is added below (after ap_invoice_distributions update statements).
1530 
1531         -- raise payment/prepayment cascade event only when there is payment
1532         -- or prepayment application existed for the invoice.
1533 
1534         IF ((l_pay_accounting_event_id IS NOT NULL)
1535            OR
1536            (l_prepay_event_id IS NOT NULL))
1537         THEN
1538 
1539           l_log_msg := 'Before calling procedure derive_cascade_events';
1540           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1541             FND_LOG.STRING(G_LEVEL_PROCEDURE,
1542                            G_MODULE_NAME || l_procedure_name,
1543                            l_log_msg);
1544           END IF;
1545 
1546           -- Bug 6996047. Passing accounting date so that the adjustment
1547           -- events are created in the same gl date as the invoice event.
1548           derive_cascade_events
1549           ( p_invoice_id => p_invoice_id,
1550             p_adj_accounting_event_id => l_accounting_event_id,
1551             p_accounting_date => event_dist_rec.accounting_date,
1552             p_calling_sequence => l_curr_calling_sequence
1553           );
1554 
1555           l_log_msg := 'After calling proc derive_cascade_events executed';
1556           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1557             FND_LOG.STRING(G_LEVEL_PROCEDURE,
1558                            G_MODULE_NAME || l_procedure_name,
1559                            l_log_msg);
1560           END IF;
1561         END IF;
1562  end commented by abhsaxen for bug 9159069*/
1563       ELSE
1564 
1565         -- For cases where we are not creating the event (since it already
1566         -- exists), we want to check for new status of those existing events.
1567 
1568         IF
1569         ( is_event_complete ( p_doc_type => INVOICES_ENTITY,
1570                               p_source_id => p_invoice_id,
1571                               p_calling_sequence => l_curr_calling_sequence
1572           ) = 'CREATED') THEN
1573           l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED;
1574         ELSE
1575           l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
1576         END IF;
1577 
1578         get_invoice_info
1579         ( p_invoice_id => p_invoice_id,
1580           p_org_id => l_org_id, -- OUT
1581           p_legal_entity_id => l_legal_entity_id, -- OUT
1582           p_ledger_id => l_ledger_id, -- OUT
1583           p_transaction_date => l_transaction_date, -- OUT
1584           p_calling_sequence => l_curr_calling_sequence
1585         );
1586 
1587         l_event_security_context :=
1588           get_event_security_context
1589           ( p_org_id => l_org_id,
1590             p_calling_sequence => l_curr_calling_sequence
1591           );
1592 
1593         l_event_source_info :=
1594           get_invoice_event_source_info
1595           ( p_legal_entity_id => l_legal_entity_id,
1596             p_ledger_id => l_ledger_id,
1597             p_invoice_id => p_invoice_id,
1598             p_calling_sequence => l_curr_calling_sequence
1599           );
1600 
1601         l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
1602         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1603           FND_LOG.STRING(G_LEVEL_PROCEDURE,
1604                          G_MODULE_NAME || l_procedure_name,
1605                          l_log_msg);
1606         END IF;
1607 
1608         AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS
1609         ( p_event_source_info => l_event_source_info,
1610           p_event_class_code => l_event_class,
1611           p_event_type_code => l_event_type,
1612           p_event_date => event_dist_rec.accounting_date,
1613           p_event_status_code => l_event_status,
1614           p_valuation_method => NULL,
1615           p_security_context => l_event_security_context,
1616           p_calling_sequence => l_curr_calling_sequence
1617         );
1618 
1619        l_log_msg := 'After calling AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
1620        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1621          FND_LOG.STRING(G_LEVEL_PROCEDURE,
1622                         G_MODULE_NAME || l_procedure_name,
1623                         l_log_msg);
1624         END IF;
1625 
1626       END IF;
1627 
1628     END IF;
1629 
1630     --Added IF to ensure that only non prepay lines are updated
1631 
1632     -- These updates are being done in the context of the loop as each
1633     -- cycle of the loop could be related to a different event
1634     IF ( l_event_type NOT IN ( PREPAYMENT_APPLIED_TYPE,
1635                                PREPAY_APP_ADJUSTED_TYPE,
1636                                PREPAYMENT_UNAPPLIED_TYPE)) THEN
1637 
1638       UPDATE ap_invoice_distributions
1639       SET    accounting_event_id = l_accounting_event_id
1640       WHERE  invoice_id = p_invoice_id
1641       AND    accounting_date = event_dist_rec.accounting_date
1642       AND    awt_invoice_payment_id IS NULL
1643       AND    line_type_lookup_code <> 'PREPAY'
1644       AND    prepay_distribution_id IS NULL --prepay_tax_parent_id obsoleted
1645       AND    accounting_event_id IS NULL
1646       AND    nvl(cancellation_flag, 'N') = 'N'; -- Bug 5455054: Added the cancellation_flag check.
1647 
1648       -------------------------------------------------
1649       -- bug 5525657
1650       -- We need to stamp the same accounting event id
1651       -- for self assessed tax distributions.
1652       -------------------------------------------------
1653 
1654       UPDATE ap_self_assessed_tax_dist_all
1655       SET    accounting_event_id = l_accounting_event_id
1656       WHERE  invoice_id = p_invoice_id
1657       AND    accounting_date = event_dist_rec.accounting_date
1658       AND    awt_invoice_payment_id IS NULL
1659       AND    line_type_lookup_code <> 'PREPAY'
1663 
1660       AND    prepay_distribution_id IS NULL
1661       AND    accounting_event_id IS NULL
1662       AND    nvl(cancellation_flag, 'N') = 'N';
1664     ELSE -- for prepay distribution lines
1665 
1666       -- Modified the sqls below for updating the Accounting
1667       -- Event_IDs on the Invoice distributions, to consider
1668       -- Prepayment Application and Unapplication distributions
1669       -- for amount 0
1670       --
1671       IF l_event_type = PREPAYMENT_APPLIED_TYPE THEN
1672 
1673         UPDATE ap_invoice_distributions
1674         SET    accounting_event_id =  l_accounting_event_id
1675         WHERE  accounting_event_id IS NULL
1676         AND    invoice_id = p_invoice_id
1677         AND    invoice_line_number = event_dist_rec.invoice_line_number
1678         AND    accounting_date = event_dist_rec.accounting_date
1679         AND    line_type_lookup_code = 'PREPAY'  -- Bug 6718967
1680         AND    (sign(amount) = sign(event_dist_rec.dist_amount) OR
1681                 (parent_reversal_id IS NULL AND amount = 0))
1682         RETURNING invoice_distribution_id BULK COLLECT INTO l_inv_dist_tab;
1683 
1684       ELSE
1685 
1686         UPDATE ap_invoice_distributions
1687         SET    accounting_event_id =  l_accounting_event_id
1688         WHERE  accounting_event_id IS NULL
1689         AND    invoice_id = p_invoice_id
1690         AND    invoice_line_number = event_dist_rec.invoice_line_number
1691         AND    accounting_date = event_dist_rec.accounting_date
1692         AND    line_type_lookup_code = 'PREPAY'  -- Bug 6718967
1693         AND    (sign(amount) = sign(event_dist_rec.dist_amount) OR
1694                 (parent_reversal_id IS NOT NULL AND amount = 0))
1695         RETURNING invoice_distribution_id BULK COLLECT INTO l_inv_dist_tab;
1696 
1697       END IF;
1698 
1699 
1700       FORALL i IN l_inv_dist_tab.FIRST..l_inv_dist_tab.LAST
1701       UPDATE ap_invoice_distributions_all
1702       SET    accounting_event_id =  l_accounting_event_id
1703       WHERE  line_type_lookup_code in ('REC_TAX','NONREC_TAX',
1704                                        'TRV','TIPV','TERV') --Bug5455985
1705       AND    accounting_event_id IS NULL
1706       AND    charge_applicable_to_dist_id = l_inv_dist_tab(i);
1707 
1708     END IF;  -- prepay distribution lines
1709 
1710 
1711     /*   start moved by abhsaxen for bug 9159069
1712      *   Moving this code because cascade event will work only
1713      *   if invoice_distribution is populated earlier
1714      */
1715 
1716     -- raise payment/prepayment cascade event only when there is payment
1717     -- or prepayment application existed for the invoice.
1718 
1719     IF ((l_pay_accounting_event_id IS NOT NULL)
1720        OR
1721        (l_prepay_event_id IS NOT NULL))
1722     THEN
1723 
1724       l_log_msg := 'Before calling procedure derive_cascade_events';
1725       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1726         FND_LOG.STRING(G_LEVEL_PROCEDURE,
1727                        G_MODULE_NAME || l_procedure_name,
1728                        l_log_msg);
1729       END IF;
1730 
1731       -- Bug 6996047. Passing accounting date so that the adjustment
1732       -- events are created in the same gl date as the invoice event.
1733       derive_cascade_events
1734       ( p_invoice_id => p_invoice_id,
1735         p_adj_accounting_event_id => l_accounting_event_id,
1736         p_accounting_date => event_dist_rec.accounting_date,
1737         p_calling_sequence => l_curr_calling_sequence
1738       );
1739 
1740       l_log_msg := 'After calling proc derive_cascade_events executed';
1741       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1742         FND_LOG.STRING(G_LEVEL_PROCEDURE,
1743                        G_MODULE_NAME || l_procedure_name,
1744                        l_log_msg);
1745       END IF;
1746     END IF;
1747 
1748    /* end moved by abhsaxen for bug 9159069*/
1749 
1750   END LOOP; /*inv_event_dists loop*/
1751 
1752   -- bug9441420
1753   l_log_msg := 'before calling the procedure Set_Prepay_Event_Noaction '||
1754                'for invoice_id :'||P_Invoice_ID;
1755   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1756     FND_LOG.STRING(G_LEVEL_PROCEDURE,
1757                    G_MODULE_NAME || l_procedure_name,
1758                    l_log_msg);
1759   END IF;
1760 
1761   AP_ACCOUNTING_EVENTS_PKG.Set_Prepay_Event_Noaction
1762      (p_invoice_id,
1763       l_curr_calling_sequence);
1764 
1765   l_log_msg := 'After calling the procedure Set_Prepay_Event_Noaction '||
1766                'for invoice_id :'||P_Invoice_ID;
1767   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1768     FND_LOG.STRING(G_LEVEL_PROCEDURE,
1769                    G_MODULE_NAME || l_procedure_name,
1770                    l_log_msg);
1771   END IF;
1772 
1773   l_log_msg := 'End of procedure '|| l_procedure_name;
1774   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1775       FND_LOG.STRING(G_LEVEL_PROCEDURE,
1776                      G_MODULE_NAME||l_procedure_name||'.begin',
1777                      l_log_msg);
1778   END IF;
1779 
1780 EXCEPTION
1781   WHEN OTHERS THEN
1782     IF (inv_event_dists%ISOPEN) THEN
1783       CLOSE inv_event_dists;
1784     END IF;
1785 
1786     IF (SQLCODE <> -20001) THEN
1787        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
1788        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
1789        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
1790                     l_curr_calling_sequence);
1791        FND_MESSAGE.SET_TOKEN('PARAMETERS',
1792               'p_invoice_id = '||p_invoice_id);
1793        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
1794      END IF;
1795 
1796     APP_EXCEPTION.RAISE_EXCEPTION();
1797 END derive_invoice_events;
1798 
1799 
1800 /*============================================================================
1801  |  PUNCTION -  CREATE_INVOICE_EVENT (PRIVATE)
1802  |
1803  |  DESCRIPTION
1804  |          Create accounting events for 'INVOICES' type
1805  |
1806  |  PRAMETERS
1807  |          p_event_type: Event type
1808  |          p_invoice_id: Invoice Unique Identifier
1809  |          P_event_date: Event date
1810  |          p_calling_sequence: Debug information
1811  |
1812  |  RETURN TYPE: NUMBER
1813  |
1814  |  KNOWN ISSUES:
1815  |
1816  |  NOTES:
1817  |
1818  |  MODIFICATION HISTORY
1819  |  Date         Author             Description of Change
1820  |
1821  *===========================================================================*/
1822 FUNCTION create_invoice_event(p_event_type       IN    VARCHAR2,
1823                               p_invoice_id       IN    NUMBER,
1824                               p_event_date       IN    DATE,
1825                               p_calling_sequence IN    VARCHAR2)
1826 RETURN NUMBER
1827 IS
1828 
1829   l_event_status VARCHAR2(1);
1830   l_legal_entity_id NUMBER(15);
1831   l_ledger_id NUMBER(15);
1832   l_org_id NUMBER(15);
1833   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
1834   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
1835   l_transaction_date  AP_INVOICES_ALL.invoice_date%TYPE;
1836 
1837   l_curr_calling_sequence VARCHAR2(2000);
1838 
1839   -- Logging:
1840   l_procedure_name CONSTANT VARCHAR2(30) := 'CREATE_INVOICE_EVENT';
1841   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
1842 
1843 BEGIN
1844 
1845   l_curr_calling_sequence :=
1846     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.CREATE_INVOICE_EVENT';
1847 
1848   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1849 
1850   l_log_msg := 'Begin of procedure '|| l_procedure_name;
1851   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1852      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1853                     G_MODULE_NAME || l_procedure_name,
1854                     l_log_msg);
1855   END IF;
1856 
1857   IF
1858   ( is_event_complete
1859        ( p_doc_type => INVOICES_ENTITY,
1860          p_source_id => p_invoice_id,
1861          p_calling_sequence => l_curr_calling_sequence) = 'CREATED') THEN
1862     l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED;
1863   ELSE
1864     l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
1865   END IF;
1866 
1867   get_invoice_info
1868   ( p_invoice_id => p_invoice_id,
1869     p_org_id => l_org_id, -- OUT
1870     p_legal_entity_id => l_legal_entity_id, -- OUT
1871     p_ledger_id => l_ledger_id, -- OUT
1872     p_transaction_date => l_transaction_date, -- OUT
1873     p_calling_sequence => l_curr_calling_sequence
1874   );
1875 
1876   l_event_security_context :=
1877     get_event_security_context
1878     ( p_org_id => l_org_id,
1879       p_calling_sequence => l_curr_calling_sequence
1880     );
1881 
1882   l_event_source_info :=
1883     get_invoice_event_source_info
1884     ( p_legal_entity_id => l_legal_entity_id,
1885       p_ledger_id => l_ledger_id,
1886       p_invoice_id => p_invoice_id,
1887       p_calling_sequence => l_curr_calling_sequence
1888     );
1889 
1890   l_log_msg := 'End of procedure '|| l_procedure_name;
1891   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1892      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1893                     G_MODULE_NAME || l_procedure_name,
1894                     l_log_msg);
1895   END IF;
1896 
1897   l_log_msg := 'Calling proc AP_XLA_EVENTS_PKG.CREATE_EVENT and return';
1898   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1899      FND_LOG.STRING(G_LEVEL_PROCEDURE,
1900                     G_MODULE_NAME || l_procedure_name,
1901                     l_log_msg);
1902   END IF;
1903 
1904   RETURN
1905     AP_XLA_EVENTS_PKG.CREATE_EVENT
1906     ( p_event_source_info => l_event_source_info,
1907       p_event_type_code => p_event_type,
1908       p_event_date => p_event_date,
1909       p_event_status_code => l_event_status,
1910       p_event_number => NULL,
1911       p_transaction_date => l_transaction_date,
1912       p_reference_info => NULL,
1913       p_valuation_method => NULL,
1914       p_security_context => l_event_security_context,
1915       p_calling_sequence => l_curr_calling_sequence
1916     );
1917 
1918 
1919 EXCEPTION
1920   WHEN OTHERS THEN
1921     IF (SQLCODE <> -20001) THEN
1922        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
1923        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
1924        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
1925                     l_curr_calling_sequence);
1926        FND_MESSAGE.SET_TOKEN('PARAMETERS',
1927                'p_event_type = '||p_event_type
1928            ||', p_invoice_id = '||p_invoice_id
1929            ||', p_event_date = '||p_event_date);
1930        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
1931     END IF;
1932 
1933     APP_EXCEPTION.RAISE_EXCEPTION();
1934 END create_invoice_event;
1935 
1936 
1937 
1938 /*============================================================================
1939  |  PUNCTION -  CREATE_PAYMENT_EVENT (PRIVATE)
1940  |
1941  |  DESCRIPTION
1942  |          Create accounting events for 'PAYMENT' type
1943  |
1944  |  PRAMETERS
1945  |          p_event_type: Event type
1946  |          p_check_id: Check ID
1947  |          p_event_date: Event date
1948  |          p_calling_sequence: Debug information
1949  |
1950  |  RETURN TYPE: NUMBER
1951  |
1952  |  KNOWN ISSUES:
1953  |
1954  |  NOTES:
1955  |
1956  |  MODIFICATION HISTORY
1957  |  Date         Author             Description of Change
1958  |
1959  *===========================================================================*/
1960 FUNCTION create_payment_event( p_event_type       IN   VARCHAR2,
1961                                p_check_id         IN   NUMBER,
1962                                p_event_date       IN   DATE,
1963                                p_calling_sequence IN   VARCHAR2)
1964 RETURN NUMBER
1965 IS
1966 
1967   l_event_status VARCHAR2(1);
1968   l_legal_entity_id NUMBER(15);
1969   l_ledger_id NUMBER(15);
1970   l_org_id NUMBER(15);
1971   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
1972   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
1973   l_matured_events_count NUMBER;
1974   l_unmatured_events_count NUMBER;
1975   l_amount  NUMBER;
1976   l_currency_code VARCHAR2(15);
1977   l_maturity_exchange_rate_type VARCHAR2(30);
1978   l_maturity_exchange_date DATE;
1979   l_maturity_exchange_rate NUMBER;
1980   l_ret NUMBER;
1981   l_curr_calling_sequence VARCHAR2(2000);
1982 
1983   -- Logging:
1984   l_procedure_name CONSTANT VARCHAR2(30) := 'CREATE_PAYMENT_EVENT';
1985   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
1986   l_when_to_acct   ap_system_parameters.when_to_account_pmt%TYPE; --bug 8771563
1987 
1988   -- Bug 7374984.
1989   -- Cursor to get all the unaccounted maturity and clearing transactions
1990   -- Cursor to get all the unaccounted maturity and clearing transactions
1991   -- bug9051619, added NOT EXISTS clause
1992   CURSOR c_unacct_pmt_events IS
1993   SELECT accounting_date,
1994          accounting_event_id,
1995          transaction_type
1996   FROM   ap_payment_history aph
1997   WHERE  check_id = p_check_id
1998   AND    posted_flag <> 'Y'
1999   AND    transaction_type IN (PAYMENT_MATURTY_RVRSL_TRX_TYPE, PAYMENT_MATURTY_TRX_TYPE,
2000                               PAYMENT_MATURITY_ADJUSTED_TYPE, PAYMENT_CLEARED_TRX_TYPE,
2001                               PAYMENT_UNCLEARED_TRX_TYPE, PAYMENT_CLEARING_ADJUSTED_TYPE)
2002   AND    NOT EXISTS
2003          (SELECT 1
2004           FROM ap_payment_history_all aphp,
2005                xla_events xe,
2006                ap_system_parameters_all asp
2007           WHERE aph.check_id = aphp.check_id
2008           AND aphp.payment_history_id = aph.rev_pmt_hist_id
2012           AND aph.org_id = asp.org_id
2009           AND aphp.transaction_type = PAYMENT_CLEARED_TRX_TYPE
2010           AND aphp.posted_flag = 'Y'
2011           AND aph.transaction_type = PAYMENT_UNCLEARED_TRX_TYPE
2013           AND asp.when_to_account_pmt = 'CLEARING ONLY'
2014           AND aphp.accounting_event_id = xe.event_id
2015           AND xe.application_id = 200
2016           AND xe.event_status_code = 'P')
2017   AND    NVL(fnd_profile.value('FV_ENABLED'), 'N') <> 'Y' --bug11681786 start
2018   UNION
2019   SELECT accounting_date,
2020          accounting_event_id,
2021          transaction_type
2022   FROM   ap_payment_history aph
2023   WHERE  check_id = p_check_id
2024   AND    posted_flag <> 'Y'
2025   AND    transaction_type IN (PAYMENT_MATURTY_RVRSL_TRX_TYPE, PAYMENT_MATURTY_TRX_TYPE,
2026                               PAYMENT_CLEARED_TRX_TYPE, PAYMENT_UNCLEARED_TRX_TYPE)
2027   AND    NOT EXISTS
2028          (SELECT 1
2029           FROM ap_payment_history_all aphp,
2030                xla_events xe
2031           WHERE aph.check_id = aphp.check_id
2032           AND aphp.payment_history_id = aph.rev_pmt_hist_id
2033           AND aphp.posted_flag = 'Y'
2034           AND aphp.accounting_event_id = xe.event_id
2035           AND xe.application_id = 200
2036           AND xe.event_status_code = 'P')
2037   AND    NVL(fnd_profile.value('FV_ENABLED'), 'N') = 'Y'; --bug11681786 end
2038 
2039     --added cursor for bug 7594938, 10336668 added Manual Ref Adj
2040   CURSOR c_pmt_acct_clearing_only IS
2041   SELECT aph.accounting_date,
2042          aph.accounting_event_id,
2043          aph.transaction_type
2044   FROM   ap_payment_history aph, ap_system_parameters asp
2045   WHERE  aph.check_id = p_check_id
2046   AND    aph.org_id = asp.org_id
2047   AND    asp.when_to_account_pmt = 'CLEARING ONLY'
2048   AND    aph.posted_flag <> 'Y'
2049   AND    aph.transaction_type IN (PAYMENT_CREATED_TYPE, REFUND_RECORDED_TYPE,
2050                                   PAYMENT_MATURTY_TRX_TYPE, PAYMENT_MATURTY_RVRSL_TRX_TYPE,
2051                                   MANUAL_PAYMENT_ADJUSTED_TYPE, MANUAL_REFUND_ADJUSTED_TYPE);
2052 
2053   l_accounting_date       DATE;
2054   l_accounting_event_id   NUMBER;
2055   l_transaction_type      VARCHAR2(30);
2056 
2057   --bug 8358552 starts
2058   l_dummy       NUMBER;
2059   --bug 8358552 ends
2060 
2061 BEGIN
2062 
2063   l_curr_calling_sequence :=
2064     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.CREATE_PAYMENT_EVENT';
2065 
2066   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2067 
2068   l_log_msg := 'Begin of procedure '|| l_procedure_name;
2069   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2070      FND_LOG.STRING(G_LEVEL_PROCEDURE,
2071                     G_MODULE_NAME || l_procedure_name,
2072                     l_log_msg);
2073   END IF;
2074 
2075   --bug 8771563
2076   SELECT asp.when_to_account_pmt
2077   INTO   l_when_to_acct
2078   FROM   ap_checks ac, ap_system_parameters asp
2079   WHERE  ac.check_id = p_check_id
2080   AND    ac.org_id   = asp.org_id;
2081 
2082   IF (p_event_type IN (PAYMENT_CANCELLED_TYPE, REFUND_CANCELLED_TYPE,PAYMENT_CREATED_TYPE, REFUND_RECORDED_TYPE,
2083                        PAYMENT_MATURED_TYPE, PAYMENT_MATURITY_REVERSED_TYPE,MANUAL_PAYMENT_ADJUSTED_TYPE,--14544093
2084 					   MANUAL_REFUND_ADJUSTED_TYPE)
2085        AND l_when_to_acct = 'CLEARING ONLY') THEN  --bug 8771563 and 12603516
2086         l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION;
2087   ELSIF (is_event_complete
2088           (p_doc_type => PAYMENTS_ENTITY,
2089            p_source_id => p_check_id,
2090            p_calling_sequence => l_curr_calling_sequence) = 'CREATED') THEN
2091         l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED;
2092   ELSE
2093         l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
2094   END IF;
2095 
2096   get_payment_info
2097   ( p_check_id => p_check_id,
2098     p_org_id => l_org_id, -- OUT
2099     p_legal_entity_id => l_legal_entity_id, -- OUT
2100     p_ledger_id => l_ledger_id, -- OUT
2101     p_calling_sequence => l_curr_calling_sequence
2102   );
2103 
2104   l_event_security_context :=
2105     get_event_security_context
2106     ( p_org_id => l_org_id,
2107       p_calling_sequence => l_curr_calling_sequence
2108     );
2109 
2110   l_event_source_info :=
2111     get_payment_event_source_info
2112     ( p_legal_entity_id => l_legal_entity_id,
2113       p_ledger_id => l_ledger_id,
2114       p_check_id => p_check_id,
2115       p_calling_sequence => l_curr_calling_sequence
2116     );
2117 
2118   l_log_msg := 'Before calling procedure AP_XLA_EVENTS_PKG.CREATE_EVENT';
2119   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2120      FND_LOG.STRING(G_LEVEL_PROCEDURE,
2121                     G_MODULE_NAME || l_procedure_name,
2122                     l_log_msg);
2123   END IF;
2124 
2125     --bug 8358552 starts
2126     --bug 9069767 starts
2127     --bug 12555714 Starts : Added the if-else and have the l_event_status accordingly to I when NO_DATA_FOUND
2128     IF (p_event_type IN (PAYMENT_MATURTY_TRX_TYPE, PAYMENT_MATURTY_RVRSL_TRX_TYPE)) THEN
2129         BEGIN
2130                 SELECT 1
2131                 INTO l_dummy
2132                 FROM ap_checks_all ac,
2133                         ap_system_parameters_all asp
2134                 WHERE ac.check_id =l_event_source_info.source_id_int_1
2135                 AND ac.org_id = asp.org_id
2136                 AND exists (
2137                         SELECT 1
2138                         FROM ap_payment_history_all aph
2139                         WHERE ac.check_id = aph.check_id
2140                         AND aph.transaction_type = PAYMENT_MATURTY_TRX_TYPE
2141                 )
2142                 AND(
2143                         (
2144                                 ac.currency_code <> asp.base_currency_code
2145                                 AND ac.exchange_rate is not null
2146                                 AND ac.exchange_rate_type is not null
2147                                 AND ac.exchange_date is not null
2148                                 AND ac.maturity_exchange_rate is not null
2149                                 AND ac.maturity_exchange_date is not null
2150                                 AND ac.maturity_exchange_rate_type is not null
2151                         )
2152                         OR (ac.currency_code = asp.base_currency_code));
2153         EXCEPTION
2154         WHEN NO_DATA_FOUND THEN
2155                 l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
2156         END;
2157     ELSE
2158         BEGIN
2159                 SELECT 1
2160                 INTO l_dummy
2161                 FROM ap_checks_all ac,
2162                         ap_system_parameters_all asp
2163                 WHERE ac.check_id =l_event_source_info.source_id_int_1
2164                 AND ac.org_id = asp.org_id
2165                 /*AND not exists (
2166                         SELECT 1
2167                         FROM ap_payment_history_all aph
2168                         WHERE ac.check_id = aph.check_id
2169                         AND aph.transaction_type = PAYMENT_MATURTY_TRX_TYPE
2170                 )*/ /* bug 13616704 */
2171                 AND(
2172                         (
2173                                 ac.currency_code <> asp.base_currency_code
2174                                 AND ac.exchange_rate is not null
2175                                 AND ac.exchange_rate_type is not null
2176                                 AND ac.exchange_date is not null
2177                         )
2178                         OR (ac.currency_code = asp.base_currency_code));
2179 
2180         EXCEPTION
2181         WHEN NO_DATA_FOUND THEN
2182                 l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
2183         END;
2184     END IF;
2185 /*
2186     BEGIN
2187         SELECT 1
2188         INTO l_dummy
2189         FROM ap_checks_all ac,
2193         AND exists (
2190                 ap_system_parameters_all asp
2191         WHERE ac.check_id =l_event_source_info.source_id_int_1
2192         AND ac.org_id = asp.org_id
2194                 SELECT 1
2195                 FROM ap_payment_history_all aph
2196                 WHERE ac.check_id = aph.check_id
2197                 AND aph.transaction_type = PAYMENT_MATURTY_TRX_TYPE
2198         )
2199         AND(
2200                 (
2201                         ac.currency_code <> asp.base_currency_code
2202                         AND ac.exchange_rate is not null
2203                         AND ac.exchange_rate_type is not null
2204                         AND ac.exchange_date is not null
2205                         AND ac.maturity_exchange_rate is not null
2206                         AND ac.maturity_exchange_date is not null
2207                         AND ac.maturity_exchange_rate_type is not null
2208                 )
2209                 OR (ac.currency_code = asp.base_currency_code));
2210     EXCEPTION
2211         WHEN NO_DATA_FOUND THEN
2212                 BEGIN
2213                         SELECT 1
2214                         INTO l_dummy
2215                         FROM ap_checks_all ac,
2216                                 ap_system_parameters_all asp
2217                         WHERE ac.check_id =l_event_source_info.source_id_int_1
2218                         AND ac.org_id = asp.org_id
2219                         AND not exists (
2220                                 SELECT 1
2221                                 FROM ap_payment_history_all aph
2222                                 WHERE ac.check_id = aph.check_id
2223                                 AND aph.transaction_type = PAYMENT_MATURTY_TRX_TYPE
2224                         )
2225                         AND(
2226                                 (
2227                                         ac.currency_code <> asp.base_currency_code
2228                                         AND ac.exchange_rate is not null
2229                                         AND ac.exchange_rate_type is not null
2230                                         AND ac.exchange_date is not null
2231                                 )
2232                                 OR (ac.currency_code = asp.base_currency_code));
2233 
2234                 EXCEPTION
2235                         WHEN NO_DATA_FOUND THEN
2236                                 l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
2237                 END;
2238     END;
2239     --bug 9069767 starts
2240     --bug 8358552 ends
2241 */
2242     --bug 12555714 Ends
2243 
2244   l_ret:=
2245     AP_XLA_EVENTS_PKG.CREATE_EVENT
2246     ( p_event_source_info => l_event_source_info,
2247       p_event_type_code => p_event_type,
2248       p_event_date => p_event_date,
2249       p_event_status_code => l_event_status,
2250       p_event_number => NULL,
2251       p_transaction_date => NULL,
2252       p_reference_info => NULL,
2253       p_valuation_method => NULL,
2254       p_security_context => l_event_security_context,
2255       p_calling_sequence => l_curr_calling_sequence
2256     );
2257 
2258   l_log_msg := 'After calling AP_XLA_EVENTS_PKG.CREATE_EVENT';
2259   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2260      FND_LOG.STRING(G_LEVEL_PROCEDURE,
2261                     G_MODULE_NAME || l_procedure_name,
2262                     l_log_msg);
2263   END IF;
2264 
2265   -- bug fix 5659451
2266   -- change hard coded constant to global constant variables
2267   --bug fix 9136971
2268   -- added condition for Refund Cancellation event
2269   IF (p_event_type IN (PAYMENT_CANCELLED_TYPE, REFUND_CANCELLED_TYPE)) THEN
2270 
2271     select count(*)
2272     into l_matured_events_count
2273     from   AP_PAYMENT_HISTORY APH
2274     where  check_id = P_check_id
2275     and    transaction_type = PAYMENT_MATURTY_TRX_TYPE;
2276 
2277 
2278     l_log_msg := 'l_matured_events_count = '
2279                  ||to_char(l_matured_events_count);
2280     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
2281        FND_LOG.STRING(G_LEVEL_STATEMENT,
2282                       G_MODULE_NAME || l_procedure_name,
2283                       l_log_msg);
2284     END IF;
2285 
2286     select  count(*)
2287     into l_unmatured_events_count
2288     from ap_payment_history APH
2289     where check_id = p_check_id
2290     and transaction_type = PAYMENT_MATURTY_RVRSL_TRX_TYPE;
2291 
2292     l_log_msg := 'l_unmatured_events_count = '
2293                  ||to_char(l_unmatured_events_count);
2294     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
2295       FND_LOG.STRING(G_LEVEL_STATEMENT,
2296                      G_MODULE_NAME || l_procedure_name,
2297                      l_log_msg);
2298     END IF;
2299 
2300     IF (l_matured_events_count > 0 and
2301         l_matured_events_count > l_unmatured_events_count) THEN
2302 
2303 
2304        select amount,
2305               currency_code,
2306               maturity_exchange_rate_type,
2307               maturity_exchange_date,
2308               maturity_exchange_Rate
2309        into   l_amount,
2310               l_currency_code,
2311               l_maturity_exchange_rate_type,
2312               l_maturity_exchange_date,
2313               l_maturity_exchange_Rate
2314        from   ap_Checks
2315        where  check_id = P_check_id;
2316 
2317        l_log_msg := 'Before ap_reconciliation_pkg.recon_payment_history';
2318        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2319          FND_LOG.STRING(G_LEVEL_PROCEDURE,
2320                         G_MODULE_NAME || l_procedure_name,
2321                         l_log_msg);
2325                (X_CHECKRUN_ID            => NULL,
2322        END IF;
2323 
2324        ap_reconciliation_pkg.recon_payment_history
2326                 X_CHECK_ID                => P_check_id,
2327                 X_TRANSACTION_TYPE        => PAYMENT_MATURTY_RVRSL_TRX_TYPE,
2328                 X_ACCOUNTING_DATE         => p_event_date,
2329                 X_CLEARED_DATE            => NULL,
2330                 X_TRANSACTION_AMOUNT      => l_amount,
2331                 X_ERROR_AMOUNT            => NULL,
2332                 X_CHARGE_AMOUNT           => NULL,
2333                 X_CURRENCY_CODE           => l_currency_code,
2334                 X_EXCHANGE_RATE_TYPE      => l_maturity_exchange_rate_type,
2335                 X_EXCHANGE_RATE_DATE      => l_maturity_exchange_date,
2336                 X_EXCHANGE_RATE           => l_maturity_exchange_rate,
2337                 X_MATCHED_FLAG            => NULL,
2338                 X_ACTUAL_VALUE_DATE       => NULL,
2339                 X_CREATION_DATE           => sysdate,
2340                 X_CREATED_BY              => FND_GLOBAL.user_id,
2341                 X_LAST_UPDATE_DATE        => sysdate,
2342                 X_LAST_UPDATED_BY         => FND_GLOBAL.user_id,
2343                 X_LAST_UPDATE_LOGIN       => FND_GLOBAL.login_id,
2344                 X_PROGRAM_UPDATE_DATE     => NULL,
2345                 X_PROGRAM_APPLICATION_ID  => NULL,
2346                 X_PROGRAM_ID              => NULL,
2347                 X_REQUEST_ID              => NULL,
2348                 X_CALLING_SEQUENCE        => l_curr_calling_sequence);
2349 
2350         l_log_msg := 'After ap_reconciliation_pkg.recon_payment_history';
2351         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2352           FND_LOG.STRING(G_LEVEL_PROCEDURE,
2353                          G_MODULE_NAME || l_procedure_name,
2354                          l_log_msg);
2355         END IF;
2356     END IF;
2357 
2358     l_log_msg := 'Open Cursor c_unacct_pmt_events';
2359     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2360        FND_LOG.STRING(G_LEVEL_PROCEDURE,
2361                       G_MODULE_NAME || l_procedure_name,
2362                       l_log_msg);
2363     END IF;
2364 
2365     -- 7374984
2366     -- Setting the event status to no action for all the unacctd
2367     -- events of this voided payment.
2368     OPEN c_unacct_pmt_events;
2369     LOOP
2370       FETCH c_unacct_pmt_events INTO
2371             l_accounting_date,
2372             l_accounting_event_id,
2373             l_transaction_type;
2374       EXIT  WHEN c_unacct_pmt_events%NOTFOUND;
2375 
2376       l_log_msg := 'Event id that needs to be set to no action ' ||
2377                      l_accounting_event_id;
2378       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2379           FND_LOG.STRING(G_LEVEL_PROCEDURE,
2380                          G_MODULE_NAME || l_procedure_name,
2381                          l_log_msg);
2382       END IF;
2383 
2384       AP_XLA_EVENTS_PKG.UPDATE_EVENT
2385       ( p_event_source_info => l_event_source_info,
2386         p_event_id => l_accounting_event_id,
2387         p_event_type_code => NULL,
2388         p_event_date => NULL,
2389         p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION,
2390         p_valuation_method => NULL,
2391         p_security_context => l_event_security_context,
2392         p_calling_sequence => l_curr_calling_sequence
2393       );
2394 
2395       l_log_msg := 'End of call to AP_XLA_EVENTS_PKG.UPDATE_EVENT';
2396       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2397           FND_LOG.STRING(G_LEVEL_PROCEDURE,
2398                          G_MODULE_NAME || l_procedure_name,
2399                          l_log_msg);
2400       END IF;
2401 
2402     END LOOP;
2403     CLOSE c_unacct_pmt_events;
2404     -- End of bug 7374984
2405 
2406   END IF;
2407 
2408 
2409   --added for bug 7594938
2410   --bug 8771563, if only creation and cancellation events exist then for "clearing only" accounting
2411   --event_status_code for creation event should be marked as 'N' during payment cancellation
2412    IF p_event_type IN (PAYMENT_CLEARED_TYPE, PAYMENT_CANCELLED_TYPE,
2413                        REFUND_CANCELLED_TYPE) THEN
2414      OPEN c_pmt_acct_clearing_only;
2415      LOOP
2416 
2417      FETCH c_pmt_acct_clearing_only
2418       INTO l_accounting_date,
2419             l_accounting_event_id,
2420             l_transaction_type;
2421 
2422      EXIT WHEN c_pmt_acct_clearing_only%NOTFOUND;
2423 
2424      l_log_msg := 'Event id that needs to be set to no action ' ||
2425                      l_accounting_event_id;
2426       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2427           FND_LOG.STRING(G_LEVEL_PROCEDURE,
2428                          G_MODULE_NAME || l_procedure_name,
2429                          l_log_msg);
2430       END IF;
2431 
2432       AP_XLA_EVENTS_PKG.UPDATE_EVENT
2433       ( p_event_source_info => l_event_source_info,
2434         p_event_id => l_accounting_event_id,
2435         p_event_type_code => NULL,
2436         p_event_date => NULL,
2437         p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION,
2438         p_valuation_method => NULL,
2439         p_security_context => l_event_security_context,
2440         p_calling_sequence => l_curr_calling_sequence
2441       );
2442 
2443       l_log_msg := 'End of call to AP_XLA_EVENTS_PKG.UPDATE_EVENT';
2444       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2445           FND_LOG.STRING(G_LEVEL_PROCEDURE,
2446                          G_MODULE_NAME || l_procedure_name,
2447                          l_log_msg);
2448       END IF;
2449 
2450     END LOOP;
2454     END IF;
2451 
2452     CLOSE c_pmt_acct_clearing_only;
2453 
2455    --changes for bug 7594938 ends
2456 
2457   l_log_msg := 'End of procedure'||l_procedure_name;
2458   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2459       FND_LOG.STRING(G_LEVEL_PROCEDURE,
2460                      G_MODULE_NAME || l_procedure_name,
2461                      l_log_msg);
2462   END IF;
2463 
2464   return l_ret;
2465 
2466 EXCEPTION
2467   WHEN OTHERS THEN
2468     IF (SQLCODE <> -20001) THEN
2469        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
2470        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
2471        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
2472                     l_curr_calling_sequence);
2473        FND_MESSAGE.SET_TOKEN('PARAMETERS',
2474                'p_event_type = '||p_event_type
2475            ||', p_check_id = '||p_check_id
2476            ||', p_event_date = '||p_event_date);
2477        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
2478     END IF;
2479     APP_EXCEPTION.RAISE_EXCEPTION();
2480 END create_payment_event;
2481 
2482 /*============================================================================
2483  |  PROCEDURE -  UPDATE_INVOICE_EVENT_STATUS (PUBLIC)
2484  |
2485  |  DESCRIPTION
2486  |          Update invoice event's status
2487  |
2488  |  PRAMETERS
2489  |          p_invoice_id: Invoice ID
2490  |          p_calling_sequence: Debug information
2491  |
2492  |  KNOWN ISSUES:
2493  |
2494  |  NOTES:
2495  |
2496  |  MODIFICATION HISTORY
2497  |  Date         Author             Description of Change
2498  |
2499  *===========================================================================*/
2500 PROCEDURE update_invoice_events_status(
2501                         p_invoice_id        IN   NUMBER,
2502                         p_calling_sequence  IN   VARCHAR2)
2503 IS
2504 
2505   TYPE t_check_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
2506   TYPE t_accounting_event_ids IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
2507 
2508   l_legal_entity_id NUMBER(15);
2509   l_ledger_id NUMBER(15);
2510   l_org_id NUMBER(15);
2511   l_Event_count   NUMBER;
2512   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
2513   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
2514   l_event_info XLA_EVENTS_PUB_PKG.T_EVENT_INFO;
2515   l_transaction_date AP_INVOICES_ALL.invoice_date%TYPE;
2516 
2517   l_curr_calling_sequence VARCHAR2(2000);
2518 
2519   -- Logging:
2520   l_procedure_name CONSTANT VARCHAR2(30) := 'update_invoice_events_status';
2521   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
2522   --7011943
2523     l_count NUMBER;
2524     l_check_id NUMBER;
2525     l_pmt_awt_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
2526     l_event_source_info_temp XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
2527 
2528     --bug 8358552 starts
2529     l_dummy number;
2530     --bug 8358552 ends
2531 
2532 BEGIN
2533 
2534   l_curr_calling_sequence := p_calling_sequence ||
2535               ' -> AP_ACCOUNTING_EVENTS_PKG.UPDATE_INVOICE_EVENTS_STATUS';
2536 
2537   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2538 
2539   l_log_msg := 'Begin of procedure '||l_procedure_name;
2540   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2541         FND_LOG.STRING(G_LEVEL_PROCEDURE,
2542                        G_MODULE_NAME || l_procedure_name,
2543                        l_log_msg);
2544   END IF;
2545 
2546   SELECT count(accounting_Event_id)
2547   INTO   l_event_count
2548   FROM   AP_INVOICE_DISTRIBUTIONS AID
2549   WHERE  AID.accounting_Event_id is not null
2550   AND    AID.invoice_id = P_Invoice_id;
2551 
2552   IF l_Event_count <> 0 THEN
2553 
2554   get_invoice_info
2555   ( p_invoice_id => p_invoice_id,
2556     p_org_id => l_org_id, -- OUT
2557     p_legal_entity_id => l_legal_entity_id, -- OUT
2558     p_ledger_id => l_ledger_id, -- OUT
2559     p_transaction_date => l_transaction_date, -- OUT
2560     p_calling_sequence => l_curr_calling_sequence
2561   );
2562 
2563   l_event_security_context :=
2564     get_event_security_context
2565     ( p_org_id => l_org_id,
2566       p_calling_sequence => l_curr_calling_sequence
2567     );
2568 
2569   DECLARE
2570 
2571     CURSOR l_invoice_distributions_cur IS
2572       SELECT  distinct(AID.accounting_event_id)
2573       FROM    ap_invoice_distributions AID
2574       WHERE   AID.invoice_id = p_invoice_id
2575       AND     AID.accounting_event_id IS NOT NULL;
2576 
2577     l_invoice_event_status VARCHAR2(1);
2578     l_do_updates_flag BOOLEAN;
2579     l_accounting_event_ids t_accounting_event_ids;
2580 
2581   BEGIN
2582 
2583     l_event_source_info :=
2584       get_invoice_event_source_info
2585       ( p_legal_entity_id => l_legal_entity_id,
2586         p_ledger_id => l_ledger_id,
2587         p_invoice_id => p_invoice_id,
2588         p_calling_sequence => l_curr_calling_sequence
2589       );
2590     l_event_source_info_temp := l_event_source_info ; --7011943
2591     IF
2592     ( is_event_complete
2593       ( p_doc_type => INVOICES_ENTITY,
2594         p_source_id => p_invoice_id,
2595         p_calling_sequence => l_curr_calling_sequence
2596       ) = 'CREATED') THEN
2597 
2598       l_invoice_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED;
2599 
2600       l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
2601       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2602           FND_LOG.STRING(G_LEVEL_PROCEDURE,
2603                          G_MODULE_NAME || l_procedure_name,
2607       l_do_updates_flag :=
2604                          l_log_msg);
2605       END IF;
2606 
2608         AP_XLA_EVENTS_PKG.EVENT_EXISTS
2609         ( p_event_source_info => l_event_source_info,
2610           p_event_class_code => NULL,
2611           p_event_type_code => NULL,
2612           p_event_date => NULL,
2613           p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE,
2614           p_event_number => NULL,
2615           p_valuation_method => NULL,
2616           p_security_context => l_event_security_context,
2617           p_calling_sequence => l_curr_calling_sequence
2618         );
2619 
2620        l_log_msg := 'After calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
2621        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2622           FND_LOG.STRING(G_LEVEL_PROCEDURE,
2623                          G_MODULE_NAME || l_procedure_name,
2624                          l_log_msg);
2625        END IF;
2626 
2627     ELSE
2628 
2629       l_invoice_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
2630 
2631       l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
2632 
2633       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2634           FND_LOG.STRING(G_LEVEL_PROCEDURE,
2635                          G_MODULE_NAME || l_procedure_name,
2636                          l_log_msg);
2637       END IF;
2638 
2639       l_do_updates_flag :=
2640         AP_XLA_EVENTS_PKG.EVENT_EXISTS
2641         ( p_event_source_info => l_event_source_info,
2642           p_event_class_code => NULL,
2643           p_event_type_code => NULL,
2644           p_event_date => NULL,
2645           p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED,
2646           p_event_number => NULL,
2647           p_valuation_method => NULL,
2648           p_security_context => l_event_security_context,
2649           p_calling_sequence => l_curr_calling_sequence
2650         );
2651 
2652        l_log_msg := 'After calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
2653        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2654           FND_LOG.STRING(G_LEVEL_PROCEDURE,
2655                          G_MODULE_NAME || l_procedure_name,
2656                          l_log_msg);
2657        END IF;
2658 
2659     END IF;
2660 
2661     IF (l_do_updates_flag) THEN
2662 
2663       OPEN l_invoice_distributions_cur;
2664       LOOP
2665 
2666         l_log_msg := 'Open cursor l_invoice_distributions_cur';
2667         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
2668            FND_LOG.STRING(G_LEVEL_STATEMENT,
2669                           G_MODULE_NAME || l_procedure_name,
2670                           l_log_msg);
2671         END IF;
2672 
2673         FETCH l_invoice_distributions_cur
2674         BULK COLLECT INTO
2675           l_accounting_event_ids
2676         LIMIT 1000;
2677 
2678         FOR i IN 1 ..l_accounting_event_ids.count LOOP
2679 
2680           l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
2681           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2682              FND_LOG.STRING(G_LEVEL_PROCEDURE,
2683                             G_MODULE_NAME || l_procedure_name,
2684                             l_log_msg);
2685           END IF;
2686 
2687           --bug 7011943 There are payment time AWT dists.
2688           select count(*)
2689           into l_count
2690           from ap_invoice_distributions_all
2691           where accounting_event_id = l_accounting_event_ids(i)
2692           and invoice_id = l_event_source_info.source_id_int_1
2693           and awt_invoice_payment_id is not null;
2694 
2695           if (l_count > 0) then
2696             BEGIN
2697                 select  DISTINCT ac.check_id        --bug10024752
2698                 into l_check_id
2699                 from ap_invoice_payments_all aip,
2700                      ap_checks_all ac
2701                 where aip.check_id=ac.check_id
2702                   and   aip.accounting_event_id = l_accounting_event_ids(i)
2703                   and   aip.invoice_id=l_event_source_info.source_id_int_1;
2704 
2705 
2706              l_pmt_awt_event_source_info:=get_payment_event_source_info(p_legal_entity_id => l_legal_entity_id,
2707                               p_ledger_id => l_ledger_id,
2708                               p_check_id => l_check_id,
2709                               p_calling_sequence => l_curr_calling_sequence);
2710              l_event_source_info := l_pmt_awt_event_source_info;
2711 
2712              --bug 8358552 starts
2713              BEGIN
2714                      SELECT 1
2715                      INTO l_dummy
2716                      FROM ap_checks_all ac,
2717                         ap_system_parameters_all asp
2718                      WHERE ac.check_id =l_event_source_info.source_id_int_1
2719                      AND ac.org_id = asp.org_id
2720                      AND( (ac.currency_code <> asp.base_currency_code
2721                      AND ac.exchange_rate is not null
2722                      AND ac.exchange_rate_type is not null
2723                      AND ac.exchange_date is not null)
2724                      OR (ac.currency_code = asp.base_currency_code));
2725              EXCEPTION
2726                 WHEN NO_DATA_FOUND THEN
2727                         l_invoice_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
2728              END;
2729              --bug 8358552 ends
2730 
2731             EXCEPTION
2732              WHEN OTHERS THEN
2733                NULL;
2734             END;
2735           ELSE
2736             l_event_source_info := l_event_source_info_temp;
2737           end if;
2738           --bug 7011943 ends
2739           l_event_info :=
2740             AP_XLA_EVENTS_PKG.GET_EVENT_INFO
2741             ( p_event_source_info => l_event_source_info,
2745               p_calling_sequence => l_curr_calling_sequence
2742               p_event_id => l_accounting_event_ids(i),
2743               p_valuation_method => NULL,
2744               p_security_context => l_event_security_context,
2746             );
2747 
2748           --bug 7011943
2749           l_event_source_info := l_event_source_info_temp;
2750           l_log_msg := 'After calling AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
2751           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2752              FND_LOG.STRING(G_LEVEL_PROCEDURE,
2753                             G_MODULE_NAME || l_procedure_name,
2754                             l_log_msg);
2755           END IF;
2756 
2757           IF ( l_event_info.event_status_code IN
2758                ( XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED,
2759                  XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE
2760                ) AND
2761                l_event_info.event_status_code <> l_invoice_event_status) THEN
2762 
2763             l_log_msg := 'Before AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
2764             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2765                FND_LOG.STRING(G_LEVEL_PROCEDURE,
2766                               G_MODULE_NAME || l_procedure_name,
2767                               l_log_msg);
2768             END IF;
2769 
2770             AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS
2771             ( p_event_source_info => l_event_source_info,
2772               p_event_class_code => null,
2773               p_event_type_code =>  null,
2774               p_event_date =>       null,
2775               p_event_status_code => l_invoice_event_status,
2776               p_valuation_method => NULL,
2777               p_security_context => l_event_security_context,
2778               p_calling_sequence => l_curr_calling_sequence
2779             );
2780 
2781             l_log_msg := 'After AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
2782             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2783                FND_LOG.STRING(G_LEVEL_PROCEDURE,
2784                               G_MODULE_NAME || l_procedure_name,
2785                               l_log_msg);
2786             END IF;
2787           END IF;
2788 
2789         END LOOP;
2790 
2791         EXIT WHEN l_invoice_distributions_cur%NOTFOUND;
2792 
2793       END LOOP;
2794       CLOSE l_invoice_distributions_cur;
2795 
2796     END IF; -- l_do_updates_flag
2797 
2798   EXCEPTION
2799     WHEN OTHERS THEN
2800       IF (l_invoice_distributions_cur%ISOPEN) THEN
2801         CLOSE l_invoice_distributions_cur;
2802       END IF;
2803 
2804      l_log_msg := 'Exception calling sequence '
2805                       ||l_curr_calling_sequence
2806                       ||' Error: '
2807                       ||SQLERRM;
2808      IF (G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL ) THEN
2809 
2810          FND_LOG.STRING(G_LEVEL_EXCEPTION,
2811                         G_MODULE_NAME || l_procedure_name,
2812                         l_log_msg);
2813       END IF;
2814 
2815       RAISE;
2816   END;
2817 
2818   DECLARE
2819 
2820  -- Bug 7042296 Modified the cursor to pick the
2821  -- Payment Adjustment Events.
2822     CURSOR l_invoice_payments_cur IS  --bug 7042296
2823       SELECT distinct(AIP.check_id),
2824              APH.accounting_event_id
2825       FROM  ap_invoice_payments AIP, ap_payment_history_all APH
2826       WHERE AIP.invoice_id = p_invoice_id
2827       AND   AIP.accounting_event_id IS NOT NULL
2828       and   AIP.check_id = APH.check_id
2829       and   APH.accounting_event_id is not null
2830       ORDER BY AIP.check_id;
2831 
2832 
2833     l_check_ids t_check_ids;
2834     l_accounting_event_ids t_accounting_event_ids;
2835     l_last_check_id NUMBER(15) := NULL;
2836     l_curr_check_id NUMBER(15);
2837     l_payment_event_status VARCHAR2(1);
2838     l_do_updates_flag BOOLEAN;
2839 
2840   BEGIN
2841 
2842     OPEN l_invoice_payments_cur;
2843     LOOP
2844 
2845       l_log_msg := 'Cursor l_invoice_payment_cur ';
2846       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
2847          FND_LOG.STRING(G_LEVEL_STATEMENT,
2848                         G_MODULE_NAME || l_procedure_name,
2849                         l_log_msg);
2850       END IF;
2851 
2852       FETCH l_invoice_payments_cur
2853       BULK COLLECT INTO
2854         l_check_ids,
2855         l_accounting_event_ids
2856       LIMIT 1000;
2857 
2858       FOR i IN 1 .. l_accounting_event_ids.count LOOP
2859 
2860         l_curr_check_id := l_check_ids(i);
2861 
2862         IF ( l_last_check_id IS NULL OR
2863              l_curr_check_id <> l_last_check_id) THEN
2864 
2865           l_last_check_id := l_curr_check_id;
2866 
2867           l_log_msg := 'Before calling proc get_payment_event_source_info';
2868           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2869             FND_LOG.STRING(G_LEVEL_PROCEDURE,
2870                            G_MODULE_NAME || l_procedure_name,
2871                            l_log_msg);
2872           END IF;
2873 
2874           l_event_source_info :=
2875             get_payment_event_source_info
2876             ( p_legal_entity_id => l_legal_entity_id,
2877               p_ledger_id => l_ledger_id,
2878               p_check_id => l_curr_check_id,
2879               p_calling_sequence => l_curr_calling_sequence
2880             );
2881 
2882           l_log_msg := 'After calling get_payment_event_source_info';
2883           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2884             FND_LOG.STRING(G_LEVEL_PROCEDURE,
2885                            G_MODULE_NAME || l_procedure_name,
2886                            l_log_msg);
2890                ( p_doc_type => PAYMENTS_ENTITY,
2887           END IF;
2888 
2889           IF ( is_event_complete
2891                  p_source_id => l_curr_check_id,
2892                  p_calling_sequence => l_curr_calling_sequence) = 'CREATED')
2893           THEN
2894 
2895             l_payment_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED;
2896 
2897             l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.EVENT_EIXSTS';
2898             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2899               FND_LOG.STRING(G_LEVEL_PROCEDURE,
2900                              G_MODULE_NAME || l_procedure_name,
2901                              l_log_msg);
2902             END IF;
2903 
2904             l_do_updates_flag :=
2905               AP_XLA_EVENTS_PKG.EVENT_EXISTS
2906               ( p_event_source_info => l_event_source_info,
2907                 p_event_class_code => NULL,
2908                 p_event_type_code => NULL,
2909                 p_event_date => NULL,
2910                 p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE,
2911                 p_event_number => NULL,
2912                 p_valuation_method => NULL,
2913                 p_security_context => l_event_security_context,
2914                 p_calling_sequence => l_curr_calling_sequence
2915               );
2916 
2917              l_log_msg := 'After AP_ACCOUNTING_EVENT_PKG.'
2918                             ||'get_payment_event_source_info';
2919              IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2920                FND_LOG.STRING(G_LEVEL_PROCEDURE,
2921                               G_MODULE_NAME || l_procedure_name,
2922                               l_log_msg);
2923              END IF;
2924 
2925           ELSE
2926 
2927             l_payment_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
2928 
2929             l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
2930             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2931                FND_LOG.STRING(G_LEVEL_PROCEDURE,
2932                               G_MODULE_NAME || l_procedure_name,
2933                               l_log_msg);
2934             END IF;
2935 
2936             l_do_updates_flag :=
2937               AP_XLA_EVENTS_PKG.EVENT_EXISTS
2938               ( p_event_source_info => l_event_source_info,
2939                 p_event_class_code => NULL,
2940                 p_event_type_code => NULL,
2941                 p_event_date => NULL,
2942                 p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED,
2943                 p_event_number => NULL,
2944                 p_valuation_method => NULL,
2945                 p_security_context => l_event_security_context,
2946                 p_calling_sequence => l_curr_calling_sequence
2947               );
2948 
2949              l_log_msg := 'After calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
2950              IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2951                FND_LOG.STRING(G_LEVEL_PROCEDURE,
2952                               G_MODULE_NAME || l_procedure_name,
2953                               l_log_msg);
2954              END IF;
2955           END IF;
2956 
2957         END IF;
2958 
2959         IF (l_do_updates_flag) THEN
2960 
2961           l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
2962           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2963             FND_LOG.STRING(G_LEVEL_PROCEDURE,
2964                            G_MODULE_NAME || l_procedure_name,
2965                            l_log_msg);
2966           END IF;
2967 
2971               p_event_id => l_accounting_event_ids(i),
2968           l_event_info :=
2969             AP_XLA_EVENTS_PKG.GET_EVENT_INFO
2970             ( p_event_source_info => l_event_source_info,
2972               p_valuation_method => NULL,
2973               p_security_context => l_event_security_context,
2974               p_calling_sequence => l_curr_calling_sequence
2975             );
2976 
2977           l_log_msg := 'After calling AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
2978           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2979             FND_LOG.STRING(G_LEVEL_PROCEDURE,
2980                            G_MODULE_NAME || l_procedure_name,
2981                            l_log_msg);
2982           END IF;
2983 
2984           IF (l_event_info.event_status_code IN
2985                 ( XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED,
2986                   XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE) AND
2987               l_event_info.event_status_code <> l_payment_event_status) THEN
2988 
2989             l_log_msg := 'Before AP_XLA_EVENTS_PKG.UPDATE_EVENT_INFO';
2990             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
2991               FND_LOG.STRING(G_LEVEL_PROCEDURE,
2992                              G_MODULE_NAME || l_procedure_name,
2993                              l_log_msg);
2994             END IF;
2995 
2996             AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS
2997             ( p_event_source_info => l_event_source_info,
2998               p_event_class_code =>  null,
2999               p_event_type_code =>   null,
3000               p_event_date =>        null,
3001               p_event_status_code => l_payment_event_status,
3002               p_valuation_method => NULL,
3003               p_security_context => l_event_security_context,
3004               p_calling_sequence => l_curr_calling_sequence
3005             );
3006 
3007             l_log_msg := 'After AP_XLA_EVENTS_PKG.UPDATE_EVENT_INFO';
3008             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3009               FND_LOG.STRING(G_LEVEL_PROCEDURE,
3010                              G_MODULE_NAME || l_procedure_name,
3011                              l_log_msg);
3012             END IF;
3013           END IF;
3014         END IF; -- l_do_updates_flag
3015       END LOOP;
3016 
3017       EXIT WHEN l_invoice_payments_cur%NOTFOUND;
3018     END LOOP;
3019     CLOSE l_invoice_payments_cur;
3020 
3021   EXCEPTION
3022     WHEN OTHERS THEN
3023       IF (l_invoice_payments_cur%ISOPEN) THEN
3024         CLOSE l_invoice_payments_cur;
3025       END IF;
3026 
3027       l_log_msg := 'Exception calling sequence '
3028                       ||l_curr_calling_sequence
3029                       ||' Error: '
3030                       ||SQLERRM;
3031       IF (G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL ) THEN
3032          FND_LOG.STRING(G_LEVEL_EXCEPTION,
3033                         G_MODULE_NAME || l_procedure_name,
3034                         l_log_msg);
3035       END IF;
3036       RAISE;
3037   END;
3038 
3039   l_log_msg := 'End of procedure '||l_procedure_name;
3040   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3041     FND_LOG.STRING(G_LEVEL_PROCEDURE,
3042                    G_MODULE_NAME || l_procedure_name,
3043                    l_log_msg);
3044   END IF;
3045 
3046   END IF; --l_event_count<>0
3047 
3048 EXCEPTION
3049   WHEN OTHERS THEN
3050     IF (SQLCODE <> -20001) THEN
3051        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
3052        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
3053        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
3054                     l_curr_calling_sequence);
3055        FND_MESSAGE.SET_TOKEN('PARAMETERS',
3056               'p_invoice_id = '||p_invoice_id);
3057     END IF;
3058     APP_EXCEPTION.RAISE_EXCEPTION();
3059 END update_invoice_events_status;
3060 
3061 
3062 /*============================================================================
3063  |  PROCEDURE -  UPDATE_PAYMENT_EVENTS_STATUS (PUBLIC)
3064  |
3065  |  DESCRIPTION
3066  |          Update payment event's status
3067  |
3068  |  PRAMETERS
3069  |          p_check_id: Check ID
3070  |          p_calling_sequence: Debug information
3071  |
3072  |  KNOWN ISSUES:
3073  |
3074  |  NOTES:
3075  |
3076  |  MODIFICATION HISTORY
3077  |  Date         Author             Description of Change
3078  |
3079  *===========================================================================*/
3080 PROCEDURE update_payment_events_status (
3081                        p_check_id         IN NUMBER,
3082                        p_calling_sequence IN VARCHAR2)
3083 IS
3084 
3085   TYPE t_invoice_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
3086   TYPE t_accounting_event_ids IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
3087 
3088   l_legal_entity_id NUMBER(15);
3089   l_ledger_id NUMBER(15);
3090   l_org_id NUMBER(15);
3091   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
3092   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
3093   l_event_info XLA_EVENTS_PUB_PKG.T_EVENT_INFO;
3094   l_transaction_date  AP_INVOICES_ALL.invoice_date%TYPE;
3095 
3096   l_curr_calling_sequence VARCHAR2(2000);
3097 
3098   -- Logging:
3099   l_procedure_name CONSTANT VARCHAR2(30) := 'UPDATE_PAYMENT_EVENTS_STATUS';
3100   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
3101   --7011943
3102     l_count NUMBER;
3103     l_check_id NUMBER;
3104     l_pmt_awt_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
3105     l_event_source_info_temp XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
3106 
3107 
3108 BEGIN
3109 
3110   l_curr_calling_sequence := p_calling_sequence ||
3111             ' -> AP_ACCOUNTING_EVENTS_PKG.UPDATE_PAYMENT_EVENTS_STATUS';
3112 
3116   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3113   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3114 
3115   l_log_msg := 'Begin of procedure '|| l_procedure_name;
3117      FND_LOG.STRING(G_LEVEL_PROCEDURE,
3118                     G_MODULE_NAME || l_procedure_name,
3119                     l_log_msg);
3120   END IF;
3121 
3122   DECLARE
3123 
3124     CURSOR l_invoice_distributions_cur IS
3125       SELECT distinct(AID.invoice_id),
3126              AID.accounting_event_id
3127       FROM   ap_invoice_payments AIP,
3128              ap_invoice_distributions AID
3129       WHERE AIP.invoice_id = AID.invoice_id
3130       AND   AIP.check_id = p_check_id
3131       AND   AID.accounting_event_id IS NOT NULL
3132       ORDER BY AID.invoice_id;
3133 
3134     l_invoice_ids t_invoice_ids;
3135     l_accounting_event_ids t_accounting_event_ids;
3136     l_last_invoice_id NUMBER(15) := NULL;
3137     l_curr_invoice_id NUMBER(15);
3138     l_invoice_event_status VARCHAR2(1);
3139     l_do_updates_flag BOOLEAN;
3140 
3141   BEGIN
3142 
3143     l_log_msg := 'Open cursor l_invoice_distributions_cur';
3144     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3145       FND_LOG.STRING(G_LEVEL_STATEMENT,
3146                      G_MODULE_NAME || l_procedure_name,
3147                      l_log_msg);
3148     END IF;
3149 
3150     OPEN l_invoice_distributions_cur;
3151     LOOP
3152 
3153       FETCH l_invoice_distributions_cur
3154       BULK COLLECT INTO
3155         l_invoice_ids,
3156         l_accounting_event_ids
3157       LIMIT 1000;
3158 
3159 
3160       FOR i IN 1 .. l_accounting_event_ids.count LOOP
3161 
3162         l_curr_invoice_id := l_invoice_ids(i);
3163 
3164         IF ( l_last_invoice_id IS NULL OR
3165              l_curr_invoice_id <> l_last_invoice_id) THEN
3166 
3167           l_last_invoice_id := l_curr_invoice_id;
3168 
3169           l_log_msg := 'Before calling procedure get_invoice_info';
3170           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3171             FND_LOG.STRING(G_LEVEL_PROCEDURE,
3172                            G_MODULE_NAME || l_procedure_name,
3173                            l_log_msg);
3174           END IF;
3175 
3176           get_invoice_info
3177           ( p_invoice_id => l_curr_invoice_id,
3178             p_org_id => l_org_id, -- OUT
3179             p_legal_entity_id => l_legal_entity_id, -- OUT
3180             p_ledger_id => l_ledger_id, -- OUT
3181             p_transaction_date => l_transaction_date, -- OUT
3182             p_calling_sequence => l_curr_calling_sequence
3183           );
3184 
3185           l_log_msg := 'After calling procedure get_invoice_info';
3186           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3187             FND_LOG.STRING(G_LEVEL_PROCEDURE,
3188                            G_MODULE_NAME || l_procedure_name,
3189                            l_log_msg);
3190           END IF;
3191 
3192           l_log_msg := 'Before calling procedure get_event_security_context';
3193           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3194             FND_LOG.STRING(G_LEVEL_PROCEDURE,
3195                            G_MODULE_NAME || l_procedure_name,
3196                            l_log_msg);
3197           END IF;
3198 
3199           l_event_security_context :=
3200             get_event_security_context
3201             ( p_org_id => l_org_id,
3202               p_calling_sequence => l_curr_calling_sequence
3203             );
3204 
3205           l_log_msg := 'After calling procedure get_event_security_context';
3206           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3207             FND_LOG.STRING(G_LEVEL_PROCEDURE,
3208                            G_MODULE_NAME || l_procedure_name,
3209                            l_log_msg);
3210           END IF;
3211 
3212           l_log_msg := 'Before calling get_invoice_event_source_info';
3213           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3214             FND_LOG.STRING(G_LEVEL_PROCEDURE,
3215                            G_MODULE_NAME || l_procedure_name,
3216                            l_log_msg);
3217           END IF;
3218 
3219           l_event_source_info :=
3220             get_invoice_event_source_info
3221             ( p_legal_entity_id => l_legal_entity_id,
3222               p_ledger_id => l_ledger_id,
3223               p_invoice_id => l_curr_invoice_id,
3224               p_calling_sequence => l_curr_calling_sequence
3225             );
3226           l_event_source_info_temp := l_event_source_info; --7011943
3227           l_log_msg := 'After calling procedure get_invoice_info';
3228           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3229             FND_LOG.STRING(G_LEVEL_PROCEDURE,
3230                            G_MODULE_NAME || l_procedure_name,
3231                            l_log_msg);
3232           END IF;
3233 
3234           IF (is_event_complete
3235              (p_doc_type => INVOICES_ENTITY,
3236               p_source_id => l_curr_invoice_id,
3237               p_calling_sequence => l_curr_calling_sequence) = 'CREATED') THEN
3238 
3239             l_invoice_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED;
3240 
3241             l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
3242             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3243               FND_LOG.STRING(G_LEVEL_PROCEDURE,
3244                              G_MODULE_NAME || l_procedure_name,
3245                              l_log_msg);
3246             END IF;
3247 
3248             l_do_updates_flag :=
3249               AP_XLA_EVENTS_PKG.EVENT_EXISTS
3250               ( p_event_source_info => l_event_source_info,
3251                 p_event_class_code => NULL,
3255                 p_event_number => NULL,
3252                 p_event_type_code => NULL,
3253                 p_event_date => NULL,
3254                 p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE,
3256                 p_valuation_method => NULL,
3257                 p_security_context => l_event_security_context,
3258                 p_calling_sequence => l_curr_calling_sequence
3259               );
3260 
3261               l_log_msg := 'After calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
3262               IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3263                   FND_LOG.STRING(G_LEVEL_PROCEDURE,
3264                                  G_MODULE_NAME || l_procedure_name,
3265                                  l_log_msg);
3266               END IF;
3267           ELSE
3268 
3269             l_invoice_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
3270 
3271             l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
3272             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3273               FND_LOG.STRING(G_LEVEL_PROCEDURE,
3274                              G_MODULE_NAME || l_procedure_name,
3275                              l_log_msg);
3276             END IF;
3277 
3278             l_do_updates_flag :=
3279               AP_XLA_EVENTS_PKG.EVENT_EXISTS
3280               ( p_event_source_info => l_event_source_info,
3281                 p_event_class_code => NULL,
3282                 p_event_type_code => NULL,
3283                 p_event_date => NULL,
3284                 p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED,
3285                 p_event_number => NULL,
3286                 p_valuation_method => NULL,
3287                 p_security_context => l_event_security_context,
3288                 p_calling_sequence => l_curr_calling_sequence);
3289 
3290             l_log_msg := 'After calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
3291             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3292               FND_LOG.STRING(G_LEVEL_PROCEDURE,
3293                              G_MODULE_NAME || l_procedure_name,
3294                              l_log_msg);
3295             END IF;
3296 
3297           END IF;
3298 
3299         END IF;
3300 
3301         IF (l_do_updates_flag) THEN
3302 
3303           l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
3304           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3305               FND_LOG.STRING(G_LEVEL_PROCEDURE,
3306                              G_MODULE_NAME || l_procedure_name,
3307                              l_log_msg);
3308           END IF;
3309           --bug 7011943
3310           select count(*)
3311           into l_count
3312           from ap_invoice_distributions_all
3313           where accounting_event_id = l_accounting_event_ids(i)
3314           and invoice_id = l_event_source_info.source_id_int_1
3315           and awt_invoice_payment_id is not null;
3316 
3317           if (l_count > 0) then
3318             BEGIN
3319                 select ac.check_id
3320                 into l_check_id
3321                 from ap_invoice_payments_all aip,
3322                      ap_checks_all ac
3323                 where aip.check_id=ac.check_id
3324                   and   aip.accounting_event_id = l_accounting_event_ids(i)
3325                   and   aip.invoice_id=l_event_source_info.source_id_int_1;
3326 
3327 
3328              l_pmt_awt_event_source_info:=get_payment_event_source_info(p_legal_entity_id => l_legal_entity_id,
3329                               p_ledger_id => l_ledger_id,
3330                               p_check_id => l_check_id,
3331                               p_calling_sequence => l_curr_calling_sequence);
3332              l_event_source_info := l_pmt_awt_event_source_info;
3333 
3334             EXCEPTION
3335              WHEN OTHERS THEN
3336                NULL;
3337             END;
3338           ELSE
3339             l_event_source_info := l_event_source_info_temp;
3340           end if;
3341           --bug 7011943 ends
3342 
3343           l_event_info :=
3344             AP_XLA_EVENTS_PKG.GET_EVENT_INFO
3345             ( p_event_source_info => l_event_source_info,
3346               p_event_id => l_accounting_event_ids(i),
3347               p_valuation_method => NULL,
3348               p_security_context => l_event_security_context,
3349               p_calling_sequence => l_curr_calling_sequence);
3350           --bug 7011943
3351           l_event_source_info := l_event_source_info_temp;
3352 
3353           l_log_msg := 'After calling AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
3354           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3355               FND_LOG.STRING(G_LEVEL_PROCEDURE,
3356                              G_MODULE_NAME || l_procedure_name,
3357                              l_log_msg);
3358           END IF;
3359 
3360           IF ( l_event_info.event_status_code IN
3361                ( XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED,
3362                  XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE) AND
3363                l_event_info.event_status_code <> l_invoice_event_status) THEN
3364 
3365             l_log_msg := 'Before AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
3366             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3367               FND_LOG.STRING(G_LEVEL_PROCEDURE,
3368                              G_MODULE_NAME || l_procedure_name,
3369                              l_log_msg);
3370             END IF;
3371 
3372             AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS
3373             ( p_event_source_info => l_event_source_info,
3374               p_event_class_code =>  null,
3375               p_event_type_code =>   null,
3376               p_event_date =>        null,
3377               p_event_status_code => l_invoice_event_status,
3378               p_valuation_method =>  NULL,
3382             l_log_msg := 'After AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
3379               p_security_context =>  l_event_security_context,
3380               p_calling_sequence =>  l_curr_calling_sequence);
3381 
3383             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3384               FND_LOG.STRING(G_LEVEL_PROCEDURE,
3385                              G_MODULE_NAME || l_procedure_name,
3386                              l_log_msg);
3387             END IF;
3388           END IF;
3389 
3390 
3391         END IF; -- l_do_updates_flag
3392 
3393       END LOOP;
3394 
3395       EXIT WHEN l_invoice_distributions_cur%NOTFOUND;
3396     END LOOP;
3397     CLOSE l_invoice_distributions_cur;
3398 
3399   EXCEPTION
3400     WHEN OTHERS THEN
3401       IF (l_invoice_distributions_cur%ISOPEN) THEN
3402         CLOSE l_invoice_distributions_cur;
3403       END IF;
3404 
3405       l_log_msg := 'Exception calling sequence '
3406                        ||l_curr_calling_sequence
3407                        ||' Error: '
3408                        ||SQLERRM;
3409       IF (G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL ) THEN
3410          FND_LOG.STRING(G_LEVEL_EXCEPTION,
3411                         G_MODULE_NAME || l_procedure_name,
3412                         l_log_msg);
3413       END IF;
3414       RAISE;
3415   END;
3416 
3417   DECLARE
3418 
3419     CURSOR l_invoice_payments_cur IS
3420       SELECT distinct(AIP.accounting_event_id)
3421       FROM   ap_invoice_payments AIP
3422       WHERE AIP.check_id = p_check_id
3423       AND   AIP.accounting_event_id IS NOT NULL;
3424 
3425     l_payment_event_status VARCHAR2(1);
3426     l_do_updates_flag BOOLEAN;
3427     l_accounting_event_ids t_accounting_event_ids;
3428 
3429   BEGIN
3430 
3431     l_log_msg := 'Before calling procedure get_payment_info';
3432     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3433        FND_LOG.STRING(G_LEVEL_PROCEDURE,
3434                       G_MODULE_NAME || l_procedure_name,
3435                       l_log_msg);
3436     END IF;
3437 
3438     get_payment_info
3439     ( p_check_id => p_check_id,
3440       p_org_id => l_org_id, -- OUT
3441       p_legal_entity_id => l_legal_entity_id, -- OUT
3442       p_ledger_id => l_ledger_id, -- OUT
3443       p_calling_sequence => l_curr_calling_sequence
3444     );
3445 
3446     l_log_msg := 'After calling procedure get_payment_info';
3447     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3448        FND_LOG.STRING(G_LEVEL_PROCEDURE,
3449                       G_MODULE_NAME || l_procedure_name,
3450                       l_log_msg);
3451     END IF;
3452 
3453     l_log_msg := 'Before calling procedure get_event_security_context';
3454     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3455        FND_LOG.STRING(G_LEVEL_PROCEDURE,
3456                       G_MODULE_NAME || l_procedure_name,
3457                       l_log_msg);
3458     END IF;
3459 
3460     l_event_security_context :=
3461       get_event_security_context
3462       ( p_org_id => l_org_id,
3463         p_calling_sequence => l_curr_calling_sequence
3464       );
3465 
3466     l_log_msg := 'After calling procedure get_event_security_context';
3467     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3468        FND_LOG.STRING(G_LEVEL_PROCEDURE,
3469                       G_MODULE_NAME || l_procedure_name,
3470                       l_log_msg);
3471     END IF;
3472 
3473     l_log_msg := 'Before calling procedure get_payment_event_source_info';
3474     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3475        FND_LOG.STRING(G_LEVEL_PROCEDURE,
3476                       G_MODULE_NAME || l_procedure_name,
3477                       l_log_msg);
3478     END IF;
3479 
3480     l_event_source_info :=
3481       get_payment_event_source_info
3482       ( p_legal_entity_id => l_legal_entity_id,
3483         p_ledger_id => l_ledger_id,
3484         p_check_id => p_check_id,
3485         p_calling_sequence => l_curr_calling_sequence
3486       );
3487 
3488     l_log_msg := 'After calling procedure get_payment_event_source_info';
3489     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3490        FND_LOG.STRING(G_LEVEL_PROCEDURE,
3491                       G_MODULE_NAME || l_procedure_name,
3492                       l_log_msg);
3493     END IF;
3494 
3495     IF (is_event_complete
3496          (p_doc_type => PAYMENTS_ENTITY,
3497           p_source_id => p_check_id,
3498           p_calling_sequence => l_curr_calling_sequence) = 'CREATED') THEN
3499 
3500       l_payment_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED;
3501 
3502       l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.EVENT_EXISTS';
3503       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3504         FND_LOG.STRING(G_LEVEL_PROCEDURE,
3505                        G_MODULE_NAME || l_procedure_name,
3506                        l_log_msg);
3507       END IF;
3508 
3509       l_do_updates_flag :=
3510         AP_XLA_EVENTS_PKG.EVENT_EXISTS
3511         ( p_event_source_info => l_event_source_info,
3512           p_event_class_code => NULL,
3513           p_event_type_code => NULL,
3514           p_event_date => NULL,
3515           p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE,
3516           p_event_number => NULL,
3517           p_valuation_method => NULL,
3518           p_security_context => l_event_security_context,
3519           p_calling_sequence => l_curr_calling_sequence
3520         );
3521 
3522       l_log_msg := 'After calling procedure AP_XLA_EVENTS_PKG.EVENT_EXISTS';
3523       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3524         FND_LOG.STRING(G_LEVEL_PROCEDURE,
3525                        G_MODULE_NAME || l_procedure_name,
3526                        l_log_msg);
3527       END IF;
3528 
3529     ELSE
3530 
3531       l_payment_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE;
3532 
3533       l_log_msg := 'Before calling procedure AP_XLA_EVENTS_PKG.EVENT_EXISTS';
3534       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3535         FND_LOG.STRING(G_LEVEL_PROCEDURE,
3536                        G_MODULE_NAME || l_procedure_name,
3537                        l_log_msg);
3538       END IF;
3539 
3540       l_do_updates_flag :=
3541         AP_XLA_EVENTS_PKG.EVENT_EXISTS
3542         ( p_event_source_info => l_event_source_info,
3543           p_event_class_code => NULL,
3544           p_event_type_code => NULL,
3545           p_event_date => NULL,
3546           p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED,
3547           p_event_number => NULL,
3548           p_valuation_method => NULL,
3549           p_security_context => l_event_security_context,
3550           p_calling_sequence => l_curr_calling_sequence
3551         );
3552 
3553        l_log_msg := 'After calling procedure AP_XLA_EVENTS_PKG.EVENT_EXISTS';
3554        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3555          FND_LOG.STRING(G_LEVEL_PROCEDURE,
3556                         G_MODULE_NAME || l_procedure_name,
3557                         l_log_msg);
3558        END IF;
3559 
3560     END IF;
3561 
3562     IF (l_do_updates_flag) THEN
3563 
3564       OPEN l_invoice_payments_cur;
3565       LOOP
3566 
3567         l_log_msg := 'Fetch data from cursor l_invoice_payments_cur';
3568         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3569           FND_LOG.STRING(G_LEVEL_STATEMENT,
3570                          G_MODULE_NAME || l_procedure_name,
3571                          l_log_msg);
3572         END IF;
3573 
3574         FETCH l_invoice_payments_cur
3575         BULK COLLECT INTO
3576           l_accounting_event_ids
3577         LIMIT 1000;
3578 
3579         l_log_msg := 'Begin loop for l_accounting_event_ids';
3580         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3581            FND_LOG.STRING(G_LEVEL_STATEMENT,
3582                           G_MODULE_NAME || l_procedure_name,
3583                           l_log_msg);
3584         END IF;
3585 
3586         FOR i IN 1 ..l_accounting_event_ids.count LOOP
3587 
3588           l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
3589           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3590              FND_LOG.STRING(G_LEVEL_PROCEDURE,
3591                             G_MODULE_NAME || l_procedure_name,
3592                             l_log_msg);
3593           END IF;
3594 
3595           l_event_info :=
3596             AP_XLA_EVENTS_PKG.GET_EVENT_INFO
3597             ( p_event_source_info => l_event_source_info,
3598               p_event_id => l_accounting_event_ids(i),
3599               p_valuation_method => NULL,
3600               p_security_context => l_event_security_context,
3601               p_calling_sequence => l_curr_calling_sequence
3602             );
3603 
3604           l_log_msg := 'After calling  AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
3605           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3606              FND_LOG.STRING(G_LEVEL_PROCEDURE,
3607                             G_MODULE_NAME || l_procedure_name,
3608                             l_log_msg);
3609           END IF;
3610 
3611           IF ( l_event_info.event_status_code IN
3612                 ( XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED,
3613                   XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE) AND
3614             l_event_info.event_status_code <> l_payment_event_status) THEN
3615 
3616             l_log_msg := 'Before AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
3617             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3618               FND_LOG.STRING(G_LEVEL_PROCEDURE,
3619                              G_MODULE_NAME || l_procedure_name,
3620                              l_log_msg);
3621             END IF;
3622 
3623             AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS
3624             ( p_event_source_info => l_event_source_info,
3625               p_event_class_code =>
3626                 get_event_class
3627                 (
3628                   p_event_type => l_event_info.event_type_code,
3632               p_event_date => l_event_info.event_date,
3629                   p_calling_sequence => l_curr_calling_sequence
3630                 ),
3631               p_event_type_code => l_event_info.event_type_code,
3633               p_event_status_code => l_payment_event_status,
3634               p_valuation_method => NULL,
3635               p_security_context => l_event_security_context,
3636               p_calling_sequence => l_curr_calling_sequence
3637             );
3638 
3639             l_log_msg := 'After AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
3640             IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3641               FND_LOG.STRING(G_LEVEL_PROCEDURE,
3642                              G_MODULE_NAME || l_procedure_name,
3643                              l_log_msg);
3644             END IF;
3645 
3646           END IF;
3647 
3648         END LOOP;
3649         EXIT WHEN l_invoice_payments_cur%NOTFOUND;
3650       END LOOP;
3651 
3652       CLOSE l_invoice_payments_cur;
3653 
3654       l_log_msg := 'End loop for l_accounting_event_ids';
3655       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3656         FND_LOG.STRING(G_LEVEL_STATEMENT,
3657                        G_MODULE_NAME || l_procedure_name,
3658                        l_log_msg);
3659       END IF;
3660     END IF; -- l_do_updates_flag
3661 
3662   EXCEPTION
3663     WHEN OTHERS THEN
3664       IF (l_invoice_payments_cur%ISOPEN) THEN
3665         CLOSE l_invoice_payments_cur;
3666       END IF;
3667       l_log_msg := 'Exception calling sequence '
3668                       ||l_curr_calling_sequence
3669                       ||' Error: '
3670                       ||SQLERRM;
3671       IF (G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL ) THEN
3672          FND_LOG.STRING(G_LEVEL_EXCEPTION,
3673                         G_MODULE_NAME || l_procedure_name,
3674                         l_log_msg);
3675       END IF;
3676       RAISE;
3677   END;
3678 
3679   l_log_msg := 'End of procedure '||l_procedure_name;
3680   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3681      FND_LOG.STRING(G_LEVEL_PROCEDURE,
3682                     G_MODULE_NAME || l_procedure_name,
3683                     l_log_msg);
3684   END IF;
3685 
3686 EXCEPTION
3687   WHEN OTHERS THEN
3688     IF (SQLCODE <> -20001) THEN
3689        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
3690        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
3691        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
3692                     l_curr_calling_sequence);
3693        FND_MESSAGE.SET_TOKEN('PARAMETERS',
3694                'p_check_id = '||p_check_id);
3695        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
3696     END IF;
3697     APP_EXCEPTION.RAISE_EXCEPTION();
3698 END update_payment_events_status;
3699 
3700 /*============================================================================
3701  |  PROCEDURE -  update_pmt_batch_event_status
3702  |
3703  |  DESCRIPTION
3704  |          Update accounting events for 'PAYMENT BATCH' type
3705  |
3706  |  PRAMETERS
3707  |          p_completed_pmts_group_id: payment request name
3708  |          p_accounting_date:Event Date
3709  |          p_org_id :  org id for each small batch inside the payment request
3710  |          p_set_of_books_id:  the ledger id for this ou
3711  |          p_calling_sequence: Debug information
3712  |
3713  |  KNOWN ISSUES:
3714  |
3715  |  NOTES:
3716  |
3717  |  MODIFICATION HISTORY
3718  |  Date         Author             Description of Change
3719  |
3720  *===========================================================================*/
3721 PROCEDURE update_pmt_batch_event_status(
3722               p_checkrun_name              IN    VARCHAR2,
3723               p_completed_pmts_group_id    IN    NUMBER,
3724               p_org_id                     IN    NUMBER,
3725               p_calling_sequence           IN    VARCHAR2)
3726 IS
3727 
3728   l_record_count          NUMBER;
3729   l_curr_calling_sequence VARCHAR2(2000);
3730 
3731   -- Logging:
3732   --4700081
3733   l_procedure_name CONSTANT VARCHAR2(40) := 'update_payment_batch_event_status';
3734   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
3735 
3736 BEGIN
3737 
3738   l_curr_calling_sequence := p_calling_sequence ||
3739           ' -> AP_ACCOUNTING_EVENTS_PKG.update_payment_batch_event_status';
3740 
3741   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3742 
3743   l_log_msg := 'Begin of procedure'||l_procedure_name;
3744   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3745       FND_LOG.STRING(G_LEVEL_PROCEDURE,
3746                      G_MODULE_NAME || l_procedure_name,
3747                      l_log_msg);
3748   END IF;
3749 
3750   -- Bug 5512197. Changed the reference of XL_EVENTS_GT to XLA_EVENTS_INT_GT
3751   SELECT COUNT(*)
3752     INTO l_record_count
3753     FROM XLA_EVENTS_INT_GT XEG
3754    WHERE XEG.application_id = 200
3755      AND XEG.entity_code = PAYMENTS_ENTITY
3756      AND XEG.event_type_code = PAYMENT_CREATED_TYPE;
3757 
3758   IF ( l_record_count <> 0 ) THEN
3759 
3760     l_log_msg := 'update the gt table set event status = no action';
3761     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3762       FND_LOG.STRING(G_LEVEL_STATEMENT,
3763                      G_MODULE_NAME || l_procedure_name,
3764                      l_log_msg);
3765     END IF;
3766 
3767     UPDATE  XLA_EVENTS_INT_GT XEG
3768            SET  event_status_code = XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION
3769         WHERE   XEG.application_id = 200
3770           AND   XEG.source_id_int_1  IN
3774                      and AC.completed_pmts_group_id = p_completed_pmts_group_id
3771                 ( SELECT AC.check_id
3772                     FROM AP_CHECKS_ALL AC
3773                    WHERE AC.checkrun_name = p_checkrun_name
3775                      and AC.org_id = p_org_id );
3776 
3777         l_log_msg := 'update the gt table in success and call the api';
3778     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3779       FND_LOG.STRING(G_LEVEL_STATEMENT,
3780                      G_MODULE_NAME || l_procedure_name,
3781                      l_log_msg);
3782     END IF;
3783 
3784     XLA_EVENTS_PUB_PKG.update_bulk_event_statuses(p_application_id => '200');
3785 
3786     l_log_msg := 'after calling xla update status api';
3787         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3788       FND_LOG.STRING(G_LEVEL_STATEMENT,
3789                      G_MODULE_NAME || l_procedure_name,
3790                      l_log_msg);
3791     END IF;
3792 
3793   ELSE
3794 
3795     l_log_msg := 'XLA_EVENTS_INT_GT TABLE Has no records';
3796     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3797        FND_LOG.STRING(G_LEVEL_STATEMENT,
3798                       G_MODULE_NAME || l_procedure_name,
3799                       l_log_msg);
3800     END IF;
3801     APP_EXCEPTION.RAISE_EXCEPTION();
3802   END IF;
3803 
3804   l_log_msg := 'End of the procedure';
3805   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3806     FND_LOG.STRING(G_LEVEL_STATEMENT,
3807                    G_MODULE_NAME || l_procedure_name,
3808                    l_log_msg);
3809   END IF;
3810 
3811 EXCEPTION
3812   WHEN OTHERS THEN
3813 
3814     IF (SQLCODE <> -20001) THEN
3815        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
3816        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
3817        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
3818                     l_curr_calling_sequence);
3819        FND_MESSAGE.SET_TOKEN('PARAMETERS',
3820                'p_checkrun_name = '||p_checkrun_name
3821            ||', p_completed_pmts_group_id = '||p_completed_pmts_group_id
3822            ||', p_org_id = '||p_org_id
3823            ||', p_checkrun_name = '||p_checkrun_name);
3824        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
3825     END IF;
3826     fnd_file.put_line(FND_FILE.LOG,l_log_msg||'|'||SQLERRM||' - '||systimestamp); --Bug 14279929
3827     APP_EXCEPTION.RAISE_EXCEPTION();
3828 END update_pmt_batch_event_status;
3829 
3830 
3831 /*============================================================================
3832  |  PROCEDURE -  CREATE_PAYMENT_BATCH_EVENTS (PRIVATE)
3833  |
3834  |  DESCRIPTION
3835  |          Create accounting events for 'PAYMENT BATCH' type
3836  |
3837  |  PRAMETERS
3838  |          p_checkrun_name: payment request name
3839  |          p_accounting_date:Event Date
3840  |          p_org_id :  org id for each small batch inside the payment request
3841  |          p_set_of_books_id:  the ledger id for this ou
3842  |          p_calling_sequence: Debug information
3843  |
3844  |  KNOWN ISSUES:
3845  |
3846  |  NOTES:
3847  |
3848  |  MODIFICATION HISTORY
3849  |  Date         Author             Description of Change
3850  |
3851  *===========================================================================*/
3852 PROCEDURE create_payment_batch_events(
3853               p_checkrun_name              IN    VARCHAR2,
3854               p_completed_pmts_group_id    IN    NUMBER,
3855               p_accounting_date            IN    DATE,
3856               p_org_id                     IN    NUMBER,
3857               p_set_of_books_id            IN    NUMBER,
3858               p_calling_sequence           IN    VARCHAR2)
3859 IS
3860 
3861   l_event_type VARCHAR2(30) := PAYMENT_CREATED_TYPE;
3862   l_event_status VARCHAR2(1) := XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED;
3863   l_curr_calling_sequence VARCHAR2(2000);
3864   l_count NUMBER  := 0;
3865 
3866   -- Logging:
3867   l_procedure_name CONSTANT VARCHAR2(30) := 'CREATE_PAYMENT_BATCH_EVENTS';
3868   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
3869 
3870   --bug 8358552 starts
3871   l_dummy number;
3872   --bug 8358552 ends
3873 
3874 BEGIN
3875 
3876   l_curr_calling_sequence := p_calling_sequence ||
3877           ' -> AP_ACCOUNTING_EVENTS_PKG.CREATE_PAYMENT_BATCH_EVENTS';
3878 
3879   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3880 
3881   l_log_msg := 'Begin of procedure'||l_procedure_name;
3882   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3883       FND_LOG.STRING(G_LEVEL_PROCEDURE,
3884                      G_MODULE_NAME || l_procedure_name,
3885                      l_log_msg);
3886 
3887   END IF;
3888 
3889   l_log_msg := 'p_set_of_books_id = '|| p_set_of_books_id ||
3890                'p_org_id = '|| p_org_id ||
3891                'p_completed_pmts_group_id = '|| p_completed_pmts_group_id ||
3892                'p_checkrun_name = '|| p_checkrun_name;
3893   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3894       FND_LOG.STRING(G_LEVEL_PROCEDURE,
3895                      G_MODULE_NAME || l_procedure_name,
3896                      l_log_msg);
3897 
3898   END IF;
3899 
3900   BEGIN
3901 
3902     l_log_msg := 'Begin to clean up the xla_event_gt_table';
3903     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3904       FND_LOG.STRING(G_LEVEL_PROCEDURE,
3905                      G_MODULE_NAME || l_procedure_name,
3906                      l_log_msg);
3907     END IF;
3908 
3909     DELETE XLA_EVENTS_INT_GT XEG
3910      WHERE application_id = 200;
3911 
3912     l_log_msg := 'After clean up the xla_event_gt_table';
3916                      l_log_msg);
3913     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3914       FND_LOG.STRING(G_LEVEL_PROCEDURE,
3915                      G_MODULE_NAME || l_procedure_name,
3917     END IF;
3918 
3919   END;
3920 
3921   BEGIN
3922 
3923         l_log_msg := 'create event for group_id = ' || p_completed_pmts_group_id ;
3924     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
3925       FND_LOG.STRING(G_LEVEL_PROCEDURE,
3926                      G_MODULE_NAME || l_procedure_name,
3927                      l_log_msg);
3928     END IF;
3929 
3930     INSERT INTO  XLA_EVENTS_INT_GT (
3931         application_id,
3932         ledger_id,
3933         legal_entity_id,
3934         entity_code,
3935         transaction_number,
3936         source_id_int_1,
3937         transaction_date,
3938         security_id_int_1,
3939         event_type_code,
3940         event_date,
3941         event_status_code )
3942     (SELECT
3943            '200',
3944            p_set_of_books_id,
3945            ac.legal_entity_id,
3946            PAYMENTS_ENTITY,
3947            ac.check_number,
3948            ac.check_id,
3949            ac.check_date,
3950            ac.org_id,
3951            l_event_type,
3952            p_accounting_date,
3953            --bug 8358552 starts
3954            --l_event_status
3955            --Bug 9359625 Only check for null xrate fields on foreign curr.
3956            decode(ac.currency_code, asp.base_currency_code, XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED,
3957            decode(ac.exchange_date, NULL, XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE,
3958                 decode(ac.exchange_rate_type, NULL, XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE,
3959                 decode(ac.exchange_rate, NULL, XLA_EVENTS_PUB_PKG.C_EVENT_INCOMPLETE,
3960                 XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED))))
3961            --bug 8358552 ends
3962       FROM ap_checks_all ac
3963       , ap_system_parameters_all asp
3964      WHERE ac.checkrun_name = p_checkrun_name
3965            AND ac.completed_pmts_group_id = p_completed_pmts_group_id
3966            AND ac.org_id = p_org_id
3967            AND ac.org_id = asp.org_id);
3968 
3969 
3970     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3971 
3972        SELECT COUNT(*)
3973        INTO l_count
3974        FROM XLA_EVENTS_INT_GT;
3975 
3976        l_log_msg := 'event gt table has record number = '|| l_count;
3977        FND_LOG.STRING(G_LEVEL_STATEMENT,
3978                      G_MODULE_NAME || l_procedure_name,
3979                      l_log_msg);
3980     END IF;
3981 
3982   EXCEPTION
3983   WHEN OTHERS THEN
3984        l_log_msg := 'unknown exception '||SQLERRM||' when try to insert into xla gt table';
3985        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3986        FND_LOG.STRING(G_LEVEL_STATEMENT,
3987                        G_MODULE_NAME || l_procedure_name,
3988                        l_log_msg);
3989        END IF;
3990      fnd_file.put_line(FND_FILE.LOG,l_log_msg||'|'||SQLERRM||' - '||systimestamp); --Bug 14279929
3991      APP_EXCEPTION.RAISE_EXCEPTION(); --Bug 14279929
3992   END;
3993 
3994   l_log_msg := 'after insert into xla_event_gt table';
3995   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
3996     FND_LOG.STRING(G_LEVEL_STATEMENT,
3997                      G_MODULE_NAME || l_procedure_name,
3998                      l_log_msg);
3999   END IF;
4000 
4001   BEGIN
4002     XLA_EVENTS_PUB_PKG.create_bulk_events
4003        (p_source_application_id => NULL
4004        ,p_application_id        => '200'
4005        ,p_legal_entity_id       => NULL
4006        ,p_ledger_id             => p_set_of_books_id
4007        ,p_entity_type_code      => PAYMENTS_ENTITY );
4008   END;
4009 
4010   l_log_msg := 'After calling the sla create_bulk_events';
4011   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
4012     FND_LOG.STRING(G_LEVEL_STATEMENT,
4013                      G_MODULE_NAME || l_procedure_name,
4014                      l_log_msg);
4015   END IF;
4016 
4017   l_log_msg := 'Right before insert into ap_payment_history table';
4018   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
4019     FND_LOG.STRING(G_LEVEL_STATEMENT,
4020                      G_MODULE_NAME || l_procedure_name,
4021                      l_log_msg);
4022   END IF;
4023 
4024   BEGIN
4025 
4026     INSERT INTO ap_payment_history_all
4027     ( payment_history_id,
4028       check_id,
4029       accounting_date,
4030       transaction_type,
4031       posted_flag,
4032       trx_bank_amount,
4033       errors_bank_amount,
4034       charges_bank_amount,
4035       bank_currency_code,
4036       bank_to_base_xrate_type,
4037       bank_to_base_xrate_date,
4038       bank_to_base_xrate,
4039       trx_pmt_amount,
4040       errors_pmt_amount,
4041       charges_pmt_amount,
4042       pmt_currency_code,
4043       pmt_to_base_xrate_type,
4044       pmt_to_base_xrate_date,
4045       pmt_to_base_xrate,
4046       trx_base_amount,
4047       errors_base_amount,
4048       charges_base_amount,
4049       matched_flag,
4050       rev_pmt_hist_id,
4051       creation_date,
4052       created_by,
4053       last_update_date,
4054       last_updated_by,
4055       last_update_login,
4056       program_update_date,
4057       program_application_id,
4058       program_id,
4059       accounting_event_id,
4060       request_id,
4064           ap_payment_history_s.NEXTVAL, -- payment_history_id
4061       org_id,
4062       related_event_id ) -- Bug 5015973  -- Bug 5658623: Adding hint
4063     ( select  /*+ Leading(xeg) index(ac ap_checks_u1) */
4065           ac.check_id, -- check_id
4066           trunc(p_accounting_date), -- accounting_date  bug6602676
4067           l_event_type, -- transaction_type
4068           'N', -- posted_flag
4069           NULL, -- trx_bank_amount
4070           NULL, -- errors_bank_amount
4071           NULL, -- charges_bank_amount
4072           NULL, -- bank_currency_code
4073           NULL, -- bank_to_base_xrate_type
4074           NULL, -- bank_to_base_xrate_date
4075           NULL, -- bank_to_base_xrate
4076           ac.amount, -- trx_pmt_amount
4077           NULL, -- errors_pmt_amount
4078           NULL, -- charges_pmt_amount
4079           ac.currency_code, -- pmt_currency_code
4080           ac.exchange_rate_type, -- pmt_to_base_xrate_type
4081           ac.exchange_date, -- pmt_to_base_xrate_date
4082           ac.exchange_rate, -- pmt_to_base_xrate
4083           NVL(ac.base_amount, ac.amount), -- trx_base_amount
4084           NULL, -- errors_base_amount
4085           NULL, -- charges_base_amount
4086           NULL, -- matched_flag
4087           NULL, -- rev_pmt_hist_id
4088           SYSDATE, -- creation_date
4089           FND_GLOBAL.user_id, -- created_by
4090           SYSDATE, -- last_update_date
4091           FND_GLOBAL.user_id, -- last_updated_by
4092           FND_GLOBAL.login_id, -- last_update_login
4093           SYSDATE, -- program_update_date
4094           NULL, -- program_application_id
4095           NULL, -- program_id
4096           XEG.event_id, -- accounting_event_id
4097           NULL, -- request_id
4098           ac.org_id,  -- org_id
4099           XEG.event_id  -- related_event_id
4100      from ap_checks_all ac,
4101           xla_events_int_gt  xeg
4102      where ac.completed_pmts_group_id = p_completed_pmts_group_id
4103        and ac.org_id = p_org_id
4104        and xeg.source_id_int_1 = ac.check_id);
4105 
4106      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
4107 
4108         SELECT COUNT(*)
4109           INTO l_count
4110           FROM ap_payment_history_all aph,
4111                ap_checks_all ac
4112          WHERE aph.check_id = ac.check_id
4113            AND ac.completed_pmts_group_id = p_completed_pmts_group_id
4114            AND ac.org_id = p_org_id;
4115 
4116         l_log_msg := 'payment history has record number = '|| l_count;
4117         FND_LOG.STRING(G_LEVEL_STATEMENT,
4118                        G_MODULE_NAME || l_procedure_name,
4119                        l_log_msg);
4120      END IF;
4121 
4122      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
4123 
4124          SELECT accounting_event_id
4125            INTO l_count
4126            FROM ap_payment_history_all aph,
4127                 ap_checks_all ac
4128           WHERE aph.check_id = ac.check_id
4129             AND ac.completed_pmts_group_id = p_completed_pmts_group_id
4130             AND ac.org_id = p_org_id
4131             AND rownum = 1;
4132 
4133          l_log_msg := ' one account event_id created = '|| l_count;
4134          FND_LOG.STRING(G_LEVEL_STATEMENT,
4135                         G_MODULE_NAME || l_procedure_name,
4136                         l_log_msg);
4137      END IF;
4138 
4139   EXCEPTION
4140   WHEN OTHERS THEN
4141     l_log_msg := 'unknown exception '||SQLERRM||' when try to insert ap_payment_history table';
4142     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
4143       FND_LOG.STRING(G_LEVEL_STATEMENT,
4144                      G_MODULE_NAME || l_procedure_name,
4145                      l_log_msg);
4146     END IF;
4147     fnd_file.put_line(FND_FILE.LOG,l_log_msg||'|'||SQLERRM||' - '||systimestamp); --Bug 14279929
4148     APP_EXCEPTION.RAISE_EXCEPTION(); --14279929
4149 
4150   END;
4151 
4152   l_log_msg := 'After insert ap_payment_history_table and end the procedure';
4153   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
4154     FND_LOG.STRING(G_LEVEL_STATEMENT,
4155                    G_MODULE_NAME || l_procedure_name,
4156                    l_log_msg);
4157   END IF;
4158 
4159 
4160 EXCEPTION
4161   WHEN OTHERS THEN
4162 
4163     IF (SQLCODE <> -20001) THEN
4164        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
4165        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
4166        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
4167                     l_curr_calling_sequence);
4168        FND_MESSAGE.SET_TOKEN('PARAMETERS',
4169                'p_completed_pmts_group_id = '||p_completed_pmts_group_id
4170            ||', p_set_of_books_id = '||p_set_of_books_id
4171            ||', p_org_id = '||p_set_of_books_id
4172            ||', p_accounting_date = '||p_accounting_date);
4173        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
4174     END IF;
4175     fnd_file.put_line(FND_FILE.LOG,l_log_msg||'|'||SQLERRM||' - '||systimestamp); --Bug 14279929
4176     APP_EXCEPTION.RAISE_EXCEPTION();
4177 END create_payment_batch_events;
4178 
4179 
4180 /*============================================================================
4181  |  PROCEDURE -  UPDATE_AWT_INT_DISTS (PUBLIC)
4182  |
4183  |  DESCRIPTION
4184  |     This procedure is called by the payment event creation procs (EXCEPT for
4185  |     pmt batches). Stamp the event_id on all awt invoice distributions and
4186  |     on interest invoice distributions that were created by the payment for
4187  |     which this event is being created.It will also stamp the Payment
4188  |     Clearing Accounting event_id on the records in AIP when
4189  |     when_to_acct_pmt = clrg only
4190  |
4191  |  PRAMETERS
4192  |          p_event_type: Event type
4193  |          p_check_id: Check ID
4194  |          p_event_id: Event ID
4198  |
4195  |          p_calling_sequence: Debug information
4196  |
4197  |  KNOWN ISSUES:
4199  |  NOTES:
4200  |
4201  |  MODIFICATION HISTORY
4202  |  Date         Author             Description of Change
4203  |
4204  *===========================================================================*/
4205 
4206 PROCEDURE update_awt_int_dists (
4207                 p_event_type       IN    VARCHAR2,
4208                 p_check_id         IN    NUMBER,
4209                 p_event_id         IN    NUMBER,
4210                 p_calling_sequence IN    VARCHAR2)
4211 IS
4212 
4213   l_curr_calling_sequence VARCHAR2(2000);
4214 
4215    -- Logging:
4216   l_procedure_name CONSTANT VARCHAR2(30) := 'UPDATE_AWT_INT_DISTS';
4217   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
4218 
4219 BEGIN
4220 
4221   l_curr_calling_sequence :=
4222     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.UPDATE_AWT_INT_DISTS';
4223 
4224   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
4225 
4226   l_log_msg := 'Begin of procedure '||l_procedure_name;
4227   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4228     FND_LOG.STRING(G_LEVEL_PROCEDURE,
4229                    G_MODULE_NAME || l_procedure_name,
4230                    l_log_msg);
4231   END IF;
4232 
4233   IF ( p_event_type IN (PAYMENT_CREATED_TYPE,
4234                         PAYMENT_ADJUSTED_TYPE,
4235                         PAYMENT_CANCELLED_TYPE )) THEN
4236 
4237     --Stamp the event_id on all awt invoice distributions that were
4238     --created by the payment for which this event is being created.
4239 
4240     l_log_msg := 'Update ap_invoice_distribution, set accounting_event_id ='
4241                    ||to_char(p_event_id);
4242     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
4243        FND_LOG.STRING(G_LEVEL_STATEMENT,
4244                       G_MODULE_NAME || l_procedure_name,
4245                       l_log_msg);
4246     END IF;
4247 
4248     UPDATE ap_invoice_distributions D
4249     SET    D.accounting_event_id = p_event_id
4250     WHERE  D.accounting_event_id IS NULL
4251     AND    D.awt_invoice_payment_id IN
4252              (SELECT AIP1.invoice_payment_id
4253               FROM   ap_invoice_payments AIP1
4254               WHERE  AIP1.accounting_event_id = p_event_id
4255               AND    AIP1.check_id = p_check_id);
4256 
4257     --Stamp the event_id on all invoice dists that belong to interest
4258     --invoices created by the payment for which this event is created.
4259 
4260     l_log_msg := 'Update ap_invoice_distribution, set accounting_event_id =
4261                     '||to_char(p_event_id);
4262     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
4263        FND_LOG.STRING(G_LEVEL_STATEMENT,
4264                       G_MODULE_NAME || l_procedure_name,
4265                       l_log_msg);
4266     END IF;
4267 
4268     UPDATE ap_invoice_distributions_all D
4269     SET    D.accounting_event_id = p_event_id
4270     WHERE  D.accounting_event_id IS NULL
4271     AND    D.invoice_id IN
4272              (SELECT AI.invoice_id
4273               FROM   ap_invoice_payments_all AIP2,
4274                      ap_invoices_all AI
4275               WHERE  AI.invoice_id = AIP2.invoice_id
4276               AND    AIP2.check_id = p_check_id
4277               AND    AIP2.accounting_event_id = p_event_id
4278               AND    AI.invoice_type_lookup_code = 'INTEREST');
4279 
4280   END IF; --event is Payment, Payment Adjustment or Payment Cancellation
4281 
4282   l_log_msg := 'End of procedure '||l_procedure_name;
4283   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4284      FND_LOG.STRING(G_LEVEL_PROCEDURE,
4285                     G_MODULE_NAME || l_procedure_name,
4286                     l_log_msg);
4287   END IF;
4288 
4289 EXCEPTION
4290   WHEN OTHERS THEN
4291     IF (SQLCODE <> -20001) THEN
4292        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
4293        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
4294        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
4295                     l_curr_calling_sequence);
4296        FND_MESSAGE.SET_TOKEN('PARAMETERS',
4297                'p_event_type = '||p_event_type
4298            ||', p_check_id = '||p_check_id
4299            ||', p_event_id = '||p_event_id);
4300        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
4301     END IF;
4302     APP_EXCEPTION.RAISE_EXCEPTION();
4303 END update_awt_int_dists;
4304 
4305 
4306 /*============================================================================
4307  |  PROCEDURE -  BATCH_UPDATE_PAYMENT_INFO (PUBLIC)
4308  |
4309  |  DESCRIPTION
4310  |      This procedure is called from appbip.lpc only when when_to_acct_pmt=
4311  |      ALWAYS. It is used to update awt and int inv dists with accoutning
4312  |      event id.
4313  |
4314  |  PRAMETERS
4315  |           p_checkrun_name: Payment batch's name
4316  |           p_calling_sequence: Debug information
4317  |
4318  |  KNOWN ISSUES:
4319  |
4320  |  NOTES:
4321  |
4322  |  MODIFICATION HISTORY
4323  |  Date         Author             Description of Change
4324  |
4325  *===========================================================================*/
4326 PROCEDURE batch_update_payment_info(
4327               p_checkrun_name              IN VARCHAR2,
4328               p_completed_pmts_group_id    IN NUMBER,
4329               p_org_id                     IN NUMBER,
4330               p_calling_sequence           IN VARCHAR2 DEFAULT NULL)
4331 IS
4332 
4333   CURSOR get_payment_info IS
4334     SELECT DISTINCT AC.check_id, /* Added the distinct for bug#8368922 */
4335            AIP.accounting_event_id  -- Bug3343314
4336          , AIP.invoice_id   /* Added the distinct for bug#8438184 */
4337     FROM   ap_checks AC,
4341     AND    AC.status_lookup_code NOT IN ('OVERFLOW', 'SET UP')
4338            ap_invoice_payments AIP  -- Bug3343314
4339     WHERE  AC.check_id = AIP.check_id -- Bug3343314
4340     AND    AC.checkrun_name = p_checkrun_name
4342     AND    AC.completed_pmts_group_id = p_completed_pmts_group_id
4343     AND    AC.org_id = p_org_id
4344     AND    AIP.posted_flag <> 'Y'; -- Bug3343314
4345 
4346   TYPE t_check_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
4347   l_check_ids t_check_ids;
4348 
4349   TYPE t_accounting_event_ids IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
4350   l_accounting_event_ids t_accounting_event_ids;
4351 
4352   /* Added for bug#8438184 Start */
4353   TYPE t_invoice_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
4354   l_invoice_ids t_invoice_ids;
4355 
4356   l_auto_calculate_interest_flag ap_system_parameters_all.auto_calculate_interest_flag%TYPE;
4357   /* Added for bug#8438184 End */
4358 
4359   l_curr_calling_sequence VARCHAR2(2000);
4360 
4361   -- Logging:
4362   l_procedure_name CONSTANT VARCHAR2(30) := 'BATCH_UPDATE_PAYMENT_INFO';
4363   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
4364 
4365 BEGIN
4366 
4367   l_curr_calling_sequence := p_calling_sequence ||
4368            ' -> AP_ACCOUNTING_EVENTS_PKG.BATCH_UPDATE_PAYMENT_INFO';
4369 
4370   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
4371 
4372   l_log_msg := 'Begin of procedure '||l_procedure_name;
4373   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4374      FND_LOG.STRING(G_LEVEL_PROCEDURE,
4375                     G_MODULE_NAME || l_procedure_name,
4376                     l_log_msg);
4377   END IF;
4378 
4379   OPEN get_payment_info;
4380   LOOP
4381 
4382     l_log_msg := 'Get data from cursor get_payment_info';
4383     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
4384        FND_LOG.STRING(G_LEVEL_STATEMENT,
4385                       G_MODULE_NAME || l_procedure_name,
4386                       l_log_msg);
4387     END IF;
4388 
4389     FETCH get_payment_info
4390     BULK COLLECT INTO
4391       l_check_ids,
4392       l_accounting_event_ids,
4393       l_invoice_ids /* Added for bug#8438184 */
4394     LIMIT 1000;
4395 
4396     /*
4397     || -------------------------------------------------------------------
4398     || Step: 1 We will stamp the Accounting_Event_ID on
4399     || for AWT Invoice Distributions table that were created by the
4400     || payment for which this event is being created
4401     || -------------------------------------------------------------------
4402     */
4403 
4404     FORALL i IN 1 .. l_check_ids.count
4405 
4406     UPDATE ap_invoice_distributions AID
4407     SET    AID.accounting_event_id = l_accounting_event_ids(i)
4408     WHERE  AID.accounting_event_id IS NULL
4409     AND    AID.awt_invoice_payment_id IN
4410             (SELECT AIP.invoice_payment_id
4411              FROM ap_invoice_payments AIP
4412              WHERE AIP.check_id = l_check_ids(i) AND
4413              AIP.accounting_event_id = l_accounting_event_ids(i)
4414              AND AIP.invoice_id = l_invoice_ids(i)); /* Added for bug#8438184 */
4415 
4416     /*
4417     || -------------------------------------------------------------------
4418     || Step: 2 We will stamp the Accounting_Event_ID (of the Payment Event)
4419     || on all Invoice Distributions that belong to interest invoices
4420     || created by the payment
4421     || -------------------------------------------------------------------
4422     */
4423 
4424     /* Added for bug#8438184 Start */
4425     BEGIN
4426       SELECT auto_calculate_interest_flag
4427         INTO l_auto_calculate_interest_flag
4428         FROM ap_system_parameters_all
4429        WHERE org_id = p_org_id;
4430     EXCEPTION
4431       WHEN OTHERS THEN
4432       l_auto_calculate_interest_flag := 'Y' ;
4433     END;
4434 
4435     IF l_auto_calculate_interest_flag = 'Y'
4436     THEN
4437     /* Added for bug#8438184 Start */
4438 
4439     FORALL i IN 1 .. l_check_ids.count
4440 
4441     UPDATE ap_invoice_distributions_all AID
4442     SET AID.accounting_event_id = l_accounting_event_ids(i)
4443     WHERE AID.accounting_event_id IS NULL
4444     AND AID.invoice_id IN
4445                   ( SELECT AI.invoice_id
4446                     FROM  ap_invoice_payments_all AIP,
4447                           ap_invoices_all AI
4448                     WHERE AIP.invoice_id = AI.invoice_id
4449                     AND   AIP.accounting_event_id = l_accounting_event_ids(i)
4450                     AND   AIP.check_id = l_check_ids(i)
4451                     AND   AI.invoice_id= l_invoice_ids(i)  /* Added for bug#8438184 */
4452                     AND   AI.invoice_type_lookup_code = 'INTEREST');
4453 
4454     END IF; /* Added for bug#8438184 */
4455 
4456     EXIT WHEN get_payment_info%NOTFOUND;
4457   END LOOP;
4458   CLOSE get_payment_info;
4459 
4460   l_log_msg := 'End of procedure '||l_procedure_name;
4461   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4462      FND_LOG.STRING(G_LEVEL_PROCEDURE,
4463                     G_MODULE_NAME || l_procedure_name,
4464                     l_log_msg);
4465   END IF;
4466 
4467 EXCEPTION
4468   WHEN OTHERS THEN
4469     IF (get_payment_info%ISOPEN) THEN
4470       CLOSE get_payment_info;
4471     END IF;
4472 
4473     IF (SQLCODE <> -20001) THEN
4474        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
4475        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
4476        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
4477                     l_curr_calling_sequence);
4478        FND_MESSAGE.SET_TOKEN('PARAMETERS',
4479                ' p_checkrun_name = '|| p_checkrun_name);
4480        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
4481     END IF;
4485 
4482     fnd_file.put_line(FND_FILE.LOG,l_log_msg||'|'||SQLERRM||' - '||systimestamp); --Bug 14279929
4483     APP_EXCEPTION.RAISE_EXCEPTION();
4484 END batch_update_payment_info;
4486 /*============================================================================
4487  |  FUNCTION  -  IS_EVENT_COMPLETE (PRIVATE)
4488  |
4489  |  DESCRIPTION
4490  |
4491  |
4492  |  PRAMETERS
4493  |           p_doc_type:INVOICES_ENTITY or PAYMENT_ENTITY
4494  |           p_source_id: Invoice ID or Check ID
4495  |           p_calling_sequence: Debug information
4496  |
4497  |  RETURN: VARCHAR2
4498  |
4499  |  KNOWN ISSUES:
4500  |
4501  |  NOTES:
4502  |
4503  |  MODIFICATION HISTORY
4504  |  Date         Author             Description of Change
4505  |
4506  *===========================================================================*/
4507 FUNCTION is_event_complete (p_doc_type IN VARCHAR2,
4508                             p_source_id IN NUMBER,
4509                             p_calling_sequence IN VARCHAR2)
4510 RETURN VARCHAR2
4511 IS
4512 
4513   l_count NUMBER := 0;
4514   l_purch_enc_flag financials_system_parameters.purch_encumbrance_flag%TYPE;
4515 
4516   l_curr_calling_sequence VARCHAR2(2000);
4517 
4518   -- Logging:
4519   l_procedure_name CONSTANT VARCHAR2(30) := 'BATCH_UPDATE_PAYMENT_INFO';
4520   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
4521 
4522 BEGIN
4523 
4524   l_curr_calling_sequence :=
4525     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.IS_EVENT_COMPLETE';
4526 
4527   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
4528 
4529   l_log_msg := 'Begin of procedure '||l_procedure_name;
4530   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4531     FND_LOG.STRING(G_LEVEL_PROCEDURE,
4532                    G_MODULE_NAME || l_procedure_name,
4533                    l_log_msg);
4534   END IF;
4535 
4536   IF p_doc_type = INVOICES_ENTITY THEN -- Bug3343314
4537 
4538     BEGIN
4539 
4540       SELECT nvl(purch_encumbrance_flag,'N')
4541         INTO l_purch_enc_flag
4542         FROM financials_system_parameters FSP,
4543              AP_INVOICES INV
4544        WHERE INV.org_id = FSP.org_id
4545          AND INV.set_of_books_id = FSP.set_of_books_id -- Bug 5608968 Avoid full index scan of fsp
4546          AND INV.invoice_id = p_source_id;
4547     EXCEPTION
4548            WHEN NO_DATA_FOUND THEN
4549              l_purch_enc_flag := 'N';
4550     END;
4551 
4552     IF l_purch_enc_flag = 'N' THEN
4553 
4554       BEGIN
4555         SELECT  count(*)
4556         INTO  l_count
4557         FROM  ap_invoice_distributions AID1
4558         WHERE AID1.invoice_id = p_source_id
4559         AND   nvl(AID1.match_status_flag,'N') NOT IN ('T','A');
4560       EXCEPTION
4561            WHEN NO_DATA_FOUND THEN
4562              l_count:= 0;
4563       END;
4564 
4565     ELSE
4566 
4567       BEGIN
4568        SELECT  count(*)
4569          INTO   l_count
4570          FROM   ap_invoice_distributions AID
4571         WHERE   AID.invoice_id = p_source_id
4572         AND     nvl(AID.match_status_flag,'N') <> 'A';
4573       EXCEPTION
4574         WHEN NO_DATA_FOUND THEN
4575            l_count:= 0;
4576       END;
4577     END IF;
4578 
4579   ELSIF p_doc_type = PAYMENTS_ENTITY THEN -- Bug3343314
4580 
4581     BEGIN
4582 
4583       SELECT nvl(purch_encumbrance_flag,'N')
4584         INTO l_purch_enc_flag
4585         FROM financials_system_parameters FSP,
4586              AP_CHECKS  AC
4587        WHERE AC.org_id = FSP.org_id
4588          AND AC.check_id = p_source_id;
4589     EXCEPTION
4590            WHEN NO_DATA_FOUND THEN
4591              l_purch_enc_flag := 'N';
4592     END;
4593 
4594     IF l_purch_enc_flag = 'N' THEN
4595 
4596       BEGIN
4597         SELECT  count(*)
4598         INTO    l_count
4599         FROM    ap_invoice_distributions AID1
4600         WHERE   AID1.invoice_id in (SELECT invoice_id
4601                                     FROM ap_invoice_payments
4602                                     WHERE check_id = p_source_id)
4603         AND     nvl(AID1.match_status_flag,'N') NOT IN ('T','A');
4604       EXCEPTION
4605         WHEN NO_DATA_FOUND THEN
4606            l_count:= 0;
4607       END;
4608     ELSE
4609 
4610       BEGIN
4611         SELECT  count(*)
4612         INTO    l_count
4613         FROM    ap_invoice_distributions AID
4614         WHERE   AID.invoice_id in (SELECT invoice_id
4615                                    FROM ap_invoice_payments
4616                                    WHERE check_id = p_source_id)
4617         AND  nvl(AID.match_status_flag,'N') <> 'A' ;
4618       EXCEPTION
4619         WHEN NO_DATA_FOUND THEN
4620            l_count:= 0;
4621       END;
4622 
4623     END IF; -- l_purch_enc_flag
4624 
4625   END IF ; -- p_doc_type
4626 
4627   IF l_count = 0  THEN
4628     IF p_doc_type = INVOICES_ENTITY THEN -- Bug3343314
4629       BEGIN
4630         SELECT count(*)
4631         INTO   l_count
4632         FROM   ap_holds H, ap_hold_codes C
4633         WHERE  H.invoice_id = p_source_id
4634         AND    H.hold_lookup_code = C.hold_lookup_code
4635         AND    ((H.release_lookup_code IS NULL)
4636         AND    (C.postable_flag   = 'N'
4637                          OR C.postable_flag    = 'X'));
4638       EXCEPTION
4639        WHEN NO_DATA_FOUND THEN
4640           l_count:= 0;
4641       END;
4642 
4643     ELSIF p_doc_type = PAYMENTS_ENTITY THEN -- Bug3343314
4644 
4645       BEGIN
4646 
4647         SELECT count(*)
4648         INTO l_count
4652                                 WHERE check_id = p_source_id)
4649         FROM ap_holds H, ap_hold_codes C
4650         WHERE  H.invoice_id in (SELECT  invoice_id
4651                                 FROM ap_invoice_payments
4653         AND    H.hold_lookup_code = C.hold_lookup_code
4654         AND    ((H.release_lookup_code IS NULL)
4655         AND    (C.postable_flag ='N'
4656                                OR C.postable_flag    = 'X'));
4657       EXCEPTION
4658         WHEN NO_DATA_FOUND THEN
4659            l_count:= 0;
4660       END;
4661 
4662     END IF; -- p_doc_type
4663 
4664   END IF; -- l_count = 0
4665 
4666   l_log_msg := 'End of procedure '||l_procedure_name;
4667   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4668     FND_LOG.STRING(G_LEVEL_PROCEDURE,
4669                    G_MODULE_NAME || l_procedure_name,
4670                    l_log_msg);
4671   END IF;
4672 
4673   IF l_count = 0 THEN
4674     Return('CREATED');
4675   ELSE
4676     Return('INCOMPLETE');
4677   END IF; -- l_count = 0
4678 
4679 EXCEPTION
4680   WHEN OTHERS THEN
4681     IF (SQLCODE <> -20001) THEN
4682        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
4683        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
4684        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
4685                     l_curr_calling_sequence);
4686        FND_MESSAGE.SET_TOKEN('PARAMETERS',
4687                'p_doc_type = '||p_doc_type
4688            ||', p_source_id = '||p_source_id);
4689        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
4690     END IF;
4691     APP_EXCEPTION.RAISE_EXCEPTION();
4692 END is_event_complete;
4693 
4694 /*============================================================================
4695  |  FUNCTION  -  DERIVE_PAYMENT_ADJ_EVENT (PRIVATE)
4696  |
4697  |  DESCRIPTION
4698  |    This procedure is used to derive payment adjustment event.
4699  |
4700  |  PRAMETERS
4701  |           p_check_id: Check ID
4702  |           p_accounting_date: Accounting Date
4703  |           p_event_type:Event Type
4704  |           p_accounting_event_id: Derived Accounting Event ID
4705  |           p_calling_sequence:Debug Information
4706  |
4707  |  KNOWN ISSUES:
4708  |
4709  |  NOTES:
4710  |
4711  |  MODIFICATION HISTORY
4712  |  Date         Author             Description of Change
4713  |
4714  *===========================================================================*/
4715 PROCEDURE derive_payment_adj_event (
4716              p_check_id            IN    NUMBER,
4717              p_accounting_date     IN    DATE,
4718              p_event_type          IN    VARCHAR2,
4719              p_accounting_event_id OUT   NOCOPY NUMBER,
4720              p_calling_sequence    IN    VARCHAR2)
4721 IS
4722 
4723   l_legal_entity_id NUMBER(15);
4724   l_ledger_id NUMBER(15);
4725   l_org_id NUMBER(15);
4726   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
4727   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
4728   l_accounting_event_id NUMBER := NULL;
4729   l_event_info XLA_EVENTS_PUB_PKG.T_EVENT_INFO;
4730 
4731   l_exchange_rate_type VARCHAR2(30);
4732   l_exchange_rate_date DATE;
4733   l_exchange_rate      NUMBER;
4734   l_currency_code      VARCHAR2(15);
4735   l_creation_date      DATE;
4736   l_last_updated_by    NUMBER(15);
4737 
4738   CURSOR l_event_cur IS
4739     SELECT distinct(AIP.accounting_event_id)
4740     FROM   ap_invoice_payments AIP,
4741            ap_checks AC
4742     WHERE  AIP.check_id = p_check_id
4743     AND    AIP.check_id = AC.check_id
4744     AND    nvl(AIP.posted_flag, 'N') = 'N'
4745     AND    AC.void_date IS NULL;
4746 
4747   l_curr_calling_sequence VARCHAR2(2000);
4748 
4749    -- Logging:
4750   l_procedure_name CONSTANT VARCHAR2(30) := 'BATCH_UPDATE_PAYMENT_INFO';
4751   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
4752 
4753 
4754 BEGIN
4755 
4756   l_curr_calling_sequence := p_calling_sequence ||
4757              ' -> AP_ACCOUNTING_EVENTS_PKG.DERIVE_PAYMENT_ADJ_EVENT';
4758 
4759   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
4760 
4761   l_log_msg := 'Begin of procedure '||l_procedure_name;
4762   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4763     FND_LOG.STRING(G_LEVEL_PROCEDURE,
4764                    G_MODULE_NAME || l_procedure_name,
4765                    l_log_msg);
4766   END IF;
4767 
4768   l_log_msg := 'Before calling procedure get_payment_info';
4769   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4770      FND_LOG.STRING(G_LEVEL_PROCEDURE,
4771                     G_MODULE_NAME || l_procedure_name,
4772                     l_log_msg);
4773   END IF;
4774 
4775   get_payment_info
4776   ( p_check_id => p_check_id,
4777     p_org_id => l_org_id, -- OUT
4778     p_legal_entity_id => l_legal_entity_id, -- OUT
4779     p_ledger_id => l_ledger_id, -- OUT
4780     p_calling_sequence => l_curr_calling_sequence
4781   );
4782 
4783   l_log_msg := 'After calling procedure get_payment_info';
4784   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4785      FND_LOG.STRING(G_LEVEL_PROCEDURE,
4786                     G_MODULE_NAME || l_procedure_name,
4787                     l_log_msg);
4788   END IF;
4789 
4790  l_log_msg := 'Before calling procedure get_event_security_context';
4791  IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4792      FND_LOG.STRING(G_LEVEL_PROCEDURE,
4793                     G_MODULE_NAME || l_procedure_name,
4794                     l_log_msg);
4795   END IF;
4796 
4797   l_event_security_context :=
4798     get_event_security_context
4799     ( p_org_id => l_org_id,
4800       p_calling_sequence => l_curr_calling_sequence
4801     );
4802 
4803 
4807                     G_MODULE_NAME || l_procedure_name,
4804   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4805      l_log_msg := 'After calling procedure get_event_security_context';
4806      FND_LOG.STRING(G_LEVEL_PROCEDURE,
4808                     l_log_msg);
4809   END IF;
4810 
4811   l_log_msg := 'Before calling procedure get_payment_event_source_info';
4812   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4813      FND_LOG.STRING(G_LEVEL_PROCEDURE,
4814                     G_MODULE_NAME || l_procedure_name,
4815                     l_log_msg);
4816   END IF;
4817 
4818   l_event_source_info :=
4819     get_payment_event_source_info
4820     ( p_legal_entity_id => l_legal_entity_id,
4821       p_ledger_id => l_ledger_id,
4822       p_check_id => p_check_id,
4823       p_calling_sequence => l_curr_calling_sequence
4824     );
4825 
4826   l_log_msg := 'After calling procedure get_payment_event_source_info';
4827   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4828      FND_LOG.STRING(G_LEVEL_PROCEDURE,
4829                     G_MODULE_NAME || l_procedure_name,
4830                     l_log_msg);
4831   END IF;
4832 
4833   OPEN l_event_cur;
4834   LOOP
4835 
4836     FETCH l_event_cur INTO
4837       l_accounting_event_id;
4838     EXIT WHEN l_event_cur%NOTFOUND;
4839 
4840     l_log_msg := 'Before calling AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
4841     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4842        FND_LOG.STRING(G_LEVEL_PROCEDURE,
4843                       G_MODULE_NAME || l_procedure_name,
4844                       l_log_msg);
4845     END IF;
4846 
4847     l_event_info :=
4848       AP_XLA_EVENTS_PKG.GET_EVENT_INFO
4849       ( p_event_source_info => l_event_source_info,
4850         p_event_id => l_accounting_event_id,
4851         p_valuation_method => NULL,
4852         p_security_context => l_event_security_context,
4853         p_calling_sequence => l_curr_calling_sequence
4854       );
4855 
4856     l_log_msg := 'After calling AP_XLA_EVENTS_PKG.GET_EVENT_INFO';
4857     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4858        FND_LOG.STRING(G_LEVEL_PROCEDURE,
4859                       G_MODULE_NAME || l_procedure_name,
4860                       l_log_msg);
4861     END IF;
4862 
4863     --bug 10336668
4864     IF ((P_event_type = MANUAL_PAYMENT_ADJUSTED_TYPE AND
4865          l_event_info.event_type_code = MANUAL_PAYMENT_ADJUSTED_TYPE)
4866          OR
4867         (P_event_type = UPGRADED_MAN_PAY_REV_TYPE    AND
4868          l_event_info.event_type_code = UPGRADED_MAN_PAY_REV_TYPE )
4869          OR
4870         (P_event_type = UPGRADED_MAN_PAY_ADJ_TYPE AND
4871          l_event_info.event_type_code = UPGRADED_MAN_PAY_ADJ_TYPE)
4872          OR
4873          (P_event_type = MANUAL_REFUND_ADJUSTED_TYPE AND
4874          l_event_info.event_type_code = MANUAL_REFUND_ADJUSTED_TYPE)) THEN
4875             EXIT;
4876     ELSE
4877       l_accounting_event_id := NULL;
4878     END IF;
4879 
4880   END LOOP;
4881   CLOSE l_event_cur;
4882 
4883   -- If an unaccounted Payment Adjustment event does not already
4884   -- exist for that date, we will create a new event
4885 
4886   IF (l_accounting_event_id IS NULL) THEN
4887     l_accounting_event_id := create_payment_event
4888                               (p_event_type       => p_event_type,
4889                                p_check_id         => p_check_id,
4890                                p_event_date       => p_accounting_date,
4891                                p_calling_sequence => l_curr_calling_sequence);
4892 
4893      SELECT exchange_rate_type,
4894             exchange_date,
4895             exchange_rate,
4896             currency_code,
4897             creation_date,
4898             last_updated_by
4899      INTO   l_exchange_rate_type,
4900             l_exchange_rate_date,
4901             l_exchange_rate,
4902             l_currency_code,
4903             l_creation_date,
4904             l_last_updated_by
4905      FROM   AP_CHECKS AC
4906      WHERE  AC.check_id = P_check_id;
4907 
4908      l_log_msg := 'Before AP_RECONCILIATION_PKG.INSERT_PAYMENT_HISTORY';
4909      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4910        FND_LOG.STRING(G_LEVEL_PROCEDURE,
4911                       G_MODULE_NAME || l_procedure_name,
4912                       l_log_msg);
4913      END IF;
4914 
4915      AP_RECONCILIATION_PKG.insert_payment_history
4916       (
4917           x_check_id                => p_check_id,
4918           x_transaction_type        => p_event_type,
4919           x_accounting_date         => p_accounting_date,
4920           x_trx_bank_amount         => NULL,
4921           x_errors_bank_amount      => NULL,
4922           x_charges_bank_amount     => NULL,
4923           x_bank_currency_code      => NULL,
4924           x_bank_to_base_xrate_type => NULL,
4925           x_bank_to_base_xrate_date => NULL,
4926           x_bank_to_base_xrate      => NULL,
4927           x_trx_pmt_amount          => 0,
4928           x_errors_pmt_amount       => NULL,
4929           x_charges_pmt_amount      => NULL,
4930           x_pmt_currency_code       => l_currency_code,
4931           x_pmt_to_base_xrate_type  => l_exchange_rate_type,
4932           x_pmt_to_base_xrate_date  => l_exchange_rate_date,
4933           x_pmt_to_base_xrate       => l_exchange_rate,
4934           x_trx_base_amount         => 0,
4935           x_errors_base_amount      => NULL,
4936           x_charges_base_amount     => NULL,
4937           x_matched_flag            => NULL,
4938           x_rev_pmt_hist_id         => NULL,
4939           x_org_id                  => l_org_id, -- bug 4578865
4940           x_creation_date           => SYSDATE,
4941           x_created_by              => l_last_updated_by,
4945           x_program_update_date     => NULL,
4942           x_last_update_date        => SYSDATE,
4943           x_last_updated_by         => l_last_updated_by,
4944           x_last_update_login       => l_last_updated_by,
4946           x_program_application_id  => NULL,
4947           x_program_id              => NULL,
4948           x_request_id              => NULL,
4949           x_calling_sequence        => l_curr_calling_sequence,
4950           x_accounting_event_id     => l_accounting_event_id
4951       );
4952 
4953       l_log_msg := 'After AP_RECONCILIATION_PKG.INSERT_PAYMENT_HISTORY';
4954       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4955          FND_LOG.STRING(G_LEVEL_PROCEDURE,
4956                         G_MODULE_NAME || l_procedure_name,
4957                         l_log_msg);
4958       END IF;
4959   END IF;
4960 
4961   p_accounting_event_id := l_accounting_event_id;
4962 
4963   l_log_msg := 'End of procedure '||l_procedure_name;
4964   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
4965      FND_LOG.STRING(G_LEVEL_PROCEDURE,
4966                     G_MODULE_NAME || l_procedure_name,
4967                     l_log_msg);
4968   END IF;
4969 
4970 EXCEPTION
4971   WHEN OTHERS THEN
4972     IF (l_event_cur%ISOPEN) THEN
4973       CLOSE l_event_cur;
4974     END IF;
4975     IF (SQLCODE <> -20001) THEN
4976        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
4977        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
4978        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
4979                     l_curr_calling_sequence);
4980        FND_MESSAGE.SET_TOKEN('PARAMETERS',
4981                'p_check_id = '||p_check_id
4982            ||', p_accounting_date = '||p_accounting_date
4983            ||', p_event_type = ' ||p_event_type);
4984        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
4985     END IF;
4986     APP_EXCEPTION.RAISE_EXCEPTION();
4987 END derive_payment_adj_event;
4988 
4989 
4990 /*============================================================================
4991  |  FUNCTION  -  DERIVE_CASCADE_EVENT (PRIVATE)
4992  |
4993  |  DESCRIPTION
4994  |      This procedure creates the cascade events for an invoice adjusted
4995  |      event. A cascade event is created when there is a corresponding normal
4996  |      event that has already been accounted. This procedure creates
4997  |      prepayment application adjusted, payment adjusted, payment maturity
4998  |      adjusted, and payment clearing adjusted events.
4999  |
5000  |  PRAMETERS
5001  |          p_invoice_id: Invoice Id of the adjusted invoice
5002  |          p_adj_accounting_event_id: Event ID of the invoice adjustment
5003  |          p_calling_sequence: Debug information
5004  |
5005  |  KNOWN ISSUES:
5006  |
5007  |  NOTES:
5008  |
5009  |  MODIFICATION HISTORY
5010  |  Date         Author             Description of Change
5011  |
5012  *===========================================================================*/
5013 -- Bug 6996047. Added accounting date parameter
5014 PROCEDURE Derive_Cascade_Events(p_invoice_id IN NUMBER,
5015                                 p_adj_accounting_event_id IN NUMBER,
5016                                 p_accounting_date IN DATE,
5017                                 p_calling_sequence IN VARCHAR2)
5018 IS
5019 
5020   -- Bug 6890810. Added historical flag condition to all the cursors
5021   -- so that there will not be any adjustment event created for the
5022   -- adjustments made to the upgraded invoices or payments.
5023 
5024   -- bug9321985, changed all the cursors below to ensure that
5025   -- cascade events do not get generated for related events in
5026   -- NO ACTION status
5027   --
5028   -- Bug 9257065, added the not exists clause so as to not generate
5029   -- extra Prepayment Application Adj events for the same Invoice
5030   -- adjustment event and related prepay app event
5031   --
5032   -- bug9038462, PREPAYMENT APPLICATION ADJ cascade event
5033   -- would be generated if the Prepayment Application Dist
5034   -- (Invoice Dist) is either Accounted or Encumbered
5035   --
5036   -- bug9650381, addded the distinct Keyword in the cursor
5037   -- sql to avoid multiple prepayment application adjustment
5038   -- events from getting created in case the Prepayment Appl
5039   -- event is stamped on Multiple Invoice distributions
5040   --
5041   -- bug9973070, added the condition AID.Accounting_Event_id
5042   -- IS NOT NULL, removed outer join with XLA_EVENTS
5043   --
5044   /* Bug 9682862 added exists condition for ap_invoice_distributions table*/
5045 
5046   CURSOR l_prepayment_applications_cur IS
5047     SELECT DISTINCT
5048            AID.invoice_id,
5049            AID.accounting_date,
5050            AID.invoice_line_number
5051     FROM   ap_invoice_distributions AID,
5052            xla_events XE
5053     WHERE  AID.invoice_id = p_invoice_id
5054     AND    AID.line_type_lookup_code = 'PREPAY'
5055     AND    AID.Accounting_Event_ID IS NOT NULL
5056     AND    AID.Accounting_event_id = XE.event_id
5057     AND    XE.application_id = 200
5058     AND    ((XE.event_status_code <> 'N' AND
5059              AID.posted_flag = 'Y') OR
5060            AID.encumbered_flag = 'Y')
5061     AND    AID.amount < 0
5062     AND    NVL(AID.reversal_flag, 'N') <> 'Y'
5063     AND    AID.parent_reversal_id IS NULL
5064     AND    NVL(AID.Historical_Flag, 'N') <> 'Y'
5065     AND    NOT EXISTS
5066               (SELECT 1
5067                  FROM ap_prepay_history_all APPH
5068                 WHERE APPH.invoice_id = AID.invoice_id
5069                   AND APPH.Invoice_Adjustment_Event_Id = P_Adj_Accounting_Event_Id
5070                   AND APPH.Related_Prepay_App_Event_Id = AID.Accounting_Event_Id
5071                   AND APPH.transaction_type = 'PREPAYMENT APPLICATION ADJ'
5072                   AND nvl(APPH.posted_flag, 'N') <> 'Y')
5076                    AND aid2.invoice_id = p_invoice_id
5073     AND EXISTS (SELECT 'INVOICE DIST WITH INV ADJ EVENT ID'
5074                   FROM ap_invoice_distributions aid2
5075                  WHERE aid2.accounting_event_id=p_adj_accounting_event_id
5077                    AND aid2.line_type_lookup_code <> 'AWT'); --bug 9682862
5078 
5079   /* BUG # 7560346 added DISTINCT keyword */
5080   /* Bug 9103993 added exists condition for ap_invoice_distributions table*/
5081   /* Bug 9582285 extended the changes done in bug 9103993 to cursors
5082      l_payment_clearings_cur and l_payment_maturities_cur and added
5083      AWT decode on top of the Exists clause added by bug 9103993 for all
5084      cursors*/
5085 
5086   CURSOR l_payments_cur IS
5087     SELECT DISTINCT AIP.check_id,
5088            AIP.accounting_date
5089     FROM  ap_invoice_payments AIP,
5090           xla_events XE
5091     WHERE AIP.invoice_id = p_invoice_id
5092     AND   AIP.posted_flag = 'Y'
5093     AND   NVL(AIP.reversal_flag, 'N') <> 'Y'
5094     AND   AIP.reversal_inv_pmt_id IS NULL
5095     AND   AIP.Accounting_event_id = XE.event_id
5096     AND   XE.application_id = 200
5097     AND   XE.event_status_code <> 'N'
5098     -- Bug 6890810. Added the subquery
5099     AND   NOT EXISTS (SELECT 'Either Upgraded Payment OR Unaccounted Pay Adj Exists'
5100                       FROM   AP_Payment_History APH
5101                       WHERE  APH.Check_ID = AIP.Check_ID
5102                       AND    (NVL(APH.Historical_Flag, 'N') = 'Y'
5103                       OR     (APH.invoice_adjustment_event_id = p_adj_accounting_event_id
5104                               AND APH.transaction_type in ( PAYMENT_ADJUSTED_TYPE,REFUND_ADJUSTED_TYPE)  --bug9726978,13963864
5105                               AND NVL(APH.posted_flag, 'N') <> 'Y')))  --bug 9226273
5106     AND NOT EXISTS (SELECT 'Voided but not yet insterted into AIP'  --bug8214188
5107                       FROM AP_Payment_History APH
5108                      WHERE APH.Check_ID = AIP.Check_ID
5109                        AND APH.transaction_type='PAYMENT CANCELLED')
5110     AND EXISTS (SELECT 'INVOICE DIST WITH INV ADJ EVENT ID'
5111            FROM ap_invoice_distributions aid
5112            where aid.accounting_event_id=p_adj_accounting_event_id
5113            and aid.invoice_id = p_invoice_id
5114            and decode(aid.line_type_lookup_code, 'AWT',
5115                       decode(aid.awt_invoice_payment_id,
5116                             NULL, 'N', 'Y'), 'Y') = 'Y'); --bug 9582285
5117 
5118   /* BUG # 7560346 added DISTINCT keyword */
5119   CURSOR l_payment_clearings_cur IS
5120     SELECT DISTINCT APH.check_id,
5121            APH.accounting_date
5122     FROM ap_payment_history APH,
5123          ap_invoice_payments AIP,
5124          xla_events XE
5125     WHERE AIP.invoice_id = p_invoice_id
5126     AND   AIP.check_id  = APH.check_id
5127     AND   APH.transaction_type = 'PAYMENT CLEARING'
5128     AND   AIP.posted_flag = 'Y'
5129     AND   APH.Accounting_event_id = XE.event_id
5130     AND   XE.application_id = 200
5131     AND   XE.event_status_code <> 'N'
5132     /* bug # 7604906. If the payment clearing is not
5133        accounted, payment clearing adjustment should not
5134        create */
5135     AND   APH.posted_flag = 'Y'
5136     /* bug # 7604906 End */
5137     /* bug 8325874 commented the line below and added subquery */
5138     --AND   NVL(APH.Historical_Flag, 'N') <> 'Y' -- Bug 6890810
5139     AND   NOT EXISTS (SELECT 'Either Upgraded Payment OR Unaccounted Pay Adj Exists'
5140                       FROM   AP_Payment_History APH
5141                       WHERE  APH.Check_ID = AIP.Check_ID
5142                       AND    (NVL(APH.Historical_Flag, 'N') = 'Y'
5143                       OR     (APH.invoice_adjustment_event_id = p_adj_accounting_event_id
5144                               AND APH.transaction_type = PAYMENT_CLEARING_ADJUSTED_TYPE
5145                               AND NVL(APH.posted_flag, 'N') <> 'Y')))  --bug 9726978
5146     /* bug # 8325874 End */
5147     AND   NOT EXISTS (SELECT 'PAYMENT UNCLEARING/CANCELLATION EXISTS'
5148                       FROM  ap_payment_history APH1
5149                       WHERE APH1.check_id = AIP.check_id
5150                       AND   ((APH1.rev_pmt_hist_id = APH.payment_history_id
5151                                AND APH1.transaction_type = 'PAYMENT UNCLEARING')
5152                             OR APH1.transaction_type = 'PAYMENT CANCELLED'))
5153     /*bug 8882614, added the OR condition above to prevent clearing adjustment
5154     events from being created if cancellation event exists*/
5155     AND EXISTS (SELECT 'INVOICE DIST WITH INV ADJ EVENT ID'
5156            FROM ap_invoice_distributions aid
5157            where aid.accounting_event_id=p_adj_accounting_event_id
5158            and aid.invoice_id = p_invoice_id
5159            and decode(aid.line_type_lookup_code, 'AWT',
5160                       decode(aid.awt_invoice_payment_id,
5161                             NULL, 'N', 'Y'), 'Y') = 'Y'); --bug 9582285
5162 
5163   /* BUG # 7560346 added DISTINCT keyword */
5164   CURSOR l_payment_maturities_cur IS
5165     SELECT DISTINCT APH.check_id,
5166            APH.accounting_date
5167     FROM   ap_payment_history APH,
5168            ap_invoice_payments AIP,
5169            xla_events XE
5170     WHERE AIP.invoice_id = p_invoice_id
5171     AND   AIP.check_id  = APH.check_id
5172     AND   APH.transaction_type = 'PAYMENT MATURITY'
5173     AND   AIP.posted_flag = 'Y'
5174     AND   APH.posted_flag = 'Y'   --bug 9030890
5175     AND   APH.Accounting_event_id = XE.event_id
5176     AND   XE.application_id = 200
5177     AND   XE.event_status_code <> 'N'
5178     /* bug 8325874 commented the line below and added subquery */
5179     --AND   NVL(APH.Historical_Flag, 'N') <> 'Y' -- Bug 6890810
5180     AND   NOT EXISTS (SELECT 'Either Upgraded Payment OR Unaccounted Pay Adj Exists'
5181                       FROM   AP_Payment_History APH
5182                       WHERE  APH.Check_ID = AIP.Check_ID
5186                               AND NVL(APH.posted_flag, 'N') <> 'Y')))  --bug 9726978
5183                       AND    (NVL(APH.Historical_Flag, 'N') = 'Y'
5184                       OR     (APH.invoice_adjustment_event_id = p_adj_accounting_event_id
5185                               AND APH.transaction_type = PAYMENT_MATURITY_ADJUSTED_TYPE
5187     /* bug # 8325874 End */
5188     AND   NOT EXISTS (SELECT 'PAYMENT MATURITY-REVERSAL/CANCELLATION EXISTS'
5189                       FROM  ap_payment_history APH1
5190                       WHERE APH1.check_id = AIP.check_id
5191                       AND   ((APH1.rev_pmt_hist_id = APH.payment_history_id
5192                                AND APH1.transaction_type = 'PAYMENT MATURITY REVERSAL')
5193                             OR APH1.transaction_type = 'PAYMENT CANCELLED'))
5194     /*bug 8882614, added the OR condition above to prevent maturity adjustment
5195      events from being created if cancellation event exists*/
5196     AND EXISTS (SELECT 'INVOICE DIST WITH INV ADJ EVENT ID'
5197            FROM ap_invoice_distributions aid
5198            where aid.accounting_event_id=p_adj_accounting_event_id
5199            and aid.invoice_id = p_invoice_id
5200            and decode(aid.line_type_lookup_code, 'AWT',
5201                       decode(aid.awt_invoice_payment_id,
5202                             NULL, 'N', 'Y'), 'Y') = 'Y'); --bug 9582285
5203 
5204 
5205  -- add cursor for bug fix 5694577
5206    CURSOR c_get_payment_info (p_check_id NUMBER) IS
5207     SELECT ac.exchange_rate_type,
5208            ac.exchange_date,
5209            ac.exchange_rate,
5210            ac.currency_code,
5211            ac.creation_date,
5212            ac.last_updated_by,
5213            ac.org_id,
5214            ac.payment_type_flag,
5215            asp.automatic_offsets_flag
5216       FROM ap_checks_all ac,
5217         ap_system_parameters_all asp   ---7209263 added automatic offsets flag
5218      WHERE ac.check_id = p_check_id
5219       AND       ac.org_id=asp.org_id;
5220 
5221   l_accounting_event_id NUMBER;
5222 
5223   TYPE t_invoice_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
5224   TYPE t_accounting_dates IS TABLE OF DATE INDEX BY PLS_INTEGER;
5225   TYPE t_invoice_line_numbers IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
5226   TYPE t_check_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
5227 
5228   l_prepay_app_invoice_ids t_invoice_ids;
5229   l_prepay_app_accounting_dates t_accounting_dates;
5230   l_prepay_app_invoice_line_num t_invoice_line_numbers;
5231   l_pay_check_ids t_check_ids;
5232   l_pay_accounting_dates t_accounting_dates;
5233   l_pay_clear_check_ids t_check_ids;
5234   l_pay_clear_accounting_dates t_accounting_dates;
5235   l_pay_mat_check_ids t_check_ids;
5236   l_pay_mat_accounting_dates t_accounting_dates;
5237 
5238   l_exchange_rate_type  VARCHAR2(30);
5239   l_exchange_rate_date  DATE;
5240   l_exchange_rate       NUMBER;
5241   l_currency_code       VARCHAR2(15);
5242   l_creation_date       DATE;
5243   l_last_updated_by     NUMBER(15);
5244   l_adj_accounting_event_id NUMBER := p_adj_accounting_event_id;
5245   l_debug_info VARCHAR2(240);
5246   l_curr_calling_sequence VARCHAR2(2000);
5247   l_org_id              NUMBER;
5248 
5249   -- Logging:
5250   l_procedure_name CONSTANT VARCHAR2(30) := 'DERIVE_CASCADE_EVENTS';
5251   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
5252 
5253   l_event_type     xla_events.event_type_code%TYPE;
5254   l_pay_type       ap_checks_all.payment_type_flag%TYPE;
5255   l_automatic_offsets_flag      ap_system_parameters_all.automatic_offsets_flag%TYPE; ---7209263
5256   l_bank_curr_code              ap_payment_history_all.bank_currency_code%TYPE;                         ---7337949
5257 
5258 -- Bug 8276852 Start
5259   l_bank_to_base_xrate_type     ap_payment_history_all.bank_to_base_xrate_type%TYPE;
5260   l_bank_to_base_xrate_date     ap_payment_history_all.bank_to_base_xrate_date%TYPE;
5261   l_bank_to_base_xrate          ap_payment_history_all.bank_to_base_xrate%TYPE;
5262    l_charges_bank_amount          ap_payment_history_all.charges_bank_amount%TYPE; /*Bug13385106 */
5263 -- Bug 8276852 End
5264 
5265   /* bug12363669 start */
5266    l_pmt_to_base_xrate_type     ap_payment_history_all.pmt_to_base_xrate_type%type;
5267    l_pmt_to_base_xrate_date     ap_payment_history_all.pmt_to_base_xrate_date%type;
5268    l_pmt_to_base_xrate          ap_payment_history_all.pmt_to_base_xrate%type;
5269   /* bug12363669 end*/
5270 
5271   l_accounting_date         DATE := p_accounting_date;       -- bug 10126192
5272   l_count                   NUMBER; --bug12569594
5273 
5274 BEGIN
5275 
5276   l_curr_calling_sequence :=
5277     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.DERIVE_CASCADE_EVENTS';
5278 
5279   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5280 
5281   l_log_msg := 'Begin of procedure '||l_procedure_name;
5282   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5283      FND_LOG.STRING(G_LEVEL_PROCEDURE,
5284                     G_MODULE_NAME || l_procedure_name,
5285                     l_log_msg);
5286   END IF;
5287 
5288   l_log_msg := 'Cascade the prepayment application events';
5289   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
5290      l_log_msg := 'Cascade the prepayment application events';
5291      FND_LOG.STRING(G_LEVEL_STATEMENT,
5292                     G_MODULE_NAME || l_procedure_name,
5293                     l_log_msg);
5294   END IF;
5295 
5296   OPEN l_prepayment_applications_cur;
5297   LOOP
5298 
5299     FETCH l_prepayment_applications_cur
5300     BULK COLLECT INTO
5301       l_prepay_app_invoice_ids,
5302       l_prepay_app_accounting_dates,
5303       l_prepay_app_invoice_line_num
5304     LIMIT 1000;
5305 
5306     FOR i IN 1 ..l_prepay_app_invoice_ids.count LOOP
5307 
5308       /* added below query for bug12569594 to see if proration already
5312       BEGIN
5309          exists for the adj distributions */
5310 
5311       l_count := 0;
5313         SELECT count(1)
5314 	  INTO l_count
5315 	  FROM ap_invoice_distributions_all aid
5316 	 WHERE aid.invoice_id = l_prepay_app_invoice_ids(i)
5317 	   AND aid.accounting_event_id = p_adj_accounting_event_id
5318 	   AND NOT EXISTS
5319 	       (SELECT 1
5320 	          FROM ap_prepay_app_dists apad,
5321 		       ap_prepay_history_all apph
5322 		 WHERE apad.prepay_history_id = apph.prepay_history_id
5323 		   AND apph.transaction_type = 'PREPAYMENT APPLIED'
5324 		   AND apph.invoice_id = l_prepay_app_invoice_ids(i)
5325 		   AND apph.invoice_line_number = l_prepay_app_invoice_line_num(i)
5326 		   AND apad.invoice_distribution_id = aid.invoice_distribution_id)
5327            AND rownum < 2;
5328 
5329       EXCEPTION
5330       WHEN OTHERS THEN
5331         l_count := 0;
5332 
5333       END;
5334 
5335       IF l_count > 0 THEN
5336 
5337         l_log_msg := 'Before calling procedure create_invoice_event';
5338         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5339            FND_LOG.STRING(G_LEVEL_PROCEDURE,
5340                           G_MODULE_NAME || l_procedure_name,
5341                           l_log_msg);
5342         END IF;
5343 
5344         l_log_msg := 'Before calling procedure create_invoice_event';
5345         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5346            FND_LOG.STRING(G_LEVEL_PROCEDURE,
5347                           G_MODULE_NAME || l_procedure_name,
5348                           l_log_msg);
5349         END IF;
5350 
5351         l_accounting_event_id := create_invoice_event
5352                                (p_event_type => PREPAY_APP_ADJUSTED_TYPE,
5353                                 p_invoice_id => l_prepay_app_invoice_ids(i),
5354                                 p_event_date => p_accounting_date, -- Bug 6996047
5355                                 p_calling_sequence => l_curr_calling_sequence);
5356 
5357         l_log_msg := 'After calling procedure create_invoice_event';
5358         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5359            FND_LOG.STRING(G_LEVEL_PROCEDURE,
5360                           G_MODULE_NAME || l_procedure_name,
5361                           l_log_msg);
5362         END IF;
5363 
5364         l_log_msg := 'Before calling procedure Insert_Prepayment_Header';
5365         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5366            FND_LOG.STRING(G_LEVEL_PROCEDURE,
5367                           G_MODULE_NAME || l_procedure_name,
5368                           l_log_msg);
5369         END IF;
5370 
5371         Insert_Prepayment_Header
5372                      (p_invoice_id => l_prepay_app_invoice_ids(i),
5373                       p_invoice_line_number => l_prepay_app_invoice_line_num(i),
5374                       p_accounting_event_id => l_accounting_event_id,
5375                       p_accounting_date => p_accounting_date, -- Bug 6996047
5376                       p_invoice_adjustment_id => l_adj_accounting_event_id,
5377                       p_calling_sequence => l_curr_calling_sequence);
5378 
5379         l_log_msg := 'After calling procedure Insert_prepayment_Header';
5380         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5381            FND_LOG.STRING(G_LEVEL_PROCEDURE,
5382                           G_MODULE_NAME || l_procedure_name,
5383                           l_log_msg);
5384         END IF;
5385 
5386       END IF;
5387     END LOOP;
5388 
5389     EXIT WHEN l_prepayment_applications_cur%NOTFOUND;
5390   END LOOP;
5391   CLOSE l_prepayment_applications_cur;
5392 
5393 
5394   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
5395      l_log_msg := 'cascade the payment events';
5396      FND_LOG.STRING(G_LEVEL_STATEMENT,
5397                     G_MODULE_NAME || l_procedure_name,
5398                     l_log_msg);
5399   END IF;
5400 
5401 
5402   OPEN l_payments_cur;
5403   LOOP
5404 
5405     FETCH l_payments_cur
5406     BULK COLLECT INTO
5407       l_pay_check_ids,
5408       l_pay_accounting_dates
5409     LIMIT 1000;
5410 
5411     FOR i IN 1 .. l_pay_check_ids.count LOOP
5412 
5413       l_log_msg := 'Before calling procedure create_payment_event';
5414       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5415          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5416                         G_MODULE_NAME || l_procedure_name,
5417                         l_log_msg);
5418       END IF;
5419 
5420       -- bug fix 5694577
5421       OPEN c_get_payment_info(l_pay_check_ids(i));
5422       FETCH c_get_payment_info
5423        INTO l_exchange_rate_type,
5424             l_exchange_rate_date,
5425             l_exchange_rate,
5426             l_currency_code,
5427             l_creation_date,
5428             l_last_updated_by,
5429             l_org_id,
5430             l_pay_type,
5431             l_automatic_offsets_flag;           ---7209263
5432       CLOSE c_get_payment_info;
5433 
5434       IF (l_pay_type = 'R') THEN
5435         l_event_type := REFUND_ADJUSTED_TYPE;
5436       ELSE
5437         l_event_type := PAYMENT_ADJUSTED_TYPE;
5438       END IF;
5439 
5440       --bug 10126192 start
5441         IF l_accounting_date < l_pay_accounting_dates(i) THEN
5442            l_accounting_date := l_pay_accounting_dates(i);
5443         END IF;
5444       --bug 10126192 end
5445 
5446       l_accounting_event_id :=
5447         create_payment_event
5448         ( p_event_type => l_event_type,
5449           p_check_id => l_pay_check_ids(i),
5450           p_event_date => l_accounting_date, -- Bug 10126192,6996047
5451           p_calling_sequence => l_curr_calling_sequence
5452         );
5453 
5457                          G_MODULE_NAME || l_procedure_name,
5454        l_log_msg := 'After calling procedure create_payment_event';
5455        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5456           FND_LOG.STRING(G_LEVEL_PROCEDURE,
5458                          l_log_msg);
5459        END IF;
5460 
5461        l_log_msg := 'Before AP_RECONCILIATION_PKG.INSERT_PAYMENT_HISTORY';
5462        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5463          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5464                         G_MODULE_NAME || l_procedure_name,
5465                         l_log_msg);
5466        END IF;
5467 
5468        AP_RECONCILIATION_PKG.insert_payment_history
5469        (
5470           x_check_id                => l_pay_check_ids(i),
5471           x_transaction_type        => l_event_type   ,
5472           x_accounting_date         => l_accounting_date, -- Bug10126192,6996047
5473           x_trx_bank_amount         => NULL,
5474           x_errors_bank_amount      => NULL,
5475           x_charges_bank_amount     => NULL,
5476           x_bank_currency_code      => NULL,
5477           x_bank_to_base_xrate_type => NULL,
5478           x_bank_to_base_xrate_date => NULL,
5479           x_bank_to_base_xrate      => NULL,
5480           x_trx_pmt_amount          => 0,
5481           x_errors_pmt_amount       => NULL,
5482           x_charges_pmt_amount      => NULL,
5483           x_pmt_currency_code       => l_currency_code,
5484           x_pmt_to_base_xrate_type  => l_exchange_rate_type,
5485           x_pmt_to_base_xrate_date  => l_exchange_rate_date,
5486           x_pmt_to_base_xrate       => l_exchange_rate,
5487           x_trx_base_amount         => 0,
5488           x_errors_base_amount      => NULL,
5489           x_charges_base_amount     => NULL,
5490           x_matched_flag            => NULL,
5491           x_rev_pmt_hist_id         => NULL,
5492           x_org_id                  => l_org_id,  -- bug 4578865
5493           x_creation_date           => SYSDATE,
5494           x_created_by              => l_last_updated_by,
5495           x_last_update_date        => SYSDATE,
5496           x_last_updated_by         => l_last_updated_by,
5497           x_last_update_login       => l_last_updated_by,
5498           x_program_update_date     => NULL,
5499           x_program_application_id  => NULL,
5500           x_program_id              => NULL,
5501           x_request_id              => NULL,
5502           x_calling_sequence        => l_curr_calling_sequence,
5503           x_accounting_event_id     => l_accounting_event_id,
5504           x_invoice_adjustment_event_id => l_adj_accounting_event_id -- bug fix 5694577
5505         );
5506 
5507       l_log_msg := 'After AP_RECONCILIATION_PKG.INSERT_PAYMENT_HISTORY';
5508       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5509          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5510                         G_MODULE_NAME || l_procedure_name,
5511                         l_log_msg);
5512       END IF;
5513 
5514 
5515     END LOOP;
5516     EXIT WHEN l_payments_cur%NOTFOUND;
5517   END LOOP;
5518   CLOSE l_payments_cur;
5519 
5520   l_log_msg := 'Cascade the payment clearing events';
5521   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
5522      FND_LOG.STRING(G_LEVEL_STATEMENT,
5523                     G_MODULE_NAME || l_procedure_name,
5524                     l_log_msg);
5525   END IF;
5526 
5527   OPEN l_payment_clearings_cur;
5528   LOOP
5529 
5530     FETCH l_payment_clearings_cur
5531     BULK COLLECT INTO
5532       l_pay_clear_check_ids,
5533       l_pay_clear_accounting_dates
5534     LIMIT 1000;
5535 
5536     FOR i IN 1 .. l_pay_clear_check_ids.count LOOP
5537 
5538       l_log_msg := 'Before calling procedure create_payment_event';
5539       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5540          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5541                         G_MODULE_NAME || l_procedure_name,
5542                         l_log_msg);
5543       END IF;
5544 /* commented here for bug 7607184
5545 ---placed here due to 7209263
5546 SELECT AC.exchange_rate_type,
5547               AC.exchange_date,
5548               AC.exchange_rate,
5549               AC.creation_date,
5550               AC.last_updated_by,
5551               AC.org_id,
5552               asp.automatic_offsets_flag
5553        INTO   l_exchange_rate_type,
5554               l_exchange_rate_date,
5555               l_exchange_rate,
5556               l_creation_date,
5557               l_last_updated_by,
5558               l_org_id,
5559               l_automatic_offsets_flag                          --7209263
5560        FROM   AP_CHECKS AC, ap_system_parameters_all asp
5561        WHERE  AC.check_id = l_pay_clear_check_ids(i) --bug 7278341 l_pay_check_ids(i)
5562        AND      AC.org_id=asp.org_id;
5563 */
5564 --bug 7607184
5565 OPEN c_get_payment_info(l_pay_clear_check_ids(i));
5566       FETCH c_get_payment_info
5567        INTO l_exchange_rate_type,
5568             l_exchange_rate_date,
5569             l_exchange_rate,
5570             l_currency_code,
5571             l_creation_date,
5572             l_last_updated_by,
5573             l_org_id,
5574             l_pay_type,
5575             l_automatic_offsets_flag;
5576       CLOSE c_get_payment_info;
5577 
5578 --added to pick bank_currency_code from payment clearing for bug 7337949
5579 -- Bug 8276852 Added XRate Details type, Date, Rate
5580  SELECT aph.bank_currency_code
5581         ,aph.bank_to_base_xrate_type
5582         ,aph.bank_to_base_xrate_date
5583         ,aph.bank_to_base_xrate
5584         ,aph.charges_bank_amount  /*Bug13385106 */
5585         /* bug12363669 start */
5586         ,aph.pmt_to_base_xrate_type
5587         ,aph.pmt_to_base_xrate_date
5588         ,aph.pmt_to_base_xrate
5589         /* bug12363669 end */
5593         ,l_bank_to_base_xrate
5590    INTO l_bank_curr_code
5591         ,l_bank_to_base_xrate_type
5592         ,l_bank_to_base_xrate_date
5594         ,l_charges_bank_amount  /*Bug13385106 */
5595         /* bug12363669 start */
5596         ,l_pmt_to_base_xrate_type
5597         ,l_pmt_to_base_xrate_date
5598         ,l_pmt_to_base_xrate
5599         /* bug12363669 end*/
5600    FROM ap_payment_history_all APH
5601   WHERE APH.check_id = l_pay_clear_check_ids(i)
5602  AND APH.transaction_type = 'PAYMENT CLEARING'
5603  --added for bug 7614505
5604  AND   NOT EXISTS( SELECT 'PAYMENT UNCLEARING EXISTS'
5605                       FROM  ap_payment_history_all APH1
5606                       WHERE APH1.rev_pmt_hist_id = APH.payment_history_id
5607                       AND   APH1.transaction_type = 'PAYMENT UNCLEARING'
5608                       AND   APH1.check_id = APH.check_id);
5609 
5610  ------7337949 ends
5611 -- Bug 8276852 End
5612 
5613       --bug 10126192 start
5614         IF l_accounting_date < l_pay_clear_accounting_dates(i) THEN
5615            l_accounting_date := l_pay_clear_accounting_dates(i);
5616         END IF;
5617       --bug 10126192 end
5618 
5619       l_accounting_event_id :=
5620         create_payment_event
5621         ( p_event_type => PAYMENT_CLEARING_ADJUSTED_TYPE,
5622           p_check_id => l_pay_clear_check_ids(i),
5623           p_event_date => l_accounting_date, --Bug 10126192,6996047
5624           p_calling_sequence => l_curr_calling_sequence);
5625 
5626       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5627          l_log_msg := 'After calling procedure create_payment_event';
5628          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5629                         G_MODULE_NAME || l_procedure_name,
5630                         l_log_msg);
5631       END IF;
5632 
5633 ----commented as placed above due to 7209263
5634      /*  SELECT exchange_rate_type,
5635               exchange_date,
5636               exchange_rate,
5637               creation_date,
5638               last_updated_by,
5639               org_id
5640        INTO   l_exchange_rate_type,
5641               l_exchange_rate_date,
5642               l_exchange_rate,
5643               l_creation_date,
5644               l_last_updated_by,
5645               l_org_id
5646        FROM   AP_CHECKS AC
5647        WHERE  AC.check_id = l_pay_check_ids(i);
5648        */
5649 
5650 
5651       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5652          l_log_msg := 'Before AP_RECONCILIATION_PKG.INSERT_PAYMENT_HISTORY';
5653          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5654                         G_MODULE_NAME || l_procedure_name,
5655                         l_log_msg);
5656       END IF;
5657 
5658 
5659       AP_RECONCILIATION_PKG.insert_payment_history
5660      (
5661         x_check_id                => l_pay_clear_check_ids(i),
5662         x_transaction_type        => 'PAYMENT CLEARING ADJUSTED',
5663         x_accounting_date         => l_accounting_date, --Bug 10126192,6996047
5664         x_trx_bank_amount         => NULL,
5665         x_errors_bank_amount      => NULL,
5666         x_charges_bank_amount     =>l_charges_bank_amount, /*Bug13385106 */
5667         x_bank_currency_code      => l_bank_curr_code,
5668         x_bank_to_base_xrate_type => l_bank_to_base_xrate_type, --Bug 8276852
5669         x_bank_to_base_xrate_date => l_bank_to_base_xrate_date, --Bug 8276852
5670         x_bank_to_base_xrate      => l_bank_to_base_xrate,      --Bug 8276852
5671         x_trx_pmt_amount          => 0,
5672         x_errors_pmt_amount       => NULL,
5673         x_charges_pmt_amount      => NULL,
5674         x_pmt_currency_code       => l_currency_code,
5675         x_pmt_to_base_xrate_type  => l_pmt_to_base_xrate_type, --bug12363669
5676         x_pmt_to_base_xrate_date  => l_pmt_to_base_xrate_date, --bug12363669
5677         x_pmt_to_base_xrate       => l_pmt_to_base_xrate,      --bug12363669
5678         x_trx_base_amount         => 0,
5679         x_errors_base_amount      => NULL,
5680         x_charges_base_amount     => NULL,
5681         x_matched_flag            => NULL,
5682         x_rev_pmt_hist_id         => NULL,
5683         x_org_id                  => l_org_id,  -- bug 4578865
5684         x_creation_date           => SYSDATE,
5685         x_created_by              => l_last_updated_by,
5686         x_last_update_date        => SYSDATE,
5687         x_last_updated_by         => l_last_updated_by,
5688         x_last_update_login       => l_last_updated_by,
5689         x_program_update_date     => NULL,
5690         x_program_application_id  => NULL,
5691         x_program_id              => NULL,
5692         x_request_id              => NULL,
5693         x_calling_sequence        => l_curr_calling_sequence,
5694         x_accounting_event_id     => l_accounting_event_id,
5695         x_invoice_adjustment_event_id => l_adj_accounting_event_id --bug6710016
5696       );
5697 
5698       l_log_msg := 'After AP_RECONCILIATION_PKG.INSERT_PAYMENT_HISTORY ';
5699       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5700          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5701                         G_MODULE_NAME || l_procedure_name,
5702                         l_log_msg);
5703       END IF;
5704 
5705 
5706     END LOOP;
5707     EXIT WHEN l_payment_clearings_cur%NOTFOUND;
5708   END LOOP;
5709   CLOSE l_payment_clearings_cur;
5710 
5711 
5712   l_log_msg := 'Cascade the payment maturity events';
5713   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
5714      FND_LOG.STRING(G_LEVEL_STATEMENT,
5715                     G_MODULE_NAME || l_procedure_name,
5716                     l_log_msg);
5717   END IF;
5718 
5719   OPEN l_payment_maturities_cur;
5720   LOOP
5721 
5722     FETCH l_payment_maturities_cur
5723     BULK COLLECT INTO
5724       l_pay_mat_check_ids,
5728     FOR i IN 1 .. l_pay_mat_check_ids.count LOOP
5725       l_pay_mat_accounting_dates
5726     LIMIT 1000;
5727 
5729 
5730 
5731 
5732 
5733 --bug 10114700 added call to c_get_payment_info
5734 OPEN c_get_payment_info(l_pay_mat_check_ids(i));
5735       FETCH c_get_payment_info
5736        INTO l_exchange_rate_type,
5737             l_exchange_rate_date,
5738             l_exchange_rate,
5739             l_currency_code,
5740             l_creation_date,
5741             l_last_updated_by,
5742             l_org_id,
5743             l_pay_type,
5744             l_automatic_offsets_flag;
5745       CLOSE c_get_payment_info;
5746 
5747       l_log_msg := 'Before calling procedure create_payment_event';
5748       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5749          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5750                         G_MODULE_NAME || l_procedure_name,
5751                         l_log_msg);
5752       END IF;
5753 
5754       --bug 10126192 start
5755         IF l_accounting_date < l_pay_mat_accounting_dates(i) THEN
5756            l_accounting_date := l_pay_mat_accounting_dates(i);
5757         END IF;
5758       --bug 10126192 end
5759 
5760       l_accounting_event_id :=
5761         create_payment_event
5762         ( p_event_type => PAYMENT_MATURITY_ADJUSTED_TYPE,
5763           p_check_id => l_pay_mat_check_ids(i),
5764           p_event_date => l_accounting_date, --Bug 10126192,6996047
5765           p_calling_sequence => l_curr_calling_sequence);
5766 
5767       l_log_msg := 'After calling procedure create_payment_event';
5768       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5769          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5770                         G_MODULE_NAME || l_procedure_name,
5771                         l_log_msg);
5772       END IF;
5773 
5774 ----Commented due to 7209263
5775       /* SELECT exchange_rate_type,
5776               exchange_date,
5777               exchange_rate,
5778               creation_date,
5779               last_updated_by,
5780               org_id
5781        INTO   l_exchange_rate_type,
5782               l_exchange_rate_date,
5783               l_exchange_rate,
5784               l_creation_date,
5785               l_last_updated_by,
5786               l_org_id
5787        FROM   AP_CHECKS AC
5788        WHERE  AC.check_id = l_pay_check_ids(i);
5789        */
5790 
5791        l_log_msg := 'Before AP_RECONCILIATION_PKG.INSERT_PAYMENT_HISTORY';
5792        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5793          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5794                         G_MODULE_NAME || l_procedure_name,
5795                         l_log_msg);
5796        END IF;
5797 
5798        AP_RECONCILIATION_PKG.insert_payment_history
5799        (
5800           x_check_id                => l_pay_mat_check_ids(i),
5801           x_transaction_type        => 'PAYMENT MATURITY ADJUSTED',
5802           x_accounting_date         => l_accounting_date, --Bug 10126192,6996047
5803           x_trx_bank_amount         => NULL,
5804           x_errors_bank_amount      => NULL,
5805           x_charges_bank_amount     => NULL,
5806           x_bank_currency_code      => NULL,
5807           x_bank_to_base_xrate_type => NULL,
5808           x_bank_to_base_xrate_date => NULL,
5809           x_bank_to_base_xrate      => NULL,
5810           x_trx_pmt_amount          => 0,
5811           x_errors_pmt_amount       => NULL,
5812           x_charges_pmt_amount      => NULL,
5813           x_pmt_currency_code       => l_currency_code,
5814           x_pmt_to_base_xrate_type  => l_exchange_rate_type,
5815           x_pmt_to_base_xrate_date  => l_exchange_rate_date,
5816           x_pmt_to_base_xrate       => l_exchange_rate,
5817           x_trx_base_amount         => 0,
5818           x_errors_base_amount      => NULL,
5819           x_charges_base_amount     => NULL,
5820           x_matched_flag            => NULL,
5821           x_rev_pmt_hist_id         => NULL,
5822           x_org_id                  => l_org_id,   -- bug 4578865
5823           x_creation_date           => SYSDATE,
5824           x_created_by              => l_last_updated_by,
5825           x_last_update_date        => SYSDATE,
5826           x_last_updated_by         => l_last_updated_by,
5827           x_last_update_login       => l_last_updated_by,
5828           x_program_update_date     => NULL,
5829           x_program_application_id  => NULL,
5830           x_program_id              => NULL,
5831           x_request_id              => NULL,
5832           x_calling_sequence        => l_curr_calling_sequence,
5833           x_accounting_event_id     => l_accounting_event_id,
5834           x_invoice_adjustment_event_id => l_adj_accounting_event_id --bug6710016
5835         );
5836 
5837        l_log_msg := 'After AP_RECONCILIATION_PKG.INSERT_PAYMENT_HISTORY';
5838        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5839          FND_LOG.STRING(G_LEVEL_PROCEDURE,
5840                         G_MODULE_NAME || l_procedure_name,
5841                         l_log_msg);
5842        END IF;
5843 
5844     END LOOP;
5845 
5846     EXIT WHEN l_payment_maturities_cur%NOTFOUND;
5847   END LOOP;
5848   CLOSE l_payment_maturities_cur;
5849 
5850  l_log_msg := 'End of procedure '||l_procedure_name;
5851  IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5852     FND_LOG.STRING(G_LEVEL_PROCEDURE,
5853                    G_MODULE_NAME || l_procedure_name,
5854                    l_log_msg);
5855  END IF;
5856 
5857 EXCEPTION
5858   WHEN OTHERS THEN
5862     IF (l_payments_cur%ISOPEN) THEN
5859     IF (l_prepayment_applications_cur%ISOPEN) THEN
5860       CLOSE l_prepayment_applications_cur;
5861     END IF;
5863       CLOSE l_payments_cur;
5864     END IF;
5865     IF (l_payment_clearings_cur%ISOPEN) THEN
5866       CLOSE l_payment_clearings_cur;
5867     END IF;
5868     IF (l_payment_maturities_cur%ISOPEN) THEN
5869       CLOSE l_payment_maturities_cur;
5870     END IF;
5871     IF (SQLCODE <> -20001) THEN
5872        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
5873        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
5874        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
5875                     l_curr_calling_sequence);
5876        FND_MESSAGE.SET_TOKEN('PARAMETERS',
5877                'p_invoice_id = '||p_invoice_id
5878            ||', p_adj_accounting_event_id = '||p_adj_accounting_event_id);
5879        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
5880     END IF;
5881     APP_EXCEPTION.RAISE_EXCEPTION();
5882 END derive_cascade_events;
5883 
5884 
5885 
5886 /*============================================================================
5887  |  PROCEDURE  -  DERIVE_INVOICE_CANCEL_EVENTs(PRIVATE)
5888  |
5889  |  DESCRIPTION
5890  |      This procedure creates invoice cancellation events using the GL date
5891  |      of the invoice distributions. If there are multiple invoice
5892  |      distributions with different GL dates, multiple Invoice Cancellation
5893  |      events will be created.
5894  |
5895  |  PRAMETERS
5896  |          p_invoice_id         IN: Invoice Id of the cancelled invoice
5897  |          p_calling_sequence   IN: Debug information
5898  |
5899  |  KNOWN ISSUES:
5900  |
5901  |  NOTES:
5902  |
5903  |  MODIFICATION HISTORY
5904  |  Date         Author             Description of Change
5905  |
5906  *===========================================================================*/
5907 PROCEDURE derive_invoice_cancel_events (
5908                        p_invoice_id       IN   NUMBER,
5909                        p_calling_sequence IN   VARCHAR2)
5910 IS
5911 
5912   /* bug 11663644 added ap_self_assessed_tax_dist_all */
5913   CURSOR inv_cancel_event_dists IS
5914     SELECT accounting_date
5915     FROM ap_invoice_distributions
5916     WHERE invoice_id = p_invoice_id
5917     AND awt_invoice_payment_id IS NULL
5918     AND prepay_distribution_id IS NULL --prepay_tax_parent_id obsoleted
5919     AND accounting_event_id IS NULL
5920     AND cancellation_flag = 'Y'
5921     GROUP BY accounting_date
5922     UNION
5923     SELECT accounting_date
5924     FROM ap_self_assessed_tax_dist_all
5925     WHERE invoice_id = p_invoice_id
5926     AND awt_invoice_payment_id IS NULL
5927     AND prepay_distribution_id IS NULL --prepay_tax_parent_id obsoleted
5928     AND accounting_event_id IS NULL
5929     AND cancellation_flag = 'Y'
5930     GROUP BY accounting_date
5931     ORDER BY accounting_date;
5932 
5933   /* Bug 11663644  removed cursors no_action_prepay_dists,
5934   non_prepay_dist_grp_count and all_unaccounted_dists_cur
5935   as they are not referred anywhere*/
5936 
5937   TYPE t_accounting_event_dates IS TABLE OF DATE INDEX BY PLS_INTEGER;
5938   l_accounting_event_dates t_accounting_event_dates;
5939   l_dist_gl_date_list    t_accounting_event_dates;
5940 
5941   TYPE t_accounting_event_ids IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
5942   l_accounting_event_ids t_accounting_event_ids;
5943   l_unaccounted_event_id_list   t_accounting_event_ids;
5944 
5945 
5946   l_event_type VARCHAR2(30);
5947   l_event_class VARCHAR2(30);
5948   l_accounting_event_id NUMBER; --bug 4352723
5949   l_processed_dists NUMBER;
5950   l_dist_dates NUMBER;
5951 
5952   l_legal_entity_id NUMBER(15);
5953   l_ledger_id NUMBER(15);
5954   l_org_id NUMBER(15);
5955   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
5956   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
5957   l_diff_gl_date_dists NUMBER := 0;
5958   l_transaction_date   AP_INVOICES_ALL.invoice_date%TYPE;
5959 
5960   l_curr_calling_sequence VARCHAR2(2000);
5961 
5962   -- Logging:
5963   l_procedure_name CONSTANT VARCHAR2(30) := 'DERIVE_INVOICE_CANCEL_EVENT';
5964   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
5965 
5966 BEGIN
5967 
5968   l_curr_calling_sequence := p_calling_sequence ||
5969           ' -> AP_ACCOUNTING_EVENTS_PKG.DERIVE_INVOICE_CANCEL_EVENT';
5970 
5971   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5972 
5973   l_log_msg := 'Begin of procedure '||l_procedure_name;
5974   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
5975      FND_LOG.STRING(G_LEVEL_PROCEDURE,
5976                     G_MODULE_NAME || l_procedure_name,
5977                     l_log_msg);
5978   END IF;
5979 
5980   SELECT DECODE
5981     ( AI.invoice_type_lookup_code,
5982       'CREDIT', CREDIT_MEMO_CANCELLED_TYPE,
5983       'DEBIT', DEBIT_MEMO_CANCELLED_TYPE,
5984       'PREPAYMENT', PREPAYMENT_CANCELLED_TYPE,
5985       INVOICE_CANCELLED_TYPE
5986     ) event_type,
5987     DECODE
5988     ( AI.invoice_type_lookup_code,
5989       'CREDIT', CREDIT_MEMOS_CLASS,
5990       'DEBIT', DEBIT_MEMOS_CLASS,
5991       'PREPAYMENT', PREPAYMENTS_CLASS,
5992       INVOICES_CLASS
5993     ) event_class
5994   INTO l_event_type,
5995        l_event_class
5996   FROM ap_invoices_all AI
5997   WHERE AI.invoice_id = p_invoice_id;
5998 
5999   l_log_msg := 'Before calling procedure create_invoice_event';
6000   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6001           FND_LOG.STRING(G_LEVEL_PROCEDURE,
6002                          G_MODULE_NAME || l_procedure_name,
6003                          l_log_msg);
6004   END IF;
6005 
6009     FETCH inv_cancel_event_dists
6006   OPEN inv_cancel_event_dists;
6007   LOOP
6008 
6010     BULK COLLECT INTO
6011       l_accounting_event_dates
6012     LIMIT 1000;
6013 
6014     FOR i IN 1 ..l_accounting_event_dates.count LOOP
6015       l_log_msg := 'Before calling procedure create_invoice_event';
6016       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6017           FND_LOG.STRING(G_LEVEL_PROCEDURE,
6018                          G_MODULE_NAME || l_procedure_name,
6019                          l_log_msg);
6020       END IF;
6021 
6022       l_accounting_event_ids(i) :=
6023         create_invoice_event
6024         ( p_event_type => l_event_type,
6025           p_invoice_id => p_invoice_id,
6026           p_event_date => l_accounting_event_dates(i),
6027           p_calling_sequence => l_curr_calling_sequence
6028         );
6029 
6030       l_log_msg := 'After calling procedure create_invoice_event';
6031       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6032          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6033                         G_MODULE_NAME || l_procedure_name,
6034                         l_log_msg);
6035       END IF;
6036 
6037     END LOOP;
6038 
6039     FORALL i IN 1 .. l_accounting_event_dates.count
6040     UPDATE ap_invoice_distributions
6041     SET accounting_event_id = l_accounting_event_ids(i)
6042     WHERE invoice_id = p_invoice_id
6043     AND accounting_date = l_accounting_event_dates(i)
6044     AND awt_invoice_payment_id IS NULL
6045     AND line_type_lookup_code <> 'PREPAY'
6046     AND prepay_distribution_id IS NULL --prepay_tax_parent_id obsoleted
6047     AND accounting_event_id IS NULL
6048     AND cancellation_flag = 'Y';
6049 
6050     --------------------------------------------------
6051     -- bug 5525657
6052     -- We need to stamp the accounting event id for
6053     -- self assessed tax distributions
6054     --------------------------------------------------
6055 
6056     FORALL i IN 1 .. l_accounting_event_dates.count
6057     UPDATE ap_self_assessed_tax_dist_all
6058     SET accounting_event_id = l_accounting_event_ids(i)
6059     WHERE invoice_id = p_invoice_id
6060     AND accounting_date = l_accounting_event_dates(i)
6061     AND awt_invoice_payment_id IS NULL
6062     AND line_type_lookup_code <> 'PREPAY'
6063     AND prepay_distribution_id IS NULL --prepay_tax_parent_id obsoleted
6064     AND accounting_event_id IS NULL
6065     AND cancellation_flag = 'Y';
6066 
6067     EXIT WHEN inv_cancel_event_dists%NOTFOUND;
6068   END LOOP;
6069   CLOSE inv_cancel_event_dists;
6070 
6071   -- Bug 4927664 Remove the complete logic trying to figure out
6072   -- if we need to update events to No Action.
6073 
6074   l_log_msg :='End of procedure '||l_procedure_name;
6075   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6076      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6077                     G_MODULE_NAME || l_procedure_name,
6078                     l_log_msg);
6079   END IF;
6080 
6081 EXCEPTION
6082   WHEN OTHERS THEN
6083     IF (inv_cancel_event_dists%ISOPEN) THEN
6084       CLOSE inv_cancel_event_dists;
6085     END IF;
6086     IF (SQLCODE <> -20001) THEN
6087        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
6088        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
6089        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
6090                     l_curr_calling_sequence);
6091        FND_MESSAGE.SET_TOKEN('PARAMETERS',
6092                'p_invoice_id = '||p_invoice_id);
6093        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
6094     END IF;
6095     APP_EXCEPTION.RAISE_EXCEPTION();
6096 END derive_invoice_cancel_events;
6097 
6098 /*============================================================================
6099  |  PROCEDURE  -  NO_ACTION_PMT_EVENT_UPDATE (PRIVATE)
6100  |
6101  |  DESCRIPTION
6102  |    This procedure is used to create 'No Action' event in SLA.'No Action'
6103  |    status indicate that it is not necessary to create any accounting for a
6104  |    given event. 'No Action' event will be picked up by the SLA accounting
6105  |    process, but no accounting lines will be created.
6106  |
6107  |  PRAMETERS
6108  |          p_check_id: Check ID
6109  |          p_event_type_code: Event Type
6110  |          p_accounting_date: Accounting date
6111  |          p_accounting_event_id: Accounting event whose status will be
6112  |                    stamped as 'No Action'
6113  |          p_calling_sequence: Debug information
6114  |
6115  |  KNOWN ISSUES:
6116  |
6117  |  NOTES:
6118  |
6119  |  MODIFICATION HISTORY
6120  |  Date         Author             Description of Change
6121  |
6122  *===========================================================================*/
6123 PROCEDURE no_action_pmt_event_update(
6124                  p_check_id            IN   NUMBER,
6125                  p_event_type_code     IN   VARCHAR2,
6126                  p_accounting_date     IN   DATE,
6127                  p_accounting_event_id IN   NUMBER,
6128                  p_calling_sequence    IN   VARCHAR2)
6129 IS
6130 
6131   -- Bug 4748638
6132   CURSOR aip_event_id_count IS
6133   SELECT accounting_event_id
6134   FROM   ap_invoice_payments
6135   WHERE  check_id = p_check_id
6136   GROUP BY accounting_event_id;
6137 
6138   TYPE event_id_tab_Type IS TABLE OF
6139        ap_invoice_payments.accounting_event_id%TYPE;
6140   l_event_id_list        event_id_tab_Type;
6141 
6142   l_legal_entity_id NUMBER(15);
6143   l_ledger_id NUMBER(15);
6144   l_org_id NUMBER(15);
6145   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
6146   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
6147 
6148   l_processed_events NUMBER;
6149   l_event_count NUMBER;
6153   l_curr_calling_sequence VARCHAR2(2000);
6150   l_accounting_date DATE;
6151   l_event_class VARCHAR2(30);
6152 
6154 
6155   -- Logging:
6156   l_procedure_name CONSTANT VARCHAR2(30) := 'NO_ACTION_PMT_EVENT_UPDATE';
6157   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
6158 
6159 BEGIN
6160 
6161   l_curr_calling_sequence := p_calling_sequence ||
6162          ' -> AP_ACCOUNTING_EVENTS_PKG.NO_ACTION_PMT_EVENT_UPDATE';
6163 
6164   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6165 
6166   l_log_msg :='Begin of procedure '||l_procedure_name;
6167   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6168      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6169                     G_MODULE_NAME || l_procedure_name,
6170                     l_log_msg);
6171   END IF;
6172 
6173   l_log_msg :='Before calling procedure get_payment_info';
6174   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6175      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6176                     G_MODULE_NAME || l_procedure_name,
6177                     l_log_msg);
6178   END IF;
6179 
6180   get_payment_info
6181   ( p_check_id => p_check_id,
6182     p_org_id => l_org_id, -- OUT
6183     p_legal_entity_id => l_legal_entity_id, -- OUT
6184     p_ledger_id => l_ledger_id, -- OUT
6185     p_calling_sequence => l_curr_calling_sequence
6186   );
6187 
6188   l_log_msg :='Procedure get_payment_info executed';
6189   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6190      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6191                     G_MODULE_NAME || l_procedure_name,
6192                     l_log_msg);
6193   END IF;
6194 
6195   l_log_msg :='Before calling procedure get_event_security_context';
6196   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6197      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6198                     G_MODULE_NAME || l_procedure_name,
6199                     l_log_msg);
6200   END IF;
6201 
6202   l_event_security_context :=
6203     get_event_security_context
6204     ( p_org_id => l_org_id,
6205       p_calling_sequence => l_curr_calling_sequence
6206     );
6207 
6208   l_log_msg :='After calling procedure get_event_security_context';
6209   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6210      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6211                     G_MODULE_NAME || l_procedure_name,
6212                     l_log_msg);
6213   END IF;
6214 
6215   l_log_msg :='Before calling procedure get_payment_event_source_info';
6216   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6217      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6218                     G_MODULE_NAME || l_procedure_name,
6219                     l_log_msg);
6220   END IF;
6221 
6222   l_event_source_info :=
6223     get_payment_event_source_info
6224     ( p_legal_entity_id => l_legal_entity_id,
6225       p_ledger_id => l_ledger_id,
6226       p_check_id => p_check_id,
6227       p_calling_sequence => l_curr_calling_sequence
6228     );
6229 
6230   l_log_msg :='After calling procedure get_payment_event_source_info';
6231   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6232      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6233                     G_MODULE_NAME || l_procedure_name,
6234                     l_log_msg);
6235   END IF;
6236 
6237   IF (p_event_type_code IN (PAYMENT_CANCELLED_TYPE, REFUND_CANCELLED_TYPE)) THEN
6238     IF (p_event_type_code = PAYMENT_CANCELLED_TYPE) THEN
6239       l_event_class := PAYMENTS_CLASS;
6240     ELSE
6241       l_event_class := REFUNDS_CLASS;
6242     END IF;
6243 
6244     SELECT COUNT(*)
6245     INTO   l_processed_events
6246     FROM   ap_invoice_payments
6247     WHERE  posted_flag = 'Y'
6248     AND    check_id = p_check_id;
6249 
6250     IF (l_processed_events = 0) THEN
6251 
6252       -- If there is more that one event for the payment, it implies that the
6253       -- payment has been adjusted, and we do not want to update events to
6254       -- No Action
6255 
6256        OPEN  aip_event_id_count;
6257        FETCH  aip_event_id_count
6258        BULK COLLECT INTO l_event_id_list;
6259        CLOSE  aip_event_id_count;
6260 
6261       IF (l_event_id_list.count <= 1) THEN
6262 
6263         SELECT check_date
6264         INTO   l_accounting_date
6265         FROM   ap_checks
6266         WHERE  check_id = p_check_id;
6267 
6268         IF (l_accounting_date = p_accounting_date) THEN
6269           -- p_event_type_code is left NULL so that 'PAYMENT CREATED' and
6270           -- 'PAYMENT CANCELLED' events or 'REFUND CREATED' and
6271           -- 'REFUND CANCELLED' events will be updated.
6272 
6273           l_log_msg :='Before calling P_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
6274           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6275              FND_LOG.STRING(G_LEVEL_PROCEDURE,
6276                             G_MODULE_NAME || l_procedure_name,
6277                             l_log_msg);
6278           END IF;
6279 
6280           AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS
6281           ( p_event_source_info => l_event_source_info,
6282             p_event_class_code => l_event_class,
6283             p_event_type_code => p_event_type_code,
6284             p_event_date => l_accounting_date,
6285             p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION,
6286             p_valuation_method => NULL,
6287             p_security_context => l_event_security_context,
6288             p_calling_sequence => l_curr_calling_sequence
6289           );
6290 
6291           l_log_msg :='After calling AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
6292           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6293              FND_LOG.STRING(G_LEVEL_PROCEDURE,
6294                             G_MODULE_NAME || l_procedure_name,
6298 
6295                             l_log_msg);
6296           END IF;
6297         END IF;
6299       END IF;
6300 
6301     END IF;
6302 
6303   ELSIF (p_event_type_code = PAYMENT_UNCLEARED_TYPE) THEN
6304 
6305     /* Get the accounting date of 'clearing' payment history */
6306     SELECT APH.accounting_date
6307     INTO   l_accounting_date
6308     FROM   ap_payment_history APH
6309     WHERE  APH.payment_history_id =
6310            (SELECT max(payment_history_id)
6311             FROM   ap_payment_history APH2
6312             WHERE  APH2.check_id = p_check_id
6313             AND    APH2.posted_flag = 'N'
6314             AND    APH2.transaction_type = 'PAYMENT CLEARING');
6315 
6316     IF (l_accounting_date = p_accounting_date) THEN
6317       -- p_event_type_code is left NULL so that 'PAYMENT CLEARED' and
6318       -- 'PAYMENT UNCLEARED' events will be updated.
6319 
6320       l_log_msg :='Before calling AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
6321       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6322          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6323                         G_MODULE_NAME || l_procedure_name,
6324                         l_log_msg);
6325       END IF;
6326 
6327       AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS
6328       ( p_event_source_info => l_event_source_info,
6329         p_event_class_code => RECONCILED_PAYMENTS_CLASS,
6330         p_event_type_code => p_event_type_code,
6331         p_event_date => l_accounting_date,
6332         p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION,
6333         p_valuation_method => NULL,
6334         p_security_context => l_event_security_context,
6335         p_calling_sequence => l_curr_calling_sequence
6336       );
6337 
6338       l_log_msg :='After calling AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
6339       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6340          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6341                         G_MODULE_NAME || l_procedure_name,
6342                         l_log_msg);
6343       END IF;
6344     END IF;
6345 
6346   ELSIF (p_event_type_code = PAYMENT_MATURITY_REVERSED_TYPE) THEN
6347 
6348     SELECT APH.accounting_date
6349     INTO   l_accounting_date
6350     FROM   ap_payment_history APH
6351     WHERE  payment_history_id =
6352            (SELECT max(payment_history_id)
6353             FROM   ap_payment_history APH2
6354             WHERE  APH2.check_id = p_check_id
6355             AND    APH2.posted_flag = 'N'
6356             AND    APH2.transaction_type = 'PAYMENT MATURITY');
6357 
6358 
6359     IF (l_accounting_date = p_accounting_date) THEN
6360 
6361       l_log_msg :='Before calling AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
6362       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6363          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6364                         G_MODULE_NAME || l_procedure_name,
6365                         l_log_msg);
6366       END IF;
6367 
6368       AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS
6369       ( p_event_source_info => l_event_source_info,
6370         p_event_class_code => FUTURE_DATED_PAYMENTS_CLASS,
6371         p_event_type_code => p_event_type_code,
6372         p_event_date => l_accounting_date,
6373         p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION,
6374         p_valuation_method => NULL,
6375         p_security_context => l_event_security_context,
6376         p_calling_sequence => l_curr_calling_sequence
6377       );
6378 
6379      l_log_msg :='After calling AP_XLA_EVENTS_PKG.UPDATE_EVENT_STATUS';
6380      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6381         FND_LOG.STRING(G_LEVEL_PROCEDURE,
6382                        G_MODULE_NAME || l_procedure_name,
6383                        l_log_msg);
6384      END IF;
6385     END IF;
6386 
6387   END IF;
6388 
6389  l_log_msg :='End of procedure '||l_procedure_name;
6390  IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6391      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6392                     G_MODULE_NAME || l_procedure_name,
6393                     l_log_msg);
6394  END IF;
6395 
6396 EXCEPTION
6397   WHEN OTHERS THEN
6398     IF (SQLCODE <> -20001) THEN
6399        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
6400        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
6401        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
6402                     l_curr_calling_sequence);
6403        FND_MESSAGE.SET_TOKEN('PARAMETERS',
6404                 'p_check_id = '||p_check_id
6405             ||', p_event_type_code = '||p_event_type_code
6406             ||', p_accounting_date = '||p_accounting_date
6407             ||', p_accounting_event_id = '||p_accounting_event_id);
6408        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
6409     END IF;
6410     APP_EXCEPTION.RAISE_EXCEPTION();
6411 END no_action_pmt_event_update;
6412 
6413 
6414 /*============================================================================
6415  |  PROCEDURE  -  MULTI_ORG_EVENTS_SWEEP(PUBLIC)
6416  |
6417  |  DESCRIPTION
6418  |      This procedure is called by APXTRSWP.rdf (UPDATE_ACCTG_DATES).This
6419  |      procedure is used to sweep accounting events from one accounting period
6420  |      to another.
6421  |
6422  |  PRAMETERS
6423  |         p_ledger_id: Current ledger ID
6424  |         p_period_name: Old accounting period
6425  |         p_from_date: The start date of sweeping
6426  |         p_to_date: The end date of the sweeping
6427  |         p_sweep_to_date: The new event date
6428  |         p_calling_sequence: Debug information
6429  |
6430  |  KNOWN ISSUES:
6431  |
6432  |  NOTES:
6433  |
6437  *===========================================================================*/
6434  |  MODIFICATION HISTORY
6435  |  Date         Author             Description of Change
6436  |
6438 PROCEDURE multi_org_events_sweep (
6439                p_ledger_id        IN    NUMBER,
6440                p_period_name      IN    VARCHAR2,
6441                p_from_date        IN    DATE,
6442                p_to_date          IN    DATE,
6443                p_sweep_to_date    IN    DATE,
6444                p_calling_sequence IN    VARCHAR2 )
6445 IS
6446 
6447   TYPE t_event_ids IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
6448   TYPE t_invoice_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
6449   TYPE t_check_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
6450   TYPE t_org_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
6451   TYPE t_legal_entity_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
6452   TYPE t_ledger_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
6453 
6454   l_event_ids t_event_ids;
6455   l_invoice_ids t_invoice_ids;
6456   l_check_ids t_check_ids;
6457   l_org_ids t_org_ids;
6458   l_legal_entity_ids t_legal_entity_ids;
6459   l_ledger_ids t_ledger_ids;
6460   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
6461   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
6462 
6463   CURSOR l_aid_events_mo_cur_period IS
6464     SELECT AID.accounting_event_id,
6465            AID.invoice_id,
6466            AID.org_id,
6467            AI.legal_entity_id,
6468            AID.set_of_books_id ledger_id
6469     FROM ap_invoice_distributions_all AID,
6470          ap_invoices_all AI
6471     WHERE AP_UTILITIES_PKG.GET_CURRENT_GL_DATE(TRUNC(AID.accounting_date), aid.org_id) --bug5956469
6472                    = p_period_name
6473     AND aid.posted_flag IN ('N', 'S') -- Bug 6869699
6474     AND aid.org_id = ai.org_id
6475     AND AID.org_id IN
6476         ( SELECT ASP.org_id
6477           FROM hr_organization_information OI,
6478                --hr_all_organization_units_tl LE,  --bug6392886
6479                hr_all_organization_units_tl OU,
6480                ap_system_parameters_all ASP
6481           WHERE ASP.org_id = OI.organization_id
6482           AND   OU.organization_id = OI.organization_id
6483           AND OI.org_information_context = 'Operating Unit Information'
6484           AND DECODE(LTRIM(OI.org_information3, '0123456789'), NULL,
6485                     TO_NUMBER(OI.org_information3), NULL) = p_ledger_id
6486           --bug6392886
6487           /*AND DECODE(LTRIM(OI.org_information2, '0123456789'), NULL,
6488                     TO_NUMBER(OI.org_information2), NULL) = LE.organization_id*/
6489           AND OU.organization_id = OI.organization_id
6490           AND OU.language = USERENV('LANG')
6491           --AND LE.language = USERENV('LANG')
6492         ) AND AID.invoice_id = AI.invoice_id
6493           AND AID.accounting_event_id is not NULL;--Bug6320053
6494 
6495   CURSOR l_aid_events_mo_cur_no_period IS
6496     SELECT AID.accounting_event_id,
6497            AID.invoice_id,
6498            AID.org_id,
6499            AI.legal_entity_id,
6500            AID.set_of_books_id ledger_id
6501     FROM ap_invoice_distributions_all AID,
6502          ap_invoices_all AI
6503     WHERE AID.accounting_date BETWEEN p_from_date AND p_to_date
6504     AND   aid.posted_flag IN ('N', 'S') -- Bug 6869699
6505     AND   aid.org_id = ai.org_id
6506     AND AID.org_id IN
6507         ( SELECT ASP.org_id
6508           FROM hr_organization_information OI,
6509                --hr_all_organization_units_tl LE,  --bug6392886
6510                hr_all_organization_units_tl OU,
6511                ap_system_parameters_all ASP
6512           WHERE ASP.org_id = OI.organization_id
6513           AND   OU.organization_id = OI.organization_id
6514           AND OI.org_information_context = 'Operating Unit Information'
6515           AND DECODE(LTRIM(OI.org_information3, '0123456789'), NULL,
6516                     TO_NUMBER(OI.org_information3), NULL) = p_ledger_id
6517           --bug6392886
6518           /*AND DECODE(LTRIM(OI.org_information2, '0123456789'), NULL,
6519                     TO_NUMBER(OI.org_information2), NULL) = LE.organization_id*/
6520           AND OU.organization_id = OI.organization_id
6521           AND OU.language = USERENV('LANG')
6522           --AND LE.language = USERENV('LANG')
6523         ) AND AID.invoice_id = AI.invoice_id
6524      AND AID.accounting_event_id is not NULL ;--Bug6320053
6525 
6526   CURSOR l_aph_events_mo_cur_period IS
6527     SELECT APH.accounting_event_id,
6528       APH.check_id check_id,
6529       APH.org_id,
6530       AC.legal_entity_id,
6531       ( SELECT AIP.set_of_books_id
6532         FROM ap_invoice_payments_all AIP
6533         WHERE AIP.check_id = APH.check_id
6534         AND ROWNUM = 1
6535       ) ledger_id
6536     FROM
6537       ap_payment_history_all APH,
6538       ap_checks_all AC
6539     WHERE
6540       APH.check_id = AC.check_id
6541       AND AP_UTILITIES_PKG.GET_CURRENT_GL_DATE(TRUNC(APH.accounting_date), aph.org_id) --bug5956469
6542           = p_period_name
6543       AND aph.posted_flag IN ('N', 'S') -- Bug 6869699
6544       and ac.org_id = aph.org_id
6545       AND APH.org_id IN
6546         ( SELECT ASP.org_id
6547           FROM hr_organization_information OI,
6548                --hr_all_organization_units_tl LE,  --bug6392886
6549                hr_all_organization_units_tl OU,
6550                ap_system_parameters_all ASP
6551           WHERE ASP.org_id = OI.organization_id
6552           AND   OU.organization_id = OI.organization_id
6553           AND OI.org_information_context = 'Operating Unit Information'
6554           AND DECODE(LTRIM(OI.org_information3,'0123456789'), NULL,
6555                      TO_NUMBER(OI.org_information3), NULL) = p_ledger_id
6556           --bug6392886
6557           /*AND DECODE(LTRIM(OI.org_information2,'0123456789'), NULL,
6558                   TO_NUMBER(OI.org_information2), NULL) = LE.organization_id */
6559           AND OU.organization_id = OI.organization_id
6560           AND OU.language = USERENV('LANG')
6561           --AND LE.language = USERENV('LANG')
6562         )
6563          AND APH.accounting_event_id is not NULL ;--Bug6320053
6564 
6565   CURSOR l_aph_events_mo_cur_no_period IS
6566     SELECT APH.accounting_event_id,
6567       APH.check_id check_id,
6568       APH.org_id,
6569       AC.legal_entity_id,
6570       ( SELECT AIP.set_of_books_id
6571         FROM ap_invoice_payments_all AIP
6572         WHERE AIP.check_id = APH.check_id
6573         AND ROWNUM = 1
6574       ) ledger_id
6575     FROM
6576       ap_payment_history_all APH,
6577       ap_checks_all AC
6578     WHERE
6579       APH.check_id = AC.check_id
6580       AND APH.accounting_date BETWEEN p_from_date AND p_to_date
6581       AND aph.posted_flag IN ('N', 'S') -- Bug 6869699
6582       and ac.org_id = aph.org_id
6583       AND APH.org_id IN
6584         ( SELECT ASP.org_id
6585           FROM hr_organization_information OI,
6586                --hr_all_organization_units_tl LE,  bug6392886
6587                hr_all_organization_units_tl OU,
6588                ap_system_parameters_all ASP
6589           WHERE ASP.org_id = OI.organization_id
6590           AND   OU.organization_id = OI.organization_id
6591           AND OI.org_information_context = 'Operating Unit Information'
6592           AND DECODE(LTRIM(OI.org_information3,'0123456789'), NULL,
6593                      TO_NUMBER(OI.org_information3), NULL) = p_ledger_id
6594           --bug6392886
6595           /*AND DECODE(LTRIM(OI.org_information2,'0123456789'), NULL,
6596                   TO_NUMBER(OI.org_information2), NULL) = LE.organization_id*/
6597           AND OU.organization_id = OI.organization_id
6598           AND OU.language = USERENV('LANG')
6599           --AND LE.language = USERENV('LANG')
6600         )
6601     AND APH.accounting_event_id is not NULL ;--Bug6320053
6602 
6603   l_curr_calling_sequence VARCHAR2(2000);
6604 
6605   -- Logging:
6606   l_procedure_name CONSTANT VARCHAR2(30) := 'MULTI_ORG_EVENTS_SWEEP';
6607   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
6608 
6609 BEGIN
6610 
6611   l_curr_calling_sequence :=
6612    p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.MULTI_ORG_EVENTS_SWEEP';
6613 
6614   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6615 
6616   l_log_msg :='Begin of procedure '||l_procedure_name;
6617   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6618      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6619                     G_MODULE_NAME || l_procedure_name,
6620                     l_log_msg);
6621   END IF;
6622 
6623   if (p_period_name is null) then
6624      OPEN l_aid_events_mo_cur_no_period;
6625   else
6626      OPEN l_aid_events_mo_cur_period;
6627   end if;
6628 
6629   LOOP
6630 
6631     if (p_period_name is null) then
6632        FETCH l_aid_events_mo_cur_no_period
6633        BULK COLLECT INTO
6634          l_event_ids,
6635          l_invoice_ids,
6636          l_org_ids,
6637          l_legal_entity_ids,
6638          l_ledger_ids
6639        LIMIT 1000;
6640     else
6641        FETCH l_aid_events_mo_cur_period
6642        BULK COLLECT INTO
6643          l_event_ids,
6644          l_invoice_ids,
6645          l_org_ids,
6646          l_legal_entity_ids,
6647          l_ledger_ids
6648        LIMIT 1000;
6649     end if;
6650 
6651     FOR i IN 1 .. l_event_ids.count LOOP
6652       l_log_msg :='Before calling procedure get_event_security_context';
6653       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6654          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6655                         G_MODULE_NAME || l_procedure_name,
6656                         l_log_msg);
6657       END IF;
6658 
6659       l_event_security_context :=
6660         get_event_security_context
6661         ( p_org_id => l_org_ids(i),
6662           p_calling_sequence => l_curr_calling_sequence
6663         );
6664 
6665       l_log_msg :='After calling procedure get_event_security_context';
6666       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6667          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6668                         G_MODULE_NAME || l_procedure_name,
6669                         l_log_msg);
6670       END IF;
6671 
6672       l_log_msg :='Before calling procedure get_invoice_event_source_info';
6673       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6674          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6675                         G_MODULE_NAME || l_procedure_name,
6676                         l_log_msg);
6677       END IF;
6678 
6679       l_event_source_info :=
6680         get_invoice_event_source_info
6681         ( p_legal_entity_id => l_legal_entity_ids(i),
6682           p_ledger_id => l_ledger_ids(i),
6683           p_invoice_id => l_invoice_ids(i),
6684           p_calling_sequence => l_curr_calling_sequence
6685         );
6686 
6687       l_log_msg :='After calling procedure get_invoice_event_source_info';
6688       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6689          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6690                         G_MODULE_NAME || l_procedure_name,
6691                         l_log_msg);
6692       END IF;
6693 
6694       l_log_msg :='Before calling procedure AP_XLA_EVENTS_PKG.UPDATE_EVENT';
6695       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6696          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6697                         G_MODULE_NAME || l_procedure_name,
6698                         l_log_msg);
6699       END IF;
6700 
6701       AP_XLA_EVENTS_PKG.UPDATE_EVENT
6702       ( p_event_source_info => l_event_source_info,
6703         p_event_id => l_event_ids(i),
6704         p_event_type_code => NULL,
6705         p_event_date => p_sweep_to_date,
6706         p_event_status_code => NULL,
6707         p_valuation_method => NULL,
6708         p_security_context => l_event_security_context,
6709         p_calling_sequence => l_curr_calling_sequence
6710       );
6711 
6712      --Bug 6874970
6713       UPDATE xla_ae_headers aeh
6714          SET aeh.accounting_date = p_sweep_to_date,
6715              aeh.period_name = AP_UTILITIES_PKG.get_gl_period_name(
6716                                                     p_sweep_to_date,
6717                                                     l_org_ids(i)),
6718              last_update_date = SYSDATE,
6719              last_updated_by =  FND_GLOBAL.user_id
6720        WHERE aeh.event_id = l_event_ids(i)
6721          AND application_id = 200
6722          AND gl_transfer_status_code <> 'Y';
6723 
6724       UPDATE xla_ae_lines ael
6725          SET ael.accounting_date = p_sweep_to_date,
6726              last_update_date = sysdate,
6727              last_updated_by =  FND_GLOBAL.user_id
6728        WHERE ael.ae_header_id in (
6729             SELECT aeh.ae_header_id
6730               FROM xla_ae_headers aeh
6731              WHERE aeh.event_id = l_event_ids(i)
6732                AND aeh.application_id = 200
6733                AND aeh.gl_transfer_status_code <> 'Y');
6734 
6735      l_log_msg :='After calling procedure AP_XLA_EVENTS_PKG.UPDATE_EVENT';
6736      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6737         FND_LOG.STRING(G_LEVEL_PROCEDURE,
6738                        G_MODULE_NAME || l_procedure_name,
6739                        l_log_msg);
6740      END IF;
6741 
6742     END LOOP;
6743 
6744     if (p_period_name is null) then
6745        EXIT WHEN l_aid_events_mo_cur_no_period%NOTFOUND;
6746     else
6747        EXIT WHEN l_aid_events_mo_cur_period%NOTFOUND;
6748     end if;
6749 
6750   END LOOP;
6751 
6752   if (p_period_name is null) then
6753      CLOSE l_aid_events_mo_cur_no_period;
6754 
6755      OPEN l_aph_events_mo_cur_no_period;
6756   else
6757      CLOSE l_aid_events_mo_cur_period;
6758 
6759      OPEN l_aph_events_mo_cur_period;
6760   end if;
6761 
6762   LOOP
6763 
6764     if (p_period_name is null) then
6765        FETCH l_aph_events_mo_cur_no_period
6766        BULK COLLECT INTO
6767          l_event_ids,
6768          l_check_ids,
6769          l_org_ids,
6770          l_legal_entity_ids,
6771          l_ledger_ids
6772        LIMIT 1000;
6773     else
6774        FETCH l_aph_events_mo_cur_period
6775        BULK COLLECT INTO
6776          l_event_ids,
6777          l_check_ids,
6778          l_org_ids,
6779          l_legal_entity_ids,
6780          l_ledger_ids
6781        LIMIT 1000;
6782     end if;
6783 
6784     FOR i IN 1 .. l_event_ids.count LOOP
6785 
6786 
6787       l_event_security_context :=
6788         get_event_security_context
6789         ( p_org_id => l_org_ids(i),
6790           p_calling_sequence => l_curr_calling_sequence
6791         );
6792 
6793       l_event_source_info :=
6794         get_payment_event_source_info
6795         ( p_legal_entity_id => l_legal_entity_ids(i),
6796           p_ledger_id => l_ledger_ids(i),
6797           p_check_id => l_check_ids(i),
6798           p_calling_sequence => l_curr_calling_sequence
6799         );
6800 
6801       l_log_msg :='Before calling procedure AP_XLA_EVENTS_PKG.UPDATE_EVENT';
6802       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6803          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6804                         G_MODULE_NAME || l_procedure_name,
6805                         l_log_msg);
6806       END IF;
6807 
6808       AP_XLA_EVENTS_PKG.UPDATE_EVENT
6809       ( p_event_source_info => l_event_source_info,
6810         p_event_id => l_event_ids(i),
6811         p_event_type_code => NULL,
6812         p_event_date => p_sweep_to_date,
6813         p_event_status_code => NULL,
6814         p_valuation_method => NULL,
6815         p_security_context => l_event_security_context,
6816         p_calling_sequence => l_curr_calling_sequence
6817       );
6818 
6819      --Bug 6874970
6820       UPDATE xla_ae_headers aeh
6821          SET aeh.accounting_date = p_sweep_to_date,
6822              aeh.period_name = AP_UTILITIES_PKG.get_gl_period_name(
6823                                                     p_sweep_to_date,
6824                                                     l_org_ids(i)),
6825              last_update_date = SYSDATE,
6826              last_updated_by =  FND_GLOBAL.user_id
6827        WHERE aeh.event_id = l_event_ids(i)
6828          AND application_id = 200
6829          AND gl_transfer_status_code <> 'Y';
6830 
6831       UPDATE xla_ae_lines ael
6832          SET ael.accounting_date = p_sweep_to_date,
6833              last_update_date = sysdate,
6834              last_updated_by =  FND_GLOBAL.user_id
6835        WHERE ael.ae_header_id in (
6836             SELECT aeh.ae_header_id
6837               FROM xla_ae_headers aeh
6838              WHERE aeh.event_id = l_event_ids(i)
6839                AND aeh.application_id = 200
6840                AND aeh.gl_transfer_status_code <> 'Y');
6841 
6842 
6843       l_log_msg :='After calling procedure AP_XLA_EVENTS_PKG.UPDATE_EVENT';
6844       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6845          FND_LOG.STRING(G_LEVEL_PROCEDURE,
6846                         G_MODULE_NAME || l_procedure_name,
6847                         l_log_msg);
6848       END IF;
6849     END LOOP;
6850 
6851     if (p_period_name is null) then
6852        EXIT WHEN l_aph_events_mo_cur_no_period%NOTFOUND;
6853     else
6854        EXIT WHEN l_aph_events_mo_cur_period%NOTFOUND;
6855     end if;
6856 
6857   END LOOP;
6858 
6859   if (p_period_name is null) then
6860      CLOSE l_aph_events_mo_cur_no_period;
6861   else
6862      CLOSE l_aph_events_mo_cur_period;
6863   end if;
6864 
6865   l_log_msg :='End of procedure '||l_procedure_name;
6866   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
6867      FND_LOG.STRING(G_LEVEL_PROCEDURE,
6868                     G_MODULE_NAME || l_procedure_name,
6869                     l_log_msg);
6870   END IF;
6871 
6872 EXCEPTION
6873   WHEN OTHERS THEN
6874 
6875     if (p_period_name is null) then
6876        IF (l_aid_events_mo_cur_no_period%ISOPEN) THEN
6877          CLOSE l_aid_events_mo_cur_no_period;
6878        END IF;
6879 
6880        IF (l_aph_events_mo_cur_no_period%ISOPEN) THEN
6881          CLOSE l_aph_events_mo_cur_no_period;
6882        END IF;
6883     else
6884        IF (l_aid_events_mo_cur_period%ISOPEN) THEN
6885          CLOSE l_aid_events_mo_cur_period;
6886        END IF;
6887 
6888        IF (l_aph_events_mo_cur_period%ISOPEN) THEN
6889          CLOSE l_aph_events_mo_cur_period;
6890        END IF;
6891     end if;
6892 
6893     IF (SQLCODE <> -20001) THEN
6894        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
6895        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
6896        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
6897                     l_curr_calling_sequence);
6898        FND_MESSAGE.SET_TOKEN('PARAMETERS',
6899                 'p_ledger_id = '||p_ledger_id
6900             ||', p_period_name = '||p_period_name
6901             ||', p_from_date = '||p_from_date
6902             ||', p_to_date = '||p_to_date
6903             ||', p_sweep_to_date = '||p_sweep_to_date);
6904        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
6905     END IF;
6906     APP_EXCEPTION.RAISE_EXCEPTION();
6907 END multi_org_events_sweep;
6908 
6909 /*============================================================================
6910  |  PROCEDURE  -  SINGLE_ORG_EVENTS_SWEEP(PUBLIC)
6911  |
6912  |  DESCRIPTION
6913  |      This procedure is called by APXTRSWP.rdf (UPDATE_ACCTG_DATES).This
6914  |      procedure is used to sweep accounting events from one accounting period
6915  |      to another.
6916  |
6917  |  PRAMETERS:
6918  |         p_period_name: Old period's name
6919  |         p_from_date: The start date to sweep
6920  |         p_to_date: The end date to sweep
6921  |         p_sweep_to_date: New event date
6922  |         p_calling_sequence: Debug information
6923  |
6924  |  KNOWN ISSUES:
6925  |
6926  |  NOTES:
6927  |
6928  |  MODIFICATION HISTORY
6929  |  Date         Author             Description of Change
6930  |
6931  *===========================================================================*/
6932 PROCEDURE single_org_events_sweep(
6933              p_period_name      IN    VARCHAR2,
6934              p_from_date        IN    DATE,
6935              p_to_date          IN    DATE,
6936              p_sweep_to_date    IN    DATE,
6937              p_calling_sequence IN    VARCHAR2)
6938 IS
6939 
6940   TYPE t_event_ids IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
6941   TYPE t_invoice_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
6942   TYPE t_check_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
6943   TYPE t_org_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
6944   TYPE t_legal_entity_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
6945   TYPE t_ledger_ids IS TABLE OF NUMBER(15) INDEX BY PLS_INTEGER;
6946 
6947   l_event_ids t_event_ids;
6948   l_invoice_ids t_invoice_ids;
6949   l_check_ids t_check_ids;
6950   l_org_ids t_org_ids;
6951   l_legal_entity_ids t_legal_entity_ids;
6952   l_ledger_ids t_ledger_ids;
6953   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
6954   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
6955 
6956   CURSOR l_aid_events_cur IS
6957     SELECT AID.accounting_event_id,
6958            AID.invoice_id,
6959            AID.org_id,
6960            AI.legal_entity_id,
6961            AID.set_of_books_id ledger_id
6962     FROM ap_invoice_distributions AID,
6963          ap_invoices AI
6964     WHERE ( ( p_period_name IS NULL AND
6965           AID.accounting_date BETWEEN p_from_date AND p_to_date)
6966         OR
6967         ( p_period_name IS NOT NULL AND
6968           AP_UTILITIES_PKG.GET_CURRENT_GL_DATE(TRUNC(AID.accounting_date), aid.org_id) --bug5956469
6969               = p_period_name
6970         )
6971       )
6972       AND AID.posted_flag <> 'Y'
6973       AND AID.invoice_id = AI.invoice_id
6974       AND AID.accounting_event_id is not NULL;--Bug6320053
6975 
6976   CURSOR l_aph_events_cur_period IS
6977     SELECT APH.accounting_event_id,
6978            APH.check_id,
6979            APH.org_id,
6980            AC.legal_entity_id,
6981       ( SELECT AIP.set_of_books_id
6982         FROM ap_invoice_payments_all AIP
6983         WHERE AIP.check_id = APH.check_id
6984         AND ROWNUM = 1
6985       ) ledger_id
6986     FROM ap_payment_history_all APH,
6987       ap_checks_all AC
6988     WHERE APH.check_id = AC.check_id
6989     AND   APH.org_id = AC.org_id
6990     AND   AP_UTILITIES_PKG.GET_CURRENT_GL_DATE(TRUNC(APH.accounting_date), aph.org_id) --bug5956469
6991                             = p_period_name
6992     AND   aph.posted_flag IN ('N', 'S') -- Bug 6869699
6993     AND   APH.accounting_event_id is not NULL;--Bug6320053
6994 
6995   CURSOR l_aph_events_cur_no_period IS
6996     SELECT APH.accounting_event_id,
6997            APH.check_id,
6998            APH.org_id,
6999            AC.legal_entity_id,
7000       ( SELECT AIP.set_of_books_id
7001         FROM ap_invoice_payments_all AIP
7002         WHERE AIP.check_id = APH.check_id
7003         AND ROWNUM = 1
7004       ) ledger_id
7005     FROM ap_payment_history_all APH,
7006       ap_checks_all AC
7007     WHERE APH.check_id = AC.check_id
7008     AND   APH.org_id = AC.org_id
7009     AND   APH.accounting_date BETWEEN p_from_date AND p_to_date
7010     AND   aph.posted_flag IN ('N', 'S') -- Bug 6869699
7011     AND   APH.accounting_event_id is not NULL;--Bug6320053
7012 
7013   l_curr_calling_sequence VARCHAR2(2000);
7014 
7015   -- Logging:
7016   l_procedure_name CONSTANT VARCHAR2(30) := 'SINGLE_ORG_EVENTS_SWEEP';
7017   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
7018 
7019 BEGIN
7020 
7021   l_curr_calling_sequence := p_calling_sequence
7022                      || ' -> AP_ACCOUNTING_EVENTS_PKG.SINGLE_ORG_EVENTS_SWEEP';
7023 
7024   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7025 
7026   l_log_msg :='Begin of procedure '||l_procedure_name;
7027   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7028      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7029                     G_MODULE_NAME || l_procedure_name,
7030                     l_log_msg);
7031   END IF;
7032 
7033   OPEN l_aid_events_cur;
7034   LOOP
7035 
7036     FETCH l_aid_events_cur
7037     BULK COLLECT INTO
7038       l_event_ids,
7039       l_invoice_ids,
7040       l_org_ids,
7041       l_legal_entity_ids,
7042       l_ledger_ids
7043     LIMIT 1000;
7044 
7045     FOR i IN 1 .. l_event_ids.count LOOP
7046 
7047       l_event_security_context :=
7048         get_event_security_context
7049         ( p_org_id => l_org_ids(i),
7050           p_calling_sequence => l_curr_calling_sequence
7051         );
7052 
7053       l_event_source_info :=
7054         get_invoice_event_source_info
7055         ( p_legal_entity_id => l_legal_entity_ids(i),
7056           p_ledger_id => l_ledger_ids(i),
7057           p_invoice_id => l_invoice_ids(i),
7058           p_calling_sequence => l_curr_calling_sequence
7059         );
7060 
7061       l_log_msg :='Before calling procedure AP_XLA_EVENTS_PKG.UPDATE_EVENT';
7062       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7063          FND_LOG.STRING(G_LEVEL_PROCEDURE,
7064                         G_MODULE_NAME || l_procedure_name,
7065                         l_log_msg);
7066       END IF;
7067 
7068       AP_XLA_EVENTS_PKG.UPDATE_EVENT
7069       ( p_event_source_info => l_event_source_info,
7070         p_event_id => l_event_ids(i),
7071         p_event_type_code => NULL,
7072         p_event_date => p_sweep_to_date,
7073         p_event_status_code => NULL,
7074         p_valuation_method => NULL,
7075         p_security_context => l_event_security_context,
7076         p_calling_sequence => l_curr_calling_sequence
7077       );
7078 
7079      --Bug 6874970
7080       UPDATE xla_ae_headers aeh
7081          SET aeh.accounting_date = p_sweep_to_date,
7082              aeh.period_name = AP_UTILITIES_PKG.get_gl_period_name(
7083                                                     p_sweep_to_date,
7084                                                     l_org_ids(i)),
7085              last_update_date = SYSDATE,
7086              last_updated_by =  FND_GLOBAL.user_id
7087        WHERE aeh.event_id = l_event_ids(i)
7088          AND application_id = 200
7089          AND gl_transfer_status_code <> 'Y';
7090 
7091       UPDATE xla_ae_lines ael
7092          SET ael.accounting_date = p_sweep_to_date,
7093              last_update_date = sysdate,
7094              last_updated_by =  FND_GLOBAL.user_id
7095        WHERE ael.ae_header_id in (
7096             SELECT aeh.ae_header_id
7097               FROM xla_ae_headers aeh
7098              WHERE aeh.event_id = l_event_ids(i)
7099                AND aeh.application_id = 200
7100                AND aeh.gl_transfer_status_code <> 'Y');
7101 
7102      l_log_msg :='After calling procedure AP_XLA_EVENTS_PKG.UPDATE_EVENT';
7103      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7104         FND_LOG.STRING(G_LEVEL_PROCEDURE,
7105                        G_MODULE_NAME || l_procedure_name,
7106                        l_log_msg);
7107     END IF;
7108 
7109     END LOOP;
7110 
7111     EXIT WHEN l_aid_events_cur%NOTFOUND;
7112   END LOOP;
7113   CLOSE l_aid_events_cur;
7114 
7115   if (p_period_name is null) then
7116      OPEN l_aph_events_cur_no_period;
7117   else
7118      OPEN l_aph_events_cur_period;
7119   end if;
7120 
7121   LOOP
7122 
7123     if (p_period_name is null) then
7124 
7125        FETCH l_aph_events_cur_no_period
7126        BULK COLLECT INTO
7127          l_event_ids,
7128          l_check_ids,
7129          l_org_ids,
7130          l_legal_entity_ids,
7131          l_ledger_ids
7132        LIMIT 1000;
7133 
7134     else
7135 
7136        FETCH l_aph_events_cur_period
7137        BULK COLLECT INTO
7138          l_event_ids,
7139          l_check_ids,
7140          l_org_ids,
7141          l_legal_entity_ids,
7142          l_ledger_ids
7143        LIMIT 1000;
7144 
7145     end if;
7146 
7147     FOR i IN 1 .. l_event_ids.count LOOP
7148 
7149       l_event_security_context :=
7150         get_event_security_context
7151         ( p_org_id => l_org_ids(i),
7152           p_calling_sequence => l_curr_calling_sequence
7153         );
7154 
7155       l_event_source_info :=
7156         get_payment_event_source_info
7157         ( p_legal_entity_id => l_legal_entity_ids(i),
7158           p_ledger_id => l_ledger_ids(i),
7159           p_check_id => l_check_ids(i),
7160           p_calling_sequence => l_curr_calling_sequence
7161         );
7162 
7163       l_log_msg :='After calling procedure AP_XLA_EVENTS_PKG.UPDATE_EVENT';
7164       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7165          FND_LOG.STRING(G_LEVEL_PROCEDURE,
7166                         G_MODULE_NAME || l_procedure_name,
7167                         l_log_msg);
7168       END IF;
7169 
7170       AP_XLA_EVENTS_PKG.UPDATE_EVENT
7171       ( p_event_source_info => l_event_source_info,
7172         p_event_id => l_event_ids(i),
7173         p_event_type_code => NULL,
7174         p_event_date => p_sweep_to_date,
7175         p_event_status_code => NULL,
7176         p_valuation_method => NULL,
7177         p_security_context => l_event_security_context,
7178         p_calling_sequence => l_curr_calling_sequence
7179       );
7180 
7181      --Bug 6874970
7182       UPDATE xla_ae_headers aeh
7183          SET aeh.accounting_date = p_sweep_to_date,
7184              aeh.period_name = AP_UTILITIES_PKG.get_gl_period_name(
7185                                                     p_sweep_to_date,
7186                                                     l_org_ids(i)),
7187              last_update_date = SYSDATE,
7188              last_updated_by =  FND_GLOBAL.user_id
7189        WHERE aeh.event_id = l_event_ids(i)
7190          AND application_id = 200
7191          AND gl_transfer_status_code <> 'Y';
7192 
7193       UPDATE xla_ae_lines ael
7194          SET ael.accounting_date = p_sweep_to_date,
7195              last_update_date = sysdate,
7196              last_updated_by =  FND_GLOBAL.user_id
7197        WHERE ael.ae_header_id in (
7198             SELECT aeh.ae_header_id
7199               FROM xla_ae_headers aeh
7200              WHERE aeh.event_id = l_event_ids(i)
7201                AND aeh.application_id = 200
7202                AND aeh.gl_transfer_status_code <> 'Y');
7203 
7204      l_log_msg :='After calling procedure AP_XLA_EVENTS_PKG.UPDATE_EVENT';
7205      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7206         FND_LOG.STRING(G_LEVEL_PROCEDURE,
7207                        G_MODULE_NAME || l_procedure_name,
7208                        l_log_msg);
7209      END IF;
7210 
7211     END LOOP;
7212 
7213     if (p_period_name is null) then
7214        EXIT WHEN l_aph_events_cur_no_period%NOTFOUND;
7215     else
7216        EXIT WHEN l_aph_events_cur_period%NOTFOUND;
7217     end if;
7218 
7219   END LOOP;
7220 
7221   if (p_period_name is null) then
7222      CLOSE l_aph_events_cur_no_period;
7223   else
7224      CLOSE l_aph_events_cur_period;
7225   end if;
7226 
7227   l_log_msg :='End of procedure '||l_procedure_name;
7228   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7229      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7230                     G_MODULE_NAME || l_procedure_name,
7231                     l_log_msg);
7232   END IF;
7233 
7234 EXCEPTION
7235   WHEN OTHERS THEN
7236     IF (l_aid_events_cur%ISOPEN) THEN
7237       CLOSE l_aid_events_cur;
7238     END IF;
7239 
7240     if (p_period_name is null) then
7241        IF (l_aph_events_cur_no_period%ISOPEN) THEN
7242          CLOSE l_aph_events_cur_no_period;
7243        END IF;
7244     else
7245        IF (l_aph_events_cur_period%ISOPEN) THEN
7246          CLOSE l_aph_events_cur_period;
7247        END IF;
7248     end if;
7249 
7250     IF (SQLCODE <> -20001) THEN
7251        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
7252        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
7253        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
7254                     l_curr_calling_sequence);
7255        FND_MESSAGE.SET_TOKEN('PARAMETERS',
7256                 'p_period_name = '||p_period_name
7257             ||', p_from_date = '||p_from_date
7258             ||', p_to_date = '||p_to_date
7259             ||', p_sweep_to_date = '||p_sweep_to_date);
7260        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
7261     END IF;
7262     APP_EXCEPTION.RAISE_EXCEPTION();
7263 END single_org_events_sweep;
7264 
7265 
7266 /*============================================================================
7267  |  FUNCTION  -  GET_EVENT_CLASS(PRIVATE)
7268  |
7269  |  DESCRIPTION
7270  |    This procedure is used to get the event class of a particula event
7271  |    type.
7272  |
7273  |  PRAMETERS:
7274  |         p_event_type: Event Type
7275  |         p_calling_sequence: Debug information
7276  |
7277  |  RETURN: VARCHAR2
7278  |
7279  |  KNOWN ISSUES:
7280  |
7281  |  NOTES:
7282  |
7283  |  MODIFICATION HISTORY
7284  |  Date         Author             Description of Change
7285  |
7286  *===========================================================================*/
7287 FUNCTION get_event_class(
7288               p_event_type       IN    VARCHAR2,
7289               p_calling_sequence IN    VARCHAR2)
7290 RETURN VARCHAR2
7291 IS
7292 
7293   l_curr_calling_sequence VARCHAR2(2000);
7294 
7295    -- Logging:
7296   l_procedure_name CONSTANT VARCHAR2(30) := 'GET_CLASS_CODE';
7297   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
7298 
7299 BEGIN
7300 
7301   l_curr_calling_sequence :=
7302     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.GET_CLASS_CODE';
7303 
7304   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7305 
7306   l_log_msg :='Begin of procedure '||l_procedure_name;
7307   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7308      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7309                     G_MODULE_NAME || l_procedure_name,
7310                     l_log_msg);
7311   END IF;
7312 
7313   IF ( p_event_type IN ( INVOICE_VALIDATED_TYPE,
7314                          INVOICE_ADJUSTED_TYPE,
7315                          INVOICE_CANCELLED_TYPE)) THEN
7316     RETURN INVOICES_CLASS;
7317   END IF;
7318 
7319   IF ( p_event_type IN ( CREDIT_MEMO_VALIDATED_TYPE,
7320                          CREDIT_MEMO_ADJUSTED_TYPE,
7321                          CREDIT_MEMO_CANCELLED_TYPE)) THEN
7322     RETURN CREDIT_MEMOS_CLASS;
7323   END IF;
7324 
7325   IF ( p_event_type IN ( DEBIT_MEMO_VALIDATED_TYPE,
7326                          DEBIT_MEMO_ADJUSTED_TYPE,
7327                          DEBIT_MEMO_CANCELLED_TYPE)) THEN
7328      RETURN DEBIT_MEMOS_CLASS;
7329   END IF;
7330 
7331   IF ( p_event_type IN ( PREPAYMENT_VALIDATED_TYPE,
7332                          PREPAYMENT_ADJUSTED_TYPE,
7333                          PREPAYMENT_CANCELLED_TYPE)) THEN
7334     RETURN PREPAYMENTS_CLASS;
7335   END IF;
7336 
7337   IF ( p_event_type IN ( PREPAYMENT_APPLIED_TYPE,
7338                          PREPAYMENT_UNAPPLIED_TYPE,
7339                          PREPAY_APP_ADJUSTED_TYPE)) THEN
7340     RETURN PREPAYMENT_APPLICATIONS_CLASS;
7341   END IF;
7342 
7343   IF ( p_event_type IN ( PAYMENT_CREATED_TYPE,
7344                          PAYMENT_CANCELLED_TYPE,
7345                          MANUAL_PAYMENT_ADJUSTED_TYPE,
7346                          PAYMENT_ADJUSTED_TYPE)) THEN
7347     RETURN PAYMENTS_CLASS;
7348   END IF;
7349   --bug 10336668
7350   IF ( p_event_type IN ( REFUND_RECORDED_TYPE,
7351                          REFUND_CANCELLED_TYPE,
7352                          REFUND_ADJUSTED_TYPE,
7353                          MANUAL_REFUND_ADJUSTED_TYPE)) THEN
7354     RETURN REFUNDS_CLASS;
7355   END IF;
7356 
7357   IF
7358   (
7359     p_event_type IN
7360       (
7361         PAYMENT_MATURED_TYPE,
7362         PAYMENT_MATURITY_REVERSED_TYPE,
7363         PAYMENT_MATURITY_ADJUSTED_TYPE
7364       )
7365   )
7366   THEN
7367     RETURN FUTURE_DATED_PAYMENTS_CLASS;
7368   END IF;
7369 
7370   IF
7371   (
7372     p_event_type IN
7373       (
7374         PAYMENT_CLEARED_TYPE,
7375         PAYMENT_UNCLEARED_TYPE,
7376         PAYMENT_CLEARING_ADJUSTED_TYPE
7377       )
7378   )
7379   THEN
7380     RETURN RECONCILED_PAYMENTS_CLASS;
7381   END IF;
7382 
7383 
7384   FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
7385   FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
7386                     l_curr_calling_sequence);
7387   FND_MESSAGE.SET_TOKEN('PARAMETERS',
7388                 'p_event_type = '||p_event_type );
7389   FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
7390 
7391   APP_EXCEPTION.RAISE_EXCEPTION();
7392   RETURN NULL; -- unreachable
7393 
7394 END get_event_class;
7395 
7396 
7397 /*============================================================================
7398  |  FUNCTION  -  GET_EVENT_SECURITY_CONTEXT(PRIVATE)
7399  |
7400  |  DESCRIPTION
7401  |    This function is used to get the event security context.
7402  |
7403  |  PRAMETERS:
7404  |         p_org_id: Organization ID
7405  |         p_calling_sequence: Debug information
7406  |
7407  |  RETURN: XLA_EVENTS_PUB_PKG.T_SECURITY
7408  |
7409  |  KNOWN ISSUES:
7410  |
7411  |  NOTES:
7412  |
7413  |  MODIFICATION HISTORY
7414  |  Date         Author             Description of Change
7415  |
7416  *===========================================================================*/
7417 FUNCTION get_event_security_context(
7418                p_org_id           IN NUMBER,
7419                p_calling_sequence IN VARCHAR2)
7420 RETURN XLA_EVENTS_PUB_PKG.T_SECURITY
7421 IS
7422 
7423   l_event_security_context XLA_EVENTS_PUB_PKG.T_SECURITY;
7424 
7425   -- Logging:
7426   l_procedure_name CONSTANT VARCHAR2(30) := 'GET_EVENT_SECURITY_CONTEXT';
7427   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
7428 
7429 BEGIN
7430 
7431   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7432 
7433   l_log_msg :='Begin of procedure '||l_procedure_name;
7434   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7435      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7436                     G_MODULE_NAME || l_procedure_name,
7437                     l_log_msg);
7438   END IF;
7439 
7440   l_event_security_context.security_id_int_1 := p_org_id;
7441 
7442   l_log_msg :='End of procedure '||l_procedure_name;
7443   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7444      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7445                     G_MODULE_NAME || l_procedure_name,
7446                     l_log_msg);
7447   END IF;
7448 
7449   RETURN l_event_security_context;
7450 
7451 END get_event_security_context;
7452 
7453 /*============================================================================
7454  |  FUNCTION  -  GET_INVOICE_EVENT_SOURCE_INFO(PRIVATE)
7455  |
7456  |  DESCRIPTION
7457  |    This function is used to get invoice event source information
7458  |
7459  |  PRAMETERS:
7460  |         p_legal_entity_id: Legal entity ID
7461  |         p_ledger_id: Ledger ID
7462  |         p_invoice_id: Invoice ID
7463  |         p_calling_sequence: Debug information
7464  |
7465  |  RETURN: XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO
7466  |
7467  |  KNOWN ISSUES:
7468  |
7469  |  NOTES:
7470  |
7471  |  MODIFICATION HISTORY
7472  |  Date         Author             Description of Change
7473  |
7474  *===========================================================================*/
7475 FUNCTION get_invoice_event_source_info(
7476                 p_legal_entity_id  IN   NUMBER,
7477                 p_ledger_id        IN   NUMBER,
7478                 p_invoice_id       IN   NUMBER,
7479                 p_calling_sequence IN   VARCHAR2)
7480 RETURN XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO
7481 IS
7482 
7483   l_invoice_num VARCHAR2(50);
7484   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
7485 
7486   -- Logging:
7487   l_procedure_name CONSTANT VARCHAR2(30) := 'GET_EVENT_SOURCE_INFO';
7488   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
7489 
7490 BEGIN
7491 
7492   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7493 
7494   l_log_msg :='Begin of procedure '||l_procedure_name;
7495   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7496      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7497                     G_MODULE_NAME || l_procedure_name,
7498                     l_log_msg);
7499   END IF;
7500 
7501   select invoice_num
7502   into l_invoice_num
7503   from ap_invoices_all --bug6705052
7504   where invoice_id = p_invoice_id;
7505 
7506   l_event_source_info.application_id := 200;
7507   l_event_source_info.legal_entity_id := p_legal_entity_id;
7508   l_event_source_info.ledger_id := p_ledger_id;
7509   l_event_source_info.entity_type_code := INVOICES_ENTITY;
7510   l_event_source_info.transaction_number := l_invoice_num;
7511   l_event_source_info.source_id_int_1 := p_invoice_id;
7512 
7513   l_log_msg :='End of procedure '||l_procedure_name;
7514   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7515      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7516                     G_MODULE_NAME || l_procedure_name,
7517                     l_log_msg);
7518   END IF;
7519 
7520   RETURN l_event_source_info;
7521 
7522 END get_invoice_event_source_info;
7523 
7524 
7525 /*============================================================================
7526  |  FUNCTION  -  GET_PAYMENT_EVENT_SOURCE_INFO(PRIVATE)
7527  |
7528  |  DESCRIPTION
7529  |    This procedure is used to get payment event source information.
7530  |
7531  |  PRAMETERS:
7532  |         p_legal_entity_id: Legal Entity ID
7533  |         p_ledger_id: Ledger ID
7534  |         p_invoice_id: Invoice ID
7535  |         p_calling_sequence: Debug information
7536  |
7537  |  RETURN: XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO
7538  |
7539  |  KNOWN ISSUES:
7540  |
7541  |  NOTES:
7542  |
7543  |  MODIFICATION HISTORY
7544  |  Date         Author             Description of Change
7545  |
7546  *===========================================================================*/
7547 FUNCTION get_payment_event_source_info(
7548            p_legal_entity_id    IN   NUMBER,
7549            p_ledger_id          IN   NUMBER,
7550            p_check_id           IN   NUMBER,
7551            p_calling_sequence   IN   VARCHAR2)
7552 RETURN XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO
7553 IS
7554 
7555   l_check_number      NUMBER(15);
7556   l_event_source_info XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
7557 
7558   -- Logging:
7559   l_procedure_name CONSTANT VARCHAR2(30) := 'GET_PAYMENT_EVENT_SOURCE_INFO';
7560   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
7561 
7562 BEGIN
7563 
7564   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7565 
7566   l_log_msg :='Begin of procedure '||l_procedure_name;
7567   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7568      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7569                     G_MODULE_NAME || l_procedure_name,
7570                     l_log_msg);
7571   END IF;
7572 
7573   select check_number
7574   into l_check_number
7575   from ap_checks_all  --bug6705052
7576   where check_id = p_check_id;
7577 
7578   l_event_source_info.application_id := 200;
7579   l_event_source_info.legal_entity_id := p_legal_entity_id;
7580   l_event_source_info.ledger_id := p_ledger_id;
7581   l_event_source_info.entity_type_code := PAYMENTS_ENTITY;
7582   l_event_source_info.transaction_number := l_check_number;
7583   l_event_source_info.source_id_int_1 := p_check_id;
7584 
7585   l_log_msg :='End of procedure '||l_procedure_name;
7586   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7587      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7588                     G_MODULE_NAME || l_procedure_name,
7589                     l_log_msg);
7590   END IF;
7591 
7592   RETURN l_event_source_info;
7593 
7594 END get_payment_event_source_info;
7595 
7596 
7597 /*============================================================================
7598  |  PROCEDURE  -  GET_INVOICE_INFO(PRIVATE)
7599  |
7600  |  DESCRIPTION
7601  |    This procedure is used to get invoice information.
7602  |
7603  |  PRAMETERS:
7604  |         p_invoice_id: Invoice ID
7605  |         p_org_id: Organization ID
7606  |         p_legal_entity_id: Legal Entity ID
7607  |         p_ledger_id: Ledger ID
7608  |         p_transaction_date: Invoice date
7609  |         p_calling_sequence: Debug information
7610  |
7611  |  KNOWN ISSUES:
7612  |
7613  |  NOTES:
7614  |
7615  |  MODIFICATION HISTORY
7616  |  Date         Author             Description of Change
7617  |
7618  *===========================================================================*/
7619 PROCEDURE get_invoice_info(
7620          p_invoice_id         IN         NUMBER,
7621          p_org_id             OUT NOCOPY NUMBER,
7622          p_legal_entity_id    OUT NOCOPY NUMBER,
7623          p_ledger_id          OUT NOCOPY NUMBER,
7624          p_transaction_date   OUT NOCOPY DATE,
7625          p_calling_sequence   IN         VARCHAR2)
7626 IS
7627 
7628   l_curr_calling_sequence VARCHAR2(2000);
7629 
7630   -- Logging:
7631   l_procedure_name CONSTANT VARCHAR2(30) := 'GET_EVENT_SOURCE_INFO';
7632   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
7633 
7634 BEGIN
7635 
7636   l_curr_calling_sequence :=
7637     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.GET_INVOICE_INFO';
7638 
7639   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7640 
7641   l_log_msg :='Begin of procedure '||l_procedure_name;
7642   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7643      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7644                     G_MODULE_NAME || l_procedure_name,
7645                     l_log_msg);
7646   END IF;
7647 
7648   SELECT
7649     AI.org_id,
7650     AI.legal_entity_id,
7651     AI.set_of_books_id,
7652     AI.invoice_date
7653   INTO
7654     p_org_id,
7655     p_legal_entity_id,
7656     p_ledger_id,
7657     p_transaction_date
7658   FROM
7659     ap_invoices_all AI --bug6705052
7660   WHERE
7661     AI.invoice_id = p_invoice_id;
7662 
7663  l_log_msg :='End of procedure '||l_procedure_name;
7664  IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7665      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7666                     G_MODULE_NAME || l_procedure_name,
7667                     l_log_msg);
7668  END IF;
7669 
7670 EXCEPTION
7671   WHEN OTHERS THEN
7672     IF (SQLCODE <> -20001) THEN
7673        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
7674        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
7675                     l_curr_calling_sequence);
7676        FND_MESSAGE.SET_TOKEN('PARAMETERS',
7677                 'p_org_id = '||p_org_id);
7678        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
7679     END IF;
7680     APP_EXCEPTION.RAISE_EXCEPTION();
7681 END get_invoice_info;
7682 
7683 
7684 /*===========================================================================
7685  |  PROCEDURE  -  GET_PAYMENT_INFO(PRIVATE)
7686  |
7687  |  DESCRIPTION
7688  |    This procedure is used to get payment information.
7689  |
7690  |  PRAMETERS:
7691  |         p_check_id: Check ID
7692  |         p_org_id: Organization ID
7693  |         p_legal_entity_id: Legal entity ID
7694  |         p_ledger_id: Ledger ID
7695  |         p_calling_sequence: Debug information
7696  |
7697  |  KNOWN ISSUES:
7698  |
7699  |  NOTES:
7700  |
7701  |  MODIFICATION HISTORY
7702  |  Date         Author             Description of Change
7703  |
7704  *==========================================================================*/
7705 PROCEDURE get_payment_info(
7706             p_check_id         IN NUMBER,
7710             p_calling_sequence IN VARCHAR2)
7707             p_org_id           OUT NOCOPY NUMBER,
7708             p_legal_entity_id  OUT NOCOPY NUMBER,
7709             p_ledger_id        OUT NOCOPY NUMBER,
7711 IS
7712 
7713   l_curr_calling_sequence VARCHAR2(2000);
7714 
7715    -- Logging:
7716   l_procedure_name CONSTANT VARCHAR2(30) := 'GET_PAYMENT_INFO';
7717   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
7718 
7719 BEGIN
7720 
7721   l_curr_calling_sequence :=
7722     p_calling_sequence || ' -> AP_ACCOUNTING_EVENTS_PKG.GET_PAYMENT_INFO';
7723 
7724   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7725 
7726   l_log_msg :='Begin of procedure '||l_procedure_name;
7727   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7728      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7729                     G_MODULE_NAME || l_procedure_name,
7730                     l_log_msg);
7731   END IF;
7732 
7733   SELECT AC.org_id,
7734          AC.legal_entity_id,
7735          ASP.set_of_books_id
7736   INTO   p_org_id,
7737          p_legal_entity_id,
7738          p_ledger_id
7739   FROM   ap_checks_all AC, --bug6705052
7740          ap_system_parameters_all ASP --bug6705052
7741   WHERE  AC.check_id = p_check_id
7742   AND    nvl(AC.org_id,-99) = nvl(ASP.org_id,-99);
7743 
7744   l_log_msg :='End of procedure '||l_procedure_name;
7745   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7746      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7747                     G_MODULE_NAME || l_procedure_name,
7748                     l_log_msg);
7749  END IF;
7750 
7751 EXCEPTION
7752   WHEN OTHERS THEN
7753     IF (SQLCODE <> -20001) THEN
7754        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
7755        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
7756                     l_curr_calling_sequence);
7757        FND_MESSAGE.SET_TOKEN('PARAMETERS',
7758                 'p_check_id = '||p_check_id);
7759        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
7760     END IF;
7761     APP_EXCEPTION.RAISE_EXCEPTION();
7762 END get_payment_info;
7763 
7764 
7765 -- Bug 4996808. Created this procedure to update the accounting_event_id on
7766 -- the prepay header and the prepayment appl dists since the header and dists
7767 -- are created during validation before the events are created.
7768 /*===========================================================================
7769  |  PROCEDURE  -  UPDATE_PREPAYMENT_HEADER(PRIVATE)
7770  |
7771  |  DESCRIPTION
7772  |    This procedure is used to update prepayment header information
7773  |
7774  |  PRAMETERS:
7775  |         p_invoice_id: Invoice ID
7776  |         p_invoice_line_number: Invoice Line Number
7777  |         p_accounting_event_id: Accounting Event ID
7778  |         p_calling_sequence: Debug information
7779  |
7780  *==========================================================================*/
7781 PROCEDURE Update_Prepayment_Header(
7782                p_invoice_id            IN         NUMBER,
7783                p_invoice_line_number   IN         NUMBER,
7784                p_accounting_event_id   IN         NUMBER,
7785                p_accounting_date       IN         DATE,
7786                p_transaction_type      IN         VARCHAR2,
7787                p_calling_sequence      IN         VARCHAR2)
7788 IS
7789 
7790   l_curr_calling_sequence         VARCHAR2(2000);
7791   TYPE l_prepay_hist_list IS TABLE OF ap_prepay_history.prepay_history_id%TYPE;
7792   l_prepay_hist_tab               l_prepay_hist_list;
7793   l_related_prepay_app_event_id   AP_PREPAY_HISTORY_ALL.related_prepay_app_event_id%TYPE;
7794 
7795    -- Logging:
7796   l_procedure_name CONSTANT VARCHAR2(30) := 'Update_Prepayment_Header';
7797   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
7798 
7799 BEGIN
7800 
7801   l_curr_calling_sequence := p_calling_sequence ||
7802             ' -> AP_ACCOUNTING_EVENTS_PKG.UPDATE_PREPAYMENT_HEADER';
7803 
7804   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7805 
7806   l_log_msg :='Begin of procedure '||l_procedure_name;
7807   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7808      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7809                     G_MODULE_NAME || l_procedure_name,
7810                     l_log_msg);
7811   END IF;
7812 
7813   -- Bug 9553684, we are updating the Related_Prepay_App_Event_ID
7814   -- on the Prepayment Unapplication Distributions, when updating
7815   -- the Accounting Event ID
7816   --
7817   SELECT min(accounting_Event_id)
7818     INTO l_related_prepay_app_event_id
7819     FROM AP_Invoice_Distributions_All AID
7820    WHERE AID.line_type_lookup_code = 'PREPAY'
7821      AND nvl(AID.amount,0) < 0
7822      AND AID.invoice_id = P_invoice_id
7823      AND AID.invoice_line_number = P_invoice_line_number;
7824 
7825 
7826   UPDATE AP_Prepay_History APH
7827   SET    Accounting_Event_ID = p_accounting_event_id,
7828          APH.Related_Prepay_App_Event_ID =
7829              CASE
7830                WHEN APH.transaction_type = 'PREPAYMENT UNAPPLIED' AND
7831 	            APH.related_prepay_app_event_id IS NULL THEN
7832                  l_related_prepay_app_event_id
7833                ELSE
7834                  APH.Related_Prepay_App_Event_ID
7835              END
7836   WHERE  Invoice_ID = p_invoice_id
7837   AND    Invoice_Line_Number = p_invoice_line_number
7838   AND    Accounting_Date = p_accounting_date
7839   AND    Transaction_Type = p_transaction_type
7840   AND    Accounting_Event_ID IS NULL
7841   RETURNING Prepay_History_ID
7842   BULK COLLECT INTO l_prepay_hist_tab;
7843 
7844 
7845   IF l_prepay_hist_tab.count >0 THEN
7846 
7847      FORALL i IN l_prepay_hist_tab.FIRST..l_prepay_hist_tab.LAST
7848      UPDATE AP_Prepay_App_Dists APAD
7849      SET    Accounting_Event_ID = p_accounting_event_id
7850      WHERE  Prepay_History_ID = l_prepay_hist_tab(i);
7851 
7852   END IF;
7853 
7854   l_log_msg :='End of procedure '||l_procedure_name;
7855 
7856   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7857       FND_LOG.STRING(G_LEVEL_PROCEDURE,
7858                      G_MODULE_NAME || l_procedure_name,
7859                      l_log_msg);
7860   END IF;
7861 
7862 EXCEPTION
7863   WHEN OTHERS THEN
7864 
7865     IF (SQLCODE <> -20001) THEN
7866        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
7867        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
7868                     l_curr_calling_sequence);
7869        FND_MESSAGE.SET_TOKEN('PARAMETERS',
7870                 'p_invoice_id = '||p_invoice_id);
7871        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
7872     END IF;
7873     APP_EXCEPTION.RAISE_EXCEPTION();
7874 
7875 END Update_Prepayment_Header;
7876 
7877 
7878 /*===========================================================================
7879  |  PROCEDURE  -  INSERT_PREPAYMENT_HEADER(PRIVATE)
7880  |
7881  |  DESCRIPTION
7882  |    This procedure is used to insert prepayment header information
7883  |
7884  |  PRAMETERS:
7885  |         p_invoice_id: Invoice ID
7886  |         p_invoice_line_number: Invoice Line Number
7887  |         p_accounting_event_id: Accounting Event ID
7888  |         p_invoice_adjustment_id: Invoice Adjustment ID
7889  |         p_calling_sequence: Debug information
7890  |
7891  |  KNOWN ISSUES:
7892  |
7893  |  NOTES:
7894  |
7895  |  MODIFICATION HISTORY
7896  |  Date         Author             Description of Change
7897  |
7898  *==========================================================================*/
7899 PROCEDURE Insert_Prepayment_Header(
7900                p_invoice_id            IN         NUMBER,
7901                p_invoice_line_number   IN         NUMBER,
7902                p_accounting_event_id   IN         NUMBER,
7903                p_accounting_date       IN         DATE,
7904                p_invoice_adjustment_id IN         NUMBER,
7905                p_calling_sequence      IN         VARCHAR2)
7906 IS
7907 
7908   l_curr_calling_sequence         VARCHAR2(2000);
7909   l_sum_amount                    NUMBER;
7910   l_transaction_type              VARCHAR2(30);
7911   l_prepay_invoice_id             NUMBER;
7912   l_prepay_line_number            NUMBER;
7913   l_org_id                        NUMBER;
7914   l_related_prepay_app_event_id   NUMBER;
7915 
7916    -- Logging:
7917   l_procedure_name CONSTANT VARCHAR2(30) := 'Insert_Prepayment_Header';
7918   l_log_msg        FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
7919 
7920   --bugfix:4936043
7921   CURSOR prepayment_invoices IS
7922     SELECT AIL.amount,
7923            AIL.invoice_id,
7924            AIL.line_number,
7925            AIL.org_id
7926     FROM   ap_invoice_lines AIL,
7927            ap_invoice_distributions AID,
7928            ap_invoice_distributions AID1
7929     WHERE  AID.invoice_id = p_invoice_id
7930     AND    AID.invoice_line_number = p_invoice_line_number
7931     AND    AID.line_type_lookup_code = 'PREPAY'
7932     AND    AID.prepay_distribution_id = AID1.invoice_distribution_id
7933     AND    AIL.invoice_id = AID1.invoice_id
7934     AND    AIL.line_number = AID1.invoice_line_number
7935     GROUP BY ail.invoice_id,ail.line_number,ail.org_id,ail.amount;
7936 
7937 
7938 BEGIN
7939 
7940   l_curr_calling_sequence := p_calling_sequence ||
7941             ' -> AP_ACCOUNTING_EVENTS_PKG.INSERT_PREPAYMENT_HEADER';
7942 
7943   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7944 
7945   l_log_msg :='Begin of procedure '||l_procedure_name;
7946   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
7947      FND_LOG.STRING(G_LEVEL_PROCEDURE,
7948                     G_MODULE_NAME || l_procedure_name,
7949                     l_log_msg);
7950   END IF;
7951 
7952   BEGIN
7953 
7954     SELECT AIL.amount,
7955            AIL.prepay_invoice_id,
7956            AIL.prepay_line_number,
7957            AIL.org_id
7958     INTO   l_sum_amount,
7959            l_prepay_invoice_id,
7960            l_prepay_line_number,
7961            l_org_id
7962     FROM   ap_invoice_lines AIL
7963     WHERE  AIL.invoice_id = P_invoice_id
7964     AND    AIL.line_type_lookup_code = 'PREPAY'
7965     AND    AIL.line_number = P_invoice_line_number;
7966 
7967   --Bugfix:4936043
7968   --Complex Work: Recoupment
7969   --Added the following SQL for recoupment logic, as we do not have a parent 'PREPAY' line for the
7970   --'PREPAY' distributions. For recoupment we create the 'PREPAY' distributions tied to the ITEM line
7971   --itself.
7972   EXCEPTION WHEN NO_DATA_FOUND THEN
7973 
7974      OPEN prepayment_invoices;
7975      LOOP
7976         FETCH prepayment_invoices into l_sum_amount,
7977                                        l_prepay_invoice_id,
7978                                        l_prepay_line_number,
7979                                        l_org_id;
7980 
7981         EXIT WHEN prepayment_invoices%NOTFOUND;
7982 
7983         BEGIN
7984 
7985             SELECT min(accounting_Event_id)
7986             INTO   l_related_prepay_app_event_id
7987             FROM   AP_INVOICE_DISTRIBUTIONS AID
7988             WHERE  AID.line_type_lookup_code = 'PREPAY'
7989             AND    (nvl(posted_flag,'N') = 'Y' OR
7990                     nvl(encumbered_flag, 'N') = 'Y')  --bug9973070
7991             AND    nvl(AID.amount,0) < 0
7992             AND    AID.invoice_id = P_invoice_id
7993             AND    AID.invoice_line_number = P_invoice_line_number;
7994 
7995 
7996         EXCEPTION
7997             WHEN NO_DATA_FOUND THEN
7998                  l_related_prepay_app_event_id:= null;
7999         END;
8000 
8001         IF P_invoice_adjustment_id is NOT NULL THEN
8002             l_transaction_type := PREPAY_APP_ADJUSTED_TYPE;
8003         ELSIF l_sum_Amount <= 0 THEN
8004             l_transaction_type := PREPAYMENT_APPLIED_TYPE;
8005         ELSE
8006             l_transaction_type := PREPAYMENT_UNAPPLIED_TYPE;
8007         END IF;
8008 
8009         INSERT INTO AP_PREPAY_HISTORY_ALL
8010             ( PREPAY_HISTORY_ID
8011              ,PREPAY_INVOICE_ID
8012              ,PREPAY_LINE_NUM
8013              ,ACCOUNTING_EVENT_ID
8014              ,HISTORICAL_FLAG
8015              ,INVOICE_ID
8016              ,INVOICE_LINE_NUMBER
8017              ,ACCOUNTING_DATE
8018              ,INVOICE_ADJUSTMENT_EVENT_ID
8019              ,ORG_ID
8020              ,POSTED_FLAG
8021              ,RELATED_PREPAY_APP_EVENT_ID
8022              ,TRANSACTION_TYPE
8023              ,LAST_UPDATED_BY
8024              ,LAST_UPDATE_DATE
8025              ,LAST_UPDATE_LOGIN
8026              ,CREATED_BY
8027              ,CREATION_DATE
8028              ,PROGRAM_APPLICATION_ID
8029              ,PROGRAM_ID
8030              ,PROGRAM_UPDATE_DATE
8031              ,REQUEST_ID)
8032          VALUES
8033              (AP_PREPAY_HISTORY_S.nextval
8034              ,l_prepay_invoice_id
8035              ,l_prepay_line_number
8036              ,p_Accounting_event_id
8037              ,'N'
8038              ,P_INVOICE_ID
8039              ,p_invoice_line_number
8040              ,p_accounting_date
8041              ,p_invoice_adjustment_id
8042              ,l_org_id
8043              ,'N'
8044              ,l_related_prepay_app_event_id
8045              ,L_TRANSACTION_TYPE
8046              ,FND_GLOBAL.user_id
8047              ,sysdate
8048              ,FND_GLOBAL.login_id
8049              ,FND_GLOBAL.user_id
8050              ,sysdate
8051              ,null
8052              ,null
8053              ,null
8054              ,null);
8055 
8056      END LOOP;
8057 
8058      CLOSE prepayment_invoices;
8059 
8060      l_log_msg :='End of procedure '||l_procedure_name;
8061 
8062      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8063        FND_LOG.STRING(G_LEVEL_PROCEDURE,
8064                       G_MODULE_NAME || l_procedure_name,
8065                      l_log_msg);
8066      END IF;
8067 
8068      RETURN;
8069 
8070   END;
8071 
8072 
8073   BEGIN
8074 
8075     SELECT min(accounting_Event_id)
8076     INTO   l_related_prepay_app_event_id
8077     FROM   AP_INVOICE_DISTRIBUTIONS AID
8078     WHERE  AID.line_type_lookup_code = 'PREPAY'
8079     AND    (nvl(posted_flag,'N') = 'Y' OR
8080             nvl(encumbered_flag, 'N') = 'Y')   --bug9973070
8081     AND    nvl(AID.amount,0) < 0
8082     AND    AID.invoice_id = P_invoice_id
8083     AND    AID.invoice_line_number = P_invoice_line_number;
8084 
8085 
8086   EXCEPTION
8087     WHEN NO_DATA_FOUND THEN
8088       l_related_prepay_app_event_id:= null;
8089 
8090   END;
8091 
8092   IF P_invoice_adjustment_id is NOT NULL THEN
8093     l_transaction_type := PREPAY_APP_ADJUSTED_TYPE;
8094 
8095   ELSIF l_sum_Amount <= 0 THEN
8096     l_transaction_type := PREPAYMENT_APPLIED_TYPE;
8097   ELSE
8098     l_transaction_type := PREPAYMENT_UNAPPLIED_TYPE;
8099   END IF;
8100 
8101     INSERT INTO AP_PREPAY_HISTORY_ALL
8102       ( PREPAY_HISTORY_ID
8103        ,PREPAY_INVOICE_ID
8104        ,PREPAY_LINE_NUM
8105        ,ACCOUNTING_EVENT_ID
8106        ,ACCOUNTING_DATE
8107        ,HISTORICAL_FLAG
8108        ,INVOICE_ID
8109        ,INVOICE_ADJUSTMENT_EVENT_ID
8110        ,ORG_ID
8111        ,POSTED_FLAG
8112        ,RELATED_PREPAY_APP_EVENT_ID
8113        ,TRANSACTION_TYPE
8114        ,LAST_UPDATED_BY
8115        ,LAST_UPDATE_DATE
8116        ,LAST_UPDATE_LOGIN
8117        ,CREATED_BY
8118        ,CREATION_DATE
8119        ,PROGRAM_APPLICATION_ID
8120        ,PROGRAM_ID
8121        ,PROGRAM_UPDATE_DATE
8122        ,REQUEST_ID)
8123      VALUES
8124        (AP_PREPAY_HISTORY_S.nextval
8125         ,l_prepay_invoice_id
8126         ,l_prepay_line_number
8127         ,p_Accounting_event_id
8128         ,p_accounting_date
8129         ,'N'
8130         ,P_INVOICE_ID
8131         ,p_invoice_adjustment_id
8132         ,l_org_id
8133         ,'N'
8134         ,l_related_prepay_app_event_id
8135         ,L_TRANSACTION_TYPE
8136         ,FND_GLOBAL.user_id
8137         ,sysdate
8138         ,FND_GLOBAL.login_id
8139         ,FND_GLOBAL.user_id
8140         ,sysdate
8141         ,null
8142         ,null
8143         ,null
8144         ,null);
8145 
8146  l_log_msg :='End of procedure '||l_procedure_name;
8147 
8148  IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8149      FND_LOG.STRING(G_LEVEL_PROCEDURE,
8150                     G_MODULE_NAME || l_procedure_name,
8151                     l_log_msg);
8152  END IF;
8153 
8154 EXCEPTION
8155   WHEN OTHERS THEN
8156 
8157     IF (SQLCODE <> -20001) THEN
8158        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
8159        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
8160                     l_curr_calling_sequence);
8161        FND_MESSAGE.SET_TOKEN('PARAMETERS',
8162                 'p_invoice_id = '||p_invoice_id);
8163        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
8164     END IF;
8165     APP_EXCEPTION.RAISE_EXCEPTION();
8166 
8167 END Insert_Prepayment_Header;
8168 
8169 -- PROCEDURE added for the bug9322013
8170 --
8171 PROCEDURE Set_Prepay_Event_Noaction
8172        (p_invoice_id            IN        NUMBER,
8173         p_calling_sequence      IN        VARCHAR2) IS
8174 
8175   CURSOR reversed_prepay_events IS
8176   SELECT DISTINCT aid.invoice_id,
8177          aid.accounting_event_id
8178     FROM ap_invoice_distributions_all aid,
8179          ap_invoices_all ai
8180    WHERE ai.invoice_id = p_invoice_id
8181      AND aid.invoice_id = ai.invoice_id
8182      --AND ai.cancelled_date IS NOT NULL      --bug9441420
8183      AND aid.line_type_lookup_code IN ('PREPAY','REC_TAX','NONREC_TAX')
8184      AND aid.prepay_distribution_id IS NOT NULL
8185      AND aid.accounting_event_id IS NOT NULL
8186      AND NVL(aid.posted_flag, 'N') <> 'Y'
8187      AND NVL(aid.reversal_flag, 'N') = 'Y'
8188      AND EXISTS
8189           (SELECT 1
8190              FROM ap_invoice_distributions_all aid1
8191             WHERE aid1.invoice_id = aid.invoice_id
8192               AND aid1.line_type_lookup_code IN ('PREPAY','REC_TAX','NONREC_TAX')
8193               AND aid1.prepay_distribution_id IS NOT NULL
8194               AND aid1.accounting_event_id IS NOT NULL
8195               AND NVL(aid1.posted_flag, 'N') <> 'Y'
8196               AND NVL(aid1.reversal_flag, 'N') = 'Y'
8197               AND aid.invoice_distribution_id <> aid1.invoice_distribution_id  /* Bug 10196007 */
8198               AND NVL(aid1.parent_reversal_id, aid1.invoice_distribution_id) =
8199                     NVL(aid.parent_reversal_id, aid.invoice_distribution_id))
8200      AND ((ai.cancelled_date IS NOT NULL AND
8201            NOT EXISTS
8202             (SELECT 1
8203                FROM ap_invoice_distributions_all aid1
8204               WHERE aid1.invoice_id = ai.invoice_id
8205                 AND aid1.prepay_distribution_id IS NULL
8206              )
8207            ) OR  --bug9441420 added OR clause
8208            (NOT EXISTS
8209             (SELECT 1
8210                FROM ap_invoice_payments_all aip,
8211                     ap_invoice_distributions_all aid_prepay
8212               WHERE aip.invoice_id = aid_prepay.invoice_id
8213                 AND aid_prepay.invoice_distribution_id = aid.prepay_distribution_id
8214                 AND nvl(aip.reversal_flag, 'N') = 'N'
8215             ))
8216           )
8217   /* RCA bug 14120800*/
8218   UNION
8219   SELECT app_aid.invoice_id,
8220          unapp_aid.accounting_Event_id unapp_event_id
8221     FROM ap_invoice_distributions_all app_aid,
8222          xla_events xe_app,
8223          ap_invoices_all ai,
8224          ap_invoice_distributions_all unapp_aid,
8225          xla_events xe_unapp
8226    WHERE ai.invoice_id = p_invoice_id
8227      AND app_aid.prepay_distribution_id IS NOT NULL
8228      AND app_aid.accounting_event_id = xe_app.event_id
8229      AND xe_app.application_id = 200
8230      AND xe_app.event_type_code = 'PREPAYMENT APPLIED'
8231      AND xe_app.event_status_code = 'N'
8232      AND unapp_aid.invoice_id = app_aid.invoice_id
8233      AND unapp_aid.prepay_distribution_id IS NOT NULL
8234      AND unapp_aid.parent_reversal_id IS NOT NULL
8235      AND app_aid.invoice_distribution_id = unapp_aid.parent_reversal_id
8236      AND unapp_aid.accounting_event_id = xe_unapp.event_id
8237      AND xe_unapp.event_type_code = 'PREPAYMENT UNAPPLIED'
8238      AND xe_unapp.application_id = 200
8239      AND xe_unapp.event_status_code = 'U'
8240      AND app_aid.invoice_id = ai.invoice_id;
8241 
8242   l_org_id                      AP_INVOICES_ALL.org_id%TYPE;
8243   l_legal_entity_id             AP_INVOICES_ALL.legal_entity_id%TYPE;
8244   l_ledger_id                   AP_INVOICES_ALL.set_of_books_id%TYPE;
8245   l_transaction_date            DATE;
8246   l_curr_calling_sequence       VARCHAR2(4000);
8247   l_event_source_info           XLA_EVENTS_PUB_PKG.T_EVENT_SOURCE_INFO;
8248   l_invoice_id                  AP_INVOICES_ALL.invoice_id%TYPE;
8249   l_accounting_event_id         XLA_EVENTS.event_id%TYPE;
8250   l_event_security_context      XLA_EVENTS_PUB_PKG.T_SECURITY;
8251   l_log_msg                     FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
8252 
8253   l_procedure_name CONSTANT VARCHAR2(30) := 'Set_Prepay_Event_Noaction';
8254 
8255 BEGIN
8256 
8257   l_curr_calling_sequence :=
8258      'Set_Prepay_Event_Noaction <- '||p_calling_sequence;
8259 
8260   G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
8261 
8262   l_log_msg := 'Begin of procedure '|| l_procedure_name;
8263   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8264       FND_LOG.STRING(G_LEVEL_PROCEDURE,
8265                      G_MODULE_NAME||l_procedure_name||'.begin',
8266                      l_log_msg);
8267   END IF;
8268 
8269   l_log_msg := 'Before calling procedure get_invoice_info';
8270   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8271     FND_LOG.STRING(G_LEVEL_PROCEDURE,
8272                    G_MODULE_NAME || l_procedure_name,
8273                    l_log_msg);
8274   END IF;
8275 
8276   AP_ACCOUNTING_EVENTS_PKG.get_invoice_info
8277               (p_invoice_id => p_invoice_id,
8278                p_org_id            => l_org_id,               -- OUT
8279                p_legal_entity_id   => l_legal_entity_id,      -- OUT
8280                p_ledger_id         => l_ledger_id,            -- OUT
8281                p_transaction_date  => l_transaction_date,     -- OUT
8282                p_calling_sequence  => l_curr_calling_sequence);
8283 
8284   l_log_msg := 'After calling procedure get_insert_info executed';
8285   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8286      FND_LOG.STRING(G_LEVEL_PROCEDURE,
8287                     G_MODULE_NAME || l_procedure_name,
8288                     l_log_msg);
8289   END IF;
8290 
8291   l_log_msg :='Before calling proc get_event_security_context';
8292   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8293     FND_LOG.STRING(G_LEVEL_PROCEDURE,
8294                    G_MODULE_NAME || l_procedure_name,
8295                    l_log_msg);
8296   END IF;
8297 
8298   l_event_security_context :=
8299            AP_ACCOUNTING_EVENTS_PKG.get_event_security_context
8300               (p_org_id           => l_org_id,
8301                p_calling_sequence => l_curr_calling_sequence);
8302 
8303   l_log_msg := 'After calling proc get_event_security_context';
8304   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8305     FND_LOG.STRING(G_LEVEL_PROCEDURE,
8306                    G_MODULE_NAME || l_procedure_name,
8307                    l_log_msg);
8308   END IF;
8309 
8310   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8311     l_log_msg := 'Before calling proc get_invoice_event_source_info';
8312     FND_LOG.STRING(G_LEVEL_PROCEDURE,
8313                    G_MODULE_NAME || l_procedure_name,
8314                    l_log_msg);
8315   END IF;
8316 
8317   l_event_source_info :=
8318        AP_ACCOUNTING_EVENTS_PKG.get_invoice_event_source_info
8319          (p_legal_entity_id     => l_legal_entity_id,
8320           p_ledger_id           => l_ledger_id,
8321           p_invoice_id          => p_invoice_id,
8322           p_calling_sequence    => l_curr_calling_sequence);
8323 
8324   l_log_msg := 'After calling proc get_invoice_envent_source_info';
8325   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8326     FND_LOG.STRING(G_LEVEL_PROCEDURE,
8327                    G_MODULE_NAME || l_procedure_name,
8328                    l_log_msg);
8329   END IF;
8330 
8331   OPEN reversed_prepay_events;
8332     LOOP
8333       FETCH reversed_prepay_events
8334       INTO l_invoice_id, l_accounting_event_id;
8335 
8336       EXIT WHEN reversed_prepay_events%NOTFOUND;
8337 
8338 
8339       l_log_msg := 'Calling the Update event api for accounting event'||
8340                    l_accounting_event_id;
8341       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8342         FND_LOG.STRING(G_LEVEL_PROCEDURE,
8343                        G_MODULE_NAME || l_procedure_name,
8344                        l_log_msg);
8345       END IF;
8346 
8347       AP_XLA_EVENTS_PKG.UPDATE_EVENT
8348         (p_event_source_info => l_event_source_info,
8349          p_event_id          => l_accounting_event_id,
8350          p_event_type_code   => NULL,
8351          p_event_date        => NULL,
8352          p_event_status_code => XLA_EVENTS_PUB_PKG.C_EVENT_NOACTION,
8353          p_valuation_method  => NULL,
8354          p_security_context  => l_event_security_context,
8355          p_calling_sequence  => l_curr_calling_sequence);
8356 
8357       l_log_msg := 'After Calling the Update event api for accounting event'||
8358                    l_accounting_event_id;
8359       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
8360         FND_LOG.STRING(G_LEVEL_PROCEDURE,
8361                        G_MODULE_NAME || l_procedure_name,
8362                        l_log_msg);
8363       END IF;
8364 
8365 
8366     END LOOP;
8367   CLOSE reversed_prepay_events;
8368 
8369 EXCEPTION
8370   WHEN OTHERS THEN
8371 
8372     --bug11655195 start
8373         IF (reversed_prepay_events%ISOPEN) THEN
8374          CLOSE reversed_prepay_events ;
8375         END IF;
8376     --bug11655195 end
8377 
8378     IF (SQLCODE <> -20001) THEN
8379        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
8380        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
8381                     l_curr_calling_sequence);
8382        FND_MESSAGE.SET_TOKEN('PARAMETERS',
8383                 'p_invoice_id = '||p_invoice_id);
8384        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_log_msg);
8385     END IF;
8386     APP_EXCEPTION.RAISE_EXCEPTION();
8387 
8388 END;
8389 
8390 END AP_ACCOUNTING_EVENTS_PKG;