1 PACKAGE BODY HR_BPL_ALERT_TRNSLT AS
2 /* $Header: perbatsl.pkb 115.3 2003/06/03 16:00:47 jrstewar noship $ */
3 --
4 --------------------------------------------------------------------------------
5 -- Variables and Cursors Required by the decode_lookup functions
6 --
7 --
8 TYPE lookup_value_pair_rec IS RECORD(
9 lookup_type fnd_lookup_values.lookup_type%TYPE,
10 lookup_code fnd_lookup_values.lookup_code%TYPE,
11 language fnd_lookup_values.language%TYPE,
12 meaning fnd_lookup_values.meaning%TYPE);
13
14 TYPE fnd_lookups_cache_tabtype IS table OF lookup_value_pair_rec
15 INDEX BY BINARY_INTEGER;
16 g_lookups_tab fnd_lookups_cache_tabtype;
17 -- define the security group
18 g_security_group_id fnd_lookup_values.security_group_id%TYPE;
19 -- define a global meaning
20 g_meaning fnd_lookup_values.meaning%TYPE;
21 -- define a holder for the hash number
22 g_language fnd_lookup_values.language%TYPE;
23 g_hash_number BINARY_INTEGER;
24 -- define the bis_decode_lookup cursors
25
26 --
27 CURSOR g_csr_lookup_default_sg(c_lookup_type VARCHAR2
28 ,c_lookup_code VARCHAR2
29 ,c_language VARCHAR2)
30 IS
31 SELECT flv.meaning
32 FROM fnd_lookup_values flv
33 WHERE flv.lookup_code = c_lookup_code
34 AND flv.lookup_type = c_lookup_type
35 AND flv.language = c_language
36 AND flv.view_application_id = 3
37 AND flv.security_group_id = 0;
38
39 --
40 -- -----------------------------------------------------------------------------
41 --
42 -- Get's an email address for a given person_id
43 --
44 PROCEDURE Cache_organization_details(p_language IN VARCHAR2
45 ,p_organization_id IN NUMBER)
46 IS
47 --
48 CURSOR c_organization_details
49 ( cp_organization_id NUMBER
50 , cp_language VARCHAR2 )
51 IS
52 SELECT org1.name
53 ,org1.language
54 FROM hr_all_organization_units_tl org1
55 WHERE org1.organization_id = cp_organization_id
56 AND ((org1.language = cp_language) OR
57 ((NOT EXISTS (SELECT 'x'
58 FROM hr_all_organization_units_tl org2
59 WHERE org1.organization_id = org2.organization_id
60 AND org2.language = cp_language)) AND
61 (org1.language = org1.source_lang)));
62 --
63 BEGIN
64 --
65 -- If we don't have an id then we can't get a location_code
66 --
67 IF p_organization_id IS NULL THEN
68 --
69 g_organization_name := 'unkown';
70 g_organization_language := 'unknown';
71 --
72 RETURN;
73 --
74 END IF;
75 --
76 -- If we already have the email address use it.
77 --
78 IF p_organization_id = g_organization_id THEN
79 --
80 RETURN;
81 --
82 END IF;
83 --
84 g_organization_id := p_organization_id;
85 g_organization_name := 'unknown';
86 g_organization_language := 'unknown';
87 --
88 OPEN c_organization_details(
89 p_organization_id
90 , p_language );
91 --
92 FETCH c_organization_details
93 INTO g_organization_name
94 ,g_organization_language;
95 --
96 CLOSE c_organization_details;
97 --
98 RETURN;
99 --
100 EXCEPTION
101 WHEN OTHERS THEN
102 --
103 CLOSE c_organization_details;
104 --
105 g_organization_name := 'unknown';
106 g_organization_language := 'unknown';
107 --
108 RETURN;
109 --
110 --
111 END Cache_organization_details;
112 -- -----------------------------------------------------------------------------
113 --
114 -- Get's an email address for a given person_id
115 --
116 PROCEDURE Cache_location_details(p_language IN VARCHAR2
117 ,p_location_id IN NUMBER)
118 IS
119 --
120 CURSOR c_location_details
121 ( cp_location_id NUMBER
122 , cp_language VARCHAR2 )
123 IS
124 SELECT loc1.location_code
125 ,loc1.language
126 FROM hr_locations_all_tl loc1
127 WHERE loc1.location_id = cp_location_id
128 AND ((loc1.language = cp_language) OR
129 ((NOT EXISTS (SELECT 'x'
130 FROM hr_locations_all_tl loc2
131 WHERE loc1.location_id = loc2.location_id
132 AND language = cp_language)) AND
133 (loc1.language = loc1.source_lang)));
134 --
135 BEGIN
136 --
137 -- If we don't have an id then we can't get a location_code
138 --
139 IF p_location_id IS NULL THEN
140 --
141 g_location_code := 'unknown';
142 g_location_language := 'unknown';
143 --
144 RETURN;
145 --
146 END IF;
147 --
148 -- If we already have the email address use it.
149 --
150 IF p_location_id = g_location_id THEN
151 --
152 RETURN;
153 --
154 END IF;
155 --
156 g_location_id := p_location_id;
157 g_location_code := 'unknown';
158 g_location_language := 'unknown';
159 --
160 OPEN c_location_details
161 ( p_location_id
162 , p_language );
163 --
164 FETCH c_location_details
165 INTO g_location_code
166 ,g_location_language;
167 --
168 CLOSE c_location_details;
169 --
170 RETURN;
171 --
172 EXCEPTION
173 WHEN OTHERS THEN
174 --
175 CLOSE c_location_details;
176 --
177 g_location_code := 'unknown';
178 g_location_language := 'unknown';
179 --
180 RETURN;
181 --
182 --
183 END Cache_location_details;
184 --
185 -- -----------------------------------------------------------------------------
186 --
187 -- This function caches job details
188 --
189 PROCEDURE Cache_job_details(p_job_id IN NUMBER)
190 IS
191 --
192 CURSOR c_job_details
193 ( cp_job_id NUMBER )
194 IS
195 SELECT job.job_id
196 ,job.name
197 FROM per_jobs job
198 WHERE job.job_id = cp_job_id;
199 --
200 BEGIN
201 --
202 -- If we don't have an id then we can't get a job_name
203 --
204
205 IF p_job_id IS NULL THEN
206
207 --
208 g_job_id := NULL;
209 g_job_code := NULL;
210 g_job_name := NULL;
211 --
212 RETURN;
213 --
214 END IF;
215 --
216 -- If we already have the job_name use it.
217 --
218
219 IF p_job_id = g_job_id THEN
220 --
221
222 RETURN;
223 --
224 END IF;
225
226 --
227 g_job_id := p_job_id;
228 g_job_code := ' ';
229 g_job_name := ' ';
230 --
231 OPEN c_job_details
232 ( p_job_id );
233 --
234 FETCH c_job_details
235 INTO g_job_code
236 ,g_job_name;
237 --
238 CLOSE c_job_details;
239 --
240 RETURN;
241 --
242 EXCEPTION
243 WHEN OTHERS THEN
244 --
245 CLOSE c_job_details;
246 --
247 RETURN;
248 --
249 --
250 END Cache_job_details;
251 --
252 -- -----------------------------------------------------------------------------
253 --
254 -- This function caches position details
255 --
256 PROCEDURE Cache_position_details(p_position_id IN NUMBER)
257 IS
258 --
259 CURSOR c_position_details
260 ( cp_position_id NUMBER )
261 IS
262 SELECT pos.position_id
263 ,pos.name
264 FROM per_positions pos
265 WHERE pos.position_id = cp_position_id;
266 --
267 BEGIN
268 --
269 -- If we don't have an id then we can't get a location_code
270 --
271 IF p_position_id IS NULL THEN
272 --
273 g_position_id := NULL;
274 g_position_code := NULL;
275 g_position_name := NULL;
276 --
277 RETURN;
278 --
279 END IF;
280 --
281 -- If we already have the email address use it.
282 --
283 IF p_position_id = g_position_id THEN
284 --
285 RETURN;
286 --
287 END IF;
288 --
289 g_position_id := p_position_id;
290 g_position_code := ' ';
291 g_position_name := ' ';
292 --
293 OPEN c_position_details
294 ( p_position_id );
295 --
296 FETCH c_position_details
297 INTO g_position_code
298 ,g_position_name;
299 --
300 CLOSE c_position_details;
301 --
302 RETURN;
303 --
304 EXCEPTION
305 WHEN OTHERS THEN
306 --
307 CLOSE c_position_details;
308 --
309 RETURN;
310 --
311 --
312 END Cache_position_details;
313 --
314 -- -----------------------------------------------------------------------------
315 --
316 -- This function caches grade details
317 --
318 PROCEDURE Cache_grade_details(p_grade_id IN NUMBER)
319 IS
320 --
321 CURSOR c_grade_details
322 ( cp_grade_id NUMBER )
323 IS
324 SELECT grd.grade_id
325 ,grd.name
326 FROM per_grades grd
327 WHERE grd.grade_id = cp_grade_id;
328 --
329 BEGIN
330 --
331 -- If we don't have an id then we can't get a location_code
332 --
333 IF p_grade_id IS NULL THEN
334 --
335 g_grade_id := NULL;
336 g_grade_code := NULL;
337 g_grade_name := NULL;
338 --
339 RETURN;
340 --
341 END IF;
342 --
343 -- If we already have the email address use it.
344 --
345 IF p_grade_id = g_grade_id THEN
346 --
347 RETURN;
348 --
349 END IF;
350 --
351 g_grade_id := p_grade_id;
352 g_grade_code := ' ';
353 g_grade_name := ' ';
354 --
355 OPEN c_grade_details
356 ( p_grade_id );
357 --
358 FETCH c_grade_details
359 INTO g_grade_code
360 ,g_grade_name;
361 --
362 CLOSE c_grade_details;
363 --
364 RETURN;
365 --
366 EXCEPTION
367 WHEN OTHERS THEN
368 --
369 CLOSE c_grade_details;
370 --
371 RETURN;
372 --
373 --
374 END Cache_grade_details;
375 --
376 -- -----------------------------------------------------------------------------
377 --
378 -- Get's a location_code for a language and location_id
379 --
380 FUNCTION location(p_language IN VARCHAR2
381 ,p_location_id IN NUMBER)
382 RETURN VARCHAR2 IS
383 --
384 BEGIN
385 --
386 Cache_location_details(p_language
387 ,p_location_id);
388 --
389 RETURN g_location_code;
390 --
391 END location;
392 --
393 --
394 -- -----------------------------------------------------------------------------
395 --
396 -- Get's an Organization Name for a language and organization_id
397 --
398 FUNCTION organization(p_language IN VARCHAR2
399 ,p_organization_id IN NUMBER)
400 RETURN VARCHAR2 IS
401 --
402 BEGIN
403 --
404 Cache_organization_details(p_language
405 ,p_organization_id);
406 --
407 RETURN g_location_code;
408 --
409 END organization;
410 --
411 -- -----------------------------------------------------------------------------
412 --
413 -- Get's a job_name for a job_id
414 --
415 FUNCTION job(p_job_id IN NUMBER)
416 RETURN VARCHAR2 IS
417 --
418 BEGIN
419 --
420 Cache_job_details(p_job_id);
421 --
422 RETURN g_job_name;
423 --
424 END job;
425 --
426 -- -----------------------------------------------------------------------------
427 --
428 -- Get's a position_name for a position_id
429 --
430 FUNCTION position(p_position_id IN NUMBER)
431 RETURN VARCHAR2 IS
432 --
433 BEGIN
434 --
435 Cache_position_details(p_position_id);
436 --
437 RETURN g_position_name;
438 --
439 END position;
440 --
441 -- -----------------------------------------------------------------------------
442 --
443 -- Get's a grade_name for a grade_id
444 --
445 FUNCTION grade(p_grade_id IN NUMBER)
446 RETURN VARCHAR2 IS
447 --
448 BEGIN
449 --
450 Cache_grade_details(p_grade_id);
451 --
452 RETURN g_grade_name;
453 --
454 END grade;
455 --
456 --------------------------------------------------------------------------------
457 -- Returns Lookup Meaning for a given person_ids language.
458 --
459 --
460 FUNCTION psn_lng_decode_lookup(p_lookup_type IN VARCHAR2
461 ,p_lookup_code IN VARCHAR2
462 ,p_person_id IN NUMBER)
463 RETURN fnd_lookup_values.meaning%TYPE IS
464
465 BEGIN
466 -- check to ensure the lookup type/code combo is NOT NULL
467 IF p_lookup_type IS NULL
468 OR p_lookup_code IS NULL
469 OR p_person_id IS NULL
470 THEN
471 -- exit incomplete type/code combo
472 RETURN (NULL);
473 END IF;
474 -- determine hash number for plsql table index.
475 g_hash_number :=
476 DBMS_UTILITY.get_hash_value(p_lookup_code || ':' || p_lookup_type || ':' || p_person_id
477 ,1
478 ,1048576);
479 g_language := hr_bpl_alert_recipient.get_psn_lng(p_person_id);
480 -- (2^20)
481 BEGIN
482 -- check if we have a hash number generated that is for a different
483 -- lookup_type and lookup_code combination
484 -- very rare but possible from the hashing algorithm
485 -- on the first call to this if statement for any given g_hash_number
486 -- the if condition will raise a no_data_found before the else condition
487 -- because the plsql will not contain any values at the start of the session
488 IF g_lookups_tab(g_hash_number).lookup_type = p_lookup_type
489 AND g_lookups_tab(g_hash_number).lookup_code = p_lookup_code
490 AND g_lookups_tab(g_hash_number).language = g_language
491 THEN
492 -- cache hit
493 -- return the value from the plsql table
494 RETURN (g_lookups_tab(g_hash_number).meaning);
495 ELSE
496 -- cache miss
497 RAISE NO_DATA_FOUND;
498 END IF;
499
500 EXCEPTION
501 WHEN NO_DATA_FOUND
502 THEN
503 -- cache miss, determine value, and place in cache for next retrieval
504 -- use the default security group
505 OPEN g_csr_lookup_default_sg(p_lookup_type, p_lookup_code,g_language);
506 FETCH g_csr_lookup_default_sg INTO g_meaning;
507 IF g_csr_lookup_default_sg%NOTFOUND THEN
508 -- lookup type/code combo not found so return NULL
509 CLOSE g_csr_lookup_default_sg;
510 RETURN (NULL);
511 END IF;
512 CLOSE g_csr_lookup_default_sg;
513 -- add to plsql table
514 g_lookups_tab(g_hash_number).lookup_type := p_lookup_type;
515 g_lookups_tab(g_hash_number).lookup_code := p_lookup_code;
516 g_lookups_tab(g_hash_number).language := g_language;
517 g_lookups_tab(g_hash_number).meaning := g_meaning;
518
519 RETURN (g_meaning);
520 END;
521 EXCEPTION
522 -- unexpected error
523 WHEN OTHERS THEN
524 -- check to see if a cursor is open
525 IF g_csr_lookup_default_sg%ISOPEN THEN
526 CLOSE g_csr_lookup_default_sg;
527 END IF;
528 RETURN (NULL);
529 END psn_lng_decode_lookup;
530
531 --
532 -- -----------------------------------------------------------------------------
533 --
534 -- Get's a location_code for a person and location_id
535 --
536 FUNCTION psn_lng_location(p_person_id IN NUMBER
537 ,p_location_id IN NUMBER)
538 RETURN VARCHAR2 IS
539 --
540 BEGIN
541 --
542 Cache_location_details(hr_bpl_alert_recipient.Get_psn_lng(p_person_id)
543 ,p_location_id);
544 --
545 RETURN g_location_code;
546 --
547 END psn_lng_location;
548 --
549 -- -----------------------------------------------------------------------------
550 --
551 -- Get's a Organization Name for a person and organization_id
552 --
553 FUNCTION psn_lng_organization(p_person_id IN NUMBER
554 ,p_organization_id IN NUMBER)
555 RETURN VARCHAR2 IS
556 --
557 BEGIN
558 --
559 Cache_organization_details(hr_bpl_alert_recipient.Get_psn_lng(p_person_id)
560 ,p_organization_id);
561 --
562 RETURN g_organization_name;
563 --
564 END psn_lng_organization;
565 --
566 -- -----------------------------------------------------------------------------
567 --
568 -- Get's a location_code for the primary assignment supervisor of a person_id
569 -- for a given location_id
570 --
571 FUNCTION psn_sup_lng_location(p_person_id IN NUMBER
572 ,p_location_id IN NUMBER)
573 RETURN VARCHAR2 IS
574 --
575 BEGIN
576 --
577 Cache_location_details(hr_bpl_alert_recipient.Get_psn_sup_psn_lng(
578 p_person_id)
579 ,p_location_id);
580
581 --
582 RETURN g_location_code;
583 --
584 END psn_sup_lng_location;
585 --
586 -- -----------------------------------------------------------------------------
587 --
588 -- Get's a Organization Name for the primary assignment supervisor of
589 -- a person_id for a given organization_id
590 --
591 FUNCTION psn_sup_lng_organization(p_person_id IN NUMBER
592 ,p_organization_id IN NUMBER)
593 RETURN VARCHAR2 IS
594 --
595 BEGIN
596 --
597 Cache_organization_details(hr_bpl_alert_recipient.Get_psn_sup_psn_lng(
598 p_person_id)
599 ,p_organization_id);
600
601 --
602 RETURN g_organization_name;
603 --
604 END psn_sup_lng_organization;
605 --
606 -- -----------------------------------------------------------------------------
607 --
608 -- Get's a job_name for a job_id
609 --
610 FUNCTION psn_lng_job(p_person_id IN NUMBER
611 ,p_job_id IN NUMBER)
612 RETURN VARCHAR2 IS
613 --
614 BEGIN
615 --
616 Cache_job_details(p_job_id);
617 --
618 RETURN g_job_name;
619 --
620 END psn_lng_job;
621 --
622 -- -----------------------------------------------------------------------------
623 --
624 -- Get's a job_name for a job_id
625 --
626 FUNCTION psn_sup_lng_job(p_person_id IN NUMBER
627 ,p_job_id IN NUMBER)
628 RETURN VARCHAR2 IS
629 --
630 BEGIN
631 --
632 Cache_job_details(p_job_id);
633 --
634 RETURN g_job_name;
635 --
636 END psn_sup_lng_job;
637 --
638 -- -----------------------------------------------------------------------------
639 --
640 -- Get's a position_name for a position_id
641 --
642 FUNCTION psn_lng_position(p_person_id IN NUMBER
643 ,p_position_id IN NUMBER)
644 RETURN VARCHAR2 IS
645 --
646 BEGIN
647 --
648 Cache_position_details(p_position_id);
649 --
650 RETURN g_position_name;
651 --
652 END psn_lng_position;
653 --
654 -- -----------------------------------------------------------------------------
655 --
656 -- Get's a position_name for a position_id
657 --
658 FUNCTION psn_sup_lng_position(p_person_id IN NUMBER
659 ,p_position_id IN NUMBER)
660 RETURN VARCHAR2 IS
661 --
662 BEGIN
663 --
664 Cache_position_details(p_position_id);
665 --
666 RETURN g_position_name;
667 --
668 END psn_sup_lng_position;
669 --
670 -- -----------------------------------------------------------------------------
671 --
672 -- Get's a grade_name for a grade_id
673 --
674 FUNCTION psn_lng_grade(p_person_id IN NUMBER
675 ,p_grade_id IN NUMBER)
676 RETURN VARCHAR2 IS
677 --
678 BEGIN
679 --
680 Cache_grade_details(p_grade_id);
681 --
682 RETURN g_grade_name;
683 --
684 END psn_lng_grade;
685 --
686 -- -----------------------------------------------------------------------------
687 --
688 -- Get's a grade_name for a grade_id
689 --
690 FUNCTION psn_sup_lng_grade(p_person_id IN NUMBER
691 ,p_grade_id IN NUMBER)
692 RETURN VARCHAR2 IS
693 --
694 BEGIN
695 --
696 Cache_grade_details(p_grade_id);
697 --
698 RETURN g_grade_name;
699 --
700 END psn_sup_lng_grade;
701 --
702 --------------------------------------------------------------------------------
703 -- Returns Lookup Meaning for a given assignment language.
704 --
705 --
706
707 FUNCTION asg_lng_decode_lookup(p_lookup_type IN VARCHAR2
708 ,p_lookup_code IN VARCHAR2
709 ,p_assignment_id IN NUMBER)
710 RETURN fnd_lookup_values.meaning%TYPE IS
711
712 BEGIN
713 -- check to ensure the lookup type/code combo is NOT NULL
714 IF p_lookup_type IS NULL
715 OR p_lookup_code IS NULL
716 OR p_assignment_id IS NULL
717 THEN
718 -- exit incomplete type/code combo
719 RETURN (NULL);
720 END IF;
721 -- determine hash number for plsql table index.
722 g_hash_number :=
723 DBMS_UTILITY.get_hash_value(p_lookup_code || ':' || p_lookup_type || ':' || p_assignment_id
724 ,1
725 ,1048576);
726 g_language := hr_bpl_alert_recipient.get_asg_psn_lng(p_assignment_id);
727 -- (2^20)
728 BEGIN
729 -- check if we have a hash number generated that is for a different
730 -- lookup_type and lookup_code combination
731 -- very rare but possible from the hashing algorithm
732 -- on the first call to this if statement for any given g_hash_number
733 -- the if condition will raise a no_data_found before the else condition
734 -- because the plsql will not contain any values at the start of the session
735 IF g_lookups_tab(g_hash_number).lookup_type = p_lookup_type
736 AND g_lookups_tab(g_hash_number).lookup_code = p_lookup_code
737 AND g_lookups_tab(g_hash_number).language = g_language
738 THEN
739 -- cache hit
740 -- return the value from the plsql table
741 RETURN (g_lookups_tab(g_hash_number).meaning);
742 ELSE
743 -- cache miss
744 RAISE NO_DATA_FOUND;
745 END IF;
746
747 EXCEPTION
748 WHEN NO_DATA_FOUND
749 THEN
750 -- cache miss, determine value, and place in cache for next retrieval
751 -- use the default security group
752 OPEN g_csr_lookup_default_sg(p_lookup_type, p_lookup_code,g_language);
753 FETCH g_csr_lookup_default_sg INTO g_meaning;
754 IF g_csr_lookup_default_sg%NOTFOUND THEN
755 -- lookup type/code combo not found so return NULL
756 CLOSE g_csr_lookup_default_sg;
757 RETURN (NULL);
758 END IF;
759 CLOSE g_csr_lookup_default_sg;
760 -- add to plsql table
761 g_lookups_tab(g_hash_number).lookup_type := p_lookup_type;
762 g_lookups_tab(g_hash_number).lookup_code := p_lookup_code;
763 g_lookups_tab(g_hash_number).language := g_language;
764 g_lookups_tab(g_hash_number).meaning := g_meaning;
765
766 RETURN (g_meaning);
767 END;
768 EXCEPTION
769 -- unexpected error
770 WHEN OTHERS THEN
771 -- check to see if a cursor is open
772 IF g_csr_lookup_default_sg%ISOPEN THEN
773 CLOSE g_csr_lookup_default_sg;
774 END IF;
775 RETURN (NULL);
776 END asg_lng_decode_lookup;
777 --
778 -- -----------------------------------------------------------------------------
779 --
780 -- Get's a location_code for a given assignment_id and location_id
781 --
782 FUNCTION asg_lng_location(p_assignment_id IN NUMBER
783 ,p_location_id IN NUMBER)
784 RETURN VARCHAR2 IS
785 --
786 BEGIN
787 --
788 Cache_location_details(hr_bpl_alert_recipient.Get_asg_psn_lng(
789 p_assignment_id)
790 ,p_location_id);
791 --
792 RETURN g_location_code;
793 --
794 END asg_lng_location;
795 --
796 -- -----------------------------------------------------------------------------
797 --
798 -- Get's a Organization Name in the language required by for the assignment_id
799 -- and organization_id
800 --
801 FUNCTION asg_lng_organization(p_assignment_id IN NUMBER
802 ,p_organization_id IN NUMBER)
803 RETURN VARCHAR2 IS
804 --
805 BEGIN
806 --
807 Cache_organization_details(hr_bpl_alert_recipient.Get_asg_psn_lng(
808 p_assignment_id)
809 ,p_organization_id);
810 --
811 RETURN g_organization_name;
812 --
813 END asg_lng_organization;
814 --
815 --------------------------------------------------------------------------------
816 -- Returns Lookup Meaning for a given language for a assignment supervisor.
817 --
818 --
819
820 FUNCTION asg_sup_lng_decode_lookup(p_lookup_type IN VARCHAR2
821 ,p_lookup_code IN VARCHAR2
822 ,p_assignment_id IN NUMBER)
823 RETURN fnd_lookup_values.meaning%TYPE IS
824
825 BEGIN
826 -- check to ensure the lookup type/code combo is NOT NULL
827 IF p_lookup_type IS NULL
828 OR p_lookup_code IS NULL
829 OR p_assignment_id IS NULL
830 THEN
831 -- exit incomplete type/code combo
832 RETURN (NULL);
833 END IF;
834 -- determine hash number for plsql table index.
835 g_hash_number :=
836 DBMS_UTILITY.get_hash_value(p_lookup_code || ':' || p_lookup_type || ':' || p_assignment_id
837 ,1
838 ,1048576);
839 g_language := hr_bpl_alert_recipient.get_asg_sup_lng(p_assignment_id);
840 -- (2^20)
841 BEGIN
842 -- check if we have a hash number generated that is for a different
843 -- lookup_type and lookup_code combination
844 -- very rare but possible from the hashing algorithm
845 -- on the first call to this if statement for any given g_hash_number
846 -- the if condition will raise a no_data_found before the else condition
847 -- because the plsql will not contain any values at the start of the session
848 IF g_lookups_tab(g_hash_number).lookup_type = p_lookup_type
849 AND g_lookups_tab(g_hash_number).lookup_code = p_lookup_code
850 AND g_lookups_tab(g_hash_number).language = g_language
851 THEN
852 -- cache hit
853 -- return the value from the plsql table
854 RETURN (g_lookups_tab(g_hash_number).meaning);
855 ELSE
856 -- cache miss
857 RAISE NO_DATA_FOUND;
858 END IF;
859
860 EXCEPTION
861 WHEN NO_DATA_FOUND
862 THEN
863 -- cache miss, determine value, and place in cache for next retrieval
864 -- use the default security group
865 OPEN g_csr_lookup_default_sg(p_lookup_type, p_lookup_code,g_language);
866 FETCH g_csr_lookup_default_sg INTO g_meaning;
867 IF g_csr_lookup_default_sg%NOTFOUND THEN
868 -- lookup type/code combo not found so return NULL
869 CLOSE g_csr_lookup_default_sg;
870 RETURN (NULL);
871 END IF;
872 CLOSE g_csr_lookup_default_sg;
873 -- add to plsql table
874 g_lookups_tab(g_hash_number).lookup_type := p_lookup_type;
875 g_lookups_tab(g_hash_number).lookup_code := p_lookup_code;
876 g_lookups_tab(g_hash_number).language := g_language;
877 g_lookups_tab(g_hash_number).meaning := g_meaning;
878
879 RETURN (g_meaning);
880 END;
881 EXCEPTION
882 -- unexpected error
883 WHEN OTHERS THEN
884 -- check to see if a cursor is open
885 IF g_csr_lookup_default_sg%ISOPEN THEN
886 CLOSE g_csr_lookup_default_sg;
887 END IF;
888 RETURN (NULL);
889 END asg_sup_lng_decode_lookup;
890 --
891 -- -----------------------------------------------------------------------------
892 --
893 -- Get's a location_code for the assignment supervisor of an assignment_id
894 -- for a given location_id
895 --
896 FUNCTION asg_sup_lng_location(p_assignment_id IN NUMBER
897 ,p_location_id IN NUMBER)
898 RETURN VARCHAR2 IS
899 --
900 BEGIN
901 --
902 Cache_location_details(hr_bpl_alert_recipient.Get_asg_sup_lng(
903 p_assignment_id)
904 ,p_location_id);
905
906 --
907 RETURN g_location_code;
908 --
909 END asg_sup_lng_location;
910 --
911 -- -----------------------------------------------------------------------------
912 --
913 -- Get's a Organization Name in the language required by the assignment
914 -- supervisor for a given assignment_id and organization_id
915 --
916 FUNCTION asg_sup_lng_organization(p_assignment_id IN NUMBER
917 ,p_organization_id IN NUMBER)
918 RETURN VARCHAR2 IS
919 --
920 BEGIN
921 --
922 Cache_organization_details(hr_bpl_alert_recipient.Get_asg_sup_lng(
923 p_assignment_id)
924 ,p_organization_id);
925
926 --
927 RETURN g_organization_name;
928 --
929 END asg_sup_lng_organization;
930 --
931 -- -----------------------------------------------------------------------------
932 --
933 -- Get's a job_name for a job_id
934 --
935 FUNCTION asg_sup_lng_job(p_assignment_id IN NUMBER
936 ,p_job_id IN NUMBER)
937 RETURN VARCHAR2 IS
938 --
939 BEGIN
940 --
941 Cache_job_details(p_job_id);
942 --
943 RETURN g_job_name;
944 --
945 END asg_sup_lng_job;
946 --
947 -- -----------------------------------------------------------------------------
948 --
949 -- Get's a position_name for a position_id
950 --
951 FUNCTION asg_sup_lng_position(p_assignment_id IN NUMBER
952 ,p_position_id IN NUMBER)
953 RETURN VARCHAR2 IS
954 --
955 BEGIN
956 --
957 Cache_position_details(p_position_id);
958 --
959 RETURN g_position_name;
960 --
961 END asg_sup_lng_position;
962 --
963 -- -----------------------------------------------------------------------------
964 --
965 -- Get's a grade_name for a grade_id
966 --
967 FUNCTION asg_sup_lng_grade(p_assignment_id IN NUMBER
968 ,p_grade_id IN NUMBER)
969 RETURN VARCHAR2 IS
970 --
971 BEGIN
972 --
973 Cache_grade_details(p_grade_id);
974 --
975 RETURN g_grade_name;
976 --
977 END asg_sup_lng_grade;
978
979 --
980 --------------------------------------------------------------------------------
981 -- Returns Lookup Meaning for a given language for a primary assignment
982 -- supervisor.
983 --
984 --
985
986 FUNCTION pasg_sup_lng_decode_lookup(p_lookup_type IN VARCHAR2
987 ,p_lookup_code IN VARCHAR2
988 ,p_assignment_id IN NUMBER)
989 RETURN fnd_lookup_values.meaning%TYPE IS
990
991 BEGIN
992 -- check to ensure the lookup type/code combo is NOT NULL
993 IF p_lookup_type IS NULL
994 OR p_lookup_code IS NULL
995 OR p_assignment_id IS NULL
996 THEN
997 -- exit incomplete type/code combo
998 RETURN (NULL);
999 END IF;
1000 -- get the security group
1001 -- determine hash number for plsql table index.
1002 g_hash_number :=
1003 DBMS_UTILITY.get_hash_value(p_lookup_code || ':' || p_lookup_type || ':' || p_assignment_id
1004 ,1
1005 ,1048576);
1006 g_language := hr_bpl_alert_recipient.get_pasg_sup_lng(p_assignment_id);
1007 -- (2^20)
1008 BEGIN
1009 -- check if we have a hash number generated that is for a different
1010 -- lookup_type and lookup_code combination
1011 -- very rare but possible from the hashing algorithm
1012 -- on the first call to this if statement for any given g_hash_number
1013 -- the if condition will raise a no_data_found before the else condition
1014 -- because the plsql will not contain any values at the start of the session
1015 IF g_lookups_tab(g_hash_number).lookup_type = p_lookup_type
1016 AND g_lookups_tab(g_hash_number).lookup_code = p_lookup_code
1017 AND g_lookups_tab(g_hash_number).language = g_language
1018 THEN
1019 -- cache hit
1020 -- return the value from the plsql table
1021 RETURN (g_lookups_tab(g_hash_number).meaning);
1022 ELSE
1023 -- cache miss
1024 RAISE NO_DATA_FOUND;
1025 END IF;
1026
1027 EXCEPTION
1028 WHEN NO_DATA_FOUND
1029 THEN
1030 -- cache miss, determine value, and place in cache for next retrieval
1031 -- use the default security group
1032 OPEN g_csr_lookup_default_sg(p_lookup_type, p_lookup_code,g_language);
1033 FETCH g_csr_lookup_default_sg INTO g_meaning;
1034 IF g_csr_lookup_default_sg%NOTFOUND THEN
1035 -- lookup type/code combo not found so return NULL
1036 CLOSE g_csr_lookup_default_sg;
1037 RETURN (NULL);
1038 END IF;
1039 CLOSE g_csr_lookup_default_sg;
1040 -- add to plsql table
1041 g_lookups_tab(g_hash_number).lookup_type := p_lookup_type;
1042 g_lookups_tab(g_hash_number).lookup_code := p_lookup_code;
1043 g_lookups_tab(g_hash_number).language := g_language;
1044 g_lookups_tab(g_hash_number).meaning := g_meaning;
1045
1046 RETURN (g_meaning);
1047 END;
1048 EXCEPTION
1049 -- unexpected error
1050 WHEN OTHERS THEN
1051 -- check to see if a cursor is open
1052 IF g_csr_lookup_default_sg%ISOPEN THEN
1053 CLOSE g_csr_lookup_default_sg;
1054 END IF;
1055 RETURN (NULL);
1056 END pasg_sup_lng_decode_lookup;
1057 --
1058 -- -----------------------------------------------------------------------------
1059 --
1060 -- Get's a location_code for the primary assignment supervisor of an
1061 -- assignment_id for a given location_id
1062 --
1063 FUNCTION pasg_sup_lng_location(p_assignment_id IN NUMBER
1064 ,p_location_id IN NUMBER)
1065 RETURN VARCHAR2 IS
1066 --
1067 BEGIN
1068 --
1069 Cache_location_details(hr_bpl_alert_recipient.Get_pasg_sup_lng(
1070 p_assignment_id)
1071 ,p_location_id);
1072
1073 --
1074 RETURN g_location_code;
1075 --
1076 END pasg_sup_lng_location;
1077 --
1078 -- -----------------------------------------------------------------------------
1079 --
1080 -- Get's a Organization Name in the language required by the primary assignment
1081 -- supervisor for a given assignment_id and organization_id
1082 --
1083 FUNCTION pasg_sup_lng_organization(p_assignment_id IN NUMBER
1084 ,p_organization_id IN NUMBER)
1085 RETURN VARCHAR2 IS
1086 --
1087 BEGIN
1088 --
1089 Cache_organization_details(hr_bpl_alert_recipient.Get_pasg_sup_lng(
1090 p_assignment_id)
1091 ,p_organization_id);
1092
1093 --
1094 RETURN g_organization_name;
1095 --
1096 END pasg_sup_lng_organization;
1097 --
1098 -- -----------------------------------------------------------------------------
1099 --
1100 -- Get's a job_name for a job_id
1101 --
1102 FUNCTION pasg_sup_lng_job(p_assignment_id IN NUMBER
1103 ,p_job_id IN NUMBER)
1104 RETURN VARCHAR2 IS
1105 --
1106 BEGIN
1107 --
1108 Cache_job_details(p_job_id);
1109 --
1110 RETURN g_job_name;
1111 --
1112 END pasg_sup_lng_job;
1113 --
1114 -- -----------------------------------------------------------------------------
1115 --
1116 -- Get's a position_name for a position_id
1117 --
1118 FUNCTION pasg_sup_lng_position(p_assignment_id IN NUMBER
1119 ,p_position_id IN NUMBER)
1120 RETURN VARCHAR2 IS
1121 --
1122 BEGIN
1123 --
1124 Cache_position_details(p_position_id);
1125 --
1126 RETURN g_position_name;
1127 --
1128 END pasg_sup_lng_position;
1129 --
1130 -- -----------------------------------------------------------------------------
1131 --
1132 -- Get's a grade_name for a grade_id
1133 --
1134 FUNCTION pasg_sup_lng_grade(p_assignment_id IN NUMBER
1135 ,p_grade_id IN NUMBER)
1136 RETURN VARCHAR2 IS
1137 --
1138 BEGIN
1139 --
1140 Cache_grade_details(p_grade_id);
1141 --
1142 RETURN g_grade_name;
1143 --
1144 END pasg_sup_lng_grade;
1145 --
1146 END HR_BPL_ALERT_TRNSLT;