DBA Data[Home] [Help]

PACKAGE BODY: APPS.FUN_GL_BATCH_TRANSFER

Source


1 PACKAGE BODY FUN_GL_BATCH_TRANSFER AS
2 /* $Header: FUNGLTRB.pls 120.44 2011/03/10 12:23:16 abhaktha ship $ */
3 
4 FUNCTION has_valid_conversion_rate (
5     p_from_currency IN varchar2,
6     p_to_currency   IN varchar2,
7     p_exchange_type IN varchar2,
8     p_exchange_date IN date) RETURN number
9 IS
10     l_has_rate  varchar2(5);
11 BEGIN
12    /* IF (p_from_currency = p_to_currency) THEN
13         RETURN 1;
14     END IF;
15 
16     SELECT COUNT(conversion_rate) INTO l_has_rate
17     FROM gl_daily_rates
18     WHERE from_currency = p_from_currency AND
19           to_currency = p_to_currency AND
20           conversion_type = p_exchange_type AND
21           conversion_date = p_exchange_date;
22 
23     IF (l_has_rate = 0) THEN
24         RETURN 0;
25     END IF;
26     RETURN 1;*/
27 
28 	l_has_rate := GL_CURRENCY_API.rate_exists(p_from_currency, p_to_currency, p_exchange_date, p_exchange_type);
29 	IF (l_has_rate = 'Y')
30 	THEN
31 		RETURN 1;
32 	END IF;
33 	RETURN 0;
34 
35 END has_valid_conversion_rate;
36 
37 FUNCTION get_conversion_type (
38     p_conversion_type IN VARCHAR2) RETURN VARCHAR2
39 IS
40     l_user_conversion_type GL_DAILY_CONVERSION_TYPES.USER_CONVERSION_TYPE%TYPE;
41 BEGIN
42 
43     SELECT USER_CONVERSION_TYPE
44     INTO l_user_conversion_type
45     from GL_DAILY_CONVERSION_TYPES
46     where conversion_type = p_conversion_type;
47 
48     return l_user_conversion_type;
49 END get_conversion_type;
50 
51 procedure gl_batch_transfer
52 (
53     errbuf                    OUT NOCOPY VARCHAR2,
54     retcode                   OUT NOCOPY NUMBER,
55     p_date_low                IN varchar2 DEFAULT NULL,
56     p_date_high               IN varchar2 DEFAULT NULL,
57     p_ledger_low              IN varchar2 DEFAULT NULL,
58     p_ledger_high             IN varchar2 DEFAULT NULL,
59     p_le_low                  IN varchar2 DEFAULT NULL,
60     p_le_high                 IN varchar2 DEFAULT NULL,
61     p_ic_org_low              IN varchar2 DEFAULT NULL,
62     p_ic_org_high             IN varchar2 DEFAULT NULL,
63     p_run_journal_import      IN varchar2 DEFAULT 'N',
64     p_create_summary_journals IN varchar2 DEFAULT 'N'
65 
66 )
67 IS
68 p_request_id number;
69 l_source gl_je_sources_tl.user_je_source_name%TYPE;
70 l_category gl_je_categories_tl.user_je_category_name%TYPE;
71 l_date_low date;
72 l_date_high date;
73 l_init_sysdate date;
74 l_parameter_list WF_PARAMETER_LIST_T :=wf_parameter_list_t();
75 l_event_key    VARCHAR2(240);
76 v_interface_run_id number;
77 import_request_id number;
78 l_run_journal_import varchar2(3);
79 l_create_summary_journals varchar2(3);
80 l_cur_select VARCHAR2(1200);
81 l_cur_where VARCHAR2(2300);
82 l_cur_main_query VARCHAR2(3500);
83 -- Bug No. 6894340
84 l_ic_org_low VARCHAR2(360);
85 l_ic_org_high VARCHAR2(360);
86 --journal import cursor to be modified
87 
88 cursor c_import(p_concreqid number, p_source VARCHAR2, p_category VARCHAR2) is
89 select distinct ledger_id
90 from gl_interface
91 where user_je_category_name = p_category
92 and user_je_source_name = p_source
93 and request_id=p_concreqid;
94 
95 
96 -- Please dont remove the trunc around GL date as the date
97 -- currently stores a time component.
98 -- In this case the TRUNC in the query does not affect the performance
99 -- as there is currently no index on gl_date
100 -- Also there are transactions in the system with a time
101 -- component in the gl date. This has been rectified for
102 -- bug 5172718
103 -- But there are still some transactions with GL dates that need
104 -- to be processed.
105 -- If an index is later added on gl_date, a script may be required
106 -- to trunc gl and batch date on all exising records.
107 TYPE c_transfer IS REF CURSOR;
108    c_transfer_obj c_transfer;
109 
110 TYPE status           IS TABLE OF fun_trx_headers.status%TYPE INDEX BY BINARY_INTEGER;
111 TYPE party_type_flag  IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;
112 TYPE error_mesg       IS TABLE OF fnd_new_messages.message_name%TYPE INDEX BY BINARY_INTEGER;
113 TYPE trx_id           IS TABLE OF fun_trx_headers.trx_id%TYPE INDEX BY BINARY_INTEGER;
114 TYPE trx_number       IS TABLE OF fun_trx_headers.trx_number%TYPE INDEX BY BINARY_INTEGER;
115 TYPE batch_number     IS TABLE OF fun_trx_batches.batch_number%TYPE INDEX BY BINARY_INTEGER;
116 TYPE batch_id         IS TABLE OF fun_trx_batches.batch_id%TYPE INDEX BY BINARY_INTEGER; -- Bug 6797385.
117 
118 
119 l_status_tbl           status;
120 l_party_type_flag_tbl  party_type_flag;
121 l_error_mesg_tbl       error_mesg;
122 l_trx_id_tbl           trx_id;
123 l_trx_num              trx_number;
124 l_batch_num            batch_number;
125 l_batch_id_tbl         batch_id; -- Bug 6797385.
126 where_clause           VARCHAR2(1000) :='';
127 select_clause          VARCHAR2(2500) :='';
128 insert_clause          VARCHAR2(800) :='';
129 
130 gt_insert_clause          VARCHAR2(2500) :='';
131 gt_where_clause           VARCHAR2(2500) :='';
132 
133 BEGIN
134 p_request_id := FND_GLOBAL.CONC_REQUEST_ID;
135 
136 select user_je_source_name into l_source from gl_je_sources_tl where
137 je_source_name = 'Global Intercompany' and language = USERENV('LANG');
138 
139 select user_je_category_name into l_category from gl_je_categories_tl  where
140 je_category_name = 'Global Intercompany' and language = USERENV('LANG');
141 
142 l_date_low := TRUNC(fnd_date.canonical_to_date(p_date_low));
143 l_date_high:= TRUNC(fnd_date.canonical_to_date(p_date_high));
144 --Bug No. 6894340
145 l_ic_org_high:=REPLACE(p_ic_org_high, '''', '''''');
146 l_ic_org_low:=REPLACE(p_ic_org_low, '''', '''''');
147 IF p_create_summary_journals = 'Y'  THEN
148    l_create_summary_journals:='Yes';
149 ELSE
150    l_create_summary_journals:='No';
151 END IF;
152 
153 IF p_run_journal_import = 'Y' THEN
154   l_run_journal_import:= 'Yes';
155 ELSE
156   l_run_journal_import:= 'No';
157 END IF;
158 
159 BEGIN
160   -- Build the query for cursor
161   l_cur_select := 'SELECT
162                     trxH.status status,
163                     gt.party_type_flag party_type_flag,
164                     Nvl(nvl(decode(glps.closing_status,''O'','''',''F'','''', ''GL_PERIOD_NOT_OPEN''),
165                            decode(FUN_GL_BATCH_TRANSFER.has_valid_conversion_rate(trxB.currency_code,ledgers.currency_code,
166                               trxB.exchange_rate_type,TRUNC(trxB.GL_DATE)),1,'''',0,''FUN_API_CONV_RATE_NOT_FOUND'')),
167                                      ''FUN_API_TRX_TRANSFERRED'') error_mesg,
168                     gt.trx_id trx_id,
169                     trxH.trx_number trx_number,
170                     trxB.batch_number batch_number,
171                     trxB.batch_id     batch_id
172                     from
173                     fun_trx_batches trxB,
174 		    fun_trx_headers trxH,
175                     gl_periods periods,
176                     gl_ledgers ledgers,
177                     gl_period_statuses glps,
178                     fun_transfers gt';
179 
180   l_cur_where := ' WHERE trxH.trx_id = gt.trx_id AND
181 		      trxB.batch_id = gt.batch_id AND
182                       GT.request_id = '''||p_request_id||''' AND
183                       ledgers.ledger_id = gt.ledger_id AND
184                       periods.period_set_name = ledgers.period_set_name AND
185                       TRUNC(trxB.gl_date) BETWEEN periods.start_date
186                                                AND periods.end_date AND
187                       periods.adjustment_period_flag <> ''Y'' AND
188                       glps.period_name = periods.period_name AND
189                       glps.application_id = 101 AND
190                       glps.set_of_books_id = ledgers.ledger_id';
191 
192    select sysdate into l_init_sysdate from dual;
193 
194    FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '                   Transfer Intercompany Transactions to General Ledger Report        Date:'||to_char(sysdate,'DD-MON-YYYY HH:MM'));
195    FND_FILE.NEW_LINE(FND_FILE.OUTPUT,2 );
196    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'                  GL Date From: ' || to_char(l_date_low, 'DD-MON-YYYY'));
197    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'                    GL Date To: ' || to_char(l_date_high,'DD-MON-YYYY'));
198    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'                   Ledger From: ' || p_ledger_low);
199    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'                     Ledger To: ' || p_ledger_high);
200    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'             Legal Entity From: ' || p_le_low);
201    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'               Legal Entity To: ' || p_le_high);
202    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'Intercompany Organization From: ' || p_ic_org_low);
203    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'  Intercompany Organization To: ' || p_ic_org_high);
204    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'            Run Journal Import: ' || l_run_journal_import);
205    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'       Create Summary Journals: ' || l_create_summary_journals);
206    FND_FILE.NEW_LINE(FND_FILE.OUTPUT,2 );
207    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'Batch Number        Transaction Number  Transfer Status' );
208    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'------------        ------------------  ----------------');
209 
210    /* Insert data into temp table */
211   begin
212   gt_insert_clause :='INSERT INTO fun_transfers(BATCH_ID, trx_id, org_name, org_id, le_id,
213                             ledger_id, party_type_flag,
214                             request_id, trx_status, description)
215 		  select gt.BATCH_ID, gt.TRX_ID, P.PARTY_NAME,
216 		  GT.PARTY_ID, GT.LE_ID, gt.LEDGER_ID,  gt.party_type_flag,
217 		  gt.p_request_id,
218 		  gt.STATUS,  gt.description
219 		  from fun_trx_batches trxb, gl_ledgers ledgers,
220 		  HZ_PARTIES P,
221 		     (
222 		       SELECT TB.BATCH_ID , TH.INITIATOR_ID party_id, TH.TRX_ID, ''I''
223 		       party_type_flag, '''||p_request_id||''' p_request_id, tB.description Description,
224 		       TB.FROM_LE_ID LE_ID, TH.STATUS, tB.from_ledger_id LEDGER_ID
225 		       FROM FUN_TRX_HEADERS TH, FUN_TRX_BATCHES TB
226 		       WHERE TH.INVOICE_FLAG = ''N''
227 		       AND NOT EXISTS ( SELECT TRX_ID FROM
228 				     FUN_TRANSFERS FT WHERE FT.TRX_ID = TH.TRX_ID AND
229 				     FT.PARTY_TYPE_FLAG = ''I'')
230 				     AND TH.STATUS IN (''APPROVED'',''XFER_RECI_GL'')
231 		       AND TH.BATCH_ID = TB.BATCH_ID
232 		       UNION ALL
233 		       SELECT TB.BATCH_ID, TH.RECIPIENT_ID party_id, TH.TRX_ID, ''R''
234 		       party_type_flag, '''||p_request_id||''' p_request_id, tH.description Description,
235 		       TH.TO_LE_ID LE_ID, TH.STATUS, TH.TO_LEDGER_ID LEDGER_ID
236 		       FROM FUN_TRX_HEADERS TH, FUN_TRX_BATCHES TB
237 		       WHERE TH.INVOICE_FLAG = ''N''
238 		       AND NOT EXISTS ( SELECT TRX_ID FROM
239 				     FUN_TRANSFERS FT WHERE FT.TRX_ID = TH.TRX_ID AND
240 				     FT.PARTY_TYPE_FLAG = ''R'')
241 				     AND TH.STATUS IN (''APPROVED'',''XFER_INI_GL'')
242 		       AND TH.BATCH_ID = TB.BATCH_ID
243 		     )gt
244 		     where trxb.batch_id = gt.batch_id
245 		     and ledgers.ledger_id = gt.ledger_id
246 		     AND P.PARTY_ID = GT.party_id ';
247 
248 
249 	IF (l_date_low IS NULL AND l_date_high IS NOT NULL) THEN
250 			gt_where_clause := gt_where_clause||' AND TRXB.GL_DATE BETWEEN TRUNC(to_date(trxB.gl_date,''dd-mon-yy''))
251 					  AND TRUNC(to_date('''||l_date_high||''',''dd-mon-yy'')) +0.99999';
252 
253 		ELSE
254 			IF (l_date_low IS NOT NULL AND l_date_high IS NULL) THEN
255 				gt_where_clause := gt_where_clause||' AND TRXB.GL_DATE BETWEEN TRUNC(to_date('''||l_date_low||''',''dd-mon-yy''))
256 						  AND TRUNC(to_date(trxB.gl_date,''dd-mon-yy'')) +0.99999';
257 
258 			ELSE
259 			    IF (l_date_low IS NOT NULL AND l_date_high IS NOT NULL) THEN
260 				gt_where_clause := gt_where_clause||' AND TRXB.GL_DATE BETWEEN TRUNC(to_date('''||l_date_low||''',''dd-mon-yy''))
261 						  AND TRUNC(to_date('''||l_date_high||''',''dd-mon-yy'')) +0.99999';
262 
263 			    END IF;
264 			END IF;
265 	END IF;
266 
267 	IF (p_ledger_low IS NULL AND p_ledger_high IS NOT NULL) THEN
268 		gt_where_clause := gt_where_clause || ' AND LEDGERS.NAME BETWEEN  ledgers.name and '''||p_ledger_high||'''';
269         ELSE
270 		IF (p_ledger_low IS NOT NULL AND p_ledger_high IS NULL) THEN
271 			gt_where_clause := gt_where_clause || ' AND LEDGERS.NAME BETWEEN  '''||p_ledger_low||''' and ledgers.name';
272                ELSE
273 		    IF (p_ledger_low IS NOT NULL AND p_ledger_high IS NOT NULL) THEN
274 			gt_where_clause := gt_where_clause || ' AND LEDGERS.NAME BETWEEN  '''||p_ledger_low||''' and '''||p_ledger_high||'''';
275                     END IF;
276                 END IF;
277 	END IF;
278 
279 	IF (p_ic_org_low IS NULL AND p_ic_org_high IS NOT NULL) THEN
280 		gt_where_clause := gt_where_clause || ' AND P.PARTY_NAME BETWEEN P.PARTY_NAME and '''||l_ic_org_high||'''';
281 
282         ELSE
283 		IF (p_ic_org_low IS NOT NULL AND p_ic_org_high IS NULL) THEN
284 			gt_where_clause := gt_where_clause || ' AND P.PARTY_NAME BETWEEN '''||l_ic_org_low||''' and P.PARTY_NAME';
285 
286 		ELSE
287 		    IF (p_ic_org_low IS NOT NULL AND p_ic_org_high IS NOT NULL) THEN
288 			gt_where_clause := gt_where_clause || ' AND P.PARTY_NAME BETWEEN '''||l_ic_org_low||''' and '''||l_ic_org_high||'''';
289 
290                     END IF;
291                 END IF;
292 	END IF;
293 
294 	IF (p_le_low IS NULL AND p_le_high IS NOT NULL) THEN
295 		gt_where_clause := gt_where_clause || ' AND EXISTS (SELECT NULL
296                                                                   FROM XLE_ENTITY_PROFILES
297                                                                   WHERE LEGAL_ENTITY_ID = gt.LE_ID
298                                                                         AND NAME BETWEEN NAME and '''||p_le_high||''')';
299         ELSE
300 		IF (p_le_low IS NOT NULL AND p_le_high IS NULL) THEN
301 		     gt_where_clause := gt_where_clause || ' AND EXISTS (SELECT NULL
302                                                                       FROM XLE_ENTITY_PROFILES
303                                                                       WHERE  LEGAL_ENTITY_ID = gt.LE_ID
304                                                                              AND NAME BETWEEN '''||p_le_low||''' and NAME)';
305 		ELSE
306 		    IF (p_le_low IS NOT NULL AND p_le_high IS NOT NULL) THEN
307 			gt_where_clause := gt_where_clause || ' AND EXISTS (SELECT NULL
308                                                                         FROM XLE_ENTITY_PROFILES
309                                                                         WHERE LEGAL_ENTITY_ID = gt.LE_ID
310                                                                               AND NAME BETWEEN '''||p_le_low||''' and '''||p_le_high||''')';
311                     END IF;
312                 END IF;
313 	END IF;
314 
315 	EXECUTE IMMEDIATE gt_insert_clause||gt_where_clause;
316         commit;
317 
318 	END;
319 
320 	-- Bug 7173185. Changed the query to populate the REFERENCE4 column also.
321    /*  Insert data into temp table ends here */
322    insert_clause := 'INSERT INTO GL_INTERFACE
323            (STATUS,
324 	    GROUP_ID,
325             SET_OF_BOOKS_ID,
326             ACCOUNTING_DATE,
327             CURRENCY_CODE,
328             DATE_CREATED,
329             CREATED_BY,
330             ACTUAL_FLAG,
331             USER_JE_CATEGORY_NAME,
332             USER_JE_SOURCE_NAME,
333             CURRENCY_CONVERSION_DATE,
334             USER_CURRENCY_CONVERSION_TYPE,
335             ENTERED_DR,
336             ENTERED_CR,
337             REFERENCE10,
338 	          REFERENCE5,
339             CODE_COMBINATION_ID,
340             LEDGER_ID,
341             REFERENCE21,
342             REFERENCE22,
343             REFERENCE23,
344             REFERENCE24,
345             REFERENCE25,
346             PERIOD_NAME,
347             CHART_OF_ACCOUNTS_ID,
348             REQUEST_ID,
349 	    REFERENCE4)';
350    select_clause := ' SELECT ''NEW'','''||
351         p_request_id||''',
352         LEDGERS.LEDGER_ID,
353         TRUNC(TRXB.GL_DATE),
354         TRXB.CURRENCY_CODE,
355         SYSDATE,
356         D.CREATED_BY,
357         ''A'','''||
358         l_category||''','''||
359         l_source||''',
360         TRUNC(TRXB.GL_DATE),
361         FUN_GL_BATCH_TRANSFER.GET_CONVERSION_TYPE(TRXB.EXCHANGE_RATE_TYPE),
362         D.AMOUNT_DR,
363         D.AMOUNT_CR,
364 	      D.DESCRIPTION,
365         TRXB.DESCRIPTION,
366         D.CCID,
367         LEDGERS.LEDGER_ID,
368         ''Intercompany Transaction'',
369         TRXB.BATCH_ID,
370         GT.TRX_ID,
371         T.LINE_ID,
372         D.DIST_ID,
373         PERIODS.PERIOD_NAME,
374         LEDGERS.CHART_OF_ACCOUNTS_ID,'''||
375         p_request_id||''',
376 	TRXB.BATCH_NUMBER
377  FROM
378         GL_LEDGERS LEDGERS,
379         GL_PERIOD_STATUSES GLPS,
380 	GL_PERIODS PERIODS,
381         FUN_TRX_BATCHES TRXB,
382         FUN_TRX_LINES T,
383         FUN_DIST_LINES D,
384 	fun_transfers gt
385  WHERE 	TRXB.BATCH_ID = GT.BATCH_ID
386 	AND GT.request_id = '''||p_request_id||'''
387         AND LEDGERS.LEDGER_ID = gt.LEDGER_ID
388         AND PERIODS.PERIOD_SET_NAME = LEDGERS.PERIOD_SET_NAME
389         AND TRUNC(TRXB.GL_DATE) BETWEEN PERIODS.START_DATE AND PERIODS.END_DATE
390         AND PERIODS.ADJUSTMENT_PERIOD_FLAG <> ''Y''
391         AND GLPS.PERIOD_NAME = PERIODS.PERIOD_NAME
392         AND GLPS.APPLICATION_ID = 101
393         AND GLPS.SET_OF_BOOKS_ID = LEDGERS.LEDGER_ID
394         AND T.TRX_ID =  GT.TRX_ID
395         AND D.TRX_ID = T.TRX_ID
396         AND D.PARTY_TYPE_FLAG = GT.PARTY_TYPE_FLAG
397         AND GLPS.CLOSING_STATUS IN (''O'',''F'')
398         AND FUN_GL_BATCH_TRANSFER.HAS_VALID_CONVERSION_RATE(TRXB.CURRENCY_CODE,LEDGERS.CURRENCY_CODE,
399                                                             TRXB.EXCHANGE_RATE_TYPE,TRUNC(TRXB.GL_DATE)) = 1';
400 
401    l_cur_main_query := l_cur_select||l_cur_where;
402 
403    --Insert into GL_INTERFACE table.
404    EXECUTE IMMEDIATE insert_clause || select_clause || where_clause;
405 
406    WF_EVENT.AddParameterToList(p_name=>'INIT_SYS_DATE',
407                                             p_value=>l_init_sysdate,
408                                             p_parameterlist =>l_parameter_list);
409 
410    WF_EVENT.AddParameterToList(p_name=>'TRX_TYPE',
411                                             p_value=>'Intercompany Transaction',
412                                             p_parameterlist=>l_parameter_list);
413 
414    l_event_key:=FUN_INITIATOR_WF_PKG.GENERATE_KEY(p_batch_id=>p_request_id,
415                                                                p_trx_id => 0
416                                                               );
417 
418    WF_EVENT.RAISE(p_event_name =>'oracle.apps.fun.batch.gl.transfer',
419                                               p_event_key  =>l_event_key,
420                                               p_parameters=>l_parameter_list);
421 
422 
423    EXCEPTION
424 	WHEN NO_DATA_FOUND THEN
425 		-- Bug # 6842245
426 	--	null
427         	FND_FILE.PUT_LINE(FND_FILE.LOG,'INSERT BLOCK: No Data Found');
428 		raise;
429 
430 
431 	WHEN DUP_VAL_ON_INDEX THEN
432 		FND_FILE.NEW_LINE(FND_FILE.OUTPUT,2 );
433         	FND_FILE.PUT_LINE(fnd_file.output,'  *****Another GL Transfer process is running with same set of transactions.*****');
434 		FND_FILE.PUT_LINE(FND_FILE.LOG,'Another GL Transfer process is running with same set of transactions.');
435 		rollback;
436 		raise;
437 	WHEN OTHERS THEN
438 		-- Bug # 6842245
439 		FND_FILE.PUT_LINE(FND_FILE.LOG,'INSERT BLOCK: Unexpected error:' || sqlcode || sqlerrm);
440 		 retcode := 2;
441 		raise;
442    END;
443 
444 
445 -- add journal import code
446 
447    if p_run_journal_import = 'Y' then
448 
449   -- run journal import for each ledger id
450 
451 	For o in c_import(p_request_id, l_source, l_category)
452 	loop
453     		-- get interface run id
454     		select gl_journal_import_s.nextval into v_interface_run_id from dual;
455 
456 	    	insert into gl_interface_control (je_source_name,
457                                       status,
458                                       set_of_books_id,
459                                       group_id,
460                                       interface_run_id)
461     		values ( 'Global Intercompany',
462              		'S',
463              		o.ledger_id,
464              		p_request_id,       -- Bug No : 7215571
465              		v_interface_run_id);
466 
467 
468     /* Launch Concurrent Request to do journal import*/
469 
470      		import_request_id := fnd_request.submit_request(
471  		        application => 'SQLGL',                  -- application short name
472          		program => 'GLLEZL',                     -- program short name
473          		description => null,                     -- program name
474 		        start_time => null,                      -- start date
475 		        sub_request=>FALSE,                      -- sub-request
476          		argument1 => to_char(v_interface_run_id),           -- interface run id
477 		        argument2 => fnd_profile.value('GL_ACCESS_SET_ID'), -- set of books id
478 		        argument3 => 'N',                                   -- error to suspense flag
479 		        argument4 => to_char(l_date_low,'YYYY/MM/DD'),       -- from accounting date
480 		        argument5 => to_char(l_date_high,'YYYY/MM/DD'),      -- to accounting date
481 		        argument6 => p_create_summary_journals,   -- create summary flag
482 		        argument7 => 'Y',                         -- import desc flex flag
483 		        argument8 => 'Y');
484 
485   	end loop;
486 	--commit; Bug No: 6731040.
487    end if;
488 
489 -- do status updates
490 -- Need the decodes here because for each transaction, the IF condition
491 -- executes twice - once for Party Type R and once for 'I'
492 -- so the value of the status in the cursor variable is not really
493 -- the latest value. Prior iteration of the IF condition could have
494 -- set it to a value different to the value in the cursor
495    OPEN c_transfer_obj for l_cur_main_query;
496    FETCH c_transfer_obj BULK COLLECT INTO l_status_tbl,
497                                    l_party_type_flag_tbl,
498                                    l_error_mesg_tbl,
499                                    l_trx_id_tbl,
500                                    l_trx_num,
501                                    l_batch_num,
502                                    l_batch_id_tbl ; -- Bug 6797385.
503    CLOSE c_transfer_obj;
504 
505    IF l_trx_id_tbl.COUNT > 0
506    THEN
507      FORALL l_index IN l_trx_id_tbl.FIRST .. l_trx_id_tbl.LAST
508      UPDATE fun_trx_headers
509            SET    status = DECODE (l_party_type_flag_tbl(l_index),
510                            'I',DECODE (status,
511                                        'APPROVED','XFER_INI_GL',
512                                        'XFER_RECI_GL', 'COMPLETE'),
513                            'R',DECODE (status,
514                                        'APPROVED','XFER_RECI_GL',
515                                        'XFER_INI_GL', 'COMPLETE'))
516           WHERE  trx_id = l_trx_id_tbl(l_index)
517           AND    l_error_mesg_tbl(l_index) = 'FUN_API_TRX_TRANSFERRED';
518    END IF;
519 -- Bug 6797385. Update the status in fun_trx_batches starts here.
520    IF l_batch_id_tbl.COUNT > 0
521    THEN
522        FORALL l_index IN l_batch_id_tbl.FIRST .. l_batch_id_tbl.LAST
523        UPDATE fun_trx_batches b
524        SET b.status = 'COMPLETE'
525        WHERE NOT EXISTS ( SELECT trx_id
526                    FROM   fun_trx_headers
527                    WHERE  fun_trx_headers.batch_id = b.batch_id
528                    AND    status NOT IN ('COMPLETE', 'REJECTED'))
529        AND b.batch_id = l_batch_id_tbl(l_index)
530        AND b.status <> 'COMPLETE';
531    END IF;
532 -- Bug 6797385. Update the status in fun_trx_batches Ends here.
533    IF l_trx_id_tbl.COUNT > 0  THEN
534    	FOR l_index  IN l_trx_id_tbl.FIRST .. l_trx_id_tbl.LAST
535 	LOOP
536           IF (l_error_mesg_tbl(l_index) like 'GL_PERIOD_NOT_OPEN%') THEN
537               fnd_message.set_name('FUN','GL_PERIOD_NOT_OPEN');
538               fnd_file.put_line(fnd_file.output, rpad(substr(l_batch_num(l_index), 1,20),20)||rpad(substr(l_trx_num(l_index),1,15),20)||fnd_message.get);
539           ELSIF (l_error_mesg_tbl(l_index) like 'FUN_API_CONV_RATE_NOT_FOUND') THEN
540               fnd_message.set_name('FUN','FUN_API_CONV_RATE_NOT_FOUND');
541               fnd_file.put_line(fnd_file.output, rpad(substr(l_batch_num(l_index), 1,20),20)||rpad(substr(l_trx_num(l_index),1,15),20)||fnd_message.get);
542           ELSE
543               fnd_message.set_name('FUN','FUN_API_TRX_TRANSFERRED');
544               fnd_file.put_line(fnd_file.output, rpad(substr(l_batch_num(l_index), 1,20),20)||rpad(substr(l_trx_num(l_index),1,15),20)||fnd_message.get);
545           END IF;
546        END LOOP;
547        FND_FILE.NEW_LINE(FND_FILE.OUTPUT,2 );
548        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'                   *****End Of Report*****');
549    ELSE
550        FND_FILE.NEW_LINE(FND_FILE.OUTPUT,2 );
551        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'                   *****No Data Found*****');
552    END IF;
553 
554 /* Bug 6797385.
555    UPDATE fun_trx_batches
556    SET status = 'COMPLETE'
557    WHERE status <> 'COMPLETE'
558    AND NOT EXISTS ( SELECT trx_id
559                    FROM   fun_trx_headers
560                    WHERE  fun_trx_headers.batch_id = fun_trx_batches.batch_id
561                    AND    status NOT IN ('COMPLETE', 'REJECTED'));
562 */
563     DELETE fun_transfers
564     WHERE REQUEST_ID = P_REQUEST_ID;
565     commit;
566 
567    EXCEPTION
568    WHEN NO_DATA_FOUND THEN
569        FND_FILE.PUT_LINE(FND_FILE.LOG,'No Data Found');
570        -- Bug # 6842245
571        FND_FILE.PUT_LINE(FND_FILE.LOG,'Rolling Back All The Transactions');
572        rollback;
573 
574        DELETE fun_transfers
575        WHERE REQUEST_ID = P_REQUEST_ID;
576        commit;
577 
578    WHEN OTHERS THEN
579        FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error:' || sqlcode || sqlerrm);
580        retcode := 2;
581        -- Bug # 6842245
582        FND_FILE.PUT_LINE(FND_FILE.LOG,'Rolling Back All The Transactions');
583        rollback;
584 
585        DELETE fun_transfers
586        WHERE REQUEST_ID = P_REQUEST_ID;
587        commit;
588 
589    END GL_BATCH_TRANSFER;
590 
591 END FUN_GL_BATCH_TRANSFER;
592 
593