DBA Data[Home] [Help]

PACKAGE BODY: APPS.BEN_COMP_OBJECT_LIST1

Source


1 package body ben_comp_object_list1 as
2 /* $Header: bebmbcl1.pkb 120.2 2006/09/14 11:29:24 bmanyam noship $ */
3 --
4 g_package varchar2(50) := 'ben_comp_object_list1.';
5 --
6 FUNCTION object_selection_rule(
7   p_oipl_id                IN NUMBER
8  ,p_pl_id                  IN NUMBER
9  ,p_pgm_id                 IN NUMBER
10  ,p_pl_typ_id              IN NUMBER
11  ,p_opt_id                 IN NUMBER
12  ,p_business_group_id      IN NUMBER
13  ,p_comp_selection_rule_id IN NUMBER
14  ,p_effective_date         IN DATE)
15   RETURN BOOLEAN IS
16   --
17   l_package VARCHAR2(80)      := g_package || '.object_selection_rule';
18   l_outputs ff_exec.outputs_t;
19   l_return  VARCHAR2(30);
20 --
21 BEGIN
22   --
23   hr_utility.set_location('Entering ' || l_package, 10);
24   --
25   IF p_comp_selection_rule_id IS NOT NULL THEN
26     --
27     -- Call formula initialise routine
28     --
29     hr_utility.set_location('call formula ' || l_package, 20);
30     l_outputs  :=
31       benutils.formula(p_formula_id=> p_comp_selection_rule_id
32        ,p_effective_date    => p_effective_date
33        ,p_business_group_id => p_business_group_id
34        ,p_assignment_id     => NULL
35        ,p_organization_id   => NULL
36        ,p_pl_id             => p_pl_id
37        ,p_pl_typ_id         => p_pl_typ_id
38        ,p_pgm_id            => p_pgm_id
39        ,p_opt_id            => p_opt_id
40        ,p_jurisdiction_code => NULL);
41     --
42     -- Formula will return Y or N
43     --
44     l_return   := l_outputs(l_outputs.FIRST).VALUE;
45     --
46     IF l_return = 'N' THEN
47       --
48       hr_utility.set_location('Ret N ' || l_package, 10);
49       RETURN FALSE;
50     --
51     ELSIF l_return = 'Y' THEN
52       --
53       hr_utility.set_location('Ret Y ' || l_package, 10);
54       RETURN TRUE;
55     --
56     ELSIF l_return <> 'Y' THEN
57       --
58       -- Defensive coding for Non Y return
59       --
60       fnd_message.set_name('BEN', 'BEN_91329_FORMULA_RETURN');
61       fnd_message.set_token('RL', 'comp_selection_rule_id');
62       fnd_message.set_token('PROC', l_package);
63       fnd_message.raise_error;
64     --
65     END IF;
66   --
67   ELSE
68     --
69     hr_utility.set_location('Leaving TRUE ' || l_package, 10);
70     RETURN TRUE;
71   --
72   END IF;
73   --
74 END object_selection_rule;
75 --
76 PROCEDURE populate_comp_object_list
77   (p_comp_obj_cache_id      in     number
78   ,p_business_group_id      in     number
79   ,p_comp_selection_rule_id in     number
80   ,p_effective_date         in     date
81   )
82 IS
83   --
84   l_pl_id_va               benutils.g_number_table   := benutils.g_number_table();
85   l_pgm_id_va              benutils.g_number_table   := benutils.g_number_table();
86   l_oipl_id_va             benutils.g_number_table   := benutils.g_number_table();
87   l_plip_id_va             benutils.g_number_table   := benutils.g_number_table();
88   l_ptip_id_va             benutils.g_number_table   := benutils.g_number_table();
89   l_oiplip_id_va           benutils.g_number_table   := benutils.g_number_table();
90   l_pl_nip_va              benutils.g_varchar2_table := benutils.g_varchar2_table();
91   l_trk_inelig_per_flag_va benutils.g_varchar2_table := benutils.g_varchar2_table();
92   l_par_pgm_id_va          benutils.g_number_table   := benutils.g_number_table();
93   l_par_ptip_id_va         benutils.g_number_table   := benutils.g_number_table();
94   l_par_plip_id_va         benutils.g_number_table   := benutils.g_number_table();
95   l_par_pl_id_va           benutils.g_number_table   := benutils.g_number_table();
96   l_par_opt_id_va          benutils.g_number_table   := benutils.g_number_table();
97   l_flag_bit_val_va        benutils.g_number_table   := benutils.g_number_table();
98   l_oiplip_flag_bit_val_va benutils.g_number_table   := benutils.g_number_table();
99   --
100   l_ele_num        pls_integer;
101   --
102   CURSOR c_multisesscacherows
103     (c_comp_obj_cache_id IN NUMBER
104     )
105   IS
106     SELECT /*+ bebmbcl1.populate_comp_object_list */
107       bcocr.pl_id,
108       bcocr.pgm_id,
109       bcocr.oipl_id,
110       bcocr.plip_id,
111       bcocr.ptip_id,
112       bcocr.oiplip_id,
113       bcocr.pl_nip,
114       bcocr.trk_inelig_per_flag,
115       bcocr.par_pgm_id,
116       bcocr.par_ptip_id,
117       bcocr.par_plip_id,
118       bcocr.par_pl_id,
119       bcocr.par_opt_id,
120       bcocr.flag_bit_val,
121       bcocr.oiplip_flag_bit_val
122     FROM     ben_comp_obj_cache_row bcocr
123     WHERE    bcocr.comp_obj_cache_id = c_comp_obj_cache_id
124     ORDER BY bcocr.comp_obj_cache_row_id;
125   --
126   l_prev_pgm_id    NUMBER;
127   l_pgmrule_pass   BOOLEAN;
128   --
129 BEGIN
130   --
131   -- Populate the comp object list from the database version
132   --
133   l_ele_num       := 1;
134   l_prev_pgm_id   := hr_api.g_number;
135   l_pgmrule_pass  := TRUE;
136   --
137   open c_multisesscacherows
138     (c_comp_obj_cache_id => p_comp_obj_cache_id
139     );
140   fetch c_multisesscacherows bulk collect into l_pl_id_va,
141                                           l_pgm_id_va,
142                                           l_oipl_id_va,
143                                           l_plip_id_va,
144                                           l_ptip_id_va,
145                                           l_oiplip_id_va,
146                                           l_pl_nip_va,
147                                           l_trk_inelig_per_flag_va,
148                                           l_par_pgm_id_va,
149                                           l_par_ptip_id_va,
150                                           l_par_plip_id_va,
151                                           l_par_pl_id_va,
152                                           l_par_opt_id_va,
153                                           l_flag_bit_val_va,
154                                           l_oiplip_flag_bit_val_va;
155   close c_multisesscacherows;
156   --
157   if l_pl_id_va.count > 0 then
158     --
159     for elenum in l_pl_id_va.first..l_pl_id_va.last
160     loop
161       --
162       -- Check if the program rule needs to be fired. Only fire when the
163       -- parent pgm id changes
164       --
165       IF NVL(l_prev_pgm_id, hr_api.g_number) <> NVL(l_par_pgm_id_va(elenum), hr_api.g_number)
166       THEN
167         --
168         l_pgmrule_pass  := object_selection_rule
169            (p_pgm_id                 => l_par_pgm_id_va(elenum)
170            ,p_pl_typ_id              => NULL
171            ,p_pl_id                  => NULL
172            ,p_oipl_id                => NULL
173            ,p_opt_id                 => NULL
174            ,p_business_group_id      => p_business_group_id
175            ,p_comp_selection_rule_id => p_comp_selection_rule_id
176            ,p_effective_date         => p_effective_date
177            );
178         --
179       END IF;
180       --
181       IF l_pgmrule_pass THEN
182         --
183         ben_manage_life_events.g_cache_proc_object(l_ele_num).pl_id                :=
184                                                                   l_pl_id_va(elenum);
185         ben_manage_life_events.g_cache_proc_object(l_ele_num).pgm_id               :=
186                                                                  l_pgm_id_va(elenum);
187         ben_manage_life_events.g_cache_proc_object(l_ele_num).oipl_id              :=
188                                                                 l_oipl_id_va(elenum);
189         ben_manage_life_events.g_cache_proc_object(l_ele_num).plip_id              :=
190                                                                 l_plip_id_va(elenum);
191         ben_manage_life_events.g_cache_proc_object(l_ele_num).ptip_id              :=
192                                                                 l_ptip_id_va(elenum);
193         ben_manage_life_events.g_cache_proc_object(l_ele_num).oiplip_id            :=
194                                                               l_oiplip_id_va(elenum);
195         ben_manage_life_events.g_cache_proc_object(l_ele_num).pl_nip               :=
196                                                                  l_pl_nip_va(elenum);
197         ben_manage_life_events.g_cache_proc_object(l_ele_num).trk_inelig_per_flag  :=
198                                                     l_trk_inelig_per_flag_va(elenum);
199         ben_manage_life_events.g_cache_proc_object(l_ele_num).par_pgm_id           :=
200                                                              l_par_pgm_id_va(elenum);
201         ben_manage_life_events.g_cache_proc_object(l_ele_num).par_ptip_id          :=
202                                                             l_par_ptip_id_va(elenum);
203         ben_manage_life_events.g_cache_proc_object(l_ele_num).par_plip_id          :=
204                                                             l_par_plip_id_va(elenum);
205         ben_manage_life_events.g_cache_proc_object(l_ele_num).par_pl_id            :=
206                                                               l_par_pl_id_va(elenum);
207         ben_manage_life_events.g_cache_proc_object(l_ele_num).par_opt_id           :=
208                                                              l_par_opt_id_va(elenum);
209         ben_manage_life_events.g_cache_proc_object(l_ele_num).flag_bit_val         :=
210                                                            l_flag_bit_val_va(elenum);
211         ben_manage_life_events.g_cache_proc_object(l_ele_num).oiplip_flag_bit_val  :=
212                                                     l_oiplip_flag_bit_val_va(elenum);
213         --
214         l_ele_num := l_ele_num + 1;
215         --
216         -- 5515506: If derived factors exists and the g_derivable_factors is 'NONE',
217         -- reset the derivable_factors parameter to 'ASC'
218         --
219         if (  (l_flag_bit_val_va(elenum) <> 0 OR  l_oiplip_flag_bit_val_va(elenum) <> 0)
220             AND (ben_manage_life_events.g_derivable_factors = 'NONE') ) then
221             --
222             hr_utility.set_location('SET ben_manage_life_events.g_derivable_factors from NONE to ASC', 10);
223 
224             ben_manage_life_events.g_derivable_factors := 'ASC';
225             fnd_message.set_name('BEN','BEN_93605_RESET_DRVD_FCTR_PARM');
226             benutils.write(p_text => fnd_message.get);
227             --
228         end if;
229         --
230       END IF;
231       --
232       l_prev_pgm_id  := l_par_pgm_id_va(elenum);
233       --
234     end loop;
235     --
236   end if;
237   --
238 END populate_comp_object_list;
239 --
240 PROCEDURE refresh_eff_date_caches
241 IS
242   --
243 
244   --
245 BEGIN
246   --
247   ben_cobj_cache.clear_down_cache;
248   ben_comp_object.clear_down_cache;
249   ben_elig_object.clear_down_cache;
250   ben_seeddata_object.clear_down_cache;
251   ben_manage_life_events.g_cache_person_prtn.delete;
252   ben_derive_part_and_rate_cache.clear_down_cache;
253   ben_derive_part_and_rate_facts.clear_down_cache;
254   ben_derive_part_and_rate_cvg.clear_down_cache;
255   ben_derive_part_and_rate_prem.clear_down_cache;
256   ben_cel_cache.clear_down_cache;
257   ben_org_object.clear_down_cache;
258   --
259   ben_elp_cache.clear_down_cache;
260   ben_cep_cache.clear_down_cache;
261   --
262   ben_letrg_cache.clear_down_cache;
263   --
264   ben_rtp_cache.clear_down_cache;
265   ben_rt_prfl_cache.clear_down_cache;
266   --
267 END refresh_eff_date_caches;
268 --
269 end ben_comp_object_list1;