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