[Home] [Help]
PACKAGE BODY: APPS.AME_APG_BUS
Source
1 Package Body ame_apg_bus as
2 /* $Header: amapgrhi.pkb 120.6 2006/10/05 16:02:47 pvelugul noship $ */
3 --
4 -- ----------------------------------------------------------------------------
5 -- | Private Global Definitions |
6 -- ----------------------------------------------------------------------------
7 --
8 g_package varchar2(33) := ' ame_apg_bus.'; -- Global package name
9 --
10
11
12 -- ----------------------------------------------------------------------------
13 -- |-------------------------< CHK_NAME >---------------------------|
14 -- ----------------------------------------------------------------------------
15 -- {Start Of Comments}
16 --
17 -- Description:
18 -- This procedure validates the uniqueness of approval group's name.
19 --
20 -- Pre-Requisites:
24 -- p_name
21 -- None
22 --
23 -- In Parameters:
25 -- p_effective_date
26 --
27 -- Post Success:
28 -- Processing continues if a valid name has been entered.
29 --
30 -- Post Failure:
31 -- An application error is raised if the name is not unique.
32 --
33 -- Access Status:
34 -- Internal Row Handler Use Only.
35 --
36 -- {End Of Comments}
37 -- ----------------------------------------------------------------------------
38 procedure chk_name(p_name in varchar2
39 ) IS
40 --
41 l_proc varchar2(72) := g_package || 'CHK_NAME';
42 Begin
43 hr_utility.set_location('Entering:'||l_proc,10);
44 hr_api.mandatory_arg_error(p_api_name => l_proc
45 ,p_argument => 'NAME'
46 ,p_argument_value => p_name
47 );
48 hr_utility.set_location(' Leaving:'||l_proc,30);
49 exception
50 when app_exception.application_exception then
51 if hr_multi_message.exception_add
52 (p_associated_column1 => 'AME_APPROVAL_GROUPS.NAME'
53 ) then
54 hr_utility.set_location(' Leaving:'||l_proc, 40);
55 raise;
56 end if;
57 hr_utility.set_location( ' Leaving:'||l_proc,50 );
58 End chk_name;
59
60 procedure chk_delete(p_approval_group_id in number
61 ,p_effective_date in date) is
62 l_proc varchar2(72) := g_package || 'CHK_DELETE';
63 l_count number;
64 cursor c_sel1 is
65 select null
66 from ame_approval_groups
67 where ame_utility_pkg.check_seeddb = 'N'
68 and ame_utility_pkg.is_seed_user(created_by) = ame_util.seededDataCreatedById
69 and approval_group_id = p_approval_group_id
70 and p_effective_date between start_date and
71 nvl(end_date -(1/86400), p_effective_date);
72 begin
73 hr_utility.set_location('Entering:'||l_proc,10);
74 --+
75 hr_utility.set_location(' Leaving:'||l_proc,30);
76 exception
77 when app_exception.application_exception then
78 if hr_multi_message.exception_add
79 (p_associated_column1 => 'AME_APPROVAL_GROUPS.DELETE'
80 ) then
81 hr_utility.set_location(' Leaving:'||l_proc, 40);
82 raise;
83 end if;
84 hr_utility.set_location( ' Leaving:'||l_proc,50 );
85 end chk_delete;
86 -- ----------------------------------------------------------------------------
87 -- |-------------------------< CHK_UNIQUE >---------------------------|
88 -- ----------------------------------------------------------------------------
89 -- {Start Of Comments}
90 --
91 -- Description:
92 -- This procedure validates the uniqueness of approval group's name.
93 --
94 -- Pre-Requisites:
95 -- None
96 --
97 -- In Parameters:
98 -- p_name
99 -- p_effective_date
100 --
101 -- Post Success:
102 -- Processing continues if a valid name has been entered.
103 --
104 -- Post Failure:
105 -- An application error is raised if the name is not unique.
106 --
107 -- Access Status:
108 -- Internal Row Handler Use Only.
109 --
110 -- {End Of Comments}
111 -- ----------------------------------------------------------------------------
112 procedure chk_unique(p_name in varchar2
113 ,p_effective_date in date
114 ) IS
115 --
116 l_proc varchar2(72) := g_package || 'CHK_UNIQUE';
117 l_count number;
118 --
119 -- Cursor to find number of groups with name=p_name
120 --
121 Cursor C_Sel1 Is
122 select count(name)
123 from ame_approval_groups t
124 where t.name = p_name
125 and p_effective_date between t.start_date and t.end_date;
126
127 Begin
128 hr_utility.set_location('Entering:'||l_proc,10);
129 -- Check if the name is already in use by another approval group
130 open C_Sel1;
131 fetch C_Sel1 into l_count;
132 close C_Sel1;
133 if l_count <> 0 then
134 fnd_message.set_name('PER','AME_400561_APG_NAME_NOT_UNQ');
135 fnd_message.raise_error;
136 end if;
137 hr_utility.set_location(' Leaving:'||l_proc,30);
138 exception
139 when app_exception.application_exception then
140 if hr_multi_message.exception_add
141 (p_associated_column1 => 'AME_APPROVAL_GROUPS.NAME'
142 ) then
143 hr_utility.set_location(' Leaving:'||l_proc, 40);
144 raise;
145 end if;
146 hr_utility.set_location( ' Leaving:'||l_proc,50 );
147 End chk_unique;
148
149 -- ----------------------------------------------------------------------------
150 -- |-------------------------< CHK_IS_STATIC >---------------------------|
151 -- ----------------------------------------------------------------------------
152 -- {Start Of Comments}
153 --
154 -- Description:
155 -- This procedure validates is_static which should be in ('Y','N')
156 --
157 -- Pre-Requisites:
161 -- p_is_static
158 -- None
159 --
160 -- In Parameters:
162 --
163 -- Post Success:
164 -- Processing continues if is_static is in ('Y','N').
165 --
166 -- Post Failure:
167 -- An application error is raised.
168 --
169 -- Access Status:
170 -- Internal Row Handler Use Only.
171 --
172 -- {End Of Comments}
173 -- ----------------------------------------------------------------------------
174 procedure chk_is_static(p_is_static in varchar2
175 ) IS
176 --
177 l_proc varchar2(72) := g_package || 'CHK_IS_STATIC';
178 --
179
180 Begin
181 hr_utility.set_location('Entering:'||l_proc,10);
182 hr_api.mandatory_arg_error(p_api_name => l_proc
183 ,p_argument => 'IS_STATIC'
184 ,p_argument_value => p_is_static
185 );
186 if p_is_static not in('Y','N') then
187 fnd_message.set_name('PER','AME_400562_APG_INVALID_USG_TYP');
188 fnd_message.raise_error;
189 end if;
190 hr_utility.set_location(' Leaving:'||l_proc,30);
191 exception
192 when app_exception.application_exception then
193 if hr_multi_message.exception_add
194 (p_associated_column1 => 'AME_APPROVAL_GROUPS.IS_STATIC'
195 ) then
196 hr_utility.set_location(' Leaving:'||l_proc, 40);
197 raise;
198 end if;
199 hr_utility.set_location( ' Leaving:'||l_proc,50 );
200 End chk_is_static;
201
202
203 -- ----------------------------------------------------------------------------
204 -- |-------------------------< CHK_QUERY_STRING >---------------------------|
205 -- ----------------------------------------------------------------------------
206 -- {Start Of Comments}
207 --
208 -- Description:
209 -- This procedure checks if query string is not null when is_static ='Y'.
210 --
211 -- Pre-Requisites:
212 -- None
213 --
214 -- In Parameters:
215 -- p_is_static
216 -- p_query_string
217 --
218 -- Post Success:
219 -- Processing continues if query_string is not null when is_static = 'Y'.
220 --
221 -- Post Failure:
222 -- An application error is raised.
223 --
224 -- Access Status:
225 -- Internal Row Handler Use Only.
226 --
227 -- {End Of Comments}
228 -- ----------------------------------------------------------------------------
229 procedure chk_query_string(p_is_static in varchar2
230 ,p_query_string in varchar2
231 ) IS
232 --
233 l_proc varchar2(72) := g_package || 'CHK_QUERY_STRING';
234 l_validated varchar2(1);
235 tempInt integer;
236 transIdPlaceholderPosition integer;
237 transIdPlaceholderPosition2 integer;
238 upperTransIdPlaceholder varchar2(100);
239 querystring ame_approval_groups.query_string%type;
240 l_valid varchar2(1000);
241 --
242
243 Begin
244 hr_utility.set_location('Entering:'||l_proc,10);
245 if (p_is_static = 'Y' and p_query_string is not null) then
246 fnd_message.set_name('PER','AME_400563_APG_INV_USG_QRY_CMB');
247 fnd_message.raise_error;
248 end if;
249 if (p_is_static = 'N' and p_query_string is null) then
250 fnd_message.set_name('PER','AME_400556_APG_EMPTY_QUERY');
251 fnd_message.raise_error;
252 end if;
253 if(p_is_static = 'N') then
254 if(instrb(p_query_string, ';', 1, 1) > 0) or
255 (instrb(p_query_string, '--', 1, 1) > 0) or
256 (instrb(p_query_string, '/*', 1, 1) > 0) or
260 end if;
257 (instrb(p_query_string, '*/', 1, 1) > 0) then
258 fnd_message.set_name('PER','AME_400165_ATT_DYN_USG_COMM');
259 fnd_message.raise_error;
261 tempInt := 1;
262 queryString := upper(p_query_string);
263 upperTransIdPlaceholder := upper(ame_util.transactionIdPlaceholder);
264 loop
265 transIdPlaceholderPosition :=
266 instrb(queryString, upperTransIdPlaceholder, 1, tempInt);
267 if(transIdPlaceholderPosition = 0) then
268 exit;
269 end if;
270 transIdPlaceholderPosition2 :=
271 instrb(p_query_string, ame_util.transactionIdPlaceholder, 1, tempInt);
272 if(transIdPlaceholderPosition <> transIdPlaceholderPosition2) then
273 fnd_message.set_name('PER','AME_400635_APG_QRY_STR_BND_VAR');
274 fnd_message.raise_error;
275 end if;
276 tempInt := tempInt + 1;
277 end loop;
278 /*if(ame_util.isArgumentTooLong(tableNameIn => 'ame_approval_groups',
279 columnNameIn => 'query_string',
280 argumentIn => p_query_string)) then
281 fnd_message.set_name('PER','AME_400163_ATT_USAGE_LONG');
282 fnd_message.raise_error;
283 end if;*/
284 /* The following utility handles the error. So nothing needs to be done here */
285 ame_util.checkForSqlInjection(queryStringIn => queryString);
286 l_valid := ame_utility_pkg.validate_query(p_query_string => p_query_string
287 ,p_columns => 1
288 ,p_object => ame_util2.approverGroupObject
289 );
290 if l_valid <> 'Y' then
291 fnd_message.raise_error;
292 end if;
293 end if;
294 hr_utility.set_location(' Leaving:'||l_proc,30);
295 exception
296 when app_exception.application_exception then
297 if hr_multi_message.exception_add
298 (p_associated_column1 => 'AME_APPROVAL_GROUPS.QUERY_STRING'
299 ) then
300 hr_utility.set_location(' Leaving:'||l_proc, 40);
301 raise;
302 end if;
303 hr_utility.set_location( ' Leaving:'||l_proc,50 );
304 End chk_query_string;
305
306
307 -- ----------------------------------------------------------------------------
308 -- |-----------------------< chk_non_updateable_args >------------------------|
309 -- ----------------------------------------------------------------------------
310 -- {Start Of Comments}
311 --
312 -- Description:
313 -- This procedure is used to ensure that non updateable attributes have
314 -- not been updated. If an attribute has been updated an error is generated.
315 --
316 -- Pre Conditions:
317 -- g_old_rec has been populated with details of the values currently in
318 -- the database.
319 --
320 -- In Arguments:
321 -- p_rec has been populated with the updated values the user would like the
322 -- record set to.
323 --
324 -- Post Success:
325 -- Processing continues if all the non updateable attributes have not
326 -- changed.
327 --
328 -- Post Failure:
329 -- An application error is raised if any of the non updatable attributes
330 -- have been altered.
331 --
332 -- {End Of Comments}
333 -- ----------------------------------------------------------------------------
334 Procedure chk_non_updateable_args
335 (p_effective_date in date
336 ,p_rec in ame_apg_shd.g_rec_type
337 ) IS
338 --
339 l_proc varchar2(72) := g_package || 'chk_non_updateable_args';
340 l_created_by ame_approval_groups.created_by%TYPE;
341 --
342 --
343 -- Cursor to find created_by value for the row
344 --
345 -- Cursor C_Sel1 Is
346 -- select t.created_by
347 -- from ame_approval_groups t
348 -- where t.approval_group_id = p_rec.approval_group_id
349 -- and p_effective_date between t.start_date and t.end_date;
350 Begin
351 --
352 -- Only proceed with the validation if a row exists for the current
353 -- record in the HR Schema.
354 --
355 IF NOT ame_apg_shd.api_updating
356 (p_approval_group_id => p_rec.approval_group_id
357 ,p_effective_date => p_effective_date
358 ,p_object_version_number => p_rec.object_version_number
359 ) THEN
360 fnd_message.set_name('PER', 'HR_6153_ALL_PROCEDURE_FAIL');
361 fnd_message.set_token('PROCEDURE ', l_proc);
362 fnd_message.set_token('STEP ', '5');
363 fnd_message.raise_error;
364 END IF;
365 --
366 -- EDIT_HERE: Add checks to ensure non-updateable args have
367 -- not been updated.
368 --
369 --
370 -- If the group is seeded, do not allow updation of the group values
371 --
372 --open C_Sel1;
373 --fetch C_Sel1 into l_created_by;
374 --close C_Sel1;
375 --
376 -- NAME is non-updateable if the group is seeded
377
378 --if l_created_by = ame_util.seededDataCreatedById and
379 if nvl(p_rec.name, hr_api.g_varchar2) <>
380 nvl(ame_apg_shd.g_old_rec.name,hr_api.g_varchar2)then
381 hr_api.argument_changed_error
382 (p_api_name => l_proc
383 ,p_argument => 'NAME'
384 ,p_base_table => ame_con_shd.g_tab_nam
385 );
386 end if;
387 --
388 -- DESCRIPTION is non-updateable if the group is seeded
389
390 -- if l_created_by = ame_util.seededDataCreatedById and
391 -- nvl(p_rec.description, hr_api.g_varchar2) <>
392 -- nvl(ame_apg_shd.g_old_rec.description,hr_api.g_varchar2)then
393 -- hr_api.argument_changed_error
397 -- );
394 -- (p_api_name => l_proc
395 -- ,p_argument => 'DESCRIPTION'
396 -- ,p_base_table => ame_con_shd.g_tab_nam
398 --end if;
399 --
400 -- IS_STATIC is non-updateable if the group is seeded
401
402 --if l_created_by = ame_util.seededDataCreatedById and
403 -- nvl(p_rec.is_static, hr_api.g_varchar2) <>
404 -- nvl(ame_apg_shd.g_old_rec.is_static,hr_api.g_varchar2)then
405 -- hr_api.argument_changed_error
406 -- (p_api_name => l_proc
407 -- ,p_argument => 'IS_STATIC'
408 -- ,p_base_table => ame_con_shd.g_tab_nam
409 -- );
410 --end if;
411 --
412 -- QUERY_STRING is non-updateable if the group is seeded
413
414 -- if l_created_by = ame_util.seededDataCreatedById and
415 -- nvl(p_rec.query_string, hr_api.g_varchar2) <>
416 -- nvl(ame_apg_shd.g_old_rec.query_string,hr_api.g_varchar2)then
417 -- hr_api.argument_changed_error
418 -- (p_api_name => l_proc
419 -- ,p_argument => 'QUERY_STRING'
420 -- ,p_base_table => ame_con_shd.g_tab_nam
421 -- );
422 --end if;
423 End chk_non_updateable_args;
424 --
425 -- ----------------------------------------------------------------------------
426 -- |--------------------------< dt_update_validate >--------------------------|
427 -- ----------------------------------------------------------------------------
428 -- {Start Of Comments}
429 --
430 -- Description:
431 -- This procedure is used for referential integrity of datetracked
432 -- parent entities when a datetrack update operation is taking place
433 -- and where there is no cascading of update defined for this entity.
434 --
435 -- Prerequisites:
436 -- This procedure is called from the update_validate.
437 --
438 -- In Parameters:
439 --
440 -- Post Success:
441 -- Processing continues.
442 --
443 -- Post Failure:
444 --
445 -- Developer Implementation Notes:
446 -- This procedure should not need maintenance unless the HR Schema model
447 -- changes.
448 --
449 -- Access Status:
450 -- Internal Row Handler Use Only.
451 --
452 -- {End Of Comments}
453 -- ----------------------------------------------------------------------------
454 Procedure dt_update_validate
455 (p_datetrack_mode in varchar2
456 ,p_validation_start_date in date
457 ,p_validation_end_date in date
458 ) Is
459 --
460 l_proc varchar2(72) := g_package||'dt_update_validate';
461 --
462 Begin
463 --
464 -- Ensure that the p_datetrack_mode argument is not null
465 --
466 hr_api.mandatory_arg_error
467 (p_api_name => l_proc
468 ,p_argument => 'datetrack_mode'
469 ,p_argument_value => p_datetrack_mode
470 );
471 --
472 -- Mode will be valid, as this is checked at the start of the upd.
473 --
474 -- Ensure the arguments are not null
475 --
476 hr_api.mandatory_arg_error
477 (p_api_name => l_proc
478 ,p_argument => 'validation_start_date'
479 ,p_argument_value => p_validation_start_date
480 );
481 --
482 /*hr_api.mandatory_arg_error
483 (p_api_name => l_proc
484 ,p_argument => 'validation_end_date'
485 ,p_argument_value => p_validation_end_date
486 );*/
487 --
488 Exception
489 When Others Then
490 --
491 -- An unhandled or unexpected error has occurred which
492 -- we must report
493 --
494 fnd_message.set_name('PAY', 'HR_6153_ALL_PROCEDURE_FAIL');
495 fnd_message.set_token('PROCEDURE', l_proc);
496 fnd_message.set_token('STEP','15');
497 fnd_message.raise_error;
498 End dt_update_validate;
499 --
500 -- ----------------------------------------------------------------------------
504 --
501 -- |--------------------------< dt_delete_validate >--------------------------|
502 -- ----------------------------------------------------------------------------
503 -- {Start Of Comments}
505 -- Description:
506 -- This procedure is used for referential integrity of datetracked
507 -- child entities when either a datetrack DELETE or ZAP is in operation
508 -- and where there is no cascading of delete defined for this entity.
509 -- For the datetrack mode of DELETE or ZAP we must ensure that no
510 -- datetracked child rows exist between the validation start and end
511 -- dates.
512 --
513 -- Prerequisites:
514 -- This procedure is called from the delete_validate.
515 --
516 -- In Parameters:
517 --
518 -- Post Success:
519 -- Processing continues.
520 --
521 -- Post Failure:
522 -- If a row exists by determining the returning Boolean value from the
523 -- generic dt_api.rows_exist function then we must supply an error via
524 -- the use of the local exception handler l_rows_exist.
525 --
526 -- Developer Implementation Notes:
527 -- This procedure should not need maintenance unless the HR Schema model
528 -- changes.
529 --
530 -- Access Status:
531 -- Internal Row Handler Use Only.
532 --
533 -- {End Of Comments}
534 -- ----------------------------------------------------------------------------
535 Procedure dt_delete_validate
536 (p_approval_group_id in number
537 ,p_datetrack_mode in varchar2
538 ,p_validation_start_date in date
539 ,p_validation_end_date in date
540 ) Is
541 --
542 l_proc varchar2(72) := g_package||'dt_delete_validate';
543 --
544 Begin
545 --
546 -- Ensure that the p_datetrack_mode argument is not null
547 --
548 hr_api.mandatory_arg_error
549 (p_api_name => l_proc
550 ,p_argument => 'datetrack_mode'
551 ,p_argument_value => p_datetrack_mode
552 );
553 --
554 -- Only perform the validation if the datetrack mode is either
555 -- DELETE or ZAP
556 --
557 If (p_datetrack_mode = hr_api.g_delete or
558 p_datetrack_mode = hr_api.g_zap) then
559 --
560 --
561 -- Ensure the arguments are not null
562 --
563 hr_api.mandatory_arg_error
564 (p_api_name => l_proc
565 ,p_argument => 'validation_start_date'
566 ,p_argument_value => p_validation_start_date
567 );
568 --
569 /*hr_api.mandatory_arg_error
570 (p_api_name => l_proc
571 ,p_argument => 'validation_end_date'
572 ,p_argument_value => p_validation_end_date
573 );*/
574 --
575 hr_api.mandatory_arg_error
576 (p_api_name => l_proc
577 ,p_argument => 'approval_group_id'
578 ,p_argument_value => p_approval_group_id
579 );
580 --
581 ame_apg_shd.child_rows_exist
582 (p_ => p_approval_group_id
583 ,p_start_date => p_validation_start_date
584 ,p_end_date => p_validation_end_date);
585 --
586 --
587 End If;
588 --
589 Exception
590 When Others Then
591 --
592 -- An unhandled or unexpected error has occurred which
593 -- we must report
594 --
595 fnd_message.set_name('PAY', 'HR_6153_ALL_PROCEDURE_FAIL');
596 fnd_message.set_token('PROCEDURE', l_proc);
597 fnd_message.set_token('STEP','15');
598 fnd_message.raise_error;
599 --
600 End dt_delete_validate;
601 --
602 -- ----------------------------------------------------------------------------
603 -- |---------------------------< insert_validate >----------------------------|
604 -- ----------------------------------------------------------------------------
605 Procedure insert_validate
606 (p_rec in ame_apg_shd.g_rec_type
607 ,p_effective_date in date
608 ,p_datetrack_mode in varchar2
609 ,p_validation_start_date in date
610 ,p_validation_end_date in date
611 ) is
612 --
613 l_proc varchar2(72) := g_package||'insert_validate';
614 --
615 Begin
616 hr_utility.set_location('Entering:'||l_proc, 5);
617 --
618 -- Validate Dependent Attributes
619 --
620 --
621 -- User Entered calls to validate procedures
622 hr_api.mandatory_arg_error(p_api_name => l_proc
623 ,p_argument => 'description'
624 ,p_argument_value => p_rec.description
625 );
626 chk_name (
627 p_name => p_rec.name
628 );
629 chk_unique (
630 p_name => p_rec.name
631 ,p_effective_date => p_effective_date
632 );
633 chk_is_static(
634 p_is_static => p_rec.is_static
635 );
636 chk_query_string(
637 p_is_static => p_rec.is_static
638 ,p_query_string => p_rec.query_string
639 );
640
641 hr_utility.set_location(' Leaving:'||l_proc, 10);
642 End insert_validate;
643 --
644 -- ----------------------------------------------------------------------------
645 -- |---------------------------< update_validate >----------------------------|
646 -- ----------------------------------------------------------------------------
647 Procedure update_validate
648 (p_rec in ame_apg_shd.g_rec_type
649 ,p_effective_date in date
650 ,p_datetrack_mode in varchar2
651 ,p_validation_start_date in date
652 ,p_validation_end_date in date
653 ) is
654 --
655 l_proc varchar2(72) := g_package||'update_validate';
656 --
657 Begin
658 hr_utility.set_location('Entering:'||l_proc, 5);
659 --
660 -- Validate Dependent Attributes
661 --
662 -- Call the datetrack update integrity operation
663 --
664 dt_update_validate
665 (p_datetrack_mode => p_datetrack_mode
666 ,p_validation_start_date => p_validation_start_date
667 ,p_validation_end_date => p_validation_end_date
668 );
669 --
670 chk_non_updateable_args
671 (p_effective_date => p_effective_date
672 ,p_rec => p_rec
673 );
674 --
675 --
676
677 hr_api.mandatory_arg_error(p_api_name => l_proc
678 ,p_argument => 'description'
679 ,p_argument_value => p_rec.description
680 );
681 -- User Entered calls to validate procedures
682 chk_name (
683 p_name => p_rec.name
684 );
685 --name is non updateable, so following code is commented
686 /*if (p_rec.name <> ame_apg_shd.g_old_rec.name) then
687 chk_unique (
688 p_name => p_rec.name
689 ,p_effective_date => p_effective_date
690 );
691 end if;*/
692
693 chk_is_static(
694 p_is_static => p_rec.is_static
695 );
696 chk_query_string(
697 p_is_static => p_rec.is_static
698 ,p_query_string => p_rec.query_string
699 );
700
701 hr_utility.set_location(' Leaving:'||l_proc, 10);
702 End update_validate;
703 --
704 -- ----------------------------------------------------------------------------
705 -- |---------------------------< delete_validate >----------------------------|
706 -- ----------------------------------------------------------------------------
707 Procedure delete_validate
708 (p_rec in ame_apg_shd.g_rec_type
709 ,p_effective_date in date
710 ,p_datetrack_mode in varchar2
711 ,p_validation_start_date in date
712 ,p_validation_end_date in date
713 ) is
714 --
715 l_proc varchar2(72) := g_package||'delete_validate';
716 --
717 Begin
718 hr_utility.set_location('Entering:'||l_proc, 5);
719 --
720 -- Call all supporting business operations
721 --
722 dt_delete_validate
723 (p_datetrack_mode => p_datetrack_mode
724 ,p_validation_start_date => p_validation_start_date
725 ,p_validation_end_date => p_validation_end_date
726 ,p_approval_group_id => p_rec.approval_group_id
727 );
728 chk_delete(p_approval_group_id => p_rec.approval_group_id
729 ,p_effective_date => p_effective_date);
730 --
731 hr_utility.set_location(' Leaving:'||l_proc, 10);
732 End delete_validate;
733 --
734 end ame_apg_bus;