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