DBA Data[Home] [Help]

PACKAGE BODY: APPS.PER_ES_ABSENCE

Source


1 PACKAGE BODY per_es_absence AS
2 /* $Header: peesabsp.pkb 120.1.12000000.3 2007/06/21 15:23:26 rbaker ship $ */
3 --
4 -------------------------------------------------------------------------------
5 -- PERSON_ENTRY_CREATE
6 -------------------------------------------------------------------------------
7 PROCEDURE person_entry_create(p_business_group_id            IN NUMBER
8                              ,p_absence_attendance_id        IN NUMBER
9                              ,p_date_start                   IN DATE
10                              ,p_date_end                     IN DATE
11                              ,p_abs_information_category     IN VARCHAR2
12                              ,p_abs_information1             IN VARCHAR2
13                              ,p_abs_information2             IN VARCHAR2
14                              ,p_abs_information3             IN VARCHAR2
15                              ,p_abs_information4             IN VARCHAR2
16                              ,p_abs_information5             IN VARCHAR2
17                              ,p_abs_information6             IN VARCHAR2
18                              ,p_abs_information7             IN VARCHAR2
19                              ,p_abs_information8             IN VARCHAR2
20                              ,p_abs_information9             IN VARCHAR2
21                              ,p_abs_information10            IN VARCHAR2) IS
22     --
23     CURSOR csr_get_input_value_info(p_element_entry_id NUMBER
24                                    ,p_input_value_name VARCHAR2
25                                    ,p_date             DATE) IS
26     SELECT pivf.input_value_id  iv_start_date_id
27     FROM   pay_input_values_f    pivf
28           ,pay_element_entries_f peef
29           ,pay_element_types_f   petf
30     WHERE  peef.element_entry_id  = p_element_entry_id
31     AND    peef.element_type_id   = petf.element_type_id
32     AND    pivf.element_type_id   = petf.element_type_id
33     AND    pivf.name              = p_input_value_name
34     AND    p_date                  BETWEEN peef.effective_start_date
35                                    AND     peef.effective_end_date
36     AND    p_date                  BETWEEN petf.effective_start_date
37                                    AND     petf.effective_end_date
38     AND    p_date                  BETWEEN pivf.effective_start_date
39                                    AND     pivf.effective_end_date;
40     --
41     l_element_entry_id      pay_element_entries_f.element_entry_id%TYPE;
42     l_start_date_iv_id      pay_input_values_f.input_value_id%TYPE;
43     l_end_date_iv_id        pay_input_values_f.input_value_id%TYPE;
44     l_absence_id            pay_input_values_f.input_value_id%TYPE;
45     l_ptm_percentage_iv_id  pay_input_values_f.input_value_id%TYPE;
46     l_effective_start_date  pay_element_entries_f.effective_start_date%TYPE;
47     l_effective_end_date    pay_element_entries_f.effective_end_date%TYPE;
48     l_ovn                   pay_element_entries_f.object_version_number%TYPE;
49     l_o_start_dt            pay_element_entries_f.effective_start_date%TYPE;
50     l_o_end_dt              pay_element_entries_f.effective_end_date%TYPE;
51     l_o_warning             BOOLEAN;
52     --
53 
54 BEGIN
55    --
56    -- Added for GSI Bug 5472781
57    --
58    IF hr_utility.chk_product_install('Oracle Human Resources', 'ES') THEN
59      --
60     --
61     hr_utility.set_location('Entering hook Person_entry_Create',10);
62     --
63     IF  p_date_start IS NOT NULL THEN
64         --
65         IF  p_abs_information_category IN ('ES_TD','ES_M','ES_IE_AL','ES_PAR','ES_PTM') THEN
66             --
67 
68             hr_utility.set_location(' IN Create User hook ',20);
69             --
70             hr_person_absence_api.get_absence_element
71                  (p_absence_attendance_id   => p_absence_attendance_id
72                  ,p_element_entry_id        => l_element_entry_id
73                  ,p_effective_start_date    => l_effective_start_date
74                  ,p_effective_end_date      => l_effective_end_date);
75             --
76             IF  l_element_entry_id IS NOT NULL THEN
77                 --
78                 hr_utility.set_location(' Updating dates for entry_id='||l_element_entry_id,30);
79                 hr_utility.set_location('-- Date='|| to_char(l_effective_end_date,'dd-mm-yyyy'),35);
80                 IF  p_date_end = to_date('31-12-4712','DD-MM-YYYY') OR
81                     p_date_end IS NULL THEN
82                     l_effective_end_date := NULL;
83                 END IF;
84                 --
85                 hr_utility.set_location('-- Date='|| to_char(l_effective_end_date,'dd-mm-yyyy'),35);
86 
87                 OPEN csr_get_input_value_info(l_element_entry_id
88                                              ,'Start Date'
89                                              ,l_effective_start_date);
90                 FETCH csr_get_input_value_info INTO l_start_date_iv_id;
91                 CLOSE csr_get_input_value_info;
92                 --
93                 OPEN csr_get_input_value_info(l_element_entry_id
94                                              ,'End Date'
95                                              ,l_effective_start_date);
96                 FETCH csr_get_input_value_info INTO l_end_date_iv_id;
97                 CLOSE csr_get_input_value_info;
98                 --
99                 OPEN csr_get_input_value_info(l_element_entry_id
100                                              ,'Absence ID'
101                                             ,l_effective_start_date);
102                 FETCH csr_get_input_value_info INTO l_absence_id;
103                 CLOSE csr_get_input_value_info;
104                 --
105                 IF  p_abs_information_category = 'ES_PTM' THEN
106                     OPEN csr_get_input_value_info(l_element_entry_id
107                                                  ,'Part Time Percentage'
108                                                  ,l_effective_start_date);
109                     FETCH csr_get_input_value_info INTO l_ptm_percentage_iv_id;
110                     CLOSE csr_get_input_value_info;
111                 END IF;
112                 --
113                 SELECT max(object_version_number) INTO l_ovn
114                 FROM   pay_element_entries_f
115                 WHERE  element_entry_id = l_element_entry_id;
116                 --
117                 hr_utility.set_location('~~ Before updating ',30);
118                 hr_utility.set_location('~~ Absence Att ID ' || to_char(p_absence_attendance_id),10);
119                 IF  p_abs_information_category = 'ES_PTM' THEN
120                     --
121                     pay_element_entry_api.update_element_entry
122                          (p_validate                => FALSE
123                          ,p_datetrack_update_mode   => 'CORRECTION'
124                          ,p_effective_date          => l_effective_start_date
125                          ,p_business_group_id       => p_business_group_id
126                          ,p_element_entry_id        => l_element_entry_id
127                          ,p_object_version_number   => l_ovn
128                          ,p_input_value_id1         => l_start_date_iv_id
129                          ,p_entry_value1            => fnd_date.date_to_displaydate(l_effective_start_date) --l_effective_start_date
130                          ,p_input_value_id2         => l_end_date_iv_id
131                          ,p_entry_value2            => fnd_date.date_to_displaydate(l_effective_end_date) --l_effective_end_date
132                          ,p_input_value_id3         => l_absence_id
133                          ,p_entry_value3            => p_absence_attendance_id
134                          ,p_input_value_id4         => l_ptm_percentage_iv_id
135                          ,p_entry_value4            => p_abs_information3
136                          ,p_effective_start_date    => l_o_start_dt
137                          ,p_effective_end_date      => l_o_end_dt
138                          ,p_update_warning          => l_o_warning);
139 
140                 ELSE
141                     pay_element_entry_api.update_element_entry
142                          (p_validate                => FALSE
143                          ,p_datetrack_update_mode   => 'CORRECTION'
144                          ,p_effective_date          => l_effective_start_date
145                          ,p_business_group_id       => p_business_group_id
146                          ,p_element_entry_id        => l_element_entry_id
147                          ,p_object_version_number   => l_ovn
148                          ,p_input_value_id1         => l_start_date_iv_id
149                          ,p_entry_value1            => fnd_date.date_to_displaydate(l_effective_start_date) --l_effective_start_date
150                          ,p_input_value_id2         => l_end_date_iv_id
151                          ,p_entry_value2            => fnd_date.date_to_displaydate(l_effective_end_date) --l_effective_end_date
152                          ,p_input_value_id3         => l_absence_id
153                          ,p_entry_value3            => p_absence_attendance_id
154                          ,p_effective_start_date    => l_o_start_dt
155                          ,p_effective_end_date      => l_o_end_dt
156                          ,p_update_warning          => l_o_warning);
157                 END IF;
158                       hr_utility.set_location('~~ After updating ',30);
159             END IF;
160         END IF;
161     END IF;
162     --
163   END IF;
164   --
165   hr_utility.set_location('Leaving hook Person_entry_Create',90);
166   --
167 END person_entry_create;
168 --
169 -------------------------------------------------------------------------------
170 -- PERSON_ENTRY_UPDATE
171 -------------------------------------------------------------------------------
172 PROCEDURE person_entry_update(p_absence_attendance_id        IN NUMBER
173                              ,p_date_start                   IN DATE
174                              ,p_date_end                     IN DATE
175                              ,p_abs_information_category     IN VARCHAR2
176                              ,p_abs_information1             IN VARCHAR2
177                              ,p_abs_information2             IN VARCHAR2
178                              ,p_abs_information3             IN VARCHAR2
179                              ,p_abs_information4             IN VARCHAR2
180                              ,p_abs_information5             IN VARCHAR2
181                              ,p_abs_information6             IN VARCHAR2
182                              ,p_abs_information7             IN VARCHAR2
183                              ,p_abs_information8             IN VARCHAR2
184                              ,p_abs_information9             IN VARCHAR2
185                              ,p_abs_information10            IN VARCHAR2) IS
186 
187 
188     --
189     CURSOR csr_get_input_value_info(p_element_entry_id NUMBER
190                                    ,p_input_value_name VARCHAR2
191                                    ,p_date             DATE) IS
192     SELECT pivf.input_value_id  iv_start_date_id
193     FROM   pay_input_values_f    pivf
194           ,pay_element_entries_f peef
195           ,pay_element_types_f   petf
196     WHERE  peef.element_entry_id  = p_element_entry_id
197     AND    peef.element_type_id   = petf.element_type_id
198     AND    pivf.element_type_id   = petf.element_type_id
199     AND    pivf.name              = p_input_value_name
200     AND    p_date                  BETWEEN peef.effective_start_date
201                                    AND     peef.effective_end_date
202     AND    p_date                  BETWEEN petf.effective_start_date
203                                    AND     petf.effective_end_date
204     AND    p_date                  BETWEEN pivf.effective_start_date
205                                    AND     pivf.effective_end_date;
206     --
207     l_element_entry_id      pay_element_entries_f.element_entry_id%TYPE;
208     l_start_date_iv_id      pay_input_values_f.input_value_id%TYPE;
209     l_end_date_iv_id        pay_input_values_f.input_value_id%TYPE;
210     l_absence_type_iv_id    pay_input_values_f.input_value_id%TYPE;
211     l_ptm_percentage_iv_id  pay_input_values_f.input_value_id%TYPE;
212     l_effective_start_date  pay_element_entries_f.effective_start_date%TYPE;
213     l_effective_end_date    pay_element_entries_f.effective_end_date%TYPE;
214     l_ovn                   pay_element_entries_f.object_version_number%TYPE;
215     l_o_start_dt            pay_element_entries_f.effective_start_date%TYPE;
216     l_o_end_dt              pay_element_entries_f.effective_end_date%TYPE;
217     l_o_warning             BOOLEAN;
218     l_bus_grp_id            pay_input_values_f.business_group_id%TYPE;
219 
220     --
221 BEGIN
222    --
223    -- Added for GSI Bug 5472781
224    --
225    IF hr_utility.chk_product_install('Oracle Human Resources', 'ES') THEN
226      --
227     --
228     hr_utility.set_location('Entering hook Person_entry_Create',10);
229     --
230     IF  p_date_start IS NOT NULL THEN
231         --
232         IF  p_abs_information_category IN ('ES_TD','ES_M','ES_IE_AL','ES_PAR','ES_PTM') THEN
233             --
234             hr_utility.set_location(' IN Update User hook ',20);
235             --
236             hr_person_absence_api.get_absence_element
237                  (p_absence_attendance_id   => p_absence_attendance_id
238                  ,p_element_entry_id        => l_element_entry_id
239                  ,p_effective_start_date    => l_effective_start_date
240                  ,p_effective_end_date      => l_effective_end_date);
241             --
242             IF  l_element_entry_id IS NOT NULL THEN
243 
244                 hr_utility.set_location(' Updating dates for entry_id='||l_element_entry_id,30);
245                 --
246                 IF  p_date_end = to_date('31-12-4712','DD-MM-YYYY') OR
247                     p_date_end IS NULL THEN
248                     l_effective_end_date := NULL;
249                 END IF;
250                 --
251                 OPEN csr_get_input_value_info(l_element_entry_id
252                                              ,'Start Date'
253                                              ,l_effective_start_date);
254                 FETCH csr_get_input_value_info INTO l_start_date_iv_id;
255                 CLOSE csr_get_input_value_info;
256                 --
257                 OPEN csr_get_input_value_info(l_element_entry_id
258                                              ,'End Date'
259                                              ,l_effective_start_date);
260                 FETCH csr_get_input_value_info INTO l_end_date_iv_id;
261                 CLOSE csr_get_input_value_info;
262                 --
263                 OPEN csr_get_input_value_info(l_element_entry_id
264                                              ,'Absence ID'
265                                              ,l_effective_start_date);
266                 FETCH csr_get_input_value_info INTO l_absence_type_iv_id;
267                 CLOSE csr_get_input_value_info;
268                 --
269                 IF  p_abs_information_category = 'ES_PTM' THEN
270                     OPEN csr_get_input_value_info(l_element_entry_id
271                                                  ,'Part Time Percentage'
272                                                  ,l_effective_start_date);
273                     FETCH csr_get_input_value_info INTO l_ptm_percentage_iv_id;
274                     CLOSE csr_get_input_value_info;
275                 END IF;
276                 --
277                 SELECT max(object_version_number) INTO l_ovn
278                 FROM   pay_element_entries_f
279                 WHERE  element_entry_id = l_element_entry_id;
280                 --
281                 SELECT business_group_id INTO l_bus_grp_id
282                 FROM   per_absence_attendances
283                 WHERE  absence_attendance_id = p_absence_attendance_id;
284                 --
285                 hr_utility.set_location('~~ Before updating ',30);
286                 hr_utility.set_location('~~ Absence Att ID ' || to_char(p_absence_attendance_id),10);
287                 --
288                 IF  p_abs_information_category = 'ES_PTM' THEN
289                     --
290                     pay_element_entry_api.update_element_entry
291                          (p_validate                => FALSE
292                          ,p_datetrack_update_mode   => 'CORRECTION'
293                          ,p_effective_date          => l_effective_start_date
294                          ,p_business_group_id       => l_bus_grp_id
295                          ,p_element_entry_id        => l_element_entry_id
296                          ,p_object_version_number   => l_ovn
297                          ,p_input_value_id1         => l_start_date_iv_id
298                          ,p_entry_value1            => fnd_date.date_to_displaydate(l_effective_start_date) --l_effective_start_date
299                          ,p_input_value_id2         => l_end_date_iv_id
300                          ,p_entry_value2            => fnd_date.date_to_displaydate(l_effective_end_date) --l_effective_end_date
301                          ,p_input_value_id3         => l_absence_type_iv_id
302                          ,p_entry_value3            => p_absence_attendance_id
303                          ,p_input_value_id4         => l_ptm_percentage_iv_id
304                          ,p_entry_value4            => p_abs_information3
305                          ,p_effective_start_date    => l_o_start_dt
306                          ,p_effective_end_date      => l_o_end_dt
307                          ,p_update_warning          => l_o_warning);
308                 ELSE
309                     pay_element_entry_api.update_element_entry
310                          (p_validate                => FALSE
311                          ,p_datetrack_update_mode   => 'CORRECTION'
312                          ,p_effective_date          => l_effective_start_date
313                          ,p_business_group_id       => l_bus_grp_id
314                          ,p_element_entry_id        => l_element_entry_id
315                          ,p_object_version_number   => l_ovn
316                          ,p_input_value_id1         => l_start_date_iv_id
317                          ,p_entry_value1            => fnd_date.date_to_displaydate(l_effective_start_date) --l_effective_start_date
318                          ,p_input_value_id2         => l_end_date_iv_id
319                          ,p_entry_value2            => fnd_date.date_to_displaydate(l_effective_end_date) --l_effective_end_date
320                          ,p_input_value_id3         => l_absence_type_iv_id
321                          ,p_entry_value3            => p_absence_attendance_id
322                          ,p_effective_start_date    => l_o_start_dt
323                          ,p_effective_end_date      => l_o_end_dt
324                          ,p_update_warning          => l_o_warning);
325                 END IF;
326                 --
327                 hr_utility.set_location('~~ After updating ',30);
328             END IF;
329         END IF;
330     END IF;
331     --
332   END IF;
333   --
334   hr_utility.set_location('Leaving hook Person_entry_Update',90);
335   --
336 END person_entry_update;
337 -------------------------------------------------------------------------------
338 -- VALIDATE_ABS_CREATE
339 -------------------------------------------------------------------------------
340 PROCEDURE validate_abs_create(p_business_group_id            IN NUMBER
341                              ,p_person_id                    IN NUMBER
342                              ,p_absence_attendance_type_id   IN NUMBER
343                              ,p_date_start                   IN DATE
344                              ,p_time_start                   IN VARCHAR2
345                              ,p_date_end                     IN DATE
346                              ,p_time_end                     IN VARCHAR2
347                              ,p_abs_information_category     IN VARCHAR2
348                              ,p_abs_information1             IN VARCHAR2
349                              ,p_abs_information2             IN VARCHAR2
350                              ,p_abs_information3             IN VARCHAR2
351                              ,p_abs_information4             IN VARCHAR2
352                              ,p_abs_information5             IN VARCHAR2
353                              ,p_abs_information6             IN VARCHAR2
354                              ,p_abs_information7             IN VARCHAR2
355                              ,p_abs_information8             IN VARCHAR2
356                              ,p_abs_information9             IN VARCHAR2
357                              ,p_abs_information10            IN VARCHAR2) IS
358     --
359     CURSOR csr_get_absence_category(p_absence_attendance_type_id  NUMBER) IS
360     SELECT absence_category
361     FROM   per_absence_attendance_types
362     WHERE  absence_attendance_type_id = p_absence_attendance_type_id;
363     --
364     CURSOR csr_get_other_absences(p_person_id  NUMBER
365                                  ,p_date_start DATE
366                                  ,p_date_end   DATE) IS
367     SELECT PAAT.absence_category
368     FROM   per_absence_attendances      PAA
369           ,per_absence_attendance_types PAAT
370     WHERE  PAA.person_id                   = p_person_id
371     AND    PAAT.absence_attendance_type_id = PAA.absence_attendance_type_id
372     AND    (( p_date_start             BETWEEN  PAA.date_start
373                                       AND      NVL(PAA.date_end,to_date('31-12-4712','DD-MM-YYYY')))
374     OR     (PAA.date_start             BETWEEN  p_date_start
375                                       AND      NVL(p_date_end,to_date('31-12-4712','DD-MM-YYYY'))));
376     --
377     CURSOR csr_validate_ptm(p_person_id  NUMBER
378                            ,p_date_start DATE) IS
379     SELECT nvl(to_number(max(PAA.date_end) - max(PAA.date_start)+1),0)
380     FROM   per_absence_attendances      PAA
381           ,per_absence_attendance_types PAAT
382     WHERE  PAA.person_id                   = p_person_id
383     AND    PAAT.absence_attendance_type_id = PAA.absence_attendance_type_id
384     AND    PAAT.absence_category           = 'M'
385     AND    p_date_start                    = PAA.date_end + 1 ;
386     --  AND    p_date_start                    > PAA.date_end;
387     --
388 
389     CURSOR csr_validate_sex_par(p_person_id NUMBER) IS
390     SELECT ppf.sex
391     FROM   per_people_f ppf
392     WHERE  ppf.person_id = p_person_id ;
393 
394     l_sex                    per_people_f.sex%TYPE;
395 
396     l_maternity_benefit_days NUMBER;
397     l_absence_category       per_absence_attendance_types.absence_category%TYPE;
398     --
399 BEGIN
400    --
401    -- Added for GSI Bug 5472781
402    --
403    IF hr_utility.chk_product_install('Oracle Human Resources', 'ES') THEN
404      --
405     --
406     -- get the values of the person_id profile
407     fnd_profile.put('HR_FR_PERSON_ID',p_person_id);
408     -- get the value of the absence_start_date
409     fnd_profile.put('HR_FR_ABSENCE_START_DATE',fnd_date.date_to_canonical(p_date_start));
410     --
411     --IF  p_date_start IS NOT NULL THEN
412         --
413         OPEN csr_get_absence_category(p_absence_attendance_type_id);
414         FETCH csr_get_absence_category INTO l_absence_category ;
415         CLOSE csr_get_absence_category;
416         --
417         IF  l_absence_category IN ('TD') THEN
418             FOR i IN csr_get_other_absences(p_person_id
419                                            ,p_date_start
420                                            ,p_date_end) LOOP
421                 IF i.absence_category IN ('TD') THEN
422                     hr_utility.set_message(800,'HR_ES_TD_OVERLAP');
423                     hr_utility.raise_error;
424                 END IF;
425                 IF i.absence_category IN ('V') THEN
426                     hr_utility.set_message(800,'HR_ES_V_OVERLAP');
427                     hr_utility.raise_error;
428                 END IF;
429                 IF i.absence_category IN ('ZZB') THEN
430                     hr_utility.set_message(800,'HR_ES_STRIKE_OVERLAP');
431                     hr_utility.raise_error;
432                 END IF;
433             END LOOP;
434             -- BU Gross Pay Daily Rate Formula validation
435             IF  (p_abs_information3 = 'GROSS_PAY' ) AND (p_abs_information4 IS NULL) THEN
436                 hr_utility.set_message(800, 'HR_ES_BU_RATE_FORMULA_MISSING');
437                 hr_utility.raise_error;
438             END IF;
439             --
440         END IF;
441         --
442         IF  l_absence_category IN ('V') THEN
443             FOR i IN csr_get_other_absences(p_person_id
444                                            ,p_date_start
445                                            ,p_date_end) LOOP
446                 IF i.absence_category IN ('TD') THEN
447                     hr_utility.set_message(800,'HR_ES_TD_OVERLAP');
448                     hr_utility.raise_error;
449                 END IF;
450                 IF i.absence_category IN ('V') THEN
451                     hr_utility.set_message(800,'HR_ES_V_OVERLAP');
452                     hr_utility.raise_error;
453                 END IF;
454             END LOOP;
455         END IF;
456         --
457         IF  l_absence_category IN ('ZZB') THEN
458             FOR i IN csr_get_other_absences(p_person_id
459                                            ,p_date_start
460                                            ,p_date_end) LOOP
461                 IF i.absence_category IN ('TD') THEN
462                     hr_utility.set_message(800,'HR_ES_TD_OVERLAP');
463                     hr_utility.raise_error;
464                 END IF;
465                 IF i.absence_category IN ('ZZB') THEN
466                     hr_utility.set_message(800,'HR_ES_STRIKE_OVERLAP');
467                     hr_utility.raise_error;
468                 END IF;
469             END LOOP;
470         END IF;
471         --
472         IF  l_absence_category IN ('M') THEN
473             FOR i IN csr_get_other_absences(p_person_id
474                                            ,p_date_start
475                                            ,p_date_end) LOOP
476                 IF i.absence_category IN ('M') THEN
477                     hr_utility.set_message(800,'HR_ES_M_OVERLAP');
478                     hr_utility.raise_error;
479                 END IF;
480                 IF i.absence_category IN ('PAR') THEN
481                     hr_utility.set_message(800,'HR_ES_PAR_OVERLAP');
482                     hr_utility.raise_error;
483                 END IF;
484             END LOOP;
485             -- BU Gross Pay Daily Rate Formula validation
486             IF  (p_abs_information5 = 'GROSS_PAY' ) AND (p_abs_information6 IS NULL) THEN
487                 hr_utility.set_message(800, 'HR_ES_BU_RATE_FORMULA_MISSING');
488                 hr_utility.raise_error;
489             END IF;
490             --
491         END IF;
492         --
493         IF  l_absence_category IN ('PAR') THEN
494 
495             OPEN csr_validate_sex_par (p_person_id);
496             FETCH csr_validate_sex_par INTO l_sex ;
497             CLOSE csr_validate_sex_par;
498                   IF l_sex = 'M' THEN
499                   hr_utility.set_message(800,'HR_ES_PAR_CHK_SEX');
500                   hr_utility.raise_error;
501                   END IF;
502 
503             FOR i IN csr_get_other_absences(p_person_id
504                                            ,p_date_start
505                                            ,p_date_end) LOOP
506                 IF i.absence_category IN ('PAR') THEN
507                     hr_utility.set_message(800,'HR_ES_PAR_OVERLAP');
508                     hr_utility.raise_error;
509                 END IF;
510             END LOOP;
511             -- BU Gross Pay Daily Rate Formula validation
512             IF  (p_abs_information2= 'GROSS_PAY' ) AND (p_abs_information3 IS NULL) THEN
513                 hr_utility.set_message(800, 'HR_ES_BU_RATE_FORMULA_MISSING');
514                 hr_utility.raise_error;
515             END IF;
516             --
517         END IF;
518         --
519         IF  l_absence_category IN ('IE_AL') THEN
520             FOR i IN csr_get_other_absences(p_person_id
521                                            ,p_date_start
522                                            ,p_date_end) LOOP
523                 IF i.absence_category IN ('IE_AL') THEN
524                     hr_utility.set_message(800,'HR_ES_ADOPTION_OVERLAP');
525                     hr_utility.raise_error;
526                 END IF;
527             END LOOP;
528             -- BU Gross Pay Daily Rate Formula validation
529             IF  (p_abs_information2 = 'GROSS_PAY' ) AND (p_abs_information3 IS NULL) THEN
530                 hr_utility.set_message(800, 'HR_ES_BU_RATE_FORMULA_MISSING');
531                 hr_utility.raise_error;
532             END IF;
533             --
534         END IF;
535         --
536         IF  l_absence_category IN ('PTM') THEN
537             FOR i IN csr_get_other_absences(p_person_id
538                                            ,p_date_start
539                                            ,p_date_end) LOOP
540                 IF i.absence_category IN ('M') THEN
541                     hr_utility.set_message(800,'HR_ES_M_OVERLAP');
542                     hr_utility.raise_error;
543                 END IF;
544                 IF i.absence_category IN ('PTM') THEN
545                     hr_utility.set_message(800,'HR_ES_PTM_OVERLAP');
546                     hr_utility.raise_error;
547                 END IF;
548             END LOOP;
549             --
550             OPEN csr_validate_ptm (p_person_id
551                                   ,p_date_start);
552             FETCH csr_validate_ptm INTO l_maternity_benefit_days ;
553             CLOSE csr_validate_ptm;
554             --
555             IF l_maternity_benefit_days = 0 THEN
556                 hr_utility.set_message(800,'HR_ES_M_NOT_FOUND');
557                 hr_utility.raise_error;
558             END IF;
559             --
560             IF l_maternity_benefit_days < 42 THEN
561                 hr_utility.set_message(800,'HR_ES_PTM_CANT_COMMENCE');
562                 hr_utility.raise_error;
563             END IF;
564             --
565             -- BU Gross Pay Daily Rate Formula validation
566             IF  (p_abs_information4 = 'GROSS_PAY' ) AND (p_abs_information5 IS NULL) THEN
567                 hr_utility.set_message(800, 'HR_ES_BU_RATE_FORMULA_MISSING');
568                 hr_utility.raise_error;
569             END IF;
570             --
571         END IF;
572         --
573   END IF;
574   --
575 END validate_abs_create;
576 --
577 -------------------------------------------------------------------------------
578 -- VALIDATE_ABS_UPDATE
579 -------------------------------------------------------------------------------
580 PROCEDURE validate_abs_update(p_absence_attendance_id        IN NUMBER
581                              ,p_date_start                   IN DATE
582                              ,p_time_start                   IN VARCHAR2
583                              ,p_date_end                     IN DATE
584                              ,p_time_end                     IN VARCHAR2
585                              ,p_abs_information_category     IN VARCHAR2
586                              ,p_abs_information1             IN VARCHAR2
587                              ,p_abs_information2             IN VARCHAR2
588                              ,p_abs_information3             IN VARCHAR2
589                              ,p_abs_information4             IN VARCHAR2
590                              ,p_abs_information5             IN VARCHAR2
591                              ,p_abs_information6             IN VARCHAR2
592                              ,p_abs_information7             IN VARCHAR2
593                              ,p_abs_information8             IN VARCHAR2
594                              ,p_abs_information9             IN VARCHAR2
595                              ,p_abs_information10            IN VARCHAR2) IS
596     --
597     CURSOR csr_get_absence_category(p_absence_attendance_id  NUMBER) IS
598     SELECT paat.absence_category
599     FROM   per_absence_attendance_types paat
600           ,per_absence_attendances      paa
601     WHERE  paa.absence_attendance_id       = p_absence_attendance_id
602     AND    paat.absence_attendance_type_id = paa.absence_attendance_type_id;
603     --
604     CURSOR csr_get_other_absences(p_absence_attendance_id  NUMBER
605                                  ,p_date_start             DATE
606                                  ,p_date_end               DATE) IS
607     SELECT PAAT.absence_category
608     FROM   per_absence_attendances      PAA1
609           ,per_absence_attendances      PAA2
610           ,per_absence_attendance_types PAAT
611     WHERE  PAA1.absence_attendance_id      = p_absence_attendance_id
612     AND    PAA2.person_id                  = PAA1.person_id
613     AND    PAAT.absence_attendance_type_id = PAA2.absence_attendance_type_id
614     AND    PAA1.absence_attendance_id      <> PAA2.absence_attendance_id
615     AND    (( p_date_start            BETWEEN  PAA2.date_start
616                                       AND      NVL(PAA2.date_end,to_date('31-12-4712','DD-MM-YYYY')))
617     OR     (PAA2.date_start            BETWEEN  p_date_start
618                                       AND      NVL(p_date_end,to_date('31-12-4712','DD-MM-YYYY'))));
619     --
620     CURSOR csr_validate_ptm(p_absence_attendance_id  NUMBER
621                            ,p_date_start             DATE) IS
622     SELECT nvl(to_number(max(PAA2.date_end) - max(PAA2.date_start)+1),0)
623     FROM   per_absence_attendances      PAA1
624           ,per_absence_attendances      PAA2
625           ,per_absence_attendance_types PAAT
626     WHERE  PAA1.absence_attendance_id      = p_absence_attendance_id
627     AND    PAA2.person_id                  = PAA1.person_id
628     AND    PAAT.absence_attendance_type_id = PAA2.absence_attendance_type_id
629     AND    PAA1.absence_attendance_id      <> PAA2.absence_attendance_id
630     AND    PAAT.absence_category           = 'M'
631     AND    p_date_start                    = PAA2.date_end + 1;
632     --   AND    p_date_start                    > PAA2.date_end;
633     --
634     CURSOR get_person_id(p_absence_attendance_id in number) is
635     SELECT person_id
636     FROM   per_absence_attendances
637     WHERE  absence_attendance_id =p_absence_attendance_id;
638     --
639 
640     CURSOR csr_validate_sex_par(p_person_id NUMBER) IS
641     SELECT ppf.sex
642     FROM   per_people_f ppf
643     WHERE  ppf.person_id = p_person_id ;
644 
645     l_sex                    per_people_f.sex%TYPE;
646 
647     l_maternity_benefit_days NUMBER;
648     l_absence_category       per_absence_attendance_types.absence_category%TYPE;
649     l_person_id per_absence_attendances.person_id%TYPE;
650     --
651 BEGIN
652    --
653    -- Added for GSI Bug 5472781
654    --
655    IF hr_utility.chk_product_install('Oracle Human Resources', 'ES') THEN
656      --
657     --
658     OPEN  get_person_id(p_absence_attendance_id);
659     FETCH get_person_id into l_person_id;
660     CLOSE get_person_id;
661 
662     -- get the values of the person_id profile
663     fnd_profile.put('HR_FR_PERSON_ID',l_person_id);
664     -- get the value of the absence_start_date
665     fnd_profile.put('HR_FR_ABSENCE_START_DATE',fnd_date.date_to_canonical(p_date_start));
666     --
667     --IF  p_date_start IS NOT NULL THEN
668         --
669         OPEN csr_get_absence_category(p_absence_attendance_id);
670         FETCH csr_get_absence_category INTO l_absence_category;
671         CLOSE csr_get_absence_category;
672         --
673         IF  l_absence_category IN ('TD') THEN
674             FOR i IN csr_get_other_absences(p_absence_attendance_id
675                                            ,p_date_start
676                                            ,p_date_end) LOOP
677                 IF i.absence_category IN ('TD') THEN
678                     hr_utility.set_message(800,'HR_ES_TD_OVERLAP');
679                     hr_utility.raise_error;
680                 END IF;
681                 IF i.absence_category IN ('V') THEN
682                     hr_utility.set_message(800,'HR_ES_V_OVERLAP');
683                     hr_utility.raise_error;
684                 END IF;
685                 IF i.absence_category IN ('ZZB') THEN
686                     hr_utility.set_message(800,'HR_ES_STRIKE_OVERLAP');
687                     hr_utility.raise_error;
688                 END IF;
689             END LOOP;
690             -- BU Gross Pay Daily Rate Formula validation
691             IF  (p_abs_information3 = 'GROSS_PAY' ) AND (p_abs_information4 IS NULL) THEN
692                 hr_utility.set_message(800, 'HR_ES_BU_RATE_FORMULA_MISSING');
693                 hr_utility.raise_error;
694             END IF;
695             --
696         END IF;
697         --
698         IF  l_absence_category IN ('V') THEN
699             FOR i IN csr_get_other_absences(p_absence_attendance_id
700                                            ,p_date_start
701                                            ,p_date_end) LOOP
702                 IF i.absence_category IN ('V') THEN
703                     hr_utility.set_message(800,'HR_ES_V_OVERLAP');
704                     hr_utility.raise_error;
705                 END IF;
706                 IF i.absence_category IN ('TD') THEN
707                     hr_utility.set_message(800,'HR_ES_TD_OVERLAP');
708                     hr_utility.raise_error;
709                 END IF;
710             END LOOP;
711         END IF;
712         --
713         IF  l_absence_category IN ('ZZB') THEN
714             FOR i IN csr_get_other_absences(p_absence_attendance_id
715                                            ,p_date_start
716                                            ,p_date_end) LOOP
717                 IF i.absence_category IN ('TD') THEN
718                     hr_utility.set_message(800,'HR_ES_TD_OVERLAP');
719                     hr_utility.raise_error;
720                 END IF;
721                 IF i.absence_category IN ('ZZB') THEN
722                     hr_utility.set_message(800,'HR_ES_STRIKE_OVERLAP');
723                     hr_utility.raise_error;
724                 END IF;
725             END LOOP;
726         END IF;
727         --
728         IF  l_absence_category IN ('M') THEN
729             FOR i IN csr_get_other_absences(p_absence_attendance_id
730                                            ,p_date_start
731                                            ,p_date_end) LOOP
732                 IF  i.absence_category IN ('M') THEN
733                     hr_utility.set_message(800,'HR_ES_M_OVERLAP');
734                     hr_utility.raise_error;
735                 END IF;
736                 IF  i.absence_category IN ('PAR') THEN
737                     hr_utility.set_message(800,'HR_ES_PAR_OVERLAP');
738                     hr_utility.raise_error;
739                 END IF;
740             END LOOP;
741             -- BU Gross Pay Daily Rate Formula validation
742             IF  (p_abs_information5 = 'GROSS_PAY' ) AND (p_abs_information6 IS NULL) THEN
743                 hr_utility.set_message(800, 'HR_ES_BU_RATE_FORMULA_MISSING');
744                 hr_utility.raise_error;
745             END IF;
746             --
747         END IF;
748         --
749         IF  l_absence_category IN ('PAR') THEN
750 
751             OPEN csr_validate_sex_par (l_person_id);
752             FETCH csr_validate_sex_par INTO l_sex ;
753             CLOSE csr_validate_sex_par;
754                   IF l_sex = 'M' THEN
755                   hr_utility.set_message(800,'HR_ES_PAR_CHK_SEX');
756                   hr_utility.raise_error;
757                   END IF;
758 
759 
760             FOR i IN csr_get_other_absences(p_absence_attendance_id
761                                            ,p_date_start
762                                            ,p_date_end) LOOP
763                 IF i.absence_category IN ('PAR') THEN
764                     hr_utility.set_message(800,'HR_ES_PAR_OVERLAP');
765                     hr_utility.raise_error;
766                 END IF;
767             END LOOP;
768             -- BU Gross Pay Daily Rate Formula validation
769             IF  (p_abs_information2= 'GROSS_PAY' ) AND (p_abs_information3 IS NULL) THEN
770                 hr_utility.set_message(800, 'HR_ES_BU_RATE_FORMULA_MISSING');
771                 hr_utility.raise_error;
772             END IF;
773             --
774         END IF;
775         --
776         IF  l_absence_category IN ('IE_AL') THEN
777             FOR i IN csr_get_other_absences(p_absence_attendance_id
778                                            ,p_date_start
779                                            ,p_date_end) LOOP
780                 IF i.absence_category IN ('IE_AL') THEN
781                     hr_utility.set_message(800,'HR_ES_ADOPTION_OVERLAP');
782                     hr_utility.raise_error;
783                 END IF;
784             END LOOP;
785             -- BU Gross Pay Daily Rate Formula validation
786             IF  (p_abs_information2 = 'GROSS_PAY' ) AND (p_abs_information3 IS NULL) THEN
787                 hr_utility.set_message(800, 'HR_ES_BU_RATE_FORMULA_MISSING');
788                 hr_utility.raise_error;
789             END IF;
790             --
791         END IF;
792         --
793         IF  l_absence_category IN ('PTM') THEN
794             FOR i IN csr_get_other_absences(p_absence_attendance_id
795                                            ,p_date_start
796                                            ,p_date_end) LOOP
797                 IF i.absence_category IN ('PTM') THEN
798                     hr_utility.set_message(800,'HR_ES_PTM_OVERLAP');
799                     hr_utility.raise_error;
800                 END IF;
801                 IF i.absence_category IN ('M') THEN
802                     hr_utility.set_message(800,'HR_ES_M_OVERLAP');
803                     hr_utility.raise_error;
804                 END IF;
805             END LOOP;
806             --
807             OPEN csr_validate_ptm (p_absence_attendance_id
808                                   ,p_date_start);
809             FETCH csr_validate_ptm INTO l_maternity_benefit_days ;
810             CLOSE csr_validate_ptm;
811             --
812             IF l_maternity_benefit_days = 0 THEN
813                 hr_utility.set_message(800,'HR_ES_M_NOT_FOUND');
814                 hr_utility.raise_error;
815             END IF;
816             --
817             IF l_maternity_benefit_days < 42 THEN
818                 hr_utility.set_message(800,'HR_ES_PTM_CANT_COMMENCE');
819                 hr_utility.raise_error;
820             END IF;
821             -- BU Gross Pay Daily Rate Formula validation
822             IF  (p_abs_information4 = 'GROSS_PAY' ) AND (p_abs_information5 IS NULL) THEN
823                 hr_utility.set_message(800, 'HR_ES_BU_RATE_FORMULA_MISSING');
824                 hr_utility.raise_error;
825             END IF;
826             --
827         END IF;
828         --
829   END IF;
830   --
831 END validate_abs_update;
832 --
833 END per_es_absence;