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