[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;