[Home] [Help]
PACKAGE BODY: APPS.BEN_CWB_PERSON_GROUPS_API
Source
1 Package Body BEN_CWB_PERSON_GROUPS_API as
2 /* $Header: becpgapi.pkb 120.5.12000000.1 2007/01/19 02:23:07 appldev noship $ */
3 --
4 -- Package Variables
5 --
6 g_package varchar2(33) := ' BEN_CWB_PERSON_GROUPS_API.';
7 g_debug boolean := hr_utility.debug_enabled;
8 --
9 cursor csr_grps(v_group_per_in_ler_id number
10 ,v_group_pl_id number
11 ,v_group_oipl_id number) is
12 select *
13 from ben_cwb_person_groups
14 where group_per_in_ler_id = v_group_per_in_ler_id
15 and group_pl_id = v_group_pl_id
16 and group_oipl_id = v_group_oipl_id;
17 --
18 --
19 -- ----------------------------------------------------------------------------
20 -- |--------------------------< create_group_budget >-------------------------|
21 -- ----------------------------------------------------------------------------
22 procedure create_group_budget
23 (p_validate in boolean default false
24 ,p_group_per_in_ler_id in number
25 ,p_group_pl_id in number
26 ,p_group_oipl_id in number
27 ,p_lf_evt_ocrd_dt in date
28 ,p_bdgt_pop_cd in varchar2 default null
29 ,p_due_dt in date default null
30 ,p_access_cd in varchar2 default null
31 ,p_approval_cd in varchar2 default null
32 ,p_approval_date in date default null
33 ,p_approval_comments in varchar2 default null
34 ,p_dist_bdgt_val in number default null
35 ,p_ws_bdgt_val in number default null
36 ,p_rsrv_val in number default null
37 ,p_dist_bdgt_mn_val in number default null
38 ,p_dist_bdgt_mx_val in number default null
39 ,p_dist_bdgt_incr_val in number default null
40 ,p_ws_bdgt_mn_val in number default null
41 ,p_ws_bdgt_mx_val in number default null
42 ,p_ws_bdgt_incr_val in number default null
43 ,p_rsrv_mn_val in number default null
44 ,p_rsrv_mx_val in number default null
45 ,p_rsrv_incr_val in number default null
46 ,p_dist_bdgt_iss_val in number default null
47 ,p_ws_bdgt_iss_val in number default null
48 ,p_dist_bdgt_iss_date in date default null
49 ,p_ws_bdgt_iss_date in date default null
50 ,p_ws_bdgt_val_last_upd_date in date default null
51 ,p_dist_bdgt_val_last_upd_date in date default null
52 ,p_rsrv_val_last_upd_date in date default null
53 ,p_ws_bdgt_val_last_upd_by in number default null
54 ,p_dist_bdgt_val_last_upd_by in number default null
55 ,p_rsrv_val_last_upd_by in number default null
56 ,p_submit_cd in varchar2 default null
57 ,p_submit_date in date default null
58 ,p_submit_comments in varchar2 default null
59 ,p_object_version_number out nocopy number
60 ) is
61 --
62 l_object_version_number number;
63 --
64 l_proc varchar2(72) := g_package||'create_group_budget';
65 begin
66 if g_debug then
67 hr_utility.set_location('Entering:'|| l_proc, 10);
68 end if;
69 --
70 -- Issue a savepoint
71 --
72 savepoint create_group_budget;
73 --
74 -- Call Before Process User Hook
75 --
76 begin
77 ben_cwb_person_groups_bk1.create_group_budget_b
78 (p_group_per_in_ler_id => p_group_per_in_ler_id
79 ,p_group_pl_id => p_group_pl_id
80 ,p_group_oipl_id => p_group_oipl_id
81 ,p_lf_evt_ocrd_dt => p_lf_evt_ocrd_dt
82 ,p_bdgt_pop_cd => p_bdgt_pop_cd
83 ,p_due_dt => p_due_dt
84 ,p_access_cd => p_access_cd
85 ,p_approval_cd => p_approval_cd
86 ,p_approval_date => p_approval_date
87 ,p_approval_comments => p_approval_comments
88 ,p_dist_bdgt_val => p_dist_bdgt_val
89 ,p_ws_bdgt_val => p_ws_bdgt_val
90 ,p_rsrv_val => p_rsrv_val
91 ,p_dist_bdgt_mn_val => p_dist_bdgt_mn_val
92 ,p_dist_bdgt_mx_val => p_dist_bdgt_mx_val
93 ,p_dist_bdgt_incr_val => p_dist_bdgt_incr_val
94 ,p_ws_bdgt_mn_val => p_ws_bdgt_mn_val
95 ,p_ws_bdgt_mx_val => p_ws_bdgt_mx_val
96 ,p_ws_bdgt_incr_val => p_ws_bdgt_incr_val
97 ,p_rsrv_mn_val => p_rsrv_mn_val
98 ,p_rsrv_mx_val => p_rsrv_mx_val
99 ,p_rsrv_incr_val => p_rsrv_incr_val
100 ,p_dist_bdgt_iss_val => p_dist_bdgt_iss_val
101 ,p_ws_bdgt_iss_val => p_ws_bdgt_iss_val
102 ,p_dist_bdgt_iss_date => p_dist_bdgt_iss_date
103 ,p_ws_bdgt_iss_date => p_ws_bdgt_iss_date
104 ,p_ws_bdgt_val_last_upd_date => p_ws_bdgt_val_last_upd_date
105 ,p_dist_bdgt_val_last_upd_date => p_dist_bdgt_val_last_upd_date
106 ,p_rsrv_val_last_upd_date => p_rsrv_val_last_upd_date
107 ,p_ws_bdgt_val_last_upd_by => p_ws_bdgt_val_last_upd_by
108 ,p_dist_bdgt_val_last_upd_by => p_dist_bdgt_val_last_upd_by
109 ,p_rsrv_val_last_upd_by => p_rsrv_val_last_upd_by
110 ,p_submit_cd => p_submit_cd
111 ,p_submit_date => p_submit_date
112 ,p_submit_comments => p_submit_comments
113 );
114 exception
115 when hr_api.cannot_find_prog_unit then
116 hr_api.cannot_find_prog_unit_error
117 (p_module_name => 'create_group_budget'
118 ,p_hook_type => 'BP'
119 );
120 end;
121 --
122 -- Validation in addition to Row Handlers
123 --
124 --
125 -- Process Logic
126 --
127 ben_cpg_ins.ins
128 (p_group_per_in_ler_id => p_group_per_in_ler_id
129 ,p_group_pl_id => p_group_pl_id
130 ,p_group_oipl_id => p_group_oipl_id
131 ,p_lf_evt_ocrd_dt => p_lf_evt_ocrd_dt
132 ,p_bdgt_pop_cd => p_bdgt_pop_cd
133 ,p_due_dt => p_due_dt
134 ,p_access_cd => p_access_cd
135 ,p_approval_cd => p_approval_cd
136 ,p_approval_date => p_approval_date
137 ,p_approval_comments => p_approval_comments
138 ,p_dist_bdgt_val => p_dist_bdgt_val
139 ,p_ws_bdgt_val => p_ws_bdgt_val
140 ,p_rsrv_val => p_rsrv_val
141 ,p_dist_bdgt_mn_val => p_dist_bdgt_mn_val
142 ,p_dist_bdgt_mx_val => p_dist_bdgt_mx_val
143 ,p_dist_bdgt_incr_val => p_dist_bdgt_incr_val
144 ,p_ws_bdgt_mn_val => p_ws_bdgt_mn_val
145 ,p_ws_bdgt_mx_val => p_ws_bdgt_mx_val
146 ,p_ws_bdgt_incr_val => p_ws_bdgt_incr_val
147 ,p_rsrv_mn_val => p_rsrv_mn_val
148 ,p_rsrv_mx_val => p_rsrv_mx_val
149 ,p_rsrv_incr_val => p_rsrv_incr_val
150 ,p_dist_bdgt_iss_val => p_dist_bdgt_iss_val
151 ,p_ws_bdgt_iss_val => p_ws_bdgt_iss_val
152 ,p_dist_bdgt_iss_date => p_dist_bdgt_iss_date
153 ,p_ws_bdgt_iss_date => p_ws_bdgt_iss_date
154 ,p_ws_bdgt_val_last_upd_date => p_ws_bdgt_val_last_upd_date
155 ,p_dist_bdgt_val_last_upd_date => p_dist_bdgt_val_last_upd_date
156 ,p_rsrv_val_last_upd_date => p_rsrv_val_last_upd_date
157 ,p_ws_bdgt_val_last_upd_by => p_ws_bdgt_val_last_upd_by
158 ,p_dist_bdgt_val_last_upd_by => p_dist_bdgt_val_last_upd_by
159 ,p_rsrv_val_last_upd_by => p_rsrv_val_last_upd_by
160 ,p_submit_cd => p_submit_cd
161 ,p_submit_date => p_submit_date
162 ,p_submit_comments => p_submit_comments
163 ,p_object_version_number => l_object_version_number
164 );
165 --
166 -- Call After Process User Hook
167 --
168 begin
169 ben_cwb_person_groups_bk1.create_group_budget_a
170 (p_group_per_in_ler_id => p_group_per_in_ler_id
171 ,p_group_pl_id => p_group_pl_id
172 ,p_group_oipl_id => p_group_oipl_id
173 ,p_lf_evt_ocrd_dt => p_lf_evt_ocrd_dt
174 ,p_bdgt_pop_cd => p_bdgt_pop_cd
175 ,p_due_dt => p_due_dt
176 ,p_access_cd => p_access_cd
177 ,p_approval_cd => p_approval_cd
178 ,p_approval_date => p_approval_date
179 ,p_approval_comments => p_approval_comments
180 ,p_dist_bdgt_val => p_dist_bdgt_val
181 ,p_ws_bdgt_val => p_ws_bdgt_val
182 ,p_rsrv_val => p_rsrv_val
183 ,p_dist_bdgt_mn_val => p_dist_bdgt_mn_val
184 ,p_dist_bdgt_mx_val => p_dist_bdgt_mx_val
185 ,p_dist_bdgt_incr_val => p_dist_bdgt_incr_val
186 ,p_ws_bdgt_mn_val => p_ws_bdgt_mn_val
187 ,p_ws_bdgt_mx_val => p_ws_bdgt_mx_val
188 ,p_ws_bdgt_incr_val => p_ws_bdgt_incr_val
189 ,p_rsrv_mn_val => p_rsrv_mn_val
190 ,p_rsrv_mx_val => p_rsrv_mx_val
191 ,p_rsrv_incr_val => p_rsrv_incr_val
192 ,p_dist_bdgt_iss_val => p_dist_bdgt_iss_val
193 ,p_ws_bdgt_iss_val => p_ws_bdgt_iss_val
194 ,p_dist_bdgt_iss_date => p_dist_bdgt_iss_date
195 ,p_ws_bdgt_iss_date => p_ws_bdgt_iss_date
196 ,p_ws_bdgt_val_last_upd_date => p_ws_bdgt_val_last_upd_date
197 ,p_dist_bdgt_val_last_upd_date => p_dist_bdgt_val_last_upd_date
198 ,p_rsrv_val_last_upd_date => p_rsrv_val_last_upd_date
199 ,p_ws_bdgt_val_last_upd_by => p_ws_bdgt_val_last_upd_by
200 ,p_dist_bdgt_val_last_upd_by => p_dist_bdgt_val_last_upd_by
201 ,p_rsrv_val_last_upd_by => p_rsrv_val_last_upd_by
202 ,p_submit_cd => p_submit_cd
203 ,p_submit_date => p_submit_date
204 ,p_submit_comments => p_submit_comments
205 ,p_object_version_number => l_object_version_number
206 );
207 exception
208 when hr_api.cannot_find_prog_unit then
209 hr_api.cannot_find_prog_unit_error
210 (p_module_name => 'create_group_budget'
211 ,p_hook_type => 'AP'
212 );
213 end;
214 --
215 -- When in validation only mode raise the Validate_Enabled exception
216 --
217 if p_validate then
218 raise hr_api.validate_enabled;
219 end if;
220 --
221 -- Set all IN OUT and OUT parameters with out values
222 --
223 p_object_version_number := l_object_version_number;
224 --
225 if g_debug then
226 hr_utility.set_location(' Leaving:'||l_proc, 70);
227 end if;
228 exception
229 when hr_api.validate_enabled then
230 --
231 -- As the Validate_Enabled exception has been raised
232 -- we must rollback to the savepoint
233 --
234 rollback to create_group_budget;
235 --
236 if g_debug then
237 hr_utility.set_location(' Leaving:'||l_proc, 80);
238 end if;
239 when others then
240 --
241 -- A validation or unexpected error has occured
242 --
243 rollback to create_group_budget;
244 --
245 if g_debug then
246 hr_utility.set_location(' Leaving:'||l_proc, 90);
247 end if;
248 raise;
249 end create_group_budget;
250 --
251 --
252 -- --------------------------------------------------------------------------
253 -- |----------------------------< check_min_max >----------------------------|
254 -- --------------------------------------------------------------------------
255 procedure check_min_max(p_val in number
256 ,p_iss_val in number
257 ,p_min_val in number
258 ,p_max_val in number
259 ,p_incr_val in number
260 ,p_group_per_in_ler_id number)
261 is
262 --
263 l_person_name varchar2(240);
264 --
265 l_proc varchar2(72) := g_package||'check_min_max';
266 --
267 Begin
268 --
269 if g_debug then
270 hr_utility.set_location('Entering:'||l_proc, 10);
271 hr_utility.set_location('Entering:'||l_proc, 10);
272 hr_utility.set_location('p_val :'||p_val, 10);
273 hr_utility.set_location('p_iss_val :'||p_iss_val,10);
274 hr_utility.set_location('p_min_val :'||p_min_val, 10);
275 hr_utility.set_location('p_max_val :'||p_max_val, 10);
276 hr_utility.set_location('p_incr_val :'||p_incr_val, 10);
277 end if;
278 --
279 select full_name into l_person_name
280 from ben_cwb_person_info
281 where group_per_in_ler_id = p_group_per_in_ler_id;
282 --
283 --
284 if g_debug then
285 hr_utility.set_location(l_proc, 20);
286 end if;
287 --
288 if (p_val is not null and p_val <> hr_api.g_number and
289 p_min_val is not null) then
290 if (p_val < p_min_val) then
291 fnd_message.set_name('BEN','BEN_92984_CWB_VAL_NOT_IN_RANGE');
292 fnd_message.set_token('VAL',p_val);
293 fnd_message.set_token('MIN',p_min_val);
294 fnd_message.set_token('MAX',p_max_val);
295 fnd_message.set_token('PERSON',l_person_name);
296 fnd_message.raise_error;
297 end if;
298 end if;
299 --
300 if g_debug then
301 hr_utility.set_location(l_proc, 30);
302 end if;
303 --
304 if (p_iss_val is not null and p_iss_val <> hr_api.g_number and
305 p_min_val is not null) then
306 if (p_iss_val < p_min_val) then
307 fnd_message.set_name('BEN','BEN_92984_CWB_VAL_NOT_IN_RANGE');
308 fnd_message.set_token('VAL',p_iss_val);
309 fnd_message.set_token('MIN',p_min_val);
310 fnd_message.set_token('MAX',p_max_val);
311 fnd_message.set_token('PERSON',l_person_name);
312 fnd_message.raise_error;
313 end if;
314 end if;
315 --
316 if g_debug then
317 hr_utility.set_location(l_proc, 40);
318 end if;
319 --
320 if (p_val is not null and p_val <> hr_api.g_number and
321 p_max_val is not null) then
322 if (p_val > p_max_val) then
323 fnd_message.set_name('BEN','BEN_92984_CWB_VAL_NOT_IN_RANGE');
324 fnd_message.set_token('VAL',p_val);
325 fnd_message.set_token('MIN',p_min_val);
326 fnd_message.set_token('MAX',p_max_val);
327 fnd_message.set_token('PERSON',l_person_name);
328 fnd_message.raise_error;
329 end if;
330 end if;
331 --
332 if g_debug then
333 hr_utility.set_location(l_proc, 50);
334 end if;
335 --
336 if (p_iss_val is not null and p_iss_val <> hr_api.g_number and
337 p_max_val is not null) then
338 if (p_iss_val > p_max_val) then
339 fnd_message.set_name('BEN','BEN_92984_CWB_VAL_NOT_IN_RANGE');
340 fnd_message.set_token('VAL',p_iss_val);
341 fnd_message.set_token('MIN',p_min_val);
342 fnd_message.set_token('MAX',p_max_val);
343 fnd_message.set_token('PERSON',l_person_name);
344 fnd_message.raise_error;
345 end if;
346 end if;
347 --
348 if g_debug then
349 hr_utility.set_location(l_proc, 60);
350 end if;
351 --
352 if (p_val is not null and p_val <> hr_api.g_number and
353 p_incr_val is not null) then
354 if (mod(p_val,p_incr_val) <> 0) then
355 fnd_message.set_name('BEN','BEN_92985_CWB_VAL_NOT_INCRMNT');
356 fnd_message.set_token('VAL',p_val);
357 fnd_message.set_token('INCREMENT', p_incr_val);
358 fnd_message.set_token('PERSON',l_person_name);
359 fnd_message.raise_error;
360 end if;
361 end if;
362 if g_debug then
363 hr_utility.set_location(l_proc, 70);
364 end if;
365 --
366 if (p_iss_val is not null and p_iss_val <> hr_api.g_number and
367 p_incr_val is not null) then
368 if (mod(p_iss_val,p_incr_val) <> 0) then
369 fnd_message.set_name('BEN','BEN_92985_CWB_VAL_NOT_INCRMNT');
370 fnd_message.set_token('VAL',p_iss_val);
371 fnd_message.set_token('INCREMENT', p_incr_val);
372 fnd_message.set_token('PERSON',l_person_name);
373 fnd_message.raise_error;
374 end if;
375 end if;
376 --
377 if g_debug then
378 hr_utility.set_location(' Leaving:'||l_proc, 90);
379 end if;
380 end check_min_max;
381 --
382 -- --------------------------------------------------------------------------
383 -- |---------------------< update_group_budget_summary >---------------------|
384 -- --------------------------------------------------------------------------
385 -- Description
386 -- This is an internal procedure called only by update_group_budget to
387 -- update the summary table after updating the ben_cwb_person_groups.
388 --
389 procedure update_group_budget_summary
390 (p_grp_bdgt_old csr_grps%rowtype
391 ,p_dist_bdgt_val number
392 ,p_ws_bdgt_val number
393 ,p_dist_bdgt_iss_val number
394 ,p_ws_bdgt_iss_val number) is
395 --cursor to fetch the managers of the person
396 cursor csr_mgr_pil_ids(p_group_per_in_ler_id number) is
397 select mgr_per_in_ler_id
398 from ben_cwb_group_hrchy
399 where emp_per_in_ler_id = p_group_per_in_ler_id
400 and lvl_num > 0
401 order by lvl_num;
402 --
403 l_prsrv_bdgt_cd varchar2(30);
404 l_uses_bdgt_flag varchar2(30);
405 --
406 l_dist_bdgt_val number;
407 l_ws_bdgt_val number;
408 l_dist_bdgt_iss_val number;
409 l_ws_bdgt_iss_val number;
410 --
411 l_diff_dist_bdgt number;
412 l_diff_ws_bdgt number;
413 l_diff_dist_bdgt_iss number;
414 l_diff_ws_bdgt_iss number;
415 --
416 l_elig_sal_direct number;
417 l_elig_sal_all number;
418 --
419 l_immediate_mgr number;
420 --
421 l_proc varchar2(72) := g_package||'update_group_budget_summary';
422 --
423 begin
424 --
425 if g_debug then
426 hr_utility.set_location('Entering:'|| l_proc, 10);
427 end if;
428 --
429 select uses_bdgt_flag, prsrv_bdgt_cd
430 into l_uses_bdgt_flag, l_prsrv_bdgt_cd
431 from ben_cwb_pl_dsgn pl
432 where pl.pl_id = p_grp_bdgt_old.group_pl_id
433 and pl.lf_evt_ocrd_dt = p_grp_bdgt_old.lf_evt_ocrd_dt
434 and pl.oipl_id = p_grp_bdgt_old.group_oipl_id;
435 --
436 if l_uses_bdgt_flag is null or l_uses_bdgt_flag <> 'Y' then
437 return;
438 end if;
439 --
440 -- set the parameters to old values if they are default values.
441 if p_dist_bdgt_val = hr_api.g_number then
442 l_dist_bdgt_val := p_grp_bdgt_old.dist_bdgt_val;
443 else
444 l_dist_bdgt_val := p_dist_bdgt_val;
445 end if;
446 if p_ws_bdgt_val = hr_api.g_number then
447 l_ws_bdgt_val := p_grp_bdgt_old.ws_bdgt_val;
448 else
449 l_ws_bdgt_val := p_ws_bdgt_val;
450 end if;
451 if p_dist_bdgt_iss_val = hr_api.g_number then
452 l_dist_bdgt_iss_val := p_grp_bdgt_old.dist_bdgt_iss_val;
453 else
454 l_dist_bdgt_iss_val := p_dist_bdgt_iss_val;
455 end if;
456 if p_ws_bdgt_iss_val = hr_api.g_number then
457 l_ws_bdgt_iss_val := p_grp_bdgt_old.ws_bdgt_iss_val;
458 else
459 l_ws_bdgt_iss_val := p_ws_bdgt_iss_val;
460 end if;
461 --
462 if g_debug then
463 hr_utility.set_location(l_proc, 20);
464 end if;
465 --
466 if nvl(p_grp_bdgt_old.dist_bdgt_val,0) <> nvl(l_dist_bdgt_val,0) or
467 nvl(p_grp_bdgt_old.ws_bdgt_val,0) <> nvl(l_ws_bdgt_val,0) or
468 nvl(p_grp_bdgt_old.dist_bdgt_iss_val,0) <> nvl(l_dist_bdgt_iss_val,0) or
469 nvl(p_grp_bdgt_old.ws_bdgt_iss_val,0) <> nvl(l_ws_bdgt_iss_val,0) then
470 --
471 --
472 if g_debug then
473 hr_utility.set_location(l_proc, 30);
474 end if;
475 --
476 if l_prsrv_bdgt_cd = 'A' then
477 --
478 if g_debug then
479 hr_utility.set_location(l_proc, 40);
480 end if;
481 --
482 l_diff_dist_bdgt := ben_cwb_utils.add_number_with_null_check
483 (l_dist_bdgt_val,
484 - p_grp_bdgt_old.dist_bdgt_val);
485 l_diff_ws_bdgt := ben_cwb_utils.add_number_with_null_check
486 (l_ws_bdgt_val,
487 - p_grp_bdgt_old.ws_bdgt_val);
488 l_diff_dist_bdgt_iss := ben_cwb_utils.add_number_with_null_check
489 (l_dist_bdgt_iss_val,
490 - p_grp_bdgt_old.dist_bdgt_iss_val);
491 l_diff_ws_bdgt_iss := ben_cwb_utils.add_number_with_null_check
492 (l_ws_bdgt_iss_val,
493 - p_grp_bdgt_old.ws_bdgt_iss_val);
494 --
495 else
496 --
497 if g_debug then
498 hr_utility.set_location(l_proc, 50);
499 end if;
500 --
501 select sum(elig_sal_val_direct) elig_sal_val_direct
502 ,sum(elig_sal_val_all) elig_sal_val_all
503 into l_elig_sal_direct
504 ,l_elig_sal_all
505 from ben_cwb_summary
506 where group_per_in_ler_id = p_grp_bdgt_old.group_per_in_ler_id
507 and group_pl_id = p_grp_bdgt_old.group_pl_id
508 and group_oipl_id = p_grp_bdgt_old.group_oipl_id;
509 --
510 l_diff_dist_bdgt := ben_cwb_utils.add_number_with_null_check
511 (l_dist_bdgt_val,
512 -p_grp_bdgt_old.dist_bdgt_val)*l_elig_sal_all/100;
513 l_diff_ws_bdgt := ben_cwb_utils.add_number_with_null_check
514 (l_ws_bdgt_val,
515 -p_grp_bdgt_old.ws_bdgt_val)*l_elig_sal_direct/100;
516 l_diff_dist_bdgt_iss := ben_cwb_utils.add_number_with_null_check
517 (l_dist_bdgt_iss_val,
518 -p_grp_bdgt_old.dist_bdgt_iss_val)*l_elig_sal_all/100;
519 l_diff_ws_bdgt_iss := ben_cwb_utils.add_number_with_null_check
520 (l_ws_bdgt_iss_val,
521 -p_grp_bdgt_old.ws_bdgt_iss_val)*l_elig_sal_direct/100;
522 --
523 end if;
524 --
525 -- If no distribution budget, then the manager is
526 -- not allowed to budget, so use worksheet budget.
527 --
528 if (l_diff_dist_bdgt is null) then
529 l_diff_dist_bdgt := l_diff_ws_bdgt;
530 l_diff_dist_bdgt_iss := l_diff_ws_bdgt_iss;
531 end if;
532 --
533 if g_debug then
534 hr_utility.set_location(l_proc, 60);
535 end if;
536 --
537 -- The first one will be the immediate manager
538 l_immediate_mgr := 1;
539 for mgr in csr_mgr_pil_ids(p_grp_bdgt_old.group_per_in_ler_id)
540 loop
541 --
542 if g_debug then
543 hr_utility.set_location(l_proc, 70);
544 end if;
545 --
546 ben_cwb_summary_pkg.update_or_insert_pl_sql_tab
547 (p_group_per_in_ler_id => mgr.mgr_per_in_ler_id
548 ,p_group_pl_id => p_grp_bdgt_old.group_pl_id
549 ,p_group_oipl_id => p_grp_bdgt_old.group_oipl_id
550 ,p_ws_bdgt_val_direct => l_diff_ws_bdgt * l_immediate_mgr
551 ,p_ws_bdgt_val_all => l_diff_ws_bdgt
552 ,p_ws_bdgt_iss_val_direct => l_diff_ws_bdgt_iss*l_immediate_mgr
553 ,p_ws_bdgt_iss_val_all => l_diff_ws_bdgt_iss
554 ,p_bdgt_val_direct => l_diff_dist_bdgt * l_immediate_mgr
555 ,p_bdgt_iss_val_direct => l_diff_dist_bdgt_iss*l_immediate_mgr
556 );
557 l_immediate_mgr := 0;
558 end loop;
559 end if; -- of difference in ws or db budget values
560 --
561 if g_debug then
562 hr_utility.set_location(' Leaving:'|| l_proc, 999);
563 end if;
564 --
565 end; -- update_group_budget_summary
566 --
567 --
568 -- -------------------------------------------------------------------------
569 -- |-------------------------< create_audit_record >-----------------------|
570 -- -------------------------------------------------------------------------
571 --
572 -- Description
573 -- This is an internal procedure
574 --
575 procedure create_audit_record
576 (p_grp_bdgt_old in csr_grps%rowtype
577 ) is
578 l_grp_bdgt_new csr_grps%rowtype;
579 l_pl_dsgn ben_cwb_pl_dsgn%rowtype;
580 l_cwb_audit_id ben_cwb_audit.cwb_audit_id%type;
581 l_object_version_number ben_cwb_audit.object_version_number%type;
582 l_cd_meaning_old hr_lookups.meaning%type;
583 l_cd_meaning_new hr_lookups.meaning%type;
584 l_proc varchar2(72) := g_package||'create_audit_record';
585 l_person_id fnd_user.employee_id%type;
586
587 begin
588
589 if g_debug then
590 hr_utility.set_location('Entering :'|| l_proc, 100);
591 end if;
592
593 open csr_grps(p_grp_bdgt_old.group_per_in_ler_id
594 ,p_grp_bdgt_old.group_pl_id
595 ,p_grp_bdgt_old.group_oipl_id);
596 fetch csr_grps into l_grp_bdgt_new;
597 close csr_grps;
598
599 select * into l_pl_dsgn
600 from ben_cwb_pl_dsgn
601 where pl_id = p_grp_bdgt_old.group_pl_id
602 and lf_evt_ocrd_dt = p_grp_bdgt_old.lf_evt_ocrd_dt
603 and oipl_id = -1;
604
605 select employee_id into l_person_id
606 from fnd_user
607 where user_id = l_grp_bdgt_new.last_updated_by;
608
609 if( ((p_grp_bdgt_old.ws_bdgt_val is null)
610 and (l_grp_bdgt_new.ws_bdgt_val is not null))
611 or ((l_grp_bdgt_new.ws_bdgt_val is null)
612 and (p_grp_bdgt_old.ws_bdgt_val is not null))
613 or (p_grp_bdgt_old.ws_bdgt_val <> l_grp_bdgt_new.ws_bdgt_val) ) then
614
615 -- if(nvl(p_grp_bdgt_old.ws_bdgt_val,-1)<>nvl(l_grp_bdgt_new.ws_bdgt_val,-1)) then
616 if(l_pl_dsgn.prsrv_bdgt_cd='A') then
617 if(ben_cwb_audit_api.return_lookup_validity('BAD')=true) then
618
619 if g_debug then
620 hr_utility.set_location('Entering BAD:'||l_proc||p_grp_bdgt_old.ws_bdgt_val||' '||l_grp_bdgt_new.ws_bdgt_val, 101);
621 end if;
622
623 ben_cwb_audit_api.create_audit_entry
624 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
625 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
626 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
627 ,p_pl_id => l_grp_bdgt_new.group_pl_id
628 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
629 ,p_audit_type_cd => 'BAD'
630 ,p_old_val_number => p_grp_bdgt_old.ws_bdgt_val
631 ,p_new_val_number => l_grp_bdgt_new.ws_bdgt_val
632 ,p_date_stamp => sysdate
633 ,p_change_made_by_person_id => l_person_id
634 ,p_cwb_audit_id => l_cwb_audit_id
635 ,p_object_version_number => l_object_version_number
636 );
637 end if;
638 elsif(l_pl_dsgn.prsrv_bdgt_cd='P') then
639 if(ben_cwb_audit_api.return_lookup_validity('BPD')=true) then
640 if g_debug then
641 hr_utility.set_location('Entering BPD:'||l_proc||p_grp_bdgt_old.ws_bdgt_val||' '||l_grp_bdgt_new.ws_bdgt_val, 102);
642 end if;
643
644 ben_cwb_audit_api.create_audit_entry
645 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
646 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
647 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
648 ,p_pl_id => l_grp_bdgt_new.group_pl_id
649 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
650 ,p_audit_type_cd => 'BPD'
651 ,p_old_val_number => p_grp_bdgt_old.ws_bdgt_val
652 ,p_new_val_number => l_grp_bdgt_new.ws_bdgt_val
653 ,p_date_stamp => sysdate
654 ,p_change_made_by_person_id => l_person_id
655 ,p_cwb_audit_id => l_cwb_audit_id
656 ,p_object_version_number => l_object_version_number
657 );
658 end if;
659 end if;
660 end if;
661
662 if( ((p_grp_bdgt_old.dist_bdgt_val is null)
663 and (l_grp_bdgt_new.dist_bdgt_val is not null))
664 or ((l_grp_bdgt_new.dist_bdgt_val is null)
665 and (p_grp_bdgt_old.dist_bdgt_val is not null))
666 or (p_grp_bdgt_old.dist_bdgt_val <> l_grp_bdgt_new.dist_bdgt_val) ) then
667 --if(nvl(p_grp_bdgt_old.dist_bdgt_val,-1)<>nvl(l_grp_bdgt_new.dist_bdgt_val,-1)) then
668 if(l_pl_dsgn.prsrv_bdgt_cd='A') then
669 if(ben_cwb_audit_api.return_lookup_validity('BAA')=true) then
670 if g_debug then
671 hr_utility.set_location('Entering BAA:'||l_proc||p_grp_bdgt_old.dist_bdgt_val||' '||l_grp_bdgt_new.dist_bdgt_val, 103);
672 end if;
673
674 ben_cwb_audit_api.create_audit_entry
675 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
676 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
677 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
678 ,p_pl_id => l_grp_bdgt_new.group_pl_id
679 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
680 ,p_audit_type_cd => 'BAA'
681 ,p_old_val_number => p_grp_bdgt_old.dist_bdgt_val
682 ,p_new_val_number => l_grp_bdgt_new.dist_bdgt_val
683 ,p_date_stamp => sysdate
684 ,p_change_made_by_person_id => l_person_id
685 ,p_cwb_audit_id => l_cwb_audit_id
686 ,p_object_version_number => l_object_version_number
687 );
688 end if;
689 elsif(l_pl_dsgn.prsrv_bdgt_cd='P') then
690 if(ben_cwb_audit_api.return_lookup_validity('BPA')=true) then
691 if g_debug then
692 hr_utility.set_location('Entering BPA:'||l_proc||p_grp_bdgt_old.dist_bdgt_val||' '||l_grp_bdgt_new.dist_bdgt_val, 104);
693 end if;
694
695 ben_cwb_audit_api.create_audit_entry
696 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
697 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
698 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
699 ,p_pl_id => l_grp_bdgt_new.group_pl_id
700 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
701 ,p_audit_type_cd => 'BPA'
702 ,p_old_val_number => p_grp_bdgt_old.dist_bdgt_val
703 ,p_new_val_number => l_grp_bdgt_new.dist_bdgt_val
704 ,p_date_stamp => sysdate
705 ,p_change_made_by_person_id => l_person_id
706 ,p_cwb_audit_id => l_cwb_audit_id
707 ,p_object_version_number => l_object_version_number
708 );
709 end if;
710 end if;
711 end if;
712
713 if( ((p_grp_bdgt_old.bdgt_pop_cd is null)
714 and (l_grp_bdgt_new.bdgt_pop_cd is not null))
715 or ((l_grp_bdgt_new.bdgt_pop_cd is null)
716 and (p_grp_bdgt_old.bdgt_pop_cd is not null))
717 or (p_grp_bdgt_old.bdgt_pop_cd <> l_grp_bdgt_new.bdgt_pop_cd) ) then
718 -- if(nvl(p_grp_bdgt_old.bdgt_pop_cd,-1)<>nvl(l_grp_bdgt_new.bdgt_pop_cd,-1)) then
719 if(ben_cwb_audit_api.return_lookup_validity('BP')=true) then
720
721 if g_debug then
722 hr_utility.set_location('Entering BP:'||l_proc||p_grp_bdgt_old.bdgt_pop_cd||' '||l_grp_bdgt_new.bdgt_pop_cd, 105);
723 end if;
724
725 ben_cwb_audit_api.create_audit_entry
726 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
727 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
728 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
729 ,p_pl_id => l_grp_bdgt_new.group_pl_id
730 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
731 ,p_audit_type_cd => 'BP'
732 ,p_old_val_varchar => p_grp_bdgt_old.bdgt_pop_cd
733 ,p_new_val_varchar => l_grp_bdgt_new.bdgt_pop_cd
734 ,p_date_stamp => sysdate
735 ,p_change_made_by_person_id => l_person_id
736 ,p_cwb_audit_id => l_cwb_audit_id
737 ,p_object_version_number => l_object_version_number
738 );
739 end if;
740 end if;
741 if( ((p_grp_bdgt_old.due_dt is null)
742 and (l_grp_bdgt_new.due_dt is not null))
743 or ((l_grp_bdgt_new.due_dt is null)
744 and (p_grp_bdgt_old.due_dt is not null))
745 or (p_grp_bdgt_old.due_dt <> l_grp_bdgt_new.due_dt) ) then
746 if(ben_cwb_audit_api.return_lookup_validity('DD')=true) then
747
748 if g_debug then
749 hr_utility.set_location('Entering DD:'||l_proc||p_grp_bdgt_old.due_dt||' '||l_grp_bdgt_new.due_dt, 106);
750 end if;
751
752 ben_cwb_audit_api.create_audit_entry
753 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
754 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
755 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
756 ,p_pl_id => l_grp_bdgt_new.group_pl_id
757 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
758 ,p_audit_type_cd => 'DD'
759 ,p_old_val_date => p_grp_bdgt_old.due_dt
760 ,p_new_val_date => l_grp_bdgt_new.due_dt
761 ,p_date_stamp => sysdate
762 ,p_change_made_by_person_id => l_person_id
763 ,p_cwb_audit_id => l_cwb_audit_id
764 ,p_object_version_number => l_object_version_number
765 );
766 end if;
767 end if;
768 if( ((p_grp_bdgt_old.submit_date is null)
769 and (l_grp_bdgt_new.submit_date is not null))
770 or ((l_grp_bdgt_new.submit_date is null)
771 and (p_grp_bdgt_old.submit_date is not null))
772 or (p_grp_bdgt_old.submit_date <> l_grp_bdgt_new.submit_date) ) then
773 if(ben_cwb_audit_api.return_lookup_validity('SD')=true) then
774
775 if g_debug then
776 hr_utility.set_location('Entering SD: '||l_proc||p_grp_bdgt_old.submit_date||' '||l_grp_bdgt_new.submit_date, 107);
777 end if;
778
779 ben_cwb_audit_api.create_audit_entry
780 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
781 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
782 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
783 ,p_pl_id => l_grp_bdgt_new.group_pl_id
784 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
785 ,p_audit_type_cd => 'SD'
786 ,p_old_val_date => p_grp_bdgt_old.submit_date
787 ,p_new_val_date => l_grp_bdgt_new.submit_date
788 ,p_date_stamp => sysdate
789 ,p_change_made_by_person_id => l_person_id
790 ,p_cwb_audit_id => l_cwb_audit_id
791 ,p_object_version_number => l_object_version_number
792 );
793 end if;
794 end if;
795 if( ((p_grp_bdgt_old.submit_cd is null)
796 and (l_grp_bdgt_new.submit_cd is not null))
797 or ((l_grp_bdgt_new.submit_cd is null)
798 and (p_grp_bdgt_old.submit_cd is not null))
799 or (p_grp_bdgt_old.submit_cd <> l_grp_bdgt_new.submit_cd) ) then
800 if(ben_cwb_audit_api.return_lookup_validity('SU')=true) then
801
802 begin
803 select meaning into l_cd_meaning_old
804 from hr_lookups
805 where lookup_type='BEN_SUBMIT_STAT'
806 and lookup_code=p_grp_bdgt_old.submit_cd;
807 exception
808 when no_data_found then
809 l_cd_meaning_old:=null;
810 end;
811
812 begin
813 select meaning into l_cd_meaning_new
814 from hr_lookups
815 where lookup_type='BEN_SUBMIT_STAT'
816 and lookup_code=l_grp_bdgt_new.submit_cd;
817 exception
818 when no_data_found then
819 l_cd_meaning_new:=null;
820 end;
821
822 if g_debug then
823 hr_utility.set_location('Entering BAD:'||l_proc||l_cd_meaning_old||' '||l_cd_meaning_new, 108);
824 end if;
825
826 ben_cwb_audit_api.create_audit_entry
827 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
828 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
829 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
830 ,p_pl_id => l_grp_bdgt_new.group_pl_id
831 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
832 ,p_audit_type_cd => 'SU'
833 ,p_old_val_varchar => l_cd_meaning_old
834 ,p_new_val_varchar => l_cd_meaning_new
835 ,p_date_stamp => sysdate
836 ,p_change_made_by_person_id => l_person_id
837 ,p_cwb_audit_id => l_cwb_audit_id
838 ,p_object_version_number => l_object_version_number
839 );
840 end if;
841 end if;
842 if( ((p_grp_bdgt_old.approval_cd is null)
843 and (l_grp_bdgt_new.approval_cd is not null))
844 or ((l_grp_bdgt_new.approval_cd is null)
845 and (p_grp_bdgt_old.approval_cd is not null))
846 or (p_grp_bdgt_old.approval_cd <> l_grp_bdgt_new.approval_cd) ) then
847 if(ben_cwb_audit_api.return_lookup_validity('AS')=true) then
848
849
850 begin
851 select meaning into l_cd_meaning_old
852 from hr_lookups
853 where lookup_type='BEN_APPR_STAT'
854 and lookup_code=p_grp_bdgt_old.approval_cd;
855 exception
856 when no_data_found then
857 l_cd_meaning_old:=null;
858 end;
859
860 begin
861 select meaning into l_cd_meaning_new
862 from hr_lookups
863 where lookup_type='BEN_APPR_STAT'
864 and lookup_code=l_grp_bdgt_new.approval_cd;
865 exception
866 when no_data_found then
867 l_cd_meaning_new:=null;
868 end;
869
870 if g_debug then
871 hr_utility.set_location('Entering AS:'||l_proc||l_cd_meaning_old||' '||l_cd_meaning_new, 109);
872 end if;
873
874 ben_cwb_audit_api.create_audit_entry
875 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
876 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
877 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
878 ,p_pl_id => l_grp_bdgt_new.group_pl_id
879 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
880 ,p_audit_type_cd => 'AS'
881 ,p_old_val_varchar => l_cd_meaning_old
882 ,p_new_val_varchar => l_cd_meaning_new
883 ,p_date_stamp => sysdate
884 ,p_change_made_by_person_id => l_person_id
885 ,p_cwb_audit_id => l_cwb_audit_id
886 ,p_object_version_number => l_object_version_number
887 );
888 end if;
889 end if;
890 if( ((p_grp_bdgt_old.approval_date is null)
891 and (l_grp_bdgt_new.approval_date is not null))
892 or ((l_grp_bdgt_new.approval_date is null)
893 and (p_grp_bdgt_old.approval_date is not null))
894 or (p_grp_bdgt_old.approval_date <> l_grp_bdgt_new.approval_date) ) then
895 if(ben_cwb_audit_api.return_lookup_validity('AD')=true) then
896 if g_debug then
897 hr_utility.set_location('Entering AD:'||l_proc||p_grp_bdgt_old.approval_date||' '||l_grp_bdgt_new.approval_date, 110);
898 end if;
899
900 ben_cwb_audit_api.create_audit_entry
901 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
902 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
903 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
904 ,p_pl_id => l_grp_bdgt_new.group_pl_id
905 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
906 ,p_audit_type_cd => 'AD'
907 ,p_old_val_date => p_grp_bdgt_old.approval_date
908 ,p_new_val_date => l_grp_bdgt_new.approval_date
909 ,p_date_stamp => sysdate
910 ,p_change_made_by_person_id => l_person_id
911 ,p_cwb_audit_id => l_cwb_audit_id
912 ,p_object_version_number => l_object_version_number
913 );
914 end if;
915 end if;
916 if( ((p_grp_bdgt_old.rsrv_val is null)
917 and (l_grp_bdgt_new.rsrv_val is not null))
918 or ((l_grp_bdgt_new.rsrv_val is null)
919 and (p_grp_bdgt_old.rsrv_val is not null))
920 or (p_grp_bdgt_old.rsrv_val <> l_grp_bdgt_new.rsrv_val) ) then
921 if(ben_cwb_audit_api.return_lookup_validity('RS')=true) then
922
923 if g_debug then
924 hr_utility.set_location('Entering RS:'||l_proc||p_grp_bdgt_old.rsrv_val||' '||l_grp_bdgt_new.rsrv_val, 111);
925 end if;
926
927 ben_cwb_audit_api.create_audit_entry
928 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
929 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
930 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
931 ,p_pl_id => l_grp_bdgt_new.group_pl_id
932 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
933 ,p_audit_type_cd => 'RS'
934 ,p_old_val_number => p_grp_bdgt_old.rsrv_val
935 ,p_new_val_number => l_grp_bdgt_new.rsrv_val
936 ,p_date_stamp => sysdate
937 ,p_change_made_by_person_id => l_person_id
938 ,p_cwb_audit_id => l_cwb_audit_id
939 ,p_object_version_number => l_object_version_number
940 );
941 end if;
942 end if;
943 if( ((p_grp_bdgt_old.access_cd is null)
944 and (l_grp_bdgt_new.access_cd is not null))
945 or ((l_grp_bdgt_new.access_cd is null)
946 and (p_grp_bdgt_old.access_cd is not null))
947 or (p_grp_bdgt_old.access_cd <> l_grp_bdgt_new.access_cd) ) then
948 if(ben_cwb_audit_api.return_lookup_validity('AC')=true) then
949
950 begin
951 select meaning into l_cd_meaning_old
952 from hr_lookups
953 where lookup_type='BEN_WS_ACC'
954 and lookup_code=p_grp_bdgt_old.access_cd;
955 exception
956 when no_data_found then
957 l_cd_meaning_old:= p_grp_bdgt_old.access_cd;
958 end;
959
960 begin
961 select meaning into l_cd_meaning_new
962 from hr_lookups
963 where lookup_type='BEN_WS_ACC'
964 and lookup_code=l_grp_bdgt_new.access_cd;
965 exception
966 when no_data_found then
967 l_cd_meaning_new:= l_grp_bdgt_new.access_cd;
968 end;
969
970 if g_debug then
971 hr_utility.set_location('Entering AC:'||l_proc||l_cd_meaning_old||' '||l_cd_meaning_new, 112);
972 end if;
973
974
975 ben_cwb_audit_api.create_audit_entry
976 (p_group_per_in_ler_id => l_grp_bdgt_new.group_per_in_ler_id
977 ,p_group_pl_id => l_grp_bdgt_new.group_pl_id
978 ,p_lf_evt_ocrd_dt => l_grp_bdgt_new.lf_evt_ocrd_dt
979 ,p_pl_id => l_grp_bdgt_new.group_pl_id
980 ,p_group_oipl_id => l_grp_bdgt_new.group_oipl_id
981 ,p_audit_type_cd => 'AC'
982 ,p_old_val_varchar => l_cd_meaning_old
983 ,p_new_val_varchar => l_cd_meaning_new
984 ,p_date_stamp => sysdate
985 ,p_change_made_by_person_id => l_person_id
986 ,p_cwb_audit_id => l_cwb_audit_id
987 ,p_object_version_number => l_object_version_number
988 );
989 end if;
990 end if;
991 if g_debug then
992 hr_utility.set_location('Exiting person groups '|| l_proc, 200);
993 end if;
994
995 end create_audit_record;
996 --
997 -- ----------------------------------------------------------------------------
998 -- |--------------------------< update_group_budget >-------------------------|
999 -- ----------------------------------------------------------------------------
1000 --
1001 procedure update_group_budget
1002 (p_validate in boolean default false
1003 ,p_group_per_in_ler_id in number
1004 ,p_group_pl_id in number
1005 ,p_group_oipl_id in number
1006 ,p_lf_evt_ocrd_dt in date default hr_api.g_date
1007 ,p_bdgt_pop_cd in varchar2 default hr_api.g_varchar2
1008 ,p_due_dt in date default hr_api.g_date
1009 ,p_access_cd in varchar2 default hr_api.g_varchar2
1010 ,p_approval_cd in varchar2 default hr_api.g_varchar2
1011 ,p_approval_date in date default hr_api.g_date
1012 ,p_approval_comments in varchar2 default hr_api.g_varchar2
1013 ,p_dist_bdgt_val in number default hr_api.g_number
1014 ,p_ws_bdgt_val in number default hr_api.g_number
1015 ,p_rsrv_val in number default hr_api.g_number
1016 ,p_dist_bdgt_mn_val in number default hr_api.g_number
1017 ,p_dist_bdgt_mx_val in number default hr_api.g_number
1018 ,p_dist_bdgt_incr_val in number default hr_api.g_number
1019 ,p_ws_bdgt_mn_val in number default hr_api.g_number
1020 ,p_ws_bdgt_mx_val in number default hr_api.g_number
1021 ,p_ws_bdgt_incr_val in number default hr_api.g_number
1022 ,p_rsrv_mn_val in number default hr_api.g_number
1023 ,p_rsrv_mx_val in number default hr_api.g_number
1024 ,p_rsrv_incr_val in number default hr_api.g_number
1025 ,p_dist_bdgt_iss_val in number default hr_api.g_number
1026 ,p_ws_bdgt_iss_val in number default hr_api.g_number
1027 ,p_dist_bdgt_iss_date in date default hr_api.g_date
1028 ,p_ws_bdgt_iss_date in date default hr_api.g_date
1029 ,p_ws_bdgt_val_last_upd_date in date default hr_api.g_date
1030 ,p_dist_bdgt_val_last_upd_date in date default hr_api.g_date
1031 ,p_rsrv_val_last_upd_date in date default hr_api.g_date
1032 ,p_ws_bdgt_val_last_upd_by in number default hr_api.g_number
1033 ,p_dist_bdgt_val_last_upd_by in number default hr_api.g_number
1034 ,p_rsrv_val_last_upd_by in number default hr_api.g_number
1035 ,p_submit_cd in varchar2 default hr_api.g_varchar2
1036 ,p_submit_date in date default hr_api.g_date
1037 ,p_submit_comments in varchar2 default hr_api.g_varchar2
1038 ,p_perf_min_max_edit in varchar2 default 'Y'
1039 ,p_object_version_number in out nocopy number
1040 ) is
1041 --
1042 -- Declare cursors and local variables
1043 --
1044 l_object_version_number number;
1045 l_grp_bdgt_old csr_grps%rowtype;
1046 --
1047 cursor csr_mn_mx_vals is
1048 select dist_bdgt_mn_val
1049 ,dist_bdgt_mx_val
1050 ,dist_bdgt_incr_val
1051 ,ws_bdgt_mn_val
1052 ,ws_bdgt_mx_val
1053 ,ws_bdgt_incr_val
1054 ,rsrv_mn_val
1055 ,rsrv_mx_val
1056 ,rsrv_incr_val
1057 ,group_per_in_ler_id
1058 from ben_cwb_person_groups grp
1059 where group_per_in_ler_id = p_group_per_in_ler_id
1060 and group_pl_id = p_group_pl_id
1061 and group_oipl_id = p_group_oipl_id;
1062 --
1063 l_mn_mx_vals csr_mn_mx_vals%rowtype;
1064 --
1065 l_proc varchar2(72) := g_package||'update_group_budget';
1066 begin
1067 if g_debug then
1068 hr_utility.set_location('Entering:'|| l_proc, 10);
1069 end if;
1070 --
1071 -- Issue a savepoint
1072 --
1073 savepoint update_group_budget;
1074 --
1075 -- select the existing values from table.
1076 open csr_grps(p_group_per_in_ler_id
1077 ,p_group_pl_id
1078 ,p_group_oipl_id);
1079 fetch csr_grps into l_grp_bdgt_old;
1080 close csr_grps;
1081 --
1082 -- Remember IN OUT parameter IN values
1083 --
1084 l_object_version_number := p_object_version_number;
1085 --
1086 -- Call Before Process User Hook
1087 --
1088 begin
1089 ben_cwb_person_groups_bk2.update_group_budget_b
1090 (p_group_per_in_ler_id => p_group_per_in_ler_id
1091 ,p_group_pl_id => p_group_pl_id
1092 ,p_group_oipl_id => p_group_oipl_id
1093 ,p_lf_evt_ocrd_dt => p_lf_evt_ocrd_dt
1094 ,p_bdgt_pop_cd => p_bdgt_pop_cd
1095 ,p_due_dt => p_due_dt
1096 ,p_access_cd => p_access_cd
1097 ,p_approval_cd => p_approval_cd
1098 ,p_approval_date => p_approval_date
1099 ,p_approval_comments => p_approval_comments
1100 ,p_dist_bdgt_val => p_dist_bdgt_val
1101 ,p_ws_bdgt_val => p_ws_bdgt_val
1102 ,p_rsrv_val => p_rsrv_val
1103 ,p_dist_bdgt_mn_val => p_dist_bdgt_mn_val
1104 ,p_dist_bdgt_mx_val => p_dist_bdgt_mx_val
1105 ,p_dist_bdgt_incr_val => p_dist_bdgt_incr_val
1106 ,p_ws_bdgt_mn_val => p_ws_bdgt_mn_val
1107 ,p_ws_bdgt_mx_val => p_ws_bdgt_mx_val
1108 ,p_ws_bdgt_incr_val => p_ws_bdgt_incr_val
1109 ,p_rsrv_mn_val => p_rsrv_mn_val
1110 ,p_rsrv_mx_val => p_rsrv_mx_val
1111 ,p_rsrv_incr_val => p_rsrv_incr_val
1112 ,p_dist_bdgt_iss_val => p_dist_bdgt_iss_val
1113 ,p_ws_bdgt_iss_val => p_ws_bdgt_iss_val
1114 ,p_dist_bdgt_iss_date => p_dist_bdgt_iss_date
1115 ,p_ws_bdgt_iss_date => p_ws_bdgt_iss_date
1116 ,p_ws_bdgt_val_last_upd_date => p_ws_bdgt_val_last_upd_date
1117 ,p_dist_bdgt_val_last_upd_date => p_dist_bdgt_val_last_upd_date
1118 ,p_rsrv_val_last_upd_date => p_rsrv_val_last_upd_date
1119 ,p_ws_bdgt_val_last_upd_by => p_ws_bdgt_val_last_upd_by
1120 ,p_dist_bdgt_val_last_upd_by => p_dist_bdgt_val_last_upd_by
1121 ,p_rsrv_val_last_upd_by => p_rsrv_val_last_upd_by
1122 ,p_submit_cd => p_submit_cd
1123 ,p_submit_date => p_submit_date
1124 ,p_submit_comments => p_submit_comments
1125 ,p_object_version_number => l_object_version_number
1126 );
1127 exception
1128 when hr_api.cannot_find_prog_unit then
1129 hr_api.cannot_find_prog_unit_error
1130 (p_module_name => 'update_group_budget'
1131 ,p_hook_type => 'BP'
1132 );
1133 end;
1134 --
1135 -- Validation in addition to Row Handlers
1136 --
1137
1138 -- Min Max Edits
1139 --
1140 if p_perf_min_max_edit = 'Y' then
1141 --
1142 open csr_mn_mx_vals;
1143 fetch csr_mn_mx_vals into l_mn_mx_vals;
1144 close csr_mn_mx_vals;
1145 --
1146 if (p_dist_bdgt_mx_val is null or
1147 p_dist_bdgt_mx_val <> hr_api.g_number) then
1148 l_mn_mx_vals.dist_bdgt_mx_val := p_dist_bdgt_mx_val;
1149 end if;
1150 --
1151 if (p_dist_bdgt_mn_val is null or
1152 p_dist_bdgt_mn_val <> hr_api.g_number) then
1153 l_mn_mx_vals.dist_bdgt_mn_val := p_dist_bdgt_mn_val;
1154 end if;
1155 --
1156 if (p_dist_bdgt_incr_val is null or
1157 p_dist_bdgt_incr_val <> hr_api.g_number) then
1158 l_mn_mx_vals.dist_bdgt_incr_val := p_dist_bdgt_incr_val;
1159 end if;
1160 --
1161 --
1162 if g_debug then
1163 hr_utility.set_location(l_proc, 30);
1164 end if;
1165 --
1166 if (p_ws_bdgt_mx_val is null or
1167 p_ws_bdgt_mx_val <> hr_api.g_number) then
1168 l_mn_mx_vals.ws_bdgt_mx_val := p_ws_bdgt_mx_val;
1169 end if;
1170 --
1171 if (p_ws_bdgt_mn_val is null or
1172 p_ws_bdgt_mn_val <> hr_api.g_number) then
1173 l_mn_mx_vals.ws_bdgt_mn_val := p_ws_bdgt_mn_val;
1174 end if;
1175 --
1176 if (p_ws_bdgt_incr_val is null or
1177 p_ws_bdgt_incr_val <> hr_api.g_number) then
1178 l_mn_mx_vals.ws_bdgt_incr_val := p_ws_bdgt_incr_val;
1179 end if;
1180 --
1181 if g_debug then
1182 hr_utility.set_location(l_proc, 50);
1183 end if;
1184 --
1185 -- Check Min, Max and Inc for Dist Bdgt Val
1186 --
1187 check_min_max(p_val => p_dist_bdgt_val
1188 ,p_iss_val => p_dist_bdgt_iss_val
1189 ,p_min_val => l_mn_mx_vals.dist_bdgt_mn_val
1190 ,p_max_val => l_mn_mx_vals.dist_bdgt_mx_val
1191 ,p_incr_val => l_mn_mx_vals.dist_bdgt_incr_val
1192 ,p_group_per_in_ler_id => p_group_per_in_ler_id);
1193 --
1194 if g_debug then
1195 hr_utility.set_location(l_proc, 60);
1196 end if;
1197 --
1198 --
1199 -- Check Min, Max and Inc for Ws Bdgt Val
1200 --
1201 check_min_max(p_val => p_ws_bdgt_val
1202 ,p_iss_val => p_ws_bdgt_iss_val
1203 ,p_min_val => l_mn_mx_vals.ws_bdgt_mn_val
1204 ,p_max_val => l_mn_mx_vals.ws_bdgt_mx_val
1205 ,p_incr_val => l_mn_mx_vals.ws_bdgt_incr_val
1206 ,p_group_per_in_ler_id => p_group_per_in_ler_id);
1207 --
1208 if g_debug then
1209 hr_utility.set_location(l_proc, 70);
1210 end if;
1211 --
1212 end if; -- of p_perf_min_max_edit
1213 --
1214 if p_rsrv_val is not null and
1215 p_rsrv_val <> hr_api.g_number and
1216 p_rsrv_val <> nvl(l_grp_bdgt_old.rsrv_val, hr_api.g_number) then
1217 --
1218 if l_mn_mx_vals.group_per_in_ler_id is null then
1219 open csr_mn_mx_vals;
1220 fetch csr_mn_mx_vals into l_mn_mx_vals;
1221 close csr_mn_mx_vals;
1222 end if;
1223 --
1224 if (p_rsrv_mx_val is null or
1225 p_rsrv_mx_val <> hr_api.g_number) then
1226 l_mn_mx_vals.rsrv_mx_val := p_rsrv_mx_val;
1227 end if;
1228 --
1229 if (p_rsrv_mn_val is null or
1230 p_rsrv_mn_val <> hr_api.g_number) then
1231 l_mn_mx_vals.rsrv_mn_val := p_rsrv_mn_val;
1232 end if;
1233 --
1234 if (p_rsrv_incr_val is null or
1235 p_rsrv_incr_val <> hr_api.g_number) then
1236 l_mn_mx_vals.rsrv_incr_val := p_rsrv_incr_val;
1237 end if;
1238 --
1239 -- Check Min, Max and Inc for Rsrv Val
1240 --
1241 check_min_max(p_val => p_rsrv_val
1242 ,p_iss_val => null
1243 ,p_min_val => l_mn_mx_vals.rsrv_mn_val
1244 ,p_max_val => l_mn_mx_vals.rsrv_mx_val
1245 ,p_incr_val => l_mn_mx_vals.rsrv_incr_val
1246 ,p_group_per_in_ler_id => p_group_per_in_ler_id);
1247 --
1248 end if;
1249 --
1250 -- Process Logic
1251 --
1252 ben_cpg_upd.upd
1253 (p_group_per_in_ler_id => p_group_per_in_ler_id
1254 ,p_group_pl_id => p_group_pl_id
1255 ,p_group_oipl_id => p_group_oipl_id
1256 ,p_lf_evt_ocrd_dt => p_lf_evt_ocrd_dt
1257 ,p_bdgt_pop_cd => p_bdgt_pop_cd
1258 ,p_due_dt => p_due_dt
1259 ,p_access_cd => p_access_cd
1260 ,p_approval_cd => p_approval_cd
1261 ,p_approval_date => p_approval_date
1262 ,p_approval_comments => p_approval_comments
1263 ,p_dist_bdgt_val => p_dist_bdgt_val
1264 ,p_ws_bdgt_val => p_ws_bdgt_val
1265 ,p_rsrv_val => p_rsrv_val
1266 ,p_dist_bdgt_mn_val => p_dist_bdgt_mn_val
1267 ,p_dist_bdgt_mx_val => p_dist_bdgt_mx_val
1268 ,p_dist_bdgt_incr_val => p_dist_bdgt_incr_val
1269 ,p_ws_bdgt_mn_val => p_ws_bdgt_mn_val
1270 ,p_ws_bdgt_mx_val => p_ws_bdgt_mx_val
1271 ,p_ws_bdgt_incr_val => p_ws_bdgt_incr_val
1272 ,p_rsrv_mn_val => p_rsrv_mn_val
1273 ,p_rsrv_mx_val => p_rsrv_mx_val
1274 ,p_rsrv_incr_val => p_rsrv_incr_val
1275 ,p_dist_bdgt_iss_val => p_dist_bdgt_iss_val
1276 ,p_ws_bdgt_iss_val => p_ws_bdgt_iss_val
1277 ,p_dist_bdgt_iss_date => p_dist_bdgt_iss_date
1278 ,p_ws_bdgt_iss_date => p_ws_bdgt_iss_date
1279 ,p_ws_bdgt_val_last_upd_date => p_ws_bdgt_val_last_upd_date
1280 ,p_dist_bdgt_val_last_upd_date => p_dist_bdgt_val_last_upd_date
1281 ,p_rsrv_val_last_upd_date => p_rsrv_val_last_upd_date
1282 ,p_ws_bdgt_val_last_upd_by => p_ws_bdgt_val_last_upd_by
1283 ,p_dist_bdgt_val_last_upd_by => p_dist_bdgt_val_last_upd_by
1284 ,p_rsrv_val_last_upd_by => p_rsrv_val_last_upd_by
1285 ,p_submit_cd => p_submit_cd
1286 ,p_submit_date => p_submit_date
1287 ,p_submit_comments => p_submit_comments
1288 ,p_object_version_number => l_object_version_number
1289 );
1290 --
1291 -- Call After Process User Hook
1292 --
1293 begin
1294 ben_cwb_person_groups_bk2.update_group_budget_a
1295 (p_group_per_in_ler_id => p_group_per_in_ler_id
1296 ,p_group_pl_id => p_group_pl_id
1297 ,p_group_oipl_id => p_group_oipl_id
1298 ,p_lf_evt_ocrd_dt => p_lf_evt_ocrd_dt
1299 ,p_bdgt_pop_cd => p_bdgt_pop_cd
1300 ,p_due_dt => p_due_dt
1301 ,p_access_cd => p_access_cd
1302 ,p_approval_cd => p_approval_cd
1303 ,p_approval_date => p_approval_date
1304 ,p_approval_comments => p_approval_comments
1305 ,p_dist_bdgt_val => p_dist_bdgt_val
1306 ,p_ws_bdgt_val => p_ws_bdgt_val
1307 ,p_rsrv_val => p_rsrv_val
1308 ,p_dist_bdgt_mn_val => p_dist_bdgt_mn_val
1309 ,p_dist_bdgt_mx_val => p_dist_bdgt_mx_val
1310 ,p_dist_bdgt_incr_val => p_dist_bdgt_incr_val
1311 ,p_ws_bdgt_mn_val => p_ws_bdgt_mn_val
1312 ,p_ws_bdgt_mx_val => p_ws_bdgt_mx_val
1313 ,p_ws_bdgt_incr_val => p_ws_bdgt_incr_val
1314 ,p_rsrv_mn_val => p_rsrv_mn_val
1315 ,p_rsrv_mx_val => p_rsrv_mx_val
1316 ,p_rsrv_incr_val => p_rsrv_incr_val
1317 ,p_dist_bdgt_iss_val => p_dist_bdgt_iss_val
1318 ,p_ws_bdgt_iss_val => p_ws_bdgt_iss_val
1319 ,p_dist_bdgt_iss_date => p_dist_bdgt_iss_date
1320 ,p_ws_bdgt_iss_date => p_ws_bdgt_iss_date
1321 ,p_ws_bdgt_val_last_upd_date => p_ws_bdgt_val_last_upd_date
1322 ,p_dist_bdgt_val_last_upd_date => p_dist_bdgt_val_last_upd_date
1323 ,p_rsrv_val_last_upd_date => p_rsrv_val_last_upd_date
1324 ,p_ws_bdgt_val_last_upd_by => p_ws_bdgt_val_last_upd_by
1325 ,p_dist_bdgt_val_last_upd_by => p_dist_bdgt_val_last_upd_by
1326 ,p_rsrv_val_last_upd_by => p_rsrv_val_last_upd_by
1327 ,p_submit_cd => p_submit_cd
1328 ,p_submit_date => p_submit_date
1329 ,p_submit_comments => p_submit_comments
1330 ,p_object_version_number => l_object_version_number
1331 );
1332 exception
1333 when hr_api.cannot_find_prog_unit then
1334 hr_api.cannot_find_prog_unit_error
1335 (p_module_name => 'update_group_budget'
1336 ,p_hook_type => 'AP'
1337 );
1338 end;
1339 --
1340 -- When in validation only mode raise the Validate_Enabled exception
1341 --
1342 if p_validate then
1343 raise hr_api.validate_enabled;
1344 end if;
1345 --
1346 -- Update is successful. So call the budget summary update.
1347 update_group_budget_summary
1348 (p_grp_bdgt_old => l_grp_bdgt_old
1349 ,p_dist_bdgt_val => p_dist_bdgt_val
1350 ,p_dist_bdgt_iss_val => p_dist_bdgt_iss_val
1351 ,p_ws_bdgt_val => p_ws_bdgt_val
1352 ,p_ws_bdgt_iss_val => p_ws_bdgt_iss_val);
1353 --
1354 --calling the audit log function to write in the audit log
1355 create_audit_record(l_grp_bdgt_old);
1356 -- Set all IN OUT and OUT parameters with out values
1357 --
1358 p_object_version_number := l_object_version_number;
1359 --
1360 if g_debug then
1361 hr_utility.set_location(' Leaving:'||l_proc, 80);
1362 end if;
1363 exception
1364 when hr_api.validate_enabled then
1365 --
1366 -- As the Validate_Enabled exception has been raised
1367 -- we must rollback to the savepoint
1368 --
1369 rollback to update_group_budget;
1370 --
1371 -- Reset IN OUT parameters and set OUT parameters
1372 -- (Any key or derived arguments must be set to null
1373 -- when validation only mode is being used.)
1374 --
1375 if g_debug then
1376 hr_utility.set_location(' Leaving:'||l_proc, 90);
1377 end if;
1378 when others then
1379 --
1380 -- A validation or unexpected error has occured
1381 --
1382 rollback to update_group_budget;
1383 --
1384 -- Reset IN OUT parameters and set all
1385 -- OUT parameters, including warnings, to null
1386 --
1387 if g_debug then
1388 hr_utility.set_location(' Leaving:'||l_proc, 99);
1389 end if;
1390 raise;
1391 end update_group_budget;
1392 --
1393 --
1394 -- ----------------------------------------------------------------------------
1395 -- |-------------------------< delete_group_budget >--------------------------|
1396 -- ----------------------------------------------------------------------------
1397 --
1398 procedure delete_group_budget
1399 (p_validate in boolean default false
1400 ,p_group_per_in_ler_id in number
1401 ,p_group_pl_id in number
1402 ,p_group_oipl_id in number
1403 ,p_object_version_number in out nocopy number
1404 ,p_update_summary in boolean default false
1405 ) is
1406 --
1407 -- Declare cursors and local variables
1408 --
1409 l_object_version_number number;
1410 l_proc varchar2(72) := g_package||'delete_group_budget';
1411 l_grp_bdgt_old csr_grps%rowtype;
1412 begin
1413 if g_debug then
1414 hr_utility.set_location('Entering:'|| l_proc, 10);
1415 end if;
1416 --
1417 -- Issue a savepoint
1418 --
1419 savepoint delete_group_budget;
1420 --
1421 open csr_grps(p_group_per_in_ler_id
1422 ,p_group_pl_id
1423 ,p_group_oipl_id);
1424 fetch csr_grps into l_grp_bdgt_old;
1425 close csr_grps;
1426 --
1427 -- Remember IN OUT parameter IN values
1428 --
1429 --
1430 l_object_version_number := p_object_version_number;
1431 --
1432 -- Call Before Process User Hook
1433 --
1434 begin
1435 BEN_CWB_PERSON_GROUPS_BK3.delete_group_budget_b
1436 (p_group_per_in_ler_id => p_group_per_in_ler_id
1437 ,p_group_pl_id => p_group_pl_id
1438 ,p_group_oipl_id => p_group_oipl_id
1439 ,p_object_version_number => l_object_version_number
1440 );
1441 exception
1442 when hr_api.cannot_find_prog_unit then
1443 hr_api.cannot_find_prog_unit_error
1444 (p_module_name => 'delete_group_budget'
1445 ,p_hook_type => 'BP'
1446 );
1447 end;
1448 --
1449 -- Validation in addition to Row Handlers
1450 --
1451
1452 --
1453 -- Process Logic
1454 --
1455 ben_cpg_del.del
1456 (p_group_per_in_ler_id => p_group_per_in_ler_id
1457 ,p_group_pl_id => p_group_pl_id
1458 ,p_group_oipl_id => p_group_oipl_id
1459 ,p_object_version_number => l_object_version_number
1460 );
1461 --
1462 -- Call After Process User Hook
1463 --
1464 begin
1465 ben_cwb_person_groups_bk3.delete_group_budget_a
1466 (p_group_per_in_ler_id => p_group_per_in_ler_id
1467 ,p_group_pl_id => p_group_pl_id
1468 ,p_group_oipl_id => p_group_oipl_id
1469 ,p_object_version_number => l_object_version_number
1470 );
1471 exception
1472 when hr_api.cannot_find_prog_unit then
1473 hr_api.cannot_find_prog_unit_error
1474 (p_module_name => 'delete_group_budget'
1475 ,p_hook_type => 'AP'
1476 );
1477 end;
1478 --
1479 -- When in validation only mode raise the Validate_Enabled exception
1480 --
1481 if p_validate then
1482 raise hr_api.validate_enabled;
1483 end if;
1484 --
1485 -- Delete is successful. So call the budget summary update.
1486 --
1487 if p_update_summary then
1488 update_group_budget_summary
1489 (p_grp_bdgt_old => l_grp_bdgt_old
1490 ,p_dist_bdgt_val => null
1491 ,p_dist_bdgt_iss_val => null
1492 ,p_ws_bdgt_val => null
1493 ,p_ws_bdgt_iss_val => null);
1494 end if;
1495 --
1496 if g_debug then
1497 hr_utility.set_location(' Leaving:'||l_proc, 70);
1498 end if;
1499 exception
1500 when hr_api.validate_enabled then
1501 --
1502 -- As the Validate_Enabled exception has been raised
1503 -- we must rollback to the savepoint
1504 --
1505 rollback to delete_group_budget;
1506 --
1507 if g_debug then
1508 hr_utility.set_location(' Leaving:'||l_proc, 80);
1509 end if;
1510 when others then
1511 --
1512 -- A validation or unexpected error has occured
1513 --
1514 rollback to delete_group_budget;
1515 --
1516 -- Reset IN OUT parameters and set all
1517 -- OUT parameters, including warnings, to null
1518 --
1519 if g_debug then
1520 hr_utility.set_location(' Leaving:'||l_proc, 90);
1521 end if;
1522 raise;
1523 end delete_group_budget;
1524 --
1525 --
1526 end ben_cwb_person_groups_api;