[Home] [Help]
PACKAGE BODY: APPS.PAY_TIME_DEFINITION_API
Source
1 Package Body PAY_TIME_DEFINITION_API as
2 /* $Header: pytdfapi.pkb 120.5 2012/01/19 11:26:56 rpahune ship $ */
3 --
4 -- Package Variables
5 --
6 g_package varchar2(33) := ' PAY_TIME_DEFINITION_API.';
7 --
8 -- ----------------------------------------------------------------------------
9 -- |---------------------------< generate_time_periods >----------------------|
10 -- ----------------------------------------------------------------------------
11 --
12 procedure generate_time_periods
13 (p_time_definition_id in number
14 ) is
15 --
16 l_earliest_start_date date;
17 l_latest_end_date date;
18 l_no_of_existing_periods number;
19
20 l_definition_type varchar2(30);
21 l_start_date date;
22 l_period_type varchar2 (30);
23 l_legislation_code varchar2 (30);
24 l_business_group_id number (15);
25 l_number_of_years number (9);
26 l_period_time_definition_id number (9);
27
28 l_time_definition_id_to_pass number (9);
29
30 l_first_period_start_date date;
31 l_first_period_end_date date;
32 l_gen_first_period_start_date date;
33 l_gen_first_period_end_date date;
34 l_period_start_date date;
35 l_period_end_date date;
36
37 l_next_period_start_date date;
38
39 l_multiple number;
40 l_base_period_type varchar2(1);
41 l_period_number number;
42 l_period_name per_time_periods.period_name%type ;
43 l_end_years_marker date;
44 l_display_period_type per_time_period_types.display_period_type%type ;
45 l_date date;
46
47 l_next_leg_start_date date;
48 l_leg_start_date date;
49
50 l_day_adj_multiple number;
51 l_period_unit_multiple number;
52
53 l_dpit_period_unit varchar2(30);
54 l_dpit_period_type varchar2(30);
55 l_dpit_day_adjustment varchar2(30);
56
57 l_proc varchar2(72) := g_package||'generate_time_periods';
58
59 WEEKLY CONSTANT varchar2(1) := 'W';
60 MONTHLY CONSTANT varchar2(1) := 'M';
61 SEMIMONTHLY CONSTANT varchar2(1) := 'S';
62
63 --
64 cursor csr_time_definition_details is
65 select nvl(definition_type,'P'),
66 start_date,
67 period_type,
68 business_group_id,
69 legislation_code,
70 number_of_years,
71 period_time_definition_id
72 from pay_time_definitions
73 where time_definition_id = p_time_definition_id;
74
75 cursor csr_existing_period_details is
76 select min(start_date),
77 max(end_date),
78 count(time_period_id)
79 from per_time_periods ptp
80 where ptp.time_definition_id = p_time_definition_id;
81
82 cursor csr_first_period_end_date is
83 select end_date
84 from per_time_periods ptp
85 where ptp.time_definition_id = p_time_definition_id
86 and start_date = l_first_period_start_date;
87
88 --
89 function add_multiples
90 (p_date in date,
91 p_base_period_type in varchar2,
92 p_multiple in number,
93 p_first_period_end_date in date
94 ) return date is
95 --
96 l_ret_date date;
97 --
98 begin
99 --
100 if p_base_period_type = WEEKLY then
101 return (p_date + (7 * p_multiple ));
102 elsif p_base_period_type = MONTHLY then
103 return (add_months(p_date , p_multiple));
104 else
105 if p_multiple > 0 then
106 l_ret_date := hr_payrolls.next_semi_month(p_date, p_first_period_end_date);
107 return l_ret_date;
108 else
109 l_ret_date := hr_payrolls.prev_semi_month(p_date, p_first_period_end_date);
110 return l_ret_date;
111 end if;
112 end if;
113 end add_multiples;
114 --
115 --
116 Procedure get_period_number(
117 p_time_definition_id in number,
118 p_first_period_end_date in date,
119 p_legislation_code in varchar2,
120 p_business_group_id in number,
121 p_leg_start_date out nocopy date,
122 p_period_number out nocopy number
123 ) is
124
125 l_leg_start_date date;
126 l_next_start_date date;
127 no_periods number;
128 begin
129 --
130 begin
131 select to_date(plr.rule_mode || '/' ||
132 to_char(p_first_period_end_date, 'YYYY'), 'DD/MM/YYYY')
133 into l_leg_start_date
134 from pay_legislation_rules plr
135 where plr.rule_type = 'L'
136 and plr.legislation_code = nvl(p_legislation_code,
137 hr_api.return_legislation_code(p_business_group_id) );
138 exception
139 when NO_DATA_FOUND then
140 l_leg_start_date := to_date('01/01/' ||
141 to_char(p_first_period_end_date, 'YYYY'), 'DD/MM/YYYY');
142 end;
143 --
144 if l_leg_start_date > p_first_period_end_date then
145 l_leg_start_date := add_months(l_leg_start_date, -12);
146 end if;
147 --
148 no_periods := 0;
149
150 l_next_start_date := l_leg_start_date;
151 while p_first_period_end_date >= l_next_start_date loop
152 l_next_start_date := pay_core_dates.get_time_definition_date(
153 p_time_def_id =>p_time_definition_id,
154 p_effective_date =>l_next_start_date,
155 p_bus_grp =>p_business_group_id);
156 no_periods := no_periods + 1;
157 end loop;
158 --
159 p_period_number := no_periods;
160 p_leg_start_date := l_leg_start_date;
161 end ;
162 --
163 --
164 begin
165 --
166 -- Get the time definition details.
167
168 open csr_time_definition_details;
169
170 fetch csr_time_definition_details
171 into l_definition_type,
172 l_start_date,
173 l_period_type,
174 l_business_group_id,
175 l_legislation_code,
176 l_number_of_years,
177 l_period_time_definition_id;
178
179 if csr_time_definition_details%notfound then
180
181 hr_utility.set_location(l_proc, 20);
182 close csr_time_definition_details;
183 fnd_message.set_name('PAY','PAY_34056_FLSA_INV_TIME_DEF_ID');
184 fnd_message.raise_error;
185
186 end if;
187
188 close csr_time_definition_details;
189 hr_utility.set_location(l_proc, 30);
190
191 if l_definition_type in ('P', 'E', 'C') then
192
193 hr_utility.set_location(l_proc, 40);
194 return;
195
196 end if;
197
198 --
199 if l_period_type is not null then
200 l_time_definition_id_to_pass := p_time_definition_id;
201 hr_payrolls.get_period_details
202 (p_proc_period_type => l_period_type,
203 p_base_period_type => l_base_period_type,
204 p_multiple => l_multiple);
205
206 elsif l_period_time_definition_id is not null then
207 l_time_definition_id_to_pass := l_period_time_definition_id;
208 end if;
209
210 hr_utility.set_location(l_proc, 50);
211
212 -- Check if there are already periods existing for this time definition.
213 -- If the periods are already existing the user is trying to increase
214 -- number of years of the time definition.
215
216 open csr_existing_period_details;
217 fetch csr_existing_period_details into l_earliest_start_date,
218 l_latest_end_date, l_no_of_existing_periods;
219 close csr_existing_period_details;
220
221 if l_no_of_existing_periods = 0 then
222 -- Time Periods do not exist for the time definition.
223 hr_utility.set_location(l_proc, 60);
224
225 l_first_period_start_date := l_start_date;
226 if l_period_time_definition_id is not null then
227 -- if Time Definition is static and point in time definition id is not null
228 l_next_period_start_date := pay_core_dates.get_time_definition_date(
229 p_time_def_id =>l_time_definition_id_to_pass,
230 p_effective_date =>l_start_date,
231 p_bus_grp =>l_business_group_id);
232
233 l_first_period_end_date := l_next_period_start_date -1;
234
235 hr_utility.set_location(l_proc, 70);
236
237 elsif l_period_type is not null then
238 -- if Time Definition is static and period type is not null
239 l_first_period_end_date := add_multiples
240 ( p_date => l_start_date - 1 ,
241 p_base_period_type => l_base_period_type,
242 p_multiple => l_multiple,
243 p_first_period_end_date => l_start_date - 1
244 ) ;
245 hr_utility.set_location(l_proc, 80);
246 end if;
247 l_gen_first_period_start_date := l_first_period_start_date;
248 l_gen_first_period_end_date := l_first_period_end_date;
249
250 else
251
252 -- Time Periods have been generated before.
253
254 hr_utility.set_location(l_proc, 90);
255
256 l_first_period_start_date := l_earliest_start_date;
257
258 open csr_first_period_end_date;
259 fetch csr_first_period_end_date into l_first_period_end_date;
260 close csr_first_period_end_date;
261
262 l_gen_first_period_start_date := l_latest_end_date + 1;
263
264 if l_period_time_definition_id is not null then
265 l_next_period_start_date := pay_core_dates.get_time_definition_date(
266 p_time_def_id =>l_time_definition_id_to_pass,
267 p_effective_date =>l_gen_first_period_start_date,
268 p_bus_grp =>l_business_group_id);
269
270 l_gen_first_period_end_date := l_next_period_start_date -1;
271 hr_utility.set_location(l_proc, 100);
272 elsif l_period_type is not null then
273
274 l_gen_first_period_end_date := add_multiples
275 ( p_date => l_gen_first_period_start_date - 1 ,
276 p_base_period_type => l_base_period_type,
277 p_multiple => l_multiple,
278 p_first_period_end_date => l_first_period_end_date
279 ) ;
280 hr_utility.set_location(l_proc, 110);
281 end if;
282
283 end if;
284 --
285 hr_utility.set_location(l_proc, 160);
286
287 if l_gen_first_period_end_date < l_gen_first_period_start_date then
288 fnd_message.set_name('PAY','PAY_33414_FLSA_CROSS_VAL3');
289 fnd_message.raise_error;
290 End if;
291
292
293 -- Generate the periods.
294
295 -- Derive the period number of the first period.
296
297 get_period_number(
298 p_time_definition_id => l_time_definition_id_to_pass,
299 p_first_period_end_date => l_gen_first_period_end_date,
300 p_legislation_code => l_legislation_code,
301 p_business_group_id => l_business_group_id,
302 p_leg_start_date => l_leg_start_date,
303 p_period_number => l_period_number);
304
305
306 -- Insert the time periods for the number of years required
307
308 hr_utility.set_location(l_proc, 120);
309
310 l_end_years_marker := add_months(l_first_period_start_date,
311 (12 * l_number_of_years) );
312
313 l_next_leg_start_date := add_months(l_leg_start_date, 12);
314
315 l_period_start_date := l_gen_first_period_start_date;
316 l_period_end_date := l_gen_first_period_end_date;
317
318 while (l_period_start_date < l_end_years_marker) loop
319
320 hr_utility.set_location(l_proc, 130);
321
322 begin
323
324 select NVL(tpt.display_period_type, l_period_type)
325 into l_display_period_type
326 from per_time_period_types_vl tpt
327 where tpt.period_type = l_period_type;
328
329 l_period_name := to_char(l_period_number) || ' '
330 || to_char(l_period_end_date, 'YYYY') || ' '
331 || l_display_period_type ;
332
333 hr_utility.set_location(l_proc, 140);
334
335 exception
336 when NO_DATA_FOUND then
337 l_period_name := to_char(l_period_number) || ' '
338 || to_char(l_period_end_date, 'YYYY') || ' '
339 ;
340 l_period_type := 'Dynamic Period';
341 hr_utility.set_location(l_proc, 232);
342 end;
343
344 if l_period_time_definition_id is not null then
345 l_next_period_start_date := pay_core_dates.get_time_definition_date(
346 p_time_def_id =>l_time_definition_id_to_pass,
347 p_effective_date =>l_period_start_date,
348 p_bus_grp =>l_business_group_id);
349
350 l_period_end_date := l_next_period_start_date -1;
351 hr_utility.set_location(l_proc, 150);
352
353 else
354 if l_base_period_type = SEMIMONTHLY then
355
356 l_next_period_start_date := add_multiples
357 ( p_date => l_period_end_date,
358 p_base_period_type => l_base_period_type,
359 p_multiple => l_multiple,
360 p_first_period_end_date => l_first_period_end_date
361 );
362 if l_period_start_date = l_gen_first_period_start_date then
363 l_period_end_date := l_period_start_date +14;
364 else
365 l_period_end_date := l_next_period_start_date;
366 end if;
367 else
368
369 l_next_period_start_date := add_multiples
370 ( p_date => l_period_start_date,
371 p_base_period_type => l_base_period_type,
372 p_multiple => l_multiple,
373 p_first_period_end_date => l_first_period_end_date
374 );
375
376 l_period_end_date := l_next_period_start_date -1;
377 hr_utility.set_location(l_proc, 160);
378 end if;
379
380 end if;
381
382 if l_period_end_date < l_period_start_date then
383 fnd_message.set_name('PAY','PAY_33414_FLSA_CROSS_VAL3');
384 fnd_message.raise_error;
385 End if;
386
387 insert into per_time_periods
388 (time_period_id,
389 start_date,
390 end_date,
391 period_type,
392 period_num,
393 period_name,
394 time_definition_id
395 )
396 select
397 per_time_periods_s.nextval,
398 l_period_start_date,
399 l_period_end_date,
400 l_period_type,
401 l_period_number,
402 l_period_name,
403 p_time_definition_id
404 from sys.dual;
405
406 l_period_start_date := l_period_end_date + 1 ;
407
408 if l_period_end_date >= l_next_leg_start_date then
409
410 hr_utility.set_location(l_proc, 170);
411
412 l_period_number := 1;
413 l_next_leg_start_date := add_months(l_next_leg_start_date, 12);
414
415 else
416
417 hr_utility.set_location(l_proc, 180);
418
419 l_period_number := l_period_number + 1;
420
421 end if;
422
423 hr_utility.set_location(l_proc, 260);
424
425 end loop;
426
427 --
428 end generate_time_periods;
429 --
430 -- ----------------------------------------------------------------------------
431 -- |------------------------< CREATE_TIME_DEFINITION >------------------------|
432 -- ----------------------------------------------------------------------------
433 --
434 procedure create_time_definition
435 (p_validate in boolean default false
436 ,p_effective_date in date
437 ,p_short_name in varchar2
438 ,p_definition_name in varchar2
439 ,p_period_type in varchar2 default null
440 ,p_period_unit in varchar2 default null
441 ,p_day_adjustment in varchar2 default null
442 ,p_dynamic_code in varchar2 default null
443 ,p_business_group_id in number default null
444 ,p_legislation_code in varchar2 default null
445 ,p_definition_type in varchar2 default 'P'
446 ,p_number_of_years in number default null
447 ,p_start_date in date default null
448 ,p_period_time_definition_id in number default null
449 ,p_creator_id in number default null
450 ,p_creator_type in varchar2 default null
451 ,p_time_definition_id out nocopy number
452 ,p_object_version_number out nocopy number
453 ) is
454 --
455 -- Declare cursors and local variables
456 --
457 l_effective_date date;
458 l_start_date date;
459 l_proc varchar2(72) := g_package||'create_time_definition';
460 l_object_version_number number;
461 l_time_definition_id number;
462 begin
463 hr_utility.set_location('Entering:'|| l_proc, 10);
464 --
465 -- Issue a savepoint
466 --
467 savepoint create_time_definition;
468 --
469 -- Remember IN OUT parameter IN values
470 --
471 -- Truncate the time portion from all IN date parameters
472 --
473 l_effective_date := trunc(p_effective_date);
474 l_start_date := trunc(p_start_date);
475 --
476 -- Call Before Process User Hook
477 --
478 begin
479 pay_time_definition_bk1.create_time_definition_b
480 (p_effective_date => l_effective_date
481 ,p_short_name => p_short_name
482 ,p_definition_name => p_definition_name
483 ,p_period_type => p_period_type
484 ,p_period_unit => p_period_unit
485 ,p_day_adjustment => p_day_adjustment
486 ,p_dynamic_code => p_dynamic_code
487 ,p_business_group_id => p_business_group_id
488 ,p_legislation_code => p_legislation_code
489 ,p_definition_type => p_definition_type
490 ,p_number_of_years => p_number_of_years
491 ,p_start_date => l_start_date
492 ,p_period_time_definition_id => p_period_time_definition_id
493 ,p_creator_id => p_creator_id
494 ,p_creator_type => p_creator_type
495 );
496 exception
497 when hr_api.cannot_find_prog_unit then
498 hr_api.cannot_find_prog_unit_error
499 (p_module_name => 'create_time_definition'
500 ,p_hook_type => 'BP'
501 );
502 end;
503
504 --
505 -- Process Logic
506 --
507 pay_tdf_ins.ins
508 (p_effective_date => l_effective_date
509 ,p_short_name => p_short_name
510 ,p_definition_name => p_definition_name
511 ,p_period_type => p_period_type
512 ,p_period_unit => p_period_unit
513 ,p_day_adjustment => p_day_adjustment
514 ,p_dynamic_code => p_dynamic_code
515 ,p_business_group_id => p_business_group_id
516 ,p_legislation_code => p_legislation_code
517 ,p_definition_type => p_definition_type
518 ,p_number_of_years => p_number_of_years
519 ,p_start_date => l_start_date
520 ,p_period_time_definition_id => p_period_time_definition_id
521 ,p_creator_id => p_creator_id
522 ,p_creator_type => p_creator_type
523 ,p_time_definition_id => l_time_definition_id
524 ,p_object_version_number => l_object_version_number
525 );
526
527 generate_time_periods
528 (p_time_definition_id => l_time_definition_id);
529
530 --
531 -- Call After Process User Hook
532 --
533 begin
534 pay_time_definition_bk1.create_time_definition_a
535 (p_effective_date => l_effective_date
536 ,p_short_name => p_short_name
537 ,p_definition_name => p_definition_name
538 ,p_period_type => p_period_type
539 ,p_period_unit => p_period_unit
540 ,p_day_adjustment => p_day_adjustment
541 ,p_dynamic_code => p_dynamic_code
542 ,p_business_group_id => p_business_group_id
543 ,p_legislation_code => p_legislation_code
544 ,p_definition_type => p_definition_type
545 ,p_number_of_years => p_number_of_years
546 ,p_start_date => l_start_date
547 ,p_period_time_definition_id => p_period_time_definition_id
548 ,p_creator_id => p_creator_id
549 ,p_creator_type => p_creator_type
550 ,p_time_definition_id => l_time_definition_id
551 ,p_object_version_number => l_object_version_number
552 );
553 exception
554 when hr_api.cannot_find_prog_unit then
555 hr_api.cannot_find_prog_unit_error
556 (p_module_name => 'create_time_definition'
557 ,p_hook_type => 'AP'
558 );
559 end;
560 --
561 -- When in validation only mode raise the Validate_Enabled exception
562 --
563 if p_validate then
564 raise hr_api.validate_enabled;
565 end if;
566 --
567 -- Set all IN OUT and OUT parameters with out values
568 --
569 p_time_definition_id := l_time_definition_id;
570 p_object_version_number := l_object_version_number;
571 --
572 hr_utility.set_location(' Leaving:'||l_proc, 70);
573
574 exception
575 when hr_api.validate_enabled then
576 --
577 -- As the Validate_Enabled exception has been raised
578 -- we must rollback to the savepoint
579 --
580 rollback to create_time_definition;
581 --
582 -- Reset IN OUT parameters and set OUT parameters
583 --
584 p_time_definition_id := null;
585 p_object_version_number := null;
586
587 hr_utility.set_location(' Leaving:'||l_proc, 80);
588 when others then
589 --
590 -- A validation or unexpected error has occured
591 --
592 rollback to create_time_definition;
593 --
594 -- Reset IN OUT parameters and set all
595 -- OUT parameters, including warnings, to null
596 --
597 p_time_definition_id := null;
598 p_object_version_number := null;
599 hr_utility.set_location(' Leaving:'||l_proc, 90);
600 raise;
601 end create_time_definition;
602 --
603 -- ----------------------------------------------------------------------------
604 -- |------------------------< UPDATE_TIME_DEFINITION >------------------------|
605 -- ----------------------------------------------------------------------------
606 --
607 procedure update_time_definition
608 (p_validate in boolean default false
609 ,p_effective_date in date
610 ,p_time_definition_id in number
611 ,p_definition_name in varchar2 default hr_api.g_varchar2
612 ,p_period_type in varchar2 default hr_api.g_varchar2
613 ,p_period_unit in varchar2 default hr_api.g_varchar2
614 ,p_day_adjustment in varchar2 default hr_api.g_varchar2
615 ,p_dynamic_code in varchar2 default hr_api.g_varchar2
616 ,p_number_of_years in number default hr_api.g_number
617 ,p_start_date in date default hr_api.g_date
618 ,p_period_time_definition_id in number default hr_api.g_number
619 ,p_creator_id in number default hr_api.g_number
620 ,p_creator_type in varchar2 default hr_api.g_varchar2
621 ,p_object_version_number in out nocopy number
622 ) is
623 --
624 -- Declare cursors and local variables
625 --
626 l_effective_date date;
627 l_proc varchar2(72) := g_package||'update_time_definition';
628 l_object_version_number number;
629 l_regenerate_periods boolean;
630 l_delete_periods boolean;
631 l_in_out_parameter number;
632 l_definition_type varchar2(30);
633 --
634 cursor csr_definition_type is
635 select definition_type
636 from pay_time_definitions
637 where time_definition_id = p_time_definition_id;
638 --
639 begin
640 hr_utility.set_location('Entering:'|| l_proc, 10);
641 --
642 -- Issue a savepoint
643 --
644 savepoint update_time_definition;
645 --
646 -- Remember IN OUT parameter IN values
647 --
648 l_in_out_parameter := p_object_version_number;
649 --
650 l_object_version_number := p_object_version_number;
651 --
652 -- Truncate the time portion from all IN date parameters
653 --
654 l_effective_date := trunc(p_effective_date);
655
656 --
657 -- Call Before Process User Hook
658 --
659 begin
660 pay_time_definition_bk2.update_time_definition_b
661 (p_effective_date => l_effective_date
662 ,p_time_definition_id => p_time_definition_id
663 ,p_definition_name => p_definition_name
664 ,p_period_type => p_period_type
665 ,p_period_unit => p_period_unit
666 ,p_day_adjustment => p_day_adjustment
667 ,p_dynamic_code => p_dynamic_code
668 ,p_number_of_years => p_number_of_years
669 ,p_start_date => p_start_date
670 ,p_period_time_definition_id => p_period_time_definition_id
671 ,p_creator_id => p_creator_id
672 ,p_creator_type => p_creator_type
673 ,p_object_version_number => l_object_version_number
674 );
675 exception
676 when hr_api.cannot_find_prog_unit then
677 hr_api.cannot_find_prog_unit_error
678 (p_module_name => 'update_time_definition'
679 ,p_hook_type => 'BP'
680 );
681 end;
682
683 --
684 -- Process Logic
685 --
686
687 pay_tdf_upd.upd
688 (p_effective_date => l_effective_date
689 ,p_time_definition_id => p_time_definition_id
690 ,p_object_version_number => l_object_version_number
691 ,p_regenerate_periods => l_regenerate_periods
692 ,p_delete_periods => l_delete_periods
693 ,p_definition_name => p_definition_name
694 ,p_period_type => p_period_type
695 ,p_period_unit => p_period_unit
696 ,p_day_adjustment => p_day_adjustment
697 ,p_dynamic_code => p_dynamic_code
698 ,p_number_of_years => p_number_of_years
699 ,p_start_date => p_start_date
700 ,p_period_time_definition_id => p_period_time_definition_id
701 ,p_creator_id => p_creator_id
702 ,p_creator_type => p_creator_type
703 );
704
705 if l_delete_periods then
706
707 open csr_definition_type;
708 fetch csr_definition_type into l_definition_type;
709 close csr_definition_type;
710
711 if l_definition_type not in ('P', 'E', 'C') then
712
713 delete from per_time_periods
714 where time_definition_id = p_time_definition_id;
715
716 generate_time_periods
717 (p_time_definition_id => p_time_definition_id);
718
719 end if;
720
721 elsif l_regenerate_periods then
722
723 generate_time_periods
724 (p_time_definition_id => p_time_definition_id);
725
726 end if;
727
728 --
729 -- Call After Process User Hook
730 --
731 begin
732 pay_time_definition_bk2.update_time_definition_a
733 (p_effective_date => l_effective_date
734 ,p_time_definition_id => p_time_definition_id
735 ,p_definition_name => p_definition_name
736 ,p_period_type => p_period_type
737 ,p_period_unit => p_period_unit
738 ,p_day_adjustment => p_day_adjustment
739 ,p_dynamic_code => p_dynamic_code
740 ,p_number_of_years => p_number_of_years
741 ,p_start_date => p_start_date
742 ,p_period_time_definition_id => p_period_time_definition_id
743 ,p_creator_id => p_creator_id
744 ,p_creator_type => p_creator_type
745 ,p_object_version_number => l_object_version_number
746 );
747 exception
748 when hr_api.cannot_find_prog_unit then
749 hr_api.cannot_find_prog_unit_error
750 (p_module_name => 'update_time_definition'
751 ,p_hook_type => 'AP'
752 );
753 end;
754 --
755 -- When in validation only mode raise the Validate_Enabled exception
756 --
757 if p_validate then
758 raise hr_api.validate_enabled;
759 end if;
760 --
761 -- Set all IN OUT and OUT parameters with out values
762 --
763 p_object_version_number := l_object_version_number;
764 --
765 hr_utility.set_location(' Leaving:'||l_proc, 70);
766
767 exception
768 when hr_api.validate_enabled then
769 --
770 -- As the Validate_Enabled exception has been raised
771 -- we must rollback to the savepoint
772 --
773 rollback to update_time_definition;
774 --
775 -- Reset IN OUT parameters and set OUT parameters
776 -- (Any key or derived arguments must be set to null
777 -- when validation only mode is being used.)
778 --
779 p_object_version_number := l_in_out_parameter;
780
781 hr_utility.set_location(' Leaving:'||l_proc, 80);
782 when others then
783 --
784 -- A validation or unexpected error has occured
785 --
786 rollback to update_time_definition;
787 --
788 -- Reset IN OUT parameters and set all
789 -- OUT parameters, including warnings, to null
790 --
791 p_object_version_number := l_in_out_parameter;
792
793 hr_utility.set_location(' Leaving:'||l_proc, 90);
794 raise;
795 end update_time_definition;
796 --
797 -- ----------------------------------------------------------------------------
798 -- |--------------------------< delete_time_definition >----------------------|
799 -- ----------------------------------------------------------------------------
800 --
801 procedure delete_time_definition
802 (p_validate in boolean default false
803 ,p_effective_date in date
804 ,p_time_definition_id in number
805 ,p_object_version_number in number
806 ) is
807 --
808 -- Declare cursors and local variables
809 --
810 l_effective_date date;
811 l_proc varchar2(72) := g_package||'delete_time_definition';
812 begin
813 hr_utility.set_location('Entering:'|| l_proc, 10);
814 --
815 -- Issue a savepoint
816 --
817 savepoint delete_time_definition;
818 --
819 --
820 -- Truncate the time portion from all IN date parameters
821 --
822 l_effective_date := trunc(p_effective_date);
823
824 --
825 -- Call Before Process User Hook
826 --
827 begin
828 pay_time_definition_bk3.delete_time_definition_b
829 (p_effective_date => l_effective_date
830 ,p_time_definition_id => p_time_definition_id
831 ,p_object_version_number => p_object_version_number
832 );
833 exception
834 when hr_api.cannot_find_prog_unit then
835 hr_api.cannot_find_prog_unit_error
836 (p_module_name => 'delete_time_definition'
837 ,p_hook_type => 'BP'
838 );
839 end;
840
841 --
842 -- Process Logic
843 --
844
845 delete from per_time_periods
846 where time_definition_id = p_time_definition_id;
847
848 delete from pay_time_def_usages
849 where time_definition_id = p_time_definition_id;
850
851 pay_tdf_del.del
852 (p_time_definition_id => p_time_definition_id
853 ,p_object_version_number => p_object_version_number
854 );
855
856 --
857 -- Call After Process User Hook
858 --
859 begin
860 pay_time_definition_bk3.delete_time_definition_a
861 (p_effective_date => l_effective_date
862 ,p_time_definition_id => p_time_definition_id
863 ,p_object_version_number => p_object_version_number
864 );
865 exception
866 when hr_api.cannot_find_prog_unit then
867 hr_api.cannot_find_prog_unit_error
868 (p_module_name => 'delete_time_definition'
869 ,p_hook_type => 'AP'
870 );
871 end;
872 --
873 -- When in validation only mode raise the Validate_Enabled exception
874 --
875 if p_validate then
876 raise hr_api.validate_enabled;
877 end if;
878 --
879 hr_utility.set_location(' Leaving:'||l_proc, 70);
880 exception
881 when hr_api.validate_enabled then
882 --
883 -- As the Validate_Enabled exception has been raised
884 -- we must rollback to the savepoint
885 --
886 rollback to delete_time_definition;
887 --
888 hr_utility.set_location(' Leaving:'||l_proc, 80);
889 when others then
890 --
891 -- A validation or unexpected error has occured
892 --
893 rollback to delete_time_definition;
894 --
895 hr_utility.set_location(' Leaving:'||l_proc, 90);
896 raise;
897 end delete_time_definition;
898 --
899 end PAY_TIME_DEFINITION_API;