DBA Data[Home] [Help]

PACKAGE BODY: APPS.PER_PEM_BUS

Source


1 Package Body per_pem_bus as
2 /* $Header: pepemrhi.pkb 120.1.12010000.2 2008/08/06 09:21:48 ubhat ship $ */
3 --
4 -- ----------------------------------------------------------------------------
5 -- |                     Private Global Definitions                           |
6 -- ----------------------------------------------------------------------------
7 --
8 g_package  varchar2(33) := '  per_pem_bus.';  -- Global package name
9 --
10 -- The following two global variables are only to be
11 -- used by the return_legislation_code function.
12 --
13 g_legislation_code            varchar2(150)  default null;
14 g_previous_employer_id        number         default null;
15 --
16 -- -----------------------------------------------------------------------
17 -- |---------------------------< get_period_values >---------------------|
18 -- -----------------------------------------------------------------------
19 procedure get_period_values
20           (p_start_date     in  per_previous_employers.start_date%type
21           ,p_end_date       in  per_previous_employers.end_date%type
22           ,p_period_years   out nocopy per_previous_employers.period_years%type
23           ,p_period_months  out nocopy per_previous_employers.period_months%type
24           ,p_period_days    out nocopy per_previous_employers.period_days%type
25           ) is
26   l_proc            varchar2(72) := g_package||'get_period_values';
27   l_period_years    number; -- Don't change the datatype
28   l_start_date      per_previous_employers.start_date%type;
29   l_end_date        per_previous_employers.end_date%type;
30 begin
31   hr_utility.set_location('Entering:'||l_proc, 5);
32   --
33   -- Truncate all date datatypes
34   l_start_date  := trunc(p_start_date);
35   l_end_date    := trunc(p_end_date+1);
36   --
37   if l_start_date is not null and l_end_date is not null then
38     hr_utility.set_location(l_proc, 10);
39     l_period_years   := trunc(trunc(months_between(l_end_date,l_start_date))/12);
40     if l_period_years between 0 and 99 then
41       hr_utility.set_location(l_proc, 15);
42       p_period_years := trunc(trunc(months_between(l_end_date
43                                                   ,l_start_date))/12);
44       hr_utility.set_location(l_proc, 20);
45       p_period_months:= mod(trunc(months_between(l_end_date
46                                                 ,l_start_date)),12);
47       hr_utility.set_location(l_proc, 25);
48       --
49       -- 3635308: Added the if - else condition.
50       --
51       -- 3635308 start here
52       if (add_months(l_start_date,trunc(months_between(l_end_date,l_start_date)))
53          <= l_end_date) then
54          p_period_days  := trunc(l_end_date
55                                  - add_months(l_start_date
56                                               ,trunc(months_between(l_end_date
57                                                                    ,l_start_date))));
58        hr_utility.set_location(l_proc, 26);
59       else
60        p_period_days  := trunc(l_end_date
61                                 - add_months(l_start_date
62                                              ,trunc(months_between(l_end_date
63                                                                   ,l_start_date)-1)));
64        p_period_months := p_period_months - 1;
65 
66        hr_utility.set_location(l_proc, 28);
67       end if;
68       --
69       -- 3635308  end here
70       --
71       hr_utility.set_location(l_proc, 30);
72     else
73         /*Error message changed for the bug 5686794*/
74        hr_utility.set_location(l_proc, 35);
75        fnd_message.set_name('PER','HR_289530_PEM_STRT_END_DATES');
76        fnd_message.set_token('START_DATE',TO_CHAR(p_start_date,'DD-MON-YYYY'),true);
77        fnd_message.set_token('END_DATE',TO_CHAR(p_end_date,'DD-MON-YYYY'),true);
78        fnd_message.raise_error;
79 
80       /*hr_utility.set_location(l_proc, 35);
81       fnd_message.set_name('PER','HR_289552_NOVALD_DATES_DIFF');
82       fnd_message.raise_error;*/-- Error msg changed & Commented for bug 5686794
83 
84     end if;
85   end if;
86   --
87   hr_utility.set_location('Leaving:'||l_proc, 40);
88 end get_period_values;
89 --
90 --  ---------------------------------------------------------------------------
91 --  |----------------------< set_security_group_id >--------------------------|
92 --  ---------------------------------------------------------------------------
93 --
94 Procedure set_security_group_id
95   (p_previous_employer_id                 in number
96   ,p_associated_column1                   in varchar2 default null
97   ) is
98   --
99   -- Declare cursor
100   --
101   cursor csr_sec_grp is
102     select pbg.security_group_id
103       from per_business_groups pbg
104          , per_previous_employers pem
105      where pem.previous_employer_id = p_previous_employer_id
106        and pbg.business_group_id = pem.business_group_id;
107   --
108   -- Declare local variables
109   --
110   l_security_group_id number;
111   l_proc              varchar2(72)  :=  g_package||'set_security_group_id';
112   --
113 begin
114   --
115   hr_utility.set_location('Entering:'|| l_proc, 10);
116   --
117   -- Ensure that all the mandatory parameter are not null
118   --
119   hr_api.mandatory_arg_error
120     (p_api_name           => l_proc
121     ,p_argument           => 'previous_employer_id'
122     ,p_argument_value     => p_previous_employer_id
123     );
124   --
125   open csr_sec_grp;
126   fetch csr_sec_grp into l_security_group_id;
127   --
128   if csr_sec_grp%notfound then
129      --
130      close csr_sec_grp;
131      --
132      -- The primary key is invalid therefore we must error
133      --
134      fnd_message.set_name('PAY','HR_7220_INVALID_PRIMARY_KEY');
135      hr_multi_message.add
136        (p_associated_column1 => nvl(p_associated_column1,'PREVIOUS_EMPLOYER_ID')
137        );
138   else
139     close csr_sec_grp;
140   --
141   -- Set the security_group_id in CLIENT_INFO
142   --
143   hr_api.set_security_group_id
144     (p_security_group_id => l_security_group_id
145     );
146   end if;
147   --
148   hr_utility.set_location(' Leaving:'|| l_proc, 20);
149   --
150 end set_security_group_id;
151 --
152 --  ---------------------------------------------------------------------------
153 --  |---------------------< return_legislation_code >-------------------------|
154 --  ---------------------------------------------------------------------------
155 --
156 Function return_legislation_code
157   (p_previous_employer_id                 in     number
158   )
159   Return Varchar2 Is
160   --
161   -- Declare cursor
162   --
163   cursor csr_leg_code is
164     select pbg.legislation_code
165       from per_business_groups pbg
166          , per_previous_employers pem
167      where pem.previous_employer_id = p_previous_employer_id
168        and pbg.business_group_id (+) = pem.business_group_id;
169   --
170   -- Declare local variables
171   --
172   l_legislation_code  varchar2(150);
173   l_proc              varchar2(72)  :=  g_package||'return_legislation_code';
174   --
175 Begin
176   --
177   hr_utility.set_location('Entering:'|| l_proc, 10);
178   --
179   -- Ensure that all the mandatory parameter are not null
180   --
181   hr_api.mandatory_arg_error
182     (p_api_name           => l_proc
183     ,p_argument           => 'previous_employer_id'
184     ,p_argument_value     => p_previous_employer_id
185     );
186   --
187   if ( nvl(per_pem_bus.g_previous_employer_id, hr_api.g_number)
188        = p_previous_employer_id) then
189     --
190     -- The legislation code has already been found with a previous
191     -- call to this function. Just return the value in the global
192     -- variable.
193     --
194     l_legislation_code := per_pem_bus.g_legislation_code;
195     hr_utility.set_location(l_proc, 20);
196   else
197     --
198     -- The ID is different to the last call to this function
199     -- or this is the first call to this function.
200     --
201     open csr_leg_code;
202     fetch csr_leg_code into l_legislation_code;
203     --
204     if csr_leg_code%notfound then
205       --
206       -- The primary key is invalid therefore we must error
207       --
208       close csr_leg_code;
209       fnd_message.set_name('PAY','HR_7220_INVALID_PRIMARY_KEY');
210       fnd_message.raise_error;
211     end if;
212     hr_utility.set_location(l_proc,30);
213     --
214     -- Set the global variables so the values are
215     -- available for the next call to this function.
216     --
217     close csr_leg_code;
218     per_pem_bus.g_previous_employer_id        := p_previous_employer_id;
219     per_pem_bus.g_legislation_code  := l_legislation_code;
220   end if;
221   hr_utility.set_location(' Leaving:'|| l_proc, 40);
222   return l_legislation_code;
223 end return_legislation_code;
224 --
225 -- ----------------------------------------------------------------------------
226 -- |-----------------------------< chk_ddf >----------------------------------|
227 -- ----------------------------------------------------------------------------
228 --
229 -- Description:
230 --   Validates all the Developer Descriptive Flexfield values.
231 --
232 -- Prerequisites:
233 --   All other columns have been validated.  Must be called as the
234 --   last step from insert_validate and update_validate.
235 --
236 -- In Arguments:
237 --   p_rec
238 --
239 -- Post Success:
240 --   If the Developer Descriptive Flexfield structure column and data values
241 --   are all valid this procedure will end normally and processing will
242 --   continue.
243 --
244 -- Post Failure:
245 --   If the Developer Descriptive Flexfield structure column value or any of
246 --   the data values are invalid then an application error is raised as
247 --   a PL/SQL exception.
248 --
249 -- Access Status:
250 --   Internal Row Handler Use Only.
251 --
252 -- ----------------------------------------------------------------------------
253 procedure chk_ddf
254   (p_rec in per_pem_shd.g_rec_type
255   ) is
256 --
257   l_proc   varchar2(72) := g_package || 'chk_ddf';
258 --
259 begin
260   hr_utility.set_location('Entering:'||l_proc,10);
261   --
262   if ((p_rec.previous_employer_id is not null)  and (
263     nvl(per_pem_shd.g_old_rec.pem_information_category, hr_api.g_varchar2) <>
264     nvl(p_rec.pem_information_category, hr_api.g_varchar2)  or
265     nvl(per_pem_shd.g_old_rec.pem_information1, hr_api.g_varchar2) <>
266     nvl(p_rec.pem_information1, hr_api.g_varchar2)  or
267     nvl(per_pem_shd.g_old_rec.pem_information2, hr_api.g_varchar2) <>
268     nvl(p_rec.pem_information2, hr_api.g_varchar2)  or
269     nvl(per_pem_shd.g_old_rec.pem_information3, hr_api.g_varchar2) <>
270     nvl(p_rec.pem_information3, hr_api.g_varchar2)  or
271     nvl(per_pem_shd.g_old_rec.pem_information4, hr_api.g_varchar2) <>
272     nvl(p_rec.pem_information4, hr_api.g_varchar2)  or
273     nvl(per_pem_shd.g_old_rec.pem_information5, hr_api.g_varchar2) <>
274     nvl(p_rec.pem_information5, hr_api.g_varchar2)  or
275     nvl(per_pem_shd.g_old_rec.pem_information6, hr_api.g_varchar2) <>
276     nvl(p_rec.pem_information6, hr_api.g_varchar2)  or
277     nvl(per_pem_shd.g_old_rec.pem_information7, hr_api.g_varchar2) <>
278     nvl(p_rec.pem_information7, hr_api.g_varchar2)  or
279     nvl(per_pem_shd.g_old_rec.pem_information8, hr_api.g_varchar2) <>
280     nvl(p_rec.pem_information8, hr_api.g_varchar2)  or
281     nvl(per_pem_shd.g_old_rec.pem_information9, hr_api.g_varchar2) <>
282     nvl(p_rec.pem_information9, hr_api.g_varchar2)  or
283     nvl(per_pem_shd.g_old_rec.pem_information10, hr_api.g_varchar2) <>
284     nvl(p_rec.pem_information10, hr_api.g_varchar2)  or
285     nvl(per_pem_shd.g_old_rec.pem_information11, hr_api.g_varchar2) <>
286     nvl(p_rec.pem_information11, hr_api.g_varchar2)  or
287     nvl(per_pem_shd.g_old_rec.pem_information12, hr_api.g_varchar2) <>
288     nvl(p_rec.pem_information12, hr_api.g_varchar2)  or
289     nvl(per_pem_shd.g_old_rec.pem_information13, hr_api.g_varchar2) <>
290     nvl(p_rec.pem_information13, hr_api.g_varchar2)  or
291     nvl(per_pem_shd.g_old_rec.pem_information14, hr_api.g_varchar2) <>
292     nvl(p_rec.pem_information14, hr_api.g_varchar2)  or
293     nvl(per_pem_shd.g_old_rec.pem_information15, hr_api.g_varchar2) <>
294     nvl(p_rec.pem_information15, hr_api.g_varchar2)  or
295     nvl(per_pem_shd.g_old_rec.pem_information16, hr_api.g_varchar2) <>
296     nvl(p_rec.pem_information16, hr_api.g_varchar2)  or
297     nvl(per_pem_shd.g_old_rec.pem_information17, hr_api.g_varchar2) <>
298     nvl(p_rec.pem_information17, hr_api.g_varchar2)  or
299     nvl(per_pem_shd.g_old_rec.pem_information18, hr_api.g_varchar2) <>
300     nvl(p_rec.pem_information18, hr_api.g_varchar2)  or
301     nvl(per_pem_shd.g_old_rec.pem_information19, hr_api.g_varchar2) <>
302     nvl(p_rec.pem_information19, hr_api.g_varchar2)  or
303     nvl(per_pem_shd.g_old_rec.pem_information20, hr_api.g_varchar2) <>
304     nvl(p_rec.pem_information20, hr_api.g_varchar2)  or
305     nvl(per_pem_shd.g_old_rec.pem_information21, hr_api.g_varchar2) <>
306     nvl(p_rec.pem_information21, hr_api.g_varchar2)  or
307     nvl(per_pem_shd.g_old_rec.pem_information22, hr_api.g_varchar2) <>
308     nvl(p_rec.pem_information22, hr_api.g_varchar2)  or
309     nvl(per_pem_shd.g_old_rec.pem_information23, hr_api.g_varchar2) <>
310     nvl(p_rec.pem_information23, hr_api.g_varchar2)  or
311     nvl(per_pem_shd.g_old_rec.pem_information24, hr_api.g_varchar2) <>
312     nvl(p_rec.pem_information24, hr_api.g_varchar2)  or
313     nvl(per_pem_shd.g_old_rec.pem_information25, hr_api.g_varchar2) <>
314     nvl(p_rec.pem_information25, hr_api.g_varchar2)  or
315     nvl(per_pem_shd.g_old_rec.pem_information26, hr_api.g_varchar2) <>
316     nvl(p_rec.pem_information26, hr_api.g_varchar2)  or
317     nvl(per_pem_shd.g_old_rec.pem_information27, hr_api.g_varchar2) <>
318     nvl(p_rec.pem_information27, hr_api.g_varchar2)  or
319     nvl(per_pem_shd.g_old_rec.pem_information28, hr_api.g_varchar2) <>
320     nvl(p_rec.pem_information28, hr_api.g_varchar2)  or
321     nvl(per_pem_shd.g_old_rec.pem_information29, hr_api.g_varchar2) <>
322     nvl(p_rec.pem_information29, hr_api.g_varchar2)  or
323     nvl(per_pem_shd.g_old_rec.pem_information30, hr_api.g_varchar2) <>
324     nvl(p_rec.pem_information30, hr_api.g_varchar2) ))
325     or (p_rec.previous_employer_id is null)  then
326     --
327     -- Only execute the validation if absolutely necessary:
328     -- a) During update, the structure column value or any
329     --    of the attribute values have actually changed.
330     -- b) During insert.
331     --
332     hr_dflex_utility.ins_or_upd_descflex_attribs
333       (p_appl_short_name                 => 'PER'
334       ,p_descflex_name                   => 'Previous Employer Developer DF'
335       ,p_attribute_category              => p_rec.pem_information_category
336       ,p_attribute1_name                 => 'PEM_INFORMATION1'
337       ,p_attribute1_value                => p_rec.pem_information1
338       ,p_attribute2_name                 => 'PEM_INFORMATION2'
339       ,p_attribute2_value                => p_rec.pem_information2
340       ,p_attribute3_name                 => 'PEM_INFORMATION3'
341       ,p_attribute3_value                => p_rec.pem_information3
342       ,p_attribute4_name                 => 'PEM_INFORMATION4'
343       ,p_attribute4_value                => p_rec.pem_information4
344       ,p_attribute5_name                 => 'PEM_INFORMATION5'
345       ,p_attribute5_value                => p_rec.pem_information5
346       ,p_attribute6_name                 => 'PEM_INFORMATION6'
347       ,p_attribute6_value                => p_rec.pem_information6
348       ,p_attribute7_name                 => 'PEM_INFORMATION7'
349       ,p_attribute7_value                => p_rec.pem_information7
350       ,p_attribute8_name                 => 'PEM_INFORMATION8'
351       ,p_attribute8_value                => p_rec.pem_information8
352       ,p_attribute9_name                 => 'PEM_INFORMATION9'
353       ,p_attribute9_value                => p_rec.pem_information9
354       ,p_attribute10_name                => 'PEM_INFORMATION10'
358       ,p_attribute12_name                => 'PEM_INFORMATION12'
355       ,p_attribute10_value               => p_rec.pem_information10
356       ,p_attribute11_name                => 'PEM_INFORMATION11'
357       ,p_attribute11_value               => p_rec.pem_information11
359       ,p_attribute12_value               => p_rec.pem_information12
360       ,p_attribute13_name                => 'PEM_INFORMATION13'
361       ,p_attribute13_value               => p_rec.pem_information13
362       ,p_attribute14_name                => 'PEM_INFORMATION14'
363       ,p_attribute14_value               => p_rec.pem_information14
364       ,p_attribute15_name                => 'PEM_INFORMATION15'
365       ,p_attribute15_value               => p_rec.pem_information15
366       ,p_attribute16_name                => 'PEM_INFORMATION16'
367       ,p_attribute16_value               => p_rec.pem_information16
368       ,p_attribute17_name                => 'PEM_INFORMATION17'
369       ,p_attribute17_value               => p_rec.pem_information17
370       ,p_attribute18_name                => 'PEM_INFORMATION18'
371       ,p_attribute18_value               => p_rec.pem_information18
372       ,p_attribute19_name                => 'PEM_INFORMATION19'
373       ,p_attribute19_value               => p_rec.pem_information19
374       ,p_attribute20_name                => 'PEM_INFORMATION20'
375       ,p_attribute20_value               => p_rec.pem_information20
376       ,p_attribute21_name                => 'PEM_INFORMATION21'
377       ,p_attribute21_value               => p_rec.pem_information21
378       ,p_attribute22_name                => 'PEM_INFORMATION22'
379       ,p_attribute22_value               => p_rec.pem_information22
380       ,p_attribute23_name                => 'PEM_INFORMATION23'
381       ,p_attribute23_value               => p_rec.pem_information23
382       ,p_attribute24_name                => 'PEM_INFORMATION24'
383       ,p_attribute24_value               => p_rec.pem_information24
384       ,p_attribute25_name                => 'PEM_INFORMATION25'
385       ,p_attribute25_value               => p_rec.pem_information25
386       ,p_attribute26_name                => 'PEM_INFORMATION26'
387       ,p_attribute26_value               => p_rec.pem_information26
388       ,p_attribute27_name                => 'PEM_INFORMATION27'
389       ,p_attribute27_value               => p_rec.pem_information27
390       ,p_attribute28_name                => 'PEM_INFORMATION28'
391       ,p_attribute28_value               => p_rec.pem_information28
392       ,p_attribute29_name                => 'PEM_INFORMATION29'
393       ,p_attribute29_value               => p_rec.pem_information29
394       ,p_attribute30_name                => 'PEM_INFORMATION30'
395       ,p_attribute30_value               => p_rec.pem_information30
396       );
397   end if;
398   --
399   hr_utility.set_location(' Leaving:'||l_proc,20);
400 end chk_ddf;
401 --
402 -- ----------------------------------------------------------------------------
403 -- |------------------------------< chk_df >----------------------------------|
404 -- ----------------------------------------------------------------------------
405 --
406 -- Description:
407 --   Validates all the Descriptive Flexfield values.
408 --
409 -- Prerequisites:
410 --   All other columns have been validated.  Must be called as the
411 --   last step from insert_validate and update_validate.
412 --
413 -- In Arguments:
414 --   p_rec
415 --
416 -- Post Success:
417 --   If the Descriptive Flexfield structure column and data values are
418 --   all valid this procedure will end normally and processing will
419 --   continue.
420 --
421 -- Post Failure:
422 --   If the Descriptive Flexfield structure column value or any of
423 --   the data values are invalid then an application error is raised as
424 --   a PL/SQL exception.
425 --
426 -- Access Status:
427 --   Internal Row Handler Use Only.
428 --
429 -- ----------------------------------------------------------------------------
430 procedure chk_df
431   (p_rec in per_pem_shd.g_rec_type
432   ) is
433 --
434   l_proc   varchar2(72) := g_package || 'chk_df';
435 --
436 begin
437   hr_utility.set_location('Entering:'||l_proc,10);
438   --
439   if ((p_rec.previous_employer_id is not null)  and (
440     nvl(per_pem_shd.g_old_rec.pem_attribute_category, hr_api.g_varchar2) <>
441     nvl(p_rec.pem_attribute_category, hr_api.g_varchar2)  or
442     nvl(per_pem_shd.g_old_rec.pem_attribute1, hr_api.g_varchar2) <>
443     nvl(p_rec.pem_attribute1, hr_api.g_varchar2)  or
444     nvl(per_pem_shd.g_old_rec.pem_attribute2, hr_api.g_varchar2) <>
445     nvl(p_rec.pem_attribute2, hr_api.g_varchar2)  or
446     nvl(per_pem_shd.g_old_rec.pem_attribute3, hr_api.g_varchar2) <>
447     nvl(p_rec.pem_attribute3, hr_api.g_varchar2)  or
448     nvl(per_pem_shd.g_old_rec.pem_attribute4, hr_api.g_varchar2) <>
449     nvl(p_rec.pem_attribute4, hr_api.g_varchar2)  or
450     nvl(per_pem_shd.g_old_rec.pem_attribute5, hr_api.g_varchar2) <>
451     nvl(p_rec.pem_attribute5, hr_api.g_varchar2)  or
452     nvl(per_pem_shd.g_old_rec.pem_attribute6, hr_api.g_varchar2) <>
453     nvl(p_rec.pem_attribute6, hr_api.g_varchar2)  or
454     nvl(per_pem_shd.g_old_rec.pem_attribute7, hr_api.g_varchar2) <>
455     nvl(p_rec.pem_attribute7, hr_api.g_varchar2)  or
456     nvl(per_pem_shd.g_old_rec.pem_attribute8, hr_api.g_varchar2) <>
457     nvl(p_rec.pem_attribute8, hr_api.g_varchar2)  or
458     nvl(per_pem_shd.g_old_rec.pem_attribute9, hr_api.g_varchar2) <>
462     nvl(per_pem_shd.g_old_rec.pem_attribute11, hr_api.g_varchar2) <>
459     nvl(p_rec.pem_attribute9, hr_api.g_varchar2)  or
460     nvl(per_pem_shd.g_old_rec.pem_attribute10, hr_api.g_varchar2) <>
461     nvl(p_rec.pem_attribute10, hr_api.g_varchar2)  or
463     nvl(p_rec.pem_attribute11, hr_api.g_varchar2)  or
464     nvl(per_pem_shd.g_old_rec.pem_attribute12, hr_api.g_varchar2) <>
465     nvl(p_rec.pem_attribute12, hr_api.g_varchar2)  or
466     nvl(per_pem_shd.g_old_rec.pem_attribute13, hr_api.g_varchar2) <>
467     nvl(p_rec.pem_attribute13, hr_api.g_varchar2)  or
468     nvl(per_pem_shd.g_old_rec.pem_attribute14, hr_api.g_varchar2) <>
469     nvl(p_rec.pem_attribute14, hr_api.g_varchar2)  or
470     nvl(per_pem_shd.g_old_rec.pem_attribute15, hr_api.g_varchar2) <>
471     nvl(p_rec.pem_attribute15, hr_api.g_varchar2)  or
472     nvl(per_pem_shd.g_old_rec.pem_attribute16, hr_api.g_varchar2) <>
473     nvl(p_rec.pem_attribute16, hr_api.g_varchar2)  or
474     nvl(per_pem_shd.g_old_rec.pem_attribute17, hr_api.g_varchar2) <>
475     nvl(p_rec.pem_attribute17, hr_api.g_varchar2)  or
476     nvl(per_pem_shd.g_old_rec.pem_attribute18, hr_api.g_varchar2) <>
477     nvl(p_rec.pem_attribute18, hr_api.g_varchar2)  or
478     nvl(per_pem_shd.g_old_rec.pem_attribute19, hr_api.g_varchar2) <>
479     nvl(p_rec.pem_attribute19, hr_api.g_varchar2)  or
480     nvl(per_pem_shd.g_old_rec.pem_attribute20, hr_api.g_varchar2) <>
481     nvl(p_rec.pem_attribute20, hr_api.g_varchar2)  or
482     nvl(per_pem_shd.g_old_rec.pem_attribute21, hr_api.g_varchar2) <>
483     nvl(p_rec.pem_attribute21, hr_api.g_varchar2)  or
484     nvl(per_pem_shd.g_old_rec.pem_attribute22, hr_api.g_varchar2) <>
485     nvl(p_rec.pem_attribute22, hr_api.g_varchar2)  or
486     nvl(per_pem_shd.g_old_rec.pem_attribute23, hr_api.g_varchar2) <>
487     nvl(p_rec.pem_attribute23, hr_api.g_varchar2)  or
488     nvl(per_pem_shd.g_old_rec.pem_attribute24, hr_api.g_varchar2) <>
489     nvl(p_rec.pem_attribute24, hr_api.g_varchar2)  or
490     nvl(per_pem_shd.g_old_rec.pem_attribute25, hr_api.g_varchar2) <>
491     nvl(p_rec.pem_attribute25, hr_api.g_varchar2)  or
492     nvl(per_pem_shd.g_old_rec.pem_attribute26, hr_api.g_varchar2) <>
493     nvl(p_rec.pem_attribute26, hr_api.g_varchar2)  or
494     nvl(per_pem_shd.g_old_rec.pem_attribute27, hr_api.g_varchar2) <>
495     nvl(p_rec.pem_attribute27, hr_api.g_varchar2)  or
496     nvl(per_pem_shd.g_old_rec.pem_attribute28, hr_api.g_varchar2) <>
497     nvl(p_rec.pem_attribute28, hr_api.g_varchar2)  or
498     nvl(per_pem_shd.g_old_rec.pem_attribute29, hr_api.g_varchar2) <>
499     nvl(p_rec.pem_attribute29, hr_api.g_varchar2)  or
500     nvl(per_pem_shd.g_old_rec.pem_attribute30, hr_api.g_varchar2) <>
501     nvl(p_rec.pem_attribute30, hr_api.g_varchar2) ))
502     or (p_rec.previous_employer_id is null)  then
503     --
504     -- Only execute the validation if absolutely necessary:
505     -- a) During update, the structure column value or any
506     --    of the attribute values have actually changed.
507     -- b) During insert.
508     --
509     hr_dflex_utility.ins_or_upd_descflex_attribs
510       (p_appl_short_name                 => 'PER'
511       ,p_descflex_name                   => 'PER_PREVIOUS_EMPLOYERS'
512       ,p_attribute_category              => p_rec.pem_attribute_category
513       ,p_attribute1_name                 => 'PEM_ATTRIBUTE1'
514       ,p_attribute1_value                => p_rec.pem_attribute1
515       ,p_attribute2_name                 => 'PEM_ATTRIBUTE2'
516       ,p_attribute2_value                => p_rec.pem_attribute2
517       ,p_attribute3_name                 => 'PEM_ATTRIBUTE3'
518       ,p_attribute3_value                => p_rec.pem_attribute3
519       ,p_attribute4_name                 => 'PEM_ATTRIBUTE4'
520       ,p_attribute4_value                => p_rec.pem_attribute4
521       ,p_attribute5_name                 => 'PEM_ATTRIBUTE5'
522       ,p_attribute5_value                => p_rec.pem_attribute5
523       ,p_attribute6_name                 => 'PEM_ATTRIBUTE6'
524       ,p_attribute6_value                => p_rec.pem_attribute6
525       ,p_attribute7_name                 => 'PEM_ATTRIBUTE7'
526       ,p_attribute7_value                => p_rec.pem_attribute7
527       ,p_attribute8_name                 => 'PEM_ATTRIBUTE8'
528       ,p_attribute8_value                => p_rec.pem_attribute8
529       ,p_attribute9_name                 => 'PEM_ATTRIBUTE9'
530       ,p_attribute9_value                => p_rec.pem_attribute9
531       ,p_attribute10_name                => 'PEM_ATTRIBUTE10'
532       ,p_attribute10_value               => p_rec.pem_attribute10
533       ,p_attribute11_name                => 'PEM_ATTRIBUTE11'
534       ,p_attribute11_value               => p_rec.pem_attribute11
535       ,p_attribute12_name                => 'PEM_ATTRIBUTE12'
536       ,p_attribute12_value               => p_rec.pem_attribute12
537       ,p_attribute13_name                => 'PEM_ATTRIBUTE13'
538       ,p_attribute13_value               => p_rec.pem_attribute13
539       ,p_attribute14_name                => 'PEM_ATTRIBUTE14'
540       ,p_attribute14_value               => p_rec.pem_attribute14
541       ,p_attribute15_name                => 'PEM_ATTRIBUTE15'
542       ,p_attribute15_value               => p_rec.pem_attribute15
543       ,p_attribute16_name                => 'PEM_ATTRIBUTE16'
544       ,p_attribute16_value               => p_rec.pem_attribute16
545       ,p_attribute17_name                => 'PEM_ATTRIBUTE17'
546       ,p_attribute17_value               => p_rec.pem_attribute17
547       ,p_attribute18_name                => 'PEM_ATTRIBUTE18'
551       ,p_attribute20_name                => 'PEM_ATTRIBUTE20'
548       ,p_attribute18_value               => p_rec.pem_attribute18
549       ,p_attribute19_name                => 'PEM_ATTRIBUTE19'
550       ,p_attribute19_value               => p_rec.pem_attribute19
552       ,p_attribute20_value               => p_rec.pem_attribute20
553       ,p_attribute21_name                => 'PEM_ATTRIBUTE21'
554       ,p_attribute21_value               => p_rec.pem_attribute21
555       ,p_attribute22_name                => 'PEM_ATTRIBUTE22'
556       ,p_attribute22_value               => p_rec.pem_attribute22
557       ,p_attribute23_name                => 'PEM_ATTRIBUTE23'
558       ,p_attribute23_value               => p_rec.pem_attribute23
559       ,p_attribute24_name                => 'PEM_ATTRIBUTE24'
560       ,p_attribute24_value               => p_rec.pem_attribute24
561       ,p_attribute25_name                => 'PEM_ATTRIBUTE25'
562       ,p_attribute25_value               => p_rec.pem_attribute25
563       ,p_attribute26_name                => 'PEM_ATTRIBUTE26'
564       ,p_attribute26_value               => p_rec.pem_attribute26
565       ,p_attribute27_name                => 'PEM_ATTRIBUTE27'
566       ,p_attribute27_value               => p_rec.pem_attribute27
567       ,p_attribute28_name                => 'PEM_ATTRIBUTE28'
568       ,p_attribute28_value               => p_rec.pem_attribute28
569       ,p_attribute29_name                => 'PEM_ATTRIBUTE29'
570       ,p_attribute29_value               => p_rec.pem_attribute29
571       ,p_attribute30_name                => 'PEM_ATTRIBUTE30'
572       ,p_attribute30_value               => p_rec.pem_attribute30
573       );
574   end if;
575   --
576   hr_utility.set_location(' Leaving:'||l_proc,20);
577 end chk_df;
578 --
579 -- ----------------------------------------------------------------------------
580 -- |-----------------------< chk_non_updateable_args >------------------------|
581 -- ----------------------------------------------------------------------------
582 -- {Start Of Comments}
583 --
584 -- Description:
585 --   This procedure is used to ensure that non updateable attributes have
586 --   not been updated. If an attribute has been updated an error is generated.
587 --
588 -- Pre Conditions:
589 --   g_old_rec has been populated with details of the values currently in
590 --   the database.
591 --
592 -- In Arguments:
593 --   p_rec has been populated with the updated values the user would like the
594 --   record set to.
595 --
596 -- Post Success:
597 --   Processing continues if all the non updateable attributes have not
598 --   changed.
599 --
600 -- Post Failure:
601 --   An application error is raised if any of the non updatable attributes
602 --   have been altered.
603 --
604 -- {End Of Comments}
605 -- ----------------------------------------------------------------------------
606 Procedure chk_non_updateable_args
607   (p_effective_date               in date
608   ,p_rec                          in per_pem_shd.g_rec_type
609   ) IS
610   --
611   l_proc     varchar2(72) := g_package || 'chk_non_updateable_args';
612   --
613 Begin
614   hr_utility.set_location('Entering : '||l_proc,5);
615   --
616   -- Only proceed with the validation if a row exists for the current
617   -- record in the HR Schema.
618   --
619   IF NOT per_pem_shd.api_updating
620       (p_previous_employer_id                 => p_rec.previous_employer_id
621       ,p_object_version_number                => p_rec.object_version_number
622       ) THEN
623      fnd_message.set_name('PER', 'HR_6153_ALL_PROCEDURE_FAIL');
624      fnd_message.set_token('PROCEDURE ', l_proc);
625      fnd_message.set_token('STEP ', '5');
626      fnd_message.raise_error;
627   END IF;
628   --
629   -- Add checks to ensure non-updateable args have
630   -- not been updated.
631   hr_utility.set_location(l_proc,10);
632   if per_pem_shd.g_old_rec.previous_employer_id <> p_rec.previous_employer_id
633      then
634      hr_api.argument_changed_error
635        (p_api_name   => l_proc
636        ,p_argument   => 'previous_employer_id'
637        ,p_base_table => per_pem_shd.g_tab_nam
638        );
639   end if;
640   --
641   hr_utility.set_location(l_proc,15);
642   if per_pem_shd.g_old_rec.person_id <> p_rec.person_id
643      then
644      hr_api.argument_changed_error
645        (p_api_name    =>  l_proc
646        ,p_argument    =>  'person_id'
647        ,p_base_table  =>  per_pem_shd.g_tab_nam
648        );
649   end if;
650   --
651   hr_utility.set_location(l_proc,20);
652   if nvl(per_pem_shd.g_old_rec.party_id,p_rec.party_id) <>
653                  nvl(p_rec.party_id,per_pem_shd.g_old_rec.party_id)
654      then
655      hr_api.argument_changed_error
656        (p_api_name    =>  l_proc
657        ,p_argument    =>  'party_id'
658        ,p_base_table  =>  per_pem_shd.g_tab_nam
659        );
660   end if;
661   hr_utility.set_location(l_proc,25);
662   --
663   -- start commented code  for business_group_id is
664   -- updateable if previously null.
665   --
666 /*
667   if per_pem_shd.g_old_rec.business_group_id <> p_rec.business_group_id
668      then
669      hr_api.argument_changed_error
670        (p_api_name    =>  l_proc
671        ,p_argument    =>  'business_group_id'
672        ,p_base_table  =>  per_pem_shd.g_tab_nam
673        );
677   --
674   end if;
675   --
676 */
678   -- end commented code
679   --
680   hr_utility.set_location('Leaving : '||l_proc,30);
681 End chk_non_updateable_args;
682 --
683 -- ----------------------------------------------------------------------------
684 -- |----------------------------< chk_person_id >-----------------------------|
685 -- ----------------------------------------------------------------------------
686 -- {Start Of Comments}
687 --
688 -- Description:
689 --   This procedure ensures that person_id value is valid.
690 --
691 -- Pre Conditions:
692 --   g_old_rec has been populated with details of the values currently in
693 --   the database.
694 --
695 -- In Arguments:
696 --  p_person_id
697 --  p_previous_employer_id
698 --  p_object_version_number
699 --  p_effective_date
700 --
701 -- Post Success:
702 --   Processing continues if person_id is valid employee
703 --
704 -- Post Failure:
705 --   An application error is raised person_id is not valid
706 --   or person is not an employee or if the person is not valid
707 --   for the current period.
708 --
709 -- {End Of Comments}
710 -- ----------------------------------------------------------------------------
711 procedure chk_person_id(p_person_id
712                         in  per_previous_employers.person_id%type
713                        ,p_previous_employer_id
714                         in  per_previous_employers.previous_employer_id%type
715                        ,p_object_version_number
716                         in  per_previous_employers.object_version_number%type
717                        ,p_effective_date
718                         in date)
719       is
720   -- Define the cursor for the person_id
721   cursor csr_person_id is
722     select  person_id
723     from    per_all_people_f
724     where   person_id = p_person_id;
725   --
726   cursor csr_effective_person_id is
727     select  person_id
728     from    per_all_people_f
729     where   person_id = p_person_id
730     and     p_effective_date
731             between effective_start_date and effective_end_date;
732   --
733   --
734   l_person_id     per_all_people_f.person_id%type;
735   --
736   l_proc          varchar2(72) := g_package||'chk_person_id';
737   l_api_updating  boolean;
738   --
739 begin
740   hr_utility.set_location('Entering:'||l_proc, 5);
741   if p_person_id is not null then
742     hr_utility.set_location(l_proc, 10);
743     l_api_updating    := per_pem_shd.api_updating(p_previous_employer_id
744                                                   =>  p_previous_employer_id
745                                                   ,p_object_version_number
746                                                   =>  p_object_version_number
747                                                   );
748     if  ((l_api_updating
749           and nvl(per_pem_shd.g_old_rec.person_id, hr_api.g_number)
750               <> nvl(p_person_id,hr_api.g_number))
751         or
752         (not l_api_updating))
753     then
754       -- Check for invalid person_id
755       hr_utility.set_location(l_proc, 15);
756       open  csr_person_id;
757       fetch csr_person_id into l_person_id;
758       if csr_person_id%notfound then
759         hr_utility.set_location(l_proc, 20);
760         close csr_person_id;
761         fnd_message.set_name('PER','HR_289535_PEM_VALID_PERSON_ID');
762         fnd_message.raise_error;
763       end if;
764       if csr_person_id%isopen then
765         close csr_person_id;
766       end if;
767       -- Check for person_id with effective dates
768       hr_utility.set_location(l_proc, 25);
769       open  csr_effective_person_id;
770       fetch csr_effective_person_id into l_person_id;
771       if csr_effective_person_id%notfound then
772          hr_utility.set_location(l_proc, 30);
773          close csr_effective_person_id;
774          fnd_message.set_name('PER','HR_289547_PEM_DATE_PERSON_ID');
775          fnd_message.raise_error;
776       end if;
777       if csr_effective_person_id%isopen then
778         close csr_effective_person_id;
779       end if;
780     --
781     end if;
782   end if;
783   hr_utility.set_location('Leaving:'||l_proc, 40);
784 exception
785   when app_exception.application_exception then
786     if hr_multi_message.exception_add
787       (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.PERSON_ID'
788       ) then
789       hr_utility.set_location('Leaving:'||l_proc, 50);
790       raise;
791     end if;
792     hr_utility.set_location('Leaving:'||l_proc,60);
793 end chk_person_id;
794 --
795 -- ----------------------------------------------------------------------------
796 -- |-----------------------------< chk_party_id >-----------------------------|
797 -- ----------------------------------------------------------------------------
798 -- {Start Of Comments}
799 --
800 -- Description:
801 --   This procedure ensures that party_id value is valid.
802 --
803 -- Pre Conditions:
804 --   g_old_rec has been populated with details of the values currently in
805 --   the database.
806 --
807 -- In Arguments:
808 --  p_party_id
809 --  p_previous_employer_id
810 --  p_object_version_number
811 --
812 -- Post Success:
816 --   An application error is raised party_id is not valid
813 --   Processing continues if party_id is valid.
814 --
815 -- Post Failure:
817 --
818 -- {End Of Comments}
819 -- ----------------------------------------------------------------------------
820 procedure chk_party_id(p_party_id
821                       in  per_previous_employers.party_id%type
822                       ,p_previous_employer_id
823                       in  per_previous_employers.previous_employer_id%type
824                       ,p_object_version_number
825                       in  per_previous_employers.object_version_number%type) is
826   --Define the cursor for party_id
827   cursor csr_party_id is
828     select  party_id
829     from    hz_parties
830     where   party_id = p_party_id;
831   l_party_id  hz_parties.party_id%type;
832   --
833   l_proc          varchar2(72) := g_package||'chk_party_id';
834   l_api_updating  boolean;
835 begin
836   hr_utility.set_location('Entering:'||l_proc, 5);
837   --
838   if p_party_id is not null then
839     hr_utility.set_location(l_proc, 10);
840     l_api_updating    := per_pem_shd.api_updating(p_previous_employer_id
841                                                   =>  p_previous_employer_id
842                                                   ,p_object_version_number
843                                                   =>  p_object_version_number
844                                                   );
845     if  ((l_api_updating
846           and nvl(per_pem_shd.g_old_rec.party_id, hr_api.g_number)
847               <> nvl(p_party_id,hr_api.g_number))
848         or
849         (not l_api_updating))
850     then
851       hr_utility.set_location(l_proc, 15);
852       open  csr_party_id;
853       fetch csr_party_id into l_party_id;
854       if  csr_party_id%notfound then
855         hr_utility.set_location(l_proc, 20);
856         close csr_party_id;
857         fnd_message.set_name('PER','HR_289536_PEM_VALID_PARTY_ID');
858         fnd_message.raise_error;
859       end if;
860       if  csr_party_id%isopen then
861         close csr_party_id;
862       end if;
863     end if;
864   end if;
865   --
866   hr_utility.set_location('Leaving:'||l_proc, 25);
867 exception
868   when app_exception.application_exception then
869     if hr_multi_message.exception_add
870       (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.PARTY_ID'
871       ) then
872       hr_utility.set_location('Leaving:'||l_proc,30);
873       raise;
874     end if;
875     hr_utility.set_location('Leaving:'||l_proc,40);
876 end chk_party_id;
877 --
878 -- ----------------------------------------------------------------------------
879 -- |-------------------------< chk_employer_country >-------------------------|
880 -- ----------------------------------------------------------------------------
881 -- {Start Of Comments}
882 --
883 -- Description:
884 --   This procedure ensures that employer_country has valid lookup
885 --
886 -- Pre Conditions:
887 --   g_old_rec has been populated with details of the values currently in
888 --   the database.
889 --
890 -- In Arguments:
891 --  p_previous_employer_id
892 --  p_object_version_number
893 --  p_employer_country
894 --
895 -- Post Success:
896 --   Processing continues if employer_country has valid value
897 --   in fnd_territories
898 --
899 -- Post Failure:
900 --   An application error is raised if employer country is not valid
901 --
902 -- {End Of Comments}
903 -- ----------------------------------------------------------------------------
904 procedure chk_employer_country
905           (p_previous_employer_id
906           in per_previous_employers.previous_employer_id%type
907           ,p_object_version_number
908           in per_previous_employers.object_version_number%type
909           ,p_employer_country
910           in per_previous_employers.employer_country%type) is
911   cursor csr_employer_country is
912     select  territory_code
913     from    fnd_territories_vl
914     where   territory_code = p_employer_country;
915   l_employer_country  per_previous_employers.employer_country%type;
916   --
917   l_proc            varchar2(72) := g_package||'chk_employer_country';
918   l_api_updating    boolean;
919 begin
920   hr_utility.set_location('Entering:'||l_proc, 5);
921   --
922   if p_employer_country is not null then
923     hr_utility.set_location(l_proc, 10);
924     l_api_updating    := per_pem_shd.api_updating(p_previous_employer_id
925                                                   =>  p_previous_employer_id
926                                                   ,p_object_version_number
927                                                   =>  p_object_version_number
928                                                   );
929     if  ((l_api_updating
930           and nvl(per_pem_shd.g_old_rec.employer_country, hr_api.g_varchar2)
931               <> nvl(p_employer_country,hr_api.g_varchar2))
932         or
933         (not l_api_updating))
934     then
935       hr_utility.set_location(l_proc, 15);
936       open  csr_employer_country;
937       fetch csr_employer_country into l_employer_country;
938       if  csr_employer_country%notfound then
939         hr_utility.set_location(l_proc, 20);
940         close csr_employer_country;
944       if  csr_employer_country%isopen then
941         fnd_message.set_name('PER','HR_289531_PEM_VALD_EMPR_CNTRY');
942         fnd_message.raise_error;
943       end if;
945         close csr_employer_country;
946       end if;
947     end if;
948   end if;
949   --
950   hr_utility.set_location('Leaving:'||l_proc, 25);
951 exception
952   when app_exception.application_exception then
953     if hr_multi_message.exception_add
954       (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.EMPLOYER_COUNTRY'
955       ) then
956       hr_utility.set_location('Leaving:'||l_proc, 30);
957       raise;
958     end if;
959     hr_utility.set_location('Leaving:'||l_proc,40);
960 end chk_employer_country;
961 --
962 -- ----------------------------------------------------------------------------
963 -- |--------------------------< chk_employer_type >---------------------------|
964 -- ----------------------------------------------------------------------------
965 -- {Start Of Comments}
966 --
967 -- Description:
968 --   This procedure ensures that employer_type has valid lookup
969 --
970 -- Pre Conditions:
971 --   g_old_rec has been populated with details of the values currently in
972 --   the database.
973 --
974 -- In Arguments:
975 --  p_previous_employer_id
976 --  p_object_version_number
977 --  p_employer_type
978 --  p_effective_date
979 --
980 -- Post Success:
981 --   Processing continues if employer_type has valid lookup
982 --
983 -- Post Failure:
984 --   An application error is raised if employer_type has no valid lookup
985 --
986 -- {End Of Comments}
987 -- ----------------------------------------------------------------------------
988 procedure chk_employer_type
989           (p_previous_employer_id
990           in  per_previous_employers.previous_employer_id%type
991           ,p_object_version_number
992           in  per_previous_employers.object_version_number%type
993           ,p_employer_type
994           in  per_previous_employers.employer_type%type
995           ,p_effective_date in  date) is
996   l_proc              varchar2(72) := g_package||'chk_employer_type';
997   l_no_lookup         boolean;
998   l_effective_date    date := p_effective_date;
999   l_lookup_type       fnd_lookups.lookup_type%type := 'PREV_EMP_TYPE';
1000   l_lookup_code       per_previous_employers.employer_type%type
1001                       := p_employer_type;
1002   l_api_updating      boolean;
1003 begin
1004   hr_utility.set_location('Entering:'||l_proc, 5);
1005   --
1006   if p_employer_type is not null then
1007     hr_utility.set_location(l_proc, 10);
1008     l_api_updating    := per_pem_shd.api_updating(p_previous_employer_id
1009                                                  =>  p_previous_employer_id
1010                                                  ,p_object_version_number
1011                                                  =>  p_object_version_number
1012                                                  );
1013     if ((l_api_updating and
1014                nvl(p_employer_type,hr_api.g_varchar2)
1015                <> nvl(per_pem_shd.g_old_rec.employer_type, hr_api.g_varchar2))
1016        or
1017        (not l_api_updating)) then
1018       hr_utility.set_location(l_proc, 15);
1019       l_no_lookup := hr_api.not_exists_in_leg_lookups
1020                       (p_effective_date =>  l_effective_date
1021                       ,p_lookup_type    =>  l_lookup_type
1022                       ,p_lookup_code    =>  l_lookup_code
1023                       );
1024       if l_no_lookup = true then
1025         hr_utility.set_location(l_proc, 20);
1026         fnd_message.set_name('PER','HR_289532_PEM_VALID_EMPR_TYPE');
1027         fnd_message.raise_error;
1028       end if;
1029     end if;
1030   end if;
1031   --
1032   hr_utility.set_location('Leaving:'||l_proc, 25);
1033 exception
1034   when app_exception.application_exception then
1035     if hr_multi_message.exception_add
1036       (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.EMPLOYER_TYPE'
1037       ) then
1038       hr_utility.set_location('Leaving:'||l_proc, 30);
1039       raise;
1040     end if;
1041     hr_utility.set_location('Leaving:'||l_proc,40);
1042 end chk_employer_type;
1043 --
1044 -- ----------------------------------------------------------------------------
1045 -- |-------------------------< chk_employer_subtype >-------------------------|
1046 -- ----------------------------------------------------------------------------
1047 -- {Start Of Comments}
1048 --
1049 -- Description:
1050 --   This procedure ensures that employer_subtype has valid lookup
1051 --
1052 -- Pre Conditions:
1053 --   g_old_rec has been populated with details of the values currently in
1054 --   the database.
1055 --
1056 -- In Arguments:
1057 --  p_previous_employer_id
1058 --  p_object_version_number
1059 --  p_employer_type
1060 --  p_employer_subtype
1061 --  p_effective_date
1062 --
1063 -- Post Success:
1064 --   Processing continues if employer_subtype has valid lookup
1065 --
1066 -- Post Failure:
1067 --   An application error is raised if employer_subtype has no valid lookup
1068 --
1069 -- {End Of Comments}
1070 -- ----------------------------------------------------------------------------
1071 procedure chk_employer_subtype
1072           (p_previous_employer_id
1076           ,p_employer_type
1073           in  per_previous_employers.previous_employer_id%type
1074           ,p_object_version_number
1075           in  per_previous_employers.object_version_number%type
1077           in per_previous_employers.employer_type%type
1078           ,p_employer_subtype
1079           in  per_previous_employers.employer_subtype%type
1080           ,p_effective_date in  date) is
1081   --
1082   cursor csr_employer_subtype is
1083          select lookup_code
1084          from   hr_leg_lookups
1085          where  lookup_type = 'PREV_EMP_SUBTYPE'
1086          and    lookup_code like p_employer_type||'_%'
1087          and    lookup_code = p_employer_subtype;
1088   --
1089   l_proc            varchar2(72) := g_package||'chk_employer_subtype';
1090   l_no_lookup       boolean;
1091   l_effective_date  date := p_effective_date;
1092   l_lookup_type     fnd_lookups.lookup_type%type := 'PREV_EMP_SUBTYPE';
1093   l_lookup_code     fnd_lookups.lookup_code%type := p_employer_subtype;
1094   l_employer_subtype  hr_leg_lookups.lookup_code%type;
1095   --
1096   l_api_updating    boolean;
1097 begin
1098   hr_utility.set_location('Entering:'||l_proc, 5);
1099   --
1100   --Only proceed with employer_subtype validation when multiple message list
1101   --does not already contain an error associated with employer type column.
1102   --
1103   if hr_multi_message.no_exclusive_error
1104     (p_check_column1    => 'PER_PREVIOUS_EMPLOYERS.EMPLOYER_TYPE'
1105     ) then
1106     if p_employer_subtype is not null then
1107       hr_utility.set_location(l_proc, 10);
1108       l_api_updating := per_pem_shd.api_updating(p_previous_employer_id
1109                                               =>  p_previous_employer_id
1110                                               ,p_object_version_number
1111                                               =>  p_object_version_number
1112                                               );
1113       if ((l_api_updating and
1114                  nvl(p_employer_subtype,hr_api.g_varchar2)
1115                  <> nvl(per_pem_shd.g_old_rec.employer_subtype
1116                         , hr_api.g_varchar2))
1117        or
1118        (not l_api_updating)) then
1119         hr_utility.set_location(l_proc, 15);
1120         -- Check for standard lookup
1121         l_no_lookup :=  hr_api.not_exists_in_leg_lookups
1122                               (p_effective_date =>  l_effective_date
1123                               ,p_lookup_type    =>  l_lookup_type
1124                               ,p_lookup_code    =>  l_lookup_code
1125                               );
1126         if l_no_lookup = true then
1127           hr_utility.set_location(l_proc, 20);
1128           fnd_message.set_name('PER','HR_289533_PEM_VALID_EMPR_SBTP');
1129           fnd_message.raise_error;
1130         end if;
1131         -- Check for the dependency on employer type
1132         hr_utility.set_location(l_proc, 25);
1133         open csr_employer_subtype;
1134         fetch csr_employer_subtype into l_employer_subtype;
1135         if csr_employer_subtype%notfound then
1136           hr_utility.set_location(l_proc, 30);
1137           close csr_employer_subtype;
1138           fnd_message.set_name('PER','HR_289533_PEM_VALID_EMPR_SBTP');
1139           fnd_message.raise_error;
1140         end if;
1141         if csr_employer_subtype%isopen then
1142           close csr_employer_subtype;
1143         end if;
1144       end if;
1145     end if;
1146   end if;
1147   --
1148   hr_utility.set_location('Leaving:'||l_proc, 35);
1149 exception
1150   when app_exception.application_exception then
1151     if hr_multi_message.exception_add
1152       (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.EMPLOYER_TYPE'
1153       ,p_associated_column2  => 'PER_PREVIOUS_EMPLOYERS.EMPLOYER_SUBTYPE'
1154       ) then
1155       hr_utility.set_location('Leaving:'||l_proc, 40);
1156       raise;
1157     end if;
1158     hr_utility.set_location('Leaving:'||l_proc,50);
1159 end chk_employer_subtype;
1160 --
1161 -- -----------------------------------------------------------------------
1162 -- |---------------------------< chk_start_end_dates >-------------------|
1163 -- -----------------------------------------------------------------------
1164 -- {Start Of Comments}
1165 --
1166 -- Description:
1167 --   This procedure ensures that end_date is greater than start_date
1168 --
1169 -- Pre Conditions:
1170 --   g_old_rec has been populated with details of the values currently in
1171 --   the database.
1172 --
1173 -- In Arguments:
1174 --  p_previous_employer_id
1175 --  p_object_version_number
1176 --  p_start_date
1177 --  p_end_date
1178 --
1179 -- Post Success:
1180 --   Processing continues if end_date is greater than start_date
1181 --
1182 -- Post Failure:
1183 --   An application error is raised if start_date is greater than end_date
1184 --
1185 -- {End Of Comments}
1186 -- ----------------------------------------------------------------------------
1187 procedure chk_start_end_dates
1188           (p_previous_employer_id
1189           in  per_previous_employers.previous_employer_id%type
1190           ,p_object_version_number
1191           in  per_previous_employers.object_version_number%type
1192           ,p_start_date
1193           in  per_previous_employers.start_date%type
1194           ,p_end_date
1195           in  per_previous_employers.end_date%TYPE
1196 	  ,p_effective_date
1200 begin
1197 	  IN  per_previous_employers.start_date%type) is
1198 l_proc            varchar2(72) := g_package||'chk_start_end_dates';
1199 l_api_updating    boolean;
1201   hr_utility.set_location('Entering:'||l_proc, 5);
1202   --
1203     -- This If condition added for bug 7112425
1204 
1205     IF p_start_date is not null  AND p_start_date > p_effective_date THEN
1206           fnd_message.set_name('PER','HR_INVAL_ST_DT_PEM');
1207           fnd_message.raise_error;
1208     END IF ;
1209   hr_utility.set_location('Entering:'||l_proc, 6);
1210 
1211   if p_start_date is not null and p_end_date is not null then
1212     hr_utility.set_location(l_proc, 10);
1213     l_api_updating := per_pem_shd.api_updating(p_previous_employer_id
1214                                               =>  p_previous_employer_id
1215                                               ,p_object_version_number
1216                                               =>  p_object_version_number
1217                                               );
1218     if ((l_api_updating and
1219         ( nvl(p_start_date,hr_api.g_sot)
1220           <> nvl(per_pem_shd.g_old_rec.start_date, hr_api.g_sot)
1221              or
1222              nvl(p_end_date,hr_api.g_eot)
1223              <> nvl(per_pem_shd.g_old_rec.end_date, hr_api.g_eot)
1224         ))
1225         or
1226         (not l_api_updating)) then
1227           hr_utility.set_location(l_proc, 15);
1228           if p_start_date > p_end_date then
1229             hr_utility.set_location(l_proc, 20);
1230             fnd_message.set_name('PER','HR_289530_PEM_STRT_END_DATES');
1231             fnd_message.set_token('START_DATE',TO_CHAR(p_start_date,'DD-MON-YYYY'),true);
1232             fnd_message.set_token('END_DATE',TO_CHAR(p_end_date,'DD-MON-YYYY'),true);
1233             fnd_message.raise_error;
1234           end if;
1235     end if;
1236   end if;
1237   --
1238   hr_utility.set_location('Leaving:'||l_proc, 25);
1239 /*exception
1240   when app_exception.application_exception then
1241     if hr_multi_message.exception_add
1242       (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.START_DATE'
1243       ,p_associated_column2  => 'PER_PREVIOUS_EMPLOYERS.END_DATE'
1244       ) then
1245       hr_utility.set_location('Leaving:'||l_proc, 30);
1246       raise;
1247     end if;
1248     hr_utility.set_location('Leaving:'||l_proc,40);*/--commented for the bug 5686794
1249 end chk_start_end_dates;
1250 --
1251 -- -----------------------------------------------------------------------
1252 -- |---------------------------< chk_period_years >----------------------|
1253 -- -----------------------------------------------------------------------
1254 -- {Start Of Comments}
1255 --
1256 -- Description:
1257 --   This procedure ensures that period_years is between 0 and 99
1258 --
1259 -- Pre Conditions:
1260 --   g_old_rec has been populated with details of the values currently in
1261 --   the database.
1262 --
1263 -- In Arguments:
1264 --  p_period_years
1265 --  p_previous_employer_id
1266 --  p_object_version_number
1267 --
1268 -- Post Success:
1269 --   Processing continues if period_years is between 0 and 99
1270 --
1271 -- Post Failure:
1272 --   An application error is raised if period_years value is not in range
1273 --   of 0 and 99.
1274 --
1275 -- {End Of Comments}
1276 -- ----------------------------------------------------------------------------
1277 procedure chk_period_years
1278           (p_period_years
1279            in  per_previous_employers.period_years%type
1280           ,p_previous_employer_id
1281            in  per_previous_employers.previous_employer_id%type
1282           ,p_object_version_number
1283            in  per_previous_employers.object_version_number%type) is
1284   l_proc          varchar2(72) := g_package||'chk_period_years';
1285   l_api_updating  boolean;
1286 begin
1287   hr_utility.set_location('Entering:'||l_proc, 5);
1288   --
1289   if p_period_years is not null then
1290     l_api_updating := per_pem_shd.api_updating(p_previous_employer_id
1291                                               =>  p_previous_employer_id
1292                                               ,p_object_version_number
1293                                               =>  p_object_version_number);
1294     hr_utility.set_location(l_proc, 10);
1295     if ((l_api_updating and
1296         (   nvl(p_period_years,hr_api.g_number)
1297             <> nvl(per_pem_shd.g_old_rec.period_years, hr_api.g_number)
1298         )
1299        ) or
1300        (not l_api_updating)) then
1301       hr_utility.set_location(l_proc, 15);
1302       if p_period_years not between 0 and 99 then
1303         hr_utility.set_location(l_proc, 20);
1304         fnd_message.set_name('PER','HR_289534_PEM_VALID_PRD_RANGE');
1305         fnd_message.set_token('RANGE_START','0',true);
1306         fnd_message.set_token('RANGE_END','99',true);
1307         fnd_message.raise_error;
1308       end if;
1309     end if;
1310   end if;
1311   --
1312   hr_utility.set_location('Leaving:'||l_proc, 25);
1313 exception
1314   when app_exception.application_exception then
1315     if hr_multi_message.exception_add
1316       (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.PERIOD_YEARS'
1317       ) then
1318       hr_utility.set_location('Leaving:'||l_proc, 30);
1319       raise;
1320     end if;
1321     hr_utility.set_location('Leaving:'||l_proc,40);
1322 end chk_period_years;
1323 --
1324 -- -----------------------------------------------------------------------
1328 --
1325 -- |---------------------------< chk_period_months >---------------------|
1326 -- -----------------------------------------------------------------------
1327 -- {Start Of Comments}
1329 -- Description:
1330 --   This procedure ensures that period_months is between 0 and 11
1331 --
1332 -- Pre Conditions:
1333 --   g_old_rec has been populated with details of the values currently in
1334 --   the database.
1335 --
1336 -- In Arguments:
1337 --  p_period_months
1338 --  p_previous_employer_id
1339 --  p_object_version_number
1340 --
1341 -- Post Success:
1342 --   Processing continues if period_years is between 0 and 11
1343 --
1344 -- Post Failure:
1345 --   An application error is raised if period_months value is not in range
1346 --   of 0 and 11.
1347 --
1348 -- {End Of Comments}
1349 -- ----------------------------------------------------------------------------
1350 procedure chk_period_months
1351           (p_period_months
1352            in  per_previous_employers.period_months%type
1353           ,p_previous_employer_id
1354            in  per_previous_employers.previous_employer_id%type
1355           ,p_object_version_number
1356            in  per_previous_employers.object_version_number%type) is
1357   l_proc          varchar2(72) := g_package||'chk_period_months';
1358   l_api_updating  boolean;
1359 begin
1360   hr_utility.set_location('Entering:'||l_proc, 5);
1361   --
1362   if p_period_months is not null then
1363     l_api_updating := per_pem_shd.api_updating(p_previous_employer_id
1364                                               =>  p_previous_employer_id
1365                                               ,p_object_version_number
1366                                               =>  p_object_version_number);
1367     hr_utility.set_location(l_proc, 10);
1368     if ((l_api_updating and
1369         (   nvl(p_period_months,hr_api.g_number)
1370             <> nvl(per_pem_shd.g_old_rec.period_months,hr_api.g_number)
1371         )
1372        ) or
1373        (not l_api_updating)) then
1374       hr_utility.set_location(l_proc, 15);
1375       if p_period_months not between 0 and 11 then
1376         hr_utility.set_location(l_proc, 20);
1377         fnd_message.set_name('PER','HR_289534_PEM_VALID_PRD_RANGE');
1378         fnd_message.set_token('RANGE_START','0',true);
1379         fnd_message.set_token('RANGE_END','11',true);
1380         fnd_message.raise_error;
1381       end if;
1382     end if;
1383   end if;
1384   --
1385   hr_utility.set_location('Leaving:'||l_proc, 25);
1386 exception
1387   when app_exception.application_exception then
1388     if hr_multi_message.exception_add
1389       (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.PERIOD_MONTHS'
1390       ) then
1391       hr_utility.set_location('Leaving:'||l_proc, 30);
1392       raise;
1393     end if;
1394     hr_utility.set_location('Leaving:'||l_proc,40);
1395 end chk_period_months;
1396 --
1397 -- -----------------------------------------------------------------------
1398 -- |---------------------------< chk_period_days >-----------------------|
1399 -- -----------------------------------------------------------------------
1400 -- {Start Of Comments}
1401 --
1402 -- Description:
1403 --   This procedure ensures that period_days is between 0 and 365
1404 --
1405 -- Pre Conditions:
1406 --   g_old_rec has been populated with details of the values currently in
1407 --   the database.
1408 --
1409 -- In Arguments:
1410 --  p_period_days
1411 --  p_previous_employer_id
1412 --  p_object_version_number
1413 --
1414 -- Post Success:
1415 --   Processing continues if period_days is between 0 and 365
1416 --
1417 -- Post Failure:
1418 --   An application error is raised if period_days value is not in range
1419 --   of 0 and 365.
1420 --
1421 -- {End Of Comments}
1422 -- ----------------------------------------------------------------------------
1423 procedure chk_period_days
1424           (p_period_days
1425            in  per_previous_employers.period_days%type
1426           ,p_previous_employer_id
1427            in  per_previous_employers.previous_employer_id%type
1428           ,p_object_version_number
1429            in  per_previous_employers.object_version_number%type) is
1430   l_proc          varchar2(72) := g_package||'chk_period_days';
1431   l_api_updating  boolean;
1432 begin
1433   hr_utility.set_location('Entering:'||l_proc, 5);
1434   --
1435   if p_period_days is not null then
1436     l_api_updating := per_pem_shd.api_updating(p_previous_employer_id
1437                                               =>  p_previous_employer_id
1438                                               ,p_object_version_number
1439                                               =>  p_object_version_number);
1440     hr_utility.set_location(l_proc, 10);
1441     if ((l_api_updating and
1442         (   nvl(p_period_days,hr_api.g_number)
1443             <> nvl(per_pem_shd.g_old_rec.period_days,hr_api.g_number)
1444         )
1445        ) or
1446        (not l_api_updating)) then
1447       hr_utility.set_location(l_proc, 15);
1448       if p_period_days not between 0 and 365 then
1449         hr_utility.set_location(l_proc, 20);
1450         fnd_message.set_name('PER','HR_289534_PEM_VALID_PRD_RANGE');
1451         fnd_message.set_token('RANGE_START','0',true);
1452         fnd_message.set_token('RANGE_END','365',true);
1453         fnd_message.raise_error;
1454       end if;
1455     end if;
1456   end if;
1457   --
1461     if hr_multi_message.exception_add
1458   hr_utility.set_location('Leaving:'||l_proc, 25);
1459 exception
1460   when app_exception.application_exception then
1462       (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.PERIOD_DAYS'
1463       ) then
1464       hr_utility.set_location('Leaving:'||l_proc, 30);
1465       raise;
1466     end if;
1467     hr_utility.set_location('Leaving:'||l_proc,40);
1468 end chk_period_days;
1469 --
1470 -- ----------------------------------------------------------------------------
1471 -- |---------------------------< chk_all_assignments >------------------------|
1472 -- ----------------------------------------------------------------------------
1473 -- {Start Of Comments}
1474 --
1475 -- Description:
1476 --   This procedure ensures that all_assignments is valid value and
1477 --   this previous employer is not associated with any assignments.
1478 --   Valid values for all_assignments are 'Y' and 'N'
1479 --
1480 -- Pre Conditions:
1481 --   g_old_rec has been populated with details of the values currently in
1482 --   the database.
1483 --
1484 -- In Arguments:
1485 --  p_previous_employer_id
1486 --  p_object_version_number
1487 --  p_all_assignments
1488 --
1489 -- Post Success:
1490 --   Processing continues if all_assignments value is valid and
1491 --   this previous employer is not mapped to any assignment
1492 --
1493 --
1494 -- Post Failure:
1495 --   An application error is raised if all_assignments value is not valid
1496 --   if there are any assignments mapped to this previous employer
1497 --
1498 -- {End Of Comments}
1499 -- ----------------------------------------------------------------------------
1500 procedure chk_all_assignments
1501           (p_previous_employer_id
1502           in  per_previous_employers.previous_employer_id%type
1503           ,p_object_version_number
1504           in  per_previous_employers.object_version_number%type
1505           ,p_all_assignments
1506           in  per_previous_employers.all_assignments%type) is
1507   cursor csr_pem_assignments is
1508        select previous_job_usage_id
1509        from   per_previous_job_usages
1510        where  previous_employer_id = p_previous_employer_id;
1511   l_previous_job_usage_id   per_previous_job_usages.previous_job_usage_id%type;
1512   --
1513   l_proc                varchar2(72) := g_package||'chk_all_assignments';
1514   l_api_updating        boolean;
1515 begin
1516   hr_utility.set_location('Entering:'||l_proc, 5);
1517   --
1518   if p_all_assignments is not null then
1519     hr_utility.set_location(l_proc, 10);
1520     l_api_updating := per_pem_shd.api_updating(p_previous_employer_id
1521                                               =>  p_previous_employer_id
1522                                               ,p_object_version_number
1523                                               =>  p_object_version_number
1524                                               );
1525 
1526     if ((l_api_updating and
1527          nvl(p_all_assignments,hr_api.g_varchar2)
1528           <> nvl(per_pem_shd.g_old_rec.all_assignments, hr_api.g_varchar2))
1529           or
1530           (not l_api_updating)) then
1531         hr_utility.set_location(l_proc, 15);
1532         if p_all_assignments = 'Y' or p_all_assignments = 'N' then
1533           hr_utility.set_location(l_proc, 20);
1534           if p_all_assignments = 'Y' then
1535             hr_utility.set_location(l_proc, 25);
1536             open    csr_pem_assignments;
1537             fetch   csr_pem_assignments into l_previous_job_usage_id;
1538             if csr_pem_assignments%found then
1539               hr_utility.set_location(l_proc, 30);
1540               close   csr_pem_assignments;
1541               fnd_message.set_name('PER','HR_289546_PEM_ALL_ASG_MOD_NA');
1542               hr_multi_message.add
1543           (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.PREVIOUS_EMPLOYER_ID'
1544                );
1545             end if;
1546             if  csr_pem_assignments%isopen then
1547               close csr_pem_assignments;
1548             end if;
1549           end if;
1550         else
1551           hr_utility.set_location(l_proc, 35);
1552           fnd_message.set_name('PER','HR_289545_PEM_VALID_ASGMT_FLAG');
1553           hr_multi_message.add
1554        (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.ALL_ASSIGNMENTS'
1555             );
1556         end if;
1557     end if;
1558   end if;
1559   --
1560   hr_utility.set_location('Leaving:'||l_proc, 40);
1561 end chk_all_assignments;
1562 --
1563 -- ----------------------------------------------------------------------------
1564 -- |-------------------------< chk_business_group_id >------------------------|
1565 -- ----------------------------------------------------------------------------
1566 -- {Start Of Comments}
1567 --
1568 -- Description:
1569 --   This procedure ensures that business_group_id value is valid.
1570 --
1571 -- Pre Conditions:
1572 --   g_old_rec has been populated with details of the values currently in
1573 --   the database.
1574 --
1575 -- In Arguments:
1576 --  p_business_group_id
1577 --  p_previous_employer_id
1578 --  p_object_version_number
1579 --  p_effective_date
1580 --
1581 -- Post Success:
1582 --   Processing continues if business_group_id is valid and if updating,
1583 --   old_rec.business_group_id is null
1584 --
1585 -- Post Failure:
1586 --   An application error is raised
1587 --   if updating and old_rec.business_group_id is not null, or
1588 --   business_group_id is not valid.
1589 --
1593             (p_business_group_id
1590 -- {End Of Comments}
1591 -- ----------------------------------------------------------------------------
1592 procedure chk_business_group_id
1594                in  per_previous_employers.business_group_id%type
1595             ,p_previous_employer_id
1596                in  per_previous_employers.previous_employer_id%type
1597             ,p_object_version_number
1598                in  per_previous_employers.object_version_number%type
1599             ,p_effective_date        in date) is
1600   --
1601   l_proc          varchar2(72) := g_package||'chk_business_group_id';
1602   l_api_updating  boolean;
1603   --
1604 begin
1605   hr_utility.set_location('Entering:'||l_proc, 5);
1606   if p_business_group_id is not null then
1607     hr_utility.set_location(l_proc, 10);
1608     --
1609     --validate business_group_id
1610     --
1611     hr_api.validate_bus_grp_id(p_business_group_id);
1612   --
1613   end if;
1614   --
1615   --
1616   --update only if null
1617   --
1618   l_api_updating    := per_pem_shd.api_updating
1619                               (p_previous_employer_id  =>  p_previous_employer_id
1620                               ,p_object_version_number =>  p_object_version_number );
1621   if  (l_api_updating
1622         and per_pem_shd.g_old_rec.business_group_id is not null
1623         and per_pem_shd.g_old_rec.business_group_id <> p_business_group_id ) then
1624       --
1625       hr_utility.set_message(800, 'HR_289947_INV_UPD_BG_ID');
1626       hr_utility.raise_error;
1627       --
1628   end if;
1629   --
1630   hr_utility.set_location('Leaving:'||l_proc, 40);
1631 exception
1632   when app_exception.application_exception then
1633     if hr_multi_message.exception_add
1634       (p_associated_column1  => 'PER_PREVIOUS_EMPLOYERS.BUSINESS_GROUP_ID'
1635       ) then
1636       hr_utility.set_location('Leaving:'||l_proc, 50);
1637       raise;
1638     end if;
1639     hr_utility.set_location('Leaving:'||l_proc,60);
1640 end chk_business_group_id;
1641 --
1642 -- ----------------------------------------------------------------------------
1643 -- |---------------------------< insert_validate >----------------------------|
1644 -- ----------------------------------------------------------------------------
1645 Procedure insert_validate
1646   (p_effective_date               in date
1647   ,p_rec                          in per_pem_shd.g_rec_type
1648   ) is
1649 --
1650   l_proc  varchar2(72) := g_package||'insert_validate';
1651 --
1652 Begin
1653   hr_utility.set_location('Entering:'||l_proc, 5);
1654   --
1655   --Validate Important Attributes
1656   --
1657   hr_utility.set_location(l_proc, 10);
1658   hr_api.mandatory_arg_error
1659   (p_api_name           => l_proc
1660   ,p_argument           => 'EFFECTIVE_DATE'
1661   ,p_argument_value     => p_effective_date
1662   );
1663   -- Call all supporting business operations
1664   hr_utility.set_location(l_proc, 15);
1665   --
1666   if p_rec.party_id is null and p_rec.business_group_id is not null then
1667     hr_api.validate_bus_grp_id
1668     (p_business_group_id  => p_rec.business_group_id
1669     ,p_associated_column1 =>per_pem_shd.g_tab_nam || '.BUSINESS_GROUP_ID'
1670     );  -- Validate Bus Grp
1671   end if;
1672   --After validating the set of important attributes,
1673   --if multiple message detection is enabled and atleast
1674   --one error has been found then abort further validation.
1675   --
1676   hr_multi_message.end_validation_set;
1677   --
1678   --validate dependent attributes
1679   --
1680   hr_utility.set_location(l_proc, 18);
1681   chk_business_group_id(p_business_group_id     =>  p_rec.business_group_id
1682                        ,p_previous_employer_id  =>  p_rec.previous_employer_id
1683                        ,p_object_version_number =>  p_rec.object_version_number
1684                        ,p_effective_date        =>  p_effective_date);
1685   --
1686   hr_utility.set_location(l_proc, 20);
1687   chk_person_id(p_person_id             =>  p_rec.person_id
1688                ,p_effective_date        =>  p_effective_date
1689                ,p_previous_employer_id  =>  p_rec.previous_employer_id
1690                ,p_object_version_number =>  p_rec.object_version_number);
1691   --
1692   hr_utility.set_location(l_proc, 25);
1693   chk_party_id(p_party_id               =>  p_rec.party_id
1694               ,p_previous_employer_id   =>  p_rec.previous_employer_id
1695               ,p_object_version_number  =>  p_rec.object_version_number);
1696   --
1697   hr_utility.set_location(l_proc, 30);
1698   chk_employer_country(p_previous_employer_id   =>  p_rec.previous_employer_id
1699                       ,p_object_version_number  =>  p_rec.object_version_number
1700                       ,p_employer_country       =>  p_rec.employer_country);
1701   --
1702   hr_utility.set_location(l_proc, 35);
1703   chk_employer_type(p_previous_employer_id    =>  p_rec.previous_employer_id
1704                    ,p_object_version_number   =>  p_rec.object_version_number
1705                    ,p_employer_type           =>  p_rec.employer_type
1706                    ,p_effective_date          =>  p_effective_date);
1707   --
1708   hr_utility.set_location(l_proc, 40);
1709   chk_employer_subtype(p_previous_employer_id   =>  p_rec.previous_employer_id
1710                       ,p_object_version_number  =>  p_rec.object_version_number
1714   --
1711                       ,p_employer_type          =>  p_rec.employer_type
1712                       ,p_employer_subtype       =>  p_rec.employer_subtype
1713                       ,p_effective_date         =>  p_effective_date);
1715   hr_utility.set_location(l_proc, 50);
1716   chk_start_end_dates(p_previous_employer_id    =>  p_rec.previous_employer_id
1717                      ,p_object_version_number   =>  p_rec.object_version_number
1718                      ,p_start_date              =>  p_rec.start_date
1719                      ,p_end_date                =>  p_rec.end_date
1720 		     ,p_effective_date    =>  p_effective_date);  -- bug 7112425
1721   --
1722   hr_utility.set_location(l_proc, 55);
1723   chk_period_years(p_period_years
1724                    =>  p_rec.period_years
1725                   ,p_previous_employer_id
1726                    =>  p_rec.previous_employer_id
1727                   ,p_object_version_number
1728                    =>  p_rec.object_version_number);
1729   --
1730   hr_utility.set_location(l_proc, 60);
1731   chk_period_months(p_period_months
1732                     =>  p_rec.period_months
1733                    ,p_previous_employer_id
1734                     =>  p_rec.previous_employer_id
1735                    ,p_object_version_number
1736                     =>  p_rec.object_version_number);
1737   --
1738   hr_utility.set_location(l_proc, 65);
1739   chk_period_days(p_period_days
1740                   =>  p_rec.period_days
1741                  ,p_previous_employer_id
1742                   =>  p_rec.previous_employer_id
1743                  ,p_object_version_number
1744                   =>  p_rec.object_version_number);
1745   --
1746   hr_utility.set_location(l_proc, 70);
1747   chk_all_assignments(p_previous_employer_id    =>  p_rec.previous_employer_id
1748                      ,p_object_version_number   =>  p_rec.object_version_number
1749                      ,p_all_assignments         =>  p_rec.all_assignments);
1750   --
1751   hr_utility.set_location(l_proc, 75);
1752   per_pem_bus.chk_ddf(p_rec);
1753   --
1754   hr_utility.set_location(l_proc, 80);
1755   per_pem_bus.chk_df(p_rec);
1756   --
1757   hr_utility.set_location(' Leaving:'||l_proc, 85);
1758 End insert_validate;
1759 --
1760 -- ----------------------------------------------------------------------------
1761 -- |---------------------------< update_validate >----------------------------|
1762 -- ----------------------------------------------------------------------------
1763 Procedure update_validate
1764   (p_effective_date               in date
1765   ,p_rec                          in per_pem_shd.g_rec_type
1766   ) is
1767 --
1768   l_proc  varchar2(72) := g_package||'update_validate';
1769 --
1770 Begin
1771   hr_utility.set_location('Entering:'||l_proc, 5);
1772   --
1773   -- Call all supporting business operations
1774   --
1775   hr_utility.set_location(l_proc, 10);
1776   hr_api.mandatory_arg_error
1777   (p_api_name           => l_proc
1778   ,p_argument           => 'EFFECTIVE_DATE'
1779   ,p_argument_value     => p_effective_date
1780   );
1781   --
1782   chk_non_updateable_args
1783     (p_effective_date              => p_effective_date
1784     ,p_rec                         => p_rec
1785     );
1786   --
1787   hr_utility.set_location(l_proc, 15);
1788   if p_rec.party_id is null and p_rec.business_group_id is not null then
1789     hr_api.validate_bus_grp_id
1790     (p_business_group_id  => p_rec.business_group_id
1791     ,p_associated_column1 =>per_pem_shd.g_tab_nam || '.BUSINESS_GROUP_ID'
1792     );  -- Validate Bus Grp
1793   end if;
1794   --
1795   --After validating the set of important attributes,
1796   --if multiple message detection is enabled and atleast
1797   --one error has been found then abort further validation.
1798   --
1799   hr_multi_message.end_validation_set;
1800   --
1801   --validate dependent attributes
1802   --
1803   hr_utility.set_location(l_proc, 18);
1804   chk_business_group_id(p_business_group_id     =>  p_rec.business_group_id
1805                        ,p_previous_employer_id  =>  p_rec.previous_employer_id
1806                        ,p_object_version_number =>  p_rec.object_version_number
1807                        ,p_effective_date        =>  p_effective_date);
1808   --
1809   hr_utility.set_location(l_proc, 20);
1810   chk_employer_country(p_previous_employer_id   =>  p_rec.previous_employer_id
1811                       ,p_object_version_number  =>  p_rec.object_version_number
1812                       ,p_employer_country       =>  p_rec.employer_country);
1813   --
1814   hr_utility.set_location(l_proc, 25);
1815   chk_employer_type(p_previous_employer_id    =>  p_rec.previous_employer_id
1816                    ,p_object_version_number   =>  p_rec.object_version_number
1817                    ,p_employer_type           =>  p_rec.employer_type
1818                    ,p_effective_date          =>  p_effective_date);
1819   --
1820   hr_utility.set_location(l_proc, 30);
1821   chk_employer_subtype(p_previous_employer_id   =>  p_rec.previous_employer_id
1822                       ,p_object_version_number  =>  p_rec.object_version_number
1823                       ,p_employer_type          =>  p_rec.employer_type
1824                       ,p_employer_subtype       =>  p_rec.employer_subtype
1825                       ,p_effective_date         =>  p_effective_date);
1826   --
1827   hr_utility.set_location(l_proc, 40);
1828   chk_start_end_dates(p_previous_employer_id    =>  p_rec.previous_employer_id
1829                      ,p_object_version_number   =>  p_rec.object_version_number
1830                      ,p_start_date              =>  p_rec.start_date
1831                      ,p_end_date                =>  p_rec.end_date
1832 		     ,p_effective_date    =>  p_effective_date);  -- bug 7112425
1833   --
1834   hr_utility.set_location(l_proc, 45);
1835   chk_period_years(p_period_years
1836                    =>  p_rec.period_years
1837                   ,p_previous_employer_id
1838                    =>  p_rec.previous_employer_id
1839                   ,p_object_version_number
1840                    =>  p_rec.object_version_number);
1841   --
1842   hr_utility.set_location(l_proc, 50);
1843   chk_period_months(p_period_months
1844                     =>  p_rec.period_months
1845                    ,p_previous_employer_id
1846                     =>  p_rec.previous_employer_id
1847                    ,p_object_version_number
1848                     =>  p_rec.object_version_number);
1849   --
1850   hr_utility.set_location(l_proc, 55);
1851   chk_period_days(p_period_days
1852                   =>  p_rec.period_days
1853                  ,p_previous_employer_id
1854                   =>  p_rec.previous_employer_id
1855                  ,p_object_version_number
1856                   =>  p_rec.object_version_number);
1857   --
1858   hr_utility.set_location(l_proc, 60);
1859   chk_all_assignments(p_previous_employer_id    =>  p_rec.previous_employer_id
1860                      ,p_object_version_number   =>  p_rec.object_version_number
1861                      ,p_all_assignments         =>  p_rec.all_assignments);
1862   --
1863   hr_utility.set_location(l_proc, 65);
1864   per_pem_bus.chk_ddf(p_rec);
1865   --
1866   hr_utility.set_location(l_proc, 70);
1867   per_pem_bus.chk_df(p_rec);
1868   --
1869   hr_utility.set_location(' Leaving:'||l_proc, 75);
1870 End update_validate;
1871 --
1872 -- ----------------------------------------------------------------------------
1873 -- |---------------------------< delete_validate >----------------------------|
1874 -- ----------------------------------------------------------------------------
1875 Procedure delete_validate
1876   (p_rec                          in per_pem_shd.g_rec_type
1877   ) is
1878 --
1879   l_proc  varchar2(72) := g_package||'delete_validate';
1880 --
1881 Begin
1882   hr_utility.set_location('Entering:'||l_proc, 5);
1883   --
1884   -- Call all supporting business operations
1885   --
1886   hr_utility.set_location(' Leaving:'||l_proc, 10);
1887 End delete_validate;
1888 --
1889 end per_pem_bus;