DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_ACCOUNTING_ENGINE_PKG

Source


1 PACKAGE BODY xla_accounting_engine_pkg AS
2 /* $Header: xlajeaex.pkb 120.94.12020000.2 2012/07/23 13:30:23 vgopiset ship $   */
6 |                         All rights reserved.                               |
3 /*===========================================================================+
4 |             Copyright (c) 2001-2002 Oracle Corporation                     |
5 |                       Redwood Shores, CA, USA                              |
7 +============================================================================+
8 | PACKAGE NAME                                                               |
9 |     xla_accounting_engine_pkg                                              |
10 |                                                                            |
11 | DESCRIPTION                                                                |
12 |                                                                            |
13 |                                                                            |
14 | HISTORY                                                                    |
15 |     20-NOV-2002 K.Boussema    Created                                      |
16 |     09-DEC-2002 K.Boussema    Added Call to Validation API                 |
17 |     10-JAN-2003 K.Boussema    Added 'dbdrv' command                        |
18 |     20-FEB-2003 K.Boussema    Made changes for the new bulk approach of the|
19 |                               accounting engine                            |
20 |     19-APR-2003 K.Boussema    Included Error messages                      |
21 |     28-APR-2003 K.Boussema    Added validation of PAD retrieved            |
22 |     06-MAI-2003 K.Boussema    Added the update of event status, bug2936071 |
23 |     07-MAI-2003 K.Boussema    Changed the call to cache API, bug 2945359   |
24 |     16-MAI-2003 K.Boussema    Changed the call of InsertJournalEntries,    |
25 |                               bug 2963366                                  |
26 |     03-JUN-2003 K.Boussema    Capture the uncompiled PADs, bug 2963448     |
27 |     13-JUN-2003 K.Boussema    Changed the error message, bug 2963448       |
28 |     17-JUL-2003 K.Boussema    Modified the update of events, bug 3051978   |
29 |                               Updated the call to accounting cache, 3055039|
30 |     21-JUL-2003 K.Boussema    Reviewed the call to GetSessionValueChar API |
31 |     22-JUL-2003 K.Boussema    Added the update of journal entries          |
32 |     29-JAN-2003 K.Boussema    Reviewed the code to solve bug 3072881       |
33 |     01-AUG-2003 K.Boussema    Modified according to recommendation in bug  |
34 |                               3076645                                      |
35 |     27-AUG-2003 K.Boussema    Reviewed the code according to bug 3084324   |
36 |     03-SEP-2003 K.Boussema    Changed to fix bug 3125028                   |
37 |     23-OCT-2003 K.Boussema    Changed to fix issue raise in bug 3209099    |
38 |     17-NOV-2003 K.Boussema    Changed the call to validation routine       |
39 |                               xla_je_validation_pkg.balance_amounts,3233969|
40 |     21-NOV-2003 K.Boussema    Revised message XLA_AP_PAD_INACTIVE,bg3266350|
41 |     01-DEC-2003 K.Boussema    Added InitExtractErrors, CacheExtractErrors, |
42 |                               BuildExtractErrors to validate the extract   |
43 |     03-FEB-2004 K.Boussema    Added the extract object name and level in   |
44 |                               extract error message.                       |
45 |                               Added CacheExtractObject proc. and changed   |
46 |                               CacheExtractErrors procedure                 |
47 |     04-FEB-2004 K.Boussema    Removed the token LEDGER_NAME from message   |
48 |                               XLA_AP_INV_PAD_SETUP, bug 3320707            |
49 |     12-FEB-2004 K.Boussema    Made changes for the FND_LOG.                |
50 |     22-MAR-2004 K.Boussema    Added a parameter p_module to the TRACE calls|
51 |                               and the procedure.                           |
52 |     11-MAY-2004 K.Boussema    Removed the call to XLA trace routine from   |
53 |                                 trace() procedure                          |
54 |     17-MAY-2004 W.Shen        change SubmitAccountingEngine for accounting |
55 |                                 attribute enhancement project              |
56 |     26-Jul-2004 W. Shen       Add a new parameter to CacheExtractErrors    |
57 |                                 if it is called from transaction reversal  |
58 |                                 The line count is 0 or null is not treated |
59 |                                 as an error.                               |
60 |                                 bug 3786968.                               |
61 |     23-Sep-2004 S.Singhania   Made changes for the bulk peroformance.It has|
62 |                                 changed the code at number of places.      |
63 |     05-Oct-2004 S.Singhania   Bug 3931752: Added code to remove dummy rows |
64 |                                 from XLA_AE_LINES_GT and XLA_AE_HEADERS_GT |
65 |                                 (rows with balance_type_code = 'X') in     |
66 |                                 PostAccountingEngine                       |
67 |     08-Oct-2004 S.Singhania   Bug 3928357: Made changes to make sure the   |
68 |                                 following cases are handled:               |
69 |                                 - Mark events in error when AAD is invalid |
70 |                                 - Mark events in error when AAD is missing |
71 |                                 Following routines are modified:           |
72 |                                 - SubmitAccountingEngine                   |
73 |                                 - CatchErr_UncompliedAAD                   |
74 |                                 - PostAccountingEngine                     |
75 |                                 Following new routine is added:            |
76 |                                 - CatchErr_MissingAAD                      |
77 |     21-Oct-2004 S.Singhania   Bug 3962951. Modified PostAccounting. Update |
81 |                                 to update the event status to ERROR for the|
78 |                                 statement to update event status in        |
79 |                                 xla_events_gt is  modified.                |
80 |                               Added one update statement on xla_events_gt  |
82 |                                 case where validation in AccoutningRevesal |
83 |                                 fails.                                     |
84 |     02-Nov-2004 K.Boussema    Changed for Diagnostic Framework. Included   |
85 |                                the set of gobal variable g_diagnostics_mode|
86 |     16-Dec-2004 S.Singhania   Bug 4056420. Performance changes made in:    |
87 |                                 - PostAccounting                           |
88 |                               Fixed GSCC warning File.Sql.35 in TRACE.     |
89 |     9-Mar-2005  W. SHen       Ledger Currency Project                      |
90 |                                 add call to                                |
91 |                                 XLA_AE_LINES_PKG.CalculateUnroundedAmounts |
92 |                                 XLA_AE_LINES_PKG.CalculateGainLossAmounts  |
93 |                                 XLA_AE_LINES_PKG.adjust_display_line_num   |
94 |     14-Mar-2005 K.Boussema Changed for ADR-enhancements.                   |
95 |     25-May-2005  W. SHen       remove call                                 |
96 |                                    XLA_AE_LINES_PKG.adjust_display_line_num|
97 |     17-Jun-2005  W. SHen       add call UpdateRelatedErrorsStatus back     |
98 |                                    bug 4155511                             |
99 |     24-Jun-2005  W. Chan      Fix bug4092230 - Add ValidateCompleteAADDefn |
100 |     11-Jul-2005  A. Wan    Changed for MPA.  4262811                       |
101 |     12-Jul-2005  W. Chan   Fix bug 4480650 - fix  ValidateCompleteAADDefn  |
102 |     01-Aug-2005 W. Chan     4458381 - Public Sector Enhancement            |
103 |     27-Dec-2005 A.Wan       4669308 - DeleteIncompleteMPA                  |
104 |     20-Jan-2006 W.Chan      4946123 - BC changes for prior entry           |
105 |     24-Jan-2006 A.Wan       4884853 - modify PostAccountingEngine when     |
106 |                                       rollover MPA/Accrual Reversal date.  |
107 |     27-Apr-2006 A.Wan       5095554 - performance fix for non-mergable view|
108 |                                       xla_subledger_options_v              |
109 |     02-May-2006 A.Wan       5054831  Moved check CatchErr_UncompliedAAD to |
110 |                                      xla_accounting_pkg.ValidateAAD        |
111 |     28-Jul-2006 A.Wan       5357406 - add p_ledger_id in PostAcctingEngine |
112 |                                       when calling bflow prior entry API.  |
113 |     18-DEC-2009 VGOPISET    9086275  ORDER BY EVENT_STATUS_CODE to be used |
114 |                                   to update EVENTS_GT process_status_code  |
115 |     13-JAN-2010 VGOPISET    9245677  Avoid Calling Non-BC AAD while the    |
116 |                                   accounting is for BC Accounting.         |
117 +===========================================================================*/
118 --
119 /*======================================================================+
120 |                                                                       |
121 | CONSTANTS                                                             |
122 |                                                                       |
123 |                                                                       |
124 +======================================================================*/
125 --
126 C_FINAL          CONSTANT     VARCHAR2(1) := 'F';
127 C_UNPROCESSED    CONSTANT     VARCHAR2(1) := 'U';
128 C_ERROR          CONSTANT     VARCHAR2(1) := 'E';
129 C_PROCESSED      CONSTANT     VARCHAR2(1) := 'P';
130 C_DRAFT          CONSTANT     VARCHAR2(1) := 'D';
131 C_INVALID        CONSTANT     VARCHAR2(1) := 'I';
132 C_RELATED        CONSTANT     VARCHAR2(1) := 'R';
133 C_EVT_RELATED    CONSTANT     VARCHAR2(1) := 'R';
134 C_AE_EVT_RELATED CONSTANT     VARCHAR2(30):= 'RELATED_EVENT_ERROR';
135 
136 --
137 --
138 C_UNPROCESSED_ENTRIES   CONSTANT  NUMBER:= -1;
139 C_NO_ENTRIES            CONSTANT  NUMBER:=  2;
140 C_INVALID_ENTRIES       CONSTANT  NUMBER:=  1;
141 C_VALID_ENTRIES         CONSTANT  NUMBER:=  0;
142 --
143 --
144 C_EXTRACT_INVALID       CONSTANT VARCHAR2(1) := 'N';
145 C_EXTRACT_VALID         CONSTANT VARCHAR2(1) := 'Y';
146 --
147 --
148 C_DRAFT_STATUS          CONSTANT VARCHAR2(1)   := 'D';
149 C_FINAL_STATUS          CONSTANT VARCHAR2(1)   := 'F';
150 --
151 --
152 /*======================================================================+
153 |                                                                       |
154 | STRUCTURES                                                            |
155 |                                                                       |
156 |                                                                       |
157 +======================================================================*/
158 --
159 --
160 TYPE t_rec_array_event IS RECORD
161    (array_legal_entity_id                xla_ae_journal_entry_pkg.t_array_Num
162    ,array_entity_id                      xla_ae_journal_entry_pkg.t_array_Num
163    ,array_entity_code                    xla_ae_journal_entry_pkg.t_array_V30L
164    ,array_transaction_num                xla_ae_journal_entry_pkg.t_array_V240L
165    ,array_event_id                       xla_ae_journal_entry_pkg.t_array_Num
166    ,array_class_code                     xla_ae_journal_entry_pkg.t_array_V30L
167    ,array_event_type                     xla_ae_journal_entry_pkg.t_array_V30L
168    ,array_event_number                   xla_ae_journal_entry_pkg.t_array_Num
169    ,array_event_date                     xla_ae_journal_entry_pkg.t_array_Date
173    ,array_reference_num_4                xla_ae_journal_entry_pkg.t_array_Num
170    ,array_reference_num_1                xla_ae_journal_entry_pkg.t_array_Num
171    ,array_reference_num_2                xla_ae_journal_entry_pkg.t_array_Num
172    ,array_reference_num_3                xla_ae_journal_entry_pkg.t_array_Num
174    ,array_reference_char_1               xla_ae_journal_entry_pkg.t_array_V240L
175    ,array_reference_char_2               xla_ae_journal_entry_pkg.t_array_V240L
176    ,array_reference_char_3               xla_ae_journal_entry_pkg.t_array_V240L
177    ,array_reference_char_4               xla_ae_journal_entry_pkg.t_array_V240L
178    ,array_reference_date_1               xla_ae_journal_entry_pkg.t_array_Date
179    ,array_reference_date_2               xla_ae_journal_entry_pkg.t_array_Date
180    ,array_reference_date_3               xla_ae_journal_entry_pkg.t_array_Date
181    ,array_reference_date_4               xla_ae_journal_entry_pkg.t_array_Date
182    ,array_event_created_by               xla_ae_journal_entry_pkg.t_array_V100L
183    );
184 --
185 --
186 --
187 TYPE t_rec_error IS RECORD
188 (
189 entity_id                           NUMBER,
190 event_id                            NUMBER,
191 ledger_id                           NUMBER,
192 object_name                   VARCHAR2(30),
193 object_level                  VARCHAR2(30),
194 event_class                  VARCHAR2(240)
195 )
196 ;
197 
198 TYPE t_array_error    IS TABLE OF  t_rec_error INDEX BY BINARY_INTEGER;
199 
200 /*======================================================================+
201 |                                                                       |
202 | Global variables                                                      |
203 |                                                                       |
204 |                                                                       |
205 +======================================================================*/
206 --
207 g_array_error_flag               xla_ae_journal_entry_pkg.t_array_V1L;
208 g_array_error_cache              t_array_error;
209 g_event_err_Index                BINARY_INTEGER;
210 g_hdr_rowcount                   NUMBER ;
211 g_line_rowcount                  NUMBER ;
212 --
213 --
214 --=============================================================================
215 --               *********** Local Trace Routine **********
216 --=============================================================================
217 
218 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
219 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
220 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
221 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
222 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
223 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
224 
225 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
226 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_accounting_engine_pkg';
227 
228 g_log_level           NUMBER;
229 g_log_enabled         BOOLEAN;
230 
231 PROCEDURE trace
232        (p_msg                        IN VARCHAR2
233        ,p_level                      IN NUMBER
234        ,p_module                     IN VARCHAR2) IS
235 BEGIN
236 
237    ----------------------------------------------------------------------------
238    -- Following is for FND log.
239    ----------------------------------------------------------------------------
240    IF (p_msg IS NULL AND p_level >= g_log_level) THEN
241       fnd_log.message(p_level, NVL(p_module,C_DEFAULT_MODULE));
242    ELSIF p_level >= g_log_level THEN
243       fnd_log.string(p_level, NVL(p_module,C_DEFAULT_MODULE), p_msg);
244    END IF;
245 
246 EXCEPTION
247    WHEN xla_exceptions_pkg.application_exception THEN
248       RAISE;
249    WHEN OTHERS THEN
250       xla_exceptions_pkg.raise_message
251          (p_location   => 'xla_accounting_engine_pkg.trace');
252 END trace;
253 --
254 --====================================================================
255 --
256 --
257 --
258 --
259 -- Forward declaration of local routines
260 --
261 --
262 --
263 --
264 --=====================================================================
265 --
266 PROCEDURE UpdateRelatedErrorsStatus
267 ;
268 --
269 FUNCTION PostAccountingEngine(p_application_id                 IN NUMBER
270                              ,p_accounting_batch_id            IN NUMBER
271                              ,p_ledger_id                      IN NUMBER
272                              ,p_end_date                       IN DATE    -- 4262811
273                              ,p_accounting_mode                IN VARCHAR2
274                              ,p_min_event_date                 IN DATE
275                              ,p_max_event_date                 IN DATE
276                              ,p_budgetary_control_mode         IN VARCHAR2)
277 RETURN NUMBER
278 ;
279 --
280 FUNCTION RunPAD (
281                       p_application_id         IN NUMBER
282                     , p_base_ledger_id         IN NUMBER
283                     , p_pad_package            IN VARCHAR2
284                     , p_pad_start_date         IN DATE
285                     , p_pad_end_date           IN DATE
286                     , p_primary_ledger_id      IN NUMBER
287                     , p_budgetary_control_mode IN VARCHAR2)
288 RETURN NUMBER
289 ;
290 --
291 FUNCTION SubmitAccountingEngine (
292                     p_application_id         IN NUMBER
293                   , p_ledger_id              IN NUMBER
297                   , p_min_event_date         IN OUT NOCOPY DATE
294                   , p_accounting_mode        IN VARCHAR2
295                   , p_budgetary_control_mode IN VARCHAR2
296                   , p_accounting_batch_id    IN NUMBER
298                   , p_max_event_date         IN OUT NOCOPY DATE
299                   )
300 RETURN NUMBER
301 ;
302 
303 PROCEDURE CatchErr_UncompliedAAD
304        (p_ledger_id         IN NUMBER
305        ,p_min_date          IN DATE
306        ,p_max_date          IN DATE
307        ,p_aad_name          IN VARCHAR2
308        ,p_aad_owner         IN VARCHAR2
309        ,p_slam_name         IN VARCHAR2);
310 
311 --BUG 13811614: Changed the p_min_event_date, p_max_event_date Parameter data Types from Varchar2 to Date.
312 PROCEDURE CatchErr_MissingAAD
313        (p_ledger_id                 IN NUMBER
314        ,p_min_aad_start_date        IN DATE
315        ,p_max_aad_end_date          IN DATE
316        ,p_min_event_date            IN DATE
317        ,p_max_event_date            IN DATE
318        ,p_slam_name                 IN VARCHAR2);
319 
320 --
321 --====================================================================
322 --
323 --
324 --
325 --
326 --  logic to trap the extract error messages
327 --
328 --
329 --
330 --
331 --=====================================================================
332 --
333 /*======================================================================+
334 |                                                                       |
335 | PUBLIC Procedure                                                      |
336 |                                                                       |
337 |    CacheExtractErrors                                                 |
338 |                                                                       |
339 +======================================================================*/
340 --
341 PROCEDURE CacheExtractErrors(
342                              p_hdr_rowcount      IN NUMBER
343                             ,p_line_rowcount     IN NUMBER
344                             ,p_trx_reversal_flag IN VARCHAR2
345                            )
346 IS
347 --
348 Idx                                BINARY_INTEGER;
349 l_array_error_cache                t_array_error;
350 l_log_module                       VARCHAR2(240);
351 --
352 BEGIN
353 --
354 IF g_log_enabled THEN
355       l_log_module := C_DEFAULT_MODULE||'.CacheExtractErrors';
356 END IF;
357 
358 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
359       trace
360          (p_msg      => 'BEGIN of CacheExtractErrors'
361          ,p_level    => C_LEVEL_PROCEDURE
362          ,p_module   => l_log_module);
363 
364       trace
365          (p_msg      => 'p_hdr_rowcount = '||p_hdr_rowcount
366          ,p_level    => C_LEVEL_PROCEDURE
367          ,p_module   => l_log_module);
368 
369       trace
370          (p_msg      => 'p_line_rowcount = '||p_line_rowcount
371          ,p_level    => C_LEVEL_PROCEDURE
372          ,p_module   => l_log_module);
373 END IF;
374 --
375 --
376 g_hdr_rowcount        := g_hdr_rowcount  + NVL(p_hdr_rowcount,0)  ;
377 g_line_rowcount       := g_line_rowcount + NVL(p_line_rowcount,0) ;
378 --
379 IF g_hdr_rowcount > 0 AND (g_line_rowcount > 0 or
380           (g_line_rowcount = 0 and nvl(p_trx_reversal_flag, 'N') = 'Y'))THEN
381 
382     g_array_error_flag(g_event_err_Index) := C_EXTRACT_VALID;
383     g_array_error_cache                   := l_array_error_cache;
384 
385 ELSE -- g_hdr_rowcount = 0 or g_line_rowcount  = 0
386 
387    CASE  g_array_error_flag(g_event_err_Index)
388 
389        WHEN C_EXTRACT_VALID THEN  null;
390 
391        ELSE       -- null or C_EXTRACT_INVALID
392 
393            g_array_error_flag(g_event_err_Index)     := C_EXTRACT_INVALID;
394 
395   END CASE;
396 --
397 END IF;
398 
399 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
400       trace
401          (p_msg      => 'END of CacheExtractErrors'
402          ,p_level    => C_LEVEL_PROCEDURE
403          ,p_module   => l_log_module);
404 END IF;
405 
406 EXCEPTION
407 WHEN xla_exceptions_pkg.application_exception THEN
408    RAISE;
409 WHEN OTHERS  THEN
410    xla_exceptions_pkg.raise_message
411                 (p_location => 'xla_accounting_engine_pkg.CacheExtractErrors');
412    --
413 END CacheExtractErrors;
414 --
415 --
416 /*======================================================================+
417 |                                                                       |
418 | PUBLIC Procedure                                                      |
419 |                                                                       |
420 |    CacheExtractObject                                                 |
421 |                                                                       |
422 |    Important: this procedure must be called after CacheExtractErrors  |
423 +======================================================================*/
424 --
425 PROCEDURE CacheExtractObject(
426                              p_object_name    IN VARCHAR2
427                            , p_object_level   IN VARCHAR2
428                            , p_event_class    IN VARCHAR2
429                            , p_entity_id      IN NUMBER
430                            , p_event_id       IN NUMBER
431                            , p_ledger_id      IN NUMBER
432                            )
433 IS
434 --
438 --
435 Idx                                BINARY_INTEGER;
436 l_array_error_cache                t_array_error;
437 l_log_module                       VARCHAR2(240);
439 BEGIN
440 --
441 --
442 IF g_log_enabled THEN
443       l_log_module := C_DEFAULT_MODULE||'.CacheExtractObject';
444 END IF;
445 --
446 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
447       trace
448          (p_msg      => 'BEGIN of CacheExtractObject'
449          ,p_level    => C_LEVEL_PROCEDURE
450          ,p_module   => l_log_module);
451 END IF;
452 --
453 --
454 IF g_array_error_flag.EXISTS(g_event_err_Index) AND
455    NVL(g_array_error_flag(g_event_err_Index),C_EXTRACT_VALID)= C_EXTRACT_INVALID
456 THEN
457            --
458            -- cache extract object
459            --
460            Idx := NVL(g_array_error_cache.LAST,0) + 1;
461            --
462            g_array_error_cache(Idx).entity_id      := p_entity_id;
463            g_array_error_cache(Idx).event_id       := p_event_id;
464            g_array_error_cache(Idx).ledger_id      := p_ledger_id;
465            g_array_error_cache(Idx).object_name    := p_object_name;
466            g_array_error_cache(Idx).object_level   := p_object_level;
467            g_array_error_cache(Idx).event_class    := p_event_class;
468 
469 END IF;
470 --
471 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
472       trace
473          (p_msg      => 'END of CacheExtractObject'
474          ,p_level    => C_LEVEL_PROCEDURE
475          ,p_module   => l_log_module);
476 END IF;
477 
478 EXCEPTION
479 WHEN xla_exceptions_pkg.application_exception THEN
480    RAISE;
481 WHEN OTHERS  THEN
482    xla_exceptions_pkg.raise_message
483                 (p_location => 'xla_accounting_engine_pkg.CacheExtractObject');
484 END CacheExtractObject;
485 
486 --
487 /*======================================================================+
488 |                                                                       |
489 | PRIVATE Procedure                                                     |
490 |                                                                       |
491 |                                                                       |
492 +======================================================================*/
493 PROCEDURE UpdateRelatedErrorsStatus
494 IS
495 l_log_module         VARCHAR2(240);
496 
497 -- this cursor find all the entity_id which has both error and no-error event
498 -- so that we can set all the no-error event to related-error status
499 /*
500 CURSOR c_related_events is
501   SELECT xeg.entity_id, xeg.event_id
502     FROM xla_events_gt xeg
503    WHERE xeg.process_status_code = C_EVT_RELATED;
504 
505 CURSOR c_related_headers is
506   SELECT xe.event_id, xah.ae_header_id, xah.ledger_id
507     FROM xla_ae_headers xah
508          ,xla_events_gt xe
509    WHERE xah.event_id           = xe.event_id
510      AND xah.application_id     = xe.application_id
511      AND xe.process_status_code = C_EVT_RELATED;
512 */
513 
514 l_current_entity_id number:= -1;
515 l_current_event_number number:=null;
516 l_current_event_id number;
517 l_current_header_id number;
518 l_current_ledger_id number;
519 BEGIN
520 --
521 IF g_log_enabled THEN
522       l_log_module := C_DEFAULT_MODULE||'.UpdateRelatedErrorsStatus';
523 END IF;
524 --
525 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
526       trace
527          (p_msg      => 'BEGIN of UpdateRelatedErrorsStatus'
528          ,p_level    => C_LEVEL_PROCEDURE
529          ,p_module   => l_log_module);
530 END IF;
531 --
532 --
533 -- Add hint as per bug 5529420
534 --
535   UPDATE xla_events_gt xeg
536      SET xeg.process_status_code = C_EVT_RELATED
537    WHERE xeg.process_status_code in (C_DRAFT, C_PROCESSED)
538      AND EXISTS (SELECT /*+ HASH_SJ */ 1
539                    FROM xla_events_gt xeg2
540                   WHERE xeg2.entity_id = xeg.entity_id
541                     AND xeg2.process_status_code in (C_INVALID,
542                                      C_ERROR));
543 
544 /* we decide not to insert the error message for the event
545   OPEN c_related_events;
546   LOOP
547      fetch c_related_events into l_current_entity_id, l_current_entity_id;
548      EXIT WHEN c_related_events%NOTFOUND;
549 
550      xla_accounting_err_pkg.build_message(
551                        p_appli_s_name             => 'XLA'
552                       ,p_msg_name                => 'XLA_AP_RELATED_INVALID_EVENT'
553                       ,p_entity_id               => l_current_entity_id
554                       ,p_event_id                => l_current_event_id
555                       ,p_ledger_id               => null
556                       ,p_ae_header_id            => null
557                       ,p_ae_line_num             => null
558                       ,p_accounting_batch_id     => null
559                    );
560 
561   END LOOP;
562   close c_related_events;
563 */
564 
565   /* update related entry status */
566   UPDATE xla_ae_headers xah
567      SET xah.accounting_entry_status_code = C_AE_EVT_RELATED
568          -- Bug 5056632. update group_id to NULL if entry is in error
569         ,group_id                         = NULL
570    WHERE xah.event_id in
571              (SELECT xe.event_id
572                 FROM xla_events_gt xe
573                WHERE xe.process_status_code = C_EVT_RELATED );
574 
575 /*
576   OPEN c_related_headers;
577   LOOP
581 
578     FETCH c_related_headers into l_current_event_id,
579                       l_current_header_id, l_current_ledger_id;
580     EXIT WHEN c_related_headers%NOTFOUND;
582     xla_accounting_err_pkg.build_message(
583                    p_appli_s_name             => 'XLA'
584                   ,p_msg_name                => 'XLA_AP_JE_RELATED_INVALID_EVT'
585                   ,p_entity_id               => l_current_entity_id
586                   ,p_event_id                => l_current_event_id
587                   ,p_ledger_id               => l_current_ledger_id
588                   ,p_ae_header_id            => l_current_header_id
589                );
590 
591   END LOOP;
592   close c_related_headers;
593 */
594 
595 --
596 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
597       trace
598          (p_msg      => 'END of UpdateRelatedErrorsStatus'
599          ,p_level    => C_LEVEL_PROCEDURE
600          ,p_module   => l_log_module);
601 END IF;
602 --
603 EXCEPTION
604 WHEN xla_exceptions_pkg.application_exception THEN
605    RAISE;
606 WHEN OTHERS  THEN
607    xla_exceptions_pkg.raise_message
608                 (p_location => 'xla_accounting_engine_pkg.UpdateRelatedErrorsStatus');
609    --
610 END UpdateRelatedErrorsStatus;
611 
612 
613 /*======================================================================+
614 |                                                                       |
615 | PRIVATE Procedure                                                     |
616 |                                                                       |
617 |    DeleteIncompleteMPA  - 4669308                                     |
618 |                                                                       |
619 |  Delete incomplete MPA after all the validation checks taken place,   |
620 |  and the deletion should take place only for FINAL mode.              |
621 |  Since the reversal of the original entry could result in invalid     |
622 |  status after various validation (eg CCID, GL period).  So do not     |
623 |  delete the incomplete entries unless it is FINAL. This way we can    |
624 |  allow user to correct any error before deleting the incomplete MPA.  |
625 |  And also, once the incomplete MPA is deleted, it cannot be recreated.|
626 |                                                                       |
627 +======================================================================*/
628 PROCEDURE DeleteIncompleteMPA(p_application_id       IN NUMBER)
629 IS
630 
631    l_log_module               VARCHAR2(240);
632    l_array_LR_incomplete_mpa  XLA_AE_JOURNAL_ENTRY_PKG.t_array_ae_header_id;
633    l_array_LR_ledger_id       xla_accounting_cache_pkg.t_array_ledger_id;
634    l_array_LR_entity_id       xla_ae_journal_entry_pkg.t_array_Num;
635    l_array_TR_incomplete_mpa  XLA_AE_JOURNAL_ENTRY_PKG.t_array_ae_header_id;
636    l_array_TR_ledger_id       xla_accounting_cache_pkg.t_array_ledger_id;
637    l_array_TR_entity_id       xla_ae_journal_entry_pkg.t_array_Num;
638 
639 
640 BEGIN
641    --
642    IF g_log_enabled THEN
643       l_log_module := C_DEFAULT_MODULE||'.DeleteIncompleteMPA';
644    END IF;
645    --
646    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
647       trace
648          (p_msg      => 'BEGIN of DeleteIncompleteMPA'
649          ,p_level    => C_LEVEL_PROCEDURE
650          ,p_module   => l_log_module);
651       trace
652          (p_msg      => '#Line reversal lines = '||xla_ae_lines_pkg.g_incomplete_mpa_acc_LR.l_array_ae_header_id.COUNT
653          ,p_level    => C_LEVEL_PROCEDURE
654          ,p_module   => l_log_module);
655       trace
656          (p_msg      => '#Tran reversal lines = '||xla_ae_lines_pkg.g_incomplete_mpa_acc_TR.l_array_ae_header_id.COUNT
657          ,p_level    => C_LEVEL_PROCEDURE
658          ,p_module   => l_log_module);
659    END IF;
660    --
661 
662    ------------------------------
663    -- Line Reversal
664    ------------------------------
665    FOR i in 1..xla_ae_lines_pkg.g_incomplete_mpa_acc_LR.l_array_ae_header_id.COUNT LOOP      -- 5108415
666 
667       ------------------------------------------------------------------------------------
668       --  Find incomplete MPA entries whose original/parent has been reversed
669       ------------------------------------------------------------------------------------
670 
671       SELECT distinct xeh3.ae_header_id, xeh3.ledger_id, xeh3.entity_id
672       BULK COLLECT INTO  l_array_LR_incomplete_mpa, l_array_LR_ledger_id, l_array_LR_entity_id
673       FROM   xla_ae_headers         xeh1  -- reversal of original entry
674             ,xla_distribution_links xdl2  -- reversal of original entry
675             ,xla_ae_headers         xeh3  -- incomplete MPA entries
676             ,xla_ae_headers         xeh4  -- original entries
677             --------------------------------------------------------------
678             -- Find the original/parent
679             --------------------------------------------------------------
680       WHERE  xeh4.ae_header_id            = xla_ae_lines_pkg.g_incomplete_mpa_acc_LR.l_array_parent_ae_header(i) -- 5108415
681       AND    xeh4.application_id          = p_application_id
682       AND    xdl2.application_id          = p_application_id
683       AND    xdl2.ref_ae_header_id        = xeh4.ae_header_id           -- original's ae_header_id
684       AND    xdl2.ref_event_id            = xeh4.event_id
685             --------------------------------------------------------------
686             -- Check this is a reversal of original entry
687             --------------------------------------------------------------
688       AND    xeh1.application_id          = p_application_id
692       AND    xdl2.ref_temp_line_num       = -1 * xdl2.temp_line_num
689       AND    xeh1.ae_header_id            = xdl2.ae_header_id
690       AND    xeh1.event_id                = xdl2.event_id
691       AND    xdl2.ref_temp_line_num is not null
693       AND    xeh1.accounting_entry_status_code = 'F'                    --  FINAL and without errors !!!!!
694             --------------------------------------------------------------
695             -- Determine this is a incomplete MPA with same orginal/parent
696             --------------------------------------------------------------
697       AND    xeh3.application_id               = p_application_id
698       AND    xeh3.ae_header_id                 = xla_ae_lines_pkg.g_incomplete_mpa_acc_LR.l_array_ae_header_id(i) -- 5108415
699       AND    xeh3.parent_ae_header_id          = xeh4.ae_header_id
700       AND    xeh3.event_id                     = xeh4.event_id
701       AND    xeh3.accounting_entry_status_code <> 'F'
702       ORDER by xeh3.ledger_id, xeh3.entity_id, xeh3.ae_header_id;
703 
704   /*
705       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
706          trace
707             (p_msg      => '# LR rows incomplete MPA in xla_ae_headers ='||l_array_LR_incomplete_mpa.COUNT
708             ,p_level    => C_LEVEL_STATEMENT
709             ,p_module   => l_log_module);
710           FOR j in 1..l_array_LR_incomplete_mpa.COUNT LOOP
711             trace
712                (p_msg      => 'MPA ledger='||l_array_LR_ledger_id(j)||
713                               ' entity='||l_array_LR_entity_id(j)||
714                               ' ae_header='||l_array_LR_incomplete_mpa(j)
715                ,p_level    => C_LEVEL_STATEMENT
716                ,p_module   => l_log_module);
717           END LOOP;
718       END IF;
719 */
720 
721       ---------------------------------------------------------------
722       --  Delete incomplete MPA entries
723       ---------------------------------------------------------------
724       FORALL k in 1..l_array_LR_incomplete_mpa.COUNT
725          DELETE xla_ae_lines           WHERE application_id = p_application_id AND ae_header_id = l_array_LR_incomplete_mpa(k);
726       FORALL l in 1..l_array_LR_incomplete_mpa.COUNT
727          DELETE xla_ae_headers         WHERE application_id = p_application_id AND ae_header_id = l_array_LR_incomplete_mpa(l);
728       FORALL m in 1..l_array_LR_incomplete_mpa.COUNT
729          DELETE xla_distribution_links WHERE application_id = p_application_id AND ae_header_id = l_array_LR_incomplete_mpa(m);
730 
731    END LOOP;
732 
733 
734    ------------------------------
735    -- Transaction Reversal
736    ------------------------------
737    FOR i in 1..xla_ae_lines_pkg.g_incomplete_mpa_acc_TR.l_array_ae_header_id.COUNT LOOP  -- 5108415
738       ------------------------------------------------------------------------------------
739       --  Find incomplete MPA entries whose original/parent has been reversed
740       ------------------------------------------------------------------------------------
741       SELECT distinct xeh3.ae_header_id, xeh3.ledger_id, xeh3.entity_id
742       BULK COLLECT INTO  l_array_TR_incomplete_mpa, l_array_TR_ledger_id, l_array_TR_entity_id
743       FROM   xla_ae_headers         xeh1  -- reversal of original entry
744             ,xla_distribution_links xdl2  -- reversal of original entry
745             ,xla_ae_headers         xeh3  -- incomplete MPA entries
746             ,xla_ae_headers         xeh4  -- original entries
747             --------------------------------------------------------------
748             -- Find the original/parent
749             --------------------------------------------------------------
750       WHERE  xeh4.ae_header_id            = xla_ae_lines_pkg.g_incomplete_mpa_acc_TR.l_array_parent_ae_header(i) -- 5108415
751       AND    xeh4.application_id          = p_application_id
752       AND    xdl2.application_id          = p_application_id
753       AND    xdl2.ref_ae_header_id        = xeh4.ae_header_id           -- original's ae_header_id
754       AND    xdl2.ref_event_id            = xeh4.event_id
755             --------------------------------------------------------------
756             -- Check this is a reversal of original entry
757             --------------------------------------------------------------
758       AND    xeh1.application_id          = p_application_id
759       AND    xeh1.ae_header_id            = xdl2.ae_header_id
760       AND    xeh1.event_id                = xdl2.event_id
761       AND    xdl2.ref_temp_line_num is not null
762       AND    xdl2.ref_temp_line_num       = -1 * xdl2.temp_line_num
763       AND    xeh1.accounting_entry_status_code = 'F'                    --  FINAL and without errors !!!!!
764             --------------------------------------------------------------
765             -- Determine this is a incomplete MPA with same orginal/parent
766             --------------------------------------------------------------
767       AND    xeh3.application_id               = p_application_id
768       AND    xeh3.ae_header_id                 = xla_ae_lines_pkg.g_incomplete_mpa_acc_TR.l_array_ae_header_id(i) -- 5108415
769       AND    xeh3.parent_ae_header_id          = xeh4.ae_header_id
770       AND    xeh3.event_id                     = xeh4.event_id
771       AND    xeh3.accounting_entry_status_code <> 'F'
772       ORDER by xeh3.ledger_id, xeh3.entity_id, xeh3.ae_header_id;
773 
774  /*
775       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
776          trace
777             (p_msg      => '# TR rows incomplete MPA in xla_ae_headers ='||l_array_TR_incomplete_mpa.COUNT
778             ,p_level    => C_LEVEL_STATEMENT
779             ,p_module   => l_log_module);
780           FOR j in 1..l_array_TR_incomplete_mpa.COUNT LOOP
781             trace
785                ,p_level    => C_LEVEL_STATEMENT
782                (p_msg      => 'MPA ledger='||l_array_TR_ledger_id(j)||
783                               ' entity='||l_array_TR_entity_id(j)||
784                               ' ae_header='||l_array_TR_incomplete_mpa(j)
786                ,p_module   => l_log_module);
787           END LOOP;
788       END IF;
789 */
790 
791       ---------------------------------------------------------------
792       --  Delete incomplete MPA entries
793       ---------------------------------------------------------------
794       FORALL k in 1..l_array_TR_incomplete_mpa.COUNT
795          DELETE xla_ae_lines           WHERE application_id = p_application_id AND ae_header_id = l_array_TR_incomplete_mpa(k);
796       FORALL l in 1..l_array_TR_incomplete_mpa.COUNT
797          DELETE xla_ae_headers         WHERE application_id = p_application_id AND ae_header_id = l_array_TR_incomplete_mpa(l);
798       FORALL m in 1..l_array_TR_incomplete_mpa.COUNT
799          DELETE xla_distribution_links WHERE application_id = p_application_id AND ae_header_id = l_array_TR_incomplete_mpa(m);
800 
801    END LOOP;
802 
803    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
804          trace
805             (p_msg      => 'END of DeleteIncompleteMPA'
806             ,p_level    => C_LEVEL_PROCEDURE
807             ,p_module   => l_log_module);
808    END IF;
809    --
810 
811 EXCEPTION
812 WHEN xla_exceptions_pkg.application_exception THEN
813    RAISE;
814 WHEN OTHERS  THEN
815    xla_exceptions_pkg.raise_message
816                 (p_location => 'xla_accounting_engine_pkg.DeleteIncompleteMPA');
817    --
818 END DeleteIncompleteMPA;
819 
820 --
821 /*======================================================================+
822 |                                                                       |
823 | PRIVATE Procedure                                                     |
824 |                                                                       |
825 |    ValidateCompleteAADDefn                                            |
826 |                                                                       |
827 +======================================================================*/
828 PROCEDURE ValidateCompleteAADDefn
829 (p_application_id       INTEGER
830 ,p_ledger_id            INTEGER
831 ,p_min_event_date       DATE
832 ,p_max_event_date       DATE)
833 IS
834 CURSOR c IS
835 SELECT xet.event_type_code
836   FROM xla_prod_acct_headers xpa,
837        xla_event_types_b xet,
838        (SELECT t1.product_rule_type_code
839              , t1.product_rule_code
840              , sum(1) over (partition by 1) aad_count
841         FROM (SELECT acd.product_rule_type_code
842                    , acd.product_rule_code
843                    , sum(1) over (partition by subl.application_id) aad_count
844              -- FROM xla_subledger_options_v    xso   -- 5095554
845                 FROM gl_ledgers ledg             -- (1)
846                    , gl_ledger_relationships glr -- (2)
847                    , xla_ledger_options lopt     -- (4)
848                    , xla_subledgers subl          -- (5)
849              --    , xla_acctg_methods_b        acm
850                    , xla_acctg_method_rules     acd
851                    , gl_ledgers                 led
852                WHERE subl.application_id = p_application_id
853                  --
854                  AND   ledg.ledger_id             = glr.target_ledger_id
855                  AND    ledg.ledger_id             = lopt.ledger_id
856                  AND    subl.application_id        = lopt.application_id
857                  AND    ledg.object_type_code      = 'L' /* only ledgers (not ledger sets) */
858                  AND    ledg.le_ledger_type_code   = 'L' /* only legal ledgers */
859                  AND    ledg.ledger_category_code in ('PRIMARY', 'SECONDARY')
860                  AND    glr.application_id         = 101
861                  AND    ( (glr.relationship_type_code = 'SUBLEDGER') OR
862                           (glr.target_ledger_category_code = 'PRIMARY'
863                            AND glr.relationship_type_code = 'NONE'))
864                  --
865                  AND DECODE(led.ledger_category_code
866                                ,'PRIMARY',glr.primary_ledger_id
867                                ,ledg.ledger_id)            = p_ledger_id
868                  AND DECODE(led.ledger_category_code
869                                ,'PRIMARY',DECODE(ledg.ledger_category_code
870                                                 ,'PRIMARY','Y'
871                                                 ,'N')
872                                ,'Y')                      = lopt.capture_event_flag
873                  AND lopt.enabled_flag   = 'Y'
874                  AND glr.relationship_enabled_flag    = 'Y'
875                  AND led.ledger_id = p_ledger_id
876                  AND ledg.sla_accounting_method_code  = acd.accounting_method_code
877                  AND ledg.sla_accounting_method_type  = acd.accounting_method_type_code
878               -- AND acm.accounting_method_code      = acd.accounting_method_code
879               -- AND acm.accounting_method_type_code = acd.accounting_method_type_code
880                  AND acd.application_id = p_application_id
881                  AND acd.amb_context_code = NVL(fnd_profile.value('XLA_AMB_CONTEXT'),'DEFAULT')
882                  AND nvl(acd.start_date_active,p_min_event_date) <= p_min_event_date
883                  AND nvl(acd.end_date_active,p_max_event_date) >= p_max_event_date) t1
884         GROUP BY t1.product_rule_type_code, t1.product_rule_code) t
885  WHERE xpa.product_rule_type_code = t.product_rule_type_code
886    AND xpa.product_rule_code      = t.product_rule_code
887    AND xpa.amb_context_code       = NVL(fnd_profile.value('XLA_AMB_CONTEXT'),'DEFAULT')
891    AND xpa.event_class_code       = xet.event_class_code
888    AND xpa.application_id         = p_application_id
889    AND xpa.application_id         = xet.application_id
890    AND xpa.entity_code            = xet.entity_code
892    AND xet.event_type_code        = DECODE(xpa.event_type_code
893                                           ,xpa.event_class_code || '_ALL',xet.event_type_code
894                                           ,xpa.event_type_code)
895    AND xet.enabled_flag = 'Y'
896    AND (xet.event_type_code <> xet.event_class_code || '_ALL'
897         OR EXISTS (SELECT 1
898                    FROM xla_event_types_b xet2
899                    WHERE xet2.application_id = xet.application_id
900                    AND xet2.entity_code = xet.entity_code
901                    AND xet2.event_class_code = xet.event_class_code
902                    AND xet2.enabled_flag = 'Y'
903                    HAVING count(*) = 1)
904        )
905  GROUP BY xet.event_type_code, aad_count
906  HAVING count(*) < aad_count;
907 
908 CURSOR c_je(x_event_type VARCHAR2) IS
909   SELECT entity_id, event_id
910     FROM xla_ae_headers_gt
911    WHERE event_type_code = x_event_type;
912 
913 l_array_event_type                 xla_ae_journal_entry_pkg.t_array_V30L;
914 l_count                            INTEGER;
915 l_log_module                       VARCHAR2(240);
916 --
917 BEGIN
918 --
919 --
920 IF g_log_enabled THEN
921       l_log_module := C_DEFAULT_MODULE||'.ValidateCompleteAADDefn';
922 END IF;
923 --
924 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
925       trace
926          (p_msg      => 'BEGIN of ValidateCompleteAADDefn'
927          ,p_level    => C_LEVEL_PROCEDURE
928          ,p_module   => l_log_module);
929 END IF;
930 
931 OPEN c;
932 FETCH c BULK COLLECT INTO l_array_event_type;
933 CLOSE c;
934 
935 IF (l_array_event_type.COUNT > 0) THEN
936 
937    FORALL i IN 1..l_array_event_type.COUNT
938     UPDATE xla_ae_headers_gt
939        SET accounting_entry_status_code = xla_ae_journal_entry_pkg.C_RELATED_INVALID
940           ,event_status_code            = 'I'
941      WHERE event_type_code = l_array_event_type(i);
942 
943    l_count := SQL%ROWCOUNT;
944 
945    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
946       trace
947          (p_msg      => '# rows updated in  xla_ae_headers_gt ='||l_count
948          ,p_level    => C_LEVEL_STATEMENT
949          ,p_module   => l_log_module);
950    END IF;
951 
952    IF (l_count > 0) THEN
953       FOR i IN 1..l_array_event_type.COUNT LOOP
954          FOR l_je IN c_je(l_array_event_type(i)) LOOP
955             xla_accounting_err_pkg.build_message(
956                        p_appli_s_name            => 'XLA'
957                       ,p_msg_name                => 'XLA_AP_INCOMP_EVENT_TYPE_DEFN'
958                       ,p_entity_id               => l_je.entity_id
959                       ,p_event_id                => l_je.event_id
960                       ,p_ledger_id               => null
961                       ,p_ae_header_id            => null
962                       ,p_ae_line_num             => null
963                       ,p_accounting_batch_id     => null);
964          END LOOP;
965       END LOOP;
966    END IF;
967 
968 END IF;
969 
970 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
971       trace
972          (p_msg      => 'END of ValidateCompleteAADDefn'
973          ,p_level    => C_LEVEL_PROCEDURE
974          ,p_module   => l_log_module);
975 END IF;
976 
977 EXCEPTION
978 WHEN xla_exceptions_pkg.application_exception THEN
979    RAISE;
980 WHEN OTHERS  THEN
981    xla_exceptions_pkg.raise_message
982                 (p_location => 'xla_accounting_engine_pkg.ValidateCompleteAADDefn');
983 END ValidateCompleteAADDefn;
984 
985 --
986 /*======================================================================+
987 |                                                                       |
988 | PRIVATE Procedure                                                     |
989 |                                                                       |
990 |                                                                       |
991 +======================================================================*/
992 FUNCTION PostAccountingEngine(p_application_id                 IN NUMBER
993                              ,p_accounting_batch_id            IN NUMBER
994                              ,p_ledger_id                      IN NUMBER
995                              ,p_end_date                       IN DATE    -- 4262811
996                              ,p_accounting_mode                in VARCHAR2
997                              ,p_min_event_date                 IN DATE
998                              ,p_max_event_date                 IN DATE
999                              ,p_budgetary_control_mode         IN VARCHAR2)
1000 RETURN NUMBER
1001 IS
1002 --
1003 l_array_temp_events  xla_ae_journal_entry_pkg.t_array_Num;
1004 l_array_temp_status  xla_ae_journal_entry_pkg.t_array_V30L;
1005 l_result             NUMBER;
1006 l_log_module         VARCHAR2(240);
1007 --
1008 
1009 BEGIN
1010 --
1011 IF g_log_enabled THEN
1012   l_log_module := C_DEFAULT_MODULE||'.PostAccountingEngine';
1013 END IF;
1014 --
1015 
1016 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1017   trace(p_msg      => 'BEGIN of PostAccountingEngine'
1018        ,p_level    => C_LEVEL_PROCEDURE
1019        ,p_module   => l_log_module);
1020   trace(p_msg      => 'p_application_id = '||TO_CHAR(p_application_id) ||
1021                       ' - p_accounting_batch_id = '||TO_CHAR(p_accounting_batch_id) ||
1025 END IF;
1022                       ' - p_ledger_id = '||TO_CHAR(p_ledger_id)
1023        ,p_level    => C_LEVEL_PROCEDURE
1024        ,p_module   => l_log_module);
1026 
1027 /* 4219869 moved to after bflow procedures
1028 --
1029 -- perform the creation of the ccid
1030 --
1031 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1032       trace
1033          (p_msg      => '--> CALL XLA_AE_CODE_COMBINATION_PKG.BuildCcids'
1034          ,p_level    => C_LEVEL_STATEMENT
1035          ,p_module   => l_log_module);
1036 END IF;
1037 
1038 l_result := XLA_AE_CODE_COMBINATION_PKG.BuildCcids;
1039 */
1040 
1041 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1042       trace
1043          (p_msg      => '--> CALL XLA_AE_LINES_PKG.CalculateUnroundedAmounts'
1044          ,p_level    => C_LEVEL_STATEMENT
1045          ,p_module   => l_log_module);
1046 END IF;
1047 
1048 -- set the unrounded accounted amount
1049 XLA_AE_LINES_PKG.CalculateUnroundedAmounts;
1050 
1051 ---------------------------------------
1052 -- 4219869 - Process Business Flow Entries
1053 ---------------------------------------
1054 XLA_AE_LINES_PKG.BusinessFlowPriorEntries(p_accounting_mode,p_ledger_id,p_budgetary_control_mode); -- 5357406
1055 -- Moved call to BusinessflowSameEntry after Map_ccid,bug 6675871
1056 --XLA_AE_LINES_PKG.BusinessFlowSameEntries;
1057 
1058 
1059 
1060 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1061       trace
1062          (p_msg      => '--> CALL LA_AE_LINES_PKG.CalculateGainLossAmounts'
1063          ,p_level    => C_LEVEL_STATEMENT
1064          ,p_module   => l_log_module);
1065 
1066 END IF;
1067 -- calculate the gain/loss amount
1068 XLA_AE_LINES_PKG.CalculateGainLossAmounts;
1069 
1070 
1071 ---------------------------------------------------------------------------
1072 -- 4219869 moved to after bflow procedures
1073 -- perform the creation of the ccid
1074 ----------------------------------------------------------------------------
1075 --
1076 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1077       trace
1078          (p_msg      => '--> CALL XLA_AE_CODE_COMBINATION_PKG.BuildCcids'
1079          ,p_level    => C_LEVEL_STATEMENT
1080          ,p_module   => l_log_module);
1081 END IF;
1082 
1083 l_result := XLA_AE_CODE_COMBINATION_PKG.BuildCcids;
1084 ----------------------------------------------------------------------------
1085 --
1086 -- bulk performance
1087 --
1088 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1089       trace
1090          (p_msg      => '--> CALL XLA_AE_LINES_PKG.AccountingReversal'
1091          ,p_level    => C_LEVEL_STATEMENT
1092          ,p_module   => l_log_module);
1093 END IF;
1094 
1095 XLA_AE_LINES_PKG.AccountingReversal(CASE WHEN p_budgetary_control_mode = 'NONE'
1096                                          THEN p_accounting_mode
1097                                          ELSE p_budgetary_control_mode END);
1098 
1099 --
1100 -- The following will mark the events with ERROR when the validation in AccountingReversal
1101 -- routine fails. i.e the DUMMY_LR lines are converted to DUMMY_LR_ERROR.
1102 --
1103 -- Bug 4056420. To improve performance the single update is replaced by a select and then
1104 -- the update
1105 --
1106 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1107       trace
1108          (p_msg      => 'SQL- update xla_events_gt'
1109          ,p_level    => C_LEVEL_STATEMENT
1110          ,p_module   => l_log_module);
1111 END IF;
1112 
1113 SELECT DISTINCT event_id BULK COLLECT
1114 INTO l_array_temp_events
1115 FROM xla_ae_lines_gt
1116 WHERE reversal_code = 'DUMMY_LR_ERROR';
1117 
1118 FORALL i IN 1..l_array_temp_events.COUNT
1119 UPDATE xla_events_gt
1120 SET process_status_code = 'E'
1121 WHERE event_id = l_array_temp_events(i);
1122 
1123 
1124 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1125       trace
1126          (p_msg      => '# rows updated in xla_events_gt ='||SQL%ROWCOUNT
1127          ,p_level    => C_LEVEL_STATEMENT
1128          ,p_module   => l_log_module);
1129 END IF;
1130 --
1131 -- Delete the dummy lines from xla_ae_lines_gt table
1132 --
1133 DELETE FROM xla_ae_lines_gt
1134   WHERE balance_type_code = 'X'
1135      OR (unrounded_accounted_cr is null AND unrounded_accounted_dr is null AND gain_or_loss_flag = 'Y' AND calculate_g_l_amts_flag= 'Y');
1136 
1137 DELETE FROM xla_ae_headers_gt
1138   WHERE balance_type_code = 'X';
1139 
1140 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1141       trace
1142          (p_msg      => 'SQL- update xla_ae_headers_gt (1)'
1143          ,p_level    => C_LEVEL_STATEMENT
1144          ,p_module   => l_log_module);
1145 END IF;
1146 
1147 
1148 UPDATE xla_ae_headers_gt     aeh
1149    SET ae_header_id = xla_ae_headers_s.nextval
1150       ,(period_name
1151       , period_year
1152       , period_closing_status
1153       , period_start_date
1154       , period_end_date) =       -- 4262811
1155        (SELECT period_name
1156              , period_year
1157              , closing_status
1158              , start_date
1159              , end_date                        -- 4262811
1160           FROM gl_period_statuses     gps
1161          WHERE gps.application_id          = 101
1162            AND gps.ledger_id               = aeh.ledger_id
1163            AND gps.adjustment_period_flag  = 'N'
1164            AND aeh.ACCOUNTING_DATE BETWEEN gps.start_date AND gps.end_date)
1165 RETURNING event_id, ledger_id, balance_type_code, header_num, ae_header_id BULK COLLECT  -- 4262811
1166 INTO xla_ae_journal_entry_pkg.g_array_event_id
1167      ,xla_ae_journal_entry_pkg.g_array_ledger_id
1168      ,xla_ae_journal_entry_pkg.g_array_balance_type
1172 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1169      ,xla_ae_journal_entry_pkg.g_array_header_num          -- 4262811
1170      ,xla_ae_journal_entry_pkg.g_array_ae_header_id;
1171 
1173       trace
1174          (p_msg      => '# rows updated in xla_ae_headers_gt(1) ='||SQL%ROWCOUNT
1175          ,p_level    => C_LEVEL_STATEMENT
1176          ,p_module   => l_log_module);
1177 END IF;
1178 
1179 
1180 -- 4262811 ----------------------------------------------------------------------
1181 -- For the following situition, the first day in the next open GL period is used:
1182 -- 1. the accrual reversal gl date mode is First Day Next GL Period
1183 -- 2. the accrual reversal gl date mode is Next Day but currenly the next day is
1184 --    in a closed or permentently closed period
1185 -- 3. the accrual reversal gl date mode is Next Day but currenly the next day is
1186 --    in a future open period and the gl date is before the End GL date parameter
1187 --
1188 UPDATE xla_ae_headers_gt xah
1189    SET first_day_next_gl_period =
1190        (SELECT min(gps.start_date)
1191           FROM gl_period_statuses gps
1192          WHERE gps.application_id         = 101
1193            AND gps.ledger_id              = xah.ledger_id
1194            AND gps.adjustment_period_flag = 'N'
1195            AND gps.closing_status         = 'O'
1196            AND gps.start_date             > xah.accounting_date)
1197  WHERE  xah.acc_rev_gl_date_option = 'XLA_FIRST_DAY_NEXT_GL_PERIOD'
1198     OR  xah.acc_rev_gl_date_option = 'XLA_LAST_DAY_NEXT_GL_PERIOD'
1199 --  4262811a  Rollover MPA Gl Date
1200     OR (xah.acc_rev_gl_date_option in ('XLA_NEXT_DAY','FIRST_DAY_GL_PERIOD','LAST_DAY_GL_PERIOD','ORIGINATING_DAY') AND
1201         xah.period_closing_status IN ('P', 'C'))
1202     OR (xah.acc_rev_gl_date_option in ('XLA_NEXT_DAY','FIRST_DAY_GL_PERIOD','LAST_DAY_GL_PERIOD','ORIGINATING_DAY') AND
1203         xah.period_closing_status = 'N' and xah.accounting_date <= p_end_date);
1204 --  OR (xah.acc_rev_gl_date_option = 'XLA_NEXT_DAY' AND xah.period_closing_status IN ('P', 'C'))
1205 --  OR (xah.acc_rev_gl_date_option = 'XLA_NEXT_DAY' AND xah.period_closing_status = 'N' and xah.accounting_date <= p_end_date);
1206 
1207 
1208 --
1209 -- If the first day next GL period is determined for any journal entry, it
1210 -- indicates that some journal entry need to move the GL date to the next
1211 -- open GL period.  Update the GL Date to the first day next GL period.
1212 --
1213 IF (SQL%ROWCOUNT > 0) THEN
1214 
1215   UPDATE xla_ae_headers_gt  xah
1216      SET (accounting_date
1217          ,period_name
1218          ,period_year
1219          ,period_closing_status
1220          ,period_start_date
1221          ,period_end_date) =
1222        --(SELECT DECODE(xah.acc_rev_gl_date_option, 'XLA_LAST_DAY_NEXT_GL_PERIOD'
1223        --              ,NVL(gps.end_date, xah.accounting_date)
1224        --              ,NVL(gps.start_date, xah.accounting_date))
1225          (SELECT NVL(gps.start_date, xah.accounting_date)        -- 4884853 rollover to the first day of next open period
1226                , NVL(gps.period_name, xah.period_name)
1227                , NVL(gps.period_year, xah.period_year)
1228                , NVL(gps.closing_status, xah.period_closing_status)
1229                , NVL(gps.start_date, xah.period_start_date)
1230                , NVL(gps.end_date, xah.period_end_date)
1231             FROM xla_ae_headers_gt  xah2
1232                , gl_period_statuses gps
1233            WHERE xah.ae_header_id               = xah2.ae_header_id
1234              AND gps.application_id         (+) = 101
1235              AND gps.ledger_id              (+) = xah2.ledger_id
1236              AND gps.adjustment_period_flag (+) = 'N'
1237              AND gps.closing_status         (+) = 'O'
1238              AND gps.start_date             (+) = xah2.first_day_next_gl_period)
1239    -- 4884853
1240    WHERE  xah.acc_rev_gl_date_option IN ('XLA_FIRST_DAY_NEXT_GL_PERIOD','XLA_LAST_DAY_NEXT_GL_PERIOD','XLA_NEXT_DAY',
1241                                          'FIRST_DAY_GL_PERIOD','LAST_DAY_GL_PERIOD','ORIGINATING_DAY')
1242      AND (xah.period_closing_status IN ('P', 'C') OR (xah.period_closing_status = 'N' AND xah.accounting_date <= p_end_date));
1243 
1244 END IF;
1245 
1246 
1247 --
1248 -- When rolling the GL date using the transaction date rule, if the accrual
1249 -- reversal gl date mode is XLA_NEXT_DAY, GL date is not rolled backward
1250 --
1251 xla_ae_header_pkg.ValidateBusinessDate
1252    (p_ledger_id => p_ledger_id);
1253 
1254 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1255       trace
1256          (p_msg      => 'SQL- update xla_ae_headers_gt (2)'
1257          ,p_level    => C_LEVEL_STATEMENT
1258          ,p_module   => l_log_module);
1259 END IF;
1260 
1261 ValidateCompleteAADDefn
1262     (p_application_id  => p_application_id
1263     ,p_ledger_id       => p_ledger_id
1264     ,p_min_event_date  => p_min_event_date
1265     ,p_max_event_date  => p_max_event_date);
1266 
1267 
1268 UPDATE xla_ae_headers_gt a
1269 SET accounting_entry_status_code = xla_ae_journal_entry_pkg.C_RELATED_INVALID
1270    ,event_status_code            = 'I'
1271 WHERE accounting_entry_status_code = xla_ae_journal_entry_pkg.C_VALID
1272 AND EXISTS
1273    (SELECT /*+ HASH_SJ */ '1'
1274       FROM xla_ae_headers_gt
1275      WHERE event_id = a.event_id
1276        AND accounting_entry_status_code = xla_ae_journal_entry_pkg.C_INVALID);
1277 
1278 
1279 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1280       trace
1281          (p_msg      => '# rows updated in  xla_ae_headers_gt(2) ='||SQL%ROWCOUNT
1282          ,p_level    => C_LEVEL_STATEMENT
1283          ,p_module   => l_log_module);
1284 END IF;
1285 
1286 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1287       trace
1291 END IF;
1288          (p_msg      => '--> CALL xla_ae_journal_entry_pkg.InsertJournalEntries'
1289          ,p_level    => C_LEVEL_STATEMENT
1290          ,p_module   => l_log_module);
1292 
1293 
1294 l_result := xla_ae_journal_entry_pkg.InsertJournalEntries
1295                (p_application_id         => p_application_id
1296                ,p_accounting_batch_id    => p_accounting_batch_id
1297                ,p_end_date               => p_end_date             -- 4262811
1298                ,p_accounting_mode        => p_accounting_mode
1299                ,p_budgetary_control_mode => p_budgetary_control_mode);
1300 
1301 
1302 --
1303 -- fixed bug 3962951. Added a decode over p_accounting_mode
1304 --
1305 -- Bug 4056420. To improve performance the single update is replaced by a select and then
1306 -- the update
1307 --
1308 
1309 /* NOTE-  For Bug# 9086275
1310           Event's Process Status stamped as P even when there is a INVALID
1311 Header for Event.  This is bcos, below array has the following
1312   Index1: EventID1   I
1313   Index2: EventID2   X --(X Stands for SUCCESS)
1314 Hence, I status is overriden by X From  second row. So,to mark the event's
1315 statsus as Invalid, Order by EVENT STATUS DESC from Headers_GT is used, which
1316 would give Success as the First Line in the Array and I as sencod row. Hence
1317 ensure always to have SUCCESS(X) as the first row in the Global Array.
1318  */
1319 
1320 SELECT DISTINCT event_id, event_status_code BULK COLLECT
1321 INTO l_array_temp_events, l_array_temp_status
1322 FROM xla_ae_headers_gt
1323 order by event_id , event_status_code desc -- added for bug#9086275
1324 ;
1325 
1326 FORALL i IN 1..l_array_temp_events.COUNT
1327 UPDATE xla_events_gt
1328 SET process_status_code = DECODE(l_array_temp_status(i)
1329                                 ,'X', DECODE(process_status_code
1330                                             ,'E','I'
1331                                             ,DECODE(p_accounting_mode
1332                                                     ,'F','P'
1333                                                     ,'D'
1334                                                     )
1335                                             )
1336                                 ,NULL,'U'
1337                                 ,l_array_temp_status(i)
1338                                 )
1339 WHERE event_id = l_array_temp_events(i);
1340 
1341 
1342 IF (l_result  = C_VALID_ENTRIES  OR  l_result = C_INVALID_ENTRIES ) THEN
1343 
1344     l_result := C_VALID_ENTRIES;
1345 
1346     --=========================
1347     -- call validation routine
1348     --=========================
1349 
1350     IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1351 
1352           trace
1353              (p_msg      => '-> CALL xla_je_validation_pkg.balance_amounts API '||l_result
1354              ,p_level    => C_LEVEL_PROCEDURE
1355              ,p_module   => l_log_module);
1356 
1357 
1358 
1359     END IF;
1360 
1361      xla_ae_journal_entry_pkg.UpdateResult(
1362        p_old_status => l_result
1363      , p_new_status => xla_je_validation_pkg.balance_amounts
1364                          (p_application_id         => p_application_id
1365                          ,p_end_date               => p_end_date           -- 4262811
1366                          ,p_mode                   => 'CREATE_ACCOUNTING'  -- 4262811
1367                          ,p_ledger_id              => p_ledger_id
1368                          ,p_budgetary_control_mode => p_budgetary_control_mode
1369                          ,p_accounting_mode        => p_accounting_mode));
1370 
1371 
1372 END IF;
1373 
1374 IF (p_budgetary_control_mode = 'NONE') THEN  -- bug 5173426
1375   UpdateRelatedErrorsStatus;
1376 END IF;
1377 
1378 -- 4669308
1379 DeleteIncompleteMPA (p_application_id         => p_application_id);
1380 
1381 -- 12411043 Start of Code
1382 -- BUG 13811614: Replaced Nvl(xldb.budgetary_control_flag,'X') with Nvl(xldb.budgetary_control_flag,'N')
1383 -- Changed the Status from P','P' to 'N', 'P'
1384 
1385 UPDATE xla_events_gt xe
1386    SET    xe.event_status_code       = 'N'
1387          ,xe.process_status_code     = 'P'
1388 	 ,xe.reference_char_4        = (CASE WHEN xe.application_id > 20000 then xe.reference_char_4 else 'CASH' end)
1389    WHERE  EXISTS (SELECT   1
1390                           FROM     gl_ledgers glg
1391                                   ,xla_acctg_methods_b xam
1392                                   ,xla_acctg_method_rules xamr
1393                                   ,xla_prod_acct_headers xpah
1394                                   ,xla_event_types_b xetb
1395                                   ,xla_aad_line_defn_assgns xald
1396                                   ,xla_line_definitions_b xldb
1397                                   ,xla_ledger_relationships_v xlr
1398                                   ,xla_ledger_options xlo
1399                           WHERE    glg.sla_accounting_method_code = xam.accounting_method_code
1400                                    AND glg.sla_accounting_method_type = xam.accounting_method_type_code
1401                                    AND xam.accounting_method_code = xamr.accounting_method_code
1402                                    AND xam.accounting_method_type_code = xamr.accounting_method_type_code
1403                                    AND xamr.application_id = xe.application_id
1404                                    AND xetb.application_id = xpah.application_id
1405                                    AND xetb.entity_code = xpah.entity_code
1406                                    AND xetb.event_class_code = xpah.event_class_code
1407                                    AND (Substr(xpah.event_type_code,-4) = '_ALL'
1411                                    AND xpah.product_rule_code = xamr.product_rule_code
1408                                          OR xetb.event_type_code = xpah.event_type_code)
1409                                    AND xpah.application_id = xamr.application_id
1410                                    AND xpah.product_rule_type_code = xamr.product_rule_type_code
1412                                    AND xpah.amb_context_code = xamr.amb_context_code
1413                                    AND xpah.amb_context_code = Nvl(xla_profiles_pkg.Get_value('XLA_AMB_CONTEXT'),
1414                                                                    'DEFAULT')
1415                                    AND xetb.event_type_code = xe.event_type_code
1416                                    AND glg.ledger_id = xlr.ledger_id
1417                                    AND xlr.primary_ledger_id = xe.ledger_id
1418                                    AND xlr.relationship_enabled_flag = 'Y'
1419                                    AND xlr.ledger_id = xlo.ledger_id
1420                                    AND xlo.application_id = xe.application_id
1421                                    AND xlo.enabled_flag = 'Y'
1422                                    AND xald.application_id(+) = xpah.application_id
1423                                    AND xald.amb_context_code(+) = xpah.amb_context_code
1424                                    AND xald.product_rule_type_code(+) =  xpah.product_rule_type_code
1425                                    AND xald.product_rule_code(+) = xpah.product_rule_code
1426                                    AND xald.event_class_code(+) = xpah.event_class_code
1427                                    AND xald.event_type_code(+) = xpah.event_type_code
1428                                    AND xald.application_id = xldb.application_id(+)
1429                                    AND xald.amb_context_code = xldb.amb_context_code(+)
1430                                    AND xald.event_class_code = xldb.event_class_code (+)
1431                                    AND xald.event_type_code = xldb.event_type_code(+)
1432                                    AND xald.line_definition_owner_code = xldb.line_definition_owner_code(+)
1433                                    AND xald.line_definition_code = xldb.line_definition_code(+)
1434                                    AND xldb.enabled_flag(+) = 'Y'
1435                           HAVING   Sum(CASE
1436                                            WHEN xe.event_date BETWEEN Nvl(xamr.start_date_active,xe.event_date)
1437                                                 AND Nvl(xamr.end_date_active,xe.event_date)
1438                                            THEN Decode(Nvl(xpah.accounting_required_flag,'N'),'Y'
1439                                                       ,Decode(Nvl(xldb.budgetary_control_flag,'N'),xe.budgetary_control_flag,1,0)
1440                                                       ,0)
1441                                            ELSE 0
1442                                        END) = 0)
1443    AND    xe.event_status_code = 'U'
1444    AND    xe.process_status_code = 'U'
1445    AND    xe.application_id = p_application_id
1446    AND    p_accounting_mode = 'F';
1447 -- 12411043 End of Code
1448 --
1449 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1450 
1451       trace
1452          (p_msg      => 'return value. = '||TO_CHAR(l_result)
1453          ,p_level    => C_LEVEL_PROCEDURE
1454          ,p_module   => l_log_module);
1455 
1456       trace
1457          (p_msg      => 'END of PostAccountingEngine'
1458          ,p_level    => C_LEVEL_PROCEDURE
1459          ,p_module   => l_log_module);
1460 
1461 END IF;
1462 --
1463 RETURN l_result;
1464 EXCEPTION
1465 WHEN xla_exceptions_pkg.application_exception THEN
1466   IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1467        trace
1468            (p_msg      => 'Error. = '||sqlerrm
1469            ,p_level    => C_LEVEL_PROCEDURE
1470            ,p_module   => l_log_module);
1471   END IF;
1472   RAISE;
1473 WHEN OTHERS  THEN
1474    IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1475        trace
1476            (p_msg      => 'Error. = '||sqlerrm
1477            ,p_level    => C_LEVEL_PROCEDURE
1478            ,p_module   => l_log_module);
1479    END IF;
1480    xla_exceptions_pkg.raise_message
1481                 (p_location => 'xla_accounting_engine_pkg.PostAccountingEngine');
1482    --
1483 END PostAccountingEngine;
1484 --
1485 --
1486 --
1487 --+==========================================================================+
1488 --|  PRIVATE FUNCTION                                                        |
1489 --|      RunPAD                                                              |
1490 --+==========================================================================+
1491 --
1492 FUNCTION RunPAD
1493        (p_application_id         IN NUMBER
1494        ,p_base_ledger_id         IN NUMBER
1495        ,p_pad_package            IN VARCHAR2
1496        ,p_pad_start_date         IN DATE
1497        ,p_pad_end_date           IN DATE
1498        ,p_primary_ledger_id      IN NUMBER
1499        ,p_budgetary_control_mode IN VARCHAR2)
1500 RETURN NUMBER IS
1501 --
1502 l_result             NUMBER         := 2 ;
1503 l_statement          VARCHAR2(1000) := NULL ;
1504 l_log_module         VARCHAR2(240);
1505 l_ledger_category_code VARCHAR2(30);
1506 l_enable_bc_flag       VARCHAR2(1):=null;
1507 
1508 invalid_package      EXCEPTION;
1509 PRAGMA EXCEPTION_INIT(invalid_package,-04063);
1510 --
1511 BEGIN
1512 --
1513 IF g_log_enabled THEN
1514    l_log_module := C_DEFAULT_MODULE||'.RunPAD';
1515 END IF;
1516 --
1517 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1518    trace
1519       (p_msg      => 'BEGIN of RunPAD'
1523       (p_msg      => 'p_application_id = '||TO_CHAR(p_application_id)||
1520       ,p_level    => C_LEVEL_PROCEDURE
1521       ,p_module   => l_log_module);
1522    trace
1524                      ' - p_base_ledger_id = '||TO_CHAR(p_base_ledger_id)||
1525                      ' - p_pad_package = '||TO_CHAR(p_pad_package)
1526       ,p_level    => C_LEVEL_PROCEDURE
1527       ,p_module   => l_log_module);
1528 END IF;
1529 
1530 
1531 
1532 IF p_pad_package IS NOT NULL THEN
1533    --===========================================================================
1534    -- launch the creation of the journal entries for primary/secondary ledgers
1535    --
1536    -- Example :
1537    -- l_statement := BEGIN
1538    --                   l_result :=
1539    --                      XLA_00200_PAD_C_000001_PKG.CreateJournalEntries
1540    --                         (p_application_id
1541    --                         ,p_base_ledger_id
1542    --                         ,p_pad_start_date
1543    --                         ,p_pad_end_date
1544    --                         ,p_primary_ledger_id);
1545    --                END;
1546    --===========================================================================
1547    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1548       trace
1549          (p_msg      => '-> CALL '||p_pad_package||'.CreateJournalEntries() API'
1550          ,p_level    => C_LEVEL_PROCEDURE
1551          ,p_module   => l_log_module);
1552    END IF;
1553 
1554    IF (p_budgetary_control_mode = 'NONE') THEN
1555      l_statement := 'BEGIN :1 := '||p_pad_package ||'.CreateJournalEntries(:2,:3,:4,:5,:6 ); END;';
1556    ELSE
1557        -- 6509160 Process non bc AAd package for Secondary non bc enabled ledger
1558       -- get category code of ledger
1559      SELECT ledger_category_code,enable_budgetary_control_flag
1560      INTO l_ledger_category_code,l_enable_bc_flag
1561      FROM gl_ledgers
1562      WHERE ledger_id = p_base_ledger_id;
1563    IF l_ledger_category_code='SECONDARY' and l_enable_bc_flag='N' THEN
1564     /* commented for bug-9245677 */
1565     /* l_statement := 'BEGIN :1 := '||p_pad_package ||'.CreateJournalEntries(:2,:3,:4,:5,:6 ); END;'; */
1566     NULL ; /* added for bug-9245677 */
1567    ELSE
1568      l_statement := 'BEGIN :1 := '||replace(p_pad_package,'_PKG','_BC_PKG') ||'.CreateJournalEntries(:2,:3,:4,:5,:6 ); END;';
1569    END IF;
1570    END IF;
1571 
1572    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1573       trace
1574          (p_msg      => '>> EXECUTE Dynamic SQL = '||l_statement
1575          ,p_level    => C_LEVEL_STATEMENT
1576          ,p_module   => l_log_module);
1577    END IF;
1578 
1579    /* added for bug-9245677 */
1580    IF ( p_budgetary_control_mode = 'NONE'
1581         OR
1582 	NOT( l_ledger_category_code='SECONDARY' and l_enable_bc_flag='N')
1583       )
1584    THEN
1585 	EXECUTE IMMEDIATE l_statement
1586         USING OUT l_result
1587              ,IN p_application_id
1588              ,IN p_base_ledger_id
1589              ,IN p_pad_start_date
1590              ,IN p_pad_end_date
1591              ,IN p_primary_ledger_id;
1592    ELSE
1593         l_result := 0 ; /* added for bug-9245677 */
1594    END IF;
1595 
1596 END IF;
1597 --
1598 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1599    trace
1600       (p_msg      => 'return value. = '||TO_CHAR(l_result)
1601       ,p_level    => C_LEVEL_PROCEDURE
1602       ,p_module   => l_log_module);
1603 
1604    trace
1605       (p_msg      => 'END of RunPAD'
1606       ,p_level    => C_LEVEL_PROCEDURE
1607       ,p_module   => l_log_module);
1608 END IF;
1609 
1610 RETURN l_result;
1611 
1612 EXCEPTION
1613 
1614 WHEN xla_exceptions_pkg.application_exception THEN
1615      RAISE;
1616 
1617 -- handle the error due to invalid AAD package. Bug 3718471.
1618 WHEN invalid_package  THEN
1619      xla_exceptions_pkg.raise_message
1620              (p_appli_s_name   => 'XLA'
1621              ,p_msg_name       => 'XLA_COMMON_ERROR'
1622              ,p_token_1        => 'ERROR'
1623              ,p_value_1        => 'The AAD package is not valid in the database.'||
1624                                   'Please Recompile the AAD and resubmit Accounting.'
1625              ,p_token_2        => 'LOCATION'
1626             ,p_value_2        => 'xla_accounting_engine_pkg.RunPAD');
1627 
1628 WHEN OTHERS THEN
1629    xla_exceptions_pkg.raise_message
1630       (p_location => 'xla_accounting_engine_pkg.RunPAD');
1631 
1632 END RunPAD;
1633 --
1634 --
1635 --+==========================================================================+
1636 --| PRIVATE FUNCTION                                                         |
1637 --|      SubmitAccountingEngine                                              |
1638 --|                                                                          |
1639 --|                                                                          |
1640 --+==========================================================================+
1641 --
1642 FUNCTION SubmitAccountingEngine
1643        (p_application_id         IN NUMBER
1644        ,p_ledger_id              IN NUMBER
1645        ,p_accounting_mode        IN VARCHAR2
1646        ,p_budgetary_control_mode IN VARCHAR2
1647        ,p_accounting_batch_id    IN NUMBER
1648        ,p_min_event_date         IN OUT NOCOPY DATE
1649        ,p_max_event_date         IN OUT NOCOPY DATE)
1650 RETURN NUMBER
1651 IS
1652 --
1653 
1654 l_result                             NUMBER;
1658 l_array_null_event_ids               xla_ae_journal_entry_pkg.t_array_Num;
1655 l_je_result                          NUMBER;
1656 l_pad_package                        VARCHAR2(30);
1657 l_array_base_ledgers                 xla_accounting_cache_pkg.t_array_ledger_id;
1659 l_array_null_event_status            xla_ae_journal_entry_pkg.t_array_V1L;
1660 l_rec_array_event                    t_rec_array_event;
1661 l_rows                               NATURAL:=1000;
1662 Idx                                  BINARY_INTEGER;
1663 EventIdx                             BINARY_INTEGER;
1664 --
1665 l_log_module           VARCHAR2(240);
1666 --
1667 l_array_pads           xla_accounting_cache_pkg.t_array_pad;
1668 l_slam_name_session    VARCHAR2(240);
1669 l_min_aad_start_date   DATE;
1670 l_max_aad_end_date     DATE;
1671 l_ledger_category_code VARCHAR2(30);
1672 l_enable_bc_flag       VARCHAR2(1);
1673 --
1674 BEGIN
1675 --
1676 IF g_log_enabled THEN
1677    l_log_module := C_DEFAULT_MODULE||'.SubmitAccountingEngine';
1678 END IF;
1679 --
1680 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1681     trace
1682        (p_msg      => 'BEGIN of SubmitAccountingEngine'
1683        ,p_level    => C_LEVEL_PROCEDURE
1684        ,p_module   => l_log_module);
1685 END IF;
1686 --
1687 -- init local variables
1688 --
1689 l_result              := C_UNPROCESSED_ENTRIES;
1690 l_je_result           := C_NO_ENTRIES;
1691 g_array_event_ids     := l_array_null_event_ids;
1692 g_array_event_status  := l_array_null_event_status;
1693 EventIdx              := 0;
1694 
1695 --
1696 -- get all the base ledgers
1697 --
1698 l_array_base_ledgers := xla_accounting_cache_pkg.GetLedgers;
1699 
1700 --
1701 -- get min and max event date from the xla_events_gt_table.
1702 -- this information is used to find the AADs that will used
1703 -- to account for events
1704 --
1705 SELECT MIN(event_date), MAX(event_date)
1706   INTO p_min_event_date, p_max_event_date
1707   FROM xla_events_gt;
1708 
1709 --
1710 -- looping for base ledgers
1711 --
1712 FOR Jdx IN 1 .. l_array_base_ledgers.COUNT LOOP
1713    --IF (p_budgetary_control_mode = 'NONE' OR
1714    --    l_array_base_ledgers(Jdx) = p_ledger_id) THEN
1715    --
1716    -- get AADs for the base ledger that fall between min and max event dates
1717    --
1718    l_array_pads :=
1719       xla_accounting_cache_pkg.GetArrayPad
1720          (p_ledger_id            => l_array_base_ledgers(Jdx)
1721          ,p_min_event_date       => p_min_event_date
1722          ,p_max_event_date       => p_max_event_date);
1723 
1724    l_min_aad_start_date := NULL;
1725    l_max_aad_end_date   := NULL;
1726    l_slam_name_session :=
1727       xla_accounting_cache_pkg.GetSessionValueChar
1728          (p_source_code         => 'XLA_ACCOUNTING_METHOD_NAME'
1729          ,p_target_ledger_id    => l_array_base_ledgers(Jdx));
1730 
1731    --
1732    -- looping for each AAD
1733    --
1734    FOR Kdx IN 1 .. l_array_pads.COUNT LOOP
1735       --
1736       -- following code will be used to see if there are missing AADs for
1737       -- which there are events in the XLA_EVENTS_GT table.
1738       -- These events should actually be marked as error/invalid.
1739       --
1740       IF (l_min_aad_start_date IS NULL OR
1741          l_min_aad_start_date > NVL(l_array_pads(Kdx).start_date_active,p_min_event_date))
1742       THEN
1743          l_min_aad_start_date :=
1744             NVL(l_array_pads(Kdx).start_date_active,p_min_event_date);
1745       END IF;
1746 
1747       IF (l_max_aad_end_date IS NULL OR
1748          l_max_aad_end_date < NVL(l_array_pads(Kdx).end_date_active,p_max_event_date))
1749       THEN
1750          l_max_aad_end_date :=
1751             NVL(l_array_pads(Kdx).end_date_active,p_max_event_date);
1752       END IF;
1753 
1754       /* 5054831  Moved to xla_accounting_pkg.ValidateAAD.
1755       IF l_array_pads(Kdx).product_rule_code IS NOT NULL AND
1756          NVL(l_array_pads(Kdx).compile_status_code,'N') <> 'Y'
1757       THEN
1758          IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1759             trace
1760                (p_msg      => 'The AAD '||l_array_pads(Kdx).product_rule_code||' is not compiled.'
1761                ,p_level    => C_LEVEL_EXCEPTION
1762                ,p_module   => l_log_module);
1763          END IF;
1764          --
1765          -- calling routine to mark the events with error and
1766          -- build messages
1767          --
1768          CatchErr_UncompliedAAD
1769             (p_ledger_id     => l_array_base_ledgers(Jdx)
1770             ,p_min_date      => NVL(l_array_pads(Kdx).start_date_active,p_min_event_date)
1771             ,p_max_date      => NVL(l_array_pads(Kdx).end_date_active,p_max_event_date)
1772             ,p_aad_name      => l_array_pads(Kdx).session_product_rule_name
1773             ,p_aad_owner     => l_array_pads(Kdx).product_rule_owner
1774             ,p_slam_name     => l_slam_name_session);
1775 
1776       ELSIF l_array_pads(Kdx).product_rule_code IS NULL THEN
1777       */
1778       IF l_array_pads(Kdx).product_rule_code IS NULL THEN
1779          --
1780          -- How can this situation ever happen???
1781          --
1782          -- build messages for each event/ledger that the PAD setup is invalid
1783 
1784          -- update event status for the events.
1785          -- .....
1786          -- .....
1787          --
1788          IF (C_LEVEL_ERROR >= g_log_level) THEN
1789             trace
1790                (p_msg      => 'ERROR: XLA_AP_INV_PAD_SETUP'
1791                ,p_level    => C_LEVEL_ERROR
1792                ,p_module   => l_log_module);
1793          END IF;
1794       ELSE
1795 
1796          l_je_result :=
1800                ,p_pad_package          => l_array_pads(Kdx).pad_package_name
1797             RunPAD
1798                (p_application_id       => p_application_id
1799                ,p_base_ledger_id       => l_array_base_ledgers(Jdx)
1801                ,p_pad_start_date       => nvl(l_array_pads(Kdx).start_date_active,p_min_event_date)
1802                ,p_pad_end_date         => nvl(l_array_pads(Kdx).end_date_active,p_max_event_date)
1803                ,p_primary_ledger_id    => p_ledger_id
1804                ,p_budgetary_control_mode => p_budgetary_control_mode);
1805       END IF;
1806 
1807    END LOOP; -- end of AAD loop
1808    --
1809    -- If there are no AADs attached to the SLAM
1810    --
1811    IF (l_min_aad_start_date IS NULL AND
1812        l_max_aad_end_date IS NULL)
1813    THEN
1814       l_min_aad_start_date := p_max_event_date +1;
1815       l_max_aad_end_date   := p_max_event_date +1;
1816    END IF;
1817 
1818    --
1819    -- calling routine to mark the events with error and
1820    -- build messages for which there were no AADs in the ledger
1821    --
1822    IF (p_min_event_date < l_min_aad_start_date OR
1823        p_max_event_date > l_max_aad_end_date)
1824    THEN
1825 
1826     -- bug 6414911 For applications where AAd is not defined for secondary ledger,it implies product teams do not want to account for secondary ledger during funds reserve/check,hence dont stamp the budgetary event with error status.
1827      SELECT ledger_category_code,enable_budgetary_control_flag
1828      INTO l_ledger_category_code,l_enable_bc_flag
1829      FROM gl_ledgers
1830      WHERE ledger_id = l_array_base_ledgers(Jdx);
1831 
1832     IF nvl(p_budgetary_control_mode,'NONE')<>'NONE' and l_ledger_category_code ='SECONDARY' and l_enable_bc_flag='N' THEN
1833            IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1834           trace
1835                 (p_msg      => 'ledger category code ='||l_ledger_category_code||' bc flag='||l_enable_bc_flag
1836                 ,p_level    => C_LEVEL_STATEMENT
1837                 ,p_module   => l_log_module);
1838 
1839           END IF;
1840      Else
1841       CatchErr_MissingAAD
1842          (p_ledger_id               => l_array_base_ledgers(Jdx)
1843          ,p_min_aad_start_date      => l_min_aad_start_date
1844          ,p_max_aad_end_date        => l_max_aad_end_date
1845          ,p_min_event_date          => p_min_event_date
1846          ,p_max_event_date          => p_max_event_date
1847          ,p_slam_name               => l_slam_name_session);
1848          End if;
1849    END IF;
1850 
1851    --END IF;
1852 
1853 END LOOP;  -- end of base ledger loop
1854 
1855 --
1856 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1857    trace
1858       (p_msg      => 'return value. = '||TO_CHAR(l_result)
1859       ,p_level    => C_LEVEL_PROCEDURE
1860       ,p_module   => l_log_module);
1861    trace
1862       (p_msg      => 'END of SubmitAccountingEngine'
1863       ,p_level    => C_LEVEL_PROCEDURE
1864       ,p_module   => l_log_module);
1865 END IF;
1866 --
1867 RETURN l_result;
1868 EXCEPTION
1869 WHEN xla_exceptions_pkg.application_exception THEN
1870    RAISE;
1871 WHEN OTHERS  THEN
1872    xla_exceptions_pkg.raise_message
1873       (p_location => 'xla_accounting_engine_pkg.RunPAD');
1874 END SubmitAccountingEngine;
1875 --
1876 --+==========================================================================+
1877 --|  PUBLIC FUNCTION                                                         |
1878 --|    CreateJournalEntries                                                  |
1879 --|                                                                          |
1880 --|                                                                          |
1881 --+==========================================================================+
1882 --
1883 FUNCTION AccountingEngine
1884        (p_application_id         IN NUMBER
1885        ,p_ledger_id              IN NUMBER
1886        ,p_end_date               IN DATE        -- 4262811
1887        ,p_accounting_mode        IN VARCHAR2
1888        ,p_accounting_batch_id    IN NUMBER
1889        ,p_budgetary_control_mode IN VARCHAR2)
1890 RETURN NUMBER IS
1891 --
1892 l_TempJE       NUMBER  := 2;
1893 l_FinalJE      NUMBER  := 2;
1894 l_log_module         VARCHAR2(240);
1895 --
1896 l_min_event_date        date;
1897 l_max_event_date        date;
1898 --
1899 BEGIN
1900 --
1901 IF g_log_enabled THEN
1902       l_log_module := C_DEFAULT_MODULE||'.AccountingEngine';
1903 END IF;
1904 --
1905 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1906 
1907       trace
1908          (p_msg      => 'BEGIN of AccountingEngine'
1909          ,p_level    => C_LEVEL_PROCEDURE
1910          ,p_module   => l_log_module);
1911 
1912       trace
1913          (p_msg      => 'p_application_id = '||TO_CHAR(p_application_id)||
1914                         ' - p_ledger_id = '||TO_CHAR(p_ledger_id)||
1915                         ' - p_accounting_mode = '||p_accounting_mode||
1916                         ' - p_accounting_batch_id = '||TO_CHAR(p_accounting_batch_id)
1917 
1918          ,p_level    => C_LEVEL_PROCEDURE
1919          ,p_module   => l_log_module);
1920 
1921 END IF;
1922 
1923 --
1924 -- Diagnotic Framework
1925 --
1926 xla_accounting_engine_pkg.g_diagnostics_mode := nvl(fnd_profile.value('XLA_DIAGNOSTIC_MODE'),'N');
1927 
1928 --
1929 -- validate to make sure that the accounting mode parameter is correct
1930 -- (it should either be 'D' or 'F' for DRAFT/FINAL)
1931 --
1932 IF p_accounting_mode NOT IN (C_DRAFT_STATUS,C_FINAL_STATUS) THEN
1933    IF (C_LEVEL_ERROR >= g_log_level) THEN
1934       trace
1938    END IF;
1935          (p_msg      => 'p_accounting_mode = '||p_accounting_mode||' is invalid value'
1936          ,p_level    => C_LEVEL_ERROR
1937          ,p_module   => l_log_module);
1939 
1940    xla_exceptions_pkg.raise_message
1941       (p_location => 'xla_accounting_engine_pkg.AccountingEngine');
1942 END IF;
1943 
1944 
1945 l_TempJE :=
1946    SubmitAccountingEngine
1947      (p_application_id         => p_application_id
1948      ,p_ledger_id              => p_ledger_id
1949      ,p_accounting_mode        => p_accounting_mode
1950      ,p_budgetary_control_mode => p_budgetary_control_mode
1951      ,p_accounting_batch_id    => p_accounting_batch_id
1952      ,p_min_event_date         => l_min_event_date
1953      ,p_max_event_date         => l_max_event_date);
1954 
1955 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1956    trace
1957      (p_msg      => 'l_TempJE = '||TO_CHAR(l_TempJE)
1958      ,p_level    => C_LEVEL_STATEMENT
1959      ,p_module   => l_log_module);
1960 END IF;
1961 
1962 l_FinalJE :=
1963    PostAccountingEngine
1964       (p_application_id              =>  p_application_id
1965       ,p_accounting_batch_id         =>  p_accounting_batch_id
1966       ,p_ledger_id                   =>  p_ledger_id
1967       ,p_end_date                    =>  p_end_date   -- 4262811
1968       ,p_accounting_mode             =>  p_accounting_mode
1969       ,p_min_event_date              => l_min_event_date
1970       ,p_max_event_date              => l_max_event_date
1971       ,p_budgetary_control_mode      => p_budgetary_control_mode);
1972 
1973 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1974    trace
1975      (p_msg      => 'l_FinalJE = '||TO_CHAR(l_FinalJE)
1976      ,p_level    => C_LEVEL_STATEMENT
1977      ,p_module   => l_log_module);
1978 END IF;
1979 
1980 --
1981 --   XLA_AE_CODE_COMBINATION_PKG.refreshCcidCache;
1982 
1983 --
1984 -- Zero temporary journal entries created
1985 -- Update events processed
1986 --
1987 --
1988 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1989    trace
1990      (p_msg      => 'END of AccountingEngine'
1991      ,p_level    => C_LEVEL_PROCEDURE
1992      ,p_module   => l_log_module);
1993 END IF;
1994 
1995 RETURN l_FinalJE;
1996 EXCEPTION
1997 WHEN xla_exceptions_pkg.application_exception THEN
1998    RAISE;
1999 WHEN OTHERS  THEN
2000    xla_exceptions_pkg.raise_message
2001       (p_location => 'xla_accounting_engine_pkg.AccountingEngine');
2002 END AccountingEngine;
2003 --
2004 --+==========================================================================+
2005 --|  PRIVATE FUNCTION                                                        |
2006 --|    CatchErr_UncompliedAAD                                                |
2007 --|                                                                          |
2008 --|                                                                          |
2009 --+==========================================================================+
2010 --
2011 PROCEDURE CatchErr_UncompliedAAD
2012        (p_ledger_id         IN NUMBER
2013        ,p_min_date          IN DATE
2014        ,p_max_date          IN DATE
2015        ,p_aad_name          IN VARCHAR2
2016        ,p_aad_owner         IN VARCHAR2
2017        ,p_slam_name         IN VARCHAR2) IS
2018 l_array_entity_id    xla_ae_journal_entry_pkg.t_array_Num;
2019 l_array_event_id     xla_ae_journal_entry_pkg.t_array_Num;
2020 l_log_module         VARCHAR2(240);
2021 BEGIN
2022    IF g_log_enabled THEN
2023       l_log_module := C_DEFAULT_MODULE||'.CatchErr_UncompliedAAD';
2024    END IF;
2025    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2026       trace
2027         (p_msg      => 'BEGIN of CatchErr_UncompliedAAD'
2028         ,p_level    => C_LEVEL_PROCEDURE
2029         ,p_module   => l_log_module);
2030       trace
2031         (p_msg      => ' p_ledger_id = '||p_ledger_id||
2032                        ' - p_aad_name = '||p_aad_name||
2033                        ' - p_min_date = '||p_min_date||
2034                        ' - p_max_date = '||p_max_date||
2035                        ' - p_aad_owner = '||p_aad_owner
2036         ,p_level    => C_LEVEL_PROCEDURE
2037         ,p_module   => l_log_module);
2038       trace
2039         (p_msg      => 'p_slam_name = '||p_slam_name
2040         ,p_level    => C_LEVEL_PROCEDURE
2041         ,p_module   => l_log_module);
2042    END IF;
2043 
2044    UPDATE xla_events_gt
2045       SET process_status_code = DECODE(process_status_code, 'U', 'E', process_status_code)
2046     WHERE event_date BETWEEN p_min_date AND p_max_date
2047    RETURNING entity_id, event_id
2048    BULK COLLECT INTO
2049        l_array_entity_id
2050       ,l_array_event_id;
2051 
2052    FOR i IN 1..l_array_event_id.COUNT LOOP
2053       xla_accounting_err_pkg.build_message
2054          (p_appli_s_name            => 'XLA'
2055          ,p_msg_name                => 'XLA_AP_PAD_INACTIVE'
2056          ,p_token_1                 => 'PAD_NAME'
2057          ,p_value_1                 => p_aad_name
2058          ,p_token_2                 => 'OWNER'
2059          ,p_value_2                 => xla_lookups_pkg.get_meaning(
2060                                           'XLA_OWNER_TYPE'
2061                                           ,p_aad_owner)
2062          ,p_token_3                 => 'SUBLEDGER_ACCTG_METHOD'
2063          ,p_value_3                 => p_slam_name
2064          ,p_entity_id               => l_array_entity_id(i)
2065          ,p_event_id                => l_array_event_id(i)
2066          ,p_ledger_id               => p_ledger_id);
2067    END LOOP;
2068    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2069       trace
2073    END IF;
2070         (p_msg      => 'END of CatchErr_UncompliedAAD'
2071         ,p_level    => C_LEVEL_PROCEDURE
2072         ,p_module   => l_log_module);
2074 EXCEPTION
2075 WHEN xla_exceptions_pkg.application_exception THEN
2076    RAISE;
2077 WHEN OTHERS  THEN
2078    xla_exceptions_pkg.raise_message
2079       (p_location => 'xla_accounting_engine_pkg.CatchErr_UncompliedAAD');
2080 END CatchErr_UncompliedAAD;
2081 
2082 
2083 --
2084 --+==========================================================================+
2085 --|  PRIVATE FUNCTION                                                        |
2086 --|    CatchErr_MissingAAD                                                   |
2087 --|                                                                          |
2088 --|                                                                          |
2089 --+==========================================================================+
2090 --
2091 --BUG 13811614: Changed the p_min_event_date, p_max_event_date Parameter data Types from Varchar2 to Date.
2092 PROCEDURE CatchErr_MissingAAD
2093        (p_ledger_id                 IN NUMBER
2094        ,p_min_aad_start_date        IN DATE
2095        ,p_max_aad_end_date          IN DATE
2096        ,p_min_event_date            IN DATE
2097        ,p_max_event_date            IN DATE
2098        ,p_slam_name                 IN VARCHAR2) IS
2099 l_array_entity_id    xla_ae_journal_entry_pkg.t_array_Num;
2100 l_array_event_id     xla_ae_journal_entry_pkg.t_array_Num;
2101 l_application_name   VARCHAR2(240);
2102 l_slam_owner         VARCHAR2(240);
2103 l_log_module         VARCHAR2(240);
2104 BEGIN
2105    IF g_log_enabled THEN
2106       l_log_module := C_DEFAULT_MODULE||'.CatchErr_MissingAAD';
2107    END IF;
2108    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2109       trace
2110         (p_msg      => 'BEGIN of CatchErr_MissingAAD'
2111         ,p_level    => C_LEVEL_PROCEDURE
2112         ,p_module   => l_log_module);
2113       trace
2114         (p_msg      => 'p_ledger_id = '||p_ledger_id
2115         ,p_level    => C_LEVEL_PROCEDURE
2116         ,p_module   => l_log_module);
2117       trace
2118         (p_msg      => 'p_min_aad_start_date = '||p_min_aad_start_date
2119         ,p_level    => C_LEVEL_PROCEDURE
2120         ,p_module   => l_log_module);
2121       trace
2122         (p_msg      => 'p_max_aad_end_date = '||p_max_aad_end_date
2123         ,p_level    => C_LEVEL_PROCEDURE
2124         ,p_module   => l_log_module);
2125       trace
2126         (p_msg      => 'p_min_event_date = '||p_min_event_date
2127         ,p_level    => C_LEVEL_PROCEDURE
2128         ,p_module   => l_log_module);
2129       trace
2130         (p_msg      => 'p_max_event_date = '||p_max_event_date
2131         ,p_level    => C_LEVEL_PROCEDURE
2132         ,p_module   => l_log_module);
2133       trace
2134         (p_msg      => 'p_slam_name = '||p_slam_name
2135         ,p_level    => C_LEVEL_PROCEDURE
2136         ,p_module   => l_log_module);
2137    END IF;
2138 
2139    IF (p_min_event_date < p_min_aad_start_date AND
2140       p_max_event_date  > p_max_aad_end_date)
2141    THEN
2142       UPDATE xla_events_gt
2143          SET process_status_code = DECODE(process_status_code, 'U', 'E', process_status_code)
2144        WHERE event_date BETWEEN p_min_event_date AND (p_min_aad_start_date -1)
2145           OR event_date BETWEEN (p_max_aad_end_date +1) AND p_max_event_date
2146       RETURNING entity_id, event_id
2147       BULK COLLECT INTO
2148           l_array_entity_id
2149          ,l_array_event_id;
2150    ELSIF p_min_event_date < p_min_aad_start_date THEN
2151       UPDATE xla_events_gt
2152          SET process_status_code = DECODE(process_status_code, 'U', 'E', process_status_code)
2153        WHERE event_date BETWEEN p_min_event_date AND (p_min_aad_start_date -1)
2154       RETURNING entity_id, event_id
2155       BULK COLLECT INTO
2156           l_array_entity_id
2157          ,l_array_event_id;
2158    ELSIF p_max_event_date > p_max_aad_end_date THEN
2159       UPDATE xla_events_gt
2160          SET process_status_code = DECODE(process_status_code, 'U', 'E', process_status_code)
2161        WHERE event_date BETWEEN (p_max_aad_end_date +1) AND p_max_event_date
2162       RETURNING entity_id, event_id
2163       BULK COLLECT INTO
2164           l_array_entity_id
2165          ,l_array_event_id;
2166 
2167    END IF;
2168 
2169    l_application_name :=
2170       xla_accounting_cache_pkg.GetSessionValueChar
2171          (p_source_code         => 'XLA_EVENT_APPL_NAME');
2172 
2173    l_slam_owner :=
2174       xla_accounting_cache_pkg.GetValueChar
2175          (p_source_code         => 'XLA_ACCOUNTING_METHOD_OWNER'
2176          ,p_target_ledger_id    => p_ledger_id);
2177 
2178    FOR i IN 1..l_array_event_id.COUNT LOOP
2179       xla_accounting_err_pkg.build_message
2180          (p_appli_s_name            => 'XLA'
2181          ,p_msg_name                => 'XLA_AP_INV_PAD_SETUP'
2182          ,p_token_1                 => 'PRODUCT_NAME'
2183          ,p_value_1                 => l_application_name
2184          ,p_token_2                 => 'SUBLEDGER_ACCTG_METHOD'
2185          ,p_value_2                 => p_slam_name
2186          ,p_token_3                 => 'OWNER'
2187          ,p_value_3                 => xla_lookups_pkg.get_meaning(
2188                                        'XLA_OWNER_TYPE',l_slam_owner)
2189          ,p_entity_id               => l_array_entity_id(i)
2190          ,p_event_id                => l_array_event_id(i)
2191          ,p_ledger_id               => p_ledger_id);
2192    END LOOP;
2193    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2194       trace
2195         (p_msg      => 'END of CatchErr_MissingAAD'
2196         ,p_level    => C_LEVEL_PROCEDURE
2197         ,p_module   => l_log_module);
2198    END IF;
2199 EXCEPTION
2200 WHEN xla_exceptions_pkg.application_exception THEN
2201    RAISE;
2202 WHEN OTHERS  THEN
2203    xla_exceptions_pkg.raise_message
2204       (p_location => 'xla_accounting_engine_pkg.CatchErr_MissingAAD');
2205 END CatchErr_MissingAAD;
2206 
2207 --=============================================================================
2208 --
2209 --
2210 --
2211 --
2212 --
2213 --
2214 --
2215 --
2216 --
2217 --
2218 --
2219 --
2220 --
2221 --
2222 --
2223 --
2224 --
2225 --
2226 --
2227 --
2228 --
2229 --
2230 --=============================================================================
2231 --=============================================================================
2232 --          *********** Initialization routine **********
2233 --=============================================================================
2234 
2235 BEGIN
2236 
2237    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2238    g_log_enabled    := fnd_log.test
2239                           (log_level  => g_log_level
2240                           ,module     => C_DEFAULT_MODULE);
2241 
2242    IF NOT g_log_enabled  THEN
2243       g_log_level := C_LEVEL_LOG_DISABLED;
2244    END IF;
2245 
2246 END xla_accounting_engine_pkg; -- end of package spec