1 package body PAY_INPUT_VALUES_PKG as
2 /* $Header: pyipv.pkb 120.5.12010000.5 2009/11/06 11:02:28 asnell ship $ */
3 -- Declare global variables and cursors
4
5 -- Dummy variable for selecting into when not interested in value of result
6 g_dummy number(30);
7 --
8 g_element_type_id number(15); -- For validating translation.
9 --
10 -- The end of time for date effective records
11 c_end_of_time constant date := to_date ('31/12/4712','DD/MM/YYYY');
12 c_user_id number;
13 c_login_id number;
14
15 -------------------------------------------------------------------------------
16 PROCEDURE set_translation_globals(p_element_type_id IN NUMBER) IS
17 BEGIN
18 g_element_type_id := p_element_type_id;
19 END;
20 -------------------------------------------------------------------------------
21 procedure validate_translation(input_value_id IN NUMBER,
22 language IN VARCHAR2,
23 input_name IN VARCHAR2) IS
24 /*
25
26 This procedure fails if a input value translation is already present in
27 the table for a given language. Otherwise, no action is performed. It is
28 used to ensure uniqueness of translated input value names.
29
30 */
31
32 --
33 -- This cursor implements the validation we require,
34 -- but this will only work if the record exists in the db already,
35 -- and we have a primary key id. Note: The legislation code column
36 -- can be null, hence use a decode and NVL - this also applies to the
37 -- business group column.
38 --
39 cursor c_translation(p_language IN VARCHAR2,
40 p_input_name IN VARCHAR2,
41 p_input_value_id IN NUMBER) IS
42 SELECT 1
43 FROM pay_input_values_f_tl inptl,
44 pay_input_values_f inp
45 WHERE upper(inptl.name) = upper(p_input_name)
46 AND inptl.input_value_id = inp.input_value_id
47 AND inptl.language = p_language
48 AND (inp.input_value_id <> p_input_value_id OR p_input_value_id IS NULL)
49 AND inp.element_type_id = g_element_type_id;
50
51 l_package_name VARCHAR2(80) := 'PAY_INPUT_VALUES_PKG.VALIDATE_TRANSLATION';
52 l_name pay_balance_types.balance_name%type := input_name;
53 l_dummy varchar2(100);
54
55 BEGIN
56
57 hr_utility.set_location (l_package_name,1);
58
59 BEGIN
60 hr_chkfmt.checkformat (l_name,
61 'PAY_NAME',
62 l_dummy, null, null, 'N', l_dummy, null);
63 hr_utility.set_location (l_package_name,2);
64
65 EXCEPTION
66 when app_exception.application_exception then
67 hr_utility.set_location (l_package_name,3);
68 fnd_message.set_name ('PAY','PAY_6365_ELEMENT_NO_DB_NAME'); -- checkformat failure
69 fnd_message.raise_error;
70 END;
71
72 hr_utility.set_location (l_package_name,10);
73 OPEN c_translation(language, input_name, input_value_id);
74 hr_utility.set_location (l_package_name,20);
75 FETCH c_translation INTO g_dummy;
76
77 IF c_translation%NOTFOUND THEN
78 hr_utility.set_location (l_package_name,30);
79 CLOSE c_translation;
80 ELSE
81 hr_utility.set_location (l_package_name,40);
82 CLOSE c_translation;
83 fnd_message.set_name('PAY','HR_TRANSLATION_EXISTS');
84 fnd_message.raise_error;
85 END IF;
86 hr_utility.set_location ('Leaving: '||l_package_name,60);
87
88 END validate_translation;
89
90
91 --------------------------------------------------------------------------------
92 function NO_DEFAULT_AT_LINK (
93
94 --******************************************************************************
95 --* Returns TRUE if there is no default value specified at the link. *
96 --* This will affect whether or not the default at the type may be deleted for *
97 --* hot-defaulted standard entries. *
98 --******************************************************************************
99
100 -- Parameters are:
101
102 p_input_value_id number,
103 p_effective_start_date date,
104 p_effective_end_date date,
105 p_error_if_true boolean := FALSE ) return boolean is
106
107 cursor csr_link is
108 select 1
109 from pay_link_input_values_f
110 where input_value_id = p_input_value_id
111 and default_value is null
112 and effective_start_date <=p_effective_end_date
113 and effective_end_date >=p_effective_start_date;
114
115 v_no_default boolean := FALSE;
116
117 begin
118 open csr_link;
119 fetch csr_link into g_dummy;
120 v_no_default := csr_link%found;
121 close csr_link;
122
123 if p_error_if_true and v_no_default then
124 hr_utility.set_message (801, 'PAY_INPVAL_MUST_HAVE_DEFAULT');
125 hr_utility.raise_error;
126 end if;
127
128 return v_no_default;
129
130 end no_default_at_link;
131 --------------------------------------------------------------------------------
132 function ELEMENT_ENTRY_NEEDS_DEFAULT (
133
134 --******************************************************************************
135 --* Returns TRUE if an entry value uses the input_value's hot default *
136 --******************************************************************************
137 --
138 -- Parameters are:
139 --
140 p_input_value_id number,
141 p_effective_start_date date,
142 p_effective_end_date date,
143 p_error_if_true boolean := FALSE ) return boolean is
144 --
145 cursor csr_hot_defaulted_entry is
146 select 1
147 from pay_element_entry_values_f ENTRY,
148 pay_link_input_values_f LINK
149 where link.input_value_id = p_input_value_id
150 and link.input_value_id = entry.input_value_id
151 and link.default_value is null
152 and entry.screen_entry_value is null
153 and entry.effective_start_date <= p_effective_end_date
154 and entry.effective_end_date >= p_effective_start_date
155 and link.effective_start_date <= p_effective_end_date
156 and link.effective_end_date >= p_effective_start_date;
157 --
158 v_hot_default_required boolean := FALSE;
159 --
160 begin
161 --
162 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.ELEMENT_ENTRY_NEEDS_DEFAULT',1);
163 --
164 open csr_hot_defaulted_entry;
165 fetch csr_hot_defaulted_entry into g_dummy;
166 v_hot_default_required := csr_hot_defaulted_entry%found;
167 close csr_hot_defaulted_entry;
168 --
169 if p_error_if_true and v_hot_default_required then
170 hr_utility.set_message (801,'PAY_6191_INPVAL_NO_ENTRY_DEFS');
171 hr_utility.raise_error;
172 end if;
173 --
174 return v_hot_default_required;
175 --
176 end ELEMENT_ENTRY_NEEDS_DEFAULT;
177 --------------------------------------------------------------------------------
178 function CANT_DELETE_ALL_INPUT_VALUES (
179 --
180 --******************************************************************************
181 --* Returns TRUE if any input value for a given element may not be deleted *
182 --******************************************************************************
183 --
184 -- Parameters are:
185 --
186 p_element_type_id number,
187 p_delete_mode varchar2,
188 p_validation_start_date date,
189 p_validation_end_date date,
190 p_error_if_true boolean default FALSE
191 --
192 ) return boolean is
193 --
194 cursor csr_input_values is
195 select *
196 from pay_input_values_f
197 where element_type_id = p_element_type_id
198 and effective_start_date <= p_validation_end_date
199 and effective_end_date >= p_validation_start_date;
200 --
201 v_protected_row_exists boolean := FALSE;
202 --
203 begin
204 --
205 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.cant_delete_all_input_values',1);
206 --
207 <<CHECK_EACH_INPUT_VALUE>>
208 for fetched_input_value in csr_input_values LOOP
209 --
210 if NOT deletion_allowed ( fetched_input_value.input_value_id,
211 p_delete_mode,
212 p_validation_start_date,
213 p_validation_end_date,
214 p_error_if_true ) then
215 --
216 v_protected_row_exists := TRUE;
217 --
218 end if;
219 --
220 exit when v_protected_row_exists;
221 --
222 end loop check_each_input_value;
223 --
224 return v_protected_row_exists;
225 --
226 end cant_delete_all_input_values;
227 --------------------------------------------------------------------------------
228 function RUN_RESULT_VALUE_EXISTS (
229 --
230 --******************************************************************************
231 --* Returns TRUE if there are any run result values for the input value *
232 --******************************************************************************
233 --
234 -- Parameters are:
235 --
236 p_input_value_id number,
237 p_validation_start_date date default to_date ('01/01/0001','DD/MM/YYYY'),
238 p_validation_end_date date default to_date ('31/12/4712','DD/MM/YYYY'),
239 p_error_if_true boolean default FALSE) return boolean is
240 --
241 v_value_exists boolean := FALSE;
242 --
243 cursor csr_value is
244 select 1
245 from dual
246 where exists
247 (select /*+ INDEX(RESULT PAY_RUN_RESULTS_PK) */ 1
248 from pay_run_result_values VALUE,
249 pay_run_results RESULT,
250 pay_assignment_actions ASSIGN,
251 pay_payroll_actions PAYROLL
252 where value.run_result_id = result.run_result_id
253 and assign.assignment_action_id = result.assignment_action_id
254 and assign.payroll_action_id = payroll.payroll_action_id
255 and value.input_value_id = p_input_value_id
256 and payroll.effective_date between p_validation_start_date
257 and p_validation_end_date);
258 --
259 begin
260 --
261 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.RUN_RESULT_VALUE_EXISTS',1);
262 open csr_value;
263 fetch csr_value into g_dummy;
264 v_value_exists := csr_value%found;
265 close csr_value;
266 --
267 if v_value_exists and p_error_if_true then
268 hr_utility.set_message (801,'PAY_6212_INPVAL_NO_RR_DEL');
269 hr_utility.raise_error;
270 end if;
271 --
272 return v_value_exists;
273 --
274 end run_result_value_exists;
275 --------------------------------------------------------------------------------
276 function BACKPAY_RULE_EXISTS (
277 --
278 --******************************************************************************
279 --* Returns TRUE if there are any backpay rules applying to this input value *
280 --******************************************************************************
281 --
282 -- Parameters are:
283 --
284 p_input_value_id number,
285 p_error_if_true boolean default FALSE) return boolean is
286 --
287 v_backpay_rules_exist boolean := FALSE;
288 --
289 cursor csr_backpay_rules is
290 select 1
291 from pay_backpay_rules
292 where input_value_id = p_input_value_id;
293 --
294 begin
295 --
296 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.BACKPAY_RULE_EXISTS',1);
297 open csr_backpay_rules;
298 fetch csr_backpay_rules into g_dummy;
299 v_backpay_rules_exist := csr_backpay_rules%found;
300 close csr_backpay_rules;
301 --
302 if v_backpay_rules_exist and p_error_if_true then
303 hr_utility.set_message (801,'PAY_6215_INPVAL_NO_DEL_BP');
304 hr_utility.raise_error;
305 end if;
306 --
307 return v_backpay_rules_exist;
308 --
309 end backpay_rule_exists;
310 --------------------------------------------------------------------------------
311 function ABSENCE_EXISTS (
312 --
313 --******************************************************************************
314 --* Returns TRUE if there are any absence records applying to an input value *
315 --* after the date of its date-effective deletion *
316 --******************************************************************************
317 --
318 -- Parameters are:
319 --
320 p_input_value_id number,
321 p_validation_start_date date default to_date ('01/01/0001','DD/MM/YYYY'),
322 p_validation_end_date date default to_date ('31/12/4712','DD/MM/YYYY'),
323 p_error_if_true boolean default FALSE
324 --
325 ) return boolean is
326 --
327 v_orphans_exist boolean := FALSE;
328 --
329 cursor csr_orphans is
330 select 1
331 from per_absence_attendance_types
332 where input_value_id = p_input_value_id
333 and date_effective between p_validation_start_date
334 and p_validation_end_date;
335 --
336 begin
337 --
338 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.ABSENCE_EXISTS',1);
339 open csr_orphans;
340 fetch csr_orphans into g_dummy;
341 v_orphans_exist := csr_orphans%found;
342 close csr_orphans;
343 --
344 if v_orphans_exist and p_error_if_true then
345 hr_utility.set_message (801,'PAY_6214_INPVAL_NO_ABS_DEL');
346 hr_utility.raise_error;
347 end if;
348 --
349 return v_orphans_exist;
350 --
351 end absence_exists;
352 --------------------------------------------------------------------------------
353 function ELEMENT_ENTRY_VALUE_EXISTS (
354 --
355 --******************************************************************************
356 --* Returns TRUE if there are any element entry values for the input value *
357 --******************************************************************************
358 --
359 -- Parameters are:
360 --
361 p_input_value_id number,
362 p_validation_start_date date default to_date ('01/01/0001','DD/MM/YYYY'),
363 p_validation_end_date date default to_date ('31/12/4712','DD/MM/YYYY'),
364 p_error_if_true boolean default FALSE
365 --
366 ) return boolean is
367 --
368 v_entries_exist boolean := FALSE;
369 --
370 cursor csr_entries is
371 select 1
372 from pay_element_entry_values_f
373 where input_value_id = p_input_value_id
374 and effective_start_date <= p_validation_end_date
375 and effective_end_date >= p_validation_start_date;
376 --
377 begin
378 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.ELEMENT_ENTRY_VALUE_EXISTS',1);
379 hr_utility.trace ('p_input_value_id = '||to_char(p_input_value_id));
380 hr_utility.trace ('p_val_start = '||p_validation_start_date);
381 hr_utility.trace ('p_val_end = '||p_validation_end_date);
382 --
383 open csr_entries;
384 fetch csr_entries into g_dummy;
385 v_entries_exist := csr_entries%found;
386 close csr_entries;
387 --
388 if v_entries_exist and p_error_if_true then
389 hr_utility.set_message (801,'PAY_6211_INPVAL_NO_DEL_ENTRY');
390 hr_utility.raise_error;
391 end if;
392 --
393 return v_entries_exist;
394 --
395 end element_entry_value_exists;
396 --------------------------------------------------------------------------------
397 function RESULT_RULE_EXISTS (
398 --
399 --******************************************************************************
400 --* Returns TRUE if there are any formula result rules applying to an input *
401 --* value after the date of its date-effective deletion *
402 --******************************************************************************
403 --
404 -- Parameters are:
405 --
406 p_input_value_id number,
407 p_validation_start_date date default to_date ('01/01/0001','DD/MM/YYYY'),
408 p_validation_end_date date default to_date ('31/12/4712','DD/MM/YYYY'),
409 p_error_if_true boolean default FALSE
410 --
411 ) return boolean is
412 --
413 v_orphans_exist boolean := FALSE;
414 --
415 cursor csr_orphans is
416 select 1
417 from pay_formula_result_rules_f
418 where input_value_id = p_input_value_id
419 and effective_start_date <= p_validation_end_date
420 and effective_end_date >= p_validation_start_date;
421 --
422 begin
423 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.RESULT_RULE_EXISTS',1);
424 --
425 open csr_orphans;
426 fetch csr_orphans into g_dummy;
427 v_orphans_exist := csr_orphans%found;
428 close csr_orphans;
429 --
430 if v_orphans_exist and p_error_if_true then
431 hr_utility.set_message (801,'PAY_6213_INPVAL_NO_FRR_DEL');
432 hr_utility.raise_error;
433 end if;
434 --
435 return v_orphans_exist;
436 --
437 end result_rule_exists;
438 --------------------------------------------------------------------------------
439 function INPUT_VALUE_USED_AS_PAY_BASIS (
440 --
441 p_input_value_id number,
442 p_error_if_true boolean default FALSE) return boolean IS
443 --
444 --******************************************************************************
445 --* Returns TRUE if the input value is used as a pay basis *
446 --******************************************************************************
447 --
448 v_pay_basis_input_value boolean := FALSE;
449 v_dummy_number number(1);
450 --
451 cursor csr_pay_basis is
452 select 1
453 from per_pay_bases
454 where input_value_id = p_input_value_id;
455 --
456 begin
457 --
458 open csr_pay_basis;
459 fetch csr_pay_basis into v_dummy_number;
460 v_pay_basis_input_value := csr_pay_basis%found;
461 close csr_pay_basis;
462 --
463 if v_pay_basis_input_value and p_error_if_true then
464 --
465 hr_utility.set_message(801,'PAY_6965_INPVAL_NO_DEL_SB');
466 hr_utility.raise_error;
467 --
468 end if;
469 --
470 return v_pay_basis_input_value;
471 --
472 end input_value_used_as_pay_basis;
473 --------------------------------------------------------------------------------
474 function DISTRIBUTED_COST_LINK_EXISTS (
475 --
476 --******************************************************************************
477 --* Returns TRUE if there are any element links for the input value's element *
478 --* which have a costable type of Distributed, and the input value is a Pay *
479 --* Value *
480 --******************************************************************************
481 --
482 -- Parameters are:
483 --
484 p_input_value_id number,
485 p_error_if_true boolean default FALSE) return boolean is
486 --
487 v_links_exist boolean := FALSE;
488 --
489 -- Find local name for pay values
490 v_pay_value_name hr_lookups.meaning%type := hr_general.pay_value;
491 --
492 cursor csr_links is
493 select 1
494 from pay_element_links_f LINK,
495 pay_input_values_f INPUT
496 where input.input_value_id = p_input_value_id
497 and input.name = 'Pay Value'
498 and link.element_type_id = input.element_type_id
499 and link.costable_type = 'D';
500 --
501 begin
502 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.DISTRIBUTED_COST_LINK_EXISTS',1);
503 --
504 open csr_links;
505 fetch csr_links into g_dummy;
506 v_links_exist := csr_links%found;
507 close csr_links;
508 --
509 if v_links_exist and p_error_if_true then
510 hr_utility.set_message (801,'PAY_6210_INPVAL_NO_LINKS_DEL');
511 hr_utility.raise_error;
512 end if;
513 --
514 return v_links_exist;
515 --
516 end distributed_cost_link_exists;
517 --------------------------------------------------------------------------------
518 function ASSIGNED_SALARY_BASE_EXISTS (
519 --
520 --******************************************************************************
521 --* Returns TRUE if there are any salary bases for the input value which are *
522 --* tied to assignments *
523 --******************************************************************************
524 --
525 -- Parameters are:
526 --
527 p_input_value_id number,
528 p_validation_start_date date default to_date ('01/01/0001','DD/MM/YYYY'),
529 p_validation_end_date date default to_date ('31/12/4712','DD/MM/YYYY'),
530 p_error_if_true boolean default FALSE) return boolean is
531 --
532 v_base_exists boolean := FALSE;
533 --
534 cursor csr_salary_base is
535 select 1
536 from per_pay_bases BASE
537 where base.input_value_id = p_input_value_id;
538 --
539 begin
540 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.ASSIGNED_SALARY_BASE_EXISTS',1);
541 --
542 open csr_salary_base;
543 fetch csr_salary_base into g_dummy;
544 v_base_exists := csr_salary_base%found;
545 close csr_salary_base;
546 --
547 if v_base_exists and p_error_if_true then
548 hr_utility.set_message (801,'PAY_6965_INPVAL_NO_DEL_SB');
549 hr_utility.raise_error;
550 end if;
551 --
552 return v_base_exists;
553 --
554 end assigned_salary_base_exists;
555 --------------------------------------------------------------------------------
556 function NET_CALCULATION_RULE_EXISTS (
557 --
558 --******************************************************************************
559 --* Returns TRUE if there are net calculation rules which make use of the
560 --* specified input value id.
561 --******************************************************************************
562 --
563 -- Parameters are:
564 --
565 p_input_value_id number,
566 p_error_if_true boolean default false) return boolean is
567 --
568 v_calculation_exists boolean := FALSE;
569 --
570 cursor csr_calc_rule is
571 select 1
572 from pay_net_calculation_rules
573 where input_value_id = p_input_value_id;
574 --
575 begin
576 --
577 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.NET_CALCULATION_RULES_EXIST',1);
578 --
579 open csr_calc_rule;
580 fetch csr_calc_rule into g_dummy;
581 v_calculation_exists := csr_calc_rule%found;
582 close csr_calc_rule;
583 --
584 if v_calculation_exists and p_error_if_true then
585 hr_utility.set_message (801, 'PAY_35559_INPVAL_NO_DEL_CALC');
586 hr_utility.raise_error;
587 end if;
588 --
589 return v_calculation_exists;
590 --
591 end net_calculation_rule_exists;
592 --------------------------------------------------------------------------------
593 function ACCRUAL_PLAN_EXISTS (
594 --
595 --******************************************************************************
596 --* Returns TRUE if there are any accrual plans which make use of the specified
597 --* input_value_id.
598 --******************************************************************************
599 --
600 -- Parameters are:
601 --
602 p_input_value_id number,
603 p_error_if_true boolean default FALSE) return boolean is
604 --
605 v_accrual_plan_exists boolean := FALSE;
606 --
607 cursor csr_accrual_plan is
608 select 1
609 from pay_accrual_plans
610 where p_input_value_id in ( pto_input_value_id,
611 co_input_value_id,
612 residual_input_value_id );
613 --
614 begin
615 --
616 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.ACCRUAL_PLAN_EXISTS',1);
617 --
618 open csr_accrual_plan;
619 fetch csr_accrual_plan into g_dummy;
620 v_accrual_plan_exists := csr_accrual_plan%found;
621 close csr_accrual_plan;
622 --
623 if v_accrual_plan_exists and p_error_if_true then
624 hr_utility.set_message (801,'PAY_35558_INPVAL_NO_DEL_ACCRUA');
625 hr_utility.raise_error;
626 end if;
627 --
628 return v_accrual_plan_exists;
629 --
630 end accrual_plan_exists;
631 --------------------------------------------------------------------------------
632 procedure PARENT_DELETED (
633 --
634 --******************************************************************************
635 --* Handles the case when the element type is deleted. *
636 --******************************************************************************
637 --
638 -- Parameters are:
639 --
640 -- Identifier of the element
641 p_element_type_id number,
642 --
643 -- The effective date
644 p_session_date date default trunc(sysdate),
645 --
646 -- The validation period
647 p_validation_start_date date,
648 p_validation_end_date date,
649 --
650 -- The type of Date Track deletion
651 p_delete_mode varchar2 default 'DELETE'
652 --
653 ) is
654 --
655 cursor csr_all_inputs_for_element is
656 select rowid,pay_input_values_f.*
657 from pay_input_values_f
658 where element_type_id = p_element_type_id
659 for update;
660 --
661 begin
662 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.PARENT_DELETED',1);
663 --
664 <<REMOVE_ORPHANED_ROWS>>
665 FOR fetched_input_value in csr_all_inputs_for_element LOOP
666 --
667 hr_balance_feeds.del_bf_input_value ( fetched_input_value.input_value_id,
668 p_delete_mode,
669 p_validation_start_date,
670 p_validation_end_date );
671 --
672 -- Delete input value if in ZAP mode
673 -- Delete input value if it is in the future and in DELETE mode
674 --
675 if p_delete_mode = 'ZAP'
676 or (p_delete_mode = 'DELETE'
677 and fetched_input_value.effective_start_date > p_session_date ) then
678 --
679 delete_row ( fetched_input_value.rowid,
680 fetched_input_value.input_value_id,
681 p_delete_mode,
682 p_session_date,
683 p_validation_start_date,
684 p_validation_end_date );
685 --
686 delete from hr_application_ownerships
687 where key_name = 'INPUT_VALUE_ID'
688 and key_value = fetched_input_value.input_value_id;
689 --
690 -- For date effective deletes, shut down the input value by ensuring its end
691 -- date matches that of its closed parent
692 --
693 elsif p_delete_mode = 'DELETE'
694 and p_session_date between fetched_input_value.effective_start_date
695 and fetched_input_value.effective_end_date then
696 --
697 update pay_input_values_f
698 set effective_end_date = p_session_date
699 where current of csr_all_inputs_for_element;
700 --
701 -- For delete next changes when there are no future rows for the element,
702 -- extend the input value's end date to the end of time to match the action
703 -- which will be performed on the parent
704 --
705 elsif p_delete_mode = 'DELETE_NEXT_CHANGE'
706 and p_validation_end_date = c_end_of_time then
707 --
708 -- bugfix 1507600
709 -- only update peices date effective as of session date
710 --
711 hr_utility.trace ('***** in DELETE_NEXT_CHANGE');
712 hr_utility.trace ('***** ESD>' ||
713 fetched_input_value.effective_start_date || '<');
714 hr_utility.trace ('***** EED>' ||
715 fetched_input_value.effective_end_date || '<');
716
717 -- if p_session_date >= fetched_input_value.effective_start_date and
718 -- p_session_date <= fetched_input_value.effective_end_date then
719 hr_utility.trace ('***** peice within ESD and EED');
720 hr_utility.trace ('***** ESD>' ||
721 fetched_input_value.effective_start_date || '<');
722 hr_utility.trace ('***** EED>' ||
723 fetched_input_value.effective_end_date || '<');
724 --
725 update pay_input_values_f
726 set effective_end_date = c_end_of_time
727 where --current of csr_all_inputs_for_element
728 rowid = fetched_input_value.rowid
729 and not exists
730 (select null
731 from pay_input_values_f pipv
732 where pipv.element_type_id = fetched_input_value.element_type_id
733 and pipv.input_value_id = fetched_input_value.input_value_id
734 and pipv.effective_start_date > fetched_input_value.effective_start_date);
735 -- end if;
736 --
737 end if;
738 --
739 end loop remove_orphaned_rows;
740 --
741 end parent_deleted;
742 -------------------------------------------------------------------------------
743 procedure RECREATE_DB_ITEMS (
744 --
745 --******************************************************************************
746 --* Drops and then creates new DB items for all input values belonging to an *
747 --* element. *
748 --******************************************************************************
749 --
750 -- Parameters are:
751 --
752 p_element_type_id number) is
753 --
754 cursor csr_input_values is
755 select *
756 from pay_input_values_f
757 where element_type_id = p_element_type_id
758 and generate_db_items_flag = 'Y'; -- Bug 6432304
759 --
760 begin
761 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.RECREATE_DB_ITEMS',1);
762 --
763 FOR fetched_input_value in csr_input_values LOOP
764 --
765 hrdyndbi.delete_input_value_dict (fetched_input_value.input_value_id);
766 --
767 hrdyndbi.create_input_value_dict (fetched_input_value.input_value_id,
768 fetched_input_value.effective_start_date);
769 --
770 end loop;
771 --
772 end recreate_db_items;
773 -------------------------------------------------------------------------------
774 function DELETION_ALLOWED (
775
776 --******************************************************************************
777 --* Returns TRUE if no business rules will be broken by deletion of the input *
778 --* value *
779 --******************************************************************************
780
781 -- Parameters are:
782
783 p_input_value_id number,
784 p_delete_mode varchar2,
785 p_validation_start_date date,
786 p_validation_end_date date,
787 p_error_if_true boolean default FALSE
788
789 ) return boolean is
790
791 v_deletion_allowed boolean := TRUE;
792
793 begin
794 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.DELETION_ALLOWED',1);
795
796 if (p_delete_mode = 'ZAP'
797
798 and (element_entry_value_exists ( p_input_value_id,
799 p_validation_start_date,
800 p_validation_end_date,
801 p_error_if_true )
802
803 or accrual_plan_exists ( p_input_value_id,
804 p_error_if_true)
805
806 or net_calculation_rule_exists (p_input_value_id,
807 p_error_if_true)
808
809 or assigned_salary_base_exists (p_input_value_id,
810 p_validation_start_date,
811 p_validation_end_date,
812 p_error_if_true)
813
814 or run_result_value_exists ( p_input_value_id,
815 p_validation_start_date,
816 p_validation_end_date,
817 p_error_if_true )
818
819 or result_rule_exists ( p_input_value_id,
820 p_validation_start_date,
821 p_validation_end_date,
822 p_error_if_true )
823
824 or absence_exists ( p_input_value_id,
825 p_validation_start_date,
826 p_validation_end_date,
827 p_error_if_true )
828
829 or backpay_rule_exists ( p_input_value_id,
830 p_error_if_true )
831
832 or distributed_cost_link_exists ( p_input_value_id,
833 p_error_if_true)
834 )
835 or input_value_used_as_pay_basis( p_input_value_id,
836 p_error_if_true))
837
838 or (p_delete_mode = 'DELETE'
839
840 and (result_rule_exists ( p_input_value_id,
841 p_validation_start_date,
842 p_validation_end_date,
843 p_error_if_true )
844
845 or absence_exists ( p_input_value_id,
846 p_validation_start_date,
847 p_validation_end_date,
848 p_error_if_true )
849
850 ))
851 or dt_api.rows_exist(
852 p_base_table_name => 'ben_acty_base_rt_f',
853 p_base_key_column => 'input_value_id',
854 p_base_key_value => p_input_value_id,
855 p_from_date => p_validation_start_date,
856 p_to_date => p_validation_end_date
857 )
858 then
859 v_deletion_allowed := FALSE;
860
861 end if;
862
863 return v_deletion_allowed;
864
865 end deletion_allowed;
866 -----------------------------------------------------------------------------
867 function NO_OF_INPUT_VALUES (p_element_type_id number) return number is
868 --
869 --******************************************************************************
870 --* Returns the number of input values on the database for a given element *
871 --******************************************************************************
872 --
873 v_no_of_input_values number(30);
874 --
875 cursor csr_count_input_values is
876 select count(distinct input_value_id)
877 from pay_input_values_f
878 where element_type_id = p_element_type_id;
879 --
880 begin
881 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.NO_OF_INPUT_VALUES',1);
882 --
883 open csr_count_input_values;
884 fetch csr_count_input_values into v_no_of_input_values;
885 close csr_count_input_values;
886 --
887 return v_no_of_input_values;
888 --
889 end no_of_input_values;
890 --------------------------------------------------------------------------------
891 function DATE_EFFECTIVELY_UPDATED (
892 --
893 --******************************************************************************
894 --* Returns TRUE if there is more than one date effective row for the input *
895 --* value *
896 --******************************************************************************
897 --
898 -- Parameters are:
899 --
900 -- Identifier of the input value and its particular instance
901 p_input_value_id number,
902 p_rowid varchar2) return boolean is
903 --
904 cursor csr_dated_updates is
905 select 1
906 from pay_input_values_f
907 where input_value_id = p_input_value_id
908 and rowid <> p_rowid;
909 --
910 v_date_effectively_updated boolean := FALSE;
911 --
912 begin
913 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.DATE_EFFECTIVELY_UPDATED',1);
914 --
915 open csr_dated_updates;
916 fetch csr_dated_updates into g_dummy;
917 v_date_effectively_updated := csr_dated_updates%found;
918 close csr_dated_updates;
919 --
920 return v_date_effectively_updated;
921 --
922 end date_effectively_updated;
923 --------------------------------------------------------------------------------
924 function NAME_NOT_UNIQUE (
925 --
926 --******************************************************************************
927 --* Returns TRUE if the input value name is NOT unique within the element type *
928 --******************************************************************************
929 --
930 -- Parameters are:
931 --
932 p_element_type_id number,
933 p_rowid varchar2 default null,
934 p_name varchar2,
935 p_error_if_true boolean default FALSE) return boolean is
936 --
937 l_ivid pay_input_values_f.input_value_id%type;
938 v_duplicate boolean := FALSE;
939 --
940 cursor csr_duplicate_name (p_ivid number) is
941 select 1
942 from pay_input_values_f_tl iv_tl,
943 pay_input_values_f iv
944 where iv.element_type_id = p_element_type_id
945 and (iv.rowid <> p_rowid or p_rowid is null)
946 and iv_tl.input_value_id = iv.input_value_id
947 and iv_tl.language = userenv('LANG')
948 and upper(iv_tl.name) = upper(p_name);
949 --
950 begin
951 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.NAME_NOT_UNIQUE',1);
952 --
953 if p_rowid is not null then
954 select input_value_id
955 into l_ivid
956 from pay_input_values_f
957 where rowid = p_rowid;
958 else
959 l_ivid := null;
960 end if;
961 --
962 open csr_duplicate_name(l_ivid);
963 fetch csr_duplicate_name into g_dummy;
964 v_duplicate := csr_duplicate_name%found;
965 close csr_duplicate_name;
966 --
967 if v_duplicate and p_error_if_true then
968 hr_utility.set_message (801,'PAY_6168_INPVAL_DUP_NAME');
969 hr_utility.raise_error;
970 end if;
971 --
972 return v_duplicate;
973 --
974 end name_not_unique;
975 --------------------------------------------------------------------------------
976 function MANDATORY_IN_FUTURE (
977 --
978 --******************************************************************************
979 --* Returns TRUE if the input value is mandatory in any future date effective
980 --* row. *
981 --******************************************************************************
982 --
983 -- Parameters are:
984 --
985 p_input_value_id number,
986 p_session_date date default trunc(sysdate),
987 p_error_if_true boolean default FALSE)
988 --
989 return boolean is
990 --
991 v_mandatory_in_future boolean;
992 --
993 cursor csr_mandatory_flag is
994 select 1
995 from pay_input_values_f
996 where input_value_id = p_input_value_id
997 and mandatory_flag = 'Y'
998 and effective_start_date > p_session_date;
999 --
1000 begin
1001 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.MANDATORY_IN_FUTURE',1);
1002 open csr_mandatory_flag;
1003 fetch csr_mandatory_flag into g_dummy;
1004 v_mandatory_in_future := csr_mandatory_flag%found;
1005 close csr_mandatory_flag;
1006 --
1007 if p_error_if_true and v_mandatory_in_future then
1008 hr_utility.set_message(801,'PAY_6179_INPVAL_MAND_NO_CHANGE');
1009 hr_utility.raise_error;
1010 end if;
1011 --
1012 return v_mandatory_in_future;
1013 --
1014 end mandatory_in_future;
1015 --------------------------------------------------------------------------------
1016 procedure INSERT_ROW (
1017 --
1018 --******************************************************************************
1019 --* Handles the insertion of an input value into the base table and ensures *
1020 --* that any cascaded actions are carried out
1021 --******************************************************************************
1022 --
1023 -- Parameters are:
1024 --
1025 -- All base table columns
1026 p_effective_start_date date default trunc (sysdate),
1027 p_effective_end_date date default to_date ('31/12/4712',
1028 'DD/MM/YYYY'),
1029 p_element_type_id number,
1030 p_lookup_type varchar2 default null,
1031 p_business_group_id number default null,
1032 p_legislation_code varchar2 default null,
1033 p_formula_id number default null,
1034 p_display_sequence number default 1,
1035 p_generate_db_items_flag varchar2 default 'Y',
1036 p_hot_default_flag varchar2 default 'N',
1037 p_mandatory_flag varchar2 default 'N',
1038
1039 -- change 115.12 - make p_name default to null
1040 --p_name varchar2 default 'Pay Value',
1041 p_name varchar2 default null,
1042 -- change 115.12 - make p_base_name a mandatory parameter
1043 --p_base_name varchar2 default 'Pay Value',
1044 p_base_name varchar2,
1045
1046 p_uom varchar2 default 'M',
1047 p_default_value varchar2 default null,
1048 p_legislation_subgroup varchar2 default null,
1049 p_max_value varchar2 default null,
1050 p_min_value varchar2 default null,
1051 p_warning_or_error varchar2 default null,
1052 --
1053 -- Attributes of the parent element type which will affect
1054 -- subsequent actions
1055 p_classification_id number default null,
1056 --
1057 -- Enhancement 2793978
1058 p_value_set_id number default null,
1059 --
1060 -- The identifiers generated by the system for return to the form
1061 p_input_value_id in out nocopy number,
1062 p_rowid in out nocopy varchar2
1063 --
1064 ) is
1065 --
1066 cursor csr_next_id is
1067 select pay_input_values_s.nextval
1068 from sys.dual;
1069 --
1070 cursor csr_input_value_rowid is
1071 --
1072 /* We need to know the value of the newly created
1073 rowid so that forms does not have to re-query */
1074 --
1075 select rowid
1076 from pay_input_values_f
1077 where input_value_id = p_input_value_id
1078 and effective_start_date = p_effective_start_date
1079 and effective_end_date = p_effective_end_date;
1080 --
1081 cursor c_language (c_input_value_id number) is
1082 select L.LANGUAGE_CODE
1083 from FND_LANGUAGES L
1084 where L.INSTALLED_FLAG in ('I', 'B')
1085 and not exists
1086 (select NULL
1087 from PAY_INPUT_VALUES_F_TL T
1088 where T.INPUT_VALUE_ID = c_input_value_id
1089 and T.LANGUAGE = L.LANGUAGE_CODE);
1090
1091 --
1092 -- Each system may have a different name for a pay value
1093 v_pay_value_name varchar2(255) := hr_general.pay_value;
1094 -- change 115.12
1095 l_name varchar2(80);
1096 --
1097 l_tl_name varchar2(255);
1098 --
1099 l_check_latest_balances boolean;
1100 --
1101 begin
1102 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.insert_row',1);
1103 --
1104
1105 -- change 115.12 - if p_name has not been specified then default it to
1106 -- p_base_name
1107 l_name := p_name;
1108 if l_name is null then
1109 l_name := p_base_name;
1110 end if;
1111
1112 open csr_next_id;
1113 fetch csr_next_id into p_input_value_id;
1114 close csr_next_id;
1115 --
1116 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.insert_row',2);
1117 --
1118 if no_of_input_values (p_element_type_id) >= 15 then
1119
1120 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.insert_row',3);
1121
1122 hr_utility.set_message (801, 'HR_7124_INPVAL_MAX_ENTRIES');
1123 hr_utility.raise_error;
1124
1125 end if;
1126
1127 insert into pay_input_values_f (
1128 --
1129 INPUT_VALUE_ID,
1130 EFFECTIVE_START_DATE,
1131 EFFECTIVE_END_DATE,
1132 ELEMENT_TYPE_ID,
1133 LOOKUP_TYPE,
1134 BUSINESS_GROUP_ID,
1135 LEGISLATION_CODE,
1136 FORMULA_ID,
1137 DISPLAY_SEQUENCE,
1138 GENERATE_DB_ITEMS_FLAG,
1139 HOT_DEFAULT_FLAG,
1140 MANDATORY_FLAG,
1141 NAME,
1142 UOM,
1143 DEFAULT_VALUE,
1144 LEGISLATION_SUBGROUP,
1145 MAX_VALUE,
1146 MIN_VALUE,
1147 WARNING_OR_ERROR,
1148 -- Enhancement 2793978
1149 VALUE_SET_ID,
1150 --
1151 last_update_date,
1152 last_updated_by,
1153 last_update_login,
1154 creation_date,
1155 created_by)
1156 --
1157 values (
1158 --
1159 p_input_value_id,
1160 p_effective_start_date,
1161 p_effective_end_date,
1162 p_element_type_id,
1163 p_lookup_type,
1164 p_business_group_id,
1165 p_legislation_code,
1166 p_formula_id,
1167 p_display_sequence,
1168 p_generate_db_items_flag,
1169 p_hot_default_flag,
1170 p_mandatory_flag,
1171 -- If the input value is a pay value, translate it to local language
1172 -- DECODE(UPPER(p_name),
1173 -- 'PAY VALUE', v_pay_value_name,
1174 -- p_name
1175 -- ),
1176 -- --
1177 -- only insert the base value into the _F table
1178 p_base_name,
1179 -- --
1180 p_uom,
1181 p_default_value,
1182 p_legislation_subgroup,
1183 p_max_value,
1184 p_min_value,
1185 p_warning_or_error,
1186 -- Enhancement 2793978
1187 p_value_set_id,
1188 --
1189 sysdate,
1190 c_user_id,
1191 c_login_id,
1192 sysdate,
1193 c_user_id);
1194 --
1195 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.insert_row',4);
1196 --
1197 -- ***********************************************************************
1198 -- Insert into MLS table (TL)
1199 --
1200 -- bug 8797632
1201 for c_lang_rec in c_language(P_INPUT_VALUE_ID) loop
1202 if (upper(l_name) = 'PAY VALUE') then
1203 begin
1204 select meaning
1205 into l_tl_name
1206 from fnd_lookup_values
1207 where lookup_type = 'NAME_TRANSLATIONS'
1208 and lookup_code = 'PAY VALUE'
1209 and language = c_lang_rec.language_code;
1210 exception
1211 when no_data_found then
1212 l_tl_name := l_name;
1213 end;
1214 else
1215 -- some lookups have _ so use like
1216 -- meanings are unique so where already used use description
1217 begin
1218 select nvl(description,meaning)
1219 into l_tl_name
1220 from fnd_lookup_values
1221 where lookup_type = 'NAME_TRANSLATIONS'
1222 and upper(l_name) like lookup_code
1223 and language = c_lang_rec.language_code
1224 and rownum = 1;
1225 exception
1226 when no_data_found then
1227 l_tl_name := l_name;
1228 end;
1229 end if;
1230
1231 insert into PAY_INPUT_VALUES_F_TL (
1232 INPUT_VALUE_ID,
1233 NAME,
1234 LAST_UPDATE_DATE,
1235 LAST_UPDATED_BY,
1236 LAST_UPDATE_LOGIN,
1237 CREATED_BY,
1238 CREATION_DATE,
1239 LANGUAGE,
1240 SOURCE_LANG
1241 ) select
1242 P_INPUT_VALUE_ID,
1243 l_tl_name,
1244 sysdate,
1245 c_user_id,
1246 c_user_id,
1247 c_login_id,
1248 sysdate,
1249 c_lang_rec.language_code,
1250 userenv('LANG')
1251 from dual;
1252
1253 end loop;
1254
1255 --
1256 -- ***********************************************************************
1257 --
1258 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.insert_row',5);
1259 --
1260 open csr_input_value_rowid;
1261 fetch csr_input_value_rowid into p_rowid;
1262 --
1263 if csr_input_value_rowid%notfound then
1264 close csr_input_value_rowid;
1265 raise no_data_found;
1266 else
1267 --
1268 -- Create link input values for existing links
1269 --
1270 pay_link_input_values_pkg.create_link_input_value (
1271
1272 p_input_value_id,
1273 p_element_type_id,
1274 p_effective_start_date,
1275 p_effective_end_date,
1276 -- change 115.12
1277 l_name,
1278 p_hot_default_flag,
1279 p_default_value,
1280 p_min_value,
1281 p_max_value,
1282 p_warning_or_error);
1283
1284 -- Create balance feeds for pay values
1285 --
1286 -- change 115.12
1287 if (l_name = 'Pay Value' -- the default
1288 or upper (l_name) = upper (v_pay_value_name)) then
1289 l_check_latest_balances := HRASSACT.CHECK_LATEST_BALANCES;
1290 HRASSACT.CHECK_LATEST_BALANCES := FALSE;
1291 hr_balance_feeds.ins_bf_pay_value ( p_input_value_id );
1292 HRASSACT.CHECK_LATEST_BALANCES := l_check_latest_balances;
1293 end if;
1294 --
1295 -- Create DB item for the input value
1296 if p_generate_db_items_flag = 'Y' then
1297 hrdyndbi.create_input_value_dict ( p_input_value_id,
1298 p_effective_start_date );
1299 end if;
1300 --
1301 -- Create application ownership for startup pay value
1302 if upper (l_name) = upper (v_pay_value_name)
1303 and p_legislation_code is not null then
1304 --
1305 -- The 'not exists' clause is used to ensure that duplicate rows are not
1306 -- entered. This could arise because the forms startup code also handles
1307 -- application ownerships where a user enters a pay value on the form, but
1308 -- this code is intended to handle third party insertion from the element
1309 --
1310 insert into hr_application_ownerships
1311 (key_name,
1312 key_value,
1313 product_name)
1314 select 'INPUT_VALUE_ID',
1315 p_input_value_id,
1316 ao.product_name
1317 from hr_application_ownerships ao
1318 where ao.key_name = 'ELEMENT_TYPE_ID'
1319 and ao.key_value = p_element_type_id
1320 and not exists (select 'INPUT_VALUE_ID',
1321 p_input_value_id,
1322 ao.product_name
1323 from hr_application_ownerships ao
1324 where ao.key_name = 'ELEMENT_TYPE_ID'
1325 and ao.key_value = p_element_type_id);
1326 --
1327 end if;
1328 --
1329 end if;
1330 close csr_input_value_rowid;
1331 --
1332 --
1333 end insert_row;
1334 ---------------------------------------------------------------------------
1335 procedure UPDATE_ROW(
1336 --
1337 --******************************************************************************
1338 --* Handles the updating of the base table for the form which is based on a *
1339 --* non-updatable view *
1340 --******************************************************************************
1341 --
1342 -- Parameters are:
1343 --
1344 -- All base table columns
1345 p_ROWID VARCHAR2,
1346 p_INPUT_VALUE_ID NUMBER,
1347 p_EFFECTIVE_START_DATE DATE,
1348 p_EFFECTIVE_END_DATE DATE,
1349 p_ELEMENT_TYPE_ID NUMBER,
1350 p_LOOKUP_TYPE VARCHAR2,
1351 p_BUSINESS_GROUP_ID NUMBER,
1352 p_LEGISLATION_CODE VARCHAR2,
1353 p_FORMULA_ID NUMBER,
1354 p_DISPLAY_SEQUENCE NUMBER,
1355 p_GENERATE_DB_ITEMS_FLAG VARCHAR2,
1356 p_HOT_DEFAULT_FLAG VARCHAR2,
1357 p_MANDATORY_FLAG VARCHAR2,
1358 p_NAME VARCHAR2,
1359 p_UOM VARCHAR2,
1360 p_DEFAULT_VALUE VARCHAR2,
1361 p_LEGISLATION_SUBGROUP VARCHAR2,
1362 p_MAX_VALUE VARCHAR2,
1363 p_MIN_VALUE VARCHAR2,
1364 p_WARNING_OR_ERROR VARCHAR2,
1365 -- Enhancement 2793978
1366 p_value_set_id number default null,
1367 --
1368 p_recreate_db_items varchar2,
1369 p_base_name varchar2
1370 --
1371 ) is
1372 l_tl_name varchar2(255);
1373 --
1374 begin
1375 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.update_row',1);
1376 --
1377 update pay_input_values_f
1378 set INPUT_VALUE_ID = p_INPUT_VALUE_ID,
1379 EFFECTIVE_START_DATE = p_EFFECTIVE_START_DATE,
1380 EFFECTIVE_END_DATE = p_EFFECTIVE_END_DATE,
1381 ELEMENT_TYPE_ID = p_ELEMENT_TYPE_ID,
1382 LOOKUP_TYPE = p_LOOKUP_TYPE,
1383 BUSINESS_GROUP_ID = p_BUSINESS_GROUP_ID,
1384 LEGISLATION_CODE = p_LEGISLATION_CODE,
1385 FORMULA_ID = p_FORMULA_ID,
1386 DISPLAY_SEQUENCE = p_DISPLAY_SEQUENCE,
1387 GENERATE_DB_ITEMS_FLAG = p_GENERATE_DB_ITEMS_FLAG,
1388 HOT_DEFAULT_FLAG = p_HOT_DEFAULT_FLAG,
1389 MANDATORY_FLAG = p_MANDATORY_FLAG,
1390 -- --
1391 NAME = p_base_NAME,
1392 -- --
1393 UOM = p_UOM,
1394 DEFAULT_VALUE = p_DEFAULT_VALUE,
1395 LEGISLATION_SUBGROUP = p_LEGISLATION_SUBGROUP,
1396 MAX_VALUE = p_MAX_VALUE,
1397 MIN_VALUE = p_MIN_VALUE,
1398 WARNING_OR_ERROR = p_WARNING_OR_ERROR,
1399 -- Enhancement 2793978
1400 VALUE_SET_ID = p_VALUE_SET_ID,
1401 --
1402 last_update_date = sysdate,
1403 last_updated_by = c_user_id,
1404 last_update_login = c_login_id
1405 where rowid = p_rowid;
1406 --
1407 if sql%notfound then
1408 raise no_data_found;
1409 end if;
1410 --
1411 --
1412 -- ************************************************************************
1413 -- update MLS table (TL)
1414 --
1415 l_tl_name := P_NAME;
1416 if (upper(P_NAME) = 'PAY VALUE') then
1417 begin
1418 select meaning
1419 into l_tl_name
1420 from fnd_lookup_values
1421 where lookup_type = 'NAME_TRANSLATIONS'
1422 and lookup_code = 'PAY VALUE'
1423 and language = userenv('LANG');
1424 exception
1425 when no_data_found then
1426 l_tl_name := P_NAME;
1427 end;
1428 end if;
1429
1430 update PAY_INPUT_VALUES_F_TL
1431 set
1432 NAME = l_tl_name,
1433 last_update_date = sysdate,
1434 last_updated_by = c_user_id,
1435 last_update_login = c_login_id,
1436 SOURCE_LANG = userenv('LANG')
1437 where INPUT_VALUE_ID = P_INPUT_VALUE_ID
1438 and userenv('LANG') = LANGUAGE ; -- bug 6125295
1439 --
1440 if sql%notfound then -- trap system errors during update
1441 hr_utility.set_message (801,'HR_6153_ALL_PROCEDURE_FAIL');
1442 hr_utility.set_message_token('PROCEDURE','PAY_INPUT_VALUES_PKG.UPDATE_TL_ROW');
1443 hr_utility.raise_error;
1444 end if;
1445 --
1446 -- ************************************************************************
1447 --
1448 if p_recreate_db_items = 'Y' then
1449 --
1450 -- Recreate DB items
1451 hrdyndbi.delete_input_value_dict (p_input_value_id);
1452 hrdyndbi.create_input_value_dict (p_input_value_id,p_effective_start_date);
1453 --
1454 end if;
1455 --
1456 end update_row;
1457 ---------------------------------------------------------------------------
1458 procedure DELETE_ROW (
1459 --
1460 --******************************************************************************
1461 --* Handles deletion from the base table for the form which is based on a *
1462 --* non-updatable view, and maintains data integrity *
1463 --******************************************************************************
1464 --
1465 -- Parameters are:
1466 --
1467 -- Identifier of the row to be deleted
1468 p_rowid varchar2,
1469 p_input_value_id number,
1470 --
1471 -- Date Track delete mode
1472 p_delete_mode varchar2,
1473 --
1474 -- Validation period
1475 p_session_date date,
1476 p_validation_start_date date
1477 default to_date ('01/01/0001','DD/MM/YYYY'),
1478 p_validation_end_date date
1479 default to_date ('31/12/4712','DD/MM/YYYY')
1480 ) is
1481 --
1482 begin
1483 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.DELETE_ROW',1);
1484 --
1485 if deletion_allowed ( p_input_value_id,
1486 p_delete_mode,
1487 p_validation_start_date,
1488 p_validation_end_date ) then
1489 --
1490 hr_balance_feeds.del_bf_input_value ( p_input_value_id,
1491 p_delete_mode,
1492 p_validation_start_date,
1493 p_validation_end_date );
1494 --
1495 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.DELETE_ROW',2);
1496 --
1497 -- delete DB items
1498 hrdyndbi.delete_input_value_dict (p_input_value_id);
1499 --
1500 delete from pay_input_values_f
1501 where rowid = p_rowid;
1502 --
1503 if sql%notfound then
1504 hr_utility.set_message (801,'HR_6153_ALL_PROCEDURE_FAIL');
1505 hr_utility.set_message_token('PROCEDURE','PAY_INPUT_VALUES_PKG.DELETE_ROW');
1506 hr_utility.raise_error;
1507 end if;
1508 --
1509 --
1510 -- ****************************************************************************
1511 -- delete from MLS table (TL)
1512 --
1513
1514 --
1515 -- bugfix 1229606
1516 -- only delete data from the translated tables if the date track mode is ZAP,
1517 -- for all other date track modes the data should remain untouched
1518 --
1519 if p_delete_mode = 'ZAP' then
1520
1521 delete from PAY_INPUT_VALUES_F_TL
1522 where INPUT_VALUE_ID = P_INPUT_VALUE_ID;
1523 --
1524 if sql%notfound then -- trap system errors during deletion
1525 hr_utility.set_message (801,'HR_6153_ALL_PROCEDURE_FAIL');
1526 hr_utility.set_message_token('PROCEDURE','PAY_INPUT_VALUES_PKG.DELETE_TL_ROW');
1527 hr_utility.raise_error;
1528 end if;
1529
1530 end if;
1531 --
1532 -- ******************************************************************************
1533 --
1534 end if;
1535 --
1536 end delete_row;
1537 ---------------------------------------------------------------------------
1538 procedure LOCK_ROW (
1539 p_rowid VARCHAR2,
1540 p_INPUT_VALUE_ID NUMBER,
1541 p_EFFECTIVE_START_DATE DATE,
1542 p_EFFECTIVE_END_DATE DATE,
1543 p_ELEMENT_TYPE_ID NUMBER,
1544 p_LOOKUP_TYPE VARCHAR2,
1545 p_BUSINESS_GROUP_ID NUMBER,
1546 p_LEGISLATION_CODE VARCHAR2,
1547 p_FORMULA_ID NUMBER,
1548 p_DISPLAY_SEQUENCE NUMBER,
1549 p_GENERATE_DB_ITEMS_FLAG VARCHAR2,
1550 p_HOT_DEFAULT_FLAG VARCHAR2,
1551 p_MANDATORY_FLAG VARCHAR2,
1552 -- p_NAME VARCHAR2,
1553 -- --
1554 p_BASE_NAME VARCHAR2,
1555 -- --
1556 p_UOM VARCHAR2,
1557 p_DEFAULT_VALUE VARCHAR2,
1558 p_LEGISLATION_SUBGROUP VARCHAR2,
1559 p_MAX_VALUE VARCHAR2,
1560 p_MIN_VALUE VARCHAR2,
1561 p_WARNING_OR_ERROR VARCHAR2,
1562 -- Enhancement 2793978
1563 p_value_set_id NUMBER default null
1564 --
1565 ) is
1566 --
1567 cursor csr_lock_input_value is
1568 select *
1569 from pay_input_values_f
1570 where rowid = p_rowid
1571 for update of input_value_id nowait;
1572 --
1573 v_locked_row csr_lock_input_value%rowtype;
1574 -- MLS Row counter
1575 v_mls_count NUMBER:=0;
1576 --
1577 -- *****************************************************************
1578 -- cursor for MLS
1579 --
1580 cursor csr_lock_input_value_tl is
1581 select
1582 NAME,
1583 decode(LANGUAGE, userenv('LANG'), 'Y', 'N') BASELANG
1584 from PAY_INPUT_VALUES_F_TL
1585 where INPUT_VALUE_ID = P_INPUT_VALUE_ID
1586 and userenv('LANG') in (LANGUAGE, SOURCE_LANG)
1587 for update of INPUT_VALUE_ID nowait;
1588 --
1589 -- ****************************************************************
1590 --
1591 begin
1592 hr_utility.set_location ('PAY_INPUT_VALUES_PKG.lock_row',1);
1593 --
1594 open csr_lock_input_value;
1595 fetch csr_lock_input_value into v_locked_row;
1596 if csr_lock_input_value%notfound then
1597 close csr_lock_input_value;
1598 raise no_data_found;
1599 end if;
1600 close csr_lock_input_value;
1601 --
1602 /** sbilling **/
1603 -- removed explicit lock of _TL table,
1604 -- the MLS strategy requires that the base table is locked before update of the
1605 -- _TL table can take place,
1606 -- which implies it is not necessary to lock both tables.
1607 --
1608 -- ************************************************************************
1609 -- code for MLS
1610 --
1611 -- for tlinfo in csr_lock_input_value_tl LOOP
1612 -- v_mls_count := v_mls_count+1;
1613 -- if (tlinfo.BASELANG = 'Y') then
1614 -- if ( (tlinfo.NAME = P_NAME)
1615 -- ) then
1616 -- null;
1617 -- else
1618 -- hr_utility.set_message ('FND','FORM_RECORD_CHANGED');
1619 -- hr_utility.raise_error;
1620 -- end if;
1621 -- end if;
1622 -- end loop;
1623 --
1624 --
1625 -- if (v_mls_count=0) then -- Trap system errors
1626 -- hr_utility.set_message (801,'HR_6153_ALL_PROCEDURE_FAIL');
1627 -- hr_utility.set_message_token ('PROCEDURE','PAY_INPUT_VALUES_PKG.LOCK_TL_ROW');
1628 -- end if;
1629 --
1630 -- ************************************************************************
1631 --
1632 --
1633 if ((V_LOCKED_ROW.INPUT_VALUE_ID = p_INPUT_VALUE_ID) OR (V_LOCKED_ROW.INPUT_VALUE_ID is null and p_INPUT_VALUE_ID is null))
1634 and ((V_LOCKED_ROW.EFFECTIVE_START_DATE = p_EFFECTIVE_START_DATE) OR (V_LOCKED_ROW.EFFECTIVE_START_DATE is null and p_EFFECTIVE_START_DATE is null))
1635 and ((V_LOCKED_ROW.EFFECTIVE_END_DATE = p_EFFECTIVE_END_DATE) OR (V_LOCKED_ROW.EFFECTIVE_END_DATE is null and p_EFFECTIVE_END_DATE is null))
1636 and ((V_LOCKED_ROW.ELEMENT_TYPE_ID = p_ELEMENT_TYPE_ID) OR (V_LOCKED_ROW.ELEMENT_TYPE_ID is null and p_ELEMENT_TYPE_ID is null))
1637 and ((V_LOCKED_ROW.LOOKUP_TYPE = p_LOOKUP_TYPE) OR (V_LOCKED_ROW.LOOKUP_TYPE is null and p_LOOKUP_TYPE is null))
1638 and ((V_LOCKED_ROW.BUSINESS_GROUP_ID = p_BUSINESS_GROUP_ID) OR (V_LOCKED_ROW.BUSINESS_GROUP_ID is null and p_BUSINESS_GROUP_ID is null))
1639 and ((V_LOCKED_ROW.LEGISLATION_CODE = p_LEGISLATION_CODE) OR (V_LOCKED_ROW.LEGISLATION_CODE is null and p_LEGISLATION_CODE is null))
1640 and ((V_LOCKED_ROW.FORMULA_ID = p_FORMULA_ID) OR (V_LOCKED_ROW.FORMULA_ID is null and p_FORMULA_ID is null))
1641 and ((V_LOCKED_ROW.DISPLAY_SEQUENCE = p_DISPLAY_SEQUENCE) OR (V_LOCKED_ROW.DISPLAY_SEQUENCE is null and p_DISPLAY_SEQUENCE is null))
1642 and ((V_LOCKED_ROW.GENERATE_DB_ITEMS_FLAG= p_GENERATE_DB_ITEMS_FLAG) OR (V_LOCKED_ROW.GENERATE_DB_ITEMS_FLAG is null and p_GENERATE_DB_ITEMS_FLAG is null))
1643 and ((V_LOCKED_ROW.HOT_DEFAULT_FLAG = p_HOT_DEFAULT_FLAG) OR (V_LOCKED_ROW.HOT_DEFAULT_FLAG is null and p_HOT_DEFAULT_FLAG is null))
1644 and ((V_LOCKED_ROW.MANDATORY_FLAG = p_MANDATORY_FLAG) OR (V_LOCKED_ROW.MANDATORY_FLAG is null and p_MANDATORY_FLAG is null))
1645 --and ((V_LOCKED_ROW.NAME = p_NAME) OR (V_LOCKED_ROW.NAME is null and p_NAME is null))
1646 -- --
1647 and ((V_LOCKED_ROW.NAME = p_BASE_NAME) OR (V_LOCKED_ROW.NAME is null and p_BASE_NAME is null))
1648 -- --
1649 and ((V_LOCKED_ROW.UOM = p_UOM) OR (V_LOCKED_ROW.UOM is null and p_UOM is null))
1650 and ((V_LOCKED_ROW.DEFAULT_VALUE = p_DEFAULT_VALUE) OR (V_LOCKED_ROW.DEFAULT_VALUE is null and p_DEFAULT_VALUE is null))
1651 and ((V_LOCKED_ROW.LEGISLATION_SUBGROUP = p_LEGISLATION_SUBGROUP) OR (V_LOCKED_ROW.LEGISLATION_SUBGROUP is null and p_LEGISLATION_SUBGROUP is null))
1652 and ((V_LOCKED_ROW.MAX_VALUE = p_MAX_VALUE) OR (V_LOCKED_ROW.MAX_VALUE is null and p_MAX_VALUE is null))
1653 and ((V_LOCKED_ROW.MIN_VALUE = p_MIN_VALUE) OR (V_LOCKED_ROW.MIN_VALUE is null and p_MIN_VALUE is null))
1654 and ((V_LOCKED_ROW.WARNING_OR_ERROR = p_WARNING_OR_ERROR) OR (V_LOCKED_ROW.WARNING_OR_ERROR is null and p_WARNING_OR_ERROR is null)) then
1655 return;
1656 else
1657 hr_utility.set_message ('FND','FORM_RECORD_CHANGED');
1658 hr_utility.raise_error;
1659 end if;
1660 --
1661 end lock_row;
1662 ---------------------------------------------------------------------------
1663 procedure ADD_LANGUAGE
1664 is
1665 begin
1666 delete from PAY_INPUT_VALUES_F_TL T
1667 where not exists
1668 (select NULL
1669 from PAY_INPUT_VALUES_F B
1670 where B.INPUT_VALUE_ID = T.INPUT_VALUE_ID
1671 );
1672
1673 update PAY_INPUT_VALUES_F_TL T set (
1674 NAME
1675 ) = (select
1676 B.NAME
1677 from PAY_INPUT_VALUES_F_TL B
1678 where B.INPUT_VALUE_ID = T.INPUT_VALUE_ID
1679 and B.LANGUAGE = T.SOURCE_LANG)
1680 where (
1681 T.INPUT_VALUE_ID,
1682 T.LANGUAGE
1683 ) in (select
1684 SUBT.INPUT_VALUE_ID,
1685 SUBT.LANGUAGE
1686 from PAY_INPUT_VALUES_F_TL SUBB, PAY_INPUT_VALUES_F_TL SUBT
1687 where SUBB.INPUT_VALUE_ID = SUBT.INPUT_VALUE_ID
1688 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
1689 and (SUBB.NAME <> SUBT.NAME
1690 ));
1691
1692 insert into PAY_INPUT_VALUES_F_TL (
1693 INPUT_VALUE_ID,
1694 NAME,
1695 LAST_UPDATE_DATE,
1696 LAST_UPDATED_BY,
1697 LAST_UPDATE_LOGIN,
1698 CREATED_BY,
1699 CREATION_DATE,
1700 LANGUAGE,
1701 SOURCE_LANG
1702 ) select
1703 B.INPUT_VALUE_ID,
1704 B.NAME,
1705 B.LAST_UPDATE_DATE,
1706 B.LAST_UPDATED_BY,
1707 B.LAST_UPDATE_LOGIN,
1708 B.CREATED_BY,
1709 B.CREATION_DATE,
1710 L.LANGUAGE_CODE,
1711 B.SOURCE_LANG
1712 from PAY_INPUT_VALUES_F_TL B, FND_LANGUAGES L
1713 where L.INSTALLED_FLAG in ('I', 'B')
1714 and B.LANGUAGE = userenv('LANG')
1715 and not exists
1716 (select NULL
1717 from PAY_INPUT_VALUES_F_TL T
1718 where T.INPUT_VALUE_ID = B.INPUT_VALUE_ID
1719 and T.LANGUAGE = L.LANGUAGE_CODE);
1720 end ADD_LANGUAGE;
1721 -----------------------------------------------------------
1722 procedure unique_chk(
1723 X_I_NAME in varchar2,
1724 X_I_LEGISLATION_CODE in varchar2,
1725 X_I_EFFECTIVE_START_DATE in date,
1726 X_I_EFFECTIVE_END_DATE in date,
1727 X_I_E_ELEMENT_NAME in varchar2,
1728 X_I_E_LEGISLATION_CODE in varchar2,
1729 X_I_E_EFFECTIVE_START_DATE in date,
1730 X_I_E_EFFECTIVE_END_DATE in date )
1731 is
1732 result varchar2(255);
1733 Begin
1734 SELECT count(*) INTO result
1735 FROM pay_element_types_f E, pay_input_values_F I
1736 WHERE I.ELEMENT_TYPE_ID = E.ELEMENT_TYPE_ID
1737 and nvl(E.ELEMENT_NAME,'~null~') = nvl(X_I_E_ELEMENT_NAME,'~null~')
1738 and nvl(E.LEGISLATION_CODE,'~null~') = nvl(X_I_E_LEGISLATION_CODE,'~null~')
1739 and E.EFFECTIVE_START_DATE = X_I_E_EFFECTIVE_START_DATE
1740 and E.EFFECTIVE_end_DATE = X_I_E_EFFECTIVE_END_DATE
1741 and X_I_E_EFFECTIVE_START_DATE is not NULL
1742 and X_I_E_EFFECTIVE_END_DATE is not NULL
1743 and E.BUSINESS_GROUP_ID is NULL
1744 and nvl(I.NAME,'~null~') = nvl(X_I_NAME,'~null~')
1745 and nvl(I.LEGISLATION_CODE,'~null~') = nvl(X_I_LEGISLATION_CODE,'~null~')
1746 and I.EFFECTIVE_START_DATE = X_I_EFFECTIVE_START_DATE
1747 and I.EFFECTIVE_end_DATE = X_I_EFFECTIVE_END_DATE
1748 and X_I_EFFECTIVE_START_DATE is not NULL
1749 and X_I_EFFECTIVE_END_DATE is not NULL
1750 and I.BUSINESS_GROUP_ID is NULL;
1751 --
1752 IF (result>1) THEN
1753 hr_utility.set_message(801,'HR_6153_ALL_PROCEDURE_FAIL');
1754 hr_utility.set_message_token('PROCEDURE','PAY_INPUT_VALUES_PKG.UNIQUE_CHK');
1755 hr_utility.set_message_token('STEP','1');
1756 hr_utility.raise_error;
1757 END IF;
1758 EXCEPTION
1759 when NO_DATA_FOUND then
1760 hr_utility.set_message(801,'HR_6153_ALL_PROCEDURE_FAIL');
1761 hr_utility.set_message_token('PROCEDURE','PAY_INPUT_VALUES_PKG.UNIQUE_CHK');
1762 hr_utility.set_message_token('STEP','1');
1763 hr_utility.raise_error;
1764 end unique_chk;
1765 --------------------------------------------------------------------------------
1766 procedure TRANSLATE_ROW (
1767 X_I_NAME in varchar2,
1768 X_I_LEGISLATION_CODE in varchar2,
1769 X_I_EFFECTIVE_START_DATE in date,
1770 X_I_EFFECTIVE_END_DATE in date,
1771 X_I_E_ELEMENT_NAME in varchar2,
1772 X_I_E_LEGISLATION_CODE in varchar2,
1773 X_I_E_EFFECTIVE_START_DATE in date,
1774 X_I_E_EFFECTIVE_END_DATE in date,
1775 X_NAME in varchar2,
1776 X_OWNER in varchar2 ) is
1777 --
1778 -- Fetch the input_value_id. This used to be a sub-query in the update
1779 -- statement.
1780 --
1781 cursor csr_ipv_id is
1782 select i.input_value_id
1783 from pay_element_types_f e
1784 , pay_input_values_f i
1785 WHERE i.element_type_id = e.element_type_id
1786 and nvl(e.element_name,'~null~') = nvl(x_i_e_element_name,'~null~')
1787 and nvl(e.legislation_code,'~null~') = nvl(x_i_e_legislation_code,'~null~')
1788 and e.effective_start_date = x_i_e_effective_start_date
1789 and e.effective_END_date = x_i_e_effective_end_date
1790 and x_i_e_effective_start_date is not null
1791 and x_i_e_effective_end_date is not null
1792 and e.business_group_id is null
1793 and nvl(i.name,'~null~') = nvl(x_i_name,'~null~')
1794 and nvl(i.legislation_code,'~null~') = nvl(x_i_legislation_code,'~null~')
1795 and i.effective_start_date = x_i_effective_start_date
1796 and i.effective_end_date = x_i_effective_end_date
1797 and x_i_effective_start_date is not null
1798 and x_i_effective_end_date is not null
1799 and i.business_group_id is null
1800 ;
1801 --
1802 -- Fetch information for the _TL rows that will be affected by the update.
1803 --
1804 cursor csr_tl_info
1805 (p_input_value_id in number
1806 ,p_language in varchar2
1807 ) is
1808 select name
1809 , language
1810 from pay_input_values_f_tl
1811 where input_value_id = p_input_value_id
1812 and p_language in (language, source_lang)
1813 ;
1814 --
1815 l_input_value_id number;
1816 l_found boolean;
1817 i binary_integer := 1;
1818 l_langs dbms_sql.varchar2s;
1819 l_lang varchar2(100);
1820 begin
1821 --
1822 -- Fetch the input_value_id.
1823 --
1824 open csr_ipv_id;
1825 fetch csr_ipv_id
1826 into l_input_value_id
1827 ;
1828 l_found := csr_ipv_id%found;
1829 close csr_ipv_id;
1830
1831
1832 l_lang := userenv('LANG');
1833
1834 if l_found then
1835 --
1836 -- Check if database item translations are supported.
1837 --
1838 if ff_dbi_utils_pkg.translations_supported
1839 (p_legislation_code => x_i_legislation_code
1840 ) then
1841 for crec in csr_tl_info
1842 (p_input_value_id => l_input_value_id
1843 ,p_language => l_lang
1844 ) loop
1845 if upper(crec.name) <> upper(x_name) then
1846 l_langs(i) := crec.language;
1847 i := i + 1;
1848 end if;
1849 end loop;
1850 end if;
1851
1852 UPDATE pay_input_values_f_tl
1853 SET name = nvl(x_name,name),
1854 last_update_date = sysdate,
1855 last_updated_by = decode(x_owner,'SEED',1,0),
1856 last_update_login = 0,
1857 source_lang = userenv('LANG')
1858 WHERE userenv('LANG') IN (language,source_lang)
1859 AND input_value_id = l_input_value_id
1860 ;
1861
1862 --
1863 -- Write any changes to PAY_DYNDBI_CHANGES.
1864 --
1865 if l_langs.count <> 0 then
1866 pay_dyndbi_changes_pkg.input_value_change
1867 (p_input_value_id => l_input_value_id
1868 ,p_languages => l_langs
1869 );
1870 end if;
1871 end if;
1872 end TRANSLATE_ROW;
1873 --------------------------------------------------------------------------------
1874 procedure init_where_clause (
1875 p_vset_defn in out nocopy fnd_vset.valueset_r
1876 )
1877 is
1878 --
1879 c_prof constant varchar2(20) := ':$PROFILES$.';
1880 --
1881 l_where_clause varchar2(32000);
1882 l_replace_string varchar2(200);
1883 l_src varchar2(100);
1884 l_value varchar2(240);
1885 l_default_value varchar2(240);
1886 l_idx number;
1887 l_ch varchar2(10);
1888 l_prof_len number;
1889 l_prof_found boolean;
1890 --
1891 begin
1892 --
1893 if p_vset_defn.validation_type <> 'F' or
1894 p_vset_defn.table_info.where_clause is null then
1895 --
1896 -- no where clause to initialize
1897 --
1898 return;
1899 --
1900 end if;
1901 --
1902 l_prof_len := length(c_prof);
1903 l_where_clause := p_vset_defn.table_info.where_clause;
1904 --
1905 loop
1906 --
1907 l_src := null;
1908 --
1909 -- find the position of ':$PROFILES$.' in the where clause
1910 --
1911 l_idx := instr(upper(l_where_clause),c_prof);
1912 --
1913 exit when l_idx = 0;
1914 --
1915 -- the where clause contains :$PROFILES$ references, the profile option
1916 -- needs to be resolved
1917 --
1918 l_prof_found := true;
1919 l_replace_string := substr(l_where_clause,l_idx,l_prof_len);
1920 l_idx := l_idx + l_prof_len;
1921 --
1922 -- loop to determine profile option name
1923 --
1924 loop
1925 --
1926 -- build up the profile option name 1 character at a time
1927 --
1928 l_ch := substr(l_where_clause,l_idx,1);
1929 --
1930 -- the profile option name can only contain alphanumeric characters and
1931 -- underscores so exit when l_ch is not one of these
1932 --
1933 exit when l_ch is null or
1934 not (upper(l_ch) between 'A' and 'Z' or l_ch between '0' and '9' or l_ch = '_');
1935 --
1936 l_src := l_src || l_ch;
1937 l_idx := l_idx + 1;
1938 --
1939 end loop;
1940 --
1941 l_default_value := null;
1942 --
1943 if l_ch = ':' then
1944 --
1945 -- a default value has been specified
1946 --
1947 l_idx := l_idx + 1;
1948 --
1949 -- loop to determine default value
1950 --
1951 loop
1952 --
1953 -- build up the default value 1 character at a time
1954 --
1955 l_ch := substr(l_where_clause,l_idx,1);
1956 --
1957 -- the default value can only contain alphanumeric characters and
1958 -- underscores so exit when l_ch is not one of these
1959 --
1960 exit when l_ch is null or
1961 not (upper(l_ch) between 'A' and 'Z' or l_ch between '0' and '9' or l_ch = '_');
1962 l_default_value := l_default_value || l_ch;
1963 l_idx := l_idx + 1;
1964 --
1965 end loop;
1966 --
1967 end if;
1968 --
1969 -- l_src now contains the profile option name, so append this to
1970 -- l_replace_string
1971 --
1972 l_replace_string := l_replace_string || l_src;
1973 --
1974 if l_default_value is not null then
1975 --
1976 -- l_default_value is not null so this also needs to be appended to
1977 -- l_replace_string
1978 --
1979 l_replace_string := l_replace_string ||':'||l_default_value;
1980 --
1981 end if;
1982 --
1983 -- now resolve the profile option value
1984 --
1985 l_value := null;
1986 fnd_profile.get(upper(l_src),l_value);
1987 --
1988 if l_value is null then
1989 --
1990 -- use the default value, or 'NULL' if the default is null
1991 --
1992 l_value := nvl(l_default_value,'NULL');
1993 --
1994 end if;
1995 --
1996 -- replace all occurrences of l_replace_string in l_where_clause with
1997 -- l_value (in single quotes)
1998 --
1999 l_where_clause := replace(l_where_clause,l_replace_string,''''||l_value||'''');
2000 --
2001 end loop;
2002 --
2003 -- all :$PROFILES$ references have been resolved, replace the where clause in
2004 -- p_vset_defn
2005 --
2006 if l_prof_found then
2007 --
2008 p_vset_defn.table_info.where_clause := l_where_clause;
2009 --
2010 end if;
2011 --
2012 end init_where_clause;
2013 --------------------------------------------------------------------------------
2014 -- Enhancement 2793978
2015 function decode_vset_value (
2016 p_value_set_id in number
2017 , p_value_set_value in varchar2
2018 )
2019 return varchar2 is
2020 --
2021 -- Returns the corresponding meaning from a value set for a given value.
2022 -- Returns meaning if hasmeaning() is true, returns value otherwise.
2023 --
2024 l_value_set_meaning varchar2(240);
2025 l_vset_defn fnd_vset.valueset_r;
2026 l_vset_fmt fnd_vset.valueset_dr;
2027 l_vset_value fnd_vset.value_dr;
2028 l_vset_row_count number;
2029 l_vset_value_found boolean;
2030 l_match_found boolean;
2031 --
2032 begin
2033 --
2034 fnd_vset.get_valueset(p_value_set_id,l_vset_defn,l_vset_fmt);
2035 init_where_clause(l_vset_defn);
2036 fnd_vset.get_value_init(l_vset_defn, true);
2037 fnd_vset.get_value(l_vset_defn,l_vset_row_count,l_vset_value_found,l_vset_value);
2038 --
2039 while l_vset_value_found loop
2040 --
2041 if l_vset_fmt.has_id and l_vset_value.id = p_value_set_value then
2042 l_match_found := true;
2043 elsif l_vset_value.value = p_value_set_value then
2044 l_match_found := true;
2045 else
2046 l_match_found := false;
2047 end if;
2048 --
2049 if l_match_found and l_vset_fmt.has_meaning then
2050 l_value_set_meaning := l_vset_value.meaning;
2051 exit;
2052 elsif l_match_found then
2053 l_value_set_meaning := l_vset_value.value;
2054 exit;
2055 end if;
2056 --
2057 fnd_vset.get_value(l_vset_defn,l_vset_row_count,l_vset_value_found,l_vset_value);
2058 --
2059 end loop;
2060 --
2061 fnd_vset.get_value_end(l_vset_defn);
2062 if l_match_found then
2063 return l_value_set_meaning;
2064 else
2065 return null;
2066 end if;
2067 --
2068 exception
2069 --
2070 when others then
2071 return null;
2072 --
2073 end decode_vset_value;
2074 --------------------------------------------------------------------------------
2075 -- Enhancement 2793978
2076 function decode_vset_meaning (
2077 p_value_set_id in number
2078 , p_value_set_meaning in varchar2
2079 )
2080 return varchar2 is
2081 --
2082 -- Returns the corresponding value from a value set for a given meaning.
2083 -- Returns id if hasid() is true, returns value otherwise.
2084 --
2085 l_value_set_value varchar2(150);
2086 l_vset_defn fnd_vset.valueset_r;
2087 l_vset_fmt fnd_vset.valueset_dr;
2088 l_vset_value fnd_vset.value_dr;
2089 l_vset_row_count number;
2090 l_vset_value_found boolean;
2091 l_match_found boolean;
2092 --
2093 begin
2094 --
2095 fnd_vset.get_valueset(p_value_set_id,l_vset_defn,l_vset_fmt);
2096 init_where_clause(l_vset_defn);
2097 fnd_vset.get_value_init(l_vset_defn, true);
2098 fnd_vset.get_value(l_vset_defn,l_vset_row_count,l_vset_value_found,l_vset_value);
2099 --
2100 while l_vset_value_found loop
2101 --
2102 if l_vset_fmt.has_meaning and l_vset_value.meaning = p_value_set_meaning then
2103 l_match_found := true;
2104 elsif l_vset_value.value = p_value_set_meaning then
2105 l_match_found := true;
2106 else
2107 l_match_found := false;
2108 end if;
2109 --
2110 if l_match_found and l_vset_fmt.has_id then
2111 l_value_set_value := l_vset_value.id;
2112 exit;
2113 elsif l_match_found then
2114 l_value_set_value := l_vset_value.value;
2115 exit;
2116 end if;
2117 --
2118 fnd_vset.get_value(l_vset_defn,l_vset_row_count,l_vset_value_found,l_vset_value);
2119 --
2120 end loop;
2121 --
2122 fnd_vset.get_value_end(l_vset_defn);
2123 if l_match_found and length(l_value_set_value) <= 60 then
2124 return l_value_set_value;
2125 else
2126 return null;
2127 end if;
2128 --
2129 exception
2130 --
2131 when others then
2132 return null;
2133 --
2134 end decode_vset_meaning;
2135 --------------------------------------------------------------------------------
2136 begin
2137 --
2138 c_user_id := fnd_global.user_id;
2139 c_login_id := fnd_global.login_id;
2140 --
2141 end PAY_INPUT_VALUES_PKG;