DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_CMP_PAD_PKG

Source


1 PACKAGE BODY XLA_CMP_PAD_PKG AS
2 /* $Header: xlacppad.pkb 120.31 2010/05/10 19:57:52 vkasina ship $   */
3 /*===========================================================================+
4 |             Copyright (c) 2001-2002 Oracle Corporation                     |
5 |                       Redwood Shores, CA, USA                              |
6 |                         All rights reserved.                               |
7 +============================================================================+
8 | PACKAGE NAME                                                               |
9 |     xla_cmp_pad_pkg                                                        |
10 |                                                                            |
11 | DESCRIPTION                                                                |
12 | DESCRIPTION                                                                |
13 |     This is a XLA private package, which contains all the APIs required    |
14 |     for package body generation                                            |
15 |                                                                            |
16 |                                                                            |
17 | HISTORY                                                                    |
18 |     25-JUN-2002 K.Boussema    Created                                      |
19 |     18-MAR-2003 K.Boussema    Added amb_context_code column                |
20 |     22-APR-2003 K.Boussema    Included error messages                      |
21 |     07-MAI-2003 K.Boussema    Added the extract of the PAD version         |
22 |     26-MAI-2003 K.Boussema    Added the lock of PAD                        |
23 |     02-JUN-2003 K.Boussema    Modified to fix bug 2729143                  |
24 |     17-JUL-2003 K.Boussema    Reviewed the code                            |
25 |     01-SEP-2003 K.Boussema    Reviewed the package comment generated       |
26 |     18-DEC-2003 K.Boussema    Changed to fix bug 3042840,3307761,3268940   |
27 |                               3310291 and 3320689                          |
28 |     23-DEC-2003 K.Boussema    Added a call to Extract Integrity checker    |
29 |     19-FEB-2004 K.Boussema    Made changes for the FND_LOG.                |
30 |     12-MAR-2004 K.Boussema    Changed to incorporate the select of lookups |
31 |                               from the extract objects                     |
32 |     22-MAR-2004 K.Boussema    Added a parameter p_module to the TRACE calls|
33 |                               and the procedure.                           |
34 |     11-MAY-2004 K.Boussema    Removed the call to XLA trace routine from   |
35 |                               trace() procedure                            |
36 |     20-Sep-2004 S.Singhania   Made ffg changes for the bulk performance:   |
37 |                                 - Modified constants C_PACKAGE_SPEC,       |
38 |                                   C_PACKAGE_BODY_1, C_PACKAGE_BODY_2,      |
39 |                                   C_PRIVATE_API_1.                         |
40 |                                 - Obsoleted the routines GetPackageName,   |
41 |                                   InitGlobalVariables                      |
42 |                                 - Modified the routines GenerateBodyPackage|
43 |                                   ,GeneratePrivateProcedures, GenerateBody,|
44 |                                   CreateBodyPackage, Compile               |
45 |     06-Oct-2004 K.Boussema    Made changes for the Accounting Event Extract|
46 |                               Diagnostics feature.                         |
47 |     11-Jul-2005 A.Wan         Changed for MPA 4262811                      |
48 +===========================================================================*/
49 
50 --
51 --+==========================================================================+
52 --|                                                                          |
53 --|                                                                          |
54 --|                                                                          |
55 --|                                                                          |
56 --|                                                                          |
57 --|                                                                          |
58 --|                                                                          |
59 --|                                                                          |
60 --|                                                                          |
61 --|                                                                          |
62 --|                    AAD templates/Global constants                        |
63 --|                                                                          |
64 --|                                                                          |
65 --|                                                                          |
66 --|                                                                          |
67 --|                                                                          |
68 --|                                                                          |
69 --|                                                                          |
70 --|                                                                          |
71 --|                                                                          |
72 --+==========================================================================+
73 --
74 
75 C_COMMENT  CONSTANT VARCHAR2(2000) :=
76 '/'||'*======================================================================+
77 |                Copyright (c) 1997 Oracle Corporation                  |
78 |                       Redwood Shores, CA, USA                         |
79 |                         All rights reserved.                          |
80 +=======================================================================+
81 | Package Name                                                          |
82 |     $name
83 |                                                                       |
84 | DESCRIPTION                                                           |
85 |     Package generated From Product Accounting Definition              |
86 |     $pad_name$
87 |     $pad_code$
88 |     $pad_owner$
89 |     $pad_version$
90 |     $pad_context$
91 | HISTORY                                                               |
92 |     $history
93 +=======================================================================*'||'/'
94  ;
95 
96 
97 
98 --+==========================================================================+
99 --|            specifcation  package template                                |
100 --+==========================================================================+
101 
102 --
103 C_PACKAGE_SPEC  CONSTANT  VARCHAR2(10000) :=
104 --
105 'CREATE OR REPLACE PACKAGE $PACKAGE_NAME$ AS
106 --
107 $header$
108 --
109 --
110 FUNCTION GetMeaning (
111   p_flex_value_set_id               IN INTEGER
112 , p_flex_value                      IN VARCHAR2
113 , p_source_code                     IN VARCHAR2
114 , p_source_type_code                IN VARCHAR2
115 , p_source_application_id           IN INTEGER
116 )
117 RETURN VARCHAR2
118 ;
119 
120 FUNCTION CreateJournalEntries(
121         p_application_id         IN NUMBER
122       , p_base_ledger_id         IN NUMBER
123       , p_pad_start_date         IN DATE
124       , p_pad_end_date           IN DATE
125       , p_primary_ledger_id      IN NUMBER)
126 RETURN NUMBER;
127 --
128 --
129 END $PACKAGE_NAME$;
130 --
131 ';
132 --
133 
134 
135 --+==========================================================================+
136 --|   Template Body package associated to a Product Accounting definition    |
137 --+==========================================================================+
138 --
139 C_PACKAGE_BODY_1   CONSTANT VARCHAR2(10000) := '
140 --
141 CREATE OR REPLACE PACKAGE BODY $PACKAGE_NAME$ AS
142 --
143 $header$
144 --
145 --
146 TYPE t_rec_array_event IS RECORD
147    (array_legal_entity_id                XLA_AE_JOURNAL_ENTRY_PKG.t_array_Num
148    ,array_entity_id                      XLA_AE_JOURNAL_ENTRY_PKG.t_array_Num
149    ,array_entity_code                    XLA_AE_JOURNAL_ENTRY_PKG.t_array_V30L
150    ,array_transaction_num                XLA_AE_JOURNAL_ENTRY_PKG.t_array_V240L
151    ,array_event_id                       xla_number_array_type --XLA_AE_JOURNAL_ENTRY_PKG.t_array_Num
152    ,array_class_code                     XLA_AE_JOURNAL_ENTRY_PKG.t_array_V30L
153    ,array_event_type                     XLA_AE_JOURNAL_ENTRY_PKG.t_array_V30L
154    ,array_event_number                   XLA_AE_JOURNAL_ENTRY_PKG.t_array_Num
155    ,array_event_date                     XLA_AE_JOURNAL_ENTRY_PKG.t_array_Date
156    ,array_reference_num_1                XLA_AE_JOURNAL_ENTRY_PKG.t_array_Num
157    ,array_reference_num_2                XLA_AE_JOURNAL_ENTRY_PKG.t_array_Num
158    ,array_reference_num_3                XLA_AE_JOURNAL_ENTRY_PKG.t_array_Num
159    ,array_reference_num_4                XLA_AE_JOURNAL_ENTRY_PKG.t_array_Num
160    ,array_reference_char_1               XLA_AE_JOURNAL_ENTRY_PKG.t_array_V240L
161    ,array_reference_char_2               XLA_AE_JOURNAL_ENTRY_PKG.t_array_V240L
162    ,array_reference_char_3               XLA_AE_JOURNAL_ENTRY_PKG.t_array_V240L
163    ,array_reference_char_4               XLA_AE_JOURNAL_ENTRY_PKG.t_array_V240L
164    ,array_reference_date_1               XLA_AE_JOURNAL_ENTRY_PKG.t_array_Date
165    ,array_reference_date_2               XLA_AE_JOURNAL_ENTRY_PKG.t_array_Date
166    ,array_reference_date_3               XLA_AE_JOURNAL_ENTRY_PKG.t_array_Date
167    ,array_reference_date_4               XLA_AE_JOURNAL_ENTRY_PKG.t_array_Date
168    ,array_event_created_by               XLA_AE_JOURNAL_ENTRY_PKG.t_array_V100L
169    );
170 --
171 type t_array_value_num is table of number index by varchar2(30);
172 type t_array_value_char is table of varchar2(240) index by varchar2(30);
173 type t_array_value_date is table of date index by varchar2(30);
174 
175 type t_rec_value is record
176  (array_value_num     t_array_value_num
177  ,array_value_char    t_array_value_char
178  ,array_value_date    t_array_value_date);
179 
180 type t_array_event is table of  t_rec_value index by varchar2(15); -- 8761772
181 
182 g_array_event   t_array_event;
183 
184 --=============================================================================
185 --               *********** Diagnostics **********
186 --=============================================================================
187 
188 g_diagnostics_mode          VARCHAR2(1);
189 g_last_hdr_idx              NUMBER;        -- 4262811 MPA
190 g_hdr_extract_count         PLS_INTEGER;
191 
192 --=============================================================================
193 --               *********** Local Trace Routine **********
194 --=============================================================================
195 
196 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
197 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
198 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
199 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
200 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
201 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
202 
203 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
204 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := ''xla.plsql.$PACKAGE_NAME$'';
205 
206 C_CHAR                CONSTANT       VARCHAR2(30) := fnd_global.local_chr(12); -- 4219869 Business flow
207 C_NUM                 CONSTANT       NUMBER       := 9.99E125;                 -- 4219869 Business flow
208 
209 g_log_level           NUMBER;
210 g_log_enabled         BOOLEAN;
211 
212 PROCEDURE trace
213            (p_msg                        IN VARCHAR2
214            ,p_level                      IN NUMBER
215            ,p_module                     IN VARCHAR2 ) IS
216 BEGIN
217 ----------------------------------------------------------------------------
218 -- Following is for FND log.
219 ----------------------------------------------------------------------------
220 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
221           fnd_log.message(p_level, p_module);
222 ELSIF p_level >= g_log_level THEN
223           fnd_log.string(p_level, p_module, p_msg);
224 END IF;
225 
226 EXCEPTION
227        WHEN xla_exceptions_pkg.application_exception THEN
228           RAISE;
229        WHEN OTHERS THEN
230           xla_exceptions_pkg.raise_message
231              (p_location   => ''$PACKAGE_NAME$.trace'');
232 END trace;
233 
234 --
235 --+============================================+
236 --|                                            |
237 --|  PRIVATE  PROCEDURES/FUNCTIONS             |
238 --|                                            |
239 --+============================================+
240 --
241 '
242 ;
243 
244 C_PRIVATE_API_1   CONSTANT VARCHAR2(32000) := '
245 --
246 /*======================================================================+
247 |                                                                       |
248 | Private Function                                                      |
249 |    ValidateLookupMeaning                                              |
250 |                                                                       |
251 +======================================================================*/
252 FUNCTION ValidateLookupMeaning(
253   p_meaning                IN VARCHAR2
254 , p_lookup_code            IN VARCHAR2
255 , p_lookup_type            IN VARCHAR2
256 , p_source_code            IN VARCHAR2
257 , p_source_type_code       IN VARCHAR2
258 , p_source_application_id  IN INTEGER
259 )
260 RETURN VARCHAR2
261 IS
262 l_log_module         VARCHAR2(240);
263 BEGIN
264 IF g_log_enabled THEN
265       l_log_module := C_DEFAULT_MODULE||''.ValidateLookupMeaning'';
266 END IF;
267 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
268       trace
269          (p_msg      => ''BEGIN of ValidateLookupMeaning''
270          ,p_level    => C_LEVEL_PROCEDURE
271          ,p_module   => l_log_module);
272 END IF;
273 --
274 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
275     trace
276          (p_msg      => ''p_source_code = ''|| p_source_code||
277                         '' - p_source_type_code = ''|| p_source_type_code||
278                         '' - p_source_application_id = ''|| p_source_application_id||
279                         '' - p_lookup_code = ''|| p_lookup_code||
280                         '' - p_lookup_type = ''|| p_lookup_type||
281                         '' - p_meaning = ''|| p_meaning
282          ,p_level    => C_LEVEL_PROCEDURE
283          ,p_module   => l_log_module);
284 
285 END IF;
286 
287 IF p_lookup_code IS NOT NULL AND p_meaning IS NULL THEN
288    xla_ae_journal_entry_pkg.g_global_status      :=  xla_ae_journal_entry_pkg.C_INVALID;
289    xla_accounting_err_pkg. build_message
290                (p_appli_s_name            => ''XLA''
291                ,p_msg_name                => ''XLA_AP_NO_LOOKUP_MEANING''
292                ,p_token_1                 => ''SOURCE_NAME''
293                ,p_value_1                 =>  xla_ae_sources_pkg.GetSourceName(
294                                                            p_source_code
295                                                          , p_source_type_code
296                                                          , p_source_application_id
297                                                          )
298                ,p_token_2                 => ''LOOKUP_CODE''
299                ,p_value_2                 =>  p_lookup_code
300                ,p_token_3                 => ''LOOKUP_TYPE''
301                ,p_value_3                 =>  p_lookup_type
302                ,p_token_4                 => ''PRODUCT_NAME''
303                ,p_value_4                 => xla_ae_journal_entry_pkg.g_cache_event.application_name
304                ,p_entity_id               => xla_ae_journal_entry_pkg.g_cache_event.entity_id
305                ,p_event_id                => xla_ae_journal_entry_pkg.g_cache_event.event_id
306                ,p_ledger_id               => xla_ae_journal_entry_pkg.g_cache_event.target_ledger_id
307        );
308 
309    IF (C_LEVEL_ERROR >= g_log_level) THEN
310            trace
311                 (p_msg      => ''ERROR: XLA_AP_NO_LOOKUP_MEANING''
312                 ,p_level    => C_LEVEL_ERROR
313                 ,p_module   => l_log_module);
314    END IF;
315 END IF;
316 
317 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
318         trace
319           (p_msg      => ''END of ValidateLookupMeaning''
320           ,p_level    => C_LEVEL_PROCEDURE
321           ,p_module   => l_log_module);
322 END IF;
323 RETURN p_meaning;
324 EXCEPTION
325 WHEN xla_exceptions_pkg.application_exception THEN
326   RETURN p_meaning;
327 WHEN OTHERS  THEN
328    xla_exceptions_pkg.raise_message
329            (p_location => ''$PACKAGE_NAME$.ValidateLookupMeaning'');
330        --
331 END ValidateLookupMeaning;
332 --
333 --
334 ';
335 --
336 --
337 --
338 C_PACKAGE_BODY_2   CONSTANT VARCHAR2(32000) := '
339 --
340 --+============================================+
341 --|                                            |
342 --|  PUBLIC FUNCTION                           |
343 --|                                            |
344 --+============================================+
345 --
346 FUNCTION CreateJournalEntries
347        (p_application_id         IN NUMBER
348        ,p_base_ledger_id         IN NUMBER
349        ,p_pad_start_date         IN DATE
350        ,p_pad_end_date           IN DATE
351        ,p_primary_ledger_id      IN NUMBER)
352 RETURN NUMBER IS
353 l_log_module                   VARCHAR2(240);
354 l_array_ledgers                xla_accounting_cache_pkg.t_array_ledger_id;
355 l_temp_result                  BOOLEAN;
356 l_result                       NUMBER;
357 BEGIN
358 --
359 IF g_log_enabled THEN
360    l_log_module := C_DEFAULT_MODULE||''.CreateJournalEntries'';
361 END IF;
362 --
363 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
364    trace
365       (p_msg      => ''BEGIN of CreateJournalEntries''||
366                      '' - p_base_ledger_id = ''||TO_CHAR(p_base_ledger_id)
367       ,p_level    => C_LEVEL_PROCEDURE
368       ,p_module   => l_log_module);
369 
370 END IF;
371 
372 --
373 g_diagnostics_mode:= xla_accounting_engine_pkg.g_diagnostics_mode;
374 
375 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
376    trace
377       (p_msg      => ''g_diagnostics_mode = ''||g_diagnostics_mode
378       ,p_level    => C_LEVEL_STATEMENT
379       ,p_module   => l_log_module);
380 END IF;
381 --
382 xla_ae_journal_entry_pkg.SetProductAcctDefinition
383    (p_product_rule_code      => ''$PRODUCT_RULE_CODE$''
384    ,p_product_rule_type_code => ''$PRODUCT_RULE_TYPE_CODE$''
385    ,p_product_rule_version   => ''$PRODUCT_RULE_VERSION$''
386    ,p_product_rule_name      => ''$PRODUCT_RULE_NAME$''
387    ,p_amb_context_code       => ''$AMB_CONTEXT_CODE$''
388    );
389 
390 l_array_ledgers :=
391    xla_ae_journal_entry_pkg.GetAlternateCurrencyLedger
392       (p_base_ledger_id  => p_base_ledger_id);
393 
394 FOR Idx IN 1 .. l_array_ledgers.COUNT LOOP
395    l_temp_result :=
396       XLA_AE_JOURNAL_ENTRY_PKG.GetLedgersInfo
397          (p_application_id           => p_application_id
398          ,p_base_ledger_id           => p_base_ledger_id
399          ,p_target_ledger_id         => l_array_ledgers(Idx)
400          ,p_primary_ledger_id        => p_primary_ledger_id
401          ,p_pad_start_date           => p_pad_start_date
402          ,p_pad_end_date             => p_pad_end_date);
403 
404    l_temp_result :=
405       l_temp_result AND
406       CreateHeadersAndLines
407          (p_application_id             => p_application_id
408          ,p_base_ledger_id             => p_base_ledger_id
409          ,p_target_ledger_id           => l_array_ledgers(Idx)
410          ,p_pad_start_date             => p_pad_start_date
411          ,p_pad_end_date               => p_pad_end_date
412          ,p_primary_ledger_id          => p_primary_ledger_id
413          );
414 END LOOP;
415 
416 
417 IF (g_diagnostics_mode = ''Y'' AND
418     C_LEVEL_UNEXPECTED >= g_log_level AND
419     xla_environment_pkg.g_Req_Id IS NOT NULL ) THEN
420 
421    xla_accounting_dump_pkg.acctg_event_extract_log(
422     p_application_id  => p_application_id
423     ,p_request_id     => xla_environment_pkg.g_Req_Id
424    );
425 
426 END IF;
427 
428 CASE l_temp_result
429   WHEN TRUE THEN l_result := 0;
430   ELSE l_result := 2;
431 END CASE;
432 
433 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
434    trace
435       (p_msg      => ''return value. = ''||TO_CHAR(l_result)
436       ,p_level    => C_LEVEL_PROCEDURE
437       ,p_module   => l_log_module);
438    trace
439       (p_msg      => ''END of CreateJournalEntries ''
440       ,p_level    => C_LEVEL_PROCEDURE
441       ,p_module   => l_log_module);
442 END IF;
443 
444 RETURN l_result;
445 EXCEPTION
446 WHEN xla_exceptions_pkg.application_exception THEN
447    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
448    trace
449       (p_msg      => ''ERROR. = ''||sqlerrm
450       ,p_level    => C_LEVEL_PROCEDURE
451       ,p_module   => l_log_module);
452    END IF;
453    RAISE;
454 WHEN OTHERS THEN
455    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
456    trace
457       (p_msg      => ''ERROR. = ''||sqlerrm
458       ,p_level    => C_LEVEL_PROCEDURE
459       ,p_module   => l_log_module);
460    END IF;
461    xla_exceptions_pkg.raise_message
462       (p_location => ''$PACKAGE_NAME$.CreateJournalEntries'');
463 END CreateJournalEntries;
464 --
465 --=============================================================================
466 --
467 --
468 --
469 --
470 --
471 --
472 --
473 --
474 --
475 --
476 --
477 --
478 --
479 --
480 --
481 --
482 --
483 --
484 --
485 --
486 --
487 --
488 --=============================================================================
489 --=============================================================================
490 --          *********** Initialization routine **********
491 --=============================================================================
492 
493 BEGIN
494    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
495    g_log_enabled    := fnd_log.test
496                           (log_level  => g_log_level
497                           ,module     => C_DEFAULT_MODULE);
498 
499    IF NOT g_log_enabled  THEN
500       g_log_level := C_LEVEL_LOG_DISABLED;
501    END IF;
502 --
503 END $PACKAGE_NAME$;
504 --
505 ';
506 --
507 --
508 --
509 --+==========================================================================+
510 --|                                                                          |
511 --| Private global variable                                                  |
512 --|                                                                          |
513 --+==========================================================================+
514 --
515 g_UserName                      VARCHAR2(100);
516 g_PackageName                   VARCHAR2(30);
517 g_ProductRuleName               VARCHAR2(80);
518 g_ProductRuleVersion            VARCHAR2(30);
519 
520 --+==========================================================================+
521 --|                                                                          |
522 --| Private global constant or variable declarations                         |
523 --|                                                                          |
524 --+==========================================================================+
525 --
526 g_chr_newline      CONSTANT VARCHAR2(10):= xla_environment_pkg.g_chr_newline;
527 --
528 --+==========================================================================+
529 --|                                                                          |
530 --|                                                                          |
531 --|                                                                          |
532 --|                                                                          |
533 --|                                                                          |
534 --|                                                                          |
535 --|                                                                          |
536 --|                                                                          |
537 --|                                                                          |
538 --|                                                                          |
539 --|                                                                          |
540 --|                                                                          |
541 --|                                                                          |
542 --|                                                                          |
543 --|                                                                          |
544 --|                                                                          |
545 --|                                                                          |
546 --|                                                                          |
547 --|                                                                          |
548 --|                                                                          |
549 --|                                                                          |
550 --|                                                                          |
551 --|                                                                          |
552 --|                                                                          |
553 --|                                                                          |
554 --|                                                                          |
555 --|                                                                          |
556 --|                                                                          |
557 --|                                                                          |
558 --|                                                                          |
559 --+==========================================================================+
560 --=============================================================================
561 --               *********** Local Trace Routine **********
562 --=============================================================================
563 
564 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
565 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
566 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
567 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
568 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
569 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
570 
571 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
572 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_cmp_pad_pkg';
573 
574 g_log_level           NUMBER;
575 g_log_enabled         BOOLEAN;
576 
577 PROCEDURE trace
578            (p_msg                        IN VARCHAR2
579            ,p_level                      IN NUMBER
580            ,p_module                     IN VARCHAR2 ) IS
581 BEGIN
582 ----------------------------------------------------------------------------
583 -- Following is for FND log.
584 ----------------------------------------------------------------------------
585 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
586           fnd_log.message(p_level, p_module);
587 ELSIF p_level >= g_log_level THEN
588           fnd_log.string(p_level, p_module, p_msg);
589 END IF;
590 
591 EXCEPTION
592        WHEN xla_exceptions_pkg.application_exception THEN
593           RAISE;
594        WHEN OTHERS THEN
595           xla_exceptions_pkg.raise_message
596              (p_location   => 'xla_cmp_pad_pkg.trace');
597 END trace;
598 --+==========================================================================+
599 --|                                                                          |
600 --| OVERVIEW of private procedures and functions                             |
601 --|                                                                          |
602 --+==========================================================================+
603 
604 --+==========================================================================+
605 --| PRIVATE procedures and functions                                         |
606 --|                                                                          |
607 --|                                                                          |
608 --|                                                                          |
609 --|                                                                          |
610 --|                                                                          |
611 --|                                                                          |
612 --|                                                                          |
613 --|                                                                          |
614 --|                                                                          |
615 --|                                                                          |
616 --|                                                                          |
617 --|                                                                          |
618 --|                                                                          |
619 --|                                                                          |
620 --|                                                                          |
621 --|                                                                          |
622 --|                                                                          |
623 --|                                                                          |
624 --|                                                                          |
625 --|                                                                          |
626 --|                                                                          |
627 --|                                                                          |
628 --|                                                                          |
629 --|                                                                          |
630 --|                                                                          |
631 --|                                                                          |
632 --|                                                                          |
633 --|                                                                          |
634 --|                                                                          |
635 --|                                                                          |
636 --+==========================================================================+
637 
638 /*-------------------------------------------------------------+
639 |                                                              |
640 |  Private function                                            |
641 |                                                              |
642 |  return the application name                                 |
643 |                                                              |
644 +-------------------------------------------------------------*/
645 
646 FUNCTION GetApplicationName (p_application_id   IN NUMBER)
647 RETURN VARCHAR2
648 IS
649 l_application_name          VARCHAR2(240);
650 l_log_module                VARCHAR2(240);
651 BEGIN
652 IF g_log_enabled THEN
653       l_log_module := C_DEFAULT_MODULE||'.GetApplicationName';
654 END IF;
655 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
656       trace
657          (p_msg      => 'BEGIN of GetApplicationName'
658          ,p_level    => C_LEVEL_PROCEDURE
659          ,p_module   => l_log_module);
660 END IF;
661 
662   SELECT  REPLACE(fat.application_name, '''','''''')
663     INTO  l_application_name
664     FROM  fnd_application_tl fat
665    WHERE  fat.application_id = p_application_id
666      AND  fat.language = nvl(USERENV('LANG'),fat.language)
667      ;
668 
669 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
670       trace
671          (p_msg      => 'END of GetApplicationName'
672          ,p_level    => C_LEVEL_PROCEDURE
673          ,p_module   => l_log_module);
674 END IF;
675 RETURN l_application_name;
676 EXCEPTION
677  WHEN OTHERS THEN
678     RETURN TO_CHAR(p_application_id);
679 END GetApplicationName;
680 
681 /*------------------------------------------------+
682 |                                                 |
683 |  Private function                               |
684 |                                                 |
685 |  return the user name                           |
686 |                                                 |
687 +------------------------------------------------*/
688 
689 FUNCTION GetUserName
690 RETURN VARCHAR2
691 IS
692 --
693  l_user_name                  VARCHAR2(100);
694  l_log_module         VARCHAR2(240);
695 --
696 BEGIN
697 IF g_log_enabled THEN
698       l_log_module := C_DEFAULT_MODULE||'.GetUserName';
699 END IF;
700 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
701       trace
702          (p_msg      => 'BEGIN of GetUserName'
703          ,p_level    => C_LEVEL_PROCEDURE
704          ,p_module   => l_log_module);
705 
706 END IF;
707 
708 xla_environment_pkg.refresh;
709 
710 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
711       trace
712          (p_msg      => 'SQL - Select from fnd_user'
713          ,p_level    => C_LEVEL_STATEMENT
714          ,p_module   => l_log_module);
715 
716 END IF;
717 
718      SELECT  nvl(fd.user_name, 'ANONYMOUS')
719        INTO  l_user_name
720        FROM  fnd_user fd
721       WHERE  fd.user_id = xla_environment_pkg.g_Usr_Id
722      ;
723 
724 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
725       trace
726          (p_msg      => 'User name = ' || l_user_name
727          ,p_level    => C_LEVEL_PROCEDURE
728          ,p_module   => l_log_module);
729       trace
730          (p_msg      => 'END of GetUserName'
731          ,p_level    => C_LEVEL_PROCEDURE
732          ,p_module   => l_log_module);
733 END IF;
734 RETURN l_user_name;
735 EXCEPTION
736    WHEN NO_DATA_FOUND THEN
737         l_user_name := 'ANONYMOUS';
738         RETURN l_user_name;
739    WHEN xla_exceptions_pkg.application_exception   THEN
740         RETURN NULL;
741    WHEN OTHERS    THEN
742       xla_exceptions_pkg.raise_message
743          (p_location => 'xla_cmp_pad_pkg.GetUserName');
744 END GetUserName;
745 
746 /*--------------------------------------------------------------+
747 |                                                               |
748 |  Private function                                             |
749 |                                                               |
750 |  return the Application Accounting Definition name            |
751 |                                                               |
752 +--------------------------------------------------------------*/
753 
754 FUNCTION GetPADName      (   p_application_id            IN NUMBER
755                            , p_product_rule_code         IN VARCHAR2
756                            , p_product_rule_type_code    IN VARCHAR2
757                            , p_product_rule_version      IN VARCHAR2
758                            , p_amb_context_code          IN VARCHAR2
759                           )
760 RETURN VARCHAR2
761 IS
762 l_product_rule_name          VARCHAR2(80);
763 l_log_module                 VARCHAR2(240);
764 BEGIN
765 IF g_log_enabled THEN
766       l_log_module := C_DEFAULT_MODULE||'.GetPADName';
767 END IF;
768 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
769       trace
770          (p_msg      => 'BEGIN of GetPADName'
771          ,p_level    => C_LEVEL_PROCEDURE
772          ,p_module   => l_log_module);
773 END IF;
774 
775      SELECT nvl(xprt.name, p_product_rule_code)
776           , nvl(p_product_rule_version,xprb.product_rule_version)
777       INTO  l_product_rule_name
778           , g_ProductRuleVersion
779       FROM  xla_product_rules_tl xprt
780           , xla_product_rules_b  xprb
781      WHERE  xprb.application_id                  = p_application_id
782         AND xprb.product_rule_code               = p_product_rule_code
783         AND xprb.product_rule_type_code          = p_product_rule_type_code
784         AND xprb.application_id                  = xprt.application_id (+)
785         AND xprb.product_rule_code               = xprt.product_rule_code (+)
786         AND xprb.product_rule_type_code          = xprt.product_rule_type_code (+)
787         AND xprb.amb_context_code                = xprt.amb_context_code (+)
788         AND xprb.amb_context_code                = p_amb_context_code
789         AND xprb.enabled_flag                    ='Y'
790         AND xprt.language(+)                     = USERENV('LANG')
791       ;
792 
793 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
794       trace
795          (p_msg      => 'product_rule_name = ' || l_product_rule_name
796          ,p_level    => C_LEVEL_PROCEDURE
797          ,p_module   => l_log_module);
798       trace
799          (p_msg      => 'END of GetUserName'
800          ,p_level    => C_LEVEL_PROCEDURE
801          ,p_module   => l_log_module);
802 END IF;
803 RETURN l_product_rule_name ;
804 EXCEPTION
805    WHEN NO_DATA_FOUND  OR TOO_MANY_ROWS THEN
806       RETURN p_product_rule_code;
807    WHEN xla_exceptions_pkg.application_exception   THEN
808         RETURN p_product_rule_code;
809    WHEN OTHERS    THEN
810       xla_exceptions_pkg.raise_message
811          (p_location => 'xla_cmp_pad_pkg.GetPADName');
812 END GetPADName;
813 
814 /*--------------------------------------------------------------+
815 |                                                               |
816 |  Private function                                             |
817 |                                                               |
818 |  Create the comment in the AAD packages                       |
819 |                                                               |
820 +--------------------------------------------------------------*/
821 FUNCTION InsertString(  p_InputString   IN VARCHAR2
822                       , p_token         IN VARCHAR2
823                       , p_value         IN VARCHAR2)
824 RETURN VARCHAR2
825 IS
826   l_OutputString      VARCHAR2(2000);
827 BEGIN
828    --
829    l_OutputString := REPLACE(p_InputString,p_token,p_value);
830    l_OutputString := SUBSTR(l_OutputString,1,66);
831    l_OutputString := l_Outputstring  || LPAD('|', 67- LENGTH(l_OutputString));
832    --
833    return l_OutputString ;
834 END InsertString;
835 
836 /*--------------------------------------------------------------+
837 |                                                               |
838 |  Private function                                             |
839 |                                                               |
840 |      GeneratePkgComment                                       |
841 |                                                               |
842 |  Create the comment in the AAD packages                       |
843 |                                                               |
844 +--------------------------------------------------------------*/
845 
846 FUNCTION GeneratePkgComment ( p_user_name              IN VARCHAR2
847                             , p_package_name           IN VARCHAR2
848                             , p_product_rule_code      IN VARCHAR2
849                             , p_product_rule_type_code IN VARCHAR2
850                             , p_product_rule_name      IN VARCHAR2
851                             , p_product_rule_version   IN VARCHAR2
852                             , p_amb_context_code       IN VARCHAR2
853                             )
854 RETURN VARCHAR2
855 IS
856 
857 l_header                 VARCHAR2(32000);
858 l_StringValue            VARCHAR2(2000);
859 l_log_module             VARCHAR2(240);
860 BEGIN
861 IF g_log_enabled THEN
862       l_log_module := C_DEFAULT_MODULE||'.GeneratePkgComment';
863 END IF;
864 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
865       trace
866          (p_msg      => 'BEGIN of GeneratePkgComment'
867          ,p_level    => C_LEVEL_PROCEDURE
868          ,p_module   => l_log_module);
869 
870 END IF;
871 
872 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
873       trace
874          (p_msg      => 'p_user_name = '||p_user_name||
875                        ' - p_package_name = '||p_package_name||
876                        ' - p_product_rule_code = '||p_product_rule_code||
877                        ' - p_product_rule_type_code = '||p_product_rule_type_code||
878                        ' - p_product_rule_name = '||p_product_rule_name||
879                        ' - p_product_rule_version = '||p_product_rule_version||
880                        ' - p_amb_context_code = '||p_amb_context_code
881          ,p_level    => C_LEVEL_STATEMENT
882          ,p_module   => l_log_module);
883 END IF;
884 
885 l_header := C_COMMENT;
886 
887 l_StringValue   := InsertString( p_InputString => '$pkg_name'
888                                 ,p_token       => '$pkg_name'
889                                 ,p_value       =>  p_package_name
890                                );
891 
892 l_header := REPLACE(l_header,'$name',l_StringValue);
893 
894 l_StringValue := InsertString(p_InputString => ' Name    : $name '
895                         ,p_token       => '$name'
896                         ,p_value       =>  p_product_rule_name
897                         );
898 
899 l_header := REPLACE(l_header,'$pad_name$',l_StringValue);
900 
901 IF p_product_rule_code IS NOT NULL THEN
902  --
903    l_StringValue     := InsertString(p_InputString => ' Code    : $code'
904                                     ,p_token       => '$code'
905                                     ,p_value       => p_product_rule_code
906                                    );
907 ELSE
908    l_StringValue     := InsertString(p_InputString => ' Code    : $code'
909                                    ,p_token       => '$code'
910                                    ,p_value       => '  '
911                                    );
912 END IF;
913 l_header := REPLACE(l_header,'$pad_code$',l_StringValue);
914 
915 IF p_product_rule_type_code IS NOT NULL AND p_product_rule_type_code = 'S' THEN
916  --
917    l_StringValue     := InsertString(p_InputString => ' Owner   : $owner'
918                                     ,p_token       => '$owner'
919                                     ,p_value       => 'PRODUCT'
920                                    );
921 ELSIF p_product_rule_type_code IS NOT NULL AND p_product_rule_type_code = 'C' THEN
922 
923    l_StringValue     := InsertString(p_InputString => ' Owner   : $owner'
924                                     ,p_token       => '$owner'
925                                     ,p_value       => 'CUSTOMER'
926                                    );
927 ELSE
928    l_StringValue     := InsertString(p_InputString => ' Owner   : $owner'
929                                    ,p_token       => '$owner'
930                                    ,p_value       => '  '
931                                    );
932 END IF;
933 l_header := REPLACE(l_header,'$pad_owner$',l_StringValue);
934 --
935 -- insert PAD context
936 --
937 IF p_amb_context_code IS NOT NULL THEN
938  --
939    l_StringValue     := InsertString(p_InputString => ' AMB Context Code: $context'
940                                     ,p_token       => '$context'
941                                     ,p_value       => p_amb_context_code
942                                    );
943 ELSE
944   l_StringValue     := InsertString(p_InputString => ' AMB Context Code : $context'
945                                    ,p_token       => '$context'
946                                    ,p_value       => '  '
947                                    );
948 END IF;
949 l_header := REPLACE(l_header,'$pad_context$',l_StringValue);
950 --
951 --
952 IF g_ProductRuleVersion IS NOT NULL THEN
953  --
954    l_StringValue     := InsertString(p_InputString => ' Version : $version'
955                                     ,p_token       => '$version'
956                                     ,p_value       => g_ProductRuleVersion
957                                    );
958 ELSE
959   l_StringValue     := InsertString(p_InputString => ' Version : $version'
960                                    ,p_token       => '$version'
961                                    ,p_value       => '  '
962                                    );
963 END IF;
964 l_header := REPLACE(l_header,'$pad_version$',l_StringValue);
965 
966 l_StringValue   := REPLACE('Generated at $date by user $user ' ,'$date',
967                           TO_CHAR(sysdate, 'DD-MM-YYYY "at" HH:MM:SS' ));
968 
969 l_StringValue   := InsertString(p_InputString => l_StringValue
970                                ,p_token       => '$user'
971                                ,p_value       => p_user_name
972                               );
973 l_header := REPLACE(l_header,'$history',l_StringValue );
974 
975 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
976       trace
977          (p_msg      => 'END of GeneratePkgComment'
978          ,p_level    => C_LEVEL_PROCEDURE
979          ,p_module   => l_log_module);
980 END IF;
981 RETURN l_header;
982 EXCEPTION
983    WHEN OTHERS THEN
984         RETURN NULL;
985 END GeneratePkgComment;
986 
987 
988 /*--------------------------------------------------------------+
989 |                                                               |
990 |                                                               |
991 |                                                               |
992 |       Generation of AAD specification packages                |
993 |                                                               |
994 |                                                               |
995 |                                                               |
996 +--------------------------------------------------------------*/
997 
998 
999 /*--------------------------------------------------------------+
1000 |                                                               |
1001 |  Private function                                             |
1002 |                                                               |
1003 |     BuildSpecPkg                                              |
1004 |                                                               |
1005 |  Creates the AAD specification packages                       |
1006 |                                                               |
1007 +--------------------------------------------------------------*/
1008 
1009 FUNCTION BuildSpecPkg(   p_user_name              IN VARCHAR2
1010                        , p_package_name           IN VARCHAR2
1011                        , p_product_rule_code      IN VARCHAR2
1012                        , p_product_rule_type_code IN VARCHAR2
1013                        , p_product_rule_name      IN VARCHAR2
1014                        , p_product_rule_version   IN VARCHAR2
1015                        , p_amb_context_code       IN VARCHAR2)
1016 RETURN VARCHAR2
1017 IS
1018 l_SpecPkg            VARCHAR2(32000);
1019 l_log_module         VARCHAR2(240);
1020 BEGIN
1021 IF g_log_enabled THEN
1022       l_log_module := C_DEFAULT_MODULE||'.BuildSpecPkg';
1023 END IF;
1024 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1025       trace
1026          (p_msg      => 'BEGIN of BuildSpecPkg'
1027          ,p_level    => C_LEVEL_PROCEDURE
1028          ,p_module   => l_log_module);
1029 
1030 END IF;
1031 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1032       trace
1033          (p_msg      => 'p_user_name = '||p_user_name||
1034                        ' - p_package_name = '||p_package_name||
1035                        ' - p_product_rule_code = '||p_product_rule_code||
1036                        ' - p_product_rule_type_code = '||p_product_rule_type_code||
1037                        ' - p_product_rule_name = '||p_product_rule_name||
1038                        ' - p_product_rule_version = '||p_product_rule_version||
1039                        ' - p_amb_context_code = '||p_amb_context_code
1040          ,p_level    => C_LEVEL_STATEMENT
1041          ,p_module   => l_log_module);
1042 END IF;
1043 
1044 l_SpecPkg   := C_PACKAGE_SPEC;
1045 
1046 l_SpecPkg   := REPLACE(l_SpecPkg,'$PACKAGE_NAME$',p_package_name);
1047 
1048 l_SpecPkg   := REPLACE(l_SpecPkg,'$header$',GeneratePkgComment (
1049                                   p_user_name               => p_user_name
1050                                 , p_package_name            => p_package_name
1051                                 , p_product_rule_code       => p_product_rule_code
1052                                 , p_product_rule_type_code  => p_product_rule_type_code
1053                                 , p_product_rule_name       => p_product_rule_name
1054                                 , p_product_rule_version    => p_product_rule_version
1055                                 , p_amb_context_code        => p_amb_context_code
1056                              ) );
1057 
1058 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1059       trace
1060          (p_msg      => 'END of BuildSpecPkg = '||length(l_SpecPkg)
1061          ,p_level    => C_LEVEL_PROCEDURE
1062          ,p_module   => l_log_module);
1063 
1064 END IF;
1065 RETURN l_SpecPkg ;
1066 EXCEPTION
1067   WHEN xla_exceptions_pkg.application_exception   THEN
1068        RETURN NULL;
1069   WHEN OTHERS    THEN
1070        xla_exceptions_pkg.raise_message
1071             (p_location => 'xla_cmp_pad_pkg.BuildSpecPkg');
1072 END BuildSpecPkg;
1073 
1074 /*--------------------------------------------------------------+
1075 |                                                               |
1076 |  Private function                                             |
1077 |                                                               |
1078 |     GenerateSpecPackage                                       |
1079 |                                                               |
1080 | Generates the AAD specifcation packages from AAD definitions  |
1081 | Returns TRUE if the compiler succeeds to generate the spec.   |
1082 | package, FALSE otherwise.                                     |
1083 +--------------------------------------------------------------*/
1084 
1085 FUNCTION GenerateSpecPackage(
1086   p_application_id               IN NUMBER
1087 , p_product_rule_code            IN VARCHAR2
1088 , p_product_rule_type_code       IN VARCHAR2
1089 , p_product_rule_version         IN VARCHAR2
1090 , p_amb_context_code             IN VARCHAR2
1091 , p_package                     OUT NOCOPY VARCHAR2
1092 )
1093 RETURN BOOLEAN
1094 IS
1095 l_log_module         VARCHAR2(240);
1096 BEGIN
1097 IF g_log_enabled THEN
1098       l_log_module := C_DEFAULT_MODULE||'.GenerateSpecPackage';
1099 END IF;
1100 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1101       trace
1102          (p_msg      => 'BEGIN of GenerateSpecPackage'
1103          ,p_level    => C_LEVEL_PROCEDURE
1104          ,p_module   => l_log_module);
1105 END IF;
1106 
1107 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1108       trace
1109          (p_msg      =>' p_product_rule_code = '||p_product_rule_code||
1110                        ' - p_product_rule_type_code = '||p_product_rule_type_code||
1111                        ' - p_application_id = '||p_application_id||
1112                        ' - p_product_rule_version = '||p_product_rule_version||
1113                        ' - p_amb_context_code = '||p_amb_context_code
1114          ,p_level    => C_LEVEL_STATEMENT
1115          ,p_module   => l_log_module);
1116 END IF;
1117 
1118 p_package  := BuildSpecPkg(
1119                p_user_name               => g_UserName
1120              , p_package_name            => g_PackageName
1121              , p_product_rule_code       => p_product_rule_code
1122              , p_product_rule_type_code  => p_product_rule_type_code
1123              , p_product_rule_name       => g_ProductRuleName
1124              , p_product_rule_version    => p_product_rule_version
1125              , p_amb_context_code        => p_amb_context_code
1126               );
1127 
1128 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1129       trace
1130          (p_msg      => 'END of GenerateSpecPackage'
1131          ,p_level    => C_LEVEL_PROCEDURE
1132          ,p_module   => l_log_module);
1133 END IF;
1134 RETURN (p_package IS NOT NULL);
1135 EXCEPTION
1136   WHEN xla_exceptions_pkg.application_exception   THEN
1137        RETURN FALSE;
1138   WHEN OTHERS    THEN
1139        xla_exceptions_pkg.raise_message
1140             (p_location => 'xla_cmp_pad_pkg.GenerateSpecPackage');
1141 END GenerateSpecPackage;
1142 
1143 /*------------------------------------------------------------------+
1144 |                                                                   |
1145 |  Private function                                                 |
1146 |                                                                   |
1147 |     CreateSpecPackage                                             |
1148 |                                                                   |
1149 | Creates/compiler the AAD specification packages in the DATABASE   |
1150 | It returns TRUE, if the package created is VALID, FALSE otherwise |
1151 |                                                                   |
1152 +------------------------------------------------------------------*/
1153 
1154 FUNCTION CreateSpecPackage (
1155                        p_application_id           IN NUMBER
1156                      , p_product_rule_code        IN VARCHAR2
1157                      , p_product_rule_type_code   IN VARCHAR2
1158                      , p_product_rule_version     IN VARCHAR2
1159                      , p_amb_context_code         IN VARCHAR2)
1160 RETURN BOOLEAN
1161 IS
1162 l_Package             VARCHAR2(32000);
1163 l_IsCompiled          BOOLEAN;
1164 l_log_module          VARCHAR2(240);
1165 BEGIN
1166 IF g_log_enabled THEN
1167       l_log_module := C_DEFAULT_MODULE||'.CreateSpecPackage';
1168 END IF;
1169 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1170       trace
1171          (p_msg      => 'BEGIN of CreateSpecPackage'
1172          ,p_level    => C_LEVEL_PROCEDURE
1173          ,p_module   => l_log_module);
1174 END IF;
1175 
1176 l_IsCompiled  := GenerateSpecPackage(
1177   p_application_id               => p_application_id
1178 , p_product_rule_code            => p_product_rule_code
1179 , p_product_rule_type_code       => p_product_rule_type_code
1180 , p_product_rule_version         => p_product_rule_version
1181 , p_amb_context_code             => p_amb_context_code
1182 , p_package                      => l_Package
1183 );
1184 
1185 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1186       trace
1187          (p_msg      =>' Compile the specification package in the DATABASE'||
1188                        ' - length of the package = '||length(l_Package)
1189          ,p_level    => C_LEVEL_STATEMENT
1190          ,p_module   => l_log_module);
1191 END IF;
1192 
1193 l_IsCompiled  := xla_cmp_create_pkg.CreateSpecPackage(
1194                       p_product_rule_name  =>  g_ProductRuleName
1195                     , p_package_name       =>  g_PackageName
1196                     , p_package_text       =>  l_Package
1197                     )
1198                 AND l_IsCompiled;
1199 
1200 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1201       trace
1202          (p_msg      => 'END of CreateSpecPackage : return = '
1203                         ||CASE WHEN l_IsCompiled THEN 'TRUE' ELSE 'FALSE' END
1204          ,p_level    => C_LEVEL_PROCEDURE
1205          ,p_module   => l_log_module);
1206 
1207 END IF;
1208 RETURN l_IsCompiled;
1209 EXCEPTION
1210    WHEN xla_exceptions_pkg.application_exception   THEN
1211         RETURN FALSE;
1212    WHEN OTHERS    THEN
1213       xla_exceptions_pkg.raise_message
1214          (p_location => 'xla_cmp_pad_pkg.CreateSpecPackage');
1215 END CreateSpecPackage;
1216 
1217 /*--------------------------------------------------------------+
1218 |                                                               |
1219 |                                                               |
1220 |                                                               |
1221 |                Generation of AAD Body packages                |
1222 |                                                               |
1223 |                                                               |
1224 |                                                               |
1225 +--------------------------------------------------------------*/
1226 
1227 /*--------------------------------------------------------------+
1228 |                                                               |
1229 |  Private function                                             |
1230 |                                                               |
1231 |     GeneratePrivateProcedures                                 |
1232 |                                                               |
1233 |  Generates private procedures and functions in AAD packages   |
1234 |                                                               |
1235 +--------------------------------------------------------------*/
1236 
1237 FUNCTION GeneratePrivateProcedures
1238        (p_application_id               IN NUMBER
1239        ,p_product_rule_code            IN VARCHAR2
1240        ,p_product_rule_type_code       IN VARCHAR2
1241        ,p_product_rule_name            IN VARCHAR2
1242        ,p_product_rule_version         IN VARCHAR2
1243        ,p_amb_context_code             IN VARCHAR2
1244        ,p_package_name                 IN VARCHAR2
1245        --
1246        ,p_rec_aad_objects              IN OUT NOCOPY xla_cmp_source_pkg.t_rec_aad_objects
1247        ,p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
1248        ,p_package_body                 OUT NOCOPY DBMS_SQL.VARCHAR2S)
1249 RETURN BOOLEAN IS
1250 --
1251 l_IsCompiled            BOOLEAN;
1252 l_IsGenerated           BOOLEAN;
1253 --
1254 l_array_body            DBMS_SQL.VARCHAR2S;
1255 l_array_string          DBMS_SQL.VARCHAR2S;
1256 l_log_module            VARCHAR2(240);
1257 --
1258 BEGIN
1259 IF g_log_enabled THEN
1260    l_log_module := C_DEFAULT_MODULE||'.GeneratePrivateProcedures';
1261 END IF;
1262 --
1263 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1264    trace
1265       (p_msg      => 'BEGIN of GeneratePrivateProcedures'
1266       ,p_level    => C_LEVEL_PROCEDURE
1267       ,p_module   => l_log_module);
1268 END IF;
1269 --
1270 l_IsCompiled         := TRUE;
1271 l_IsGenerated        := TRUE;
1272 
1273 -- generate description functions and the call to those functions
1274 l_array_body    := xla_cmp_string_pkg.g_null_varchar2s;
1275 l_array_string  := xla_cmp_string_pkg.g_null_varchar2s;
1276 
1277 --
1278 -- Generate Descriptions
1279 --
1280 
1281 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1282    trace
1283       (p_msg      => '-> CALL XLA_CMP_DESCRIPTION_PKG.GenerateDescriptions API'
1284       ,p_level    => C_LEVEL_STATEMENT
1285       ,p_module   => l_log_module);
1286 END IF;
1287 
1288 l_IsGenerated     :=
1289    XLA_CMP_DESCRIPTION_PKG.GenerateDescriptions
1290       (p_product_rule_code         => p_product_rule_code
1291       ,p_product_rule_type_code    => p_product_rule_type_code
1292       ,p_application_id            => p_application_id
1293       ,p_amb_context_code          => p_amb_context_code
1294       ,p_package_name              => p_package_name
1295       --
1296       ,p_rec_aad_objects           => p_rec_aad_objects
1297       ,p_rec_sources               => p_rec_sources
1298       --
1299       ,p_package_body              => l_array_string);
1300 
1301 l_IsCompiled   := l_IsCompiled AND l_IsGenerated ;
1302 --
1303 l_array_body   :=
1304    xla_cmp_string_pkg.ConcatTwoStrings
1305       (p_array_string_1    => l_array_body
1306       ,p_array_string_2    => l_array_string);
1307 --
1308 l_array_string := xla_cmp_string_pkg.g_null_varchar2s;
1309 
1310 -- generate account derivation rule functions
1311 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1312    trace
1313       (p_msg      => '-> CALL XLA_CMP_ADR_PKG.GenerateADR API'
1314       ,p_level    => C_LEVEL_STATEMENT
1315       ,p_module   => l_log_module);
1316 END IF;
1317 --
1318 l_IsGenerated   :=
1319    xla_cmp_adr_pkg.GenerateADR
1320       (p_product_rule_code         => p_product_rule_code
1321       ,p_product_rule_type_code    => p_product_rule_type_code
1322       ,p_application_id            => p_application_id
1323       ,p_amb_context_code          => p_amb_context_code
1324       ,p_package_name              => p_package_name
1325       --
1326       ,p_rec_aad_objects           => p_rec_aad_objects
1327       ,p_rec_sources               => p_rec_sources
1328       ,p_package_body              => l_array_string);
1329 
1330 l_array_body   :=
1331    xla_cmp_string_pkg.ConcatTwoStrings
1332       (p_array_string_1    => l_array_body
1333       ,p_array_string_2    => l_array_string);
1334 --
1335 l_array_string := xla_cmp_string_pkg.g_null_varchar2s;
1336 --
1337 l_IsCompiled   := l_IsCompiled AND l_IsGenerated;
1338 
1339 --------------------------------------------------------------------------------------
1340 -- 4262811  Generate Recognition JLT for MPA
1341 --------------------------------------------------------------------------------------
1342 l_IsGenerated := XLA_CMP_MPA_JLT_PKG.GenerateMpaJLT
1343       (p_product_rule_code            => p_product_rule_code
1344       ,p_product_rule_type_code       => p_product_rule_type_code
1345       ,p_application_id               => p_application_id
1346       ,p_amb_context_code             => p_amb_context_code
1347       ,p_package_name                 => p_package_name
1348       ,p_rec_aad_objects              => p_rec_aad_objects
1349       ,p_rec_sources                  => p_rec_sources
1350       ,p_package_body                 => l_array_string);
1351 
1352 l_array_body   :=
1353    xla_cmp_string_pkg.ConcatTwoStrings
1354       (p_array_string_1    => l_array_body
1355       ,p_array_string_2    => l_array_string);
1356 --
1357 l_array_string := xla_cmp_string_pkg.g_null_varchar2s;
1358 --
1359 l_IsCompiled   := l_IsCompiled AND l_IsGenerated ;
1360 --------------------------------------------------------------------------------------
1361 
1362 -- generate accounting line type procedures
1363 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1364    trace
1365       (p_msg      => '-> CALL xla_cmp_acct_line_type_pkg.GenerateAcctLineType API'
1366       ,p_level    => C_LEVEL_STATEMENT
1367       ,p_module   => l_log_module);
1368 END IF;
1369 --
1370 l_IsGenerated  :=
1371    xla_cmp_acct_line_type_pkg.GenerateAcctLineType
1372       (p_product_rule_code         => p_product_rule_code
1373       ,p_product_rule_type_code    => p_product_rule_type_code
1374       ,p_application_id            => p_application_id
1375       ,p_amb_context_code          => p_amb_context_code
1376       ,p_package_name              => p_package_name
1377       --
1378       ,p_rec_aad_objects           => p_rec_aad_objects
1379       ,p_rec_sources               => p_rec_sources
1380       ,p_package_body              => l_array_string);
1381 
1382 l_array_body   :=
1383    xla_cmp_string_pkg.ConcatTwoStrings
1384       (p_array_string_1    => l_array_body
1385       ,p_array_string_2    => l_array_string);
1386 --
1387 l_array_string := xla_cmp_string_pkg.g_null_varchar2s;
1388 --
1389 l_IsCompiled   := l_IsCompiled AND l_IsGenerated ;
1390 
1391 -- generate Event Class and Procedure
1392 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1393    trace
1394       (p_msg      => '-> CALL xla_cmp_event_type_pkg.GenerateEventClassAndType API'
1395       ,p_level    => C_LEVEL_STATEMENT
1396       ,p_module   => l_log_module);
1397 END IF;
1398 
1399 l_IsGenerated  :=
1400    xla_cmp_event_type_pkg.GenerateEventClassAndType
1401       (p_application_id              => p_application_id
1402       ,p_product_rule_code           => p_product_rule_code
1403       ,p_product_rule_type_code      => p_product_rule_type_code
1404       ,p_product_rule_version        => p_product_rule_version
1405       ,p_amb_context_code            => p_amb_context_code
1406       ,p_product_rule_name           => p_product_rule_name
1407       ,p_package_name                => p_package_name
1408       --
1409       ,p_rec_aad_objects             => p_rec_aad_objects
1410       ,p_rec_sources                 => p_rec_sources
1411       --
1412       ,p_package_body                => l_array_string);
1413 
1414 l_array_body   :=
1415    xla_cmp_string_pkg.ConcatTwoStrings
1416       (p_array_string_1    => l_array_body
1417       ,p_array_string_2    => l_array_string);
1418 --
1419 l_array_string := xla_cmp_string_pkg.g_null_varchar2s;
1420 
1421 l_IsCompiled   := l_IsCompiled AND l_IsGenerated ;
1422 --
1423 -- generate get_meaning API for source associated to value set.
1424 --
1425 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1426    trace
1427       (p_msg      => '-> CALL xla_cmp_source_pkg.GenerateGetMeaningAPI API'
1428       ,p_level    => C_LEVEL_STATEMENT
1429       ,p_module   => l_log_module);
1430 END IF;
1431 --
1432 
1433    l_IsGenerated     :=
1434       xla_cmp_source_pkg.GenerateGetMeaningAPI
1435          (p_package_name              => p_package_name
1436          ,p_array_flex_value_set_id   => p_rec_sources.array_flex_value_set_id
1437          ,p_package_body              => l_array_string);
1438 
1439    l_IsCompiled   := l_IsCompiled AND l_IsGenerated ;
1440 
1441    l_array_body   :=
1442       xla_cmp_string_pkg.ConcatTwoStrings
1443          (p_array_string_1    => l_array_string
1444          ,p_array_string_2    => l_array_body);
1445 
1446    l_array_string := xla_cmp_string_pkg.g_null_varchar2s;
1447 
1448    l_IsCompiled  := l_IsCompiled AND l_IsGenerated ;
1449 
1450 -- generate main procedure
1451 --
1452 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1453    trace
1454       (p_msg      => '-> CALL xla_cmp_event_type_pkg.BuildMainProc API'
1455       ,p_level    => C_LEVEL_STATEMENT
1456       ,p_module   => l_log_module);
1457 END IF;
1458 --
1459 l_IsGenerated     :=
1460    xla_cmp_event_type_pkg.BuildMainProc
1461       (p_application_id            => p_application_id
1462       ,p_product_rule_code         => p_product_rule_code
1463       ,p_product_rule_type_code    => p_product_rule_type_code
1464       ,p_product_rule_name         => p_product_rule_name
1465       ,p_product_rule_version      => p_product_rule_version
1466       ,p_amb_context_code          => p_amb_context_code
1467       ,p_package_name              => p_package_name
1468       --
1469       ,p_rec_aad_objects           => p_rec_aad_objects
1470       --
1471       ,p_package_body              => l_array_string);
1472 
1473 l_IsCompiled   := l_IsCompiled AND l_IsGenerated ;
1474 
1475 l_array_body   :=
1476    xla_cmp_string_pkg.ConcatTwoStrings
1477       (p_array_string_1    => l_array_body
1478       ,p_array_string_2    => l_array_string);
1479 
1480 
1481 l_array_string := xla_cmp_string_pkg.g_null_varchar2s;
1482 
1483 p_package_body := l_array_body;
1484 --
1485 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1486    trace
1487              (p_msg      => 'l_isCompiled = '||CASE WHEN l_IsCompiled
1488                                                 THEN 'TRUE'
1489                                                 ELSE 'FALSE' END
1490              ,p_level    => C_LEVEL_STATEMENT
1491              ,p_module   => l_log_module);
1492    trace
1493       (p_msg      => 'END of GeneratePrivateProcedures'
1494       ,p_level    => C_LEVEL_PROCEDURE
1495       ,p_module   => l_log_module);
1496 END IF;
1497 --
1498 RETURN l_IsCompiled;
1499 EXCEPTION
1500   WHEN xla_exceptions_pkg.application_exception   THEN
1501       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1502         trace
1503          (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR ='||sqlerrm
1504          ,p_level    => C_LEVEL_EXCEPTION
1505          ,p_module   => l_log_module);
1506       END IF;
1507       RETURN FALSE;
1508   WHEN OTHERS    THEN
1509        xla_exceptions_pkg.raise_message
1510             (p_location => 'xla_cmp_pad_pkg.GeneratePrivateProcedures');
1511 END GeneratePrivateProcedures;
1512 
1513 /*--------------------------------------------------------------+
1514 |                                                               |
1515 |  Private function                                             |
1516 |                                                               |
1517 |     GenerateBody                                              |
1518 |                                                               |
1519 |  Generates the procedures and functions in AAD body packages  |
1520 |                                                               |
1521 +--------------------------------------------------------------*/
1522 
1523 FUNCTION GenerateBody
1524        (p_application_id               IN NUMBER
1525        ,p_product_rule_code            IN VARCHAR2
1526        ,p_product_rule_type_code       IN VARCHAR2
1527        ,p_product_rule_name            IN VARCHAR2
1528        ,p_product_rule_version         IN VARCHAR2
1529        ,p_amb_context_code             IN VARCHAR2
1530        ,p_package_name                 IN VARCHAR2
1531        ,p_package_body                OUT NOCOPY DBMS_SQL.VARCHAR2S)
1532 RETURN BOOLEAN IS
1533 --
1534 l_rec_aad_objects                   xla_cmp_source_pkg.t_rec_aad_objects;
1535 l_rec_sources                       xla_cmp_source_pkg.t_rec_sources;
1536 l_null_rec_aad_objects              xla_cmp_source_pkg.t_rec_aad_objects;
1537 l_null_rec_sources                  xla_cmp_source_pkg.t_rec_sources;
1538 --
1539 l_IsCompiled                        BOOLEAN;
1540 l_log_module                        VARCHAR2(240);
1541 --
1542 BEGIN
1543 IF g_log_enabled THEN
1544    l_log_module := C_DEFAULT_MODULE||'.GenerateBody';
1545 END IF;
1546 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1547    trace
1548       (p_msg      => 'BEGIN of GenerateBody'
1549       ,p_level    => C_LEVEL_PROCEDURE
1550       ,p_module   => l_log_module);
1551 END IF;
1552 
1553 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1554       trace
1555          (p_msg      => 'p_application_id = '||p_application_id||
1556                        ' - p_product_rule_code = '||p_product_rule_code||
1557                        ' - p_product_rule_type_code = '||p_product_rule_type_code||
1558                        ' - p_product_rule_name = '||p_product_rule_name||
1559                        ' - p_product_rule_version = '||p_product_rule_version||
1560                        ' - p_package_name = '||p_package_name||
1561                        ' - p_amb_context_code = '||p_amb_context_code
1562          ,p_level    => C_LEVEL_STATEMENT
1563          ,p_module   => l_log_module);
1564 END IF;
1565 
1566 l_IsCompiled     :=
1567    GeneratePrivateProcedures
1568       (p_application_id              => p_application_id
1569       ,p_product_rule_code           => p_product_rule_code
1570       ,p_product_rule_type_code      => p_product_rule_type_code
1571       ,p_product_rule_name           => p_product_rule_name
1572       ,p_product_rule_version        => p_product_rule_version
1573       ,p_amb_context_code            => p_amb_context_code
1574       ,p_package_name                => p_package_name
1575       ,p_rec_aad_objects             => l_rec_aad_objects
1576       ,p_rec_sources                 => l_rec_sources
1577       ,p_package_body                => p_package_body);
1578 
1579 l_rec_aad_objects                :=  l_null_rec_aad_objects;
1580 l_rec_sources                    :=  l_null_rec_sources;
1581 
1582 
1583 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1584    trace
1585              (p_msg      => 'l_isCompiled = '||CASE WHEN l_IsCompiled
1586                                                 THEN 'TRUE'
1587                                                 ELSE 'FALSE' END
1588              ,p_level    => C_LEVEL_STATEMENT
1589              ,p_module   => l_log_module);
1590    trace
1591       (p_msg      => 'END of GenerateBody'
1592       ,p_level    => C_LEVEL_PROCEDURE
1593       ,p_module   => l_log_module);
1594 END IF;
1595 RETURN l_IsCompiled;
1596 EXCEPTION
1597 WHEN xla_exceptions_pkg.application_exception   THEN
1598    IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1599         trace
1600          (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR ='||sqlerrm
1601          ,p_level    => C_LEVEL_EXCEPTION
1602          ,p_module   => l_log_module);
1603    END IF;
1604    RETURN FALSE;
1605 WHEN OTHERS    THEN
1606    xla_exceptions_pkg.raise_message
1607       (p_location => 'xla_cmp_pad_pkg.GenerateBody');
1608 END GenerateBody;
1609 
1610 /*--------------------------------------------------------------+
1611 |                                                               |
1612 |  Private function                                             |
1613 |                                                               |
1614 |     GenerateSpecPackage                                       |
1615 |                                                               |
1616 | Generates the AAD body packages from AAD definitions          |
1617 | Returns TRUE if the compiler succeeds to generate the body    |
1618 | package, FALSE otherwise.                                     |
1619 +--------------------------------------------------------------*/
1620 
1621 FUNCTION GenerateBodyPackage
1622        (p_application_id               IN NUMBER
1623        ,p_product_rule_code            IN VARCHAR2
1624        ,p_product_rule_type_code       IN VARCHAR2
1625        ,p_product_rule_version         IN VARCHAR2
1626        ,p_amb_context_code             IN VARCHAR2
1627        ,p_package_body                 OUT NOCOPY DBMS_SQL.VARCHAR2S)
1628 RETURN BOOLEAN IS
1629 
1630 l_array_pkg              DBMS_SQL.VARCHAR2S;
1631 l_BodyPkg                VARCHAR2(32000);
1632 l_array_body             DBMS_SQL.VARCHAR2S;
1633 l_IsCompiled             BOOLEAN;
1634 l_log_module             VARCHAR2(240);
1635 
1636 BEGIN
1637 IF g_log_enabled THEN
1638    l_log_module := C_DEFAULT_MODULE||'.GenerateBodyPackage';
1639 END IF;
1640 --
1641 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1642    trace
1643       (p_msg      => 'BEGIN of GenerateBodyPackage'
1644       ,p_level    => C_LEVEL_PROCEDURE
1645       ,p_module   => l_log_module);
1646 END IF;
1647 
1648 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1649       trace
1650          (p_msg      => 'p_application_id = '||p_application_id||
1651                        ' - p_product_rule_code = '||p_product_rule_code||
1652                        ' - p_product_rule_type_code = '||p_product_rule_type_code||
1653                        ' - p_product_rule_version = '||p_product_rule_version||
1654                        ' - p_amb_context_code = '||p_amb_context_code
1655          ,p_level    => C_LEVEL_STATEMENT
1656          ,p_module   => l_log_module);
1657 END IF;
1658 
1659 l_IsCompiled    := TRUE;
1660 l_array_body    := xla_cmp_string_pkg.g_null_varchar2s;
1661 l_array_pkg     := xla_cmp_string_pkg.g_null_varchar2s;
1662 
1663 l_BodyPkg   := C_PACKAGE_BODY_1 || C_PRIVATE_API_1;
1664 l_BodyPkg   := REPLACE(l_BodyPkg,'$PACKAGE_NAME$'   ,g_PackageName);
1665 
1666 l_BodyPkg   :=
1667    REPLACE(l_BodyPkg,'$header$'
1668           ,GeneratePkgComment
1669              (p_user_name               => g_UserName
1670              ,p_package_name            => g_PackageName
1671              ,p_product_rule_code       => p_product_rule_code
1672              ,p_product_rule_type_code  => p_product_rule_type_code
1673              ,p_product_rule_name       => g_ProductRuleName
1674              ,p_product_rule_version    => p_product_rule_version
1675              ,p_amb_context_code        => p_amb_context_code)
1676           );
1677 
1678 xla_cmp_string_pkg.CreateString
1679    (p_package_text  => l_BodyPkg
1680    ,p_array_string  => l_array_pkg);
1681 
1682 l_IsCompiled :=
1683    GenerateBody
1684       (p_application_id           => p_application_id
1685       ,p_product_rule_code        => p_product_rule_code
1686       ,p_product_rule_type_code   => p_product_rule_type_code
1687       ,p_product_rule_name        => g_ProductRuleName
1688       ,p_product_rule_version     => p_product_rule_version
1689       ,p_amb_context_code         => p_amb_context_code
1690       ,p_package_name             => g_PackageName
1691       ,p_package_body             => l_array_body);
1692 
1693 l_array_pkg :=
1694    xla_cmp_string_pkg.ConcatTwoStrings
1695       (p_array_string_1  =>  l_array_pkg
1696       ,p_array_string_2  =>  l_array_body);
1697 --
1698 -- create the PL/SQL DBMS_SQL.VARCHAR2S array
1699 --
1700 l_BodyPkg   := C_PACKAGE_BODY_2;
1701 --
1702 l_BodyPkg     := REPLACE(l_BodyPkg,'$PRODUCT_RULE_CODE$'     ,p_product_rule_code);
1703 l_BodyPkg     := REPLACE(l_BodyPkg,'$PRODUCT_RULE_TYPE_CODE$',p_product_rule_type_code);
1704 l_BodyPkg     := REPLACE(l_BodyPkg,'$PRODUCT_RULE_VERSION$'  ,g_ProductRuleVersion);
1705 l_BodyPkg     := REPLACE(l_BodyPkg,'$PRODUCT_RULE_NAME$'     ,REPLACE(g_ProductRuleName,'''',''''''));
1706 l_BodyPkg     := REPLACE(l_BodyPkg,'$PACKAGE_NAME$'          ,g_PackageName);
1707 l_BodyPkg     := REPLACE(l_BodyPkg,'$AMB_CONTEXT_CODE$'      ,p_amb_context_code);
1708 
1709 xla_cmp_string_pkg.CreateString
1710    (p_package_text  => l_BodyPkg
1711    ,p_array_string  => l_array_body);
1712 
1713 l_array_pkg :=
1714    xla_cmp_string_pkg.ConcatTwoStrings
1715       (p_array_string_1  =>  l_array_pkg
1716       ,p_array_string_2  =>  l_array_body);
1717 
1718 p_package_body      := l_array_pkg;
1719 
1720 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1721    trace
1722       (p_msg      => 'return value (l_IsCompiled) = '||
1723         CASE l_IsCompiled WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END
1724       ,p_level    => C_LEVEL_PROCEDURE
1725       ,p_module   => l_log_module);
1726    trace
1727       (p_msg      => 'END of GenerateBodyPackage'
1728       ,p_level    => C_LEVEL_PROCEDURE
1729       ,p_module   => l_log_module);
1730 END IF;
1731 RETURN l_IsCompiled;
1732 EXCEPTION
1733 WHEN xla_exceptions_pkg.application_exception   THEN
1734    RETURN FALSE;
1735 WHEN OTHERS    THEN
1736    xla_exceptions_pkg.raise_message
1737       (p_location => 'xla_cmp_pad_pkg.GenerateBodyPackage');
1738 END GenerateBodyPackage;
1739 
1740 /*--------------------------------------------------------------+
1741 |                                                               |
1742 |  Private function                                             |
1743 |                                                               |
1744 |        CreateBodyPackage                                      |
1745 |                                                               |
1746 | Compiles the AAD body packages in the DATABASE                |
1747 | Returns TRUE if the package body is VALID, FALSE otherwise.   |
1748 |                                                               |
1749 +--------------------------------------------------------------*/
1750 FUNCTION CreateBodyPackage
1751        (p_application_id           IN NUMBER
1752        ,p_product_rule_code        IN VARCHAR2
1753        ,p_product_rule_type_code   IN VARCHAR2
1754        ,p_product_rule_version     IN VARCHAR2
1755        ,p_amb_context_code         IN VARCHAR2)
1756 RETURN BOOLEAN IS
1757 --
1758 l_Package             DBMS_SQL.VARCHAR2S;
1759 l_PackageName         VARCHAR2(30);
1760 l_ProductRuleName     VARCHAR2(80);
1761 l_ProductRuleVersion  VARCHAR2(30);
1762 --
1763 l_IsCompiled          BOOLEAN;
1764 l_log_module          VARCHAR2(240);
1765 --
1766 BEGIN
1767 IF g_log_enabled THEN
1768    l_log_module := C_DEFAULT_MODULE||'.CreateBodyPackage';
1769 END IF;
1770 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1771    trace
1772       (p_msg      => 'BEGIN of CreateBodyPackage'
1773       ,p_level    => C_LEVEL_PROCEDURE
1774       ,p_module   => l_log_module);
1775 END IF;
1776 
1777 l_IsCompiled  :=
1778    GenerateBodyPackage
1779       (p_application_id               => p_application_id
1780       ,p_product_rule_code            => p_product_rule_code
1781       ,p_product_rule_type_code       => p_product_rule_type_code
1782       ,p_product_rule_version         => p_product_rule_version
1783       ,p_amb_context_code             => p_amb_context_code
1784       ,p_package_body                 => l_Package);
1785 
1786   -- Store sources used by an AAD.
1787 
1788   DELETE xla_aad_sources
1789   WHERE  amb_context_code          = p_amb_context_code
1790   AND    product_rule_type_code    = p_product_rule_type_code
1791   AND    product_rule_code         = p_product_rule_code;
1792 
1793   INSERT INTO xla_aad_sources
1794       (
1795           APPLICATION_ID
1796          ,AMB_CONTEXT_CODE
1797          ,PRODUCT_RULE_TYPE_CODE
1798          ,PRODUCT_RULE_CODE
1799          ,ENTITY_CODE
1800          ,EVENT_CLASS_CODE
1801          ,SOURCE_CODE
1802          ,SOURCE_DATATYPE_CODE
1803          ,SOURCE_LEVEL_CODE
1804          ,EXTRACT_OBJECT_NAME
1805          ,EXTRACT_OBJECT_TYPE_CODE
1806          ,ALWAYS_POPULATED_FLAG
1807          ,COLUMN_DATATYPE_CODE
1808          ,SOURCE_HASH_ID
1809          ,SOURCE_APPLICATION_ID
1810          ,REFERENCE_OBJECT_FLAG
1811          ,JOIN_CONDITION
1812          ,CREATION_DATE
1813          ,CREATED_BY
1814          ,LAST_UPDATE_DATE
1815          ,LAST_UPDATED_BY
1816          ,LAST_UPDATE_LOGIN
1817          ,PROGRAM_UPDATE_DATE
1818          ,PROGRAM_APPLICATION_ID
1819          ,PROGRAM_ID
1820          ,REQUEST_ID
1821       )
1822    SELECT
1823           APPLICATION_ID
1824          ,p_amb_context_code
1825          ,p_product_rule_type_code
1826          ,p_product_rule_code
1827          ,ENTITY_CODE
1828          ,EVENT_CLASS_CODE
1829          ,SOURCE_CODE
1830          ,SOURCE_DATATYPE_CODE
1831          ,SOURCE_LEVEL_CODE
1832          ,EXTRACT_OBJECT_NAME
1833          ,EXTRACT_OBJECT_TYPE_CODE
1834          ,ALWAYS_POPULATED_FLAG
1835          ,COLUMN_DATATYPE_CODE
1836          ,SOURCE_HASH_ID
1837          ,SOURCE_APPLICATION_ID
1838          ,REFERENCE_OBJECT_FLAG
1839          ,JOIN_CONDITION
1840 	 ,SYSDATE
1841 	 ,xla_environment_pkg.g_usr_id
1842 	 ,SYSDATE
1843 	 ,xla_environment_pkg.g_usr_id
1844          ,xla_environment_pkg.g_login_id
1845          ,SYSDATE
1846          ,xla_environment_pkg.g_prog_appl_id
1847          ,xla_environment_pkg.g_prog_id
1848          ,xla_environment_pkg.g_Req_Id
1849    FROM xla_evt_class_sources_gt;
1850 
1851 l_IsCompiled  :=
1852    xla_cmp_create_pkg.CreateBodyPackage
1853       (p_product_rule_name  =>  g_ProductRuleName
1854       ,p_package_name       =>  g_PackageName
1855       ,p_package_text       =>  l_Package)
1856    AND l_IsCompiled;
1857 --
1858 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1859 trace
1860       (p_msg      => 'return value (l_IsCompiled) = '||
1861         CASE l_IsCompiled WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END
1862       ,p_level    => C_LEVEL_PROCEDURE
1863       ,p_module   => l_log_module);
1864    trace
1865       (p_msg      => 'END of CreateBodyPackage'
1866       ,p_level    => C_LEVEL_PROCEDURE
1867       ,p_module   => l_log_module);
1868 END IF;
1869 RETURN l_IsCompiled;
1870 EXCEPTION
1871 WHEN xla_exceptions_pkg.application_exception   THEN
1872    RETURN FALSE;
1873 WHEN OTHERS    THEN
1874    xla_exceptions_pkg.raise_message
1875       (p_location => 'xla_cmp_pad_pkg.CreateBodyPackage');
1876 END CreateBodyPackage;
1877 
1878 /*--------------------------------------------------------------+
1879 |                                                               |
1880 |  Private function                                             |
1881 |                                                               |
1882 |        CheckPackageCreation                                      |
1883 |                                                               |
1884 | Compiles the AAD body packages in the DATABASE                |
1885 | Returns TRUE if the package body is VALID, FALSE otherwise.   |
1886 |                                                               |
1887 +--------------------------------------------------------------*/
1888 PROCEDURE CheckPackageCreation
1889        (p_application_id           IN NUMBER
1890        ,p_product_rule_code        IN VARCHAR2
1891        ,p_product_rule_type_code   IN VARCHAR2
1892        ,p_amb_context_code         IN VARCHAR2
1893        ,x_standard_pkg_flag        IN OUT NOCOPY VARCHAR2
1894        ,x_bc_pkg_flag              IN OUT NOCOPY VARCHAR2)
1895 IS
1896 --
1897 CURSOR c IS
1898   SELECT CASE WHEN SUM(DECODE(NVL(xld.budgetary_control_flag,'N'),'N',1,0)) > 0
1899               THEN 'Y'
1900               ELSE 'N' END
1901         ,CASE WHEN SUM(DECODE(NVL(xld.budgetary_control_flag,'N'),'Y',1,0)) > 0
1902               THEN 'Y'
1903               ELSE 'N' END
1904     FROM xla_aad_line_defn_assgns xald
1905        , xla_line_definitions_b   xld
1906    WHERE xld.application_id = xald.application_id
1907      AND xld.amb_context_code = xald.amb_context_code
1908      AND xld.event_class_code = xald.event_class_code
1909      AND xld.event_type_code  = xald.event_type_code
1910      AND xld.line_definition_owner_code = xald.line_definition_owner_code
1911      AND xld.line_definition_code = xald.line_definition_code
1912      AND xald.application_id = p_application_id
1913      AND xald.amb_context_code = p_amb_context_code
1914      AND xald.product_rule_type_code = p_product_rule_type_code
1915      AND xald.product_rule_code = p_product_rule_code;
1916 
1917 l_log_module          VARCHAR2(240);
1918 --
1919 BEGIN
1920 IF g_log_enabled THEN
1921    l_log_module := C_DEFAULT_MODULE||'.CheckPackageCreation';
1922 END IF;
1923 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1924    trace
1925       (p_msg      => 'BEGIN of CheckPackageCreation'
1926       ,p_level    => C_LEVEL_PROCEDURE
1927       ,p_module   => l_log_module);
1928 END IF;
1929 
1930   OPEN c;
1931   FETCH c INTO x_standard_pkg_flag, x_bc_pkg_flag;
1932   CLOSE c;
1933 
1934 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1935    trace
1936       (p_msg      => 'return value (x_standard_pkg_flag) = '||x_standard_pkg_flag
1937       ,p_level    => C_LEVEL_PROCEDURE
1938       ,p_module   => l_log_module);
1939    trace
1940       (p_msg      => 'return value (x_bc_pkg_flag) = '||x_bc_pkg_flag
1941       ,p_level    => C_LEVEL_PROCEDURE
1942       ,p_module   => l_log_module);
1943    trace
1944       (p_msg      => 'END of CheckPackageCreation'
1945       ,p_level    => C_LEVEL_PROCEDURE
1946       ,p_module   => l_log_module);
1947 END IF;
1948 EXCEPTION
1949 WHEN xla_exceptions_pkg.application_exception   THEN
1950    RAISE;
1951 WHEN OTHERS    THEN
1952    xla_exceptions_pkg.raise_message
1953       (p_location => 'xla_cmp_pad_pkg.CheckPackageCreation');
1954 END CheckPackageCreation;
1955 
1956 
1957 --
1958 --+==========================================================================+
1959 --| PUBLIC function                                                          |
1960 --|    Compile                                                               |
1961 --| DESCRIPTION : generates the PL/SQL packages from the Product Accounting  |
1962 --|               definition.                                                |
1963 --|                                                                          |
1964 --| INPUT PARAMETERS                                                         |
1965 --|                                                                          |
1966 --| 1. p_application_id          : NUMBER, application identifier            |
1967 --| 2. p_product_rule_code       : VARCHAR2(30), product definition code     |
1968 --| 3. p_product_rule_type_code  : VARCHAR2(30), product definition type     |
1969 --| 4. p_product_rule_version    : VARCHAR2(30), product definition Version  |
1970 --|                                                                          |
1971 --|  RETURNS                                                                 |
1972 --|   1. l_IsCompiled  : BOOLEAN, TRUE if Product accounting definition has  |
1973 --|                      been successfully created, FALSE otherwise.         |
1974 --|                                                                          |
1975 --|                                                                          |
1976 --|                                                                          |
1977 --+==========================================================================+
1978 --
1979 FUNCTION Compile    (  p_application_id           IN NUMBER
1980                      , p_product_rule_code        IN VARCHAR2
1981                      , p_product_rule_type_code   IN VARCHAR2
1982                      , p_product_rule_version     IN VARCHAR2
1983                      , p_amb_context_code         IN VARCHAR2 )
1984 RETURN BOOLEAN
1985 IS
1986 l_standard_pkg_flag   VARCHAR2(1);
1987 l_bc_pkg_flag         VARCHAR2(1);
1988 l_has_non_bc_jld      BOOLEAN;
1989 l_IsCompiled          BOOLEAN;
1990 l_IsLocked            BOOLEAN;
1991 l_log_module          VARCHAR2(240);
1992 BEGIN
1993 IF g_log_enabled THEN
1994       l_log_module := C_DEFAULT_MODULE||'.Compile';
1995 END IF;
1996 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1997       trace
1998          (p_msg      => 'BEGIN of Compile'
1999          ,p_level    => C_LEVEL_PROCEDURE
2000          ,p_module   => l_log_module);
2001       trace
2002          (p_msg      => 'p_application_id = '||p_application_id||
2003                         ' - p_product_rule_code = '||p_product_rule_code||
2004                         ' - p_product_rule_type_code = '||p_product_rule_type_code||
2005                         ' - p_product_rule_version = '||p_product_rule_version||
2006                         ' - p_amb_context_code = '||p_amb_context_code
2007          ,p_level    => C_LEVEL_STATEMENT
2008          ,p_module   => l_log_module);
2009 END IF;
2010 
2011    g_ProductRuleVersion := p_product_rule_version;
2012    g_UserName           := GetUserName;
2013 
2014    g_ProductRuleName    :=
2015       GetPADName
2016          (p_application_id          => p_application_id
2017          ,p_product_rule_code       => p_product_rule_code
2018          ,p_product_rule_type_code  => p_product_rule_type_code
2019          ,p_product_rule_version    => g_ProductRuleVersion
2020          ,p_amb_context_code        => p_amb_context_code);
2021 
2022    g_PackageName        :=
2023       xla_cmp_hash_pkg.BuildPackageName
2024          (p_application_id          => p_application_id
2025          ,p_product_rule_code       => p_product_rule_code
2026          ,p_product_rule_type_code  => p_product_rule_type_code
2027          ,p_amb_context_code        => p_amb_context_code);
2028 
2029    g_component_name     := g_ProductRuleName;
2030 
2031    g_owner              :=
2032       xla_lookups_pkg.get_meaning
2033          (p_lookup_type    => 'XLA_OWNER_TYPE'
2034          ,p_lookup_code    => p_product_rule_type_code);
2035 
2036    g_component_appl     := GetApplicationName (p_application_id );
2037 
2038    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2039        trace
2040           (p_msg      => 'g_ProductRuleVersion = '||g_ProductRuleVersion||
2041                          ' - g_UserName = '||g_UserName||
2042                          ' - g_ProductRuleName = '||g_ProductRuleName||
2043                          ' - g_PackageName = '||g_PackageName||
2044                          ' - g_component_name = '||g_component_name||
2045                          ' - g_owner = '||g_owner||
2046                          ' - g_component_appl = '||g_component_appl
2047           ,p_level    => C_LEVEL_PROCEDURE
2048           ,p_module   => l_log_module);
2049    END IF;
2050 
2051  --
2052  -- Locking components of PAD in AMB datamodel
2053  --
2054    l_IsCompiled  :=
2055       xla_cmp_lock_pad_pkg.LockPAD
2056          (p_application_id         => p_application_id
2057          ,p_product_rule_code      => p_product_rule_code
2058          ,p_product_rule_type_code => p_product_rule_type_code
2059          ,p_product_rule_name      => g_ProductRuleName
2060          ,p_amb_context_code       => p_amb_context_code);
2061 
2062 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2063        trace
2064           (p_msg      => ' AAD locked  = '||
2065            CASE l_IsCompiled WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END
2066           ,p_level    => C_LEVEL_PROCEDURE
2067           ,p_module   => l_log_module);
2068 END IF;
2069 
2070    CheckPackageCreation
2071          (p_application_id          => p_application_id
2072          ,p_product_rule_code       => p_product_rule_code
2073          ,p_product_rule_type_code  => p_product_rule_type_code
2074          ,p_amb_context_code        => p_amb_context_code
2075          ,x_standard_pkg_flag       => l_standard_pkg_flag
2076          ,x_bc_pkg_flag             => l_bc_pkg_flag);
2077 
2078    IF (l_standard_pkg_flag = 'Y') THEN
2079      g_bc_pkg_flag := 'N';
2080      l_IsCompiled  :=
2081         l_IsCompiled AND
2082         CreateSpecPackage
2083          (p_application_id          => p_application_id
2084          ,p_product_rule_code       => p_product_rule_code
2085          ,p_product_rule_type_code  => p_product_rule_type_code
2086          ,p_product_rule_version    => g_ProductRuleVersion
2087          ,p_amb_context_code        => p_amb_context_code);
2088 
2089       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2090        trace
2091           (p_msg      => ' AAD specification package created  = '||
2092            CASE l_IsCompiled WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END
2093           ,p_level    => C_LEVEL_PROCEDURE
2094           ,p_module   => l_log_module);
2095       END IF;
2096 
2097       l_IsCompiled  :=
2098          l_IsCompiled AND
2099          CreateBodyPackage
2100          (p_application_id          => p_application_id
2101          ,p_product_rule_code       => p_product_rule_code
2102          ,p_product_rule_type_code  => p_product_rule_type_code
2103          ,p_product_rule_version    => g_ProductRuleVersion
2104          ,p_amb_context_code        => p_amb_context_code);
2105 
2106       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2107        trace
2108           (p_msg      => ' AAD body  package created  = '||
2109            CASE l_IsCompiled WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END
2110           ,p_level    => C_LEVEL_PROCEDURE
2111           ,p_module   => l_log_module);
2112       END IF;
2113    END IF;
2114 
2115    IF (l_bc_pkg_flag = 'Y') THEN
2116       g_bc_pkg_flag := 'Y';
2117       g_PackageName := REPLACE(g_PackageName,'_PKG','_BC_PKG');
2118       DELETE FROM xla_evt_class_sources_gt;
2119 
2120       l_IsCompiled  :=
2121         l_IsCompiled AND
2122         CreateSpecPackage
2123          (p_application_id          => p_application_id
2124          ,p_product_rule_code       => p_product_rule_code
2125          ,p_product_rule_type_code  => p_product_rule_type_code
2126          ,p_product_rule_version    => g_ProductRuleVersion
2127          ,p_amb_context_code        => p_amb_context_code);
2128 
2129       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2130        trace
2131           (p_msg      => ' AAD specification package created  = '||
2132            CASE l_IsCompiled WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END
2133           ,p_level    => C_LEVEL_PROCEDURE
2134           ,p_module   => l_log_module);
2135       END IF;
2136 
2137       l_IsCompiled  :=
2138          l_IsCompiled AND
2139          CreateBodyPackage
2140          (p_application_id          => p_application_id
2141          ,p_product_rule_code       => p_product_rule_code
2142          ,p_product_rule_type_code  => p_product_rule_type_code
2143          ,p_product_rule_version    => g_ProductRuleVersion
2144          ,p_amb_context_code        => p_amb_context_code);
2145 
2146       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2147        trace
2148           (p_msg      => ' AAD body  package created  = '||
2149            CASE l_IsCompiled WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END
2150           ,p_level    => C_LEVEL_PROCEDURE
2151           ,p_module   => l_log_module);
2152       END IF;
2153 
2154    END IF;
2155 
2156    --
2157    -- bug 3417369
2158    --
2159    IF NOT l_IsCompiled THEN
2160       xla_amb_setup_err_pkg.stack_error
2161          (p_message_name              => 'XLA_CMP_TECHNICAL_ERROR'
2162          ,p_message_type              => 'E'
2163          ,p_message_category          => 'AAD'
2164          ,p_category_sequence         => 1
2165          ,p_application_id            => p_application_id
2166          ,p_amb_context_code          => p_amb_context_code
2167          ,p_product_rule_type_code    => p_product_rule_type_code
2168          ,p_product_rule_code         => p_product_rule_code);
2169    END IF;
2170 
2171    --============================================
2172    -- Integration of  Extract Integrity checker
2173    --============================================
2174    xla_amb_setup_err_pkg.insert_errors;
2175    --
2176    COMMIT;
2177 
2178    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2179      trace
2180          (p_msg      => 'return value. = '||
2181              CASE l_IsCompiled WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END
2182          ,p_level    => C_LEVEL_PROCEDURE
2183          ,p_module   => l_log_module);
2184 
2185      trace
2186          (p_msg      => 'END of Compile'
2187          ,p_level    => C_LEVEL_PROCEDURE
2188          ,p_module   => l_log_module);
2189    END IF;
2190    RETURN l_IsCompiled;
2191 EXCEPTION
2192    WHEN xla_exceptions_pkg.application_exception   THEN
2193          IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2194              trace
2195                  (p_msg      => '-> CALL xla_amb_setup_err_pkg.stack_error API '
2196                  ,p_level    => C_LEVEL_PROCEDURE
2197                  ,p_module   => l_log_module);
2198           END IF;
2199 
2200           xla_amb_setup_err_pkg.stack_error(
2201                                p_message_name              => 'XLA_CMP_TECHNICAL_ERROR'
2202                               ,p_message_type              => 'E'
2203                               ,p_message_category          => 'AAD'
2204                               ,p_category_sequence         => 1
2205                               ,p_application_id            => p_application_id
2206                               ,p_amb_context_code          => p_amb_context_code
2207                               ,p_product_rule_type_code    => p_product_rule_type_code
2208                               ,p_product_rule_code         => p_product_rule_code
2209                 );
2210         --
2211         --============================================
2212         -- Integration of  Extract Integrity checker
2213         --============================================
2214 
2215         xla_amb_setup_err_pkg.insert_errors;
2216         --
2217         COMMIT;
2218         --
2219         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
2220             trace
2221                 (p_msg      => 'ERROR: XLA_CMP_TECHNICAL_ERROR ='||sqlerrm
2222                 ,p_level    => C_LEVEL_EXCEPTION
2223                 ,p_module   => l_log_module);
2224         END IF;
2225         --
2226         RETURN FALSE;
2227    WHEN OTHERS    THEN
2228       xla_exceptions_pkg.raise_message
2229          (p_location => 'xla_cmp_pad_pkg.Compile');
2230 END Compile;
2231 --
2232 
2233 --=============================================================================
2234 --
2235 --
2236 --
2237 --
2238 --
2239 --
2240 --
2241 --
2242 --
2243 --
2244 --
2245 --
2246 --
2247 --
2248 --
2249 --
2250 --
2251 --
2252 --
2253 --
2254 --
2255 --
2256 --=============================================================================
2257 --=============================================================================
2258 --          *********** Initialization routine **********
2259 --=============================================================================
2260 
2261 BEGIN
2262 
2263    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2264    g_log_enabled    := fnd_log.test
2265                           (log_level  => g_log_level
2266                           ,module     => C_DEFAULT_MODULE);
2267 
2268    IF NOT g_log_enabled  THEN
2269       g_log_level := C_LEVEL_LOG_DISABLED;
2270    END IF;
2271 --
2272 END xla_cmp_pad_pkg; -- end of package spec