DBA Data[Home] [Help]

PACKAGE BODY: APPS.GHR_ELEMENT_API

Source


1 PACKAGE BODY ghr_element_api AS
2 /* $Header: ghelepkg.pkb 120.11 2011/07/21 10:58:24 utokachi ship $ */
3 --
4 -- ---------------------------------------------------------------------------
5 -- |----------------------< retrieve_element_info >--------------------------|
6 -- ---------------------------------------------------------------------------
7 -- {Start of Comments}
8 --
9 -- Description:
10 --   Retrieve element info
11 --
12 -- Prerequisites:
13 --
14 -- In Parameters:
15 --   p_element_name
16 --   p_input_value_name
17 --   p_assignment_id
18 --   p_effective_date
19 --   p_processing_type
20 --
21 -- Out Parameters:
22 --   p_element_link_id
23 --   p_input_value_id
24 --   p_element_entry_id
25 --   p_value
26 --   p_object_version_number
27 --   p_multiple_error_flag
28 --
29 -- Post Success:
30 --   Processing nulls.
31 --
32 -- Post Failure:
33 --   An application error will be raised and processing is terminated.
34 --
35 -- Developer Implementation Notes:
36 --   None.
37 --
38 -- Access Status:
39 --   Internal Use Only.
40 --
41 -- {End of Comments}
42 -- ---------------------------------------------------------------------------
43 --
44 -- Procedure modified for Payroll Integration
45 --
46 --   PROCESS_SF52_ELEMENT passes old element name to this proc and this uses
47 --   return_new_element_name to pick new element.
48 --   The FETCH_ELEMENT_INFO_COR (history package) is being sent p_element_name
49 --   (old_element_name) as it has calls to return_new_element_name already.
50 --
51 procedure retrieve_element_info
52 	(p_element_name      in     pay_element_types_f.element_name%type
53 	,p_input_value_name  in     pay_input_values_f.name%type
54 	,p_assignment_id     in     pay_element_entries_f.assignment_id%type
55 	,p_effective_date    in     date
56 	,p_processing_type   in     pay_element_types_f.processing_type%type
57 	,p_element_link_id      out nocopy pay_element_links_f.element_link_id%type
58 	,p_input_value_id       out nocopy pay_input_values_f.input_value_id%type
59 	,p_element_entry_id     out nocopy pay_element_entries_f.element_entry_id%type
60 	,p_value                out nocopy pay_element_entry_values_f.screen_entry_value%type
61 	,p_object_version_number
62 			 out nocopy pay_element_entries_f.object_version_number%type
63 	,p_multiple_error_flag  out nocopy varchar2
64 	) is
65   --
66   l_proc                  varchar2(72) := g_package||'retrieve_element_info';
67   l_session               ghr_history_api.g_session_var_type;
68   l_element_entry_id      pay_element_entries_f.element_entry_id%type;
69 
70   --
71 
72 
73   cursor c_rec_ele_info (ele_name       in varchar2
74 			,input_name     in varchar2
75 			,asg_id         in number
76 			,eff_date       in date
77 			,bg_id          in number) is
78 	select elt.multiple_entries_allowed_flag,
79              ipv.input_value_id,
80              ipv.uom,
81 	       eli.element_link_id,
82               ele.element_entry_id,
83 	       eev.screen_entry_value screen_entry_value,
84 	       ele.object_version_number
85 	  from pay_element_types_f elt,
86 	       pay_input_values_f ipv,
87 	       pay_element_links_f eli,
88 	       pay_element_entries_f ele,
89 	       pay_element_entry_values_f eev
90 	 where trunc(eff_date) between elt.effective_start_date
91 				   and elt.effective_end_date
92 	   and trunc(eff_date) between ipv.effective_start_date
93 				   and ipv.effective_end_date
94 	   and trunc(eff_date) between eli.effective_start_date
95 				   and eli.effective_end_date
96 	   and trunc(eff_date) between ele.effective_start_date
97 				   and ele.effective_end_date
98 	   and trunc(eff_date) between eev.effective_start_date
99 				   and eev.effective_end_date
100 	   and elt.element_type_id = ipv.element_type_id
101 	   and elt.element_type_id = eli.element_type_id + 0
102 	   and upper(elt.element_name) = upper(ele_name)
103 	   and ipv.input_value_id = eev.input_value_id
104 	   and ele.assignment_id = asg_id
105 	   and ele.element_entry_id + 0 = eev.element_entry_id
106            and ele.element_link_id      = eli.element_link_id
107 	   and upper(ipv.name) = upper(input_name)
108 --	   and NVL(elt.business_group_id,0) = NVL(ipv.business_group_id,0)
109            and (elt.business_group_id is null or elt.business_group_id = bg_id);
110   --
111   cursor c_nonrec_ele_info (ele_name    in varchar2
112 			   ,input_name  in varchar2
113 			   ,asg_id      in number
114 			   ,eff_date    in date
115 			   ,bg_id       in number) is
116 	select elt.multiple_entries_allowed_flag,
117              ipv.input_value_id,
118              ipv.uom,
119 	       eli.element_link_id,
120 	       ele.element_entry_id,
121 	       eev.screen_entry_value screen_entry_value,
122 	       ele.object_version_number
123 	  from pay_element_types_f elt,
124 	       pay_input_values_f ipv,
125 	       pay_element_links_f eli,
126 	       pay_element_entries_f ele,
127 	       pay_element_entry_values_f eev
128 	 where trunc(eff_date) between elt.effective_start_date
129 				   and elt.effective_end_date
130 	   and trunc(eff_date) between ipv.effective_start_date
131 				   and ipv.effective_end_date
132 	   and trunc(eff_date) between eli.effective_start_date
133 				   and eli.effective_end_date
134 	   and ele.effective_end_date =
135 			(select max(ele2.effective_end_date)
136 			   from pay_element_entries_f ele2
137 			  where ele2.element_entry_id = ele.element_entry_id)
138 	   and eev.effective_end_date =
139 			(select max(eev2.effective_end_date)
140 			   from pay_element_entries_f eev2
141 			  where eev2.element_entry_id = eev.element_entry_id)
142 	   and elt.element_type_id = ipv.element_type_id
143 	    --and elt.element_type_id = eli.element_type_id + 0 --commented for bug 5203513
144             and elt.element_type_id = eli.element_type_id
145          and upper(elt.element_name) = upper(ele_name)
146 	   and ipv.input_value_id = eev.input_value_id
147 	   and ele.assignment_id = asg_id
148 	  -- and ele.element_entry_id + 0 = eev.element_entry_id  --commented for bug 5203513
149            and ele.element_entry_id = eev.element_entry_id
150          and ele.element_link_id      = eli.element_link_id
151 	 and upper(ipv.name) = upper(input_name)
152 --	 and NVL(elt.business_group_id,0) = NVL(ipv.business_group_id,0)
153          and (elt.business_group_id is null or elt.business_group_id = bg_id);
154 
155 -- Bug#4486823 RRR Changes
156 cursor c_nonrec_incntv_ele_info (ele_name    in varchar2
157 			   ,input_name  in varchar2
158 			   ,asg_id      in number
159 			   ,eff_date    in date
160 			   ,bg_id       in number) is
161 	select elt.multiple_entries_allowed_flag,
162              ipv.input_value_id,
163              ipv.uom,
164 	       eli.element_link_id,
165 	       ele.element_entry_id,
166 	       eev.screen_entry_value screen_entry_value,
167 	       ele.object_version_number
168 	  from pay_element_types_f elt,
169 	       pay_input_values_f ipv,
170 	       pay_element_links_f eli,
171 	       pay_element_entries_f ele,
172 	       pay_element_entry_values_f eev
173 	 where trunc(eff_date) between elt.effective_start_date
174 				   and elt.effective_end_date
175 	   and trunc(eff_date) between ipv.effective_start_date
176 				   and ipv.effective_end_date
177 	   and trunc(eff_date) between eli.effective_start_date
178 				   and eli.effective_end_date
179        and trunc(eff_date) between ele.effective_start_date
180 				   and ele.effective_end_date
181        and trunc(eff_date) between eev.effective_start_date
182 				   and eev.effective_end_date
183 	   and elt.element_type_id = ipv.element_type_id
184 	   and elt.element_type_id = eli.element_type_id + 0
185          and upper(elt.element_name) = upper(ele_name)
186 	   and ipv.input_value_id = eev.input_value_id
187 	   and ele.assignment_id = asg_id
188 	   and ele.element_entry_id + 0 = eev.element_entry_id
189          and ele.element_link_id      = eli.element_link_id
190 	 and upper(ipv.name) = upper(input_name)
191 --	 and NVL(elt.business_group_id,0) = NVL(ipv.business_group_id,0)
192          and (elt.business_group_id is null or elt.business_group_id = bg_id);
193 
194    cursor    c_ele_ovn is
195      select  object_version_number
196      from    pay_element_entries_f
197      where   element_entry_id = l_element_entry_id
198      and     p_effective_date
199      between effective_start_date and effective_end_date;
200 
201 l_uom                  varchar2(4);
202  Cursor Cur_bg(p_assignment_id NUMBER,p_eff_date DATE) is
203        Select distinct business_group_id bg
204        from per_assignments_f
205        where assignment_id = p_assignment_id
206        and   p_eff_date between effective_start_date
207              and effective_end_date;
208 --
209 -- to pick pay basis from PAR
210  Cursor Cur_pay_basis is
211        Select from_pay_basis,to_pay_basis
212        From ghr_pa_requests
213        Where pa_request_id=l_session.pa_request_id;
214 --       Where employee_assignment_id=p_assignment_id;
215 --       and effective_date=p_eff_date;
216 ll_bg_id           NUMBER;
217 ll_pay_basis       VARCHAR2(80);
218 ll_effective_Date  DATE;
219 l_new_element_name             VARCHAR2(80);
220 --
221 begin
222   hr_utility.set_location('Entering:'||l_proc, 1);
223    -- Initialization
224    ghr_history_api.get_g_session_var(l_session);
225    ll_effective_date := p_effective_date;
226 
227   -- Pick the business group id and also pay basis for later use
228   For BG_rec in Cur_BG(p_assignment_id,p_effective_date)
229   Loop
230    ll_bg_id:=BG_rec.bg;
231   End Loop;
232 
233 --   Pick pay basis from PAR
234 IF (l_session.pa_request_id is NOT NULL) THEN
235   For Pay_basis in Cur_Pay_basis
236   Loop
237          If (pay_basis.from_pay_basis is NULL and
238                pay_basis.to_pay_basis is not NULL) then
239            ll_pay_basis:=pay_basis.to_pay_basis;
240 
241          elsif (pay_basis.from_pay_basis is NOT NULL and
242              pay_basis.to_pay_basis is NULL) then
243            ll_pay_basis:=pay_basis.from_pay_basis;
244 
245          elsif (pay_basis.from_pay_basis is NOT NULL and
246               pay_basis.to_pay_basis is NOT NULL) then
247            ll_pay_basis:=pay_basis.to_pay_basis;
248 
249 	 elsif (pay_basis.from_pay_basis is  NULL and
250               pay_basis.to_pay_basis is NULL) then
251          ll_pay_basis:='PA';
252 
253 	 End If;
254   End Loop;
255 
256   l_new_element_name := pqp_fedhr_uspay_int_utils.return_new_element_name(
257                                           p_fedhr_element_name => p_element_name,
258                                            p_business_group_id  => ll_bg_id,
259 	                                   p_effective_date     => ll_effective_date,
260 	                                   p_pay_basis          => ll_pay_basis);
261 
262  ELSIF (l_session.pa_request_id is NULL) THEN
263 
264   IF (p_element_name = 'Basic Salary Rate'
265     and (fnd_profile.value('HR_USER_TYPE')='INT')) THEN
266            l_new_element_name :=
267 	           pqp_fedhr_uspay_int_utils.return_new_element_name(
268                                            p_assignment_id      => p_assignment_id,
269                                            p_business_group_id  => ll_bg_id,
270 	                                   p_effective_date     => ll_effective_date);
271  ELSIF (fnd_profile.value('HR_USER_TYPE')<>'INT'
272    or (p_element_name <> 'Basic Salary Rate' and (fnd_profile.value('HR_USER_TYPE')='INT'))) THEN
273            l_new_element_name :=
274                             pqp_fedhr_uspay_int_utils.return_new_element_name(
275                                           p_fedhr_element_name => p_element_name,
276                                            p_business_group_id  => ll_bg_id,
277 	                                   p_effective_date     => ll_effective_date,
278 	                                   p_pay_basis          => NULL);
279 
280   END IF;
281  END IF;
282 
283 hr_utility.set_location(' New ELT in GHELEPKG'|| l_new_element_name,10);
284 --
285 -- the p_element_name is replaced with l_new_element_name
286 -- in further calls.
287 --
288 
289   -- If it is a correction action, then we have to read the
290   -- element values from the history table to get the correct data
291   -- This is definitely required for a non-recurring element,because
292   -- the same element can repeat n number of times for the same pay period
293   --
294  If l_session.noa_id_correct is not null then
295 -- History package call fetch_element_entry_value picks new element name
296 -- again in its call so sending old element name.
297    ghr_history_fetch.fetch_element_info_cor
298    (p_element_name      		=>  p_element_name,
299     p_input_value_name              =>  p_input_value_name,
300     p_assignment_id     		=>  p_assignment_id,
301     p_effective_date    		=>  p_effective_date,
302     p_element_link_id      	      =>  p_element_link_id,
303     p_input_value_id       	      =>  p_input_value_id,
304     p_element_entry_id     	      =>  l_element_entry_id,
305     p_value                	      =>  p_value,
306     p_object_version_number         =>  p_object_version_number
307    );
308     p_element_entry_id  :=  l_element_entry_id;
309 
310   hr_utility.set_location('Find the uom ' ||l_proc, 2);
311   if p_processing_type = 'R' then  -- Recurring element
312     hr_utility.set_location('Find the uom -- Recurring' ||l_proc, 3);
313     for c_rec_ele_info_rec in
314 		  c_rec_ele_info (l_new_element_name
315 				 ,p_input_value_name
316 				 ,p_assignment_id
317 				 ,p_effective_date
318 				 ,ll_bg_id) loop
319       l_uom                     := c_rec_ele_info_rec.uom;
320       if l_uom = 'D' then
321          p_value := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(p_value));
322       end if;
323      exit;
324     end loop;
325   elsif p_processing_type = 'N' then  -- Recurring element
326     hr_utility.set_location('Find the uom -- Non Recurring' ||l_proc, 4);
327     for c_nonrec_ele_info_rec in
328 		  c_nonrec_ele_info (l_new_element_name
329 				    ,p_input_value_name
330 				    ,p_assignment_id
331 				    ,p_effective_date
332 				    ,ll_bg_id)
333     loop
334       l_uom                     := c_nonrec_ele_info_rec.uom;
335       if l_uom = 'D' then
336          p_value := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(p_value));
337       end if;
338      exit;
339     end loop;
340   end if;
341 
342 Else
343   hr_utility.set_location(' NOT CORRECTION IN ELEPKG; PROCESS TYPE '||p_processing_type,15);
344   hr_utility.set_location(' Element Name ELEPKG ' ||l_new_element_name,1000);
345   hr_utility.set_location(' BG ID ELEPKG'|| nvl(to_char(ll_bg_id),'NULL'),2000);
346   hr_utility.set_location(' Eff date ELEPKG'|| p_effective_date ,3000);
347   hr_utility.set_location(' ASSGID IN ELEPKG ' || to_char(p_assignment_id),3500);
348   hr_utility.set_location(' INPUT VALUE name '|| p_input_value_name,4000);
349 
350   if p_processing_type = 'R' then  -- Recurring element
351     p_input_value_id        := NULL;
352     p_element_entry_id      := NULL;
353     p_value                 := NULL;
354     p_object_version_number := NULL;
355     for c_rec_ele_info_rec in
356 		  c_rec_ele_info (l_new_element_name
357 				 ,p_input_value_name
358 				 ,p_assignment_id
359 				 ,p_effective_date
360 				 ,ll_bg_id)
361     loop
362      hr_utility.set_location(' INSIDE ELE RECURRING ',20);
363       p_input_value_id          := c_rec_ele_info_rec.input_value_id;
364       l_uom                     := c_rec_ele_info_rec.uom;
365       p_element_link_id         := c_rec_ele_info_rec.element_link_id;
366       p_element_entry_id        := c_rec_ele_info_rec.element_entry_id;
367       p_value                   := c_rec_ele_info_rec.screen_entry_value;
368       p_object_version_number   := c_rec_ele_info_rec.object_version_number;
369       p_multiple_error_flag     := c_rec_ele_info_rec.multiple_entries_allowed_flag;
370       if l_uom = 'D' then
371          p_value := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(p_value));
372       end if;
373       exit;
374     end loop;
375   elsif p_processing_type = 'N' then  -- Nonrecurring element
376     p_input_value_id            := NULL;
377     p_element_entry_id          := NULL;
378     p_value                     := NULL;
379     p_object_version_number     := NULL;
380     hr_utility.set_location('Element Name : '||l_new_element_name,0);
381     IF l_new_element_name like '%Incentive%' AND
382        l_new_element_name not like 'Separation Incentive%' THEN
383        hr_utility.set_location('Inside Incentive Element',10);
384         for c_nonrec_incntv_ele_info_rec in
385 		  c_nonrec_incntv_ele_info (l_new_element_name
386 				    ,p_input_value_name
387 				    ,p_assignment_id
388 				    ,p_effective_date
389 				    ,ll_bg_id)
390         loop
391           p_input_value_id          := c_nonrec_incntv_ele_info_rec.input_value_id;
392           l_uom                     := c_nonrec_incntv_ele_info_rec.uom;
393           p_element_link_id         := c_nonrec_incntv_ele_info_rec.element_link_id;
394           p_element_entry_id        := c_nonrec_incntv_ele_info_rec.element_entry_id;
395           p_value                   := c_nonrec_incntv_ele_info_rec.screen_entry_value;
396           p_object_version_number   := c_nonrec_incntv_ele_info_rec.object_version_number;
397           p_multiple_error_flag     := c_nonrec_incntv_ele_info_rec.multiple_entries_allowed_flag;
398           if l_uom = 'D' then
399              p_value := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(p_value));
400           end if;
401           hr_utility.set_location('Inside Incentive Element, Value:'||p_Value,10);
402           exit;
403         end loop;
404     ELSE
405         for c_nonrec_ele_info_rec in
406               c_nonrec_ele_info (l_new_element_name
407                         ,p_input_value_name
408                         ,p_assignment_id
409                         ,p_effective_date
410                         ,ll_bg_id)
411         loop
412           p_input_value_id          := c_nonrec_ele_info_rec.input_value_id;
413           l_uom                     := c_nonrec_ele_info_rec.uom;
414           p_element_link_id         := c_nonrec_ele_info_rec.element_link_id;
415           p_element_entry_id        := c_nonrec_ele_info_rec.element_entry_id;
416           p_value                   := c_nonrec_ele_info_rec.screen_entry_value;
417           p_object_version_number   := c_nonrec_ele_info_rec.object_version_number;
418           p_multiple_error_flag     := c_nonrec_ele_info_rec.multiple_entries_allowed_flag;
419           if l_uom = 'D' then
420              p_value := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(p_value));
421           end if;
422           exit;
423         end loop;
424     END IF;
425   else  -- Neither recurring nor nonrecurring element
426     hr_utility.set_message (8301, 'GHR_38035_API_INV_PROC_TYPE');
427     hr_utility.raise_error;
428   end if;
429   hr_utility.set_location(l_proc, 31);
430  End if;
431   --
432   hr_utility.set_location(' Multiple Error Flag '||p_multiple_error_flag,3);
433   hr_utility.set_location(' Leaving:'||l_proc, 4);
434 --
435  exception when others then
436       --
437       -- Reset IN OUT parameters and set OUT parameters
438       --
439            p_element_link_id        := NULL;
440            p_input_value_id         := NULL;
441            p_element_entry_id       := NULL;
442            p_value                  := NULL;
443            p_object_version_number  := NULL;
444            p_multiple_error_flag    := NULL;
445            raise;
446 end retrieve_element_info;
447 --
448 --
449 Function return_update_mode
450   (p_id              in     pay_element_entries_f.element_entry_id%type,
451    p_effective_date  in     date
452    ) return varchar2 is
453 
454   l_proc     varchar2(72) := 'return_update_mode';
455   l_eed      date;
456   l_esd      date;
457   l_mode     varchar2(20);
458   l_exists  boolean := FALSE;
459 
460 
461   cursor c_update_mode_e is
462     select   ele.effective_start_date ,
463              ele.effective_end_date
464     from     pay_element_entries_f ele
465     where    ele.element_entry_id = p_id
466     and      p_effective_date
467     between  ele.effective_start_date
468     and      ele.effective_end_date;
469 
470    cursor     c_update_mode_e1 is
471     select   ele.effective_start_date ,
472              ele.effective_end_date
473     from     pay_element_entries_f ele
474     where    ele.element_entry_id = p_id
475     and      p_effective_date  <  ele.effective_start_date
476     order by 1 asc;
477 
478   Begin
479 
480     hr_utility.set_location('Entering  ' || l_proc,5);
481 -- get session variables
482 
483       for update_mode in c_update_mode_e loop
484         hr_utility.set_location(l_proc,15);
485         l_esd := update_mode.effective_start_date;
486         l_eed := update_mode.effective_end_date;
487       end loop;
488       hr_utility.set_location(l_proc,20);
489       If l_esd = p_effective_date then
490          hr_utility.set_location(l_proc,25);
491          l_mode := 'CORRECTION';
492       Elsif l_esd < p_effective_date and
493             to_char(l_eed,'YYYY/MM/DD') = '4712/12/31' then
494          hr_utility.set_location(l_proc,30);
495          l_mode := 'UPDATE';
496       Elsif  l_esd <  p_effective_date  then
497         hr_utility.set_location(l_proc,35);
498         for update_mode1 in c_update_mode_e1 loop
499           hr_utility.set_location(l_proc,40);
500           l_exists := true;
501           exit;
502         end loop;
503         If l_exists then
504           hr_utility.set_location(l_proc,45);
505           l_mode := 'UPDATE_CHANGE_INSERT';
506         Else
507           IF  to_char(l_eed,'YYYY/MM/DD') <> '4712/12/31' then
508           -- This context comes when the separated employee has retro actions
509           -- Separation action end dates the elements to the Separation effective date
510             hr_utility.set_location(l_proc,48);
511             l_mode := 'UPDATE';
512           ELSE
513             hr_utility.set_location(l_proc,50);
514             l_mode := 'CORRECTION';
515           END IF;
516         End if;
517         hr_utility.set_location(l_proc,55);
518       End if;
519       If l_mode is null then
520        hr_utility.set_message(8301,'GHR_GET_DATE_TRACK_FAILED');
521        hr_utility.set_message_token('TABLE_NAME','pay_element_entries_f');
522        hr_utility.raise_error;
523       End if;
524       return l_mode;
525    end return_update_mode;
526 
527 -- ---------------------------------------------------------------------------
528 -- |-----------------------< get_input_value_id >----------------------------|
529 -- ---------------------------------------------------------------------------
530 -- {Start of Comments}
531 --
532 -- Description:
533 --   Return inpu value id
534 --
535 -- Prerequisites:
536 --
537 -- In Parameters:
538 --   p_element_name
539 --   p_input_value_name
540 --   p_effective_date
541 --
542 -- Out Parameters:
543 --   p_input_value_id
544 --
545 -- Post Success:
546 --   Processing nulls.
547 --
548 -- Post Failure:
549 --   An application error will be raised and processing is terminated.
550 --
551 -- Developer Implementation Notes:
552 --   None.
553 --
554 -- Access Status:
555 --   Internal Use Only.
556 --
557 -- {End of Comments}
558 -- ---------------------------------------------------------------------------
559 function get_input_value_id
560 	(p_element_name         in     pay_element_types_f.element_name%type
561 	,p_input_value_name     in     pay_input_values_f.name%type
562 	,p_effective_date       in     date
563 	) return pay_input_values_f.input_value_id%type is
564   --
565   l_input_value_id      pay_input_values_f.input_value_id%type;
566   --
567   cursor c_input_value (ele_name       in varchar2
568 		       ,input_name     in varchar2
569 		       ,eff_date       in date
570 		       ,bg_id          in NUMBER) is
571 	select ipv.input_value_id
572 	  from pay_element_types_f elt,
573 	       pay_input_values_f ipv
574 	 where trunc(eff_date) between elt.effective_start_date
575 				   and elt.effective_end_date
576 	   and trunc(eff_date) between ipv.effective_start_date
577 				   and ipv.effective_end_date
578 	   and elt.element_type_id = ipv.element_type_id
579 	   and upper(elt.element_name) = upper(ele_name)
580 	   and upper(ipv.name) = upper(input_name)
581 --	   and NVL(elt.business_group_id,0) = NVL(ipv.business_group_id,0)   --Ashley
582 	   and (elt.business_group_id is null or elt.business_group_id = bg_id);
583 
584 ll_bg_id         NUMBER;
585 --
586 begin
587 --
588 
589 -- get the business_group_id from profile
590 --
591    fnd_profile.get('PER_BUSINESS_GROUP_ID',ll_bg_id);
592    hr_utility.trace('Business Grp Id - Under get Inp val Id'||ll_bg_id);
593 --
594   l_input_value_id      := NULL;
595   for c_input_value_rec
596       in c_input_value (p_element_name, p_input_value_name, p_effective_date,ll_bg_id)
597    loop
598     l_input_value_id    := c_input_value_rec.input_value_id;
599     exit;
600   end loop;
601   return l_input_value_id;
602   --
603 end get_input_value_id;
604 --
605 -- ---------------------------------------------------------------------------
606 -- |-----------------------< process_sf52_element >--------------------------|
607 -- ---------------------------------------------------------------------------
608 -- {Start of Comments}
609 --
610 -- Description:
611 --   Process SF52 element
612 --
613 -- Prerequisites:
614 --
615 -- In Parameters:
616 --   p_assignment_id
617 --   p_element_name
618 --   p_input_value_name1
619 --     The default is null.
620 --   p_value1
621 --     The default is null.
622 --   p_input_value_name2
623 --     The default is null.
624 --   p_value2
625 --     The default is null.
626 --   p_input_value_name3
627 --     The default is null.
628 --   p_value3
629 --     The default is null.
630 --   p_input_value_name4
631 --     The default is null.
632 --   p_value4
633 --     The default is null.
634 --   p_input_value_name5
635 --     The default is null.
636 --   p_value5
637 --     The default is null.
638 --   p_input_value_name6
639 --     The default is null.
640 --   p_value6
641 --     The default is null.
642 --   p_input_value_name7
643 --     The default is null.
644 --   p_value7
645 --     The default is null.
646 --   p_input_value_name8
647 --     The default is null.
648 --   p_value8
649 --     The default is null.
650 --   p_input_value_name9
651 --     The default is null.
652 --   p_value9
653 --     The default is null.
654 --   p_input_value_name10
655 --     The default is null.
656 --   p_value10
657 --     The default is null.
658 --   p_input_value_name11
659 --     The default is null.
660 --   p_value11
661 --     The default is null.
662 --   p_input_value_name12
663 --     The default is null.
664 --   p_value12
665 --     The default is null.
666 --   p_input_value_name13
667 --     The default is null.
668 --   p_value13
669 --     The default is null.
670 --   p_input_value_name14
671 --     The default is null.
672 --   p_value14
673 --     The default is null.
674 --   p_input_value_name15
675 --     The default is null.
676 --   p_value15
677 --     The default is null.
678 --   p_effective_date
679 --     The default is sysdate.
680 --
681 -- Out Parameters:
682 --   p_process_warning
683 --
684 -- Post Success:
685 --   Processing continues.
686 --
687 -- Post Failure:
688 --   An application error will be raised and processing is terminated.
689 --
690 -- Developer Implementation Notes:
691 --   None.
692 --
693 -- Access Status:
694 --   All.
695 --
696 -- {End of Comments}
697 -- ---------------------------------------------------------------------------
698 --
699 procedure process_sf52_element
700 	(p_assignment_id        in     per_assignments_f.assignment_id%type
701 	,p_element_name         in     pay_element_types_f.element_name%type
702 	,p_input_value_name1    in     pay_input_values_f.name%type
703 							default null
704 	,p_value1               in     pay_element_entry_values_f.screen_entry_value%type
705 							default null
706 	,p_input_value_name2    in     pay_input_values_f.name%type
707 							default null
708 	,p_value2               in     pay_element_entry_values_f.screen_entry_value%type
709 							default null
710 	,p_input_value_name3    in     pay_input_values_f.name%type
711 							default null
712 	,p_value3               in     pay_element_entry_values_f.screen_entry_value%type
713 							default null
714 	,p_input_value_name4    in     pay_input_values_f.name%type
715 							default null
716 	,p_value4               in     pay_element_entry_values_f.screen_entry_value%type
717 							default null
718 	,p_input_value_name5    in     pay_input_values_f.name%type
719 							default null
720 	,p_value5               in     pay_element_entry_values_f.screen_entry_value%type
721 							default null
722 	,p_input_value_name6    in     pay_input_values_f.name%type
723 							default null
724 	,p_value6               in     pay_element_entry_values_f.screen_entry_value%type
725 							default null
726 	,p_input_value_name7    in     pay_input_values_f.name%type
727 							default null
728 	,p_value7               in     pay_element_entry_values_f.screen_entry_value%type
729 							default null
730 	,p_input_value_name8    in     pay_input_values_f.name%type
731 							default null
732 	,p_value8               in     pay_element_entry_values_f.screen_entry_value%type
733 							default null
734 	,p_input_value_name9    in     pay_input_values_f.name%type
735 							default null
736 	,p_value9               in     pay_element_entry_values_f.screen_entry_value%type
737 							default null
738 	,p_input_value_name10   in     pay_input_values_f.name%type
739 							default null
740 	,p_value10              in     pay_element_entry_values_f.screen_entry_value%type
741 							default null
742 	,p_input_value_name11   in     pay_input_values_f.name%type
743 							default null
744 	,p_value11              in     pay_element_entry_values_f.screen_entry_value%type
745 							default null
746 	,p_input_value_name12   in     pay_input_values_f.name%type
747 							default null
748 	,p_value12              in     pay_element_entry_values_f.screen_entry_value%type
749 							default null
750 	,p_input_value_name13   in     pay_input_values_f.name%type
751 							default null
752 	,p_value13              in     pay_element_entry_values_f.screen_entry_value%type
753 							default null
754 	,p_input_value_name14   in     pay_input_values_f.name%type
755 							default null
756 	,p_value14              in     pay_element_entry_values_f.screen_entry_value%type
757 							default null
758 	,p_input_value_name15   in     pay_input_values_f.name%type
759 							default null
760 	,p_value15              in     pay_element_entry_values_f.screen_entry_value%type
761 							default null
762 	,p_effective_date       in     date             default null
763 	,p_process_warning         out nocopy boolean
764 	) is
765   --
766   l_proc        varchar2(72) := g_package||'process_sf52_element';
767   l_business_group_id   per_business_groups.business_group_id%type;
768   l_element_type_id     pay_element_types_f.element_type_id%type;
769   l_element_link_id     pay_element_links_f.element_link_id%type;
770   l_entry_type          pay_element_entries_f.entry_type%type   default 'E';
771   l_input_value_id1     pay_input_values_f.input_value_id%type;
772   l_input_value_id2     pay_input_values_f.input_value_id%type;
773   l_input_value_id3     pay_input_values_f.input_value_id%type;
774   l_input_value_id4     pay_input_values_f.input_value_id%type;
775   l_input_value_id5     pay_input_values_f.input_value_id%type;
776   l_input_value_id6     pay_input_values_f.input_value_id%type;
777   l_input_value_id7     pay_input_values_f.input_value_id%type;
778   l_input_value_id8     pay_input_values_f.input_value_id%type;
779   l_input_value_id9     pay_input_values_f.input_value_id%type;
780   l_input_value_id10    pay_input_values_f.input_value_id%type;
781   l_input_value_id11    pay_input_values_f.input_value_id%type;
782   l_input_value_id12    pay_input_values_f.input_value_id%type;
783   l_input_value_id13    pay_input_values_f.input_value_id%type;
784   l_input_value_id14    pay_input_values_f.input_value_id%type;
785   l_input_value_id15    pay_input_values_f.input_value_id%type;
786   l_value1              pay_element_entry_values_f.screen_entry_value%type;
787   l_value2              pay_element_entry_values_f.screen_entry_value%type;
788   l_value3              pay_element_entry_values_f.screen_entry_value%type;
789   l_value4              pay_element_entry_values_f.screen_entry_value%type;
790   l_value5              pay_element_entry_values_f.screen_entry_value%type;
791   l_value6              pay_element_entry_values_f.screen_entry_value%type;
792   l_value7              pay_element_entry_values_f.screen_entry_value%type;
793   l_value8              pay_element_entry_values_f.screen_entry_value%type;
794   l_value9              pay_element_entry_values_f.screen_entry_value%type;
795   l_value10             pay_element_entry_values_f.screen_entry_value%type;
796   l_value11             pay_element_entry_values_f.screen_entry_value%type;
797   l_value12             pay_element_entry_values_f.screen_entry_value%type;
798   l_value13             pay_element_entry_values_f.screen_entry_value%type;
799   l_value14             pay_element_entry_values_f.screen_entry_value%type;
800   l_value15             pay_element_entry_values_f.screen_entry_value%type;
801   l_effective_start_date  date;
802   l_effective_end_date    date;
803   l_processing_type       pay_element_types_f.processing_type%type;
804   l_element_entry_id      pay_element_entries_f.element_entry_id%type;
805   l_element_entry_id1      pay_element_entries_f.element_entry_id%type;
806   l_object_version_number pay_element_entries_f.object_version_number%type;
807   l_object_version_number1 pay_element_entries_f.object_version_number%type;
808   l_multiple_error_flag   varchar2(1);
809   l_create_warning        boolean;
810   l_update_warning        boolean;
811   l_delete_warning        boolean;
812   l_create_element_entry  boolean := FALSE;
813   l_update_element_entry  boolean := FALSE;
814   l_business_group_found  boolean := FALSE;
815   l_ele_proc_type_found   boolean := FALSE;
816   l_input_value_found     boolean := FALSE;
817   l_update_mode           varchar2(20);
818   l_session               ghr_history_api.g_session_var_type;
819   l_session_incentive     ghr_history_api.g_session_var_type;
820   l_noa_id                ghr_nature_of_actions.nature_of_action_id%type;
821   l_noa_code              ghr_nature_of_actions.code%type;
822   l_noa_fam_code          ghr_noa_families.noa_family_code%type;
823 
824   --
825   cursor c_business_group (asg_id number, eff_date date) is
826 	select asg.business_group_id
827 	  from per_all_assignments_f asg
828 	 where asg.assignment_id = asg_id
829 	   and eff_date between asg.effective_start_date
830 			    and asg.effective_end_date;
831   --
832   cursor c_ele_processing_type (bg_id		in number
833 			       ,ele_name        in varchar2
834 			       ,eff_date        in date) is
835 	select elt.element_type_id,
836 	       elt.processing_type
837 	  from pay_element_types_f elt
838 	 where trunc(eff_date) between elt.effective_start_date
839 				   and elt.effective_end_date
840 	   and upper(elt.element_name) = upper(ele_name)
841            and ( elt.business_group_id is NULL or
842                  elt.business_group_id = bg_id );
843 
844 
845   cursor c_noa_code is
846     select noa.code
847     from   ghr_nature_of_actions noa
848     where  noa.nature_of_action_id = l_noa_id;
849 
850   --
851   -- to pick pay basis from PAR
852  Cursor Cur_pay_basis is
853        Select from_pay_basis,to_pay_basis
854        From   ghr_pa_requests
855        Where pa_request_id=l_session.pa_request_id;
856 --       Where employee_assignment_id=p_assignment_id;
857 --       and   effective_date=p_eff_date;
858 --
859 -- Bug#5045806
860 CURSOR c_curr_incentive(l_asg_id NUMBER, l_effective_date DATE, l_element_name VARCHAR2) IS
861     SELECT  count(*) cnt
862     FROM    pay_element_entries_f ee, pay_element_types_f et
863     WHERE   ee.assignment_id = l_asg_id
864       AND   ee.element_type_id = et.element_type_id
865       AND   et.element_name = l_element_name
866       AND   l_effective_date between ee.effective_start_date
867                                 AND  ee.effective_end_date;
868 -- Bug35045806
869 
870 ll_pay_basis        VARCHAR2(80);
871 ll_effective_date   DATE;
872 l_new_element_name  VARCHAR2(80);
873 l_biweekly_end_date DATE;
874 l_p_value15         pay_element_entry_values_f.screen_entry_value%type;
875 l_cnt               NUMBER;
876 --
877 begin
878 
879 hr_utility.set_location('Entering:'||l_proc, 1);
880 hr_utility.set_location('element '||p_element_name,0);
881 hr_utility.trace('Input Value Name1:'||p_input_value_name1);
882 hr_utility.trace('VALUE1 :'||p_value1);
883 hr_utility.trace('L_VALUE1 :'||l_value1);
884 hr_utility.trace('Input Value Name2:'||p_input_value_name2);
885 hr_utility.trace('Value2 :'||p_value2);
886 hr_utility.trace('L_Value2 :'||l_value2);
887 If p_element_name like '%Incentive Biweekly%' AND
888    p_element_name <> 'Separation Incentive Biweekly' THEN
889     hr_utility.set_location('Inside biweekly element ',0);
890     l_biweekly_end_date := p_value15;
891     l_p_value15           := NULL;
892 ELSE
893     l_p_value15    := p_value15;
894 END IF;
895 
896 -- Bug#5045806 Verify whether an element entry already exists for this
897 IF p_element_name like '%Lump Sum%' THEN
898    ghr_history_api.get_g_session_var(l_session_incentive);
899    IF l_session_incentive.noa_id_correct is NULL THEN
900         FOR curr_incentive_rec IN c_curr_incentive(p_assignment_id,p_effective_date,p_element_name)
901         LOOP
902             l_cnt := curr_incentive_rec.cnt;
903         END LOOP;
904         IF l_cnt > 0 and p_element_name <> 'Separation Incentive Lump Sum' THEN
905             hr_utility.set_message(8301, 'GHR_38129_INCN_ELE_EXISTS');
906             hr_utility.set_message_token('ELEMENT_NAME',p_element_name);
907             hr_utility.set_message_token('EFF_DATE',p_effective_date);
908             hr_utility.raise_error;
909         END IF;
910     END IF;
911 END IF;
912 -- End Bug#5045806
913 --
914  for c_business_group_rec
915 	in c_business_group (p_assignment_id, p_effective_date) loop
916     l_business_group_found := TRUE;
917     l_business_group_id    := c_business_group_rec.business_group_id;
918     exit;
919   end loop;
920 --
921   if not l_business_group_found then
922     hr_utility.set_message(8301, 'GHR_38023_API_INV_ASG');
923     hr_utility.raise_error;
924   end if;
925   hr_utility.set_location(l_proc, 2);
926 -- Pick pay basis from PAR
927 ll_effective_date := p_effective_Date;
928 
929 IF (l_session.pa_request_id is NOT NULL) THEN
930         For Pay_basis in Cur_Pay_basis
931         Loop
932          If (pay_basis.from_pay_basis is NULL and
933                pay_basis.to_pay_basis is not NULL) then
934            ll_pay_basis:=pay_basis.to_pay_basis;
935 
936          elsif (pay_basis.from_pay_basis is NOT NULL and
937              pay_basis.to_pay_basis is NULL) then
938            ll_pay_basis:=pay_basis.from_pay_basis;
939 
940          elsif (pay_basis.from_pay_basis is NOT NULL and
941               pay_basis.to_pay_basis is NOT NULL) then
942            ll_pay_basis:=pay_basis.to_pay_basis;
943 
944   	  elsif (pay_basis.from_pay_basis is  NULL and
945                 pay_basis.to_pay_basis is NULL) then
946            ll_pay_basis:='PA';
947 
948           End If;
949          End Loop;
950 --
951 
952   l_new_element_name := pqp_fedhr_uspay_int_utils.return_new_element_name(
953                                           p_fedhr_element_name => p_element_name,
954                                            p_business_group_id  => l_business_group_id,
955                                            p_effective_date     => ll_effective_date,
956                                            p_pay_basis          => ll_pay_basis);
957 
958  ELSIF (l_session.pa_request_id is NULL) THEN
959   IF (p_element_name = 'Basic Salary Rate'
960     and (fnd_profile.value('HR_USER_TYPE')='INT')) THEN
961            l_new_element_name :=
962                    pqp_fedhr_uspay_int_utils.return_new_element_name(
963                                            p_assignment_id      => p_assignment_id,
964                                            p_business_group_id  => l_business_group_id,
965                                            p_effective_date     => ll_effective_date);
966  ELSIF (fnd_profile.value('HR_USER_TYPE')<>'INT'
967    or (p_element_name <> 'Basic Salary Rate' and (fnd_profile.value('HR_USER_TYPE')='INT'))) THEN
968            l_new_element_name :=
969                             pqp_fedhr_uspay_int_utils.return_new_element_name(
970                                           p_fedhr_element_name => p_element_name,
971                                            p_business_group_id  => l_business_group_id,
972                                            p_effective_date     => ll_effective_date,
973                                            p_pay_basis          => NULL);
974 
975   END IF;
976  END IF;
977 --
978 --
979 hr_utility.trace('old Element Name : ' ||p_element_name);
980 hr_utility.trace('New Element Name : ' ||l_new_element_name);
981    --
982   -- ONLY THIS CURSOR and GET_INPUT_VALUE_ID procedure USE NEW ELEMENT NAME
983   --
984   for c_ele_processing_type_rec in
985 		c_ele_processing_type (l_business_group_id
986 			              ,l_new_element_name
987 				      ,p_effective_date) loop
988     l_ele_proc_type_found := TRUE;
989     l_element_type_id     := c_ele_processing_type_rec.element_type_id;
990     l_processing_type     := c_ele_processing_type_rec.processing_type;
991     exit;
992   end loop;
993   if not l_ele_proc_type_found then
994     hr_utility.set_message(8301, 'GHR_38035_API_INV_PROC_TYPE');
995     hr_utility.raise_error;
996   end if;
997   hr_utility.set_location(l_proc, 2);
998   --
999 
1000   --  Retrieve element information if input value name is not null
1001   -- Using this p_element_name to pick old ele name under retrieve_element_info
1002   -- anyways. So passing old ele name than new ele name to avoid error.
1003   hr_utility.set_location('l_value1: '||l_value1,10);
1004   hr_utility.set_location('l_value2: '||l_value2,10);
1005   hr_utility.set_location('l_value3: '||l_value3,10);
1006   hr_utility.set_location('l_value4: '||l_value4,10);
1007     hr_utility.set_location('l_multiple_error_flag: '||l_multiple_error_flag,10);
1008   if p_input_value_name1 is not NULL then
1009     retrieve_element_info(p_element_name        => p_element_name
1010 			 ,p_input_value_name    => p_input_value_name1
1011 			 ,p_assignment_id       => p_assignment_id
1012 			 ,p_effective_date      => p_effective_date
1013 			 ,p_processing_type     => l_processing_type
1014 			 ,p_element_link_id     => l_element_link_id
1015 			 ,p_input_value_id      => l_input_value_id1
1016 			 ,p_element_entry_id    => l_element_entry_id
1017 			 ,p_value               => l_value1
1018 			 ,p_object_version_number => l_object_version_number
1019 			 ,p_multiple_error_flag => l_multiple_error_flag);
1020   end if;
1021   hr_utility.set_location('after fetch l_value1: '||l_value1,20);
1022   --
1023   if p_input_value_name2 is not NULL then
1024     IF p_input_value_name2 = 'Capped Other Pay' THEN
1025     retrieve_element_info(p_element_name        => p_element_name
1026 			 ,p_input_value_name    => p_input_value_name2
1027 			 ,p_assignment_id       => p_assignment_id
1028 			 ,p_effective_date      => p_effective_date
1029 			 ,p_processing_type     => l_processing_type
1030 			 ,p_element_link_id     => l_element_link_id
1031 			 ,p_input_value_id      => l_input_value_id2
1032 			 ,p_element_entry_id    => l_element_entry_id1
1033 			 ,p_value               => l_value2
1034 			 ,p_object_version_number => l_object_version_number1
1035 			 ,p_multiple_error_flag => l_multiple_error_flag);
1036     ELSE
1037     retrieve_element_info(p_element_name        => p_element_name
1038 			 ,p_input_value_name    => p_input_value_name2
1039 			 ,p_assignment_id       => p_assignment_id
1040 			 ,p_effective_date      => p_effective_date
1041 			 ,p_processing_type     => l_processing_type
1042 			 ,p_element_link_id     => l_element_link_id
1043 			 ,p_input_value_id      => l_input_value_id2
1044 			 ,p_element_entry_id    => l_element_entry_id
1045 			 ,p_value               => l_value2
1046 			 ,p_object_version_number => l_object_version_number
1047 			 ,p_multiple_error_flag => l_multiple_error_flag);
1048     END IF;
1049   end if;
1050     hr_utility.set_location('after fetch l_value2: '||l_value2,20);
1051   --
1052   if p_input_value_name3 is not NULL then
1053     retrieve_element_info(p_element_name        => p_element_name
1054 			 ,p_input_value_name    => p_input_value_name3
1055 			 ,p_assignment_id       => p_assignment_id
1056 			 ,p_effective_date      => p_effective_date
1057 			 ,p_processing_type     => l_processing_type
1058 			 ,p_element_link_id     => l_element_link_id
1059 			 ,p_input_value_id      => l_input_value_id3
1060 			 ,p_element_entry_id    => l_element_entry_id
1061 			 ,p_value               => l_value3
1062 			 ,p_object_version_number => l_object_version_number
1063 			 ,p_multiple_error_flag => l_multiple_error_flag);
1064   end if;
1065     hr_utility.set_location('after fetch l_value3: '||l_value3,20);
1066   --
1067   if p_input_value_name4 is not NULL then
1068     retrieve_element_info(p_element_name        => p_element_name
1069 			 ,p_input_value_name    => p_input_value_name4
1070 			 ,p_assignment_id       => p_assignment_id
1071 			 ,p_effective_date      => p_effective_date
1072 			 ,p_processing_type     => l_processing_type
1073 			 ,p_element_link_id     => l_element_link_id
1074 			 ,p_input_value_id      => l_input_value_id4
1075 			 ,p_element_entry_id    => l_element_entry_id
1076 			 ,p_value               => l_value4
1077 			 ,p_object_version_number => l_object_version_number
1078 			 ,p_multiple_error_flag => l_multiple_error_flag);
1079   end if;
1080     hr_utility.set_location('after fetch l_value4: '||l_value4,20);
1081   --
1082   if p_input_value_name5 is not NULL then
1083     retrieve_element_info(p_element_name        => p_element_name
1084 			 ,p_input_value_name    => p_input_value_name5
1085 			 ,p_assignment_id       => p_assignment_id
1086 			 ,p_effective_date      => p_effective_date
1087 			 ,p_processing_type     => l_processing_type
1088 			 ,p_element_link_id     => l_element_link_id
1089 			 ,p_input_value_id      => l_input_value_id5
1090 			 ,p_element_entry_id    => l_element_entry_id
1091 			 ,p_value               => l_value5
1092 			 ,p_object_version_number => l_object_version_number
1093 			 ,p_multiple_error_flag => l_multiple_error_flag);
1094   end if;
1095   --
1096   if p_input_value_name6 is not NULL then
1097     retrieve_element_info(p_element_name        => p_element_name
1098 			 ,p_input_value_name    => p_input_value_name6
1099 			 ,p_assignment_id       => p_assignment_id
1100 			 ,p_effective_date      => p_effective_date
1101 			 ,p_processing_type     => l_processing_type
1102 			 ,p_element_link_id     => l_element_link_id
1103 			 ,p_input_value_id      => l_input_value_id6
1104 			 ,p_element_entry_id    => l_element_entry_id
1105 			 ,p_value               => l_value6
1106 			 ,p_object_version_number => l_object_version_number
1107 			 ,p_multiple_error_flag => l_multiple_error_flag);
1108   end if;
1109   --
1110   if p_input_value_name7 is not NULL then
1111     retrieve_element_info(p_element_name        => p_element_name
1112 			 ,p_input_value_name    => p_input_value_name7
1113 			 ,p_assignment_id       => p_assignment_id
1114 			 ,p_effective_date      => p_effective_date
1115 			 ,p_processing_type     => l_processing_type
1116 			 ,p_element_link_id     => l_element_link_id
1117 			 ,p_input_value_id      => l_input_value_id7
1118 			 ,p_element_entry_id    => l_element_entry_id
1119 			 ,p_value               => l_value7
1120 			 ,p_object_version_number => l_object_version_number
1121 			 ,p_multiple_error_flag => l_multiple_error_flag);
1122   end if;
1123   --
1124   if p_input_value_name8 is not NULL then
1125     retrieve_element_info(p_element_name        => p_element_name
1126 			 ,p_input_value_name    => p_input_value_name8
1127 			 ,p_assignment_id       => p_assignment_id
1128 			 ,p_effective_date      => p_effective_date
1129 			 ,p_processing_type     => l_processing_type
1130 			 ,p_element_link_id     => l_element_link_id
1131 			 ,p_input_value_id      => l_input_value_id8
1132 			 ,p_element_entry_id    => l_element_entry_id
1133 			 ,p_value               => l_value8
1134 			 ,p_object_version_number => l_object_version_number
1135 			 ,p_multiple_error_flag => l_multiple_error_flag);
1136   end if;
1137   --
1138   if p_input_value_name9 is not NULL then
1139     retrieve_element_info(p_element_name        => p_element_name
1140 			 ,p_input_value_name    => p_input_value_name9
1141 			 ,p_assignment_id       => p_assignment_id
1142 			 ,p_effective_date      => p_effective_date
1143 			 ,p_processing_type     => l_processing_type
1144 			 ,p_element_link_id     => l_element_link_id
1145 			 ,p_input_value_id      => l_input_value_id9
1146 			 ,p_element_entry_id    => l_element_entry_id
1147 			 ,p_value               => l_value9
1148 			 ,p_object_version_number => l_object_version_number
1149 			 ,p_multiple_error_flag => l_multiple_error_flag);
1150   end if;
1151   --
1152   if p_input_value_name10 is not NULL then
1153     retrieve_element_info(p_element_name        => p_element_name
1154 			 ,p_input_value_name    => p_input_value_name10
1155 			 ,p_assignment_id       => p_assignment_id
1156 			 ,p_effective_date      => p_effective_date
1157 			 ,p_processing_type     => l_processing_type
1158 			 ,p_element_link_id     => l_element_link_id
1159 			 ,p_input_value_id      => l_input_value_id10
1160 			 ,p_element_entry_id    => l_element_entry_id
1161 			 ,p_value               => l_value10
1162 			 ,p_object_version_number => l_object_version_number
1163 			 ,p_multiple_error_flag => l_multiple_error_flag);
1164   end if;
1165   --
1166   if p_input_value_name11 is not NULL then
1167     retrieve_element_info(p_element_name        => p_element_name
1168 			 ,p_input_value_name    => p_input_value_name11
1169 			 ,p_assignment_id       => p_assignment_id
1170 			 ,p_effective_date      => p_effective_date
1171 			 ,p_processing_type     => l_processing_type
1172 			 ,p_element_link_id     => l_element_link_id
1173 			 ,p_input_value_id      => l_input_value_id11
1174 			 ,p_element_entry_id    => l_element_entry_id
1175 			 ,p_value               => l_value11
1176 			 ,p_object_version_number => l_object_version_number
1177 			 ,p_multiple_error_flag => l_multiple_error_flag);
1178   end if;
1179   --
1180   if p_input_value_name12 is not NULL then
1181     retrieve_element_info(p_element_name        => p_element_name
1182 			 ,p_input_value_name    => p_input_value_name12
1183 			 ,p_assignment_id       => p_assignment_id
1184 			 ,p_effective_date      => p_effective_date
1185 			 ,p_processing_type     => l_processing_type
1186 			 ,p_element_link_id     => l_element_link_id
1187 			 ,p_input_value_id      => l_input_value_id12
1188 			 ,p_element_entry_id    => l_element_entry_id
1189 			 ,p_value               => l_value12
1190 			 ,p_object_version_number => l_object_version_number
1191 			 ,p_multiple_error_flag => l_multiple_error_flag);
1192   end if;
1193   --
1194   if p_input_value_name13 is not NULL then
1195     retrieve_element_info(p_element_name        => p_element_name
1196 			 ,p_input_value_name    => p_input_value_name13
1197 			 ,p_assignment_id       => p_assignment_id
1198 			 ,p_effective_date      => p_effective_date
1199 			 ,p_processing_type     => l_processing_type
1200 			 ,p_element_link_id     => l_element_link_id
1201 			 ,p_input_value_id      => l_input_value_id13
1202 			 ,p_element_entry_id    => l_element_entry_id
1203 			 ,p_value               => l_value13
1204 			 ,p_object_version_number => l_object_version_number
1205 			 ,p_multiple_error_flag => l_multiple_error_flag);
1206   end if;
1207   --
1208   if p_input_value_name14 is not NULL then
1209     retrieve_element_info(p_element_name        => p_element_name
1210 			 ,p_input_value_name    => p_input_value_name14
1211 			 ,p_assignment_id       => p_assignment_id
1212 			 ,p_effective_date      => p_effective_date
1213 			 ,p_processing_type     => l_processing_type
1214 			 ,p_element_link_id     => l_element_link_id
1215 			 ,p_input_value_id      => l_input_value_id14
1216 			 ,p_element_entry_id    => l_element_entry_id
1217 			 ,p_value               => l_value14
1218 			 ,p_object_version_number => l_object_version_number
1219 			 ,p_multiple_error_flag => l_multiple_error_flag);
1220   end if;
1221   --
1222   if p_input_value_name15 is not NULL then
1223     retrieve_element_info(p_element_name        => p_element_name
1224 			 ,p_input_value_name    => p_input_value_name15
1225 			 ,p_assignment_id       => p_assignment_id
1226 			 ,p_effective_date      => p_effective_date
1227 			 ,p_processing_type     => l_processing_type
1228 			 ,p_element_link_id     => l_element_link_id
1229 			 ,p_input_value_id      => l_input_value_id15
1230 			 ,p_element_entry_id    => l_element_entry_id
1231 			 ,p_value               => l_value15
1232 			 ,p_object_version_number => l_object_version_number
1233 			 ,p_multiple_error_flag => l_multiple_error_flag);
1234   end if;
1235   hr_utility.set_location('l_element_entry_id after retrieve ' || to_char(l_element_entry_id),1);
1236   hr_utility.set_location('l_element_entry_id1 after retrieve ' || to_char(l_element_entry_id1),2);
1237   hr_utility.set_location('l_value1 '||l_value1,3);
1238   hr_utility.set_location('l_value2'||l_value2,4);
1239   hr_utility.set_location('l_inp_val_id1'||to_char(l_input_value_id1),5);
1240   hr_utility.set_location('l_inp_val_id1'||to_char(l_input_value_id2),6);
1241   hr_utility.set_location('l_multiple_error_flag: '||l_multiple_error_flag,7);
1242   hr_utility.set_location(l_proc, 3);
1243   --
1244   --  if employee does not have the element entry
1245   --
1246   if (l_value1  is NULL and l_input_value_id1  is null   and
1247       l_value2  is NULL and l_input_value_id2  is null   and
1248       l_value3  is NULL and l_input_value_id3  is null   and
1249       l_value4  is NULL and l_input_value_id4  is null   and
1250       l_value5  is NULL and l_input_value_id5  is null   and
1251       l_value6  is NULL and l_input_value_id6  is null   and
1252       l_value7  is NULL and l_input_value_id7  is null   and
1253       l_value8  is NULL and l_input_value_id8  is null   and
1254       l_value9  is NULL and l_input_value_id9  is null   and
1255       l_value10 is NULL and l_input_value_id10 is null   and
1256       l_value11 is NULL and l_input_value_id11 is null   and
1257       l_value12 is NULL and l_input_value_id12 is null   and
1258       l_value13 is NULL and l_input_value_id13 is null   and
1259       l_value14 is NULL and l_input_value_id14 is null   and
1260       l_value15 is NULL and l_input_value_id15 is null )then
1261     --
1262     --  Get assignment eligibility element link
1263     --
1264     l_element_link_id := hr_entry_api.get_link
1265 				(p_assignment_id   => p_assignment_id
1266 				,p_element_type_id => l_element_type_id
1267 				,p_session_date    => p_effective_date);
1268     --
1269     --  Get input value id for all input values of the element
1270     --
1271 -- Added the if with check on input_value_id for testing
1272   -- If l_input_value_id1 is null then
1273     if p_input_value_name1 is not NULL then
1274       l_input_value_id1 := get_input_value_id
1275 				(p_element_name         => l_new_element_name
1276 				,p_input_value_name     => p_input_value_name1
1277 				,p_effective_date       => p_effective_date);
1278     end if;
1279   -- End if;
1280     --
1281     if p_input_value_name2 is not NULL then
1282       l_input_value_id2 := get_input_value_id
1283 				(p_element_name         => l_new_element_name
1284 				,p_input_value_name     => p_input_value_name2
1285 				,p_effective_date       => p_effective_date);
1286     end if;
1287     --
1288     if p_input_value_name3 is not NULL then
1289       l_input_value_id3 := get_input_value_id
1290 				(p_element_name         => l_new_element_name
1291 				,p_input_value_name     => p_input_value_name3
1292 				,p_effective_date       => p_effective_date);
1293     end if;
1294     --
1295     if p_input_value_name4 is not NULL then
1296       l_input_value_id4 := get_input_value_id
1297 				(p_element_name         => l_new_element_name
1298 				,p_input_value_name     => p_input_value_name4
1299 				,p_effective_date       => p_effective_date);
1300     end if;
1301     --
1302     if p_input_value_name5 is not NULL then
1303       l_input_value_id5 := get_input_value_id
1304 				(p_element_name         => l_new_element_name
1305 				,p_input_value_name     => p_input_value_name5
1306 				,p_effective_date       => p_effective_date);
1307     end if;
1308     --
1309     if p_input_value_name6 is not NULL then
1310       l_input_value_id6 := get_input_value_id
1311 				(p_element_name         => l_new_element_name
1312 				,p_input_value_name     => p_input_value_name6
1313 				,p_effective_date       => p_effective_date);
1314     end if;
1315     --
1316     if p_input_value_name7 is not NULL then
1317       l_input_value_id7 := get_input_value_id
1318 				(p_element_name         => l_new_element_name
1319 				,p_input_value_name     => p_input_value_name7
1320 				,p_effective_date       => p_effective_date);
1321     end if;
1322     --
1323     if p_input_value_name8 is not NULL then
1324       l_input_value_id8 := get_input_value_id
1325 				(p_element_name         => l_new_element_name
1326 				,p_input_value_name     => p_input_value_name8
1327 				,p_effective_date       => p_effective_date);
1328     end if;
1329     --
1330     if p_input_value_name9 is not NULL then
1331       l_input_value_id9 := get_input_value_id
1332 				(p_element_name         => l_new_element_name
1333 				,p_input_value_name     => p_input_value_name9
1334 				,p_effective_date       => p_effective_date);
1335     end if;
1336     --
1337     if p_input_value_name10 is not NULL then
1338       l_input_value_id10 := get_input_value_id
1339 				(p_element_name         => l_new_element_name
1340 				,p_input_value_name     => p_input_value_name10
1341 				,p_effective_date       => p_effective_date);
1342     end if;
1343     --
1344     if p_input_value_name11 is not NULL then
1345       l_input_value_id11 := get_input_value_id
1346 				(p_element_name         => l_new_element_name
1347 				,p_input_value_name     => p_input_value_name11
1348 				,p_effective_date       => p_effective_date);
1349     end if;
1350     --
1351     if p_input_value_name12 is not NULL then
1352       l_input_value_id12 := get_input_value_id
1353 				(p_element_name         => l_new_element_name
1354 				,p_input_value_name     => p_input_value_name12
1355 				,p_effective_date       => p_effective_date);
1356     end if;
1357     --
1358     if p_input_value_name13 is not NULL then
1359       l_input_value_id13 := get_input_value_id
1360 				(p_element_name         => l_new_element_name
1361 				,p_input_value_name     => p_input_value_name13
1362 				,p_effective_date       => p_effective_date);
1363     end if;
1364     --
1365     if p_input_value_name14 is not NULL then
1366       l_input_value_id14 := get_input_value_id
1367 				(p_element_name         => l_new_element_name
1368 				,p_input_value_name     => p_input_value_name14
1369 				,p_effective_date       => p_effective_date);
1370     end if;
1371     --
1372     if p_input_value_name15 is not NULL then
1373       l_input_value_id15 := get_input_value_id
1374 				(p_element_name         => l_new_element_name
1375 				,p_input_value_name     => p_input_value_name15
1376 				,p_effective_date       => p_effective_date);
1377     end if;
1378     hr_utility.set_location(l_proc, 4);
1379     --
1380     begin
1381      savepoint cr_ent;
1382     py_element_entry_api.create_element_entry
1383 		(p_effective_date               => p_effective_date
1384 		,p_business_group_id            => l_business_group_id
1385 		,p_assignment_id                => p_assignment_id
1386 		,p_element_link_id              => l_element_link_id
1387 		,p_entry_type                   => l_entry_type
1388 		,p_input_value_id1              => l_input_value_id1
1389 		,p_entry_value1                 => p_value1
1390 		,p_input_value_id2              => l_input_value_id2
1391 		,p_entry_value2                 => p_value2
1392 		,p_input_value_id3              => l_input_value_id3
1393 		,p_entry_value3                 => p_value3
1394 		,p_input_value_id4              => l_input_value_id4
1395 		,p_entry_value4                 => p_value4
1396 		,p_input_value_id5              => l_input_value_id5
1397 		,p_entry_value5                 => p_value5
1398 		,p_input_value_id6              => l_input_value_id6
1399 		,p_entry_value6                 => p_value6
1400 		,p_input_value_id7              => l_input_value_id7
1401 		,p_entry_value7                 => p_value7
1402 		,p_input_value_id8              => l_input_value_id8
1403 		,p_entry_value8                 => p_value8
1404 		,p_input_value_id9              => l_input_value_id9
1405 		,p_entry_value9                 => p_value9
1406 		,p_input_value_id10             => l_input_value_id10
1407 		,p_entry_value10                => p_value10
1408 		,p_input_value_id11             => l_input_value_id11
1409 		,p_entry_value11                => p_value11
1410 		,p_input_value_id12             => l_input_value_id12
1411 		,p_entry_value12                => p_value12
1412 		,p_input_value_id13             => l_input_value_id13
1413 		,p_entry_value13                => p_value13
1414 		,p_input_value_id14             => l_input_value_id14
1415 		,p_entry_value14                => p_value14
1416 		,p_input_value_id15             => l_input_value_id15
1417 		,p_entry_value15                => l_p_value15
1418 		,p_effective_start_date         => l_effective_start_date
1419 		,p_effective_end_date           => l_effective_end_date
1420 		,p_element_entry_id             => l_element_entry_id
1421 		,p_object_version_number        => l_object_version_number
1422 		,p_create_warning               => l_create_warning);
1423           Exception
1424            when others then
1425              rollback to cr_ent;
1426              raise;
1427          End;
1428     --
1429     --  The following logic does not work until the procedure
1430     --    py_element_entry_api.create_element_entry will return p_create_warning
1431     --    flag.
1432     --
1433 /*
1434     if not l_create_warning then
1435       l_create_element_entry := TRUE;
1436     else
1437       l_create_element_entry := FALSE;
1438     end if;
1439 */
1440 --Begin Bug# 6857127
1441 -- Bug#4486823 RRR Changes Added code to test RRR Technical Feasibility
1442 IF p_element_name like '%Incentive Biweekly%' and l_biweekly_end_date IS NOT NULL THEN
1443    ghr_history_api.get_g_session_var(l_session);
1444    IF l_session.noa_id_correct is NULL THEN
1445         BEGIN
1446             SAVEPOINT del_ent;
1447             pay_element_entry_api.delete_element_entry
1448                   (p_validate               => false
1449                   ,p_datetrack_delete_mode  => 'DELETE'
1450                   ,p_effective_date         => l_biweekly_end_date
1451                   ,p_element_entry_id       => l_element_entry_id
1452                   ,p_object_version_number  => l_object_version_number
1453                   ,p_effective_start_date   => l_effective_start_date
1454                   ,p_effective_end_date     => l_effective_end_date
1455                   ,p_delete_warning         => l_delete_warning
1456                   );
1457         EXCEPTION
1458             WHEN OTHERS THEN
1459                 ROLLBACK to del_ent;
1460                 RAISE;
1461         END;
1462     END IF;
1463 END IF;
1464 --End Bug# 6857127
1465     hr_utility.set_location(l_proc||l_element_entry_id, 5);
1466  Else
1467   --
1468   -- if one of the element entry values changed
1469   --
1470 
1471   if nvl(p_value1,hr_api.g_varchar2)   <> nvl(l_value1,hr_api.g_varchar2) or
1472      nvl(p_value2,hr_api.g_varchar2)   <> nvl(l_value2,hr_api.g_varchar2) or
1473      nvl(p_value3,hr_api.g_varchar2)   <> nvl(l_value3,hr_api.g_varchar2) or
1474      nvl(p_value4,hr_api.g_varchar2)   <> nvl(l_value4,hr_api.g_varchar2) or
1475      nvl(p_value5,hr_api.g_varchar2)   <> nvl(l_value5,hr_api.g_varchar2) or
1476      nvl(p_value6,hr_api.g_varchar2)   <> nvl(l_value6,hr_api.g_varchar2) or
1477      nvl(p_value7,hr_api.g_varchar2)   <> nvl(l_value7,hr_api.g_varchar2) or
1478      nvl(p_value8,hr_api.g_varchar2)   <> nvl(l_value8,hr_api.g_varchar2) or
1479      nvl(p_value9,hr_api.g_varchar2)   <> nvl(l_value9,hr_api.g_varchar2) or
1480      nvl( p_value10,hr_api.g_varchar2) <> nvl(l_value10,hr_api.g_varchar2) or
1481      nvl( p_value11,hr_api.g_varchar2) <> nvl(l_value11,hr_api.g_varchar2) or
1482      nvl( p_value12,hr_api.g_varchar2) <> nvl(l_value12,hr_api.g_varchar2) or
1483      nvl( p_value13,hr_api.g_varchar2) <> nvl(l_value13,hr_api.g_varchar2) or
1484      nvl( p_value14,hr_api.g_varchar2) <> nvl(l_value14,hr_api.g_varchar2) or
1485      nvl( l_p_value15,hr_api.g_varchar2) <> nvl(l_value15,hr_api.g_varchar2) then
1486     -- get session variable to determine if it is a 'CORRECTION'
1487 
1488       ghr_history_api.get_g_session_var(l_session);
1489 
1490       If l_multiple_error_flag = 'Y'
1491        and l_session.noa_id_correct is null
1492         then
1493          begin
1494           savepoint cr_ent;
1495          py_element_entry_api.create_element_entry
1496 		(p_effective_date               => p_effective_date
1497 		,p_business_group_id            => l_business_group_id
1498 		,p_assignment_id                => p_assignment_id
1499 		,p_element_link_id              => l_element_link_id
1500 		,p_entry_type                   => l_entry_type
1501 		,p_input_value_id1              => l_input_value_id1
1502 		,p_entry_value1                 => p_value1
1503 		,p_input_value_id2              => l_input_value_id2
1504 		,p_entry_value2                 => p_value2
1505 		,p_input_value_id3              => l_input_value_id3
1506 		,p_entry_value3                 => p_value3
1507 		,p_input_value_id4              => l_input_value_id4
1508 		,p_entry_value4                 => p_value4
1509 		,p_input_value_id5              => l_input_value_id5
1510 		,p_entry_value5                 => p_value5
1511 		,p_input_value_id6              => l_input_value_id6
1512 		,p_entry_value6                 => p_value6
1513 		,p_input_value_id7              => l_input_value_id7
1514 		,p_entry_value7                 => p_value7
1515 		,p_input_value_id8              => l_input_value_id8
1516 		,p_entry_value8                 => p_value8
1517 		,p_input_value_id9              => l_input_value_id9
1518 		,p_entry_value9                 => p_value9
1519 		,p_input_value_id10             => l_input_value_id10
1520 		,p_entry_value10                => p_value10
1521 		,p_input_value_id11             => l_input_value_id11
1522 		,p_entry_value11                => p_value11
1523 		,p_input_value_id12             => l_input_value_id12
1524 		,p_entry_value12                => p_value12
1525 		,p_input_value_id13             => l_input_value_id13
1526 		,p_entry_value13                => p_value13
1527 		,p_input_value_id14             => l_input_value_id14
1528 		,p_entry_value14                => p_value14
1529 		,p_input_value_id15             => l_input_value_id15
1530 		,p_entry_value15                => l_p_value15
1531 		,p_effective_start_date         => l_effective_start_date
1532 		,p_effective_end_date           => l_effective_end_date
1533 		,p_element_entry_id             => l_element_entry_id
1534 		,p_object_version_number        => l_object_version_number
1535 		,p_create_warning               => l_create_warning);
1536         hr_utility.set_location('elt entry id : '||l_element_entry_id,10);
1537             Exception
1538                when others then
1539                  rollback to cr_ent;
1540                 raise;
1541            End;
1542         Else
1543            if l_session.noa_id_correct is not null then
1544             -- l_update_mode  :=  'CORRECTION';
1545             -- Bug 2125660
1546             -- Update mode should be deteremined for each element based on the
1547             -- Current effective start date and effective end date rather than
1548             -- Setting directly to 'CORRECTION'
1549              l_update_mode := return_update_mode(p_id    => l_element_entry_id,
1550                                                  p_effective_date => p_effective_date
1551                                                  );
1552              l_noa_id       := l_session.noa_id_correct;
1553            else
1554              l_update_mode := return_update_mode(p_id             => l_element_entry_id,
1555                                                p_effective_date => p_effective_date
1556                                               );
1557              l_noa_id      := l_session.noa_id;
1558            end if;
1559          -- for Other pay Elements update nulls as nulls.
1560           for noa_code_rec in c_noa_code loop
1561             l_noa_code := noa_code_rec.code;
1562           end loop;
1563            -- Bug 3854447
1564            -- Get the NOA_FAMILCY_CODE by calling the function
1565            l_noa_fam_code := ghr_pa_requests_pkg.get_noa_pm_family(l_noa_id);
1566            --
1567            hr_utility.set_location('l_noa_id is ' || l_noa_id,2);
1568            hr_utility.set_location('l_noa_code is ' || l_noa_code,2);
1569            hr_utility.set_location('l_noa_fam_code is ' || l_noa_fam_code,2);
1570           If l_noa_code = '819' or l_noa_code = '818' or l_noa_code = '810' or
1571             l_noa_fam_code like 'GHR_SAL%' then
1572             l_value1   := p_value1;
1573             l_value2   := p_value2;
1574             l_value3   := p_value3;
1575             l_value4   := p_value4;
1576             l_value5   := p_value5;
1577             l_value6   := p_value6;
1578             l_value7   := p_value7;
1579             l_value8   := p_value8;
1580             l_value9   := p_value9;
1581             l_value10  := p_value10;
1582             l_value11  := p_value11;
1583             l_value12  := p_value12;
1584             l_value13  := p_value13;
1585             l_value14  := p_value14;
1586             l_value15  := l_p_value15;
1587           End if;
1588 
1589 --Bug 2835929
1590 --Added Check to Ex-Emp awards,Date of Ex-Emp award earned can be nullified
1591 --Bug 3531369 for 850 action amounts entered can be nullified.
1592 	  IF l_noa_code IN('825','840','841','842','843','844','845','878','879','850') and p_value10 is NULL THEN
1593 	    l_value10 :=p_value10;
1594 	  END IF;
1595 
1596 --Pradeep start of Bug  3209599
1597 	  IF p_element_name = 'Recruitment Bonus' AND p_value3 IS NULL AND p_value2 IS NOT NULL THEN
1598 		  l_value3 := p_value3;
1599 	  END IF;
1600 	  IF p_element_name = 'Relocation Bonus' AND p_value3 IS NULL AND p_value2 IS NOT NULL THEN
1601 		  l_value3 := p_value3;
1602 	  END IF;
1603 --Pradeep end of Bug 3209599
1604 
1605 --Bug 3257055
1606 --During Correction to Award, if only amount is entered, update the percentage field with NULL
1607 -- For element "Federal Awards", p_value3 stores 'Amount or Hours' and p_value4 stores 'Percentage'.
1608 
1609 	  IF l_noa_fam_code LIKE 'AWARD%' AND
1610 	     p_value3 is NOT NULL     AND
1611              p_value4 IS NULL THEN
1612  	       l_value4 := NULL;
1613 	  END IF;
1614 --Bug 3257055
1615 
1616 	-- Bug 2709841 When Retention percentage is made null, then update the percentage field with null.
1617 		IF p_element_name = 'Retention Allowance' AND p_value2 IS NULL AND p_value1 IS NOT NULL THEN
1618 			l_value2 := p_value2;
1619 		END IF;
1620 
1621            hr_utility.set_location('l_element_entry_id' || to_char(l_element_entry_id),2);
1622            hr_utility.set_location('p_value1 is ' || p_value1,2);
1623            hr_utility.set_location('l_value1 is ' || l_value1,2);
1624            hr_utility.set_location('p_value2 is ' || p_value2,2);
1625            hr_utility.set_location('l_value2 is ' || l_value2,2);
1626            hr_utility.set_location('p_value3 is ' || p_value3,2);
1627            hr_utility.set_location('l_value3 is ' || l_value3,2);
1628            hr_utility.set_location('p_value4 is ' || p_value4,2);
1629            hr_utility.set_location('l_value4 is ' || l_value4,2);
1630            hr_utility.set_location('p_value5 is ' || p_value5,2);
1631            hr_utility.set_location('l_value5 is ' || l_value5,2);
1632 
1633           -- Bug#2759379 Added this condition to facilitate user to make Eligibility Expiration to NULL
1634            IF p_element_name = 'FEGLI' and p_value2 is null  then
1635                l_value2 := null;
1636            END IF;
1637           -- Bug#2759379
1638 
1639 	  --Bug 3531369
1640 	  --Bug 3617295 Added Within Grade Increase to the If statement
1641 	  IF  p_element_name IN('MDDDS Special Pay','Within Grade Increase',
1642 	                         'Foreign Transfer Allowance') THEN
1643 	        IF p_value1 IS NULL THEN l_value1 := NULL; END IF;
1644 		IF p_value2 IS NULL THEN l_value2 := NULL; END IF;
1645 		IF p_value3 IS NULL THEN l_value3 := NULL; END IF;
1646 		IF p_value4 IS NULL THEN l_value4 := NULL; END IF;
1647 		IF p_value5 IS NULL THEN l_value5 := NULL; END IF;
1648 		IF p_value6 IS NULL THEN l_value6 := NULL; END IF;
1649 		IF p_value7 IS NULL THEN l_value7 := NULL; END IF;
1650 		IF p_value8 IS NULL THEN l_value8 := NULL; END IF;
1651 		IF p_value9 IS NULL THEN l_value9 := NULL; END IF;
1652 		IF p_value10 IS NULL THEN l_value10 := NULL; END IF;
1653 
1654 	   END IF;
1655 	   --Bug 3531369.
1656 
1657 
1658            begin
1659             savepoint upd_ent;
1660            py_element_entry_api.update_element_entry
1661 		(p_datetrack_update_mode        => l_update_mode
1662 		,p_effective_date               => p_effective_date
1663 		,p_business_group_id            => l_business_group_id
1664 		,p_element_entry_id             => l_element_entry_id
1665 		,p_object_version_number        => l_object_version_number
1666 		,p_input_value_id1              => l_input_value_id1
1667 		,p_entry_value1                 => nvl(p_value1,l_value1)
1668 		,p_input_value_id2              => l_input_value_id2
1669 		,p_entry_value2                 => nvl(p_value2,l_value2)
1670 		,p_input_value_id3              => l_input_value_id3
1671 		,p_entry_value3                 => nvl(p_value3,l_value3)
1672 		,p_input_value_id4              => l_input_value_id4
1673 		,p_entry_value4                 => nvl(p_value4,l_value4)
1674 		,p_input_value_id5              => l_input_value_id5
1675 		,p_entry_value5                 => nvl(p_value5,l_value5)
1676 		,p_input_value_id6              => l_input_value_id6
1677 		,p_entry_value6                 => nvl(p_value6,l_value6)
1678 		,p_input_value_id7              => l_input_value_id7
1679 		,p_entry_value7                 => nvl(p_value7,l_value7)
1680 		,p_input_value_id8              => l_input_value_id8
1681 		,p_entry_value8                 => nvl(p_value8,l_value8)
1682 		,p_input_value_id9              => l_input_value_id9
1683 		,p_entry_value9                 => nvl(p_value9,l_value9)
1684 		,p_input_value_id10             => l_input_value_id10
1685 		,p_entry_value10                => nvl(p_value10,l_value10)
1686 		,p_input_value_id11             => l_input_value_id11
1687 		,p_entry_value11                => nvl(p_value11,l_value11)
1688 		,p_input_value_id12             => l_input_value_id12
1689 		,p_entry_value12                => nvl(p_value12,l_value12)
1690 		,p_input_value_id13             => l_input_value_id13
1691 		,p_entry_value13                => nvl(p_value13,l_value13)
1692 		,p_input_value_id14             => l_input_value_id14
1693 		,p_entry_value14                => nvl(p_value14,l_value14)
1694 		,p_input_value_id15             => l_input_value_id15
1695 		,p_entry_value15                => nvl(l_p_value15,l_value15)
1696 		,p_effective_start_date         => l_effective_start_date
1697 		,p_effective_end_date           => l_effective_end_date
1698 		,p_update_warning               => l_update_warning);
1699              Exception
1700                when others then
1701                  rollback to upd_ent;
1702                  raise;
1703              End;
1704          End if;
1705     --
1706     --  The following logic does not work until the procedure
1707     --    py_element_entry_api.update_element_entry will return p_update_warning
1708     --    flag.
1709     --
1710  end if;
1711 End if;
1712 
1713   hr_utility.set_location(' Leaving:'||l_proc, 20);
1714 Exception when others then
1715           --
1716           -- Reset IN OUT parameters and set OUT parameters
1717           --
1718           p_process_warning := null;
1719           raise;
1720 end process_sf52_element;
1721 --
1722 end ghr_element_api;