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