DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_CMP_ANALYTIC_CRITERIA_PKG

Source


1 PACKAGE BODY xla_cmp_analytic_criteria_pkg AS
2 /* $Header: xlacpanc.pkb 120.14 2005/07/12 22:27:11 awan 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_analytic_criteria_pkg                                          |
10 |                                                                            |
11 | DESCRIPTION                                                                |
12 |     This is a XLA private package, which contains all the logic required   |
13 |     to generate anlytical criteria from AMB specifcations                  |
14 |                                                                            |
15 |                                                                            |
16 | HISTORY                                                                    |
17 |     10-JAN-2003 K.Boussema  Created                                        |
18 |     14-JAN-2003 K.Boussema    Added 'dbdrv' command                        |
19 |     01-APR-2003 K.Boussema    Included amb_context_code                    |
20 |                               update according to the new datamodel        |
21 |     22-APR-2003 K.Boussema    Included Error messages                      |
22 |     02-JUN-2003 K.Boussema    Modified to fix bug 2975670 and bug 2729143  |
23 |     17-JUL-2003 K.Boussema    Reviewed the code                            |
24 |     27-SEP-2003 K.Boussema    Changed the event_class clauses using '_ALL' |
25 |     10-OCT-2003 K.Boussema    Added an Outer join to query Anlytical       |
26 |                               criteria information, bug 3187719            |
27 |     23-FEB-2004 K.Boussema    Made changes for the FND_LOG.                |
28 |     22-MAR-2004 K.Boussema    Added a parameter p_module to the TRACE calls|
29 |                               and the procedure.                           |
30 |     11-MAY-2004 K.Boussema  Removed the call to XLA trace routine from     |
31 |                             trace() procedure                              |
32 |     20-Sep-2004 S.Singhania Made ffg chagnes for the bulk changes:         |
33 |                               - Modified constant C_AC_HDR_CALL            |
34 |                               - Minor change to GenerateHdrAnalyticCriteria|
35 |     07-Mar-2005 K.Boussema    Changed for ADR-enhancements.                |
36 |     11-Jul-2005 A.Wan         Changed for MPA Bug 4262811                  |
37 +===========================================================================*/
38 --
39 --+==========================================================================+
40 --|                                                                          |
41 --|                                                                          |
42 --| Global Constants/variables                                               |
43 --|                                                                          |
44 --|                                                                          |
45 --+==========================================================================+
46 --
47 --
48 -- Analytical criteria defined in header
49 --
50 C_AC_HDR_CALL                   CONSTANT      VARCHAR2(10000):= '
51 
52 xla_ae_header_pkg.g_rec_header_new.array_anc_id_$number$(hdr_idx) :=
53 xla_ae_header_pkg.SetAnalyticalCriteria(
54    p_analytical_criterion_name    => ''$analytical_criterion_name$''
55  , p_analytical_criterion_owner   => ''$analytical_criterion_owner$''
56  , p_analytical_criterion_code    => ''$analytical_criterion_code$''
57  , p_amb_context_code             => ''$amb_context_code$''
58  , p_balancing_flag               => ''$balancing_flag$''
59  $analytical_details$
60 )
61 ;
62 --
63 ';
64 --
65 --
66 -- Analytical criteria defined in line
67 --
68 C_AC_LINE_CALL                   CONSTANT      VARCHAR2(10000):= '
69 
70 xla_ae_lines_pkg.g_rec_lines.array_anc_id_$number$(xla_ae_lines_pkg.g_LineNumber) :=
71 xla_ae_lines_pkg.SetAnalyticalCriteria(
72    p_analytical_criterion_name    => ''$analytical_criterion_name$''
73  , p_analytical_criterion_owner   => ''$analytical_criterion_owner$''
74  , p_analytical_criterion_code    => ''$analytical_criterion_code$''
75  , p_amb_context_code             => ''$amb_context_code$''
76  , p_balancing_flag               => ''$balancing_flag$''
77  $analytical_details$
78  , p_ae_header_id                 => l_ae_header_id
79 )
80 ;
81 --
82 ';
83 --
84 --
85 C_DETAIL_CHAR                         CONSTANT VARCHAR2(10000):='
86  , p_analytical_detail_char_$Jdx$    =>  TO_CHAR($detail_value$)
87  , p_analytical_detail_num_$Jdx$     =>  NULL
88  , p_analytical_detail_date_$Jdx$    =>  NULL
89 ';
90 --
91 --
92 C_DETAIL_NUM                         CONSTANT VARCHAR2(10000):='
93  , p_analytical_detail_char_$Jdx$    =>  NULL
94  , p_analytical_detail_num_$Jdx$     =>  $detail_value$
95  , p_analytical_detail_date_$Jdx$    =>  NULL
96 ';
97 --
98 --
99 C_DETAIL_DATE                         CONSTANT VARCHAR2(10000):='
100  , p_analytical_detail_char_$Jdx$    =>  NULL
101  , p_analytical_detail_num_$Jdx$     =>  NULL
102  , p_analytical_detail_date_$Jdx$    =>  $detail_value$
103 ';
104 --
105 --
106 C_CHAR                         CONSTANT VARCHAR2(1):= 'C';
107 C_DATE                         CONSTANT VARCHAR2(1):= 'D';
108 C_NUM                          CONSTANT VARCHAR2(1):= 'N';
109 --
110 -- 4262811
111 C_LINE                         CONSTANT VARCHAR2(2):= 'L';
112 C_MPA_HDR                      CONSTANT VARCHAR2(2):= 'MH';
113 C_MPA_LINE                     CONSTANT VARCHAR2(2):= 'ML';
114 
115 --+==========================================================================+
116 --|                                                                          |
117 --| Private global type declarations                                         |
118 --|                                                                          |
119 --+==========================================================================+
120 --
121 --
122 g_chr_newline      CONSTANT VARCHAR2(10):= xla_environment_pkg.g_chr_newline;
123 --
124 --=============================================================================
125 --
126 --
127 --
128 --
129 --
130 --
131 --
132 --
133 --
134 --
135 --                         FND trace
136 --
137 --
138 --
139 --
140 --
141 --
142 --
143 --
144 --
145 --
146 --
147 --=============================================================================
148 --=============================================================================
149 --               *********** Local Trace Routine **********
150 --=============================================================================
151 
152 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
153 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
154 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
155 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
156 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
157 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
158 
159 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
160 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_cmp_analytic_criteria_pkg';
161 
162 g_log_level           NUMBER;
163 g_log_enabled         BOOLEAN;
164 
165 PROCEDURE trace
166            (p_msg                        IN VARCHAR2
167            ,p_level                      IN NUMBER
168            ,p_module                     IN VARCHAR2 )
169 IS
170 BEGIN
171 ----------------------------------------------------------------------------
172 -- Following is for FND log.
173 ----------------------------------------------------------------------------
174 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
175           fnd_log.message(p_level, p_module);
176 ELSIF p_level >= g_log_level THEN
177           fnd_log.string(p_level, p_module, p_msg);
178 END IF;
179 
180 EXCEPTION
181        WHEN xla_exceptions_pkg.application_exception THEN
182           RAISE;
183        WHEN OTHERS THEN
184           xla_exceptions_pkg.raise_message
185              (p_location   => 'xla_cmp_analytic_criteria_pkg.trace');
186 END trace;
187 
188 /*---------------------------------------------------------------------------+
189 |                                                                            |
190 |                                                                            |
191 |   Public Procedure                                                         |
192 |                                                                            |
193 |     GetAnalyticalCriteriaSources                                           |
194 |                                                                            |
195 |   Returns the list of sources defined the AMB header analytical criteria.  |
196 |                                                                            |
197 +---------------------------------------------------------------------------*/
198 PROCEDURE GetAnalyticalCriteriaSources (
199     p_entity                       IN VARCHAR2
200   , p_event_class                  IN VARCHAR2
201   , p_event_type                   IN VARCHAR2
202   , p_application_id               IN NUMBER
203   , p_product_rule_code            IN VARCHAR2
204   , p_product_rule_type_code       IN VARCHAR2
205   , p_amb_context_code             IN VARCHAR2
206   , p_array_evt_source_index       IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
207   , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
208 )
209 IS
210 
211 CURSOR source_cur
212 IS
213 SELECT  DISTINCT
214             xas.source_application_id
215           , xas.source_type_code
216           , xas.source_code
217   FROM xla_analytical_sources   xas
218      , xla_aad_header_ac_assgns xah
219      , xla_analytical_hdrs_b    xahb
220  WHERE  xas.analytical_criterion_code         = xah.analytical_criterion_code
221    AND  xas.analytical_criterion_type_code    = xah.analytical_criterion_type_code
222    AND  xas.amb_context_code                  = xah.amb_context_code
223    AND  xas.analytical_criterion_code         = xahb.analytical_criterion_code
224    AND  xas.analytical_criterion_type_code    = xahb.analytical_criterion_type_code
225    AND  xas.amb_context_code                 = xahb.amb_context_code
226    AND  xas.application_id                   = p_application_id
227    AND  xas.entity_code                      = p_entity
228    AND  xas.amb_context_code                 = p_amb_context_code
229    AND (
230         xas.event_class_code               = xah.event_class_code
231         OR
232         xas.event_class_code               = xas.entity_code ||'_ALL'
233        )
234    AND xah.event_class_code               = p_event_class
235    AND xah.event_type_code                = p_event_type
236    AND xas.source_application_id   IS NOT NULL
237    AND xas.source_code             IS NOT NULL
238    AND xas.source_type_code        IS NOT NULL
239    AND xahb.enabled_flag           = 'Y'
240    AND xah.product_rule_code       = p_product_rule_code
241    AND xah.product_rule_type_code  = p_product_rule_type_code
242 ORDER BY xas.source_type_code, xas.source_code
243 ;
244 
245 l_SourceIdx                     BINARY_INTEGER;
246 l_source_application_id         xla_cmp_source_pkg.t_array_Num;
247 l_source_type_code              xla_cmp_source_pkg.t_array_VL1;
248 l_source_code                   xla_cmp_source_pkg.t_array_VL30;
249 l_log_module                    VARCHAR2(240);
250 --
251 BEGIN
252 IF g_log_enabled THEN
253       l_log_module := C_DEFAULT_MODULE||'.GetAnalyticalCriteriaSources';
254 END IF;
255 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
256 
257       trace
258          (p_msg      => 'BEGIN of GetAnalyticalCriteriaSources'
259          ,p_level    => C_LEVEL_PROCEDURE
260          ,p_module   => l_log_module);
261 
262 END IF;
263 
264 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
265       trace
266          (p_msg      => 'entity code = '||p_entity||
267                         ' - event class code = '||p_event_class ||
268                         ' - event type code = '||p_event_type||
269                         ' - application id = '||p_application_id||
270                         ' - product rule code = '||p_product_rule_code||
271                         ' - product rule owner = '||p_product_rule_type_code||
272                         ' amb context code =' ||p_amb_context_code
273          ,p_level    => C_LEVEL_STATEMENT
274          ,p_module   => l_log_module);
275 END IF;
276 
277 OPEN source_cur;
278 
279 FETCH source_cur BULK COLLECT INTO l_source_application_id
280                                  , l_source_type_code
281                                  , l_source_code
282                                  ;
283 
284 CLOSE source_cur;
285 
286 IF l_source_code.EXISTS(NVL(l_source_code.FIRST,1)) THEN
287 
288    FOR Idx IN l_source_code.FIRST .. l_source_code.LAST LOOP
289 
290       l_SourceIdx := xla_cmp_source_pkg.StackSource (
294                 , p_array_source_index         => p_array_evt_source_index
291                   p_source_code                => l_source_code(Idx)
292                 , p_source_type_code           => l_source_type_code(Idx)
293                 , p_source_application_id      => l_source_application_id(Idx)
295                 , p_rec_sources                => p_rec_sources
296                 );
297 
298    END LOOP;
299 
300 END IF;
301 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
302       trace
303          (p_msg      => 'END of GetAnalyticalCriteriaSources'
304          ,p_level    => C_LEVEL_PROCEDURE
305          ,p_module   => l_log_module);
306 END IF;
307 EXCEPTION
308    WHEN xla_exceptions_pkg.application_exception   THEN
309         IF source_cur%ISOPEN THEN CLOSE source_cur; END IF;
310         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
311             trace
312                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
313                ,p_level    => C_LEVEL_EXCEPTION
314                ,p_module   => l_log_module);
315         END IF;
316         RAISE;
317    WHEN OTHERS    THEN
318       IF source_cur%ISOPEN THEN CLOSE source_cur; END IF;
319       xla_exceptions_pkg.raise_message
320          (p_location => 'xla_cmp_analytic_criteria_pkg.GetAnalyticalCriteriaSources');
321 END GetAnalyticalCriteriaSources;
322 
323 /*---------------------------------------------------------------------------+
324 |                                                                            |
325 |                                                                            |
326 |   Private Function                                                         |
327 |                                                                            |
328 |     HdrAnalyticCriteria                                                    |
329 |                                                                            |
330 |   Generates one header analytical criterion into PL/SQL code.              |
331 |                                                                            |
332 +---------------------------------------------------------------------------*/
333 
334 FUNCTION HdrAnalyticCriteria(
335   p_analytical_criterion_code      IN VARCHAR2
336 , p_analytical_criterion_type      IN VARCHAR2
337 , p_amb_context_code               IN VARCHAR2
338 , p_balancing_flag                 IN VARCHAR2
339 , p_criterion_value                IN VARCHAR2
340 , p_name                           IN VARCHAR2
341 , p_application_id                 IN NUMBER
342 , p_entity                         IN VARCHAR2
343 , p_event_class                    IN VARCHAR2
344 --
345 , p_rec_sources                    IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
346 )
347 RETURN CLOB
348 IS
349 --
350 CURSOR analytic_criteria_cur
351 IS
352 SELECT  xas.source_code
353      ,  xas.source_type_code
354      ,  xas.source_application_id
355      ,  xadb.grouping_order
356      ,  xadb.data_type_code
357      ,  xadb.analytical_detail_code
358   FROM  xla_analytical_dtls_b    xadb
359       , xla_analytical_sources   xas
360  WHERE  xadb.analytical_detail_code         = xas.analytical_detail_code
361    AND  xadb.analytical_criterion_code      = xas.analytical_criterion_code
362    AND  xadb.amb_context_code               = xas.amb_context_code
363    AND  xadb.analytical_criterion_type_code = xas.analytical_criterion_type_code
364    AND (
365         xas.event_class_code                = p_event_class
366        OR
367         xas.event_class_code                = xas.entity_code ||'_ALL'
368        )
369    AND  xas.application_id                 = p_application_id
370    AND  xas.entity_code                    = p_entity
371    AND  xas.analytical_criterion_code       = p_analytical_criterion_code
372    AND  xas.analytical_criterion_type_code  = p_analytical_criterion_type
373    AND  xas.amb_context_code                = p_amb_context_code
374    AND  xadb.analytical_detail_code        IS NOT NULL
375    AND  xadb.data_type_code                IS NOT NULL
376    AND  xadb.grouping_order                IS NOT NULL
377  ORDER BY xadb.grouping_order
378 ;
379 --
380 l_array_order                    xla_cmp_source_pkg.t_array_Num;
381 l_array_detail_code              xla_cmp_source_pkg.t_array_VL30;
382 l_array_data_type                xla_cmp_source_pkg.t_array_VL1;
383 l_array_source_code              xla_cmp_source_pkg.t_array_VL30;
384 l_array_source_type_code         xla_cmp_source_pkg.t_array_VL1;
385 l_array_source_appl_id           xla_cmp_source_pkg.t_array_Num;
386 --
387 l_source_Idx                     BINARY_INTEGER;
388 --
389 l_analytical_criteria            CLOB;
390 l_analytical_detail              CLOB;
391 l_detail                         VARCHAR2(32000);
392 l_log_module                     VARCHAR2(240);
393 --
394 BEGIN
395 IF g_log_enabled THEN
396       l_log_module := C_DEFAULT_MODULE||'.HdrAnalyticCriteria';
397 END IF;
398 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
399       trace
400          (p_msg      => 'BEGIN of HdrAnalyticCriteria'
401          ,p_level    => C_LEVEL_PROCEDURE
402          ,p_module   => l_log_module);
403 END IF;
404 
405 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
406       trace
407          (p_msg      => 'entity code = '||p_entity||
408                         ' - event class code = '||p_event_class ||
409                         ' - application id = '||p_application_id||
410                         ' - analytical criterion code = '||p_analytical_criterion_code||
411                         ' - analytical criterion owner = '||p_analytical_criterion_type||
412                         ' amb context code =' ||p_amb_context_code
413          ,p_level    => C_LEVEL_STATEMENT
414          ,p_module   => l_log_module);
415 END IF;
416 
420                                              ,l_array_source_type_code
417 OPEN analytic_criteria_cur;
418 
419 FETCH analytic_criteria_cur BULK COLLECT INTO l_array_source_code
421                                              ,l_array_source_appl_id
422                                              ,l_array_order
423                                              ,l_array_data_type
424                                              ,l_array_detail_code
425 
426 ;
427 
428 CLOSE analytic_criteria_cur;
429 
430 l_analytical_detail := NULL;
431 
432 IF  l_array_detail_code.COUNT > 0 THEN
433 
434 FOR Idx IN l_array_detail_code.FIRST .. l_array_detail_code.LAST LOOP
435   IF l_array_detail_code.EXISTS(Idx) THEN
436 
437      CASE  l_array_data_type(Idx)
438         WHEN C_NUM  THEN l_detail              := C_DETAIL_NUM;
439         WHEN C_DATE THEN l_detail              := C_DETAIL_DATE;
440         ELSE             l_detail              := C_DETAIL_CHAR;
441     END CASE;
442 
443     l_detail              := REPLACE(l_detail,'$Jdx$',TO_CHAR(l_array_order(Idx)));
444 
445     IF l_array_source_code(Idx) IS NOT NULL THEN
446 
447          l_source_Idx := xla_cmp_source_pkg.CacheSource(
448                                p_source_code           => l_array_source_code(Idx)
449                              , p_source_type_code      => l_array_source_type_code(Idx)
450                              , p_source_application_id => l_array_source_appl_id(Idx)
451                              , p_rec_sources           => p_rec_sources
452                               );
453 
454          l_detail := REPLACE(l_detail,'$detail_value$',
455                            xla_cmp_source_pkg.GenerateSource(
456                                  p_Index                     => l_source_Idx
457                                , p_rec_sources               => p_rec_sources
458                                , p_variable                  => 'H'
459                                , p_translated_flag           => p_criterion_value)
460                                );
461     ELSE
462 
463          l_detail              := REPLACE(l_detail,'$detail_value$' , '''NULL''');
464 
465     END IF;
466 
467     l_analytical_detail := l_analytical_detail || l_detail ;
468 
469   END IF;
470 
471 END LOOP;
472 
473 l_analytical_criteria := C_AC_HDR_CALL ;
474 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$analytical_criterion_name$' ,REPLACE(p_name, '''',''''''));  -- 4417664
475 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$analytical_criterion_owner$',p_analytical_criterion_type);  -- 4417664
476 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$analytical_criterion_code$' ,p_analytical_criterion_code);  -- 4417664
477 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$amb_context_code$'          ,p_amb_context_code);  -- 4417664
478 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$balancing_flag$'           ,p_balancing_flag);  -- 4417664
479 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$analytical_details$'
480                             ,l_analytical_detail);
481 
482 END IF;
483 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
484 
485       trace
486          (p_msg      => 'END of HdrAnalyticCriteria'
487          ,p_level    => C_LEVEL_PROCEDURE
488          ,p_module   => l_log_module);
489 
490 END IF;
491 
492 RETURN l_analytical_criteria;
493 
494 EXCEPTION
495    WHEN xla_exceptions_pkg.application_exception   THEN
496         IF analytic_criteria_cur%ISOPEN THEN CLOSE analytic_criteria_cur; END IF;
497         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
498             trace
499                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
500                ,p_level    => C_LEVEL_EXCEPTION
501                ,p_module   => l_log_module);
502         END IF;
503         RETURN NULL;
504    WHEN OTHERS THEN
505       IF analytic_criteria_cur%ISOPEN THEN CLOSE analytic_criteria_cur; END IF;
506       xla_exceptions_pkg.raise_message
507          (p_location => 'xla_cmp_analytic_criteria_pkg.HdrAnalyticCriteria');
508 END HdrAnalyticCriteria;
509 
510 /*---------------------------------------------------------------------------+
511 |                                                                            |
512 |                                                                            |
513 |   Private Function                                                         |
514 |                                                                            |
515 |     GenerateHdrAnalyticCriteria                                            |
516 |                                                                            |
517 |   Translates the AMB header analytical criteria into PL/SQL code.          |
518 |                                                                            |
519 +---------------------------------------------------------------------------*/
520 
521 FUNCTION GenerateHdrAnalyticCriteria(
522   p_application_id               IN NUMBER
523 , p_product_rule_code            IN VARCHAR2
524 , p_product_rule_type_code       IN VARCHAR2
525 , p_amb_context_code             IN VARCHAR2
526 , p_entity                       IN VARCHAR2
527 , p_event_class                  IN VARCHAR2
528 , p_event_type                   IN VARCHAR2
529 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
530 )
531 RETURN CLOB
532 IS
533 --
534 CURSOR analytic_criteria_cur
535 IS
536 SELECT DISTINCT
537         xah.analytical_criterion_code
538       , xah.analytical_criterion_type_code
539       , xahb.balancing_flag
540       , DECODE(xahb.criterion_value_code,
541                'MEANING','Y'
545      ,  xla_analytical_hdrs_b     xahb
542               ,'N')
543       , xaht.name
544   FROM  xla_aad_header_ac_assgns  xah
546      ,  xla_analytical_hdrs_tl    xaht
547  WHERE  xah.analytical_criterion_code       = xahb.analytical_criterion_code
548    AND  xah.analytical_criterion_type_code  = xahb.analytical_criterion_type_code
549    AND  xah.amb_context_code                = xahb.amb_context_code
550    AND  xah.analytical_criterion_code      = xaht.analytical_criterion_code (+)
551    AND  xah.analytical_criterion_type_code = xaht.analytical_criterion_type_code (+)
552    AND  xah.amb_context_code               = xaht.amb_context_code (+)
553    AND  xah.application_id            = p_application_id
554    AND  xah.product_rule_type_code    = p_product_rule_type_code
555    AND  xah.product_rule_code         = p_product_rule_code
556    AND  xah.amb_context_code          = p_amb_context_code
557    AND  xah.event_class_code          = p_event_class
558    AND  xah.event_type_code           = p_event_type
559    AND  xahb.enabled_flag             = 'Y'
560    AND  xaht.language(+)              = USERENV('LANG')
561 ORDER BY xah.analytical_criterion_type_code, xah.analytical_criterion_code
562 ;
563 --
564 l_array_analytic_code                xla_cmp_source_pkg.t_array_VL30;
565 l_array_analytic_type_code           xla_cmp_source_pkg.t_array_VL1;
566 l_array_balancing_flag               xla_cmp_source_pkg.t_array_VL1;
567 l_array_name                         xla_cmp_source_pkg.t_array_VL80;
568 l_array_criterion_value              xla_cmp_source_pkg.t_array_VL1;
569 --
570 l_analytical_criteria                CLOB;
571 l_log_module                         VARCHAR2(240);
572 BEGIN
573 --
574 IF g_log_enabled THEN
575       l_log_module := C_DEFAULT_MODULE||'.GenerateHdrAnalyticCriteria';
576 END IF;
577 --
578 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
579 
580       trace
581          (p_msg      => 'BEGIN of GenerateHdrAnalyticCriteria'
582          ,p_level    => C_LEVEL_PROCEDURE
583          ,p_module   => l_log_module);
584 
585 END IF;
586 
587 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
588       trace
589          (p_msg      => 'entity code = '||p_entity||
590                         ' - event class code = '||p_event_class ||
591                         ' - event type code = '||p_event_type||
592                         ' - application id = '||p_application_id||
593                         ' - product rule code = '||p_product_rule_code||
594                         ' - product rule owner = '||p_product_rule_type_code||
595                         ' amb context code =' ||p_amb_context_code
596          ,p_level    => C_LEVEL_STATEMENT
597          ,p_module   => l_log_module);
598 END IF;
599 
600 OPEN analytic_criteria_cur;
601 --
602 FETCH analytic_criteria_cur BULK COLLECT INTO
603                                   l_array_analytic_code
604                                 , l_array_analytic_type_code
605                                 , l_array_balancing_flag
606                                 , l_array_criterion_value
607                                 , l_array_name
608                                 ;
609 CLOSE analytic_criteria_cur;
610 
611 l_analytical_criteria := NULL;
612 
613 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
614    trace
615       (p_msg      => '# number of analytical criteria = '||l_array_analytic_code.COUNT
616       ,p_level    => C_LEVEL_STATEMENT
617       ,p_module   => l_log_module);
618 END IF;
619 
620 IF l_array_analytic_code.COUNT > 0 THEN
621 
622 FOR Idx IN l_array_analytic_code.FIRST .. l_array_analytic_code.LAST LOOP
623 
624   IF l_array_analytic_code.EXISTS(Idx) THEN
625      IF (C_LEVEL_STATEMENT >= g_log_level) THEN
626          trace
627              (p_msg      => 'Analytical criteri name = '||l_array_name(Idx)
628                            ||' - Analytical criteri code = '||l_array_analytic_code(Idx)
629                            ||' - Analytical criteri type code = '||l_array_analytic_type_code(Idx)
630              ,p_level    => C_LEVEL_STATEMENT
631              ,p_module   => l_log_module);
632       END IF;
633 
634     l_analytical_criteria := l_analytical_criteria ||
635     xla_cmp_string_pkg.replace_token(HdrAnalyticCriteria(  -- 4417664
636       p_analytical_criterion_code  => l_array_analytic_code(Idx)
637     , p_analytical_criterion_type  => l_array_analytic_type_code(Idx)
638     , p_amb_context_code           => p_amb_context_code
639     , p_balancing_flag             => l_array_balancing_flag(Idx)
640     , p_criterion_value            => l_array_criterion_value(Idx)
641     , p_name                       => l_array_name(Idx)
642     , p_application_id             => p_application_id
643     , p_entity                     => p_entity
644     , p_event_class                => p_event_class
645     , p_rec_sources                => p_rec_sources),'$number$',TO_CHAR(Idx));  -- 4417664
646 
647 
648   END IF;
649 
650 END LOOP;
651 
652 END IF;
653 
654 IF l_analytical_criteria IS NULL THEN
655    l_analytical_criteria := '-- No header level analytical criteria';
656 END IF;
657 
658 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
659    trace
660       (p_msg      => 'END of GenerateHdrAnalyticCriteria'
661       ,p_level    => C_LEVEL_PROCEDURE
662       ,p_module   => l_log_module);
663 END IF;
664 RETURN l_analytical_criteria;
665 EXCEPTION
666    WHEN VALUE_ERROR THEN
667         -- SLA message to create
668         IF analytic_criteria_cur%ISOPEN THEN CLOSE analytic_criteria_cur; END IF;
669 
670         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
671              trace
672                   (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
673                   ,p_level    => C_LEVEL_EXCEPTION
677    WHEN xla_exceptions_pkg.application_exception   THEN
674                   ,p_module   => l_log_module);
675         END IF;
676         RETURN NULL;
678         IF analytic_criteria_cur%ISOPEN THEN CLOSE analytic_criteria_cur; END IF;
679         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
680             trace
681                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
682                ,p_level    => C_LEVEL_EXCEPTION
683                ,p_module   => l_log_module);
684         END IF;
685         RETURN NULL;
686    WHEN OTHERS THEN
687       IF analytic_criteria_cur%ISOPEN THEN CLOSE analytic_criteria_cur; END IF;
688       xla_exceptions_pkg.raise_message
689          (p_location => 'xla_cmp_analytic_criteria_pkg.GenerateHdrAnalyticCriteria');
690 
691 END GenerateHdrAnalyticCriteria;
692 
693 /*---------------------------------------------------------------------------+
694 |                                                                            |
695 |                                                                            |
696 |   Public Procedure                                                         |
697 |                                                                            |
698 |     LineAnalyticCriteria                                                   |
699 |                                                                            |
700 |   Translates one AMB line analytical criterion into PL/SQL code.           |
701 |                                                                            |
702 +---------------------------------------------------------------------------*/
703 
704 FUNCTION LineAnalyticCriteria(
705   p_analytical_criterion_code    IN VARCHAR2
706 , p_analytical_criterion_type    IN VARCHAR2
707 , p_amb_context_code             IN VARCHAR2
708 , p_balancing_flag               IN VARCHAR2
709 , p_criterion_value              IN VARCHAR2
710 , p_name                         IN VARCHAR2
711 , p_application_id               IN NUMBER
712 , p_event_class                  IN VARCHAR2
713 , p_ac_type                      IN VARCHAR2     -- 4262811
714 , p_array_alt_source_index       IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
715 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
716 )
717 RETURN CLOB
718 IS
719 --
720 CURSOR analytic_criteria_cur
721 IS
722 SELECT  xas.source_code
723      ,  xas.source_type_code
724      ,  xas.source_application_id
725      ,  xadb.grouping_order
726      ,  xadb.data_type_code
727      ,  xadb.analytical_detail_code
728   FROM  xla_analytical_dtls_b    xadb
729       , xla_analytical_sources   xas
730  WHERE  xadb.analytical_detail_code         = xas.analytical_detail_code
731    AND  xadb.analytical_criterion_code      = xas.analytical_criterion_code
732    AND  xadb.analytical_criterion_type_code = xas.analytical_criterion_type_code
733    AND  xadb.amb_context_code              = xas.amb_context_code
734    AND (
735         xas.event_class_code               = p_event_class
736        OR
737         xas.event_class_code               = xas.entity_code ||'_ALL'
738        )
739    AND  xas.analytical_criterion_code       = p_analytical_criterion_code
740    AND  xas.analytical_criterion_type_code  = p_analytical_criterion_type
741    AND  xas.amb_context_code               = p_amb_context_code
742    AND  xas.application_id                 = p_application_id
743    AND  xadb.analytical_detail_code        IS NOT NULL
744    AND  xadb.data_type_code                IS NOT NULL
745    AND  xadb.grouping_order                IS NOT NULL
746  ORDER BY xadb.grouping_order
747 ;
748 --
749 l_array_order                    xla_cmp_source_pkg.t_array_Num;
750 l_array_detail_code              xla_cmp_source_pkg.t_array_VL30;
751 l_array_data_type                xla_cmp_source_pkg.t_array_VL1;
752 l_array_source_code              xla_cmp_source_pkg.t_array_VL30;
753 l_array_source_type_code         xla_cmp_source_pkg.t_array_VL1;
754 l_array_source_appl_id           xla_cmp_source_pkg.t_array_Num;
755 --
756 l_source_Idx                     BINARY_INTEGER;
757 --
758 l_analytical_criteria            CLOB;
759 l_analytical_detail              CLOB;
760 l_detail                         VARCHAR2(32000);
761 l_log_module                     VARCHAR2(240);
762 --
763 BEGIN
764 IF g_log_enabled THEN
765       l_log_module := C_DEFAULT_MODULE||'.LineAnalyticCriteria';
766 END IF;
767 
768 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
769 
770       trace
771          (p_msg      => 'BEGIN of LineAnalyticCriteria'
772          ,p_level    => C_LEVEL_PROCEDURE
773          ,p_module   => l_log_module);
774 
775 END IF;
776 
777 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
778       trace
779          (p_msg      => ' event class code = '||p_event_class ||
780                         ' - application id = '||p_application_id||
781                         ' - analytical criterion code = '||p_analytical_criterion_code||
782                         ' - analytical criterion owner = '||p_analytical_criterion_type||
783                         ' amb context code =' ||p_amb_context_code
784          ,p_level    => C_LEVEL_STATEMENT
785          ,p_module   => l_log_module);
786 END IF;
787 
788 OPEN analytic_criteria_cur;
789 --
790 FETCH analytic_criteria_cur BULK COLLECT INTO l_array_source_code
791                                              ,l_array_source_type_code
792                                              ,l_array_source_appl_id
793                                              ,l_array_order
794                                              ,l_array_data_type
795                                              ,l_array_detail_code
796 ;
797 --
798 CLOSE analytic_criteria_cur;
799 --
800 l_analytical_detail := NULL;
801 
805 
802 IF l_array_detail_code.COUNT > 0 THEN
803 
804 FOR Idx IN l_array_detail_code.FIRST .. l_array_detail_code.LAST LOOP
806   IF l_array_detail_code.EXISTS(Idx) THEN
807 
808     CASE  l_array_data_type(Idx)
809       WHEN C_NUM  THEN l_detail              := C_DETAIL_NUM;
810       WHEN C_DATE THEN l_detail              := C_DETAIL_DATE;
811       ELSE             l_detail              := C_DETAIL_CHAR;
812     END CASE;
813 
814     l_detail              := REPLACE(l_detail,'$Jdx$', TO_CHAR(l_array_order(Idx)));
815 
816     IF l_array_source_code(Idx) IS NOT NULL THEN
817 
818          l_source_Idx := xla_cmp_source_pkg.StackSource (
819                         p_source_code                => l_array_source_code(Idx)
820                       , p_source_type_code           => l_array_source_type_code(Idx)
821                       , p_source_application_id      => l_array_source_appl_id(Idx)
822                       , p_array_source_index         => p_array_alt_source_index
823                       , p_rec_sources                => p_rec_sources
824                       );
825 
826          l_detail := REPLACE(l_detail,'$detail_value$',
827                             xla_cmp_source_pkg.GenerateSource(
828                                   p_Index             => l_source_Idx
829                                 , p_rec_sources       => p_rec_sources
830                                 , p_translated_flag   => p_criterion_value)
831                                 );
832       ELSE
833 
834         l_detail              := REPLACE(l_detail,'$detail_value$' , '''NULL''');
835 
836       END IF;
837 
838     l_analytical_detail := l_analytical_detail || l_detail ;
839 
840   END IF;
841 END LOOP;
842 
843 if p_ac_type = C_MPA_HDR THEN                -- 4262811
844    l_analytical_criteria := C_AC_HDR_CALL;   -- 4262811
845 ELSE
846    l_analytical_criteria := C_AC_LINE_CALL;
847 END IF;
848 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$analytical_criterion_name$' ,REPLACE(p_name, '''',''''''));  -- 4417664
849 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$analytical_criterion_owner$',p_analytical_criterion_type);  -- 4417664
850 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$analytical_criterion_code$' ,p_analytical_criterion_code);  -- 4417664
851 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$amb_context_code$'          ,p_amb_context_code);  -- 4417664
852 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$balancing_flag$'           ,p_balancing_flag);  -- 4417664
853 l_analytical_criteria := xla_cmp_string_pkg.replace_token(l_analytical_criteria,'$analytical_details$'       ,
854                             l_analytical_detail);
855 
856 END IF;
857 
858 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
859       trace
860          (p_msg      => 'END of LineAnalyticCriteria'
861          ,p_level    => C_LEVEL_PROCEDURE
862          ,p_module   => l_log_module);
863 END IF;
864 RETURN l_analytical_criteria;
865 EXCEPTION
866    WHEN xla_exceptions_pkg.application_exception   THEN
867         IF analytic_criteria_cur%ISOPEN THEN CLOSE analytic_criteria_cur; END IF;
868         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
869             trace
870                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
871                ,p_level    => C_LEVEL_EXCEPTION
872                ,p_module   => l_log_module);
873         END IF;
874         RETURN NULL;
875    WHEN OTHERS THEN
876       IF analytic_criteria_cur%ISOPEN THEN CLOSE analytic_criteria_cur; END IF;
877       xla_exceptions_pkg.raise_message
878          (p_location => 'xla_cmp_analytic_criteria_pkg.LineAnalyticCriteria');
879 END LineAnalyticCriteria;
880 
881 /*---------------------------------------------------------------------------+
882 |                                                                            |
883 |                                                                            |
884 |   Public Procedure                                                         |
885 |                                                                            |
886 |     GenerateMpaHeaderAC - 4262811                                          |
887 |                                                                            |
888 |                                                                            |
889 +---------------------------------------------------------------------------*/
890 
891 FUNCTION GenerateMpaHeaderAC(
892   p_application_id               IN NUMBER
893 , p_amb_context_code             IN VARCHAR2
894 , p_event_class                  IN VARCHAR2
895 , p_event_type                   IN VARCHAR2
896 , p_line_definition_owner_code   IN VARCHAR2
897 , p_line_definition_code         IN VARCHAR2
898 , p_accrual_jlt_owner_code       IN VARCHAR2
899 , p_accrual_jlt_code             IN VARCHAR2
900 , p_array_alt_source_index       IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
901 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
902 )
903 RETURN CLOB
904 IS
905 --
906 CURSOR ac_cur IS
907 SELECT  xmhc.analytical_criterion_code
908       , xmhc.analytical_criterion_type_code
909       , xahb.balancing_flag
910       , DECODE(xahb.criterion_value_code,
911               'MEANING','Y'
912               ,'N')
913       , xaht.name
914   FROM  xla_mpa_header_ac_assgns  xmhc
915      ,  xla_analytical_hdrs_b     xahb
916      ,  xla_analytical_hdrs_tl    xaht
917  WHERE  xahb.analytical_criterion_code      = xaht.analytical_criterion_code (+)
918    AND  xahb.analytical_criterion_type_code = xaht.analytical_criterion_type_code(+)
919    AND  xahb.amb_context_code               = xaht.amb_context_code (+)
920    AND  xaht.language(+)                    = USERENV('LANG')
924    AND  xmhc.application_id                 = p_application_id
921    AND  xmhc.analytical_criterion_code      = xahb.analytical_criterion_code
922    AND  xmhc.analytical_criterion_type_code = xahb.analytical_criterion_type_code
923    AND  xmhc.amb_context_code               = xahb.amb_context_code
925    AND  xmhc.amb_context_code               = p_amb_context_code
926    AND  xmhc.event_class_code               = p_event_class
927    AND  xmhc.event_type_code                = p_event_type
928    AND  xmhc.line_definition_owner_code     = p_line_definition_owner_code
929    AND  xmhc.line_definition_code           = p_line_definition_code
930    AND  xmhc.accounting_line_type_code      = p_accrual_jlt_owner_code
931    AND  xmhc.accounting_line_code           = p_accrual_jlt_code
932    AND  xahb.enabled_flag                   = 'Y'
933 ORDER BY xmhc.analytical_criterion_type_code, xmhc.analytical_criterion_code
934 ;
935 
936 l_array_ac_code                      xla_cmp_source_pkg.t_array_VL30;
937 l_array_ac_type_code                 xla_cmp_source_pkg.t_array_VL1;
938 l_array_balancing_flag               xla_cmp_source_pkg.t_array_VL1;
939 l_array_ac_value                     xla_cmp_source_pkg.t_array_VL1;
940 l_array_name                         xla_cmp_source_pkg.t_array_VL80;
941 
942 l_body          CLOB;
943 l_log_module    VARCHAR2(240);
944 --
945 BEGIN
946 IF g_log_enabled THEN
947       l_log_module := C_DEFAULT_MODULE||'.GenerateMpaHeaderAC';
948 END IF;
949 
950 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
951 
952       trace
953          (p_msg      => 'BEGIN of GenerateMpaHeaderAC'
954          ,p_level    => C_LEVEL_PROCEDURE
955          ,p_module   => l_log_module);
956 
957 END IF;
958 
959 
960 OPEN ac_cur;
961 FETCH ac_cur BULK COLLECT INTO
962                                   l_array_ac_code
963                                 , l_array_ac_type_code
964                                 , l_array_balancing_flag
965                                 , l_array_ac_value
966                                 , l_array_name;
967 CLOSE ac_cur;
968 --
969 IF l_array_ac_code.COUNT > 0 THEN
970    --
971    l_body := 'hdr_idx := g_last_hdr_idx;  -- to set value of mpa header index for analytical criteria
972              ';
973    --
974    FOR Idx IN l_array_ac_code.FIRST .. l_array_ac_code.LAST LOOP
975       --
976       IF l_array_ac_code.EXISTS(Idx) THEN
977          --
978          l_body := l_body ||xla_cmp_string_pkg.replace_token(LineAnalyticCriteria(
979                                          p_analytical_criterion_code            => l_array_ac_code(Idx)
980                                        , p_analytical_criterion_type            => l_array_ac_type_code(Idx)
981                                        , p_amb_context_code                     => p_amb_context_code
982                                        , p_balancing_flag                       => l_array_balancing_flag(Idx)
983                                        , p_criterion_value                      => l_array_ac_value(Idx)
984                                        , p_name                                 => l_array_name(Idx)
985                                        , p_application_id                       => p_application_id
986                                        , p_event_class                          => p_event_class
987                                        , p_ac_type                              => C_MPA_HDR
988                                        , p_array_alt_source_index               => p_array_alt_source_index
989                                        , p_rec_sources                          => p_rec_sources
990                                        ) ,'$number$',TO_CHAR(Idx));
991          --
992       END IF;
993       --
994    END LOOP;
995   --
996 END IF;
997 
998 
999 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1000       trace
1001          (p_msg      => 'END of GenerateMpaHeaderAC'
1002          ,p_level    => C_LEVEL_PROCEDURE
1003          ,p_module   => l_log_module);
1004 END IF;
1005 
1006 RETURN l_body;
1007 
1008 EXCEPTION
1009    WHEN xla_exceptions_pkg.application_exception   THEN
1010         IF ac_cur%ISOPEN THEN CLOSE ac_cur; END IF;
1011         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1012             trace
1013                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
1014                ,p_level    => C_LEVEL_EXCEPTION
1015                ,p_module   => l_log_module);
1016         END IF;
1017         RETURN NULL;
1018    WHEN OTHERS THEN
1019       IF ac_cur%ISOPEN THEN CLOSE ac_cur; END IF;
1020       xla_exceptions_pkg.raise_message
1021          (p_location => 'xla_cmp_analytic_criteria_pkg.GenerateMpaHeaderAC');
1022 
1023 END GenerateMpaHeaderAC;
1024 
1025 
1026 /*---------------------------------------------------------------------------+
1027 |                                                                            |
1028 |                                                                            |
1029 |   Public Procedure                                                         |
1030 |                                                                            |
1031 |     GenerateMpaLineAC   - 4262811                                          |
1032 |                                                                            |
1033 |                                                                            |
1034 +---------------------------------------------------------------------------*/
1035 
1036 FUNCTION GenerateMpaLineAC(
1037   p_application_id               IN NUMBER
1038 , p_amb_context_code             IN VARCHAR2
1039 , p_event_class                  IN VARCHAR2
1040 , p_event_type                   IN VARCHAR2
1041 , p_line_definition_owner_code   IN VARCHAR2
1042 , p_line_definition_code         IN VARCHAR2
1043 , p_accrual_jlt_owner_code       IN VARCHAR2
1047 , p_array_mpa_jlt_source_index   IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1044 , p_accrual_jlt_code             IN VARCHAR2
1045 , p_mpa_jlt_owner_code           IN VARCHAR2
1046 , p_mpa_jlt_code                 IN VARCHAR2
1048 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
1049 )
1050 RETURN CLOB
1051 IS
1052 
1053 CURSOR ac_cur IS
1054 SELECT  xmlc.analytical_criterion_code
1055       , xmlc.analytical_criterion_type_code
1056       , xahb.balancing_flag
1057       , DECODE(xahb.criterion_value_code,
1058               'MEANING','Y'
1059               ,'N')
1060       , xaht.name
1061   FROM  xla_mpa_jlt_ac_assgns    xmlc
1062      ,  xla_analytical_hdrs_b     xahb
1063      ,  xla_analytical_hdrs_tl    xaht
1064  WHERE  xahb.analytical_criterion_code      = xaht.analytical_criterion_code (+)
1065    AND  xahb.analytical_criterion_type_code = xaht.analytical_criterion_type_code(+)
1066    AND  xahb.amb_context_code               = xaht.amb_context_code (+)
1067    AND  xaht.language(+)                    = USERENV('LANG')
1068    AND  xmlc.analytical_criterion_code      = xahb.analytical_criterion_code
1069    AND  xmlc.analytical_criterion_type_code = xahb.analytical_criterion_type_code
1070    AND  xmlc.amb_context_code               = xahb.amb_context_code
1071    AND  xmlc.application_id                 = p_application_id
1072    AND  xmlc.amb_context_code               = p_amb_context_code
1073    AND  xmlc.event_class_code               = p_event_class
1074    AND  xmlc.event_type_code                = p_event_type
1075    AND  xmlc.line_definition_owner_code     = p_line_definition_owner_code
1076    AND  xmlc.line_definition_code           = p_line_definition_code
1077    AND  xmlc.accounting_line_type_code      = p_accrual_jlt_owner_code
1078    AND  xmlc.accounting_line_code           = p_accrual_jlt_code
1079    AND  xmlc.mpa_accounting_line_type_code  = p_mpa_jlt_owner_code
1080    AND  xmlc.mpa_accounting_line_code       = p_mpa_jlt_code
1081    AND  xahb.enabled_flag                   = 'Y'
1082 ORDER BY xmlc.analytical_criterion_type_code, xmlc.analytical_criterion_code
1083 ;
1084 --
1085 l_array_ac_code                      xla_cmp_source_pkg.t_array_VL30;
1086 l_array_ac_type_code                 xla_cmp_source_pkg.t_array_VL1;
1087 l_array_balancing_flag               xla_cmp_source_pkg.t_array_VL1;
1088 l_array_ac_value                     xla_cmp_source_pkg.t_array_VL1;
1089 l_array_name                         xla_cmp_source_pkg.t_array_VL80;
1090 
1091 l_body         CLOB;
1092 l_log_module   VARCHAR2(240);
1093 --
1094 BEGIN
1095 IF g_log_enabled THEN
1096       l_log_module := C_DEFAULT_MODULE||'.GenerateMpaLineAC';
1097 END IF;
1098 
1099 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1100 
1101       trace
1102          (p_msg      => 'BEGIN of GenerateMpaLineAC'
1103          ,p_level    => C_LEVEL_PROCEDURE
1104          ,p_module   => l_log_module);
1105 
1106 END IF;
1107 
1108 OPEN ac_cur;
1109 FETCH ac_cur BULK COLLECT INTO    l_array_ac_code
1110                                 , l_array_ac_type_code
1111                                 , l_array_balancing_flag
1112                                 , l_array_ac_value
1113                                 , l_array_name;
1114 CLOSE ac_cur;
1115 --
1116 l_body := NULL;
1117 --
1118 IF l_array_ac_code.COUNT > 0 THEN
1119   --
1120   FOR Idx IN l_array_ac_code.FIRST .. l_array_ac_code.LAST LOOP
1121   --
1122     IF l_array_ac_code.EXISTS(Idx) THEN
1123        --
1124        l_body := l_body ||xla_cmp_string_pkg.replace_token(LineAnalyticCriteria(
1125                                                 p_analytical_criterion_code     => l_array_ac_code(Idx)
1126                                               , p_analytical_criterion_type     => l_array_ac_type_code(Idx)
1127                                               , p_amb_context_code              => p_amb_context_code
1128                                               , p_balancing_flag                => l_array_balancing_flag(Idx)
1129                                               , p_criterion_value               => l_array_ac_value(Idx)
1130                                               , p_name                          => l_array_name(Idx)
1131                                               , p_application_id                => p_application_id
1132                                               , p_event_class                   => p_event_class
1133                                               , p_ac_type                       => C_MPA_LINE
1134                                               , p_array_alt_source_index        => p_array_mpa_jlt_source_index
1135                                               , p_rec_sources                   => p_rec_sources
1136                                               ) ,'$number$',TO_CHAR(Idx));
1137        --
1138     END IF;
1139     --
1140   END LOOP;
1141   --
1142 END IF;
1143 
1144 
1145 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1146       trace
1147          (p_msg      => 'END of GenerateMpaLineAC'
1148          ,p_level    => C_LEVEL_PROCEDURE
1149          ,p_module   => l_log_module);
1150 END IF;
1151 
1152 RETURN l_body;
1153 
1154 EXCEPTION
1155    WHEN xla_exceptions_pkg.application_exception   THEN
1156         IF ac_cur%ISOPEN THEN CLOSE ac_cur; END IF;
1157         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1158             trace
1159                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
1160                ,p_level    => C_LEVEL_EXCEPTION
1161                ,p_module   => l_log_module);
1162         END IF;
1163         RETURN NULL;
1164    WHEN OTHERS THEN
1165       IF ac_cur%ISOPEN THEN CLOSE ac_cur; END IF;
1166       xla_exceptions_pkg.raise_message
1167          (p_location => 'xla_cmp_analytic_criteria_pkg.GenerateMpaLineAC');
1168 
1169 END GenerateMpaLineAC;
1170 
1174 |   Public Procedure                                                         |
1171 /*---------------------------------------------------------------------------+
1172 |                                                                            |
1173 |                                                                            |
1175 |                                                                            |
1176 |     GenerateLineAnalyticCriteria                                           |
1177 |                                                                            |
1178 |   Translates the AMB line analytical criteria into PL/SQL code.            |
1179 |                                                                            |
1180 +---------------------------------------------------------------------------*/
1181 
1182 
1183 FUNCTION GenerateLineAnalyticCriteria(
1184   p_application_id               IN NUMBER
1185 , p_amb_context_code             IN VARCHAR2
1186 , p_event_class                  IN VARCHAR2
1187 , p_event_type                   IN VARCHAR2
1188 , p_line_definition_owner_code   IN VARCHAR2
1189 , p_line_definition_code         IN VARCHAR2
1190 , p_accounting_line_type_code    IN VARCHAR2
1191 , p_accounting_line_code         IN VARCHAR2
1192 --
1193 , p_array_alt_source_index       IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1194 --
1195 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
1196 )
1197 RETURN CLOB
1198 IS
1199 --
1200 CURSOR analytic_criteria_cur
1201 IS
1202 SELECT  xlda.analytical_criterion_code
1203       , xlda.analytical_criterion_type_code
1204       , xahb.balancing_flag
1205       , DECODE(xahb.criterion_value_code,
1206               'MEANING','Y'
1207               ,'N')
1208       , xaht.name
1209   FROM  xla_line_defn_ac_assgns   xlda
1210      ,  xla_analytical_hdrs_b     xahb
1211      ,  xla_analytical_hdrs_tl    xaht
1212  WHERE  xahb.analytical_criterion_code      = xaht.analytical_criterion_code (+)
1213    AND  xahb.analytical_criterion_type_code = xaht.analytical_criterion_type_code (+)
1214    AND  xahb.amb_context_code               = xaht.amb_context_code (+)
1215    AND  xaht.language(+)                    = USERENV('LANG')
1216    AND  xlda.analytical_criterion_code      = xahb.analytical_criterion_code
1217    AND  xlda.analytical_criterion_type_code = xahb.analytical_criterion_type_code
1218    AND  xlda.amb_context_code               = xahb.amb_context_code
1219    AND  xlda.application_id                 = p_application_id
1220    AND  xlda.amb_context_code               = p_amb_context_code
1221    AND  xlda.event_class_code               = p_event_class
1222    AND  xlda.event_type_code                = p_event_type
1223    AND  xlda.line_definition_owner_code     = p_line_definition_owner_code
1224    AND  xlda.line_definition_code           = p_line_definition_code
1225    AND  xlda.accounting_line_code           = p_accounting_line_code
1226    AND  xlda.accounting_line_type_code      = p_accounting_line_type_code
1227    AND  xahb.enabled_flag                   = 'Y'
1228 ORDER BY xlda.analytical_criterion_type_code, xlda.analytical_criterion_code
1229 ;
1230 --
1231 l_array_analytic_code                xla_cmp_source_pkg.t_array_VL30;
1232 l_array_analytic_type_code           xla_cmp_source_pkg.t_array_VL1;
1233 l_array_balancing_flag               xla_cmp_source_pkg.t_array_VL1;
1234 l_array_name                         xla_cmp_source_pkg.t_array_VL80;
1235 l_array_criterion_value              xla_cmp_source_pkg.t_array_VL1;
1236 --
1237 l_analytical_criteria                CLOB;
1238 l_log_module                         VARCHAR2(240);
1239 BEGIN
1240 --
1241 IF g_log_enabled THEN
1242       l_log_module := C_DEFAULT_MODULE||'.GenerateLineAnalyticCriteria';
1243 END IF;
1244 --
1245 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1246 
1247       trace
1248          (p_msg      => 'BEGIN of GenerateLineAnalyticCriteria'
1249          ,p_level    => C_LEVEL_PROCEDURE
1250          ,p_module   => l_log_module);
1251 
1252 END IF;
1253 
1254 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1255       trace
1256          (p_msg      => ' event class code = '||p_event_class ||
1257                         ' - event type code = '||p_event_type||
1258                         ' - application id = '||p_application_id||
1259                         ' - line definition code = '||p_line_definition_code||
1260                         ' - line definition owner = '||p_line_definition_owner_code||
1261                         ' - accounting line code = '||p_accounting_line_code||
1262                         ' - accounting line owner = '||p_accounting_line_type_code||
1263                         ' amb context code =' ||p_amb_context_code
1264          ,p_level    => C_LEVEL_STATEMENT
1265          ,p_module   => l_log_module);
1266 END IF;
1267 
1268 
1269 OPEN analytic_criteria_cur;
1270 
1271 FETCH analytic_criteria_cur BULK COLLECT INTO
1272                                   l_array_analytic_code
1273                                 , l_array_analytic_type_code
1274                                 , l_array_balancing_flag
1275                                 , l_array_criterion_value
1276                                 , l_array_name
1277                                 ;
1278 CLOSE analytic_criteria_cur;
1279 
1280 l_analytical_criteria := NULL;
1281 
1282 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1283    trace
1284       (p_msg      => 'l_array_analytic_code.COUNT = '||l_array_analytic_code.COUNT
1285       ,p_level    => C_LEVEL_STATEMENT
1286       ,p_module   => l_log_module);
1287 END IF;
1288 
1289 IF l_array_analytic_code.COUNT > 0 THEN
1290 
1291 FOR Idx IN l_array_analytic_code.FIRST .. l_array_analytic_code.LAST LOOP
1292 
1293   IF l_array_analytic_code.EXISTS(Idx) THEN
1294 
1295      IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1296          trace
1300              ,p_level    => C_LEVEL_STATEMENT
1297              (p_msg      => 'Analytical criteri name = '||l_array_name(Idx)
1298                             ||' - Analytical criteri code = '||l_array_analytic_code(Idx)
1299                             ||' - Analytical criteri type code = '||l_array_analytic_type_code(Idx)
1301              ,p_module   => l_log_module);
1302      END IF;
1303 
1304     l_analytical_criteria := l_analytical_criteria ||
1305     xla_cmp_string_pkg.replace_token(   -- 4417664
1306      LineAnalyticCriteria(
1307       p_analytical_criterion_code            => l_array_analytic_code(Idx)
1308     , p_analytical_criterion_type            => l_array_analytic_type_code(Idx)
1309     , p_amb_context_code                     => p_amb_context_code
1310     , p_balancing_flag                       => l_array_balancing_flag(Idx)
1311     , p_criterion_value                      => l_array_criterion_value(Idx)
1312     , p_name                                 => l_array_name(Idx)
1313     , p_application_id                       => p_application_id
1314     , p_event_class                          => p_event_class
1315     , p_ac_type                              => C_LINE             -- 4262811
1316     , p_array_alt_source_index               => p_array_alt_source_index
1317     , p_rec_sources                          => p_rec_sources ) ,'$number$',  TO_CHAR(Idx));  -- 4417664
1318 
1319   END IF;
1320 END LOOP;
1321 
1322 END IF;
1323 
1324 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1325 
1326       trace
1327          (p_msg      => 'END of GenerateLineAnalyticCriteria'
1328          ,p_level    => C_LEVEL_PROCEDURE
1329          ,p_module   => l_log_module);
1330 
1331 END IF;
1332 RETURN l_analytical_criteria;
1333 EXCEPTION
1334    WHEN VALUE_ERROR THEN
1335         --
1336         IF analytic_criteria_cur%ISOPEN THEN CLOSE analytic_criteria_cur; END IF;
1337 
1338         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1339              trace
1340                   (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR ='||sqlerrm
1341                  ,p_level    => C_LEVEL_EXCEPTION
1342                  ,p_module   => l_log_module);
1343         END IF;
1344         RETURN NULL;
1345    WHEN xla_exceptions_pkg.application_exception   THEN
1346         IF analytic_criteria_cur%ISOPEN THEN CLOSE analytic_criteria_cur; END IF;
1347         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1348             trace
1349                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
1350                ,p_level    => C_LEVEL_EXCEPTION
1351                ,p_module   => l_log_module);
1352         END IF;
1353         RETURN NULL;
1354    WHEN OTHERS THEN
1355       IF analytic_criteria_cur%ISOPEN THEN CLOSE analytic_criteria_cur; END IF;
1356       xla_exceptions_pkg.raise_message
1357          (p_location => 'xla_cmp_analytic_criteria_pkg.GenerateLineAnalyticCriteria');
1358 
1359 END GenerateLineAnalyticCriteria;
1360 
1361 --=============================================================================
1362 --
1363 --
1364 --
1365 --
1366 --
1367 --
1368 --
1369 --
1370 --
1371 --
1372 --
1373 --
1374 --
1375 --
1376 --
1377 --
1378 --
1379 --
1380 --
1381 --
1382 --
1383 --
1384 --=============================================================================
1385 --=============================================================================
1386 --          *********** Initialization routine **********
1387 --=============================================================================
1388 
1389 BEGIN
1390 
1391    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1392    g_log_enabled    := fnd_log.test
1393                           (log_level  => g_log_level
1394                           ,module     => C_DEFAULT_MODULE);
1395 
1396    IF NOT g_log_enabled  THEN
1397       g_log_level := C_LEVEL_LOG_DISABLED;
1398    END IF;
1399 
1400 END xla_cmp_analytic_criteria_pkg; --