[Home] [Help]
PACKAGE BODY: APPS.PER_PMA_BUS
Source
1 Package Body per_pma_bus as
2 /* $Header: pepmarhi.pkb 120.4.12010000.2 2008/08/06 09:29:11 ubhat ship $ */
3 --
4 -- ----------------------------------------------------------------------------
5 -- | Private Global Definitions |
6 -- ----------------------------------------------------------------------------
7 --
8 g_package varchar2(33) := ' per_pma_bus.'; -- Global package name
9 g_debug boolean := hr_utility.debug_enabled;
10 --
11 -- The following two global variables are only to be
12 -- used by the return_legislation_code function.
13 --
14 g_legislation_code varchar2(150) default null;
15 g_appraisal_period_id number default null;
16 --
17 -- ----------------------------------------------------------------------------
18 -- |------------------------------< chk_df >----------------------------------|
19 -- ----------------------------------------------------------------------------
20 --
21 -- Description:
22 -- Validates all the Descriptive Flexfield values.
23 --
24 -- Prerequisites:
25 -- All other columns have been validated. Must be called as the
26 -- last step from insert_validate and update_validate.
27 --
28 -- In Arguments:
29 -- p_rec
30 --
31 -- Post Success:
32 -- If the Descriptive Flexfield structure column and data values are
33 -- all valid this procedure will end normally and processing will
34 -- continue.
35 --
36 -- Post Failure:
37 -- If the Descriptive Flexfield structure column value or any of
38 -- the data values are invalid then an application error is raised as
39 -- a PL/SQL exception.
40 --
41 -- Access Status:
42 -- Internal Row Handler Use Only.
43 --
44 -- ----------------------------------------------------------------------------
45 procedure chk_df
46 (p_rec in per_pma_shd.g_rec_type
47 ) is
48 --
49 l_proc varchar2(72) := g_package || 'chk_df';
50 --
51 begin
52 hr_utility.set_location('Entering:'||l_proc,10);
53 --
54 if ((p_rec.appraisal_period_id is not null) and (
55 nvl(per_pma_shd.g_old_rec.attribute_category, hr_api.g_varchar2) <>
56 nvl(p_rec.attribute_category, hr_api.g_varchar2) or
57 nvl(per_pma_shd.g_old_rec.attribute1, hr_api.g_varchar2) <>
58 nvl(p_rec.attribute1, hr_api.g_varchar2) or
59 nvl(per_pma_shd.g_old_rec.attribute2, hr_api.g_varchar2) <>
60 nvl(p_rec.attribute2, hr_api.g_varchar2) or
61 nvl(per_pma_shd.g_old_rec.attribute3, hr_api.g_varchar2) <>
62 nvl(p_rec.attribute3, hr_api.g_varchar2) or
63 nvl(per_pma_shd.g_old_rec.attribute4, hr_api.g_varchar2) <>
64 nvl(p_rec.attribute4, hr_api.g_varchar2) or
65 nvl(per_pma_shd.g_old_rec.attribute5, hr_api.g_varchar2) <>
66 nvl(p_rec.attribute5, hr_api.g_varchar2) or
67 nvl(per_pma_shd.g_old_rec.attribute6, hr_api.g_varchar2) <>
68 nvl(p_rec.attribute6, hr_api.g_varchar2) or
69 nvl(per_pma_shd.g_old_rec.attribute7, hr_api.g_varchar2) <>
70 nvl(p_rec.attribute7, hr_api.g_varchar2) or
71 nvl(per_pma_shd.g_old_rec.attribute8, hr_api.g_varchar2) <>
72 nvl(p_rec.attribute8, hr_api.g_varchar2) or
73 nvl(per_pma_shd.g_old_rec.attribute9, hr_api.g_varchar2) <>
74 nvl(p_rec.attribute9, hr_api.g_varchar2) or
75 nvl(per_pma_shd.g_old_rec.attribute10, hr_api.g_varchar2) <>
76 nvl(p_rec.attribute10, hr_api.g_varchar2) or
77 nvl(per_pma_shd.g_old_rec.attribute11, hr_api.g_varchar2) <>
78 nvl(p_rec.attribute11, hr_api.g_varchar2) or
79 nvl(per_pma_shd.g_old_rec.attribute12, hr_api.g_varchar2) <>
80 nvl(p_rec.attribute12, hr_api.g_varchar2) or
81 nvl(per_pma_shd.g_old_rec.attribute13, hr_api.g_varchar2) <>
82 nvl(p_rec.attribute13, hr_api.g_varchar2) or
83 nvl(per_pma_shd.g_old_rec.attribute14, hr_api.g_varchar2) <>
84 nvl(p_rec.attribute14, hr_api.g_varchar2) or
85 nvl(per_pma_shd.g_old_rec.attribute15, hr_api.g_varchar2) <>
86 nvl(p_rec.attribute15, hr_api.g_varchar2) or
87 nvl(per_pma_shd.g_old_rec.attribute16, hr_api.g_varchar2) <>
88 nvl(p_rec.attribute16, hr_api.g_varchar2) or
89 nvl(per_pma_shd.g_old_rec.attribute17, hr_api.g_varchar2) <>
90 nvl(p_rec.attribute17, hr_api.g_varchar2) or
91 nvl(per_pma_shd.g_old_rec.attribute18, hr_api.g_varchar2) <>
92 nvl(p_rec.attribute18, hr_api.g_varchar2) or
93 nvl(per_pma_shd.g_old_rec.attribute19, hr_api.g_varchar2) <>
94 nvl(p_rec.attribute19, hr_api.g_varchar2) or
95 nvl(per_pma_shd.g_old_rec.attribute20, hr_api.g_varchar2) <>
96 nvl(p_rec.attribute20, hr_api.g_varchar2) or
97 nvl(per_pma_shd.g_old_rec.attribute21, hr_api.g_varchar2) <>
98 nvl(p_rec.attribute21, hr_api.g_varchar2) or
99 nvl(per_pma_shd.g_old_rec.attribute22, hr_api.g_varchar2) <>
100 nvl(p_rec.attribute22, hr_api.g_varchar2) or
101 nvl(per_pma_shd.g_old_rec.attribute23, hr_api.g_varchar2) <>
102 nvl(p_rec.attribute23, hr_api.g_varchar2) or
103 nvl(per_pma_shd.g_old_rec.attribute24, hr_api.g_varchar2) <>
104 nvl(p_rec.attribute24, hr_api.g_varchar2) or
105 nvl(per_pma_shd.g_old_rec.attribute25, hr_api.g_varchar2) <>
106 nvl(p_rec.attribute25, hr_api.g_varchar2) or
107 nvl(per_pma_shd.g_old_rec.attribute26, hr_api.g_varchar2) <>
108 nvl(p_rec.attribute26, hr_api.g_varchar2) or
109 nvl(per_pma_shd.g_old_rec.attribute27, hr_api.g_varchar2) <>
110 nvl(p_rec.attribute27, hr_api.g_varchar2) or
111 nvl(per_pma_shd.g_old_rec.attribute28, hr_api.g_varchar2) <>
112 nvl(p_rec.attribute28, hr_api.g_varchar2) or
113 nvl(per_pma_shd.g_old_rec.attribute29, hr_api.g_varchar2) <>
114 nvl(p_rec.attribute29, hr_api.g_varchar2) or
115 nvl(per_pma_shd.g_old_rec.attribute30, hr_api.g_varchar2) <>
116 nvl(p_rec.attribute30, hr_api.g_varchar2) ))
117 or (p_rec.appraisal_period_id is null) then
118 --
119 -- Only execute the validation if absolutely necessary:
120 -- a) During update, the structure column value or any
121 -- of the attribute values have actually changed.
122 -- b) During insert.
123 --
124 hr_dflex_utility.ins_or_upd_descflex_attribs
125 (p_appl_short_name => 'PER'
126 ,p_descflex_name => 'PER_APPRAISAL_PERIODS'
127 ,p_attribute_category => p_rec.attribute_category
128 ,p_attribute1_name => 'ATTRIBUTE1'
129 ,p_attribute1_value => p_rec.attribute1
130 ,p_attribute2_name => 'ATTRIBUTE2'
131 ,p_attribute2_value => p_rec.attribute2
132 ,p_attribute3_name => 'ATTRIBUTE3'
133 ,p_attribute3_value => p_rec.attribute3
134 ,p_attribute4_name => 'ATTRIBUTE4'
135 ,p_attribute4_value => p_rec.attribute4
136 ,p_attribute5_name => 'ATTRIBUTE5'
137 ,p_attribute5_value => p_rec.attribute5
138 ,p_attribute6_name => 'ATTRIBUTE6'
139 ,p_attribute6_value => p_rec.attribute6
140 ,p_attribute7_name => 'ATTRIBUTE7'
141 ,p_attribute7_value => p_rec.attribute7
142 ,p_attribute8_name => 'ATTRIBUTE8'
143 ,p_attribute8_value => p_rec.attribute8
144 ,p_attribute9_name => 'ATTRIBUTE9'
145 ,p_attribute9_value => p_rec.attribute9
146 ,p_attribute10_name => 'ATTRIBUTE10'
147 ,p_attribute10_value => p_rec.attribute10
148 ,p_attribute11_name => 'ATTRIBUTE11'
149 ,p_attribute11_value => p_rec.attribute11
150 ,p_attribute12_name => 'ATTRIBUTE12'
151 ,p_attribute12_value => p_rec.attribute12
152 ,p_attribute13_name => 'ATTRIBUTE13'
153 ,p_attribute13_value => p_rec.attribute13
154 ,p_attribute14_name => 'ATTRIBUTE14'
155 ,p_attribute14_value => p_rec.attribute14
156 ,p_attribute15_name => 'ATTRIBUTE15'
157 ,p_attribute15_value => p_rec.attribute15
158 ,p_attribute16_name => 'ATTRIBUTE16'
159 ,p_attribute16_value => p_rec.attribute16
160 ,p_attribute17_name => 'ATTRIBUTE17'
161 ,p_attribute17_value => p_rec.attribute17
162 ,p_attribute18_name => 'ATTRIBUTE18'
163 ,p_attribute18_value => p_rec.attribute18
164 ,p_attribute19_name => 'ATTRIBUTE19'
165 ,p_attribute19_value => p_rec.attribute19
166 ,p_attribute20_name => 'ATTRIBUTE20'
167 ,p_attribute20_value => p_rec.attribute20
168 ,p_attribute21_name => 'ATTRIBUTE21'
169 ,p_attribute21_value => p_rec.attribute21
170 ,p_attribute22_name => 'ATTRIBUTE22'
171 ,p_attribute22_value => p_rec.attribute22
172 ,p_attribute23_name => 'ATTRIBUTE23'
173 ,p_attribute23_value => p_rec.attribute23
174 ,p_attribute24_name => 'ATTRIBUTE24'
175 ,p_attribute24_value => p_rec.attribute24
176 ,p_attribute25_name => 'ATTRIBUTE25'
177 ,p_attribute25_value => p_rec.attribute25
178 ,p_attribute26_name => 'ATTRIBUTE26'
179 ,p_attribute26_value => p_rec.attribute26
180 ,p_attribute27_name => 'ATTRIBUTE27'
181 ,p_attribute27_value => p_rec.attribute27
182 ,p_attribute28_name => 'ATTRIBUTE28'
183 ,p_attribute28_value => p_rec.attribute28
184 ,p_attribute29_name => 'ATTRIBUTE29'
185 ,p_attribute29_value => p_rec.attribute29
186 ,p_attribute30_name => 'ATTRIBUTE30'
187 ,p_attribute30_value => p_rec.attribute30
188 );
189 end if;
190 --
191 hr_utility.set_location(' Leaving:'||l_proc,20);
192 end chk_df;
193 --
194 -- ----------------------------------------------------------------------------
195 -- |---------------------------< chk_start_date >----------------------------|
196 -- ----------------------------------------------------------------------------
197 Procedure chk_start_date
198 (p_task_start_date in date
199 )is
200 --
201 l_proc varchar2(72) := g_package||'chk_start_date';
202 --
203
204 Begin
205 hr_utility.set_location('Entering:'||l_proc, 5);
206 hr_api.mandatory_arg_error
207 (p_api_name => l_proc
208 ,p_argument => 'p_task_start_date'
209 ,p_argument_value => p_task_start_date
210 );
211 IF trunc(p_task_start_date) < trunc(sysdate) THEN
212 fnd_message.set_name('PER', 'HR_APPR_TASK_DT_BEFORE_SYSDATE');
213 fnd_message.raise_error;
214 END IF;
215 hr_utility.set_location(' Leaving:'||l_proc, 980);
216 End chk_start_date;
217 --
218
219 --
220 --
221 -- ----------------------------------------------------------------------------
222 -- |-----------------------< chk_non_updateable_args >------------------------|
223 -- ----------------------------------------------------------------------------
224 -- {Start Of Comments}
225 --
226 -- Description:
227 -- This procedure is used to ensure that non updateable attributes have
228 -- not been updated. If an attribute has been updated an error is generated.
229 --
230 -- Pre Conditions:
231 -- g_old_rec has been populated with details of the values currently in
232 -- the database.
233 --
234 -- In Arguments:
235 -- p_rec has been populated with the updated values the user would like the
236 -- record set to.
237 --
238 -- Post Success:
239 -- Processing continues if all the non updateable attributes have not
240 -- changed.
241 --
242 -- Post Failure:
243 -- An application error is raised if any of the non updatable attributes
244 -- have been altered.
245 --
246 -- {End Of Comments}
247 -- ----------------------------------------------------------------------------
248 Procedure chk_non_updateable_args
249 (p_effective_date in date
250 ,p_rec in per_pma_shd.g_rec_type
251 ) IS
252 --
253 l_proc varchar2(72) := g_package || 'chk_non_updateable_args';
254 l_error EXCEPTION;
255 l_argument varchar2(30);
256 --
257 Begin
258 --
259 -- Only proceed with the validation if a row exists for the current
260 -- record in the HR Schema.
261 --
262 IF NOT per_pma_shd.api_updating
263 (p_appraisal_period_id => p_rec.appraisal_period_id
264 ,p_object_version_number => p_rec.object_version_number
265 ) THEN
266 fnd_message.set_name('PER', 'HR_6153_ALL_PROCEDURE_FAIL');
267 fnd_message.set_token('PROCEDURE ', l_proc);
268 fnd_message.set_token('STEP ', '5');
269 fnd_message.raise_error;
270 END IF;
271 --
272 hr_utility.set_location(l_proc, 10);
273 if nvl(p_rec.plan_id,hr_api.g_number) <>
274 per_pma_shd.g_old_rec.plan_id then
275 l_argument := 'plan_id';
276 raise l_error;
277 end if;
278 --
279 hr_utility.set_location(l_proc, 20);
280 if nvl(p_rec.appraisal_template_id,hr_api.g_number) <>
281 per_pma_shd.g_old_rec.appraisal_template_id then
282 l_argument := 'appraisal_template_id';
283 raise l_error;
284 end if;
285 --
286 hr_utility.set_location(l_proc, 30);
287 --
288 EXCEPTION
289 WHEN l_error THEN
290 hr_api.argument_changed_error
291 (p_api_name => l_proc
292 ,p_argument => l_argument
293 ,p_base_table => per_pma_shd.g_tab_nam);
294 WHEN OTHERS THEN
295 RAISE;
296 End chk_non_updateable_args;
297 --
298 -- ----------------------------------------------------------------------------
299 -- |-----------------------< chk_plan_id >------------------------------------|
300 -- ----------------------------------------------------------------------------
301 -- {Start Of Comments}
302 --
303 -- Description:
304 -- This procedure is used to validate that the specified performance
305 -- management plan exists.
306 --
307 -- Pre Conditions:
308 -- The plan must already exist.
309 --
310 -- In Arguments:
311 --
312 --
313 -- Post Success:
314 -- Processing continues if the plan is valid.
315 --
316 -- Post Failure:
317 -- An application error is raised if the plan does not exist.
318 --
319 -- {End Of Comments}
320 -- ----------------------------------------------------------------------------
321 Procedure chk_plan_id
322 (p_plan_id IN number
323 ) IS
324
325 --
326 l_proc varchar2(72) := g_package || 'chk_plan_id';
327 l_plan_id number;
328 --
329
330 CURSOR csr_chk_plan_id IS
331 SELECT pmp.plan_id
332 FROM per_perf_mgmt_plans pmp
333 WHERE pmp.plan_id = p_plan_id;
334 --
335 BEGIN
336
337 IF g_debug THEN hr_utility.set_location('Entering:'|| l_proc, 10); END IF;
338
339 hr_api.mandatory_arg_error
340 (p_api_name => l_proc
341 ,p_argument => 'p_plan_id'
342 ,p_argument_value => p_plan_id
343 );
344
345 --
346 -- Check that plan exists.
347 --
348 IF g_debug THEN hr_utility.set_location(l_proc, 20); END IF;
349 OPEN csr_chk_plan_id;
350 FETCH csr_chk_plan_id INTO l_plan_id;
351 CLOSE csr_chk_plan_id;
352
353 IF l_plan_id IS null THEN
354 fnd_message.set_name('PER', 'HR_50264_PMS_INVALID_PLAN');
355 fnd_message.raise_error;
356 END IF;
357
358 IF g_debug THEN hr_utility.set_location('Leaving:'|| l_proc, 970); END IF;
359
360 EXCEPTION
361
362 WHEN app_exception.application_exception THEN
366 hr_utility.set_location(' Leaving:'|| l_proc, 980);
363 IF hr_multi_message.exception_add
364 (p_associated_column1 => 'PER_APPRAISAL_PERIODS.PLAN_ID')
365 THEN
367 RAISE;
368 END IF;
369 hr_utility.set_location(' Leaving:'|| l_proc, 990);
370
371 END chk_plan_id;
372 --
373 -- ----------------------------------------------------------------------------
374 -- |-----------------------< chk_appraisal_template_id >----------------------|
375 -- ----------------------------------------------------------------------------
376 -- {Start Of Comments}
377 --
378 -- Description:
379 -- This procedure is used to validate that the specified appraisal
380 -- template exists.
381 --
382 -- Pre Conditions:
383 -- The appraisal template must already exist.
384 --
385 -- In Arguments:
386 --
387 --
388 -- Post Success:
389 -- Processing continues if the appraisal template is valid.
390 --
391 -- Post Failure:
392 -- An application error is raised if the appraisal template does not exist.
393 --
394 -- {End Of Comments}
395 -- ----------------------------------------------------------------------------
396 Procedure chk_appraisal_template_id
397 (p_appraisal_template_id IN number
398 ) IS
399
400 --
401 l_proc varchar2(72) := g_package || 'chk_appraisal_template_id';
402 l_template_id number;
403 --
404
405 CURSOR csr_chk_template IS
406 SELECT apt.appraisal_template_id
407 FROM per_appraisal_templates apt
408 WHERE apt.appraisal_template_id = p_appraisal_template_id;
409 --
410 BEGIN
411
412 IF g_debug THEN hr_utility.set_location('Entering:'|| l_proc, 10); END IF;
413
414 hr_api.mandatory_arg_error
415 (p_api_name => l_proc
416 ,p_argument => 'p_appraisal_template_id'
417 ,p_argument_value => p_appraisal_template_id
418 );
419
420 --
421 -- Check that template exists.
422 --
423 IF g_debug THEN hr_utility.set_location(l_proc, 20); END IF;
424 OPEN csr_chk_template;
425 FETCH csr_chk_template INTO l_template_id;
426 CLOSE csr_chk_template;
427
428 IF l_template_id IS null THEN
429 fnd_message.set_name('PER', 'HR_50299_PMA_TEMPLATE_INVALID');
430 fnd_message.raise_error;
431 END IF;
432
433 IF g_debug THEN hr_utility.set_location('Leaving:'|| l_proc, 970); END IF;
434
435 EXCEPTION
436
437 WHEN app_exception.application_exception THEN
438 IF hr_multi_message.exception_add
439 (p_associated_column1 => 'PER_APPRAISAL_PERIODS.APPRAISAL_TEMPLATE_ID')
440 THEN
441 hr_utility.set_location(' Leaving:'|| l_proc, 980);
442 RAISE;
443 END IF;
444 hr_utility.set_location(' Leaving:'|| l_proc, 990);
445
446 END chk_appraisal_template_id;
447 --
448 -- ----------------------------------------------------------------------------
449 -- |-----------------------< chk_dates >--------------------------------------|
450 -- ----------------------------------------------------------------------------
451 -- {Start Of Comments}
452 --
453 -- Description:
454 -- This procedure checks the start and end date of the appraisal period.
455 -- It first checks that the start date is earlier than the end date,
456 -- then it checks that the appraisal period dates are within the dates
457 -- of the performance management plan and finally it checks that the
458 -- dates fall within the dates of the appraisal template.
459 --
460 -- Pre Conditions:
461 -- The plan and appraisal template must exist and have been validated.
462 --
463 -- In Arguments:
464 --
465 --
466 -- Post Success:
467 -- Processing continues if the dates are valid.
468 --
469 -- Post Failure:
470 -- An application error is raised if the dates are invalid.
471 --
472 -- {End Of Comments}
473 -- ----------------------------------------------------------------------------
474 Procedure chk_dates
475 (p_appraisal_period_id IN number
476 ,p_object_version_number IN number
477 ,p_plan_id IN number
478 ,p_appraisal_template_id IN number
479 ,p_start_date IN date
480 ,p_end_date IN date
481 ) IS
482
483 --
484 l_proc varchar2(72) := g_package || 'chk_dates';
485 l_api_updating boolean;
486 l_pmp_start_date date;
487 l_pmp_end_date date;
488 l_apt_date_from date;
489 l_apt_date_to date;
490 l_pap_start_date date;
491 l_pap_end_date date;
492 l_row_found varchar2(1) := 'N';
493 --
494
495 CURSOR csr_dates_within_plan IS
496 SELECT pmp.start_date, pmp.end_date
497 FROM per_perf_mgmt_plans pmp
498 WHERE pmp.plan_id = p_plan_id;
499
500 CURSOR csr_dates_within_template IS
501 SELECT apt.date_from, apt.date_to
502 FROM per_appraisal_templates apt
503 WHERE apt.appraisal_template_id = p_appraisal_template_id;
504 --
505 BEGIN
506
507 IF g_debug THEN hr_utility.set_location('Entering:'|| l_proc, 10); END IF;
508
509 --
510 hr_api.mandatory_arg_error
514 );
511 (p_api_name => l_proc
512 ,p_argument => 'p_start_date'
513 ,p_argument_value => p_start_date
515 --
516 hr_api.mandatory_arg_error
517 (p_api_name => l_proc
518 ,p_argument => 'p_end_date'
519 ,p_argument_value => p_end_date
520 );
521
522 --
523 -- Only proceed with validation if :
524 -- a) The current g_old_rec is current and
525 -- b) The date values have changed
526 --
527 l_api_updating := per_pma_shd.api_updating
528 (p_appraisal_period_id => p_appraisal_period_id
529 ,p_object_version_number => p_object_version_number);
530 --
531 IF (l_api_updating
532 AND nvl(per_pma_shd.g_old_rec.start_date, hr_api.g_date)
533 = nvl(p_start_date, hr_api.g_date)
534 AND nvl(per_pma_shd.g_old_rec.end_date, hr_api.g_date)
535 = nvl(p_end_date, hr_api.g_date))
536 THEN
537 RETURN;
538 END IF;
539
540 IF g_debug THEN hr_utility.set_location(l_proc, 20); END IF;
541
542 --
543 -- Check that the appraisal period's start date is not later
544 -- than the end date.
545 --
546 IF p_start_date > p_end_date THEN
547 fnd_message.set_name('PER', 'HR_50233_WPM_PLAN_DATES');
548 fnd_message.raise_error;
549 END IF;
550
551 IF g_debug THEN hr_utility.set_location(l_proc, 30); END IF;
552
553 --
554 -- Check that the appraisal period is within the plan dates.
555 --
556 IF g_debug THEN hr_utility.set_location(l_proc, 40); END IF;
557 OPEN csr_dates_within_plan;
558 FETCH csr_dates_within_plan INTO l_pmp_start_date
559 ,l_pmp_end_date;
560 CLOSE csr_dates_within_plan;
561
562 IF p_start_date < l_pmp_start_date
563 OR p_end_date > l_pmp_end_date
564 THEN
565 fnd_message.set_name('PER', 'HR_50391_PMA_PLAN_DATES');
566 fnd_message.raise_error;
567 END IF;
568
569 --
570 -- Check that the appraisal period is within the template dates.
571 --
572 IF g_debug THEN hr_utility.set_location(l_proc, 50); END IF;
573 OPEN csr_dates_within_template;
574 FETCH csr_dates_within_template INTO l_apt_date_from
575 ,l_apt_date_to;
576 CLOSE csr_dates_within_template;
577
578 IF p_start_date < nvl(l_apt_date_from, hr_api.g_sot)
579 OR p_end_date > nvl(l_apt_date_to, hr_api.g_eot)
580 THEN
581 fnd_message.set_name('PER', 'HR_50393_PMA_TEMPLATE_DATES');
582 fnd_message.raise_error;
583 END IF;
584
585
586 IF g_debug THEN hr_utility.set_location('Leaving:'|| l_proc, 970); END IF;
587
588 EXCEPTION
589
590 WHEN app_exception.application_exception THEN
591 IF hr_multi_message.exception_add
592 (p_associated_column1 => 'PER_APPRAISAL_PERIODS.START_DATE'
593 ,p_associated_column2 => 'PER_APPRAISAL_PERIODS.END_DATE')
594 THEN
595 hr_utility.set_location(' Leaving:'|| l_proc, 980);
596 RAISE;
597 END IF;
598 hr_utility.set_location(' Leaving:'|| l_proc, 990);
599
600 END chk_dates;
601 --
602 -- ----------------------------------------------------------------------------
603 -- |-----------------------< chk_duplicate >----------------------------------|
604 -- ----------------------------------------------------------------------------
605 -- {Start Of Comments}
606 --
607 -- Description:
608 -- This procedure is used to validate that a personal scorecard does not
609 -- already exist for the given assignment and given plan.
610 --
611 -- Pre Conditions:
612 -- The plan and assignment must exist and have been validated.
613 --
614 -- In Arguments:
615 --
616 --
617 -- Post Success:
618 -- Processing continues if the scorecard is not a duplicate.
619 --
620 -- Post Failure:
621 -- An application error is raised if the scorecard is a duplicate.
622 --
623 -- {End Of Comments}
624 -- ----------------------------------------------------------------------------
625 Procedure chk_duplicate
626 (p_appraisal_period_id IN number
627 ,p_object_version_number IN number
628 ,p_plan_id IN number
629 ,p_appraisal_template_id IN number
630 ,p_start_date IN date
631 ,p_end_date IN date
632 ) IS
633
634 --
635 l_proc varchar2(72) := g_package || 'chk_duplicate';
636 l_api_updating boolean;
637 l_dup varchar2(5) := 'FALSE';
638 --
639
640 CURSOR csr_chk_duplicate IS
641 SELECT 'TRUE'
642 FROM per_appraisal_periods pma
643 WHERE pma.plan_id = p_plan_id
644 AND pma.appraisal_template_id = p_appraisal_template_id
645 AND pma.start_date = p_start_date
646 AND pma.end_date = p_end_date
647 AND pma.appraisal_period_id <> nvl(p_appraisal_period_id, hr_api.g_number);
648 --
649 BEGIN
650
651 IF g_debug THEN hr_utility.set_location('Entering:'|| l_proc, 10); END IF;
652
653 --
654 -- Only proceed with validation if :
655 -- a) The current g_old_rec is current and
659 (p_appraisal_period_id => p_appraisal_period_id
656 -- b) The date values have changed
657 --
658 l_api_updating := per_pma_shd.api_updating
660 ,p_object_version_number => p_object_version_number);
661 --
662 IF (l_api_updating
663 AND nvl(per_pma_shd.g_old_rec.plan_id, hr_api.g_number)
664 = nvl(p_plan_id, hr_api.g_number)
665 AND nvl(per_pma_shd.g_old_rec.appraisal_template_id, hr_api.g_number)
666 = nvl(p_appraisal_template_id, hr_api.g_number)
667 AND nvl(per_pma_shd.g_old_rec.start_date, hr_api.g_date)
668 = nvl(p_start_date, hr_api.g_date)
669 AND nvl(per_pma_shd.g_old_rec.end_date, hr_api.g_date)
670 = nvl(p_end_date, hr_api.g_date))
671 THEN
672 RETURN;
673 END IF;
674
675 --
676 -- Check that the plan is not a duplicate.
677 --
678 IF g_debug THEN hr_utility.set_location(l_proc, 20); END IF;
679 OPEN csr_chk_duplicate;
680 FETCH csr_chk_duplicate INTO l_dup;
681 CLOSE csr_chk_duplicate;
682
683 IF l_dup = 'TRUE' THEN
684 fnd_message.set_name('PER', 'HR_50394_PMA_DUP_ERROR');
685 fnd_message.raise_error;
686 END IF;
687
688 IF g_debug THEN hr_utility.set_location('Leaving:'|| l_proc, 970); END IF;
689
690 EXCEPTION
691
692 WHEN app_exception.application_exception THEN
693 IF hr_multi_message.exception_add
694 (p_associated_column1 => 'PER_PERSONAL_SCORECARDS.PLAN_ID'
695 ,p_associated_column2 => 'PER_PERSONAL_SCORECARDS.APPRAISAL_TEMPLATE_ID'
696 ,p_associated_column3 => 'PER_PERSONAL_SCORECARDS.START_DATE'
697 ,p_associated_column4 => 'PER_PERSONAL_SCORECARDS.START_END')
698 THEN
699 hr_utility.set_location(' Leaving:'|| l_proc, 980);
700 RAISE;
701 END IF;
702 hr_utility.set_location(' Leaving:'|| l_proc, 990);
703
704 END chk_duplicate;
705 --
706 -- ----------------------------------------------------------------------------
707 -- |--------------------------< chk_initiator_code >--------------------------|
708 -- ----------------------------------------------------------------------------
709 -- {Start Of Comments}
710 --
711 -- Description:
712 -- Checks that the status code is a valid lookup code in the lookup type
713 -- HR_WPM_INITIATOR.
714 --
715 -- Prerequisites:
716 -- None.
717 --
718 -- In Arguments:
719 --
720 --
721 -- Post Success:
722 -- Processing continues if the status code is valid.
723 --
724 -- Post Failure:
725 -- An application error is raised if the status code is not valid.
726 --
727 -- Access Status:
728 -- Internal Row Handler Use Only.
729 --
730 -- {End Of Comments}
731 -- ----------------------------------------------------------------------------
732 procedure chk_initiator_code
733 (p_appraisal_period_id in number
734 ,p_object_version_number in number
735 ,p_effective_date in date
736 ,p_initiator_code in varchar2
737 ) is
738
739 -- Declare local variables
740
741 l_proc varchar2(72) := g_package||'chk_status_code';
742 l_api_updating boolean;
743
744 Begin
745
746 IF g_debug THEN hr_utility.set_location('Entering:'|| l_proc, 10); END IF;
747
748 --
749 hr_api.mandatory_arg_error
750 (p_api_name => l_proc
751 ,p_argument => 'p_initiator_code'
752 ,p_argument_value => p_initiator_code
753 );
754 --
755 -- Only proceed with validation if :
756 -- a) The current g_old_rec is current and
757 -- b) The date values have changed
758 --
759 l_api_updating := per_pma_shd.api_updating
760 (p_appraisal_period_id => p_appraisal_period_id
761 ,p_object_version_number => p_object_version_number);
762 --
763 IF (l_api_updating
764 AND nvl(per_pma_shd.g_old_rec.initiator_code, hr_api.g_varchar2)
765 = nvl(p_initiator_code, hr_api.g_varchar2))
766 THEN
767 RETURN;
768 END IF;
769
770 IF g_debug THEN hr_utility.set_location(l_proc, 20); END IF;
771
772 --
773 -- Checks that the status code is valid
774 --
775 IF hr_api.not_exists_in_hrstanlookups
776 (p_effective_date => p_effective_date
777 ,p_lookup_type => 'HR_WPM_INITIATOR'
778 ,p_lookup_code => p_initiator_code
779 ) THEN
780 fnd_message.set_name('PER','HR_50234_WPM_PLAN_STATUS');
781 fnd_message.raise_error;
782 END IF;
783
784 IF g_debug THEN hr_utility.set_location('Leaving:'|| l_proc, 970); END IF;
785
786 exception
787 when app_exception.application_exception then
788 IF hr_multi_message.exception_add
789 (p_associated_column1 => 'PER_APPRAISAL_PERIODS.INITIATOR_CODE'
790 ) THEN
791 hr_utility.set_location(' Leaving:'||l_proc, 980);
792 raise;
793 END IF;
794 hr_utility.set_location(' Leaving:'||l_proc, 990);
795
796
797 End chk_initiator_code;
798 --
799 -- ----------------------------------------------------------------------------
800 -- |------------------------< chk_task_dates >--------------------------------|
801 -- ----------------------------------------------------------------------------
802 -- {Start Of Comments}
803 --
804 -- Description:
805 -- This procedure checks the task start and task end date of the appraisal
806 -- period.
807 -- It checks that the task start date is earlier than the task end date.
808 --
809 -- Pre Conditions:
810 -- The plan and appraisal template must exist and have been validated.
811 --
812 -- In Arguments:
813 --
814 --
815 -- Post Success:
816 -- Processing continues if the dates are valid.
817 --
818 -- Post Failure:
819 -- An application error is raised if the dates are invalid.
820 --
821 -- {End Of Comments}
822 -- ----------------------------------------------------------------------------
823 Procedure chk_task_dates
824 (p_task_start_date IN date
825 ,p_task_end_date IN date
826 ) IS
827
828 --
829 l_proc varchar2(72) := g_package || 'chk_task_dates';
830
831 BEGIN
832
833 IF g_debug THEN hr_utility.set_location('Entering:'|| l_proc, 10); END IF;
834
835 --
836 hr_api.mandatory_arg_error
837 (p_api_name => l_proc
838 ,p_argument => 'p_task_start_date'
839 ,p_argument_value => p_task_start_date
840 );
841 --
842 hr_api.mandatory_arg_error
843 (p_api_name => l_proc
844 ,p_argument => 'p_task_end_date'
845 ,p_argument_value => p_task_end_date
846 );
847
848 --
849 -- Check that the appraisal period's task start date is not later
850 -- than the task end date.
851 --
852 IF p_task_start_date > p_task_end_date THEN
853 fnd_message.set_name('PER', 'HR_50417_WPM_PLAN_DATES');
854 fnd_message.raise_error;
855 END IF;
856
857 IF g_debug THEN hr_utility.set_location('Leaving:'|| l_proc, 970); END IF;
858
859 EXCEPTION
860
861 WHEN app_exception.application_exception THEN
862 IF hr_multi_message.exception_add
863 (p_associated_column1 => 'PER_APPRAISAL_PERIODS.TASK_START_DATE'
864 ,p_associated_column2 => 'PER_APPRAISAL_PERIODS.TASK_END_DATE')
865 THEN
866 hr_utility.set_location(' Leaving:'|| l_proc, 980);
867 RAISE;
868 END IF;
869 hr_utility.set_location(' Leaving:'|| l_proc, 990);
870
871 END chk_task_dates;
872 --
873 -- ----------------------------------------------------------------------------
874 -- |---------------------------< insert_validate >----------------------------|
875 -- ----------------------------------------------------------------------------
876 Procedure insert_validate
877 (p_effective_date in date
878 ,p_rec in per_pma_shd.g_rec_type
879 ) is
880 --
881 l_proc varchar2(72) := g_package||'insert_validate';
882 --
883 Begin
884 IF g_debug THEN hr_utility.set_location('Entering:'||l_proc, 5); END IF;
885 --
886 -- Call all supporting business operations
887 --
888 -- No business group context. HR_STANDARD_LOOKUPS used for validation.
889
890 --
891 -- Validate Dependent Attributes
892 --
893 chk_plan_id
894 (p_plan_id => p_rec.plan_id);
895
896 IF g_debug THEN hr_utility.set_location(l_proc, 10); END IF;
897
898 chk_appraisal_template_id
899 (p_appraisal_template_id => p_rec.appraisal_template_id);
900
901 --
902 -- End important validation
903 --
904 hr_multi_message.end_validation_set;
905
906 IF g_debug THEN hr_utility.set_location(l_proc, 20); END IF;
907
908 --
909 -- Validate Independent Attributes
910 --
911 chk_dates
912 (p_appraisal_period_id => p_rec.appraisal_period_id
913 ,p_object_version_number => p_rec.object_version_number
914 ,p_plan_id => p_rec.plan_id
915 ,p_appraisal_template_id => p_rec.appraisal_template_id
916 ,p_start_date => p_rec.start_date
917 ,p_end_date => p_rec.end_date);
918
919 IF g_debug THEN hr_utility.set_location(l_proc, 30); END IF;
920
921 chk_duplicate
922 (p_appraisal_period_id => p_rec.appraisal_period_id
923 ,p_object_version_number => p_rec.object_version_number
924 ,p_plan_id => p_rec.plan_id
925 ,p_appraisal_template_id => p_rec.appraisal_template_id
926 ,p_start_date => p_rec.start_date
927 ,p_end_date => p_rec.end_date);
928
929 chk_initiator_code
930 (p_appraisal_period_id => p_rec.appraisal_period_id
931 ,p_object_version_number => p_rec.object_version_number
932 ,p_effective_date => p_effective_date
933 ,p_initiator_code => p_rec.initiator_code);
934
935 chk_task_dates
936 (p_task_start_date => p_rec.task_start_date
937 ,p_task_end_date => p_rec.task_end_date);
938
939 chk_start_date
940 (p_task_start_date => p_rec.task_start_date);
941
942 per_pma_bus.chk_df(p_rec);
943 --
944 hr_utility.set_location(' Leaving:'||l_proc, 980);
945
946 End insert_validate;
947 --
948 -- ----------------------------------------------------------------------------
949 -- |---------------------------< update_validate >----------------------------|
950 -- ----------------------------------------------------------------------------
951 Procedure update_validate
952 (p_effective_date in date
953 ,p_rec in per_pma_shd.g_rec_type
954 ) is
955 --
956 l_proc varchar2(72) := g_package||'update_validate';
957 --
958 Begin
959 hr_utility.set_location('Entering:'||l_proc, 5);
960 --
961 -- Call all supporting business operations
962 --
963 -- No business group context. HR_STANDARD_LOOKUPS used for validation.
964 --
965 chk_non_updateable_args
966 (p_effective_date => p_effective_date
967 ,p_rec => p_rec
968 );
969
970 IF g_debug THEN hr_utility.set_location(l_proc, 10); END IF;
971
972 --
973 -- Validate Independent Attributes
974 --
975 chk_dates
976 (p_appraisal_period_id => p_rec.appraisal_period_id
977 ,p_object_version_number => p_rec.object_version_number
978 ,p_plan_id => p_rec.plan_id
979 ,p_appraisal_template_id => p_rec.appraisal_template_id
980 ,p_start_date => p_rec.start_date
981 ,p_end_date => p_rec.end_date);
982
983 IF g_debug THEN hr_utility.set_location(l_proc, 20); END IF;
984
985 chk_duplicate
986 (p_appraisal_period_id => p_rec.appraisal_period_id
987 ,p_object_version_number => p_rec.object_version_number
988 ,p_plan_id => p_rec.plan_id
989 ,p_appraisal_template_id => p_rec.appraisal_template_id
990 ,p_start_date => p_rec.start_date
991 ,p_end_date => p_rec.end_date);
992
993 chk_initiator_code
994 (p_appraisal_period_id => p_rec.appraisal_period_id
995 ,p_object_version_number => p_rec.object_version_number
996 ,p_effective_date => p_effective_date
997 ,p_initiator_code => p_rec.initiator_code);
998
999 chk_task_dates
1000 (p_task_start_date => p_rec.task_start_date
1001 ,p_task_end_date => p_rec.task_end_date);
1002
1003 --
1004 if( nvl(per_pma_shd.g_old_rec.task_start_date, hr_api.g_date)
1005 <> nvl(p_rec.task_start_date, hr_api.g_date)) then
1006 chk_start_date(p_task_start_date => p_rec.task_start_date);
1007 end if;
1008 --
1009
1010 --
1011 per_pma_bus.chk_df(p_rec);
1012 --
1013 hr_utility.set_location(' Leaving:'||l_proc, 980);
1014
1015 End update_validate;
1016 --
1017 -- ----------------------------------------------------------------------------
1018 -- |---------------------------< delete_validate >----------------------------|
1019 -- ----------------------------------------------------------------------------
1020 Procedure delete_validate
1021 (p_rec in per_pma_shd.g_rec_type
1022 ) is
1023 --
1024 l_proc varchar2(72) := g_package||'delete_validate';
1025 --
1026 Begin
1027 hr_utility.set_location('Entering:'||l_proc, 5);
1028 --
1029 -- Call all supporting business operations
1030 --
1031 hr_utility.set_location(' Leaving:'||l_proc, 10);
1032 End delete_validate;
1033 --
1034 end per_pma_bus;