DBA Data[Home] [Help]

PACKAGE BODY: APPS.HXT_BATCH_PROCESS

Source


1 PACKAGE BODY HXT_BATCH_PROCESS AS
2 /* $Header: hxtbat.pkb 120.25.12020000.10 2012/11/16 10:40:09 asrajago ship $ */
3 g_debug boolean := hr_utility.debug_enabled;
4   g_time_period_id      NUMBER := NULL;
5   g_lookup_not_found    EXCEPTION;
6   g_error_ins_batch_lines    EXCEPTION;  --SIR517 PWM 18FEB00
7   -- Bug 13388573
8   g_rollback_error      EXCEPTION;
9 
10   FUNCTION Call_Gen_Error(p_batch_id IN NUMBER
11                          ,p_location IN VARCHAR2
12                          ,p_error_text IN VARCHAR2
13                          ,p_oracle_error_text IN VARCHAR2 default NULL )
14   RETURN NUMBER;
15   FUNCTION Get_Transfer_Batch_Status(p_batch_id  NUMBER,
16 				     p_batch_status OUT NOCOPY VARCHAR2)
17   RETURN NUMBER;  -- SPR C352 by BC
18 
19 
20 
21 
22 -- Bug 12993528\
23 -- Created this following pay_paywsqee_pkg.GET_INPUT_VALUE_DETAILS
24 --  We also pick up the OTL Info type DFF sequence for the input values
25 --  and store that.
26 
27 procedure GET_INPUT_VALUE_DETAILS (
28 --
29 -- Returns the input value details for the element selected by an LOV
30 --
31 p_element_type_id	number,
32 p_effective_date	date,
33 p_input_value_id1	in out nocopy number,
34 p_input_value_id2	in out nocopy number,
35 p_input_value_id3	in out nocopy number,
36 p_input_value_id4	in out nocopy number,
37 p_input_value_id5	in out nocopy number,
38 p_input_value_id6	in out nocopy number,
39 p_input_value_id7	in out nocopy number,
40 p_input_value_id8	in out nocopy number,
41 p_input_value_id9	in out nocopy number,
42 p_input_value_id10	in out nocopy number,
43 p_input_value_id11	in out nocopy number,
44 p_input_value_id12	in out nocopy number,
45 p_input_value_id13	in out nocopy number,
46 p_input_value_id14	in out nocopy number,
47 p_input_value_id15	in out nocopy number,
48 p_name1			in out nocopy varchar2,
49 p_name2			in out nocopy varchar2,
50 p_name3			in out nocopy varchar2,
51 p_name4			in out nocopy varchar2,
52 p_name5			in out nocopy varchar2,
53 p_name6			in out nocopy varchar2,
54 p_name7			in out nocopy varchar2,
55 p_name8			in out nocopy varchar2,
56 p_name9			in out nocopy varchar2,
57 p_name10		in out nocopy varchar2,
58 p_name11		in out nocopy varchar2,
59 p_name12		in out nocopy varchar2,
60 p_name13		in out nocopy varchar2,
61 p_name14		in out nocopy varchar2,
62 p_name15		in out nocopy varchar2,
63 p_lookup_type1		in out nocopy varchar2,
64 p_lookup_type2		in out nocopy varchar2,
65 p_lookup_type3		in out nocopy varchar2,
66 p_lookup_type4		in out nocopy varchar2,
67 p_lookup_type5		in out nocopy varchar2,
68 p_lookup_type6		in out nocopy varchar2,
69 p_lookup_type7		in out nocopy varchar2,
70 p_lookup_type8		in out nocopy varchar2,
71 p_lookup_type9		in out nocopy varchar2,
72 p_lookup_type10		in out nocopy varchar2,
73 p_lookup_type11		in out nocopy varchar2,
74 p_lookup_type12		in out nocopy varchar2,
75 p_lookup_type13		in out nocopy varchar2,
76 p_lookup_type14		in out nocopy varchar2,
77 p_lookup_type15		in out nocopy varchar2,
78 p_otl_sequence1	in out nocopy number,
79 p_otl_sequence2	in out nocopy number,
80 p_otl_sequence3	in out nocopy number,
81 p_otl_sequence4	in out nocopy number,
82 p_otl_sequence5	in out nocopy number,
83 p_otl_sequence6	in out nocopy number,
84 p_otl_sequence7	in out nocopy number,
85 p_otl_sequence8	in out nocopy number,
86 p_otl_sequence9	in out nocopy number,
87 p_otl_sequence10	in out nocopy number,
88 p_otl_sequence11	in out nocopy number,
89 p_otl_sequence12	in out nocopy number,
90 p_otl_sequence13	in out nocopy number,
91 p_otl_sequence14	in out nocopy number,
92 p_otl_sequence15	in out nocopy number
93 ) is
94 --
95 -- This picks up the details from PAY as well as OTL's Info type DFF.
96 -- Bug 14273944
97 -- Modified the below cursor to take care of Earnings element as well
98 cursor SET_OF_INPUT_VALUES is
99 	--
100 SELECT *
101   FROM (
102 		select	iv.input_value_id,
103 		ivtl.name,
104 		iv.lookup_type,
105 		iv.uom,
106 		TO_NuMBER(REPLACE(fdfcu.application_column_name,'ATTRIBUTE')) otl_sequence,
107     iv.display_sequence
108 	from	pay_input_values_f iv,
109             pay_input_values_f_tl ivtl,
110 			fnd_descr_flex_column_usages fdfcu
111 	where	p_effective_date between iv.effective_start_date
112 					and iv.effective_end_date
113 	and	iv.element_type_id	= p_element_type_id
114         and     ivtl.INPUT_VALUE_ID     = iv.INPUT_VALUE_ID
115         and     ivtl.LANGUAGE           = userenv('LANG')
116 		and fdfcu.application_id = 809
117 		and fdfcu.descriptive_flexfield_name = 'OTC Information Types'
118 		and fdfcu.descriptive_flex_context_code = 'ELEMENT - '||to_char(p_element_type_id)
119 		and fdfcu.end_user_column_name = iv.name
120   UNION
121 	select	iv.input_value_id,
122 		ivtl.name,
123 		iv.lookup_type,
124 		iv.uom,
125     NULL otl_sequence,
126     iv.display_sequence
127 	from	pay_input_values_f iv,
128                 pay_input_values_f_tl ivtl
129 		--
130 	where	p_effective_date between iv.effective_start_date
131 					and iv.effective_end_date
132 	and	iv.element_type_id	= p_element_type_id
133         and     ivtl.INPUT_VALUE_ID     = iv.INPUT_VALUE_ID
134         and     ivtl.LANGUAGE           = userenv('LANG')
135         and     mandatory_flag          = 'X'
136 )
137 	order by display_sequence, name;
138 
139 -- Just in case the element is only in OTLR, not in OTL, then we need the old cursor.
140 cursor SET_OF_INPUT_VALUES_old is
141 	--
142 	select	iv.input_value_id,
143 		ivtl.name,
144 		iv.lookup_type,
145 		iv.uom,
146     rank() over (partition by iv.element_type_id order by iv.display_sequence, iv.name) otl_sequence,
147     iv.display_sequence
148 	from	pay_input_values_f iv,
149                 pay_input_values_f_tl ivtl
150 		--
151 	where	p_effective_date between iv.effective_start_date
152 					and iv.effective_end_date
153 	and	iv.element_type_id	= p_element_type_id
154         and     ivtl.INPUT_VALUE_ID     = iv.INPUT_VALUE_ID
155         and     ivtl.LANGUAGE           = userenv('LANG')
156 	order by iv.display_sequence, iv.name;
157 
158 
159  -- Bug 14827900
160  -- Checks if the element is present in OTL Info Types DFF.
161  CURSOR get_oit_context(p_element_type_id  IN  NUMBER)
162      IS SELECT 1
163           FROM fnd_descr_flex_contexts
164          WHERE application_id = 809
165            AND descriptive_flexfield_name = 'OTC Information Types'
166            AND descriptive_flex_context_code = 'ELEMENT - '||TO_CHAR(p_element_type_id);
167 
168 	--
169 input_value_number	integer;
170 
171 l_seq_table         IV_seq_table;
172 fetched_input_value IV_SEQ;
173 l_oit_exists        NUMBER;
174 
175 begin
176 --
177 -- First, nullify all the entry values to ensure that we overwrite any
178 -- previous fetches
179 --
180 p_input_value_id1 := null;
181 p_input_value_id2 := null;
182 p_input_value_id3 := null;
183 p_input_value_id4 := null;
184 p_input_value_id5 := null;
185 p_input_value_id6 := null;
186 p_input_value_id7 := null;
187 p_input_value_id8 := null;
188 p_input_value_id9 := null;
189 p_input_value_id10 := null;
190 p_input_value_id11 := null;
191 p_input_value_id12 := null;
192 p_input_value_id13 := null;
193 p_input_value_id14 := null;
194 p_input_value_id15 := null;
195 
196 --
197 p_name1 := null;
198 p_name2 := null;
199 p_name3 := null;
200 p_name4 := null;
201 p_name5 := null;
202 p_name6 := null;
203 p_name7 := null;
204 p_name8 := null;
205 p_name9 := null;
206 p_name10 := null;
207 p_name11 := null;
208 p_name12 := null;
209 p_name13 := null;
210 p_name14 := null;
211 p_name15 := null;
212 --
213 p_lookup_type1 := null;
214 p_lookup_type2 := null;
215 p_lookup_type3 := null;
216 p_lookup_type4 := null;
217 p_lookup_type5 := null;
218 p_lookup_type6 := null;
219 p_lookup_type7 := null;
220 p_lookup_type8 := null;
221 p_lookup_type9 := null;
222 p_lookup_type10 := null;
223 p_lookup_type11 := null;
224 p_lookup_type12 := null;
225 p_lookup_type13 := null;
226 p_lookup_type14 := null;
227 p_lookup_type15 := null;
228 
229 IF NOT g_list_iv_seq_table.EXISTS(TO_CHAR(p_element_type_id))
230 THEN
231    IF g_debug
232    THEN
233       hr_utility.trace(' IV sequence does not exist in cache ');
234       hr_utility.trace(' Checking from OTL and Pay setup ');
235    END IF;
236 
237    -- Bug 14827900
238    -- Added this cursor.
239    -- We have two kinds of elements, elements in OTL and OTLR and elements not in OTL and in OTLR.
240    -- This cursor checks if they are in OTL.
241    OPEN get_oit_context(p_element_type_id);
242 
243    FETCH get_oit_context INTO l_oit_exists;
244 
245    -- If its not in OTL, check only the PAY tables.
246    IF get_oit_context%NOTFOUND
247    THEN
248 
249       IF g_debug
250       THEN
251          hr_utility.trace(' IV sequence does not exist in OTL setup ');
252          hr_utility.trace(' Checking only Pay setup ');
253       END IF;
254 
255       OPEN set_of_input_values_old;
256       FETCH set_of_input_values_old BULK COLLECT INTO l_seq_table;
257       CLOSE set_of_input_values_old;
258 
259       IF l_seq_table.COUNT > 0
260       THEN
261          g_list_iv_seq_table(TO_CHAR(p_element_type_id)) := l_seq_table;
262       END IF;
263 
264    ELSE
265 
266       -- They do exist in OTL, check the OIT DFF along with Payroll.
267       OPEN SET_OF_INPUT_VALUES;
268       FETCH SET_OF_INPUT_VALUES BULK COLLECT INTO l_seq_table;
269       CLOSE SET_OF_INPUT_VALUES;
270 
271       IF l_seq_table.COUNT > 0
272       THEN
273          g_list_iv_seq_table(TO_CHAR(p_element_type_id)) := l_seq_table;
274       END IF;
275    END IF;
276 
277    CLOSE get_oit_context;
278 
279 END IF;
280 
281   l_seq_table := g_list_iv_seq_table(to_char(p_element_type_id));
282 
283 
284 --for fetched_input_value in set_of_input_values LOOP
285   for i IN l_seq_table.FIRST..l_seq_table.LAST
286   LOOP
287 
288      IF g_debug
289      THEN
290         hr_utility.trace(' Sequence details ');
291         hr_utility.trace('OTL Sequence : '||l_seq_table(i).otl_sequence);
292         hr_utility.trace('IV Id : '||l_seq_table(i).input_value_id);
293         hr_utility.trace('Name : '||l_seq_table(i).name);
294         hr_utility.trace('UOM : '||l_seq_table(i).UOM);
295         hr_utility.trace('Lookup type : '||l_seq_table(i).lookup_type);
296      END IF;
297   --
298      fetched_input_value := l_seq_table(i);
299      input_value_number := i;
300 
301   -- Now we need to put the input value details into the right parameters
302   -- to pass back to the form; the comments within the action for
303   -- input_value_number = 1 also apply for all the others
304   --
305   if input_value_number = 1 then
306     --
307     -- assign the out parameters
308     --
309     p_input_value_id1 	:= fetched_input_value.input_value_id;
310     p_name1		:= fetched_input_value.name;
311     p_lookup_type1	:= fetched_input_value.lookup_type;
312     p_otl_sequence1     := fetched_input_value.otl_sequence;
313     --
314   elsif input_value_number =2 then
315 --
316     p_input_value_id2 	:= fetched_input_value.input_value_id;
317     p_name2		:= fetched_input_value.name;
318     p_lookup_type2	:= fetched_input_value.lookup_type;
319     p_otl_sequence2     := fetched_input_value.otl_sequence;
320 --
321   elsif input_value_number =3 then
322 --
323     p_input_value_id3 	:= fetched_input_value.input_value_id;
324     p_name3		:= fetched_input_value.name;
325     p_lookup_type3	:= fetched_input_value.lookup_type;
326     p_otl_sequence3     := fetched_input_value.otl_sequence;
327 
328 --
329   elsif input_value_number =4 then
330 --
331     p_input_value_id4 	:= fetched_input_value.input_value_id;
332     p_name4		:= fetched_input_value.name;
333     p_lookup_type4	:= fetched_input_value.lookup_type;
334     p_otl_sequence4     := fetched_input_value.otl_sequence;
335 --
336   elsif input_value_number =5 then
337 --
338     p_input_value_id5 	:= fetched_input_value.input_value_id;
339     p_name5		:= fetched_input_value.name;
340     p_lookup_type5	:= fetched_input_value.lookup_type;
341     p_otl_sequence5     := fetched_input_value.otl_sequence;
342 --
343   elsif input_value_number =6 then
344 --
345     p_input_value_id6 	:= fetched_input_value.input_value_id;
346     p_name6		:= fetched_input_value.name;
347     p_lookup_type6	:= fetched_input_value.lookup_type;
348     p_otl_sequence6     := fetched_input_value.otl_sequence;
349 --
350   elsif input_value_number =7 then
351 --
352     p_input_value_id7 	:= fetched_input_value.input_value_id;
353     p_name7		:= fetched_input_value.name;
354     p_lookup_type7	:= fetched_input_value.lookup_type;
355     p_otl_sequence7     := fetched_input_value.otl_sequence;
356 --
357   elsif input_value_number =8 then
358 --
359     p_input_value_id8 	:= fetched_input_value.input_value_id;
360     p_name8		:= fetched_input_value.name;
361     p_lookup_type8	:= fetched_input_value.lookup_type;
362     p_otl_sequence8     := fetched_input_value.otl_sequence;
363 --
364   elsif input_value_number =9 then
365 --
366     p_input_value_id9 	:= fetched_input_value.input_value_id;
367     p_name9		:= fetched_input_value.name;
368     p_lookup_type9	:= fetched_input_value.lookup_type;
369     p_otl_sequence9     := fetched_input_value.otl_sequence;
370 --
371   elsif input_value_number =10 then
372 --
373     p_input_value_id10 		:= fetched_input_value.input_value_id;
374     p_name10			:= fetched_input_value.name;
375     p_lookup_type10		:= fetched_input_value.lookup_type;
376     p_otl_sequence10            := fetched_input_value.otl_sequence;
377 --
378   elsif input_value_number =11 then
379 --
380     p_input_value_id11 		:= fetched_input_value.input_value_id;
381     p_name11			:= fetched_input_value.name;
382     p_lookup_type11		:= fetched_input_value.lookup_type;
383     p_otl_sequence11            := fetched_input_value.otl_sequence;
384 --
385   elsif input_value_number =12 then
386 --
387     p_input_value_id12 		:= fetched_input_value.input_value_id;
388     p_name12			:= fetched_input_value.name;
389     p_lookup_type12		:= fetched_input_value.lookup_type;
390     p_otl_sequence12            := fetched_input_value.otl_sequence;
391 --
392   elsif input_value_number =13 then
393 --
394     p_input_value_id13 		:= fetched_input_value.input_value_id;
395     p_name13			:= fetched_input_value.name;
396     p_lookup_type13		:= fetched_input_value.lookup_type;
397     p_otl_sequence13            := fetched_input_value.otl_sequence;
398 --
399   elsif input_value_number =14 then
400 --
401     p_input_value_id14 		:= fetched_input_value.input_value_id;
402     p_name14			:= fetched_input_value.name;
403     p_lookup_type14		:= fetched_input_value.lookup_type;
404     p_otl_sequence14            := fetched_input_value.otl_sequence;
405 --
406   elsif input_value_number =15 then
407 --
408     p_input_value_id15 		:= fetched_input_value.input_value_id;
409     p_name15			:= fetched_input_value.name;
410     p_lookup_type15		:= fetched_input_value.lookup_type;
411     p_otl_sequence15            := fetched_input_value.otl_sequence;
412 
413   end if;
414 --
415   end loop;
416 --
417 end get_input_value_details;
418 
419 
420 
421 -----------------------------------------------------------------
422 
423 /********Bug: 4620315 **********/
424 
425 /* Function to set the default value for the profile 'HXT_MERGE_BATCH_TIMECARDS' */
426 
427 FUNCTION merge_batches
428    RETURN fnd_profile_option_values.profile_option_value%TYPE
429 AS
430    l_merge_batches                    fnd_profile_option_values.profile_option_value%TYPE;
431    l_merge_batches_default   CONSTANT fnd_profile_option_values.profile_option_value%TYPE := 'N';
432 
433 BEGIN
434    l_merge_batches := fnd_profile.VALUE ('HXT_MERGE_BATCH_TIMECARDS');
435 
436    IF (l_merge_batches IS NULL)
437    THEN
438       l_merge_batches := l_merge_batches_default;
439    END IF;
440 
441    RETURN l_merge_batches;
442 END merge_batches;
443 
444 /* Procedure to merge all TCs in the Batch range processed during Validate for BEE (normal and retro)
445    process into new separate consolidated batches for Valid/Warning/error TC's and deleting the
446    empty batches left behind. All the TC's that pass validation get copied into a new BEE Batch
447    containing all valid TCs. All TCs that fail with warning in the validation get copied into a new
448    BEE Batch containing all warning TCs. All TCs that fail with Error in the validation get copied
449    into a new BEE Batch containing all Errored TCs. */
450 
451 PROCEDURE merge_batches (p_merge_batch_name	VARCHAR2,
452 			 p_merge_batches	MERGE_BATCHES_TYPE_TABLE,
453 			 p_del_empty_batches    DEL_EMPTY_BATCHES_TYPE_TABLE,
454 			 p_bus_group_id		NUMBER,
455                          p_mode		        VARCHAR2
456 			)
457 IS
458    l_valid_batch_id		PAY_BATCH_HEADERS.BATCH_ID%TYPE;
459    l_error_batch_id		PAY_BATCH_HEADERS.BATCH_ID%TYPE;
460    l_warning_batch_id		PAY_BATCH_HEADERS.BATCH_ID%TYPE;
461    l_temp_batch_upd_id	        PAY_BATCH_HEADERS.BATCH_ID%TYPE;
462    l_batch_name		        PAY_BATCH_HEADERS.BATCH_NAME%TYPE;
463    l_valid_batch_name		PAY_BATCH_HEADERS.BATCH_NAME%TYPE;
464    l_error_batch_name		PAY_BATCH_HEADERS.BATCH_NAME%TYPE;
465    l_warning_batch_name	        PAY_BATCH_HEADERS.BATCH_NAME%TYPE;
466    l_object_version_number	PAY_BATCH_HEADERS.OBJECT_VERSION_NUMBER%TYPE;
467    l_ovn			HXT_TIMECARDS_F.OBJECT_VERSION_NUMBER%TYPE;
468    l_string1                    VARCHAR2(5);
469    l_string2                    VARCHAR2(5);
470    l_loop_index1                BINARY_INTEGER;
471    l_loop_index2                BINARY_INTEGER;
472    l_proc			VARCHAR2(72);
473    l_assignment_no		PER_ALL_ASSIGNMENTS_F.ASSIGNMENT_NUMBER%TYPE;
474    l_parent_batch_name		PAY_BATCH_HEADERS.BATCH_NAME%TYPE;
475    l_batch_type                 VARCHAR2(10);
476 
477 
478    -- Bug 13954828
479    TYPE NUMTAB IS TABLE OF NUMBER;
480    l_tc_tab NUMTAB;
481 
482 BEGIN
483    g_debug := hr_utility.debug_enabled;
484 
485    IF g_debug THEN
486       l_proc := 'hxt_batch_process.merge_batches';
487       hr_utility.set_location('Entering: '||l_proc, 10);
488    END IF;
489 
490    l_batch_name := p_merge_batch_name;
491 
492    IF p_mode = 'NR' THEN /* Non-Retro */
493       l_string1 := ' C';
494       l_string2 := '_C_';
495    ELSIF p_mode = 'R' THEN /* Retro */
496       l_string1 := ' C R';
497       l_string2 := '_C_R';
498    END IF;
499 
500    l_loop_index1 := p_merge_batches.first;
501 
502    /***  To loop through all  validated TCs and merge them into new separate consolidated batches for
503          Valid/Warning/error TCs based on the TCs 'valid_tc_retcode' value.  ***/
504    LOOP
505 
506       EXIT WHEN NOT p_merge_batches.exists(l_loop_index1);
507 
508       IF g_debug THEN
509          hr_utility.set_location('Inside merge_batches proc loop: '||p_merge_batches(l_loop_index1).batch_id, 20);
510       END IF;
511 
512       l_temp_batch_upd_id := null;
513       l_batch_type := null;
514 
515       IF p_merge_batches(l_loop_index1).valid_tc_retcode = 0 THEN  /* For valid Tcs */
516 
517          IF l_valid_batch_id is null THEN
518 	    l_valid_batch_name := l_batch_name;
519 	    IF g_debug THEN
520 	       hr_utility.set_location('Before creating new valid batch header', 30);
521 	    END IF;
522 	    pay_batch_element_entry_api.create_batch_header (p_session_date               => sysdate,
523                                                              p_batch_name                 => l_valid_batch_name,
524 	    					             p_business_group_id          => p_bus_group_id,
525                                                              p_action_if_exists           => 'I',
526 							     p_batch_reference            => l_valid_batch_name||l_string1,
527                                                              p_batch_source               => 'OTM',
528 							     p_reject_if_future_changes   => 'N',
529                                                              p_batch_id                   => l_valid_batch_id,
530                                                              p_object_version_number      => l_object_version_number
531                                                             ); /* For creating new batch for valid Tcs. */
532 	    IF g_debug THEN
533 	       hr_utility.set_location('After creating new valid batch header: '||l_valid_batch_id, 40);
534 	    END IF;
535 	    l_valid_batch_name := l_valid_batch_name||l_string2||to_char(l_valid_batch_id);
536 	    pay_batch_element_entry_api.update_batch_header (p_session_date               => sysdate,
537 					                     p_batch_id                   => l_valid_batch_id,
538 					                     p_object_version_number      => l_object_version_number,
539 					                     p_batch_name                 => l_valid_batch_name
540 							    ); /* For updating the batch_name of the newly created batch */
541 
542 	    fnd_file.put_line (fnd_file.log, 'Successful Batch Name: '||l_valid_batch_name);
543 
544 	    IF g_debug THEN
545 	       hr_utility.set_location('After updating valid batch name: '||l_valid_batch_name, 50);
546             END IF;
547 	    BEGIN
548 	       UPDATE hxt_batch_states
549 	       SET    status = 'VV'
550 	       WHERE  batch_id = l_valid_batch_id; /* For updating the status of the newly created batch */
551 	    END;
552 	    IF g_debug THEN
553 	       hr_utility.set_location('After updating valid batch status in hxt_batch_states', 60);
554 	    END IF;
555 	 END IF;
556 
557 	 l_temp_batch_upd_id := l_valid_batch_id;
558 
559       ELSIF p_merge_batches(l_loop_index1).valid_tc_retcode = 1 THEN  /* For warning Tcs */
560 
561 	 IF l_warning_batch_id is null THEN
562 	    l_warning_batch_name := l_batch_name||'_W';
563 	    IF g_debug THEN
564 	       hr_utility.set_location('Before creating new warning batch header', 70);
565 	    END IF;
566 	    pay_batch_element_entry_api.create_batch_header (p_session_date               => sysdate,
567                                                              p_batch_name                 => l_warning_batch_name,
568 		   					     p_business_group_id          => p_bus_group_id,
569                                                              p_action_if_exists           => 'I',
570                                                              p_batch_reference            => l_warning_batch_name||l_string1,
571                                                              p_batch_source               => 'OTM',
572 							     p_reject_if_future_changes   => 'N',
573                                                              p_batch_id                   => l_warning_batch_id,
574                                                              p_object_version_number      => l_object_version_number
575                                                             ); /* For creating new batch for warning Tcs. */
576 	    IF g_debug THEN
577 	       hr_utility.set_location('After creating new warning batch header: '||l_warning_batch_id, 80);
578 	    END IF;
579 	    l_warning_batch_name := l_warning_batch_name||l_string2||to_char(l_warning_batch_id);
580 	    pay_batch_element_entry_api.update_batch_header (p_session_date               => sysdate,
581 						             p_batch_id                   => l_warning_batch_id,
582 					                     p_object_version_number      => l_object_version_number,
583 				                             p_batch_name                 => l_warning_batch_name
584 							    ); /* For updating the batch_name of the newly created batch */
585 
586 	    fnd_file.put_line (fnd_file.log, 'Warning Batch Name: '||l_warning_batch_name);
587 
588 	    IF g_debug THEN
589 	       hr_utility.set_location('After updating warning batch name: '||l_warning_batch_name, 90);
590 	    END IF;
591 	    BEGIN
592 	       UPDATE hxt_batch_states
593 	       SET    status = 'VW'
594 	       WHERE  batch_id = l_warning_batch_id; /* For updating the status of the newly created batch */
595 	    END;
596 	    IF g_debug THEN
597 	       hr_utility.set_location('After updating warning batch status in hxt_batch_states', 100);
598 	    END IF;
599 	 END IF;
600 
601 	 l_temp_batch_upd_id := l_warning_batch_id;
602 	 l_batch_type := 'Warning';
603 
604       ELSIF p_merge_batches(l_loop_index1).valid_tc_retcode >= 2 THEN  /* For errored Tcs */
605 
606 	 IF l_error_batch_id is null THEN
607 	    l_error_batch_name := l_batch_name||'_E';
608 	    IF g_debug THEN
609 	       hr_utility.set_location('Before creating new error batch header', 110);
610 	    END IF;
611 	    pay_batch_element_entry_api.create_batch_header (p_session_date               => sysdate,
612                                                              p_batch_name                 => l_error_batch_name,
613 							     p_business_group_id          => p_bus_group_id,
614                                                              p_action_if_exists           => 'I',
615                                                              p_batch_reference            => l_error_batch_name||l_string1,
616 							     p_batch_source               => 'OTM',
617 							     p_reject_if_future_changes   => 'N',
618                                                              p_batch_id                   => l_error_batch_id,
619                                                              p_object_version_number      => l_object_version_number
620                                                             ); /* For creating new batch for erroded Tcs. */
621    	    IF g_debug THEN
622 	       hr_utility.set_location('after creating new error batch header: '||l_error_batch_id, 120);
623 	    END IF;
624 	    l_error_batch_name := l_error_batch_name||l_string2||to_char(l_error_batch_id);
625 	    pay_batch_element_entry_api.update_batch_header (p_session_date               => sysdate,
626 				                             p_batch_id                   => l_error_batch_id,
627 				                             p_object_version_number      => l_object_version_number,
628 				                             p_batch_name                 => l_error_batch_name
629 				                            ); /* For updating the batch_name of the newly created batch */
630 
631 	    fnd_file.put_line (fnd_file.log, 'Error Batch Name: '||l_error_batch_name);
632 
633 	    IF g_debug THEN
634 	       hr_utility.set_location('After updating error batch name: '||l_error_batch_name, 130);
635 	    END IF;
636 	    BEGIN
637 	       UPDATE hxt_batch_states
638 	       SET    status = 'VE'
639 	       WHERE  batch_id = l_error_batch_id; /* For updating the status of the newly created batch */
640 	    END;
641 	    IF g_debug THEN
642 	       hr_utility.set_location('After updating error batch status in hxt_batch_states', 140);
643 	    END IF;
644 	 END IF;
645 
646 	 l_temp_batch_upd_id := l_error_batch_id;
647 	 l_batch_type := 'Error';
648 
649       END IF;
650 
651       IF g_debug THEN
652          hr_utility.set_location('Before updating TC reference: '||p_merge_batches(l_loop_index1).tc_id||
653 				 ' Mode: '||p_mode, 150);
654       END IF;
655 
656       IF p_mode = 'NR' THEN  /* For updating the TC references of Non-Retro Batches to the newly created batch */
657 	 l_ovn := p_merge_batches(l_loop_index1).object_version_number;
658 	 HXT_DML.UPDATE_HXT_TIMECARDS (p_rowid		       => p_merge_batches(l_loop_index1).tc_rowid,
659 	   			       p_id		       => p_merge_batches(l_loop_index1).tc_id,
660 				       p_for_person_id	       => p_merge_batches(l_loop_index1).for_person_id,
661 				       p_time_period_id	       => p_merge_batches(l_loop_index1).time_period_id,
662 				       p_auto_gen_flag	       => p_merge_batches(l_loop_index1).auto_gen_flag,
663 				       p_batch_id	       => l_temp_batch_upd_id,
664 				       p_approv_person_id      => p_merge_batches(l_loop_index1).approv_person_id,
665 				       p_approved_timestamp    => p_merge_batches(l_loop_index1).approved_timestamp,
666 				       p_created_by	       => p_merge_batches(l_loop_index1).created_by,
667 				       p_creation_date	       => p_merge_batches(l_loop_index1).creation_date,
668 				       p_last_updated_by       => p_merge_batches(l_loop_index1).last_updated_by,
669 				       p_last_update_date      => p_merge_batches(l_loop_index1).last_update_date,
670 				       p_last_update_login     => p_merge_batches(l_loop_index1).last_update_login,
671 				       p_payroll_id	       => p_merge_batches(l_loop_index1).payroll_id,
672 				       p_status		       => p_merge_batches(l_loop_index1).status,
673 				       p_effective_start_date  => p_merge_batches(l_loop_index1).effective_start_date,
674 				       p_effective_end_date    => p_merge_batches(l_loop_index1).effective_end_date,
675 				       p_object_version_number => l_ovn
676 				      );
677       ELSIF p_mode = 'R' THEN  /* For updating the TC references of Retro Batches to the newly created batch */
678 	 BEGIN
679 	    UPDATE hxt_det_hours_worked_f
680 	    SET    retro_batch_id = l_temp_batch_upd_id,
681 	           object_version_number = object_version_number + 1
682 	    WHERE  retro_batch_id = p_merge_batches(l_loop_index1).batch_id
683 	    AND    tim_id = p_merge_batches(l_loop_index1).tc_id;
684 
685             -- Bug 13954828
686             -- Updating the RDB tables with the new Merge batch.
687             UPDATE hxc_ret_pay_latest_details
688                SET batch_id = l_temp_batch_upd_id
689              WHERE batch_id = p_merge_batches(l_loop_index1).batch_id
690              RETURNING timecard_id
691                   BULK COLLECT INTO l_tc_tab;
692 
693             IF l_tc_tab.COUNT > 0
694             THEN
695                hr_utility.trace('List of timecards updated in hxc_ret_pay_latest_details ');
696                FOR i IN l_tc_tab.FIRST..l_tc_tab.LAST
697                LOOP
698                   hr_utility.trace(' Timecard id '||l_tc_tab(i));
699                END LOOP;
700             END IF;
701 
702             l_tc_tab := NUMTAB();
703 
704             UPDATE hxc_ret_pay_details
705                SET batch_id = l_temp_batch_upd_id
706              WHERE batch_id = p_merge_batches(l_loop_index1).batch_id
707              RETURNING timecard_id
708                   BULK COLLECT INTO l_tc_tab;
709 
710             IF l_tc_tab.COUNT > 0
711             THEN
712                hr_utility.trace('List of timecards updated in hxc_ret_pay_details ');
713                FOR i IN l_tc_tab.FIRST..l_tc_tab.LAST
714                LOOP
715                   hr_utility.trace(' Timecard id '||l_tc_tab(i));
716                END LOOP;
717             END IF;
718 
719 
720 	 END;
721 
722 	 IF l_batch_type in ('Warning', 'Error') THEN
723             BEGIN
724 	       SELECT assignment_number
725 	       INTO   l_assignment_no
726 	       FROM   per_all_assignments_f
727 	       WHERE  person_id = (SELECT for_person_id
728 			  	   FROM   hxt_timecards_x
729 				   WHERE  id = p_merge_batches(l_loop_index1).tc_id
730 				  )
731                AND    sysdate between effective_start_date and effective_end_date;
732 
733                SELECT pbh.batch_name
734 	       INTO   l_parent_batch_name
735 	       FROM   pay_batch_headers pbh
736 	       WHERE  pbh.batch_id = (SELECT tc.batch_id
737 			              FROM   hxt_timecards_x tc
738 		    	              WHERE  tc.id = p_merge_batches(l_loop_index1).tc_id
739 				     );
740 
741 	    EXCEPTION
742 	       WHEN others THEN
743                   null;
744                   -- Bug 10143866
745                   hr_utility.trace(dbms_utility.format_error_backtrace);
746 
747 	    END;
748 
749 	    fnd_file.put_line (fnd_file.log, 'Assignment# = '|| l_assignment_no||
750 			       ' has an '||l_batch_type||' Timecard in the Batch: '||l_parent_batch_name);
751          END IF;
752 
753       END IF;
754 
755       IF g_debug THEN
756          hr_utility.set_location('After updating TC reference', 160);
757       END IF;
758 
759       l_loop_index1 := p_merge_batches.next(l_loop_index1);
760 
761    END LOOP;
762 
763    l_loop_index2 := p_del_empty_batches.first;
764 
765    LOOP /* To loop through empty batches left behind and delete them */
766 
767       EXIT WHEN NOT p_del_empty_batches.exists(l_loop_index2);
768       IF g_debug THEN
769          hr_utility.set_location('Before deleting empty batches: '||p_del_empty_batches(l_loop_index2).batch_id||
770 				 ' ovn: '||p_del_empty_batches(l_loop_index2).batch_ovn, 170);
771       END IF;
772 
773       pay_batch_element_entry_api.delete_batch_header (p_batch_id              => p_del_empty_batches(l_loop_index2).batch_id,
774 						       p_object_version_number => p_del_empty_batches(l_loop_index2).batch_ovn
775 						      );
776       IF g_debug THEN
777          hr_utility.set_location('After deleting empty batches', 180);
778       END IF;
779 
780       BEGIN
781 	 DELETE FROM hxt_batch_states
782 	 WHERE  batch_id = p_del_empty_batches(l_loop_index2).batch_id;
783       END;
784 
785       IF g_debug THEN
786          hr_utility.set_location('After deleting empty batches from hxt_batch_states', 190);
787       END IF;
788 
789       l_loop_index2 := p_del_empty_batches.next(l_loop_index2);
790 
791    END LOOP;
792 
793    IF g_debug THEN
794       hr_utility.set_location('Leaving: '||l_proc, 200);
795    END IF;
796 
797 END merge_batches;
798 
799 /********Bug: 4620315 **********/
800 
801 PROCEDURE Main_Process (
802   errbuf                OUT NOCOPY     VARCHAR2,
803   retcode               OUT NOCOPY     NUMBER,
804   p_payroll_id          IN      NUMBER,
805   p_date_earned         IN      VARCHAR2,             --ORA128  --FAS111
806   p_time_period_id      IN      NUMBER DEFAULT NULL,  -- SPR C166
807   p_from_batch_num      IN      NUMBER DEFAULT NULL,
808   p_to_batch_num        IN      NUMBER DEFAULT NULL,
809   p_ref_num             IN      VARCHAR2 DEFAULT NULL,
810   p_process_mode        IN      VARCHAR2,
811   p_bus_group_id        IN      NUMBER,
812   p_merge_flag		IN	VARCHAR2 DEFAULT '0',
813   p_merge_batch_name	IN	VARCHAR2 DEFAULT NULL,
814   p_merge_batch_specified IN	VARCHAR2 DEFAULT NULL
815   ) IS
816   -- Cursor returns all batch's with timecards for specified payroll,
817   -- time period, batch id, and batch ref that haven't been transferred.
818 l_date_earned DATE := to_date(p_date_earned,'YYYY/MM/DD HH24:MI:SS');
819 
820   -- Bug 9876599
821   -- Added condition to ignore batches which are Archived.
822 
823   CURSOR cur_batch(c_payroll_id NUMBER,
824                    c_time_period_id NUMBER,
825                    c_batch_num NUMBER,
826                    c_reference_num VARCHAR2) IS
827            SELECT pbh.batch_id,
828                   hbs.status batch_status,             --SIR020
829                   pbh.batch_reference  ,
830                   pbh.object_version_number
831              FROM pay_batch_headers pbh,               --GLOBAL
832                   hxt_batch_states hbs                 --SIR020
833             WHERE pbh.business_group_id = p_bus_group_id --GLOBAL
834               AND hbs.batch_id = pbh.batch_id          --SIR020
835               AND pbh.batch_id BETWEEN nvl(c_batch_num,0)
836 		          AND nvl(c_batch_num,999999999999)
837               AND (pbh.batch_reference LIKE nvl(c_reference_num , '%')
838                    OR (pbh.batch_reference IS NULL
839 					AND c_reference_num IS NULL))
840               AND exists (SELECT 'x'
841                             FROM hxt_timecards_x tim       --SIR017
842                            WHERE tim.batch_id = pbh.batch_id
843                                                )                                  --bug 5748118
844               AND NOT EXISTS ( SELECT 1
845 			         FROM hxc_data_sets hds,
846 				      hxt_timecards_f tim
847 				WHERE tim.batch_id = pbh.batch_id
848 				  AND hds.data_set_id = tim.data_set_id
849 				  AND hds.status IN ('OFF_LINE','ARCHIVE_IN_PROGRESS','RESTORE_IN_PROGRESS')
850 		             )
851               AND  pbh.batch_status = 'U' ;                     --bug 2709527
852 --
853 -- local variables
854 --
855   l_batch_id            NUMBER;
856   l_batch_requested     NUMBER      DEFAULT NULL;          -- SPR C166 BY BC
857   l_do_cursor           VARCHAR2(1) DEFAULT 'N';
858   l_starting_batch_num  NUMBER;                            -- SPR C166
859   l_ending_batch_num    NUMBER;                            -- SPR C166
860   l_process_mode        VARCHAR2(80);
861   l_session_date        DATE;
862   l_batch_status        VARCHAR2(30);
863   l_pay_retcode         NUMBER      DEFAULT 0;
864   l_valid_retcode       NUMBER      DEFAULT 0;
865   l_sum_retcode         NUMBER      DEFAULT 0;
866   l_main_retcode        NUMBER      DEFAULT 0;
867   l_final_pay_retcode   NUMBER      DEFAULT 0;
868   l_final_valid_retcode NUMBER      DEFAULT 0;
869   l_final_main_retcode  NUMBER      DEFAULT 0;
870   l_final_sum_retcode   NUMBER      DEFAULT 0;
871   l_rollback_retcode    NUMBER      DEFAULT 0;    -- SPR C163
872   l_final_rollback_retcode NUMBER   DEFAULT 0;    -- SPR C163
873   l_errbuf              VARCHAR2(80)DEFAULT NULL;
874   l_retcode             NUMBER      DEFAULT 0;
875 -----------------------------------------------------------------
876 -- begin SPR C352 by BC
877 -- Because changes were so numerous,I have cut and re-edited the
878 -- entire main function for cleaner audit trailing.
879 -----------------------------------------------------------------
880   l_counter             NUMBER      DEFAULT 0;
881   l_payroll_id          VARCHAR2(30)DEFAULT NULL;
882   l_return              NUMBER;
883   l_trans_batch_status  NUMBER      DEFAULT 0;
884   l_trans_status_code   VARCHAR2(10)DEFAULT NULL;
885   b_we_have_batches     BOOLEAN     DEFAULT TRUE;
886   b_range_is_active     BOOLEAN     DEFAULT FALSE;
887   b_skip_this_one       BOOLEAN     DEFAULT FALSE;
888   b_inverted_batch_nums BOOLEAN     DEFAULT FALSE;
889 
890   /********Bug: 4620315 **********/
891 
892   l_cnt			BINARY_INTEGER;
893   l_count		BINARY_INTEGER;
894   l_loop_index		BINARY_INTEGER;
895   l_merge_batches	merge_batches_type_table;
896   p_merge_batches	merge_batches_type_table;
897   l_del_empty_batches	del_empty_batches_type_table;
898 
899   /********Bug: 4620315 **********/
900 
901 BEGIN
902   g_debug :=hr_utility.debug_enabled;
903   if g_debug then
904   	hr_utility.trace(p_bus_group_id);
905   	hr_utility.trace(g_time_period_id);
906   	hr_utility.trace(l_batch_requested);
907     	hr_utility.trace(    p_ref_num);
908   end if;
909 
910 
911   l_date_earned := to_date(to_char(trunc(l_date_earned),'DD/MM/RRRR'),'DD/MM/RRRR');
912   HXT_UTIL.DEBUG('Start process.');-- debug only --HXT115
913   g_time_period_id := p_time_period_id;
914   l_payroll_id     := to_char(p_payroll_id);
915   --
916   --Validate and Transfer, Transfer, or Rollback TAMS/O data
917   --
918   l_ending_batch_num   := p_to_batch_num;
919   l_starting_batch_num := p_from_batch_num;
920   --
921   -- Determine if the user selected a single batch in either field
922   --
923   IF l_ending_batch_num IS NULL THEN
924     IF l_starting_batch_num IS NOT NULL THEN
925        l_batch_requested := l_starting_batch_num;
926     END IF;
927   ELSE
928     IF l_starting_batch_num IS NULL THEN
929        l_batch_requested := l_ending_batch_num;
930     END IF;
931   END IF;
932   --
933   -- Determine if a range has been selected by the user
934   --
935   IF l_starting_batch_num IS NOT NULL AND l_ending_batch_num IS NOT NULL THEN
936      HXT_UTIL.DEBUG('A range has been selected by the user');-- debug only --HXT115
937      b_range_is_active := TRUE;
938      l_batch_requested := l_starting_batch_num;
939      IF l_starting_batch_num > l_ending_batch_num THEN
940         b_we_have_batches := FALSE;
941         b_inverted_batch_nums := TRUE;
942      END IF;
943   END IF;
944   --
945   -- Loop through all batches in range requested by the user
946   -- (only once through this loop if single batch or no specific batch
947   --  requested)
948   --
949   WHILE b_we_have_batches LOOP
950     BEGIN
951     HXT_UTIL.DEBUG('Beginning we have batches loop');-- debug only --HXT115
952     --
953     -- Select and process all user specified batches for this payroll/reference
954     -- number
955     -- Process batch range specified by the user, else do all available
956     --
957 
958 
959     FOR batch_rec IN cur_batch(p_payroll_id,
960 			       g_time_period_id,
961 			       l_batch_requested,
962 			       p_ref_num)
963     LOOP
964       HXT_UTIL.DEBUG('Batch number is ' || TO_CHAR(batch_rec.batch_id));
965       l_batch_id := batch_rec.batch_id;
966    --  l_counter := l_counter + 1;
967       --
968       -- rollback all PayMix data per user request
969       --
970       IF p_process_mode = 'D' and batch_rec.batch_status = 'VT' THEN     --2709527
971         l_counter := l_counter + 1;
972         HXT_UTIL.DEBUG('Now ROLLING BACK');-- debug only --HXT115
973         -- Delete prior errors for this batch
974         -- Del_Prior_Errors(batch_rec.batch_id);
975         rollback_paymix(batch_rec.batch_id,
976                  g_time_period_id, l_rollback_retcode); --SPR C166 BY BC
977         IF l_rollback_retcode > l_final_rollback_retcode then
978           l_final_rollback_retcode := l_rollback_retcode;
979         END IF;
980         IF l_rollback_retcode <> 0 THEN
981              Set_Batch_Status(l_date_earned,
982 			      batch_rec.batch_id,
983 			      'VE');    --SIR020
984         END IF;
985         --
986         -- process user requests to validate Timecards
987         --
988       ELSIF p_process_mode = 'V' and batch_rec.batch_status <> 'VT' THEN
989                      l_counter := l_counter + 1;
990 
991         /********Bug: 4620315 **********/
992 	/*** To record the empty batch details ***/
993 
994 	 IF p_merge_flag = '1' THEN
995 	    IF g_debug THEN
996 	       hr_utility.trace('Populating del_empty_batches record: '||'batchid: '||batch_rec.batch_id||
997 	                        ' ovn '||batch_rec.object_version_number);
998 	    END IF;
999 	    l_cnt := NVL(l_del_empty_batches.LAST,0) +1;
1000 	    l_del_empty_batches(l_cnt).batch_id := batch_rec.batch_id;
1001 	    l_del_empty_batches(l_cnt).batch_ovn := batch_rec.object_version_number;
1002 	 END IF;
1003 
1004          /********Bug: 4620315 **********/
1005 
1006 -- Check for a valid status code
1007 --       IF batch_rec.batch_status = 'VT' THEN
1008 --          null; -- Don't revalidate batches that have been sent to PayMIX ORA128
1009 --          l_final_valid_retcode := 2;
1010 --          FND_MESSAGE.SET_NAME('HXT','HXT_39348_TC_VAL_NOT_REPROC');   -- HXT11
1011 --          Insert_Pay_Batch_Errors( batch_rec.batch_id,
1012 --                                'VE',                                  --SIR020
1013 --                                '',                                    --HXT11
1014 --                                l_return);
1015 --        ELSE
1016           --
1017           -- Validate batch, status:0=Normal, 1=Warning,
1018 	  -- 2=Stop Level Data Error, 3=System
1019           --
1020           HXT_UTIL.DEBUG('Begin timecard validation.');-- debug only --HXT115
1021           -- Delete prior errors for this batch
1022           -- Del_Prior_Errors(batch_rec.batch_id);
1023           HXT_BATCH_VAL.Val_Batch(batch_rec.batch_id,
1024 				  g_time_period_id,
1025 				  l_valid_retcode,
1026 		                  p_merge_flag,
1027 		                  p_merge_batches);
1028 
1029 	  /********Bug: 4620315 **********/
1030 	  /*** To record the validated timecards details ***/
1031 
1032 	  IF p_merge_flag = '1' THEN
1033 	     l_loop_index := p_merge_batches.first;
1034 	     LOOP
1035 	        EXIT WHEN NOT p_merge_batches.exists(l_loop_index);
1036 		l_count := NVL(l_merge_batches.LAST,0) +1;
1037                 l_merge_batches(l_count).batch_id	       := p_merge_batches(l_loop_index).batch_id;
1038 		l_merge_batches(l_count).tc_id		       := p_merge_batches(l_loop_index).tc_id;
1039 		l_merge_batches(l_count).valid_tc_retcode      := p_merge_batches(l_loop_index).valid_tc_retcode;
1040 		l_merge_batches(l_count).tc_rowid	       := p_merge_batches(l_loop_index).tc_rowid;
1041 		l_merge_batches(l_count).for_person_id	       := p_merge_batches(l_loop_index).for_person_id;
1042 		l_merge_batches(l_count).time_period_id	       := p_merge_batches(l_loop_index).time_period_id;
1043 		l_merge_batches(l_count).auto_gen_flag	       := p_merge_batches(l_loop_index).auto_gen_flag;
1044 		l_merge_batches(l_count).approv_person_id      := p_merge_batches(l_loop_index).approv_person_id;
1045 		l_merge_batches(l_count).approved_timestamp    := p_merge_batches(l_loop_index).approved_timestamp;
1046 		l_merge_batches(l_count).created_by	       := p_merge_batches(l_loop_index).created_by;
1047 		l_merge_batches(l_count).creation_date	       := p_merge_batches(l_loop_index).creation_date;
1048 		l_merge_batches(l_count).last_updated_by       := p_merge_batches(l_loop_index).last_updated_by;
1049 		l_merge_batches(l_count).last_update_date      := p_merge_batches(l_loop_index).last_update_date;
1050 		l_merge_batches(l_count).last_update_login     := p_merge_batches(l_loop_index).last_update_login;
1051 		l_merge_batches(l_count).payroll_id	       := p_merge_batches(l_loop_index).payroll_id;
1052 		l_merge_batches(l_count).status		       := p_merge_batches(l_loop_index).status;
1053 		l_merge_batches(l_count).effective_start_date  := p_merge_batches(l_loop_index).effective_start_date;
1054 		l_merge_batches(l_count).effective_end_date    := p_merge_batches(l_loop_index).effective_end_date;
1055 		l_merge_batches(l_count).object_version_number := p_merge_batches(l_loop_index).object_version_number;
1056 		l_loop_index := p_merge_batches.next(l_loop_index);
1057              END LOOP;
1058 	  END IF;
1059 
1060 	  /********Bug: 4620315 **********/
1061 
1062           --
1063           -- Set error return code from concurrent process
1064           --
1065           IF l_valid_retcode > l_final_valid_retcode then
1066             l_final_valid_retcode := l_valid_retcode;
1067           END IF;
1068           -- Successful Validation, Set batch to ready Status
1069           IF l_valid_retcode = 0 then
1070             HXT_UTIL.DEBUG('Successful timecard validation.');--debug onlyHXT115
1071             Set_Batch_Status(l_date_earned, batch_rec.batch_id, 'VV'); --SIR020
1072           END IF;
1073           -- set status to Warning and lets user know we have a TAMS/O
1074           -- User Level Data Error for this batch
1075           IF l_valid_retcode = 1 then
1076             HXT_UTIL.DEBUG('Timecard validation warnings.');-- debug only HXT115
1077             Set_Batch_Status(l_date_earned, batch_rec.batch_id, 'VW'); --SIR020
1078             FND_MESSAGE.SET_NAME('HXT','HXT_39349_CHK_IND_TCARD_ERRS'); -- HXT11
1079             Insert_Pay_Batch_Errors( batch_rec.batch_id,
1080                                   'W',
1081                                   '',                                   -- HXT11
1082                                   l_return);
1083           END IF;
1084           IF l_valid_retcode >= 2 THEN
1085             HXT_UTIL.DEBUG('Timecard validation errors.');-- debug only HXT115
1086             Set_Batch_Status(l_date_earned, batch_rec.batch_id, 'VE'); --SIR020
1087             FND_MESSAGE.SET_NAME('HXT','HXT_39349_CHK_IND_TCARD_ERRS'); --HXT11
1088             Insert_Pay_Batch_Errors( batch_rec.batch_id,
1089                                  'VE',                                  --SIR020
1090                                  '',                                    --HXT11
1091                                  l_return);
1092           END IF;
1093         --END IF; -- bug 2709527
1094       --
1095       -- Process transfer to PayMIX
1096       --
1097       ELSIF p_process_mode = 'T' and batch_rec.batch_status <> 'VT' THEN
1098            l_counter := l_counter + 1;
1099         -- Don't allow batches in a Hold status to be Transferred to PayMIX
1100         IF batch_rec.batch_status = 'H' THEN
1101            l_final_valid_retcode := 2;
1102            FND_MESSAGE.SET_NAME('HXT','HXT_39350_CANT_TRANS_HLD_PAYMX');--HXT11
1103            Insert_Pay_Batch_Errors( batch_rec.batch_id,
1104                                    'VE',                                --SIR020
1105                                    '',                                  -- HXT11
1106                                    l_return);
1107           -- Don't move to PayMIX while Timecard errors exist
1108          ELSIF batch_rec.batch_status in ('VE','ET') THEN               --SIR020
1109            l_final_valid_retcode := 2;
1110            FND_MESSAGE.SET_NAME('HXT','HXT_39351_CANT_TRANS_ERR_PAYMX');-- HXT11
1111            Insert_Pay_Batch_Errors( batch_rec.batch_id,
1112                                     'VE',                               --SIR020
1113                                     '',                                 -- HXT11
1114                                     l_return);
1115 --        ELSIF (batch_rec.batch_status = 'VT') THEN
1116 --           l_final_valid_retcode := 2;
1117 --           FND_MESSAGE.SET_NAME('HXT','HXT_39352_BTCHS_PREV_TRANS');    -- HXT11
1118 --           Insert_Pay_Batch_Errors( batch_rec.batch_id,
1119 --                                   'VE',                                --SIR020
1120 --                                   '',                                  -- HXT11
1121 --                                   l_return);
1122          ELSIF batch_rec.batch_status in ('VV','VW') THEN               --SIR020
1123            -- move to PayMIX
1124            HXT_UTIL.DEBUG('Now moving to BEE.');-- debug only --HXT115
1125            sum_to_mix(batch_rec.batch_id, g_time_period_id, l_sum_retcode);
1126            IF l_sum_retcode > l_final_sum_retcode then
1127               l_final_sum_retcode := l_sum_retcode;
1128            END IF;
1129            IF (l_sum_retcode = 0) then
1130               HXT_UTIL.DEBUG('Successful move to BEE.');-- debug only --HXT115
1131 		-- bug 848062 Fassadi the p_date_earned replaced with l_date_earned.
1132               Set_Batch_Status(l_date_earned, batch_rec.batch_id, 'VT');
1133            END IF;
1134            IF (l_sum_retcode = 3) then
1135               HXT_UTIL.DEBUG('Error moving to BEE.');-- debug only --HXT115
1136               Set_Batch_Status(l_date_earned, batch_rec.batch_id, 'VE');--SIR020
1137            END IF;
1138         ELSE
1139            l_final_valid_retcode := 2;
1140            FND_MESSAGE.SET_NAME('HXT','HXT_39353_BTCHS_MST_BE_VALDTED');-- HXT11
1141            Insert_Pay_Batch_Errors( batch_rec.batch_id,
1142                                    'VE',                                --SIR020
1143                                    '',                                  -- HXT11
1144                                    l_return);
1145         END IF; -- check status before processing
1146       ELSE
1147      	NULL; --bug2709527
1148       END IF; -- end process selections
1149       l_valid_retcode := 0;
1150       l_sum_retcode := 0;
1151     END LOOP; -- for loop process specific batch
1152     --
1153     -- Select the next batch in the range if applicable, else exit loop
1154     --
1155     IF b_range_is_active THEN
1156        IF l_batch_requested < l_ending_batch_num THEN
1157          l_batch_requested := l_batch_requested + 1;
1158          b_skip_this_one := FALSE;
1159        ELSE
1160          b_we_have_batches := FALSE;
1161        END IF;
1162     ELSE
1163        b_we_have_batches := FALSE;
1164     END IF;
1165     EXCEPTION
1166        WHEN NO_DATA_FOUND THEN
1167           IF b_range_is_active THEN
1168             IF l_batch_requested < l_ending_batch_num THEN
1169               l_batch_requested := l_batch_requested + 1;
1170               b_skip_this_one := FALSE;
1171             ELSE
1172               b_we_have_batches := FALSE;
1173             END IF;
1174           ELSE
1175             b_we_have_batches := FALSE;
1176           END IF;
1177           -- Bug 10143866
1178           -- Added this logging in case of a NO_DATA_FOUND.
1179           hr_utility.trace(dbms_utility.format_error_backtrace);
1180           hr_utility.trace('Batch '||l_batch_id||' threw a NO_DATA_FOUND');
1181           hr_utility.trace('Backtrace this error to Batch validation log ');
1182           hr_utility.trace('Skipping to next batch ');
1183        WHEN g_lookup_not_found THEN --SIR517 PWM 18FEB00
1184 		  raise g_lookup_not_found ; --propogate to the next level
1185        WHEN g_rollback_error THEN
1186           -- Bug 10143866
1187           hr_utility.trace(dbms_utility.format_error_backtrace);
1188          FND_FILE.put_line(fnd_file.log,'Rollback errored out ');
1189 --          Set_Batch_Status(l_date_earned, l_batch_id, 'VE');
1190           --commit;
1191           raise g_rollback_error;
1192        WHEN OTHERS THEN
1193           -- Bug 10143866
1194           hr_utility.trace(dbms_utility.format_error_backtrace);
1195           Set_Batch_Status(l_date_earned, l_batch_id, 'VE');
1196           Insert_Pay_Batch_Errors( l_batch_id,
1197                                    'VE',
1198                                    sqlerrm,
1199                                    l_return);
1200           --commit;
1201           IF b_range_is_active THEN
1202             IF l_batch_requested < l_ending_batch_num THEN
1203               l_batch_requested := l_batch_requested + 1;
1204               b_skip_this_one := FALSE;
1205             ELSE
1206               b_we_have_batches := FALSE;
1207             END IF;
1208           ELSE
1209             b_we_have_batches := FALSE;
1210           END IF;
1211     END; -- batches
1212   END LOOP;   -- while more batches exist in the range
1213   -- end SPR C166 BY BC
1214   -- Check for error totals to return a status from concurrent manager.
1215   -- Normal
1216   FND_MESSAGE.SET_NAME('HXT','HXT_39358_COMP_NORMAL');                  -- HXT11
1217   l_errbuf := FND_MESSAGE.GET;                                          -- HXT11
1218   FND_MESSAGE.CLEAR;                                                    -- HXT11
1219   l_retcode := 0;
1220   -- No batches seleceted at all
1221   IF l_counter = 0 THEN
1222      FND_MESSAGE.SET_NAME('HXT','HXT_39359_NO_BATCHES_SEL');            -- HXT11
1223      l_errbuf := FND_MESSAGE.GET;                                       -- HXT11
1224      FND_MESSAGE.CLEAR;                                                 -- HXT11
1225      l_retcode := 2;
1226   END IF;
1227   IF b_inverted_batch_nums = TRUE THEN
1228      FND_MESSAGE.SET_NAME('HXT','HXT_39360_STR_BTCH_NUM_TOO_LRG');      --HXT11
1229      l_errbuf := FND_MESSAGE.GET;                                       -- HXT11
1230      FND_MESSAGE.CLEAR;                                                 -- HXT11
1231      l_retcode := 2;
1232   END IF;
1233   IF l_final_rollback_retcode > 0 THEN
1234      FND_MESSAGE.SET_NAME('HXT','HXT_39361_ERR_DURING_ROLLBACK');       -- HXT11
1235      l_errbuf := FND_MESSAGE.GET;                                       -- HXT11
1236      FND_MESSAGE.CLEAR;                                                 -- HXT11
1237      l_retcode := 2;
1238   END IF;
1239   -- A warning was returned from the validate process
1240   IF l_final_valid_retcode = 1 THEN
1241      l_retcode := 1;
1242   END IF;
1243   IF l_final_valid_retcode = 2 THEN
1244      HXT_UTIL.DEBUG('l_final_valid_retcode is 2');-- debug only --HXT115
1245      FND_MESSAGE.SET_NAME('HXT','HXT_39362_BATCH_ERROR');       -- HXT11
1246      l_errbuf := FND_MESSAGE.GET;                               -- HXT11
1247      FND_MESSAGE.CLEAR;                                             -- HXT11
1248      l_retcode := 2;
1249   END IF;
1250   -- a system level error occured somewhere during processing
1251   IF (l_final_valid_retcode = 3 OR l_final_sum_retcode = 3) THEN
1252      FND_MESSAGE.SET_NAME('HXT','HXT_39363_SYSTEM_ERROR');          -- HXT11
1253      l_errbuf := FND_MESSAGE.GET;                                   -- HXT11
1254      FND_MESSAGE.CLEAR;                                             -- HXT11
1255      l_retcode := 2;
1256   END IF;
1257   retcode := l_retcode;
1258   errbuf  := l_errbuf;
1259   HXT_UTIL.DEBUG('Retcode:' || TO_CHAR(l_retcode) || ' ' || l_errbuf);-- debug only
1260 
1261   /********Bug: 4620315 **********/
1262   /*** To merge the batch TCs by calling 'merge_batches' procedure ***/
1263 
1264   IF p_merge_flag = '1' and p_process_mode = 'V' THEN
1265      IF g_debug THEN
1266         hr_utility.trace('Before calling merge_batches proc');
1267      END IF;
1268         merge_batches (p_merge_batch_name,
1269 		       l_merge_batches,
1270 		       l_del_empty_batches,
1271 		       p_bus_group_id,
1272 		       'NR'
1273 		      );
1274   END IF;
1275 
1276   /********Bug: 4620315 **********/
1277 
1278   IF retcode = 2 THEN /* Bug: 6064910 */
1279    COMMIT;
1280   END IF;
1281 
1282   EXCEPTION
1283     WHEN g_lookup_not_found THEN --SIR517 PWM 18FEB00 TESTING
1284     HXT_UTIL.DEBUG('Oops...g_lookup_not_found in procedure sum_to_mix');
1285     l_errbuf := substr(FND_MESSAGE.GET,1,65);
1286     errbuf  := l_errbuf;
1287     HXT_BATCH_PROCESS.Insert_Pay_Batch_Errors( l_batch_id,
1288                  'VE', -- RETROPAY
1289                  '',
1290                  l_return);
1291      retcode := 2;
1292      Set_Batch_Status(l_date_earned, l_batch_id, 'VE');
1293      --commit;
1294      IF retcode = 2 THEN /* Bug: 6064910 */
1295       COMMIT;
1296      END IF;
1297     WHEN g_rollback_error THEN --SIR517 PWM 18FEB00 TESTING
1298     HXT_UTIL.DEBUG('Oops...Rollback Error');
1299     l_errbuf := substr(FND_MESSAGE.GET,1,65);
1300     errbuf  := l_errbuf;
1301     FND_FILE.put_line(fnd_file.log,errbuf);
1302     raise;
1303      WHEN OTHERS THEN
1304           -- Bug 10143866
1305           hr_utility.trace(dbms_utility.format_error_backtrace);
1306         retcode := 2;
1307      FND_MESSAGE.SET_NAME('HXT','HXT_39363_SYSTEM_ERROR');
1308      l_errbuf := FND_MESSAGE.GET;
1309      FND_MESSAGE.CLEAR;
1310         errbuf  := l_errbuf;
1311          Set_Batch_Status(l_date_earned, l_batch_id, 'VE');
1312          Insert_Pay_Batch_Errors( l_batch_id,
1313                                  'VE',
1314                                  sqlerrm,
1315                                  l_return);
1316         --commit;
1317 	IF retcode = 2 THEN /* Bug: 6064910 */
1318           COMMIT;
1319         END IF;
1320 END main_process;
1321 --------------------------------------------------------------------------------
1322 FUNCTION convert_lookup (p_lookup_code IN VARCHAR2,
1323                          p_lookup_type IN VARCHAR2,
1324                          p_date_active IN DATE)
1325 RETURN VARCHAR2 IS
1326   l_meaning HR_LOOKUPS.MEANING%TYPE;
1327   cursor get_meaning_cur(p_code VARCHAR2, p_type VARCHAR2, p_date DATE) is
1328     SELECT fcl.meaning
1329       FROM hr_lookups fcl
1330      WHERE fcl.lookup_code = p_code
1331        AND fcl.lookup_type = p_type
1332        AND fcl.enabled_flag = 'Y'
1333        AND p_date BETWEEN nvl(fcl.start_date_active, p_date)
1334                       AND nvl(fcl.end_date_active, p_date);
1335 BEGIN
1336 
1337   if g_debug then
1338   	hr_utility.set_location('convert_lookup',10);
1339   end if;
1340   HXT_UTIL.DEBUG('convert_lookup - code = '||p_lookup_code||'
1341      type = '||p_lookup_type||' date = '||fnd_date.date_to_chardate(p_date_active));
1342 
1343 
1344   -- Bug 8888777
1345   -- Need to do a conversion only if IV expected is in Display format.
1346   -- Skip the conversion if IV_format is INTERNAL = Y
1347   IF p_lookup_type IS NOT NULL AND p_lookup_code IS NOT NULL
1348      AND g_IV_format = 'N'
1349   THEN
1350     if g_debug then
1351     	  hr_utility.set_location('convert_lookup',20);
1352     end if;
1353     OPEN get_meaning_cur(p_lookup_code, p_lookup_type, p_date_active);
1354     FETCH get_meaning_cur into l_meaning;
1355     if g_debug then
1356     	  hr_utility.trace('l_meaning :'||l_meaning);
1357     end if;
1358     IF get_meaning_cur%NOTFOUND then
1359       if g_debug then
1360       	    hr_utility.set_location('convert_lookup',30);
1361       end if;
1362       FND_MESSAGE.SET_NAME('HXT','HXT_39483_LOOKUP_NOT_FOUND');
1363       FND_MESSAGE.SET_TOKEN('CODE', p_lookup_code);
1364       FND_MESSAGE.SET_TOKEN('TYPE', p_lookup_type);
1365       RAISE g_lookup_not_found;
1366     END IF;
1367   ELSE
1368     if g_debug then
1369     	  hr_utility.set_location('convert_lookup',40);
1370     end if;
1371     l_meaning := p_lookup_code;
1372     if g_debug then
1373     	  hr_utility.trace('l_meaning :'||l_meaning);
1374     end if;
1375   END IF;
1376   if g_debug then
1377   	hr_utility.set_location('convert_lookup',50);
1378   end if;
1379   RETURN l_meaning;
1380 END convert_lookup;
1381 --
1382 -- This function is crated to get the lookup_code for translated
1383 -- input-value names
1384 --
1385 FUNCTION get_lookup_code (p_meaning IN VARCHAR2,
1386                          p_date_active IN DATE)
1387 RETURN VARCHAR2 IS
1388   l_lookup_code HR_LOOKUPS.lookup_code%TYPE;
1389   cursor get_lookup_code_cur is
1390     SELECT lookup_code
1391       FROM fnd_lookup_values
1392      WHERE meaning = p_meaning
1393        AND lookup_type = 'NAME_TRANSLATIONS'
1394        AND enabled_flag = 'Y'
1395        AND p_date_active BETWEEN nvl(start_date_active, p_date_active)
1396                       AND nvl(end_date_active, p_date_active);
1397 BEGIN
1398   g_debug :=hr_utility.debug_enabled;
1399   if g_debug then
1400   	hr_utility.set_location('get_lookup_code',10);
1401   end if;
1402   HXT_UTIL.DEBUG('get_lookup_ code  for meaning = '||p_meaning||'
1403    type = '||'NAME_TRANSLATIONS'||' date = '||fnd_date.date_to_chardate(p_date_active));
1404   if g_debug then
1405   	hr_utility.trace('p_meaning :'||p_meaning);
1406   end if;
1407   IF p_meaning IS NOT NULL  THEN
1408   if g_debug then
1409   	hr_utility.set_location('get_lookup_code',20);
1410   end if;
1411     OPEN get_lookup_code_cur;
1412     FETCH get_lookup_code_cur into l_lookup_code;
1413     if g_debug then
1414     	  hr_utility.trace('l_lookup_code :'||l_lookup_code);
1415     end if;
1416     IF get_lookup_code_cur%NOTFOUND then
1417         if g_debug then
1418               hr_utility.set_location('get_lookup_code',30);
1419               hr_utility.trace('get_lookup_code_cur NOT FOUND');
1420         end if;
1421   --    FND_MESSAGE.SET_NAME('HXT','HXT_39483_LOOKUP_NOT_FOUND');
1422   --    FND_MESSAGE.SET_TOKEN('CODE', p_meaning);           --SIR517 PWM 18FEB00
1423   --    FND_MESSAGE.SET_TOKEN('TYPE', 'NAME_TRANSLATIONS'); --SIR517 PWM 18FEB00
1424   --    RAISE g_lookup_not_found;
1425     null;  -- This is done to fix bug 1761779  -- 17/May/2001
1426     END IF;
1427   ELSE
1428     if g_debug then
1429     	  hr_utility.set_location('get_lookup_code',40);
1430     end if;
1431     l_lookup_code := p_meaning;
1432     if g_debug then
1433     	  hr_utility.trace('p_meaning is null');
1434           hr_utility.trace('l_lookup_code:'||l_lookup_code);
1435     end if;
1436   END IF;
1437   if g_debug then
1438   	hr_utility.trace('l_lookup_code :'||l_lookup_code);
1439   	hr_utility.set_location('get_lookup_code',50);
1440   end if;
1441   RETURN l_lookup_code;
1442 END get_lookup_code;
1443 -- Place OTM data into BEE values per input values
1444 -- HXT_UTIL.DEBUG('Putting OTM data into BEE values per input values'); --HXT115
1445 -- In order to get the input-value logic work in different legislations we need
1446 -- to create (SEED) new lookups for 'Hours' , 'Hourly Rate', 'Rate Multiple',
1447 -- and 'Rate Code' with lookup_type of 'NAME_TRANSLATION' and lookup_code
1448 -- of 'HOURS', 'HOURLY_RATE', 'RATE_MULTIPLE' and 'RATE_CODE' respectively.
1449 -- Then the customers in different countries need to create the above input
1450 -- values with the name which is directly translated from the above names for
1451 -- OTM elements.
1452 -- For example: In French the user must create an input value for 'Hours'
1453 -- to be 'Heures' and then to determine which input value 'Heures' is
1454 -- associated with we look at the hr_lookups and if we find an entry with
1455 -- lookup_type = 'NAME_TRANSLATIONS' and lookup_code = 'HOURS' and
1456 -- Meaning to be 'Heures' then we know that this input value would map
1457 -- to 'Hours'.
1458 -- What need to be noted that it is the customer's responsibilty to create
1459 -- input values which are the direct translation of 'Hours','Hourly Rate',
1460 -- 'Pay Value' , 'Rate Multiple' and 'Rate Code'
1461 --
1462 PROCEDURE dtl_to_BEE(p_values_rec IN HXT_BATCH_VALUES_V%ROWTYPE,
1463                      p_sum_retcode IN OUT NOCOPY NUMBER,
1464                      p_batch_sequence IN NUMBER)
1465 IS
1466 --l_batch_sequence PAY_BATCH_LINES.BATCH_SEQUENCE%TYPE;
1467   l_batch_line_id PAY_BATCH_LINES.BATCH_LINE_ID%TYPE;
1468   l_value_meaning hr_lookups.meaning%TYPE;
1469   l_return NUMBER;
1470   l_line_ovn number;
1471 
1472   -- Bug 12993528
1473   TYPE input_value_record IS RECORD
1474     (sequence PAY_INPUT_VALUES_F.INPUT_VALUE_ID%TYPE,
1475      name     PAY_INPUT_VALUES_F_TL.NAME%TYPE,  --FORMS60
1476      lookup   PAY_INPUT_VALUES_F.LOOKUP_TYPE%TYPE,
1477      otl_sequence  NUMBER );
1478 
1479   TYPE input_values_table IS TABLE OF input_value_record
1480     INDEX BY BINARY_INTEGER;
1481   hxt_value input_values_table;
1482 
1483   TYPE pbl_values_table IS TABLE OF PAY_BATCH_LINES.VALUE_1%TYPE
1484     INDEX BY BINARY_INTEGER;
1485   pbl_value pbl_values_table;
1486 
1487   CURSOR c_date_input_value(cp_element_type_id NUMBER
1488                          ,cp_assignment_id   NUMBER
1489                          ,cp_effective_date  DATE) IS
1490    SELECT distinct PIV.name -- PIV.display_sequence
1491    FROM --pay_element_types_f PET
1492           pay_input_values_f  PIV
1493          ,pay_accrual_plans PAP
1494          ,pay_net_calculation_rules PNCR
1495    WHERE--PET.element_type_id      = cp_element_type_id
1496  --AND    PET.element_type_id      = PIV.element_type_id
1497           PIV.element_type_id      = cp_element_type_id
1498    AND    cp_effective_date between PIV.effective_start_date
1499                                 and PIV.effective_end_date
1500    AND    PNCR.date_input_value_id = PIV.input_value_id
1501    AND    PNCR.input_value_id     <> PAP.pto_input_value_id
1502    AND    PNCR.input_value_id     <> PAP.co_input_value_id
1503    AND    PNCR.accrual_plan_id     = PAP.accrual_plan_id
1504    AND    PAP.accrual_plan_id IN
1505                 (SELECT PAPL.accrual_plan_id
1506                  FROM   pay_accrual_plans PAPL
1507                        ,pay_element_links_f PEL
1508                        ,pay_element_entries_f PEE
1509                  WHERE  PEL.element_type_id  = PAPL.accrual_plan_element_type_id
1510                  AND    cp_effective_date between PEL.effective_start_date
1511                                               and PEL.effective_end_date
1512                  AND    PEE.element_link_id  = PEL.element_link_id
1513                  AND    PEE.assignment_id    = cp_assignment_id
1514                  AND    cp_effective_date between PEE.effective_start_date
1515                                               and PEE.effective_end_date
1516                  );
1517 
1518 
1519       -- Bug 8888777
1520       -- Added the following cursor, to pick up Input values from
1521       -- the summary table.
1522       CURSOR get_input_values(p_id IN NUMBER)
1523           IS SELECT
1524                    attribute1,
1525 		   attribute2,
1526 		   attribute3,
1527 		   attribute4,
1528 		   attribute5,
1529 		   attribute6,
1530 		   attribute7,
1531 		   attribute8,
1532 		   attribute9,
1533 		   attribute10,
1534 		   attribute11,
1535 		   attribute12,
1536 		   attribute13,
1537 		   attribute14,
1538 		   attribute15
1539               FROM hxt_sum_hours_worked_f
1540              WHERE id = p_id;
1541 
1542        -- Bug 13777315
1543        -- Takes in all the parameters that determine Rollup
1544        -- The rolled up values are compared against the Normal view
1545        -- to get all the rowids the SUM is comprised of.
1546 
1547        CURSOR get_rowids( p_cost_allocation_keyflex_id  NUMBER,
1548                           p_element_type_id             NUMBER,
1549                           p_assignment_id               NUMBER,
1550                           p_batch_id                    NUMBER,
1551                           p_assignment_number           VARCHAR2,
1552                           p_concatenated_segments       VARCHAR2,
1553                           p_element_name                VARCHAR2,
1554                           p_meaning                     VARCHAR2,
1555                           p_segment1                    VARCHAR2,
1556                           p_segment2	                VARCHAR2,
1557                           p_segment3	                VARCHAR2,
1558                           p_segment4	                VARCHAR2,
1559                           p_segment5	                VARCHAR2,
1560                           p_segment6	                VARCHAR2,
1561                           p_segment7	                VARCHAR2,
1562                           p_segment8	                VARCHAR2,
1563                           p_segment9	                VARCHAR2,
1564                           p_segment10	                VARCHAR2,
1565                           p_segment11	                VARCHAR2,
1566                           p_segment12	                VARCHAR2,
1567                           p_segment13	                VARCHAR2,
1568                           p_segment14	                VARCHAR2,
1569                           p_segment15	                VARCHAR2,
1570                           p_segment16	                VARCHAR2,
1571                           p_segment17	                VARCHAR2,
1572                           p_segment18	                VARCHAR2,
1573                           p_segment19	                VARCHAR2,
1574                           p_segment20	                VARCHAR2,
1575                           p_segment21	                VARCHAR2,
1576                           p_segment22	                VARCHAR2,
1577                           p_segment23	                VARCHAR2,
1578                           p_segment24	                VARCHAR2,
1579                           p_segment25	                VARCHAR2,
1580                           p_segment26	                VARCHAR2,
1581                           p_segment27	                VARCHAR2,
1582                           p_segment28	                VARCHAR2,
1583                           p_segment29	                VARCHAR2,
1584                           p_segment30	                VARCHAR2,
1585                           p_amount                      NUMBER,
1586                           p_rate_multiple               NUMBER,
1587                           p_hourly_rate                 NUMBER,
1588                           p_flex_value                  VARCHAR2,
1589                           p_location_code               VARCHAR2,
1590                           p_fcl_tax_rule_code           VARCHAR2,
1591                           p_separate_check_flag         VARCHAR2,
1592                           p_state_name                  VARCHAR2,
1593                           p_county_name                 VARCHAR2,
1594                           p_city_name                   VARCHAR2,
1595                           p_zip_code                    VARCHAR2)
1596            IS SELECT hrw_rowid
1597                 FROM hxt_batch_values_v
1598                WHERE element_type_id            = p_element_type_id
1599                  AND assignment_id              = p_assignment_id
1600                  AND batch_id                   = p_batch_id
1601                  AND assignment_number          = p_assignment_number
1602                  AND element_name               = p_element_name
1603                  AND ( cost_allocation_keyflex_id = p_cost_allocation_keyflex_id
1604                        OR cost_allocation_keyflex_id   IS NULL)
1605                  AND ( concatenated_segments      = p_concatenated_segments
1606                        OR concatenated_segments        IS NULL)
1607                  AND ( reason                     = p_meaning
1608                        OR reason                       IS NULL)
1609                  AND ( segment1 	                = p_segment1
1610                        OR segment1 	                IS NULL)
1611                  AND ( segment2	                        = p_segment2
1612                        OR segment2	                IS NULL)
1613                  AND ( segment3	                        = p_segment3
1614                        OR segment3	                IS NULL)
1615                  AND ( segment4	                        = p_segment4
1616                        OR segment4	                IS NULL)
1617                  AND ( segment5	                        = p_segment5
1618                        OR segment5	                IS NULL)
1619                  AND ( segment6	                        = p_segment6
1620                        OR segment6	                IS NULL)
1621                  AND ( segment7	                        = p_segment7
1622                        OR segment7	                IS NULL)
1623                  AND ( segment8	                        = p_segment8
1624                        OR segment8	                IS NULL)
1625                  AND ( segment9	                        = p_segment9
1626                        OR segment9	                IS NULL)
1627                  AND ( segment10	                = p_segment10
1628                        OR segment10	                IS NULL)
1629                  AND ( segment11	                = p_segment11
1630                        OR segment11	                IS NULL)
1631                  AND ( segment12	                = p_segment12
1632                        OR segment12	                IS NULL)
1633                  AND ( segment13	                = p_segment13
1634                        OR segment13	                IS NULL)
1635                  AND ( segment14	                = p_segment14
1636                        OR segment14	                IS NULL)
1637                  AND ( segment15	                = p_segment15
1638                        OR segment15	                IS NULL)
1639                  AND ( segment16	                = p_segment16
1640                        OR segment16	                IS NULL)
1641                  AND ( segment17	                = p_segment17
1642                        OR segment17	                IS NULL)
1643                  AND ( segment18	                = p_segment18
1644                        OR segment18	                IS NULL)
1645                  AND ( segment19	                = p_segment19
1646                        OR segment19	                IS NULL)
1647                  AND ( segment20	                = p_segment20
1648                        OR segment20	                IS NULL)
1649                  AND ( segment21	                = p_segment21
1650                        OR segment21	                IS NULL)
1651                  AND ( segment22	                = p_segment22
1652                        OR segment22	                IS NULL)
1653                  AND ( segment23	                = p_segment23
1654                        OR segment23	                IS NULL)
1655                  AND ( segment24	                = p_segment24
1656                        OR segment24	                IS NULL)
1657                  AND ( segment25	                = p_segment25
1658                        OR segment25	                IS NULL)
1659                  AND ( segment26	                = p_segment26
1660                        OR segment26	                IS NULL)
1661                  AND ( segment27	                = p_segment27
1662                        OR segment27	                IS NULL)
1663                  AND ( segment28	                = p_segment28
1664                        OR segment28	                IS NULL)
1665                  AND ( segment29	                = p_segment29
1666                        OR segment29	                IS NULL)
1667                  AND ( segment30	                = p_segment30
1668                        OR segment30	                IS NULL)
1669                  AND ( amount                     = p_amount
1670                        OR amount                       IS NULL)
1671                  AND ( rate_multiple              = p_rate_multiple
1672                        OR rate_multiple                IS NULL)
1673                  AND ( hourly_rate                = p_hourly_rate
1674                        OR hourly_rate                  IS NULL)
1675                  AND ( rate_code                  = p_flex_value
1676                        OR rate_code                    IS NULL)
1677                  AND ( location_code              = p_location_code
1678                        OR location_code                IS NULL)
1679                  AND ( fcl_tax_rule_code          = p_fcl_tax_rule_code
1680                        OR fcl_tax_rule_code            IS NULL)
1681                  AND ( separate_check_flag        = p_separate_check_flag
1682                        OR separate_check_flag          IS NULL)
1683                  AND ( state_name                 = p_state_name
1684                        OR state_name                   IS NULL)
1685                  AND ( county_name                = p_county_name
1686                        OR county_name                  IS NULL)
1687                  AND ( city_name                  = p_city_name
1688                        OR city_name                    IS NULL)
1689                  AND ( zip_code                   = p_zip_code
1690                        OR zip_code                     IS NULL) ;
1691 
1692 TYPE VARCHARTAB IS TABLE OF VARCHAR2(50);
1693 l_rowtab  VARCHARTAB;
1694 
1695 l_piv_name varchar2(30);
1696 lv_pbl_flag varchar2(1) := 'N';
1697 
1698 
1699 BEGIN
1700 
1701   if g_debug then
1702   	hr_utility.set_location('dtl_to_BEE',10);
1703   end if;
1704   -- Initialize table
1705   FOR i in 1..15 LOOP
1706     hxt_value(i).sequence := null;
1707     hxt_value(i).name := null;
1708     hxt_value(i).lookup := null;
1709   END LOOP;
1710 
1711      -- Bug 8888777
1712      -- Added the following call to pick up required input values
1713      -- from the summary table.
1714 
1715      -- Bug 9774867
1716      -- Added a TO_CHAR conversion for the indexes below.
1717 
1718      IF NOT g_xiv_table.EXISTS(TO_CHAR(p_values_rec.parent_id))
1719      THEN
1720         OPEN get_input_values(p_values_rec.parent_id);
1721         FETCH get_input_values
1722           INTO g_xiv_table(TO_CHAR(p_values_rec.parent_id));
1723         CLOSE get_input_values;
1724      END IF;
1725 
1726   -- Get input values details for this element
1727 HXT_UTIL.DEBUG('Getting input values for element '||to_char(p_values_rec.element_type_id)||' date '||fnd_date.date_to_chardate(p_values_rec.date_worked)); --FORMS60 --HXT115
1728 
1729                    -- Bug 12993528
1730                    -- Replaced the pay_paywsqee_pkg call with our own new procedure.
1731                    -- Added new params otl_sequence for each of the 15 input values.
1732 
1733                    GET_INPUT_VALUE_DETAILS(p_values_rec.element_type_id,
1734                                            p_values_rec.date_worked,
1735                                            hxt_value(1).sequence,
1736                                            hxt_value(2).sequence,
1737                                            hxt_value(3).sequence,
1738                                            hxt_value(4).sequence,
1739                                            hxt_value(5).sequence,
1740                                            hxt_value(6).sequence,
1741                                            hxt_value(7).sequence,
1742                                            hxt_value(8).sequence,
1743                                            hxt_value(9).sequence,
1744                                            hxt_value(10).sequence,
1745                                            hxt_value(11).sequence,
1746                                            hxt_value(12).sequence,
1747                                            hxt_value(13).sequence,
1748                                            hxt_value(14).sequence,
1749                                            hxt_value(15).sequence,
1750                                            hxt_value(1).name,
1751                                            hxt_value(2).name,
1752                                            hxt_value(3).name,
1753                                            hxt_value(4).name,
1754                                            hxt_value(5).name,
1755                                            hxt_value(6).name,
1756                                            hxt_value(7).name,
1757                                            hxt_value(8).name,
1758                                            hxt_value(9).name,
1759                                            hxt_value(10).name,
1760                                            hxt_value(11).name,
1761                                            hxt_value(12).name,
1762                                            hxt_value(13).name,
1763                                            hxt_value(14).name,
1764                                            hxt_value(15).name,
1765                                            hxt_value(1).lookup,
1766                                            hxt_value(2).lookup,
1767                                            hxt_value(3).lookup,
1768                                            hxt_value(4).lookup,
1769                                            hxt_value(5).lookup,
1770                                            hxt_value(6).lookup,
1771                                            hxt_value(7).lookup,
1772                                            hxt_value(8).lookup,
1773                                            hxt_value(9).lookup,
1774                                            hxt_value(10).lookup,
1775                                            hxt_value(11).lookup,
1776                                            hxt_value(12).lookup,
1777                                            hxt_value(13).lookup,
1778                                            hxt_value(14).lookup,
1779                                            hxt_value(15).lookup,
1780                                            hxt_value(1).otl_sequence,
1781                                            hxt_value(2).otl_sequence,
1782                                            hxt_value(3).otl_sequence,
1783                                            hxt_value(4).otl_sequence,
1784                                            hxt_value(5).otl_sequence,
1785                                            hxt_value(6).otl_sequence,
1786                                            hxt_value(7).otl_sequence,
1787                                            hxt_value(8).otl_sequence,
1788                                            hxt_value(9).otl_sequence,
1789                                            hxt_value(10).otl_sequence,
1790                                            hxt_value(11).otl_sequence,
1791                                            hxt_value(12).otl_sequence,
1792                                            hxt_value(13).otl_sequence,
1793                                            hxt_value(14).otl_sequence,
1794                                            hxt_value(15).otl_sequence
1795                                            );
1796      if g_debug then
1797      	   hr_utility.set_location('dtl_to_BEE',20);
1798      end if;
1799   -- Place OTM data into BEE values per input values
1800   HXT_UTIL.DEBUG('Putting OTM data into BEE values per input values'); --HXT115
1801   --
1802   -- In order to get the input-value logic work in different legislations we
1803   -- need to create (SEED) new lookups for 'Hours', 'Hourly Rate',
1804   -- 'Rate Multiple', and 'Rate Code' with lookup_type of 'NAME_TRANSLATION'
1805   -- and lookup_code of 'HOURS', 'HOURLY_RATE', 'RATE_MULTIPLE' and
1806   -- 'RATE_CODE' respectively.  Then the customers in different countries
1807   -- need to create the above input values with the name which is directly
1808   -- translated from the above names for OTM elements.
1809   --
1810   -- For example: In French the user must create an input value for 'Hours'
1811   -- to be 'Heures' and then to determine which input value 'Heures' is
1812   -- associated with we look at the hr_lookups and if we find an entry with
1813   -- lookup_type = 'NAME_TRANSLATIONS' and lookup_code = 'HOURS' and Meaning
1814   -- to be 'Heures' then we know that this input vale woul map to 'Hours'.
1815   --
1816   -- What need to be noted that it is the customer's responsibilty to create
1817   -- input values which are the direct translation of 'Hours','Hourly Rate',
1818   -- 'Pay Value' , 'Rate Multiple' and 'Rate Code'
1819   --
1820   FOR i in 1..15 LOOP
1821   --
1822   -- We need to get the lookup_code for the input_value names before
1823   -- processing the further logic on the screen value for the input values.
1824   --
1825     lv_pbl_flag := 'N';
1826     if g_debug then
1827     	  hr_utility.set_location('dtl_to_BEE',30);
1828     	  hr_utility.trace('hxt_value_name_'||to_char(i)||' :'|| hxt_value(i).name);
1829           hr_utility.trace('p_values_rec.date_worked:'||p_values_rec.date_worked);
1830     end if;
1831     l_value_meaning := get_lookup_code (hxt_value(i).name,
1832                                         p_values_rec.date_worked);
1833     if g_debug then
1834     	  hr_utility.trace('l_value_meaning :'|| l_value_meaning);
1835     end if;
1836     if l_value_meaning = 'HOURS' then
1837       if g_debug then
1838       	    hr_utility.set_location('dtl_to_BEE',40);
1839       end if;
1840 
1841       -- Bug 13777315
1842       -- If IV Upgrade is done, there is no need to convert anything.
1843       -- But the value should be in canonical format to take care of conversion.
1844 
1845       IF g_iv_upgrade = 'N'
1846       THEN
1847          pbl_value(i) := convert_lookup(p_values_rec.hours,
1848                                         hxt_value(i).lookup,
1849                                         p_values_rec.date_worked);
1850 
1851       ELSIF g_iv_upgrade = 'Y'
1852       THEN
1853 
1854          pbl_value(i) := FND_NUMBER.number_to_canonical(p_values_rec.hours);
1855 
1856       END IF;
1857 
1858       if g_debug then
1859       	    hr_utility.trace('pbl_value_'||to_char(i)||' :'|| pbl_value(i));
1860       end if;
1861     elsif l_value_meaning = 'AMOUNT' then
1862       if g_debug then
1863       	    hr_utility.set_location('dtl_to_BEE',50);
1864       end if;
1865 
1866       -- Bug 13777315
1867       IF g_iv_upgrade = 'N'
1868       THEN
1869 
1870          pbl_value(i) := convert_lookup(p_values_rec.amount,
1871                                         hxt_value(i).lookup,
1872                                         p_values_rec.date_worked);
1873       ELSIF  g_iv_upgrade = 'Y'
1874       THEN
1875          pbl_value(i) := FND_NUMBER.number_to_canonical(p_values_rec.amount);
1876       END IF;
1877 
1878       if g_debug then
1879       	    hr_utility.trace('pbl_value_'||to_char(i)||' :'|| pbl_value(i));
1880       end if;
1881     elsif l_value_meaning  = 'RATE_MULTIPLE' then
1882       if g_debug then
1883       	    hr_utility.set_location('dtl_to_BEE',60);
1884       end if;
1885 
1886       -- Bug 13777315
1887       IF g_iv_upgrade = 'N'
1888       THEN
1889 
1890          pbl_value(i) := convert_lookup(p_values_rec.rate_multiple,
1891                                         hxt_value(i).lookup,
1892                                         p_values_rec.date_worked);
1893       ELSIF  g_iv_upgrade = 'Y'
1894       THEN
1895          pbl_value(i) := FND_NUMBER.number_to_canonical(p_values_rec.rate_multiple);
1896       END IF;
1897 
1898       if g_debug then
1899       	    hr_utility.trace('pbl_value_'||to_char(i)||' :'|| pbl_value(i));
1900       end if;
1901     elsif l_value_meaning = 'HOURLY_RATE' then
1902       if g_debug then
1903       	    hr_utility.set_location('dtl_to_BEE',70);
1904       end if;
1905 
1906       -- Bug 13777315
1907       IF g_iv_upgrade = 'N'
1908       THEN
1909 
1910          pbl_value(i) := convert_lookup(p_values_rec.hourly_rate,
1911                                         hxt_value(i).lookup,
1912                                         p_values_rec.date_worked);
1913       ELSIF  g_iv_upgrade = 'Y'
1914       THEN
1915          pbl_value(i) := FND_NUMBER.number_to_canonical(p_values_rec.hourly_rate);
1916       END IF;
1917 
1918       if g_debug then
1919       	    hr_utility.trace('pbl_value_'||to_char(i)||' :'|| pbl_value(i));
1920       end if;
1921     elsif l_value_meaning = 'RATE' then
1922       if g_debug then
1923       	    hr_utility.set_location('dtl_to_BEE',80);
1924       end if;
1925 
1926       -- Bug 13777315
1927       IF g_iv_upgrade = 'N'
1928       THEN
1929 
1930          pbl_value(i) := convert_lookup(p_values_rec.hourly_rate,
1931                                         hxt_value(i).lookup,
1932                                         p_values_rec.date_worked);
1933       ELSIF  g_iv_upgrade = 'Y'
1934       THEN
1935          pbl_value(i) := FND_NUMBER.number_to_canonical(p_values_rec.hourly_rate);
1936       END IF;
1937 
1938       if g_debug then
1939       	    hr_utility.trace('pbl_value_'||to_char(i)||' :'|| pbl_value(i));
1940       end if;
1941     elsif l_value_meaning = 'RATE_CODE' then
1942       if g_debug then
1943       	    hr_utility.set_location('dtl_to_BEE',90);
1944       end if;
1945       pbl_value(i) := convert_lookup(p_values_rec.rate_code,
1946                                         hxt_value(i).lookup,
1947                                         p_values_rec.date_worked);
1948       if g_debug then
1949       	    hr_utility.trace('pbl_value_'||to_char(i)||' :'|| pbl_value(i));
1950       end if;
1951 -- BEGIN US localization
1952     elsif hxt_value(i).name = 'Jurisdiction' then
1953       if g_debug then
1954       	    hr_utility.set_location('dtl_to_BEE',100);
1955       end if;
1956           if( p_values_rec.state_name is not null or
1957           p_values_rec.county_name is not null or
1958           p_values_rec.city_name is not null or
1959           p_values_rec.zip_code is not null)
1960          then
1961          pbl_value(i):= convert_lookup(  pay_ac_utility.get_geocode
1962                  (p_values_rec.state_name, p_values_rec.county_name, p_values_rec.city_name,
1963                  p_values_rec.zip_code),
1964                  hxt_value(i).lookup,
1965                  p_values_rec.date_worked);
1966          else
1967               pbl_value(i) := convert_lookup(p_values_rec.location_code,
1968                                              hxt_value(i).lookup,
1969                                              p_values_rec.date_worked);
1970          end if;
1971 
1972       if g_debug
1973       then
1974       	    hr_utility.trace('pbl_value_'||to_char(i)||' :'|| pbl_value(i));
1975       end if;
1976     elsif hxt_value(i).name = 'Deduction Processing' then
1977       if g_debug then
1978       	    hr_utility.set_location('dtl_to_BEE',110);
1979       end if;
1980       pbl_value(i) := convert_lookup(p_values_rec.fcl_tax_rule_code,
1981                                      hxt_value(i).lookup,
1982                                      p_values_rec.date_worked);
1983       if g_debug then
1984       	    hr_utility.trace('pbl_value_'||to_char(i)||' :'|| pbl_value(i));
1985       end if;
1986     elsif hxt_value(i).name = 'Separate Check' then
1987       if g_debug then
1988       	    hr_utility.set_location('dtl_to_BEE',120);
1989       end if;
1990       pbl_value(i) := convert_lookup(p_values_rec.separate_check_flag,
1991                                      hxt_value(i).lookup,
1992                                      p_values_rec.date_worked);
1993       if g_debug then
1994       	    hr_utility.trace('pbl_value_'||to_char(i)||' :'|| pbl_value(i));
1995       end if;
1996     -- END US localization
1997     elsif hxt_value(i).name is not null THEN -- pbl_value(i) := NULL;
1998       if g_debug then
1999       	    hr_utility.set_location('dtl_to_BEE',130);
2000       end if;
2001       OPEN c_date_input_value(p_values_rec.element_type_id
2002                              ,p_values_rec.assignment_id
2003                              ,p_values_rec.date_worked);
2004       LOOP
2005           if g_debug then
2006           	hr_utility.set_location('dtl_to_BEE',140);
2007           end if;
2008           FETCH c_date_input_value into l_piv_name;
2009           EXIT WHEN c_date_input_value%NOTFOUND;
2010           if g_debug then
2011           	hr_utility.trace('l_piv_name  :'||l_piv_name);
2012           	hr_utility.trace('lv_pbl_flag :'||lv_pbl_flag);
2013           end if;
2014           IF l_piv_name = hxt_value(i).name THEN
2015              if g_debug then
2016              	   hr_utility.set_location('dtl_to_BEE',150);
2017              end if;
2018           -- pbl_value(i) := to_char(p_values_rec.date_worked,'DD-MON-YYYY');
2019              pbl_value(i) := fnd_date.date_to_canonical(p_values_rec.date_worked);
2020              lv_pbl_flag := 'Y';
2021              if g_debug then
2022              	   hr_utility.trace('pbl_value_'||to_char(i)||' :'||pbl_value(i));
2023              end if;
2024              exit;
2025           END IF;
2026       END LOOP;
2027       CLOSE c_date_input_value;
2028 
2029       -- Bug 9650990
2030       -- Do this processing only if pbl_value(i) is still not set for input values with non NULL name.
2031       if g_debug then
2032        	hr_utility.trace('Before : lv_pbl_flag :'||lv_pbl_flag);
2033       end if;
2034 
2035       IF lv_pbl_flag = 'N' --THEN
2036 	-- Bug 13639441
2037         -- Added code here
2038        AND NVL(FND_PROFILE.VALUE('HXT_ALLOW_SUM_CUSTOM_ATTRIBUTE'),'N') = 'N'
2039        THEN
2040 
2041 		hr_utility.trace('Coming into new code as if profile is turned OFF');
2042 
2043 	      -- Bug 8888777
2044 	      -- Control is here means that no fixed input value is encountered, but
2045 	      -- still some IV with a Non NULL name. Convert this and copy it.
2046 
2047 	      -- Bug 9774867
2048 	      -- Added a TO_CHAR conversion for the indexes below.
2049 
2050 	      -- Bug 12993528
2051 	      -- Modified the below IF conditions to check hxt_value(i).otl_sequence
2052 	      --  instead of i.  To make it clearer, we are now comparing this otl_sequence
2053 	      --  instead of the sequence of input values.
2054 
2055 	      IF hxt_value(i).otl_sequence = 1
2056               THEN
2057                     pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute1,
2058 						   hxt_value (i).lookup,
2059 						   p_values_rec.date_worked);
2060 		     lv_pbl_flag := 'Y';
2061 	      ELSIF hxt_value(i).otl_sequence =  2
2062 	      THEN
2063 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute2,
2064 						   hxt_value (i).lookup,
2065 						   p_values_rec.date_worked);
2066 		     lv_pbl_flag := 'Y';
2067 	      ELSIF hxt_value(i).otl_sequence =  3
2068 	      THEN
2069 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute3,
2070 						   hxt_value (i).lookup,
2071 						   p_values_rec.date_worked);
2072 		     lv_pbl_flag := 'Y';
2073 	      ELSIF hxt_value(i).otl_sequence =  4
2074 	      THEN
2075 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute4,
2076 						   hxt_value (i).lookup,
2077 						   p_values_rec.date_worked);
2078 		     lv_pbl_flag := 'Y';
2079 	      ELSIF hxt_value(i).otl_sequence =  5
2080 	      THEN
2081 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute5,
2082 						   hxt_value (i).lookup,
2083 						   p_values_rec.date_worked);
2084 		     lv_pbl_flag := 'Y';
2085 	      ELSIF hxt_value(i).otl_sequence =  6
2086 	      THEN
2087 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute6,
2088 						   hxt_value (i).lookup,
2089 						   p_values_rec.date_worked);
2090 		     lv_pbl_flag := 'Y';
2091 	      ELSIF hxt_value(i).otl_sequence =  7
2092 	      THEN
2093 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute7,
2094 						   hxt_value (i).lookup,
2095 						   p_values_rec.date_worked);
2096 		     lv_pbl_flag := 'Y';
2097 	      ELSIF hxt_value(i).otl_sequence =  8
2098 	      THEN
2099 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute8,
2100 						   hxt_value (i).lookup,
2101 						   p_values_rec.date_worked);
2102 		     lv_pbl_flag := 'Y';
2103 	      ELSIF hxt_value(i).otl_sequence =  9
2104 	      THEN
2105 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute9,
2106 						   hxt_value (i).lookup,
2107 						   p_values_rec.date_worked);
2108 		     lv_pbl_flag := 'Y';
2109 	      ELSIF hxt_value(i).otl_sequence = 10
2110 	      THEN
2111 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute10,
2112 						   hxt_value (i).lookup,
2113 						   p_values_rec.date_worked);
2114 		     lv_pbl_flag := 'Y';
2115 	      ELSIF hxt_value(i).otl_sequence = 11
2116 	      THEN
2117 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute11,
2118 						   hxt_value (i).lookup,
2119 						   p_values_rec.date_worked);
2120 		     lv_pbl_flag := 'Y';
2121 	      ELSIF hxt_value(i).otl_sequence = 12
2122 	      THEN
2123 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute12,
2124 						   hxt_value (i).lookup,
2125 						   p_values_rec.date_worked);
2126 		     lv_pbl_flag := 'Y';
2127 	      ELSIF hxt_value(i).otl_sequence = 13
2128 	      THEN
2129 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute13,
2130 						   hxt_value (i).lookup,
2131 						   p_values_rec.date_worked);
2132 		     lv_pbl_flag := 'Y';
2133 	      ELSIF hxt_value(i).otl_sequence = 14
2134 	      THEN
2135 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute14,
2136 						   hxt_value (i).lookup,
2137 						   p_values_rec.date_worked);
2138 		     lv_pbl_flag := 'Y';
2139 	      ELSIF hxt_value(i).otl_sequence = 15
2140 	      THEN
2141 		    pbl_value(i) := convert_lookup(g_xiv_table(TO_CHAR(p_values_rec.parent_id)).attribute15,
2142 						   hxt_value (i).lookup,
2143 						   p_values_rec.date_worked);
2144 		     lv_pbl_flag := 'Y';
2145 	      END IF;
2146 
2147 
2148       END IF;
2149 
2150 
2151       if lv_pbl_flag = 'N' then
2152          if g_debug then
2153          	hr_utility.set_location('dtl_to_BEE',160);
2154          end if;
2155          pbl_value(i) := NULL;
2156          if g_debug then
2157          	hr_utility.trace('pbl_value_'||to_char(i)||' :'||pbl_value(i));
2158          end if;
2159       end if;
2160          if g_debug then
2161          	hr_utility.trace('lv_pbl_flag :'||lv_pbl_flag);
2162          end if;
2163     else
2164          if g_debug then
2165          	hr_utility.set_location('dtl_to_BEE',180);
2166          end if;
2167          pbl_value(i) := NULL;
2168          if g_debug then
2169          	hr_utility.trace('pbl_value_'||to_char(i)||' :'||pbl_value(i));
2170          end if;
2171     end if;
2172     if g_debug then
2173     	  hr_utility.set_location('dtl_to_BEE',190);
2174     end if;
2175     HXT_UTIL.DEBUG('value_'||to_char(i)||' = '||pbl_value(i)); --HXT115
2176   END LOOP;
2177   -- Get Batch Line ID
2178     if g_debug then
2179     	  hr_utility.set_location('dtl_to_BEE',200);
2180     end if;
2181   -- Get next sequence number
2182   -- l_batch_sequence := pay_paywsqee_pkg.next_batch_sequence(p_values_rec.batch_id);
2183   if g_debug then
2184   	hr_utility.set_location('dtl_to_BEE',210);
2185   end if;
2186   HXT_UTIL.DEBUG('batch_sequence = '||to_char(p_batch_sequence)); --HXT115
2187   -- Insert data into BEE table
2188   PAY_BATCH_ELEMENT_ENTRY_API.create_batch_line
2189   (p_session_date                  => sysdate
2190   ,p_batch_id                      => p_values_rec.batch_id
2191   ,p_batch_line_status             => 'U'
2192   ,p_assignment_id                 => p_values_rec.assignment_id
2193   ,p_assignment_number             => p_values_rec.assignment_number
2194   ,p_batch_sequence                => p_batch_sequence
2195   ,p_concatenated_segments         => p_values_rec.concatenated_segments
2196   ,p_cost_allocation_keyflex_id    => p_values_rec.cost_allocation_keyflex_id
2197   ,p_effective_date                => p_values_rec.date_worked
2198   ,p_effective_start_date          => p_values_rec.date_worked
2199   ,p_effective_end_date            => p_values_rec.date_worked
2200   ,p_element_name                  => p_values_rec.element_name
2201   ,p_element_type_id               => p_values_rec.element_type_id
2202   ,p_entry_type                    => 'E'
2203   ,p_date_earned                   => p_values_rec.date_worked
2204   ,p_reason                        => p_values_rec.reason
2205   ,p_segment1                      => p_values_rec.segment1
2206   ,p_segment2                      => p_values_rec.segment2
2207   ,p_segment3                      => p_values_rec.segment3
2208   ,p_segment4                      => p_values_rec.segment4
2209   ,p_segment5                      => p_values_rec.segment5
2210   ,p_segment6                      => p_values_rec.segment6
2211   ,p_segment7                      => p_values_rec.segment7
2212   ,p_segment8                      => p_values_rec.segment8
2213   ,p_segment9                      => p_values_rec.segment9
2214   ,p_segment10                     => p_values_rec.segment10
2215   ,p_segment11                     => p_values_rec.segment11
2216   ,p_segment12                     => p_values_rec.segment12
2217   ,p_segment13                     => p_values_rec.segment13
2218   ,p_segment14                     => p_values_rec.segment14
2219   ,p_segment15                     => p_values_rec.segment15
2220   ,p_segment16                     => p_values_rec.segment16
2221   ,p_segment17                     => p_values_rec.segment17
2222   ,p_segment18                     => p_values_rec.segment18
2223   ,p_segment19                     => p_values_rec.segment19
2224   ,p_segment20                     => p_values_rec.segment20
2225   ,p_segment21                     => p_values_rec.segment21
2226   ,p_segment22                     => p_values_rec.segment22
2227   ,p_segment23                     => p_values_rec.segment23
2228   ,p_segment24                     => p_values_rec.segment24
2229   ,p_segment25                     => p_values_rec.segment25
2230   ,p_segment26                     => p_values_rec.segment26
2231   ,p_segment27                     => p_values_rec.segment27
2232   ,p_segment28                     => p_values_rec.segment28
2233   ,p_segment29                     => p_values_rec.segment29
2234   ,p_segment30                     => p_values_rec.segment30
2235   ,p_value_1                       => pbl_value(1)
2236   ,p_value_2                       => pbl_value(2)
2237   ,p_value_3                       => pbl_value(3)
2238   ,p_value_4                       => pbl_value(4)
2239   ,p_value_5                       => pbl_value(5)
2240   ,p_value_6                       => pbl_value(6)
2241   ,p_value_7                       => pbl_value(7)
2242   ,p_value_8                       => pbl_value(8)
2243   ,p_value_9                       => pbl_value(9)
2244   ,p_value_10                      => pbl_value(10)
2245   ,p_value_11                      => pbl_value(11)
2246   ,p_value_12                      => pbl_value(12)
2247   ,p_value_13                      => pbl_value(13)
2248   ,p_value_14                      => pbl_value(14)
2249   ,p_value_15                      => pbl_value(15)
2250   ,p_batch_line_id                 => l_batch_line_id
2251   ,p_object_version_number         => l_line_ovn
2252   ,p_iv_all_internal_format          => g_IV_format	    -- Bug 8888777
2253   );
2254 HXT_UTIL.DEBUG('Successful INSERT INTO pay_batch_lines'); --HXT115
2255   -- Update OTM detail row to show BEE line entry id
2256   IF p_values_rec.hrw_rowid IS NOT NULL THEN
2257     UPDATE HXT_DET_HOURS_WORKED_F
2258       set PBL_LINE_ID = l_batch_line_id
2259     WHERE rowid = p_values_rec.hrw_rowid;
2260 
2261     IF g_debug
2262     THEN
2263        hr_utility.trace('Updated HXT_DET_HOURS_WORKED_F with line id '||l_batch_line_id);
2264     END IF;
2265 
2266   -- Bug 13777315
2267   ELSE
2268 
2269      -- Print out all the inputs for the Batch line.
2270      IF g_debug
2271      THEN
2272         hr_utility.trace(p_values_rec.cost_allocation_keyflex_id  );
2273         hr_utility.trace(p_values_rec.element_type_id );
2274         hr_utility.trace(p_values_rec.assignment_id);
2275         hr_utility.trace(p_values_rec.batch_id  );
2276         hr_utility.trace(p_values_rec.assignment_number  );
2277         hr_utility.trace(p_values_rec.concatenated_segments );
2278         hr_utility.trace(p_values_rec.element_name );
2279         hr_utility.trace(p_values_rec.reason);
2280         hr_utility.trace(p_values_rec.segment1  );
2281         hr_utility.trace(p_values_rec.segment2);
2282         hr_utility.trace(p_values_rec.segment3);
2283         hr_utility.trace(p_values_rec.segment4);
2284         hr_utility.trace(p_values_rec.segment5);
2285         hr_utility.trace(p_values_rec.segment6);
2286         hr_utility.trace(p_values_rec.segment7);
2287         hr_utility.trace(p_values_rec.segment8);
2288         hr_utility.trace(p_values_rec.segment9);
2289         hr_utility.trace(p_values_rec.segment10);
2290         hr_utility.trace(p_values_rec.segment11);
2291         hr_utility.trace(p_values_rec.segment12);
2292         hr_utility.trace(p_values_rec.segment13);
2293         hr_utility.trace(p_values_rec.segment14);
2294         hr_utility.trace(p_values_rec.segment15);
2295         hr_utility.trace(p_values_rec.segment16);
2296         hr_utility.trace(p_values_rec.segment17);
2297         hr_utility.trace(p_values_rec.segment18);
2298         hr_utility.trace(p_values_rec.segment19);
2299         hr_utility.trace(p_values_rec.segment20);
2300         hr_utility.trace(p_values_rec.segment21);
2301         hr_utility.trace(p_values_rec.segment22);
2302         hr_utility.trace(p_values_rec.segment23);
2303         hr_utility.trace(p_values_rec.segment24);
2304         hr_utility.trace(p_values_rec.segment25);
2305         hr_utility.trace(p_values_rec.segment26);
2306         hr_utility.trace(p_values_rec.segment27);
2307         hr_utility.trace(p_values_rec.segment28);
2308         hr_utility.trace(p_values_rec.segment29);
2309         hr_utility.trace(p_values_rec.segment30);
2310         hr_utility.trace(p_values_rec.amount );
2311         hr_utility.trace(p_values_rec.rate_multiple);
2312         hr_utility.trace(p_values_rec.hourly_rate  );
2313         hr_utility.trace(p_values_rec.rate_code);
2314         hr_utility.trace(p_values_rec.location_code);
2315         hr_utility.trace(p_values_rec.fcl_tax_rule_code  );
2316         hr_utility.trace(p_values_rec.separate_check_flag);
2317         hr_utility.trace(p_values_rec.state_name);
2318         hr_utility.trace(p_values_rec.county_name  );
2319         hr_utility.trace(p_values_rec.city_name );
2320         hr_utility.trace(p_values_rec.zip_code );
2321 
2322      END IF;
2323 
2324      -- Pass the input parameters to the original view
2325      -- to get the individual rowids.
2326      --  This happens only if HXT_ROLLUP_BATCH_HOURS is set.
2327      --  Eg. Reg. 8 hrs on all 5 days would have rolled up to 40 hours, in one record.
2328      --     Here, we pass the input values except date and hours to the original view
2329      --     to fetch the rowids for those 8 values.
2330 
2331      OPEN get_rowids (    p_values_rec.cost_allocation_keyflex_id,
2332                           p_values_rec.element_type_id,
2333                           p_values_rec.assignment_id,
2334                           p_values_rec.batch_id,
2335                           p_values_rec.assignment_number,
2336                           p_values_rec.concatenated_segments,
2337                           p_values_rec.element_name,
2338                           p_values_rec.reason,
2339                           p_values_rec.segment1,
2340                           p_values_rec.segment2,
2341                           p_values_rec.segment3,
2342                           p_values_rec.segment4,
2343                           p_values_rec.segment5,
2344                           p_values_rec.segment6,
2345                           p_values_rec.segment7,
2346                           p_values_rec.segment8,
2347                           p_values_rec.segment9,
2348                           p_values_rec.segment10,
2349                           p_values_rec.segment11,
2350                           p_values_rec.segment12,
2351                           p_values_rec.segment13,
2352                           p_values_rec.segment14,
2353                           p_values_rec.segment15,
2354                           p_values_rec.segment16,
2355                           p_values_rec.segment17,
2356                           p_values_rec.segment18,
2357                           p_values_rec.segment19,
2358                           p_values_rec.segment20,
2359                           p_values_rec.segment21,
2360                           p_values_rec.segment22,
2361                           p_values_rec.segment23,
2362                           p_values_rec.segment24,
2363                           p_values_rec.segment25,
2364                           p_values_rec.segment26,
2365                           p_values_rec.segment27,
2366                           p_values_rec.segment28,
2367                           p_values_rec.segment29,
2368                           p_values_rec.segment30,
2369                           p_values_rec.amount,
2370                           p_values_rec.rate_multiple,
2371                           p_values_rec.hourly_rate,
2372                           p_values_rec.rate_code,
2373                           p_values_rec.location_code,
2374                           p_values_rec.fcl_tax_rule_code,
2375                           p_values_rec.separate_check_flag,
2376                           p_values_rec.state_name,
2377                           p_values_rec.county_name,
2378                           p_values_rec.city_name,
2379                           p_values_rec.zip_code );
2380 
2381      FETCH get_rowids BULK COLLECT
2382                       INTO l_rowtab;
2383      CLOSE get_rowids;
2384 
2385      IF l_rowtab.COUNT > 0
2386      THEN
2387 
2388         -- For all the rowids we found out here, update the pbl_line_id.
2389 
2390         FORALL i IN l_rowtab.FIRST..l_rowtab.LAST
2391           UPDATE hxt_det_hours_worked_f
2392              SET pbl_line_id = l_batch_line_id
2393            WHERE rowid = CHARTOROWID(l_rowtab(i));
2394 
2395         IF g_debug
2396         THEN
2397            hr_utility.trace('Printing Rowids being updated with batch line '||l_batch_line_id);
2398            FOR i IN l_rowtab.FIRST..l_rowtab.LAST
2399            LOOP
2400                hr_utility.trace('Row -'||l_rowtab(i));
2401            END LOOP;
2402         END IF;
2403      END IF;
2404 
2405   END IF;
2406 
2407 HXT_UTIL.DEBUG('Successful UPDATE hxt_det_hours_worked_f'); --HXT115
2408 EXCEPTION
2409   WHEN g_lookup_not_found THEN
2410     HXT_UTIL.DEBUG('Oops...g_lookup_not_found'); --HXT115
2411     p_sum_retcode := 3;
2412     RAISE g_lookup_not_found; --SIR517 PWM 18FEB00 Re-raise the exception for the calling procedure
2413   WHEN others THEN
2414 HXT_UTIL.DEBUG(sqlerrm); --HXT115
2415 HXT_UTIL.DEBUG('Oops...others'); --HXT115
2416     FND_MESSAGE.SET_NAME('HXT','HXT_39354_ERR_INS_PAYMX_INFO');
2417     FND_MESSAGE.SET_TOKEN('SQLERR', sqlerrm);
2418     Insert_Pay_Batch_Errors( p_values_rec.batch_id, 'VE', '', l_return);
2419     p_sum_retcode := 3;
2420     -- Bug 10143866
2421     hr_utility.trace(dbms_utility.format_error_backtrace);
2422 
2423     RAISE g_error_ins_batch_lines; --SIR517 PWM 18FEB00 Re-raise the exception for the calling procedure
2424 END dtl_to_BEE;
2425 
2426 
2427 PROCEDURE sum_to_mix (p_batch_id IN NUMBER,
2428                       p_time_period_id IN NUMBER,
2429                       p_sum_retcode IN OUT NOCOPY NUMBER) IS
2430   PRAGMA AUTONOMOUS_TRANSACTION; --115.37
2431   CURSOR hxt_values_cur IS
2432   SELECT *
2433     FROM hxt_batch_values_v
2434    WHERE batch_id = p_batch_id ;
2435   CURSOR hxt_hours_cur IS
2436   SELECT *
2437     FROM hxt_batch_sum_hours_rollup_v
2438    WHERE batch_id = p_batch_id;
2439   CURSOR hxt_amounts_cur IS
2440   SELECT *
2441     FROM hxt_batch_sum_amounts_v
2442    WHERE batch_id = p_batch_id;
2443   l_values_rec hxt_values_cur%ROWTYPE;
2444   we_have_lines BOOLEAN;
2445   l_return NUMBER;
2446   l_batch_sequence PAY_BATCH_LINES.BATCH_SEQUENCE%TYPE;
2447 BEGIN
2448   p_sum_retcode := 0;
2449 
2450   -- Bug 8888777
2451   -- Added the following call to pick up the upgrade status during the run.
2452 
2453   g_iv_upgrade := get_upgrade_status(p_batch_id);
2454   --
2455   -- If profile value set to 'Y', sum hours only to send to BEE
2456   --
2457   IF (nvl(fnd_profile.value('HXT_ROLLUP_BATCH_HOURS'),'N') = 'Y') THEN
2458     OPEN hxt_hours_cur;
2459     FETCH hxt_hours_cur into l_values_rec;
2460     IF hxt_hours_cur%FOUND THEN
2461       we_have_lines := TRUE;
2462     ELSE
2463       we_have_lines := FALSE;
2464     END IF;
2465   --
2466   -- Otherwise, do not sum hours, send hours and amounts to BEE
2467   --
2468   ELSE
2469     OPEN  hxt_values_cur;
2470     FETCH hxt_values_cur into l_values_rec;
2471     IF hxt_values_cur%FOUND THEN
2472       we_have_lines := TRUE;
2473     ELSE
2474       we_have_lines := FALSE;
2475     END IF;
2476   END IF;
2477   l_batch_sequence := pay_paywsqee_pkg.next_batch_sequence(l_values_rec.batch_id);
2478   WHILE we_have_lines AND p_sum_retcode = 0 LOOP
2479     dtl_to_BEE(l_values_rec, p_sum_retcode,l_batch_sequence);
2480     --
2481     -- If profile value set to 'Y', then we're sending sum of hours only
2482     --
2483     IF (nvl(fnd_profile.value('HXT_ROLLUP_BATCH_HOURS'),'N') = 'Y') THEN
2484       FETCH hxt_hours_cur into l_values_rec;
2485       IF hxt_hours_cur%FOUND THEN
2486         we_have_lines := TRUE;
2487         l_batch_sequence := l_batch_sequence + 1;
2488       ELSE
2489         we_have_lines := FALSE;
2490       END IF;
2491     --
2492     -- Otherwise, we're sending hours and amounts
2493     --
2494     ELSE
2495       FETCH hxt_values_cur into l_values_rec;
2496       IF hxt_values_cur%FOUND THEN
2497         we_have_lines := TRUE;
2498         l_batch_sequence := l_batch_sequence + 1;
2499       ELSE
2500         we_have_lines := FALSE;
2501       END IF;
2502     END IF;
2503   END LOOP;
2504   --
2505   -- Close appropriate cursor
2506   --
2507   IF (nvl(fnd_profile.value('HXT_ROLLUP_BATCH_HOURS'),'N') = 'Y') THEN
2508     CLOSE hxt_hours_cur;
2509   ELSE
2510     CLOSE hxt_values_cur;
2511   END IF;
2512   --
2513   -- If profile value is set to 'Y', now send amounts only to BEE
2514   --
2515   IF (nvl(fnd_profile.value('HXT_ROLLUP_BATCH_HOURS'),'N') = 'Y') THEN
2516     OPEN hxt_amounts_cur;
2517     FETCH hxt_amounts_cur into l_values_rec;
2518     IF hxt_amounts_cur%FOUND THEN
2519       we_have_lines := TRUE;
2520     ELSE
2521       we_have_lines := FALSE;
2522     END IF;
2523     l_batch_sequence := l_batch_sequence + 1;
2524     WHILE we_have_lines AND p_sum_retcode = 0 LOOP
2525       dtl_to_BEE(l_values_rec, p_sum_retcode,l_batch_sequence);
2526   --  dtl_to_BEE(l_values_rec, p_sum_retcode);
2527       FETCH hxt_amounts_cur into l_values_rec;
2528       IF hxt_amounts_cur%FOUND THEN
2529         we_have_lines := TRUE;
2530         l_batch_sequence := l_batch_sequence + 1;
2531       ELSE
2532         we_have_lines := FALSE;
2533       END IF;
2534     END LOOP;
2535     CLOSE hxt_amounts_cur;
2536   END IF;
2537   HXT_RETRO_VAL.Mark_Rows_Complete(p_batch_id);
2538 
2539 -- Bug 9494444
2540 -- New call for Retrieval Dashboard's detail section
2541 -- Need to pick up line by line details of this batch and
2542 -- update in the Retrieval Dashboard tables.
2543   snap_retrieval_details(p_batch_id);
2544 
2545   COMMIT; --115.37
2546 HXT_UTIL.DEBUG('Successful COMMIT');
2547 EXCEPTION
2548   WHEN g_lookup_not_found THEN --SIR517 PWM 18FEB00
2549     ROLLBACK; --115.37
2550     HXT_UTIL.DEBUG('Oops...g_lookup_not_found in procedure sum_to_mix');
2551     p_sum_retcode := 3;
2552 	raise g_lookup_not_found ; --propogate to the calling procedure
2553   WHEN g_error_ins_batch_lines THEN --SIR517 PWM 18FEB00
2554     ROLLBACK; --115.37
2555     HXT_UTIL.DEBUG('Error attempting to insert paymix information');
2556     FND_MESSAGE.SET_NAME('HXT','HXT_39354_ERR_INS_PAYMX_INFO');
2557     FND_MESSAGE.SET_TOKEN('SQLERR',sqlerrm);
2558     Insert_Pay_Batch_Errors( p_batch_id, 'VE', '', l_return);
2559     HXT_UTIL.DEBUG(' back from calling insert_pay_batch_errors');
2560     p_sum_retcode := 3;
2561     raise g_error_ins_batch_lines ;
2562   WHEN others THEN
2563     ROLLBACK; --115.37
2564     HXT_UTIL.DEBUG(sqlerrm);
2565     HXT_UTIL.DEBUG('Oops...others');
2566     FND_MESSAGE.SET_NAME('HXT','HXT_39354_ERR_INS_PAYMX_INFO');
2567     FND_MESSAGE.SET_TOKEN('SQLERR', sqlerrm);
2568     Insert_Pay_Batch_Errors( p_batch_id, 'VE', '', l_return);
2569     p_sum_retcode := 3;
2570     -- Bug 10143866
2571     hr_utility.trace(dbms_utility.format_error_backtrace);
2572 
2573 END sum_to_mix;
2574 --------------------------------------------------------------------------------
2575 PROCEDURE Transfer_To_Payroll( p_batch_id       IN NUMBER
2576                              , p_payroll_id     IN VARCHAR2
2577                              , p_batch_status   IN VARCHAR2
2578                              , p_ref_num        IN VARCHAR2
2579                              , p_process_mode   IN VARCHAR2
2580                              , p_pay_retcode    IN OUT NOCOPY NUMBER) IS
2581  CURSOR cur_sess_date IS
2582           SELECT fnd_date.date_to_chardate(end_date) end_date --SIR149 --FORMS60
2583           FROM per_time_periods
2584           WHERE time_period_id = g_time_period_id;
2585   l_req_id              NUMBER;
2586   l_errbuf              VARCHAR2(80);
2587   l_retcode             NUMBER;
2588   l_session_date        VARCHAR2(30);
2589   l_to_batch            NUMBER := p_batch_id;
2590   l_num                 NUMBER;
2591   l_process_mode        VARCHAR2(80);
2592   l_return              NUMBER;  -- SPR C352 by BC
2593   l_message             VARCHAR2(256);
2594   g_pipe_session        VARCHAR2(30);
2595   get_next_item         BOOLEAN default TRUE;
2596   kount                 NUMBER default 0;
2597 BEGIN
2598 -- Clear retcode
2599    p_pay_retcode := 0;
2600    l_process_mode := p_process_mode;
2601 -- Get session date
2602   --begin SPR C166
2603   IF g_time_period_id IS NULL THEN
2604      l_session_date := fnd_date.date_to_chardate(SYSDATE); --SIR149 --FORMS60
2605   ELSE
2606      OPEN cur_sess_date;
2607      FETCH cur_sess_date INTO l_session_date;
2608      CLOSE cur_sess_date;
2609   END IF;
2610 /*--DEBUG ONLY BEGIN
2611 
2612   select 'PIPE' || userenv('sessionid')
2613     into   g_pipe_session
2614     from   dual;
2615     if g_debug then
2616     	  hr_utility.set_location('PAY_US_PDT_PROCESS.TRANSFER_TO_PAYROLL', 1);
2617     end if;
2618 --DEBUG ONLY END*/
2619      EXCEPTION
2620         WHEN OTHERS THEN
2621             FND_MESSAGE.SET_NAME('HXT','HXT_39357_BATCH_ERR');
2622             FND_MESSAGE.SET_TOKEN('MESSAGE', l_errbuf);
2623             FND_MESSAGE.SET_TOKEN('SQLERR', sqlerrm);
2624             Insert_Pay_Batch_Errors(
2625                         p_batch_id,
2626                         'VE',
2627                         '',
2628                         l_return);
2629             p_pay_retcode := 3;
2630             -- Bug 10143866
2631             hr_utility.trace(dbms_utility.format_error_backtrace);
2632 
2633 END transfer_to_payroll;
2634 ---------------------------------------------
2635 FUNCTION Call_Gen_Error( p_batch_id 		IN NUMBER
2636                         ,p_location 		IN VARCHAR2
2637                         ,p_error_text 		IN VARCHAR2
2638                         ,p_oracle_error_text 	IN VARCHAR2 default NULL )
2639 RETURN NUMBER IS
2640   --  calls error processing procedure  --
2641 BEGIN
2642            HXT_UTIL.GEN_EXCEPTION
2643                         (p_location||'. Batch Id = '||to_char(p_batch_id)
2644                         ,p_error_text
2645                         ,p_oracle_error_text
2646                         ,null);
2647    RETURN 2;
2648 END call_gen_error;
2649 -- begin SPR C352 by BC-----------------------------
2650 PROCEDURE Del_Prior_Errors( p_batch_id  NUMBER ) IS
2651   -- delete all prior batch level errors
2652   BEGIN
2653     NULL;
2654 END del_prior_errors;
2655 ---------------------------------------------------------------------
2656 PROCEDURE Set_batch_status(p_date_earned DATE,
2657 			   p_batch_id  NUMBER,
2658 			   p_status VARCHAR2 )IS
2659 BEGIN
2660      IF (p_status = 'VT' AND p_date_earned IS NOT NULL) THEN
2661         UPDATE hxt_batch_states
2662         SET    date_earned = p_date_earned
2663         WHERE  batch_id = p_batch_id;
2664      END IF;
2665      UPDATE hxt_batch_states
2666      SET    status = p_status
2667      WHERE  batch_id = p_batch_id;
2668   --COMMIT;
2669 END Set_batch_status;
2670 ------------------------------------------------------------------
2671 FUNCTION Get_Transfer_Batch_Status(p_batch_id  NUMBER,
2672 				   p_batch_status OUT NOCOPY VARCHAR2 )
2673 RETURN NUMBER IS
2674   l_batch_status        VARCHAR2(10);
2675 BEGIN
2676           SELECT status
2677           INTO l_batch_status
2678           FROM hxt_batch_states
2679           WHERE batch_id = p_batch_id;
2680   p_batch_status := l_batch_status;
2681   IF l_batch_status in ('E','VE') THEN
2682         return(2);
2683   ELSIF l_batch_status in ('VW','TW') THEN
2684         return(1);
2685   ELSE
2686         return(0);
2687   END IF;
2688   EXCEPTION
2689         WHEN OTHERS THEN
2690           -- Bug 10143866
2691           hr_utility.trace(dbms_utility.format_error_backtrace);
2692              RETURN(3);
2693 
2694 
2695 END Get_Transfer_Batch_Status;
2696 -----------------------------------------------------------
2697 PROCEDURE rollback_PayMIX(p_batch_id IN NUMBER,
2698 			  p_time_period_id IN NUMBER,
2699                           p_rollback_retcode OUT NOCOPY NUMBER) IS
2700   l_return            NUMBER DEFAULT 0;
2701   l_line_id           NUMBER DEFAULT NULL;
2702   l_sql_error         VARCHAR2(4000) DEFAULT NULL;
2703   l_new_batch         NUMBER DEFAULT 0;
2704   l_payroll_id        NUMBER;
2705   l_business_group_id NUMBER;
2706   l_batch_name        VARCHAR2(30);
2707   l_batch_reference   VARCHAR2(30);
2708   l_tim_id            NUMBER;
2709   l_batch_created     boolean;
2710   l_index             BINARY_INTEGER := 0;
2711 
2712 
2713 TYPE retro_rec IS RECORD
2714 (retro_batch_id  NUMBER,
2715  retro_ovn       NUMBER);
2716 
2717 TYPE retro_tab IS TABLE OF retro_rec INDEX BY BINARY_INTEGER;
2718 l_retro_tab retro_tab;
2719 
2720   -- Obtain start and end dates.
2721   -- If period not specified by user or period is unavailable,
2722   -- process all dates in the batch
2723   --
2724   -- Delete PayMIX cursor
2725   -- only batch lines for the time period selected by the user, all if
2726   -- none specified
2727   --
2728 --HXT11 not needed. declared in FOR loop batch_line_rec batch_line_cur%ROWTYPE;
2729      CURSOR batch_line_cur IS
2730 SELECT line.assignment_number, line.effective_date, line.batch_line_id,line.OBJECT_VERSION_NUMBER
2731   FROM pay_batch_lines line
2732  WHERE line.batch_id = p_batch_id;
2733  cursor c_get_batch_lines(p_batch_id number) is
2734 select batch_line_id,object_version_number
2735  from pay_batch_lines
2736 where batch_id = p_batch_id;
2737 -- Bug 13388573
2738 /*
2739   cursor c_get_retro_batch_ids(p_batch_id number) is
2740   SELECT distinct(hrw.retro_batch_id) retro_batch_id,pbh.object_version_number
2741     FROM hxt_det_hours_worked_f hrw,
2742          hxt_timecards_f tim,
2743          pay_batch_headers pbh
2744    WHERE hrw.tim_id = tim.id
2745      AND tim.batch_id = pbh.batch_id
2746      AND tim.batch_id = p_batch_id
2747      AND hrw.retro_batch_id IS NOT NULL;
2748 */
2749 
2750   cursor c_get_retro_batch_ids(p_batch_id number) is
2751   SELECT distinct(hrw.retro_batch_id) retro_batch_id,pbh.object_version_number,
2752          pbh.batch_status
2753     FROM hxt_det_hours_worked_f hrw,
2754          hxt_timecards_f tim,
2755          pay_batch_headers pbh
2756    WHERE hrw.tim_id = tim.id
2757      AND hrw.retro_batch_id = pbh.batch_id
2758      AND tim.batch_id = p_batch_id
2759      AND hrw.retro_batch_id IS NOT NULL;
2760 
2761      CURSOR c_get_batch_ovn(p_batch_id number) is
2762 select object_version_number
2763 from pay_batch_headers
2764 where batch_id = p_batch_id;
2765 l_batch_ovn pay_batch_headers.object_version_number%type;
2766 l_batch_line_id pay_batch_lines.batch_line_id%type;
2767 l_line_ovn pay_batch_headers.object_version_number%type;
2768 l_num VARCHAR2(5);
2769 BEGIN
2770   -- if no time period is specified, delete all PayMIX entries
2771   IF p_time_period_id IS NULL THEN
2772         -- Delete PayMIX
2773         --
2774 
2775       IF g_debug
2776       THEN
2777          hr_utility.trace('Time period is null ');
2778          hr_utility.trace('Getting Batch lines for batch id '||p_batch_id);
2779       END IF;
2780 
2781       FND_FILE.put_line(FND_FILE.log,'Processing Batch id '||p_batch_id);
2782 
2783       for l_rec in c_get_batch_lines(p_batch_id)
2784       loop
2785           FND_FILE.put_line(FND_FILE.log,'=>  Processing Batch Line id '||l_rec.batch_line_id);
2786           hr_utility.trace('=>Processing Batch Line id '||l_rec.batch_line_id);
2787 	  PAY_BATCH_ELEMENT_ENTRY_API.delete_batch_line
2788 	  (p_batch_line_id            => l_rec.batch_line_id
2789 	  ,p_object_version_number    => l_rec.object_version_number
2790 	  );
2791        end loop;
2792         -- Update Batch status
2793         --
2794         --BEGIN GLOBAL - we no longer need to manipulate PayMIX/BEE batch status;
2795         --               but we still need to manipulate HXT_BATCH_STATES
2796         UPDATE hxt_batch_states
2797            SET status = 'H'
2798          WHERE batch_id = p_batch_id;
2799 
2800         IF g_debug
2801         THEN
2802            hr_utility.trace( 'updated hxt_batch_states for this batch ');
2803         END IF;
2804            -- step 1 - delete retro_batch lines for any timecards in this (regular) batch.
2805            --Then we loop through the cursor and delete the batch lines and batches as follows.
2806         FND_FILE.put_line(FND_FILE.log,'=>Picking Retro batches for '||p_batch_id);
2807         for l_rec in c_get_retro_batch_ids(p_batch_id) loop
2808 
2809             FND_FILE.put_line(FND_FILE.log,'=>  Retro Batch Id: '||l_rec.retro_batch_id);
2810             hr_utility.trace('=>  Retro Batch Id: '||l_rec.retro_batch_id);
2811 
2812             IF l_rec.batch_status IN ( 'T','V')
2813             THEN
2814                hr_utility.trace('Retro batch '||l_rec.retro_batch_id||' is in status T');
2815                FND_FILE.put_line(FND_file.log,'Retro batch '||l_rec.retro_batch_id||' is in status Transferred or Valid');
2816                FND_FILE.put_line(FND_file.log,'Retro batch '||l_rec.retro_batch_id||' should be Unprocessed to proceed further');
2817                RAISE g_rollback_error;
2818             END IF;
2819 
2820                -- delete the batch lines
2821                 for l_line_rec in c_get_batch_lines(l_rec.retro_batch_id) loop
2822                     FND_FILE.put_line(FND_FILE.log,'=>-------  Retro Line Id: '||l_line_rec.batch_line_id);
2823                     hr_utility.trace('=>-------  Retro Line Id: '||l_line_rec.batch_line_id);
2824 			PAY_BATCH_ELEMENT_ENTRY_API.delete_batch_line
2825 			  (p_batch_line_id            => l_line_rec.batch_line_id
2826 			  ,p_object_version_number    => l_line_rec.object_version_number
2827 			  );
2828                 end loop;
2829                 -- delete the batch
2830                 -- Bug 13388573
2831                 -- Will delete the header later.
2832                     /*
2833                     	PAY_BATCH_ELEMENT_ENTRY_API.delete_batch_header
2834                     	  (p_batch_id               => l_rec.retro_batch_id
2835                     	  ,p_object_version_number  => l_rec.object_version_number
2836                     	  );
2837                     */
2838             l_index := l_index + 1;
2839             l_retro_tab(l_index).retro_batch_id  := l_rec.retro_batch_id;
2840             l_retro_tab(l_index).retro_ovn       := l_rec.object_version_number;
2841 
2842          end loop;
2843 
2844 -- step 2 - delete retro_batch for any timecards in this (regular) batch.
2845 --          we can delete it because retro processing does not re-use
2846 --          batches.
2847 -- step 3 - set pay_status, retro_batch_id for any timecards in this
2848 --          (regular) batch.
2849 --          this will set the whole timecard back to 'P', effectively
2850 --          removing the retro nature of the timecard.  when the timecard
2851 --          is resent to PayMIX, the detail rows with the most recent
2852 --          effective dates will be sent.  This is what we want, because
2853 --          those rows will include any adjustments made by time entry
2854 --          personnel.
2855 --SIR424 PWM 17JAN00 Clear the pbl_line_id during the rollback
2856         UPDATE hxt_det_hours_worked_f
2857            SET retro_batch_id = NULL,
2858                pay_status     = 'P',
2859 			   pbl_line_id = NULL
2860          WHERE rowid in (
2861            SELECT hrw.rowid
2862              FROM hxt_det_hours_worked_f hrw,
2863                   hxt_timecards_f tim
2864             WHERE hrw.tim_id = tim.id
2865               AND tim.batch_id=p_batch_id);
2866 
2867 	-- Bug 13388573
2868 	-- Deleting batch headers now.
2869 
2870 	-- Bug 14244623
2871 	-- Added the IF condition below to avoid -6512 for empty tables.
2872 	IF l_retro_tab.COUNT > 0
2873 	THEN
2874 
2875         	FOR i IN l_retro_tab.FIRST..l_retro_tab.LAST
2876         	LOOP
2877          	 FND_FILE.put_line(FND_FILE.log,'=>--Deleting header for Batch '||l_retro_tab(i).retro_batch_id);
2878          	 hr_utility.trace('=>--Deleting header for Batch '||l_retro_tab(i).retro_batch_id);
2879 
2880        	 	 PAY_BATCH_ELEMENT_ENTRY_API.delete_batch_header
2881       	 	          (p_batch_id               => l_retro_tab(i).retro_batch_id
2882        	 	          ,p_object_version_number  => l_retro_tab(i).retro_ovn
2883         		  );
2884         	END LOOP;
2885 
2886 	END IF;
2887 
2888 
2889 -- step 4 - SET the date_earned (Process Date) back to NULL on the hxt_batch_states table
2890          UPDATE hxt_batch_states
2891             SET date_earned = NULL
2892           WHERE batch_id = p_batch_id;
2893         --COMMIT;
2894         p_rollback_retcode := 0;
2895 
2896   ELSE
2897         -- When time period is specified, a split batch could occurr.
2898         -- Create a new batch header id for timecards being rolled back
2899         -- This will allow the user to send any timecards remaining
2900         -- in PayMIX on to Payroll. Rollback timecards will always get
2901         -- a new batch id so they can be processed separately.
2902         l_new_batch := hxt_time_gen.Get_Next_Batch_Id;
2903         -- Update the corresponding timecards with the new batch number
2904         -- Delete batch lines for the time period selected by the user
2905         -- Delete any existing batch line errors
2906 --HXT11FOR batch_line_rec IN batch_line_cur(l_period_start_date, l_period_end_date) LOOP
2907         FOR batch_line_rec IN batch_line_cur LOOP --HXT11
2908         -- HXT_UTIL.DEBUG(batch_line_rec.assignment_number);--debug only HXT115
2909         -- HXT_UTIL.DEBUG(TO_CHAR(batch_line_rec.from_date));--debug only HXT115
2910         -- HXT_UTIL.DEBUG(TO_CHAR(batch_line_rec.to_date));--debug only HXT115
2911         -- Locate the Timecard associated with this particular batch line.
2912         -- we will create a new batch, the first time we enter this loop
2913 		if not l_batch_created then
2914 			SELECT business_group_id, batch_name, batch_reference
2915 			  INTO l_business_group_id, l_batch_name, l_batch_reference
2916 			  FROM pay_batch_headers
2917 			 WHERE batch_id = p_batch_id;
2918 			PAY_BATCH_ELEMENT_ENTRY_API.create_batch_header
2919 			  (p_session_date                  => sysdate
2920 			  ,p_batch_name                    => l_batch_name
2921 			  ,p_batch_status                  => 'U'
2922 			  ,p_business_group_id             => l_business_group_id
2923 			  ,p_action_if_exists              => 'R'
2924 			  ,p_batch_reference               => l_batch_reference
2925 			  ,p_batch_source                  => 'OTM'
2926 			  ,p_purge_after_transfer          => 'N'
2927 			  ,p_reject_if_future_changes      => 'N'
2928 			  ,p_batch_id                      => l_new_batch
2929 			  ,p_object_version_number         => l_batch_ovn
2930 			  );
2931 			l_batch_created := true;
2932         end if;
2933         --we lock the row corresponding to the batch line id and ovn
2934         pay_btl_shd.lck(p_batch_line_id         => batch_line_rec.batch_line_id
2935                        ,p_object_version_number => batch_line_rec.object_version_number
2936                        );
2937                 SELECT DISTINCT(hrw.tim_id)
2938                 INTO l_tim_id
2939                 FROM hxt_det_hours_worked hrw, per_assignments_f asm --C421
2940                 WHERE asm.assignment_number = batch_line_rec.assignment_number
2941                 AND hrw.assignment_id = asm.assignment_id;
2942                 /* AND hrw.parent_id > 0; HXT111*/
2943         -- Set a new batch number for timecards with elements being
2944         -- deleted from PayMIX
2945                 UPDATE hxt_timecards tim
2946                 SET tim.batch_id = l_new_batch
2947                  WHERE tim.batch_id = p_batch_id
2948                    AND tim.id = l_tim_id;
2949 -- Delete actual PayMIX batch lines
2950        PAY_BATCH_ELEMENT_ENTRY_API.delete_batch_line
2951 		  (p_batch_line_id            => batch_line_rec.batch_line_id
2952 		  ,p_object_version_number    => batch_line_rec.object_version_number
2953 		  );
2954 END LOOP;
2955 	-- Add the new batch header line for all rollback timecards
2956 	OPEN c_get_batch_lines (p_batch_id);
2957 FETCH c_get_batch_lines INTO l_batch_line_id, l_line_ovn;
2958 IF c_get_batch_lines%NOTFOUND
2959 THEN
2960     -- no batch lines found. So we can delete this batch
2961    OPEN c_get_batch_ovn (p_batch_id);
2962    FETCH c_get_batch_ovn INTO l_batch_ovn;
2963    CLOSE c_get_batch_ovn;
2964    pay_batch_element_entry_api.delete_batch_header (
2965       p_batch_id                   => p_batch_id,
2966       p_object_version_number      => l_batch_ovn
2967    );
2968 END IF;
2969 CLOSE c_get_batch_lines;
2970   END IF; -- timeperiod NULL
2971   --COMMIT;
2972   p_rollback_retcode := 0;
2973 EXCEPTION
2974    -- Bug 13388573
2975    -- Modified this section to do ROLLBACK first and then Raise instead of adjustng batch status.
2976    WHEN OTHERS THEN
2977         ROLLBACK;
2978         HXT_UTIL.DEBUG('Error: ' || sqlerrm); --HXT115
2979         l_sql_error := sqlerrm;
2980         FND_FILE.put_line(fnd_file.log,'Error: '||sqlerrm);
2981         p_rollback_retcode := 3;
2982         -- Bug 10143866
2983         hr_utility.trace(dbms_utility.format_error_backtrace);
2984         RAISE g_rollback_error;
2985 
2986 END rollback_PayMIX;
2987 -------------------------------------------------------------------
2988 PROCEDURE Insert_Pay_Batch_Errors( p_batch_id IN NUMBER,
2989                                    p_error_level IN VARCHAR2,
2990                                    p_exception_details IN VARCHAR2,
2991                                    p_return_code OUT NOCOPY NUMBER)IS
2992  l_error_msg     VARCHAR2(240);
2993 BEGIN
2994   IF p_exception_details IS NULL THEN
2995      l_error_msg := FND_MESSAGE.GET;
2996      FND_MESSAGE.CLEAR;
2997   ELSE
2998      l_ERROR_MSG := p_exception_details;
2999   END IF;
3000      HXT_UTIL.GEN_EXCEPTION
3001                  ('Batch processing. Batch Id = '||to_char(p_batch_id)
3002                   ,l_error_msg
3003                   ,null
3004                   ,null);
3005   --COMMIT;
3006   p_return_code := 0;
3007   EXCEPTION
3008     WHEN OTHERS THEN
3009        p_return_code := 1;
3010        -- Bug 10143866
3011        hr_utility.trace(dbms_utility.format_error_backtrace);
3012 
3013 END Insert_Pay_Batch_Errors;
3014 ------------------------------------------------------------------
3015 -- end SPR C163, C166 by BC
3016 ------------------------------------------------------------------
3017 PROCEDURE CALL_GEN_ERROR2 ( p_batch_id  IN NUMBER
3018                           , p_tim_id  IN NUMBER
3019                           , p_hrw_id  IN NUMBER
3020                           , p_time_period_id   IN NUMBER
3021                           , p_error_msg IN VARCHAR2
3022                           , p_loc IN VARCHAR2
3023                           , p_sql_err IN VARCHAR2
3024                           , p_TYPE IN VARCHAR2) IS                   --HXT11i1
3025  CURSOR  tim_dates is
3026  SELECT  effective_start_date,
3027          effective_end_date
3028  FROM    HXT_TIMECARDS_X
3029  WHERE   id = p_tim_id;
3030  l_eff_start  DATE;
3031  l_eff_end  DATE;
3032 BEGIN
3033    OPEN tim_dates;
3034    FETCH tim_dates into l_eff_start, l_eff_end;
3035    if tim_dates%FOUND then
3036       HXT_UTIL.GEN_ERROR(p_batch_id
3037                         , p_tim_id
3038                         , p_hrw_id
3039                         , p_time_period_id
3040                         , p_error_msg
3041                         , p_loc
3042                         , p_sql_err
3043                         , l_eff_start
3044                         , l_eff_end
3045                         , p_type);                                --HXT11i1
3046    END IF;
3047    CLOSE tim_dates;
3048   END call_gen_error2;
3049 
3050 -- Bug 8888777
3051 -- Below function added to pick up the upgrade status.
3052 
3053 FUNCTION get_upgrade_status(p_batch_id     IN  NUMBER)
3054 RETURN VARCHAR2
3055 IS
3056 
3057      CURSOR get_bg_id
3058          IS SELECT business_group_id
3059               FROM pay_batch_headers
3060              WHERE batch_id = p_batch_id;
3061 
3062      l_bg_id    NUMBER;
3063 
3064 BEGIN
3065      OPEN get_bg_id;
3066      FETCH get_bg_id INTO l_bg_id;
3067      CLOSE get_bg_id;
3068      pay_core_utils.get_upgrade_status(l_bg_id,'BEE_IV_UPG',g_IV_UPGRADE);
3069 
3070      IF g_iv_upgrade = 'Y'
3071      THEN
3072         g_IV_format := 'Y';
3073      ELSE
3074         g_IV_format := 'N';
3075      END IF;
3076      RETURN g_iv_upgrade;
3077 
3078 END get_upgrade_status;
3079 
3080 -- Bug 9494444
3081 -- Added this new procedure to snap the details of this
3082 -- batch upto lines in pay_batch_lines to the tables for
3083 -- recording this for Dashboard.
3084 
3085 PROCEDURE snap_retrieval_details(p_batch_id  IN NUMBER)
3086 IS
3087 
3088 
3089      -- Datatypes
3090      TYPE VARCHARTAB IS TABLE OF VARCHAR2(100);
3091      TYPE NUMBERTAB  IS TABLE OF NUMBER;
3092      TYPE DATETAB    IS TABLE OF DATE;
3093 
3094      resource_id_tab               NUMBERTAB;
3095      time_building_block_id_tab    NUMBERTAB;
3096      approval_status_tab           VARCHARTAB;
3097      start_time_tab                DATETAB;
3098      stop_time_tab                 DATETAB;
3099      org_id_tab                    NUMBERTAB;
3100      business_group_id_tab         NUMBERTAB;
3101      timecard_id_tab               NUMBERTAB;
3102      app_set_id_tab                NUMBERTAB;
3103      attribute1_tab                VARCHARTAB;
3104      attribute2_tab                VARCHARTAB;
3105      attribute3_tab                VARCHARTAB;
3106      measure_tab                   NUMBERTAB;
3107      object_version_number_tab     NUMBERTAB;
3108      old_ovn_tab                   NUMBERTAB;
3109      old_measure_tab               NUMBERTAB;
3110      old_attribute1_tab            VARCHARTAB;
3111      old_attribute2_tab            VARCHARTAB;
3112      old_attribute3_tab            VARCHARTAB;
3113      pbl_id_tab                    NUMBERTAB;
3114      retro_pbl_id_tab              NUMBERTAB;
3115      old_pbl_id_tab                NUMBERTAB;
3116      request_id_tab                NUMBERTAB;
3117      old_request_id_tab            NUMBERTAB;
3118      batch_id_tab                  NUMBERTAB;
3119      retro_batch_id_tab            NUMBERTAB;
3120      old_batch_id_tab              NUMBERTAB;
3121      rowid_tab                     VARCHARTAB;
3122 
3123      -- Bug 12919783
3124      -- Added new tables for additional columns
3125      hxt_measure_tab               NUMBERTAB;
3126      hxt_att1_tab                  NUMBERTAB;
3127      hxt_att2_tab                  NUMBERTAB;
3128      hxt_att3_tab                  NUMBERTAB;
3129      hxt_request_tab               NUMBERTAB;
3130 
3131      -- To pick up each timecard in the batch.
3132      CURSOR get_timecards(p_batch_id   IN NUMBER)
3133          IS SELECT id
3134               FROM hxt_timecards_f
3135              WHERE batch_id = p_batch_id;
3136 
3137 
3138      -- To pick up the individual details
3139 
3140      -- Bug 12919783
3141      -- Added new columns to take care of Rollback Batches from BEE process
3142 
3143      -- Bug 14267796
3144      -- Added Application Set in the SELECTed columns list.
3145 
3146      CURSOR get_ret_details(p_tim_id   IN NUMBER,
3147                             p_batch_id IN NUMBER)
3148          IS
3149              SELECT /*+ INDEX(det HXT_DET_HOURS_WORKED_F_SUM_FK) */
3150 	            ret.resource_id,
3151 	            ret.time_building_block_id,
3152 	            ret.approval_status,
3153 	            ret.start_time,
3154 	            ret.stop_time,
3155 	            ret.org_id,
3156 	            ret.business_group_id,
3157 	            ret.timecard_id,
3158                     ret.application_set_id,
3159 	            det.element_type_id,
3160 	            ret.attribute2,
3161 	            ret.attribute3,
3162 	            det.hours,
3163 	            ret.object_version_number,
3164 	            ret.old_ovn,
3165 	            ret.old_measure,
3166 	            ret.old_attribute1,
3167 	            ret.old_attribute2,
3168 	            ret.old_attribute3,
3169 	            det.pbl_line_id,
3170 	            ret.retro_pbl_id,
3171 	            ret.old_pbl_id,
3172 	            FND_GLOBAL.conc_request_id,
3173 	            ret.old_request_id,
3174 	            p_batch_id,
3175 	            ret.retro_batch_id,
3176 	            ret.old_batch_id,
3177 	            ROWIDTOCHAR(ret.rowid),
3178                     ret.measure,
3179                     ret.attribute1,
3180                     ret.attribute2,
3181                     ret.attribute3,
3182                     ret.request_id
3183 	       FROM hxt_sum_hours_worked_f sum,
3184 	            hxt_det_hours_worked_f det,
3185 	            hxc_ret_pay_latest_details ret
3186 	      WHERE sum.tim_id = p_tim_id
3187 	        AND sum.id = det.parent_id
3188 	        AND ret.time_building_block_id = sum.time_building_block_id
3189 	        AND ret.object_version_number = sum.time_building_block_ovn;
3190 
3191 
3192       l_tim_id   NUMBER;
3193 
3194 BEGIN
3195 
3196     OPEN get_timecards(p_batch_id);
3197     LOOP
3198        -- Pick up the timecards.
3199        FETCH get_timecards INTO l_tim_id;
3200        EXIT WHEN get_timecards%NOTFOUND;
3201 
3202        -- For each timecard, pick up the details.
3203        -- The cursor is built in such a way that if there are multiple
3204        -- details per tbb id- OVN combination in hxt_det_hours_worked_f
3205        -- they get picked up multiple times.
3206        -- Eg. hxc_ret_pay_latest_details shows 12 hrs Reg
3207        --     In OTLR this is 8 hrs Reg and 4 hrs Overtime.
3208        --     So we pick up the 12 hrs Reg, delete the record
3209        --       and insert 8 hrs Reg and 4 hrs Overtime.
3210        OPEN get_ret_details(l_tim_id,p_batch_id);
3211 
3212        -- Bug 12919783
3213        -- Additional columns added
3214 
3215        FETCH get_ret_details BULK COLLECT INTO
3216                                              resource_id_tab,
3217                                              time_building_block_id_tab,
3218                                              approval_status_tab,
3219                                              start_time_tab,
3220                                              stop_time_tab,
3221                                              org_id_tab,
3222                                              business_group_id_tab,
3223                                              timecard_id_tab,
3224                                              app_set_id_tab,     -- Bug 14267796
3225                                              attribute1_tab,
3226                                              attribute2_tab,
3227                                              attribute3_tab,
3228                                              measure_tab,
3229                                              object_version_number_tab,
3230                                              old_ovn_tab,
3231                                              old_measure_tab,
3232                                              old_attribute1_tab,
3233                                              old_attribute2_tab,
3234                                              old_attribute3_tab,
3235                                              pbl_id_tab,
3236                                              retro_pbl_id_tab,
3237                                              old_pbl_id_tab,
3238                                              request_id_tab,
3239                                              old_request_id_tab,
3240                                              batch_id_tab,
3241                                              retro_batch_id_tab,
3242                                              old_batch_id_tab,
3243                                              rowid_tab,
3244                                              hxt_measure_tab,
3245                                              hxt_att1_tab,
3246                                              hxt_att2_tab,
3247                                              hxt_att3_tab,
3248                                              hxt_request_tab;
3249 
3250         -- Delete the entries already there.
3251         FORALL i IN rowid_tab.FIRST..rowid_tab.LAST
3252            DELETE FROM hxc_ret_pay_latest_details
3253                  WHERE ROWID = CHARTOROWID(rowid_tab(i));
3254 
3255         -- Insert the new entries.
3256 
3257         -- Bug 12919783
3258         -- New columns added
3259         -- These columns would record the original values from SS/TK and will be
3260         -- used in Rollback Batches from BEE process.
3261 
3262         FORALL i IN rowid_tab.FIRST..rowid_tab.LAST
3263            INSERT INTO hxc_ret_pay_latest_details
3264                     ( resource_id,
3265                       time_building_block_id,
3266                       approval_status,
3267                       start_time,
3268                       stop_time,
3269                       org_id,
3270                       business_group_id,
3271                       timecard_id,
3272                       application_set_id,                 -- Bug 14267796
3273                       attribute1,
3274                       attribute2,
3275                       attribute3,
3276                       measure,
3277                       object_version_number,
3278                       old_ovn,
3279                       old_measure,
3280                       old_attribute1,
3281                       old_attribute2,
3282                       old_attribute3,
3283                       pbl_id,
3284                       retro_pbl_id,
3285                       old_pbl_id,
3286                       request_id,
3287                       old_request_id,
3288                       batch_id,
3289                       retro_batch_id,
3290                       old_batch_id,
3291                       hxt_element_id,
3292                       hxt_attribute2,
3293                       hxt_attribute3,
3294                       hxt_measure,
3295                       hxt_request_id,
3296                       hxt_batch_id)
3297              VALUES ( resource_id_tab(i),
3298                       time_building_block_id_tab(i),
3299                       approval_status_tab(i),
3300                       start_time_tab(i),
3301                       stop_time_tab(i),
3302                       org_id_tab(i),
3303                       business_group_id_tab(i),
3304                       timecard_id_tab(i),
3305                       app_set_id_tab(i),                  -- Bug 14267796
3306                       attribute1_tab(i),
3307                       attribute2_tab(i),
3308                       attribute3_tab(i),
3309                       measure_tab(i),
3310                       object_version_number_tab(i),
3311                       old_ovn_tab(i),
3312                       old_measure_tab(i),
3313                       old_attribute1_tab(i),
3314                       old_attribute2_tab(i),
3315                       old_attribute3_tab(i),
3316                       pbl_id_tab(i),
3317                       retro_pbl_id_tab(i),
3318                       old_pbl_id_tab(i),
3319                       request_id_tab(i),
3320                       old_request_id_tab(i),
3321                       batch_id_tab(i),
3322                       retro_batch_id_tab(i),
3323                       old_batch_id_tab(i),
3324                       hxt_att1_tab(i),
3325                       hxt_att2_tab(i),
3326                       hxt_att3_tab(i),
3327                       hxt_measure_tab(i),
3328                       hxt_request_tab(i),
3329                       p_batch_id
3330                       );
3331 
3332            COMMIT;
3333 
3334         CLOSE get_ret_details;
3335 
3336       END LOOP;
3337       CLOSE get_timecards;
3338 
3339 END snap_retrieval_details;
3340 
3341 --begin
3342 
3343 END HXT_batch_process;