DBA Data[Home] [Help]

PACKAGE BODY: APPS.HXT_RETRO_PROCESS

Source


1 PACKAGE BODY HXT_RETRO_PROCESS AS
2 /* $Header: hxtrprc.pkb 120.7 2011/08/22 09:53:58 asrajago ship $ */
3   g_debug boolean := hr_utility.debug_enabled;
4   FUNCTION Call_Gen_Error( p_batch_id IN NUMBER
5 			 , p_location IN VARCHAR2
6                          , p_error_text IN VARCHAR2
7                          , p_oracle_error_text IN VARCHAR2 default NULL ) RETURN NUMBER;
8 
9 
10 -----------------------------------------------------------------
11 PROCEDURE Main_Retro (
12   errbuf   	 OUT NOCOPY VARCHAR2,
13   retcode  	 OUT NOCOPY NUMBER,
14   p_payroll_id		IN	NUMBER,
15   p_date_earned         IN      VARCHAR2,
16   p_retro_batch_id      IN      NUMBER DEFAULT NULL,
17   p_retro_batch_id_end  IN      NUMBER DEFAULT NULL,
18   p_ref_num             IN      VARCHAR2 DEFAULT NULL,
19   p_process_mode        IN      VARCHAR2,
20   p_bus_group_id        IN      NUMBER,
21   p_merge_flag		IN	VARCHAR2 DEFAULT '0',
22   p_merge_batch_name	IN	VARCHAR2 DEFAULT NULL,
23   p_merge_batch_specified IN	VARCHAR2 DEFAULT NULL
24   ) IS
25   -- Cursor returns all batch's with timecards for specified payroll,
26   -- time period, batch id, and batch ref that haven't been transferred.
27 
28 
29   -- Bug 9876599
30   -- Added condition to ignore batches which are Archived.
31   -- Either fully or partially.
32 
33   CURSOR cur_batch(c_payroll_id NUMBER,
34                    c_retro_batch_id NUMBER,
35                    c_reference_num VARCHAR2) IS
36    	   SELECT distinct(det.retro_batch_id) batch_id,
37                   tim.id tim_id,
38                   tbs.status batch_status,
39 		  pbh.object_version_number
40    	     FROM pay_batch_headers    pbh,
41                   hxt_batch_states     tbs,
42                   hxt_timecards_x      tim,
43                   hxt_det_hours_worked_x det
44             WHERE det.pay_status = 'R'
45               AND tbs.batch_id = det.retro_batch_id
46               AND det.retro_batch_id BETWEEN nvl(c_retro_batch_id,0)
47                     AND nvl(c_retro_batch_id,999999999999)
48               AND (pbh.batch_reference LIKE nvl(c_reference_num , '%')
49                   OR (pbh.batch_reference IS NULL AND c_reference_num IS NULL))
50               AND tbs.status in ('VE','H','VT','VV','VW') -- RETROPAY
51               AND tim.id = det.tim_id
52               AND pbh.batch_id = tbs.batch_id
53    	      AND NOT EXISTS( SELECT 1
54 		                FROM hxt_det_hours_worked_f_ar ar
55 		               WHERE ar.retro_batch_id = pbh.batch_id)
56               AND pbh.business_group_id = p_bus_group_id;
57 
58   batch_rec cur_batch%ROWTYPE;
59 --
60 -- v115.11 start
61 -- Adding cursor to retrieve all valid batch ranges.
62 
63 -- Bug 12855865
64 -- Modified the cursor below to take a start and end batch.
65 
66 /*
67 
68   cursor c_batch_ranges is
69   SELECT   pbh.batch_name, pbh.batch_id
70       FROM pay_batch_headers pbh
71      WHERE pbh.business_group_id = p_bus_group_id
72        AND EXISTS (SELECT 'x'
73                      FROM hxt_det_hours_worked_x det, hxt_batch_states hbs
74                     WHERE hbs.batch_id = pbh.batch_id
75                       AND det.retro_batch_id = hbs.batch_id
76                       AND hbs.status in ('VE','H','VT','VV','VW'))
77   ORDER BY pbh.batch_id;
78 */
79 
80   cursor c_batch_ranges (p_start  IN NUMBER,
81                          p_end    IN NUMBER)
82      is
83   SELECT   pbh.batch_id
84       FROM pay_batch_headers pbh
85      WHERE pbh.business_group_id = p_bus_group_id
86        AND pbh.batch_id BETWEEN p_start
87                             AND p_end
88        AND EXISTS (SELECT 'x'
89                      FROM hxt_det_hours_worked_x det, hxt_batch_states hbs
90                     WHERE hbs.batch_id = pbh.batch_id
91                       AND det.retro_batch_id = hbs.batch_id
92                       AND hbs.status in ('VE','H','VT','VV','VW'))
93   ORDER BY pbh.batch_id;
94 
95 
96 -- v115.11 end
97 -- local variables
98 --
99   l_batch_id		NUMBER;
100   l_process_mode	VARCHAR2(80);
101   l_session_date	DATE;
102   l_batch_status	VARCHAR2(30);
103   l_pay_retcode		NUMBER      DEFAULT 0;
104   l_valid_retcode	NUMBER      DEFAULT 0;
105   l_sum_retcode		NUMBER      DEFAULT 0;
106   l_main_retcode	NUMBER	    DEFAULT 0;
107   l_final_pay_retcode	NUMBER      DEFAULT 0;
108   l_final_valid_retcode	NUMBER      DEFAULT 0;
109   l_final_main_retcode	NUMBER      DEFAULT 0;
110   l_final_sum_retcode	NUMBER      DEFAULT 0;
111   l_rollback_retcode    NUMBER      DEFAULT 0;
112   l_final_rollback_retcode NUMBER   DEFAULT 0;
113   l_errbuf		VARCHAR2(2000)DEFAULT NULL;
114   v_err_buf		VARCHAR2(2000)DEFAULT NULL;
115   l_retcode		NUMBER      DEFAULT 0;
116   l_date_earned DATE := to_date(p_date_earned,'YYYY/MM/DD HH24:MI:SS');
117   l_kounter             NUMBER      DEFAULT 0;
118   l_payroll_id		VARCHAR2(30)DEFAULT NULL;
119   l_retro_batch_id      NUMBER;   --BSE115M
120   l_return		NUMBER;
121   l_trans_batch_status  NUMBER      DEFAULT 0;
122   l_trans_status_code   VARCHAR2(10)DEFAULT NULL;
123   l_period_end_date     DATE;
124   b_we_have_batches     BOOLEAN     DEFAULT TRUE;
125   -- v115.11 start
126   -- adding new variables
127       l_starting_batch_num  NUMBER;
128       l_ending_batch_num    NUMBER;
129 
130       TYPE NUMTAB IS TABLE OF NUMBER;
131       l_batches  NUMTAB;
132 
133       TYPE v_bat_rec IS RECORD (
134             batch_id             NUMBER (15));
135 
136       TYPE r_bat_rec IS TABLE OF v_bat_rec
137        INDEX BY BINARY_INTEGER;
138 
139       list_batch_rec_ids       r_bat_rec;
140       l_index                  BINARY_INTEGER;
141 
142       b_start       BOOLEAN;
143       b_stop        BOOLEAN;
144 
145   -- v115.11 end
146 
147  /********Bug: 4620315 **********/
148 
149   l_cnt 		BINARY_INTEGER;
150   l_count		BINARY_INTEGER;
151   l_loop_index		BINARY_INTEGER;
152   l_loop_flag		BOOLEAN;
153   l_merge_batches	HXT_BATCH_PROCESS.MERGE_BATCHES_TYPE_TABLE;
154   p_merge_batches	HXT_BATCH_PROCESS.MERGE_BATCHES_TYPE_TABLE;
155   l_del_empty_batches	HXT_BATCH_PROCESS.DEL_EMPTY_BATCHES_TYPE_TABLE;
156 
157   /********Bug: 4620315 **********/
158 
159 BEGIN
160    g_debug := hr_utility.debug_enabled;
161 -- commented out. using sysdate view, now. RTF
162 --  insert into fnd_sessions values (userenv('SESSIONID'), trunc(SYSDATE));
163 --  commit;
164   --HXT_UTIL.DEBUG('Start process.');-- debug only --HXT115
165   -- time period will be ignored completely when passed in as NULL
166   l_date_earned := to_date(to_char(trunc(l_date_earned),'DD/MM/RRRR'),'DD/MM/RRRR');
167   l_payroll_id     := to_char(p_payroll_id);
168   l_retro_batch_id := p_retro_batch_id;   --BSE115M
169   --
170   --Validate , Transfer, or Rollback TAMS/O data
171   --
172   --
173     -- v115.11 start
174     -- check for ranges
175       l_starting_batch_num := p_retro_batch_id;
176       l_ending_batch_num   := p_retro_batch_id_end;
177   --
178   -- Table population
179   l_index := 1;
180     IF l_ending_batch_num IS NULL THEN
181       IF l_starting_batch_num IS NOT NULL THEN
182          list_batch_rec_ids(l_index).batch_id := l_starting_batch_num;
183       ELSE
184          list_batch_rec_ids(l_index).batch_id := null;
185       END IF;
186     ELSE
187       IF l_starting_batch_num IS NULL THEN
188          list_batch_rec_ids(l_index).batch_id := l_ending_batch_num;
189       END IF;
190     END IF;
191     --
192     -- Initialize booleans
193     b_start := FALSE;
194     b_stop  := FALSE;
195 
196     IF l_starting_batch_num > l_ending_batch_num THEN
197   	  b_stop  := TRUE;
198     END IF;
199 
200     --
201     -- Determine if a range has been selected by the user
202     --
203     IF l_starting_batch_num IS NOT NULL AND l_ending_batch_num IS NOT NULL AND b_stop = FALSE
204      THEN
205 
206     -- Bug 12855865
207     -- Commented out this construct of blindly picking up all the batches in the bg id
208     -- one by one and scanning the start and end records.
209 /*
210 
211     For C_All_batches in c_batch_ranges
212     Loop
213     	if (C_All_batches.batch_id = l_starting_batch_num)
214     	 then
215     	 	b_start := TRUE;
216     	 end if;
217 
218     	-- Add to table
219     	if b_start = TRUE then
220     	    list_batch_rec_ids(l_index).batch_id := C_All_batches.batch_id;
221     	    l_index := l_index+1;
222     	end if;
223 
224           if (C_All_batches.batch_id = l_ending_batch_num)
225    	  	 then
226    	  	 	b_start := FALSE;
227      	 end if;
228      End Loop; -- C_All_batches
229 
230 
231     For C_All_batches in c_batch_ranges(l_starting_batch_num,
232                       l_ending_batch_num)
233     Loop
234     	    list_batch_rec_ids(l_index).batch_id := C_All_batches.batch_id;
235     	    l_index := l_index+1;
236      End Loop; -- C_All_batches
237 
238 */
239      -- Replaced it with one BULK collect and copy into the list.
240 
241      OPEN c_batch_ranges(l_starting_batch_num,
242                          l_ending_batch_num);
243      FETCH c_batch_ranges BULK COLLECT INTO l_batches;
244      CLOSE c_batch_ranges;
245 
246      IF l_batches.COUNT > 0
247      THEN
248         FOR i IN l_batches.FIRST..l_batches.LAST
249         LOOP
250            list_batch_rec_ids(l_index).batch_id := l_batches(i);
251            l_index := l_index +1;
252         END LOOP;
253      END IF;
254 
255   End If; -- l_starting_batch_num and l_ending_batch_num IS NOT NULL
256 
257     --
258     -- v115.11 end
259   --
260   --
261   -- Loop through all retro batches in payroll specified by user
262   --
263   -- v115.11
264   -- Change looping to use the newly populated PL/SQL table list_batch_rec_ids
265 
266   l_index := null;
267   l_index := list_batch_rec_ids.first;
268 
269   WHILE l_index is not null LooP
270       BEGIN
271     --HXT_UTIL.DEBUG('Beginning we have batches loop');
272     --
273     -- Select and process all user specified batches for this payroll/reference number
274     -- Process batch range specified by the user, else do all available
275     --
276     l_loop_flag := TRUE;
277 
278 HXT_UTIL.DEBUG('payroll_id = '||to_char(p_payroll_id)||' retro_batch_id = '
279            ||to_char(list_batch_rec_ids(l_index).batch_id)||' ref_num = '||p_ref_num);
280     FOR batch_rec IN cur_batch(p_payroll_id, list_batch_rec_ids(l_index).batch_id, p_ref_num ) LOOP
281       --HXT_UTIL.DEBUG('Batch number is ' || TO_CHAR(batch_rec.batch_id));
282       l_batch_id := batch_rec.batch_id;
283       l_kounter := l_kounter + 1;
284       --
285       -- rollback all PayMix data per user request
286       --
287       IF p_process_mode = 'V' THEN
288 
289 	/********Bug: 4620315 **********/
290         /*** To record empty batch details ***/
291 
292         IF (p_merge_flag = '1' and l_loop_flag = TRUE) THEN
293 
294 	   IF g_debug THEN
295 	      hr_utility.trace('Populating del_empty_batches record: '||'batchid: '||batch_rec.batch_id||
296 	                       ' ovn '||batch_rec.object_version_number);
297 	   END IF;
298 
299 	   l_cnt := NVL(l_del_empty_batches.LAST,0) +1;
300 	   l_del_empty_batches(l_cnt).batch_id := batch_rec.batch_id;
301 	   l_del_empty_batches(l_cnt).batch_ovn := batch_rec.object_version_number;
302 	   l_loop_flag := FALSE;
303 	END IF;
304 
305 	/********Bug: 4620315 **********/
306 
307         -- Check for a valid status code
308         IF (batch_rec.batch_status = 'VT') THEN
309           l_final_valid_retcode := 2;
310           FND_MESSAGE.SET_NAME('HXT','HXT_39348_TC_VAL_NOT_REPROC');  --HXT111
311           HXT_BATCH_PROCESS.Insert_Pay_Batch_Errors( batch_rec.batch_id,
312 				'VE',
313                                 '',
314 				l_return);
315         ELSE
316           --
317           -- Validate batch, status:0=Normal, 1=Warning, 2=Stop Level Data Error, 3=System
318           --
319           --HXT_UTIL.DEBUG('Begin timecard validation.');
320           -- Delete prior errors for this batch
321           HXT_BATCH_PROCESS.Del_Prior_Errors(batch_rec.batch_id);
322           HXT_RETRO_VAL.Val_Retro_Timecard(batch_rec.batch_id,
323                                           batch_rec.tim_id,
324                                           l_valid_retcode,
325 					  p_merge_flag,
326 		  		          p_merge_batches);
327 
328 	  /********Bug: 4620315 **********/
329 	  /*** To record validated TCs details ***/
330 
331 	  IF p_merge_flag = '1' THEN
332 	     l_loop_index := p_merge_batches.first;
333 	     LOOP
334 		EXIT WHEN NOT p_merge_batches.exists(l_loop_index);
335 		l_count := NVL(l_merge_batches.LAST,0) +1;
336                 l_merge_batches(l_count).batch_id	       := p_merge_batches(l_loop_index).batch_id;
337 		l_merge_batches(l_count).tc_id		       := p_merge_batches(l_loop_index).tc_id;
338 		l_merge_batches(l_count).valid_tc_retcode      := p_merge_batches(l_loop_index).valid_tc_retcode;
339 		l_loop_index := p_merge_batches.next(l_loop_index);
340              END LOOP;
341 	  END IF;
342 
343 	  /********Bug: 4620315 **********/
344 
345           --
346           -- Set error return code from concurrent process
347           --
348           IF l_valid_retcode > l_final_valid_retcode then
349             l_final_valid_retcode := l_valid_retcode;
350           END IF;
351           -- Successful Validation, Set batch to ready Status
352           IF l_valid_retcode = 0 then
353             --HXT_UTIL.DEBUG('Successful timecard validation.');
354             HXT_BATCH_PROCESS.Set_batch_status(l_date_earned, batch_rec.batch_id, 'VV');
355           END IF;
356           -- set status to Warning and lets user know we have a TAMS/O
357           -- User Level Data Error for this batch
358           IF l_valid_retcode = 1 then
359             --HXT_UTIL.DEBUG('Timecard validation warnings.');
360             HXT_BATCH_PROCESS.Set_batch_status(l_date_earned, batch_rec.batch_id, 'VW');
361             FND_MESSAGE.SET_NAME('HXT','HXT_39349_CHK_IND_TCARD_ERRS'); --HXT111
362             HXT_BATCH_PROCESS.Insert_Pay_Batch_Errors( batch_rec.batch_id,
363 	        	          'W',
364                                   '',
365   		                  l_return);
366           END IF;
367           IF l_valid_retcode > 2 THEN
368             --HXT_UTIL.DEBUG('Timecard validation errors.');
369 	    HXT_BATCH_PROCESS.Set_batch_status(l_date_earned, batch_rec.batch_id, 'VE');
370             FND_MESSAGE.SET_NAME('HXT','HXT_39349_CHK_IND_TCARD_ERRS');
371             HXT_BATCH_PROCESS.Insert_Pay_Batch_Errors( batch_rec.batch_id,
372 		                 'VE',
373                                  '',
374 			         l_return);
375           END IF;
376         END IF; -- valid status code
377       --
378       -- Process transfer to PayMIX
379       --
380       ELSIF p_process_mode = 'T' THEN
381         -- Don't allow batches in a Hold status to be Transferred to PayMIX
382         IF batch_rec.batch_status = 'H' THEN
383            l_final_valid_retcode := 2;
384            FND_MESSAGE.SET_NAME('HXT','HXT_39350_CANT_TRANS_HLD_PAYMX');
385            HXT_BATCH_PROCESS.Insert_Pay_Batch_Errors( batch_rec.batch_id,
386     		                   'VE',
387                                    '',
388 	  			   l_return);
389           -- Don't move to PayMIX while Timecard errors exist
390         ELSIF batch_rec.batch_status in ('VE','ET') THEN -- RETROPAY
391            l_final_valid_retcode := 2;
392            FND_MESSAGE.SET_NAME('HXT','HXT_39351_CANT_TRANS_ERR_PAYMX');
393            HXT_BATCH_PROCESS.Insert_Pay_Batch_Errors( batch_rec.batch_id,
394     		                    'VE',
395                                     '',
396 		 		    l_return);
397         ELSIF (batch_rec.batch_status = 'VT') THEN
398            l_final_valid_retcode := 2;
399            FND_MESSAGE.SET_NAME('HXT','HXT_39352_BTCHS_PREV_TRANS');
400            HXT_BATCH_PROCESS.Insert_Pay_Batch_Errors( batch_rec.batch_id,
401     		                   'VE',
402                                    '',
403 		 		   l_return);
404         ELSIF batch_rec.batch_status in ('VV','VW') THEN -- RETROPAY
405            HXT_UTIL.DEBUG('Now moving to PayMIX.');
406            HXT_RETRO_MIX.retro_sum_to_mix(batch_rec.batch_id,
407                                          batch_rec.tim_id, l_sum_retcode,
408                                          v_err_buf);
409            HXT_UTIL.DEBUG('back from moving to PayMIX. v_er_buf is '||v_err_buf);
410            HXT_UTIL.DEBUG('back from moving to PayMIX. l_sum_retcode is '||to_char(l_sum_retcode));
411            IF l_sum_retcode > l_final_sum_retcode then
412               l_final_sum_retcode := l_sum_retcode;
413            END IF;
414            IF (l_sum_retcode = 0) then
415               --HXT_UTIL.DEBUG('Successful move to PayMIX.');
416               HXT_BATCH_PROCESS.Set_batch_status(l_date_earned, batch_rec.batch_id, 'VT');
417            ELSE
418               retcode := 2;
419              FND_MESSAGE.SET_NAME('HXT','HXT_39452_RETRO_SYSTEM_ERROR');
420              IF v_err_buf IS NULL THEN
421                FND_MESSAGE.SET_TOKEN('ERR_BUF',sqlerrm);
422              ELSE
423                FND_MESSAGE.SET_TOKEN('ERR_BUF',v_err_buf);
424              END IF;
425              l_errbuf := FND_MESSAGE.GET;
426              FND_MESSAGE.CLEAR;
427               errbuf  := l_errbuf;
428               HXT_BATCH_PROCESS.Set_batch_status(l_date_earned, l_batch_id, 'VE');
429               HXT_BATCH_PROCESS.Insert_Pay_Batch_Errors( l_batch_id,
430 	                        'VE',
431                                 sqlerrm,
432 				l_return);
433               commit;
434               return;
435 
436            END IF;
437            IF (l_sum_retcode = 3) then
438 	      HXT_BATCH_PROCESS.Set_batch_status(l_date_earned, batch_rec.batch_id, 'VE');
439            END IF;
440         ELSE
441            l_final_valid_retcode := 2;
442            FND_MESSAGE.SET_NAME('HXT','HXT_39353_BTCHS_MST_BE_VALDTED');
443            HXT_BATCH_PROCESS.Insert_Pay_Batch_Errors( batch_rec.batch_id,
444     		                   'VE', -- RETROPAY
445                                    '',
446 		 		   l_return);
447         END IF; -- check status before processing
448       END IF; -- end process selections
449       l_valid_retcode := 0;
450       l_sum_retcode := 0;
451     END LOOP; -- for loop process specific batch
452     --
453     -- Select the next batch in the range if applicable, else exit loop
454     --
455     l_index := list_batch_rec_ids.NEXT(l_index);
456     EXCEPTION
457        WHEN NO_DATA_FOUND THEN
458           l_index := null;
459           -- Bug 10143866
460           -- Added this logging in case of a NO_DATA_FOUND.
461           -- For cts having RDBMS 10g onwards, uncomment the below line to
462           -- backtrace to the exact spot.
463           -- hr_utility.trace(dbms_utility.format_error_backtrace);
464           hr_utility.trace('Batch '||batch_rec.batch_id||' threw a NO_DATA_FOUND');
465           hr_utility.trace('Backtrace this error to Batch validation log ');
466           hr_utility.trace('Skipping to next batch ');
467        WHEN OTHERS THEN
468           HXT_BATCH_PROCESS.Set_batch_status(l_date_earned, batch_rec.batch_id, 'VE');
469     HXT_UTIL.DEBUG('Other exception.'||sqlerrm);
470           	l_index := null;
471     END; -- batches
472   END LOOP;   -- while more batches exist in the range l_index not equal to null
473   -- Check for error totals to return a status from concurrent manager.
474   -- Normal
475   FND_MESSAGE.SET_NAME('HXT','HXT_39358_COMP_NORMAL');
476   l_errbuf := FND_MESSAGE.GET;
477   FND_MESSAGE.CLEAR;
478 --HXT111  l_errbuf := 'Completed Normal.';
479   l_retcode := 0;
480   -- No batches selected at all
481   IF l_kounter = 0 THEN
482      FND_MESSAGE.SET_NAME('HXT','HXT_39359_NO_BATCHES_SEL');
483      l_errbuf := FND_MESSAGE.GET;
484      FND_MESSAGE.CLEAR;
485 --HXT111     l_errbuf := 'ERROR: No batches selected for processing, check batch status.';
486      l_retcode := 2;
487   END IF;
488   -- v115.11 start
489       IF b_stop = TRUE Then
490          FND_MESSAGE.SET_NAME('HXT','HXT_39360_STR_BTCH_NUM_TOO_LRG');
491          l_errbuf := FND_MESSAGE.GET;
492          FND_MESSAGE.CLEAR;
493          l_retcode := 2;
494       END IF;
495   -- v115.11 end
496   IF l_final_rollback_retcode > 0 THEN
497      IF v_err_buf IS NULL THEN
498        FND_MESSAGE.SET_NAME('HXT','HXT_39361_ERR_DURING_ROLLBACK');
499      ELSE
500        FND_MESSAGE.SET_NAME('HXT','HXT_39450_RETRO_ROLLBACK_ERROR');
501        FND_MESSAGE.SET_TOKEN('ERR_BUF',v_err_buf);
502      END IF;
503      l_errbuf := FND_MESSAGE.GET;
504      FND_MESSAGE.CLEAR;
505      l_retcode := 2;
506   END IF;
507   -- A warning was returned from the validate process
508   IF l_final_valid_retcode = 1 THEN
509      l_retcode := 1;
510   END IF;
511   -- A stop-level error was returned from the validate process
512   IF l_final_valid_retcode = 2 THEN
513      IF v_err_buf IS NULL THEN
514        FND_MESSAGE.SET_NAME('HXT','HXT_39362_BATCH_ERROR');
515      ELSE
516        FND_MESSAGE.SET_NAME('HXT','HXT_39451_RETRO_BATCH_ERROR');
517        FND_MESSAGE.SET_TOKEN('ERR_BUF',v_err_buf);
518      END IF;
519      l_errbuf := FND_MESSAGE.GET;
520      FND_MESSAGE.CLEAR;
521      l_retcode := 2;
522   END IF;
523   -- a system level error occured somewhere during processing
524   IF (l_final_valid_retcode = 3 OR l_final_sum_retcode = 3) THEN
525      IF v_err_buf IS NULL THEN
526        FND_MESSAGE.SET_NAME('HXT','HXT_39363_SYSTEM_ERROR');
527      ELSE
528        FND_MESSAGE.SET_NAME('HXT','HXT_39452_RETRO_SYSTEM_ERROR');
529        FND_MESSAGE.SET_TOKEN('ERR_BUF',v_err_buf);
530      END IF;
531      l_errbuf := FND_MESSAGE.GET;
532      FND_MESSAGE.CLEAR;
533      l_retcode := 2;
534   END IF;
535   retcode := l_retcode;
536   errbuf  := l_errbuf;
537   --HXT_UTIL.DEBUG('Retcode:' || TO_CHAR(l_retcode) || ' ' || l_errbuf);
538 -- begin C431
539 -- commented out. using sysdate view, now. RTF
540 --delete from fnd_sessions where session_id = userenv('SESSIONID');
541 
542   /********Bug: 4620315 **********/
543   /*** To merge the batch TCs by calling 'merge_batches' procedure ***/
544 
545   IF p_merge_flag = '1' and p_process_mode = 'V' THEN
546 
547     IF g_debug THEN
548        hr_utility.trace('before calling merge_batches proc');
549     END IF;
550 
551     HXT_BATCH_PROCESS.merge_batches (p_merge_batch_name,
552 				     l_merge_batches,
553 				     l_del_empty_batches,
554 		   		     p_bus_group_id,
555 		  		     'R'
556 				    );
557   END IF;
558 
559   /********Bug: 4620315 **********/
560 
561   commit;
562 -- end C431
563 
564   EXCEPTION
565 
566      WHEN OTHERS THEN
567 -- commented out. using sysdate view, now. RTF
568 --      delete from fnd_sessions where session_id = userenv('SESSIONID');
569 --      commit;
570         retcode := 2;
571         IF v_err_buf IS NULL THEN
572           FND_MESSAGE.SET_NAME('HXT','HXT_39363_SYSTEM_ERROR');
573         ELSE
574           FND_MESSAGE.SET_NAME('HXT','HXT_39452_RETRO_SYSTEM_ERROR');
575           FND_MESSAGE.SET_TOKEN('ERR_BUF',v_err_buf);
576         END IF;
577         l_errbuf := FND_MESSAGE.GET;
578         FND_MESSAGE.CLEAR;
579         errbuf  := l_errbuf;
580         HXT_BATCH_PROCESS.Set_batch_status(l_date_earned, l_batch_id, 'VE');
581         HXT_BATCH_PROCESS.Insert_Pay_Batch_Errors( l_batch_id,
582 	                        'VE', -- RETROPAY
583                                 sqlerrm,
584 				l_return);
585         commit;
586 END main_retro;
587 ---------------------------------------------
588 FUNCTION Call_Gen_Error( p_batch_id IN NUMBER
589 			,p_location IN VARCHAR2
590                         ,p_error_text IN VARCHAR2
591                         ,p_oracle_error_text IN VARCHAR2 default NULL ) RETURN NUMBER IS
592   --  calls error processing procedure  --
593 BEGIN
594    HXT_UTIL.Gen_Error(p_batch_id, 0, 0, /*g_time_period_id*/NULL, p_error_text,
595 		     p_location, p_oracle_error_text
596                      ,trunc(sysdate)   -- C431
597                      ,hr_general.end_of_time
598                      ,'ERR');
599 
600    RETURN 2;
601 END call_gen_error;
602 ---------------------------------------------------------------------
603 END hxt_retro_process;