[Home] [Help]
PACKAGE BODY: APPS.FA_MC_UTIL_PVT
Source
4 g_release number := fa_cache_pkg.fazarel_release;
1 PACKAGE BODY FA_MC_UTIL_PVT as
2 /* $Header: FAVMCUB.pls 120.13.12020000.3 2012/12/11 10:22:03 spooyath ship $ */
3
5
6 FUNCTION get_existing_rate
7 (p_set_of_books_id IN number,
8 p_transaction_header_id IN number,
9 px_rate IN OUT NOCOPY number,
10 px_avg_exchange_rate OUT NOCOPY number
11 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
12
13 l_reporting_currency_code varchar2(15);
14
15 l_exchange_rate number;
16 l_avg_exchange_rate number;
17 l_complete varchar2(1);
18 l_result_code varchar2(15);
19
20 -- Bug 15868325
21 cursor c_get_sob_corp_cur is
22 select glcr.ledger_id
23 from gl_ledgers gltr,
24 fa_mc_book_controls mcbc,
25 gl_ledgers glcr
26 where gltr.ledger_id = p_set_of_books_id
27 and gltr.currency_code = glcr.currency_code
28 and gltr.chart_of_accounts_id = glcr.chart_of_accounts_id
29 and gltr.ledger_id <> glcr.ledger_id
30 and mcbc.book_type_code = fa_cache_pkg.fazcbc_record.distribution_source_book
31 and glcr.ledger_id = mcbc.set_of_books_id;
32
33 l_found_in_corp number := 0;
34 l_set_of_books_id number;
35
36 l_calling_fn varchar2(35) := 'fa_mc_util_pvt.get_existing_rate';
37 calc_err EXCEPTION;
38
39 BEGIN
40
41 l_reporting_currency_code := gl_mc_currency_pkg.get_currency_code (
42 p_set_of_books_id => p_set_of_books_id);
43
44 -- Bug 15868325 : For tax book, if the exchange_rate is not available
45 -- for the sob_id in the corp book. Get the ledger_id from the corp
46 -- which has the same currency and use the rate from that ledger_id
47
48 l_set_of_books_id := p_set_of_books_id;
49 if fa_cache_pkg.fazcbc_record.book_class = 'TAX' then
50
51 if (p_log_level_rec.statement_level) then
52 fa_debug_pkg.add(l_calling_fn,'Get rate for tax book: ',
53 fa_cache_pkg.fazcbc_record.book_type_code, p_log_level_rec => p_log_level_rec);
54 end if;
55
56 select count(1)
57 into l_found_in_corp
58 FROM fa_mc_books_rates
59 WHERE set_of_books_id = p_set_of_books_id
60 AND transaction_header_id = p_transaction_header_id;
61
62 if l_found_in_corp = 0 then
63
64 if (p_log_level_rec.statement_level) then
65 fa_debug_pkg.add(l_calling_fn,'Fetching cur ',
66 'c_get_sob_corp_cur', p_log_level_rec => p_log_level_rec);
67 end if;
68
69 open c_get_sob_corp_cur;
70 fetch c_get_sob_corp_cur into l_set_of_books_id;
71 close c_get_sob_corp_cur;
72
73 if (p_log_level_rec.statement_level) then
77
74 fa_debug_pkg.add(l_calling_fn,'After l_set_of_books_id ',
75 l_set_of_books_id, p_log_level_rec => p_log_level_rec);
76 end if;
78 end if;
79 end if;
80 -- Bug 15868325 : End
81
82 if (p_log_level_rec.statement_level) then
83 fa_debug_pkg.add(l_calling_fn,'Calling get_rate for ',
84 l_set_of_books_id, p_log_level_rec => p_log_level_rec);
85 end if;
86
87 -- get the exchange rate from the corporate transaction
88 MC_FA_UTILITIES_PKG.get_rate
89 (p_set_of_books_id => l_set_of_books_id,
90 p_transaction_header_id => p_transaction_header_id,
91 p_currency_code => l_reporting_currency_code,
92 p_exchange_rate => l_exchange_rate,
93 p_avg_exchange_rate => l_avg_exchange_rate,
94 p_complete => l_complete,
95 p_result_code => l_result_code, p_log_level_rec => p_log_level_rec);
96
97 if (l_result_code <> 'FOUND') then
98 raise calc_err;
99 end if;
100
101 px_rate := l_exchange_rate;
102 px_avg_exchange_rate := l_avg_exchange_rate;
103
104 return true;
105
106 EXCEPTION
107 when calc_err then
108 fa_srvr_msg.add_message(calling_fn => 'fa_mc_util_pvt.get_existing_rate', p_log_level_rec => p_log_level_rec);
109 return false;
110
111 when others then
112 fa_srvr_msg.add_sql_error(calling_fn => 'fa_mc_util_pvt.get_existing_rate', p_log_level_rec => p_log_level_rec);
113 return false;
114
115 END get_existing_rate;
116
117 ----------------------------------------------------------------------------------------
118
119 FUNCTION get_trx_rate
120 (p_prim_set_of_books_id IN number,
121 p_reporting_set_of_books_id IN number,
122 px_exchange_date IN OUT NOCOPY date,
123 p_book_type_code IN varchar2,
124 px_rate IN OUT NOCOPY number
125 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
126
127 l_exchange_date date;
128 l_primary_currency_code varchar2(15);
129 l_conversion_type gl_daily_conversion_types.conversion_type%TYPE;
130 l_result_code varchar2(15);
131 l_exchange_rate number;
132 l_denominator_rate number;
133 l_numerator_rate number;
134
135 l_reporting_currency_code varchar2(15);
136 l_fixed_rate boolean;
137 l_relation varchar2(15);
138 l_trans_date date;
139 --Secondary_changes
140 l_secondary_sob_id number;
141 l_application_id number;
142
143 calc_err EXCEPTION;
144
145 BEGIN
146
147 if (p_log_level_rec.statement_level) then
148 fa_debug_pkg.add('get_trx',
149 'getting',
150 'currency code - primary', p_log_level_rec => p_log_level_rec);
151 end if;
152
153
154 l_primary_currency_code := gl_mc_currency_pkg.get_currency_code (
155 p_set_of_books_id => p_prim_set_of_books_id);
156
157
158 if (p_log_level_rec.statement_level) then
159 fa_debug_pkg.add('get_trx',
160 'getting',
161 'currency code - reporting', p_log_level_rec => p_log_level_rec);
162 end if;
163
164 l_reporting_currency_code := gl_mc_currency_pkg.get_currency_code (
165 p_set_of_books_id => p_reporting_set_of_books_id);
166
167 if (p_log_level_rec.statement_level) then
168 fa_debug_pkg.add('get_trx',
169 'getting',
170 'exchange_rate', p_log_level_rec => p_log_level_rec);
171 end if;
172
173
174 l_trans_date := px_exchange_date;
175 l_secondary_sob_id := FA_XLA_EVENTS_PVT.get_secondary_sob_id(p_book_type_code);
176 if(l_secondary_sob_id is not null) and (p_prim_set_of_books_id <> p_reporting_set_of_books_id)then
177 l_application_id := 101;
178 else
179 l_application_id := 140;
180 end if;
181 gl_mc_currency_pkg.get_rate(
182 p_primary_set_of_books_id => p_prim_set_of_books_id,
183 p_reporting_set_of_books_id => p_reporting_set_of_books_id,
184 p_trans_date => l_trans_date,
185 p_trans_currency_code => l_primary_currency_code,
186 p_trans_conversion_type => l_conversion_type,
187 p_trans_conversion_date => px_exchange_date,
188 p_trans_conversion_rate => l_exchange_rate,
189 p_application_id => l_application_id,
190 p_org_id => NULL,
191 p_fa_book_type_code => p_book_type_code,
192 p_je_source_name => NULL,
193 p_je_category_name => NULL,
194 p_result_code => l_result_code,
195 p_denominator_rate => l_denominator_rate,
196 p_numerator_rate => l_numerator_rate);
197
198 if (p_log_level_rec.statement_level) then
199 fa_debug_pkg.add('get_trx',
200 'getting',
201 'relation', p_log_level_rec => p_log_level_rec);
202 end if;
203
204
205 gl_currency_api.get_relation(
206 x_from_currency => l_primary_currency_code,
207 x_to_currency => l_reporting_currency_code,
211
208 x_effective_date => px_exchange_date,
209 x_fixed_rate => l_fixed_rate,
210 x_relationship => l_relation);
212 if (p_log_level_rec.statement_level) then
213 fa_debug_pkg.add('get_trx',
214 'done getting',
215 'relation', p_log_level_rec => p_log_level_rec);
216 end if;
217
218
219 if l_fixed_rate then
220 px_rate := l_numerator_rate / l_denominator_rate;
221 else
222 px_rate := l_exchange_rate;
223 end if;
224
225 return true;
226
227 EXCEPTION
228 when calc_err then
229 fa_srvr_msg.add_message(calling_fn => 'fa_mc_util_pvt.get_trx_rate', p_log_level_rec => p_log_level_rec);
230 return false;
231
232 when others then
233 fa_srvr_msg.add_sql_error(calling_fn => 'fa_mc_util_pvt.get_trx_rate', p_log_level_rec => p_log_level_rec);
234 return false;
235
236 END get_trx_rate;
237
238 -----------------------------------------------------------------------------
239
240 FUNCTION get_latest_rate
241 (p_asset_id IN number,
242 p_book_type_code IN varchar2,
243 p_set_of_books_id IN number,
244 px_rate OUT NOCOPY number,
245 px_avg_exchange_rate OUT NOCOPY number
246 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
247
248 BEGIN
249
250 select br1.exchange_rate,
251 br1.avg_exchange_rate
252 into px_rate,
253 px_avg_exchange_rate
254 from fa_mc_books_rates br1
255 where br1.asset_id = p_asset_id
256 and br1.book_type_code = p_book_type_code
257 and br1.set_of_books_id = p_set_of_books_id
258 and br1.transaction_header_id =
259 (select max(br2.transaction_header_id)
260 from fa_mc_books_rates br2
261 where br2.asset_id = p_asset_id
262 and br2.book_type_code = p_book_type_code
263 and br2.set_of_books_id = p_set_of_books_id);
264
265 return true;
266
267 EXCEPTION
268
269 when others then
270 fa_srvr_msg.add_sql_error(calling_fn => 'fa_mc_util_pvt.get_latest_rate', p_log_level_rec => p_log_level_rec);
271 return false;
272
273 END get_latest_rate;
274
275 -----------------------------------------------------------------------------
276
277 FUNCTION get_invoice_rate
278 (p_inv_rec IN FA_API_TYPES.inv_rec_type,
279 p_book_type_code IN varchar2,
280 p_set_of_books_id IN number,
281 px_exchange_date IN OUT NOCOPY date,
282 px_inv_rate_rec IN OUT NOCOPY FA_API_TYPES.inv_rate_rec_type
283 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN boolean IS
284
285 -- new variables for merging mrc trigger logic
286 l_exchange_date DATE;
287 l_inv_exchange_date DATE;
288 l_mc_inv_exchange_date DATE;
289 l_exchange_rate NUMBER;
290 l_inv_exchange_rate NUMBER;
291 l_mc_inv_exchange_rate NUMBER;
292 l_current_asset_cost NUMBER;
293 l_result_code VARCHAR2(15);
294 l_inv_currency_code fnd_currencies.currency_code%TYPE;
295 l_mc_inv_currency_code fnd_currencies.currency_code%TYPE;
296 l_exchange_rate_type gl_daily_conversion_types.conversion_type%TYPE;
297 l_inv_exchange_rate_type gl_daily_conversion_types.conversion_type%TYPE;
298 l_mc_inv_exchange_rate_type gl_daily_conversion_types.conversion_type%TYPE;
299 l_denominator_rate NUMBER;
300 l_numerator_rate NUMBER;
301 l_line_base_amount NUMBER;
302 l_mc_line_base_amount NUMBER;
303 l_prj_fixed_assets_cost NUMBER;
304
305 l_currency_code fnd_currencies.currency_code%TYPE;
306 l_primary_currency_code fnd_currencies.currency_code%TYPE;
307 l_primary_sob_id NUMBER;
308
309
310 l_trans_date date;
311
312 l_calling_fn varchar2(35) := 'fa_mc_util_pvt.get_invoice_rate';
313
314 -- exceptions
315 error_found exception;
316
317 BEGIN
318
319 l_primary_sob_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
320 l_result_code := 'NOT_FOUND';
321
322 -- first check if this is a split line and if so,
323 -- attempt to get the rate from the parent. if it
324 -- doesn't exist, we'll just enter the main logic below
325
326 if (p_inv_rec.split_merged_code = 'SC') then
327
328 BEGIN
329 l_result_code := 'FOUND';
330
331 select decode(rate.exchange_rate,0,
332 decode(ad.fixed_assets_cost,0,0,
333 (rate.fixed_assets_cost/ad.fixed_assets_cost)
334 ), rate.exchange_rate
335 )
336 into l_exchange_rate
337 from fa_mc_mass_rates rate,
338 fa_mass_additions ad
339 where rate.mass_addition_id = p_inv_rec.split_parent_mass_additions_id
340 and rate.mass_addition_id = ad.mass_addition_id
341 and rate.set_of_books_id = p_set_of_books_id;
342
343 if (p_log_level_rec.statement_level) then
344 fa_debug_pkg.add(l_calling_fn,
345 'Exchange rate for parent due to SC ',
346 l_exchange_rate, p_log_level_rec => p_log_level_rec);
347 end if;
351 -- this can happen when a reporting book is
348
349 EXCEPTION
350 when NO_DATA_FOUND then
352 -- associated to a FA book but not in AP
353 l_result_code := 'NOT_FOUND';
354 when OTHERS then
355 fa_srvr_msg.add_sql_error(
356 calling_fn => l_calling_fn,
357 p_log_level_rec => p_log_level_rec);
358 raise error_found;
359 END;
360
361 end if;
362
363 -- if rate not found from split logic above
364
365 if (l_result_code = 'NOT_FOUND') then
366
367 BEGIN
368
369 -- get the currency codes first
370 if (p_inv_rec.feeder_system_name = 'ORACLE PAYABLES' or
371 p_inv_rec.feeder_system_name = 'ORACLE PROJECTS') then
372
373 if (p_log_level_rec.statement_level) then
374 fa_debug_pkg.add(l_calling_fn,
375 'getting',
376 'currency code - reporting', p_log_level_rec => p_log_level_rec);
377 end if;
378
379 l_currency_code := gl_mc_currency_pkg.get_currency_code (
380 p_set_of_books_id => p_set_of_books_id);
381
382 if (p_log_level_rec.statement_level) then
383 fa_debug_pkg.add(l_calling_fn,
384 'getting',
385 'currency code - primary', p_log_level_rec => p_log_level_rec);
386 end if;
387
388 l_primary_currency_code := gl_mc_currency_pkg.get_currency_code (
389 p_set_of_books_id => l_primary_sob_id);
390
391 end if;
392
393 if (p_log_level_rec.statement_level) then
394 fa_debug_pkg.add(l_calling_fn,
395 'feeder system name',
396 p_inv_rec.feeder_system_name, p_log_level_rec => p_log_level_rec);
397 end if;
398
399 if (p_inv_rec.feeder_system_name = 'ORACLE PAYABLES' and
400 G_release = 11) then
401
402 BEGIN
403 l_result_code := 'FOUND';
404 -- l_mc_inv_currency_code is the transaction currency
405 -- of the invoice in AP
406 -- l_mc_inv_exchange_rate is the exchange rate used to
407 -- convert from transaction currency to reporting currency
408 -- l_result_code will be set to NOT_FOUND if no match
409 -- for invoice is found in ap_mc_invoice_dists
410 -- which means that reporting book is not set up as
411 -- conversion option for AP for the primary book in GL
412
413 BEGIN
414 select a.invoice_currency_code,
415 nvl(b.exchange_rate, 1),
416 nvl(b.exchange_date, a.invoice_date),
417 b.exchange_rate_type,
418 nvl(b.base_amount, b.amount)
419 into l_mc_inv_currency_code,
420 l_mc_inv_exchange_rate,
421 l_mc_inv_exchange_date,
422 l_mc_inv_exchange_rate_type,
423 l_mc_line_base_amount
424 from ap_invoices_all a,
425 ap_mc_invoice_dists b
426 where a.invoice_id = p_inv_rec.invoice_id
427 and a.invoice_id = b.invoice_id
428 and b.distribution_line_number = p_inv_rec.ap_distribution_line_number
429 and b.set_of_books_id = p_set_of_books_id;
430
431 EXCEPTION
432 when NO_DATA_FOUND then
433 -- this can happen when a reporting book is
434 -- associated to a FA book but not in AP
435 l_result_code := 'NOT_FOUND';
436
437 when OTHERS then
438 fa_srvr_msg.add_message(
439 calling_fn => l_calling_fn,
440 name => 'FA_MRC_SLT_MC_RECS',
441 token1 => 'TABLE',
442 value1 => 'ap_mc_invoice_dists',
443 token2 => 'TRIGGER',
444 value2 => 'fa_mc_mass_additions_aiud', p_log_level_rec => p_log_level_rec);
445 raise error_found;
446 END;
447
448 BEGIN
449
450 -- l_inv_exchange_rate is the exchange rate from
451 -- transaction currency in AP to functional currency
452 -- in AP when transaction is in a foreign currency
453
454 select a.invoice_currency_code,
455 nvl(b.exchange_rate, 1),
456 nvl(b.exchange_date, a.invoice_date),
457 b.exchange_rate_type,
458 nvl(b.base_amount, b.amount)
459 into l_inv_currency_code,
460 l_inv_exchange_rate,
461 l_inv_exchange_date,
462 l_inv_exchange_rate_type,
463 l_line_base_amount
464 from ap_invoices_all a,
465 ap_invoice_distributions_all b
466 where a.invoice_id = p_inv_rec.invoice_id
467 and a.invoice_id = b.invoice_id
471 when OTHERS then
468 and b.distribution_line_number = p_inv_rec.ap_distribution_line_number;
469
470 EXCEPTION
472 fa_srvr_msg.add_message(
473 calling_fn => l_calling_fn,
474 name => 'FA_MRC_SLT_INV_INFO',
475 token1 => 'TRIGGER',
476 value1 => 'fa_mc_mass_additions_aiud',
477 token2 => 'INVOICE_ID',
478 value2 => to_char(p_inv_rec.invoice_id),
479 token3 => 'DISTRIBUTION_LINE_NUMBER',
480 value3 => to_char(p_inv_rec.ap_distribution_line_number),
481 p_log_level_rec => p_log_level_rec);
482 raise error_found;
483 END;
484
485 if (l_result_code = 'FOUND') then
486 -- found invoice in ap_mc_invoice_dists for this reporting book
487
488 if (l_line_base_amount = 0) then
489 l_exchange_rate := 1;
490 else
491 l_exchange_rate := (l_mc_line_base_amount/
492 l_line_base_amount);
493 end if;
494 else
495 -- invoice not found in ap_mc_invoice_dists table for reporting book
496 if (l_inv_currency_code <> l_currency_code) then
497
498 l_exchange_date := l_inv_exchange_date;
499 l_exchange_rate := l_inv_exchange_rate;
500 l_exchange_rate_type := l_inv_exchange_rate_type;
501
502 gl_mc_currency_pkg.get_rate(
503 l_primary_sob_id, -- v_rsob.primary_set_of_books_id,
504 p_set_of_books_id, -- v_rsob.set_of_books_id
505 l_inv_exchange_date,
506 l_inv_currency_code,
507 l_exchange_rate_type,
508 l_exchange_date,
509 l_exchange_rate,
510 140,
511 null,
512 p_book_type_code,
513 null,
514 null,
515 l_result_code,
516 l_denominator_rate,
517 l_numerator_rate);
518
519 -- bug 2095221 not inverting when get_rate have been called.
520 -- bug 2533988 reverting change for 2095221
521
522 l_exchange_rate := l_exchange_rate /
523 l_inv_exchange_rate;
524 else
525 l_exchange_rate := 1 / l_inv_exchange_rate;
526 end if;
527 end if; -- end of if l_result_code = FOUND
528 END;
529
530 elsif (p_inv_rec.feeder_system_name = 'ORACLE PROJECTS') then
531
532 l_result_code := 'FOUND';
533 -- bug 4583014
534 -- if (p_inv_rec.merged_code = 'MP' OR
535 -- l_primary_currency_code = l_currency_code) then
536 -- l_exchange_rate := 1;
537
538 if ((p_inv_rec.merged_code = 'MP'
539 and p_inv_rec.fixed_assets_cost = 0) OR
540 l_primary_currency_code = l_currency_code) then
541 l_exchange_rate := 1;
542 -- end bug
543 else
544 BEGIN
545 select current_asset_cost
546 into l_current_asset_cost
547 from pa_mc_prj_ast_lines_all
548 where project_asset_line_id = p_inv_rec.project_asset_line_id
549 and set_of_books_id = p_set_of_books_id;
550
551 -- bug 4583014 changing if
552 -- if (p_inv_rec.fixed_assets_cost = 0) then
553
554 if (p_inv_rec.fixed_assets_cost = 0 or nvl(l_current_asset_cost,0) = 0 ) then
555 l_exchange_rate := 1;
556 else
557
558 if p_inv_rec.split_code = 'SC' then
559 -- BUG# 3892604
560 -- get value from PA when not found
561 select current_asset_cost
562 into l_prj_fixed_assets_cost
563 from pa_project_asset_lines_all
564 where project_asset_line_id = p_inv_rec.project_asset_line_id;
565 else
566 l_prj_fixed_assets_cost := p_inv_rec.fixed_assets_cost;
567 end if;
568
569 l_exchange_rate := l_current_asset_cost /
570 NVL(l_prj_fixed_assets_cost,1);
571
572 end if;
573
574 EXCEPTION
575 when NO_DATA_FOUND then
576 l_result_code := 'NOT_FOUND';
577 when OTHERS then
578 fa_srvr_msg.add_message(
579 calling_fn => l_calling_fn,
580 name => 'FA_MRC_SLT_MC_RECS',
581 token1 => 'TABLE',
582 value1 => 'pa_mc_prj_ast_lines_all',
583 token2 => 'TRIGGER',
584 value2 => 'fa_mc_mass_additions_aiud', p_log_level_rec => p_log_level_rec);
585 raise error_found;
586 END;
587
588 if (l_result_code = 'NOT_FOUND') then
589
590 -- NOTE: the old mrc trigger used sysdate here,
591 -- but as this will be called at post not insert
592 -- this is not consistent. need to investigate
593 -- using another date in the table
594 -- ( i.e. creation_date/create_batch_date/invoice_date/last_update_date/dpis )
595
596 l_exchange_date := SYSDATE;
597 l_exchange_rate := NULL;
598 l_exchange_rate_type := NULL;
599 l_trans_date := l_exchange_date;
600
601 gl_mc_currency_pkg.get_rate(
602 l_primary_sob_id, -- v_rsob.primary_set_of_books_id,
603 p_set_of_books_id, -- v_rsob.set_of_books_id,
604 l_trans_date, -- change / verify
605 l_primary_currency_code,
606 l_exchange_rate_type,
607 l_exchange_date,
608 l_exchange_rate,
609 140,
610 null,
611 p_book_type_code,
612 null,
613 null,
614 l_result_code,
615 l_denominator_rate,
616 l_numerator_rate);
617 end if;
618 end if; -- end if mp / currency code
619
620 else
621 -- if the rate is not provided for non-ap and non-pa lines,
622 -- derive and load it... this is needed for quick/detail adds
623 -- and source line additions as well as for flexibility
624
625 -- also the R12 logic for all lines
626
627 if (p_log_level_rec.statement_level) then
628 fa_debug_pkg.add('X','p sob', l_primary_sob_id, p_log_level_rec => p_log_level_rec);
629 fa_debug_pkg.add('X','r sob', p_set_of_books_id, p_log_level_rec => p_log_level_rec);
630 fa_debug_pkg.add('X','p date', px_exchange_date, p_log_level_rec => p_log_level_rec);
631 fa_debug_pkg.add('X','p book', p_book_type_code, p_log_level_rec => p_log_level_rec);
632
633 end if;
634
635 if not get_trx_rate
636 (p_prim_set_of_books_id => l_primary_sob_id,
637 p_reporting_set_of_books_id => p_set_of_books_id,
638 px_exchange_date => px_exchange_date,
639 p_book_type_code => p_book_type_code,
640 px_rate => l_exchange_rate,
641 p_log_level_rec => p_log_level_rec) then
642 raise error_found;
643 end if;
644
645 end if; -- 11i/ap/pa/other
646 END; -- BEGIN block for invoices
647 end if; -- if found (for split)
648
649 -- assign the exchange rate back to the record
650 px_inv_rate_rec.exchange_rate := l_exchange_rate;
651
652 return true;
653
654 EXCEPTION
655
656 when error_found then
657 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
658 return false;
659
660 when others then
661 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
662 return false;
663
664
665 END get_invoice_rate;
666
667 END FA_MC_UTIL_PVT;