DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_EVENTS_PKG

Source


1 PACKAGE BODY xla_events_pkg AS
2 -- $Header: xlaevevt.pkb 120.99 2007/12/04 19:53:47 ssawhney ship $
3 /*===========================================================================+
4 |             Copyright (c) 2001-2002 Oracle Corporation                     |
5 |                       Redwood Shores, CA, USA                              |
6 |                         All rights reserved.                               |
7 +============================================================================+
8 | FILENAME                                                                   |
9 |    xlaevevt.pkb                                                            |
10 |                                                                            |
11 | PACKAGE NAME                                                               |
12 |    xla_events_pkg                                                          |
13 |                                                                            |
14 | DESCRIPTION                                                                |
15 |    This is a XLA private package, which contains all the APIs              |
16 |    required for processing accounting events.                              |
17 |                                                                            |
18 |    The public wrapper called xla_event_pub_pkg, is built based on          |
19 |    this package.                                                           |
20 |                                                                            |
21 |    Note:                                                                   |
22 |       - the APIs do not execute any COMMIT or ROLLBACK except in           |
23 |       - period_close procedure.
24 |       - these APIs are not supposed to return any error when being         |
25 |         used in production. Internal english message are hard-coded.       |
26 |                                                                            |
27 | HISTORY                                                                    |
28 |    08-Feb-01 G. Qu           Created                                       |
29 |    10-Mar-01 P. Labrevois    Reviewed                                      |
30 |    28-Mar-01 P. Labrevois    Review security columns                       |
31 |    27-Apr-01 P. Labrevois    Review per new datamodel change               |
32 |    10-Aug-01 P. Labrevois    Added bulk                                    |
33 |    13-Sep-01 P. Labrevois    Reviewed                                      |
34 |    08-Feb-02 S. Singhania    Reviewed and performed major changes          |
35 |    10-Feb-02 S. Singhania    Made changes in APIs to handle 'Transaction   |
36 |                               Number' (new column added in xla_entities)   |
37 |    13-Feb-02 S. Singhania    Made changes in APIs to handle 'Event Number' |
38 |    18-Feb-02 S. Singhania    Procedure 'Initialize' is made public. Minor  |
39 |                               changes.                                     |
40 |    04-Mar-02 S. Singhania    Changes in the function "get_id_mapping"      |
41 |                              Added condition "entity_id = g_entity_id" in  |
42 |                               all the update APIs.                         |
43 |                              Removed date validation calls and truncated   |
44 |                               event date in all the APIs                   |
45 |    18-Mar-02 S. Singhania    Modified the Bulk APIs to improve performance |
46 |                               by using a "Temporary table"                 |
47 |    08-Apr-02 S. Singhania    Removed the not required, redundant APIs      |
48 |    19-Apr-02 S. Singhania    Added seperate API to update transaction      |
49 |                               number. modified the APIs based on changes   |
50 |                               in "event_source_info" & "entity_source_info |
51 |    08-May-02 S. Singhania    Made changes in the routines to include:      |
52 |                               NOT NULL ledger_id, NULL valuation_method.   |
53 |                               legal_entity_id is made NULL in XLA_ENTITIES |
54 |                               Removed "legal_entity_id" from XLA_EVENTS    |
55 |                               Bug # 2351677                                |
56 |    14-May-02 S. Singhania    Modified "event_exists" routine and changed   |
57 |                               cursors in 'cache_application_setups'.       |
58 |    31-May-02 S. Singhania    Made changes based on Bug # 2392835. Updated  |
59 |                               code at all the places to make sure          |
60 |                               'source_id_date_n' is not used.              |
61 |                              Changes based on Bug # 2385846. Changes made  |
62 |                               to support XLA_ENTITY_ID_MAPPINGS column     |
63 |                               name changes. Modified APIs 'update_event'   |
64 |                               and 'update_event_status' to update          |
65 |                               'process_status' with 'event_status'         |
66 |                              Renamed 'create_entity_event' API to          |
67 |                               'create_bulk_events'                         |
68 |    14-Jun-02 S. Singhania    Added the bulk API, 'update_event_status_bulk'|
69 |                               to update event/entity status in bulk. This  |
70 |                               API will be called by Accounting Program     |
71 |    18-Jul-02 S. Singhania    Added curosr in 'cache_application_setup' to  |
72 |                               cache application from xla_subledgers.       |
73 |                              Commented 'validate_event_date' routine. Date |
74 |                               validation is not needed.                    |
75 |                              Commented 'update_entity_status' and 'evaluate|
76 |                               _entity_status'. Bug # 2464825. Removed      |
77 |                               reference to g_entity_status_code.           |
78 |                              Cleaned up Exception messages.                |
79 |    23-Jul-02 S. Singhania    Modified code to handle to issue of 'enabled  |
80 |                               flags'.( see DLD closed issues).             |
81 |    14-Aug-02 S. Singhania    Changed XLA_ENTITES and XLA_ENTITIES_S to     |
82 |                               XLA_TRANSACTION_ENTITIES and                 |
83 |                               XLA_TRANSACTION_ENTITIES_S                   |
84 |    09-Sep-02 S. Singhania    Made changes to 'cache_entity_info' to handle |
85 |                               MANUAL events. Bug # 2529997.                |
86 |    09-Sep-02 S. Singhania    modified 'create_bulk_events' routine (with   |
87 |                               single array) to handle entities belonging   |
88 |                               to multiple security contexts. Bug # 2530796 |
89 |    08-Nov-02 S. Singhania    Included and verified 'get_entity_id' API for |
90 |                               'document mode' Accounting Program           |
91 |    21-Feb-03 S. Singhania    Added 'Trace' procedure.                      |
92 |    10-Apr-03 S. Singhania    Made changes due to change in temporary table |
93 |                                name (bug # 2897261)                        |
94 |    12-Jun-03 S. Singhania    Fixed FND Messages (bug # 3001156).           |
95 |                              Removed commented APIs.                       |
96 |    10-Jul-03 S. Singhania    Added new APIs for MANUAL events (2899700)    |
97 |                                - UPDATE_MANUAL_EVENT                       |
98 |                                - CREATE_MANUAL_EVENT                       |
99 |                                - DELETE_PROCESSED_EVENT                    |
100 |                              modified other internal routines to handle the|
101 |                                the case of MANUAL events.                  |
102 |                              removed update_event_status_bulk API          |
103 |                                (accounting program do not use this anymore)|
104 |    12-Aug-03 S. Singhania    Fixed a typo in GET_ID_MAPPING                |
105 |    21-Aug-03 S. Singhania    Enhanced the following APIs to fix 2701681    |
106 |                                - update_event_status                       |
107 |                                - update_event                              |
108 |                                - delete_event                              |
109 |                                - delete_events                             |
110 |                                - delete_processed_event                    |
111 |    28-Aug-03 S. Singhania    Modified UPDATE_EVENT to fix 3111204          |
112 |    04-Sep-03 S. Singhania    Enhanced APIs to support 'Source Application':|
113 |                                - Added parameter p_source_application_id to|
114 |                                  CREATE_BULK_EVENTS API                    |
115 |                                - Added validation for source application in|
116 |                                  CREATE_EVENT and CREATE_BULK_EVENTS       |
117 |                                - Modified the insert statment to insert    |
118 |                                  source application in CREATE_ENTITY_EVENT |
119 |    05-Sep-03 S. Singhania    To improve performance, the structures to     |
120 |                                store event_types, event_classes and        |
121 |                                entity_types are modified. Following were   |
122 |                                impacted:                                   |
123 |                                - CACHE_APPLICATION_SETUP                   |
124 |                                - VALIDATE_EVENT_ENTITY_CODE                |
125 |                                - VALIDATE_EVNENT_CLASS_CODE                |
126 |                                - VALIDATE_EVNET_TYPE_CODE.                 |
127 |    12-Dec-03 S. Singhania    Bug # 3268790.                                |
128 |                                - Modified cursors in CACHE_ENTITY_INFO not |
129 |                                  to lock rows in xla_transaction_entities. |
130 |                                - Routines DELETE_EVENTS and DELETE_EVENT   |
131 |                                  are modified not to delete entites when   |
132 |                                  last STANDARD event is deleted for the    |
133 |                                  entity.                                   |
134 |    04-Mar-04 W. Shen         Gapless event processing project              |
135 |    25-Mar-04 W. Shen         add trace                                     |
136 |    23-Jun-04 W. Shen         New API delete_entity to delete entities      |
137 |                                from xla_transaction_entities(bug 3316535)  |
138 |    10-Aug-04 S. Singhania    Added trace messages to help debug the code   |
139 |    23-OCT-04 W. Shen         New API to delete/update/create event in bulk |
140 |    09-Nov-04 S. Singhania    Made chnages for valuation method enhancements|
141 |                                Following routines were modified:           |
142 |                                - CACHE_APPLICATION_SETUP                   |
143 |                                - RESET_CACHE                               |
144 |                                - VALIDATE_CONTEXT                          |
145 |                                - VALIDATE_LEDGER (New routine added)       |
146 |    23-OCT-04 W. Shen         bulk delete API, when delete transaction      |
147 |                               entities, make sure only delete those        |
148 |                               affected by the batch.                       |
149 |    1- APR-05 W. Shen         Add transaction_date to the following API:    |
150 |                               create_event, create_manual_event            |
151 |                               create_bulk_events(two of them)              |
152 |                               update_event                                 |
153 |    20-Apr-05 S. Singhania    Bug 4312353.                                  |
154 |                              - Modified signature of routines in to reflect|
155 |                                the change in the way we handle valuation   |
156 |                                method different from other security columns|
157 |                              - The major impact is on the following:       |
158 |                                - SOURCE_INFO_CHANGED                       |
159 |                                - CACHE_ENTITY_INFO                         |
160 |                                - CREATE_BULK_EVENTS                        |
161 |    02-May-05 V. Kumar        Removed function create_bulk_events,          |
162 |                              Bug # 4323140                                 |
163 |    22-Jul-05 Swapna Vellani  Modified an insert statement in               |
164 |                              create_bulk_events procedure Bug #4458604     |
165 |    2- Aug-05 W. Shen         remove the validation for p_source_app_id     |
166 |                                bug 4526089                                 |
167 |    30- Aug-05 W. Shen        when no entity exists, event_exists will      |
168 |                               return false instead of raising exception    |
169 |                                bug 4529563                                 |
170 |    30-Aug-05 S. Singhania    Bug 4519181: Added call to                    |
171 |                                XLA_SECURITY_PKG.SET_SECURITY_CONTEXT to    |
172 |                                each public API.                            |
173 +===========================================================================*/
174 
175 --=============================================================================
176 --           ****************  declaraions  ********************
177 --=============================================================================
178 -------------------------------------------------------------------------------
179 -- declaring private constants
180 -------------------------------------------------------------------------------
181 
182 C_YES                       CONSTANT VARCHAR2(1)  := 'Y'; -- yes flag
183 C_NO                        CONSTANT VARCHAR2(1)  := 'N'; -- no flag
184 
185 C_NUM                       CONSTANT NUMBER       := -99;
186 C_CHAR                      CONSTANT VARCHAR2(30) := ' ';
187 
188 C_EVENT_DELETE              CONSTANT VARCHAR2(1)  := 'D';
189 C_EVENT_CREATE              CONSTANT VARCHAR2(1)  := 'C';
190 C_EVENT_UPDATE              CONSTANT VARCHAR2(1)  := 'U';
191 C_EVENT_QUERY               CONSTANT VARCHAR2(1)  := 'Q';
192 
193 C_MANUAL_ENTITY             CONSTANT VARCHAR2(30) := 'MANUAL';
194 C_MANUAL_EVENT_CONTEXT      CONSTANT VARCHAR2(30) := 'MANUAL';
195 C_REGULAR_EVENT_CONTEXT     CONSTANT VARCHAR2(30) := 'REGULAR';
196 -------------------------------------------------------------------------------
197 -- declaring private pl/sql types
198 -------------------------------------------------------------------------------
199 TYPE t_event_type IS RECORD
200         (event_class_code               VARCHAR2(30)
201         ,enabled_flag                   VARCHAR2(1));
202 
203 TYPE t_class_type IS RECORD
204         (entity_type_code               VARCHAR2(30)
205         ,enabled_flag                   VARCHAR2(1));
206 
207 TYPE t_entity_type IS RECORD
208         (id_mapping                     VARCHAR2(8)
209         ,enabled_flag                   VARCHAR2(1));
210 
211 
212 TYPE t_parameter_tbl     IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
213 TYPE t_number_tbl        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
214 TYPE t_array_event_type  IS TABLE OF  t_event_type  INDEX BY VARCHAR2(30);
215 TYPE t_array_event_class IS TABLE OF  t_class_type  INDEX BY VARCHAR2(30);
216 TYPE t_array_entity_type IS TABLE OF  t_entity_type INDEX BY VARCHAR2(30);
217 TYPE t_event_status_tbl  IS TABLE OF  xla_events.event_status_code%type
218                                       INDEX BY BINARY_INTEGER;
219 TYPE t_on_hold_flag_tbl  IS TABLE OF  xla_events.on_hold_flag%type
220                                       INDEX BY BINARY_INTEGER;
221 TYPE t_event_number_tbl  IS TABLE OF  xla_events.event_number%type
222                                       INDEX BY BINARY_INTEGER;
223 TYPE t_ledger_status_tbl IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;
224 
225 -------------------------------------------------------------------------------
226 -- declaring private variables
227 -------------------------------------------------------------------------------
228 
229 g_entity_type_code_tbl      t_array_entity_type;  -- for caching entity_type
230 g_event_class_code_tbl      t_array_event_class;  -- for caching event_class
231 g_event_type_code_tbl       t_array_event_type;   -- for caching event_type
232 g_event_status_code_tbl     t_parameter_tbl;      -- for caching event_status
233 g_process_status_code_tbl   t_parameter_tbl;      -- for caching internal status
234 g_id_mapping                VARCHAR2(12);         -- for caching entity mapping
235 
236 g_ledger_status_tbl         t_ledger_status_tbl;
237                               -- for caching the value if event can be created
238 
239 g_source_info               xla_events_pub_pkg.t_event_source_info;
240 g_entity_id                 PLS_INTEGER;           -- Entity id
241 g_entity_type_code          VARCHAR2(30);          -- Entity code
242 g_valuation_method          VARCHAR2(80);          -- valuation method
243 
244 g_application_id            PLS_INTEGER;
245 g_transaction_number        VARCHAR2(240);
246 g_max_event_number          NUMBER           := 0;
247 g_context                   VARCHAR2(30);
248 g_action                    VARCHAR2(1);
249 g_gapless_flag              VARCHAR2(1);
250 g_gapless_array_event_status t_event_status_tbl;
251 g_gapless_event_number t_event_number_tbl;
252 
253 --=============================================================================
254 --               *********** Local Trace Routine **********
255 --=============================================================================
256 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
257 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
258 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
259 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
260 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
261 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
262 
263 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
264 
265 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_events_pkg';
266 
267 g_debug_flag        VARCHAR2(1):= NVL(fnd_profile.value('XLA_DEBUG_TRACE'),'N');
268 
269 --l_log_module          VARCHAR2(240);
270 g_log_level           NUMBER;
271 g_log_enabled         BOOLEAN;
272 
273 
274 -------------------------------------------------------------------------------
275 -- forward declarion of private procedures and functions
276 -------------------------------------------------------------------------------
277 
278 PROCEDURE validate_context
279    (p_application_id               IN  INTEGER
280    ,p_ledger_id                    IN  INTEGER
281    ,p_entity_type_code             IN  VARCHAR2);
282 
283 PROCEDURE validate_ids
284    (p_entity_type_code             IN  VARCHAR2
285    ,p_source_id_int_1              IN  INTEGER
286    ,p_source_id_int_2              IN  INTEGER
287    ,p_source_id_int_3              IN  INTEGER
288    ,p_source_id_int_4              IN  INTEGER
289    ,p_source_id_char_1             IN  VARCHAR2
290    ,p_source_id_char_2             IN  VARCHAR2
291    ,p_source_id_char_3             IN  VARCHAR2
292    ,p_source_id_char_4             IN  VARCHAR2);
293 
294 PROCEDURE validate_cached_setup;
295 
296 PROCEDURE cache_application_setup
297    (p_application_id               IN  INTEGER);
298 
299 PROCEDURE validate_entity_type_code
300    (p_entity_type_code             IN  VARCHAR2);
301 
302 PROCEDURE validate_event_class_code
303    (p_entity_type_code             IN  VARCHAR2
304    ,p_event_class_code             IN  VARCHAR2);
305 
306 PROCEDURE validate_event_type_code
307    (p_entity_type_code             IN  VARCHAR2
308    ,p_event_class_code             IN  VARCHAR2
309    ,p_event_type_code              IN  VARCHAR2);
310 
311 PROCEDURE validate_status_code
312     (p_event_status_code            IN  VARCHAR2
313     ,p_process_status_code          IN  VARCHAR2);
314 
315 PROCEDURE validate_params
316    (p_source_info                  IN  xla_events_pub_pkg.t_event_source_info
317    ,p_event_class_code             IN  VARCHAR2 DEFAULT NULL
318    ,p_event_type_code              IN  VARCHAR2 DEFAULT NULL
319    ,p_event_date                   IN  DATE     DEFAULT NULL
320    ,p_event_status_code            IN  VARCHAR2 DEFAULT NULL
321    ,p_process_status_code          IN  VARCHAR2 DEFAULT NULL);
322 
323 PROCEDURE validate_ledger
324    (p_ledger_id                    IN  NUMBER
325    ,p_application_id               IN  NUMBER);
326 
327 PROCEDURE cache_entity_info
328    (p_source_info                  IN  xla_events_pub_pkg.t_event_source_info
329    ,p_valuation_method             IN  VARCHAR2
330    ,p_event_id                     IN  PLS_INTEGER);
331 
332 PROCEDURE update_entity_trx_number
333    (p_transaction_number           IN  VARCHAR2);
334 
335 PROCEDURE reset_cache;
336 
337 PROCEDURE set_context
338    (p_context                      IN  VARCHAR2);
339 
340 FUNCTION source_info_changed
341    (p_event_source_info1           IN  xla_events_pub_pkg.t_event_source_info
342    ,p_event_source_info2           IN  xla_events_pub_pkg.t_event_source_info
343    ,p_valuation_method1            IN  VARCHAR2
344    ,p_valuation_method2            IN  VARCHAR2)
345 RETURN BOOLEAN;
346 
347 FUNCTION get_id_mapping
348    (p_entity_type_code             IN  VARCHAR2
349    ,p_source_id_code_1             IN  VARCHAR2
350    ,p_source_id_code_2             IN  VARCHAR2
351    ,p_source_id_code_3             IN  VARCHAR2
352    ,p_source_id_code_4             IN  VARCHAR2)
353 RETURN VARCHAR2;
354 
355 FUNCTION create_entity_event
356    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
357    ,p_valuation_method             IN  VARCHAR2
358    ,p_event_type_code              IN  VARCHAR2
359    ,p_event_date                   IN  DATE
360    ,p_event_status_code            IN  VARCHAR2
361    ,p_process_status_code          IN  VARCHAR2
362    ,p_event_number                 IN  NUMBER
363    ,p_transaction_date             IN  DATE
364    ,p_reference_info               IN  xla_events_pub_pkg.t_event_reference_info
365                                        DEFAULT NULL
366    ,p_budgetary_control_flag       IN  VARCHAR2)
367 RETURN INTEGER;
368 
369 FUNCTION  add_entity_event
370    (p_entity_id                    IN  INTEGER
371    ,p_application_id               IN  INTEGER
372    ,p_ledger_id                    IN  INTEGER
373    ,p_legal_entity_id              IN  INTEGER
374    ,p_event_type_code              IN  VARCHAR2
375    ,p_event_date                   IN  DATE
376    ,p_event_status_code            IN  VARCHAR2
377    ,p_process_status_code          IN  VARCHAR2
378    ,p_event_number                 IN  NUMBER
379    ,p_transaction_date             IN  DATE
380    ,p_reference_info               IN  xla_events_pub_pkg.t_event_reference_info
381                                        DEFAULT NULL
382    ,p_budgetary_control_flag       IN  VARCHAR2)
383 RETURN INTEGER;
384 
385 PROCEDURE delete_je;
386 
387 FUNCTION validate_id_where_clause return VARCHAR2;
388 FUNCTION join_id_where_clause return VARCHAR2;
389 
390 FUNCTION get_application_name
391    (p_application_id            IN NUMBER)
392 RETURN VARCHAR2;
393 
394 FUNCTION get_ledger_name
395    (p_ledger_id            IN NUMBER)
396 RETURN VARCHAR2;
397 
398 
399 --=============================================================================
400 --               *********** Local Trace Routine **********
401 --=============================================================================
402 
403 PROCEDURE trace
404        (p_msg                        IN VARCHAR2
405        ,p_level                      IN NUMBER
406        ,p_module                     IN VARCHAR2 DEFAULT C_DEFAULT_MODULE) IS
407 BEGIN
408    IF (p_msg IS NULL AND p_level >= g_log_level) THEN
409       fnd_log.message(p_level, p_module);
410    ELSIF p_level >= g_log_level THEN
411       fnd_log.string(p_level, p_module, p_msg);
412    END IF;
413 
414 EXCEPTION
415    WHEN xla_exceptions_pkg.application_exception THEN
416       RAISE;
417    WHEN OTHERS THEN
418       xla_exceptions_pkg.raise_message
419          (p_location   => 'xla_events_pkg.trace');
420 END trace;
421 
422 --=============================================================================
423 --          *********** public procedures and functions **********
424 --=============================================================================
425 --=============================================================================
426 --
427 --
428 --
429 --
430 --
431 --
432 --
433 --
434 --
435 --
436 -- Following are the routines on which "single event/entity" public APIs
437 -- are based.
438 --
439 --    1.    create_event
440 --    2.    create_manual_event
441 --    3.    update_event_status (for multiple events for an entity)
442 --    4.    update_event        (update multiple attributes for an event)
443 --    5.    update_manual_event (update multiple attributes for an event)
444 --    6.    delete_event        (for a single event)
445 --    7.    delete_events       (for multiple events for an entity)
446 --    8.    purge_entity
447 --    9.    get_event_info      (for an event)
448 --   10.    get_event_status    (for an event)
449 --   11.    event_exists        (for an entity)
450 --   12.    update_transaction_number
451 --   13.    get_entity_id
452 --
453 --
454 --
455 --
456 --
457 --
458 --
459 --
460 --
461 --
462 --
463 --
464 --=============================================================================
465 
466 --=============================================================================
467 --
468 -- For MANUAL events this API cannot be called.
469 --
470 --=============================================================================
471 
472 FUNCTION create_event
473    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
474    ,p_valuation_method             IN  VARCHAR2
475    ,p_event_type_code              IN  VARCHAR2
476    ,p_event_date                   IN  DATE
477    ,p_event_status_code            IN  VARCHAR2
478    ,p_event_number                 IN  INTEGER          DEFAULT NULL
479    ,p_transaction_date             IN  DATE        DEFAULT NULL
480    ,p_reference_info               IN  xla_events_pub_pkg.t_event_reference_info
481                                        DEFAULT NULL
482    ,p_budgetary_control_flag       IN  VARCHAR2)
483 RETURN INTEGER IS
484 l_event_date                  DATE;
485 L_CONSTANT        CONSTANT    VARCHAR2(30) := '##UNDEFINED##'; --chr(12);
486 
487 /*
488 CURSOR csr_xla_applications IS
489    SELECT application_id
490    FROM   xla_subledgers
491    WHERE  application_id = p_event_source_info.source_application_id;
492 */
493 l_log_module                VARCHAR2(240);
494 l_return_id INTEGER;
495 
496 BEGIN
497   IF g_log_enabled THEN
498     l_log_module := C_DEFAULT_MODULE||'.create_event';
499   END IF;
500   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
501     trace
502          (p_msg      => 'BEGIN of procedure create_event'
503          ,p_level    => C_LEVEL_PROCEDURE
504          ,p_module   =>l_log_module);
505     trace
506          (p_msg      => 'source_application_id = '||
507                         p_event_source_info.source_application_id
508          ,p_level    => C_LEVEL_PROCEDURE
509          ,p_module   =>l_log_module);
510     trace
511          (p_msg      => 'application_id = '||p_event_source_info.application_id
512          ,p_level    => C_LEVEL_PROCEDURE
513          ,p_module   =>l_log_module);
514     trace
515          (p_msg      => 'legal_entity_id = '||
516                         p_event_source_info.legal_entity_id
517          ,p_level    => C_LEVEL_PROCEDURE
518          ,p_module   =>l_log_module);
519     trace
520          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
521          ,p_level    => C_LEVEL_PROCEDURE
522          ,p_module   =>l_log_module);
523     trace
524          (p_msg      => 'entity_type_code = '||
525                         p_event_source_info.entity_type_code
526          ,p_level    => C_LEVEL_PROCEDURE
527          ,p_module   =>l_log_module);
528     trace
529          (p_msg      => 'transaction_number = '||
530                         p_event_source_info.transaction_number
531          ,p_level    => C_LEVEL_PROCEDURE
532          ,p_module   =>l_log_module);
533     trace
534          (p_msg      => 'source_id_int_1 = '||
535                         p_event_source_info.source_id_int_1
536          ,p_level    => C_LEVEL_PROCEDURE
537          ,p_module   =>l_log_module);
538     trace
539          (p_msg      => 'source_id_int_2 = '||
540                         p_event_source_info.source_id_int_2
541          ,p_level    => C_LEVEL_PROCEDURE
542          ,p_module   =>l_log_module);
543     trace
544          (p_msg      => 'source_id_int_3 = '||
545                         p_event_source_info.source_id_int_3
546          ,p_level    => C_LEVEL_PROCEDURE
547          ,p_module   =>l_log_module);
548     trace
549          (p_msg      => 'source_id_int_4 = '||
550                         p_event_source_info.source_id_int_4
551          ,p_level    => C_LEVEL_PROCEDURE
552          ,p_module   =>l_log_module);
553     trace
554          (p_msg      => 'source_id_char_1 = '||
555                         p_event_source_info.source_id_char_1
556          ,p_level    => C_LEVEL_PROCEDURE
557          ,p_module   =>l_log_module);
558     trace
559          (p_msg      => 'source_id_char_2 = '||
560                         p_event_source_info.source_id_char_2
561          ,p_level    => C_LEVEL_PROCEDURE
562          ,p_module   =>l_log_module);
563     trace
564          (p_msg      => 'source_id_char_3 = '||
565                         p_event_source_info.source_id_char_3
566          ,p_level    => C_LEVEL_PROCEDURE
567          ,p_module   =>l_log_module);
568     trace
569          (p_msg      => 'source_id_char_4 = '||
570                         p_event_source_info.source_id_char_4
571          ,p_level    => C_LEVEL_PROCEDURE
572          ,p_module   =>l_log_module);
573     trace
574          (p_msg      => 'p_event_type_code = '||p_event_type_code
575          ,p_level    => C_LEVEL_PROCEDURE
576          ,p_module   =>l_log_module);
577     trace
578          (p_msg      => 'p_event_date = '||p_event_date
579          ,p_level    => C_LEVEL_PROCEDURE
580          ,p_module   =>l_log_module);
581     trace
582          (p_msg      => 'p_event_status_code = '||p_event_status_code
583          ,p_level    => C_LEVEL_PROCEDURE
584          ,p_module   =>l_log_module);
585     trace
586          (p_msg      => 'p_event_number = '||p_event_number
587          ,p_level    => C_LEVEL_PROCEDURE
588          ,p_module   =>l_log_module);
589     trace
590          (p_msg      => 'security_id_int_1 = '||
591                         xla_events_pub_pkg.g_security.security_id_int_1
592          ,p_level    => C_LEVEL_PROCEDURE
593          ,p_module   =>l_log_module);
594     trace
595          (p_msg      => 'security_id_int_2 = '||
596                         xla_events_pub_pkg.g_security.security_id_int_2
597          ,p_level    => C_LEVEL_PROCEDURE
598          ,p_module   =>l_log_module);
599     trace
600          (p_msg      => 'security_id_int_3 = '||
601                         xla_events_pub_pkg.g_security.security_id_int_3
602          ,p_level    => C_LEVEL_PROCEDURE
603          ,p_module   =>l_log_module);
604     trace
605          (p_msg      => 'security_id_char_1 = '||
606                         xla_events_pub_pkg.g_security.security_id_char_1
607          ,p_level    => C_LEVEL_PROCEDURE
608          ,p_module   =>l_log_module);
609     trace
610          (p_msg      => 'security_id_char_2 = '||
611                         xla_events_pub_pkg.g_security.security_id_char_2
612          ,p_level    => C_LEVEL_PROCEDURE
613          ,p_module   =>l_log_module);
614     trace
615          (p_msg      => 'security_id_char_3 = '||
616                         xla_events_pub_pkg.g_security.security_id_char_3
617          ,p_level    => C_LEVEL_PROCEDURE
618          ,p_module   =>l_log_module);
619     trace
620          (p_msg      => 'valuation_method = '||p_valuation_method
621          ,p_level    => C_LEVEL_PROCEDURE
622          ,p_module   =>l_log_module);
623     trace
624          (p_msg      => 'budgetary_control_flag = '||p_budgetary_control_flag
625          ,p_level    => C_LEVEL_PROCEDURE
626          ,p_module   =>l_log_module);
627   end if;
628 
629    SAVEPOINT before_event_creation;
630    g_action := C_EVENT_CREATE;
631 
632    ----------------------------------------------------------------------------
633    -- Following sets the Security Context for the execution. This enables the
634    -- event API to respect the transaction security.
635    ----------------------------------------------------------------------------
636    xla_security_pkg.set_security_context(p_event_source_info.application_id);
637 
638    ----------------------------------------------------------------------------
639    -- check to see the API is not called for manual events
640    ----------------------------------------------------------------------------
641    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
642       xla_exceptions_pkg.raise_message
643          (p_appli_s_name   => 'XLA'
644          ,p_msg_name       => 'XLA_COMMON_ERROR'
645          ,p_token_1        => 'ERROR'
646          ,p_value_1        => 'For MANUAL events this API cannot be called'
647          ,p_token_2        => 'LOCATION'
648          ,p_value_2        => 'xla_events_pkg.get_array_event_info (fn)');
649    ELSE
650       g_context := C_REGULAR_EVENT_CONTEXT;
651    END IF;
652 
653    IF p_event_type_code IS NULL THEN
654       xla_exceptions_pkg.raise_message
655          (p_appli_s_name   => 'XLA'
656          ,p_msg_name       => 'XLA_COMMON_ERROR'
657          ,p_token_1        => 'ERROR'
658          ,p_value_1        =>
659          'Event Type Code has an invalid value. It cannot have a NULL value.'
660          ,p_token_2        => 'LOCATION'
661          ,p_value_2        => 'xla_events_pkg.create_event');
662    END IF;
663    IF p_event_date IS NULL THEN
664       xla_exceptions_pkg.raise_message
665          (p_appli_s_name   => 'XLA'
666          ,p_msg_name       => 'XLA_COMMON_ERROR'
667          ,p_token_1        => 'ERROR'
668          ,p_value_1        =>
669          'Event Date has an invalid value. It cannot have a NULL value.'
670          ,p_token_2        => 'LOCATION'
671          ,p_value_2        => 'xla_events_pkg.create_event');
672    END IF;
673    IF p_event_status_code IS NULL THEN
674       xla_exceptions_pkg.raise_message
675          (p_appli_s_name   => 'XLA'
676          ,p_msg_name       => 'XLA_COMMON_ERROR'
677          ,p_token_1        => 'ERROR'
678          ,p_value_1        =>
679          'Event Status Code has an invalid value. It cannot have a NULL value.'
680          ,p_token_2        => 'LOCATION'
681          ,p_value_2        => 'xla_events_pkg.create_event');
682    END IF;
683 
684    ----------------------------------------------------------------------------
685    -- truncate date
686    ----------------------------------------------------------------------------
687    l_event_date := TRUNC(p_event_date);
688 
689    ----------------------------------------------------------------------------
690    -- Validate parameters
691    ----------------------------------------------------------------------------
692    validate_params
693       (p_source_info             => p_event_source_info
694       ,p_event_type_code         => p_event_type_code
695       ,p_event_status_code       => p_event_status_code
696       ,p_process_status_code     => C_INTERNAL_UNPROCESSED);
697 
698    ----------------------------------------------------------------------------
699    -- Get document PK.
700    ----------------------------------------------------------------------------
701    cache_entity_info
702       (p_source_info      => p_event_source_info
703       ,p_valuation_method => p_valuation_method
704       ,p_event_id         => NULL);
705 
706   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
707      trace
708          (p_msg      => 'gapless_flag:'||g_gapless_flag
709          ,p_level    => C_LEVEL_STATEMENT
710          ,p_module   =>l_log_module);
711      trace
712          (p_msg      => 'p_event_number:'||to_char(p_event_number)
713          ,p_level    => C_LEVEL_STATEMENT
714          ,p_module   =>l_log_module);
715      trace
716          (p_msg      => 'g_entity_id:'||to_char(g_entity_id)
717          ,p_level    => C_LEVEL_STATEMENT
718          ,p_module   =>l_log_module);
719   END IF;
720 
721    IF (g_gapless_flag = 'Y'
722        and (p_event_number is null or p_event_number<1)) THEN
723       xla_exceptions_pkg.raise_message
724          (p_appli_s_name   => 'XLA'
725          ,p_msg_name       => 'XLA_COMMON_ERROR'
726          ,p_token_1        => 'ERROR'
727          ,p_value_1        =>
728          'The developer has to give the event number greater than 0 when create new event for gapless processing.'
729          ,p_token_2        => 'LOCATION'
730          ,p_value_2        => 'xla_events_pkg.create_event');
731    END IF;
732    ----------------------------------------------------------------------------
733    -- If the PK is NULL, create an entity as well as the event. Otherwise,
734    -- add a new event to the entity.
735    ----------------------------------------------------------------------------
736    IF g_entity_id IS NULL THEN
737       l_return_id:=create_entity_event
738                (p_event_source_info      => p_event_source_info
739                ,p_valuation_method       => p_valuation_method
740                ,p_event_type_code        => p_event_type_code
741                ,p_event_date             => l_event_date
742                ,p_event_status_code      => p_event_status_code
743                ,p_process_status_code    => C_INTERNAL_UNPROCESSED
744                ,p_event_number           => p_event_number
745                ,p_transaction_date       => p_transaction_date
746                ,p_reference_info         => p_reference_info
747                ,p_budgetary_control_flag => p_budgetary_control_flag);
748    ELSIF NVL(g_transaction_number,L_CONSTANT) <>
749              NVL(p_event_source_info.transaction_number,L_CONSTANT) THEN
750       update_entity_trx_number
751          (p_transaction_number       => p_event_source_info.transaction_number);
752 
753       l_return_id:=add_entity_event
754                (p_entity_id              => g_entity_id
755                ,p_application_id         => p_event_source_info.application_id
756                ,p_ledger_id              => p_event_source_info.ledger_id
757                ,p_legal_entity_id        => p_event_source_info.legal_entity_id
758                ,p_event_type_code        => p_event_type_code
759                ,p_event_date             => l_event_date
760                ,p_event_status_code      => p_event_status_code
761                ,p_process_status_code    => C_INTERNAL_UNPROCESSED
762                ,p_event_number           => p_event_number
763                ,p_transaction_date       => p_transaction_date
764                ,p_reference_info         => p_reference_info
765                ,p_budgetary_control_flag => p_budgetary_control_flag);
766    ELSE
767       l_return_id:=add_entity_event
768                (p_entity_id              => g_entity_id
769                ,p_application_id         => p_event_source_info.application_id
770                ,p_ledger_id              => p_event_source_info.ledger_id
771                ,p_legal_entity_id        => p_event_source_info.legal_entity_id
772                ,p_event_type_code        => p_event_type_code
773                ,p_event_date             => l_event_date
774                ,p_event_status_code      => p_event_status_code
775                ,p_process_status_code    => C_INTERNAL_UNPROCESSED
776                ,p_event_number           => p_event_number
777                ,p_transaction_date       => p_transaction_date
778                ,p_reference_info         => p_reference_info
779                ,p_budgetary_control_flag => p_budgetary_control_flag);
780    END IF;
781    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
782       trace
783          (p_msg      => 'end of procedure create_event'
784          ,p_level    => C_LEVEL_PROCEDURE
785          ,p_module   =>l_log_module);
786       trace
787          (p_msg      => 'return value is:'||to_char(l_return_id)
788          ,p_level    => C_LEVEL_PROCEDURE
789          ,p_module   =>l_log_module);
790    END IF;
791    RETURN l_return_id;
792 
793 EXCEPTION
794 WHEN xla_exceptions_pkg.application_exception THEN
795    ROLLBACK to SAVEPOINT before_event_creation;
796    RAISE;
797 WHEN OTHERS                                   THEN
798    ROLLBACK to SAVEPOINT before_event_creation;
799    xla_exceptions_pkg.raise_message
800       (p_location => 'xla_events_pkg.create_event (fn)');
801 END create_event;
802 
803 
804 --=============================================================================
805 --
806 -- This API is specific for MANUAL events. Bug # 2899700.
807 --
808 --=============================================================================
809 
810 FUNCTION create_manual_event
811    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
812    ,p_event_type_code              IN  VARCHAR2
813    ,p_event_date                   IN  DATE
814    ,p_event_status_code            IN  VARCHAR2
815    ,p_process_status_code          IN  VARCHAR2
816    ,p_event_number                 IN  INTEGER          DEFAULT NULL
817    ,p_transaction_date             IN  DATE        DEFAULT NULL
818    ,p_reference_info               IN  xla_events_pub_pkg.t_event_reference_info DEFAULT NULL
819    ,p_budgetary_control_flag       IN  VARCHAR2)
820 RETURN INTEGER IS
821 l_event_date                  DATE;
822 L_CONSTANT        CONSTANT    VARCHAR2(30) := '##UNDEFINED##'; --chr(12);
823 l_log_module                VARCHAR2(240);
824 l_return_id INTEGER;
825 BEGIN
826   IF g_log_enabled THEN
827     l_log_module := C_DEFAULT_MODULE||'.create_manual_event';
828   END IF;
829   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
830      trace
831          (p_msg      => 'BEGIN of procedure create_manual_event'
832          ,p_level    => C_LEVEL_PROCEDURE
833          ,p_module   =>l_log_module);
834      trace
835          (p_msg      => 'source_application_id = '||
836                         p_event_source_info.source_application_id
837          ,p_level    => C_LEVEL_PROCEDURE
838          ,p_module   =>l_log_module);
839      trace
840          (p_msg      => 'application_id = '||p_event_source_info.application_id
841          ,p_level    => C_LEVEL_PROCEDURE
842          ,p_module   =>l_log_module);
843      trace
844          (p_msg      => 'legal_entity_id = '||
845                         p_event_source_info.legal_entity_id
846          ,p_level    => C_LEVEL_PROCEDURE
847          ,p_module   =>l_log_module);
848      trace
849          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
850          ,p_level    => C_LEVEL_PROCEDURE
851          ,p_module   =>l_log_module);
852      trace
853          (p_msg      => 'entity_type_code = '||
854                         p_event_source_info.entity_type_code
855          ,p_level    => C_LEVEL_PROCEDURE
856          ,p_module   =>l_log_module);
857      trace
858          (p_msg      => 'transaction_number = '||
859                         p_event_source_info.transaction_number
860          ,p_level    => C_LEVEL_PROCEDURE
861          ,p_module   =>l_log_module);
862      trace
863          (p_msg      => 'source_id_int_1 = '||
864                         p_event_source_info.source_id_int_1
865          ,p_level    => C_LEVEL_PROCEDURE
866          ,p_module   =>l_log_module);
867      trace
868          (p_msg      => 'source_id_int_2 = '||
869                         p_event_source_info.source_id_int_2
870          ,p_level    => C_LEVEL_PROCEDURE
871          ,p_module   =>l_log_module);
872      trace
873          (p_msg      => 'source_id_int_3 = '||
874                         p_event_source_info.source_id_int_3
875          ,p_level    => C_LEVEL_PROCEDURE
876          ,p_module   =>l_log_module);
877      trace
878          (p_msg      => 'source_id_int_4 = '||
879                         p_event_source_info.source_id_int_4
880          ,p_level    => C_LEVEL_PROCEDURE
881          ,p_module   =>l_log_module);
882      trace
883          (p_msg      => 'source_id_char_1 = '||
884                         p_event_source_info.source_id_char_1
885          ,p_level    => C_LEVEL_PROCEDURE
886          ,p_module   =>l_log_module);
887      trace
888          (p_msg      => 'source_id_char_2 = '||
889                         p_event_source_info.source_id_char_2
890          ,p_level    => C_LEVEL_PROCEDURE
891          ,p_module   =>l_log_module);
892      trace
893          (p_msg      => 'source_id_char_3 = '||
894                         p_event_source_info.source_id_char_3
895          ,p_level    => C_LEVEL_PROCEDURE
896          ,p_module   =>l_log_module);
897      trace
898          (p_msg      => 'source_id_char_4 = '||
899                         p_event_source_info.source_id_char_4
900          ,p_level    => C_LEVEL_PROCEDURE
901          ,p_module   =>l_log_module);
902      trace
903          (p_msg      => 'p_event_type_code = '||p_event_type_code
904          ,p_level    => C_LEVEL_PROCEDURE
905          ,p_module   =>l_log_module);
906      trace
907          (p_msg      => 'p_event_date = '||p_event_date
908          ,p_level    => C_LEVEL_PROCEDURE
909          ,p_module   =>l_log_module);
910      trace
911          (p_msg      => 'p_event_status_code = '||p_event_status_code
912          ,p_level    => C_LEVEL_PROCEDURE
913          ,p_module   =>l_log_module);
914      trace
915          (p_msg      => 'p_process_status_code = '||p_process_status_code
916          ,p_level    => C_LEVEL_PROCEDURE
917          ,p_module   =>l_log_module);
918      trace
919          (p_msg      => 'p_event_number = '||p_event_number
920          ,p_level    => C_LEVEL_PROCEDURE
921          ,p_module   =>l_log_module);
922      trace
923          (p_msg      => 'p_budgetary_control_flag = '||p_budgetary_control_flag
924          ,p_level    => C_LEVEL_PROCEDURE
925          ,p_module   =>l_log_module);
926      trace
927          (p_msg      => 'security_id_int_1 = '||
928                         xla_events_pub_pkg.g_security.security_id_int_1
929          ,p_level    => C_LEVEL_PROCEDURE
930          ,p_module   =>l_log_module);
931      trace
932          (p_msg      => 'security_id_int_2 = '||
933                         xla_events_pub_pkg.g_security.security_id_int_2
934          ,p_level    => C_LEVEL_PROCEDURE
935          ,p_module   =>l_log_module);
936      trace
937          (p_msg      => 'security_id_int_3 = '||
938                         xla_events_pub_pkg.g_security.security_id_int_3
939          ,p_level    => C_LEVEL_PROCEDURE
940          ,p_module   =>l_log_module);
941      trace
942          (p_msg      => 'security_id_char_1 = '||
943                         xla_events_pub_pkg.g_security.security_id_char_1
944          ,p_level    => C_LEVEL_PROCEDURE
945          ,p_module   =>l_log_module);
946      trace
947          (p_msg      => 'security_id_char_2 = '||
948                         xla_events_pub_pkg.g_security.security_id_char_2
949          ,p_level    => C_LEVEL_PROCEDURE
950          ,p_module   =>l_log_module);
951      trace
952          (p_msg      => 'security_id_char_3 = '||
953                         xla_events_pub_pkg.g_security.security_id_char_3
954          ,p_level    => C_LEVEL_PROCEDURE
955          ,p_module   =>l_log_module);
956   END IF;
957 
958    SAVEPOINT before_event_creation;
959    g_action := C_EVENT_CREATE;
960 
961    ----------------------------------------------------------------------------
962    -- Following sets the Security Context for the execution. This enables the
963    -- event API to respect the transaction security.
964    ----------------------------------------------------------------------------
965    xla_security_pkg.set_security_context(p_event_source_info.application_id);
966 
967    ----------------------------------------------------------------------------
968    -- check to see the API is not called for regular events
969    ----------------------------------------------------------------------------
970    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
971       g_context := C_MANUAL_EVENT_CONTEXT;
972    ELSE
973       xla_exceptions_pkg.raise_message
974          (p_appli_s_name   => 'XLA'
975          ,p_msg_name       => 'XLA_COMMON_ERROR'
976          ,p_token_1        => 'ERROR'
977          ,p_value_1        => 'For REGULAR events this API cannot be called'
978          ,p_token_2        => 'LOCATION'
979          ,p_value_2        => 'xla_events_pkg.get_array_event_info (fn)');
980    END IF;
981 
982    ----------------------------------------------------------------------------
983    -- perform specific validations for 'creating events'
984    ----------------------------------------------------------------------------
985    IF p_event_type_code IS NULL THEN
986       xla_exceptions_pkg.raise_message
987          (p_appli_s_name   => 'XLA'
988          ,p_msg_name       => 'XLA_COMMON_ERROR'
989          ,p_token_1        => 'ERROR'
990          ,p_value_1        =>
991          'Event Type Code has an invalid value. It cannot have a NULL value.'
992          ,p_token_2        => 'LOCATION'
993          ,p_value_2        => 'xla_events_pkg.create_manual_event');
994    END IF;
995    IF p_event_date IS NULL THEN
996       xla_exceptions_pkg.raise_message
997          (p_appli_s_name   => 'XLA'
998          ,p_msg_name       => 'XLA_COMMON_ERROR'
999          ,p_token_1        => 'ERROR'
1000          ,p_value_1        => 'Event Date cannot have a NULL value.'
1001          ,p_token_2        => 'LOCATION'
1002          ,p_value_2        => 'xla_events_pkg.create_manual_event');
1003    END IF;
1004    IF p_event_status_code IS NULL THEN
1005       xla_exceptions_pkg.raise_message
1006          (p_appli_s_name   => 'XLA'
1007          ,p_msg_name       => 'XLA_COMMON_ERROR'
1008          ,p_token_1        => 'ERROR'
1009          ,p_value_1        => 'Event Status Code cannot have a NULL value.'
1010          ,p_token_2        => 'LOCATION'
1011          ,p_value_2        => 'xla_events_pkg.create_manual_event');
1012    END IF;
1013    IF p_process_status_code IS NULL THEN
1014       xla_exceptions_pkg.raise_message
1015          (p_appli_s_name   => 'XLA'
1016          ,p_msg_name       => 'XLA_COMMON_ERROR'
1017          ,p_token_1        => 'ERROR'
1018          ,p_value_1        => 'Process Status Code cannot have a NULL value.'
1019          ,p_token_2        => 'LOCATION'
1020          ,p_value_2        => 'xla_events_pkg.create_manual_event');
1021    END IF;
1022 
1023    ----------------------------------------------------------------------------
1024    -- truncate date
1025    ----------------------------------------------------------------------------
1026    l_event_date := TRUNC(p_event_date);
1027 
1028    ----------------------------------------------------------------------------
1029    -- Validate parameters
1030    ----------------------------------------------------------------------------
1031    validate_params
1032       (p_source_info             => p_event_source_info
1033       ,p_event_type_code         => p_event_type_code
1034       ,p_event_status_code       => p_event_status_code
1035       ,p_process_status_code     => p_process_status_code);
1036 
1037    ----------------------------------------------------------------------------
1038    -- Get document PK.
1039    ----------------------------------------------------------------------------
1040    cache_entity_info
1041       (p_source_info      => p_event_source_info
1042       ,p_valuation_method => NULL
1043       ,p_event_id         => NULL);
1044 
1045    ----------------------------------------------------------------------------
1046    -- If the PK is NULL, create an entity as well as the event. Otherwise,
1047    -- add a new event to the entity.
1048    ----------------------------------------------------------------------------
1049    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1050       trace
1051          (p_msg      => 'g_entity_id = '||g_entity_id
1052          ,p_level    => C_LEVEL_STATEMENT
1053          ,p_module   =>l_log_module);
1054    END IF;
1055 
1056    IF g_entity_id IS NULL THEN
1057       l_return_id:=create_entity_event
1058                (p_event_source_info      => p_event_source_info
1059                ,p_valuation_method        => NULL
1060                ,p_event_type_code        => p_event_type_code
1061                ,p_event_date             => l_event_date
1062                ,p_event_status_code      => p_event_status_code
1063                ,p_process_status_code    => p_process_status_code
1064                ,p_event_number           => p_event_number
1065                ,p_transaction_date       => p_transaction_date
1066                ,p_reference_info         => p_reference_info
1067                ,p_budgetary_control_flag => p_budgetary_control_flag);
1068    ELSIF NVL(g_transaction_number,L_CONSTANT) <>
1069              NVL(p_event_source_info.transaction_number,L_CONSTANT) THEN
1070       update_entity_trx_number
1071          (p_transaction_number       => p_event_source_info.transaction_number);
1072 
1073       l_return_id:=add_entity_event
1074                (p_entity_id              => g_entity_id
1075                ,p_application_id         => p_event_source_info.application_id
1076                ,p_ledger_id              => p_event_source_info.ledger_id
1077                ,p_legal_entity_id        => p_event_source_info.legal_entity_id
1078                ,p_event_type_code        => p_event_type_code
1079                ,p_event_date             => l_event_date
1080                ,p_event_status_code      => p_event_status_code
1081                ,p_process_status_code    => p_process_status_code
1082                ,p_event_number           => p_event_number
1083                ,p_transaction_date       => p_transaction_date
1084                ,p_reference_info         => p_reference_info
1085                ,p_budgetary_control_flag => p_budgetary_control_flag);
1086    ELSE
1087       l_return_id:=add_entity_event
1088                (p_entity_id              => g_entity_id
1089                ,p_application_id         => p_event_source_info.application_id
1090                ,p_ledger_id              => p_event_source_info.ledger_id
1091                ,p_legal_entity_id        => p_event_source_info.legal_entity_id
1092                ,p_event_type_code        => p_event_type_code
1093                ,p_event_date             => l_event_date
1094                ,p_event_status_code      => p_event_status_code
1095                ,p_process_status_code    => p_process_status_code
1096                ,p_event_number           => p_event_number
1097                ,p_transaction_date       => p_transaction_date
1098                ,p_reference_info         => p_reference_info
1099                ,p_budgetary_control_flag => p_budgetary_control_flag);
1100    END IF;
1101    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1102       trace
1103          (p_msg      => 'end of procedure create_manual_event'
1104          ,p_level    => C_LEVEL_PROCEDURE
1105          ,p_module   =>l_log_module);
1106       trace
1107          (p_msg      => 'return value is:'||to_char(l_return_id)
1108          ,p_level    => C_LEVEL_PROCEDURE
1109          ,p_module   =>l_log_module);
1110    END IF;
1111    RETURN l_return_id;
1112 EXCEPTION
1113 WHEN xla_exceptions_pkg.application_exception THEN
1114    ROLLBACK to SAVEPOINT before_event_creation;
1115    RAISE;
1116 WHEN OTHERS                                   THEN
1117    ROLLBACK to SAVEPOINT before_event_creation;
1118    xla_exceptions_pkg.raise_message
1119       (p_location => 'xla_events_pkg.create_manual_event (fn)');
1120 END create_manual_event;
1121 
1122 
1123 
1124 --=============================================================================
1125 --
1126 -- For MANUAL events this API cannot be called.
1127 --
1128 --=============================================================================
1129 
1130 PROCEDURE update_event_status
1131    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
1132    ,p_valuation_method             IN  VARCHAR2
1133    ,p_event_class_code             IN  VARCHAR2   DEFAULT NULL
1134    ,p_event_type_code              IN  VARCHAR2   DEFAULT NULL
1135    ,p_event_date                   IN  DATE       DEFAULT NULL
1136    ,p_event_status_code            IN  VARCHAR2) IS
1137 l_event_date              DATE;
1138 l_array_events            t_number_tbl;
1139 l_array_event_status      t_event_status_tbl;
1140 l_array_on_hold_flag      t_on_hold_flag_tbl;
1141 l_temp_event_number       xla_events.event_number%type;
1142 l_array_event_number      t_event_number_tbl;
1143 l_log_module                VARCHAR2(240);
1144 BEGIN
1145   IF g_log_enabled THEN
1146     l_log_module := C_DEFAULT_MODULE||'.update_event_status';
1147   END IF;
1148   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1149      trace
1150          (p_msg      => 'BEGIN of procedure update_event_status'
1151          ,p_level    => C_LEVEL_PROCEDURE
1152          ,p_module   =>l_log_module);
1153      trace
1154          (p_msg      => 'source_application_id = '||
1155                         p_event_source_info.source_application_id
1156          ,p_level    => C_LEVEL_PROCEDURE
1157          ,p_module   =>l_log_module);
1158      trace
1159          (p_msg      => 'application_id = '||p_event_source_info.application_id
1160          ,p_level    => C_LEVEL_PROCEDURE
1161          ,p_module   =>l_log_module);
1162      trace
1163          (p_msg      => 'legal_entity_id = '||
1164                         p_event_source_info.legal_entity_id
1165          ,p_level    => C_LEVEL_PROCEDURE
1166          ,p_module   =>l_log_module);
1167      trace
1168          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
1169          ,p_level    => C_LEVEL_PROCEDURE
1170          ,p_module   =>l_log_module);
1171      trace
1172          (p_msg      => 'entity_type_code = '||
1173                         p_event_source_info.entity_type_code
1174          ,p_level    => C_LEVEL_PROCEDURE
1175          ,p_module   =>l_log_module);
1176      trace
1177          (p_msg      => 'transaction_number = '||
1178                         p_event_source_info.transaction_number
1179          ,p_level    => C_LEVEL_PROCEDURE
1180          ,p_module   =>l_log_module);
1181      trace
1182          (p_msg      => 'source_id_int_1 = '||
1183                         p_event_source_info.source_id_int_1
1184          ,p_level    => C_LEVEL_PROCEDURE
1185          ,p_module   =>l_log_module);
1186      trace
1187          (p_msg      => 'source_id_int_2 = '||
1188                         p_event_source_info.source_id_int_2
1189          ,p_level    => C_LEVEL_PROCEDURE
1190          ,p_module   =>l_log_module);
1191      trace
1192          (p_msg      => 'source_id_int_3 = '||
1193                         p_event_source_info.source_id_int_3
1194          ,p_level    => C_LEVEL_PROCEDURE
1195          ,p_module   =>l_log_module);
1196      trace
1197          (p_msg      => 'source_id_int_4 = '||
1198                         p_event_source_info.source_id_int_4
1199          ,p_level    => C_LEVEL_PROCEDURE
1200          ,p_module   =>l_log_module);
1201      trace
1202          (p_msg      => 'source_id_char_1 = '||
1203                         p_event_source_info.source_id_char_1
1204          ,p_level    => C_LEVEL_PROCEDURE
1205          ,p_module   =>l_log_module);
1206      trace
1207          (p_msg      => 'source_id_char_2 = '||
1208                         p_event_source_info.source_id_char_2
1209          ,p_level    => C_LEVEL_PROCEDURE
1210          ,p_module   =>l_log_module);
1211      trace
1212          (p_msg      => 'source_id_char_3 = '||
1213                         p_event_source_info.source_id_char_3
1214          ,p_level    => C_LEVEL_PROCEDURE
1215          ,p_module   =>l_log_module);
1216      trace
1217          (p_msg      => 'source_id_char_4 = '||
1218                         p_event_source_info.source_id_char_4
1219          ,p_level    => C_LEVEL_PROCEDURE
1220          ,p_module   =>l_log_module);
1221      trace
1222          (p_msg      => 'p_event_class_code = '||p_event_class_code
1223          ,p_level    => C_LEVEL_PROCEDURE
1224          ,p_module   =>l_log_module);
1225      trace
1226          (p_msg      => 'p_event_type_code = '||p_event_type_code
1227          ,p_level    => C_LEVEL_PROCEDURE
1228          ,p_module   =>l_log_module);
1229      trace
1230          (p_msg      => 'p_event_date = '||p_event_date
1231          ,p_level    => C_LEVEL_PROCEDURE
1232          ,p_module   =>l_log_module);
1233      trace
1234          (p_msg      => 'p_event_status_code = '||p_event_status_code
1235          ,p_level    => C_LEVEL_PROCEDURE
1236          ,p_module   =>l_log_module);
1237      trace
1238          (p_msg      => 'security_id_int_1 = '||
1239                         xla_events_pub_pkg.g_security.security_id_int_1
1240          ,p_level    => C_LEVEL_PROCEDURE
1241          ,p_module   =>l_log_module);
1242      trace
1243          (p_msg      => 'security_id_int_2 = '||
1244                         xla_events_pub_pkg.g_security.security_id_int_2
1245          ,p_level    => C_LEVEL_PROCEDURE
1246          ,p_module   =>l_log_module);
1247      trace
1248          (p_msg      => 'security_id_int_3 = '||
1249                         xla_events_pub_pkg.g_security.security_id_int_3
1250          ,p_level    => C_LEVEL_PROCEDURE
1251          ,p_module   =>l_log_module);
1252      trace
1253          (p_msg      => 'security_id_char_1 = '||
1254                         xla_events_pub_pkg.g_security.security_id_char_1
1255          ,p_level    => C_LEVEL_PROCEDURE
1256          ,p_module   =>l_log_module);
1257      trace
1258          (p_msg      => 'security_id_char_2 = '||
1259                         xla_events_pub_pkg.g_security.security_id_char_2
1260          ,p_level    => C_LEVEL_PROCEDURE
1261          ,p_module   =>l_log_module);
1262      trace
1263          (p_msg      => 'security_id_char_3 = '||
1264                         xla_events_pub_pkg.g_security.security_id_char_3
1265          ,p_level    => C_LEVEL_PROCEDURE
1266          ,p_module   =>l_log_module);
1267      trace
1268          (p_msg      => 'valuation_method = '||p_valuation_method
1269          ,p_level    => C_LEVEL_PROCEDURE
1270          ,p_module   =>l_log_module);
1271 
1272   END IF;
1273 
1274    SAVEPOINT before_event_update;
1275    g_action := C_EVENT_UPDATE;
1276 
1277    ----------------------------------------------------------------------------
1278    -- Following sets the Security Context for the execution. This enables the
1279    -- event API to respect the transaction security.
1280    ----------------------------------------------------------------------------
1281    xla_security_pkg.set_security_context(p_event_source_info.application_id);
1282 
1283    ----------------------------------------------------------------------------
1284    -- check to see the API is not called for manual events
1285    ----------------------------------------------------------------------------
1286    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
1287       xla_exceptions_pkg.raise_message
1288          (p_appli_s_name   => 'XLA'
1289          ,p_msg_name       => 'XLA_COMMON_ERROR'
1290          ,p_token_1        => 'ERROR'
1291          ,p_value_1        => 'For MANUAL events this API cannot be called'
1292          ,p_token_2        => 'LOCATION'
1293          ,p_value_2        => 'xla_events_pkg.get_array_event_info (fn)');
1294    ELSE
1295       g_context := C_REGULAR_EVENT_CONTEXT;
1296    END IF;
1297 
1298    ----------------------------------------------------------------------------
1299    -- perform validations specific to 'updating event's status'
1300    ----------------------------------------------------------------------------
1301    IF p_event_status_code IS NULL THEN
1302       xla_exceptions_pkg.raise_message
1303          (p_appli_s_name   => 'XLA'
1304          ,p_msg_name       => 'XLA_COMMON_ERROR'
1305          ,p_token_1        => 'ERROR'
1306          ,p_value_1        => 'Event Status Code cannot have a NULL value.'
1307          ,p_token_2        => 'LOCATION'
1308          ,p_value_2        => 'xla_events_pkg.update_event_status');
1309    END IF;
1310 
1311    ----------------------------------------------------------------------------
1312    -- truncate date
1313    ----------------------------------------------------------------------------
1314    l_event_date := TRUNC(p_event_date);
1315 
1316    ----------------------------------------------------------------------------
1317    -- Validate parameters
1318    ----------------------------------------------------------------------------
1319    validate_params
1320       (p_source_info          => p_event_source_info
1321       ,p_event_class_code     => p_event_class_code
1322       ,p_event_type_code      => p_event_type_code
1323       ,p_event_status_code    => p_event_status_code
1324       ,p_process_status_code  => C_INTERNAL_UNPROCESSED);
1325 
1326    ----------------------------------------------------------------------------
1327    -- Get document PK
1328    ----------------------------------------------------------------------------
1329    cache_entity_info
1330       (p_source_info      => p_event_source_info
1331       ,p_valuation_method => p_valuation_method
1332       ,p_event_id         => NULL);
1333 
1334    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1335       trace
1336          (p_msg      => 'gapless_flag = '||g_gapless_flag
1337          ,p_level    => C_LEVEL_STATEMENT
1338          ,p_module   =>l_log_module);
1339       trace
1340          (p_msg      => 'g_entity_id = '||to_char(g_entity_id)
1341          ,p_level    => C_LEVEL_STATEMENT
1342          ,p_module   =>l_log_module);
1343    END IF;
1344 
1345    ----------------------------------------------------------------------------
1346    -- Check entity existency
1347    ----------------------------------------------------------------------------
1348    IF  g_entity_id IS NULL  THEN
1349       xla_exceptions_pkg.raise_message
1350          (p_appli_s_name   => 'XLA'
1351          ,p_msg_name       => 'XLA_COMMON_ERROR'
1352          ,p_token_1        => 'ERROR'
1353          ,p_value_1        => 'No event exists for the document represented '||
1354                               'by the given source information.'
1355          ,p_token_2        => 'LOCATION'
1356          ,p_value_2        => 'xla_events_pkg.update_event_status');
1357    END IF;
1358 
1359    ----------------------------------------------------------------------------
1360    -- Fetching event ids for the events that are going to be updated
1361    ----------------------------------------------------------------------------
1362    if(g_gapless_flag='N') then
1363      SELECT event_id     BULK COLLECT
1364        INTO l_array_events
1365        FROM xla_events
1366       WHERE event_status_code    <> xla_events_pub_pkg.C_EVENT_PROCESSED
1367         AND event_date           = NVL(l_event_date, event_date)
1368         AND event_type_code      = NVL(p_event_type_code, event_type_code)
1369         AND entity_id            = g_entity_id
1370         AND event_type_code  IN
1371                (SELECT event_type_code
1372                  FROM   xla_event_types_b
1373                  WHERE  application_id      = g_application_id
1374                    AND  entity_code         = g_entity_type_code
1375                    AND  event_class_code    = NVL(p_event_class_code,
1376                                                   event_class_code));
1377    else
1378      SELECT event_id,
1379             event_status_code,
1380             on_hold_flag,
1381             event_number     BULK COLLECT
1382        INTO l_array_events,
1383             l_array_event_status,
1384             l_array_on_hold_flag,
1385             l_array_event_number
1386        FROM xla_events
1387       WHERE event_status_code    <> xla_events_pub_pkg.C_EVENT_PROCESSED
1388         AND event_date           = NVL(l_event_date, event_date)
1389         AND event_type_code      = NVL(p_event_type_code, event_type_code)
1390         AND entity_id            = g_entity_id
1391         AND event_type_code  IN
1392                (SELECT event_type_code
1393                  FROM   xla_event_types_b
1394                  WHERE  application_id      = g_application_id
1395                    AND  entity_code         = g_entity_type_code
1396                    AND  event_class_code    = NVL(p_event_class_code,
1397                                                   event_class_code))
1398      Order by event_number;
1399    end if;
1400    ----------------------------------------------------------------------------
1401    -- Call routine to delete errors/JEs related to the event bug # 2701681
1402    ----------------------------------------------------------------------------
1403 
1404    FOR i IN 1..l_array_events.COUNT LOOP
1405       xla_journal_entries_pkg.delete_journal_entries
1406          (p_event_id                  => l_array_events(i)
1407          ,p_application_id            => g_application_id);
1408    END LOOP;
1409 
1410    ----------------------------------------------------------------------------
1411    -- Actual status update
1412    ----------------------------------------------------------------------------
1413    FORAll i IN 1..l_array_events.COUNT
1414       UPDATE xla_events
1415          SET event_status_code      = p_event_status_code
1416             ,process_status_code    = C_INTERNAL_UNPROCESSED
1417             ,last_update_date       = sysdate
1418             ,last_updated_by        = xla_environment_pkg.g_usr_id
1419             ,last_update_login      = xla_environment_pkg.g_login_id
1420             ,program_update_date    = sysdate
1421             ,program_application_id = xla_environment_pkg.g_prog_appl_id
1422             ,program_id             = xla_environment_pkg.g_prog_id
1423             ,request_id             = xla_environment_pkg.g_Req_Id
1424          WHERE event_id             = l_array_events(i);
1425    if(g_gapless_flag='Y') then
1426 
1427    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1428       trace
1429          (p_msg      => 'p_event_status_code:'||p_event_status_code
1430          ,p_level    => C_LEVEL_STATEMENT
1431          ,p_module   =>l_log_module);
1432    END IF;
1433 
1434      if(p_event_status_code='I') then
1435         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1436           trace
1437                (p_msg      => 'l_array_event_status(1):'||
1438                               l_array_event_status(1)
1439                ,p_level    => C_LEVEL_STATEMENT
1440                ,p_module   =>l_log_module);
1441           trace
1442                (p_msg      => ' l_array_on_hold_flag(1):'||
1443                               l_array_on_hold_flag(1)
1444                ,p_level    => C_LEVEL_STATEMENT
1445                ,p_module   =>l_log_module);
1446         end if;
1447         if(l_array_event_status(1)<>'I' and l_array_on_hold_flag(1)='N') then
1448             update xla_events
1449                set on_hold_flag='Y'
1450              where entity_id=g_entity_id
1451                    and event_number >l_array_event_number(1)
1452                    and on_hold_flag='N';
1453         end if;
1454      else
1455        FOR i IN 1..l_array_events.COUNT loop
1456          if(l_array_on_hold_flag(i)='Y') then
1457            exit;
1458          elsif (l_array_event_status(i)='I') then
1459          -- a gap is filled
1460            IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1461              trace
1462                   (p_msg      => 'l_array_event_status(i) is I, i is:'||
1463                                  to_char(i)
1464                   ,p_level    => C_LEVEL_STATEMENT
1465                   ,p_module   =>l_log_module);
1466              trace
1467                   (p_msg      => ' l_array_event_number(i):'||
1468                                  to_char(l_array_event_number(i))
1469                   ,p_level    => C_LEVEL_STATEMENT
1470                   ,p_module   =>l_log_module);
1471            end if;
1472 
1473            SELECT event_status_code,  event_number     BULK COLLECT
1474              INTO g_gapless_array_event_status, g_gapless_event_number
1475              FROM xla_events
1476             Where entity_id            = g_entity_id
1477                   and event_number>l_array_event_number(i)
1478             Order by event_number;
1479 
1480            l_temp_event_number:=l_array_event_number(i)+1;
1481            For j in 1..g_gapless_event_number.COUNT loop
1482              if(g_gapless_event_number(j)=l_temp_event_number
1483                       and g_gapless_array_event_status(j)<>'I') then
1484                l_temp_event_number:=l_temp_event_number+1;
1485              else
1486                exit;
1487              end if;
1488            end loop;
1489            --l_temp_event_number is the next gap
1490            -- update the on_hold_flag of event between l_array_event_number(i)
1491            -- and --l_temp_event_number+1
1492            IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1493              trace
1494                   (p_msg      => 'l_temp_event_number:'||
1495                                  to_char(l_temp_event_number)
1496                   ,p_level    => C_LEVEL_STATEMENT
1497                   ,p_module   =>l_log_module);
1498            end if;
1499 
1500            update xla_events
1501               set on_hold_flag='N'
1502             where entity_id=g_entity_id
1503                   and event_number >l_array_event_number(i)
1504                   and event_number <l_temp_event_number+1;
1505            exit;
1506          end if;
1507        end loop;
1508      end if;
1509    end if;
1510 
1511   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1512     trace
1513          (p_msg      => 'end of procedure update_event_status'
1514          ,p_level    => C_LEVEL_PROCEDURE
1515          ,p_module   =>l_log_module);
1516   end if;
1517 EXCEPTION
1518 WHEN xla_exceptions_pkg.application_exception THEN
1519    ROLLBACK to SAVEPOINT before_event_update;
1520    RAISE;
1521 WHEN OTHERS                                   THEN
1522    ROLLBACK to SAVEPOINT before_event_update;
1523    xla_exceptions_pkg.raise_message
1524       (p_location => 'xla_events_pkg.update_event_status');
1525 END update_event_status;
1526 
1527 
1528 --=============================================================================
1529 --
1530 --  For MANUAL events this API cannot be called.
1531 --
1532 --=============================================================================
1533 
1534 PROCEDURE update_event
1535    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
1536    ,p_valuation_method             IN  VARCHAR2
1537    ,p_event_id                     IN  INTEGER
1538    ,p_event_type_code              IN  VARCHAR2   DEFAULT NULL
1539    ,p_event_date                   IN  DATE       DEFAULT NULL
1540    ,p_event_status_code            IN  VARCHAR2   DEFAULT NULL
1541    ,p_transaction_date             IN  DATE       DEFAULT NULL
1542    ,p_event_number                 IN  INTEGER    DEFAULT NULL
1543    ,p_reference_info               IN  xla_events_pub_pkg.t_event_reference_info
1544                                        DEFAULT NULL
1545    ,p_overwrite_event_num          IN  VARCHAR2   DEFAULT 'N'
1546    ,p_overwrite_ref_info           IN  VARCHAR2   DEFAULT 'N') IS
1547 l_event_date             DATE;
1548 l_process_status_code    VARCHAR2(1);
1549 l_old_event_status_code      xla_events.event_status_code%TYPE;
1550 l_old_on_hold_flag           xla_events.on_hold_flag%TYPE;
1551 l_old_event_number           xla_events.event_number%TYPE;
1552 l_event_status_code      xla_events.event_status_code%TYPE;
1553 l_on_hold_flag           xla_events.on_hold_flag%TYPE:='Y';
1554 l_temp_event_number      xla_events.event_number%type;
1555 l_log_module                VARCHAR2(240);
1556 BEGIN
1557   IF g_log_enabled THEN
1558     l_log_module := C_DEFAULT_MODULE||'.update_event';
1559   END IF;
1560   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1561      trace
1562          (p_msg      => 'BEGIN of procedure update_event'
1563          ,p_level    => C_LEVEL_PROCEDURE
1564          ,p_module   =>l_log_module);
1565      trace
1566          (p_msg      => 'source_application_id = '||
1567                         p_event_source_info.source_application_id
1568          ,p_level    => C_LEVEL_PROCEDURE
1569          ,p_module   =>l_log_module);
1570      trace
1571          (p_msg      => 'application_id = '||p_event_source_info.application_id
1572          ,p_level    => C_LEVEL_PROCEDURE
1573          ,p_module   =>l_log_module);
1574      trace
1575          (p_msg      => 'legal_entity_id = '||
1576                         p_event_source_info.legal_entity_id
1577          ,p_level    => C_LEVEL_PROCEDURE
1578          ,p_module   =>l_log_module);
1579      trace
1580          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
1581          ,p_level    => C_LEVEL_PROCEDURE
1582          ,p_module   =>l_log_module);
1583      trace
1584          (p_msg      => 'entity_type_code = '||
1585                         p_event_source_info.entity_type_code
1586          ,p_level    => C_LEVEL_PROCEDURE
1587          ,p_module   =>l_log_module);
1588      trace
1589          (p_msg      => 'transaction_number = '||
1590                         p_event_source_info.transaction_number
1591          ,p_level    => C_LEVEL_PROCEDURE
1592          ,p_module   =>l_log_module);
1593      trace
1594          (p_msg      => 'source_id_int_1 = '||
1595                         p_event_source_info.source_id_int_1
1596          ,p_level    => C_LEVEL_PROCEDURE
1597          ,p_module   =>l_log_module);
1598      trace
1599          (p_msg      => 'source_id_int_2 = '||
1600                         p_event_source_info.source_id_int_2
1601          ,p_level    => C_LEVEL_PROCEDURE
1602          ,p_module   =>l_log_module);
1603      trace
1604          (p_msg      => 'source_id_int_3 = '||
1605                         p_event_source_info.source_id_int_3
1606          ,p_level    => C_LEVEL_PROCEDURE
1607          ,p_module   =>l_log_module);
1608      trace
1609          (p_msg      => 'source_id_int_4 = '||
1610                         p_event_source_info.source_id_int_4
1611          ,p_level    => C_LEVEL_PROCEDURE
1612          ,p_module   =>l_log_module);
1613      trace
1614          (p_msg      => 'source_id_char_1 = '||
1615                         p_event_source_info.source_id_char_1
1616          ,p_level    => C_LEVEL_PROCEDURE
1617          ,p_module   =>l_log_module);
1618      trace
1619          (p_msg      => 'source_id_char_2 = '||
1620                         p_event_source_info.source_id_char_2
1621          ,p_level    => C_LEVEL_PROCEDURE
1622          ,p_module   =>l_log_module);
1623      trace
1624          (p_msg      => 'source_id_char_3 = '||
1625                         p_event_source_info.source_id_char_3
1626          ,p_level    => C_LEVEL_PROCEDURE
1627          ,p_module   =>l_log_module);
1628      trace
1629          (p_msg      => 'source_id_char_4 = '||
1630                         p_event_source_info.source_id_char_4
1631          ,p_level    => C_LEVEL_PROCEDURE
1632          ,p_module   =>l_log_module);
1633      trace
1634          (p_msg      => 'p_event_id = '||p_event_id
1635          ,p_level    => C_LEVEL_PROCEDURE
1636          ,p_module   =>l_log_module);
1637      trace
1638          (p_msg      => 'p_event_type_code = '||p_event_type_code
1639          ,p_level    => C_LEVEL_PROCEDURE
1640          ,p_module   =>l_log_module);
1641      trace
1642          (p_msg      => 'p_event_date = '||p_event_date
1643          ,p_level    => C_LEVEL_PROCEDURE
1644          ,p_module   =>l_log_module);
1645      trace
1646          (p_msg      => 'p_event_status_code = '||p_event_status_code
1647          ,p_level    => C_LEVEL_PROCEDURE
1648          ,p_module   =>l_log_module);
1649      trace
1650          (p_msg      => 'p_event_number = '||p_event_number
1651          ,p_level    => C_LEVEL_PROCEDURE
1652          ,p_module   =>l_log_module);
1653      trace
1654          (p_msg      => 'p_overwrite_event_num = '||p_overwrite_event_num
1655          ,p_level    => C_LEVEL_PROCEDURE
1656          ,p_module   =>l_log_module);
1657      trace
1658          (p_msg      => 'p_overwrite_ref_info = '||p_overwrite_ref_info
1659          ,p_level    => C_LEVEL_PROCEDURE
1660          ,p_module   =>l_log_module);
1661      trace
1662          (p_msg      => 'security_id_int_1 = '||
1663                         xla_events_pub_pkg.g_security.security_id_int_1
1664          ,p_level    => C_LEVEL_PROCEDURE
1665          ,p_module   =>l_log_module);
1666      trace
1667          (p_msg      => 'security_id_int_2 = '||
1668                         xla_events_pub_pkg.g_security.security_id_int_2
1669          ,p_level    => C_LEVEL_PROCEDURE
1670          ,p_module   =>l_log_module);
1671      trace
1672          (p_msg      => 'security_id_int_3 = '||
1673                         xla_events_pub_pkg.g_security.security_id_int_3
1674          ,p_level    => C_LEVEL_PROCEDURE
1675          ,p_module   =>l_log_module);
1676      trace
1677          (p_msg      => 'security_id_char_1 = '||
1678                         xla_events_pub_pkg.g_security.security_id_char_1
1679          ,p_level    => C_LEVEL_PROCEDURE
1680          ,p_module   =>l_log_module);
1681      trace
1682          (p_msg      => 'security_id_char_2 = '||
1683                         xla_events_pub_pkg.g_security.security_id_char_2
1684          ,p_level    => C_LEVEL_PROCEDURE
1685          ,p_module   =>l_log_module);
1686      trace
1687          (p_msg      => 'security_id_char_3 = '||
1688                         xla_events_pub_pkg.g_security.security_id_char_3
1689          ,p_level    => C_LEVEL_PROCEDURE
1690          ,p_module   =>l_log_module);
1691      trace
1692          (p_msg      => 'valuation_method = '||p_valuation_method
1693          ,p_level    => C_LEVEL_PROCEDURE
1694          ,p_module   =>l_log_module);
1695   END IF;
1696 
1697    SAVEPOINT before_event_update;
1698    g_action := C_EVENT_UPDATE;
1699 
1700    ----------------------------------------------------------------------------
1701    -- Following sets the Security Context for the execution. This enables the
1702    -- event API to respect the transaction security.
1703    ----------------------------------------------------------------------------
1704    xla_security_pkg.set_security_context(p_event_source_info.application_id);
1705 
1706    ----------------------------------------------------------------------------
1707    -- check to see the API is not called for manual events
1708    ----------------------------------------------------------------------------
1709    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
1710       xla_exceptions_pkg.raise_message
1711          (p_appli_s_name   => 'XLA'
1712          ,p_msg_name       => 'XLA_COMMON_ERROR'
1713          ,p_token_1        => 'ERROR'
1714          ,p_value_1        => 'For MANUAL events this API cannot be called'
1715          ,p_token_2        => 'LOCATION'
1716          ,p_value_2        => 'xla_events_pkg.update_event');
1717    ELSE
1718       g_context := C_REGULAR_EVENT_CONTEXT;
1719    END IF;
1720 
1721    ----------------------------------------------------------------------------
1722    -- perfrom validations specific to 'updating event'
1723    ----------------------------------------------------------------------------
1724    IF  p_event_id IS NULL  THEN
1725       xla_exceptions_pkg.raise_message
1726          (p_appli_s_name   => 'XLA'
1727          ,p_msg_name       => 'XLA_COMMON_ERROR'
1728          ,p_token_1        => 'ERROR'
1729          ,p_value_1        => 'Event ID cannot have a NULL value.'
1730          ,p_token_2        => 'LOCATION'
1731          ,p_value_2        => 'xla_events_pkg.update_event');
1732    END IF;
1733 
1734 
1735    IF p_event_status_code IS NOT NULL THEN
1736       l_process_status_code := C_INTERNAL_UNPROCESSED;
1737    END IF;
1738 
1739    ----------------------------------------------------------------------------
1740    -- truncate date
1741    ----------------------------------------------------------------------------
1742    l_event_date := TRUNC(p_event_date);
1743 
1744    ----------------------------------------------------------------------------
1745    -- Validate parameters
1746    ----------------------------------------------------------------------------
1747    validate_params
1748       (p_source_info          => p_event_source_info
1749       ,p_event_type_code      => p_event_type_code
1750       ,p_event_status_code    => p_event_status_code
1751       ,p_process_status_code  => l_process_status_code);
1752 
1753    ----------------------------------------------------------------------------
1754    -- Get document PK
1755    ----------------------------------------------------------------------------
1756    cache_entity_info
1757       (p_source_info      => p_event_source_info
1758       ,p_valuation_method => p_valuation_method
1759       ,p_event_id         => p_event_id);
1760 
1761    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1762       trace
1763          (p_msg      => 'gapless_flag = '||g_gapless_flag
1764          ,p_level    => C_LEVEL_STATEMENT
1765          ,p_module   =>l_log_module);
1766       trace
1767          (p_msg      => 'g_entity_id = '||to_char(g_entity_id)
1768          ,p_level    => C_LEVEL_STATEMENT
1769          ,p_module   =>l_log_module);
1770       trace
1771          (p_msg      => 'p_overwrite_event_num:'||p_overwrite_event_num
1772          ,p_level    => C_LEVEL_STATEMENT
1773          ,p_module   =>l_log_module);
1774       trace
1775          (p_msg      => 'p_event_number:'||to_char(p_event_number)
1776          ,p_level    => C_LEVEL_STATEMENT
1777          ,p_module   =>l_log_module);
1778    END IF;
1779 
1780    ----------------------------------------------------------------------------
1781    -- Check entity existency
1782    ----------------------------------------------------------------------------
1783    IF g_entity_id IS NULL  THEN
1784       xla_exceptions_pkg.raise_message
1785          (p_appli_s_name   => 'XLA'
1786          ,p_msg_name       => 'XLA_COMMON_ERROR'
1787          ,p_token_1        => 'ERROR'
1788          ,p_value_1        => 'No event exists for the document represented '||
1789                               'by the given source information.'
1790          ,p_token_2        => 'LOCATION'
1791          ,p_value_2        => 'xla_events_pkg.update_event');
1792    END IF;
1793 
1794    if(g_gapless_flag='Y' and
1795              (p_overwrite_event_num=C_YES and
1796                             (p_event_number is null or p_event_number<1))) then
1797       xla_exceptions_pkg.raise_message
1798          (p_appli_s_name   => 'XLA'
1799          ,p_msg_name       => 'XLA_COMMON_ERROR'
1800          ,p_token_1        => 'ERROR'
1801          ,p_value_1        =>
1802          'The developer has to give the event number when change event number for gapless processing.'
1803          ,p_token_2        => 'LOCATION'
1804          ,p_value_2        => 'xla_events_pkg.update_event');
1805 
1806    end if;
1807    ----------------------------------------------------------------------------
1808    -- Following statement make sure that when event type and/or event date
1809    -- is updated, it puts the internal status back to 'Unporcessed' which is
1810    -- used (in the following statement) to call delete journal entries.
1811    -- bug # 3111204
1812    -- For this the event_status_code is left untouched becuase that status
1813    -- could have 'U/I/N' values and we do not want to change that status unless
1814    -- it comes from the input.
1815    ----------------------------------------------------------------------------
1816    IF p_event_type_code IS NOT NULL OR p_event_date IS NOT NULL THEN
1817       l_process_status_code := C_INTERNAL_UNPROCESSED;
1818    END IF;
1819 
1820    ----------------------------------------------------------------------------
1821    -- Call routine to delete errors/JEs related to the event bug # 2701681
1822    ----------------------------------------------------------------------------
1823    IF l_process_status_code = C_INTERNAL_UNPROCESSED THEN
1824       xla_journal_entries_pkg.delete_journal_entries
1825          (p_event_id                  => p_event_id
1826          ,p_application_id            => g_application_id);
1827    END IF;
1828 
1829    if(g_gapless_flag='Y' and (p_overwrite_event_num=C_YES
1830                                or p_event_status_code is not null)) then
1831      -- the on-hold-flag will be affected
1832      begin
1833        select event_status_code, on_hold_flag, event_number
1834          into l_old_event_status_code, l_old_on_hold_flag, l_old_event_number
1835          from xla_events
1836         WHERE event_id             = p_event_id
1837               AND entity_id            = g_entity_id
1838               AND event_status_code    <> xla_events_pub_pkg.C_EVENT_PROCESSED;
1839        IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1840          trace
1841               (p_msg      => 'l_old_event_status_code:'||l_old_event_status_code
1842               ,p_level    => C_LEVEL_STATEMENT
1843               ,p_module   =>l_log_module);
1844          trace
1845               (p_msg      => 'l_old_event_number:'||to_char(l_old_event_number)
1846               ,p_level    => C_LEVEL_STATEMENT
1847               ,p_module   =>l_log_module);
1848        END IF;
1849 
1850 
1851      Exception
1852        WHEN OTHERS THEN
1853          xla_exceptions_pkg.raise_message
1854            (p_appli_s_name   => 'XLA'
1855            ,p_msg_name       => 'XLA_COMMON_ERROR'
1856            ,p_token_1        => 'ERROR'
1857            ,p_value_1        =>
1858            'Unable to perform UPDATE on the event. The event ('||p_event_id ||
1859                               ') is either invalid or has been final accounted.'
1860            ,p_token_2        => 'LOCATION'
1861            ,p_value_2        => 'xla_events_pkg.update_event');
1862      END;
1863    END IF;
1864    ----------------------------------------------------------------------------
1865    -- Actual update
1866    ----------------------------------------------------------------------------
1867    UPDATE xla_events
1868       SET event_type_code       = NVL(p_event_type_code  , event_type_code)
1869          ,event_date            = NVL(l_event_date       , event_date)
1870          ,transaction_date      = NVL(p_transaction_date , transaction_date)
1871          ,event_status_code     = NVL(p_event_status_code, event_status_code)
1872          ,process_status_code   = NVL(l_process_status_code,process_status_code)
1873          ,event_number          = DECODE(p_overwrite_event_num,C_YES,
1874                           NVL(p_event_number,g_max_event_number+1),event_number)
1875          ,reference_num_1       = DECODE(p_overwrite_ref_info,C_YES,
1876                              p_reference_info.reference_num_1,reference_num_1)
1877          ,reference_num_2       = DECODE(p_overwrite_ref_info,C_YES,
1878                              p_reference_info.reference_num_2,reference_num_2)
1879          ,reference_num_3       = DECODE(p_overwrite_ref_info,C_YES,
1880                              p_reference_info.reference_num_3,reference_num_3)
1881          ,reference_num_4       = DECODE(p_overwrite_ref_info,C_YES,
1882                              p_reference_info.reference_num_4,reference_num_4)
1883          ,reference_char_1      = DECODE(p_overwrite_ref_info,C_YES,
1884                              p_reference_info.reference_char_1,reference_char_1)
1885          ,reference_char_2      = DECODE(p_overwrite_ref_info,C_YES,
1886                              p_reference_info.reference_char_2,reference_char_2)
1887          ,reference_char_3      = DECODE(p_overwrite_ref_info,C_YES,
1888                              p_reference_info.reference_char_3,reference_char_3)
1889          ,reference_char_4      = DECODE(p_overwrite_ref_info,C_YES,
1890                              p_reference_info.reference_char_4,reference_char_4)
1891          ,reference_date_1      = DECODE(p_overwrite_ref_info,C_YES,
1892                              p_reference_info.reference_date_1,reference_date_1)
1893          ,reference_date_2      = DECODE(p_overwrite_ref_info,C_YES,
1894                              p_reference_info.reference_date_2,reference_date_2)
1895          ,reference_date_3      = DECODE(p_overwrite_ref_info,C_YES,
1896                              p_reference_info.reference_date_3,reference_date_3)
1897          ,reference_date_4      = DECODE(p_overwrite_ref_info,C_YES,
1898                              p_reference_info.reference_date_4,reference_date_4)
1899          ,last_update_date      = sysdate
1900          ,last_updated_by       = xla_environment_pkg.g_usr_id
1901          ,last_update_login     = xla_environment_pkg.g_login_id
1902          ,program_update_date   = sysdate
1903          ,program_application_id= xla_environment_pkg.g_prog_appl_id
1904          ,program_id            = xla_environment_pkg.g_prog_id
1905          ,request_id            = xla_environment_pkg.g_Req_Id
1906       WHERE event_id            = p_event_id
1907         AND entity_id           = g_entity_id
1908         AND event_status_code   <> xla_events_pub_pkg.C_EVENT_PROCESSED;
1909 
1910    IF SQL%ROWCOUNT <> 1    THEN
1911       xla_exceptions_pkg.raise_message
1912          (p_appli_s_name   => 'XLA'
1913          ,p_msg_name       => 'XLA_COMMON_ERROR'
1914          ,p_token_1        => 'ERROR'
1915          ,p_value_1        =>
1916          'Unable to perform UPDATE on the event. The event ('||p_event_id ||
1917                               ') is either invalid or has been final accounted.'
1918          ,p_token_2        => 'LOCATION'
1919          ,p_value_2        => 'xla_events_pkg.update_event');
1920    END IF;
1921 
1922    if(g_gapless_flag='Y' and
1923               ((p_overwrite_event_num=C_YES
1924                        and l_old_event_number <>p_event_number)
1925                 or (p_event_status_code is not null
1926                        and p_event_status_code<>l_old_event_status_code))) then
1927    -- there are 5 cases need to be considered:
1928    -- 1. status_code change to 'I'
1929    -- 2. status_code change from 'I' to others
1930    -- 3. event_number changed
1931    -- 4. 1 and 3
1932    -- 5. 2 and 3
1933      if(p_overwrite_event_num=C_YES and l_old_event_number <>p_event_number)then
1934        if(l_old_event_number<p_event_number) then
1935          if(l_old_on_hold_flag='N') then
1936            if(l_old_event_status_code<>'I') then
1937              update xla_events
1938                 set on_hold_flag='Y'
1939               where entity_id=g_entity_id
1940                     and event_status_code<> xla_events_pub_pkg.C_EVENT_PROCESSED
1941                     and event_number>l_old_event_number;
1942            else
1943              update xla_events
1944                 set on_hold_flag='Y'
1945               where entity_id=g_entity_id
1946                     and event_id=p_event_id;
1947            end if;
1948          end if;
1949        else
1950          -- in this case, all the event > l_old_event_number must be on hold
1951          -- already and they will be still on hold event
1952          -- between l_old_event_number and p_event_number could be affected.
1953          begin
1954            select event_status_code, on_hold_flag
1955              into l_event_status_code, l_on_hold_flag
1956              from xla_events
1957             where entity_id=g_entity_id
1958                   and event_number=p_event_number-1;
1959          exception
1960            when NO_DATA_FOUND then
1961              if(p_event_number=1) then
1962                l_on_hold_flag:='N';
1963                l_event_status_code:='U';
1964              else
1965                l_on_hold_flag:='Y';
1966              end if;
1967          end;
1968          if(l_on_hold_flag='N' and l_event_status_code<>'I') then
1969            if(nvl(p_event_status_code, l_old_event_status_code)='I') then
1970              update xla_events
1971                 set on_hold_flag='N'
1972               where event_id=p_event_id;
1973            else
1974              -- update from this event til the next gap, set on_hold_flag to 'N'
1975              SELECT event_status_code,  event_number     BULK COLLECT
1976                INTO g_gapless_array_event_status, g_gapless_event_number
1977                FROM xla_events
1978               Where entity_id            = g_entity_id
1979                     and event_number>p_event_number
1980                     and event_number<l_old_event_number
1981               Order by event_number;
1982 
1983              l_temp_event_number:=p_event_number+1;
1984              For j in 1..g_gapless_event_number.COUNT loop
1985                if(g_gapless_event_number(j)=l_temp_event_number
1986                         and g_gapless_array_event_status(j)<>'I') then
1987                  l_temp_event_number:=l_temp_event_number+1;
1988                else
1989                  exit;
1990                end if;
1991              end loop;
1992              --l_temp_event_number is the next gap
1993              -- update the on_hold_flag of event between l_array_event_number(i)
1994              -- and --l_temp_event_number+1
1995 
1996              update xla_events
1997                 set on_hold_flag='N'
1998               where entity_id=g_entity_id
1999                     and event_number >p_event_number-1
2000                     and event_number <l_temp_event_number+1;
2001            end if;
2002          end if;
2003        end if;
2004      else --event number is not updated, but the status changed
2005        if(p_event_status_code='I' and l_old_on_hold_flag='N') then
2006        -- new gap
2007          update xla_events
2008             set on_hold_flag='Y'
2009           where entity_id=g_entity_id
2010                 and event_number>l_old_event_number
2011                 and on_hold_flag='N';
2012 
2013        elsif(l_old_event_status_code='I' and l_old_on_hold_flag='N') then
2014        -- old gap eliminated
2015          SELECT event_status_code,  event_number     BULK COLLECT
2016            INTO g_gapless_array_event_status, g_gapless_event_number
2017            FROM xla_events
2018           Where entity_id            = g_entity_id
2019                 and event_number>l_old_event_number
2020           Order by event_number;
2021 
2022          l_temp_event_number:=l_old_event_number+1;
2023          For j in 1..g_gapless_event_number.COUNT loop
2024            if(g_gapless_event_number(j)=l_temp_event_number
2025                     and g_gapless_array_event_status(j)<>'I') then
2026              l_temp_event_number:=l_temp_event_number+1;
2027            else
2028              exit;
2029            end if;
2030          end loop;
2031          --l_temp_event_number is the next gap
2032          -- update the on_hold_flag of event between l_array_event_number(i)
2033          -- and --l_temp_event_number+1
2034 
2035          update xla_events
2036             set on_hold_flag='N'
2037           where entity_id=g_entity_id
2038                 and event_number >l_old_event_number
2039                 and event_number <l_temp_event_number+1;
2040 
2041        end if;
2042      end if;
2043    end if;
2044 
2045   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2046     trace
2047          (p_msg      => 'end of procedure update_event'
2048          ,p_level    => C_LEVEL_PROCEDURE
2049          ,p_module   =>l_log_module);
2050   END IF;
2051 EXCEPTION
2052 WHEN xla_exceptions_pkg.application_exception THEN
2053    ROLLBACK to SAVEPOINT before_event_update;
2054    RAISE;
2055 WHEN OTHERS                                   THEN
2056    ROLLBACK to SAVEPOINT before_event_update;
2057    xla_exceptions_pkg.raise_message
2058       (p_location => 'xla_events_pkg.update_event');
2059 END update_event;
2060 
2061 
2062 --=============================================================================
2063 --
2064 --  This API is specific for MANUAL events. Bug # 2899700.
2065 --
2066 --=============================================================================
2067 
2068 PROCEDURE update_manual_event
2069    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
2070    ,p_event_id                     IN  INTEGER
2071    ,p_event_type_code              IN  VARCHAR2   DEFAULT NULL
2072    ,p_event_date                   IN  DATE       DEFAULT NULL
2073    ,p_event_status_code            IN  VARCHAR2   DEFAULT NULL
2074    ,p_process_status_code          IN  VARCHAR2   DEFAULT NULL
2075    ,p_event_number                 IN  INTEGER    DEFAULT NULL
2076    ,p_reference_info               IN  xla_events_pub_pkg.t_event_reference_info
2077                                        DEFAULT NULL
2078    ,p_overwrite_event_num          IN  VARCHAR2   DEFAULT 'N'
2079    ,p_overwrite_ref_info           IN  VARCHAR2   DEFAULT 'N') IS
2080 l_event_date                DATE;
2081 l_log_module                VARCHAR2(240);
2082 l_rowcount                  NUMBER;
2083 BEGIN
2084   IF g_log_enabled THEN
2085     l_log_module := C_DEFAULT_MODULE||'.update_manual_event';
2086   END IF;
2087   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2088     trace
2089          (p_msg      => 'BEGIN of procedure update_manual_event'
2090          ,p_level    => C_LEVEL_PROCEDURE
2091          ,p_module   =>l_log_module);
2092      trace
2093          (p_msg      => 'source_application_id = '||
2094                         p_event_source_info.source_application_id
2095          ,p_level    => C_LEVEL_PROCEDURE
2096          ,p_module   =>l_log_module);
2097      trace
2098          (p_msg      => 'application_id = '||p_event_source_info.application_id
2099          ,p_level    => C_LEVEL_PROCEDURE
2100          ,p_module   =>l_log_module);
2101      trace
2102          (p_msg      => 'legal_entity_id = '||
2103                         p_event_source_info.legal_entity_id
2104          ,p_level    => C_LEVEL_PROCEDURE
2105          ,p_module   =>l_log_module);
2106      trace
2107          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
2108          ,p_level    => C_LEVEL_PROCEDURE
2109          ,p_module   =>l_log_module);
2110      trace
2111          (p_msg      => 'entity_type_code = '||
2112                         p_event_source_info.entity_type_code
2113          ,p_level    => C_LEVEL_PROCEDURE
2114          ,p_module   =>l_log_module);
2115      trace
2116          (p_msg      => 'transaction_number = '||
2117                         p_event_source_info.transaction_number
2118          ,p_level    => C_LEVEL_PROCEDURE
2119          ,p_module   =>l_log_module);
2120      trace
2121          (p_msg      => 'source_id_int_1 = '||
2122                         p_event_source_info.source_id_int_1
2123          ,p_level    => C_LEVEL_PROCEDURE
2124          ,p_module   =>l_log_module);
2125      trace
2126          (p_msg      => 'source_id_int_2 = '||
2127                         p_event_source_info.source_id_int_2
2128          ,p_level    => C_LEVEL_PROCEDURE
2129          ,p_module   =>l_log_module);
2130      trace
2131          (p_msg      => 'source_id_int_3 = '||
2132                         p_event_source_info.source_id_int_3
2133          ,p_level    => C_LEVEL_PROCEDURE
2134          ,p_module   =>l_log_module);
2135      trace
2136          (p_msg      => 'source_id_int_4 = '||
2137                         p_event_source_info.source_id_int_4
2138          ,p_level    => C_LEVEL_PROCEDURE
2139          ,p_module   =>l_log_module);
2140      trace
2141          (p_msg      => 'source_id_char_1 = '||
2142                         p_event_source_info.source_id_char_1
2143          ,p_level    => C_LEVEL_PROCEDURE
2144          ,p_module   =>l_log_module);
2145      trace
2146          (p_msg      => 'source_id_char_2 = '||
2147                         p_event_source_info.source_id_char_2
2148          ,p_level    => C_LEVEL_PROCEDURE
2149          ,p_module   =>l_log_module);
2150      trace
2151          (p_msg      => 'source_id_char_3 = '||
2152                         p_event_source_info.source_id_char_3
2153          ,p_level    => C_LEVEL_PROCEDURE
2154          ,p_module   =>l_log_module);
2155      trace
2156          (p_msg      => 'source_id_char_4 = '||
2157                         p_event_source_info.source_id_char_4
2158          ,p_level    => C_LEVEL_PROCEDURE
2159          ,p_module   =>l_log_module);
2160      trace
2161          (p_msg      => 'p_event_id = '||p_event_id
2162          ,p_level    => C_LEVEL_PROCEDURE
2163          ,p_module   =>l_log_module);
2164      trace
2165          (p_msg      => 'p_event_type_code = '||p_event_type_code
2166          ,p_level    => C_LEVEL_PROCEDURE
2167          ,p_module   =>l_log_module);
2168      trace
2169          (p_msg      => 'p_event_date = '||p_event_date
2170          ,p_level    => C_LEVEL_PROCEDURE
2171          ,p_module   =>l_log_module);
2172      trace
2173          (p_msg      => 'p_event_status_code = '||p_event_status_code
2174          ,p_level    => C_LEVEL_PROCEDURE
2175          ,p_module   =>l_log_module);
2176      trace
2177          (p_msg      => 'p_process_status_code = '||p_process_status_code
2178          ,p_level    => C_LEVEL_PROCEDURE
2179          ,p_module   =>l_log_module);
2180      trace
2181          (p_msg      => 'p_event_number = '||p_event_number
2182          ,p_level    => C_LEVEL_PROCEDURE
2183          ,p_module   =>l_log_module);
2184      trace
2185          (p_msg      => 'p_overwrite_event_num = '||p_overwrite_event_num
2186          ,p_level    => C_LEVEL_PROCEDURE
2187          ,p_module   =>l_log_module);
2188      trace
2189          (p_msg      => 'p_overwrite_ref_info = '||p_overwrite_ref_info
2190          ,p_level    => C_LEVEL_PROCEDURE
2191          ,p_module   =>l_log_module);
2192      trace
2193          (p_msg      => 'security_id_int_1 = '||
2194                         xla_events_pub_pkg.g_security.security_id_int_1
2195          ,p_level    => C_LEVEL_PROCEDURE
2196          ,p_module   =>l_log_module);
2197      trace
2198          (p_msg      => 'security_id_int_2 = '||
2199                         xla_events_pub_pkg.g_security.security_id_int_2
2200          ,p_level    => C_LEVEL_PROCEDURE
2201          ,p_module   =>l_log_module);
2202      trace
2203          (p_msg      => 'security_id_int_3 = '||
2204                         xla_events_pub_pkg.g_security.security_id_int_3
2205          ,p_level    => C_LEVEL_PROCEDURE
2206          ,p_module   =>l_log_module);
2207      trace
2208          (p_msg      => 'security_id_char_1 = '||
2209                         xla_events_pub_pkg.g_security.security_id_char_1
2210          ,p_level    => C_LEVEL_PROCEDURE
2211          ,p_module   =>l_log_module);
2212      trace
2213          (p_msg      => 'security_id_char_2 = '||
2214                         xla_events_pub_pkg.g_security.security_id_char_2
2215          ,p_level    => C_LEVEL_PROCEDURE
2216          ,p_module   =>l_log_module);
2217      trace
2218          (p_msg      => 'security_id_char_3 = '||
2219                         xla_events_pub_pkg.g_security.security_id_char_3
2220          ,p_level    => C_LEVEL_PROCEDURE
2221          ,p_module   =>l_log_module);
2222   END IF;
2223 
2224    SAVEPOINT before_event_update;
2225    g_action := C_EVENT_UPDATE;
2226 
2227    ----------------------------------------------------------------------------
2228    -- Following sets the Security Context for the execution. This enables the
2229    -- event API to respect the transaction security.
2230    ----------------------------------------------------------------------------
2231    xla_security_pkg.set_security_context(p_event_source_info.application_id);
2232 
2233    ----------------------------------------------------------------------------
2234    -- check to see the API is not called for regular events
2235    ----------------------------------------------------------------------------
2236    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
2237       g_context := C_MANUAL_EVENT_CONTEXT;
2238    ELSE
2239       xla_exceptions_pkg.raise_message
2240          (p_appli_s_name   => 'XLA'
2241          ,p_msg_name       => 'XLA_COMMON_ERROR'
2242          ,p_token_1        => 'ERROR'
2243          ,p_value_1        => 'For REGULAR events this API cannot be called'
2244          ,p_token_2        => 'LOCATION'
2245          ,p_value_2        => 'xla_events_pkg.update_manual_event');
2246    END IF;
2247 
2248    ----------------------------------------------------------------------------
2249    -- perfrom validations specific to 'updating event'
2250    ----------------------------------------------------------------------------
2251    IF  p_event_id IS NULL  THEN
2252       xla_exceptions_pkg.raise_message
2253          (p_appli_s_name   => 'XLA'
2254          ,p_msg_name       => 'XLA_COMMON_ERROR'
2255          ,p_token_1        => 'ERROR'
2256          ,p_value_1        => 'Event ID cannot have a NULL value.'
2257          ,p_token_2        => 'LOCATION'
2258          ,p_value_2        => 'xla_events_pkg.update_manual_event');
2259    END IF;
2260 
2261    ----------------------------------------------------------------------------
2262    -- validate to make sure that both p_event_status_code and
2263    -- p_process_status_code should either be NULL or NOT NULL
2264    ----------------------------------------------------------------------------
2265    IF (((p_event_status_code IS NOT NULL) AND (p_process_status_code IS NULL))OR
2266        ((p_event_status_code IS NULL) AND (p_process_status_code IS NOT NULL)))
2267    THEN
2268       xla_exceptions_pkg.raise_message
2269          (p_appli_s_name   => 'XLA'
2270          ,p_msg_name       => 'XLA_COMMON_ERROR'
2271          ,p_token_1        => 'ERROR'
2272          ,p_value_1        => 'Inconsistent values for event statuses: '||
2273                               'p_event_status_code    = '||p_event_status_code||
2274                               'p_process_status_code  = '||p_process_status_code
2275          ,p_token_2        => 'LOCATION'
2276          ,p_value_2        => 'xla_events_pkg.update_manual_event');
2277    END IF;
2278 
2279    ----------------------------------------------------------------------------
2280    -- truncate date
2281    ----------------------------------------------------------------------------
2282    l_event_date := TRUNC(p_event_date);
2283 
2284    ----------------------------------------------------------------------------
2285    -- Validate parameters
2286    ----------------------------------------------------------------------------
2287    validate_params
2288       (p_source_info          => p_event_source_info
2289       ,p_event_type_code      => p_event_type_code
2290       ,p_event_status_code    => p_event_status_code
2291       ,p_process_status_code  => p_process_status_code);
2292 
2293    ----------------------------------------------------------------------------
2294    -- Get document PK
2295    ----------------------------------------------------------------------------
2296    cache_entity_info
2297       (p_source_info      => p_event_source_info
2298       ,p_valuation_method => NULL
2299       ,p_event_id         => p_event_id);
2300 
2301    ----------------------------------------------------------------------------
2302    -- Check entity existency
2303    ----------------------------------------------------------------------------
2304    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2305       trace
2306          (p_msg      => 'g_entity_id = '||g_entity_id
2307          ,p_level    => C_LEVEL_STATEMENT
2308          ,p_module   =>l_log_module);
2309    END IF;
2310 
2311    IF  g_entity_id IS NULL  THEN
2312       xla_exceptions_pkg.raise_message
2313          (p_appli_s_name   => 'XLA'
2314          ,p_msg_name       => 'XLA_COMMON_ERROR'
2315          ,p_token_1        => 'ERROR'
2316          ,p_value_1        => 'No event exists for the document represented '||
2317                               'by the given source information.'
2318          ,p_token_2        => 'LOCATION'
2319          ,p_value_2        => 'xla_events_pkg.update_manual_event');
2320    END IF;
2321 
2322    ----------------------------------------------------------------------------
2323    -- Actual status update
2324    ----------------------------------------------------------------------------
2325    UPDATE xla_events
2326       SET event_type_code       = NVL(p_event_type_code  , event_type_code)
2327          ,event_date            = NVL(l_event_date       , event_date)
2328          ,event_status_code     = NVL(p_event_status_code, event_status_code)
2329          ,process_status_code   = NVL(p_process_status_code,process_status_code)
2330          ,event_number          = DECODE(p_overwrite_event_num,C_YES,
2331                           NVL(p_event_number,g_max_event_number+1),event_number)
2332          ,reference_num_1       = DECODE(p_overwrite_ref_info,C_YES,
2333                              p_reference_info.reference_num_1,reference_num_1)
2334          ,reference_num_2       = DECODE(p_overwrite_ref_info,C_YES,
2335                              p_reference_info.reference_num_2,reference_num_2)
2336          ,reference_num_3       = DECODE(p_overwrite_ref_info,C_YES,
2337                              p_reference_info.reference_num_3,reference_num_3)
2338          ,reference_num_4       = DECODE(p_overwrite_ref_info,C_YES,
2339                              p_reference_info.reference_num_4,reference_num_4)
2340          ,reference_char_1      = DECODE(p_overwrite_ref_info,C_YES,
2341                              p_reference_info.reference_char_1,reference_char_1)
2342          ,reference_char_2      = DECODE(p_overwrite_ref_info,C_YES,
2343                              p_reference_info.reference_char_2,reference_char_2)
2344          ,reference_char_3      = DECODE(p_overwrite_ref_info,C_YES,
2345                              p_reference_info.reference_char_3,reference_char_3)
2346          ,reference_char_4      = DECODE(p_overwrite_ref_info,C_YES,
2347                              p_reference_info.reference_char_4,reference_char_4)
2348          ,reference_date_1      = DECODE(p_overwrite_ref_info,C_YES,
2349                              p_reference_info.reference_date_1,reference_date_1)
2350          ,reference_date_2      = DECODE(p_overwrite_ref_info,C_YES,
2351                              p_reference_info.reference_date_2,reference_date_2)
2352          ,reference_date_3      = DECODE(p_overwrite_ref_info,C_YES,
2353                              p_reference_info.reference_date_3,reference_date_3)
2354          ,reference_date_4      = DECODE(p_overwrite_ref_info,C_YES,
2355                              p_reference_info.reference_date_4,reference_date_4)
2356          ,last_update_date      = sysdate
2357          ,last_updated_by       = xla_environment_pkg.g_usr_id
2358          ,last_update_login     = xla_environment_pkg.g_login_id
2359          ,program_update_date   = sysdate
2360          ,program_application_id= xla_environment_pkg.g_prog_appl_id
2361          ,program_id            = xla_environment_pkg.g_prog_id
2362          ,request_id            = xla_environment_pkg.g_Req_Id
2363       WHERE event_id            = p_event_id
2364         AND entity_id           = g_entity_id
2365         AND event_status_code   <> xla_events_pub_pkg.C_EVENT_PROCESSED;
2366 
2367    l_rowcount :=  SQL%ROWCOUNT;
2368 
2369    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2370       trace
2371          (p_msg      => 'Number for rows updated = '||l_rowcount
2372          ,p_level    => C_LEVEL_STATEMENT
2373          ,p_module   =>l_log_module);
2374    END IF;
2375 
2376    IF l_rowcount <> 1    THEN
2377       xla_exceptions_pkg.raise_message
2378          (p_appli_s_name   => 'XLA'
2379          ,p_msg_name       => 'XLA_COMMON_ERROR'
2380          ,p_token_1        => 'ERROR'
2381          ,p_value_1        =>
2382          'Unable to perform UPDATE on the event. The event ('||p_event_id ||
2383                             ') is invalid'
2384          ,p_token_2        => 'LOCATION'
2385          ,p_value_2        => 'xla_events_pkg.update_manual_event');
2386    END IF;
2387 
2388    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2389       trace
2390          (p_msg      => 'end of procedure update_manual_event'
2391          ,p_level    => C_LEVEL_PROCEDURE
2392          ,p_module   =>l_log_module);
2393    END IF;
2394 
2395 EXCEPTION
2396 WHEN xla_exceptions_pkg.application_exception THEN
2397    ROLLBACK to SAVEPOINT before_event_update;
2398    RAISE;
2399 WHEN OTHERS                                   THEN
2400    ROLLBACK to SAVEPOINT before_event_update;
2401    xla_exceptions_pkg.raise_message
2402       (p_location => 'xla_events_pkg.update_manual_event');
2403 END update_manual_event;
2404 
2405 
2406 --=============================================================================
2407 --
2408 -- Bug # 2899700. This API can be called for Manual and Standard events.
2409 -- Bug 3268790. commented the statements that delete rows for entites.
2410 --
2411 --=============================================================================
2412 
2413 PROCEDURE delete_event
2414    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
2415    ,p_valuation_method             IN  VARCHAR2
2416    ,p_event_id                     IN  INTEGER) IS
2417 l_on_hold_flag xla_events.on_hold_flag%type;
2418 l_event_status_code xla_events.event_status_code%type;
2419 l_event_number xla_events.event_number%type;
2420 l_log_module                VARCHAR2(240);
2421 l_rowcount                  NUMBER;
2422 BEGIN
2423   IF g_log_enabled THEN
2424     l_log_module := C_DEFAULT_MODULE||'.delete_event';
2425   END IF;
2426   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2427      trace
2428          (p_msg      => 'BEGIN of procedure delete_event'
2429          ,p_level    => C_LEVEL_PROCEDURE
2430          ,p_module   =>l_log_module);
2431      trace
2432          (p_msg      => 'source_application_id = '||
2433                         p_event_source_info.source_application_id
2434          ,p_level    => C_LEVEL_PROCEDURE
2435          ,p_module   =>l_log_module);
2436      trace
2437          (p_msg      => 'application_id = '||p_event_source_info.application_id
2438          ,p_level    => C_LEVEL_PROCEDURE
2439          ,p_module   =>l_log_module);
2440      trace
2441          (p_msg      => 'legal_entity_id = '||
2442                         p_event_source_info.legal_entity_id
2443          ,p_level    => C_LEVEL_PROCEDURE
2444          ,p_module   =>l_log_module);
2445      trace
2446          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
2447          ,p_level    => C_LEVEL_PROCEDURE
2448          ,p_module   =>l_log_module);
2449      trace
2450          (p_msg      => 'entity_type_code = '||
2451                         p_event_source_info.entity_type_code
2452          ,p_level    => C_LEVEL_PROCEDURE
2453          ,p_module   =>l_log_module);
2454      trace
2455          (p_msg      => 'transaction_number = '||
2456                         p_event_source_info.transaction_number
2457          ,p_level    => C_LEVEL_PROCEDURE
2458          ,p_module   =>l_log_module);
2459      trace
2460          (p_msg      => 'source_id_int_1 = '||
2461                         p_event_source_info.source_id_int_1
2462          ,p_level    => C_LEVEL_PROCEDURE
2463          ,p_module   =>l_log_module);
2464      trace
2465          (p_msg      => 'source_id_int_2 = '||
2466                         p_event_source_info.source_id_int_2
2467          ,p_level    => C_LEVEL_PROCEDURE
2468          ,p_module   =>l_log_module);
2469      trace
2470          (p_msg      => 'source_id_int_3 = '||
2471                         p_event_source_info.source_id_int_3
2472          ,p_level    => C_LEVEL_PROCEDURE
2473          ,p_module   =>l_log_module);
2474      trace
2475          (p_msg      => 'source_id_int_4 = '||
2476                         p_event_source_info.source_id_int_4
2477          ,p_level    => C_LEVEL_PROCEDURE
2478          ,p_module   =>l_log_module);
2479      trace
2480          (p_msg      => 'source_id_char_1 = '||
2481                         p_event_source_info.source_id_char_1
2482          ,p_level    => C_LEVEL_PROCEDURE
2483          ,p_module   =>l_log_module);
2484      trace
2485          (p_msg      => 'source_id_char_2 = '||
2486                         p_event_source_info.source_id_char_2
2487          ,p_level    => C_LEVEL_PROCEDURE
2488          ,p_module   =>l_log_module);
2489      trace
2490          (p_msg      => 'source_id_char_3 = '||
2491                         p_event_source_info.source_id_char_3
2492          ,p_level    => C_LEVEL_PROCEDURE
2493          ,p_module   =>l_log_module);
2494      trace
2495          (p_msg      => 'source_id_char_4 = '||
2496                         p_event_source_info.source_id_char_4
2497          ,p_level    => C_LEVEL_PROCEDURE
2498          ,p_module   =>l_log_module);
2499      trace
2500          (p_msg      => 'p_event_id = '||p_event_id
2501          ,p_level    => C_LEVEL_PROCEDURE
2502          ,p_module   =>l_log_module);
2503      trace
2504          (p_msg      => 'security_id_int_1 = '||
2505                         xla_events_pub_pkg.g_security.security_id_int_1
2506          ,p_level    => C_LEVEL_PROCEDURE
2507          ,p_module   =>l_log_module);
2508      trace
2509          (p_msg      => 'security_id_int_2 = '||
2510                         xla_events_pub_pkg.g_security.security_id_int_2
2511          ,p_level    => C_LEVEL_PROCEDURE
2512          ,p_module   =>l_log_module);
2513      trace
2514          (p_msg      => 'security_id_int_3 = '||
2515                         xla_events_pub_pkg.g_security.security_id_int_3
2516          ,p_level    => C_LEVEL_PROCEDURE
2517          ,p_module   =>l_log_module);
2518      trace
2519          (p_msg      => 'security_id_char_1 = '||
2520                         xla_events_pub_pkg.g_security.security_id_char_1
2521          ,p_level    => C_LEVEL_PROCEDURE
2522          ,p_module   =>l_log_module);
2523      trace
2524          (p_msg      => 'security_id_char_2 = '||
2525                         xla_events_pub_pkg.g_security.security_id_char_2
2526          ,p_level    => C_LEVEL_PROCEDURE
2527          ,p_module   =>l_log_module);
2528      trace
2529          (p_msg      => 'security_id_char_3 = '||
2530                         xla_events_pub_pkg.g_security.security_id_char_3
2531          ,p_level    => C_LEVEL_PROCEDURE
2532          ,p_module   =>l_log_module);
2533      trace
2534          (p_msg      => 'valuation_method = '||p_valuation_method
2535          ,p_level    => C_LEVEL_PROCEDURE
2536          ,p_module   =>l_log_module);
2537   END IF;
2538 
2539    SAVEPOINT before_event_delete;
2540    g_action := C_EVENT_DELETE;
2541 
2542    ----------------------------------------------------------------------------
2543    -- Following sets the Security Context for the execution. This enables the
2544    -- event API to respect the transaction security.
2545    ----------------------------------------------------------------------------
2546    xla_security_pkg.set_security_context(p_event_source_info.application_id);
2547 
2548    ----------------------------------------------------------------------------
2549    -- Set the right context for calling this API
2550    -- Changed to fix bug # 2899700
2551    ----------------------------------------------------------------------------
2552    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
2553       g_context := C_MANUAL_EVENT_CONTEXT;
2554    ELSE
2555       g_context := C_REGULAR_EVENT_CONTEXT;
2556    END IF;
2557 
2558    ----------------------------------------------------------------------------
2559    -- perform validations specific to 'deleting event'
2560    ----------------------------------------------------------------------------
2561    IF  p_event_id IS NULL  THEN
2562       xla_exceptions_pkg.raise_message
2563          (p_appli_s_name   => 'XLA'
2564          ,p_msg_name       => 'XLA_COMMON_ERROR'
2565          ,p_token_1        => 'ERROR'
2566          ,p_value_1        => 'Event ID cannot have a NULL value.'
2567          ,p_token_2        => 'LOCATION'
2568          ,p_value_2        => 'xla_events_pkg.delete_event');
2569    END IF;
2570 
2571    ----------------------------------------------------------------------------
2572    -- Validate parameters
2573    ----------------------------------------------------------------------------
2574    validate_params
2575       (p_source_info       => p_event_source_info);
2576 
2577    ----------------------------------------------------------------------------
2578    -- Get document PK
2579    ----------------------------------------------------------------------------
2580    cache_entity_info
2581       (p_source_info      => p_event_source_info
2582       ,p_valuation_method => p_valuation_method
2583       ,p_event_id         => p_event_id);
2584 
2585    ----------------------------------------------------------------------------
2586    -- Check entity existency
2587    ----------------------------------------------------------------------------
2588    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2589       trace
2590          (p_msg      => 'g_entity_id = '||g_entity_id
2591          ,p_level    => C_LEVEL_STATEMENT
2592          ,p_module   =>l_log_module);
2593    END IF;
2594 
2595    IF  g_entity_id IS NULL  THEN
2596       xla_exceptions_pkg.raise_message
2597          (p_appli_s_name   => 'XLA'
2598          ,p_msg_name       => 'XLA_COMMON_ERROR'
2599          ,p_token_1        => 'ERROR'
2600          ,p_value_1        => 'No event exists for the document represented '||
2601                               'by the given source information.'
2602          ,p_token_2        => 'LOCATION'
2603          ,p_value_2        => 'xla_events_pkg.delete_event');
2604    END IF;
2605 
2606    ----------------------------------------------------------------------------
2607    -- Call routine to delete errors/JEs related to the event bug # 2701681
2608    ----------------------------------------------------------------------------
2609    xla_journal_entries_pkg.delete_journal_entries
2610       (p_event_id                  => p_event_id
2611       ,p_application_id            => g_application_id);
2612 
2613    if(g_gapless_flag='Y') then
2614      begin
2615        select on_hold_flag, event_status_code, event_number
2616          into l_on_hold_flag, l_event_status_code, l_event_number
2617          from xla_events
2618         WHERE event_id  = p_event_id
2619               AND entity_id = g_entity_id
2620               AND event_status_code  <> xla_events_pub_pkg.C_EVENT_PROCESSED;
2621      exception when others then
2622        xla_exceptions_pkg.raise_message
2623          (p_appli_s_name   => 'XLA'
2624          ,p_msg_name       => 'XLA_COMMON_ERROR'
2625          ,p_token_1        => 'ERROR'
2626          ,p_value_1        =>
2627          'Unable to perform DELETE on the event. The event ('|| p_event_id ||
2628                               ') is either invalid or has been final accounted.'
2629          ,p_token_2        => 'LOCATION'
2630          ,p_value_2        => 'xla_events_pkg.delete_event');
2631      end;
2632    end if;
2633 
2634    ----------------------------------------------------------------------------
2635    -- Actual Delete of the event
2636    ----------------------------------------------------------------------------
2637    DELETE xla_events
2638     WHERE event_id  = p_event_id
2639       AND entity_id = g_entity_id
2640       AND event_status_code  <> xla_events_pub_pkg.C_EVENT_PROCESSED;
2641 
2642    l_rowcount := SQL%ROWCOUNT;
2643 
2644    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2645       trace
2646          (p_msg      => 'Number for events deleted = '||l_rowcount
2647          ,p_level    => C_LEVEL_STATEMENT
2648          ,p_module   =>l_log_module);
2649    END IF;
2650 
2651    IF l_rowcount <> 1    THEN
2652       xla_exceptions_pkg.raise_message
2653          (p_appli_s_name   => 'XLA'
2654          ,p_msg_name       => 'XLA_COMMON_ERROR'
2655          ,p_token_1        => 'ERROR'
2656          ,p_value_1        =>
2657          'Unable to perform DELETE on the event. The event ('|| p_event_id ||
2658                               ') is either invalid or has been final accounted.'
2659          ,p_token_2        => 'LOCATION'
2660          ,p_value_2        => 'xla_events_pkg.delete_event');
2661 
2662    ELSIF g_context = C_MANUAL_EVENT_CONTEXT THEN
2663       --------------------------------------------------------------------------
2664       -- this if condition is added to make sure that the entity row is
2665       -- deleted only for Manula events and not for statndard event.Bug 3268790.
2666       --------------------------------------------------------------------------
2667          ----------------------------------------------------------------------
2668          -- following will delete the row from entities if there is no
2669          -- event exists for the entity
2670          ----------------------------------------------------------------------
2671          DELETE xla_transaction_entities xte
2672           WHERE xte.entity_id = g_entity_id
2673             AND xte.application_id = g_application_id
2674             AND NOT EXISTS
2675                        (SELECT '1' FROM xla_events xe
2676                          WHERE xe.entity_id = xte.entity_id
2677                            AND xe.application_id = xte.application_id);
2678 
2679       l_rowcount := SQL%ROWCOUNT;
2680 
2681       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2682          trace
2683          (p_msg      => 'Number for entities deleted = '||l_rowcount
2684          ,p_level    => C_LEVEL_STATEMENT
2685          ,p_module   =>l_log_module);
2686       END IF;
2687 
2688    ELSIF (g_gapless_flag='Y' and l_on_hold_flag='N'
2689                              and l_event_status_code<>'I') then
2690         update xla_events
2691            set on_hold_flag='Y'
2692          where entity_id=g_entity_id
2693                and event_number>l_event_number;
2694    END IF;
2695 
2696    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2697       trace
2698          (p_msg      => 'end of procedure delete_event'
2699          ,p_level    => C_LEVEL_PROCEDURE
2700          ,p_module   =>l_log_module);
2701    END IF;
2702 
2703 EXCEPTION
2704 WHEN xla_exceptions_pkg.application_exception THEN
2705    ROLLBACK to SAVEPOINT before_event_delete;
2706    RAISE;
2707 WHEN OTHERS                                   THEN
2708    ROLLBACK to SAVEPOINT before_event_delete;
2709    xla_exceptions_pkg.raise_message
2710       (p_location => 'xla_events_pkg.delete_event');
2711 END delete_event;
2712 
2713 
2714 --=============================================================================
2715 --
2716 -- This API is specific for MANUAL events. (delebrate restriction)
2717 -- Added this API to fix bug # 2899700.
2718 --
2719 --=============================================================================
2720 
2721 PROCEDURE delete_processed_event
2722    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
2723    ,p_event_id                     IN  INTEGER) IS
2724 l_log_module                VARCHAR2(240);
2725 l_rowcount                  NUMBER;
2726 BEGIN
2727   IF g_log_enabled THEN
2728     l_log_module := C_DEFAULT_MODULE||'.delete_processed_event';
2729   END IF;
2730   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2731     trace
2732          (p_msg      => 'BEGIN of procedure delete_processed_event'
2733          ,p_level    => C_LEVEL_PROCEDURE
2734          ,p_module   =>l_log_module);
2735      trace
2736          (p_msg      => 'source_application_id = '||
2737                         p_event_source_info.source_application_id
2738          ,p_level    => C_LEVEL_PROCEDURE
2739          ,p_module   =>l_log_module);
2740      trace
2741          (p_msg      => 'application_id = '||p_event_source_info.application_id
2742          ,p_level    => C_LEVEL_PROCEDURE
2743          ,p_module   =>l_log_module);
2744      trace
2745          (p_msg      => 'legal_entity_id = '||
2746                         p_event_source_info.legal_entity_id
2747          ,p_level    => C_LEVEL_PROCEDURE
2748          ,p_module   =>l_log_module);
2749      trace
2750          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
2751          ,p_level    => C_LEVEL_PROCEDURE
2752          ,p_module   =>l_log_module);
2753      trace
2754          (p_msg      => 'entity_type_code = '||
2755                         p_event_source_info.entity_type_code
2756          ,p_level    => C_LEVEL_PROCEDURE
2757          ,p_module   =>l_log_module);
2758      trace
2759          (p_msg      => 'transaction_number = '||
2760                         p_event_source_info.transaction_number
2761          ,p_level    => C_LEVEL_PROCEDURE
2762          ,p_module   =>l_log_module);
2763      trace
2764          (p_msg      => 'source_id_int_1 = '||
2765                         p_event_source_info.source_id_int_1
2766          ,p_level    => C_LEVEL_PROCEDURE
2767          ,p_module   =>l_log_module);
2768      trace
2769          (p_msg      => 'source_id_int_2 = '||
2770                         p_event_source_info.source_id_int_2
2771          ,p_level    => C_LEVEL_PROCEDURE
2772          ,p_module   =>l_log_module);
2773      trace
2774          (p_msg      => 'source_id_int_3 = '||
2775                         p_event_source_info.source_id_int_3
2776          ,p_level    => C_LEVEL_PROCEDURE
2777          ,p_module   =>l_log_module);
2778      trace
2779          (p_msg      => 'source_id_int_4 = '||
2780                         p_event_source_info.source_id_int_4
2781          ,p_level    => C_LEVEL_PROCEDURE
2782          ,p_module   =>l_log_module);
2783      trace
2784          (p_msg      => 'source_id_char_1 = '||
2785                         p_event_source_info.source_id_char_1
2786          ,p_level    => C_LEVEL_PROCEDURE
2787          ,p_module   =>l_log_module);
2788      trace
2789          (p_msg      => 'source_id_char_2 = '||
2790                         p_event_source_info.source_id_char_2
2791          ,p_level    => C_LEVEL_PROCEDURE
2792          ,p_module   =>l_log_module);
2793      trace
2794          (p_msg      => 'source_id_char_3 = '||
2795                         p_event_source_info.source_id_char_3
2796          ,p_level    => C_LEVEL_PROCEDURE
2797          ,p_module   =>l_log_module);
2798      trace
2799          (p_msg      => 'source_id_char_4 = '||
2800                         p_event_source_info.source_id_char_4
2801          ,p_level    => C_LEVEL_PROCEDURE
2802          ,p_module   =>l_log_module);
2803      trace
2804          (p_msg      => 'p_event_id = '||p_event_id
2805          ,p_level    => C_LEVEL_PROCEDURE
2806          ,p_module   =>l_log_module);
2807      trace
2808          (p_msg      => 'security_id_int_1 = '||
2809                         xla_events_pub_pkg.g_security.security_id_int_1
2810          ,p_level    => C_LEVEL_PROCEDURE
2811          ,p_module   =>l_log_module);
2812      trace
2813          (p_msg      => 'security_id_int_2 = '||
2814                         xla_events_pub_pkg.g_security.security_id_int_2
2815          ,p_level    => C_LEVEL_PROCEDURE
2816          ,p_module   =>l_log_module);
2817      trace
2818          (p_msg      => 'security_id_int_3 = '||
2819                         xla_events_pub_pkg.g_security.security_id_int_3
2820          ,p_level    => C_LEVEL_PROCEDURE
2821          ,p_module   =>l_log_module);
2822      trace
2823          (p_msg      => 'security_id_char_1 = '||
2824                         xla_events_pub_pkg.g_security.security_id_char_1
2825          ,p_level    => C_LEVEL_PROCEDURE
2826          ,p_module   =>l_log_module);
2827      trace
2828          (p_msg      => 'security_id_char_2 = '||
2829                         xla_events_pub_pkg.g_security.security_id_char_2
2830          ,p_level    => C_LEVEL_PROCEDURE
2831          ,p_module   =>l_log_module);
2832      trace
2833          (p_msg      => 'security_id_char_3 = '||
2834                         xla_events_pub_pkg.g_security.security_id_char_3
2835          ,p_level    => C_LEVEL_PROCEDURE
2836          ,p_module   =>l_log_module);
2837   END IF;
2838 
2839    trace('> xla_events_pkg.delete_processed_event'                  , 20);
2840 
2841    SAVEPOINT before_event_delete;
2842    g_action := C_EVENT_DELETE;
2843 
2844    ----------------------------------------------------------------------------
2845    -- Following sets the Security Context for the execution. This enables the
2846    -- event API to respect the transaction security.
2847    ----------------------------------------------------------------------------
2848    xla_security_pkg.set_security_context(p_event_source_info.application_id);
2849 
2850    ----------------------------------------------------------------------------
2851    -- Set the right context for calling this API
2852    ----------------------------------------------------------------------------
2853    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
2854       g_context := C_MANUAL_EVENT_CONTEXT;
2855    ELSE
2856       xla_exceptions_pkg.raise_message
2857          (p_appli_s_name   => 'XLA'
2858          ,p_msg_name       => 'XLA_COMMON_ERROR'
2859          ,p_token_1        => 'ERROR'
2860          ,p_value_1        => 'For REGULAR events this API cannot be called'
2861          ,p_token_2        => 'LOCATION'
2862          ,p_value_2        => 'xla_events_pkg.delete_processed_event');
2863    END IF;
2864 
2865    ----------------------------------------------------------------------------
2866    -- perform validations specific to 'deleting event'
2867    ----------------------------------------------------------------------------
2868    IF  p_event_id IS NULL  THEN
2869       xla_exceptions_pkg.raise_message
2870          (p_appli_s_name   => 'XLA'
2871          ,p_msg_name       => 'XLA_COMMON_ERROR'
2872          ,p_token_1        => 'ERROR'
2873          ,p_value_1        => 'Event ID cannot have a NULL value.'
2874          ,p_token_2        => 'LOCATION'
2875          ,p_value_2        => 'xla_events_pkg.delete_processed_event');
2876    END IF;
2877 
2878    ----------------------------------------------------------------------------
2879    -- Validate parameters
2880    ----------------------------------------------------------------------------
2881    validate_params
2882       (p_source_info       => p_event_source_info);
2883 
2884    ----------------------------------------------------------------------------
2885    -- Get document PK
2886    ----------------------------------------------------------------------------
2887    cache_entity_info
2888       (p_source_info      => p_event_source_info
2889       ,p_valuation_method => NULL
2890       ,p_event_id         => p_event_id);
2891 
2892    ----------------------------------------------------------------------------
2893    -- Check entity existency
2894    ----------------------------------------------------------------------------
2895    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2896       trace
2897          (p_msg      => 'g_entity_id = '||g_entity_id
2898          ,p_level    => C_LEVEL_STATEMENT
2899          ,p_module   =>l_log_module);
2900    END IF;
2901 
2902    IF  g_entity_id IS NULL  THEN
2903       xla_exceptions_pkg.raise_message
2904          (p_appli_s_name   => 'XLA'
2905          ,p_msg_name       => 'XLA_COMMON_ERROR'
2906          ,p_token_1        => 'ERROR'
2907          ,p_value_1        => 'No event exists for the document represented '||
2908                               'by the given source information.'
2909          ,p_token_2        => 'LOCATION'
2910          ,p_value_2        => 'xla_events_pkg.delete_processed_event');
2911    END IF;
2912 
2913    ----------------------------------------------------------------------------
2914    -- Call routine to delete errors/JEs related to the event bug # 2701681
2915    ----------------------------------------------------------------------------
2916    xla_journal_entries_pkg.delete_journal_entries
2917       (p_event_id                  => p_event_id
2918       ,p_application_id            => g_application_id);
2919 
2920    ----------------------------------------------------------------------------
2921    -- Actual Delete of the event
2922    ----------------------------------------------------------------------------
2923    DELETE xla_events
2924     WHERE event_id  = p_event_id
2925       AND entity_id = g_entity_id
2926       AND event_status_code  = xla_events_pub_pkg.C_EVENT_PROCESSED;
2927 
2928    l_rowcount := SQL%ROWCOUNT;
2929 
2930    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2931       trace
2932          (p_msg      => 'Number for events deleted = '||l_rowcount
2933          ,p_level    => C_LEVEL_STATEMENT
2934          ,p_module   =>l_log_module);
2935    END IF;
2936 
2937    IF l_rowcount <> 1    THEN
2938       xla_exceptions_pkg.raise_message
2939          (p_appli_s_name   => 'XLA'
2940          ,p_msg_name       => 'XLA_COMMON_ERROR'
2941          ,p_token_1        => 'ERROR'
2942          ,p_value_1        =>
2943          'Unable to perform DELETE on the event. The event ('|| p_event_id ||
2944                          ') is either invalid or has not been final accounted.'
2945          ,p_token_2        => 'LOCATION'
2946          ,p_value_2        => 'xla_events_pkg.delete_processed_event');
2947    ELSE
2948       -------------------------------------------------------------------------
2949       -- following will delete the row from entities if there is no
2950       -- event exists for the entity
2951       -------------------------------------------------------------------------
2952       DELETE xla_transaction_entities xte
2953        WHERE xte.entity_id = g_entity_id
2954          AND xte.application_id = g_application_id
2955          AND NOT EXISTS
2956                 (SELECT '1' FROM xla_events xe
2957                   WHERE xe.entity_id = xte.entity_id
2958                     AND xe.application_id = xte.application_id);
2959 
2960       l_rowcount := SQL%ROWCOUNT;
2961 
2962       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2963          trace
2964          (p_msg      => 'Number for entities deleted = '||l_rowcount
2965          ,p_level    => C_LEVEL_STATEMENT
2966          ,p_module   =>l_log_module);
2967       END IF;
2968    END IF;
2969 
2970 
2971   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2972     trace
2973          (p_msg      => 'BEGIN of procedure delete_processed_event'
2974          ,p_level    => C_LEVEL_PROCEDURE
2975          ,p_module   =>l_log_module);
2976   END IF;
2977 
2978 EXCEPTION
2979 WHEN xla_exceptions_pkg.application_exception THEN
2980    ROLLBACK to SAVEPOINT before_event_delete;
2981    RAISE;
2982 WHEN OTHERS                                   THEN
2983    ROLLBACK to SAVEPOINT before_event_delete;
2984    xla_exceptions_pkg.raise_message
2985       (p_location => 'xla_events_pkg.delete_processed_event');
2986 END delete_processed_event;
2987 
2988 
2989 --=============================================================================
2990 --
2991 -- For MANUAL events this API cannot be called.
2992 -- Bug 3268790. commented the statements that delete rows for entites.
2993 --
2994 --=============================================================================
2995 
2996 FUNCTION delete_events
2997    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
2998    ,p_valuation_method             IN  VARCHAR2
2999    ,p_event_class_code             IN  VARCHAR2 DEFAULT NULL
3000    ,p_event_type_code              IN  VARCHAR2 DEFAULT NULL
3001    ,p_event_date                   IN  DATE     DEFAULT NULL)
3002 RETURN INTEGER IS
3003 l_event_deleted                 INTEGER;
3004 l_event_date                    DATE;
3005 l_array_events                  t_number_tbl;
3006 l_log_module                VARCHAR2(240);
3007 BEGIN
3008   IF g_log_enabled THEN
3009     l_log_module := C_DEFAULT_MODULE||'.delete_events';
3010   END IF;
3011   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3012      trace
3013          (p_msg      => 'BEGIN of procedure delete_events'
3014          ,p_level    => C_LEVEL_PROCEDURE
3015          ,p_module   =>l_log_module);
3016      trace
3017          (p_msg      => 'source_application_id = '||
3018                         p_event_source_info.source_application_id
3019          ,p_level    => C_LEVEL_PROCEDURE
3020          ,p_module   =>l_log_module);
3021      trace
3022          (p_msg      => 'application_id = '||p_event_source_info.application_id
3023          ,p_level    => C_LEVEL_PROCEDURE
3024          ,p_module   =>l_log_module);
3025      trace
3026          (p_msg      => 'legal_entity_id = '||
3027                         p_event_source_info.legal_entity_id
3028          ,p_level    => C_LEVEL_PROCEDURE
3029          ,p_module   =>l_log_module);
3030      trace
3031          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
3032          ,p_level    => C_LEVEL_PROCEDURE
3033          ,p_module   =>l_log_module);
3034      trace
3035          (p_msg      => 'entity_type_code = '||
3036                         p_event_source_info.entity_type_code
3037          ,p_level    => C_LEVEL_PROCEDURE
3038          ,p_module   =>l_log_module);
3039      trace
3040          (p_msg      => 'transaction_number = '||
3041                         p_event_source_info.transaction_number
3042          ,p_level    => C_LEVEL_PROCEDURE
3043          ,p_module   =>l_log_module);
3044      trace
3045          (p_msg      => 'source_id_int_1 = '||
3046                         p_event_source_info.source_id_int_1
3047          ,p_level    => C_LEVEL_PROCEDURE
3048          ,p_module   =>l_log_module);
3049      trace
3050          (p_msg      => 'source_id_int_2 = '||
3051                         p_event_source_info.source_id_int_2
3052          ,p_level    => C_LEVEL_PROCEDURE
3053          ,p_module   =>l_log_module);
3054      trace
3055          (p_msg      => 'source_id_int_3 = '||
3056                         p_event_source_info.source_id_int_3
3057          ,p_level    => C_LEVEL_PROCEDURE
3058          ,p_module   =>l_log_module);
3059      trace
3060          (p_msg      => 'source_id_int_4 = '||
3061                         p_event_source_info.source_id_int_4
3062          ,p_level    => C_LEVEL_PROCEDURE
3063          ,p_module   =>l_log_module);
3064      trace
3065          (p_msg      => 'source_id_char_1 = '||
3066                         p_event_source_info.source_id_char_1
3067          ,p_level    => C_LEVEL_PROCEDURE
3068          ,p_module   =>l_log_module);
3069      trace
3070          (p_msg      => 'source_id_char_2 = '||
3071                         p_event_source_info.source_id_char_2
3072          ,p_level    => C_LEVEL_PROCEDURE
3073          ,p_module   =>l_log_module);
3074      trace
3075          (p_msg      => 'source_id_char_3 = '||
3076                         p_event_source_info.source_id_char_3
3077          ,p_level    => C_LEVEL_PROCEDURE
3078          ,p_module   =>l_log_module);
3079      trace
3080          (p_msg      => 'source_id_char_4 = '||
3081                         p_event_source_info.source_id_char_4
3082          ,p_level    => C_LEVEL_PROCEDURE
3083          ,p_module   =>l_log_module);
3084      trace
3085          (p_msg      => 'p_event_class_code = '||p_event_class_code
3086          ,p_level    => C_LEVEL_PROCEDURE
3087          ,p_module   =>l_log_module);
3088      trace
3089          (p_msg      => 'p_event_type_code = '||p_event_type_code
3090          ,p_level    => C_LEVEL_PROCEDURE
3091          ,p_module   =>l_log_module);
3092      trace
3093          (p_msg      => 'p_event_date = '||p_event_date
3094          ,p_level    => C_LEVEL_PROCEDURE
3095          ,p_module   =>l_log_module);
3096      trace
3097          (p_msg      => 'security_id_int_1 = '||
3098                         xla_events_pub_pkg.g_security.security_id_int_1
3099          ,p_level    => C_LEVEL_PROCEDURE
3100          ,p_module   =>l_log_module);
3101      trace
3102          (p_msg      => 'security_id_int_2 = '||
3103                         xla_events_pub_pkg.g_security.security_id_int_2
3104          ,p_level    => C_LEVEL_PROCEDURE
3105          ,p_module   =>l_log_module);
3106      trace
3107          (p_msg      => 'security_id_int_3 = '||
3108                         xla_events_pub_pkg.g_security.security_id_int_3
3109          ,p_level    => C_LEVEL_PROCEDURE
3110          ,p_module   =>l_log_module);
3111      trace
3112          (p_msg      => 'security_id_char_1 = '||
3113                         xla_events_pub_pkg.g_security.security_id_char_1
3114          ,p_level    => C_LEVEL_PROCEDURE
3115          ,p_module   =>l_log_module);
3116      trace
3117          (p_msg      => 'security_id_char_2 = '||
3118                         xla_events_pub_pkg.g_security.security_id_char_2
3119          ,p_level    => C_LEVEL_PROCEDURE
3120          ,p_module   =>l_log_module);
3121      trace
3122          (p_msg      => 'security_id_char_3 = '||
3123                         xla_events_pub_pkg.g_security.security_id_char_3
3124          ,p_level    => C_LEVEL_PROCEDURE
3125          ,p_module   =>l_log_module);
3126      trace
3127          (p_msg      => 'valuation_method = '||p_valuation_method
3128          ,p_level    => C_LEVEL_PROCEDURE
3129          ,p_module   =>l_log_module);
3130   END IF;
3131 
3132    SAVEPOINT before_event_delete;
3133    g_action := C_EVENT_DELETE;
3134 
3135    ----------------------------------------------------------------------------
3136    -- Following sets the Security Context for the execution. This enables the
3137    -- event API to respect the transaction security.
3138    ----------------------------------------------------------------------------
3139    xla_security_pkg.set_security_context(p_event_source_info.application_id);
3140 
3141    ----------------------------------------------------------------------------
3142    -- check to see the API is not called for manual events
3143    ----------------------------------------------------------------------------
3144    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
3145       xla_exceptions_pkg.raise_message
3146          (p_appli_s_name   => 'XLA'
3147          ,p_msg_name       => 'XLA_COMMON_ERROR'
3148          ,p_token_1        => 'ERROR'
3149          ,p_value_1        => 'For MANUAL events this API cannot be called'
3150          ,p_token_2        => 'LOCATION'
3151          ,p_value_2        => 'xla_events_pkg.delete_events');
3152    ELSE
3153       g_context := C_REGULAR_EVENT_CONTEXT;
3154    END IF;
3155 
3156    ----------------------------------------------------------------------------
3157    -- truncate date
3158    ----------------------------------------------------------------------------
3159    l_event_date := TRUNC(p_event_date);
3160 
3161    ----------------------------------------------------------------------------
3162    -- Validate parameters
3163    ----------------------------------------------------------------------------
3164    validate_params
3165       (p_source_info       => p_event_source_info
3166       ,p_event_class_code  => p_event_class_code
3167       ,p_event_type_code   => p_event_type_code);
3168 
3169    ----------------------------------------------------------------------------
3170    -- Get document PK
3171    ----------------------------------------------------------------------------
3172    cache_entity_info
3173       (p_source_info      => p_event_source_info
3174       ,p_valuation_method => p_valuation_method
3175       ,p_event_id         => NULL);
3176 
3177    ----------------------------------------------------------------------------
3178    -- Check entity existency
3179    ----------------------------------------------------------------------------
3180    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3181       trace
3182          (p_msg      => 'g_entity_id = '||g_entity_id
3183          ,p_level    => C_LEVEL_STATEMENT
3184          ,p_module   =>l_log_module);
3185    END IF;
3186 
3187    IF  g_entity_id IS NULL  THEN
3188       xla_exceptions_pkg.raise_message
3189          (p_appli_s_name   => 'XLA'
3190          ,p_msg_name       => 'XLA_COMMON_ERROR'
3191          ,p_token_1        => 'ERROR'
3192          ,p_value_1        => 'No event exists for the document represented '||
3193                               'by the given source information.'
3194          ,p_token_2        => 'LOCATION'
3195          ,p_value_2        => 'xla_events_pkg.delete_events (fn)');
3196    END IF;
3197 
3198    ----------------------------------------------------------------------------
3199    -- Fetching event ids for the events that are going to be deleted
3200    ----------------------------------------------------------------------------
3201    begin
3202      if(g_gapless_flag='N') then
3203        SELECT event_id     BULK COLLECT
3204          INTO l_array_events
3205          FROM xla_events
3206        WHERE  event_date          = NVL(l_event_date, event_date)
3207          AND  event_status_code   <> xla_events_pub_pkg.C_EVENT_PROCESSED
3208          AND  event_type_code     = NVL(p_event_type_code, event_type_code)
3209          AND  entity_id           = g_entity_id
3210          AND  event_type_code IN
3211                 (SELECT event_type_code
3212                  FROM   xla_event_types_b
3213                  WHERE  application_id      = g_application_id
3214                    AND  entity_code         = g_entity_type_code
3215                    AND  event_class_code    = NVL(p_event_class_code,
3216                                                   event_class_code));
3217      else
3218        SELECT event_id, event_number     BULK COLLECT
3219          INTO l_array_events, g_gapless_event_number
3220          FROM xla_events
3221        WHERE  event_date          = NVL(l_event_date, event_date)
3222          AND  event_status_code   <> xla_events_pub_pkg.C_EVENT_PROCESSED
3223          AND  event_type_code     = NVL(p_event_type_code, event_type_code)
3224          AND  entity_id           = g_entity_id
3225          AND  event_type_code IN
3226                 (SELECT event_type_code
3227                  FROM   xla_event_types_b
3228                  WHERE  application_id      = g_application_id
3229                    AND  entity_code         = g_entity_type_code
3230                    AND  event_class_code    = NVL(p_event_class_code,
3231                                                   event_class_code))
3232        order by event_number;
3233      end if;
3234    exception when no_data_found then
3235      null;
3236    end;
3237 
3238    ----------------------------------------------------------------------------
3239    -- Call routine to delete errors/JEs related to the event bug # 2701681
3240    ----------------------------------------------------------------------------
3241    FOR i IN 1..l_array_events.COUNT LOOP
3242       xla_journal_entries_pkg.delete_journal_entries
3243          (p_event_id                  => l_array_events(i)
3244          ,p_application_id            => g_application_id);
3245    END LOOP;
3246 
3247    ----------------------------------------------------------------------------
3248    -- Actual Delete
3249    ----------------------------------------------------------------------------
3250    FORAll i IN 1..l_array_events.COUNT
3251       DELETE xla_events
3252          WHERE event_id             = l_array_events(i);
3253 
3254    l_event_deleted := SQL%ROWCOUNT;
3255 
3256    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3257       trace
3258          (p_msg      => 'Number of events deleted = '||l_event_deleted
3259          ,p_level    => C_LEVEL_STATEMENT
3260          ,p_module   =>l_log_module);
3261       trace
3262          (p_msg      => 'g_gapless_flag = '||g_gapless_flag
3263          ,p_level    => C_LEVEL_STATEMENT
3264          ,p_module   =>l_log_module);
3265    END IF;
3266 
3267    if(g_gapless_flag='Y' and l_event_deleted>0 ) then
3268      update xla_events
3269         set on_hold_flag='Y'
3270       where event_number>g_gapless_event_number(1)
3271             and on_hold_flag='N'
3272             and entity_id=g_entity_id;
3273    end if;
3274 
3275 
3276   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3277     trace
3278          (p_msg      => 'end of procedure delete_events'
3279          ,p_level    => C_LEVEL_PROCEDURE
3280          ,p_module   =>l_log_module);
3281     trace
3282          (p_msg      => 'return value:'||to_char(l_event_deleted)
3283          ,p_level    => C_LEVEL_PROCEDURE
3284          ,p_module   =>l_log_module);
3285   END IF;
3286 
3287    RETURN l_event_deleted;
3288 EXCEPTION
3289 WHEN xla_exceptions_pkg.application_exception THEN
3290    ROLLBACK to SAVEPOINT before_event_delete;
3291    RAISE;
3292 WHEN OTHERS                                   THEN
3293    ROLLBACK to SAVEPOINT before_event_delete;
3294    xla_exceptions_pkg.raise_message
3295       (p_location => 'xla_events_pkg.delete_events (fn)');
3296 END delete_events;
3297 
3298 
3299 --============================================================================
3300 --
3301 -- This function is used to delete one entity. It will:
3302 --    - validate input parameters
3303 --    - check if there is still event associated with the entity
3304 --    - if yes, return 1 without deletion
3305 --    - else delete entity, return 0
3306 --
3307 --============================================================================
3308 
3309 FUNCTION delete_entity
3310    (p_source_info            IN  xla_events_pub_pkg.t_event_source_info
3311    ,p_valuation_method        IN  VARCHAR2)
3312 RETURN INTEGER IS
3313 
3314 l_log_module                VARCHAR2(240);
3315 l_temp                      NUMBER;
3316 l_entity_id                 XLA_TRANSACTION_ENTITIES.ENTITY_ID%TYPE;
3317 cursor c_existing_events is
3318     select 1
3319       from xla_events
3320      where entity_id=l_entity_id;
3321 BEGIN
3322   IF g_log_enabled THEN
3323     l_log_module := C_DEFAULT_MODULE||'.delete_entity';
3324   END IF;
3325   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3326      trace
3327          (p_msg      => 'BEGIN of procedure delete_entity'
3328          ,p_level    => C_LEVEL_PROCEDURE
3329          ,p_module   =>l_log_module);
3330      trace
3331          (p_msg      => 'source_application_id = '||
3332                         p_source_info.source_application_id
3333          ,p_level    => C_LEVEL_PROCEDURE
3334          ,p_module   =>l_log_module);
3335      trace
3336          (p_msg      => 'application_id = '||p_source_info.application_id
3337          ,p_level    => C_LEVEL_PROCEDURE
3338          ,p_module   =>l_log_module);
3339      trace
3340          (p_msg      => 'legal_entity_id = '||p_source_info.legal_entity_id
3341          ,p_level    => C_LEVEL_PROCEDURE
3342          ,p_module   =>l_log_module);
3343      trace
3344          (p_msg      => 'ledger_id = '||p_source_info.ledger_id
3345          ,p_level    => C_LEVEL_PROCEDURE
3346          ,p_module   =>l_log_module);
3347      trace
3348          (p_msg      => 'entity_type_code = '||p_source_info.entity_type_code
3349          ,p_level    => C_LEVEL_PROCEDURE
3350          ,p_module   =>l_log_module);
3351      trace
3352          (p_msg      => 'transaction_number = '||
3353                         p_source_info.transaction_number
3354          ,p_level    => C_LEVEL_PROCEDURE
3355          ,p_module   =>l_log_module);
3356      trace
3357          (p_msg      => 'source_id_int_1 = '||p_source_info.source_id_int_1
3358          ,p_level    => C_LEVEL_PROCEDURE
3359          ,p_module   =>l_log_module);
3360      trace
3361          (p_msg      => 'source_id_int_2 = '||p_source_info.source_id_int_2
3362          ,p_level    => C_LEVEL_PROCEDURE
3363          ,p_module   =>l_log_module);
3364      trace
3365          (p_msg      => 'source_id_int_3 = '||p_source_info.source_id_int_3
3366          ,p_level    => C_LEVEL_PROCEDURE
3367          ,p_module   =>l_log_module);
3368      trace
3369          (p_msg      => 'source_id_int_4 = '||p_source_info.source_id_int_4
3370          ,p_level    => C_LEVEL_PROCEDURE
3371          ,p_module   =>l_log_module);
3372      trace
3373          (p_msg      => 'source_id_char_1 = '||p_source_info.source_id_char_1
3374          ,p_level    => C_LEVEL_PROCEDURE
3375          ,p_module   =>l_log_module);
3376      trace
3377          (p_msg      => 'source_id_char_2 = '||p_source_info.source_id_char_2
3378          ,p_level    => C_LEVEL_PROCEDURE
3379          ,p_module   =>l_log_module);
3380      trace
3381          (p_msg      => 'source_id_char_3 = '||p_source_info.source_id_char_3
3382          ,p_level    => C_LEVEL_PROCEDURE
3383          ,p_module   =>l_log_module);
3384      trace
3385          (p_msg      => 'source_id_char_4 = '||p_source_info.source_id_char_4
3386          ,p_level    => C_LEVEL_PROCEDURE
3387          ,p_module   =>l_log_module);
3388      trace
3389          (p_msg      => 'security_id_int_1 = '||
3390                         xla_events_pub_pkg.g_security.security_id_int_1
3391          ,p_level    => C_LEVEL_PROCEDURE
3392          ,p_module   =>l_log_module);
3393      trace
3394          (p_msg      => 'security_id_int_2 = '||
3395                         xla_events_pub_pkg.g_security.security_id_int_2
3396          ,p_level    => C_LEVEL_PROCEDURE
3397          ,p_module   =>l_log_module);
3398      trace
3399          (p_msg      => 'security_id_int_3 = '||
3400                         xla_events_pub_pkg.g_security.security_id_int_3
3401          ,p_level    => C_LEVEL_PROCEDURE
3402          ,p_module   =>l_log_module);
3403      trace
3404          (p_msg      => 'security_id_char_1 = '||
3405                         xla_events_pub_pkg.g_security.security_id_char_1
3406          ,p_level    => C_LEVEL_PROCEDURE
3407          ,p_module   =>l_log_module);
3408      trace
3409          (p_msg      => 'security_id_char_2 = '||
3410                         xla_events_pub_pkg.g_security.security_id_char_2
3411          ,p_level    => C_LEVEL_PROCEDURE
3412          ,p_module   =>l_log_module);
3413      trace
3414          (p_msg      => 'security_id_char_3 = '||
3415                         xla_events_pub_pkg.g_security.security_id_char_3
3416          ,p_level    => C_LEVEL_PROCEDURE
3417          ,p_module   =>l_log_module);
3418      trace
3419          (p_msg      => 'valuation_method = '||p_valuation_method
3420          ,p_level    => C_LEVEL_PROCEDURE
3421          ,p_module   =>l_log_module);
3422   END IF;
3423 
3424 
3425   SAVEPOINT before_entity_delete;
3426    ----------------------------------------------------------------------------
3427    -- Following sets the Security Context for the execution. This enables the
3428    -- event API to respect the transaction security.
3429    ----------------------------------------------------------------------------
3430    xla_security_pkg.set_security_context(p_source_info.application_id);
3431 
3432   ----------------------------------------------------------------------------
3433   -- Validate parameters
3434   ----------------------------------------------------------------------------
3435   validate_params
3436      (p_source_info       => p_source_info);
3437 
3438   BEGIN
3439     SELECT entity_id
3440       INTO l_entity_id
3441       FROM xla_transaction_entities a
3442      WHERE a.application_id                  = p_source_info.application_id
3443        AND a.ledger_id                       = p_source_info.ledger_id
3444        AND a.entity_code                     = p_source_info.entity_type_code
3445        AND NVL(a.source_id_int_1,C_NUM)      =
3446                      NVL(p_source_info.source_id_int_1,C_NUM)
3447        AND NVL(a.source_id_int_2,C_NUM)      =
3448                      NVL(p_source_info.source_id_int_2,C_NUM)
3449        AND NVL(a.source_id_int_3,C_NUM)      =
3450                      NVL(p_source_info.source_id_int_3,C_NUM)
3451        AND NVL(a.source_id_int_4,C_NUM)      =
3452                      NVL(p_source_info.source_id_int_4,C_NUM)
3453        AND NVL(a.source_id_char_1,C_CHAR)    =
3454                      NVL(p_source_info.source_id_char_1,C_CHAR)
3455        AND NVL(a.source_id_char_2,C_CHAR)    =
3456                      NVL(p_source_info.source_id_char_2,C_CHAR)
3457        AND NVL(a.source_id_char_3,C_CHAR)    =
3458                      NVL(p_source_info.source_id_char_3,C_CHAR)
3459        AND NVL(a.source_id_char_4,C_CHAR)    =
3460                      NVL(p_source_info.source_id_char_4,C_CHAR)
3461        AND NVL(a.valuation_method,C_CHAR)    =
3462                      NVL(p_valuation_method,C_CHAR)
3463        AND NVL(a.security_id_int_1,C_NUM)    =
3464                      NVL(xla_events_pub_pkg.g_security.security_id_int_1,C_NUM)
3465        AND NVL(a.security_id_int_2,C_NUM)    =
3466                      NVL(xla_events_pub_pkg.g_security.security_id_int_2,C_NUM)
3467        AND NVL(a.security_id_int_3,C_NUM)    =
3468                     NVL(xla_events_pub_pkg.g_security.security_id_int_3,C_NUM)
3469        AND NVL(a.security_id_char_1,C_CHAR)  =
3470                     NVL(xla_events_pub_pkg.g_security.security_id_char_1,C_CHAR)
3471        AND NVL(a.security_id_char_2,C_CHAR)  =
3472                     NVL(xla_events_pub_pkg.g_security.security_id_char_2,C_CHAR)
3473        AND NVL(a.security_id_char_3,C_CHAR)  =
3474                    NVL(xla_events_pub_pkg.g_security.security_id_char_3,C_CHAR);
3475   EXCEPTION when others then
3476     xla_exceptions_pkg.raise_message
3477          (p_appli_s_name   => 'XLA'
3478          ,p_msg_name       => 'XLA_COMMON_ERROR'
3479          ,p_token_1        => 'ERROR'
3480          ,p_value_1        =>
3481          'Unable to perform DELETE on the entity. The entity does not exist'
3482          ,p_token_2        => 'LOCATION'
3483          ,p_value_2        => 'xla_events_pkg.delete_entity');
3484   END;
3485 
3486   OPEN c_existing_events;
3487   FETCH c_existing_events into l_temp;
3488 
3489   IF c_existing_events%FOUND THEN
3490   -- there is event existing for the entity, can't delete
3491     IF (C_LEVEL_STATEMENT>= g_log_level) THEN
3492       trace
3493            (p_msg      => 'There is event existing for the entity, id:'||
3494                           to_char(l_entity_id)
3495            ,p_level    => C_LEVEL_STATEMENT
3496            ,p_module   =>l_log_module);
3497     END IF;
3498     IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3499       trace
3500            (p_msg      => 'END of function delete_entity, return 1'
3501            ,p_level    => C_LEVEL_PROCEDURE
3502            ,p_module   =>l_log_module);
3503     END IF;
3504     CLOSE c_existing_events;
3505     RETURN 1;
3506   END IF;
3507   CLOSE c_existing_events;
3508 
3509   DELETE xla_transaction_entities
3510    WHERE entity_id = l_entity_id
3511      AND application_id = p_source_info.application_id;
3512 
3513    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3514       trace
3515          (p_msg      => 'Number of entities deleted = '||SQL%ROWCOUNT
3516          ,p_level    => C_LEVEL_STATEMENT
3517          ,p_module   =>l_log_module);
3518    END IF;
3519 
3520    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3521       trace
3522          (p_msg      => 'END of function delete_entity, return 0'
3523          ,p_level    => C_LEVEL_PROCEDURE
3524          ,p_module   =>l_log_module);
3525    END IF;
3526    RETURN 0;
3527 EXCEPTION
3528 WHEN xla_exceptions_pkg.application_exception THEN
3529    ROLLBACK to SAVEPOINT before_entity_delete;
3530    RAISE;
3531 WHEN OTHERS                                   THEN
3532    ROLLBACK to SAVEPOINT before_entity_delete;
3533    xla_exceptions_pkg.raise_message
3534       (p_location => 'xla_events_pkg.delete_entity');
3535 END delete_entity;
3536 
3537 --=============================================================================
3538 --
3539 -- following is not the final code and is not tested as there is no requirement
3540 -- for purge routine, for now.
3541 --
3542 --=============================================================================
3543 
3544 PROCEDURE purge_entity
3545    (p_event_source_info          IN  xla_events_pub_pkg.t_event_source_info) IS
3546 BEGIN
3547    trace('> xla_events_pkg.delete_entity'                 , 20);
3548 
3549    SAVEPOINT before_entity_delete;
3550    g_action := C_EVENT_DELETE;
3551 
3552    ----------------------------------------------------------------------------
3553    -- Following sets the Security Context for the execution. This enables the
3554    -- event API to respect the transaction security.
3555    ----------------------------------------------------------------------------
3556    xla_security_pkg.set_security_context(p_event_source_info.application_id);
3557 
3558    --
3559    -- Validate parameters
3560    --
3561    validate_params
3562       (p_source_info       => p_event_source_info);
3563 
3564    --
3565    -- Get document PK
3566    --
3567    cache_entity_info
3568       (p_source_info      => p_event_source_info
3569       ,p_valuation_method => NULL
3570       ,p_event_id         => NULL);
3571 
3572    --
3573    -- Check entity existency
3574    --
3575    IF  g_entity_id IS NULL  THEN
3576       xla_exceptions_pkg.raise_message
3577          (p_appli_s_name   => 'XLA'
3578          ,p_msg_name       => 'XLA_COMMON_ERROR'
3579          ,p_token_1        => 'ERROR'
3580          ,p_value_1        =>
3581  'No event exists for the document represented by the given source information.'
3582          ,p_token_2        => 'LOCATION'
3583          ,p_value_2        => 'xla_events_pkg.delete_entity');
3584    END IF;
3585 
3586    trace('< xla_events_pkg.delete_entity'                 , 20);
3587 EXCEPTION
3588 WHEN xla_exceptions_pkg.application_exception THEN
3589    ROLLBACK to SAVEPOINT before_entity_delete;
3590    RAISE;
3591 WHEN OTHERS                                   THEN
3592    ROLLBACK to SAVEPOINT before_entity_delete;
3593    xla_exceptions_pkg.raise_message
3594       (p_location => 'xla_events_pkg.delete_entity');
3595 END purge_entity;
3596 
3597 
3598 --=============================================================================
3599 --
3600 --
3601 -- Changed to fix bug # 2899700.
3602 --
3603 --=============================================================================
3604 
3605 FUNCTION get_event_info
3606    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
3607    ,p_valuation_method             IN  VARCHAR2
3608    ,p_event_id                     IN  INTEGER)
3609 RETURN xla_events_pub_pkg.t_event_info IS
3610 
3611 l_event_info                    xla_events_pub_pkg.t_event_info;
3612 l_log_module                VARCHAR2(240);
3613 
3614 BEGIN
3615   IF g_log_enabled THEN
3616     l_log_module := C_DEFAULT_MODULE||'.get_event_info';
3617   END IF;
3618   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3619      trace
3620          (p_msg      => 'BEGIN of procedure get_event_info'
3621          ,p_level    => C_LEVEL_PROCEDURE
3622          ,p_module   =>l_log_module);
3623      trace
3624          (p_msg      => 'source_application_id = '||
3625                         p_event_source_info.source_application_id
3626          ,p_level    => C_LEVEL_PROCEDURE
3627          ,p_module   =>l_log_module);
3628      trace
3629          (p_msg      => 'application_id = '||p_event_source_info.application_id
3630          ,p_level    => C_LEVEL_PROCEDURE
3631          ,p_module   =>l_log_module);
3632      trace
3633          (p_msg      => 'legal_entity_id = '||
3634                         p_event_source_info.legal_entity_id
3635          ,p_level    => C_LEVEL_PROCEDURE
3636          ,p_module   =>l_log_module);
3637      trace
3638          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
3639          ,p_level    => C_LEVEL_PROCEDURE
3640          ,p_module   =>l_log_module);
3641      trace
3642          (p_msg      => 'entity_type_code = '||
3643                         p_event_source_info.entity_type_code
3644          ,p_level    => C_LEVEL_PROCEDURE
3645          ,p_module   =>l_log_module);
3646      trace
3647          (p_msg      => 'transaction_number = '||
3648                         p_event_source_info.transaction_number
3649          ,p_level    => C_LEVEL_PROCEDURE
3650          ,p_module   =>l_log_module);
3651      trace
3652          (p_msg      => 'source_id_int_1 = '||
3653                         p_event_source_info.source_id_int_1
3654          ,p_level    => C_LEVEL_PROCEDURE
3655          ,p_module   =>l_log_module);
3656      trace
3657          (p_msg      => 'source_id_int_2 = '||
3658                         p_event_source_info.source_id_int_2
3659          ,p_level    => C_LEVEL_PROCEDURE
3660          ,p_module   =>l_log_module);
3661      trace
3662          (p_msg      => 'source_id_int_3 = '||
3663                         p_event_source_info.source_id_int_3
3664          ,p_level    => C_LEVEL_PROCEDURE
3665          ,p_module   =>l_log_module);
3666      trace
3667          (p_msg      => 'source_id_int_4 = '||
3668                         p_event_source_info.source_id_int_4
3669          ,p_level    => C_LEVEL_PROCEDURE
3670          ,p_module   =>l_log_module);
3671      trace
3672          (p_msg      => 'source_id_char_1 = '||
3673                         p_event_source_info.source_id_char_1
3674          ,p_level    => C_LEVEL_PROCEDURE
3675          ,p_module   =>l_log_module);
3676      trace
3677          (p_msg      => 'source_id_char_2 = '||
3678                         p_event_source_info.source_id_char_2
3679          ,p_level    => C_LEVEL_PROCEDURE
3680          ,p_module   =>l_log_module);
3681      trace
3682          (p_msg      => 'source_id_char_3 = '||
3683                         p_event_source_info.source_id_char_3
3684          ,p_level    => C_LEVEL_PROCEDURE
3685          ,p_module   =>l_log_module);
3686      trace
3687          (p_msg      => 'source_id_char_4 = '||
3688                         p_event_source_info.source_id_char_4
3689          ,p_level    => C_LEVEL_PROCEDURE
3690          ,p_module   =>l_log_module);
3691      trace
3692          (p_msg      => 'p_event_id = '||p_event_id
3693          ,p_level    => C_LEVEL_PROCEDURE
3694          ,p_module   =>l_log_module);
3695      trace
3696          (p_msg      => 'security_id_int_1 = '||
3697                         xla_events_pub_pkg.g_security.security_id_int_1
3698          ,p_level    => C_LEVEL_PROCEDURE
3699          ,p_module   =>l_log_module);
3700      trace
3701          (p_msg      => 'security_id_int_2 = '||
3702                         xla_events_pub_pkg.g_security.security_id_int_2
3703          ,p_level    => C_LEVEL_PROCEDURE
3704          ,p_module   =>l_log_module);
3705      trace
3706          (p_msg      => 'security_id_int_3 = '||
3707                         xla_events_pub_pkg.g_security.security_id_int_3
3708          ,p_level    => C_LEVEL_PROCEDURE
3709          ,p_module   =>l_log_module);
3710      trace
3711          (p_msg      => 'security_id_char_1 = '||
3712                         xla_events_pub_pkg.g_security.security_id_char_1
3713          ,p_level    => C_LEVEL_PROCEDURE
3714          ,p_module   =>l_log_module);
3715      trace
3716          (p_msg      => 'security_id_char_2 = '||
3717                         xla_events_pub_pkg.g_security.security_id_char_2
3718          ,p_level    => C_LEVEL_PROCEDURE
3719          ,p_module   =>l_log_module);
3720      trace
3721          (p_msg      => 'security_id_char_3 = '||
3722                         xla_events_pub_pkg.g_security.security_id_char_3
3723          ,p_level    => C_LEVEL_PROCEDURE
3724          ,p_module   =>l_log_module);
3725      trace
3726          (p_msg      => 'valuation_method = '||p_valuation_method
3727          ,p_level    => C_LEVEL_PROCEDURE
3728          ,p_module   =>l_log_module);
3729   END IF;
3730 
3731    ----------------------------------------------------------------------------
3732    -- Following sets the Security Context for the execution. This enables the
3733    -- event API to respect the transaction security.
3734    ----------------------------------------------------------------------------
3735    xla_security_pkg.set_security_context(p_event_source_info.application_id);
3736 
3737    ----------------------------------------------------------------------------
3738    -- Set the right context for calling this API
3739    -- Changed to fix bug # 2899700
3740    ----------------------------------------------------------------------------
3741    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
3742       g_context := C_MANUAL_EVENT_CONTEXT;
3743    ELSE
3744       g_context := C_REGULAR_EVENT_CONTEXT;
3745    END IF;
3746 
3747    g_action := C_EVENT_QUERY;
3748 
3749    ----------------------------------------------------------------------------
3750    -- perform validation specific to 'get event information'
3751    ----------------------------------------------------------------------------
3752    IF  p_event_id IS NULL  THEN
3753       xla_exceptions_pkg.raise_message
3754          (p_appli_s_name   => 'XLA'
3755          ,p_msg_name       => 'XLA_COMMON_ERROR'
3756          ,p_token_1        => 'ERROR'
3757          ,p_value_1        =>
3758          'Event ID has an invalid value. It cannot have a NULL value.'
3759          ,p_token_2        => 'LOCATION'
3760          ,p_value_2        => 'xla_events_pkg.get_event_info');
3761    END IF;
3762 
3763    ----------------------------------------------------------------------------
3764    -- Validate parameters
3765    ----------------------------------------------------------------------------
3766    validate_params
3767       (p_source_info       => p_event_source_info);
3768 
3769    ----------------------------------------------------------------------------
3770    -- Get document PK
3771    ----------------------------------------------------------------------------
3772    cache_entity_info
3773       (p_source_info      => p_event_source_info
3774       ,p_valuation_method => p_valuation_method
3775       ,p_event_id         => p_event_id);
3776 
3777    ----------------------------------------------------------------------------
3778    -- Check entity existency
3779    ----------------------------------------------------------------------------
3780    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3781       trace
3782          (p_msg      => 'g_entity_id = '||g_entity_id
3783          ,p_level    => C_LEVEL_STATEMENT
3784          ,p_module   =>l_log_module);
3785    END IF;
3786 
3787    IF  g_entity_id IS NULL  THEN
3788       xla_exceptions_pkg.raise_message
3789          (p_appli_s_name   => 'XLA'
3790          ,p_msg_name       => 'XLA_COMMON_ERROR'
3791          ,p_token_1        => 'ERROR'
3792          ,p_value_1        => 'No event exists for the document represented '||
3793                               'by the given source information.'
3794          ,p_token_2        => 'LOCATION'
3795          ,p_value_2        => 'xla_events_pkg.get_event_info');
3796    END IF;
3797 
3798    SELECT event_id
3799          ,event_number
3800          ,event_type_code
3801          ,event_date
3802          ,event_status_code
3803          ,on_hold_flag
3804          ,reference_num_1
3805          ,reference_num_2
3806          ,reference_num_3
3807          ,reference_num_4
3808          ,reference_char_1
3809          ,reference_char_2
3810          ,reference_char_3
3811          ,reference_char_4
3812          ,reference_date_1
3813          ,reference_date_2
3814          ,reference_date_3
3815          ,reference_date_4
3816    INTO   l_event_info.event_id
3817          ,l_event_info.event_number
3818          ,l_event_info.event_type_code
3819          ,l_event_info.event_date
3820          ,l_event_info.event_status_code
3821          ,l_event_info.on_hold_flag
3822          ,l_event_info.reference_num_1
3823          ,l_event_info.reference_num_2
3824          ,l_event_info.reference_num_3
3825          ,l_event_info.reference_num_4
3826          ,l_event_info.reference_char_1
3827          ,l_event_info.reference_char_2
3828          ,l_event_info.reference_char_3
3829          ,l_event_info.reference_char_4
3830          ,l_event_info.reference_date_1
3831          ,l_event_info.reference_date_2
3832          ,l_event_info.reference_date_3
3833          ,l_event_info.reference_date_4
3834    FROM   xla_events
3835    WHERE  event_id            = p_event_id
3836      AND  entity_id           = g_entity_id;
3837 
3838   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3839     trace
3840          (p_msg      => 'end of procedure get_event_info'
3841          ,p_level    => C_LEVEL_PROCEDURE
3842          ,p_module   =>l_log_module);
3843   END IF;
3844 
3845    RETURN (l_event_info);
3846 EXCEPTION
3847 WHEN NO_DATA_FOUND                            THEN
3848    xla_exceptions_pkg.raise_message
3849       (p_appli_s_name   => 'XLA'
3850       ,p_msg_name       => 'XLA_COMMON_ERROR'
3851       ,p_token_1        => 'ERROR'
3852       ,p_value_1        => 'The event id '||p_event_id||' does not exist'
3853       ,p_token_2        => 'LOCATION'
3854       ,p_value_2        => 'xla_events_pkg.get_event_info');
3855 WHEN xla_exceptions_pkg.application_exception THEN
3856    RAISE;
3857 WHEN OTHERS                                   THEN
3858    xla_exceptions_pkg.raise_message
3859       (p_location => 'xla_events_pkg.get_event_info (fn)');
3860 END get_event_info;
3861 
3862 
3863 --=============================================================================
3864 --
3865 --
3866 --
3867 --=============================================================================
3868 
3869 FUNCTION get_event_status
3870    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
3871    ,p_valuation_method             IN  VARCHAR2
3872    ,p_event_id                     IN  INTEGER)
3873 RETURN VARCHAR2 IS
3874 
3875 l_event_info                 xla_events_pub_pkg.t_event_info;
3876 l_log_module                VARCHAR2(240);
3877 BEGIN
3878   IF g_log_enabled THEN
3879     l_log_module := C_DEFAULT_MODULE||'.get_event_status';
3880   END IF;
3881   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3882     trace
3883          (p_msg      => 'BEGIN of procedure get_event_status'
3884          ,p_level    => C_LEVEL_PROCEDURE
3885          ,p_module   =>l_log_module);
3886      trace
3887          (p_msg      => 'source_application_id = '||
3888                         p_event_source_info.source_application_id
3889          ,p_level    => C_LEVEL_PROCEDURE
3890          ,p_module   =>l_log_module);
3891      trace
3892          (p_msg      => 'application_id = '||p_event_source_info.application_id
3893          ,p_level    => C_LEVEL_PROCEDURE
3894          ,p_module   =>l_log_module);
3895      trace
3896          (p_msg      => 'legal_entity_id = '||
3897                         p_event_source_info.legal_entity_id
3898          ,p_level    => C_LEVEL_PROCEDURE
3899          ,p_module   =>l_log_module);
3900      trace
3901          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
3902          ,p_level    => C_LEVEL_PROCEDURE
3903          ,p_module   =>l_log_module);
3904      trace
3905          (p_msg      => 'entity_type_code = '||
3906                         p_event_source_info.entity_type_code
3907          ,p_level    => C_LEVEL_PROCEDURE
3908          ,p_module   =>l_log_module);
3909      trace
3910          (p_msg      => 'transaction_number = '||
3911                         p_event_source_info.transaction_number
3912          ,p_level    => C_LEVEL_PROCEDURE
3913          ,p_module   =>l_log_module);
3914      trace
3915          (p_msg      => 'source_id_int_1 = '||
3916                         p_event_source_info.source_id_int_1
3917          ,p_level    => C_LEVEL_PROCEDURE
3918          ,p_module   =>l_log_module);
3919      trace
3920          (p_msg      => 'source_id_int_2 = '||
3921                         p_event_source_info.source_id_int_2
3922          ,p_level    => C_LEVEL_PROCEDURE
3923          ,p_module   =>l_log_module);
3924      trace
3925          (p_msg      => 'source_id_int_3 = '||
3926                         p_event_source_info.source_id_int_3
3927          ,p_level    => C_LEVEL_PROCEDURE
3928          ,p_module   =>l_log_module);
3929      trace
3930          (p_msg      => 'source_id_int_4 = '||
3931                         p_event_source_info.source_id_int_4
3932          ,p_level    => C_LEVEL_PROCEDURE
3933          ,p_module   =>l_log_module);
3934      trace
3935          (p_msg      => 'source_id_char_1 = '||
3936                         p_event_source_info.source_id_char_1
3937          ,p_level    => C_LEVEL_PROCEDURE
3938          ,p_module   =>l_log_module);
3939      trace
3940          (p_msg      => 'source_id_char_2 = '||
3941                         p_event_source_info.source_id_char_2
3942          ,p_level    => C_LEVEL_PROCEDURE
3943          ,p_module   =>l_log_module);
3944      trace
3945          (p_msg      => 'source_id_char_3 = '||
3946                         p_event_source_info.source_id_char_3
3947          ,p_level    => C_LEVEL_PROCEDURE
3948          ,p_module   =>l_log_module);
3949      trace
3950          (p_msg      => 'source_id_char_4 = '||
3951                         p_event_source_info.source_id_char_4
3952          ,p_level    => C_LEVEL_PROCEDURE
3953          ,p_module   =>l_log_module);
3954      trace
3955          (p_msg      => 'p_event_id = '||p_event_id
3956          ,p_level    => C_LEVEL_PROCEDURE
3957          ,p_module   =>l_log_module);
3958      trace
3959          (p_msg      => 'security_id_int_1 = '||
3960                         xla_events_pub_pkg.g_security.security_id_int_1
3961          ,p_level    => C_LEVEL_PROCEDURE
3962          ,p_module   =>l_log_module);
3963      trace
3964          (p_msg      => 'security_id_int_2 = '||
3965                         xla_events_pub_pkg.g_security.security_id_int_2
3966          ,p_level    => C_LEVEL_PROCEDURE
3967          ,p_module   =>l_log_module);
3968      trace
3969          (p_msg      => 'security_id_int_3 = '||
3970                         xla_events_pub_pkg.g_security.security_id_int_3
3971          ,p_level    => C_LEVEL_PROCEDURE
3972          ,p_module   =>l_log_module);
3973      trace
3974          (p_msg      => 'security_id_char_1 = '||
3975                         xla_events_pub_pkg.g_security.security_id_char_1
3976          ,p_level    => C_LEVEL_PROCEDURE
3977          ,p_module   =>l_log_module);
3978      trace
3979          (p_msg      => 'security_id_char_2 = '||
3980                         xla_events_pub_pkg.g_security.security_id_char_2
3981          ,p_level    => C_LEVEL_PROCEDURE
3982          ,p_module   =>l_log_module);
3983      trace
3984          (p_msg      => 'security_id_char_3 = '||
3985                         xla_events_pub_pkg.g_security.security_id_char_3
3986          ,p_level    => C_LEVEL_PROCEDURE
3987          ,p_module   =>l_log_module);
3988      trace
3989          (p_msg      => 'valuation_method = '||p_valuation_method
3990          ,p_level    => C_LEVEL_PROCEDURE
3991          ,p_module   =>l_log_module);
3992   END IF;
3993 
3994    l_event_info := get_event_info
3995                       (p_event_source_info   => p_event_source_info
3996                       ,p_valuation_method    => p_valuation_method
3997                       ,p_event_id            => p_event_id);
3998 
3999   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4000     trace
4001          (p_msg      => 'return value = '||l_event_info.event_status_code
4002          ,p_level    => C_LEVEL_PROCEDURE
4003          ,p_module   =>l_log_module);
4004     trace
4005          (p_msg      => 'end of procedure get_event_status'
4006          ,p_level    => C_LEVEL_PROCEDURE
4007          ,p_module   =>l_log_module);
4008   END IF;
4009 
4010    RETURN l_event_info.event_status_code;
4011 EXCEPTION
4012 WHEN xla_exceptions_pkg.application_exception THEN
4013    RAISE;
4014 WHEN OTHERS THEN
4015    xla_exceptions_pkg.raise_message
4016       (p_location => 'xla_events_pkg.get_event_status (fn)');
4017 END get_event_status ;
4018 
4019 
4020 --=============================================================================
4021 --
4022 --
4023 -- Changed to fix bug # 2899700. (Added parameter p_event_id)
4024 --
4025 --=============================================================================
4026 
4027 FUNCTION event_exists
4028    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
4029    ,p_valuation_method             IN  VARCHAR2
4030    ,p_event_class_code             IN  VARCHAR2     DEFAULT NULL
4031    ,p_event_type_code              IN  VARCHAR2     DEFAULT NULL
4032    ,p_event_date                   IN  DATE         DEFAULT NULL
4033    ,p_event_status_code            IN  VARCHAR2     DEFAULT NULL
4034    ,p_event_number                 IN  INTEGER      DEFAULT NULL
4035    ,p_event_id                     IN  PLS_INTEGER  DEFAULT NULL)
4036 RETURN BOOLEAN IS
4037 
4038 l_event_status_code          VARCHAR2(1);
4039 l_event_date                 DATE;
4040 
4041 CURSOR c1 IS
4042    SELECT event_status_code
4043    FROM   xla_events
4044    WHERE  event_date          = NVL(l_event_date, event_date)
4045      AND  event_type_code     = NVL(p_event_type_code, event_type_code)
4046      AND  event_status_code   = NVL(p_event_status_code, event_status_code)
4047      AND  event_number        = NVL(p_event_number, event_number)
4048      AND  event_id            = NVL(p_event_id, event_id)
4049      AND  entity_id           = g_entity_id
4050      AND  event_type_code IN (SELECT event_type_code
4051                               FROM   xla_event_types_b
4052                               WHERE  application_id   = g_application_id
4053                                 AND  entity_code      = g_entity_type_code
4054                                 AND  event_class_code = NVL(p_event_class_code,
4055                                                             event_class_code));
4056 l_log_module                VARCHAR2(240);
4057 BEGIN
4058   IF g_log_enabled THEN
4059     l_log_module := C_DEFAULT_MODULE||'.event_exists';
4060   END IF;
4061   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4062     trace
4063          (p_msg      => 'BEGIN of procedure event_exists'
4064          ,p_level    => C_LEVEL_PROCEDURE
4065          ,p_module   =>l_log_module);
4066      trace
4067          (p_msg      => 'source_application_id = '||
4068                         p_event_source_info.source_application_id
4069          ,p_level    => C_LEVEL_PROCEDURE
4070          ,p_module   =>l_log_module);
4071      trace
4072          (p_msg      => 'application_id = '||p_event_source_info.application_id
4073          ,p_level    => C_LEVEL_PROCEDURE
4074          ,p_module   =>l_log_module);
4075      trace
4076          (p_msg      => 'legal_entity_id = '||
4077                         p_event_source_info.legal_entity_id
4078          ,p_level    => C_LEVEL_PROCEDURE
4079          ,p_module   =>l_log_module);
4080      trace
4081          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
4082          ,p_level    => C_LEVEL_PROCEDURE
4083          ,p_module   =>l_log_module);
4084      trace
4085          (p_msg      => 'entity_type_code = '||
4086                         p_event_source_info.entity_type_code
4087          ,p_level    => C_LEVEL_PROCEDURE
4088          ,p_module   =>l_log_module);
4089      trace
4090          (p_msg      => 'transaction_number = '||
4091                         p_event_source_info.transaction_number
4092          ,p_level    => C_LEVEL_PROCEDURE
4093          ,p_module   =>l_log_module);
4094      trace
4095          (p_msg      => 'source_id_int_1 = '||
4096                         p_event_source_info.source_id_int_1
4097          ,p_level    => C_LEVEL_PROCEDURE
4098          ,p_module   =>l_log_module);
4099      trace
4100          (p_msg      => 'source_id_int_2 = '||
4101                         p_event_source_info.source_id_int_2
4102          ,p_level    => C_LEVEL_PROCEDURE
4103          ,p_module   =>l_log_module);
4104      trace
4105          (p_msg      => 'source_id_int_3 = '||
4106                         p_event_source_info.source_id_int_3
4107          ,p_level    => C_LEVEL_PROCEDURE
4108          ,p_module   =>l_log_module);
4109      trace
4110          (p_msg      => 'source_id_int_4 = '||
4111                         p_event_source_info.source_id_int_4
4112          ,p_level    => C_LEVEL_PROCEDURE
4113          ,p_module   =>l_log_module);
4114      trace
4115          (p_msg      => 'source_id_char_1 = '||
4116                         p_event_source_info.source_id_char_1
4117          ,p_level    => C_LEVEL_PROCEDURE
4118          ,p_module   =>l_log_module);
4119      trace
4120          (p_msg      => 'source_id_char_2 = '||
4121                         p_event_source_info.source_id_char_2
4122          ,p_level    => C_LEVEL_PROCEDURE
4123          ,p_module   =>l_log_module);
4124      trace
4125          (p_msg      => 'source_id_char_3 = '||
4126                         p_event_source_info.source_id_char_3
4127          ,p_level    => C_LEVEL_PROCEDURE
4128          ,p_module   =>l_log_module);
4129      trace
4130          (p_msg      => 'source_id_char_4 = '||
4131                         p_event_source_info.source_id_char_4
4132          ,p_level    => C_LEVEL_PROCEDURE
4133          ,p_module   =>l_log_module);
4134      trace
4135          (p_msg      => 'p_event_class_code = '||p_event_class_code
4136          ,p_level    => C_LEVEL_PROCEDURE
4137          ,p_module   =>l_log_module);
4138      trace
4139          (p_msg      => 'p_event_type_code = '||p_event_type_code
4140          ,p_level    => C_LEVEL_PROCEDURE
4141          ,p_module   =>l_log_module);
4142      trace
4143          (p_msg      => 'p_event_date = '||p_event_date
4144          ,p_level    => C_LEVEL_PROCEDURE
4145          ,p_module   =>l_log_module);
4146      trace
4147          (p_msg      => 'p_event_status_code = '||p_event_status_code
4148          ,p_level    => C_LEVEL_PROCEDURE
4149          ,p_module   =>l_log_module);
4150      trace
4151          (p_msg      => 'p_event_number = '||p_event_number
4152          ,p_level    => C_LEVEL_PROCEDURE
4153          ,p_module   =>l_log_module);
4154      trace
4155          (p_msg      => 'p_event_id = '||p_event_id
4156          ,p_level    => C_LEVEL_PROCEDURE
4157          ,p_module   =>l_log_module);
4158      trace
4159          (p_msg      => 'security_id_int_1 = '||
4160                         xla_events_pub_pkg.g_security.security_id_int_1
4161          ,p_level    => C_LEVEL_PROCEDURE
4162          ,p_module   =>l_log_module);
4163      trace
4164          (p_msg      => 'security_id_int_2 = '||
4165                         xla_events_pub_pkg.g_security.security_id_int_2
4166          ,p_level    => C_LEVEL_PROCEDURE
4167          ,p_module   =>l_log_module);
4168      trace
4169          (p_msg      => 'security_id_int_3 = '||
4170                         xla_events_pub_pkg.g_security.security_id_int_3
4171          ,p_level    => C_LEVEL_PROCEDURE
4172          ,p_module   =>l_log_module);
4173      trace
4174          (p_msg      => 'security_id_char_1 = '||
4175                         xla_events_pub_pkg.g_security.security_id_char_1
4176          ,p_level    => C_LEVEL_PROCEDURE
4177          ,p_module   =>l_log_module);
4178      trace
4179          (p_msg      => 'security_id_char_2 = '||
4180                         xla_events_pub_pkg.g_security.security_id_char_2
4181          ,p_level    => C_LEVEL_PROCEDURE
4182          ,p_module   =>l_log_module);
4183      trace
4184          (p_msg      => 'security_id_char_3 = '||
4185                         xla_events_pub_pkg.g_security.security_id_char_3
4186          ,p_level    => C_LEVEL_PROCEDURE
4187          ,p_module   =>l_log_module);
4188      trace
4189          (p_msg      => 'valuation_method = '||p_valuation_method
4190          ,p_level    => C_LEVEL_PROCEDURE
4191          ,p_module   =>l_log_module);
4192   END IF;
4193 
4194    ----------------------------------------------------------------------------
4195    -- Following sets the Security Context for the execution. This enables the
4196    -- event API to respect the transaction security.
4197    ----------------------------------------------------------------------------
4198    xla_security_pkg.set_security_context(p_event_source_info.application_id);
4199 
4200    ----------------------------------------------------------------------------
4201    -- Set the right context for calling this API
4202    -- Changed to fix bug # 2899700
4203    ----------------------------------------------------------------------------
4204    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
4205       IF p_event_id IS NULL THEN
4206          xla_exceptions_pkg.raise_message
4207             (p_appli_s_name   => 'XLA'
4208             ,p_msg_name       => 'XLA_COMMON_ERROR'
4209             ,p_token_1        => 'ERROR'
4210             ,p_value_1        => 'For MANUAL events event_id cannot be NULL'
4211             ,p_token_2        => 'LOCATION'
4212             ,p_value_2        => 'xla_events_pkg.event_exists');
4213       END IF;
4214       g_context := C_MANUAL_EVENT_CONTEXT;
4215    ELSE
4216       g_context := C_REGULAR_EVENT_CONTEXT;
4217    END IF;
4218 
4219    g_action := C_EVENT_QUERY;
4220 
4221    ----------------------------------------------------------------------------
4222    -- truncate date
4223    ----------------------------------------------------------------------------
4224    l_event_date := TRUNC(p_event_date);
4225 
4226    ----------------------------------------------------------------------------
4227    -- Validate parameters
4228    ----------------------------------------------------------------------------
4229    validate_params
4230      (p_source_info       => p_event_source_info
4231      ,p_event_class_code  => p_event_class_code
4232      ,p_event_type_code   => p_event_type_code);
4233 --     ,p_event_status_code => p_event_status_code);
4234 
4235    ----------------------------------------------------------------------------
4236    -- Get the entity info, cached in globals
4237    ----------------------------------------------------------------------------
4238    cache_entity_info
4239       (p_source_info      => p_event_source_info
4240       ,p_valuation_method => p_valuation_method
4241       ,p_event_id         => p_event_id);
4242 
4243    ----------------------------------------------------------------------------
4244    -- Check entity existency
4245    ----------------------------------------------------------------------------
4246    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4247       trace
4248          (p_msg      => 'g_entity_id = '||g_entity_id
4249          ,p_level    => C_LEVEL_STATEMENT
4250          ,p_module   =>l_log_module);
4251    END IF;
4252 
4253    IF  g_entity_id IS NULL  THEN
4254 
4255        IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4256           trace
4257             (p_msg      => 'no entity exist, return value is false'
4258             ,p_level    => C_LEVEL_PROCEDURE
4259             ,p_module   =>l_log_module);
4260          trace
4261             (p_msg      => 'end of procedure event_exists'
4262             ,p_level    => C_LEVEL_PROCEDURE
4263             ,p_module   =>l_log_module);
4264        END IF;
4265        RETURN FALSE;
4266 /*
4267       xla_exceptions_pkg.raise_message
4268          (p_appli_s_name   => 'XLA'
4269          ,p_msg_name       => 'XLA_COMMON_ERROR'
4270          ,p_token_1        => 'ERROR'
4271          ,p_value_1        => 'No event exists for the document represented '||
4272                               'by the given source information.'
4273          ,p_token_2        => 'LOCATION'
4274          ,p_value_2        => 'xla_events_pkg.event_exists (fn)');
4275 */
4276    END IF;
4277 
4278    OPEN c1;
4279 
4280    FETCH c1 INTO  l_event_status_code;
4281 
4282     IF c1%NOTFOUND THEN
4283        CLOSE c1;
4284 
4285        IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4286           trace
4287             (p_msg      => 'return value is false'
4288             ,p_level    => C_LEVEL_PROCEDURE
4289             ,p_module   =>l_log_module);
4290          trace
4291             (p_msg      => 'end of procedure event_exists'
4292             ,p_level    => C_LEVEL_PROCEDURE
4293             ,p_module   =>l_log_module);
4294        END IF;
4295 
4296        RETURN FALSE;
4297     ELSE
4298        CLOSE c1;
4299        IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4300           trace
4301             (p_msg      => 'return value is true'
4302             ,p_level    => C_LEVEL_PROCEDURE
4303             ,p_module   =>l_log_module);
4304          trace
4305             (p_msg      => 'end of procedure event_exists'
4306             ,p_level    => C_LEVEL_PROCEDURE
4307             ,p_module   =>l_log_module);
4308        END IF;
4309        RETURN TRUE;
4310     END IF;
4311 
4312 EXCEPTION
4313 WHEN xla_exceptions_pkg.application_exception THEN
4314    IF c1%ISOPEN THEN
4315       CLOSE c1;
4316    END IF;
4317    RAISE;
4318 WHEN NO_DATA_FOUND THEN
4319    IF c1%ISOPEN THEN
4320       CLOSE c1;
4321    END IF;
4322    RETURN FALSE;
4323 WHEN OTHERS THEN
4324    IF c1%ISOPEN THEN
4325       CLOSE c1;
4326    END IF;
4327    xla_exceptions_pkg.raise_message
4328       (p_location => 'xla_events_pkg.event_exists (fn)');
4329 END event_exists;
4330 
4331 
4332 --=============================================================================
4333 --
4334 --
4335 -- Changed to fix bug # 2899700. (Added parameter p_event_id)
4336 --
4337 --=============================================================================
4338 
4339 PROCEDURE update_transaction_number
4340    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
4341    ,p_valuation_method             IN  VARCHAR2
4342    ,p_transaction_number           IN  VARCHAR2
4343    ,p_event_id                     IN  PLS_INTEGER  DEFAULT NULL) IS
4344 l_log_module                VARCHAR2(240);
4345 BEGIN
4346   IF g_log_enabled THEN
4347     l_log_module := C_DEFAULT_MODULE||'.update_transaction_number';
4348   END IF;
4349   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4350      trace
4351          (p_msg      => 'BEGIN of procedure update_transaction_number'
4352          ,p_level    => C_LEVEL_PROCEDURE
4353          ,p_module   =>l_log_module);
4354      trace
4355          (p_msg      => 'source_application_id = '||
4356                         p_event_source_info.source_application_id
4357          ,p_level    => C_LEVEL_PROCEDURE
4358          ,p_module   =>l_log_module);
4359      trace
4360          (p_msg      => 'application_id = '||p_event_source_info.application_id
4361          ,p_level    => C_LEVEL_PROCEDURE
4362          ,p_module   =>l_log_module);
4363      trace
4364          (p_msg      => 'legal_entity_id = '||
4365                         p_event_source_info.legal_entity_id
4366          ,p_level    => C_LEVEL_PROCEDURE
4367          ,p_module   =>l_log_module);
4368      trace
4369          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
4370          ,p_level    => C_LEVEL_PROCEDURE
4371          ,p_module   =>l_log_module);
4372      trace
4373          (p_msg      => 'entity_type_code = '||
4374                         p_event_source_info.entity_type_code
4375          ,p_level    => C_LEVEL_PROCEDURE
4376          ,p_module   =>l_log_module);
4377      trace
4378          (p_msg      => 'transaction_number = '||
4379                         p_event_source_info.transaction_number
4380          ,p_level    => C_LEVEL_PROCEDURE
4381          ,p_module   =>l_log_module);
4382      trace
4383          (p_msg      => 'source_id_int_1 = '||
4384                         p_event_source_info.source_id_int_1
4385          ,p_level    => C_LEVEL_PROCEDURE
4386          ,p_module   =>l_log_module);
4387      trace
4388          (p_msg      => 'source_id_int_2 = '||
4389                         p_event_source_info.source_id_int_2
4390          ,p_level    => C_LEVEL_PROCEDURE
4391          ,p_module   =>l_log_module);
4392      trace
4393          (p_msg      => 'source_id_int_3 = '||
4394                         p_event_source_info.source_id_int_3
4395          ,p_level    => C_LEVEL_PROCEDURE
4396          ,p_module   =>l_log_module);
4397      trace
4398          (p_msg      => 'source_id_int_4 = '||
4399                         p_event_source_info.source_id_int_4
4400          ,p_level    => C_LEVEL_PROCEDURE
4401          ,p_module   =>l_log_module);
4402      trace
4403          (p_msg      => 'source_id_char_1 = '||
4404                         p_event_source_info.source_id_char_1
4405          ,p_level    => C_LEVEL_PROCEDURE
4406          ,p_module   =>l_log_module);
4407      trace
4408          (p_msg      => 'source_id_char_2 = '||
4409                         p_event_source_info.source_id_char_2
4410          ,p_level    => C_LEVEL_PROCEDURE
4411          ,p_module   =>l_log_module);
4412      trace
4413          (p_msg      => 'source_id_char_3 = '||
4414                         p_event_source_info.source_id_char_3
4415          ,p_level    => C_LEVEL_PROCEDURE
4416          ,p_module   =>l_log_module);
4417      trace
4418          (p_msg      => 'source_id_char_4 = '||
4419                         p_event_source_info.source_id_char_4
4420          ,p_level    => C_LEVEL_PROCEDURE
4421          ,p_module   =>l_log_module);
4422      trace
4423          (p_msg      => 'p_transaction_number = '||p_transaction_number
4424          ,p_level    => C_LEVEL_PROCEDURE
4425          ,p_module   =>l_log_module);
4426      trace
4427          (p_msg      => 'p_event_id = '||p_event_id
4428          ,p_level    => C_LEVEL_PROCEDURE
4429          ,p_module   =>l_log_module);
4430      trace
4431          (p_msg      => 'security_id_int_1 = '||
4432                         xla_events_pub_pkg.g_security.security_id_int_1
4433          ,p_level    => C_LEVEL_PROCEDURE
4434          ,p_module   =>l_log_module);
4435      trace
4436          (p_msg      => 'security_id_int_2 = '||
4437                         xla_events_pub_pkg.g_security.security_id_int_2
4438          ,p_level    => C_LEVEL_PROCEDURE
4439          ,p_module   =>l_log_module);
4440      trace
4441          (p_msg      => 'security_id_int_3 = '||
4442                         xla_events_pub_pkg.g_security.security_id_int_3
4443          ,p_level    => C_LEVEL_PROCEDURE
4444          ,p_module   =>l_log_module);
4445      trace
4446          (p_msg      => 'security_id_char_1 = '||
4447                         xla_events_pub_pkg.g_security.security_id_char_1
4448          ,p_level    => C_LEVEL_PROCEDURE
4449          ,p_module   =>l_log_module);
4450      trace
4451          (p_msg      => 'security_id_char_2 = '||
4452                         xla_events_pub_pkg.g_security.security_id_char_2
4453          ,p_level    => C_LEVEL_PROCEDURE
4454          ,p_module   =>l_log_module);
4455      trace
4456          (p_msg      => 'security_id_char_3 = '||
4457                         xla_events_pub_pkg.g_security.security_id_char_3
4458          ,p_level    => C_LEVEL_PROCEDURE
4459          ,p_module   =>l_log_module);
4460      trace
4461          (p_msg      => 'valuation_method = '||p_valuation_method
4462          ,p_level    => C_LEVEL_PROCEDURE
4463          ,p_module   =>l_log_module);
4464   END IF;
4465 
4466    ----------------------------------------------------------------------------
4467    -- Following sets the Security Context for the execution. This enables the
4468    -- event API to respect the transaction security.
4469    ----------------------------------------------------------------------------
4470    xla_security_pkg.set_security_context(p_event_source_info.application_id);
4471 
4472    ----------------------------------------------------------------------------
4473    -- Set the right context for calling this API
4474    -- Changed to fix bug # 2899700
4475    ----------------------------------------------------------------------------
4476    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
4477       IF p_event_id IS NULL THEN
4478          xla_exceptions_pkg.raise_message
4479             (p_appli_s_name   => 'XLA'
4480             ,p_msg_name       => 'XLA_COMMON_ERROR'
4481             ,p_token_1        => 'ERROR'
4482             ,p_value_1        => 'For MANUAL events event_id cannot be NULL'
4483             ,p_token_2        => 'LOCATION'
4484             ,p_value_2        => 'xla_events_pkg.update_transaction_number');
4485       END IF;
4486       g_context := C_MANUAL_EVENT_CONTEXT;
4487    ELSE
4488       g_context := C_REGULAR_EVENT_CONTEXT;
4489    END IF;
4490 
4491    g_action := C_EVENT_UPDATE;
4492 
4493    ----------------------------------------------------------------------------
4494    -- Validate parameters
4495    ----------------------------------------------------------------------------
4496    validate_params
4497       (p_source_info       => p_event_source_info);
4498 
4499    ----------------------------------------------------------------------------
4500    -- Get the entity info, cached in globals
4501    ----------------------------------------------------------------------------
4502    cache_entity_info
4503       (p_source_info        => p_event_source_info
4504       ,p_valuation_method   => p_valuation_method
4505       ,p_event_id           => p_event_id);
4506 
4507    ----------------------------------------------------------------------------
4508    -- Check entity existency
4509    ----------------------------------------------------------------------------
4510    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4511       trace
4512          (p_msg      => 'g_entity_id = '||g_entity_id
4513          ,p_level    => C_LEVEL_STATEMENT
4514          ,p_module   =>l_log_module);
4515    END IF;
4516 
4517    IF  g_entity_id IS NULL  THEN
4518       xla_exceptions_pkg.raise_message
4519          (p_appli_s_name   => 'XLA'
4520          ,p_msg_name       => 'XLA_COMMON_ERROR'
4521          ,p_token_1        => 'ERROR'
4522          ,p_value_1        => 'No event exists for the document represented '||
4523                               'by the given source information.'
4524          ,p_token_2        => 'LOCATION'
4525          ,p_value_2        => 'xla_events_pkg.update_transaction_number');
4526    END IF;
4527 
4528    update_entity_trx_number
4529       (p_transaction_number          => p_transaction_number);
4530 
4531   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4532     trace
4533          (p_msg      => 'BEGIN of procedure update_transaction_number'
4534          ,p_level    => C_LEVEL_PROCEDURE
4535          ,p_module   =>l_log_module);
4536   END IF;
4537 
4538 EXCEPTION
4539 WHEN xla_exceptions_pkg.application_exception THEN
4540    RAISE;
4541 WHEN OTHERS                                   THEN
4542    xla_exceptions_pkg.raise_message
4543       (p_location => 'xla_events_pkg.update_transaction_number');
4544 END update_transaction_number;
4545 
4546 
4547 --=============================================================================
4548 --
4549 --
4550 -- Changed to fix bug # 2899700. (Added parameter p_event_id)
4551 --
4552 --=============================================================================
4553 
4554 FUNCTION  get_entity_id
4555    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
4556    ,p_valuation_method             IN  VARCHAR2
4557    ,p_event_id                     IN  PLS_INTEGER  DEFAULT NULL)
4558 RETURN INTEGER IS
4559 l_log_module                VARCHAR2(240);
4560 BEGIN
4561   IF g_log_enabled THEN
4562     l_log_module := C_DEFAULT_MODULE||'.get_entity_id';
4563   END IF;
4564   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4565      trace
4566          (p_msg      => 'BEGIN of procedure get_entity_id'
4567          ,p_level    => C_LEVEL_PROCEDURE
4568          ,p_module   =>l_log_module);
4569      trace
4570          (p_msg      => 'source_application_id = '||
4571                         p_event_source_info.source_application_id
4572          ,p_level    => C_LEVEL_PROCEDURE
4573          ,p_module   =>l_log_module);
4574      trace
4575          (p_msg      => 'application_id = '||p_event_source_info.application_id
4576          ,p_level    => C_LEVEL_PROCEDURE
4577          ,p_module   =>l_log_module);
4578      trace
4579          (p_msg      => 'legal_entity_id = '||
4580                         p_event_source_info.legal_entity_id
4581          ,p_level    => C_LEVEL_PROCEDURE
4582          ,p_module   =>l_log_module);
4583      trace
4584          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
4585          ,p_level    => C_LEVEL_PROCEDURE
4586          ,p_module   =>l_log_module);
4587      trace
4588          (p_msg      => 'entity_type_code = '||
4589                         p_event_source_info.entity_type_code
4590          ,p_level    => C_LEVEL_PROCEDURE
4591          ,p_module   =>l_log_module);
4592      trace
4593          (p_msg      => 'transaction_number = '||
4594                         p_event_source_info.transaction_number
4595          ,p_level    => C_LEVEL_PROCEDURE
4596          ,p_module   =>l_log_module);
4597      trace
4598          (p_msg      => 'source_id_int_1 = '||
4599                         p_event_source_info.source_id_int_1
4600          ,p_level    => C_LEVEL_PROCEDURE
4601          ,p_module   =>l_log_module);
4602      trace
4603          (p_msg      => 'source_id_int_2 = '||
4604                         p_event_source_info.source_id_int_2
4605          ,p_level    => C_LEVEL_PROCEDURE
4606          ,p_module   =>l_log_module);
4607      trace
4608          (p_msg      => 'source_id_int_3 = '||
4609                         p_event_source_info.source_id_int_3
4610          ,p_level    => C_LEVEL_PROCEDURE
4611          ,p_module   =>l_log_module);
4612      trace
4613          (p_msg      => 'source_id_int_4 = '||
4614                         p_event_source_info.source_id_int_4
4615          ,p_level    => C_LEVEL_PROCEDURE
4616          ,p_module   =>l_log_module);
4617      trace
4618          (p_msg      => 'source_id_char_1 = '||
4619                         p_event_source_info.source_id_char_1
4620          ,p_level    => C_LEVEL_PROCEDURE
4621          ,p_module   =>l_log_module);
4622      trace
4623          (p_msg      => 'source_id_char_2 = '||
4624                         p_event_source_info.source_id_char_2
4625          ,p_level    => C_LEVEL_PROCEDURE
4626          ,p_module   =>l_log_module);
4627      trace
4628          (p_msg      => 'source_id_char_3 = '||
4629                         p_event_source_info.source_id_char_3
4630          ,p_level    => C_LEVEL_PROCEDURE
4631          ,p_module   =>l_log_module);
4632      trace
4633          (p_msg      => 'source_id_char_4 = '||
4634                         p_event_source_info.source_id_char_4
4635          ,p_level    => C_LEVEL_PROCEDURE
4636          ,p_module   =>l_log_module);
4637      trace
4638          (p_msg      => 'p_event_id = '||p_event_id
4639          ,p_level    => C_LEVEL_PROCEDURE
4640          ,p_module   =>l_log_module);
4641      trace
4642          (p_msg      => 'security_id_int_1 = '||
4643                         xla_events_pub_pkg.g_security.security_id_int_1
4644          ,p_level    => C_LEVEL_PROCEDURE
4645          ,p_module   =>l_log_module);
4646      trace
4647          (p_msg      => 'security_id_int_2 = '||
4648                         xla_events_pub_pkg.g_security.security_id_int_2
4649          ,p_level    => C_LEVEL_PROCEDURE
4650          ,p_module   =>l_log_module);
4651      trace
4652          (p_msg      => 'security_id_int_3 = '||
4653                         xla_events_pub_pkg.g_security.security_id_int_3
4654          ,p_level    => C_LEVEL_PROCEDURE
4655          ,p_module   =>l_log_module);
4656      trace
4657          (p_msg      => 'security_id_char_1 = '||
4658                         xla_events_pub_pkg.g_security.security_id_char_1
4659          ,p_level    => C_LEVEL_PROCEDURE
4660          ,p_module   =>l_log_module);
4661      trace
4662          (p_msg      => 'security_id_char_2 = '||
4663                         xla_events_pub_pkg.g_security.security_id_char_2
4664          ,p_level    => C_LEVEL_PROCEDURE
4665          ,p_module   =>l_log_module);
4666      trace
4667          (p_msg      => 'security_id_char_3 = '||
4668                         xla_events_pub_pkg.g_security.security_id_char_3
4669          ,p_level    => C_LEVEL_PROCEDURE
4670          ,p_module   =>l_log_module);
4671      trace
4672          (p_msg      => 'valuation_method = '||p_valuation_method
4673          ,p_level    => C_LEVEL_PROCEDURE
4674          ,p_module   =>l_log_module);
4675   END IF;
4676 
4677    ----------------------------------------------------------------------------
4678    -- Following sets the Security Context for the execution. This enables the
4679    -- event API to respect the transaction security.
4680    ----------------------------------------------------------------------------
4681    xla_security_pkg.set_security_context(p_event_source_info.application_id);
4682 
4683    ----------------------------------------------------------------------------
4684    -- Set the right context for calling this API
4685    -- Changed to fix bug # 2899700
4686    ----------------------------------------------------------------------------
4687    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
4688       IF p_event_id IS NULL THEN
4689          xla_exceptions_pkg.raise_message
4690             (p_appli_s_name   => 'XLA'
4691             ,p_msg_name       => 'XLA_COMMON_ERROR'
4692             ,p_token_1        => 'ERROR'
4693             ,p_value_1        => 'For MANUAL events event_id cannot be NULL'
4694             ,p_token_2        => 'LOCATION'
4695             ,p_value_2        => 'xla_events_pkg.get_entity_id');
4696       END IF;
4697       g_context := C_MANUAL_EVENT_CONTEXT;
4698    ELSE
4699       g_context := C_REGULAR_EVENT_CONTEXT;
4700    END IF;
4701 
4702    ----------------------------------------------------------------------------
4703    -- Validate parameters
4704    ----------------------------------------------------------------------------
4705    validate_params
4706       (p_source_info       => p_event_source_info);
4707 
4708    ----------------------------------------------------------------------------
4709    -- Get the entity info, cached in globals
4710    ----------------------------------------------------------------------------
4711    cache_entity_info
4712       (p_source_info        => p_event_source_info
4713       ,p_valuation_method   => p_valuation_method
4714       ,p_event_id           => p_event_id);
4715 
4716    ----------------------------------------------------------------------------
4717    -- Check entity existency
4718    ----------------------------------------------------------------------------
4719    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4720       trace
4721          (p_msg      => 'g_entity_id = '||g_entity_id
4722          ,p_level    => C_LEVEL_STATEMENT
4723          ,p_module   =>l_log_module);
4724    END IF;
4725 
4726    IF  g_entity_id IS NULL  THEN
4727       xla_exceptions_pkg.raise_message
4728          (p_appli_s_name   => 'XLA'
4729          ,p_msg_name       => 'XLA_COMMON_ERROR'
4730          ,p_token_1        => 'ERROR'
4731          ,p_value_1        => 'No event exists for the document represented '||
4732                               'by the given source information.'
4733          ,p_token_2        => 'LOCATION'
4734          ,p_value_2        => 'xla_events_pkg.get_entity_id');
4735    END IF;
4736 
4737   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4738     trace
4739          (p_msg      => 'end of procedure get_entity_id'
4740          ,p_level    => C_LEVEL_PROCEDURE
4741          ,p_module   =>l_log_module);
4742     trace
4743          (p_msg      => 'return value is:'||to_char(g_entity_id)
4744          ,p_level    => C_LEVEL_PROCEDURE
4745          ,p_module   =>l_log_module);
4746   END IF;
4747 
4748    RETURN g_entity_id;
4749 EXCEPTION
4750 WHEN xla_exceptions_pkg.application_exception THEN
4751    RAISE;
4752 WHEN OTHERS                                   THEN
4753    xla_exceptions_pkg.raise_message
4754        (p_location => 'xla_events_pkg.get_entity_id');
4755 END get_entity_id;
4756 
4757 
4758 --=============================================================================
4759 --
4760 --
4761 --
4762 --
4763 --
4764 --
4765 --
4766 --
4767 --
4768 --
4769 -- Following are the public routines on which bulk public APIs
4770 -- are based.
4771 --
4772 --    1.    create_bulk_events
4773 --    2.    get_array_event_info       (for an entity)
4774 --
4775 --
4776 --
4777 --
4778 --
4779 --
4780 --
4781 --
4782 --
4783 --
4784 --=============================================================================
4785 --
4786 -- For MANUAL events this API cannot be called
4787 --
4788 --=============================================================================
4789 
4790 PROCEDURE create_bulk_events
4791        (p_source_application_id        IN  INTEGER     DEFAULT NULL
4792        ,p_application_id               IN  INTEGER
4793        ,p_legal_entity_id              IN  INTEGER     DEFAULT NULL
4794        ,p_ledger_id                    IN  INTEGER
4795        ,p_entity_type_code             IN  VARCHAR2)
4796 IS
4797 
4798 TYPE t_array_number      IS TABLE OF NUMBER          INDEX BY BINARY_INTEGER;
4799 TYPE t_array_char        IS TABLE OF VARCHAR2(30)    INDEX BY BINARY_INTEGER;
4800 TYPE t_array_char_ref    IS TABLE OF VARCHAR2(240)   INDEX BY BINARY_INTEGER;
4801 
4802 l_array_source_id_int_1           t_array_number;
4803 l_array_source_id_int_2           t_array_number;
4804 l_array_source_id_int_3           t_array_number;
4805 l_array_source_id_int_4           t_array_number;
4806 l_array_source_id_char_1          t_array_char;
4807 l_array_source_id_char_2          t_array_char;
4808 l_array_source_id_char_3          t_array_char;
4809 l_array_source_id_char_4          t_array_char;
4810 l_array_valuation_method          t_array_char;
4811 l_array_security_id_int_1         t_array_number;
4812 l_array_security_id_int_2         t_array_number;
4813 l_array_security_id_int_3         t_array_number;
4814 l_array_security_id_char_1        t_array_char;
4815 l_array_security_id_char_2        t_array_char;
4816 l_array_security_id_char_3        t_array_char;
4817 l_array_source_trx_number         t_array_char_ref;
4818 
4819 l_array_entity_id                 t_array_number;
4820 l_array_event_id                  t_array_number;
4821 
4822 l_array_event_number              xla_events_pub_pkg.t_array_event_number;
4823 l_array_event_date                xla_events_pub_pkg.t_array_event_date;
4824 l_array_transaction_date          xla_events_pub_pkg.t_array_event_date;
4825 l_array_event_status_code         xla_events_pub_pkg.t_array_event_status_code;
4826 l_last                            PLS_INTEGER;
4827 l_entity_id                       PLS_INTEGER;
4828 l_current_entity_id               PLS_INTEGER;
4829 l_current_event_number            NUMBER;
4830 
4831 l_on_hold_flag                    xla_events.on_hold_flag%type:='N';
4832 l_event_count                     number;
4833 l_array_on_hold_flag              t_on_hold_flag_tbl;
4834 
4835 l_rowcount                        NUMBER;
4836 l_rowcount_gt                     NUMBER;
4837 
4838 /* --bug 4526089
4839 CURSOR csr_xla_applications IS
4840    SELECT application_id
4841    FROM   xla_subledgers
4842    WHERE  application_id = p_source_application_id;
4843 */
4844 l_log_module                VARCHAR2(240);
4845 
4846 CURSOR csr_xla_event_exist IS
4847    SELECT 1
4848    FROM xla_events_int_gt;
4849 
4850 CURSOR csr_xla_event_number IS
4851    SELECT 1
4852    FROM xla_events_int_gt
4853    WHERE event_number is null or event_number<1;
4854 
4855 CURSOR csr_processing_gapless IS
4856      SELECT entity_id, event_id, event_number, event_status_code
4857      FROM xla_events_int_gt
4858      ORDER BY entity_id, event_number;
4859 
4860 CURSOR csr_status_error is
4861    SELECT 1 from xla_events_int_gt
4862    WHERE event_status_code not in ('I', 'U', 'N');
4863 
4864 CURSOR csr_event_type_error(p_entity_code VARCHAR2, p_app_id NUMBER) is
4865    SELECT 1
4866    FROM xla_events_int_gt xeg, xla_event_types_b xet
4867    WHERE xet.entity_code(+) = p_entity_code
4868      AND xet.application_id(+) = p_app_id
4869      AND xeg.event_type_code = xet.event_type_code (+)
4870      AND nvl(xet.enabled_flag, 'N') = 'N';
4871 
4872 CURSOR csr_parameter_mismatch(p_entity_code VARCHAR2, p_app_id NUMBER) is
4873    SELECT 1
4874      FROM xla_events_int_gt xeg
4875     WHERE xeg.entity_code <> p_entity_code
4876        OR xeg.application_id <> p_app_id;
4877 
4878 l_update_gt_string varchar2(4000);
4879 l_query_string varchar2(4000);
4880 
4881 CURSOR csr_get_trx_entities is
4882    SELECT xla_transaction_entities_s.nextval
4883             ,source_id_int_1
4884             ,source_id_int_2
4885             ,source_id_int_3
4886             ,source_id_int_4
4887             ,source_id_char_1
4888             ,source_id_char_2
4889             ,source_id_char_3
4890             ,source_id_char_4
4891             ,valuation_method
4892     FROM (
4893         SELECT DISTINCT
4894             source_id_int_1
4895             ,source_id_int_2
4896             ,source_id_int_3
4897             ,source_id_int_4
4898             ,source_id_char_1
4899             ,source_id_char_2
4900             ,source_id_char_3
4901             ,source_id_char_4
4902             ,valuation_method
4903          FROM xla_events_int_gt);
4904 
4905 BEGIN
4906   IF g_log_enabled THEN
4907     l_log_module := C_DEFAULT_MODULE||'.create_bulk_events';
4908   END IF;
4909 
4910   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4911      trace
4912          (p_msg      => 'BEGIN of procedure create_bulk_events'
4913          ,p_level    => C_LEVEL_PROCEDURE
4914          ,p_module   =>l_log_module);
4915      trace
4916          (p_msg      => 'p_source_application_id = '||p_source_application_id
4917          ,p_level    => C_LEVEL_PROCEDURE
4918          ,p_module   =>l_log_module);
4919      trace
4920          (p_msg      => 'p_application_id = '||p_application_id
4921          ,p_level    => C_LEVEL_PROCEDURE
4922          ,p_module   =>l_log_module);
4923      trace
4924          (p_msg      => 'p_legal_entity_id = '||p_legal_entity_id
4925          ,p_level    => C_LEVEL_PROCEDURE
4926          ,p_module   =>l_log_module);
4927      trace
4928          (p_msg      => 'p_ledger_id = '||p_ledger_id
4929          ,p_level    => C_LEVEL_PROCEDURE
4930          ,p_module   =>l_log_module);
4931      trace
4932          (p_msg      => 'p_entity_type_code = '||p_entity_type_code
4933          ,p_level    => C_LEVEL_PROCEDURE
4934          ,p_module   =>l_log_module);
4935   END IF;
4936 
4937 
4938    SAVEPOINT before_event_creation;
4939    g_action := C_EVENT_CREATE;
4940 
4941    ----------------------------------------------------------------------------
4942    -- Following sets the Security Context for the execution. This enables the
4943    -- event API to respect the transaction security.
4944    ----------------------------------------------------------------------------
4945    xla_security_pkg.set_security_context(p_application_id);
4946 
4947    ----------------------------------------------------------------------------
4948    -- This API cannot be called for manual events.
4949    ----------------------------------------------------------------------------
4950    IF p_entity_type_code = C_MANUAL_ENTITY THEN
4951       xla_exceptions_pkg.raise_message
4952          (p_appli_s_name   => 'XLA'
4953          ,p_msg_name       => 'XLA_COMMON_ERROR'
4954          ,p_token_1        => 'ERROR'
4955          ,p_value_1        => 'For MANUAL events this API cannot be called'
4956          ,p_token_2        => 'LOCATION'
4957          ,p_value_2        => 'xla_events_pkg.get_array_event_info (fn)');
4958    ELSE
4959       g_context := C_REGULAR_EVENT_CONTEXT;
4960    END IF;
4961 
4962    ----------------------------------------------------------------------------
4963    -- Immediately exit if the table is empty
4964    -- the l_rowcount_gt is also useful to find if there is invalid data
4965    ----------------------------------------------------------------------------
4966    select count(1) into l_rowcount_gt from xla_events_int_gt;
4967    if(l_rowcount_gt = 0) then
4968      return;
4969    end if;
4970 
4971    ----------------------------------------------------------------------------
4972    -- perform source application validation
4973    ----------------------------------------------------------------------------
4974 
4975    validate_context
4976       (p_application_id           => p_application_id
4977       ,p_ledger_id                => p_ledger_id
4978       ,p_entity_type_code         => p_entity_type_code);
4979 
4980    IF g_application_id IS NULL OR g_application_id <> p_application_id THEN
4981       cache_application_setup
4982          (p_application_id => p_application_id);
4983    END IF;
4984 
4985    -- assign g_id_mapping which will be used to create the where clause
4986    validate_entity_type_code
4987       (p_entity_type_code         => p_entity_type_code);
4988 
4989    select enable_gapless_events_flag
4990      into g_gapless_flag
4991      from xla_entity_types_b
4992     where entity_code=p_entity_type_code
4993           and application_id=p_application_id;
4994 
4995   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
4996      trace
4997          (p_msg      => 'g_gapless_flag= '||g_gapless_flag
4998          ,p_level    =>C_LEVEL_STATEMENT
4999          ,p_module   =>l_log_module);
5000   END IF;
5001 
5002   -- can it be moved after the insertion as well?
5003    if(g_gapless_flag='Y') then
5004      open csr_xla_event_number;
5005      fetch csr_xla_event_number into l_last;
5006      if(csr_xla_event_number%FOUND) THEN
5007        close csr_xla_event_number;
5008        xla_exceptions_pkg.raise_message
5009             (p_appli_s_name   => 'XLA'
5010             ,p_msg_name       => 'XLA_COMMON_ERROR'
5011             ,p_token_1        => 'ERROR'
5012             ,p_value_1        =>
5013             'Event Number must be a number greater than 0 for entities that are subject to gapless processing'
5014             ,p_token_2        => 'LOCATION'
5015             ,p_value_2        => 'xla_events_pkg.create_bulk_events');
5016        return;
5017      end if;
5018      close csr_xla_event_number;
5019    end if;
5020 
5021    -- validate if the data is ok
5022    BEGIN
5023      IF (C_LEVEL_STATEMENT>= g_log_level) THEN
5024         trace
5025             (p_msg      => 'before validate data '
5026             ,p_level    => C_LEVEL_STATEMENT
5027             ,p_module   =>l_log_module);
5028      END IF;
5029      l_query_string :=
5030      'SELECT 1
5031        FROM dual
5032       WHERE EXISTS
5033               (SELECT 1
5034                  FROM xla_events_int_gt xeg
5035                 WHERE xeg.entity_code <> :1
5036                       OR xeg.application_id <> :2
5037                       OR xeg.event_status_code not in (''I'', ''U'', ''N'')
5038                       OR xeg.event_type_code not in
5039                            (SELECT event_type_code
5040                               FROM xla_event_types_b
5041                              WHERE application_id = :3
5042                                AND entity_code = :4
5043                                AND enabled_flag = ''Y'') OR '
5044            || validate_id_where_clause || ')';
5045 
5046      EXECUTE IMMEDIATE l_query_string INTO l_last
5047         USING p_entity_type_code
5048               ,p_application_id
5049               ,p_application_id
5050               ,p_entity_type_code;
5051 
5052      -- there is error! Do the validation to find the error.
5053      open csr_parameter_mismatch(p_entity_type_code, p_application_id);
5054      fetch csr_parameter_mismatch into l_last;
5055      if(csr_parameter_mismatch%FOUND) THEN
5056        close csr_parameter_mismatch;
5057        xla_exceptions_pkg.raise_message
5058             (p_appli_s_name   => 'XLA'
5059             ,p_msg_name       => 'XLA_COMMON_ERROR'
5060             ,p_token_1        => 'ERROR'
5061             ,p_value_1        =>
5062             'The parameters passed to the procedure do not match with the data in the xla_events_int_gt table'
5063             ,p_token_2        => 'LOCATION'
5064             ,p_value_2        => 'xla_events_pkg.create_bulk_events');
5065        return;
5066      end if;
5067      close csr_parameter_mismatch;
5068 
5069      open csr_status_error;
5070      fetch csr_status_error into l_last;
5071      if(csr_status_error%FOUND) THEN
5072        close csr_status_error;
5073        xla_exceptions_pkg.raise_message
5074             (p_appli_s_name   => 'XLA'
5075             ,p_msg_name       => 'XLA_COMMON_ERROR'
5076             ,p_token_1        => 'ERROR'
5077             ,p_value_1        => 'Event status must be I, U or N'
5078             ,p_token_2        => 'LOCATION'
5079             ,p_value_2        => 'xla_events_pkg.create_bulk_events');
5080        return;
5081      end if;
5082      close csr_status_error;
5083 
5084      open csr_event_type_error(p_entity_type_code, p_application_id);
5085      fetch csr_event_type_error into l_last;
5086      if(csr_event_type_error%FOUND) THEN
5087        close csr_event_type_error;
5088        xla_exceptions_pkg.raise_message
5089             (p_appli_s_name   => 'XLA'
5090             ,p_msg_name       => 'XLA_COMMON_ERROR'
5091             ,p_token_1        => 'ERROR'
5092             ,p_value_1        => 'Event type must be a valid event type'
5093             ,p_token_2        => 'LOCATION'
5094             ,p_value_2        => 'xla_events_pkg.create_bulk_events');
5095        return;
5096      end if;
5097      close csr_event_type_error;
5098 
5099      xla_exceptions_pkg.raise_message
5100             (p_appli_s_name   => 'XLA'
5101             ,p_msg_name       => 'XLA_COMMON_ERROR'
5102             ,p_token_1        => 'ERROR'
5103             ,p_value_1        =>
5104             'Please check transaction ids in gt table. Mapped ids must have a not-null value, while unmapped ids cannot have value'
5105             ,p_token_2        => 'LOCATION'
5106             ,p_value_2        => 'xla_events_pkg.create_bulk_events');
5107    EXCEPTION
5108      WHEN others then
5109         --exception means the data is good
5110         null;
5111      END;
5112 
5113   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
5114      trace
5115          (p_msg      => 'just before insert into xla_transaction entities'
5116          ,p_level    => C_LEVEL_STATEMENT
5117          ,p_module   =>l_log_module);
5118   END IF;
5119 
5120 
5121    ----------------------------------------------------------------------------
5122    -- Bug 4312353. Modified the following loop to create new entities based
5123    -- on the promary key of the transaction that includes all the internal
5124    -- source identifiers and the valuation method
5125    ----------------------------------------------------------------------------
5126 
5127    OPEN csr_get_trx_entities;
5128    LOOP
5129       FETCH csr_get_trx_entities BULK COLLECT INTO
5130           l_array_entity_id
5131          ,l_array_source_id_int_1
5132          ,l_array_source_id_int_2
5133          ,l_array_source_id_int_3
5134          ,l_array_source_id_int_4
5135          ,l_array_source_id_char_1
5136          ,l_array_source_id_char_2
5137          ,l_array_source_id_char_3
5138          ,l_array_source_id_char_4
5139          ,l_array_valuation_method
5140       LIMIT 2000;
5141 
5142       FORALL i in 1..l_array_entity_id.COUNT
5143         INSERT INTO xla_transaction_entities
5144            (entity_id
5145            ,application_id
5146            ,source_application_id
5147            ,ledger_id
5148            ,legal_entity_id
5149            ,entity_code
5150            ,transaction_number
5151            ,creation_date
5152            ,created_by
5153            ,last_update_date
5154            ,last_updated_by
5155            ,last_update_login
5156            ,valuation_method
5157            ,security_id_int_1
5158            ,security_id_int_2
5159            ,security_id_int_3
5160            ,security_id_char_1
5161            ,security_id_char_2
5162            ,security_id_char_3
5163            ,source_id_int_1
5164            ,source_id_int_2
5165            ,source_id_int_3
5166            ,source_id_int_4
5167            ,source_id_char_1
5168            ,source_id_char_2
5169            ,source_id_char_3
5170            ,source_id_char_4)
5171         (SELECT /*+ index (xe xla_events_int_gt_n1) */
5172             l_array_entity_id(i)
5173            , p_application_id
5174            , nvl(p_source_application_id, p_application_id)
5175            , p_ledger_id
5176            ,  xe.legal_entity_id   /* Bug 4458604*/
5177            , p_entity_type_code
5178            , xe.transaction_number
5179            , sysdate
5180            , xla_environment_pkg.g_usr_id
5181            , sysdate
5182            , xla_environment_pkg.g_usr_id
5183            , xla_environment_pkg.g_login_id
5184            ,  xe.valuation_method
5185            ,  xe.security_id_int_1
5186            ,  xe.security_id_int_2
5187            ,  xe.security_id_int_3
5188            ,  xe.security_id_char_1
5189            ,  xe.security_id_char_2
5190            ,  xe.security_id_char_3
5191            ,  xe.source_id_int_1
5192            ,  xe.source_id_int_2
5193            ,  xe.source_id_int_3
5194            ,  xe.source_id_int_4
5195            ,  xe.source_id_char_1
5196            ,  xe.source_id_char_2
5197            ,  xe.source_id_char_3
5198            ,  xe.source_id_char_4
5199         FROM xla_events_int_gt  xe
5200         WHERE NVL( xe.source_id_int_1,-99) = NVL(l_array_source_id_int_1(i),C_NUM)
5201          AND NVL( xe.source_id_int_2,-99)  = NVL(l_array_source_id_int_2(i),C_NUM)
5202          AND NVL( xe.source_id_int_3,-99)  = NVL(l_array_source_id_int_3(i),C_NUM)
5203          AND NVL( xe.source_id_int_4,-99)  = NVL(l_array_source_id_int_4(i),C_NUM)
5204          AND NVL( xe.source_id_char_1,' ') = NVL(l_array_source_id_char_1(i),C_CHAR)
5205          AND NVL( xe.source_id_char_2,' ') = NVL(l_array_source_id_char_2(i),C_CHAR)
5206          AND NVL( xe.source_id_char_3,' ') = NVL(l_array_source_id_char_3(i),C_CHAR)
5207          AND NVL( xe.source_id_char_4,' ') = NVL(l_array_source_id_char_4(i),C_CHAR)
5208          AND NVL( xe.valuation_method,' ') = NVL(l_array_valuation_method(i),C_CHAR)
5209          AND ROWNUM = 1
5210          );
5211 
5212       FORALL i IN 1..l_array_entity_id.COUNT
5213         UPDATE  /*+ index (xe xla_events_int_gt_n1) */  xla_events_int_gt  xe
5214            SET  xe.entity_id = l_array_entity_id(i)
5215               , xe.event_id  = xla_events_s.nextval
5216          WHERE NVL( xe.source_id_int_1,-99)= NVL(l_array_source_id_int_1(i),C_NUM)
5217           AND NVL( xe.source_id_int_2,-99) = NVL(l_array_source_id_int_2(i),C_NUM)
5218           AND NVL( xe.source_id_int_3,-99) = NVL(l_array_source_id_int_3(i),C_NUM)
5219           AND NVL( xe.source_id_int_4,-99) = NVL(l_array_source_id_int_4(i),C_NUM)
5220           AND NVL( xe.source_id_char_1,' ')= NVL(l_array_source_id_char_1(i),C_CHAR)
5221           AND NVL( xe.source_id_char_2,' ')= NVL(l_array_source_id_char_2(i),C_CHAR)
5222           AND NVL( xe.source_id_char_3,' ')= NVL(l_array_source_id_char_3(i),C_CHAR)
5223           AND NVL( xe.source_id_char_4,' ')= NVL(l_array_source_id_char_4(i),C_CHAR)
5224           AND NVL( xe.valuation_method,' ')=NVL(l_array_valuation_method(i),C_CHAR);
5225 
5226       EXIT WHEN csr_get_trx_entities%NOTFOUND;
5227    END LOOP;
5228 
5229 
5230    IF(g_gapless_flag = 'Y') THEN
5231      open csr_processing_gapless;
5232 
5233      l_current_entity_id := null;
5234      l_on_hold_flag := 'N';
5235      l_current_event_number := 1;
5236      IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5237         trace
5238            (p_msg      => 'Entering a loop to process the gapless on-hold flag'
5239            ,p_level    => C_LEVEL_STATEMENT
5240            ,p_module   =>l_log_module);
5241      END IF;
5242      LOOP
5243 
5244        FETCH csr_processing_gapless
5245        BULK COLLECT INTO l_array_entity_id
5246                          , l_array_event_id
5247                          , l_array_event_number
5248                          , l_array_event_status_code
5249        LIMIT 2000;
5250 
5251        -- next is to loop to set the on_hold_flag
5252 
5253        FOR i in 1..l_array_event_id.COUNT LOOP
5254          IF(l_current_entity_id = l_array_entity_id (i)) THEN
5255            IF(l_on_hold_flag = 'N' ) THEN
5256              IF(l_current_event_number = l_array_event_number(i)) THEN
5257                l_array_on_hold_flag(i) := 'N';
5258                IF(l_array_event_status_code(i) = 'I') THEN
5259                  l_on_hold_flag :='Y';
5260                ELSE
5261                  l_current_event_number := l_current_event_number + 1;
5262                END IF;
5263              ELSE
5264                l_on_hold_flag :='Y';
5265                l_array_on_hold_flag(i) := 'Y';
5266              END IF;
5267            ELSE
5268              l_array_on_hold_flag(i) := 'Y';
5269            END IF;
5270          ELSE
5271            l_current_entity_id := l_array_entity_id (i);
5272            IF(l_array_event_number(i) = 1) THEN
5273              l_array_on_hold_flag(i) := 'N';
5274              IF(l_array_event_status_code(i) = 'I') THEN
5275                l_on_hold_flag :='Y';
5276              ELSE
5277                l_on_hold_flag :='N';
5278                l_current_event_number := l_current_event_number + 1;
5279              END IF;
5280            ELSE
5281              l_on_hold_flag :='Y';
5282              l_array_on_hold_flag(i) := 'Y';
5283            END IF;
5284          END IF;
5285        END LOOP;
5286 
5287        FORALL i in 1..l_array_event_id.COUNT
5288          UPDATE xla_events_int_gt
5289             SET on_hold_flag = l_array_on_hold_flag(i)
5290           WHERE event_id=l_array_event_id(i);
5291 
5292        EXIT when csr_processing_gapless%NOTFOUND;
5293      END LOOP;
5294 
5295      CLOSE csr_processing_gapless;
5296 
5297      IF (C_LEVEL_STATEMENT>= g_log_level) THEN
5298         trace
5299             (p_msg      => 'before insert into xla_events table'
5300             ,p_level    => C_LEVEL_STATEMENT
5301             ,p_module   =>l_log_module);
5302      END IF;
5303 
5304      INSERT INTO xla_events
5305           (event_id
5306           ,application_id
5307           ,event_type_code
5308           ,entity_id
5309           ,event_number
5310           ,event_status_code
5311           ,process_status_code
5312           ,event_date
5313           ,transaction_date
5314           ,budgetary_control_flag
5315           ,creation_date
5316           ,created_by
5317           ,last_update_date
5318           ,last_updated_by
5319           ,last_update_login
5320           ,program_update_date
5321           ,program_application_id
5322           ,program_id
5323           ,request_id
5324           ,reference_num_1
5325           ,reference_num_2
5326           ,reference_num_3
5327           ,reference_num_4
5328           ,reference_char_1
5329           ,reference_char_2
5330           ,reference_char_3
5331           ,reference_char_4
5332           ,reference_date_1
5333           ,reference_date_2
5334           ,reference_date_3
5335           ,reference_date_4
5336           ,on_hold_flag)
5337           (SELECT event_id
5338               ,application_id
5339               ,event_type_code
5340               ,entity_id
5341               ,event_number
5342               ,event_status_code
5343               ,C_INTERNAL_UNPROCESSED
5344               ,TRUNC(event_date)
5345               ,nvl(transaction_date, TRUNC(event_date))
5346               ,nvl(xla_events_int_gt.budgetary_control_flag,'N')
5347               ,sysdate
5348               ,xla_environment_pkg.g_usr_id
5349               ,sysdate
5350               ,xla_environment_pkg.g_usr_id
5351               ,xla_environment_pkg.g_login_id
5352               ,sysdate
5353               ,xla_environment_pkg.g_prog_appl_id
5354               ,xla_environment_pkg.g_prog_id
5355               ,xla_environment_pkg.g_req_Id
5356               ,reference_num_1
5357               ,reference_num_2
5358               ,reference_num_3
5359               ,reference_num_4
5360               ,reference_char_1
5361               ,reference_char_2
5362               ,reference_char_3
5363               ,reference_char_4
5364               ,reference_date_1
5365               ,reference_date_2
5366               ,reference_date_3
5367               ,reference_date_4
5368               ,on_hold_flag
5369            FROM xla_events_int_gt);
5370      IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5371         trace
5372            (p_msg      => 'Number of events created(gapless) = '||
5373                           to_char(SQL%ROWCOUNT)
5374            ,p_level    => C_LEVEL_STATEMENT
5375            ,p_module   =>l_log_module);
5376      END IF;
5377 
5378    ELSE -- not gapless
5379      IF (C_LEVEL_STATEMENT>= g_log_level) THEN
5380         trace
5381             (p_msg      => 'before insert into xla_events table nongapless'
5382             ,p_level    => C_LEVEL_STATEMENT
5383             ,p_module   =>l_log_module);
5384      END IF;
5385 
5386 
5387      INSERT INTO xla_events
5388           (event_id
5389           ,application_id
5390           ,event_type_code
5391           ,entity_id
5392           ,event_number
5393           ,event_status_code
5394           ,process_status_code
5395           ,event_date
5396           ,transaction_date
5397           ,budgetary_control_flag
5398           ,creation_date
5399           ,created_by
5400           ,last_update_date
5401           ,last_updated_by
5402           ,last_update_login
5403           ,program_update_date
5404           ,program_application_id
5405           ,program_id
5406           ,request_id
5407           ,reference_num_1
5408           ,reference_num_2
5409           ,reference_num_3
5410           ,reference_num_4
5411           ,reference_char_1
5412           ,reference_char_2
5413           ,reference_char_3
5414           ,reference_char_4
5415           ,reference_date_1
5416           ,reference_date_2
5417           ,reference_date_3
5418           ,reference_date_4
5419           ,on_hold_flag)
5420           (SELECT event_id
5421               ,application_id
5422               ,event_type_code
5423               ,entity_id
5424               ,nvl(event_number, nvl(max(event_number)
5425                    over (partition by entity_id), 0)+
5426                    ROW_NUMBER() over (PARTITION BY entity_id order by event_id))
5427               ,event_status_code
5428               ,C_INTERNAL_UNPROCESSED
5429               ,TRUNC(event_date)
5430               ,nvl(transaction_date, TRUNC(event_date))
5431               ,nvl(xla_events_int_gt.budgetary_control_flag,'N')
5432               ,sysdate
5433               ,xla_environment_pkg.g_usr_id
5434               ,sysdate
5435               ,xla_environment_pkg.g_usr_id
5436               ,xla_environment_pkg.g_login_id
5437               ,sysdate
5438               ,xla_environment_pkg.g_prog_appl_id
5439               ,xla_environment_pkg.g_prog_id
5440               ,xla_environment_pkg.g_req_Id
5441               ,reference_num_1
5442               ,reference_num_2
5443               ,reference_num_3
5444               ,reference_num_4
5445               ,reference_char_1
5446               ,reference_char_2
5447               ,reference_char_3
5448               ,reference_char_4
5449               ,reference_date_1
5450               ,reference_date_2
5451               ,reference_date_3
5452               ,reference_date_4
5453               ,'N'
5454            FROM xla_events_int_gt);
5455      IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5456         trace
5457            (p_msg      => 'Number of events created(non gapless) = '||
5458                           to_char(SQL%ROWCOUNT)
5459            ,p_level    => C_LEVEL_STATEMENT
5460            ,p_module   =>l_log_module);
5461      END IF;
5462    END IF;
5463 
5464 
5465   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5466     trace
5467          (p_msg      => 'end of procedure create_bulk_events'
5468          ,p_level    => C_LEVEL_PROCEDURE
5469          ,p_module   =>l_log_module);
5470   END IF;
5471 
5472 EXCEPTION
5473 WHEN xla_exceptions_pkg.application_exception THEN
5474    ROLLBACK to SAVEPOINT before_event_creation;
5475    RAISE;
5476 WHEN OTHERS                                   THEN
5477    ROLLBACK to SAVEPOINT before_event_creation;
5478    xla_exceptions_pkg.raise_message
5479       (p_location => 'xla_events_pkg.create_bulk_events(blk)');
5480 END create_bulk_events;
5481 
5482 
5483 --=============================================================================
5484 --
5485 --
5486 --
5487 --=============================================================================
5488 
5489 PROCEDURE update_bulk_event_statuses(p_application_id INTEGER)
5490 IS
5491 
5492 TYPE t_array_number      IS TABLE OF NUMBER          INDEX BY BINARY_INTEGER;
5493 
5494 l_array_entity_id                 t_array_number;
5495 l_array_event_id                  t_array_number;
5496 l_array_event_number              xla_events_pub_pkg.t_array_event_number;
5497 l_array_event_status_code         xla_events_pub_pkg.t_array_event_status_code;
5498 
5499 l_array_on_hold_flag      t_on_hold_flag_tbl;
5500 
5501 l_log_module                VARCHAR2(240);
5502 l_rowcount_gt               PLS_INTEGER;
5503 l_current_event_number      xla_events.event_number%TYPE;
5504 l_current_entity_id         PLS_INTEGER;
5505 l_application_id            PLS_INTEGER;
5506 l_on_hold_flag              xla_events.on_hold_flag%TYPE;
5507 
5508 -- This cursor will check
5509 -- 1. the application_id, entity_code, event_id is not null
5510 -- 2. the old and new event_status_code is valid
5511 -- 3. no manual entity events are modified
5512 -- 4. application_id is populated and all equals p_application_id
5513 CURSOR csr_manual_processed_events(app_id NUMBER) is
5514   SELECT 1
5515     FROM xla_events_int_gt xeg, xla_events xe, xla_entity_types_b xet
5516    WHERE xeg.application_id = xe.application_id (+)
5517      AND xeg.event_id = xe.event_id (+)
5518      AND xeg.entity_code = xet.entity_code (+)
5519      AND xet.application_id(+) = app_id
5520      AND (xeg.entity_code = C_MANUAL_ENTITY
5521           OR xeg.event_status_code not in ('I', 'N', 'U')
5522           OR xe.event_status_code  not in ('I', 'N', 'U')
5523           OR xe.application_id is null
5524           OR xe.event_id is null
5525           OR xet.entity_code is null
5526           OR xeg.application_id <> app_id);
5527 
5528 CURSOR csr_invalid_app(app_id NUMBER) is
5529   SELECT 1
5530     FROM xla_events_int_gt xeg
5531    WHERE xeg.application_id <> app_id;
5532 
5533 CURSOR csr_invalid_event_id(app_id NUMBER) is
5534   SELECT 1
5535     FROM xla_events_int_gt xeg, xla_events xe
5536    WHERE xeg.application_id = xe.application_id (+)
5537      AND xeg.event_id = xe.event_id (+)
5538      AND xe.event_id is null;
5539 
5540 CURSOR csr_invalid_event_status(app_id NUMBER) is
5541   SELECT 1
5542     FROM xla_events_int_gt xeg, xla_events xe
5543    WHERE xeg.application_id = xe.application_id
5544      AND xeg.event_id = xe.event_id
5545      AND (xe.event_status_code not in ('I', 'N', 'U')
5546          OR xeg.event_status_code not in ('I', 'N', 'U'));
5547 
5548 CURSOR csr_lock_te is
5549    SELECT xte.entity_id
5550      FROM xla_transaction_entities xte
5551     WHERE xte.application_id = p_application_id
5552       AND xte.entity_id in
5553           (SELECT entity_id
5554              FROM xla_events_int_gt xeg, xla_entity_types_b xet
5555             WHERE xeg.application_id = xet.application_id
5556               AND xeg.entity_code = xet.entity_code
5557               AND xet.enable_gapless_events_flag = 'Y')
5558       FOR UPDATE NOWAIT;
5559 
5560 Cursor csr_new_gap is
5561        Select min(xe.event_number), xe.entity_id, xe.application_id
5562          From xla_events_int_gt xeg,
5563               xla_events xe,
5564               xla_entity_types_b xet
5565         Where xeg.event_id = xe.event_id
5566           And xeg.application_id = xe.application_id
5567           And xeg.entity_code = xet.entity_code
5568           And xeg.application_id = xet.application_id
5569           And xet.enable_gapless_events_flag = 'Y'
5570           And xe.event_status_code <> 'I'
5571           And xeg.event_status_code = 'I'
5572           And xe.on_hold_flag = 'N'
5573        Group by xe.entity_id, xe.application_id;
5574 
5575 Cursor csr_erased_gap is
5576     Select xe.entity_id,
5577             xe.event_id,
5578             xe.event_number,
5579             nvl(xeg.event_status_code, xe.event_status_code)
5580        FROM xla_events xe, xla_events_int_gt xeg
5581       Where xe.event_id = xeg.event_id(+)
5582         And xe.entity_id in (
5583               Select xe.entity_id
5584                 From xla_events_int_gt xeg,
5585                      xla_events xe,
5586                      xla_entity_types_b xet
5587                Where xeg.event_id = xe.event_id
5588                  And xet.entity_code = xeg.entity_code
5589                  And xet.application_id = xe.application_id
5590                  And xet.enable_gapless_events_flag = 'Y'
5591                  And xe.event_status_code = 'I'
5592                  And xeg.event_status_code <> 'I'
5593                  And xe.on_hold_flag = 'N')
5594      Order by entity_id, event_number;
5595 
5596 l_temp number;
5597 
5598 BEGIN
5599   IF g_log_enabled THEN
5600     l_log_module := C_DEFAULT_MODULE||'.update_bulk_event_statuses';
5601   END IF;
5602 
5603   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5604      trace
5605          (p_msg      => 'BEGIN of procedure .update_bulk_event_statuses'
5606          ,p_level    => C_LEVEL_PROCEDURE
5607          ,p_module   =>l_log_module);
5608      trace
5609          (p_msg      => 'p_application_id = '||p_application_id
5610          ,p_level    => C_LEVEL_PROCEDURE
5611          ,p_module   =>l_log_module);
5612   END IF;
5613 
5614    SAVEPOINT before_update_bulk_statuses;
5615    g_action := C_EVENT_UPDATE;
5616 
5617    ----------------------------------------------------------------------------
5618    -- Following sets the Security Context for the execution. This enables the
5619    -- event API to respect the transaction security.
5620    ----------------------------------------------------------------------------
5621    xla_security_pkg.set_security_context(p_application_id);
5622 
5623    IF g_application_id IS NULL OR g_application_id <> p_application_id THEN
5624       cache_application_setup
5625          (p_application_id => p_application_id);
5626    END IF;
5627 
5628    ----------------------------------------------------------------------------
5629    -- Check if the data is valid
5630    ----------------------------------------------------------------------------
5631    open csr_manual_processed_events(p_application_id);
5632    fetch csr_manual_processed_events into l_temp;
5633    if(csr_manual_processed_events%FOUND) THEN
5634      close csr_manual_processed_events;
5635 
5636      open csr_invalid_app(p_application_id);
5637      fetch csr_invalid_app into l_temp;
5638      if(csr_invalid_app%FOUND) THEN
5639        close csr_invalid_app;
5640        xla_exceptions_pkg.raise_message
5641          (p_appli_s_name   => 'XLA'
5642          ,p_msg_name       => 'XLA_COMMON_ERROR'
5643          ,p_token_1        => 'ERROR'
5644          ,p_value_1        =>
5645          'The parameter application_id does not match with the data in xla_events_int_gt table'
5646          ,p_token_2        => 'LOCATION'
5647          ,p_value_2        => 'xla_events_pkg.update_bulk_event_statuses(fn)');
5648      end if;
5649      close csr_invalid_app;
5650 
5651      open csr_invalid_event_id(p_application_id);
5652      fetch csr_invalid_event_id into l_temp;
5653      if(csr_invalid_event_id%FOUND) THEN
5654        close csr_invalid_event_id;
5655        xla_exceptions_pkg.raise_message
5656          (p_appli_s_name   => 'XLA'
5657          ,p_msg_name       => 'XLA_COMMON_ERROR'
5658          ,p_token_1        => 'ERROR'
5659          ,p_value_1        => '(Application id, Event ID) is not valid'
5660          ,p_token_2        => 'LOCATION'
5661          ,p_value_2        => 'xla_events_pkg.update_bulk_event_statuses(fn)');
5662      end if;
5663      close csr_invalid_event_id;
5664 
5665      open csr_invalid_event_status(p_application_id);
5666      fetch csr_invalid_event_status into l_temp;
5667      if(csr_invalid_event_status%FOUND) THEN
5668        close csr_invalid_event_status;
5669        xla_exceptions_pkg.raise_message
5670          (p_appli_s_name   => 'XLA'
5671          ,p_msg_name       => 'XLA_COMMON_ERROR'
5672          ,p_token_1        => 'ERROR'
5673          ,p_value_1        =>
5674          'Both the new and the old event status must be valid and cannot be P'
5675          ,p_token_2        => 'LOCATION'
5676          ,p_value_2        => 'xla_events_pkg.update_bulk_event_statuses(fn)');
5677      end if;
5678      close csr_invalid_event_status;
5679 
5680      -- If reach here, must be entity code error
5681       xla_exceptions_pkg.raise_message
5682          (p_appli_s_name   => 'XLA'
5683          ,p_msg_name       => 'XLA_COMMON_ERROR'
5684          ,p_token_1        => 'ERROR'
5685          ,p_value_1        =>
5686          'The entity_code is not valid. Either it does not match with the event id, or it is MANUAL entity. This API cannot be called for MANUAL entity'
5687          ,p_token_2        => 'LOCATION'
5688          ,p_value_2        => 'xla_events_pkg.update_bulk_event_statuses(fn)');
5689    end if;
5690    close csr_manual_processed_events;
5691 
5692 
5693   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
5694      trace
5695          (p_msg      => 'after the validation'
5696          ,p_level    => C_LEVEL_STATEMENT
5697          ,p_module   =>l_log_module);
5698   END IF;
5699 
5700    -- lock the entity in xla_transaction_entities table
5701    -- for the entities that require gapless processing
5702    open csr_lock_te;
5703    close csr_lock_te;
5704 
5705    ----------------------------------------------------------------------------
5706    -- set the on_hold_flag to 'Y' for all the new gap generated
5707    ----------------------------------------------------------------------------
5708   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
5709      trace
5710          (p_msg      => 'processing the new gaps'
5711          ,p_level    => C_LEVEL_STATEMENT
5712          ,p_module   =>l_log_module);
5713   END IF;
5714    OPEN csr_new_gap;
5715    LOOP
5716      FETCH csr_new_gap
5717      into l_current_event_number,
5718           l_current_entity_id,
5719           l_application_id;
5720      EXIT WHEN csr_new_gap%NOTFOUND;
5721 
5722      UPDATE xla_events
5723         SET on_hold_flag = 'Y'
5724       WHERE entity_id = l_current_entity_id
5725         AND event_number > l_current_event_number
5726         AND application_id = l_application_id;
5727    END LOOP;
5728    CLOSE csr_new_gap;
5729 
5730    ----------------------------------------------------------------------------
5731    -- reset the on_hold_flag for all the existing gap elimited
5732    ----------------------------------------------------------------------------
5733   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
5734      trace
5735          (p_msg      => 'processing the erased gaps'
5736          ,p_level    => C_LEVEL_STATEMENT
5737          ,p_module   =>l_log_module);
5738   END IF;
5739    open csr_erased_gap;
5740 
5741    l_current_entity_id := null;
5742    l_on_hold_flag := 'N';
5743    l_current_event_number := 1;
5744    LOOP
5745      FETCH csr_erased_gap
5746      BULK COLLECT INTO l_array_entity_id
5747                          , l_array_event_id
5748                          , l_array_event_number
5749                          , l_array_event_status_code
5750      LIMIT 2000;
5751 
5752      -- next is to loop to set the on_hold_flag
5753      FOR i in 1..l_array_event_id.COUNT LOOP
5754          IF(l_current_entity_id = l_array_entity_id (i)) THEN
5755            IF(l_on_hold_flag = 'N' ) THEN
5756              IF(l_current_event_number = l_array_event_number(i)) THEN
5757                l_array_on_hold_flag(i) := 'N';
5758                IF(l_array_event_status_code(i) = 'I') THEN
5759                  l_on_hold_flag :='Y';
5760                ELSE
5761                  l_current_event_number := l_current_event_number + 1;
5762                END IF;
5763              ELSE
5764                l_on_hold_flag :='Y';
5765                l_array_on_hold_flag(i) := 'Y';
5766              END IF;
5767            ELSE
5768              l_array_on_hold_flag(i) := 'Y';
5769            END IF;
5770          ELSE
5771            l_current_entity_id := l_array_entity_id (i);
5772            IF(l_array_event_number(i) = 1) THEN
5773              l_array_on_hold_flag(i) := 'N';
5774              IF(l_array_event_status_code(i) = 'I') THEN
5775                l_on_hold_flag :='Y';
5776              ELSE
5777                l_on_hold_flag :='N';
5778                l_current_event_number := l_current_event_number + 1;
5779              END IF;
5780            ELSE
5781              l_on_hold_flag :='Y';
5782              l_array_on_hold_flag(i) := 'Y';
5783            END IF;
5784          END IF;
5785      END LOOP;
5786 
5787      FORALL i in 1..l_array_event_id.COUNT
5788        UPDATE xla_events
5789           SET on_hold_flag = l_array_on_hold_flag(i)
5790         WHERE event_id=l_array_event_id(i);
5791      EXIT when csr_erased_gap%NOTFOUND;
5792    END LOOP;
5793 
5794    CLOSE csr_erased_gap;
5795 
5796   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
5797      trace
5798          (p_msg      => 'before update the table'
5799          ,p_level    => C_LEVEL_STATEMENT
5800          ,p_module   =>l_log_module);
5801   END IF;
5802 
5803    UPDATE xla_events xe
5804       SET xe.event_status_code = (
5805            SELECT event_status_code
5806              FROM xla_events_int_gt xeg
5807             WHERE xeg.event_id = xe.event_id),
5808           xe.process_status_code = 'U'
5809     WHERE xe.event_id in (
5810              SELECT event_id
5811                FROM xla_events_int_gt);
5812 
5813 /*  -- Maintaining the Draft balance is no more required bug 5529569
5814 
5815   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
5816      trace
5817          (p_msg      => 'before calling massive_update'
5818          ,p_level    => C_LEVEL_STATEMENT
5819          ,p_module   =>l_log_module);
5820   END IF;
5821 
5822   IF(NOT xla_balances_pkg.massive_update_for_events(p_application_id
5823                                                      => p_application_id)) THEN
5824        xla_exceptions_pkg.raise_message
5825             (p_appli_s_name   => 'XLA'
5826             ,p_msg_name       => 'XLA_COMMON_ERROR'
5827             ,p_token_1        => 'ERROR'
5828             ,p_value_1        =>
5829             'Error in the routine that does balance reversals'
5830             ,p_token_2        => 'LOCATION'
5831             ,p_value_2        => 'xla_events_pkg.update_bulk_event_statuses');
5832   END IF;
5833 */
5834   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
5835      trace
5836          (p_msg      => 'before calling delete_je'
5837          ,p_level    => C_LEVEL_STATEMENT
5838          ,p_module   =>l_log_module);
5839   END IF;
5840   delete_je;
5841 
5842   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5843     trace
5844          (p_msg      => 'end of procedure update_bulk_event_statuses'
5845          ,p_level    => C_LEVEL_PROCEDURE
5846          ,p_module   =>l_log_module);
5847   END IF;
5848 
5849 EXCEPTION
5850 WHEN xla_exceptions_pkg.application_exception THEN
5851    ROLLBACK to SAVEPOINT before_update_bulk_statuses;
5852    RAISE;
5853 WHEN OTHERS                                   THEN
5854    ROLLBACK to SAVEPOINT before_update_bulk_statuses;
5855    xla_exceptions_pkg.raise_message
5856       (p_location => 'xla_events_pkg.update_bulk_event_statuses(blk)');
5857 END update_bulk_event_statuses;
5858 
5859 
5860 --=============================================================================
5861 --
5862 --
5863 --
5864 --=============================================================================
5865 
5866 PROCEDURE delete_bulk_events(p_application_id INTEGER)
5867 IS
5868 
5869 l_log_module                VARCHAR2(240);
5870 
5871 l_rowcount_gt               PLS_INTEGER;
5872 l_event_number      xla_events.event_number%TYPE;
5873 l_entity_id         PLS_INTEGER;
5874 l_application_id            PLS_INTEGER;
5875 -- This cursor will check
5876 -- 1. the application_id, entity_code, event_id is not null
5877 -- 2. the event_status_code cannot be 'P'
5878 -- 3. no manual entity events are modified
5879 -- 4. application_id is populated and all equals p_application_id
5880 CURSOR csr_manual_processed_events(app_id NUMBER) is
5881   SELECT 1
5882     FROM xla_events_int_gt xeg, xla_events xe, xla_transaction_entities xte
5883    WHERE xeg.application_id = xe.application_id (+)
5884      AND xeg.event_id = xe.event_id (+)
5885      AND xe.entity_id = xte.entity_id (+)
5886      AND xte.application_id(+) = app_id
5887      AND (xeg.entity_code = C_MANUAL_ENTITY
5888           OR xe.event_status_code  not in ('I', 'N', 'U')
5889           OR xe.application_id is null
5890           OR xte.entity_code is null
5891           OR xe.event_id is null
5892           OR xeg.application_id <> app_id);
5893 
5894 CURSOR csr_invalid_app(app_id NUMBER) is
5895   SELECT 1
5896     FROM xla_events_int_gt xeg
5897    WHERE xeg.application_id <> app_id;
5898 
5899 CURSOR csr_invalid_event_id(app_id NUMBER) is
5900   SELECT 1
5901     FROM xla_events_int_gt xeg, xla_events xe
5902    WHERE xeg.application_id = xe.application_id (+)
5903      AND xeg.event_id = xe.event_id (+)
5904      AND xe.event_id is null;
5905 
5906 CURSOR csr_invalid_event_status(app_id NUMBER) is
5907   SELECT 1
5908     FROM xla_events_int_gt xeg, xla_events xe
5909    WHERE xeg.application_id = xe.application_id
5910      AND xeg.event_id = xe.event_id
5911      AND xe.event_status_code not in ('I', 'N', 'U');
5912 
5913 CURSOR csr_lock_te is
5914    SELECT xte.entity_id
5915      FROM xla_transaction_entities xte
5916     WHERE xte.application_id = p_application_id
5917           AND xte.entity_id in
5918           (SELECT entity_id
5919              FROM xla_events_int_gt xeg, xla_entity_types_b xet
5920             WHERE xeg.application_id = xet.application_id
5921               AND xeg.entity_code = xet.entity_code
5922               AND xet.enable_gapless_events_flag = 'Y')
5923       FOR UPDATE NOWAIT;
5924 
5925 Cursor csr_new_gap is
5926        Select min(xe.event_number), xe.entity_id, xe.application_id
5927          From xla_events_int_gt xeg,
5928               xla_events xe,
5929               xla_entity_types_b xet
5930         Where xeg.event_id = xe.event_id
5931           And xeg.application_id = xe.application_id
5932           And xeg.entity_code = xet.entity_code
5933           And xeg.application_id = xet.application_id
5934           And xet.enable_gapless_events_flag = 'Y'
5935           And xe.event_status_code <> 'I'
5936           And xe.on_hold_flag = 'N'
5937        Group by xe.entity_id, xe.application_id;
5938 
5939 l_temp number;
5940 
5941 BEGIN
5942   IF g_log_enabled THEN
5943     l_log_module := C_DEFAULT_MODULE||'.delete_bulk_events';
5944   END IF;
5945 
5946   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5947      trace
5948          (p_msg      => 'BEGIN of procedure .update_bulk_event_statuses'
5949          ,p_level    => C_LEVEL_PROCEDURE
5950          ,p_module   =>l_log_module);
5951      trace
5952          (p_msg      => 'p_application_id = '||p_application_id
5953          ,p_level    => C_LEVEL_PROCEDURE
5954          ,p_module   =>l_log_module);
5955   END IF;
5956 
5957    SAVEPOINT before_delete_bulk_events;
5958    g_action := C_EVENT_UPDATE;
5959 
5960    ----------------------------------------------------------------------------
5961    -- Following sets the Security Context for the execution. This enables the
5962    -- event API to respect the transaction security.
5963    ----------------------------------------------------------------------------
5964    xla_security_pkg.set_security_context(p_application_id);
5965 
5966    IF g_application_id IS NULL OR g_application_id <> p_application_id THEN
5967       cache_application_setup
5968          (p_application_id => p_application_id);
5969    END IF;
5970 
5971    ----------------------------------------------------------------------------
5972    -- Check if the data is valid
5973    ----------------------------------------------------------------------------
5974    open csr_manual_processed_events(p_application_id);
5975    fetch csr_manual_processed_events into l_temp;
5976    if(csr_manual_processed_events%FOUND) THEN
5977      close csr_manual_processed_events;
5978 
5979      open csr_invalid_app(p_application_id);
5980      fetch csr_invalid_app into l_temp;
5981      if(csr_invalid_app%FOUND) THEN
5982        close csr_invalid_app;
5983        xla_exceptions_pkg.raise_message
5984          (p_appli_s_name   => 'XLA'
5985          ,p_msg_name       => 'XLA_COMMON_ERROR'
5986          ,p_token_1        => 'ERROR'
5987          ,p_value_1        =>
5988          'The parameter application_id does not match with the data in xla_events_int_gt table'
5989          ,p_token_2        => 'LOCATION'
5990          ,p_value_2        => 'xla_events_pkg.update_bulk_event_statuses(fn)');
5991      end if;
5992      close csr_invalid_app;
5993 
5994      open csr_invalid_event_id(p_application_id);
5995      fetch csr_invalid_event_id into l_temp;
5996      if(csr_invalid_event_id%FOUND) THEN
5997        close csr_invalid_event_id;
5998        xla_exceptions_pkg.raise_message
5999          (p_appli_s_name   => 'XLA'
6000          ,p_msg_name       => 'XLA_COMMON_ERROR'
6001          ,p_token_1        => 'ERROR'
6002          ,p_value_1        => '(Application id, Event ID) is not valid'
6003          ,p_token_2        => 'LOCATION'
6004          ,p_value_2        => 'xla_events_pkg.update_bulk_event_statuses(fn)');
6005      end if;
6006      close csr_invalid_event_id;
6007 
6008      open csr_invalid_event_status(p_application_id);
6009      fetch csr_invalid_event_status into l_temp;
6010      if(csr_invalid_event_status%FOUND) THEN
6011        close csr_invalid_event_status;
6012        xla_exceptions_pkg.raise_message
6013          (p_appli_s_name   => 'XLA'
6014          ,p_msg_name       => 'XLA_COMMON_ERROR'
6015          ,p_token_1        => 'ERROR'
6016          ,p_value_1        =>
6017          'The events to be deleted must be in status I, N or U'
6018          ,p_token_2        => 'LOCATION'
6019          ,p_value_2        => 'xla_events_pkg.update_bulk_event_statuses(fn)');
6020      end if;
6021      close csr_invalid_event_status;
6022 
6023      -- if reach here, it must be entity code problem
6024       xla_exceptions_pkg.raise_message
6025          (p_appli_s_name   => 'XLA'
6026          ,p_msg_name       => 'XLA_COMMON_ERROR'
6027          ,p_token_1        => 'ERROR'
6028          ,p_value_1        =>
6029          'Either the entity code does not match with the event id, or the entity code is MANUAL. This API cannot be called to delete event for MANUAL entity'
6030          ,p_token_2        => 'LOCATION'
6031          ,p_value_2        => 'xla_events_pkg.get_array_event_info (fn)');
6032    end if;
6033    close csr_manual_processed_events;
6034 
6035    ----------------------------------------------------------------------------
6036    -- Immediately exit if the table is empty
6037    -- the l_rowcount_gt is also useful to find if there is invalid data
6038    ----------------------------------------------------------------------------
6039    select count(1) into l_rowcount_gt from xla_events_int_gt;
6040    if(l_rowcount_gt = 0) then
6041      return;
6042    end if;
6043 
6044   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
6045      trace
6046          (p_msg      => 'before lock te'
6047          ,p_level    => C_LEVEL_STATEMENT
6048          ,p_module   =>l_log_module);
6049   END IF;
6050 
6051    -- lock the entity in xla_transaction_entities table
6052    -- for the entities that require gapless processing
6053    open csr_lock_te;
6054    close csr_lock_te;
6055 
6056 /*  -- Maintaining the Draft balance is no more required bug 5529569
6057 
6058   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
6059      trace
6060          (p_msg      => 'before calling massive_update'
6061          ,p_level    => C_LEVEL_STATEMENT
6062          ,p_module   =>l_log_module);
6063   END IF;
6064 
6065    IF(NOT xla_balances_pkg.massive_update_for_events(p_application_id
6066                                                 => p_application_id)) THEN
6067        xla_exceptions_pkg.raise_message
6068             (p_appli_s_name   => 'XLA'
6069             ,p_msg_name       => 'XLA_COMMON_ERROR'
6070             ,p_token_1        => 'ERROR'
6071             ,p_value_1        =>
6072             'Error in the routine that does balance reversals'
6073             ,p_token_2        => 'LOCATION'
6074             ,p_value_2        => 'xla_events_pkg.delete_bulk_events');
6075    END IF;
6076 */
6077 
6078   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
6079      trace
6080          (p_msg      => 'before calling delete_je'
6081          ,p_level    => C_LEVEL_STATEMENT
6082          ,p_module   =>l_log_module);
6083   END IF;
6084 
6085   delete_je;
6086 
6087    ----------------------------------------------------------------------------
6088    -- set the on_hold_flag to 'Y' for all the new gap generated
6089    ----------------------------------------------------------------------------
6090   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
6091      trace
6092          (p_msg      => 'before process gapless'
6093          ,p_level    => C_LEVEL_STATEMENT
6094          ,p_module   =>l_log_module);
6095   END IF;
6096    OPEN csr_new_gap;
6097    LOOP
6098      FETCH csr_new_gap into l_event_number, l_entity_id, l_application_id;
6099      EXIT WHEN csr_new_gap%NOTFOUND;
6100 
6101      UPDATE xla_events
6102         SET on_hold_flag = 'Y'
6103       WHERE entity_id = l_entity_id
6104         AND event_number > l_event_number
6105         AND application_id = l_application_id;
6106    END LOOP;
6107    CLOSE csr_new_gap;
6108 
6109   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
6110      trace
6111          (p_msg      => 'before deleting events'
6112          ,p_level    => C_LEVEL_STATEMENT
6113          ,p_module   =>l_log_module);
6114   END IF;
6115 
6116   UPDATE xla_events_int_gt xeg
6117       SET xeg.entity_id =
6118                (SELECT xe.entity_id
6119                   FROM xla_events  xe
6120                  WHERE xe.event_id = xeg.event_id);
6121 
6122    DELETE xla_events
6123     WHERE event_id in (
6124             SELECT event_id
6125               FROM xla_events_int_gt);
6126   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
6127      trace
6128          (p_msg      => 'Number of events deleted:'||to_char(SQL%ROWCOUNT)
6129          ,p_level    => C_LEVEL_STATEMENT
6130          ,p_module   =>l_log_module);
6131   END IF;
6132 
6133    DELETE xla_transaction_entities xte
6134     WHERE not exists (
6135             SELECT 1
6136               FROM xla_events xe
6137              WHERE xe.entity_id = xte.entity_id
6138                AND xe.application_id = xte.application_id
6139                AND xte.application_id = p_application_id)
6140                AND entity_id in (
6141                    SELECT entity_id
6142                      FROM xla_events_int_gt);
6143 
6144   IF (C_LEVEL_STATEMENT>= g_log_level) THEN
6145      trace
6146          (p_msg      => 'Number of transaction entity deleted:'||
6147                         to_char(SQL%ROWCOUNT)
6148          ,p_level    => C_LEVEL_STATEMENT
6149          ,p_module   =>l_log_module);
6150   END IF;
6151 
6152 
6153   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6154     trace
6155          (p_msg      => 'end of procedure delete_bulk_events'
6156          ,p_level    => C_LEVEL_PROCEDURE
6157          ,p_module   =>l_log_module);
6158   END IF;
6159 
6160 EXCEPTION
6161 WHEN xla_exceptions_pkg.application_exception THEN
6162    ROLLBACK to SAVEPOINT before_delete_bulk_event;
6163    RAISE;
6164 WHEN OTHERS                                   THEN
6165    ROLLBACK to SAVEPOINT before_delete_bulk_event;
6166    xla_exceptions_pkg.raise_message
6167       (p_location => 'xla_events_pkg.delete_bulk_events(blk)');
6168 END delete_bulk_events;
6169 
6170 --=============================================================================
6171 --
6172 --  For MANUAL events this API cannot be called.
6173 --
6174 --=============================================================================
6175 
6176 FUNCTION  get_array_event_info
6177    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
6178    ,p_valuation_method             IN  VARCHAR2
6179    ,p_event_class_code             IN  VARCHAR2 DEFAULT NULL
6180    ,p_event_type_code              IN  VARCHAR2 DEFAULT NULL
6181    ,p_event_date                   IN  DATE     DEFAULT NULL
6182    ,p_event_status_code            IN  VARCHAR2 DEFAULT NULL)
6183 RETURN xla_events_pub_pkg.t_array_event_info IS
6184 
6185 l_array_event_info              xla_events_pub_pkg.t_array_event_info;
6186 l_count                         INTEGER := 0;
6187 l_event_date                    DATE;
6188 
6189 CURSOR c1 IS
6190    SELECT event_id
6191          ,event_number
6192          ,event_type_code
6193          ,event_date
6194          ,event_status_code
6195          ,on_hold_flag
6196          ,reference_num_1
6197          ,reference_num_2
6198          ,reference_num_3
6199          ,reference_num_4
6200          ,reference_char_1
6201          ,reference_char_2
6202          ,reference_char_3
6203          ,reference_char_4
6204          ,reference_date_1
6205          ,reference_date_2
6206          ,reference_date_3
6207          ,reference_date_4
6208      FROM xla_events
6209     WHERE event_date          = NVL(l_event_date, event_date)
6210       AND event_status_code   = NVL(p_event_status_code,event_status_code)
6211       AND event_type_code     = NVL(p_event_type_code  ,event_type_code)
6212       AND entity_id           = g_entity_id
6213       AND event_type_code IN (SELECT event_type_code
6214                                 FROM xla_event_types_b
6215                                WHERE application_id    = g_application_id
6216                                  AND entity_code       = g_entity_type_code
6217                                  AND event_class_code  = NVL(p_event_class_code,
6218                                                              event_class_code));
6219 l_log_module                VARCHAR2(240);
6220 BEGIN
6221   IF g_log_enabled THEN
6222     l_log_module := C_DEFAULT_MODULE||'.get_array_event_info';
6223   END IF;
6224   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6225      trace
6226          (p_msg      => 'BEGIN of procedure get_array_event_info'
6227          ,p_level    => C_LEVEL_PROCEDURE
6228          ,p_module   =>l_log_module);
6229      trace
6230          (p_msg      => 'source_application_id = '||
6231                         p_event_source_info.source_application_id
6232          ,p_level    => C_LEVEL_PROCEDURE
6233          ,p_module   =>l_log_module);
6234      trace
6235          (p_msg      => 'application_id = '||p_event_source_info.application_id
6236          ,p_level    => C_LEVEL_PROCEDURE
6237          ,p_module   =>l_log_module);
6238      trace
6239          (p_msg      => 'legal_entity_id = '||
6240                         p_event_source_info.legal_entity_id
6241          ,p_level    => C_LEVEL_PROCEDURE
6242          ,p_module   =>l_log_module);
6243      trace
6244          (p_msg      => 'ledger_id = '||p_event_source_info.ledger_id
6245          ,p_level    => C_LEVEL_PROCEDURE
6246          ,p_module   =>l_log_module);
6247      trace
6248          (p_msg      => 'entity_type_code = '||
6249                         p_event_source_info.entity_type_code
6250          ,p_level    => C_LEVEL_PROCEDURE
6251          ,p_module   =>l_log_module);
6252      trace
6253          (p_msg      => 'transaction_number = '||
6254                         p_event_source_info.transaction_number
6255          ,p_level    => C_LEVEL_PROCEDURE
6256          ,p_module   =>l_log_module);
6257      trace
6258          (p_msg      => 'source_id_int_1 = '||
6259                         p_event_source_info.source_id_int_1
6260          ,p_level    => C_LEVEL_PROCEDURE
6261          ,p_module   =>l_log_module);
6262      trace
6263          (p_msg      => 'source_id_int_2 = '||
6264                         p_event_source_info.source_id_int_2
6265          ,p_level    => C_LEVEL_PROCEDURE
6266          ,p_module   =>l_log_module);
6267      trace
6268          (p_msg      => 'source_id_int_3 = '||
6269                         p_event_source_info.source_id_int_3
6270          ,p_level    => C_LEVEL_PROCEDURE
6271          ,p_module   =>l_log_module);
6272      trace
6273          (p_msg      => 'source_id_int_4 = '||
6274                         p_event_source_info.source_id_int_4
6275          ,p_level    => C_LEVEL_PROCEDURE
6276          ,p_module   =>l_log_module);
6277      trace
6278          (p_msg      => 'source_id_char_1 = '||
6279                         p_event_source_info.source_id_char_1
6280          ,p_level    => C_LEVEL_PROCEDURE
6281          ,p_module   =>l_log_module);
6282      trace
6283          (p_msg      => 'source_id_char_2 = '||
6284                         p_event_source_info.source_id_char_2
6285          ,p_level    => C_LEVEL_PROCEDURE
6286          ,p_module   =>l_log_module);
6287      trace
6288          (p_msg      => 'source_id_char_3 = '||
6289                         p_event_source_info.source_id_char_3
6290          ,p_level    => C_LEVEL_PROCEDURE
6291          ,p_module   =>l_log_module);
6292      trace
6293          (p_msg      => 'source_id_char_4 = '||
6294                         p_event_source_info.source_id_char_4
6295          ,p_level    => C_LEVEL_PROCEDURE
6296          ,p_module   =>l_log_module);
6297      trace
6298          (p_msg      => 'p_event_class_code = '||p_event_class_code
6299          ,p_level    => C_LEVEL_PROCEDURE
6300          ,p_module   =>l_log_module);
6301      trace
6302          (p_msg      => 'p_event_type_code = '||p_event_type_code
6303          ,p_level    => C_LEVEL_PROCEDURE
6304          ,p_module   =>l_log_module);
6305      trace
6306          (p_msg      => 'p_event_date = '||p_event_date
6307          ,p_level    => C_LEVEL_PROCEDURE
6308          ,p_module   =>l_log_module);
6309      trace
6310          (p_msg      => 'p_event_status_code = '||p_event_status_code
6311          ,p_level    => C_LEVEL_PROCEDURE
6312          ,p_module   =>l_log_module);
6313      trace
6314          (p_msg      => 'security_id_int_1 = '||
6315                         xla_events_pub_pkg.g_security.security_id_int_1
6316          ,p_level    => C_LEVEL_PROCEDURE
6317          ,p_module   =>l_log_module);
6318      trace
6319          (p_msg      => 'security_id_int_2 = '||
6320                         xla_events_pub_pkg.g_security.security_id_int_2
6321          ,p_level    => C_LEVEL_PROCEDURE
6322          ,p_module   =>l_log_module);
6323      trace
6324          (p_msg      => 'security_id_int_3 = '||
6325                         xla_events_pub_pkg.g_security.security_id_int_3
6326          ,p_level    => C_LEVEL_PROCEDURE
6327          ,p_module   =>l_log_module);
6328      trace
6329          (p_msg      => 'security_id_char_1 = '||
6330                         xla_events_pub_pkg.g_security.security_id_char_1
6331          ,p_level    => C_LEVEL_PROCEDURE
6332          ,p_module   =>l_log_module);
6333      trace
6334          (p_msg      => 'security_id_char_2 = '||
6335                         xla_events_pub_pkg.g_security.security_id_char_2
6336          ,p_level    => C_LEVEL_PROCEDURE
6337          ,p_module   =>l_log_module);
6338      trace
6339          (p_msg      => 'security_id_char_3 = '||
6340                         xla_events_pub_pkg.g_security.security_id_char_3
6341          ,p_level    => C_LEVEL_PROCEDURE
6342          ,p_module   =>l_log_module);
6343      trace
6344          (p_msg      => 'valuation_method = '||p_valuation_method
6345          ,p_level    => C_LEVEL_PROCEDURE
6346          ,p_module   =>l_log_module);
6347   END IF;
6348    g_action := C_EVENT_QUERY;
6349 
6350    ----------------------------------------------------------------------------
6351    -- Following sets the Security Context for the execution. This enables the
6352    -- event API to respect the transaction security.
6353    ----------------------------------------------------------------------------
6354    xla_security_pkg.set_security_context(p_event_source_info.application_id);
6355 
6356    IF p_event_source_info.entity_type_code = C_MANUAL_ENTITY THEN
6357       xla_exceptions_pkg.raise_message
6358          (p_appli_s_name   => 'XLA'
6359          ,p_msg_name       => 'XLA_COMMON_ERROR'
6360          ,p_token_1        => 'ERROR'
6361          ,p_value_1        => 'For MANUAL events this API cannot be called'
6362          ,p_token_2        => 'LOCATION'
6363          ,p_value_2        => 'xla_events_pkg.get_array_event_info (fn)');
6364    ELSE
6365       g_context := C_REGULAR_EVENT_CONTEXT;
6366    END IF;
6367 
6368    ----------------------------------------------------------------------------
6369    -- truncate date
6370    ----------------------------------------------------------------------------
6371    l_event_date    := TRUNC(p_event_date);
6372 
6373    ----------------------------------------------------------------------------
6374    -- Validate parameters
6375    ----------------------------------------------------------------------------
6376    validate_params
6377       (p_source_info       => p_event_source_info
6378       ,p_event_class_code  => p_event_class_code
6379       ,p_event_type_code   => p_event_type_code);
6380 --      ,p_event_status_code => p_event_status_code);
6381 
6382    ----------------------------------------------------------------------------
6383    -- Get document PK
6384    ----------------------------------------------------------------------------
6385    cache_entity_info
6386       (p_source_info        => p_event_source_info
6387       ,p_valuation_method   => p_valuation_method
6388       ,p_event_id           => NULL);
6389 
6390    ----------------------------------------------------------------------------
6391    -- raise error if the entity does not exist
6392    ----------------------------------------------------------------------------
6393    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6394       trace
6395          (p_msg      => 'g_entity_id = '||g_entity_id
6396          ,p_level    => C_LEVEL_STATEMENT
6397          ,p_module   =>l_log_module);
6398    END IF;
6399 
6400    IF g_entity_id IS NULL  THEN
6401       xla_exceptions_pkg.raise_message
6402          (p_appli_s_name   => 'XLA'
6403          ,p_msg_name       => 'XLA_COMMON_ERROR'
6404          ,p_token_1        => 'ERROR'
6405          ,p_value_1        => 'No event exists for the document represented '||
6406                               'by the given source information.'
6407          ,p_token_2        => 'LOCATION'
6408          ,p_value_2        => 'xla_events_pkg.get_array_event_info (fn)');
6409    END IF;
6410 
6411    FOR lc_evt IN c1 LOOP
6412       l_count := l_count + 1;
6413 
6414       l_array_event_info(l_count).event_id          := lc_evt.event_id;
6415       l_array_event_info(l_count).event_number      := lc_evt.event_number;
6416       l_array_event_info(l_count).event_type_code   := lc_evt.event_type_code;
6417       l_array_event_info(l_count).event_date        := lc_evt.event_date;
6418       l_array_event_info(l_count).event_status_code := lc_evt.event_status_code;
6419       l_array_event_info(l_count).on_hold_flag      := lc_evt.on_hold_flag;
6420       l_array_event_info(l_count).reference_num_1   := lc_evt.reference_num_1;
6421       l_array_event_info(l_count).reference_num_2   := lc_evt.reference_num_2;
6422       l_array_event_info(l_count).reference_num_3   := lc_evt.reference_num_3;
6423       l_array_event_info(l_count).reference_num_4   := lc_evt.reference_num_4;
6424       l_array_event_info(l_count).reference_char_1  := lc_evt.reference_char_1;
6425       l_array_event_info(l_count).reference_char_2  := lc_evt.reference_char_2;
6426       l_array_event_info(l_count).reference_char_3  := lc_evt.reference_char_3;
6427       l_array_event_info(l_count).reference_char_4  := lc_evt.reference_char_4;
6428       l_array_event_info(l_count).reference_date_1  := lc_evt.reference_date_1;
6429       l_array_event_info(l_count).reference_date_2  := lc_evt.reference_date_2;
6430       l_array_event_info(l_count).reference_date_3  := lc_evt.reference_date_3;
6431       l_array_event_info(l_count).reference_date_4  := lc_evt.reference_date_4;
6432    END LOOP;
6433 
6434    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6435       trace
6436          (p_msg      => 'Number of events found = '||l_array_event_info.count
6437          ,p_level    => C_LEVEL_PROCEDURE
6438          ,p_module   =>l_log_module);
6439       trace
6440          (p_msg      => 'end of procedure get_array_event_info'
6441          ,p_level    => C_LEVEL_PROCEDURE
6442          ,p_module   =>l_log_module);
6443    END IF;
6444 
6445    RETURN (l_array_event_info);
6446 EXCEPTION
6447 WHEN xla_exceptions_pkg.application_exception THEN
6448    RAISE;
6449 WHEN OTHERS                                   THEN
6450    xla_exceptions_pkg.raise_message
6451       (p_location => 'xla_events_pkg.get_array_event_info (fn)');
6452 END get_array_event_info;
6453 
6454 
6455 --=============================================================================
6456 --
6457 --
6458 --
6459 --
6460 --
6461 --
6462 --
6463 --
6464 --
6465 --
6466 -- Following are the public routines to set/reset/initialize the cache
6467 --
6468 --    1.    Initialize
6469 --
6470 --
6471 --
6472 --
6473 --
6474 --
6475 --
6476 --
6477 --
6478 --
6479 --
6480 --=============================================================================
6481 
6482 --=============================================================================
6483 --
6484 --
6485 -- Changed to fix bug # 2899700. (Added g_process_status_code_tbl init...)
6486 --
6487 --=============================================================================
6488 
6489 PROCEDURE initialize IS
6490 l_log_module                VARCHAR2(240);
6491 BEGIN
6492   IF g_log_enabled THEN
6493     l_log_module := C_DEFAULT_MODULE||'.initialize';
6494   END IF;
6495   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6496     trace
6497          (p_msg      => 'BEGIN of procedure initialize'
6498          ,p_level    => C_LEVEL_PROCEDURE
6499          ,p_module   =>l_log_module);
6500   END IF;
6501 
6502    reset_cache;
6503 
6504    ----------------------------------------------------------------------------
6505    -- cache event status code
6506    ----------------------------------------------------------------------------
6507    g_event_status_code_tbl(1) := xla_events_pub_pkg.C_EVENT_UNPROCESSED;
6508    g_event_status_code_tbl(2) := xla_events_pub_pkg.C_EVENT_INCOMPLETE;
6509    g_event_status_code_tbl(3) := xla_events_pub_pkg.C_EVENT_NOACTION;
6510    g_event_status_code_tbl(4) := xla_events_pub_pkg.C_EVENT_PROCESSED;
6511 
6512    ----------------------------------------------------------------------------
6513    -- cache process status code
6514    ----------------------------------------------------------------------------
6515    g_process_status_code_tbl(1) := C_INTERNAL_UNPROCESSED;
6516    g_process_status_code_tbl(2) := C_INTERNAL_DRAFT;
6517    g_process_status_code_tbl(3) := C_INTERNAL_FINAL;
6518    g_process_status_code_tbl(4) := C_INTERNAL_ERROR;
6519    g_process_status_code_tbl(5) := C_INTERNAL_INVALID;
6520 
6521   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6522     trace
6523          (p_msg      => 'end of procedure initialize'
6524          ,p_level    => C_LEVEL_PROCEDURE
6525          ,p_module   =>l_log_module);
6526   END IF;
6527 
6528 EXCEPTION
6529 WHEN xla_exceptions_pkg.application_exception THEN
6530    RAISE;
6531 WHEN OTHERS                                   THEN
6532    xla_exceptions_pkg.raise_message
6533       (p_location => 'xla_events_pkg.initialize');
6534 END initialize;
6535 
6536 
6537 --=============================================================================
6538 --          *********** private procedures and functions **********
6539 --=============================================================================
6540 --=============================================================================
6541 --
6542 --
6543 --
6544 --
6545 --
6546 --
6547 --
6548 --
6549 --
6550 --
6551 -- Following are the routines that are private to this package and are
6552 --
6553 --    1.    source_info_changed  (comparing event_source_info)
6554 --    2.    source_info_changed  (comparing entity_source_info)
6555                                              -- No longer needed
6556 --    3.    validate_context
6557 --    4.    get_id_mapping
6558 --    5.    validate_ids
6559 --    6.    validate_cached_setup
6560 --    7.    cache_application_setup
6561 --    8.    validate_entity_type_code
6562 --    9.    validate_event_class_code
6563 --   10.    validate_event_type_code
6564 --   11.    validate_event_status_code
6565 --   12.    validate_params
6566 --   13.    validate_ledger
6567 --   14.    cache_entity_info
6568 --   15.    create_entity_event
6569 --   16.    update_entity_trx_number
6570 --   17.    add_entity_event
6571 --   18.    reset_cache
6572 --   19.    set_context
6573 --
6574 --
6575 --
6576 --
6577 --
6578 --
6579 --
6580 --
6581 --
6582 --
6583 --
6584 --=============================================================================
6585 
6586 --=============================================================================
6587 --
6588 --
6589 --
6590 --=============================================================================
6591 
6592 FUNCTION source_info_changed
6593    (p_event_source_info1           IN  xla_events_pub_pkg.t_event_source_info
6594    ,p_event_source_info2           IN  xla_events_pub_pkg.t_event_source_info
6595    ,p_valuation_method1            IN  VARCHAR2
6596    ,p_valuation_method2            IN  VARCHAR2)
6597 RETURN BOOLEAN IS
6598 l_log_module                VARCHAR2(240);
6599 BEGIN
6600   IF g_log_enabled THEN
6601     l_log_module := C_DEFAULT_MODULE||'.source_info_changed';
6602   END IF;
6603   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6604     trace
6605          (p_msg      => 'BEGIN of procedure source_info_changed'
6606          ,p_level    => C_LEVEL_PROCEDURE
6607          ,p_module   =>l_log_module);
6608   END IF;
6609 
6610    ----------------------------------------------------------------------------
6611    -- Bug 4312353. Added the the OR condition to check the valuation method
6612    ----------------------------------------------------------------------------
6613 
6614    IF NVL(p_event_source_info1.application_id,C_NUM)
6615                             <> NVL(p_event_source_info2.application_id,C_NUM)
6616    OR NVL(p_event_source_info1.ledger_id,C_NUM)
6617                             <> NVL(p_event_source_info2.ledger_id,C_NUM)
6618    OR NVL(p_event_source_info1.legal_entity_id,C_NUM)
6619                             <> NVL(p_event_source_info2.legal_entity_id,C_NUM)
6620    OR NVL(p_event_source_info1.entity_type_code,C_NUM)
6621                             <> NVL(p_event_source_info2.entity_type_code,C_NUM)
6622    OR NVL(p_event_source_info1.source_id_int_1,C_NUM)
6623                             <> NVL(p_event_source_info2.source_id_int_1,C_NUM)
6624    OR NVL(p_event_source_info1.source_id_int_2,C_NUM)
6625                             <> NVL(p_event_source_info2.source_id_int_2,C_NUM)
6626    OR NVL(p_event_source_info1.source_id_int_3,C_NUM)
6627                             <> NVL(p_event_source_info2.source_id_int_3,C_NUM)
6628    OR NVL(p_event_source_info1.source_id_int_4,C_NUM)
6629                             <> NVL(p_event_source_info2.source_id_int_4,C_NUM)
6630    OR NVL(p_event_source_info1.source_id_char_1,C_CHAR)
6631                             <> NVL(p_event_source_info2.source_id_char_1,C_CHAR)
6632    OR NVL(p_event_source_info1.source_id_char_2,C_CHAR)
6633                             <> NVL(p_event_source_info2.source_id_char_2,C_CHAR)
6634    OR NVL(p_event_source_info1.source_id_char_3,C_CHAR)
6635                             <> NVL(p_event_source_info2.source_id_char_3,C_CHAR)
6636    OR NVL(p_event_source_info1.source_id_char_4,C_CHAR)
6637                             <> NVL(p_event_source_info2.source_id_char_4,C_CHAR)
6638    OR NVL(p_valuation_method1,C_CHAR) <> NVL(p_valuation_method2,C_CHAR)
6639    THEN
6640 
6641       IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6642          trace
6643             (p_msg      => 'end of procedure source_info_changed'
6644             ,p_level    => C_LEVEL_PROCEDURE
6645             ,p_module   =>l_log_module);
6646          trace
6647             (p_msg      => 'return value is true'
6648             ,p_level    => C_LEVEL_PROCEDURE
6649             ,p_module   =>l_log_module);
6650       END IF;
6651       RETURN TRUE;
6652    ELSE
6653       IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6654          trace
6655             (p_msg      => 'end of procedure source_info_changed'
6656             ,p_level    => C_LEVEL_PROCEDURE
6657             ,p_module   =>l_log_module);
6658          trace
6659             (p_msg      => 'return value is false'
6660             ,p_level    => C_LEVEL_PROCEDURE
6661             ,p_module   =>l_log_module);
6662       END IF;
6663       RETURN FALSE;
6664    END IF;
6665 EXCEPTION
6666 WHEN xla_exceptions_pkg.application_exception THEN
6667    RAISE;
6668 WHEN OTHERS                                   THEN
6669    xla_exceptions_pkg.raise_message
6670       (p_location => 'xla_events_pkg.source_info_changed');
6671 END;
6672 
6673 
6674 --=============================================================================
6675 --
6676 --
6677 --
6678 --=============================================================================
6679 
6680 PROCEDURE validate_context
6681    (p_application_id               IN  INTEGER
6682    ,p_ledger_id                    IN  INTEGER
6683    ,p_entity_type_code             IN  VARCHAR2) IS
6684 l_log_module                VARCHAR2(240);
6685 BEGIN
6686   IF g_log_enabled THEN
6687     l_log_module := C_DEFAULT_MODULE||'.validate_context';
6688   END IF;
6689   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6690     trace
6691          (p_msg      => 'BEGIN of procedure validate_context'
6692          ,p_level    => C_LEVEL_PROCEDURE
6693          ,p_module   =>l_log_module);
6694   END IF;
6695 
6696    IF p_application_id  IS NULL THEN
6697       xla_exceptions_pkg.raise_message
6698          (p_appli_s_name   => 'XLA'
6699          ,p_msg_name       => 'XLA_COMMON_ERROR'
6700          ,p_token_1        => 'ERROR'
6701          ,p_value_1        =>
6702          'Application ID has an invalid value. It cannot have a NULL value.'
6703          ,p_token_2        => 'LOCATION'
6704          ,p_value_2        => 'xla_events_pkg.validate_context');
6705    END IF;
6706 
6707    IF p_ledger_id IS NULL THEN
6708       xla_exceptions_pkg.raise_message
6709          (p_appli_s_name   => 'XLA'
6710          ,p_msg_name       => 'XLA_COMMON_ERROR'
6711          ,p_token_1        => 'ERROR'
6712          ,p_value_1        =>
6713          'Ledger ID has an invalid value. It cannot have a NULL value.'
6714          ,p_token_2        => 'LOCATION'
6715          ,p_value_2        => 'xla_events_pkg.validate_context');
6716    ELSE
6717       -------------------------------------------------------------------------
6718       -- Validate ledger
6719       -------------------------------------------------------------------------
6720       validate_ledger
6721          (p_ledger_id            => p_ledger_id
6722          ,p_application_id       => p_application_id);
6723 
6724    END IF;
6725 
6726    IF p_entity_type_code  IS NULL THEN
6727       xla_exceptions_pkg.raise_message
6728          (p_appli_s_name   => 'XLA'
6729          ,p_msg_name       => 'XLA_COMMON_ERROR'
6730          ,p_token_1        => 'ERROR'
6731          ,p_value_1        =>
6732          'Entity Type Code has an invalid value. It cannot have a NULL value.'
6733          ,p_token_2        => 'LOCATION'
6734          ,p_value_2        => 'xla_events_pkg.validate_context');
6735    END IF;
6736   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6737     trace
6738          (p_msg      => 'end of procedure validate_context'
6739          ,p_level    => C_LEVEL_PROCEDURE
6740          ,p_module   =>l_log_module);
6741   END IF;
6742 
6743 EXCEPTION
6744 WHEN xla_exceptions_pkg.application_exception THEN
6745    RAISE;
6746 WHEN OTHERS                                   THEN
6747    xla_exceptions_pkg.raise_message
6748       (p_location => 'xla_events_pkg.validate_context');
6749 END validate_context;
6750 
6751 
6752 --=============================================================================
6753 --
6754 --
6755 --
6756 --=============================================================================
6757 
6758 FUNCTION  get_id_mapping
6759    (p_entity_type_code             IN  VARCHAR2
6760    ,p_source_id_code_1             IN  VARCHAR2
6761    ,p_source_id_code_2             IN  VARCHAR2
6762    ,p_source_id_code_3             IN  VARCHAR2
6763    ,p_source_id_code_4             IN  VARCHAR2)
6764 RETURN VARCHAR2 IS
6765 l_mapping             VARCHAR2(8);
6766 lmap1                 VARCHAR2(1)   := '_';
6767 lmap2                 VARCHAR2(1)   := '_';
6768 lmap3                 VARCHAR2(1)   := '_';
6769 lmap4                 VARCHAR2(1)   := '_';
6770 lmap5                 VARCHAR2(1)   := '_';
6771 lmap6                 VARCHAR2(1)   := '_';
6772 lmap7                 VARCHAR2(1)   := '_';
6773 lmap8                 VARCHAR2(1)   := '_';
6774 l_error               BOOLEAN       := FALSE;
6775 l_log_module                VARCHAR2(240);
6776 BEGIN
6777   IF g_log_enabled THEN
6778     l_log_module := C_DEFAULT_MODULE||'.get_id_mapping';
6779   END IF;
6780   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6781     trace
6782          (p_msg      => 'BEGIN of procedure get_id_mapping'
6783          ,p_level    => C_LEVEL_PROCEDURE
6784          ,p_module   =>l_log_module);
6785   END IF;
6786 
6787    IF p_source_id_code_1 IS NULL THEN
6788       IF p_source_id_code_2 IS NULL THEN
6789          IF p_source_id_code_3 IS NULL THEN
6790             IF p_source_id_code_4 IS NULL THEN
6791                l_error := FALSE;
6792             ELSE
6793                l_error := TRUE;
6794             END IF;
6795          ELSE
6796             l_error := TRUE;
6797          END IF;
6798       ELSE
6799          l_error := TRUE;
6800       END IF;
6801    ELSE
6802       IF p_source_id_code_2 IS NULL THEN
6803          IF p_source_id_code_3 IS NULL THEN
6804             IF p_source_id_code_4 IS NULL THEN
6805                l_error := FALSE;
6806             ELSE
6807                l_error := TRUE;
6808             END IF;
6809          ELSE
6810             l_error := TRUE;
6811          END IF;
6812       ELSE
6813          IF p_source_id_code_3 IS NULL THEN
6814             IF p_source_id_code_4 IS NULL THEN
6815                l_error := FALSE;
6816             ELSE
6817                l_error := TRUE;
6818             END IF;
6819          ELSE
6820             l_error := FALSE;
6821          END IF;
6822       END IF;
6823    END IF;
6824 
6825    IF l_error THEN
6826       xla_exceptions_pkg.raise_message
6827          (p_appli_s_name   => 'XLA'
6828          ,p_msg_name       => 'XLA_COMMON_ERROR'
6829          ,p_token_1        => 'ERROR'
6830          ,p_value_1        => 'The setup for Entity Type, '||
6831                           p_entity_type_code ||', is incorrect. Internal Error.'
6832          ,p_token_2        => 'LOCATION'
6833          ,p_value_2        => 'xla_events_pkg.get_id_mapping');
6834    END IF;
6835 
6836    IF p_source_id_code_1 = 'SOURCE_ID_INT_1'
6837    OR p_source_id_code_2 = 'SOURCE_ID_INT_1'
6838    OR p_source_id_code_3 = 'SOURCE_ID_INT_1'
6839    OR p_source_id_code_4 = 'SOURCE_ID_INT_1'
6840    THEN
6841       lmap1 := 'I';
6842    END IF;
6843 
6844    IF p_source_id_code_1 = 'SOURCE_ID_INT_2'
6845    OR p_source_id_code_2 = 'SOURCE_ID_INT_2'
6846    OR p_source_id_code_3 = 'SOURCE_ID_INT_2'
6847    OR p_source_id_code_4 = 'SOURCE_ID_INT_2'
6848    THEN
6849       lmap2 := 'I';
6850    END IF;
6851 
6852    IF p_source_id_code_1 = 'SOURCE_ID_INT_3'
6853    OR p_source_id_code_2 = 'SOURCE_ID_INT_3'
6854    OR p_source_id_code_3 = 'SOURCE_ID_INT_3'
6855    OR p_source_id_code_4 = 'SOURCE_ID_INT_3'
6856    THEN
6857       lmap3 := 'I';
6858    END IF;
6859 
6860    IF p_source_id_code_1 = 'SOURCE_ID_INT_4'
6861    OR p_source_id_code_2 = 'SOURCE_ID_INT_4'
6862    OR p_source_id_code_3 = 'SOURCE_ID_INT_4'
6863    OR p_source_id_code_4 = 'SOURCE_ID_INT_4'
6864    THEN
6865       lmap4 := 'I';
6866    END IF;
6867 
6868    IF p_source_id_code_1 = 'SOURCE_ID_CHAR_1'
6869    OR p_source_id_code_2 = 'SOURCE_ID_CHAR_1'
6870    OR p_source_id_code_3 = 'SOURCE_ID_CHAR_1'
6871    OR p_source_id_code_4 = 'SOURCE_ID_CHAR_1'
6872    THEN
6873       lmap5 := 'I';
6874    END IF;
6875 
6876    IF p_source_id_code_1 = 'SOURCE_ID_CHAR_2'
6877    OR p_source_id_code_2 = 'SOURCE_ID_CHAR_2'
6878    OR p_source_id_code_3 = 'SOURCE_ID_CHAR_2'
6879    OR p_source_id_code_4 = 'SOURCE_ID_CHAR_2'
6880    THEN
6881       lmap6 := 'I';
6882    END IF;
6883 
6884    IF p_source_id_code_1 = 'SOURCE_ID_CHAR_3'
6885    OR p_source_id_code_2 = 'SOURCE_ID_CHAR_3'
6886    OR p_source_id_code_3 = 'SOURCE_ID_CHAR_3'
6887    OR p_source_id_code_4 = 'SOURCE_ID_CHAR_3'
6888    THEN
6889       lmap7 := 'I';
6890    END IF;
6891 
6892    IF p_source_id_code_1 = 'SOURCE_ID_CHAR_4'
6893    OR p_source_id_code_2 = 'SOURCE_ID_CHAR_4'
6894    OR p_source_id_code_3 = 'SOURCE_ID_CHAR_4'
6895    OR p_source_id_code_4 = 'SOURCE_ID_CHAR_4'
6896    THEN
6897       lmap8 := 'I';
6898    END IF;
6899 
6900    l_mapping := lmap1||lmap2||lmap3||lmap4||lmap5||lmap6||lmap7||lmap8;
6901 
6902   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6903     trace
6904          (p_msg      => 'end of procedure get_id_mapping'
6905          ,p_level    => C_LEVEL_PROCEDURE
6906          ,p_module   =>l_log_module);
6907     trace
6908          (p_msg      => 'return value is:'||l_mapping
6909          ,p_level    => C_LEVEL_PROCEDURE
6910          ,p_module   =>l_log_module);
6911   END IF;
6912 
6913    RETURN l_mapping;
6914 EXCEPTION
6915 WHEN xla_exceptions_pkg.application_exception THEN
6916    RAISE;
6917 WHEN OTHERS                                   THEN
6918    xla_exceptions_pkg.raise_message
6919       (p_location => 'xla_events_pkg.get_id_mapping');
6920 END;
6921 
6922 
6923 --=============================================================================
6924 --
6925 --
6926 --
6927 --=============================================================================
6928 
6929 FUNCTION validate_id_where_clause return VARCHAR2 is
6930 l_string VARCHAR2(1000):=null;
6931 l_log_module                VARCHAR2(240);
6932 BEGIN
6933   IF g_log_enabled THEN
6934     l_log_module := C_DEFAULT_MODULE||'.validate_ids';
6935   END IF;
6936 
6937   IF substr(g_id_mapping,1,1) = 'I' THEN
6938     l_string := ' SOURCE_ID_INT_1 is null OR';
6939   ELSE
6940     l_string := ' SOURCE_ID_INT_1 is not null OR ';
6941   END IF;
6942 
6943   IF substr(g_id_mapping,2,1) = 'I' THEN
6944     l_string := l_string || ' SOURCE_ID_INT_2 is null OR ';
6945   ELSE
6946     l_string := l_string || ' SOURCE_ID_INT_2 is not null OR ';
6947   END IF;
6948 
6949   IF substr(g_id_mapping,3,1) = 'I' THEN
6950     l_string := l_string || ' SOURCE_ID_INT_3 is null OR';
6951   ELSE
6952     l_string := l_string || ' SOURCE_ID_INT_3 is not null OR';
6953   END IF;
6954 
6955   IF substr(g_id_mapping,4,1) = 'I' THEN
6956     l_string := l_string || ' SOURCE_ID_INT_4 is null OR';
6957   ELSE
6958     l_string := l_string || ' SOURCE_ID_INT_4 is not null OR';
6959   END IF;
6960 
6961   IF substr(g_id_mapping,5,1) = 'I' THEN
6962     l_string := l_string || ' SOURCE_ID_CHAR_1 is null OR';
6963   ELSE
6964     l_string := l_string || ' SOURCE_ID_CHAR_1 is not null OR';
6965   END IF;
6966 
6967   IF substr(g_id_mapping,6,1) = 'I' THEN
6968     l_string := l_string || ' SOURCE_ID_CHAR_2 is null OR';
6969   ELSE
6970     l_string := l_string || ' SOURCE_ID_CHAR_2 is not null OR';
6971   END IF;
6972 
6973   IF substr(g_id_mapping,7,1) = 'I' THEN
6974     l_string := l_string || ' SOURCE_ID_CHAR_3 is null OR';
6975   ELSE
6976     l_string := l_string || ' SOURCE_ID_CHAR_3 is not null OR';
6977   END IF;
6978 
6979   IF substr(g_id_mapping,8,1) = 'I' THEN
6980     l_string := l_string || ' SOURCE_ID_CHAR_4 is null ';
6981   ELSE
6982     l_string := l_string || ' SOURCE_ID_CHAR_4 is not null ';
6983   END IF;
6984 
6985   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6986     trace
6987          (p_msg      => 'end of procedure validate_id_where_clause'
6988          ,p_level    => C_LEVEL_PROCEDURE
6989          ,p_module   =>l_log_module);
6990     trace
6991          (p_msg      => 'return value is:'||l_string
6992          ,p_level    => C_LEVEL_PROCEDURE
6993          ,p_module   =>l_log_module);
6994   END IF;
6995 
6996   RETURN l_string;
6997 END validate_id_where_clause;
6998 
6999 
7000 --=============================================================================
7001 --
7002 --
7003 --
7004 --=============================================================================
7005 
7006 FUNCTION join_id_where_clause return VARCHAR2 is
7007 l_string VARCHAR2(1000):=null;
7008 l_log_module                VARCHAR2(240);
7009 BEGIN
7010   IF g_log_enabled THEN
7011     l_log_module := C_DEFAULT_MODULE||'.validate_ids';
7012   END IF;
7013 
7014   IF substr(g_id_mapping,1,1) = 'I' THEN
7015     l_string := ' AND xte.source_id_int_1 = xeg.source_id_int_1';
7016   END IF;
7017 
7018   IF substr(g_id_mapping,2,1) = 'I' THEN
7019     l_string := l_string || ' AND xte.source_id_int_2 = xeg.source_id_int_2';
7020   END IF;
7021 
7022   IF substr(g_id_mapping,3,1) = 'I' THEN
7023     l_string := l_string || ' AND xte.source_id_int_3 = xeg.source_id_int_3';
7024   END IF;
7025 
7026   IF substr(g_id_mapping,4,1) = 'I' THEN
7027     l_string := l_string || ' AND xte.source_id_int_4 = xeg.source_id_int_4';
7028   END IF;
7029 
7030   IF substr(g_id_mapping,5,1) = 'I' THEN
7031     l_string := l_string || ' AND xte.source_id_char_1 = xeg.source_id_char_1';
7032   END IF;
7033 
7034   IF substr(g_id_mapping,6,1) = 'I' THEN
7035     l_string := l_string || ' AND xte.source_id_char_2 = xeg.source_id_char_2';
7036   END IF;
7037 
7038   IF substr(g_id_mapping,7,1) = 'I' THEN
7039     l_string := l_string || ' AND xte.source_id_char_3 = xeg.source_id_char_3';
7040   END IF;
7041 
7042   IF substr(g_id_mapping,8,1) = 'I' THEN
7043     l_string := l_string || ' AND xte.source_id_char_4 = xeg.source_id_char_4';
7044   END IF;
7045   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7046     trace
7047          (p_msg      => 'end of procedure join_id_where_clause'
7048          ,p_level    => C_LEVEL_PROCEDURE
7049          ,p_module   =>l_log_module);
7050     trace
7051          (p_msg      => 'return value is:'||l_string
7052          ,p_level    => C_LEVEL_PROCEDURE
7053          ,p_module   =>l_log_module);
7054   END IF;
7055 
7056   RETURN l_string;
7057 END join_id_where_clause;
7058 
7059 
7060 --=============================================================================
7061 --
7062 --
7063 --
7064 --=============================================================================
7065 
7066 PROCEDURE validate_ids
7067    (p_entity_type_code             IN  VARCHAR2
7068    ,p_source_id_int_1              IN  INTEGER
7069    ,p_source_id_int_2              IN  INTEGER
7070    ,p_source_id_int_3              IN  INTEGER
7071    ,p_source_id_int_4              IN  INTEGER
7072    ,p_source_id_char_1             IN  VARCHAR2
7073    ,p_source_id_char_2             IN  VARCHAR2
7074    ,p_source_id_char_3             IN  VARCHAR2
7075    ,p_source_id_char_4             IN  VARCHAR2) IS
7076 l_error               BOOLEAN       := FALSE;
7077 l_log_module                VARCHAR2(240);
7078 BEGIN
7079   IF g_log_enabled THEN
7080     l_log_module := C_DEFAULT_MODULE||'.validate_ids';
7081   END IF;
7082   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7083     trace
7084          (p_msg      => 'BEGIN of procedure validate_ids'
7085          ,p_level    => C_LEVEL_PROCEDURE
7086          ,p_module   =>l_log_module);
7087   END IF;
7088 
7089    IF substr(g_id_mapping,1,1) = 'I' THEN
7090       IF p_source_id_int_1 IS NULL THEN
7091          l_error := TRUE;
7092       END IF;
7093    ELSE
7094       IF p_source_id_int_1 IS NOT NULL THEN
7095          l_error := TRUE;
7096       END IF;
7097    END IF;
7098 
7099    IF substr(g_id_mapping,2,1) = 'I' THEN
7100       IF p_source_id_int_2 IS NULL THEN
7101          l_error := TRUE;
7102       END IF;
7103    ELSE
7104       IF p_source_id_int_2 IS NOT NULL THEN
7105          l_error := TRUE;
7106       END IF;
7107    END IF;
7108 
7109    IF substr(g_id_mapping,3,1) = 'I' THEN
7110       IF p_source_id_int_3 IS NULL THEN
7111          l_error := TRUE;
7112       END IF;
7113    ELSE
7114       IF p_source_id_int_3 IS NOT NULL THEN
7115          l_error := TRUE;
7116       END IF;
7117    END IF;
7118 
7119    IF substr(g_id_mapping,4,1) = 'I' THEN
7120       IF p_source_id_int_4 IS NULL THEN
7121          l_error := TRUE;
7122       END IF;
7123    ELSE
7124       IF p_source_id_int_4 IS NOT NULL THEN
7125          l_error := TRUE;
7126       END IF;
7127    END IF;
7128 
7129    IF substr(g_id_mapping,5,1) = 'I' THEN
7130       IF p_source_id_char_1 IS NULL THEN
7131          l_error := TRUE;
7132       END IF;
7133    ELSE
7134       IF p_source_id_char_1 IS NOT NULL THEN
7135          l_error := TRUE;
7136       END IF;
7137    END IF;
7138 
7139    IF substr(g_id_mapping,6,1) = 'I' THEN
7140       IF p_source_id_char_2 IS NULL THEN
7141          l_error := TRUE;
7142       END IF;
7143    ELSE
7144       IF p_source_id_char_2 IS NOT NULL THEN
7145          l_error := TRUE;
7146       END IF;
7147    END IF;
7148 
7149    IF substr(g_id_mapping,7,1) = 'I' THEN
7150       IF p_source_id_char_3 IS NULL THEN
7151          l_error := TRUE;
7152       END IF;
7153    ELSE
7154       IF p_source_id_char_3 IS NOT NULL THEN
7155          l_error := TRUE;
7156       END IF;
7157    END IF;
7158 
7159    IF substr(g_id_mapping,8,1) = 'I' THEN
7160       IF p_source_id_char_4 IS NULL THEN
7161          l_error := TRUE;
7162       END IF;
7163    ELSE
7164       IF p_source_id_char_4 IS NOT NULL THEN
7165          l_error := TRUE;
7166       END IF;
7167    END IF;
7168 
7169    IF l_error THEN
7170       xla_exceptions_pkg.raise_message
7171          (p_appli_s_name   => 'XLA'
7172          ,p_msg_name       => 'XLA_COMMON_ERROR'
7173          ,p_token_1        => 'ERROR'
7174          ,p_value_1        =>
7175      'The source information passed does not map to the setups for Entity Type '
7176                            || p_entity_type_code
7177          ,p_token_2        => 'LOCATION'
7178          ,p_value_2        => 'xla_events_pkg.validate_ids');
7179    END IF;
7180 
7181   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7182     trace
7183          (p_msg      => 'end of procedure validate_ids'
7184          ,p_level    => C_LEVEL_PROCEDURE
7185          ,p_module   =>l_log_module);
7186   END IF;
7187 END;
7188 
7189 
7190 --=============================================================================
7191 --
7192 --
7193 --
7194 --=============================================================================
7195 
7196 PROCEDURE validate_cached_setup IS
7197 l_log_module                VARCHAR2(240);
7198 BEGIN
7199   IF g_log_enabled THEN
7200     l_log_module := C_DEFAULT_MODULE||'.validate_cached_setup';
7201   END IF;
7202   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7203     trace
7204          (p_msg      => 'BEGIN of procedure validate_cached_setup'
7205          ,p_level    => C_LEVEL_PROCEDURE
7206          ,p_module   =>l_log_module);
7207   END IF;
7208 
7209    IF g_application_id IS NULL THEN
7210       xla_exceptions_pkg.raise_message
7211          (p_appli_s_name   => 'XLA'
7212          ,p_msg_name       => 'XLA_COMMON_ERROR'
7213          ,p_token_1        => 'ERROR'
7214          ,p_value_1        =>
7215         'The application is not registerd with subledger accounting architectre'
7216          ,p_token_2        => 'LOCATION'
7217          ,p_value_2        => 'xla_events_pkg.validate_cached_setup');
7218    END IF;
7219 
7220    --
7221    -- Validate that the entity type code tables have been loaded
7222    --
7223    IF g_entity_type_code_tbl.FIRST IS NULL THEN
7224       xla_exceptions_pkg.raise_message
7225          (p_appli_s_name   => 'XLA'
7226          ,p_msg_name       => 'XLA_COMMON_ERROR'
7227          ,p_token_1        => 'ERROR'
7228          ,p_value_1        =>
7229          'There is no Entity Type Code defined for the application '
7230                            ||g_application_id
7231          ,p_token_2        => 'LOCATION'
7232          ,p_value_2        => 'xla_events_pkg.validate_cached_setup');
7233    END IF;
7234 
7235    --
7236    -- Validate that the event class tables have been loaded
7237    --
7238    IF g_event_class_code_tbl.FIRST IS NULL THEN
7239       xla_exceptions_pkg.raise_message
7240          (p_appli_s_name   => 'XLA'
7241          ,p_msg_name       => 'XLA_COMMON_ERROR'
7242          ,p_token_1        => 'ERROR'
7243          ,p_value_1        =>
7244          'There is no Event Class defined for the application '
7245                            ||g_application_id
7246          ,p_token_2        => 'LOCATION'
7247          ,p_value_2        => 'xla_events_pkg.validate_cached_setup');
7248    END IF;
7249 
7250    --
7251    -- Validate that the event type code tables have been loaded
7252    --
7253    IF g_event_type_code_tbl.FIRST IS NULL THEN
7254       xla_exceptions_pkg.raise_message
7255          (p_appli_s_name   => 'XLA'
7256          ,p_msg_name       => 'XLA_COMMON_ERROR'
7257          ,p_token_1        => 'ERROR'
7258          ,p_value_1        =>
7259          'There is no Event Type Code defined for the application '
7260                            ||g_application_id
7261          ,p_token_2        => 'LOCATION'
7262          ,p_value_2        => 'xla_events_pkg.validate_cached_setup');
7263    END IF;
7264 
7265   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7266     trace
7267          (p_msg      => 'end of procedure validate_cached_setup'
7268          ,p_level    => C_LEVEL_PROCEDURE
7269          ,p_module   =>l_log_module);
7270   END IF;
7271 
7272 END validate_cached_setup;
7273 
7274 
7275 --=============================================================================
7276 --
7277 --
7278 --
7279 --=============================================================================
7280 PROCEDURE cache_application_setup
7281    (p_application_id               IN  INTEGER) IS
7282 CURSOR csr_xla_application IS
7283    SELECT application_id
7284    FROM   xla_subledgers
7285    WHERE  application_id        = p_application_id;
7286 
7287 CURSOR csr_entity_types IS
7288    SELECT t.entity_code
7289          ,m.source_id_col_name_1
7290          ,m.source_id_col_name_2
7291          ,m.source_id_col_name_3
7292          ,m.source_id_col_name_4
7293          ,t.enabled_flag
7294    FROM   xla_entity_types_b      t
7295          ,xla_entity_id_mappings  m
7296    WHERE  t.application_id        = g_application_id
7297      AND  t.application_id        = m.application_id
7298      AND  t.entity_code           = m.entity_code;
7299 
7300 CURSOR csr_event_classes IS
7301    SELECT a.entity_code
7302          ,a.event_class_code
7303          ,a.enabled_flag
7304    FROM   xla_event_classes_b  a
7305    WHERE  a.application_id          = g_application_id;
7306 
7307 CURSOR csr_event_types IS
7308    SELECT a.entity_code
7309          ,a.event_class_code
7310          ,a.event_type_code
7311          ,a.enabled_flag
7312    FROM   xla_event_types_b      a
7313    WHERE  a.application_id          = g_application_id;
7314 
7315 l_count                         INTEGER;
7316 
7317 l_log_module                VARCHAR2(240);
7318 BEGIN
7319   IF g_log_enabled THEN
7320     l_log_module := C_DEFAULT_MODULE||'.cache_application_setup';
7321   END IF;
7322   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7323     trace
7324          (p_msg      => 'BEGIN of procedure cache_application_setup'
7325          ,p_level    => C_LEVEL_PROCEDURE
7326          ,p_module   =>l_log_module);
7327   END IF;
7328 
7329    trace('> xla_events_pkg.cache_application_setup'                  , 20);
7330 
7331    g_application_id := null;
7332    g_entity_type_code_tbl.delete; --clear cache first
7333    g_event_class_code_tbl.delete; --clear cache first
7334    g_event_type_code_tbl.delete;  --clear cache first
7335    g_ledger_status_tbl.delete;    --clear cache first
7336 
7337    --
7338    -- Cache application id
7339    --
7340    FOR c1 IN csr_xla_application LOOP
7341       g_application_id := c1.application_id;
7342    END LOOP;
7343 
7344    --
7345    -- Cache entity code
7346    --
7347 
7348    FOR c1 IN csr_entity_types LOOP
7349       g_entity_type_code_tbl(c1.entity_code).enabled_flag := c1.enabled_flag;
7350       g_entity_type_code_tbl(c1.entity_code).id_mapping   :=
7351                                get_id_mapping
7352                                 (p_entity_type_code => c1.entity_code
7353                                 ,p_source_id_code_1 => c1.source_id_col_name_1
7354                                 ,p_source_id_code_2 => c1.source_id_col_name_2
7355                                 ,p_source_id_code_3 => c1.source_id_col_name_3
7356                                 ,p_source_id_code_4 => c1.source_id_col_name_4);
7357    END LOOP;
7358 
7359    --
7360    -- Cache event class code
7361    --
7362    FOR c1 IN csr_event_classes LOOP
7363       g_event_class_code_tbl(c1.event_class_code).enabled_flag :=
7364                                                              c1.enabled_flag;
7365       g_event_class_code_tbl(c1.event_class_code).entity_type_code  :=
7366                                                              c1.entity_code;
7367    END LOOP;
7368 
7369 
7370    --
7371    -- Cache event type code
7372    --
7373    FOR c1 IN csr_event_types LOOP
7374       g_event_type_code_tbl(c1.event_type_code).enabled_flag := c1.enabled_flag;
7375       g_event_type_code_tbl(c1.event_type_code).event_class_code  :=
7376                                                             c1.event_class_code;
7377    END LOOP;
7378 
7379    --
7380    -- Validate the cached information
7381    --
7382    validate_cached_setup;
7383 
7384   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7385     trace
7386          (p_msg      => 'end of procedure cache_application_setup'
7387          ,p_level    => C_LEVEL_PROCEDURE
7388          ,p_module   =>l_log_module);
7389   END IF;
7390 EXCEPTION
7391 WHEN xla_exceptions_pkg.application_exception THEN
7392    RAISE;
7393 WHEN OTHERS                                   THEN
7394    xla_exceptions_pkg.raise_message
7395       (p_location => 'xla_events_pkg.cache_application_setup');
7396 END cache_application_setup;
7397 
7398 
7399 --=============================================================================
7400 -- This procedure assign variable g_id_mapping
7401 -- if the action is delete or query, or if the entity code is enabled
7402 -- else, it raise exception
7403 --=============================================================================
7404 PROCEDURE validate_entity_type_code
7405    (p_entity_type_code             IN  VARCHAR2) IS
7406 l_enabled_flag          VARCHAR2(1);
7407 l_log_module                VARCHAR2(240);
7408 
7409 BEGIN
7410   IF g_log_enabled THEN
7411     l_log_module := C_DEFAULT_MODULE||'.validate_entity_type_code';
7412   END IF;
7413   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7414     trace
7415          (p_msg      => 'BEGIN of procedure validate_entity_type_code'
7416          ,p_level    => C_LEVEL_PROCEDURE
7417          ,p_module   =>l_log_module);
7418     trace
7419          (p_msg      => 'Entity Type Code           = '||p_entity_type_code
7420          ,p_level    => C_LEVEL_PROCEDURE
7421          ,p_module   =>l_log_module);
7422   END IF;
7423 
7424    l_enabled_flag := g_entity_type_code_tbl(p_entity_type_code).enabled_flag;
7425 
7426    IF (g_action = C_EVENT_DELETE) OR (g_action = C_EVENT_QUERY) THEN
7427       g_id_mapping := g_entity_type_code_tbl(p_entity_type_code).id_mapping;
7428    ELSIF (l_enabled_flag = C_YES) THEN
7429       g_id_mapping := g_entity_type_code_tbl(p_entity_type_code).id_mapping;
7430    ELSIF (l_enabled_flag <> C_YES) THEN
7431       xla_exceptions_pkg.raise_message
7432          (p_appli_s_name   => 'XLA'
7433          ,p_msg_name       => 'XLA_COMMON_ERROR'
7434          ,p_token_1        => 'ERROR'
7435          ,p_value_1        =>
7436          'The entity Type is not enabled. Disabled entity types are not allowed for create/update APIs.'
7437          ,p_token_2        => 'LOCATION'
7438          ,p_value_2        => 'xla_events_pkg.validate_entity_type_code');
7439    END IF;
7440 
7441   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7442     trace
7443          (p_msg      => 'end of procedure validate_entity_type_code'
7444          ,p_level    => C_LEVEL_PROCEDURE
7445          ,p_module   =>l_log_module);
7446   END IF;
7447 
7448 EXCEPTION
7449 WHEN NO_DATA_FOUND THEN
7450    xla_exceptions_pkg.raise_message
7451       (p_appli_s_name   => 'XLA'
7452       ,p_msg_name       => 'XLA_COMMON_ERROR'
7453       ,p_token_1        => 'ERROR'
7454       ,p_value_1        => p_entity_type_code||
7455       ' is not a defined entity type for the application '||g_application_id
7456       ,p_token_2        => 'LOCATION'
7457       ,p_value_2        => 'xla_events_pkg.validate_entity_type_code');
7458 WHEN xla_exceptions_pkg.application_exception THEN
7459    RAISE;
7460 WHEN OTHERS                                   THEN
7461    xla_exceptions_pkg.raise_message
7462       (p_location => 'xla_events_pkg.validate_entity_type_code');
7463 END validate_entity_type_code;
7464 
7465 
7466 --=============================================================================
7467 --
7468 --
7469 --
7470 --=============================================================================
7471 
7472 PROCEDURE validate_event_class_code
7473    (p_entity_type_code             IN  VARCHAR2
7474    ,p_event_class_code             IN  VARCHAR2) IS
7475 l_enabled_flag          VARCHAR2(1);
7476 l_entity_code            VARCHAR2(30);
7477 l_log_module                VARCHAR2(240);
7478 BEGIN
7479   IF g_log_enabled THEN
7480     l_log_module := C_DEFAULT_MODULE||'.validate_event_class_code';
7481   END IF;
7482   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7483     trace
7484          (p_msg      => 'BEGIN of procedure validate_event_class_code'
7485          ,p_level    => C_LEVEL_PROCEDURE
7486          ,p_module   =>l_log_module);
7487   END IF;
7488 
7489    l_enabled_flag := g_event_class_code_tbl(p_event_class_code).enabled_flag;
7490    l_entity_code  :=g_event_class_code_tbl(p_event_class_code).entity_type_code;
7491 
7492 
7493    IF (((g_action = C_EVENT_CREATE) OR (g_action = C_EVENT_UPDATE)) AND
7494        (l_enabled_flag <> C_YES)
7495       )
7496    THEN
7497       xla_exceptions_pkg.raise_message
7498          (p_appli_s_name   => 'XLA'
7499          ,p_msg_name       => 'XLA_COMMON_ERROR'
7500          ,p_token_1        => 'ERROR'
7501          ,p_value_1        =>
7502          'The Event Class is not enabled. Disabled event classes are not allowed for create/update APIs.'
7503          ,p_token_2        => 'LOCATION'
7504          ,p_value_2        => 'xla_events_pkg.validate_event_class_code');
7505    END IF;
7506 
7507    IF p_entity_type_code <> l_entity_code THEN
7508       xla_exceptions_pkg.raise_message
7509          (p_appli_s_name   => 'XLA'
7510          ,p_msg_name       => 'XLA_COMMON_ERROR'
7511          ,p_token_1        => 'ERROR'
7512          ,p_value_1        => 'Event class '||p_event_class_code||
7513          ' is not defined for the entity type '||p_entity_type_code||
7514                               ' and application '||g_application_id
7515          ,p_token_2        => 'LOCATION'
7516          ,p_value_2        => 'xla_events_pkg.validate_event_class_code');
7517    END IF;
7518 
7519   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7520     trace
7521          (p_msg      => 'end of procedure validate_event_class_code'
7522          ,p_level    => C_LEVEL_PROCEDURE
7523          ,p_module   =>l_log_module);
7524   END IF;
7525 EXCEPTION
7526 WHEN NO_DATA_FOUND THEN
7527    xla_exceptions_pkg.raise_message
7528       (p_appli_s_name   => 'XLA'
7529       ,p_msg_name       => 'XLA_COMMON_ERROR'
7530       ,p_token_1        => 'ERROR'
7531       ,p_value_1        => p_event_class_code||
7532       ' is not a defined event class for the application '||g_application_id
7533       ,p_token_2        => 'LOCATION'
7534       ,p_value_2        => 'xla_events_pkg.validate_event_class_code');
7535 WHEN xla_exceptions_pkg.application_exception THEN
7536    RAISE;
7537 WHEN OTHERS                                   THEN
7538    xla_exceptions_pkg.raise_message
7539       (p_location => 'xla_events_pkg.validate_event_class_code');
7540 END validate_event_class_code;
7541 
7542 
7543 --=============================================================================
7544 --
7545 --
7546 --
7547 --=============================================================================
7548 
7549 PROCEDURE validate_event_type_code
7550    (p_entity_type_code             IN  VARCHAR2
7551    ,p_event_class_code             IN  VARCHAR2
7552    ,p_event_type_code              IN  VARCHAR2) IS
7553 l_enabled_flag          VARCHAR2(1);
7554 l_entity_code            VARCHAR2(30);
7555 l_event_class_code      VARCHAR2(30);
7556 l_log_module                VARCHAR2(240);
7557 BEGIN
7558   IF g_log_enabled THEN
7559     l_log_module := C_DEFAULT_MODULE||'.validate_event_type_code';
7560   END IF;
7561   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7562     trace
7563          (p_msg      => 'BEGIN of procedure validate_event_type_code'
7564          ,p_level    => C_LEVEL_PROCEDURE
7565          ,p_module   =>l_log_module);
7566   END IF;
7567 
7568    l_enabled_flag      := g_event_type_code_tbl(p_event_type_code).enabled_flag;
7569    l_event_class_code  :=
7570                       g_event_type_code_tbl(p_event_type_code).event_class_code;
7571    l_entity_code       :=
7572                     g_event_class_code_tbl(l_event_class_code).entity_type_code;
7573 
7574    IF (((g_action = C_EVENT_CREATE) OR (g_action = C_EVENT_UPDATE)) AND
7575        (l_enabled_flag <> C_YES)
7576       )
7577    THEN
7578       xla_exceptions_pkg.raise_message
7579          (p_appli_s_name   => 'XLA'
7580          ,p_msg_name       => 'XLA_COMMON_ERROR'
7581          ,p_token_1        => 'ERROR'
7582          ,p_value_1        =>
7583          'The Event Type is not enabled. Disabled event types are not allowed for create/update APIs.'
7584          ,p_token_2        => 'LOCATION'
7585          ,p_value_2        => 'xla_events_pkg.validate_event_type_code');
7586    END IF;
7587 
7588    IF ((p_entity_type_code <> l_entity_code) OR
7589        (NVL(p_event_class_code,l_event_class_code) <> l_event_class_code)
7590       )
7591    THEN
7592       xla_exceptions_pkg.raise_message
7593          (p_appli_s_name   => 'XLA'
7594          ,p_msg_name       => 'XLA_COMMON_ERROR'
7595          ,p_token_1        => 'ERROR'
7596          ,p_value_1        => 'Event type '||p_event_type_code||
7597          ' is not defined for the entity type '||p_entity_type_code||
7598                               ', event class '||p_event_class_code||
7599                               ' and application '||g_application_id
7600          ,p_token_2        => 'LOCATION'
7601          ,p_value_2        => 'xla_events_pkg.validate_event_type_code');
7602    END IF;
7603 
7604   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7605     trace
7606          (p_msg      => 'end of procedure validate_event_type_code'
7607          ,p_level    => C_LEVEL_PROCEDURE
7608          ,p_module   =>l_log_module);
7609   END IF;
7610 
7611    trace('< xla_events_pkg.validate_event_type_code'      , 20);
7612 EXCEPTION
7613 WHEN NO_DATA_FOUND THEN
7614    xla_exceptions_pkg.raise_message
7615       (p_appli_s_name   => 'XLA'
7616       ,p_msg_name       => 'XLA_COMMON_ERROR'
7617       ,p_token_1        => 'ERROR'
7618       ,p_value_1        => p_event_type_code||
7619       ' is not a defined event type for the application '||g_application_id
7620       ,p_token_2        => 'LOCATION'
7621       ,p_value_2        => 'xla_events_pkg.validate_event_type_code');
7622 WHEN xla_exceptions_pkg.application_exception THEN
7623    RAISE;
7624 WHEN OTHERS                                   THEN
7625    xla_exceptions_pkg.raise_message
7626       (p_location => 'xla_events_pkg.validate_event_type_code');
7627 END validate_event_type_code;
7628 
7629 --=============================================================================
7630 --
7631 --
7632 -- Changed to fix bug # 2899700.
7633 --
7634 --=============================================================================
7635 
7636 PROCEDURE validate_status_code
7637        (p_event_status_code            IN  VARCHAR2
7638        ,p_process_status_code          IN  VARCHAR2) IS
7639 l_found          BOOLEAN := FALSE;
7640 l_log_module                VARCHAR2(240);
7641 BEGIN
7642   IF g_log_enabled THEN
7643     l_log_module := C_DEFAULT_MODULE||'.validate_status_code';
7644   END IF;
7645   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7646     trace
7647          (p_msg      => 'BEGIN of procedure validate_status_code'
7648          ,p_level    => C_LEVEL_PROCEDURE
7649          ,p_module   =>l_log_module);
7650   END IF;
7651 
7652    ----------------------------------------------------------------------------
7653    -- Validate event status code against the possible valid statuses
7654    ----------------------------------------------------------------------------
7655    FOR i IN g_event_status_code_tbl.FIRST .. g_event_status_code_tbl.LAST  LOOP
7656      IF g_event_status_code_tbl(i) = p_event_status_code THEN
7657         l_found := TRUE;
7658         EXIT;
7659      END IF;
7660    END LOOP;
7661 
7662    IF NOT l_found THEN
7663       xla_exceptions_pkg.raise_message
7664          (p_appli_s_name   => 'XLA'
7665          ,p_msg_name       => 'XLA_COMMON_ERROR'
7666          ,p_token_1        => 'ERROR'
7667          ,p_value_1        => 'Event Status Code cannot have a '||
7668                                p_event_status_code              ||
7669                               ' value.'
7670          ,p_token_2        => 'LOCATION'
7671          ,p_value_2        => 'xla_events_pkg.validate_status_code');
7672    END IF;
7673 
7674    ----------------------------------------------------------------------------
7675    -- Validate process status code against the possible valid statuses
7676    ----------------------------------------------------------------------------
7677    l_found := FALSE;
7678    FOR i IN g_process_status_code_tbl.FIRST .. g_process_status_code_tbl.LAST
7679    LOOP
7680      IF g_process_status_code_tbl(i) = p_process_status_code THEN
7681         l_found := TRUE;
7682         EXIT;
7683      END IF;
7684    END LOOP;
7685 
7686    IF NOT l_found THEN
7687       xla_exceptions_pkg.raise_message
7688          (p_appli_s_name   => 'XLA'
7689          ,p_msg_name       => 'XLA_COMMON_ERROR'
7690          ,p_token_1        => 'ERROR'
7691          ,p_value_1        => 'Process Status Code cannot have a '||
7692                                p_process_status_code              ||
7693                               ' value.'
7694          ,p_token_2        => 'LOCATION'
7695          ,p_value_2        => 'xla_events_pkg.validate_status_code');
7696    END IF;
7697 
7698    ----------------------------------------------------------------------------
7699    -- following code is modified to fix bug # 2899700
7700    ----------------------------------------------------------------------------
7701    IF g_context = C_REGULAR_EVENT_CONTEXT THEN
7702 
7703       -------------------------------------------------------------------------
7704       -- for regular events
7705       -------------------------------------------------------------------------
7706       IF p_process_status_code <> C_INTERNAL_UNPROCESSED THEN
7707          xla_exceptions_pkg.raise_message
7708             (p_appli_s_name   => 'XLA'
7709             ,p_msg_name       => 'XLA_COMMON_ERROR'
7710             ,p_token_1        => 'ERROR'
7711             ,p_value_1        => 'Process Status Code has an invalid value. '||
7712                                 'It should always have a ''Unprocessed'' value.'
7713             ,p_token_2        => 'LOCATION'
7714             ,p_value_2        => 'xla_events_pkg.validate_status_code');
7715        END IF;
7716 
7717        IF p_event_status_code = xla_events_pub_pkg.C_EVENT_PROCESSED THEN
7718          xla_exceptions_pkg.raise_message
7719             (p_appli_s_name   => 'XLA'
7720             ,p_msg_name       => 'XLA_COMMON_ERROR'
7721             ,p_token_1        => 'ERROR'
7722             ,p_value_1        => 'Event Status Code has an invalid value. '||
7723                                  'It cannot have a ''Processed'' value.'
7724             ,p_token_2        => 'LOCATION'
7725             ,p_value_2        => 'xla_events_pkg.validate_status_code');
7726        END IF;
7727    ELSIF g_context = C_MANUAL_EVENT_CONTEXT THEN
7728 
7729       -------------------------------------------------------------------------
7730       -- for manual events
7731       -------------------------------------------------------------------------
7732 
7733       IF (p_process_status_code = C_INTERNAL_FINAL) THEN
7734          IF (p_event_status_code <> xla_events_pub_pkg.C_EVENT_PROCESSED) THEN
7735             xla_exceptions_pkg.raise_message
7736                (p_appli_s_name   => 'XLA'
7737                ,p_msg_name       => 'XLA_COMMON_ERROR'
7738                ,p_token_1        => 'ERROR'
7739                ,p_value_1        => 'The following combination is invalid: '||
7740                              'Process Status Code = '|| p_process_status_code ||
7741                                     ', '||
7742                                'Event Status Code   = '|| p_event_status_code
7743                ,p_token_2        => 'LOCATION'
7744                ,p_value_2        => 'xla_events_pkg.validate_status_code');
7745          END IF;
7746       ELSIF (p_process_status_code = C_INTERNAL_DRAFT) THEN
7747          IF (p_event_status_code <> xla_events_pub_pkg.C_EVENT_UNPROCESSED) THEN
7748             xla_exceptions_pkg.raise_message
7749                (p_appli_s_name   => 'XLA'
7750                ,p_msg_name       => 'XLA_COMMON_ERROR'
7751                ,p_token_1        => 'ERROR'
7752                ,p_value_1        => 'The following combination is invalid: '||
7753                              'Process Status Code = '|| p_process_status_code ||
7754                                     ', '||
7755                                  'Event Status Code   = '|| p_event_status_code
7756                ,p_token_2        => 'LOCATION'
7757                ,p_value_2        => 'xla_events_pkg.validate_status_code');
7758          END IF;
7759       ELSIF (p_process_status_code = C_INTERNAL_UNPROCESSED) THEN
7760          IF (p_event_status_code = xla_events_pub_pkg.C_EVENT_PROCESSED) THEN
7761             xla_exceptions_pkg.raise_message
7762                (p_appli_s_name   => 'XLA'
7763                ,p_msg_name       => 'XLA_COMMON_ERROR'
7764                ,p_token_1        => 'ERROR'
7765                ,p_value_1        => 'The following combination is invalid: '||
7766                             'Process Status Code = '|| p_process_status_code ||
7767                                     ', '||
7768                                 'Event Status Code   = '|| p_event_status_code
7769                ,p_token_2        => 'LOCATION'
7770                ,p_value_2        => 'xla_events_pkg.validate_status_code');
7771          END IF;
7772       ELSE
7773             xla_exceptions_pkg.raise_message
7774                (p_appli_s_name   => 'XLA'
7775                ,p_msg_name       => 'XLA_COMMON_ERROR'
7776                ,p_token_1        => 'ERROR'
7777                ,p_value_1        => 'The following combination is invalid: '||
7778                              'Process Status Code = '|| p_process_status_code ||
7779                                     ', '||
7780                                 'Event Status Code   = '|| p_event_status_code
7781                ,p_token_2        => 'LOCATION'
7782                ,p_value_2        => 'xla_events_pkg.validate_status_code');
7783       END IF;
7784    END IF;
7785 
7786   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7787     trace
7788          (p_msg      => 'end of procedure validate_status_code'
7789          ,p_level    => C_LEVEL_PROCEDURE
7790          ,p_module   =>l_log_module);
7791   END IF;
7792 EXCEPTION
7793 WHEN xla_exceptions_pkg.application_exception THEN
7794    RAISE;
7795 WHEN OTHERS                                   THEN
7796    xla_exceptions_pkg.raise_message
7797       (p_location => 'xla_events_pkg.validate_status_code');
7798 END validate_status_code;
7799 
7800 
7801 --=============================================================================
7802 --
7803 --
7804 --  Date validation is not needed as it is always truncated. (18-Jul-02)
7805 --
7806 --=============================================================================
7807 
7808 PROCEDURE validate_params
7809    (p_source_info                  IN  xla_events_pub_pkg.t_event_source_info
7810    ,p_event_class_code             IN  VARCHAR2 DEFAULT NULL
7811    ,p_event_type_code              IN  VARCHAR2 DEFAULT NULL
7812    ,p_event_date                   IN  DATE     DEFAULT NULL
7813    ,p_event_status_code            IN  VARCHAR2 DEFAULT NULL
7814    ,p_process_status_code          IN  VARCHAR2 DEFAULT NULL) IS
7815 l_log_module                VARCHAR2(240);
7816 BEGIN
7817   IF g_log_enabled THEN
7818     l_log_module := C_DEFAULT_MODULE||'.validate_params';
7819   END IF;
7820   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7821     trace
7822          (p_msg      => 'BEGIN of procedure validate_params'
7823          ,p_level    => C_LEVEL_PROCEDURE
7824          ,p_module   =>l_log_module);
7825   END IF;
7826 
7827    ----------------------------------------------------------------------------
7828    -- Check all mandatory parameters are NOT NULL
7829    ----------------------------------------------------------------------------
7830    validate_context
7831       (p_application_id         => p_source_info.application_id
7832       ,p_ledger_id              => p_source_info.ledger_id
7833       ,p_entity_type_code       => p_source_info.entity_type_code);
7834 
7835    ----------------------------------------------------------------------------
7836    -- Do not check again the source_info if it has been kept the same
7837    ----------------------------------------------------------------------------
7838    IF source_info_changed(p_source_info,g_source_info,null,null) THEN
7839 
7840       -------------------------------------------------------------------------
7841       -- Cache values for the application if not yet done
7842       -------------------------------------------------------------------------
7843       IF ((g_application_id IS NULL) OR
7844           (g_application_id <> p_source_info.application_id))
7845       THEN
7846          cache_application_setup
7847             (p_application_id => p_source_info.application_id);
7848       END IF;
7849 
7850       validate_entity_type_code
7851          (p_entity_type_code  => p_source_info.entity_type_code);
7852 
7853       -------------------------------------------------------------------------
7854       -- Validate the source IDs
7855       -------------------------------------------------------------------------
7856       validate_ids
7857          (p_entity_type_code  => p_source_info.entity_type_code
7858          ,p_source_id_int_1   => p_source_info.source_id_int_1
7859          ,p_source_id_int_2   => p_source_info.source_id_int_2
7860          ,p_source_id_int_3   => p_source_info.source_id_int_3
7861          ,p_source_id_int_4   => p_source_info.source_id_int_4
7862          ,p_source_id_char_1  => p_source_info.source_id_char_1
7863          ,p_source_id_char_2  => p_source_info.source_id_char_2
7864          ,p_source_id_char_3  => p_source_info.source_id_char_3
7865          ,p_source_id_char_4  => p_source_info.source_id_char_4);
7866    END IF;
7867 
7868    ----------------------------------------------------------------------------
7869    -- Validate the class, if passed
7870    ----------------------------------------------------------------------------
7871    IF p_event_class_code IS NOT NULL THEN
7872       validate_event_class_code
7873          (p_entity_type_code  => p_source_info.entity_type_code
7874          ,p_event_class_code  => p_event_class_code);
7875    END IF;
7876 
7877    ----------------------------------------------------------------------------
7878    -- Validate the event type, if passed
7879    ----------------------------------------------------------------------------
7880    IF p_event_type_code IS NOT NULL THEN
7881       validate_event_type_code
7882            (p_entity_type_code  => p_source_info.entity_type_code
7883            ,p_event_class_code  => p_event_class_code
7884            ,p_event_type_code   => p_event_type_code);
7885    END IF;
7886 
7887    ----------------------------------------------------------------------------
7888    -- Validate the event status code, if passed
7889    ----------------------------------------------------------------------------
7890    IF p_event_status_code IS NOT NULL THEN
7891       validate_status_code
7892          (p_event_status_code    => p_event_status_code
7893          ,p_process_status_code  => p_process_status_code);
7894    END IF;
7895   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7896     trace
7897          (p_msg      => 'end of procedure validate_params'
7898          ,p_level    => C_LEVEL_PROCEDURE
7899          ,p_module   =>l_log_module);
7900   END IF;
7901 
7902 EXCEPTION
7903 WHEN xla_exceptions_pkg.application_exception THEN
7904    RAISE;
7905 WHEN OTHERS                                   THEN
7906    xla_exceptions_pkg.raise_message
7907       (p_location => 'xla_events_pkg.validate_params');
7908 END validate_params;
7909 
7910 
7911 
7912 --=============================================================================
7913 --
7914 --
7915 --
7916 --=============================================================================
7917 
7918 PROCEDURE validate_ledger
7919    (p_ledger_id                    IN  NUMBER
7920    ,p_application_id               IN  NUMBER) IS
7921 l_enabled_flag              VARCHAR2(1);
7922 l_log_module                VARCHAR2(240);
7923 l_temp                      varchar2(1);
7924 l_application_name          FND_APPLICATION_TL.application_name%TYPE;
7925 l_ledger_name               VARCHAR2(30);
7926 BEGIN
7927    IF g_log_enabled THEN
7928       l_log_module := C_DEFAULT_MODULE||'.validate_ledger';
7929    END IF;
7930    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7931       trace
7932          (p_msg      => 'BEGIN of procedure validate_ledger'
7933          ,p_level    => C_LEVEL_PROCEDURE
7934          ,p_module   =>l_log_module);
7935       trace
7936          (p_msg      => 'p_ledger_id = '||p_ledger_id
7937          ,p_level    => C_LEVEL_PROCEDURE
7938          ,p_module   =>l_log_module);
7939    END IF;
7940 
7941    l_application_name :=  get_application_name
7942                             (p_application_id   => p_application_id);
7943    l_ledger_name      :=  get_ledger_name
7944                             (p_ledger_id        => p_ledger_id);
7945 
7946    IF g_ledger_status_tbl.exists(p_ledger_id) THEN
7947       IF g_ledger_status_tbl(p_ledger_id) = 'Y' THEN
7948          NULL;
7949       ELSE
7950          xla_exceptions_pkg.raise_message
7951             (p_appli_s_name   => 'XLA'
7952             ,p_msg_name       => 'XLA_COMMON_ERROR'
7953             ,p_token_1        => 'ERROR'
7954             ,p_value_1        =>
7955       'The ledger is either not enabled or is marked as not to create events.'||
7956                                  'ledger_id = '||p_ledger_id||
7957                                  'application_id = '|| p_application_id
7958             ,p_token_2        => 'LOCATION'
7959             ,p_value_2        => 'xla_events_pkg.validate_ledger');
7960       END IF;
7961    ELSE
7962       BEGIN
7963          SELECT DECODE(enabled_flag
7964                       ,'N','N'
7965                       ,'Y',capture_event_flag)
7966            INTO l_temp --g_ledger_status_tbl(p_ledger_id)
7967            FROM xla_subledger_options_v
7968           WHERE ledger_id      = p_ledger_id
7969             AND application_id = p_application_id;
7970       EXCEPTION
7971       WHEN NO_DATA_FOUND THEN
7972          xla_exceptions_pkg.raise_message
7973             (p_appli_s_name   => 'XLA'
7974             ,p_msg_name       => 'XLA_SU_MISSING_SETUP'
7975             ,p_token_1        => 'LEDGER_NAME'
7976             ,p_value_1        =>  l_ledger_name
7977             ,p_token_2        => 'APPLICATION_NAME'
7978             ,p_value_2        =>  l_application_name);
7979       END;
7980    END IF;
7981 
7982    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7983       trace
7984          (p_msg      => 'END of procedure validate_ledger'
7985          ,p_level    => C_LEVEL_PROCEDURE
7986          ,p_module   =>l_log_module);
7987    END IF;
7988 
7989 EXCEPTION
7990 WHEN xla_exceptions_pkg.application_exception THEN
7991    RAISE;
7992 WHEN OTHERS                                   THEN
7993    xla_exceptions_pkg.raise_message
7994       (p_location => 'xla_events_pkg.validate_ledger');
7995 END validate_ledger;
7996 
7997 
7998 --=============================================================================
7999 --
8000 --
8001 --
8002 --=============================================================================
8003 
8004 PROCEDURE cache_entity_info
8005    (p_source_info                  IN  xla_events_pub_pkg.t_event_source_info
8006    ,p_valuation_method             IN  VARCHAR2
8007    ,p_event_id                     IN  PLS_INTEGER) IS
8008 
8009 l_source_info       xla_events_pub_pkg.t_event_source_info;
8010 
8011 -------------------------------------------------------------------------------
8012 -- Following three cursors have been modified to remove the 'for update'.
8013 -- The cursors c1 and c2 have also been modified to include 'group by' rather
8014 -- than a subquery to get the max(event_number). Bug 3268790
8015 -------------------------------------------------------------------------------
8016 -------------------------------------------------------------------------------
8017 -- Bug 4312353. The following cursor is modifed to use the valuation method as
8018 -- part of primary key to identify transactions. Removed other security
8019 -- columns
8020 -------------------------------------------------------------------------------
8021 
8022 CURSOR c1 IS
8023    SELECT xte.entity_id
8024          ,xte.entity_code
8025          ,xte.transaction_number
8026          ,max(xe.event_number)
8027          ,xet.enable_gapless_events_flag
8028    FROM  xla_transaction_entities   xte
8029         ,xla_events     xe
8030         ,xla_entity_types_b xet
8031    WHERE xte.application_id                  = p_source_info.application_id
8032      AND xte.ledger_id                       = p_source_info.ledger_id
8033      AND xte.entity_code                     = p_source_info.entity_type_code
8034      AND NVL(xte.source_id_int_1,-99)   = NVL(p_source_info.source_id_int_1,-99)
8035      AND NVL(xte.source_id_int_2,-99)   = NVL(p_source_info.source_id_int_2,-99)
8036      AND NVL(xte.source_id_int_3,-99)   = NVL(p_source_info.source_id_int_3,-99)
8037      AND NVL(xte.source_id_int_4,-99)   = NVL(p_source_info.source_id_int_4,-99)
8038      AND NVL(xte.source_id_char_1,' ') = NVL(p_source_info.source_id_char_1,' ')
8039      AND NVL(xte.source_id_char_2,' ') = NVL(p_source_info.source_id_char_2,' ')
8040      AND NVL(xte.source_id_char_3,' ') = NVL(p_source_info.source_id_char_3,' ')
8041      AND NVL(xte.source_id_char_4,' ') = NVL(p_source_info.source_id_char_4,' ')
8042      AND NVL(xte.valuation_method,' ')    = NVL(p_valuation_method,' ')
8043      AND xe.entity_id                        = xte.entity_id
8044      AND xet.application_id                  = xte.application_id
8045      AND xte.entity_code                     = xet.entity_code
8046    GROUP BY
8047      xte.entity_id,
8048      xte.entity_code,
8049      xte.transaction_number,
8050      xet.enable_gapless_events_flag;
8051 
8052 
8053 CURSOR get_gapless_flag is
8054    SELECT a.enable_gapless_events_flag
8055      FROM xla_entity_types_b a
8056     WHERE a.entity_code=p_source_info.entity_type_code
8057           AND a.application_id=p_source_info.application_id;
8058 
8059 CURSOR c2 IS
8060    SELECT a.entity_id
8061          ,a.entity_code
8062          ,a.transaction_number
8063          ,MAX(b.event_number)
8064          ,c.enable_gapless_events_flag
8065      FROM xla_transaction_entities   a
8066          ,xla_events     b
8067          ,xla_entity_types_b c
8068     WHERE a.application_id   = p_source_info.application_id
8069       AND a.entity_id = g_entity_id
8070       AND b.entity_id = g_entity_id
8071       and a.entity_code=c.entity_code
8072      AND a.application_id = c.application_id
8073     GROUP BY
8074       a.entity_id,
8075       a.entity_code,
8076       a.transaction_number,
8077       c.enable_gapless_events_flag;
8078 
8079 -------------------------------------------------------------------------------
8080 -- following cursor is for Manual entries.
8081 -------------------------------------------------------------------------------
8082 
8083 CURSOR c3 (eventid  IN NUMBER) IS
8084    SELECT a.entity_id
8085          ,a.entity_code
8086          ,a.transaction_number
8087          ,b.event_number
8088      FROM xla_transaction_entities   a
8089          ,xla_events     b
8090     WHERE b.event_id  = eventid
8091       AND a.entity_id = b.entity_id
8092       AND a.application_id = p_source_info.application_id;
8093 --   FOR UPDATE NOWAIT;
8094 
8095 CURSOR c_lock_te (entityid in number) is
8096    SELECT a.entity_id
8097      FROM xla_transaction_entities   a
8098     WHERE a.entity_id=entityid
8099       AND a.application_id = p_source_info.application_id
8100       FOR UPDATE NOWAIT;
8101 l_log_module                VARCHAR2(240);
8102 
8103 BEGIN
8104   IF g_log_enabled THEN
8105     l_log_module := C_DEFAULT_MODULE||'cache_entity_info';
8106   END IF;
8107   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8108      trace
8109          (p_msg      => 'BEGIN of procedure cache_entity_info'
8110          ,p_level    => C_LEVEL_PROCEDURE
8111          ,p_module   =>l_log_module);
8112      trace
8113          (p_msg      => 'p_event_id = '||p_event_id
8114          ,p_level    => C_LEVEL_PROCEDURE
8115          ,p_module   =>l_log_module);
8116   END IF;
8117 
8118    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8119       trace
8120          (p_msg      => 'g_context = '||g_context
8121          ,p_level    => C_LEVEL_STATEMENT
8122          ,p_module   =>l_log_module);
8123    END IF;
8124 
8125    IF g_context = C_MANUAL_EVENT_CONTEXT THEN
8126       -------------------------------------------------------------------------
8127       -- for manual events
8128       -------------------------------------------------------------------------
8129       IF p_event_id IS NULL THEN
8130          g_entity_id          := NULL;
8131          g_entity_type_code   := NULL;
8132          g_transaction_number := NULL;
8133          g_max_event_number   := 0;
8134       ELSE
8135          IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8136             trace
8137                (p_msg      => 'using cursor c3'
8138                ,p_level    => C_LEVEL_STATEMENT
8139                ,p_module   =>l_log_module);
8140          END IF;
8141 
8142          OPEN c3(p_event_id);
8143          FETCH c3 INTO g_entity_id
8144                       ,g_entity_type_code
8145                       ,g_transaction_number
8146                       ,g_max_event_number;
8147 
8148          IF c3%NOTFOUND THEN
8149             IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8150                trace
8151                   (p_msg      => 'cursor c3 did not fetch a row'
8152                   ,p_level    => C_LEVEL_STATEMENT
8153                   ,p_module   =>l_log_module);
8154             END IF;
8155 
8156             g_entity_id          := NULL;
8157             g_entity_type_code   := NULL;
8158             g_transaction_number := NULL;
8159             g_max_event_number   := 0;
8160          END IF;
8161          CLOSE c3;
8162       END IF;
8163 
8164       g_source_info := p_source_info;
8165       g_valuation_method := p_valuation_method;
8166    ELSIF source_info_changed(p_source_info,g_source_info,
8167                                 p_valuation_method,g_valuation_method) THEN
8168       -------------------------------------------------------------------------
8169       -- for regular events where source info has changed
8170       -------------------------------------------------------------------------
8171       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8172          trace
8173             (p_msg      => 'using cursor c1'
8174             ,p_level    => C_LEVEL_STATEMENT
8175             ,p_module   =>l_log_module);
8176       END IF;
8177 
8178       OPEN c1;
8179       FETCH c1 INTO g_entity_id
8180                    ,g_entity_type_code
8181                    ,g_transaction_number
8182                    ,g_max_event_number
8183                    ,g_gapless_flag;
8184       IF c1%NOTFOUND THEN
8185          IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8186             trace
8187                (p_msg      => 'cursor c1 did not fetch a row'
8188                ,p_level    => C_LEVEL_STATEMENT
8189                ,p_module   =>l_log_module);
8190          END IF;
8191 
8192          g_entity_id          := NULL;
8193          g_entity_type_code   := NULL;
8194          g_transaction_number := NULL;
8195          g_max_event_number   := 0;
8196 
8197          open get_gapless_flag;
8198          fetch get_gapless_flag into g_gapless_flag;
8199          if(get_gapless_flag%NOTFOUND) THEN
8200            g_gapless_flag :='N';
8201          end if;
8202          close get_gapless_flag;
8203       END IF;
8204       CLOSE c1;
8205 
8206       if (g_gapless_flag='Y' and
8207              (g_action = C_EVENT_DELETE or
8208               g_action = C_EVENT_UPDATE or
8209               g_action = C_EVENT_CREATE)) then
8210         -- lock xla_trancation_entity table
8211         open c_lock_te(g_entity_id);
8212         close c_lock_te;
8213       end if;
8214       g_source_info := p_source_info;
8215       g_valuation_method := p_valuation_method;
8216    ELSE
8217       -------------------------------------------------------------------------
8218       -- for regular events where source info has not changed
8219       -------------------------------------------------------------------------
8220       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8221          trace
8222             (p_msg      => 'using cursor c2'
8223             ,p_level    => C_LEVEL_STATEMENT
8224             ,p_module   =>l_log_module);
8225       END IF;
8226 
8227       OPEN c2;
8228       FETCH c2 INTO g_entity_id
8229                    ,g_entity_type_code
8230                    ,g_transaction_number
8231                    ,g_max_event_number
8232                    ,g_gapless_flag;
8233       IF c2%NOTFOUND THEN
8234          IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8235             trace
8236                (p_msg      => 'cursor c2 did not fetch a row'
8237                ,p_level    => C_LEVEL_STATEMENT
8238                ,p_module   =>l_log_module);
8239          END IF;
8240 
8241          g_entity_id          := NULL;
8242          g_entity_type_code   := NULL;
8243          g_transaction_number := NULL;
8244          g_max_event_number   := 0;
8245 
8246          open get_gapless_flag;
8247          fetch get_gapless_flag into g_gapless_flag;
8248          if(get_gapless_flag%NOTFOUND) THEN
8249            g_gapless_flag :='N';
8250          end if;
8251          close get_gapless_flag;
8252       ELSIF g_entity_type_code <> p_source_info.entity_type_code THEN
8253          ----------------------------------------------------------------------
8254          -- this was added to handle some special cases ????
8255          ----------------------------------------------------------------------
8256          g_source_info := l_source_info;
8257          g_valuation_method := NULL;
8258          cache_entity_info
8259             (p_source_info        => p_source_info
8260             ,p_valuation_method   => p_valuation_method
8261             ,p_event_id           => NULL);
8262       END IF;
8263       if (g_gapless_flag='Y' and
8264              (g_action = C_EVENT_DELETE or
8265               g_action = C_EVENT_UPDATE or
8266               g_action = C_EVENT_CREATE)) then
8267         -- lock xla_trancation_entity table
8268         open c_lock_te(g_entity_id);
8269         close c_lock_te;
8270       end if;
8271       CLOSE c2;
8272    END IF;
8273   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8274     trace
8275          (p_msg      => 'g_entity_id = '||g_entity_id
8276          ,p_level    => C_LEVEL_PROCEDURE
8277          ,p_module   =>l_log_module);
8278     trace
8279          (p_msg      => 'end of procedure cache_entity_info'
8280          ,p_level    => C_LEVEL_PROCEDURE
8281          ,p_module   =>l_log_module);
8282   END IF;
8283 
8284 EXCEPTION
8285 WHEN xla_exceptions_pkg.application_exception THEN
8286    IF c1%ISOPEN THEN
8287       CLOSE c1;
8288    END IF;
8289    IF c2%ISOPEN THEN
8290       CLOSE c2;
8291    END IF;
8292    RAISE;
8293 WHEN OTHERS                                   THEN
8294    IF c1%ISOPEN THEN
8295       CLOSE c1;
8296    END IF;
8297    IF c2%ISOPEN THEN
8298       CLOSE c2;
8299    END IF;
8300    xla_exceptions_pkg.raise_message
8301       (p_location => 'xla_events_pkg.cache_entity_info');
8302 END cache_entity_info;
8303 
8304 
8305 --=============================================================================
8306 --
8307 --
8308 -- Changed to fix bug # 2899700. (Added parameter p_process_status_code)
8309 --
8310 --=============================================================================
8311 
8312 FUNCTION create_entity_event
8313    (p_event_source_info            IN  xla_events_pub_pkg.t_event_source_info
8314    ,p_valuation_method             IN  VARCHAR2
8315    ,p_event_type_code              IN  VARCHAR2
8316    ,p_event_date                   IN  DATE
8317    ,p_event_status_code            IN  VARCHAR2
8318    ,p_process_status_code          IN  VARCHAR2
8319    ,p_event_number                 IN  NUMBER
8320    ,p_transaction_date             IN  DATE
8321    ,p_reference_info               IN  xla_events_pub_pkg.t_event_reference_info
8322                                        DEFAULT NULL
8323    ,p_budgetary_control_flag       IN  VARCHAR2)
8324 RETURN INTEGER IS
8325 
8326 l_entity_id              INTEGER;
8327 l_log_module             VARCHAR2(240);
8328 l_return_id              INTEGER;
8329 BEGIN
8330   IF g_log_enabled THEN
8331     l_log_module := C_DEFAULT_MODULE||'.create_entity_event';
8332   END IF;
8333   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8334     trace
8335          (p_msg      => 'BEGIN of procedure create_entity_event'
8336          ,p_level    => C_LEVEL_PROCEDURE
8337          ,p_module   =>l_log_module);
8338   END IF;
8339 
8340    INSERT INTO xla_transaction_entities
8341       (entity_id
8342       ,application_id
8343       ,source_application_id
8344       ,ledger_id
8345       ,legal_entity_id
8346       ,entity_code
8347       ,transaction_number
8348       ,creation_date
8349       ,created_by
8350       ,last_update_date
8351       ,last_updated_by
8352       ,last_update_login
8353       ,valuation_method
8354       ,security_id_int_1
8355       ,security_id_int_2
8356       ,security_id_int_3
8357       ,security_id_char_1
8358       ,security_id_char_2
8359       ,security_id_char_3
8360       ,source_id_int_1
8361       ,source_id_int_2
8362       ,source_id_int_3
8363       ,source_id_int_4
8364       ,source_id_char_1
8365       ,source_id_char_2
8366       ,source_id_char_3
8367       ,source_id_char_4)
8368    VALUES
8369       (xla_transaction_entities_s.nextval
8370       ,p_event_source_info.application_id
8371       ,NVL(p_event_source_info.source_application_id,
8372            p_event_source_info.application_id)
8373       ,p_event_source_info.ledger_id
8374       ,p_event_source_info.legal_entity_id
8375       ,p_event_source_info.entity_type_code
8376       ,p_event_source_info.transaction_number
8377       ,sysdate
8378       ,xla_environment_pkg.g_usr_id
8379       ,sysdate
8380       ,xla_environment_pkg.g_usr_id
8381       ,xla_environment_pkg.g_login_id
8382       ,p_valuation_method
8383       ,xla_events_pub_pkg.g_security.security_id_int_1
8384       ,xla_events_pub_pkg.g_security.security_id_int_2
8385       ,xla_events_pub_pkg.g_security.security_id_int_3
8386       ,xla_events_pub_pkg.g_security.security_id_char_1
8387       ,xla_events_pub_pkg.g_security.security_id_char_2
8388       ,xla_events_pub_pkg.g_security.security_id_char_3
8389       ,p_event_source_info.source_id_int_1
8390       ,p_event_source_info.source_id_int_2
8391       ,p_event_source_info.source_id_int_3
8392       ,p_event_source_info.source_id_int_4
8393       ,p_event_source_info.source_id_char_1
8394       ,p_event_source_info.source_id_char_2
8395       ,p_event_source_info.source_id_char_3
8396       ,p_event_source_info.source_id_char_4)
8397    RETURNING entity_id INTO l_entity_id;
8398 
8399    g_entity_id          := l_entity_id;
8400    g_entity_type_code   := p_event_source_info.entity_type_code;
8401    g_transaction_number := p_event_source_info.transaction_number;
8402    g_max_event_number   := 0;
8403 
8404    l_return_id:=add_entity_event
8405             (p_entity_id              => l_entity_id
8406             ,p_application_id         => p_event_source_info.application_id
8407             ,p_ledger_id              => p_event_source_info.ledger_id
8408             ,p_legal_entity_id        => p_event_source_info.legal_entity_id
8409             ,p_event_type_code        => p_event_type_code
8410             ,p_event_date             => p_event_date
8411             ,p_event_status_code      => p_event_status_code
8412             ,p_process_status_code    => p_process_status_code
8413             ,p_event_number           => p_event_number
8414             ,p_transaction_date       => p_transaction_date
8415             ,p_reference_info         => p_reference_info
8416             ,p_budgetary_control_flag => p_budgetary_control_flag);
8417   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8418     trace
8419          (p_msg      => 'end of procedure create_entity_event'
8420          ,p_level    => C_LEVEL_PROCEDURE
8421          ,p_module   =>l_log_module);
8422     trace
8423          (p_msg      => 'return value:'||to_char(l_return_id)
8424          ,p_level    => C_LEVEL_PROCEDURE
8425          ,p_module   =>l_log_module);
8426   END IF;
8427 
8428   return l_return_id;
8429 
8430 EXCEPTION
8431 WHEN xla_exceptions_pkg.application_exception THEN
8432    RAISE;
8433 WHEN OTHERS THEN
8434    xla_exceptions_pkg.raise_message
8435       (p_location => 'xla_events_pkg.create_entity_event');
8436 END create_entity_event;
8437 
8438 
8439 --=============================================================================
8440 --
8441 --
8442 --
8443 --=============================================================================
8444 
8445 PROCEDURE update_entity_trx_number
8446    (p_transaction_number           IN  VARCHAR2) IS
8447 l_log_module                VARCHAR2(240);
8448 BEGIN
8449   IF g_log_enabled THEN
8450     l_log_module := C_DEFAULT_MODULE||'.update_entity_trx_number';
8451   END IF;
8452   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8453     trace
8454          (p_msg      => 'BEGIN of procedure update_entity_trx_number'
8455          ,p_level    => C_LEVEL_PROCEDURE
8456          ,p_module   =>l_log_module);
8457   END IF;
8458 
8459    UPDATE xla_transaction_entities
8460       SET transaction_number   = p_transaction_number
8461     WHERE entity_id            = g_entity_id
8462       AND application_id       = g_application_id;
8463 
8464   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8465     trace
8466          (p_msg      => 'end of procedure update_entity_trx_number'
8467          ,p_level    => C_LEVEL_PROCEDURE
8468          ,p_module   =>l_log_module);
8469   END IF;
8470 
8471 EXCEPTION
8472 WHEN xla_exceptions_pkg.application_exception THEN
8473    RAISE;
8474 WHEN OTHERS                                   THEN
8475    xla_exceptions_pkg.raise_message
8476       (p_location => 'xla_events_pkg.update_entity_trx_number');
8477 END update_entity_trx_number;
8478 
8479 --=============================================================================
8480 --
8481 --
8482 -- Changed to fix bug # 2899700. (Added parameter p_process_status_code)
8483 --
8484 --=============================================================================
8485 
8486 FUNCTION  add_entity_event
8487    (p_entity_id                    IN  INTEGER
8488    ,p_application_id               IN  INTEGER
8489    ,p_ledger_id                    IN  INTEGER
8490    ,p_legal_entity_id              IN  INTEGER
8491    ,p_event_type_code              IN  VARCHAR2
8492    ,p_event_date                   IN  DATE
8493    ,p_event_status_code            IN  VARCHAR2
8494    ,p_process_status_code          IN  VARCHAR2
8495    ,p_event_number                 IN  NUMBER
8496    ,p_transaction_date             IN  DATE
8497    ,p_reference_info               IN  xla_events_pub_pkg.t_event_reference_info
8498                                        DEFAULT NULL
8499    ,p_budgetary_control_flag       IN  VARCHAR2)
8500 RETURN INTEGER IS
8501 l_event_id            INTEGER;
8502 l_on_hold_flag        XLA_EVENTS.ON_HOLD_FLAG%TYPE:='N';
8503 l_event_status_code   XLA_EVENTS.EVENT_STATUS_CODE%TYPE;
8504 l_temp_event_number   XLA_EVENTS.event_number%TYPE;
8505 l_log_module                VARCHAR2(240);
8506 BEGIN
8507   IF g_log_enabled THEN
8508     l_log_module := C_DEFAULT_MODULE||'.add_entity_event';
8509   END IF;
8510   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8511     trace
8512          (p_msg      => 'BEGIN of procedure add_entity_event'
8513          ,p_level    => C_LEVEL_PROCEDURE
8514          ,p_module   =>l_log_module);
8515   END IF;
8516 
8517    if(g_gapless_flag='Y' and p_event_number>1) then
8518      begin
8519        select on_hold_flag, event_status_code
8520          into l_on_hold_flag, l_event_status_code
8521          from xla_events
8522         where entity_id=p_entity_id
8523               and event_number=p_event_number-1;
8524      exception
8525        when no_data_found then
8526          l_on_hold_flag:='Y';
8527      end;
8528      if(l_on_hold_flag = 'N' and l_event_status_code = 'I' ) then
8529        l_on_hold_flag := 'Y';
8530      end if;
8531    end if;
8532 
8533    INSERT INTO xla_events
8534       (event_id
8535       ,application_id
8536       ,event_type_code
8537       ,entity_id
8538       ,event_number
8539       ,transaction_date
8540       ,event_status_code
8541       ,process_status_code
8542       ,event_date
8543       ,budgetary_control_flag
8544       ,creation_date
8545       ,created_by
8546       ,last_update_date
8547       ,last_updated_by
8548       ,last_update_login
8549       ,program_update_date
8550       ,program_application_id
8551       ,program_id
8552       ,request_id
8553       ,reference_num_1
8554       ,reference_num_2
8555       ,reference_num_3
8556       ,reference_num_4
8557       ,reference_char_1
8558       ,reference_char_2
8559       ,reference_char_3
8560       ,reference_char_4
8561       ,reference_date_1
8562       ,reference_date_2
8563       ,reference_date_3
8564       ,reference_date_4
8565       ,on_hold_flag)
8566    VALUES
8567       (xla_events_s.nextval
8568       ,p_application_id
8569       ,p_event_type_code
8570       ,p_entity_id
8571       ,NVL(p_event_number,g_max_event_number + 1)
8572       ,NVL(p_transaction_date, TRUNC(p_event_date))
8573       ,p_event_status_code
8574       ,p_process_status_code
8575       ,TRUNC(p_event_date)
8576       ,p_budgetary_control_flag
8577       ,sysdate
8578       ,xla_environment_pkg.g_usr_id
8579       ,sysdate
8580       ,xla_environment_pkg.g_usr_id
8581       ,xla_environment_pkg.g_login_id
8582       ,sysdate
8583       ,xla_environment_pkg.g_prog_appl_id
8584       ,xla_environment_pkg.g_prog_id
8585       ,xla_environment_pkg.g_Req_Id
8586       ,p_reference_info.reference_num_1
8587       ,p_reference_info.reference_num_2
8588       ,p_reference_info.reference_num_3
8589       ,p_reference_info.reference_num_4
8590       ,p_reference_info.reference_char_1
8591       ,p_reference_info.reference_char_2
8592       ,p_reference_info.reference_char_3
8593       ,p_reference_info.reference_char_4
8594       ,p_reference_info.reference_date_1
8595       ,p_reference_info.reference_date_2
8596       ,p_reference_info.reference_date_3
8597       ,p_reference_info.reference_date_4
8598       ,l_on_hold_flag)
8599    RETURNING event_id INTO l_event_id;
8600 
8601    if(l_on_hold_flag = 'N' and
8602         g_gapless_flag='Y' and p_event_status_code<>'I') then
8603    -- set the following event on_hold to 'N'
8604 
8605      SELECT event_status_code,  event_number     BULK COLLECT
8606        INTO g_gapless_array_event_status, g_gapless_event_number
8607        FROM xla_events
8608       Where entity_id            = g_entity_id
8609             and event_number> p_event_number
8610       Order by event_number;
8611 
8612      l_temp_event_number:=p_event_number+1;
8613      For j in 1..g_gapless_event_number.COUNT loop
8614        if(g_gapless_event_number(j)=l_temp_event_number
8615                       and g_gapless_array_event_status(j)<>'I') then
8616          l_temp_event_number:=l_temp_event_number+1;
8617        else
8618          exit;
8619        end if;
8620      end loop;
8621      --l_temp_event_number is the next gap
8622      -- update the on_hold_flag of event between l_array_event_number(i)
8623      -- and --l_temp_event_number+1
8624 
8625      update xla_events
8626         set on_hold_flag='N'
8627       where entity_id=p_entity_id
8628             and event_number >p_event_number
8629             and event_number <l_temp_event_number+1;
8630 
8631    end if;
8632 
8633 
8634   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8635     trace
8636          (p_msg      => 'end of procedure add_entity_event'
8637          ,p_level    => C_LEVEL_PROCEDURE
8638          ,p_module   =>l_log_module);
8639     trace
8640          (p_msg      => 'return value:'||to_char(l_event_id)
8641          ,p_level    => C_LEVEL_PROCEDURE
8642          ,p_module   =>l_log_module);
8643   END IF;
8644    RETURN l_event_id;
8645 EXCEPTION
8646 WHEN xla_exceptions_pkg.application_exception THEN
8647    RAISE;
8648 WHEN OTHERS                                   THEN
8649    xla_exceptions_pkg.raise_message
8650       (p_location => 'xla_events_pkg.add_event (fn)');
8651 END add_entity_event;
8652 
8653 
8654 --=============================================================================
8655 --
8656 --
8657 --
8658 --=============================================================================
8659 
8660 PROCEDURE reset_cache IS
8661 l_dummy_class_tbl               t_array_event_class;
8662 l_dummy_type_tbl                t_array_event_type;
8663 l_dummy_entity_tbl              t_array_entity_type;
8664 l_dummy_tbl                     t_parameter_tbl;
8665 l_source_info                   xla_events_pub_pkg.t_event_source_info;
8666 l_log_module                VARCHAR2(240);
8667 BEGIN
8668   IF g_log_enabled THEN
8669     l_log_module := C_DEFAULT_MODULE||'.reset_cache';
8670   END IF;
8671   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8672     trace
8673          (p_msg      => 'BEGIN of procedure reset_cache'
8674          ,p_level    => C_LEVEL_PROCEDURE
8675          ,p_module   =>l_log_module);
8676   END IF;
8677 
8678 
8679    g_entity_id                := NULL;
8680    g_entity_type_code         := NULL;
8681    g_valuation_method         := NULL;
8682 
8683    g_max_event_number         := 0;
8684    g_application_id           := NULL;
8685    g_action                   := NULL;
8686    g_gapless_flag             :='N';
8687 
8688    --
8689    -- Clear all cache but the event status which is static
8690    --
8691    g_entity_type_code_tbl     := l_dummy_entity_tbl              ;
8692    g_event_class_code_tbl     := l_dummy_class_tbl               ;
8693    g_event_type_code_tbl      := l_dummy_type_tbl                ;
8694    g_ledger_status_tbl.delete;
8695    g_source_info              := l_source_info;
8696 --   g_context                  := C_CONTEXT_EVENTAPI;
8697 
8698   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8699     trace
8700          (p_msg      => 'end of reset_cache'
8701          ,p_level    => C_LEVEL_PROCEDURE
8702          ,p_module   =>l_log_module);
8703   END IF;
8704 
8705 EXCEPTION
8706 WHEN xla_exceptions_pkg.application_exception THEN
8707    RAISE;
8708 WHEN OTHERS                                   THEN
8709    xla_exceptions_pkg.raise_message
8710       (p_location => 'xla_events_pkg.reset_cache');
8711 END reset_cache;
8712 
8713 
8714 --=============================================================================
8715 --
8716 --
8717 --
8718 --=============================================================================
8719 
8720 PROCEDURE set_context
8721    (p_context                      IN  VARCHAR2) IS
8722 l_log_module                VARCHAR2(240);
8723 BEGIN
8724   IF g_log_enabled THEN
8725     l_log_module := C_DEFAULT_MODULE||'.set_context';
8726   END IF;
8727   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8728     trace
8729          (p_msg      => 'BEGIN of procedure set_context'
8730          ,p_level    => C_LEVEL_PROCEDURE
8731          ,p_module   =>l_log_module);
8732   END IF;
8733    g_context := p_context;
8734 
8735   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8736     trace
8737          (p_msg      => 'end of procedure set_context'
8738          ,p_level    => C_LEVEL_PROCEDURE
8739          ,p_module   =>l_log_module);
8740   END IF;
8741 EXCEPTION
8742 WHEN xla_exceptions_pkg.application_exception THEN
8743    RAISE;
8744 WHEN OTHERS                                   THEN
8745    xla_exceptions_pkg.raise_message
8746       (p_location => 'xla_events_pkg.set_context');
8747 END set_context;
8748 
8749 
8750 --=============================================================================
8751 --
8752 --
8753 --
8754 --=============================================================================
8755 
8756 PROCEDURE delete_je IS
8757 l_log_module                      VARCHAR2(240);
8758 BEGIN
8759    IF g_log_enabled THEN
8760       l_log_module := C_DEFAULT_MODULE||'.delete_je';
8761    END IF;
8762    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8763       trace
8764          (p_msg      => 'BEGIN of procedure DELETE_JE'
8765          ,p_level    => C_LEVEL_PROCEDURE
8766          ,p_module   => l_log_module);
8767    END IF;
8768 
8769    -- shall we join to xla_events to get only the event with status D or I?
8770    -- good: reduce the event_id that are selected
8771    -- bad:  need to join to xla_events table
8772    DELETE FROM xla_accounting_errors
8773       WHERE event_id IN
8774                (SELECT xeg.event_id FROM xla_events_int_gt xeg, xla_events xe
8775                  WHERE xeg.event_id = xe.event_id
8776                    AND xe.event_status_code in ('D', 'I'));
8777 
8778    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8779       trace
8780          (p_msg      => 'Number of errors deleted = '||SQL%ROWCOUNT
8781          ,p_level    => C_LEVEL_STATEMENT
8782          ,p_module   => l_log_module);
8783    END IF;
8784 
8785 -- Bug 5529420
8786 DELETE FROM xla_distribution_links
8787     WHERE application_id= g_application_id and ae_header_id IN
8788             (SELECT xh.ae_header_id
8789                FROM xla_events_int_gt        xeg,
8790                     xla_ae_headers           xh
8791                WHERE
8792                xh.event_id = xeg.event_id AND
8793                xh.application_id = g_application_id AND
8794                xh.accounting_entry_status_code IN ('D','R','RELATED_EVENT_ERROR','I','N')
8795             );
8796 
8797 
8798    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8799       trace
8800          (p_msg      => 'Number of distribution links deleted = '||SQL%ROWCOUNT
8801          ,p_level    => C_LEVEL_STATEMENT
8802          ,p_module   => l_log_module);
8803    END IF;
8804 
8805       --
8806       -- Delete from xla_ae_segment_values
8807       --
8808 
8809    DELETE FROM xla_ae_segment_values
8810       WHERE ae_header_id IN
8811                (SELECT xah.ae_header_id
8812                   FROM xla_events        xe
8813                       ,xla_ae_headers    xah
8814                       ,xla_events_int_gt     xeg
8815                  WHERE xe.application_id = xah.application_id
8816                    AND xah.event_id      = xe.event_id
8817                    AND xeg.event_id      = xe.event_id);
8818 
8819    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8820       trace
8821          (p_msg      => 'Number of segment values deleted = '||SQL%ROWCOUNT
8822          ,p_level    => C_LEVEL_STATEMENT
8823          ,p_module   => l_log_module);
8824    END IF;
8825 
8826       --
8827       -- Delete from xla_ae_line_acs
8828       --
8829 
8830        DELETE FROM xla_ae_line_acs
8831        WHERE ae_header_id IN
8832                (SELECT xah.ae_header_id
8833                     FROM xla_events        xe
8834                         ,xla_ae_headers    xah
8835                         ,xla_events_int_gt xeg
8836                  WHERE xe.application_id = xah.application_id
8837                    AND xah.event_id      = xe.event_id
8838                    AND xeg.event_id      = xe.event_id);
8839 
8840       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8841          trace
8842             (p_msg      => 'Number of line acs deleted = '||SQL%ROWCOUNT
8843             ,p_level    => C_LEVEL_STATEMENT
8844             ,p_module   => l_log_module);
8845       END IF;
8846 
8847 
8848       --
8849       -- Delete from xla_ae_header_acs
8850       --
8851       DELETE FROM xla_ae_header_acs
8852          WHERE ae_header_id IN
8853               (SELECT xah.ae_header_id
8854                     FROM xla_events        xe
8855                         ,xla_ae_headers    xah
8856                         ,xla_events_int_gt xeg
8857                  WHERE xe.application_id = xah.application_id
8858                    AND xah.event_id      = xe.event_id
8859                    AND xeg.event_id      = xe.event_id);
8860 
8861 
8862       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8863          trace
8864             (p_msg      => 'Number of header acs deleted = '||SQL%ROWCOUNT
8865             ,p_level    => C_LEVEL_STATEMENT
8866             ,p_module   => l_log_module);
8867       END IF;
8868 
8869       --
8870       -- Delete from xla_ae_line_details
8871       --
8872 
8873    DELETE FROM xla_ae_line_details
8874       WHERE ae_header_id IN
8875                (SELECT xah.ae_header_id
8876                   FROM xla_events        xe
8877                       ,xla_ae_headers    xah
8878                       ,xla_events_int_gt     xeg
8879                  WHERE xe.application_id = xah.application_id
8880                    AND xah.event_id      = xe.event_id
8881                    AND xeg.event_id      = xe.event_id);
8882 
8883    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8884       trace
8885          (p_msg      => 'Number of line details deleted = '||SQL%ROWCOUNT
8886          ,p_level    => C_LEVEL_STATEMENT
8887          ,p_module   => l_log_module);
8888    END IF;
8889 
8890       --
8891       -- Delete from xla_ae_header_details
8892       --
8893 
8894    DELETE FROM xla_ae_header_details
8895       WHERE ae_header_id IN
8896                (SELECT xah.ae_header_id
8897                   FROM xla_events        xe
8898                       ,xla_ae_headers    xah
8899                       ,xla_events_int_gt     xeg
8900                  WHERE xe.application_id = xah.application_id
8901                    AND xah.event_id      = xe.event_id
8902                    AND xeg.event_id      = xe.event_id);
8903 
8904    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8905       trace
8906          (p_msg      => 'Number of header details deleted = '||SQL%ROWCOUNT
8907          ,p_level    => C_LEVEL_STATEMENT
8908          ,p_module   => l_log_module);
8909    END IF;
8910 
8911       --
8912       -- Delete from xla_ae_lines
8913       --
8914 
8915    DELETE FROM xla_ae_lines
8916       WHERE application_id  = g_application_id
8917         AND ae_header_id IN
8918                (SELECT xah.ae_header_id
8919                   FROM xla_events        xe
8920                       ,xla_ae_headers    xah
8921                       ,xla_events_int_gt     xeg
8922                  WHERE xe.application_id = xah.application_id
8923                    AND xe.application_id = g_application_id
8924                    AND xah.application_id = g_application_id
8925                    AND xah.event_id      = xe.event_id
8926                    AND xeg.event_id      = xe.event_id);
8927 
8928    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8929       trace
8930          (p_msg      => 'Number of ae lines deleted = '||SQL%ROWCOUNT
8931          ,p_level    => C_LEVEL_STATEMENT
8932          ,p_module   => l_log_module);
8933    END IF;
8934 
8935       --
8936       -- Delete from xla_ae_headers
8937       --
8938 
8939    DELETE FROM xla_ae_headers
8940       WHERE application_id  = g_application_id
8941         AND ae_header_id IN
8942                (SELECT xah.ae_header_id
8943                   FROM xla_events        xe
8944                       ,xla_ae_headers    xah
8945                       ,xla_events_int_gt     xeg
8946                  WHERE xe.application_id = xah.application_id
8947                    AND xah.event_id      = xe.event_id
8948                    AND xeg.event_id      = xe.event_id);
8949 
8950    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8951       trace
8952          (p_msg      => 'Number of ae headers deleted = '||SQL%ROWCOUNT
8953          ,p_level    => C_LEVEL_STATEMENT
8954          ,p_module   => l_log_module);
8955    END IF;
8956 
8957    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8958       trace
8959          (p_msg      => 'END of procedure DELETE_JE'
8960          ,p_level    => C_LEVEL_PROCEDURE
8961          ,p_module   => l_log_module);
8962    END IF;
8963 EXCEPTION
8964 WHEN xla_exceptions_pkg.application_exception THEN
8965    RAISE;
8966 WHEN OTHERS THEN
8967    xla_exceptions_pkg.raise_message
8968       (p_location => 'xla_events_pkg.delete_je');
8969 END delete_je;
8970 
8971 
8972 
8973 
8974 --=============================================================================
8975 --
8976 --
8977 --
8978 --=============================================================================
8979 
8980 FUNCTION period_close
8981    (p_period_name                 IN VARCHAR2
8982    ,p_ledger_id                   IN NUMBER
8983    ,p_mode                        IN VARCHAR2)
8984 RETURN VARCHAR2 IS
8985    l_period_start_date               DATE;
8986    l_period_end_date                 DATE;
8987    l_unprocessed                     NUMBER(2) := 0;
8988    l_log_module                      VARCHAR2(240);
8989    l_request_id                      NUMBER(10);
8990    l_check_events                    NUMBER(2) := 0;
8991    l_primary_ledger_id               GL_LEDGERS.ledger_id%TYPE;
8992    l_ledger_id                       GL_LEDGERS.ledger_id%TYPE;
8993    l_user_id                         NUMBER;
8994    l_resp_id                         NUMBER;
8995    l_resp_appl_id                    NUMBER;
8996    l_xml_output                      BOOLEAN;
8997    l_iso_language                    FND_LANGUAGES.iso_language%TYPE;
8998    l_iso_territory                   FND_LANGUAGES.iso_territory%TYPE;
8999    l_user_je_source_name             XLA_LOOKUPS.meaning%TYPE;
9000    l_ledger_name                     GL_LEDGERS.name%TYPE;
9001 BEGIN
9002   IF g_log_enabled THEN
9003     l_log_module := C_DEFAULT_MODULE||'.period_close';
9004   END IF;
9005 
9006   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9007     trace
9008          (p_msg      => 'BEGIN of function period_close'
9009          ,p_level    => C_LEVEL_PROCEDURE
9010          ,p_module   => l_log_module);
9011   END IF;
9012 
9013    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9014       trace('p_period_name = '       ||
9015          p_period_name, C_LEVEL_STATEMENT, l_log_module);
9016       trace('p_ledger_id = '||
9017          to_char(p_ledger_id), C_LEVEL_STATEMENT, l_log_module);
9018       trace('p_mode = '||
9019          p_mode, C_LEVEL_STATEMENT, l_log_module);
9020    END IF;
9021 
9022 
9023    ----------------------------------------------------------------------------
9024    -- Following sets the Security Context for the execution. This enables the
9025    -- event API to respect the transaction security implementation
9026    ----------------------------------------------------------------------------
9027    xla_security_pkg.set_security_context(602);
9028 
9029    l_unprocessed := xla_period_close_exp_pkg.check_period_close
9030                                            (101
9031                                            ,p_period_name
9032                                            ,p_ledger_id);
9033 
9034    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9035       trace('l_unprocessed = '       ||
9036          to_char(l_unprocessed), C_LEVEL_STATEMENT, l_log_module);
9037    END IF;
9038 
9039    IF l_unprocessed > 0 THEN
9040 
9041       IF p_mode = 'W' THEN
9042 
9043          DELETE FROM xla_transfer_ledgers
9044          WHERE group_id IN
9045                (SELECT group_id
9046                   FROM gl_je_batches
9047                  WHERE status = 'P'
9048                    AND default_period_name = p_period_name)
9049                    AND (primary_ledger_id is null OR
9050                         primary_ledger_id = p_ledger_id OR
9051                         secondary_ledger_id = p_ledger_id);
9052 
9053         BEGIN
9054 
9055             SELECT lower(iso_language),iso_territory
9056               INTO l_iso_language,l_iso_territory
9057               FROM FND_LANGUAGES
9058              WHERE language_code = USERENV('LANG');
9059 
9060             SELECT meaning
9061               INTO l_user_je_source_name
9062               FROM xla_lookups
9063              WHERE lookup_type = 'XLA_ADR_SIDE'
9064                AND lookup_code = 'ALL';
9065 
9066             SELECT name
9067               INTO l_ledger_name
9068               FROM gl_ledgers
9069              WHERE ledger_id = p_ledger_id;
9070 
9071         EXCEPTION
9072            WHEN NO_DATA_FOUND THEN
9073                   NULL;
9074            WHEN OTHERS THEN
9075                   RAISE;
9076         END;
9077 
9078         l_xml_output := fnd_request.add_layout('XLA'
9079                                              ,'XLAPEXRPT'
9080                                              ,l_iso_language
9081                                              ,l_iso_territory
9082                                              ,'PDF');
9083 
9084         l_request_id := fnd_request.submit_request
9085                         (application     => 'XLA'
9086                         ,program         => 'XLAPEXRPT'
9087                         ,description     => NULL
9088                         ,start_time      => NULL
9089                         ,sub_request     => FALSE
9090                         ,argument1       => 101
9091                         ,argument2       => l_user_je_source_name
9092                         ,argument3       => p_ledger_id
9093                         ,argument4       => l_ledger_name
9094                         ,argument5       => p_period_name
9095                         ,argument6       => p_period_name
9096                         ,argument7       => NULL
9097                         ,argument8       => NULL
9098                         ,argument9       => NULL
9099                         ,argument10      => NULL
9100                         ,argument11      => NULL
9101                         ,argument12      => NULL
9102                         ,argument13      => 'W');
9103 
9104         commit;   -- commit is mandatory after fnd_request.submit_request
9105 
9106         IF l_request_id = 0 THEN
9107            xla_exceptions_pkg.raise_message
9108               (p_appli_s_name   => 'XLA'
9109               ,p_msg_name       => 'XLA_REP_TECHNICAL_ERROR'
9110               ,p_token_1        => 'APPLICATION_NAME'
9111               ,p_value_1        => 'SLA');
9112         END IF;
9113 
9114         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9115            trace('Concurrent request submitted'|| to_char(l_request_id),
9116                   C_LEVEL_STATEMENT,l_log_module);
9117         END IF;
9118 
9119     END IF;
9120 
9121     IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9122        trace
9123        ( p_msg      => 'END of functon period_close'
9124         ,p_level    => C_LEVEL_PROCEDURE
9125         ,p_module   => l_log_module);
9126     END IF;
9127 
9128     RETURN 'WARNING';    --   Notification with Warning will be sent.
9129   END IF;
9130 
9131   RETURN 'SUCCESS';    -- No Notification.
9132 
9133 EXCEPTION
9134      WHEN XLA_EXCEPTIONS_PKG.application_exception THEN
9135         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9136            trace('End of function Period Close with error', C_LEVEL_STATEMENT,
9137                  l_log_module);
9138         END IF;
9139         RETURN 'ERROR';     --   Notification with Error will be sent.
9140 END period_close;
9141 
9142 --=============================================================================
9143 --
9144 -- Private Function to Get the application name for a given application id
9145 --
9146 --=============================================================================
9147 
9148 FUNCTION get_application_name
9149    (p_application_id            IN NUMBER)
9150 RETURN VARCHAR2 IS
9151     l_log_module                      VARCHAR2(240);
9152     l_application_name                FND_APPLICATION_TL.application_name%TYPE;
9153 
9154 BEGIN
9155 
9156   IF g_log_enabled THEN
9157     l_log_module := C_DEFAULT_MODULE||'.get_application_name';
9158   END IF;
9159 
9160   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9161     trace
9162          (p_msg      => 'BEGIN of get_application_name'
9163          ,p_level    => C_LEVEL_PROCEDURE
9164          ,p_module   => l_log_module);
9165   END IF;
9166 
9167 
9168   SELECT  fat.application_name
9169     INTO  l_application_name
9170     FROM  fnd_application_tl fat
9171   WHERE  fat.application_id = p_application_id
9172     AND  fat.language = nvl(USERENV('LANG'),fat.language);
9173 
9174 
9175   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9176       trace
9177          (p_msg      => 'get_application_name'
9178          ,p_level    => C_LEVEL_PROCEDURE
9179          ,p_module   => l_log_module);
9180   END IF;
9181 
9182   RETURN l_application_name;
9183 
9184  EXCEPTION
9185     WHEN NO_DATA_FOUND THEN
9186         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9187            trace('End of Get Application name', C_LEVEL_STATEMENT,l_log_module);
9188         END IF;
9189         RETURN l_application_name;
9190 END get_application_name;
9191 
9192 
9193 --=============================================================================
9194 --
9195 -- Private Function to Get the ledger associated with a ledger id
9196 --
9197 --=============================================================================
9198 
9199 FUNCTION get_ledger_name
9200    (p_ledger_id            IN NUMBER)
9201 RETURN VARCHAR2 IS
9202     l_log_module                      VARCHAR2(240);
9203     l_ledger_name                     VARCHAR2(30);
9204 
9205 BEGIN
9206 
9207   IF g_log_enabled THEN
9208     l_log_module := C_DEFAULT_MODULE||'.get_ledger_name';
9209   END IF;
9210 
9211   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9212     trace
9213          (p_msg      => 'BEGIN of get_ledger_name'
9214          ,p_level    => C_LEVEL_PROCEDURE
9215          ,p_module   => l_log_module);
9216   END IF;
9217 
9218     SELECT name
9219      INTO l_ledger_name
9220      FROM gl_ledgers
9221     WHERE ledger_id = p_ledger_id;
9222 
9223 
9224   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9225       trace
9226          (p_msg      => 'END of get_ledger_name'
9227          ,p_level    => C_LEVEL_PROCEDURE
9228          ,p_module   => l_log_module);
9229   END IF;
9230 
9231   RETURN l_ledger_name;
9232 
9233  EXCEPTION
9234     WHEN NO_DATA_FOUND THEN
9235         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9236            trace('End of Get ledger name', C_LEVEL_STATEMENT,l_log_module);
9237         END IF;
9238         RETURN l_ledger_name;
9239 END get_ledger_name;
9240 
9241 FUNCTION period_close
9242    (p_application_id              IN NUMBER
9243    ,p_ledger_id                   IN NUMBER
9244    ,p_period_name                 IN VARCHAR2)
9245 RETURN VARCHAR2 IS
9246    l_period_start_date               DATE;
9247    l_period_end_date                 DATE;
9248    l_unprocessed                     NUMBER(1) := 0;
9249    l_log_module                      VARCHAR2(240);
9250 
9251 BEGIN
9252   IF g_log_enabled THEN
9253     l_log_module := C_DEFAULT_MODULE||'.period_close';
9254   END IF;
9255 
9256   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9257     trace
9258          (p_msg      => 'BEGIN of function period_close for Subledger Uptake'
9259          ,p_level    => C_LEVEL_PROCEDURE
9260          ,p_module   => l_log_module);
9261   END IF;
9262 
9263    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9264       trace('p_application_id = '       ||
9265          to_char(p_application_id), C_LEVEL_STATEMENT, l_log_module);
9266       trace('p_ledger_id = '||
9267          to_char(p_ledger_id), C_LEVEL_STATEMENT, l_log_module);
9268       trace('p_period_name = '||
9269          p_period_name, C_LEVEL_STATEMENT, l_log_module);
9270    END IF;
9271 
9272    ----------------------------------------------------------------------------
9273    -- Following sets the Security Context for the execution. This enables the
9274    -- event API to respect the transaction security implementation
9275    ----------------------------------------------------------------------------
9276    xla_security_pkg.set_security_context(p_application_id);
9277 -- 4949921
9278    l_unprocessed := xla_period_close_exp_pkg.check_period_close
9279                                            (p_application_id
9280                                            ,p_period_name
9281                                            ,p_ledger_id);
9282 
9283    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9284       trace('l_unprocessed = '       ||
9285          to_char(l_unprocessed), C_LEVEL_STATEMENT, l_log_module);
9286    END IF;
9287 
9288  IF l_unprocessed > 0 THEN
9289 
9290     IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9291        trace
9292        ( p_msg      => 'END of function period close for Subledger Uptake'
9293         ,p_level    => C_LEVEL_PROCEDURE
9294         ,p_module   => l_log_module);
9295     END IF;
9296 
9297     RETURN 'FALSE';
9298  ELSE
9299 
9300     IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9301        trace
9302        ( p_msg      => 'END of function period close for Subledger Uptake'
9303         ,p_level    => C_LEVEL_PROCEDURE
9304         ,p_module   => l_log_module);
9305     END IF;
9306 
9307     RETURN 'TRUE';
9308  END IF;
9309 
9310 EXCEPTION
9311      WHEN OTHERS THEN
9312         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9313            trace('End of function Period Close for Subledger Uptake with error'
9314               ,C_LEVEL_STATEMENT
9315               ,l_log_module);
9316         END IF;
9317         RETURN 'ERROR';
9318 END period_close;
9319 
9320 --=============================================================================
9321 --          *******************  Initialization  *********************
9322 --=============================================================================
9323 --=============================================================================
9324 --
9325 --
9326 --
9327 --
9328 --
9329 --
9330 --
9331 --
9332 --
9333 --
9334 -- Following .............
9335 --
9336 --
9337 --
9338 --
9339 --
9340 --
9341 --
9342 --
9343 --
9344 --
9345 --
9346 --
9347 --=============================================================================
9348 
9349 BEGIN
9350    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
9351    g_log_enabled    := fnd_log.test
9352                           (log_level  => g_log_level
9353                           ,module     => C_DEFAULT_MODULE);
9354 
9355    IF NOT g_log_enabled  THEN
9356       g_log_level := C_LEVEL_LOG_DISABLED;
9357    END IF;
9358 
9359    initialize;
9360 
9361 END xla_events_pkg;