DBA Data[Home] [Help]

PACKAGE BODY: APPS.FUN_AP_TRANSFER

Source


1 PACKAGE BODY FUN_AP_TRANSFER AS
2 /* $Header: FUN_AP_XFER_B.pls 120.24.12010000.4 2009/01/19 12:02:39 ychandra ship $ */
3 
4     ap_acct_invalid EXCEPTION;
5 
6 
7 FUNCTION has_valid_conversion_rate (
8     p_from_currency IN varchar2,
9     p_to_currency   IN varchar2,
10     p_exchange_type IN varchar2,
11     p_exchange_date IN date) RETURN number
12 IS
13     l_has_rate  number;
14 BEGIN
15     IF (p_from_currency = p_to_currency) THEN
16         RETURN 1;
17     END IF;
18     SELECT COUNT(conversion_rate) INTO l_has_rate
19     FROM gl_daily_rates
20     WHERE from_currency = p_from_currency AND
21           to_currency = p_to_currency AND
22           conversion_type = p_exchange_type AND
23           conversion_date = p_exchange_date;
24 
25     IF (l_has_rate = 0) THEN
26         RETURN 0;
27     END IF;
28     RETURN 1;
29 END has_valid_conversion_rate;
30 
31 
32 /*-----------------------------------------------------
33  * FUNCTION lock_and_transfer
34  * ----------------------------------------------------
35  * Acquires lock and transfer one trx.
36  *
37  * Returns TRUE iff it can obtain lock, see a valid
38  * status, and transfer the trx.
39  * ---------------------------------------------------*/
40 
41 FUNCTION lock_and_transfer (
42     p_trx_id        IN number,
43     p_batch_date    IN date,
44     p_vendor_id     IN number,
45     p_site_id       IN number,
46     p_gl_date       IN date,
47     p_currency      IN varchar2,
48     p_exchg_rate    IN varchar2,
49     p_source        IN varchar2,
50     p_approval_date IN date,
51     p_to_org_id     IN number,
52     p_invoice_num   IN varchar2,
53     p_from_org_id   IN NUMBER) RETURN boolean
54 IS
55     l_status        varchar2(15);
56     l_payable_ccid  number;
57 BEGIN
58     IF (NOT lock_transaction(p_trx_id)) THEN
59         RETURN FALSE;
60     ELSE
61         transfer_single(p_trx_id, p_batch_date, p_vendor_id,
62                         p_site_id, p_currency, p_exchg_rate,
63                         p_source, p_gl_date, p_approval_date,
64                         p_to_org_id, p_invoice_num,p_from_org_id,
65                         l_payable_ccid);
66 
67         update_status(p_trx_id);
68     END IF;
69 
70     RETURN TRUE;
71 END lock_and_transfer;
72 
73 
74 
75 /*-----------------------------------------------------
76  * FUNCTION lock_transaction
77  * ----------------------------------------------------
78  * Lock the transaction, test if it's valid still.
79  * ---------------------------------------------------*/
80 
81 FUNCTION lock_transaction (
82     p_trx_id        IN number) RETURN boolean
83 IS
84     l_status    varchar2(15);
85 BEGIN
86     SELECT status INTO l_status
87     FROM fun_trx_headers
88     WHERE trx_id = p_trx_id
89     FOR UPDATE;
90 
91     IF (l_status = 'XFER_AR') THEN
92         RETURN TRUE;
93     ELSE
94         RETURN FALSE;
95     END IF;
96 END lock_transaction;
97 
98 
99 
100 
101 /*-----------------------------------------------------
102  * PROCEDURE update_status
103  * ----------------------------------------------------
104  * Returns the new status.
105  * ---------------------------------------------------*/
106 
107 PROCEDURE update_status (
108     p_trx_id    IN number)
109 IS
110     l_result        varchar2(1);
111     l_msg_count     number;
112     l_msg_data      varchar2(1000);
113 BEGIN
114     fun_trx_pvt.update_trx_status
115                         (p_api_version => 1.0,
116                          x_return_status => l_result,
117                          x_msg_count => l_msg_count,
118                          x_msg_data => l_msg_data,
119                          p_trx_id => p_trx_id,
120                          p_update_status_to => 'COMPLETE');
121 
122   -- Handle the API call return
123 
124         IF l_result = FND_API.G_RET_STS_ERROR   THEN
125 
126             raise FND_API.G_EXC_ERROR;
127         END IF;
128 
129 
130         IF l_result = FND_API.G_RET_STS_UNEXP_ERROR   THEN
131 
132             raise FND_API.G_EXC_UNEXPECTED_ERROR;
133         END IF;
134 
135 
136 END update_status;
137 
138 
139 
140 
141 
142 /*-----------------------------------------------------
143  * PROCEDURE transfer_batch
144  * ----------------------------------------------------
145  * Transfer to AP interface in batch.
146  * ---------------------------------------------------*/
147 
148 PROCEDURE transfer_batch (
149     errbuf          OUT NOCOPY varchar2,
150     retcode         OUT NOCOPY number,
151     p_org_id        IN number default null,
152     p_le_id         IN number default null,
153     p_period_low    IN varchar2 default null,
154     p_period_high   IN varchar2 default null,
155     p_run_payables_import IN varchar2 default 'N' )
156 IS
157     l_trx_id        number;
158     l_batch_date    date;
159     l_currency      varchar2(15);
160     l_ledger_currency  varchar2(15);
161     l_period_status varchar2(1);
162     l_gl_date       date;
163     l_approval_date date;
164     l_invoice_num   varchar2(50);
165     l_from_le_id    number;
166     l_to_le_id      number;
167     l_from_org_id   number;
168     l_to_org_id     number;
169     l_recipient_id  number;
170     l_initiator_id  number;
171 
172     l_vendor_id     number;
173     l_site_id       number;
174     l_payable_ccid  number;
175     l_rowcount      number := 0;
176     l_error         number := 0;
177     x_msg_data      varchar2(1000);
178     l_parameter_list WF_PARAMETER_LIST_T :=wf_parameter_list_t();
179     l_event_key     varchar2(240);
180     l_init_sysdate  date;
181     l_source        varchar2(100) := 'GLOBAL_INTERCOMPANY';
182     l_request_id    number;
183     l_conv_type     fun_trx_batches.exchange_rate_type%TYPE;
184     l_counter	    number;
185     l_trx_num       varchar2(15);
186     l_batch_num     varchar2(15);
187     l_org_name      varchar2(240);
188     l_le_name       varchar2(240);
189     l_date_low	    date;
190     l_date_high     date;
191     Request_Submission_Failure   EXCEPTION;
192     is_data_transferred varchar2(1);
193     l_run_payables_import varchar2(3);
194 
195 
196      TYPE  ORG_ID_TAB_TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
197      org_id_table ORG_ID_TAB_TYPE;
198      l_previous_org_id   number;
199 
200     CURSOR c_trx IS
201         SELECT h.trx_id,
202 	       h.trx_number,
203 	       b.batch_number,
204                b.batch_date,
205                b.currency_code,
206                b.exchange_rate_type,
207 	       ledgers.currency_code,
208                ps.closing_status,
209                b.gl_date,
210                h.approval_date,
211                h.ar_invoice_number,
212                b.from_le_id,
213                h.to_le_id ,
214                fun_tca_pkg.get_ou_id(h.initiator_id) from_org_id,
215                NVL(p_org_id, fun_tca_pkg.get_ou_id(h.recipient_id)) to_org_id,
216                b.initiator_id,
217                h.recipient_id
218         FROM fun_trx_batches b,
219              fun_trx_headers h,
220              gl_period_statuses ps,
221 	     gl_ledgers ledgers
222         WHERE b.batch_id = h.batch_id AND
223               ps.ledger_id = h.to_ledger_id AND
224               ps.application_id = 200 AND
225               ledgers.ledger_id = h.to_ledger_id AND
226               b.gl_date BETWEEN ps.start_date AND ps.end_date AND
227               b.gl_date BETWEEN nvl(l_date_low, b.gl_date)
228                              AND nvl(l_date_high, b.gl_date) AND
229               h.to_le_id = NVL(p_le_id, h.to_le_id) AND
230               NVL(p_org_id, 1) = NVL2(p_org_id,
231                                  fun_tca_pkg.get_ou_id(h.recipient_id),1) AND
232               h.status = 'XFER_AR' AND
233               h.ar_invoice_number IS NOT NULL
234         ORDER BY to_org_id; -- Order By added to be able to set
235                             -- Org Context when submitting AP Import
236 
237 BEGIN
238     l_error:=1;
239     retcode := 0;
240     l_counter :=0;
241     l_date_low := TRUNC(fnd_date.canonical_to_date(p_period_low));
242     l_date_high:= TRUNC(fnd_date.canonical_to_date(p_period_high));
243     is_data_transferred:= 'N';
244     IF p_run_payables_import = 'Y' THEN
245        l_run_payables_import := 'Yes';
246     ELSE
247        l_run_payables_import :='No';
248     END IF;
249 
250     select sysdate into l_init_sysdate from dual;
251 
252     l_request_id := fnd_global.conc_request_id;
253 
254     IF (p_org_id is not null) THEN
255         select hr.name into l_org_name from hr_operating_units hr
256         where hr.organization_id = p_org_id;
257     END IF;
258 
259     IF (p_le_id is not null) THEN
260         select xle.name into l_le_name from xle_entity_profiles xle
261         where xle.legal_entity_id = p_le_id;
262     END IF;
263 
264    FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '                   Transfer Intercompany Transactions to Payables Report        Date:'||to_char(sysdate,'DD-MON-YYYY HH:MM'));
265    FND_FILE.NEW_LINE(FND_FILE.OUTPUT,2 );
266    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'        Operating Unit: ' || l_org_name);
267    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'          Legal Entity: ' || l_le_name );
268    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'          GL Date From: ' || to_char(l_date_low, 'DD-MON-YYYY'));
269    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'            GL Date To: ' || to_char(l_date_high,'DD-MON-YYYY'));
270    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'Submit Payables Import: ' || l_run_payables_import);
271    FND_FILE.NEW_LINE(FND_FILE.OUTPUT,2 );
272    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'Batch Number        Transaction Number  Transfer Status' );
273    FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'------------        ------------------  ----------------');
274 
275 
276     l_previous_org_id := 0;
277     OPEN c_trx;
278     LOOP
279         FETCH c_trx INTO l_trx_id,
280 			 l_trx_num,
281 			 l_batch_num,
282                          l_batch_date,
283                          l_currency,
284                          l_conv_type,
285 			 l_ledger_currency,
286                          l_period_status,
287                          l_gl_date,
288                          l_approval_date,
289                          l_invoice_num,
290                          l_from_le_id,
291                          l_to_le_id,
292                          l_from_org_id,
293                          l_to_org_id,
294                          l_initiator_id,
295                          l_recipient_id;
296 
297         exit when c_trx%NOTFOUND;
298 	l_counter := l_counter+1;
299 
300         IF (NOT fun_trading_relation.get_supplier(
301                     'INTERCOMPANY',
302                     l_from_le_id,
303                     l_to_le_id,
304                     l_from_org_id,
305                     l_to_org_id,
306                     l_initiator_id,
307                     l_recipient_id,
308                     l_batch_date,
309                     x_msg_data,
310                     l_vendor_id,
311                     l_site_id))  THEN
312 
313            l_error := 2;
314 	   fnd_message.set_name('FUN','FUN_XFER_AP_INVALID_RELATION');
315 
316         END IF;
317 
318         IF (l_period_status NOT IN ('O', 'F')) THEN
319                 l_error := 2;
320 		fnd_message.set_name('FUN', 'FUN_XFER_AP_PERIOD');
321         END IF;
322 
323         IF (l_to_org_id IS NULL) THEN
324                 l_error := 2;
325 		fnd_message.set_name('FUN', 'FUN_XFER_AP_TO_ORG_ID_NULL');
326         END IF;
327 
328         IF (has_valid_conversion_rate(l_currency,l_ledger_currency,l_conv_type,l_gl_date)=0) THEN
329                 l_error := 2;
330                 fnd_message.set_name('FUN', 'FUN_CONV_RATE_NOT_FOUND');
331         END IF;
332 
333         IF (l_error = 1) THEN
334             -- Lock record
335             SELECT trx_id INTO l_trx_id
336             FROM fun_trx_headers
337             WHERE trx_id = l_trx_id
338             FOR UPDATE;
339 
340             BEGIN
341                 transfer_single(l_trx_id, l_batch_date, l_vendor_id,
342                                 l_site_id, l_currency, l_conv_type,
343                                 l_source, l_gl_date, l_approval_date,
344                                 l_to_org_id, l_invoice_num, l_from_org_id,
345                                 l_payable_ccid);
346 
347 
348                 update_status(l_trx_id);
349 
350                 IF  l_previous_org_id <> l_to_org_id THEN
351                     ORG_ID_TABLE(org_id_table.count+1) := l_to_org_id;
352                     l_previous_org_id := l_to_org_id;
353                 END IF;
354 
355 		fnd_message.set_name('FUN','FUN_XFER_SUCCESS');
356                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,rpad(substr(l_batch_num, 1,15),20)||rpad(substr(l_trx_num,1,15),20)||fnd_message.get);
357 		is_data_transferred:='Y';
358             EXCEPTION
359                 WHEN OTHERS THEN
360                   fnd_file.put_line(fnd_file.log,'Error :'||SQLERRM);
361 
362 
363             END;
364 	ELSIF (l_error = 2) THEN
365             FND_FILE.PUT_LINE(FND_FILE.OUTPUT,rpad(substr(l_batch_num,1,15),20)||rpad(substr(l_trx_num,1,15),20)||fnd_message.get);
366         END IF;
367 
368       l_error := 1;
369 
370     END LOOP;
371     CLOSE c_trx;
372     FND_FILE.NEW_LINE(FND_FILE.OUTPUT,2 );
373     IF (l_counter = 0) THEN
374         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'                   *****No Data Found*****');
375     ELSE
376         FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'                   *****End Of Report*****');
377     END IF;
378 
379     COMMIT;
380 
381   --   RAISE oracle.apps.fun.batch.ap.transfer;
382   WF_EVENT.AddParameterToList(p_name=>'INIT_SYS_DATE',
383                                             p_value=>TO_CHAR(l_init_sysdate),
384                                             p_parameterlist =>l_parameter_list
385                         );
386   WF_EVENT.AddParameterToList(p_name=>'SOURCE',
390   l_event_key:=FUN_INITIATOR_WF_PKG.GENERATE_KEY(p_batch_id=>l_request_id,
387                                             p_value=>l_source,
388                                             p_parameterlist =>l_parameter_list
389                         );
391                                                                p_trx_id => 0
392                                                               );
393 
394   WF_EVENT.RAISE(p_event_name =>'oracle.apps.fun.batch.ap.transfer',
395                                               p_event_key  =>l_event_key,
396                                               p_parameters=>l_parameter_list);
397 
398   IF p_run_payables_import='Y'  and is_data_transferred='Y' AND
399      org_id_table.count > 0
400   THEN
401       FOR I in  org_id_table.First .. org_id_table.last
402       LOOP
403           FND_REQUEST.set_org_id(org_id_table(I));
404           l_request_id := FND_REQUEST.SUBMIT_REQUEST(
405                   application => 'SQLAP',
406                   program =>'APXIIMPT',
407                   description => null,
408                   start_time => null,
409                   sub_request=> FALSE,
410                   argument1 => org_id_table(I),
411                   argument2 =>'GLOBAL_INTERCOMPANY',
412                   argument3 =>null,
413                   argument4 =>null);
414 
415           IF l_request_id <> 0 THEN
416              fnd_file.put_line(fnd_file.log,'Submitted the Payables Import Program. Request id: ' || l_request_id || ' for Org Id ' || org_id_table(I));
417              commit;
418           ELSE
419               RAISE Request_Submission_Failure;
420           END IF;
421       END LOOP;
422   END IF;
423 
424 
425   l_parameter_list.delete();
426 
427 EXCEPTION
428 
429  WHEN Request_Submission_Failure THEN
430     FND_FILE.PUT_LINE(FND_FILE.LOG,'Error in submitting Payables Import Process');
431     retcode :=2;
432  WHEN OTHERS THEN
433     FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error:' || sqlcode || sqlerrm);
434     retcode := 2;
435 
436 END transfer_batch;
437 
438 
439 /*-----------------------------------------------------
440  * PROCEDURE transfer_single
441  * ----------------------------------------------------
442  * Transfer a single transaction to AP interface.
443  * It assumes that the caller has a lock on the
444  * transaction, and the caller will do the commit.
445  * ---------------------------------------------------*/
446 
447 PROCEDURE transfer_single (
448     p_trx_id            IN number,
449     p_batch_date        IN date,
450     p_vendor_id         IN number,
451     p_vendor_site_id    IN number,
452     p_currency          IN varchar2,
453     p_conv_type         IN varchar2,
454     p_source            IN varchar2,
455     p_gl_date           IN date,
456     p_approval_date     IN date,
457     p_org_id            IN number,
458     p_invoice_num       IN varchar2,
459     p_from_org_id       IN NUMBER,
460     p_payables_ccid     OUT NOCOPY number)
461 IS
462     l_acct_valid    varchar2(1);
463     l_desc          varchar2(250);
464     l_desc_header_level varchar2(250);  -- Bug No : 7652608
465     l_invoice_id    number;
466     l_inv_line_id   number;
467     l_l_amount_cr   number;
468     l_l_amount_dr   number;
469     l_d_amount_cr   number;
470     l_d_amount_dr   number;
471     l_amount        number;
472     l_ccid          number;
473     l_dist_id       number;
474     l_line_type     varchar2(15);
475     l_dist_type     varchar2(15);
476 
477     l_parameter_list WF_PARAMETER_LIST_T :=wf_parameter_list_t();
478     l_event_key    VARCHAR2(240);
479 
480     CURSOR c_dist IS
481         SELECT NVL(d.amount_cr,0), NVL(d.amount_dr,0), d.ccid,
482                d.dist_type_flag, NVL(t.reci_amount_cr,0), NVL(t.reci_amount_dr,0),
483                d.dist_id, t.line_type_flag, d.description  -- Bug No : 7122846
484         FROM fun_dist_lines d,
485              fun_trx_lines t
486         WHERE t.trx_id = p_trx_id AND
487               d.line_id = t.line_id AND
488               d.party_type_flag = 'R';
489 
490     CURSOR c_get_site_dtls (p_vendor_id NUMBER,
491                             p_vendor_site_id NUMBER)
492     IS
493     SELECT site.payment_method_lookup_code
494     FROM   po_vendor_sites_all site
495     WHERE  site.vendor_id = p_vendor_id
496     AND    site.vendor_site_id = p_vendor_site_id;
497 
498     -- For intercompany transactions, as per the current datamodel
499     -- each AR Intercompany invoice will have 1 line
500     -- ie 1 row in ra_customer_trx and ra_customer_trx_lines
501     CURSOR c_get_etax_info (p_trx_id NUMBER,
502 			    p_invoice_num  VARCHAR2,
503                             p_from_org_id  NUMBER)
504     IS
505     SELECT zx.application_id,
506            zx.entity_code,
507            zx.event_class_code,
508            zx.trx_id,
509            zx.trx_line_id,
510            zx.trx_level_type
511     FROM   zx_lines_det_factors zx,
512            ra_customer_trx_all artrx
513     WHERE  zx.trx_id         = artrx.customer_trx_id
514     AND    zx.application_id =  222
515     AND    zx.entity_code    = 'TRANSACTIONS'
516     AND    artrx.trx_number  = p_invoice_num
517     AND    artrx.org_id      = p_from_org_id
521     l_payment_method_lookup_code   VARCHAR2(30);
518     AND    artrx.INTERFACE_HEADER_ATTRIBUTE2 = p_trx_id;  -- bug no : 7718598
519 
520 
522     l_application_id               zx_lines_det_factors.application_id%TYPE;
523     l_entity_code                  zx_lines_det_factors.entity_code%TYPE;
524     l_event_class_code             zx_lines_det_factors.event_class_code%TYPE;
525     l_trx_id                       zx_lines_det_factors.trx_id%TYPE;
526     l_trx_line_id                  zx_lines_det_factors.trx_line_id%TYPE;
527     l_trx_level_type               zx_lines_det_factors.trx_level_type%TYPE;
528 
529 BEGIN
530 
531     -- Get etax info for AP to be able to calculate tax
532     OPEN c_get_etax_info( p_trx_id, p_invoice_num, p_from_org_id);
533     FETCH c_get_etax_info INTO l_application_id,
534            l_entity_code,
535            l_event_class_code,
536            l_trx_id,
537            l_trx_line_id,
538            l_trx_level_type;
539     CLOSE c_get_etax_info;
540 
541     OPEN  c_get_site_dtls ( p_vendor_id         ,
542                             p_vendor_site_id  );
543     FETCH c_get_site_dtls INTO l_payment_method_lookup_code;
544     CLOSE c_get_site_dtls;
545 
546     l_payment_method_lookup_code := Nvl(l_payment_method_lookup_code,
547                                         'CHECK');
548 
549     OPEN c_dist;
550 
551     SELECT ap_invoices_interface_s.nextval INTO l_invoice_id
552     FROM dual;
553 
554     LOOP
555         FETCH c_dist INTO l_d_amount_cr, l_d_amount_dr, l_ccid,
556                           l_dist_type, l_l_amount_cr, l_l_amount_dr,
557                           l_dist_id, l_line_type, l_desc;
558         EXIT WHEN c_dist%NOTFOUND;
559 
560         IF (l_dist_type = 'P') THEN
561 /* to do
562             fun_trx_pvt.is_payable_acct_valid(l_acct_valid, l_ccid);
563             IF (l_acct_valid <> fnd_api.g_ret_sts_success) THEN
564                 RAISE ap_acct_invalid;
565             END IF;
566 */
567 
568             -- Amounts Transferred to AP should be
569             -- Reci Trx Amount: 1000 Cr,  AP Amount: 1000
570             -- Reci Trx Amount: -1000 Cr, AP Amount: -1000
571             -- Reci Trx Amount: 1000 Dr,  AP Amount: -1000
572             -- Reci Trx Amount: -1000 Dr, AP Amount: 1000
573 
574             IF l_l_amount_cr <> 0
575             THEN
576                  l_amount := l_l_amount_cr;
577 
578             ELSIF l_l_amount_dr <> 0
579             THEN
580                  l_amount := l_l_amount_dr * (-1);
581             END IF;
582             -- Bug: 7652608
583             select description
584 		INTO l_desc_header_level
585 		from fun_trx_headers
586 		where trx_id=p_trx_id;
587 
588             INSERT INTO ap_invoices_interface (
589                 invoice_id, invoice_num, invoice_date,
590                 vendor_id, vendor_site_id, invoice_amount,
591                 invoice_currency_code, exchange_rate_type, exchange_date,
592                 description,
593                 source, group_id,
594                 goods_received_date, invoice_received_date,
595                 gl_date, accts_pay_code_combination_id, org_id,
596                 payment_method_lookup_code,
597                 payment_method_code,
598                 calc_tax_during_import_flag ,
599                 add_tax_to_inv_amt_flag)
600             VALUES (
601                 l_invoice_id, p_invoice_num, p_batch_date,
602                 p_vendor_id, p_vendor_site_id, l_amount,
603                 p_currency, p_conv_type, p_batch_date,
604                 l_desc_header_level,   -- Bug No : 7652608
605                 p_source, p_trx_id,
606                 p_batch_date, Nvl(p_approval_date, TRUNC(SYSDATE)),
607                 p_gl_date, l_ccid, p_org_id,
608                 l_payment_method_lookup_code,
609                 l_payment_method_lookup_code,
610                 'Y',
611                 'Y');
612 
613         ELSIF (l_dist_type = 'L') THEN
614             -- Amounts Transferred to AP should be
615             -- Reci Dst Amount: 1000 Dr,  AP Amount: 1000
616             -- Reci Dst Amount: -1000 Dr, AP Amount: -1000
617             -- Reci Dst Amount: 1000 Cr,  AP Amount: -1000
618             -- Reci Dst Amount: -1000 Cr, AP Amount: 1000
619 
620             IF l_d_amount_dr <> 0
621             THEN
622                  l_amount := l_d_amount_dr;
623 
624             ELSIF l_d_amount_cr <> 0
625             THEN
626                  l_amount := l_d_amount_cr * (-1);
627             END IF;
628 
629             SELECT ap_invoice_lines_interface_s.nextval into l_inv_line_id
630             FROM dual;
631 
632             INSERT INTO ap_invoice_lines_interface (
633                 invoice_id, invoice_line_id, line_number,
634                 line_type_lookup_code, amount, accounting_date,
635                 description, dist_code_combination_id, org_id,
636                 source_application_id,
637                 source_entity_code,
638                 source_event_class_code,
639                 source_trx_id,
640                 source_trx_level_type,
641                 source_line_id )
642             VALUES (
643                 l_invoice_id, l_inv_line_id, l_dist_id,
644                 'ITEM', l_amount, p_gl_date,
645                 l_desc, l_ccid, p_org_id,
646                 l_application_id, -- added for etax changes
647                 l_entity_code,  -- added for etax changes
648                 'INTERCOMPANY_TRX',   -- added for etax changes
649                 l_trx_id,  -- added for etax changes
650                 'LINE' ,    -- added for etax changes
651                 l_trx_line_id);
652         END IF;
653 
654     END LOOP;
655 
656     WF_EVENT.AddParameterToList(p_name=>'INVOICE_ID',
657                                             p_value=>TO_CHAR(l_invoice_id),
658                                             p_parameterlist =>l_parameter_list
659                         );
660 
661     WF_EVENT.AddParameterToList(p_name=>'TRX_ID',
662                                             p_value=>TO_CHAR(p_trx_id),
663                                             p_parameterlist =>l_parameter_list
664                         );
665 
666    l_event_key:=FUN_INITIATOR_WF_PKG.GENERATE_KEY(p_batch_id=>l_invoice_id,
667                                                                p_trx_id => 0
668                                                               );
669 
670    WF_EVENT.RAISE(p_event_name =>'oracle.apps.fun.single.ap.transfer',
671                                               p_event_key  =>l_event_key,
672                                               p_parameters=>l_parameter_list);
673 
674    l_parameter_list.delete();
675 
676 EXCEPTION
677  When others then
678   raise;
679 
680 END transfer_single;
681 
682 
683 
684 END;
685