DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_PRODUCT_RULES_PKG

Source


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