DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_CMP_ADR_PKG

Source


1 PACKAGE BODY xla_cmp_adr_pkg AS
2 /* $Header: xlacpadr.pkb 120.43.12010000.2 2010/01/31 14:48:43 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_adr_pkg                                                        |
10 |                                                                            |
11 | DESCRIPTION                                                                |
12 |     This is a XLA private package, which contains all the logic required   |
13 |     to generate ADR procedures from AMB specifcations                      |
14 |                                                                            |
15 |                                                                            |
16 | HISTORY                                                                    |
17 |     25-JUN-2002 K.Boussema    Created                                      |
18 |     25-FEB-2003 K.Boussema    Added 'dbdrv' command                        |
19 |     25-FEB-2003 K.Boussema    Revised GenerateADRProcs to filter account   |
20 |                               derivation rules to generate                 |
21 |     13-MAR-2003 K.Boussema    Made changes for the new bulk approach of the|
22 |                               accounting engine                            |
23 |     19-MAR-2003 K.Boussema    Added amb_context_code column                |
24 |     17-APR-2003 K.Boussema    Included error messages                      |
25 |     26-MAI-2003 K.Boussema    Removed XLA_AP_INVALID_ADR error code        |
26 |     02-JUN-2003 K.Boussema    Modified to fix bug 2975670 and bug 2729143  |
27 |     17-JUL-2003 K.Boussema    Reviewd the code                             |
28 |     24-JUL-2003 K.Boussema    Updated the error messages                   |
29 |     30-JUL-2003 K.Boussema    Updated the definition of C_FLEXFIELD_SEGMENT|
30 |     13-NOV-2003 K.Boussema    Changed to pass to the accounting engine the |
31 |                               Accounting and transaction coa id values     |
32 |     20-NOV-2003 K.Boussema    Added the update of journal entry status     |
33 |                               bug 3269120                                  |
34 |     05-DEC-2003 K.Boussema    Added Accounting COA value in generation of  |
35 |                               SetCcid and SetOverride. Set Accounting COA  |
36 |                               to NULL if CCID source, bug3289875           |
37 |     18-DEC-2003 K.Boussema    Changed to fix bug 3042840,3307761,3268940   |
38 |                               3310291 and 3320689                          |
39 |     12-JAN-2004 K.Boussema    Changed GetSegment and GetCcid to fix issue  |
40 |                               described in bug 3366176                     |
41 |     23-FEB-2004 K.Boussema    Made changes for the FND_LOG.                |
42 |     22-MAR-2004 K.Boussema    Added a parameter p_module to the TRACE calls|
43 |                               and the procedure.                           |
44 |     11-MAY-2004 K.Boussema  Removed the call to XLA trace routine from     |
45 |                             trace() procedure                              |
46 |     02-JUN-2004 A.Quaglia     Made changes for the Transaction Account     |
47 |                               Builder.                                     |
48 |                               Added generate_adr_spec                      |
49 |                               Added generate_tab_adr                       |
50 |                               Added build_adrs_for_tab                     |
51 |     23-JUL-2004 A.Quaglia   GetCcid: changed message tokens                |
52 |     23-Sep-2004 S.Singhania Minor change for Bulk processing.              |
53 |     27-SEP-2004 A.Quaglia   GetCcid: added selection of correct template   |
54 |                                      for constant ccid case, when compiling|
55 |                                      for the Transaction Account Builder   |
56 |     28-Feb-2005 W.Shen      Change for ledger currency project             |
57 |                                Add p_side parameter when call the generated|
58 |                                adr function, and the setccid/setsegment    |
59 |                                function in xla_ae_lines_pkg                |
60 |     07-Mar-2005 K.Boussema    Changed for ADR-enhancements.                |
61 |     11-Jul-2005 A. Wan        4262811 for MPA project.                     |
62 |     26-Oct-2005 Jorge Larre The generation of the adr should consider the  |
63 |                             case of the TAB as similar as the case of      |
64 |                             flexfield mode:                                |
65 |    Old code:                                                               |
66 |    IF NOT l_endif and l_adr IS NOT NULL THEN                               |
67 |       IF p_flexfield_assign_mode = 'A' THEN                                |
68 |          l_adr := l_adr ||g_chr_newline||' END IF;';                       |
69 |    New code:                                                               |
70 |    IF NOT l_endif and l_adr IS NOT NULL THEN                               |
71 |       IF p_flexfield_assign_mode = 'A' OR g_component_type = 'TAB_ADR' THEN|
72 |          l_adr := l_adr ||g_chr_newline||' END IF;';                       |
73 +===========================================================================*/
74 --
75 --Global Exceptions
76 ge_fatal_error                 EXCEPTION;
77 
78 --Global Constants
79 G_STANDARD_MESSAGE CONSTANT VARCHAR2(1) := xla_exceptions_pkg.C_STANDARD_MESSAGE;
80 G_OA_MESSAGE       CONSTANT VARCHAR2(1) := xla_exceptions_pkg.C_OA_MESSAGE;
81 
82 g_chr_newline      CONSTANT VARCHAR2(10):= xla_environment_pkg.g_chr_newline;
83 
84 
85 /*------------------------------------------------------------+
86 |                                                             |
87 |                                                             |
88 |                         Global variables                    |
89 |                                                             |
90 |                                                             |
91 +-------------------------------------------------------------*/
92 
93 g_component_type                VARCHAR2(30):='AMB_ADR';
94 g_component_code                VARCHAR2(30);
95 g_component_type_code           VARCHAR2(1);
96 g_component_appl_id             INTEGER;
97 g_component_name                VARCHAR2(160);
98 g_amb_context_code              VARCHAR2(30);
99 g_package_name                  VARCHAR2(30);
100 
101 /*------------------------------------------------------------+
102 |                                                             |
103 |                                                             |
104 |             ADRs templates for AAD packages                 |
105 |                                                             |
106 |                                                             |
107 +-------------------------------------------------------------*/
108 
109 C_ADR_SEGMENT                    CONSTANT      VARCHAR2(32000):= '
110 ---------------------------------------
111 --
112 -- PRIVATE FUNCTION
113 --         AcctDerRule_$adr_hash_id$
114 --
115 ---------------------------------------
116 FUNCTION AcctDerRule_$adr_hash_id$ (
117   p_application_id             IN NUMBER
118 , p_ae_header_id               IN NUMBER
119 , p_side                       IN VARCHAR2
120 , p_override_seg_flag          IN VARCHAR2 $parameters$
121 , x_transaction_coa_id         OUT NOCOPY NUMBER
122 , x_accounting_coa_id          OUT NOCOPY NUMBER
123 , x_flexfield_segment_code     OUT NOCOPY VARCHAR2
124 , x_flex_value_set_id          OUT NOCOPY NUMBER
125 , x_value_type_code            OUT NOCOPY VARCHAR2
126 , x_value_combination_id       OUT NOCOPY NUMBER
127 , x_value_segment_code         OUT NOCOPY VARCHAR2
128 )
129 RETURN VARCHAR2
130 IS
131 l_component_type       VARCHAR2(80)  ;
132 l_component_code       VARCHAR2(30)  ;
133 l_component_type_code  VARCHAR2(1)   ;
134 l_component_appl_id    INTEGER       ;
135 l_amb_context_code     VARCHAR2(30)  ;
136 l_log_module           VARCHAR2(240) ;
137 l_output_value         VARCHAR2(30)  ;
138 BEGIN
139 IF g_log_enabled THEN
140       l_log_module := C_DEFAULT_MODULE||''.AcctDerRule_$adr_hash_id$'';
141 END IF;
142 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
143 
144       trace
145          (p_msg      => ''BEGIN of AcctDerRule_$adr_hash_id$''
146          ,p_level    => C_LEVEL_PROCEDURE
147          ,p_module   => l_log_module);
148 
149 END IF;
150 
151 l_component_type         := ''AMB_ADR'';
152 l_component_code         := ''$account_derivation_rule_code$'';
153 l_component_type_code    := ''$adr_type_code$'';
154 l_component_appl_id      :=  $adr_appl_id$;
155 l_amb_context_code       := ''$amb_context_code$'';
156 x_transaction_coa_id     := $transaction_coa_id$;
157 x_accounting_coa_id      := $accounting_coa_id$;
158 x_flexfield_segment_code := $flexfield_segment_code$;
159 x_flex_value_set_id      := $flex_value_set_id$ ;
160 
161 $adr_body$
162 
163 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
164 
165       trace
166          (p_msg      => ''END of AcctDerRule_$adr_hash_id$(invalid)''
167          ,p_level    => C_LEVEL_PROCEDURE
168          ,p_module   => l_log_module);
169 
170 END IF;
171 
172 xla_ae_journal_entry_pkg.g_global_status      :=  xla_ae_journal_entry_pkg.C_INVALID;
173 x_value_combination_id  := null;
174 x_value_segment_code    := null;
175 x_value_type_code       := null;
176 l_output_value          := null;
177 xla_accounting_err_pkg.build_message
178                  (p_appli_s_name            => ''XLA''
179                  ,p_msg_name                => ''XLA_AP_INVALID_ADR''
180                  ,p_token_1                 => ''COMPONENT_NAME''
181                  ,p_value_1                 => xla_ae_sources_pkg.GetComponentName (
182                                                             l_component_type
183                                                           , l_component_code
184                                                           , l_component_type_code
185                                                           , l_component_appl_id
186                                                           , l_amb_context_code
187                                                           )
188                  ,p_token_2                 => ''OWNER''
189                  ,p_value_2                 => xla_lookups_pkg.get_meaning(
190                                                         ''XLA_OWNER_TYPE''
191                                                         ,l_component_type_code
192                                                         )
193                  ,p_token_3                 => ''PAD_NAME''
194                  ,p_value_3                 => xla_ae_journal_entry_pkg.g_cache_pad.pad_session_name
195                  ,p_token_4                 => ''PAD_OWNER''
196                  ,p_value_4                 => xla_lookups_pkg.get_meaning(
197                                                         ''XLA_OWNER_TYPE''
198                                                         ,xla_ae_journal_entry_pkg.g_cache_pad.product_rule_type_code
199                                                         )
200                  ,p_entity_id               => xla_ae_journal_entry_pkg.g_cache_event.entity_id
201                  ,p_event_id                => xla_ae_journal_entry_pkg.g_cache_event.event_id
202                  ,p_ledger_id               => xla_ae_journal_entry_pkg.g_cache_event.target_ledger_id
203                  ,p_ae_header_id            => NULL
204 );
205 RETURN l_output_value;
206 EXCEPTION
207   WHEN xla_exceptions_pkg.application_exception THEN
208       RAISE;
209   WHEN OTHERS THEN
210        xla_exceptions_pkg.raise_message
211            (p_location => ''$package_name$.AcctDerRule_$adr_hash_id$'');
212 END AcctDerRule_$adr_hash_id$;
213 --
214 ';
215 
216 --========================================================================
217 
218 C_ADR_CCID                   CONSTANT      VARCHAR2(32000):= '
219 ---------------------------------------
220 --
221 -- PRIVATE FUNCTION
222 --         AcctDerRule_$adr_hash_id$
223 --
224 ---------------------------------------
225 FUNCTION AcctDerRule_$adr_hash_id$ (
226   p_application_id              IN NUMBER
227 , p_ae_header_id                IN NUMBER
228 , p_side                        IN VARCHAR2 $parameters$
229 , x_transaction_coa_id         OUT NOCOPY NUMBER
230 , x_accounting_coa_id          OUT NOCOPY NUMBER
231 , x_value_type_code            OUT NOCOPY VARCHAR2
232 )
233 RETURN NUMBER
234 IS
235 l_component_type       VARCHAR2(80)  ;
236 l_component_code       VARCHAR2(30)  ;
237 l_component_type_code  VARCHAR2(1)   ;
238 l_component_appl_id    INTEGER       ;
239 l_amb_context_code     VARCHAR2(30)  ;
240 l_log_module           VARCHAR2(240) ;
241 l_output_value         NUMBER        ;
242 BEGIN
243 IF g_log_enabled THEN
244       l_log_module := C_DEFAULT_MODULE||''.AcctDerRule_$adr_hash_id$'';
245 END IF;
246 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
247       trace
248          (p_msg      => ''BEGIN of AcctDerRule_$adr_hash_id$''
249          ,p_level    => C_LEVEL_PROCEDURE
250          ,p_module   => l_log_module);
251 END IF;
252 --
253 l_component_type         := ''AMB_ADR'';
254 l_component_code         := ''$account_derivation_rule_code$'';
255 l_component_type_code    := ''$adr_type_code$'';
256 l_component_appl_id      :=  $adr_appl_id$;
257 l_amb_context_code       := ''$amb_context_code$'';
258 x_transaction_coa_id     := $transaction_coa_id$;
259 x_accounting_coa_id      := $accounting_coa_id$;
260 --
261 $adr_body$
262 --
263 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
264       trace
265          (p_msg      => ''END of AcctDerRule_$adr_hash_id$(invalid)''
266          ,p_level    => C_LEVEL_PROCEDURE
267          ,p_module   => l_log_module);
268 END IF;
269 xla_ae_journal_entry_pkg.g_global_status      :=  xla_ae_journal_entry_pkg.C_INVALID;
270 x_value_type_code := null;
271 l_output_value    := null;
272 xla_accounting_err_pkg.build_message
273                  (p_appli_s_name            => ''XLA''
274                  ,p_msg_name                => ''XLA_AP_INVALID_ADR''
275                  ,p_token_1                 => ''COMPONENT_NAME''
276                  ,p_value_1                 => xla_ae_sources_pkg.GetComponentName (
277                                                             l_component_type
278                                                           , l_component_code
279                                                           , l_component_type_code
280                                                           , l_component_appl_id
281                                                           , l_amb_context_code
282                                                           )
283                  ,p_token_2                 => ''OWNER''
284                  ,p_value_2                 => xla_lookups_pkg.get_meaning(
285                                                         ''XLA_OWNER_TYPE''
286                                                         ,l_component_type_code
287                                                         )
288                  ,p_token_3                 => ''PAD_NAME''
292                                                         ''XLA_OWNER_TYPE''
289                  ,p_value_3                 => xla_ae_journal_entry_pkg.g_cache_pad.pad_session_name
290                  ,p_token_4                 => ''PAD_OWNER''
291                  ,p_value_4                 => xla_lookups_pkg.get_meaning(
293                                                         ,xla_ae_journal_entry_pkg.g_cache_pad.product_rule_type_code
294                                                         )
295                  ,p_entity_id               => xla_ae_journal_entry_pkg.g_cache_event.entity_id
296                  ,p_event_id                => xla_ae_journal_entry_pkg.g_cache_event.event_id
297                  ,p_ledger_id               => xla_ae_journal_entry_pkg.g_cache_event.target_ledger_id
298                  ,p_ae_header_id            => NULL
299 );
300 RETURN l_output_value;
301 EXCEPTION
302   WHEN xla_exceptions_pkg.application_exception THEN
303       RAISE;
304   WHEN OTHERS THEN
305        xla_exceptions_pkg.raise_message
306            (p_location => ''$package_name$.AcctDerRule_$adr_hash_id$'');
307 END AcctDerRule_$adr_hash_id$;
308 --
309 ';
310 
311 /*------------------------------------------------------------+
312 |                                                             |
313 |                                                             |
314 |                     Additions for TAB                       |
315 |                                                             |
316 |                                                             |
317 +-------------------------------------------------------------*/
318 --
319 
320 C_ADR_CCID_TAD_FUNCT_NAME        CONSTANT      VARCHAR2(50):=
321    'get_ccid_$adr_hash_id$';
322 
323 C_ADR_CCID_TAD_FUNCT_SPEC        CONSTANT      VARCHAR2(10000):= '
324 ---------------------------------------
325 --
326 -- PUBLIC FUNCTION
327 --         get_ccid_$adr_hash_id$
328 --
329 ---------------------------------------
330 FUNCTION '|| C_ADR_CCID_TAD_FUNCT_NAME || ' (
331  p_mode                            IN VARCHAR2
332 ,p_rowid                           IN UROWID
333 ,p_line_index                      IN NUMBER
334 ,p_chart_of_accounts_id            IN NUMBER
335 ,p_chart_of_accounts_name          IN VARCHAR2
336 ,p_gl_balancing_segment_name       IN VARCHAR2
337 ,p_gl_account_segment_name         IN VARCHAR2
338 ,p_gl_intercompany_segment_name    IN VARCHAR2
339 ,p_gl_management_segment_name      IN VARCHAR2
340 ,p_fa_cost_ctr_segment_name        IN VARCHAR2
341 ,p_validation_date                 IN DATE $parameters$
342 )
343 RETURN NUMBER
344 PARALLEL_ENABLE;
345 ';
346 
347 
348 C_ADR_CCID_TAD_FUNCT_BODY        CONSTANT      VARCHAR2(10000):= '
349 ---------------------------------------
350 --
351 -- PUBLIC FUNCTION
352 --         get_ccid_$adr_hash_id$
353 --
354 ---------------------------------------
355 FUNCTION get_ccid_$adr_hash_id$ (
356  p_mode                            IN VARCHAR2
357 ,p_rowid                           IN UROWID
358 ,p_line_index                      IN NUMBER
359 ,p_chart_of_accounts_id            IN NUMBER
360 ,p_chart_of_accounts_name          IN VARCHAR2
361 ,p_gl_balancing_segment_name       IN VARCHAR2
362 ,p_gl_account_segment_name         IN VARCHAR2
363 ,p_gl_intercompany_segment_name    IN VARCHAR2
364 ,p_gl_management_segment_name      IN VARCHAR2
365 ,p_fa_cost_ctr_segment_name        IN VARCHAR2
366 ,p_validation_date                 IN DATE $parameters$
367 )
368 RETURN NUMBER
369 IS
370 l_return_value NUMBER;
371 l_log_module VARCHAR2(2000);
372 BEGIN
373 
374 IF g_log_enabled THEN
375       l_log_module := C_DEFAULT_MODULE||''.get_ccid_$adr_hash_id$'';
376 END IF;
377 
378 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
379 
380       trace
381          ( p_module   => l_log_module
382           ,p_msg      => ''BEGIN of get_ccid_$adr_hash_id$''
383           ,p_level    => C_LEVEL_PROCEDURE);
384 
385 END IF;
386 
387 $adr_body$
388 
389 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
390 
391       trace
392          ( p_module   => l_log_module
393           ,p_msg      => ''END of get_ccid_$adr_hash_id$''
394           ,p_level    => C_LEVEL_PROCEDURE);
395 
396 END IF;
397 
398 log_error (
399                   p_mode           => p_mode
400                  ,p_rowid          => p_rowid
401                  ,p_line_index     => p_line_index
402                  ,p_msg_name       => ''XLA_TAB_GET_SEG_CCID_NO_VALUE''
403                  ,p_token_name_1   => ''SEGMENT_RULE_NAME''
404                  ,p_token_value_1  => ''$ADR_NAME$''
405                 );
406 RETURN NULL;
407 
408 EXCEPTION
409 WHEN OTHERS
410 THEN
411    log_error (
412                   p_mode           => p_mode
413                  ,p_rowid          => p_rowid
414                  ,p_line_index     => p_line_index
415                  ,p_msg_name       => ''XLA_TAB_ADR_GENERIC_EXCEPTION''
416                  ,p_token_name_1   => ''FUNCTION_NAME''
417                  ,p_token_value_1  => ''$TAD_PACKAGE_NAME_3$.get_ccid_$adr_hash_id$ ''
418                  ,p_token_name_2   => ''ERROR''
419                  ,p_token_value_2  => SQLERRM
420                  ,p_token_name_3   => ''SEGMENT_RULE_NAME''
424 END get_ccid_$adr_hash_id$;
421                  ,p_token_value_3  => ''$ADR_NAME$''
422                 );
423    RETURN NULL;
425 ';
426 
427 C_ADR_SEGMENT_TAD_FUNCT_NAME        CONSTANT      VARCHAR2(50):=
428    'get_segment_$adr_hash_id$';
429 
430 C_ADR_SEGMENT_TAD_FUNCT_SPEC        CONSTANT      VARCHAR2(10000):= '
431 ---------------------------------------
432 --
433 -- PUBLIC FUNCTION
434 --         get_segment_$adr_hash_id$
435 --
436 ---------------------------------------
437 FUNCTION '|| C_ADR_SEGMENT_TAD_FUNCT_NAME || ' (
438  p_mode                            IN VARCHAR2
439 ,p_rowid                           IN UROWID
440 ,p_line_index                      IN NUMBER
441 ,p_chart_of_accounts_id            IN NUMBER
442 ,p_chart_of_accounts_name          IN VARCHAR2
443 ,p_gl_balancing_segment_name       IN VARCHAR2
444 ,p_gl_account_segment_name         IN VARCHAR2
445 ,p_gl_intercompany_segment_name    IN VARCHAR2
446 ,p_gl_management_segment_name      IN VARCHAR2
447 ,p_fa_cost_ctr_segment_name        IN VARCHAR2
448 ,p_validation_date                 IN DATE $parameters$
449 )
450 RETURN VARCHAR2
451 PARALLEL_ENABLE;
452 ';
453 
454 
455 C_ADR_SEGMENT_TAD_FUNCT_BODY        CONSTANT      VARCHAR2(10000):= '
456 ---------------------------------------
457 --
458 -- PUBLIC FUNCTION
459 --         get_segment_$adr_hash_id$
460 --
461 ---------------------------------------
462 FUNCTION get_segment_$adr_hash_id$ (
463  p_mode                            IN VARCHAR2
464 ,p_rowid                           IN UROWID
465 ,p_line_index                      IN NUMBER
466 ,p_chart_of_accounts_id            IN NUMBER
467 ,p_chart_of_accounts_name          IN VARCHAR2
468 ,p_gl_balancing_segment_name       IN VARCHAR2
469 ,p_gl_account_segment_name         IN VARCHAR2
470 ,p_gl_intercompany_segment_name    IN VARCHAR2
471 ,p_gl_management_segment_name      IN VARCHAR2
472 ,p_fa_cost_ctr_segment_name        IN VARCHAR2
473 ,p_validation_date                 IN DATE $parameters$
474 )
475 RETURN VARCHAR2
476 IS
477 l_component_type       VARCHAR2(80);
478 l_component_code       VARCHAR2(30);
479 l_component_type_code  VARCHAR2(1);
480 l_component_appl_id    INTEGER;
481 l_amb_context_code     VARCHAR2(30);
482 l_return_value         VARCHAR2(30);
483 
484 l_log_module           VARCHAR2(2000);
485 
486 BEGIN
487 
488 IF g_log_enabled THEN
489       l_log_module := C_DEFAULT_MODULE||''.get_segment_$adr_hash_id$'';
490 END IF;
491 
492 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
493 
494       trace
495          ( p_module   => l_log_module
496           ,p_msg      => ''BEGIN of get_segment_$adr_hash_id$''
497           ,p_level    => C_LEVEL_PROCEDURE);
498 
499 END IF;
500 
501 l_component_type         := ''AMB_ADR'';
502 l_component_code         := ''$adr_code$'';
503 l_component_type_code    := ''$adr_type_code$'';
504 l_component_appl_id      :=  $adr_appl_id$;
505 l_amb_context_code       := ''$amb_context_code$'';
506 
507 $adr_body$
508 
509 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
510 
511       trace
512          ( p_module   => l_log_module
513           ,p_msg      => ''END of get_segment_$adr_hash_id$''
514           ,p_level    => C_LEVEL_PROCEDURE);
515 
516 END IF;
517 
518 log_error (
519                   p_mode           => p_mode
520                  ,p_rowid          => p_rowid
521                  ,p_line_index     => p_line_index
522                  ,p_msg_name       => ''XLA_TAB_GET_SEG_NO_VALUE''
523                  ,p_token_name_1   => ''FUNCTION_NAME''
524                  ,p_token_value_1  => ''$TAD_PACKAGE_NAME_3$.get_ccid_$adr_hash_id$ ''
525                  ,p_token_name_2   => ''ADR_NAME''
526                  ,p_token_value_2  => ''$ADR_NAME$''
527                 );
528 
529 RETURN NULL;
530 
531 EXCEPTION
532 WHEN OTHERS
533 THEN
534     log_error (
535                   p_mode           => p_mode
536                  ,p_rowid          => p_rowid
537                  ,p_line_index     => p_line_index
538                  ,p_msg_name       => ''XLA_TAB_ADR_GENERIC_EXCEPTION''
539                  ,p_token_name_1   => ''FUNCTION_NAME''
540                  ,p_token_value_1  => ''$TAD_PACKAGE_NAME_3$.get_segment_$adr_hash_id$ ''
541                  ,p_token_name_2   => ''ERROR''
542                  ,p_token_value_2  => SQLERRM
543                  ,p_token_name_3   => ''SEGMENT_RULE_NAME''
544                  ,p_token_value_3  => ''$ADR_NAME$''
545                 );
546 
547 END get_segment_$adr_hash_id$;
548 ';
549 
550 
551 --
552 -- Insert source CCID
553 --
554 C_TAD_CCID_S                         CONSTANT       VARCHAR2(10000):='
555 --The CCID comes from a source
556 RETURN TO_NUMBER($source$);
557 ';
558 --
559 --
560 -- Insert constant CCID
561 --
562 C_TAD_CCID_C                         CONSTANT       VARCHAR2(10000):='
563 --The CCID is a constant value
564 RETURN TO_NUMBER($source$);
565 ';
566 --
567 -- Insert Segment
568 --
569 C_TAD_SEGMENT                       CONSTANT       VARCHAR2(10000):='
570 RETURN TO_CHAR($source$);
571 ';
572 --
573 --
577 get_flexfield_segment(
574 --
575 C_TAD_FLEXFIELD_SEGMENT                     CONSTANT       VARCHAR2(10000):='
576 --
578    p_mode                            => p_mode
579   ,p_rowid                           => p_rowid
580   ,p_line_index                      => p_line_index
581   ,p_chart_of_accounts_id            => p_chart_of_accounts_id
582   ,p_chart_of_accounts_name          => p_chart_of_accounts_name
583   ,p_ccid                            => $combination_id$
584   ,p_source_code                     => ''$source_code$''
585   ,p_source_type_code                => ''$source_type_code$''
586   ,p_source_application_id           => $source_application_id$
587   ,p_segment_name                    => ''$segment_code$''
588   ,p_gl_balancing_segment_name       => p_gl_balancing_segment_name
589   ,p_gl_account_segment_name         => p_gl_account_segment_name
590   ,p_gl_intercompany_segment_name    => p_gl_intercompany_segment_name
591   ,p_gl_management_segment_name      => p_gl_management_segment_name
592   ,p_fa_cost_ctr_segment_name        => p_fa_cost_ctr_segment_name
593   ,p_adr_name                        => ''$ADR_NAME$''
594 )'
595 ;
596 
597 --
598 -- Mapping Set to get CCID value
599 --
600 C_TAD_MAPPING_CCID           CONSTANT       VARCHAR2(10000):='
601 BEGIN
602     --The CCID comes from a mapping set
603     SELECT value_code_combination_id
604       INTO l_return_value
605       FROM
606     ( SELECT value_code_combination_id
607         FROM
608        (
609         SELECT 1 priority
610               ,xmsv.value_code_combination_id
611               ,xmsv.input_value_type_code
612           FROM xla_mapping_set_values  xmsv
613          WHERE xmsv.mapping_set_code    = ''$mapping_set_code$''
614            AND  ( TRUNC(p_validation_date)  BETWEEN NVL(xmsv.effective_date_from,p_validation_date)
615                                      AND NVL(xmsv.effective_date_to,p_validation_date) )
616 
617            AND xmsv.input_value_type_code  =''I''
618            AND xmsv.input_value_constant = TO_CHAR($input_source$)
619            AND enabled_flag = ''Y''
620        UNION
621         SELECT 2 priority
622               ,xmsv.value_code_combination_id
623               ,xmsv.input_value_type_code
624            FROM  xla_mapping_set_values  xmsv
625           WHERE  xmsv.mapping_set_code    = ''$mapping_set_code$''
626             AND  ( TRUNC(p_validation_date)  BETWEEN NVL(xmsv.effective_date_from,p_validation_date)
627                                      AND NVL(xmsv.effective_date_to,p_validation_date) )
628             AND xmsv.input_value_type_code = ''D''
629             AND enabled_flag = ''Y''
630        )
631        ORDER BY priority
632     )
633     WHERE ROWNUM = 1;
634     RETURN l_return_value;
635 EXCEPTION
636     WHEN NO_DATA_FOUND THEN
637         log_error (
638                   p_mode           => p_mode
639                  ,p_rowid          => p_rowid
640                  ,p_line_index     => p_line_index
641                  ,p_msg_name       => ''XLA_TAB_GET_SEG_CCID_NO_VALUE''
642                  ,p_token_name_1   => ''SEGMENT_RULE_NAME''
643                  ,p_token_value_1  => ''$ADR_NAME$''
644                 );
645 
646         log_error (
647                   p_mode           => p_mode
648                  ,p_rowid          => p_rowid
649                  ,p_line_index     => p_line_index
650                  ,p_msg_name       => ''XLA_TAB_GET_SEG_NO_MAPPING''
651                  ,p_token_name_1   => ''MAPPING_NAME''
652                  ,p_token_value_1  => ''$mapping_set_code$''
653                  ,p_token_name_2   => ''SEGMENT_VALUE''
654                  ,p_token_value_2  => $input_source$
655                 );
656         RETURN NULL;
657 END;
658 ';
659 --
660 --
661 -- Mapping Set, to get segment value
662 --
663 C_TAD_MAPPING_SEGMENT        CONSTANT       VARCHAR2(10000):='
664 BEGIN
665 --The CCID comes from a mapping set
666     SELECT value_constant
667       INTO l_return_value
668       FROM
669     ( SELECT value_constant
670         FROM
671        (
672         SELECT 1 priority
673               ,xmsv.value_constant
674               ,xmsv.input_value_type_code
675           FROM xla_mapping_set_values  xmsv
676          WHERE xmsv.mapping_set_code    = ''$mapping_set_code$''
677            AND  ( TRUNC(p_validation_date)  BETWEEN NVL(xmsv.effective_date_from,p_validation_date)
678                                      AND NVL(xmsv.effective_date_to,p_validation_date) )
679 
680            AND xmsv.input_value_type_code  =''I''
681            AND xmsv.input_value_constant = TO_CHAR($input_source$)
682            AND enabled_flag = ''Y''
683        UNION
684         SELECT 2 priority
685               ,xmsv.value_constant
686               ,xmsv.input_value_type_code
687            FROM  xla_mapping_set_values  xmsv
688           WHERE  xmsv.mapping_set_code    = ''$mapping_set_code$''
689             AND  ( TRUNC(p_validation_date)  BETWEEN NVL(xmsv.effective_date_from,p_validation_date)
690                                      AND NVL(xmsv.effective_date_to,p_validation_date) )
691             AND xmsv.input_value_type_code = ''D''
692             AND enabled_flag = ''Y''
693        )
694        ORDER BY priority
695     )
696     WHERE ROWNUM = 1;
697     RETURN l_return_value;
698 EXCEPTION
702                  ,p_rowid          => p_rowid
699     WHEN NO_DATA_FOUND THEN
700         log_error (
701                   p_mode           => p_mode
703                  ,p_line_index     => p_line_index
704                  ,p_msg_name       => ''XLA_TAB_GET_SEG_CCID_NO_VALUE''
705                  ,p_token_name_1   => ''SEGMENT_RULE_NAME''
706                  ,p_token_value_1  => ''$ADR_NAME$''
707                 );
708 
709         log_error (
710                   p_mode           => p_mode
711                  ,p_rowid          => p_rowid
712                  ,p_line_index     => p_line_index
713                  ,p_msg_name       => ''XLA_TAB_GET_SEG_NO_MAPPING''
714                  ,p_token_name_1   => ''MAPPING_NAME''
715                  ,p_token_value_1  => ''$mapping_set_code$''
716                  ,p_token_name_2   => ''SEGMENT_VALUE''
717                  ,p_token_value_2  => $input_source$
718                 );
719         RETURN NULL;
720 END;
721 ';
722 
723 --=============================================================================
724 --
725 --
726 --
727 --
728 --
729 --
730 --
731 --
732 --
733 --
734 --
735 --
736 --
737 --
738 --
739 --
740 --
741 --
742 --
743 --
744 --
745 --
746 --=============================================================================
747 --=============================================================================
748 --               *********** Local Trace Routine **********
749 --=============================================================================
750 
751 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
752 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
753 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
754 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
755 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
756 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
757 
758 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
759 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_cmp_adr_pkg';
760 
761 g_log_level           NUMBER;
762 g_log_enabled         BOOLEAN;
763 
764 PROCEDURE trace
765            ( p_msg                        IN VARCHAR2
766            , p_level                      IN NUMBER
767            , p_module                     IN VARCHAR2)
768 IS
769 BEGIN
770 ----------------------------------------------------------------------------
771 -- Following is for FND log.
772 ----------------------------------------------------------------------------
773 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
774           fnd_log.message(p_level, p_module );
775 ELSIF p_level >= g_log_level THEN
776           fnd_log.string(p_level , p_module , p_msg);
777 END IF;
778 
779 EXCEPTION
780        WHEN xla_exceptions_pkg.application_exception THEN
781           RAISE;
782        WHEN OTHERS THEN
783           xla_exceptions_pkg.raise_message
784              (p_location   => 'xla_cmp_adr_pkg.trace');
785 END trace;
786 
787 /*------------------------------------------------------------+
788 |                                                             |
789 |  Private function                                           |
790 |                                                             |
791 |       generate_adr_seg_detail                               |
792 |                                                             |
793 |  Translates each ADR segment row into PL/SQL code           |
794 |                                                             |
795 +------------------------------------------------------------*/
796 
797 /*-------------------------------------------------------------------------------+
798 |                                                                                |
799 |   BNF: ADR segment detail                                                      |
800 |                                                                                |
801 |   <segment_detail>  := <key_flexfield_segment>                                 |
802 |                     |  <key_flexfield>   <segment_code>                        |
803 |                     |  <constant >                                             |
804 |                     |  <mapping_set_code> <input_key_flexfield_segment>        |
805 |                     |  <mapping_set_code> <input_key_flexfield> <segment_code> |
806 |                     ;                                                          |
807 |                                                                                |
808 +-------------------------------------------------------------------------------*/
809 
810 FUNCTION generate_adr_seg_detail (
811   p_value_type_code            IN VARCHAR2
812 , p_value_source_appl_id       IN NUMBER
813 , p_value_source_type_code     IN VARCHAR2
814 , p_value_source_code          IN VARCHAR2
815 , p_value_constant             IN VARCHAR2
816 , p_value_mapping_set_code     IN VARCHAR2
817 , p_value_flexfield_segment    IN VARCHAR2
818 , p_input_source_appl_id       IN NUMBER
819 , p_input_source_type_code     IN VARCHAR2
820 , p_input_source_code          IN VARCHAR2
821 , p_array_adr_source_index     IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
825 IS
822 , p_rec_sources                IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
823 )
824 RETURN CLOB
826 
827 C_RETURN_SEGMENT                     CONSTANT  VARCHAR2(10000):=
828 '--
829   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
830 
831       trace
832          (p_msg      => ''END of AcctDerRule_$adr_hash_id$''
833          ,p_level    => C_LEVEL_PROCEDURE
834          ,p_module   => l_log_module);
835 
836   END IF;
837   x_value_combination_id  := $code_combination_id$ ;
838   x_value_segment_code    := $value_segment_code$ ;
839   x_value_type_code       := ''$value_type_code$'';
840   l_output_value          := $source$;
841   RETURN l_output_value;
842 ';
843 
844 C_RETURN_NULL_SEGMENT                     CONSTANT  VARCHAR2(10000):=
845 '--
846   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
847 
848       trace
849          (p_msg      => ''END of AcctDerRule_$adr_hash_id$''
850          ,p_level    => C_LEVEL_PROCEDURE
851          ,p_module   => l_log_module);
852 
853   END IF;
854   x_value_combination_id  := null;
855   x_value_segment_code    := null;
856   x_value_type_code       := null;
857   l_output_value          := null;
858   RETURN l_output_value;
859 ';
860 
861 C_KEY_FLEXFIELD_SEGMENT        CONSTANT       VARCHAR2(10000):='
862 xla_ae_code_combination_pkg.get_flex_segment_value(
863    p_combination_id          =>  $combination_id$
864   ,p_segment_code            => ''$segment_code$''
865   ,p_id_flex_code            => ''$id_flex_code$''
866   ,p_flex_application_id     => $flexfield_appl_id$
867   ,p_application_short_name  => ''$appl_short_name$''
868   ,p_source_code             => ''$source_code$''
869   ,p_source_type_code        => ''$source_type_code$''
870   ,p_source_application_id   => $source_application_id$
871   ,p_component_type          => l_component_type
872   ,p_component_code          => l_component_code
873   ,p_component_type_code     => l_component_type_code
874   ,p_component_appl_id       => l_component_appl_id
875   ,p_amb_context_code        => l_amb_context_code
876   ,p_entity_code             => NULL
877   ,p_event_class_code        => NULL
878   ,p_ae_header_id            => NULL
879 )'
880 ;
881 
882 --
883 -- Mapping Set, to get segment value
884 --
885 C_MAPPING_SEGMENT        CONSTANT       VARCHAR2(10000):='
886 xla_ae_sources_pkg.get_mapping_flexfield_char (
887    p_component_type       => l_component_type
888  , p_component_code       => l_component_code
889  , p_component_type_code  => l_component_type_code
890  , p_component_appl_id    => l_component_appl_id
891  , p_amb_context_code     => l_amb_context_code
892  , p_mapping_set_code     => ''$mapping_set_code$''
893  , p_input_constant       => TO_CHAR($input_source$)
894  , p_ae_header_id         => p_ae_header_id
895  )'
896  ;
897 
898 l_Idx              BINARY_INTEGER;
899 l_detail           VARCHAR2(32000);
900 l_log_module       VARCHAR2(240);
901 BEGIN
902 IF g_log_enabled THEN
903       l_log_module := C_DEFAULT_MODULE||'.generate_adr_seg_detail';
904 END IF;
905 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
906 
907       trace
908          (p_msg      => 'BEGIN of generate_adr_seg_detail'
909          ,p_level    => C_LEVEL_PROCEDURE
910          ,p_module   => l_log_module);
911 
912 END IF;
913 
914 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
915       trace
916          (p_msg      => 'p_value_type_code = ' ||p_value_type_code||
917                         ' - p_value_source_appl_id= '||p_value_source_appl_id||
918                         ' - p_value_source_type_code= '||p_value_source_type_code||
919                         ' - p_value_source_code= '||p_value_source_code||
920                         ' - p_value_constant= '||p_value_constant||
921                         ' - p_value_mapping_set_code= '||p_value_mapping_set_code||
922                         ' - p_value_flexfield_segment= '||p_value_flexfield_segment||
923                         ' - p_input_source_appl_id= '||p_input_source_appl_id||
924                         ' - p_input_source_type_code= '||p_input_source_type_code||
925                         ' - p_input_source_code= '||p_input_source_code
926          ,p_level    => C_LEVEL_STATEMENT
927          ,p_module   => l_log_module);
928 
929 END IF;
930 
931 IF   g_component_type  = 'TAB_ADR' THEN
932   l_detail :=NULL;
933 ELSE
934   l_detail := C_RETURN_NULL_SEGMENT;
935 END IF;
936 
937 IF p_value_type_code= 'S'                AND
938    p_value_source_appl_id    IS NOT NULL AND
939    p_value_source_type_code  IS NOT NULL AND
940    p_value_source_code       IS NOT NULL
941 THEN
942   -- source
943   l_Idx := xla_cmp_source_pkg.StackSource (
944                 p_source_code                => p_value_source_code
945               , p_source_type_code           => p_value_source_type_code
946               , p_source_application_id      => p_value_source_appl_id
947               , p_array_source_index         => p_array_adr_source_index
948               , p_rec_sources                => p_rec_sources
949               );
950 
951    IF   g_component_type  = 'TAB_ADR'
952    THEN
953       l_detail := C_TAD_SEGMENT;
954    ELSE
955       l_detail := C_RETURN_SEGMENT;
956       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_type_code$',nvl(p_value_type_code,' '));
957 
961      -- segment
958    END IF;
959 
960    IF p_value_flexfield_segment IS NULL THEN
962      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source$',
963                                nvl(xla_cmp_source_pkg.GenerateSource(
964                                      p_Index                     => l_Idx
965                                    , p_rec_sources               => p_rec_sources
966                                    , p_translated_flag           => 'N'),' null')
967                               );
968      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$code_combination_id$', ' null');
969      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_segment_code$', ' null');
970 
971    ELSE
972      -- get segment from key flexfield
973      IF   g_component_type  = 'TAB_ADR'
974      THEN
975 
976       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source$' , C_TAD_FLEXFIELD_SEGMENT);
977 
978       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$combination_id$', xla_cmp_source_pkg.GenerateSource(
979                                  p_Index                     => l_Idx
980                                , p_rec_sources               => p_rec_sources
981                                , p_translated_flag           => 'N')
982                         );
983 
984       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$segment_code$'         ,p_value_flexfield_segment);
985       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source_code$'          ,p_rec_sources.array_source_code(l_Idx) );
986       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source_type_code$'     ,p_rec_sources.array_source_type_code(l_Idx) );
987       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source_application_id$',to_char(p_rec_sources.array_application_id(l_Idx)) );
988 
989      ELSE
990 
991         l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$code_combination_id$', xla_cmp_source_pkg.GenerateSource(
992                                      p_Index                     => l_Idx
993                                    , p_rec_sources               => p_rec_sources
994                                    , p_translated_flag           => 'N')
995                                    );
996         l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_segment_code$', ''''||p_value_flexfield_segment||'''');
997         l_detail  := xla_cmp_string_pkg.replace_token(l_detail ,'$source$' , ' null');
998 
999      END IF;
1000 
1001    END IF;
1002 
1003 ELSIF p_value_type_code = 'C'  THEN
1004 -- constant
1005 
1006      IF   g_component_type  = 'TAB_ADR' THEN
1007          l_detail := C_TAD_SEGMENT;
1008      ELSE
1009          l_detail := C_RETURN_SEGMENT;
1010          l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_type_code$',p_value_type_code);
1011          l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$code_combination_id$', ' null');
1012          l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_segment_code$', ' null');
1013      END IF;
1014 
1015      IF p_value_constant IS NULL THEN
1016         l_detail := xla_cmp_string_pkg.replace_token(l_detail,'$source$' , ' null') ;
1017      ELSE
1018         l_detail := xla_cmp_string_pkg.replace_token(l_detail,'$source$' , ''''||p_value_constant||'''') ;
1019      END IF;
1020 
1021 ELSIF  p_value_type_code = 'M' AND
1022        p_value_mapping_set_code      IS NOT NULL AND
1023        p_input_source_code           IS NOT NULL AND
1024        p_input_source_type_code      IS NOT NULL AND
1025        p_input_source_appl_id        IS NOT NULL
1026 THEN
1027 -- Mapping set
1028    l_Idx := xla_cmp_source_pkg.StackSource (
1029                 p_source_code                => p_input_source_code
1030               , p_source_type_code           => p_input_source_type_code
1031               , p_source_application_id      => p_input_source_appl_id
1032               , p_array_source_index         => p_array_adr_source_index
1033               , p_rec_sources                => p_rec_sources
1034               );
1035 
1036    IF   g_component_type  = 'TAB_ADR'
1037    THEN
1038       l_detail := C_TAD_MAPPING_SEGMENT;
1039    ELSE
1040       l_detail := C_RETURN_SEGMENT;
1041       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_type_code$',p_value_type_code);
1042 
1043    END IF;
1044 
1045    IF p_value_flexfield_segment IS NULL THEN
1046       --segment mapping set
1047       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source$', C_MAPPING_SEGMENT);
1048       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$mapping_set_code$',p_value_mapping_set_code);
1049       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$input_source$',
1050                                xla_cmp_source_pkg.GenerateSource(
1051                                  p_Index                     => l_Idx
1052                                , p_rec_sources               => p_rec_sources
1053                                , p_translated_flag           => 'N')
1054                              );
1055       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$code_combination_id$', ' null');
1056       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_segment_code$', ' null');
1057 
1058    ELSE
1059      --key flexfield mapping set
1060      IF   g_component_type  = 'TAB_ADR'
1061      THEN
1062         l_detail  := xla_cmp_string_pkg.replace_token(l_detail ,'$input_source$' , C_TAD_FLEXFIELD_SEGMENT);
1063      ELSE
1064         l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source$', C_MAPPING_SEGMENT);
1068      END IF;
1065         l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$input_source$', C_KEY_FLEXFIELD_SEGMENT);
1066         l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_segment_code$', ' null');
1067         l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$code_combination_id$', ' null');
1069 
1070      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$mapping_set_code$',p_value_mapping_set_code);
1071      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$combination_id$', xla_cmp_source_pkg.GenerateSource(
1072                                  p_Index                     => l_Idx
1073                                , p_rec_sources               => p_rec_sources
1074                                , p_translated_flag           => 'N')
1075                         );
1076 
1077      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$segment_code$'         ,p_value_flexfield_segment);
1078      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$id_flex_code$'         ,p_rec_sources.array_id_flex_code(l_Idx));
1079      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$flexfield_appl_id$'    ,to_char(p_rec_sources.array_flexfield_appl_id(l_Idx)) );
1080      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$appl_short_name$'      ,p_rec_sources.array_appl_short_name(l_Idx));
1081      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source_code$'          ,p_rec_sources.array_source_code(l_Idx) );
1082      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source_type_code$'     ,p_rec_sources.array_source_type_code(l_Idx) );
1083      l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source_application_id$',to_char(p_rec_sources.array_application_id(l_Idx)) );
1084 
1085    END IF;
1086 
1087 END IF;
1088 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1089       trace
1090          (p_msg      => 'END of generate_adr_seg_detail ='||length(l_detail)
1091          ,p_level    => C_LEVEL_PROCEDURE
1092          ,p_module   => l_log_module);
1093 END IF;
1094 RETURN l_detail;
1095 EXCEPTION
1096    WHEN xla_exceptions_pkg.application_exception   THEN
1097         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1098          trace
1099             (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR ='||sqlerrm
1100             ,p_level    => C_LEVEL_EXCEPTION
1101             ,p_module   => l_log_module);
1102         END IF;
1103         RETURN NULL;
1104    WHEN OTHERS    THEN
1105       xla_exceptions_pkg.raise_message
1106          (p_location => 'xla_cmp_adr_pkg.generate_adr_seg_detail');
1107 END generate_adr_seg_detail;
1108 
1109 
1110 /*------------------------------------------------------------+
1111 |                                                             |
1112 |  Private function                                           |
1113 |                                                             |
1114 |       generate_adr_seg_detail                               |
1115 |                                                             |
1116 |  Translates each ADR flexfield(ccid) row into PL/SQL code   |
1117 |                                                             |
1118 +------------------------------------------------------------*/
1119 
1120 /*-----------------------------------------------------------------------------+
1121 |                                                                              |
1122 |   BNF: ADR CCID detail                                                       |
1123 |                                                                              |
1124 |   <ccid_detail>  := <key_flexfield>                                          |
1125 |                   |  <constant >                                             |
1126 |                   |  <mapping_set_code> <input_key_flexfield>                |
1127 |                   ;                                                          |
1128 |                                                                              |
1129 +-----------------------------------------------------------------------------*/
1130 
1131 FUNCTION generate_adr_ccid_detail (
1132   p_value_type_code              IN VARCHAR2
1133 , p_value_source_appl_id         IN NUMBER
1134 , p_value_source_type_code       IN VARCHAR2
1135 , p_value_source_code            IN VARCHAR2
1136 , p_value_constant               IN VARCHAR2
1137 , p_value_code_combination_id    IN NUMBER
1138 , p_value_flexfield_segment      IN VARCHAR2
1139 , p_value_mapping_set_code       IN VARCHAR2
1140 , p_input_source_appl_id         IN NUMBER
1141 , p_input_source_type_code       IN VARCHAR2
1142 , p_input_source_code            IN VARCHAR2
1143 , p_array_adr_source_index       IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1144 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
1145 )
1146 RETURN CLOB
1147 IS
1148 
1149 C_RETURN_CCID                     CONSTANT  VARCHAR2(10000):=
1150 ' --
1151   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1152       trace
1153          (p_msg      => ''END of AcctDerRule_$adr_hash_id$''
1154          ,p_level    => C_LEVEL_PROCEDURE
1155          ,p_module   => l_log_module);
1156   END IF;
1157   x_value_type_code := ''$value_type_code$'';
1158   l_output_value    := TO_NUMBER($source$);
1159   RETURN l_output_value;
1160 ';
1161 
1162 C_RETURN_NULL_CCID                     CONSTANT  VARCHAR2(10000):=
1163 ' --
1164   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1165       trace
1166          (p_msg      => ''END of AcctDerRule_$adr_hash_id$''
1167          ,p_level    => C_LEVEL_PROCEDURE
1168          ,p_module   => l_log_module);
1172   RETURN l_output_value;
1169   END IF;
1170   x_value_type_code := null;
1171   l_output_value    := null;
1173 ';
1174 
1175 
1176 -- Mapping Set to get CCID value
1177 --
1178 C_MAPPING_CCID           CONSTANT       VARCHAR2(10000):='
1179 xla_ae_sources_pkg.get_mapping_flexfield_number (
1180    p_component_type       => l_component_type
1181  , p_component_code       => l_component_code
1182  , p_component_type_code  => l_component_type_code
1183  , p_component_appl_id    => l_component_appl_id
1184  , p_amb_context_code     => l_amb_context_code
1185  , p_mapping_set_code     => ''$mapping_set_code$''
1186  , p_input_constant       => TO_CHAR($input_source$)
1187  , p_ae_header_id          => p_ae_header_id
1188  )'
1189  ;
1190 --
1191 
1192 l_Idx              BINARY_INTEGER;
1193 l_detail           CLOB;
1194 l_log_module       VARCHAR2(240);
1195 BEGIN
1196 IF g_log_enabled THEN
1197       l_log_module := C_DEFAULT_MODULE||'.generate_adr_ccid_detail';
1198 END IF;
1199 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1200       trace
1201          (p_msg      => 'BEGIN of generate_adr_ccid_detail'
1202          ,p_level    => C_LEVEL_PROCEDURE
1203          ,p_module   => l_log_module);
1204 END IF;
1205 
1206 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1207       trace
1208          (p_msg      => 'p_value_type_code = ' ||p_value_type_code||
1209                         ' - p_value_source_appl_id= '||p_value_source_appl_id||
1210                         ' - p_value_source_type_code= '||p_value_source_type_code||
1211                         ' - p_value_source_code= '||p_value_source_code||
1212                         ' - p_value_constant= '||p_value_constant||
1213                         ' - p_value_code_combination_id= '||p_value_code_combination_id||
1214                         ' - p_value_flexfield_segment= '||p_value_flexfield_segment||
1215                         ' - p_value_mapping_set_code ='||p_value_mapping_set_code||
1216                         ' - p_input_source_appl_id= '||p_input_source_appl_id||
1217                         ' - p_input_source_type_code= '||p_input_source_type_code||
1218                         ' - p_input_source_code= '||p_input_source_code
1219          ,p_level    => C_LEVEL_STATEMENT
1220          ,p_module   => l_log_module);
1221 
1222 END IF;
1223 
1224 
1225 
1226 IF   g_component_type  = 'TAB_ADR' THEN
1227  l_detail := null;
1228 ELSE
1229  l_detail := C_RETURN_NULL_CCID;
1230 END IF;
1231 
1232 IF p_value_type_code = 'S'    AND
1233    p_value_source_code        IS NOT NULL AND
1234    p_value_source_type_code   IS NOT NULL AND
1235    p_value_source_appl_id     IS NOT NULL
1236 THEN
1237 --source
1238        l_Idx := xla_cmp_source_pkg.StackSource (
1239                 p_source_code                => p_value_source_code
1240               , p_source_type_code           => p_value_source_type_code
1241               , p_source_application_id      => p_value_source_appl_id
1242               , p_array_source_index         => p_array_adr_source_index
1243               , p_rec_sources                => p_rec_sources
1244               );
1245 
1246 
1247       IF   g_component_type  = 'TAB_ADR' THEN
1248          l_detail := C_TAD_CCID_S;
1249       ELSE
1250          l_detail := C_RETURN_CCID;
1251          l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_type_code$',p_value_type_code);
1252       END IF;
1253 
1254       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source$',
1255                                  xla_cmp_source_pkg.GenerateSource(
1256                                    p_Index                     => l_Idx
1257                                  , p_rec_sources                => p_rec_sources
1258                                  , p_translated_flag           => 'N')
1259                                    );
1260 
1261 ELSIF p_value_type_code = 'C'
1262 THEN
1263 --constant
1264 
1265    IF  g_component_type  = 'TAB_ADR'
1266    THEN
1267       l_detail := C_TAD_CCID_C;
1268    ELSE
1269       l_detail := C_RETURN_CCID;
1270       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_type_code$',p_value_type_code);
1271    END IF;
1272 
1273    IF p_value_code_combination_id IS NULL THEN
1274       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source$', 'null');
1275    ELSE
1276       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source$', to_char(p_value_code_combination_id));
1277    END IF;
1278 
1279 ELSIF  p_value_type_code             = 'M'       AND
1280        p_value_mapping_set_code      IS NOT NULL AND
1281        p_input_source_code           IS NOT NULL AND
1282        p_input_source_type_code      IS NOT NULL AND
1283        p_input_source_appl_id        IS NOT NULL
1284 THEN
1285 -- Mapping set
1286 
1287    l_Idx := xla_cmp_source_pkg.StackSource (
1288                 p_source_code                => p_input_source_code
1289               , p_source_type_code           => p_input_source_type_code
1290               , p_source_application_id      => p_input_source_appl_id
1291               , p_array_source_index         => p_array_adr_source_index
1292               , p_rec_sources                => p_rec_sources
1293               );
1294 
1295    IF   g_component_type  = 'TAB_ADR'
1296    THEN
1297       l_detail := C_TAD_MAPPING_CCID;
1298       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$mapping_set_code$',p_value_mapping_set_code);
1302                                , p_rec_sources               => p_rec_sources
1299       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$input_source$',
1300                                xla_cmp_source_pkg.GenerateSource(
1301                                  p_Index                     => l_Idx
1303                                , p_translated_flag           => 'N')
1304                          );
1305 
1306    ELSE
1307       --AAD
1308       l_detail := C_RETURN_CCID;
1309       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$value_type_code$',p_value_type_code);
1310       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$source$', C_MAPPING_CCID );
1311       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$mapping_set_code$',p_value_mapping_set_code);
1312       l_detail := xla_cmp_string_pkg.replace_token(l_detail ,'$input_source$',
1313                                xla_cmp_source_pkg.GenerateSource(
1314                                  p_Index                     => l_Idx
1315                                , p_rec_sources               => p_rec_sources
1316                                , p_translated_flag           => 'N')
1317                          );
1318    END IF;
1319 
1320 END IF;
1321 
1322 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1323       trace
1324          (p_msg      => 'END of generate_adr_ccid_detail ='||length(l_detail)
1325          ,p_level    => C_LEVEL_PROCEDURE
1326          ,p_module   => l_log_module);
1327 END IF;
1328 RETURN l_detail;
1329 EXCEPTION
1330    WHEN xla_exceptions_pkg.application_exception   THEN
1331         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1332          trace
1333             (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR ='||sqlerrm
1334             ,p_level    => C_LEVEL_EXCEPTION
1335             ,p_module   => l_log_module);
1336         END IF;
1337         RETURN NULL;
1338    WHEN OTHERS    THEN
1339       xla_exceptions_pkg.raise_message
1340          (p_location => 'xla_cmp_adr_pkg.generate_adr_ccid_detail');
1341 END generate_adr_ccid_detail;
1342 
1343 /*------------------------------------------------------------+
1344 |                                                             |
1345 |  Private function                                           |
1346 |                                                             |
1347 |       generate_attached_adr_detail                          |
1348 |                                                             |
1349 |  Translates each attached adr row into PL/SQL code          |
1350 |                                                             |
1351 +------------------------------------------------------------*/
1352 FUNCTION generate_attached_adr_detail(
1353   p_amb_context_code             IN VARCHAR2
1354 , p_value_segment_rule_appl_id   IN NUMBER
1355 , p_value_segment_rule_type_code IN VARCHAR2
1356 , p_value_segment_rule_code      IN VARCHAR2
1357 , p_flexfield_assign_mode        IN VARCHAR2
1358 , p_array_adr_source_index       IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1359 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
1360 )
1361 RETURN CLOB
1362 IS
1363    l_details            CLOB;
1364    l_detail             CLOB;
1365    l_cond               CLOB;
1366    l_endif              BOOLEAN;
1367    l_first              BOOLEAN;
1368    l_log_module         VARCHAR2(240);
1369    l_adr_name           VARCHAR2(80);
1370 BEGIN
1371 IF g_log_enabled THEN
1372       l_log_module := C_DEFAULT_MODULE||'.generate_attached_adr_detail';
1373 END IF;
1374 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1375       trace
1376          (p_msg      => 'BEGIN of generate_attached_adr_detail'
1377          ,p_level    => C_LEVEL_PROCEDURE
1378          ,p_module   => l_log_module);
1379 END IF;
1380 
1381 l_endif      := TRUE;
1382 l_first      := TRUE;
1383 l_details    := null;
1384 l_cond       := null;
1385 l_detail     := null;
1386 
1387 --
1388 -- Retrieve ADR Name
1389 --
1390 SELECT NAME
1391   INTO l_adr_name
1392   FROM xla_seg_rules_tl
1393  WHERE application_id         = p_value_segment_rule_appl_id
1394    AND amb_context_code       = p_amb_context_code
1395    AND segment_rule_type_code = p_value_segment_rule_type_code
1396    AND segment_rule_code      = p_value_segment_rule_code
1397    AND language               = userenv('LANG');
1398 
1399 --
1400 -- Retrieve ADR Details
1401 --
1402 FOR adr_detail_rec IN ( SELECT  xsrd.value_type_code
1403                               , xsrd.value_source_application_id
1404                               , xsrd.value_source_type_code
1405                               , xsrd.value_source_code
1406                               , xsrd.value_constant
1407                               , xsrd.value_code_combination_id
1408                               , xsrd.value_mapping_set_code
1409                               , xsrd.value_flexfield_segment_code
1410                               , xsrd.input_source_application_id
1411                               , xsrd.input_source_type_code
1412                               , xsrd.input_source_code
1413                               , xsrd.segment_rule_detail_id
1414                               , xsrd.user_sequence
1415                           FROM  xla_seg_rule_details         xsrd
1416                          WHERE xsrd.application_id         = p_value_segment_rule_appl_id
1417                            AND xsrd.segment_rule_code      = p_value_segment_rule_code
1421                         ) LOOP
1418                            AND xsrd.segment_rule_type_code = p_value_segment_rule_type_code
1419                            AND xsrd.amb_context_code       = p_amb_context_code
1420                          ORDER BY xsrd.user_sequence  -- priority
1422 
1423   l_detail := NULL;
1424 
1425   IF ( p_flexfield_assign_mode ='A') THEN
1426       -- accounting flexfield adr detail
1427       l_detail := generate_adr_ccid_detail(
1428              p_value_type_code                  => adr_detail_rec.value_type_code
1429            , p_value_source_appl_id             => adr_detail_rec.value_source_application_id
1430            , p_value_source_type_code           => adr_detail_rec.value_source_type_code
1431            , p_value_source_code                => adr_detail_rec.value_source_code
1432            , p_value_constant                   => adr_detail_rec.value_constant
1433            , p_value_code_combination_id        => adr_detail_rec.value_code_combination_id
1434            , p_value_flexfield_segment          => adr_detail_rec.value_flexfield_segment_code
1435            , p_value_mapping_set_code           => adr_detail_rec.value_mapping_set_code
1436            , p_input_source_appl_id             => adr_detail_rec.input_source_application_id
1437            , p_input_source_type_code           => adr_detail_rec.input_source_type_code
1438            , p_input_source_code                => adr_detail_rec.input_source_code
1439            , p_array_adr_source_index           => p_array_adr_source_index
1440            , p_rec_sources                      => p_rec_sources
1441            );
1442 
1443    ELSIF (p_flexfield_assign_mode ='S' OR p_flexfield_assign_mode = 'V') THEN
1444          -- segment or value set adr detail
1445       l_detail := generate_adr_seg_detail(
1446              p_value_type_code                  => adr_detail_rec.value_type_code
1447            , p_value_source_appl_id             => adr_detail_rec.value_source_application_id
1448            , p_value_source_type_code           => adr_detail_rec.value_source_type_code
1449            , p_value_source_code                => adr_detail_rec.value_source_code
1450            , p_value_constant                   => adr_detail_rec.value_constant
1451            , p_value_mapping_set_code           => adr_detail_rec.value_mapping_set_code
1452            , p_value_flexfield_segment          => adr_detail_rec.value_flexfield_segment_code
1453            --
1454            , p_input_source_appl_id             => adr_detail_rec.input_source_application_id
1455            , p_input_source_type_code           => adr_detail_rec.input_source_type_code
1456            , p_input_source_code                => adr_detail_rec.input_source_code
1457            --
1458            , p_array_adr_source_index           => p_array_adr_source_index
1459            --
1460            , p_rec_sources                      => p_rec_sources
1461            );
1462 
1463    END IF;
1464 
1465    l_cond := xla_cmp_condition_pkg.GetCondition   (
1466         p_application_id              => p_value_segment_rule_appl_id
1467        , p_component_type             => g_component_type
1468        , p_component_code             => p_value_segment_rule_code
1469        , p_component_type_code        => p_value_segment_rule_type_code
1470        , p_component_name             => NULL-- p_adr_name
1471        , p_amb_context_code           => p_amb_context_code
1472        , p_segment_rule_detail_id     => adr_detail_rec.segment_rule_detail_id
1473        , p_array_cond_source_index    => p_array_adr_source_index
1474        , p_rec_sources                => p_rec_sources
1475        );
1476 
1477    IF l_cond IS NULL THEN
1478     -- no condition
1479         IF l_endif THEN
1480 
1481            l_details   := l_details ||g_chr_newline||l_detail;
1482         ELSE
1483            l_endif   := TRUE;
1484            l_first   := TRUE;
1485 
1486            l_details := l_details ||g_chr_newline||'END IF;'||g_chr_newline;
1487            l_details := l_details ||g_chr_newline||l_detail;
1488        END IF;
1489    ELSE
1490     --condition
1491         IF l_first THEN
1492 
1493            l_details := l_details ||g_chr_newline||' IF '||l_cond||' THEN ';
1494            l_details := l_details ||g_chr_newline||l_detail;
1495            l_first   := FALSE;
1496            l_endif   := FALSE;
1497         ELSE
1498 
1499            l_details := l_details ||g_chr_newline||' ELSIF '||l_cond||' THEN ';
1500            l_details := l_details ||g_chr_newline||l_detail;
1501            l_endif   := FALSE;
1502         END IF;
1503    END IF;
1504 END LOOP;
1505 
1506 IF NOT l_endif and l_details IS NOT NULL THEN
1507   l_details := l_details ||g_chr_newline||' END IF;';
1508 END IF;
1509 
1510 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1511       trace
1512          (p_msg      => 'END of generate_attached_adr_detail'
1513          ,p_level    => C_LEVEL_PROCEDURE
1514          ,p_module   => l_log_module);
1515 END IF;
1516 
1517 RETURN l_details;
1518 
1519 EXCEPTION
1520    WHEN xla_exceptions_pkg.application_exception   THEN
1521         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1522          trace
1523             (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR ='||sqlerrm
1524             ,p_level    => C_LEVEL_EXCEPTION
1525             ,p_module   => l_log_module);
1526         END IF;
1527         RETURN NULL;
1528    WHEN OTHERS THEN
1529       xla_exceptions_pkg.raise_message
1530          (p_location => 'xla_cmp_adr_pkg.generate_attached_adr_detail');
1531 
1532 END generate_attached_adr_detail;
1536 |  Private function                                           |
1533 
1534 /*------------------------------------------------------------+
1535 |                                                             |
1537 |                                                             |
1538 |       generate_adr_body                                     |
1539 |                                                             |
1540 |  Generates AcctDerRule_XX() body function from the ADR      |
1541 |                                                             |
1542 +------------------------------------------------------------*/
1543 
1544 /*-------------------------------------------------------------------------------------+
1545 |                                                                                      |
1546 |   BNF: ADR body                                                                      |
1547 |                                                                                      |
1548 |   <adr_body> := <list_of_acounting_flexfield_adr>                                    |
1549 |               | <segment_or_value_set_adr>                                           |
1550 |               ;                                                                      |
1551 |                                                                                      |
1552 |  <acounting_flexfield_adr> := <list_of_ccid_detail> <condition> <ccid_detail>        |
1553 |                            | <list_of_ccid_detail> <ccid_detail>                     |
1554 |                            | <condition> <ccid_detail>                               |
1555 |                            | <ccid_detail>                                           |
1556 |                            ;                                                         |
1557 |                                                                                      |
1558 |  <segment_or_value_set_adr> := <list_of_segment_detail> <condition> <segment_detail> |
1559 |                             | <list_of_segment_detail> <condition> <segment_detail>  |
1560 |                             | <condition> <segment_detail>                           |
1561 |                             | <segment_detail>                                       |
1562 |                             ;                                                        |
1563 +-------------------------------------------------------------------------------------*/
1564 
1565 FUNCTION generate_adr_body   (
1566   p_application_id               IN NUMBER
1567 , p_amb_context_code             IN VARCHAR2
1568 , p_segment_rule_code            IN VARCHAR2
1569 , p_segment_rule_type_code       IN VARCHAR2
1570 , p_flexfield_assign_mode        IN VARCHAR2
1571 , p_adr_name                     IN VARCHAR2
1572 , p_array_adr_source_index       IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1573 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
1574 , p_IsCompiled                   OUT NOCOPY BOOLEAN
1575 )
1576 RETURN CLOB
1577 IS
1578 l_adr                CLOB;
1579 l_detail             CLOB;
1580 l_cond               CLOB;
1581 l_endif              BOOLEAN;
1582 l_first              BOOLEAN;
1583 l_IsCompiled         BOOLEAN;
1584 l_log_module         VARCHAR2(240);
1585 BEGIN
1586 IF g_log_enabled THEN
1587       l_log_module := C_DEFAULT_MODULE||'.generate_adr_body';
1588 END IF;
1589 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1590       trace
1591          (p_msg      => 'BEGIN of generate_adr_body'
1592          ,p_level    => C_LEVEL_PROCEDURE
1593          ,p_module   => l_log_module);
1594 END IF;
1595 
1596 l_IsCompiled := FALSE;
1597 l_endif      := TRUE;
1598 l_first      := TRUE;
1599 l_adr        := null;
1600 l_cond       := null;
1601 l_detail     := null;
1602 
1603 FOR adr_detail_rec IN ( SELECT  xsrd.value_type_code
1604                               , xsrd.value_source_application_id
1605                               , xsrd.value_source_type_code
1606                               , xsrd.value_source_code
1607                               , xsrd.value_constant
1608                               , xsrd.value_code_combination_id
1609                               , xsrd.value_mapping_set_code
1610                               , xsrd.value_flexfield_segment_code
1611                               , xsrd.value_segment_rule_appl_id
1612                               , xsrd.value_segment_rule_type_code
1613                               , xsrd.value_segment_rule_code
1614                               , xsrd.input_source_application_id
1615                               , xsrd.input_source_type_code
1616                               , xsrd.input_source_code
1617                               , xsrd.segment_rule_detail_id
1618                               , xsrd.user_sequence
1619                           FROM  xla_seg_rule_details               xsrd
1620                          WHERE xsrd.application_id         = p_application_id
1621                            AND xsrd.segment_rule_code      = p_segment_rule_code
1622                            AND xsrd.segment_rule_type_code = p_segment_rule_type_code
1623                            AND xsrd.amb_context_code       = p_amb_context_code
1624                          ORDER BY xsrd.user_sequence  -- priority
1625                         ) LOOP
1626 
1627 
1628 
1629   l_detail := NULL;
1630 
1631   --
1632   -- If an ADR is attached, use the attached ADR information.
1633   --
1634   IF adr_detail_rec.value_segment_rule_appl_id IS NOT NULL THEN
1635 
1636      l_detail := generate_attached_adr_detail(
1637          p_amb_context_code               => p_amb_context_code
1641        , p_flexfield_assign_mode          => p_flexfield_assign_mode
1638        , p_value_segment_rule_appl_id     => adr_detail_rec.value_segment_rule_appl_id
1639        , p_value_segment_rule_type_code   => adr_detail_rec.value_segment_rule_type_code
1640        , p_value_segment_rule_code        => adr_detail_rec.value_segment_rule_code
1642        , p_array_adr_source_index         => p_array_adr_source_index
1643        , p_rec_sources                    => p_rec_sources);
1644   ELSE
1645      IF ( p_flexfield_assign_mode ='A') THEN
1646          -- accounting flexfield adr detail
1647          l_detail := generate_adr_ccid_detail(
1648              p_value_type_code                  => adr_detail_rec.value_type_code
1649            , p_value_source_appl_id             => adr_detail_rec.value_source_application_id
1650            , p_value_source_type_code           => adr_detail_rec.value_source_type_code
1651            , p_value_source_code                => adr_detail_rec.value_source_code
1652            , p_value_constant                   => adr_detail_rec.value_constant
1653            , p_value_code_combination_id        => adr_detail_rec.value_code_combination_id
1654            , p_value_flexfield_segment          => adr_detail_rec.value_flexfield_segment_code
1655            , p_value_mapping_set_code           => adr_detail_rec.value_mapping_set_code
1656            , p_input_source_appl_id             => adr_detail_rec.input_source_application_id
1657            , p_input_source_type_code           => adr_detail_rec.input_source_type_code
1658            , p_input_source_code                => adr_detail_rec.input_source_code
1659            , p_array_adr_source_index           => p_array_adr_source_index
1660            , p_rec_sources                      => p_rec_sources
1661            );
1662 
1663       ELSIF (p_flexfield_assign_mode ='S' OR p_flexfield_assign_mode = 'V') THEN
1664          -- segment or value set adr detail
1665             l_detail := generate_adr_seg_detail(
1666              p_value_type_code                  => adr_detail_rec.value_type_code
1667            , p_value_source_appl_id             => adr_detail_rec.value_source_application_id
1668            , p_value_source_type_code           => adr_detail_rec.value_source_type_code
1669            , p_value_source_code                => adr_detail_rec.value_source_code
1670            , p_value_constant                   => adr_detail_rec.value_constant
1671            , p_value_mapping_set_code           => adr_detail_rec.value_mapping_set_code
1672            , p_value_flexfield_segment          => adr_detail_rec.value_flexfield_segment_code
1673            --
1674            , p_input_source_appl_id             => adr_detail_rec.input_source_application_id
1675            , p_input_source_type_code           => adr_detail_rec.input_source_type_code
1676            , p_input_source_code                => adr_detail_rec.input_source_code
1677            --
1678            , p_array_adr_source_index           => p_array_adr_source_index
1679            --
1680            , p_rec_sources                      => p_rec_sources
1681            );
1682 
1683       END IF;
1684    END IF;
1685 
1686    l_cond := xla_cmp_condition_pkg.GetCondition   (
1687         p_application_id              => p_application_id
1688        , p_component_type             => g_component_type
1689        , p_component_code             => p_segment_rule_code
1690        , p_component_type_code        => p_segment_rule_type_code
1691        , p_component_name             => p_adr_name
1692        , p_amb_context_code           => p_amb_context_code
1693        , p_segment_rule_detail_id     => adr_detail_rec.segment_rule_detail_id
1694        , p_array_cond_source_index    => p_array_adr_source_index
1695        , p_rec_sources                => p_rec_sources
1696        );
1697 
1698    IF l_cond IS NULL THEN
1699     -- no condition
1700         IF l_endif THEN
1701            l_adr   := l_adr ||g_chr_newline||l_detail;
1702         ELSE
1703            l_endif  := TRUE;
1704            l_first  := TRUE;
1705            l_adr   := l_adr ||g_chr_newline||'END IF;'||g_chr_newline;
1706            l_adr   := l_adr ||g_chr_newline||l_detail;
1707        END IF;
1708    ELSE
1709     --condition
1710         IF l_first THEN
1711            l_adr     := l_adr ||g_chr_newline||' IF '||l_cond||' THEN ';
1712            l_adr     := l_adr ||g_chr_newline||l_detail;
1713            l_first   := FALSE;
1714            l_endif   := FALSE;
1715         ELSE
1716             l_adr     := l_adr ||g_chr_newline||' ELSIF '||l_cond||' THEN ';
1717             l_adr     := l_adr ||g_chr_newline||l_detail;
1718             l_endif   := FALSE;
1719         END IF;
1720    END IF;
1721 END LOOP;
1722 
1723 IF NOT l_endif and l_adr IS NOT NULL THEN
1724   IF p_flexfield_assign_mode = 'A' OR g_component_type = 'TAB_ADR' THEN
1725      l_adr := l_adr ||g_chr_newline||' END IF;';
1726   ELSE
1727      l_adr := l_adr ||g_chr_newline||' ELSE '
1728                     ||g_chr_newline||'    IF p_override_seg_flag = ''Y'' THEN '
1729                     ||g_chr_newline||'       RETURN ''#$NO_OVERRIDE#$'';'     -- 4465612
1730                     ||g_chr_newline||'    END IF;'
1731                     ||g_chr_newline||' END IF;';
1732   END IF;
1733 END IF;
1734 
1735 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1736       trace
1737          (p_msg      => 'END of generate_adr_body'
1738          ,p_level    => C_LEVEL_PROCEDURE
1739          ,p_module   => l_log_module);
1740 END IF;
1741 p_IsCompiled := TRUE;
1742 RETURN l_adr;
1743 EXCEPTION
1744    WHEN xla_exceptions_pkg.application_exception   THEN
1748             ,p_level    => C_LEVEL_EXCEPTION
1745         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1746          trace
1747             (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR ='||sqlerrm
1749             ,p_module   => l_log_module);
1750         END IF;
1751         p_IsCompiled := FALSE;
1752         RETURN NULL;
1753    WHEN OTHERS THEN
1754       p_IsCompiled := FALSE;
1755       xla_exceptions_pkg.raise_message
1756          (p_location => 'xla_cmp_adr_pkg.generate_adr_body');
1757 END generate_adr_body;
1758 
1759 /*-------------------------------------------------------------+
1760 |                                                              |
1761 |  Private function                                            |
1762 |                                                              |
1763 |       generate_adr_function                                  |
1764 |                                                              |
1765 |  Generates AcctDerRule_XX() function from the ADR definition |
1766 |                                                              |
1767 +-------------------------------------------------------------*/
1768 
1769 /*---------------------------------------------------+
1770 |                                                    |
1771 |   BNF: ADR body                                    |
1772 |                                                    |
1773 |   <adr> := <adr_header> <adr_body> <adr_end>       |
1774 |          ;                                         |
1775 |                                                    |
1776 +----------------------------------------------------*/
1777 
1778 FUNCTION generate_adr_function(
1779   p_application_id               IN NUMBER
1780 , p_amb_context_code             IN VARCHAR2
1781 , p_segment_rule_code            IN VARCHAR2
1782 , p_segment_rule_type_code       IN VARCHAR2
1783 , p_flexfield_assign_mode        IN VARCHAR2
1784 , p_flexfield_segment_code       IN VARCHAR2
1785 , p_flex_value_set_id            IN NUMBER
1786 , p_transaction_coa_id           IN NUMBER
1787 , p_accounting_coa_id            IN NUMBER
1788 , p_adr_name                     IN VARCHAR2
1789 , p_array_adr_source_index       IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1790 , p_rec_aad_objects              IN OUT NOCOPY xla_cmp_source_pkg.t_rec_aad_objects
1791 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
1792 , p_IsCompiled                   OUT NOCOPY BOOLEAN
1793 )
1794 RETURN CLOB
1795 IS
1796 l_Adr                      CLOB;
1797 l_log_module               VARCHAR2(240);
1798 l_fatal_error_message_text VARCHAR2(240);
1799 
1800 BEGIN
1801 IF g_log_enabled THEN
1802       l_log_module := C_DEFAULT_MODULE||'.generate_adr_function';
1803 END IF;
1804 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1805       trace
1806          (p_msg      => 'BEGIN of generate_adr_function'
1807          ,p_level    => C_LEVEL_PROCEDURE
1808          ,p_module   => l_log_module);
1809 END IF;
1810 
1811 --Select the correct template
1812 IF   g_component_type  = 'TAB_ADR'
1813 THEN
1814    --CCID rule
1815    IF p_flexfield_assign_mode = 'A'
1816    THEN
1817       l_Adr      := C_ADR_CCID_TAD_FUNCT_BODY;
1818    --Segment rule
1819    ELSIF p_flexfield_assign_mode = 'S'
1820    THEN
1821       l_Adr      := C_ADR_SEGMENT_TAD_FUNCT_BODY;
1822    ELSE
1823    --Value set rule,not handled
1824       l_fatal_error_message_text := 'Invalid p_flexfield_assign_mode: ' ||
1825                                     p_flexfield_assign_mode;
1826       RAISE ge_fatal_error;
1827    END IF;
1828 
1829 ELSE
1830 --AMB
1831 
1832    CASE p_flexfield_assign_mode
1833      WHEN 'A' THEN  l_Adr      := C_ADR_CCID    ;
1834      WHEN 'S' THEN  l_Adr      := C_ADR_SEGMENT ;
1835      WHEN 'V' THEN  l_Adr      := C_ADR_SEGMENT ;
1836      ELSE
1837       l_fatal_error_message_text := 'Invalid p_flexfield_assign_mode: ' ||
1838                                     p_flexfield_assign_mode;
1839 
1840        IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1841          trace
1842             (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||l_fatal_error_message_text
1843             ,p_level    => C_LEVEL_EXCEPTION
1844             ,p_module   => l_log_module);
1845 
1846        END IF;
1847        RETURN NULL;
1848     END CASE;
1849 
1850 END IF;
1851 
1852 IF p_flexfield_segment_code IS NULL THEN
1853    l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr, '$flexfield_segment_code$',' null');   -- 4417664
1854 ELSE
1855    l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr ,'$flexfield_segment_code$', ''''||p_flexfield_segment_code||'''');  -- 4417664
1856 END IF;
1857 
1858 IF p_flex_value_set_id IS NULL THEN
1859    l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr, '$flex_value_set_id$',' null');   -- 4417664
1860 ELSE
1861    l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr, '$flex_value_set_id$', TO_CHAR(p_flex_value_set_id));   -- 4417664
1862 END IF;
1863 
1864 IF p_transaction_coa_id  IS NULL THEN
1865    l_Adr := xla_cmp_string_pkg.replace_token(l_Adr, '$transaction_coa_id$', ' null');  -- 4417664
1866  ELSE
1867    l_Adr := xla_cmp_string_pkg.replace_token(l_Adr, '$transaction_coa_id$', TO_CHAR(p_transaction_coa_id));  -- 4417664
1868 END IF;
1869 
1870 IF p_accounting_coa_id  IS NULL THEN
1871     l_Adr := xla_cmp_string_pkg.replace_token(l_Adr, '$accounting_coa_id$', ' null');  -- 4417664
1875 l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr ,'$account_derivation_rule_code$' ,p_segment_rule_code);  -- 4417664
1872 ELSE l_Adr := xla_cmp_string_pkg.replace_token(l_Adr, '$accounting_coa_id$', TO_CHAR(p_accounting_coa_id));  -- 4417664
1873 END IF;
1874 
1876 l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr ,'$adr_type_code$'     ,p_segment_rule_type_code);  -- 4417664
1877 l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr ,'$adr_appl_id$'       ,TO_CHAR(p_application_id) );  -- 4417664
1878 l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr ,'$amb_context_code$'  ,p_amb_context_code);  -- 4417664
1879 
1880 l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr,'$adr_body$',
1881                       generate_adr_body (
1882                        p_application_id              => p_application_id
1883                      , p_amb_context_code            => p_amb_context_code
1884                      , p_segment_rule_code           => p_segment_rule_code
1885                      , p_segment_rule_type_code      => p_segment_rule_type_code
1886                      , p_flexfield_assign_mode       => p_flexfield_assign_mode
1887                      , p_adr_name                    => p_adr_name
1888                      , p_array_adr_source_index      => p_array_adr_source_index
1889                      , p_rec_sources                 => p_rec_sources
1890                      , p_IsCompiled                  => p_IsCompiled
1891                      )
1892                    );
1893 
1894 IF g_component_type = 'TAB_ADR'
1895  THEN
1896     --Replace the ADR name
1897     l_Adr  := xla_cmp_string_pkg.replace_token(l_Adr    , '$ADR_NAME$'   , nvl(g_component_name,' ') );  -- 4417664
1898     l_Adr  := xla_cmp_string_pkg.replace_token(l_Adr , '$parameters$',
1899              xla_cmp_source_pkg.get_obj_parm_for_tab(
1900               p_array_source_index => p_array_adr_source_index
1901             , p_rec_sources        => p_rec_sources
1902             ));
1903 
1904  ELSE
1905     l_Adr  := xla_cmp_string_pkg.replace_token(l_Adr , '$parameters$',
1906              nvl(xla_cmp_source_pkg.GenerateParameters(
1907               p_array_source_index => p_array_adr_source_index
1908             , p_rec_sources        => p_rec_sources
1909             ),' '));
1910 END IF;
1911 
1912 IF   g_component_type  = 'TAB_ADR'
1913 THEN
1914 
1915     l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr ,'$adr_hash_id$',TO_CHAR(
1916            xla_cmp_source_pkg.CacheAADObject (
1917                p_object                => xla_cmp_source_pkg.C_ADR
1918              , p_object_code           => p_segment_rule_code
1919              , p_object_type_code      => p_segment_rule_type_code
1920              , p_application_id        => p_application_id
1921              , p_event_class_code      => NULL
1922              , p_event_type_code       => NULL
1923              , p_array_source_index    => p_array_adr_source_index
1924              , p_rec_aad_objects       => p_rec_aad_objects
1925            )));  -- 4417664
1926 
1927 ELSE
1928 
1929    l_Adr      := xla_cmp_string_pkg.replace_token(l_Adr ,'$adr_hash_id$',TO_CHAR(
1930            xla_cmp_source_pkg.CacheAADObject (
1931                p_object                => xla_cmp_source_pkg.C_ADR
1932              , p_object_code           => p_segment_rule_code
1933              , p_object_type_code      => p_segment_rule_type_code
1934              , p_application_id        => p_application_id
1935              , p_event_class_code      => NULL
1936              , p_event_type_code       => NULL
1937              , p_array_source_index    => p_array_adr_source_index
1938              , p_rec_aad_objects       => p_rec_aad_objects
1939            )));  -- 4417664
1940 
1941 END IF;
1942 
1943 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1944       trace
1945          (p_msg      => 'END of generate_adr_function'
1946          ,p_level    => C_LEVEL_PROCEDURE
1947          ,p_module   => l_log_module);
1948 END IF;
1949 RETURN l_Adr;
1950 EXCEPTION
1951    WHEN ge_fatal_error
1952    THEN
1953       p_IsCompiled := FALSE;
1954       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1955          trace
1956             (p_msg      => 'EXCEPTION:'
1957             ,p_level    => C_LEVEL_EXCEPTION
1958             ,p_module   => l_log_module);
1959          trace
1960             (p_msg      => l_fatal_error_message_text
1961             ,p_level    => C_LEVEL_EXCEPTION
1962             ,p_module   => l_log_module);
1963       END IF;
1964       RAISE;
1965 
1966    WHEN VALUE_ERROR THEN
1967         p_IsCompiled := FALSE;
1968         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1969          trace
1970             (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
1971             ,p_level    => C_LEVEL_EXCEPTION
1972             ,p_module   => l_log_module);
1973         END IF;
1974         RETURN NULL;
1975    WHEN xla_exceptions_pkg.application_exception   THEN
1976         p_IsCompiled := FALSE;
1977         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1978          trace
1979             (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
1980             ,p_level    => C_LEVEL_EXCEPTION
1981             ,p_module   => l_log_module);
1982         END IF;
1983         RETURN NULL;
1984    WHEN OTHERS THEN
1985       p_IsCompiled := FALSE;
1986       xla_exceptions_pkg.raise_message
1987          (p_location => 'xla_cmp_adr_pkg.generate_adr_function');
1988 END generate_adr_function;
1989 
1993 |                                                              |
1990 /*-------------------------------------------------------------+
1991 |                                                              |
1992 |  Private function                                            |
1994 |       generate_one_adr_fct                                   |
1995 |                                                              |
1996 |  Generates AcctDerRule_XX() function in DBMS_SQL.VARCHAR2S   |
1997 |                                                              |
1998 +-------------------------------------------------------------*/
1999 
2000 FUNCTION generate_one_adr_fct(
2001   p_application_id               IN NUMBER
2002 , p_amb_context_code             IN VARCHAR2
2003 , p_segment_rule_code            IN VARCHAR2
2004 , p_segment_rule_type_code       IN VARCHAR2
2005 , p_flexfield_assign_mode        IN VARCHAR2
2006 , p_flexfield_segment_code       IN VARCHAR2
2007 , p_flex_value_set_id            IN NUMBER
2008 , p_transaction_coa_id           IN NUMBER
2009 , p_accounting_coa_id            IN NUMBER
2010 , p_adr_name                     IN VARCHAR2
2011 --
2012 , p_rec_aad_objects              IN OUT NOCOPY xla_cmp_source_pkg.t_rec_aad_objects
2013 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
2014 --
2015 , p_IsCompiled                   OUT NOCOPY BOOLEAN
2016 )
2017 RETURN  DBMS_SQL.VARCHAR2S
2018 IS
2019 --
2020 l_array_adr_source_index         xla_cmp_source_pkg.t_array_ByInt;
2021 l_array_null_adr_source_Idx      xla_cmp_source_pkg.t_array_ByInt;
2022 --
2023 l_adr_code       VARCHAR2(30);
2024 l_Adr            CLOB;                   -- 4697330
2025 l_array_adr      DBMS_SQL.VARCHAR2S;
2026 l_log_module     VARCHAR2(240);
2027 --
2028 BEGIN
2029 IF g_log_enabled THEN
2030       l_log_module := C_DEFAULT_MODULE||'.generate_one_adr_fct';
2031 END IF;
2032 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2033       trace
2034          (p_msg      => 'BEGIN of generate_one_adr_fct'
2035          ,p_level    => C_LEVEL_PROCEDURE
2036          ,p_module   => l_log_module);
2037 END IF;
2038 
2039 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2040       trace
2041          (p_msg      => 'p_application_id = '||p_application_id ||
2042                         ' - p_segment_rule_code = '||p_segment_rule_code ||
2043                         ' - p_segment_rule_type_code = '||p_segment_rule_type_code ||
2044                         ' - p_flexfield_assign_mode = '||p_flexfield_assign_mode ||
2045                         ' - p_flexfield_segment_code = '||p_flexfield_segment_code ||
2046                         ' - p_flex_value_set_id = '||p_flex_value_set_id ||
2047                         ' - p_transaction_coa_id = '||p_transaction_coa_id ||
2048                         ' - p_adr_name = '||p_adr_name ||
2049                         ' - p_amb_context_code = '||p_amb_context_code
2050          ,p_level    => C_LEVEL_STATEMENT
2051          ,p_module   => l_log_module);
2052 END IF;
2053 
2054 --
2055 -- init global variables
2056 --
2057 g_component_code      := p_segment_rule_code;
2058 g_component_type_code := p_segment_rule_type_code;
2059 g_component_appl_id   := p_application_id;
2060 g_component_name      := p_adr_name;
2061 g_amb_context_code    := p_amb_context_code;
2062 --
2063 l_array_adr           := xla_cmp_string_pkg.g_null_varchar2s;
2064 --
2065 -- Generate the definition to the ADR function
2066 --
2067 l_Adr := generate_adr_function (
2068          p_application_id             => p_application_id
2069        , p_amb_context_code           => p_amb_context_code
2070        , p_segment_rule_code          => p_segment_rule_code
2071        , p_segment_rule_type_code     => p_segment_rule_type_code
2072        , p_flexfield_assign_mode      => p_flexfield_assign_mode
2073        , p_flexfield_segment_code     => p_flexfield_segment_code
2074        , p_flex_value_set_id          => p_flex_value_set_id
2075        , p_transaction_coa_id         => p_transaction_coa_id
2076        , p_accounting_coa_id          => p_accounting_coa_id
2077        , p_adr_name                   => p_adr_name
2078        , p_array_adr_source_index     => l_array_adr_source_index
2079        , p_rec_aad_objects            => p_rec_aad_objects
2080        , p_rec_sources                => p_rec_sources
2081        --
2082        , p_IsCompiled                 => p_IsCompiled
2083        );
2084 --
2085 l_Adr := xla_cmp_string_pkg.replace_token(l_Adr,'$package_name$',g_package_name);
2086 --
2087 -- create the PL/SQL DBMS_SQL.VARCHAR2S array
2088 --
2089 xla_cmp_string_pkg.CreateString(
2090                       p_package_text  => l_Adr
2091                      ,p_array_string  => l_array_adr
2092                      );
2093 --
2094 -- reset PL/SQL arrays
2095 --
2096 l_array_adr_source_index        := l_array_null_adr_source_idx;
2097 --
2098 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2099       trace
2100         (p_msg      => 'l_isCompiled = '||CASE WHEN p_IsCompiled
2101                                                  THEN 'TRUE'
2102                                                  ELSE 'FALSE' END
2103         ,p_level    => C_LEVEL_STATEMENT
2104         ,p_module   => l_log_module);
2105 
2106       trace
2107          (p_msg      => 'END of generate_one_adr_fct'
2108          ,p_level    => C_LEVEL_PROCEDURE
2109          ,p_module   => l_log_module);
2110 
2111 END IF;
2112 RETURN l_array_adr;
2113 --
2114 EXCEPTION
2118          trace
2115    WHEN xla_exceptions_pkg.application_exception   THEN
2116         p_IsCompiled := FALSE;
2117         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
2119             (p_module   => l_log_module
2120             ,p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
2121             ,p_level    => C_LEVEL_EXCEPTION);
2122         END IF;
2123         RETURN xla_cmp_string_pkg.g_null_varchar2s;
2124    WHEN OTHERS THEN
2125         p_IsCompiled := FALSE;
2126         xla_exceptions_pkg.raise_message
2127          (p_location => 'xla_cmp_adr_pkg.generate_one_adr_fct');
2128 END generate_one_adr_fct;
2129 
2130 /*----------------------------------------------------------------+
2131 |                                                                 |
2132 |  Private function                                               |
2133 |                                                                 |
2134 |       generate_adr_fcts                                         |
2135 |                                                                 |
2136 |  Generates AcctDerRule_XX() functions from ADRs assigned to AAD |
2137 |                                                                 |
2138 +----------------------------------------------------------------*/
2139 
2140 FUNCTION generate_adr_fcts(
2141   p_product_rule_code            IN VARCHAR2
2142 , p_product_rule_type_code       IN VARCHAR2
2143 , p_application_id               IN NUMBER
2144 , p_amb_context_code             IN VARCHAR2
2145 , p_rec_aad_objects              IN OUT NOCOPY xla_cmp_source_pkg.t_rec_aad_objects
2146 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
2147 , p_IsCompiled                   IN OUT NOCOPY BOOLEAN
2148 )
2149 RETURN DBMS_SQL.VARCHAR2S
2150 IS
2151 --
2152 --
2153 CURSOR adr_cur
2154 IS
2155 --
2156 SELECT DISTINCT
2157         xsrb.application_id
2158       , xsrb.segment_rule_type_code
2159       , xsrb.segment_rule_code
2160       , xsrb.flexfield_assign_mode_code
2161       , xsrb.flexfield_segment_code
2162       , xsrb.flex_value_set_id
2163       , xsrb.transaction_coa_id
2164       , xsrb.accounting_coa_id
2165       , REPLACE(xsrt.name , '''','''''')
2166   FROM  xla_aad_line_defn_assgns     xald
2167       , xla_line_defn_adr_assgns     xlda
2168       , xla_seg_rules_b              xsrb
2169       , xla_seg_rules_tl             xsrt
2170       , xla_prod_acct_headers        xpah
2171       , xla_line_definitions_b       xld
2172  WHERE xpah.application_id             = p_application_id
2173    AND xpah.amb_context_code           = p_amb_context_code
2174    AND xpah.product_rule_type_code     = p_product_rule_type_code
2175    AND xpah.product_rule_code          = p_product_rule_code
2176    AND xpah.accounting_required_flag   = 'Y'
2177    AND xpah.validation_status_code     = 'R'
2178    --
2179    AND xpah.application_id             = xald.application_id
2180    AND xpah.amb_context_code           = xald.amb_context_code
2181    AND xpah.event_class_code           = xald.event_class_code
2182    AND xpah.event_type_code            = xald.event_type_code
2183    AND xpah.product_rule_type_code     = xald.product_rule_type_code
2184    AND xpah.product_rule_code          = xald.product_rule_code
2185    --
2186    AND xald.application_id             = xlda.application_id
2187    AND xald.amb_context_code           = xlda.amb_context_code
2188    AND xald.event_class_code           = xlda.event_class_code
2189    AND xald.event_type_code            = xlda.event_type_code
2190    AND xald.line_definition_owner_code = xlda.line_definition_owner_code
2191    AND xald.line_definition_code       = xlda.line_definition_code
2192    --
2193    AND NVL(xlda.segment_rule_appl_id
2194           ,xlda.application_id)        = xsrb.application_id
2195    AND xlda.amb_context_code           = xsrb.amb_context_code
2196    AND xlda.segment_rule_code          = xsrb.segment_rule_code
2197    AND xlda.segment_rule_type_code     = xsrb.segment_rule_type_code
2198    AND xsrb.enabled_flag               = 'Y'
2199    --
2200    AND xsrb.application_id             = xsrt.application_id (+)
2201    AND xsrb.amb_context_code           = xsrt.amb_context_code (+)
2202    AND xsrb.segment_rule_code          = xsrt.segment_rule_code (+)
2203    AND xsrb.segment_rule_type_code     = xsrt.segment_rule_type_code (+)
2204    AND xsrt.language     (+)           = USERENV('LANG')
2205    --
2206    AND xald.application_id         = xld.application_id
2207    AND xald.amb_context_code       = xld.amb_context_code
2208    AND xald.event_class_code       = xld.event_class_code
2209    AND xald.event_type_code        = xld.event_type_code
2210    AND xald.line_definition_owner_code = xld.line_definition_owner_code
2211    AND xald.line_definition_code  = xld.line_definition_code
2212    AND xld.budgetary_control_flag = XLA_CMP_PAD_PKG.g_bc_pkg_flag
2213 --ORDER BY xsrb.flexfield_segment_code, xsrb.segment_rule_type_code, xsrb.segment_rule_code
2214 --------------------------
2215 -- 4262811
2216 --------------------------
2217 UNION
2218 SELECT  xsrb.application_id
2219       , xsrb.segment_rule_type_code
2220       , xsrb.segment_rule_code
2221       , xsrb.flexfield_assign_mode_code
2222       , xsrb.flexfield_segment_code
2223       , xsrb.flex_value_set_id
2224       , xsrb.transaction_coa_id
2225       , xsrb.accounting_coa_id
2226       , REPLACE(xsrt.name , '''','''''')
2227   FROM  xla_prod_acct_headers        xpah
2228       , xla_aad_line_defn_assgns     xald
2229       , xla_mpa_jlt_adr_assgns       xmja
2230       , xla_seg_rules_b              xsrb
2234    AND xpah.amb_context_code           = p_amb_context_code
2231       , xla_seg_rules_tl             xsrt
2232       , xla_line_definitions_b       xld
2233  WHERE xpah.application_id             = p_application_id
2235    AND xpah.product_rule_type_code     = p_product_rule_type_code
2236    AND xpah.product_rule_code          = p_product_rule_code
2237    AND xpah.accounting_required_flag   = 'Y'
2238    AND xpah.validation_status_code     = 'R'
2239    --
2240    AND xpah.application_id             = xald.application_id
2241    AND xpah.amb_context_code           = xald.amb_context_code
2242    AND xpah.event_class_code           = xald.event_class_code
2243    AND xpah.event_type_code            = xald.event_type_code
2244    AND xpah.product_rule_type_code     = xald.product_rule_type_code
2245    AND xpah.product_rule_code          = xald.product_rule_code
2246    --
2247    AND xald.application_id             = xmja.application_id
2248    AND xald.amb_context_code           = xmja.amb_context_code
2249    AND xald.event_class_code           = xmja.event_class_code
2250    AND xald.event_type_code            = xmja.event_type_code
2251    AND xald.line_definition_owner_code = xmja.line_definition_owner_code
2252    AND xald.line_definition_code       = xmja.line_definition_code
2253    --
2254    AND xmja.application_id             = xsrb.application_id
2255    AND xmja.amb_context_code           = xsrb.amb_context_code
2256    AND xmja.segment_rule_code          = xsrb.segment_rule_code
2257    AND xmja.segment_rule_type_code     = xsrb.segment_rule_type_code
2258    AND xmja.flexfield_segment_code     = nvl(xsrb.flexfield_segment_code,'ALL')
2259    AND xsrb.enabled_flag               = 'Y'
2260    --
2261    AND xsrb.application_id             = xsrt.application_id (+)
2262    AND xsrb.amb_context_code           = xsrt.amb_context_code (+)
2263    AND xsrb.segment_rule_code          = xsrt.segment_rule_code (+)
2264    AND xsrb.segment_rule_type_code     = xsrt.segment_rule_type_code (+)
2265    AND xsrt.language     (+)           = USERENV('LANG')
2266    --
2267    AND xald.application_id         = xld.application_id
2268    AND xald.amb_context_code       = xld.amb_context_code
2269    AND xald.event_class_code       = xld.event_class_code
2270    AND xald.event_type_code        = xld.event_type_code
2271    AND xald.line_definition_owner_code = xld.line_definition_owner_code
2272    AND xald.line_definition_code  = xld.line_definition_code
2273    AND xld.budgetary_control_flag = XLA_CMP_PAD_PKG.g_bc_pkg_flag
2274 ORDER BY 5,2,3   --ORDER BY xsrb.flexfield_segment_code, xsrb.segment_rule_type_code, xsrb.segment_rule_code
2275 ;
2276 --
2277 l_array_adr_appl_id            xla_cmp_source_pkg.t_array_Num;
2278 l_array_adr_code               xla_cmp_source_pkg.t_array_VL30;
2279 l_array_adr_name               xla_cmp_source_pkg.t_array_VL80;
2280 l_array_adr_type_code          xla_cmp_source_pkg.t_array_VL1;
2281 l_array_assign_mode            xla_cmp_source_pkg.t_array_VL1;
2282 l_array_flex_segment_code      xla_cmp_source_pkg.t_array_VL30;
2283 l_array_flex_value_set_id      xla_cmp_source_pkg.t_array_Num;
2284 l_array_trans_coa_id           xla_cmp_source_pkg.t_array_Num;
2285 l_array_acctg_coa_id           xla_cmp_source_pkg.t_array_Num;
2286 --
2287 l_null_array_string            DBMS_SQL.VARCHAR2S;
2288 l_array_string                 DBMS_SQL.VARCHAR2S;
2289 l_Adrs                         DBMS_SQL.VARCHAR2S;
2290 --
2291 l_IsCompiled                   BOOLEAN;
2292 l_log_module                   VARCHAR2(240);
2293 --
2294 BEGIN
2295 
2296 IF g_log_enabled THEN
2297       l_log_module := C_DEFAULT_MODULE||'.generate_adr_fcts';
2298 END IF;
2299 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2300       trace
2301          (p_msg      => 'BEGIN of generate_adr_fcts'
2302          ,p_level    => C_LEVEL_PROCEDURE
2303          ,p_module   => l_log_module);
2304 END IF;
2305 
2306 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2307       trace
2308          (p_msg      => 'p_product_rule_code = '||p_product_rule_code ||
2309                         ' - p_product_rule_type_code = '||p_product_rule_type_code ||
2310                         ' - p_application_id = '||p_application_id ||
2311                         ' - p_amb_context_code = '||p_amb_context_code
2312          ,p_level    => C_LEVEL_STATEMENT
2313          ,p_module   => l_log_module);
2314 END IF;
2315 
2316 -- Init global variables
2317 l_IsCompiled := TRUE;
2318 --
2319 OPEN  adr_cur;
2320 --
2321 FETCH adr_cur BULK COLLECT INTO   l_array_adr_appl_id
2322                                 , l_array_adr_type_code
2323                                 , l_array_adr_code
2324                                 , l_array_assign_mode
2325                                 , l_array_flex_segment_code
2326                                 , l_array_flex_value_set_id
2327                                 , l_array_trans_coa_id
2328                                 , l_array_acctg_coa_id
2329                                 , l_array_adr_name
2330                                  ;
2331 CLOSE adr_cur;
2332 --
2333 l_Adrs   := l_null_array_string;
2334 --
2335 IF l_array_adr_code.COUNT > 0 THEN
2336    --
2337    FOR Idx In l_array_adr_code.FIRST .. l_array_adr_code.LAST LOOP
2338      --
2339         IF l_array_adr_code.EXISTS(Idx) THEN
2340         --
2341            l_array_string :=  generate_one_adr_fct(
2342                       p_application_id            =>  l_array_adr_appl_id(Idx)
2343                     , p_amb_context_code          =>  p_amb_context_code
2347                     , p_flexfield_segment_code    =>  l_array_flex_segment_code(Idx)
2344                     , p_segment_rule_code         =>  l_array_adr_code(Idx)
2345                     , p_segment_rule_type_code    =>  l_array_adr_type_code(Idx)
2346                     , p_flexfield_assign_mode     =>  l_array_assign_mode(Idx)
2348                     , p_flex_value_set_id         =>  l_array_flex_value_set_id(Idx)
2349                     , p_transaction_coa_id        =>  l_array_trans_coa_id(Idx)
2350                     , p_accounting_coa_id         =>  l_array_acctg_coa_id(Idx)
2351                     , p_adr_name                  =>  l_array_adr_name(Idx)
2352                     --
2353                     , p_rec_aad_objects           =>  p_rec_aad_objects
2354                     , p_rec_sources               =>  p_rec_sources
2355                     --
2356                     , p_IsCompiled                =>  l_IsCompiled
2357                    );
2358            --
2359            --
2360            l_Adrs := xla_cmp_string_pkg.ConcatTwoStrings (
2361                    p_array_string_1    => l_Adrs
2362                   ,p_array_string_2    => l_array_string
2363                    );
2364         --
2365         p_IsCompiled := p_IsCompiled AND l_IsCompiled;
2366         --
2367         END IF;
2368         --
2369 
2370 END LOOP;
2371    --
2372 END IF;
2373 --
2374 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2375       trace
2376          (p_msg      => 'END of generate_adr_fcts'
2377          ,p_level    => C_LEVEL_PROCEDURE
2378          ,p_module   => l_log_module);
2379 END IF;
2380 RETURN l_Adrs;
2381 EXCEPTION
2382    WHEN xla_exceptions_pkg.application_exception   THEN
2383         IF adr_cur%ISOPEN THEN CLOSE adr_cur; END IF;
2384         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
2385          trace
2386             (p_module   => l_log_module
2387             ,p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
2388             ,p_level    => C_LEVEL_EXCEPTION);
2389         END IF;
2390         p_IsCompiled := FALSE;
2391         RETURN l_null_array_string;
2392    WHEN OTHERS THEN
2393       IF adr_cur%ISOPEN THEN CLOSE adr_cur; END IF;
2394       p_IsCompiled := FALSE;
2395       xla_exceptions_pkg.raise_message
2396          (p_location => 'xla_cmp_adr_pkg.GenerateADR');
2397 END generate_adr_fcts;
2398 
2399 /*----------------------------------------------------------------+
2400 |                                                                 |
2401 |  Public function                                                |
2402 |                                                                 |
2403 |       generate_adr_fcts                                         |
2404 |                                                                 |
2405 |  Generates the AcctDerRule_XX() functions from ADRs assigned    |
2406 |  to AAD.It returns TRUE if the generation succeed, otherwise    |
2407 |  FALSE                                                          |
2408 |                                                                 |
2409 +----------------------------------------------------------------*/
2410 
2411 FUNCTION GenerateADR(
2412   p_product_rule_code            IN VARCHAR2
2413 , p_product_rule_type_code       IN VARCHAR2
2414 , p_application_id               IN NUMBER
2415 , p_amb_context_code             IN VARCHAR2
2416 , p_package_name                 IN VARCHAR2
2417 --
2418 , p_rec_aad_objects              IN OUT NOCOPY xla_cmp_source_pkg.t_rec_aad_objects
2419 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
2420 --
2421 , p_package_body                 OUT NOCOPY DBMS_SQL.VARCHAR2S
2422 )
2423 RETURN BOOLEAN
2424 IS
2425 l_Adrs           DBMS_SQL.VARCHAR2S;
2426 l_IsCompiled     BOOLEAN;
2427 l_log_module     VARCHAR2(240);
2428 --
2429 BEGIN
2430 --
2431 IF g_log_enabled THEN
2432       l_log_module := C_DEFAULT_MODULE||'.GenerateADR';
2433 END IF;
2434 --
2435 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2436 
2437       trace
2438          (p_msg      => 'BEGIN of GenerateADR'
2439          ,p_level    => C_LEVEL_PROCEDURE
2440          ,p_module   => l_log_module);
2441 
2442 END IF;
2443 
2444 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2445       trace
2446          (p_msg      => 'p_product_rule_code = '||p_product_rule_code ||
2447                         ' - p_product_rule_type_code = '||p_product_rule_type_code ||
2448                         ' - p_application_id = '||p_application_id ||
2449                         ' - p_amb_context_code = '||p_amb_context_code
2450          ,p_level    => C_LEVEL_STATEMENT
2451          ,p_module   => l_log_module);
2452 END IF;
2453 
2454 --
2455 -- Init global variables
2456 --
2457 
2458 l_IsCompiled   := TRUE;
2459 g_package_name := p_package_name;
2460 l_Adrs         := xla_cmp_string_pkg.g_null_varchar2s;
2461 --
2462 
2463 l_Adrs := generate_adr_fcts(
2464    p_product_rule_code         =>  p_product_rule_code
2465  , p_product_rule_type_code    =>  p_product_rule_type_code
2466  , p_application_id            =>  p_application_id
2467  , p_amb_context_code          =>  p_amb_context_code
2468   --
2469  , p_rec_aad_objects           =>  p_rec_aad_objects
2470  , p_rec_sources               =>  p_rec_sources
2471  --
2472  , p_IsCompiled                =>  l_IsCompiled
2473 );
2474 --
2475 --
2479 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2476 p_package_body := l_Adrs;
2477 g_package_name := NULL;
2478 --
2480     trace
2481       (p_msg      => 'l_isCompiled = '||CASE WHEN l_IsCompiled
2482                                                 THEN 'TRUE'
2483                                                 ELSE 'FALSE' END
2484       ,p_level    => C_LEVEL_STATEMENT
2485       ,p_module   => l_log_module);
2486 
2487    trace
2488       (p_msg      => 'END of GenerateADR'
2489       ,p_level    => C_LEVEL_PROCEDURE
2490       ,p_module   => l_log_module);
2491 END IF;
2492 --
2493 RETURN l_IsCompiled;
2494 --
2495 EXCEPTION
2496 WHEN xla_exceptions_pkg.application_exception   THEN
2497    IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
2498          trace
2499             (p_module   => l_log_module
2500             ,p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
2501             ,p_level    => C_LEVEL_EXCEPTION);
2502    END IF;
2503    RETURN FALSE;
2504 WHEN OTHERS THEN
2505    xla_exceptions_pkg.raise_message
2506       (p_location => 'xla_cmp_adr_pkg.GenerateADR');
2507 END GenerateADR;
2508 
2509 
2510 --Added for the Transaction Account Builder
2511 
2512 /*------------------------------------------------------------+
2513 |                                                             |
2514 |                                                             |
2515 |            Transaction Account Builder compiler             |
2516 |                                                             |
2517 |                                                             |
2518 |                                                             |
2519 +------------------------------------------------------------*/
2520 
2521 /*------------------------------------------------------------+
2522 |                                                             |
2523 |  Private Function                                           |
2524 |                                                             |
2525 |       generate_adr_spec                                     |
2526 |                                                             |
2527 |                                                             |
2528 +------------------------------------------------------------*/
2529 
2530 FUNCTION generate_adr_spec(
2531   p_application_id               IN NUMBER
2532 , p_amb_context_code             IN VARCHAR2
2533 , p_segment_rule_code            IN VARCHAR2
2534 , p_segment_rule_type_code       IN VARCHAR2
2535 , p_flexfield_assign_mode        IN VARCHAR2
2536 , p_flexfield_segment_code       IN VARCHAR2
2537 , p_transaction_coa_id           IN NUMBER
2538 , p_accounting_coa_id            IN NUMBER
2539 , p_adr_name                     IN VARCHAR2
2540 
2541 , p_array_adr_source_index       IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
2542 
2543 , p_rec_aad_objects              IN OUT NOCOPY xla_cmp_source_pkg.t_rec_aad_objects
2544 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
2545 
2546 , x_adr_spec_text                OUT    NOCOPY CLOB
2547 )
2548 RETURN BOOLEAN
2549 IS
2550 
2551 l_Adr                      CLOB;
2552 l_parms                    VARCHAR2(10000);
2553 l_code                     VARCHAR2(30);
2554 l_ObjectIndex              BINARY_INTEGER;
2555 
2556 l_fatal_error_message_text VARCHAR2(240);
2557 l_log_module               VARCHAR2 (2000);
2558 
2559 BEGIN
2560 
2561    IF g_log_enabled THEN
2562       l_log_module := C_DEFAULT_MODULE||'.generate_adr_spec';
2563    END IF;
2564 
2565    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2566 
2567       trace
2568          (p_module => l_log_module
2569          ,p_msg      => 'BEGIN of generate_adr_spec'
2570          ,p_level    => C_LEVEL_PROCEDURE);
2571 
2572    END IF;
2573 
2574    --Select the correct template
2575    IF   g_component_type  = 'AMB_ADR'
2576    THEN
2577       x_adr_spec_text      := NULL;
2578    ELSIF g_component_type  = 'TAB_ADR'
2579    THEN
2580       --CCID rule
2581       IF p_flexfield_assign_mode = 'A'
2582       THEN
2583          x_adr_spec_text      := C_ADR_CCID_TAD_FUNCT_SPEC;
2584       --Segment rule
2585       ELSIF p_flexfield_assign_mode = 'S'
2586       THEN
2587          x_adr_spec_text      := C_ADR_SEGMENT_TAD_FUNCT_SPEC;
2588       ELSE
2589          l_fatal_error_message_text := 'Invalid p_flexfield_assign_mode: ' ||
2590                                        p_flexfield_assign_mode;
2591          RAISE ge_fatal_error;
2592       END IF;
2593    ELSE
2594       l_fatal_error_message_text := 'Invalid g_component_type: ' ||
2595                                     g_component_type;
2596       RAISE ge_fatal_error;
2597    END IF;
2598 
2599    l_parms:= xla_cmp_source_pkg.get_obj_parm_for_tab(
2600               p_array_source_index   => p_array_adr_source_index
2601             , p_rec_sources          => p_rec_sources
2602             );
2603 
2604     x_adr_spec_text     := xla_cmp_string_pkg.replace_token( x_adr_spec_text
2605                                    ,'$parameters$'
2606                                    ,NVL(l_parms, ' ')
2607                                   );  -- 4417664
2608 
2609    l_ObjectIndex := xla_cmp_source_pkg.CacheAADObject (
2610                p_object                    => xla_cmp_source_pkg.C_ADR
2614              , p_array_source_Index        => p_array_adr_source_index
2611              , p_object_code               => p_segment_rule_code
2612              , p_object_type_code          => p_segment_rule_type_code
2613              , p_application_id            => p_application_id
2615              , p_rec_aad_objects           => p_rec_aad_objects
2616              );
2617 
2618    l_code               := TO_CHAR(l_ObjectIndex);
2619    x_adr_spec_text      := xla_cmp_string_pkg.replace_token( x_adr_spec_text  -- 4417664
2620                                 ,'$adr_hash_id$'
2621                                 ,l_code);
2622    x_adr_spec_text      := xla_cmp_string_pkg.replace_token( x_adr_spec_text  -- 4417664
2623                                 ,'$account_derivation_rule_code$'
2624                                 ,p_segment_rule_code);
2625    x_adr_spec_text      := xla_cmp_string_pkg.replace_token( x_adr_spec_text  -- 4417664
2626                                 ,'$adr_type_code$'
2627                                 ,p_segment_rule_type_code);
2628    x_adr_spec_text      := xla_cmp_string_pkg.replace_token( x_adr_spec_text  -- 4417664
2629                                 ,'$adr_appl_id$'
2630                                 ,to_char(p_application_id) );
2631    x_adr_spec_text      := xla_cmp_string_pkg.replace_token( x_adr_spec_text  -- 4417664
2632                                 ,'$amb_context_code$'
2633                                 ,p_amb_context_code);
2634    x_adr_spec_text      := xla_cmp_string_pkg.replace_token( x_adr_spec_text  -- 4417664
2635                                 ,'$flexfield_segment_code$'
2636                                 ,p_flexfield_segment_code);
2637 
2638    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2639 
2640       trace
2641          (p_module => l_log_module
2642          ,p_msg      => 'END of generate_adr_spec'
2643          ,p_level    => C_LEVEL_PROCEDURE);
2644 
2645    END IF;
2646 
2647    RETURN TRUE;
2648 
2649 EXCEPTION
2650    WHEN ge_fatal_error
2651    THEN
2652       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
2653          trace
2654             (p_module   => l_log_module
2655             ,p_msg      => 'EXCEPTION:'
2656             ,p_level    => C_LEVEL_EXCEPTION);
2657          trace
2658             (p_module => l_log_module
2659             ,p_msg      => l_fatal_error_message_text
2660             ,p_level    => C_LEVEL_EXCEPTION);
2661 
2662       END IF;
2663       IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2664          trace
2665          (p_module   => l_log_module
2666          ,p_msg      => 'END ' || C_DEFAULT_MODULE||'.generate_adr_spec'
2667          ,p_level    => C_LEVEL_PROCEDURE);
2668       END IF;
2669       RETURN FALSE;
2670 
2671    WHEN VALUE_ERROR THEN
2672         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
2673          trace
2674             (p_module   => l_log_module
2675             ,p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
2676             ,p_level    => C_LEVEL_EXCEPTION);
2677         END IF;
2678    WHEN xla_exceptions_pkg.application_exception   THEN
2679         RETURN FALSE;
2680    WHEN OTHERS THEN
2681       xla_exceptions_pkg.raise_message
2682          (p_location => 'xla_cmp_adr_pkg.generate_adr_spec');
2683 END generate_adr_spec;
2684 
2685 
2686 /*------------------------------------------------------------+
2687 |                                                             |
2688 |  Private Function                                           |
2689 |                                                             |
2690 |       generate_tab_adr                                      |
2691 |                                                             |
2692 |                                                             |
2693 +------------------------------------------------------------*/
2694 
2695 FUNCTION generate_tab_adr(
2696   p_application_id               IN NUMBER
2697 , p_amb_context_code             IN VARCHAR2
2698 , p_segment_rule_code            IN VARCHAR2
2699 , p_segment_rule_type_code       IN VARCHAR2
2700 , p_flexfield_assign_mode        IN VARCHAR2
2701 , p_flexfield_segment_code       IN VARCHAR2
2702 , p_flex_value_set_id            IN NUMBER
2703 , p_transaction_coa_id           IN NUMBER
2704 , p_accounting_coa_id            IN NUMBER
2705 , p_adr_name                     IN VARCHAR2
2706 --
2707 , p_rec_aad_objects              IN OUT NOCOPY xla_cmp_source_pkg.t_rec_aad_objects
2708 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
2709 --
2710 , x_adr_hash_id                  OUT    NOCOPY BINARY_INTEGER
2711 , x_adr_function_name            OUT    NOCOPY VARCHAR2
2712 , x_table_of_adr_sources         OUT    NOCOPY gt_table_of_adr_sources
2713 , x_adr_spec                     OUT    NOCOPY CLOB
2714 , x_adr_body                     OUT    NOCOPY CLOB
2715 
2716 )
2717 RETURN  BOOLEAN
2718 IS
2719 
2720 l_array_adr_source_index         xla_cmp_source_pkg.t_array_ByInt;
2721 l_array_null_adr_source_Idx      xla_cmp_source_pkg.t_array_ByInt;
2722 
2723 l_adr_code                 VARCHAR2(30);
2724 l_adr_body                 VARCHAR2(32000);
2725 l_parms                    VARCHAR2(10000);
2726 l_array_adr                DBMS_SQL.VARCHAR2S;
2727 l_IsCompiled               BOOLEAN;
2728 
2729 l_fatal_error_message_text VARCHAR2(240);
2730 l_adr_function_name        VARCHAR2(30);
2734 --
2731 l_log_module               VARCHAR2 (2000);
2732 
2733 BEGIN
2735 IF g_log_enabled THEN
2736       l_log_module := C_DEFAULT_MODULE||'.generate_tab_adr';
2737 END IF;
2738 --
2739 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2740 
2741       trace
2742          (p_module => l_log_module
2743          ,p_msg      => 'BEGIN of generate_tab_adr'
2744          ,p_level    => C_LEVEL_PROCEDURE);
2745 
2746 END IF;
2747 
2748 --
2749 -- init global variables
2750 --
2751 g_component_code      := p_segment_rule_code;
2752 g_component_type_code := p_segment_rule_type_code;
2753 g_component_appl_id   := p_application_id;
2754 g_component_name      := p_adr_name;
2755 g_amb_context_code    := p_amb_context_code;
2756 --
2757 
2758 l_array_adr           := xla_cmp_string_pkg.g_null_varchar2s;
2759 --
2760 -- Generate the body of the ADR function
2761 --
2762 x_adr_body := generate_adr_function (
2763          p_application_id             => p_application_id
2764        , p_amb_context_code           => p_amb_context_code
2765        , p_segment_rule_code          => p_segment_rule_code
2766        , p_segment_rule_type_code     => p_segment_rule_type_code
2767        , p_flexfield_assign_mode      => p_flexfield_assign_mode
2768        , p_flexfield_segment_code     => p_flexfield_segment_code
2769        , p_flex_value_set_id          => p_flex_value_set_id
2770        , p_transaction_coa_id         => p_transaction_coa_id
2771        , p_accounting_coa_id          => p_accounting_coa_id
2772        , p_adr_name                   => p_adr_name
2773        --
2774        , p_array_adr_source_index     => l_array_adr_source_index
2775        --
2776        , p_rec_aad_objects            => p_rec_aad_objects
2777        , p_rec_sources                => p_rec_sources
2778        --
2779        , p_IsCompiled                 => l_IsCompiled
2780        );
2781 
2782 -- Generate the specification of the ADR function
2783 l_IsCompiled := l_IsCompiled AND generate_adr_spec (
2784          p_application_id             => p_application_id
2785        , p_amb_context_code           => p_amb_context_code
2786        , p_segment_rule_code          => p_segment_rule_code
2787        , p_segment_rule_type_code     => p_segment_rule_type_code
2788        , p_flexfield_assign_mode      => p_flexfield_assign_mode
2789        , p_flexfield_segment_code     => p_flexfield_segment_code
2790        , p_transaction_coa_id         => p_transaction_coa_id
2791        , p_accounting_coa_id          => p_accounting_coa_id
2792        , p_adr_name                   => p_adr_name
2793        --
2794        , p_array_adr_source_index     => l_array_adr_source_index
2795        --
2796        , p_rec_aad_objects            => p_rec_aad_objects
2797        , p_rec_sources                => p_rec_sources
2798        --
2799        , x_adr_spec_text              => x_adr_spec
2800        );
2801 
2802 --Get the ADR hash id assigned during the compilation
2803 x_adr_hash_id := xla_cmp_source_pkg.CacheAADObject
2804                   (
2805                     p_object                    => xla_cmp_source_pkg.C_ADR
2806                    ,p_object_code               => p_segment_rule_code
2807                    ,p_object_type_code          => p_segment_rule_type_code
2808                    ,p_application_id            => p_application_id
2809                    ,p_array_source_Index        => l_array_adr_source_index
2810                    ,p_rec_aad_objects           => p_rec_aad_objects
2811                   );
2812 
2813 --Get the ADR function name
2814 IF p_flexfield_assign_mode = 'A' THEN
2815    l_adr_function_name := C_ADR_CCID_TAD_FUNCT_NAME;
2816 ELSIF p_flexfield_assign_mode = 'S' THEN
2817    l_adr_function_name := C_ADR_SEGMENT_TAD_FUNCT_NAME;
2818 ELSE
2819    l_fatal_error_message_text := 'Unrecognized p_flexfield_assign_mode: '
2820                                  || p_flexfield_assign_mode;
2821 END IF;
2822 
2823 l_adr_function_name := REPLACE( l_adr_function_name
2824                                ,'$adr_hash_id$'
2825                                ,x_adr_hash_id
2826                               );
2827 
2828 x_adr_function_name         := l_adr_function_name;
2829 
2830 --Get the list of the sources referenced in the ADR
2831 --x_table_of_adr_sources := gt_table_of_adr_sources();
2832 IF l_array_adr_source_index.COUNT > 0   THEN
2833    FOR Idx IN l_array_adr_source_index.FIRST .. l_array_adr_source_index.LAST
2834    LOOP
2835       IF l_array_adr_source_index.EXISTS(Idx)
2836       THEN
2837          x_table_of_adr_sources(l_array_adr_source_index(Idx)):= p_rec_sources.array_source_code(Idx);
2838       END IF;
2839    END LOOP;
2840 END IF;
2841 
2842 
2843 --
2844 -- reset PL/SQL arrays
2845 --
2846 l_array_adr_source_index        := l_array_null_adr_source_idx;
2847 --
2848 
2849    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2850 
2851       trace
2852          (p_module => l_log_module
2853          ,p_msg      => 'END of generate_tab_adr'
2854          ,p_level    => C_LEVEL_PROCEDURE);
2855 
2856    END IF;
2857 
2858 
2859 RETURN TRUE;
2860 --
2861 EXCEPTION
2862    WHEN ge_fatal_error
2863    THEN
2864       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
2865          trace
2866             (p_module   => l_log_module
2870             (p_module   => l_log_module
2867             ,p_msg      => 'EXCEPTION:'
2868             ,p_level    => C_LEVEL_EXCEPTION);
2869          trace
2871             ,p_msg      => l_fatal_error_message_text
2872             ,p_level    => C_LEVEL_EXCEPTION);
2873 
2874       END IF;
2875       IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2876          trace
2877          (p_module => l_log_module
2878          ,p_msg      => 'END ' || C_DEFAULT_MODULE||'.generate_tab_adr'
2879          ,p_level    => C_LEVEL_PROCEDURE);
2880       END IF;
2881       RETURN FALSE;
2882    WHEN xla_exceptions_pkg.application_exception   THEN
2883       RETURN FALSE;
2884    WHEN OTHERS THEN
2885         xla_exceptions_pkg.raise_message
2886          (p_location => 'xla_cmp_adr_pkg.generate_tab_adr');
2887 END generate_tab_adr;
2888 
2889 /*------------------------------------------------------------+
2890 |                                                             |
2891 |  Public TAB Function                                        |
2892 |                                                             |
2893 |       build_adrs_for_tab                                    |
2894 |                                                             |
2895 |                                                             |
2896 +------------------------------------------------------------*/
2897 
2898 FUNCTION build_adrs_for_tab
2899    (
2900      p_table_of_adrs_in     IN    gt_table_of_adrs_in
2901     ,x_table_of_adrs_out    OUT   NOCOPY gt_table_of_adrs_out
2902     ,x_adr_specs_text       OUT   NOCOPY CLOB
2903     ,x_adr_bodies_text      OUT   NOCOPY CLOB
2904   )
2905 RETURN BOOLEAN
2906 IS
2907 
2908 CURSOR adr_cur ( cp_application_id               NUMBER
2909                 ,cp_segment_rule_code            VARCHAR2
2910                 ,cp_segment_rule_type_code       VARCHAR2
2911                 ,cp_amb_context_code             VARCHAR2
2912                 )
2913 IS
2914 
2915 SELECT xsrb.application_id
2916       ,xsrb.segment_rule_code
2917       ,xsrb.segment_rule_type_code
2918       ,xsrb.amb_context_code
2919       ,xsrb.flexfield_assign_mode_code
2920       ,xsrb.flexfield_segment_code
2921       ,xsrb.flex_value_set_id
2922       ,xsrb.transaction_coa_id
2923       ,xsrb.accounting_coa_id
2924       ,REPLACE(xsrt.name , '''','''''')
2925   FROM  xla_seg_rules_b        xsrb
2926       , xla_seg_rules_tl       xsrt
2927  WHERE xsrb.application_id             = cp_application_id
2928    AND xsrb.segment_rule_code          = cp_segment_rule_code
2929    AND xsrb.segment_rule_type_code     = cp_segment_rule_type_code
2930    AND xsrb.amb_context_code           = cp_amb_context_code
2931    AND xsrb.enabled_flag               = 'Y'
2932    AND xsrt.application_id         (+) =  xsrb.application_id
2933    AND xsrt.amb_context_code       (+) =  xsrb.amb_context_code
2934    AND xsrt.segment_rule_code      (+) =  xsrb.segment_rule_code
2935    AND xsrt.segment_rule_type_code (+) =  xsrb.segment_rule_type_code
2936    AND xsrt.language               (+) =  USERENV('LANG')
2937 ;
2938 
2939 
2940 l_application_id               NUMBER;
2941 l_segment_rule_code            VARCHAR2(30);
2942 l_segment_rule_type_code       VARCHAR2(1);
2943 l_flex_value_set_id            NUMBER;
2944 l_amb_context_code             VARCHAR2(30);
2945 l_flex_assign_mode_code        VARCHAR2(1);
2946 l_flex_segment_code            VARCHAR2(30);
2947 l_trans_coa_id                 NUMBER;
2948 l_acctg_coa_id                 NUMBER;
2949 l_adr_name                     VARCHAR2(80);
2950 
2951 l_rec_aad_objects              xla_cmp_source_pkg.t_rec_aad_objects ;
2952 l_rec_sources                  xla_cmp_source_pkg.t_rec_sources;
2953 
2954 
2955 l_array_string                 DBMS_SQL.VARCHAR2S;
2956 
2957 l_adr_spec                     CLOB;
2958 l_adr_body                     CLOB;
2959 
2960 l_adr_hash_id                  BINARY_INTEGER;
2961 l_adr_function_name            VARCHAR2(30);
2962 l_table_of_adr_sources         gt_table_of_adr_sources;
2963 
2964 l_compiled                     BOOLEAN;
2965 l_all_compiled                 BOOLEAN;
2966 
2967 l_fatal_error_message_text     VARCHAR2(240);
2968 l_log_module                 VARCHAR2 (2000);
2969 
2970 BEGIN
2971 
2972    IF g_log_enabled THEN
2973       l_log_module := C_DEFAULT_MODULE||'.build_adrs_for_tab';
2974    END IF;
2975 
2976    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2977 
2978       trace
2979          (p_module => l_log_module
2980          ,p_msg      => 'BEGIN of build_adrs_for_tab'
2981          ,p_level    => C_LEVEL_PROCEDURE);
2982 
2983    END IF;
2984 
2985    --Initialize the global variable that indicates the component type
2986    --The default is AMB_ADR but ADRs generated for the Transaction Account Builder
2987    --need some special processing.
2988    g_component_type :='TAB_ADR';
2989 
2990    l_compiled     := TRUE;
2991    l_all_compiled := TRUE;
2992 
2993    IF p_table_of_adrs_in.FIRST IS NOT NULL THEN
2994       FOR Idx In p_table_of_adrs_in.FIRST..p_table_of_adrs_in.LAST LOOP
2995          IF p_table_of_adrs_in.EXISTS(Idx) THEN
2996 
2997             IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2998                trace
2999                (p_module   => l_log_module
3000                ,p_msg      => 'Current rule'
3001                ,p_level    => C_LEVEL_STATEMENT);
3002                trace
3006                ,p_level    => C_LEVEL_STATEMENT);
3003                (p_module   => l_log_module
3004                ,p_msg      => 'application_id: ' ||
3005                               p_table_of_adrs_in(Idx).application_id
3007                trace
3008                (p_module   => l_log_module
3009                ,p_msg      => 'segment_rule_code: ' ||
3010                               p_table_of_adrs_in(Idx).segment_rule_code
3011                ,p_level    => C_LEVEL_STATEMENT);
3012                trace
3013                (p_module   => l_log_module
3014                ,p_msg      => 'segment_rule_type_code: ' ||
3015                               p_table_of_adrs_in(Idx).segment_rule_type_code
3016                ,p_level    => C_LEVEL_STATEMENT);
3017                trace
3018                (p_module   => l_log_module
3019                ,p_msg      => 'amb_context_code: ' ||
3020                               p_table_of_adrs_in(Idx).amb_context_code
3021                ,p_level    => C_LEVEL_STATEMENT);
3022             END IF;
3023 
3024             --Fetch additional details for the ADR
3025             OPEN  adr_cur
3026                (
3027       cp_application_id         => p_table_of_adrs_in(Idx).application_id
3028      ,cp_segment_rule_code      => p_table_of_adrs_in(Idx).segment_rule_code
3029      ,cp_segment_rule_type_code => p_table_of_adrs_in(Idx).segment_rule_type_code
3030      ,cp_amb_context_code       => p_table_of_adrs_in(Idx).amb_context_code
3031                );
3032 
3033             FETCH adr_cur
3034              INTO l_application_id
3035                  ,l_segment_rule_code
3036                  ,l_segment_rule_type_code
3037                  ,l_amb_context_code
3038                  ,l_flex_assign_mode_code
3039                  ,l_flex_segment_code
3040                  ,l_flex_value_set_id
3041                  ,l_trans_coa_id
3042                  ,l_acctg_coa_id
3043                  ,l_adr_name;
3044             IF adr_cur%ROWCOUNT <> 1
3045             THEN
3046                CLOSE adr_cur;
3047                l_fatal_error_message_text := 'Unable to retrieve ADR info: ';
3048                RAISE ge_fatal_error;
3049             END IF;
3050 
3051             CLOSE adr_cur;
3052 
3053             IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3054                trace
3055                (p_module   => l_log_module
3056                ,p_msg      => 'Fetched segment_rule_code: ' ||
3057                               l_segment_rule_code
3058                ,p_level    => C_LEVEL_STATEMENT);
3059             END IF;
3060 
3061             l_compiled :=  generate_tab_adr(
3062                     p_application_id            => l_application_id
3063                    ,p_segment_rule_code         => l_segment_rule_code
3064                    ,p_segment_rule_type_code    => l_segment_rule_type_code
3065                    ,p_amb_context_code          => l_amb_context_code
3066                    ,p_flexfield_assign_mode     => l_flex_assign_mode_code
3067                    ,p_flexfield_segment_code    => l_flex_segment_code
3068                    ,p_flex_value_set_id         => l_flex_value_set_id
3069                    ,p_transaction_coa_id        => l_trans_coa_id
3070                    ,p_accounting_coa_id         => l_acctg_coa_id
3071                    ,p_adr_name                  => l_adr_name
3072 
3073                    ,p_rec_aad_objects           => l_rec_aad_objects
3074                    ,p_rec_sources               => l_rec_sources
3075 
3076                    ,x_adr_hash_id               => l_adr_hash_id
3077                    ,x_adr_function_name         => l_adr_function_name
3078                    ,x_table_of_adr_sources      => l_table_of_adr_sources
3079                    ,x_adr_spec                  => l_adr_spec
3080                    ,x_adr_body                  => l_adr_body
3081                    );
3082 
3083             IF l_compiled
3084             THEN
3085                --Retrieve the function name assigned to the ADR
3086                x_table_of_adrs_out(Idx).adr_function_name
3087                   := l_adr_function_name;
3088                --Retrieve the hash id assigned to the ADR
3089                x_table_of_adrs_out(Idx).adr_hash_id
3090                   := l_adr_hash_id;
3091                IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3092                   trace
3093                   (p_module   => l_log_module
3094                   ,p_msg      => 'l_adr_hash_id: ' ||
3095                                  l_adr_hash_id
3096                   ,p_level    => C_LEVEL_STATEMENT);
3097                END IF;
3098 
3099 
3100                x_table_of_adrs_out(Idx).table_of_sources
3101                   := l_table_of_adr_sources;
3102 
3103                x_adr_specs_text   := x_adr_specs_text   ||
3104                                     l_adr_spec;
3105 
3106                x_adr_bodies_text := x_adr_bodies_text ||
3107                                     l_adr_body;
3108 
3109             END IF;
3110 
3111             l_all_compiled := l_all_compiled AND l_compiled;
3112 
3113          END IF;
3114 
3115       END LOOP;
3116 
3117    END IF;
3118 
3119    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3120 
3121       trace
3122          (p_module => l_log_module
3123          ,p_msg      => 'END of build_adrs_for_tab ('
3124                         || xla_cmp_common_pkg.bool_to_char
3125                              (
3126                                 p_boolean => l_all_compiled
3127                              )
3128                         || ')'
3129          ,p_level    => C_LEVEL_PROCEDURE);
3130 
3131    END IF;
3132 
3133    RETURN l_all_compiled;
3134 
3135 EXCEPTION
3136    WHEN ge_fatal_error
3137    THEN
3138       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
3139          trace
3140             (p_module   => l_log_module
3141             ,p_msg      => 'EXCEPTION:'
3142             ,p_level    => C_LEVEL_EXCEPTION);
3143          trace
3144             (p_module   => l_log_module
3145             ,p_msg      => l_fatal_error_message_text
3146             ,p_level    => C_LEVEL_EXCEPTION);
3147       END IF;
3148       IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3149          trace
3150          (p_module => l_log_module
3151          ,p_msg      => 'END ' || C_DEFAULT_MODULE||'.build_adrs_for_tab'
3152          ,p_level    => C_LEVEL_PROCEDURE);
3153       END IF;
3154       l_all_compiled := FALSE;
3155       RETURN l_all_compiled;
3156 
3157    WHEN xla_exceptions_pkg.application_exception   THEN
3158         IF adr_cur%ISOPEN THEN CLOSE adr_cur; END IF;
3159         l_all_compiled := FALSE;
3160         RETURN l_all_compiled;
3161    WHEN OTHERS THEN
3162       IF adr_cur%ISOPEN THEN CLOSE adr_cur; END IF;
3163       l_all_compiled := FALSE;
3164       xla_exceptions_pkg.raise_message
3165          (p_location => 'xla_cmp_adr_pkg.build_adrs_for_tab');
3166 
3167 END build_adrs_for_tab
3168 ;
3169 --
3170 --=============================================================================
3171 --
3172 --
3173 --
3174 --
3175 --
3176 --
3177 --
3178 --
3179 --
3180 --
3181 --
3182 --
3183 --
3184 --
3185 --
3186 --
3187 --
3188 --
3189 --
3190 --
3191 --
3192 --
3193 --=============================================================================
3194 --=============================================================================
3195 --          *********** Initialization routine **********
3196 --=============================================================================
3197 
3198 BEGIN
3199 
3200    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3201    g_log_enabled    := fnd_log.test
3202                           (log_level  => g_log_level
3203                           ,module     => C_DEFAULT_MODULE);
3204 
3205    IF NOT g_log_enabled  THEN
3206       g_log_level := C_LEVEL_LOG_DISABLED;
3207    END IF;
3208 END xla_cmp_adr_pkg; --