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