DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_DESCRIPTIONS_PKG

Source


1 PACKAGE BODY xla_descriptions_pkg AS
2 /* $Header: xlaamdad.pkb 120.20 2005/04/28 18:42:32 masada ship $ */
3 /*======================================================================+
4 |             Copyright (c) 1995-2002 Oracle Corporation                |
5 |                       Redwood Shores, CA, USA                         |
6 |                         All rights reserved.                          |
7 +=======================================================================+
8 | PACKAGE NAME                                                          |
9 |    xla_descriptions_pkg                                               |
10 |                                                                       |
11 | DESCRIPTION                                                           |
12 |    XLA Descriptions Package                                           |
13 |                                                                       |
14 | HISTORY                                                               |
15 |    01-May-01 Dimple Shah    Created                                   |
16 |                                                                       |
17 +======================================================================*/
18 
19 TYPE t_array_codes         IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
20 TYPE t_array_type_codes    IS TABLE OF VARCHAR2(1)  INDEX BY BINARY_INTEGER;
21 
22 --=============================================================================
23 --               *********** Local Trace Routine **********
24 --=============================================================================
25 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
26 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
27 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
28 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
29 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
30 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
31 
32 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
33 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_descriptions_pkg';
34 
35 g_log_level           NUMBER;
36 g_log_enabled         BOOLEAN;
37 
38 PROCEDURE trace
39   (p_msg                        IN VARCHAR2
40   ,p_module                     IN VARCHAR2
41   ,p_level                      IN NUMBER) IS
42 BEGIN
43   ----------------------------------------------------------------------------
44   -- Following is for FND log.
45   ----------------------------------------------------------------------------
46   IF (p_msg IS NULL AND p_level >= g_log_level) THEN
47     fnd_log.message(p_level, p_module);
48   ELSIF p_level >= g_log_level THEN
49     fnd_log.string(p_level, p_module, p_msg);
50   END IF;
51 
52 EXCEPTION
53   WHEN xla_exceptions_pkg.application_exception THEN
54     RAISE;
55 
56   WHEN OTHERS THEN
57     xla_exceptions_pkg.raise_message
61 
58       (p_location   => 'xla_descriptions_pkg.trace');
59 END trace;
60 
62 /*======================================================================+
63 |                                                                       |
64 | Public Procedure                                                      |
65 |                                                                       |
66 | delete_description_details                                            |
67 |                                                                       |
68 | Deletes all details of the description                                |
69 |                                                                       |
70 +======================================================================*/
71 
72 PROCEDURE delete_description_details
73   (p_application_id                  IN NUMBER
74   ,p_amb_context_code                IN VARCHAR2
75   ,p_description_type_code           IN VARCHAR2
76   ,p_description_code                IN VARCHAR2)
77 IS
78 
79    l_description_prio_id    NUMBER(38);
80 
81    CURSOR c_description_priorities
82    IS
83    SELECT description_prio_id
84      FROM xla_desc_priorities
85     WHERE application_id        = p_application_id
86       AND amb_context_code      = p_amb_context_code
87       AND description_type_code = p_description_type_code
88       AND description_code      = p_description_code;
89 
90    l_log_module  VARCHAR2(240);
91 BEGIN
92    IF g_log_enabled THEN
93      l_log_module := C_DEFAULT_MODULE||'.delete_description_details';
94    END IF;
95 
96    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
97      trace(p_msg    => 'BEGIN of procedure delete_description_details'
98           ,p_module => l_log_module
99           ,p_level  => C_LEVEL_PROCEDURE);
100    END IF;
101 
102    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
103      trace(p_msg    => 'application_id = '||p_application_id||
104                        ',amb_context_code = '||p_amb_context_code||
105                        ',description_type_code = '||p_description_type_code||
106                        ',description_code = '||p_description_code
107           ,p_module => l_log_module
108           ,p_level  => C_LEVEL_STATEMENT);
109    END IF;
110 
111    OPEN c_description_priorities;
112    LOOP
113       FETCH c_description_priorities
114        INTO l_description_prio_id;
115       EXIT WHEN c_description_priorities%notfound;
116 
117       xla_conditions_pkg.delete_condition
118         (p_context                 => 'D'
119         ,p_description_prio_id     => l_description_prio_id);
120 
121       xla_descript_details_pkg.delete_desc_prio_details
122         (p_description_prio_id     => l_description_prio_id);
123 
124    END LOOP;
125    CLOSE c_description_priorities;
126 
127    DELETE
128      FROM xla_desc_priorities
129     WHERE application_id           = p_application_id
130       AND amb_context_code         = p_amb_context_code
131       AND description_type_code    = p_description_type_code
132       AND description_code         = p_description_code;
133 
134    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
135      trace(p_msg    => 'END of procedure delete_description_details'
136           ,p_module => l_log_module
137           ,p_level  => C_LEVEL_PROCEDURE);
138    END IF;
139 
140 
141 EXCEPTION
142    WHEN xla_exceptions_pkg.application_exception THEN
143       IF c_description_priorities%ISOPEN THEN
144          CLOSE c_description_priorities;
145       END IF;
146 
147       RAISE;
148    WHEN OTHERS                                   THEN
149       IF c_description_priorities%ISOPEN THEN
150          CLOSE c_description_priorities;
151       END IF;
152 
153       xla_exceptions_pkg.raise_message
154         (p_location   => 'xla_descriptions_pkg.delete_description_details');
155 
156 END delete_description_details;
157 
158 /*======================================================================+
159 |                                                                       |
160 | Public Procedure                                                      |
161 |                                                                       |
162 | copy_description_details                                              |
163 |                                                                       |
164 | Copies details of a description into a new description                |
165 |                                                                       |
166 +======================================================================*/
167 
168 PROCEDURE copy_description_details
169   (p_application_id                  IN NUMBER
170   ,p_amb_context_code                IN VARCHAR2
171   ,p_old_description_type_code       IN VARCHAR2
172   ,p_old_description_code            IN VARCHAR2
173   ,p_new_description_type_code       IN VARCHAR2
174   ,p_new_description_code            IN VARCHAR2
175   ,p_old_transaction_coa_id          IN NUMBER
176   ,p_new_transaction_coa_id          IN NUMBER)
177 
178 IS
179 
180    l_row_id                           ROWID;
181    l_condition_id                    integer;
182    l_new_description_prio_id         integer;
183    l_description_detail_id           integer;
184    l_creation_date                   DATE;
185    l_last_update_date                DATE;
186    l_created_by                      INTEGER;
187    l_last_update_login               INTEGER;
188    l_last_updated_by                 INTEGER;
189    l_flexfield_segment_code          VARCHAR2(30);
190    l_flexfield_segment_name          VARCHAR2(80);
194    l_inp_id_flex_code                VARCHAR2(30);
191    l_con_flexfield_segment_code      VARCHAR2(30);
192    l_con_v_flexfield_segment_code    VARCHAR2(30);
193    l_inp_flex_appl_id                NUMBER(15);
195    l_source_flex_appl_id             NUMBER(15);
196    l_source_id_flex_code             VARCHAR2(30);
197    l_value_source_flex_appl_id       NUMBER(15);
198    l_value_source_id_flex_code       VARCHAR2(30);
199 
200    CURSOR c_description_priorities
201    IS
202    SELECT description_prio_id, user_sequence
203      FROM xla_desc_priorities
204     WHERE application_id         = p_application_id
205       AND amb_context_code       = p_amb_context_code
206       AND description_type_code  = p_old_description_type_code
207       AND description_code       = p_old_description_code;
208 
209    l_description_priority     c_description_priorities%rowtype;
210 
211    CURSOR c_description_details
212    IS
213    SELECT user_sequence, value_type_code, literal, source_application_id,
214           source_type_code, source_code, flexfield_segment_code, display_description_flag
215      FROM xla_descript_details_vl
216     WHERE description_prio_id    = l_description_priority.description_prio_id;
217 
218    l_description_detail     c_description_details%rowtype;
219 
220    CURSOR c_det_source
221    IS
222    SELECT flexfield_application_id, id_flex_code
223      FROM xla_sources_b
224     WHERE application_id   = l_description_detail.source_application_id
225       AND source_type_code = l_description_detail.source_type_code
226       AND source_code      = l_description_detail.source_code;
227 
228    CURSOR c_detail_conditions
229    IS
230    SELECT user_sequence, bracket_left_code, bracket_right_code, value_type_code,
231           source_application_id, source_type_code, source_code,
232           flexfield_segment_code, value_flexfield_segment_code,
233           value_source_application_id, value_source_type_code,
234           value_source_code, value_constant, line_operator_code,
235           logical_operator_code, independent_value_constant
236      FROM xla_conditions
237     WHERE description_prio_id = l_description_priority.description_prio_id;
238 
239    l_detail_condition    c_detail_conditions%rowtype;
240 
241    CURSOR c_source
242    IS
243    SELECT flexfield_application_id, id_flex_code
244      FROM xla_sources_b
245     WHERE application_id   = l_detail_condition.source_application_id
246       AND source_type_code = l_detail_condition.source_type_code
247       AND source_code      = l_detail_condition.source_code;
248 
249    CURSOR c_value_source
250    IS
251    SELECT flexfield_application_id, id_flex_code
252      FROM xla_sources_b
253     WHERE application_id   = l_detail_condition.value_source_application_id
254       AND source_type_code = l_detail_condition.value_source_type_code
255       AND source_code      = l_detail_condition.value_source_code;
256 
257    l_log_module  VARCHAR2(240);
258 BEGIN
259    IF g_log_enabled THEN
260      l_log_module := C_DEFAULT_MODULE||'.copy_description_details';
261    END IF;
262 
263    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
264      trace(p_msg    => 'BEGIN of procedure copy_description_details'
265           ,p_module => l_log_module
266           ,p_level  => C_LEVEL_PROCEDURE);
267    END IF;
268 
269    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
270      trace(p_msg    => 'application_id = '||p_application_id||
271                        ',amb_context_code = '||p_amb_context_code||
272                        ',old_description_type_code = '||p_old_description_type_code||
273                        ',old_description_code = '||p_old_description_code||
274                        ',new_description_type_code = '||p_new_description_type_code||
275                        ',new_description_code = '||p_new_description_code
276           ,p_module => l_log_module
277           ,p_level  => C_LEVEL_STATEMENT);
278    END IF;
279 
280    l_creation_date           := sysdate;
281    l_last_update_date        := sysdate;
282    l_created_by              := xla_environment_pkg.g_usr_id;
283    l_last_update_login       := xla_environment_pkg.g_login_id;
284    l_last_updated_by         := xla_environment_pkg.g_usr_id;
285 
286    OPEN c_description_priorities;
287    LOOP
288       FETCH c_description_priorities
289        INTO l_description_priority;
290       EXIT WHEN c_description_priorities%notfound;
291 
292       SELECT xla_desc_priorities_s.nextval
293         INTO l_new_description_prio_id
294         FROM DUAL;
295 
296       INSERT INTO xla_desc_priorities
297         (description_prio_id
298         ,application_id
299         ,amb_context_code
300         ,description_type_code
301         ,description_code
302         ,user_sequence
303         ,creation_date
304         ,created_by
305         ,last_update_date
306         ,last_updated_by
307         ,last_update_login)
308       VALUES
309         (l_new_description_prio_id
310         ,p_application_id
311         ,p_amb_context_code
312         ,p_new_description_type_code
313         ,p_new_description_code
314         ,l_description_priority.user_sequence
315         ,l_creation_date
316         ,l_created_by
317         ,l_last_update_date
318         ,l_last_updated_by
319         ,l_last_update_login);
320 
321       OPEN c_description_details;
322       LOOP
323          FETCH c_description_details
324           INTO l_description_detail;
325          EXIT WHEN c_description_details%notfound;
326 
330              INTO l_inp_flex_appl_id, l_inp_id_flex_code;
327          IF l_description_detail.flexfield_segment_code is not null THEN
328             OPEN c_det_source;
329             FETCH c_det_source
331             CLOSE c_det_source;
332 
333             IF l_inp_flex_appl_id = 101 and l_inp_id_flex_code = 'GL#' THEN
334 
335                IF p_new_transaction_coa_id is not null and p_old_transaction_coa_id is null THEN
336                   l_flexfield_segment_code := xla_flex_pkg.get_qualifier_segment
337                                                 (p_application_id    => 101
338                                                 ,p_id_flex_code      => 'GL#'
339                                                 ,p_id_flex_num       => p_new_transaction_coa_id
340                                                 ,p_qualifier_segment => l_description_detail.flexfield_segment_code);
341 
342                 ELSE
343                    l_flexfield_segment_code := l_description_detail.flexfield_segment_code;
344                 END IF;
345             ELSE
346                -- Other key flexfield segment
347                l_flexfield_segment_code := l_description_detail.flexfield_segment_code;
348             END IF;
349          ELSE
350             -- value_flexfield_segment_code is null
351             l_flexfield_segment_code := l_description_detail.flexfield_segment_code;
352          END IF;
353 
354 
355          SELECT xla_descript_details_s.nextval
356            INTO l_description_detail_id
357            FROM DUAL;
358 
359 	   xla_descript_details_f_pkg.insert_row
360 	     (x_rowid                            => l_row_id
361 	     ,x_description_detail_id            => l_description_detail_id
362 	     ,x_description_prio_id              => l_new_description_prio_id
363          ,x_amb_context_code                 => p_amb_context_code
364 	     ,x_user_sequence                    => l_description_detail.user_sequence
365       	 ,x_value_type_code                  => l_description_detail.value_type_code
366 	     ,x_source_application_id            => l_description_detail.source_application_id
367 	     ,x_source_type_code                 => l_description_detail.source_type_code
368 	     ,x_source_code                      => l_description_detail.source_code
369 	     ,x_flexfield_segment_code           => l_flexfield_segment_code
370 	     ,x_literal                          => l_description_detail.literal
371          ,x_display_description_flag         => l_description_detail.display_description_flag
372 	     ,x_creation_date                    => l_creation_date
373 	     ,x_created_by                       => l_created_by
374 	     ,x_last_update_date                 => l_last_update_date
375 	     ,x_last_updated_by                  => l_last_updated_by
376 	     ,x_last_update_login                => l_last_update_login);
377 
378       END LOOP;
379       CLOSE c_description_details;
380 
381       OPEN c_detail_conditions;
382       LOOP
383          FETCH c_detail_conditions
384           INTO l_detail_condition;
385          EXIT WHEN c_detail_conditions%notfound;
386 
387          IF l_detail_condition.flexfield_segment_code is not null THEN
388 
389             OPEN c_source;
390             FETCH c_source
391              INTO l_source_flex_appl_id, l_source_id_flex_code;
392             CLOSE c_source;
393 
394             IF l_source_flex_appl_id = 101 and l_source_id_flex_code = 'GL#' THEN
395 
396                IF p_new_transaction_coa_id is not null and p_old_transaction_coa_id is null THEN
397                   l_con_flexfield_segment_code := xla_flex_pkg.get_qualifier_segment
398                                                 (p_application_id    => 101
399                                                 ,p_id_flex_code      => 'GL#'
400                                                 ,p_id_flex_num       => p_new_transaction_coa_id
401                                                 ,p_qualifier_segment => l_detail_condition.flexfield_segment_code);
402 
403                 ELSE
404                    l_con_flexfield_segment_code := l_detail_condition.flexfield_segment_code;
405                 END IF;
406 
407             ELSE
408                -- Other key flexfield segment
409                l_con_flexfield_segment_code := l_detail_condition.flexfield_segment_code;
410             END IF;
411          ELSE
412             l_con_flexfield_segment_code := l_detail_condition.flexfield_segment_code;
413          END IF;
414 
415          -- check value_flexfield_segment_code
416          IF l_detail_condition.value_flexfield_segment_code is not null THEN
417 
418                OPEN c_value_source;
419                FETCH c_value_source
420                 INTO l_value_source_flex_appl_id, l_value_source_id_flex_code;
421                CLOSE c_value_source;
422 
423                IF l_value_source_flex_appl_id = 101 and l_value_source_id_flex_code = 'GL#' THEN
424 
425                   IF p_new_transaction_coa_id is not null and p_old_transaction_coa_id is null THEN
426                      l_con_v_flexfield_segment_code := xla_flex_pkg.get_qualifier_segment
427                                                 (p_application_id    => 101
428                                                 ,p_id_flex_code      => 'GL#'
429                                                 ,p_id_flex_num       => p_new_transaction_coa_id
430                                                 ,p_qualifier_segment => l_detail_condition.value_flexfield_segment_code);
431 
432                   ELSE
433                     l_con_v_flexfield_segment_code := l_detail_condition.value_flexfield_segment_code;
434                   END IF;
435 
436                ELSE
437                   -- Other key flexfield segment
441             l_con_v_flexfield_segment_code := l_detail_condition.value_flexfield_segment_code;
438                   l_con_v_flexfield_segment_code := l_detail_condition.value_flexfield_segment_code;
439                END IF;
440          ELSE
442          END IF;
443 
444          SELECT xla_conditions_s.nextval
445            INTO l_condition_id
446            FROM DUAL;
447 
448          INSERT INTO xla_conditions
449            (condition_id
450            ,user_sequence
451            ,application_id
452            ,amb_context_code
453            ,description_prio_id
454            ,bracket_left_code
455            ,bracket_right_code
456            ,value_type_code
457            ,source_application_id
458            ,source_type_code
459            ,source_code
460            ,flexfield_segment_code
461            ,value_flexfield_segment_code
462            ,value_source_application_id
463            ,value_source_type_code
464            ,value_source_code
465            ,value_constant
466            ,line_operator_code
467            ,logical_operator_code
468            ,creation_date
469            ,created_by
470            ,last_update_date
471            ,last_updated_by
472            ,last_update_login
473            ,independent_value_constant)
474          VALUES
475            (l_condition_id
476            ,l_detail_condition.user_sequence
477            ,p_application_id
478            ,p_amb_context_code
479            ,l_new_description_prio_id
480            ,l_detail_condition.bracket_left_code
481            ,l_detail_condition.bracket_right_code
482            ,l_detail_condition.value_type_code
483            ,l_detail_condition.source_application_id
484            ,l_detail_condition.source_type_code
485            ,l_detail_condition.source_code
486            ,l_con_flexfield_segment_code
487            ,l_con_v_flexfield_segment_code
488            ,l_detail_condition.value_source_application_id
489            ,l_detail_condition.value_source_type_code
490            ,l_detail_condition.value_source_code
491            ,l_detail_condition.value_constant
492            ,l_detail_condition.line_operator_code
493            ,l_detail_condition.logical_operator_code
494            ,l_creation_date
495            ,l_created_by
496            ,l_last_update_date
497            ,l_last_updated_by
498            ,l_last_update_login
499            ,l_detail_condition.independent_value_constant);
500 
501       END LOOP;
502       CLOSE c_detail_conditions;
503 
504    END LOOP;
505    CLOSE c_description_priorities;
506 
507    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
508      trace(p_msg    => 'END of procedure copy_description_details'
509           ,p_module => l_log_module
510           ,p_level  => C_LEVEL_PROCEDURE);
511    END IF;
512 
513 
514 EXCEPTION
515    WHEN xla_exceptions_pkg.application_exception THEN
516       IF c_detail_conditions%ISOPEN THEN
517          CLOSE c_detail_conditions;
518       END IF;
519       IF c_description_details%ISOPEN THEN
520          CLOSE c_description_details;
521       END IF;
522       IF c_description_priorities%ISOPEN THEN
523          CLOSE c_description_priorities;
524       END IF;
525       RAISE;
526    WHEN OTHERS                                   THEN
527       IF c_detail_conditions%ISOPEN THEN
528          CLOSE c_detail_conditions;
529       END IF;
530       IF c_description_details%ISOPEN THEN
531          CLOSE c_description_details;
532       END IF;
533       IF c_description_priorities%ISOPEN THEN
534          CLOSE c_description_priorities;
535       END IF;
536       xla_exceptions_pkg.raise_message
537         (p_location   => 'xla_descriptions_pkg.copy_description_details');
538 
539 END copy_description_details;
540 
541 /*======================================================================+
542 |                                                                       |
543 | Public Function                                                       |
544 |                                                                       |
545 | rule_in_use                                                           |
546 |                                                                       |
547 | Returns true if the rule is in use by an accounting line type         |
548 |                                                                       |
549 +======================================================================*/
550 
551 FUNCTION rule_in_use
552   (p_event                            IN VARCHAR2
553   ,p_application_id                   IN NUMBER
554   ,p_amb_context_code                 IN VARCHAR2
555   ,p_description_type_code            IN VARCHAR2
556   ,p_description_code                 IN VARCHAR2
557   ,x_product_rule_name                IN OUT NOCOPY VARCHAR2
558   ,x_product_rule_type                IN OUT NOCOPY VARCHAR2
559   ,x_event_class_name                 IN OUT NOCOPY VARCHAR2
560   ,x_line_definition_name             IN OUT NOCOPY VARCHAR2
561   ,x_line_definition_owner            IN OUT NOCOPY VARCHAR2)
562 RETURN BOOLEAN
563 IS
564 
565    l_return   BOOLEAN;
566    l_exist    VARCHAR2(1);
567 
568    l_application_name      varchar2(80);
569    l_product_rule_name     varchar2(80);
570    l_product_rule_type     varchar2(80);
571    l_event_class_name      varchar2(80);
572    l_line_definition_owner varchar2(80);
573    l_line_definition_name  varchar2(80);
574 
575    CURSOR c_header_assign_exist
576    IS
580     WHERE application_id        = p_application_id
577    SELECT application_id, amb_context_code, product_rule_type_code, product_rule_code,
578           entity_code, event_class_code
579      FROM xla_prod_acct_headers
581       AND amb_context_code      = p_amb_context_code
582       AND description_type_code = p_description_type_code
583       AND description_code      = p_description_code;
584 
585    l_header_assign_exist          c_header_assign_exist%rowtype;
586 
587    CURSOR c_line_assign_exist
588    IS
589    SELECT line_definition_owner_code, line_definition_code,
590           event_class_code, event_type_code
591      FROM xla_line_defn_jlt_assgns
592     WHERE application_id        = p_application_id
593       AND amb_context_code      = p_amb_context_code
594       AND description_type_code = p_description_type_code
595       AND description_code      = p_description_code;
596 
597    l_line_assign_exist          c_line_assign_exist%rowtype;
598 
599    CURSOR c_active_assign_exist
600    IS
601    SELECT line_definition_owner_code, line_definition_code,
602           event_class_code, event_type_code
603      FROM xla_line_defn_jlt_assgns
604     WHERE application_id        = p_application_id
605       AND amb_context_code      = p_amb_context_code
606       AND description_type_code = p_description_type_code
607       AND description_code      = p_description_code
608       AND active_flag          = 'Y';
609 
610    l_active_assign_exist          c_active_assign_exist%rowtype;
611 
612    l_log_module  VARCHAR2(240);
613 BEGIN
614    IF g_log_enabled THEN
615      l_log_module := C_DEFAULT_MODULE||'.rule_in_use';
616    END IF;
617 
618    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
619      trace(p_msg    => 'BEGIN of procedure rule_in_use'
620           ,p_module => l_log_module
621           ,p_level  => C_LEVEL_PROCEDURE);
622    END IF;
623 
624    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
625      trace(p_msg    => 'event = '||p_event||
626                        ',application_id = '||p_application_id||
627                        ',amb_context_code = '||p_amb_context_code||
628                        ',description_type_code = '||p_description_type_code||
629                        ',description_code = '||p_description_code
630           ,p_module => l_log_module
631           ,p_level  => C_LEVEL_STATEMENT);
632    END IF;
633 
634    l_application_name      := null;
635    l_product_rule_name     := null;
636    l_product_rule_type     := null;
637    l_event_class_name      := null;
638    l_line_definition_owner := null;
639    l_line_definition_name  := null;
640 
641    IF p_event in ('DELETE','UPDATE') THEN
642       OPEN c_header_assign_exist;
643       FETCH c_header_assign_exist
644        INTO l_header_assign_exist;
645       IF c_header_assign_exist%found then
646          l_return := TRUE;
647 
648          xla_validations_pkg.get_product_rule_info
649            (p_application_id          => l_header_assign_exist.application_id
650            ,p_amb_context_code        => l_header_assign_exist.amb_context_code
651            ,p_product_rule_type_code  => l_header_assign_exist.product_rule_type_code
652            ,p_product_rule_code       => l_header_assign_exist.product_rule_code
653            ,p_application_name        => l_application_name
654            ,p_product_rule_name       => l_product_rule_name
655            ,p_product_rule_type       => l_product_rule_type);
656 
657          xla_validations_pkg.get_event_class_info
658            (p_application_id          => l_header_assign_exist.application_id
659            ,p_entity_code             => l_header_assign_exist.entity_code
660            ,p_event_class_code        => l_header_assign_exist.event_class_code
661            ,p_event_class_name        => l_event_class_name);
662 
663       ELSE
664          l_return := FALSE;
665       END IF;
666       CLOSE c_header_assign_exist;
667 
668       IF l_return = FALSE THEN
669          OPEN c_line_assign_exist;
670          FETCH c_line_assign_exist
671           INTO l_line_assign_exist;
672          IF c_line_assign_exist%found then
673             l_return := TRUE;
674 
675          xla_line_definitions_pvt.get_line_definition_info
676            (p_application_id             => p_application_id
677            ,p_amb_context_code           => p_amb_context_code
678            ,p_event_class_code           => l_line_assign_exist.event_class_code
679            ,p_event_type_code            => l_line_assign_exist.event_type_code
680            ,p_line_definition_owner_code => l_line_assign_exist.line_definition_owner_code
681            ,p_line_definition_code       => l_line_assign_exist.line_definition_code
682            ,x_line_definition_name       => l_line_definition_name
683            ,x_line_definition_owner      => l_line_definition_owner);
684 
685          ELSE
686             l_return := FALSE;
687          END IF;
688          CLOSE c_line_assign_exist;
689       END IF;
690 
691    ELSIF p_event = 'DISABLE' THEN
692       OPEN c_header_assign_exist;
693       FETCH c_header_assign_exist
694        INTO l_header_assign_exist;
695       IF c_header_assign_exist%found then
696          l_return := TRUE;
697 
698          xla_validations_pkg.get_product_rule_info
699            (p_application_id          => l_header_assign_exist.application_id
700            ,p_amb_context_code        => l_header_assign_exist.amb_context_code
701            ,p_product_rule_type_code  => l_header_assign_exist.product_rule_type_code
702            ,p_product_rule_code       => l_header_assign_exist.product_rule_code
703            ,p_application_name        => l_application_name
707          xla_validations_pkg.get_event_class_info
704            ,p_product_rule_name       => l_product_rule_name
705            ,p_product_rule_type       => l_product_rule_type);
706 
708            (p_application_id          => l_header_assign_exist.application_id
709            ,p_entity_code             => l_header_assign_exist.entity_code
710            ,p_event_class_code        => l_header_assign_exist.event_class_code
711            ,p_event_class_name        => l_event_class_name);
712 
713       ELSE
714          l_return := FALSE;
715       END IF;
716       CLOSE c_header_assign_exist;
717 
718       IF l_return = FALSE THEN
719          OPEN c_active_assign_exist;
720          FETCH c_active_assign_exist
721           INTO l_active_assign_exist;
722          IF c_active_assign_exist%found then
723             l_return := TRUE;
724 
725          xla_line_definitions_pvt.get_line_definition_info
726            (p_application_id             => p_application_id
727            ,p_amb_context_code           => p_amb_context_code
728            ,p_event_class_code           => l_active_assign_exist.event_class_code
729            ,p_event_type_code            => l_active_assign_exist.event_type_code
730            ,p_line_definition_owner_code => l_active_assign_exist.line_definition_owner_code
731            ,p_line_definition_code       => l_active_assign_exist.line_definition_code
732            ,x_line_definition_name       => l_line_definition_name
733            ,x_line_definition_owner      => l_line_definition_owner);
734 
735          ELSE
736             l_return := FALSE;
737          END IF;
738          CLOSE c_active_assign_exist;
739       END IF;
740 
741    ELSE
742       xla_exceptions_pkg.raise_message
743         ('XLA'      ,'XLA_COMMON_ERROR'
744         ,'ERROR'    ,'Invalid event passed'
745         ,'LOCATION' ,'xla_descriptions_pkg.rule_in_use');
746 
747    END IF;
748 
749    x_product_rule_name     := l_product_rule_name;
750    x_product_rule_type     := l_product_rule_type;
751    x_event_class_name      := l_event_class_name;
752    x_line_definition_owner := l_line_definition_owner;
753    x_line_definition_name  := l_line_definition_name;
754 
755    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
756      trace(p_msg    => 'END of procedure rule_in_use'
757           ,p_module => l_log_module
758           ,p_level  => C_LEVEL_PROCEDURE);
759    END IF;
760 
761 
762    return l_return;
763 
764 EXCEPTION
765    WHEN xla_exceptions_pkg.application_exception THEN
766       IF c_header_assign_exist%ISOPEN THEN
767          CLOSE c_header_assign_exist;
768       END IF;
769       IF c_line_assign_exist%ISOPEN THEN
770          CLOSE c_line_assign_exist;
771       END IF;
772       IF c_active_assign_exist%ISOPEN THEN
773          CLOSE c_active_assign_exist;
774       END IF;
775 
776       RAISE;
777    WHEN OTHERS                                   THEN
778       IF c_header_assign_exist%ISOPEN THEN
779          CLOSE c_header_assign_exist;
780       END IF;
781       IF c_line_assign_exist%ISOPEN THEN
782          CLOSE c_line_assign_exist;
783       END IF;
784       IF c_active_assign_exist%ISOPEN THEN
785          CLOSE c_active_assign_exist;
786       END IF;
787 
788       xla_exceptions_pkg.raise_message
789         (p_location   => 'xla_descriptions_pkg.rule_in_use');
790 
791 END rule_in_use;
792 
793 /*======================================================================+
794 |                                                                       |
795 | Public Function                                                       |
796 |                                                                       |
797 | rule_is_invalid                                                       |
798 |                                                                       |
799 | Returns true if the rule is invalid                                   |
800 |                                                                       |
801 +======================================================================*/
802 
803 FUNCTION rule_is_invalid
804   (p_application_id                   IN  NUMBER
805   ,p_amb_context_code                 IN VARCHAR2
806   ,p_description_type_code            IN  VARCHAR2
807   ,p_description_code                 IN  VARCHAR2
808   ,p_message_name                     OUT NOCOPY VARCHAR2)
809 RETURN BOOLEAN
810 IS
811 
812    l_application_id         NUMBER(38);
813    l_amb_context_code       VARCHAR2(30);
814    l_description_type_code  VARCHAR2(1);
815    l_description_code       VARCHAR2(30);
816    l_return                 BOOLEAN;
817    l_exist                  VARCHAR2(1);
818    l_message_name           VARCHAR2(30);
819 
820    l_log_module  VARCHAR2(240);
821 BEGIN
822    IF g_log_enabled THEN
823      l_log_module := C_DEFAULT_MODULE||'.rule_is_invalid';
824    END IF;
825 
826    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
827      trace(p_msg    => 'BEGIN of procedure rule_is_invalid'
828           ,p_module => l_log_module
829           ,p_level  => C_LEVEL_PROCEDURE);
830    END IF;
831 
832    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
833      trace(p_msg    => 'application_id = '||p_application_id||
834                        ',amb_context_code = '||p_amb_context_code||
835                        ',description_type_code = '||p_description_type_code||
836                        ',description_code = '||p_description_code
837           ,p_module => l_log_module
838           ,p_level  => C_LEVEL_STATEMENT);
839    END IF;
840 
844    l_description_code        := p_description_code;
841    l_application_id          := p_application_id;
842    l_amb_context_code        := p_amb_context_code;
843    l_description_type_code   := p_description_type_code;
845 
846    IF xla_conditions_pkg.desc_condition_is_invalid
847               (p_application_id        => l_application_id
848               ,p_amb_context_code      => l_amb_context_code
849               ,p_description_type_code => l_description_type_code
850               ,p_description_code      => l_description_code
851               ,p_message_name          => l_message_name)
852    THEN
853       p_message_name := l_message_name;
854       l_return := TRUE;
855    ELSE
856       p_message_name := NULL;
857       l_return := FALSE;
858    END IF;
859 
860    xla_utility_pkg.trace('p_message_name       = '||p_message_name     , 20);
861    xla_utility_pkg.trace('< xla_descriptions_pkg.rule_is_invalid'    , 10);
862 
863    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
864      trace(p_msg    => 'END of procedure rule_is_invalid'
865           ,p_module => l_log_module
866           ,p_level  => C_LEVEL_PROCEDURE);
867    END IF;
868 
869    RETURN l_return;
870 
871 EXCEPTION
872    WHEN xla_exceptions_pkg.application_exception THEN
873       RAISE;
874 
875    WHEN OTHERS                                   THEN
876       xla_exceptions_pkg.raise_message
877         (p_location   => 'xla_descriptions_pkg.rule_is_invalid');
878 
879 END rule_is_invalid;
880 
881 /*======================================================================+
882 |                                                                       |
883 | Public Function                                                       |
884 |                                                                       |
885 | description_is_locked                                                 |
886 |                                                                       |
887 | Returns true if the description is locked                             |
888 |                                                                       |
889 +======================================================================*/
890 
891 FUNCTION description_is_locked
892   (p_application_id                  IN  NUMBER
893   ,p_amb_context_code                IN VARCHAR2
894   ,p_description_type_code           IN  VARCHAR2
895   ,p_description_code                IN  VARCHAR2)
896 RETURN BOOLEAN
897 IS
898 
899    l_return               BOOLEAN;
900    l_exist                VARCHAR2(1);
901 
902    CURSOR c_frozen_header_assign_exist
903    IS
904    SELECT 'x'
905      FROM xla_prod_acct_headers h
906     WHERE application_id        = p_application_id
907       AND amb_context_code      = p_amb_context_code
908       AND description_type_code = p_description_type_code
909       AND description_code      = p_description_code
910       AND locking_status_flag   = 'Y';
911 
912    CURSOR c_frozen_line_assign_exist
913    IS
914    SELECT 'x'
915       FROM xla_line_defn_jlt_assgns xjl
916           ,xla_aad_line_defn_assgns xal
917           ,xla_prod_acct_headers    xpa
918      WHERE xpa.application_id             = xal.application_id
919        AND xpa.amb_context_code           = xal.amb_context_code
920        AND xpa.product_rule_type_code     = xal.product_rule_type_code
921        AND xpa.product_rule_code          = xal.product_rule_code
922        AND xpa.event_class_code           = xal.event_class_code
923        AND xpa.event_type_code            = xal.event_type_code
924        AND xpa.locking_status_flag        = 'Y'
925        AND xal.application_id             = xjl.application_id
926        AND xal.amb_context_code           = xjl.amb_context_code
927        AND xal.event_class_code           = xjl.event_class_code
928        AND xal.event_type_code            = xjl.event_type_code
929        AND xal.line_definition_owner_code = xjl.line_definition_owner_code
930        AND xal.line_definition_code       = xjl.line_definition_code
931        AND xjl.application_id             = p_application_id
932        AND xjl.amb_context_code           = p_amb_context_code
933        AND xjl.description_type_code      = p_description_type_code
934        AND xjl.description_code           = p_description_code;
935 
936    l_log_module  VARCHAR2(240);
937 BEGIN
938    IF g_log_enabled THEN
939      l_log_module := C_DEFAULT_MODULE||'.description_is_locked';
940    END IF;
941 
942    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
943      trace(p_msg    => 'BEGIN of procedure description_is_locked'
944           ,p_module => l_log_module
945           ,p_level  => C_LEVEL_PROCEDURE);
946    END IF;
947 
948    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
949      trace(p_msg    => 'application_id = '||p_application_id||
950                        ',amb_context_code = '||p_amb_context_code||
951                        ',description_type_code = '||p_description_type_code||
952                        ',description_code = '||p_description_code
953           ,p_module => l_log_module
954           ,p_level  => C_LEVEL_STATEMENT);
955    END IF;
956 
957    OPEN c_frozen_header_assign_exist;
958    FETCH c_frozen_header_assign_exist
959     INTO l_exist;
960    IF c_frozen_header_assign_exist%found then
961       l_return := TRUE;
962    ELSE
963       l_return := FALSE;
964    END IF;
965    CLOSE c_frozen_header_assign_exist;
966 
967    IF l_return = FALSE THEN
968       OPEN c_frozen_line_assign_exist;
969       FETCH c_frozen_line_assign_exist
970        INTO l_exist;
971       IF c_frozen_line_assign_exist%found then
972          l_return := TRUE;
976       CLOSE c_frozen_line_assign_exist;
973       ELSE
974          l_return := FALSE;
975       END IF;
977    END IF;
978 
979    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
980      trace(p_msg    => 'END of procedure description_is_locked'
981           ,p_module => l_log_module
982           ,p_level  => C_LEVEL_PROCEDURE);
983    END IF;
984 
985    return l_return;
986 
987 EXCEPTION
988    WHEN xla_exceptions_pkg.application_exception THEN
989       IF c_frozen_header_assign_exist%ISOPEN THEN
990          CLOSE c_frozen_header_assign_exist;
991       END IF;
992       IF c_frozen_line_assign_exist%ISOPEN THEN
993          CLOSE c_frozen_line_assign_exist;
994       END IF;
995 
996       RAISE;
997    WHEN OTHERS                                   THEN
998       IF c_frozen_header_assign_exist%ISOPEN THEN
999          CLOSE c_frozen_header_assign_exist;
1000       END IF;
1001       IF c_frozen_line_assign_exist%ISOPEN THEN
1002          CLOSE c_frozen_line_assign_exist;
1003       END IF;
1004 
1005       xla_exceptions_pkg.raise_message
1006         (p_location   => 'xla_descriptions_pkg.description_is_locked');
1007 
1008 END description_is_locked;
1009 
1010 /*======================================================================+
1011 |                                                                       |
1012 | Public Function                                                       |
1013 |                                                                       |
1014 | uncompile_definitions                                                 |
1015 |                                                                       |
1016 | Returns true if the application accounting definition and journal     |
1017 | line definitions using the description are uncompiled                 |
1018 |                                                                       |
1019 +======================================================================*/
1020 
1021 FUNCTION uncompile_definitions
1022   (p_application_id                  IN NUMBER
1023   ,p_amb_context_code                IN VARCHAR2
1024   ,p_description_type_code           IN VARCHAR2
1025   ,p_description_code                IN VARCHAR2
1026   ,x_product_rule_name               IN OUT NOCOPY VARCHAR2
1027   ,x_product_rule_type               IN OUT NOCOPY VARCHAR2
1028   ,x_event_class_name                IN OUT NOCOPY VARCHAR2
1029   ,x_event_type_name                 IN OUT NOCOPY VARCHAR2
1030   ,x_locking_status_flag             IN OUT NOCOPY VARCHAR2)
1031 RETURN BOOLEAN
1032 IS
1033 
1034   l_return               BOOLEAN := TRUE;
1035   l_exist                VARCHAR2(1);
1036 
1037   l_application_name      varchar2(240);
1038   l_product_rule_name     varchar2(80);
1039   l_product_rule_type     varchar2(80);
1040   l_event_class_name      varchar2(80);
1041   l_event_type_name       varchar2(80);
1042 
1043   l_locked_entity_code            VARCHAR2(30);
1044   l_locked_event_class_code       VARCHAR2(30);
1045   l_locked_event_type_code        VARCHAR2(30);
1046   l_locked_aad_type_code          VARCHAR2(30);
1047   l_locked_aad_code               VARCHAR2(30);
1048   l_locking_status_flag           VARCHAR2(1);
1049 
1050   CURSOR c_lock_line_aads IS
1051     SELECT xpa.entity_code
1052          , xpa.event_class_code
1053          , xpa.event_type_code
1054          , xpa.product_rule_type_code
1055          , xpa.product_rule_code
1056          , xpa.locking_status_flag
1057          , xpa.validation_status_code
1058       FROM xla_line_defn_jlt_assgns xjl
1059           ,xla_aad_line_defn_assgns xal
1060           ,xla_prod_acct_headers    xpa
1061      WHERE xpa.application_id             = xal.application_id
1062        AND xpa.amb_context_code           = xal.amb_context_code
1063        AND xpa.product_rule_type_code     = xal.product_rule_type_code
1064        AND xpa.product_rule_code          = xal.product_rule_code
1065        AND xpa.event_class_code           = xal.event_class_code
1066        AND xpa.event_type_code            = xal.event_type_code
1067        AND xal.application_id             = xjl.application_id
1068        AND xal.amb_context_code           = xjl.amb_context_code
1069        AND xal.event_class_code           = xjl.event_class_code
1070        AND xal.event_type_code            = xjl.event_type_code
1071        AND xal.line_definition_owner_code = xjl.line_definition_owner_code
1072        AND xal.line_definition_code       = xjl.line_definition_code
1073        AND xjl.application_id             = p_application_id
1074        AND xjl.amb_context_code           = p_amb_context_code
1075        AND xjl.description_type_code      = p_description_type_code
1076        AND xjl.description_code           = p_description_code
1077        FOR UPDATE NOWAIT;
1078 
1079    CURSOR c_lock_header_aads IS
1080     SELECT xpa.entity_code
1081          , xpa.event_class_code
1082          , xpa.event_type_code
1083          , xpa.product_rule_type_code
1084          , xpa.product_rule_code
1085          , xpa.locking_status_flag
1086          , xpa.validation_status_code
1087       FROM xla_prod_acct_headers       xpa
1088      WHERE xpa.application_id          = p_application_id
1089        AND xpa.amb_context_code        = p_amb_context_code
1090        AND xpa.description_type_code   = p_description_type_code
1091        AND xpa.description_code        = p_description_code
1092        FOR UPDATE NOWAIT;
1093 
1094    CURSOR c_update_aads IS
1095     SELECT xpa.event_class_code
1096          , xpa.product_rule_type_code
1097          , xpa.product_rule_code
1098       FROM xla_prod_acct_headers      xpa
1099      WHERE xpa.application_id         = p_application_id
1100        AND xpa.amb_context_code       = p_amb_context_code
1104     SELECT xpa.event_class_code
1101        AND xpa.description_type_code  = p_description_type_code
1102        AND xpa.description_code       = p_description_code
1103      UNION
1105          , xpa.product_rule_type_code
1106          , xpa.product_rule_code
1107       FROM xla_prod_acct_headers        xpa
1108           ,xla_aad_line_defn_assgns     xal
1109           ,xla_line_defn_jlt_assgns     xjl
1110      WHERE xpa.application_id             = xal.application_id
1111        AND xpa.amb_context_code           = xal.amb_context_code
1112        AND xpa.product_rule_type_code     = xal.product_rule_type_code
1113        AND xpa.product_rule_code          = xal.product_rule_code
1114        AND xpa.event_class_code           = xal.event_class_code
1115        AND xpa.event_type_code            = xal.event_type_code
1116        AND xal.application_id             = xjl.application_id
1117        AND xal.amb_context_code           = xjl.amb_context_code
1118        AND xal.event_class_code           = xjl.event_class_code
1119        AND xal.event_type_code            = xjl.event_type_code
1120        AND xal.line_definition_owner_code = xjl.line_definition_owner_code
1121        AND xal.line_definition_code       = xjl.line_definition_code
1122        AND xjl.application_id             = p_application_id
1123        AND xjl.amb_context_code           = p_amb_context_code
1124        AND xjl.description_type_code      = p_description_type_code
1125        AND xjl.description_code           = p_description_code;
1126 
1127    l_event_class_codes       t_array_codes;
1128    l_product_rule_type_codes t_array_type_codes;
1129    l_product_rule_codes      t_array_codes;
1130 
1131    l_log_module  VARCHAR2(240);
1132 BEGIN
1133    IF g_log_enabled THEN
1134      l_log_module := C_DEFAULT_MODULE||'.uncompile_definitions';
1135    END IF;
1136 
1137    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1138      trace(p_msg    => 'BEGIN of procedure uncompile_definitions'
1139           ,p_module => l_log_module
1140           ,p_level  => C_LEVEL_PROCEDURE);
1141    END IF;
1142 
1143   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1144     trace(p_msg    => 'application_id = '||p_application_id||
1145                       ',amb_context_code = '||p_amb_context_code||
1146                       ',description_type_code = '||p_description_type_code||
1147                       ',description_code = '||p_description_code
1148          ,p_module => l_log_module
1149          ,p_level  => C_LEVEL_STATEMENT);
1150   END IF;
1151 
1152   l_application_name       := null;
1153   l_product_rule_name      := null;
1154   l_product_rule_type      := null;
1155   l_event_class_name       := null;
1156   l_event_type_name        := null;
1157   l_locking_status_flag    := null;
1158 
1159   l_return := TRUE;
1160 
1161   FOR l_lock_aad IN c_lock_header_aads LOOP
1162      IF (l_lock_aad.validation_status_code NOT IN ('E', 'Y', 'N') OR
1163          l_lock_aad.locking_status_flag    = 'Y') THEN
1164 
1165        l_locked_entity_code         := l_lock_aad.entity_code;
1166        l_locked_event_class_code    := l_lock_aad.event_class_code;
1167        l_locked_event_type_code     := l_lock_aad.event_type_code;
1168        l_locked_aad_type_code       := l_lock_aad.product_rule_type_code;
1169        l_locked_aad_code            := l_lock_aad.product_rule_code;
1170        l_locking_status_flag        := l_lock_aad.locking_status_flag;
1171 
1172        l_return := FALSE;
1173        EXIT;
1174      END IF;
1175   END LOOP;
1176 
1177   IF (l_return) THEN
1178     FOR l_lock_aad IN c_lock_line_aads LOOP
1179        IF (l_lock_aad.validation_status_code NOT IN ('E', 'Y', 'N') OR
1180            l_lock_aad.locking_status_flag    = 'Y') THEN
1181 
1182          l_locked_entity_code         := l_lock_aad.entity_code;
1183          l_locked_event_class_code    := l_lock_aad.event_class_code;
1184          l_locked_event_type_code     := l_lock_aad.event_type_code;
1185          l_locked_aad_type_code       := l_lock_aad.product_rule_type_code;
1186          l_locked_aad_code            := l_lock_aad.product_rule_code;
1187          l_locking_status_flag        := l_lock_aad.locking_status_flag;
1188 
1189          l_return := FALSE;
1190          EXIT;
1191        END IF;
1192     END LOOP;
1193   END IF;
1194 
1195   IF (NOT l_return) THEN
1196 
1197     xla_validations_pkg.get_product_rule_info
1198            (p_application_id          => p_application_id
1199            ,p_amb_context_code        => p_amb_context_code
1200            ,p_product_rule_type_code  => l_locked_aad_type_code
1201            ,p_product_rule_code       => l_locked_aad_code
1202            ,p_application_name        => l_application_name
1203            ,p_product_rule_name       => l_product_rule_name
1204            ,p_product_rule_type       => l_product_rule_type);
1205 
1206     xla_validations_pkg.get_event_class_info
1207            (p_application_id          => p_application_id
1208            ,p_entity_code             => l_locked_entity_code
1209            ,p_event_class_code        => l_locked_event_class_code
1210            ,p_event_class_name        => l_event_class_name);
1211 
1212     xla_validations_pkg.get_event_type_info
1213            (p_application_id          => p_application_id
1214            ,p_entity_code             => l_locked_entity_code
1215            ,p_event_class_code        => l_locked_event_class_code
1216            ,p_event_type_code         => l_locked_event_type_code
1217            ,p_event_type_name         => l_event_type_name);
1218 
1219   ELSE
1220     UPDATE xla_line_definitions_b xld
1221        SET validation_status_code     = 'N'
1222          , last_update_date           = sysdate
1226        AND xld.amb_context_code       = p_amb_context_code
1223          , last_updated_by            = xla_environment_pkg.g_usr_id
1224          , last_update_login          = xla_environment_pkg.g_login_id
1225      WHERE xld.application_id         = p_application_id
1227        AND xld.validation_status_code <> 'N'
1228        AND EXISTS
1229            (SELECT 1
1230               FROM xla_line_defn_jlt_assgns xjl
1231              WHERE xjl.application_id             = p_application_id
1232                AND xjl.amb_context_code           = p_amb_context_code
1233                AND xjl.description_type_code      = p_description_type_code
1234                AND xjl.description_code           = p_description_code
1235                AND xjl.event_class_code           = xld.event_class_code
1236                AND xjl.event_type_code            = xld.event_type_code
1237                AND xjl.line_definition_owner_code = xld.line_definition_owner_code
1238                AND xjl.line_definition_code       = xld.line_definition_code);
1239 
1240     OPEN c_update_aads;
1241     FETCH c_update_aads BULK COLLECT INTO l_event_class_codes
1242                                          ,l_product_rule_type_codes
1243                                          ,l_product_rule_codes;
1244     CLOSE c_update_aads;
1245 
1246     IF (C_LEVEL_EVENT >= g_log_level) THEN
1247       trace(p_msg    => 'l_event_class_codes.count = '||l_event_class_codes.count,
1248             p_module => l_log_module,
1249             p_level  => C_LEVEL_EVENT);
1250     END IF;
1251 
1252     IF (l_event_class_codes.count > 0) THEN
1253 
1254       FORALL i IN 1..l_event_class_codes.LAST
1255         UPDATE xla_product_rules_b
1256            SET compile_status_code    = 'N'
1257              , updated_flag           = 'Y'
1258              , last_update_date       = sysdate
1259              , last_updated_by        = xla_environment_pkg.g_usr_id
1260              , last_update_login      = xla_environment_pkg.g_login_id
1261          WHERE application_id         = p_application_id
1262            AND amb_context_code       = p_amb_context_code
1263            AND product_rule_type_code = l_product_rule_type_codes(i)
1264            AND product_rule_code      = l_product_rule_codes(i)
1265            AND (compile_status_code   <> 'N' OR
1266                 updated_flag          <> 'Y');
1267 
1268       FORALL i IN 1..l_event_class_codes.LAST
1269         UPDATE xla_prod_acct_headers
1270            SET validation_status_code = 'N'
1271              , last_update_date       = sysdate
1272              , last_updated_by        = xla_environment_pkg.g_usr_id
1273              , last_update_login      = xla_environment_pkg.g_login_id
1274          WHERE application_id         = p_application_id
1275            AND amb_context_code       = p_amb_context_code
1276            AND event_class_code       = l_event_class_codes(i)
1277            AND product_rule_type_code = l_product_rule_type_codes(i)
1278            AND product_rule_code      = l_product_rule_codes(i)
1279            AND validation_status_code <> 'N';
1280 
1281     END IF;
1282 
1283     UPDATE xla_appli_amb_contexts
1284        SET updated_flag      = 'Y'
1285          , last_update_date  = sysdate
1286          , last_updated_by   = xla_environment_pkg.g_usr_id
1287          , last_update_login = xla_environment_pkg.g_login_id
1288      WHERE application_id    = p_application_id
1289        AND amb_context_code  = p_amb_context_code
1290        AND updated_flag      <> 'Y';
1291 
1292   END IF;
1293 
1294    x_product_rule_name   := l_product_rule_name;
1295    x_product_rule_type   := l_product_rule_type;
1296    x_event_class_name    := l_event_class_name;
1297    x_event_type_name     := l_event_type_name;
1298    x_locking_status_flag := l_locking_status_flag;
1299 
1300    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1301      trace(p_msg    => 'END of procedure uncompile_definitions'
1302           ,p_module => l_log_module
1303           ,p_level  => C_LEVEL_PROCEDURE);
1304    END IF;
1305 
1306    return l_return;
1307 
1308 EXCEPTION
1309    WHEN xla_exceptions_pkg.application_exception THEN
1310       IF c_update_aads%ISOPEN THEN
1311          CLOSE c_update_aads;
1312       END IF;
1313       IF c_lock_line_aads%ISOPEN THEN
1314          CLOSE c_lock_line_aads;
1315       END IF;
1316       IF c_lock_header_aads%ISOPEN THEN
1317          CLOSE c_lock_header_aads;
1318       END IF;
1319 
1320       RAISE;
1321    WHEN OTHERS                                   THEN
1322       IF c_update_aads%ISOPEN THEN
1323          CLOSE c_update_aads;
1324       END IF;
1325       IF c_lock_line_aads%ISOPEN THEN
1326          CLOSE c_lock_line_aads;
1327       END IF;
1328       IF c_lock_header_aads%ISOPEN THEN
1329          CLOSE c_lock_header_aads;
1330       END IF;
1331 
1332       xla_exceptions_pkg.raise_message
1333         (p_location   => 'xla_descriptions_pkg.uncompile_definitions');
1334 
1335 END uncompile_definitions;
1336 
1337 /*======================================================================+
1338 |                                                                       |
1339 | Public Function                                                       |
1340 |                                                                       |
1341 | check_copy_description_details                                        |
1342 |                                                                       |
1343 | Checks if description can be copied                                   |
1344 |                                                                       |
1348   (p_application_id                  IN NUMBER
1345 +======================================================================*/
1346 
1347 FUNCTION check_copy_description_details
1349   ,p_amb_context_code                IN VARCHAR2
1350   ,p_old_description_type_code       IN VARCHAR2
1351   ,p_old_description_code            IN VARCHAR2
1352   ,p_old_transaction_coa_id          IN NUMBER
1353   ,p_new_transaction_coa_id          IN NUMBER
1354   ,p_message                         IN OUT NOCOPY VARCHAR2
1355   ,p_token_1                         IN OUT NOCOPY VARCHAR2
1356   ,p_value_1                         IN OUT NOCOPY VARCHAR2)
1357 RETURN BOOLEAN
1358 
1359 IS
1360 
1361    l_row_id                           ROWID;
1362    l_condition_id                    integer;
1363    l_new_description_prio_id         integer;
1364    l_description_detail_id           integer;
1365    l_flexfield_segment_code          VARCHAR2(30);
1366    l_flexfield_segment_name          VARCHAR2(80);
1367    l_con_flexfield_segment_code      VARCHAR2(30);
1368    l_con_v_flexfield_segment_code    VARCHAR2(30);
1369    l_con_flexfield_segment_name      VARCHAR2(80);
1370    l_con_v_flexfield_segment_name    VARCHAR2(80);
1371    l_inp_flex_appl_id                NUMBER(15);
1372    l_inp_id_flex_code                VARCHAR2(30);
1373    l_source_flex_appl_id             NUMBER(15);
1374    l_source_id_flex_code             VARCHAR2(30);
1375    l_value_source_flex_appl_id       NUMBER(15);
1376    l_value_source_id_flex_code       VARCHAR2(30);
1377    l_return                          BOOLEAN := TRUE;
1378 
1379    CURSOR c_description_priorities
1380    IS
1381    SELECT description_prio_id, user_sequence
1382      FROM xla_desc_priorities
1383     WHERE application_id         = p_application_id
1384       AND amb_context_code       = p_amb_context_code
1385       AND description_type_code  = p_old_description_type_code
1386       AND description_code       = p_old_description_code;
1387 
1388    l_description_priority     c_description_priorities%rowtype;
1389 
1390    CURSOR c_description_details
1391    IS
1392    SELECT user_sequence, value_type_code, literal, source_application_id,
1393           source_type_code, source_code, flexfield_segment_code, display_description_flag
1394      FROM xla_descript_details_vl
1395     WHERE description_prio_id    = l_description_priority.description_prio_id;
1396 
1397    l_description_detail     c_description_details%rowtype;
1398 
1399    CURSOR c_det_source
1400    IS
1401    SELECT flexfield_application_id, id_flex_code
1402      FROM xla_sources_b
1403     WHERE application_id   = l_description_detail.source_application_id
1404       AND source_type_code = l_description_detail.source_type_code
1405       AND source_code      = l_description_detail.source_code;
1406 
1407    CURSOR c_detail_conditions
1408    IS
1409    SELECT user_sequence, bracket_left_code, bracket_right_code, value_type_code,
1410           source_application_id, source_type_code, source_code,
1411           flexfield_segment_code, value_flexfield_segment_code,
1412           value_source_application_id, value_source_type_code,
1413           value_source_code, value_constant, line_operator_code,
1414           logical_operator_code, independent_value_constant
1415      FROM xla_conditions
1416     WHERE description_prio_id = l_description_priority.description_prio_id;
1417 
1418    l_detail_condition    c_detail_conditions%rowtype;
1419 
1420    CURSOR c_source
1421    IS
1422    SELECT flexfield_application_id, id_flex_code
1423      FROM xla_sources_b
1424     WHERE application_id   = l_detail_condition.source_application_id
1425       AND source_type_code = l_detail_condition.source_type_code
1426       AND source_code      = l_detail_condition.source_code;
1427 
1428    CURSOR c_value_source
1429    IS
1430    SELECT flexfield_application_id, id_flex_code
1431      FROM xla_sources_b
1432     WHERE application_id   = l_detail_condition.value_source_application_id
1433       AND source_type_code = l_detail_condition.value_source_type_code
1434       AND source_code      = l_detail_condition.value_source_code;
1435 
1436    l_log_module  VARCHAR2(240);
1437 BEGIN
1438    IF g_log_enabled THEN
1439      l_log_module := C_DEFAULT_MODULE||'.check_copy_description_details';
1440    END IF;
1441 
1442    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1443      trace(p_msg    => 'BEGIN of procedure check_copy_description_details'
1444           ,p_module => l_log_module
1445           ,p_level  => C_LEVEL_PROCEDURE);
1446    END IF;
1447 
1448    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1449      trace(p_msg    => 'application_id = '||p_application_id||
1450                        ',amb_context_code = '||p_amb_context_code||
1451                        ',old_description_type_code = '||p_old_description_type_code||
1452                        ',old_description_code = '||p_old_description_code
1453           ,p_module => l_log_module
1454           ,p_level  => C_LEVEL_STATEMENT);
1455    END IF;
1456 
1457    OPEN c_description_priorities;
1458    LOOP
1459       FETCH c_description_priorities
1460        INTO l_description_priority;
1461       EXIT WHEN c_description_priorities%notfound or l_return = FALSE;
1462 
1463       OPEN c_description_details;
1464       LOOP
1465          FETCH c_description_details
1466           INTO l_description_detail;
1467          EXIT WHEN c_description_details%notfound or l_return = FALSE;
1468 
1469          IF l_description_detail.flexfield_segment_code is not null THEN
1470             OPEN c_det_source;
1471             FETCH c_det_source
1472              INTO l_inp_flex_appl_id, l_inp_id_flex_code;
1473             CLOSE c_det_source;
1474 
1478                   l_flexfield_segment_code := xla_flex_pkg.get_qualifier_segment
1475             IF l_inp_flex_appl_id = 101 and l_inp_id_flex_code = 'GL#' THEN
1476 
1477                IF p_new_transaction_coa_id is not null and p_old_transaction_coa_id is null THEN
1479                                                 (p_application_id    => 101
1480                                                 ,p_id_flex_code      => 'GL#'
1481                                                 ,p_id_flex_num       => p_new_transaction_coa_id
1482                                                 ,p_qualifier_segment => l_description_detail.flexfield_segment_code);
1483 
1484                   IF l_flexfield_segment_code is null THEN
1485                     l_flexfield_segment_name := xla_flex_pkg.get_qualifier_name
1486                                                (p_application_id    => 101
1487                                                ,p_id_flex_code      => 'GL#'
1488                                                ,p_qualifier_segment => l_description_detail.flexfield_segment_code);
1489 
1490                     p_message := 'XLA_AB_TRX_COA_NO_QUAL';
1491                     p_token_1 := 'QUALIFIER_NAME';
1492                     p_value_1 := l_flexfield_segment_name;
1493                     l_return := FALSE;
1494 
1495                   END IF;
1496                 END IF;
1497             END IF;
1498          END IF;
1499       END LOOP;
1500       CLOSE c_description_details;
1501 
1502       IF l_return = TRUE THEN
1503 
1504          OPEN c_detail_conditions;
1505          LOOP
1506             FETCH c_detail_conditions
1507              INTO l_detail_condition;
1508             EXIT WHEN c_detail_conditions%notfound or l_return = FALSE ;
1509 
1510             IF l_detail_condition.flexfield_segment_code is not null THEN
1511 
1512                OPEN c_source;
1513                FETCH c_source
1514                 INTO l_source_flex_appl_id, l_source_id_flex_code;
1515                CLOSE c_source;
1516 
1517                IF l_source_flex_appl_id = 101 and l_source_id_flex_code = 'GL#' THEN
1518 
1519                   IF p_new_transaction_coa_id is not null and p_old_transaction_coa_id is null THEN
1520                      l_con_flexfield_segment_code := xla_flex_pkg.get_qualifier_segment
1521                                                 (p_application_id    => 101
1522                                                 ,p_id_flex_code      => 'GL#'
1523                                                 ,p_id_flex_num       => p_new_transaction_coa_id
1524                                                 ,p_qualifier_segment => l_detail_condition.flexfield_segment_code);
1525                      IF l_con_flexfield_segment_code is null THEN
1526                        l_con_flexfield_segment_name := xla_flex_pkg.get_qualifier_name
1527                                                (p_application_id    => 101
1528                                                ,p_id_flex_code      => 'GL#'
1529                                                ,p_qualifier_segment => l_detail_condition.flexfield_segment_code);
1530 
1531                        p_message := 'XLA_AB_TRX_COA_NO_QUAL';
1532                        p_token_1 := 'QUALIFIER_NAME';
1533                        p_value_1 := l_con_flexfield_segment_name;
1534                        l_return := FALSE;
1535 
1536                     END IF;
1537                   END IF;
1538                END IF;
1539             END IF;
1540 
1541             -- check value_flexfield_segment_code
1542             IF l_return = TRUE THEN
1543                IF l_detail_condition.value_flexfield_segment_code is not null THEN
1544 
1545                   OPEN c_value_source;
1546                   FETCH c_value_source
1547                    INTO l_value_source_flex_appl_id, l_value_source_id_flex_code;
1548                   CLOSE c_value_source;
1549 
1550                   IF l_value_source_flex_appl_id = 101 and l_value_source_id_flex_code = 'GL#' THEN
1551 
1552                      IF p_new_transaction_coa_id is not null and p_old_transaction_coa_id is null THEN
1553                         l_con_v_flexfield_segment_code := xla_flex_pkg.get_qualifier_segment
1554                                                 (p_application_id    => 101
1555                                                 ,p_id_flex_code      => 'GL#'
1556                                                 ,p_id_flex_num       => p_new_transaction_coa_id
1557                                                 ,p_qualifier_segment => l_detail_condition.value_flexfield_segment_code);
1558 
1559                          IF l_con_v_flexfield_segment_code is null THEN
1560                             l_con_v_flexfield_segment_name := xla_flex_pkg.get_qualifier_name
1561                                                (p_application_id    => 101
1562                                                ,p_id_flex_code      => 'GL#'
1563                                                ,p_qualifier_segment => l_detail_condition.value_flexfield_segment_code);
1564 
1565                             p_message := 'XLA_AB_TRX_COA_NO_QUAL';
1566                             p_token_1 := 'QUALIFIER_NAME';
1567                             p_value_1 := l_con_v_flexfield_segment_name;
1568                             l_return := FALSE;
1569 
1570                          END IF;
1571                       END IF;
1572                   END IF;
1573                END IF;
1574             END IF;
1575          END LOOP;
1576          CLOSE c_detail_conditions;
1577       END IF;
1578    END LOOP;
1579    CLOSE c_description_priorities;
1580 
1581    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1582      trace(p_msg    => 'END of procedure check_copy_description_details'
1583           ,p_module => l_log_module
1584           ,p_level  => C_LEVEL_PROCEDURE);
1585    END IF;
1586 
1587    RETURN l_return;
1588 
1589 EXCEPTION
1593       END IF;
1590    WHEN xla_exceptions_pkg.application_exception THEN
1591       IF c_detail_conditions%ISOPEN THEN
1592          CLOSE c_detail_conditions;
1594       IF c_description_details%ISOPEN THEN
1595          CLOSE c_description_details;
1596       END IF;
1597       IF c_description_priorities%ISOPEN THEN
1598          CLOSE c_description_priorities;
1599       END IF;
1600       RAISE;
1601    WHEN OTHERS                                   THEN
1602       IF c_detail_conditions%ISOPEN THEN
1603          CLOSE c_detail_conditions;
1604       END IF;
1605       IF c_description_details%ISOPEN THEN
1606          CLOSE c_description_details;
1607       END IF;
1608       IF c_description_priorities%ISOPEN THEN
1609          CLOSE c_description_priorities;
1610       END IF;
1611       xla_exceptions_pkg.raise_message
1612         (p_location   => 'xla_descriptions_pkg.check_copy_description_details');
1613 
1614 END check_copy_description_details;
1615 
1616 --=============================================================================
1617 --
1618 -- Following code is executed when the package body is referenced for the first
1619 -- time
1620 --
1621 --=============================================================================
1622 BEGIN
1623    g_log_level          := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1624    g_log_enabled        := fnd_log.test
1625                           (log_level  => g_log_level
1626                           ,module     => C_DEFAULT_MODULE);
1627 
1628    IF NOT g_log_enabled THEN
1629       g_log_level := C_LEVEL_LOG_DISABLED;
1630    END IF;
1631 
1632 
1633 END xla_descriptions_pkg;