[Home] [Help]
PACKAGE BODY: APPS.FA_RESERVE_TRANSFER_PUB
Source
1 PACKAGE BODY FA_RESERVE_TRANSFER_PUB AS
2 /* $Header: FAPRSVXB.pls 120.9 2005/09/14 19:18:52 bridgway noship $ */
3
4
5 --*********************** Global constants ******************************--
6
7 G_PKG_NAME CONSTANT varchar2(30) := 'FA_RESERVE_TRANSFER_PUB';
8 G_API_NAME CONSTANT varchar2(30) := 'Reserve Transfer API';
9 G_API_VERSION CONSTANT number := 1.0;
10
11 g_log_level_rec fa_api_types.log_level_rec_type;
12
13
14 --*********************** Private functions ******************************--
15
16 FUNCTION do_all_books
17 (p_src_asset_id IN NUMBER,
18 p_dest_asset_id IN NUMBER,
19 p_book_type_code IN VARCHAR2,
20 px_src_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
21 px_dest_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
22 p_amount IN NUMBER,
23 p_log_level_rec IN fa_api_types.log_level_rec_type default null) RETURN BOOLEAN;
24
25
26 --*********************** Public procedures ******************************--
27
28
29 PROCEDURE do_reserve_transfer
30 (p_api_version IN NUMBER,
31 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
32 p_commit IN VARCHAR2 := FND_API.G_FALSE,
33 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
34 p_calling_fn IN VARCHAR2,
35 x_return_status OUT NOCOPY VARCHAR2,
36 x_msg_count OUT NOCOPY NUMBER,
37 x_msg_data OUT NOCOPY VARCHAR2,
38
39 p_src_asset_id IN NUMBER,
40 p_dest_asset_id IN NUMBER,
41 p_book_type_code IN VARCHAR2,
42 p_amount IN NUMBER,
43 px_src_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
44 px_dest_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type) IS
45
46 l_reporting_flag varchar2(1);
47
48 -- used to store original sob info upon entry into api
49 l_orig_set_of_books_id number;
50 l_orig_currency_context varchar2(64);
51
52
53 l_calling_fn VARCHAR2(35) := 'fa_rsv_transfer_pub.do_rsv_transfer';
54 rsv_xfr_err EXCEPTION;
55
56 BEGIN
57
58 SAVEPOINT do_reserve_transfer;
59
60 if (not g_log_level_rec.initialized) then
61 if (NOT fa_util_pub.get_log_level_rec (
62 x_log_level_rec => g_log_level_rec
63 )) then
64 raise rsv_xfr_err;
65 end if;
66 end if;
67
68
69 -- Initialize message list if p_init_msg_list is set to TRUE.
70 if (fnd_api.to_boolean(p_init_msg_list)) then
71 -- initialize error message stack.
72 fa_srvr_msg.init_server_message;
73
74 -- initialize debug message stack.
75 fa_debug_pkg.initialize;
76 end if;
77
78 -- Check version of the API
79 -- Standard call to check for API call compatibility.
80 if NOT fnd_api.compatible_api_call (
81 G_API_VERSION,
82 p_api_version,
83 G_API_NAME,
84 G_PKG_NAME) then
85 x_return_status := FND_API.G_RET_STS_ERROR;
86 raise rsv_xfr_err;
87 end if;
88
89 -- call the cache for the primary transaction book
90 if NOT fa_cache_pkg.fazcbc(X_book => p_book_type_code,
91 p_log_level_rec => g_log_level_rec) then
92 raise rsv_xfr_err;
93 end if;
94
95 -- verify the asset exists in the book already
96 if not FA_ASSET_VAL_PVT.validate_asset_book
97 (p_transaction_type_code => 'ADJUSTMENT',
98 p_book_type_code => p_book_type_code,
99 p_asset_id => p_src_asset_id,
100 p_calling_fn => l_calling_fn,
101 p_log_level_rec => g_log_level_rec) then
102 raise rsv_xfr_err;
103 end if;
104
105 if not FA_ASSET_VAL_PVT.validate_asset_book
106 (p_transaction_type_code => 'ADJUSTMENT',
107 p_book_type_code => p_book_type_code,
108 p_asset_id => p_dest_asset_id,
109 p_calling_fn => l_calling_fn,
110 p_log_level_rec => g_log_level_rec) then
111 raise rsv_xfr_err;
112 end if;
113
114
115 -- get the current info for the primary book
116
117 fnd_profile.get ('GL_SET_OF_BKS_ID',l_orig_set_of_books_id);
118 l_orig_currency_context := SUBSTRB(USERENV('CLIENT_INFO'),45,10);
119
120 fnd_profile.put('GL_SET_OF_BKS_ID', fa_cache_pkg.fazcbc_record.set_of_books_id);
121 fnd_client_info.set_currency_context (fa_cache_pkg.fazcbc_record.set_of_books_id);
122
123 -- Account for transaction submitted from a responsibility
124 -- that is not tied to a SOB_ID by getting the value from
125 -- the book struct
126
127 -- Get the book type code P,R or N
128 if not fa_cache_pkg.fazcsob
129 (X_set_of_books_id => fa_cache_pkg.fazcbc_record.set_of_books_id,
130 X_mrc_sob_type_code => l_reporting_flag,
131 p_log_level_rec => g_log_level_rec) then
132 raise rsv_xfr_err;
133 end if;
134
135 -- Error out if the program is submitted from the Reporting Responsibility
136 -- No transaction permitted directly on reporting books.
137
138 IF l_reporting_flag = 'R' THEN
139 fa_srvr_msg.add_message
140 (calling_fn => l_calling_fn,
141 name => 'MRC_OSP_INVALID_BOOK_TYPE',
142 p_log_level_rec => g_log_level_rec);
143 raise rsv_xfr_err;
144 END IF;
145
146 -- end initial MRC validation
147
148
149
150 -- call the mrc wrapper for the transaction book
151
152 if not do_all_books
153 (p_src_asset_id => p_src_asset_id,
154 p_dest_asset_id => p_dest_asset_id,
155 p_book_type_code => p_book_type_code,
156 px_src_trans_rec => px_src_trans_rec,
157 px_dest_trans_rec => px_dest_trans_rec,
158 p_amount => p_amount,
159 p_log_level_rec => g_log_level_rec)then
160 raise rsv_xfr_err;
161 end if;
162
163
164 -- no auto-copy / cip in tax for group reclass transactions
165
166 -- commit if p_commit is TRUE.
167 if (fnd_api.to_boolean (p_commit)) then
168 COMMIT WORK;
169 end if;
170
171 x_return_status := FND_API.G_RET_STS_SUCCESS;
172
173 EXCEPTION
174
175 when rsv_xfr_err then
176 ROLLBACK TO do_reserve_transfer;
177
178 fnd_profile.put('GL_SET_OF_BKS_ID', l_orig_set_of_books_id);
179 fnd_client_info.set_currency_context (l_orig_currency_context);
180
181 fa_srvr_msg.add_message(calling_fn => l_calling_fn,
182 p_log_level_rec => g_log_level_rec);
183
184 -- do not retrieve / clear messaging when this is being called
185 -- from reclass api - allow calling util to dump them
186 if (p_calling_fn <> 'FA_RECLASS_PVT.do_redefault') then
187 FND_MSG_PUB.count_and_get (
188 p_count => x_msg_count,
189 p_data => x_msg_data
190 );
191 end if;
192
193 x_return_status := FND_API.G_RET_STS_ERROR;
194
195 when others then
196 ROLLBACK TO do_reserve_transfer;
197
198 fnd_profile.put('GL_SET_OF_BKS_ID', l_orig_set_of_books_id);
199 fnd_client_info.set_currency_context (l_orig_currency_context);
200
201 fa_srvr_msg.add_sql_error(
202 calling_fn => l_calling_fn
203 ,p_log_level_rec => g_log_level_rec);
204
205 -- do not retrieve / clear messaging when this is being called
206 -- from reclass api - allow calling util to dump them
207 if (p_calling_fn <> 'FA_RECLASS_PVT.do_redefault') then
208 FND_MSG_PUB.count_and_get (
209 p_count => x_msg_count,
210 p_data => x_msg_data
211 );
212 end if;
213
214 x_return_status := FND_API.G_RET_STS_ERROR;
215
216 END do_reserve_transfer;
217
218 -----------------------------------------------------------------------------
219
220 -- Books (MRC) Wrapper - called from public API above
221 --
222 -- For non mrc books, this just calls the private API with provided params
223 -- For MRC, it processes the primary and then loops through each reporting
224 -- book calling the private api for each.
225
226
227 FUNCTION do_all_books
228 (p_src_asset_id IN NUMBER,
229 p_dest_asset_id IN NUMBER,
230 p_book_type_code IN VARCHAR2,
231 px_src_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
232 px_dest_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
233 p_amount IN NUMBER,
234 p_log_level_rec in fa_api_types.log_level_rec_type default null) RETURN BOOLEAN IS
235
236
237 -- used for new source asset
238 l_src_asset_hdr_rec fa_api_types.asset_hdr_rec_type;
239 l_mrc_src_asset_hdr_rec fa_api_types.asset_hdr_rec_type;
240 l_src_asset_desc_rec fa_api_types.asset_desc_rec_type;
241 l_src_asset_type_rec fa_api_types.asset_type_rec_type;
242 l_src_asset_cat_rec fa_api_types.asset_cat_rec_type;
243 l_src_asset_fin_rec_old fa_api_types.asset_fin_rec_type;
244 l_src_asset_fin_rec_new fa_api_types.asset_fin_rec_type;
245 l_src_asset_deprn_rec_old fa_api_types.asset_deprn_rec_type;
246 l_src_asset_deprn_rec_new fa_api_types.asset_deprn_rec_type;
247
248
249 -- used for new destination asset
250 l_dest_asset_hdr_rec fa_api_types.asset_hdr_rec_type;
251 l_mrc_dest_asset_hdr_rec fa_api_types.asset_hdr_rec_type;
252 l_dest_asset_desc_rec fa_api_types.asset_desc_rec_type;
253 l_dest_asset_type_rec fa_api_types.asset_type_rec_type;
254 l_dest_asset_cat_rec fa_api_types.asset_cat_rec_type;
255 l_dest_asset_fin_rec_old fa_api_types.asset_fin_rec_type;
256 l_dest_asset_fin_rec_new fa_api_types.asset_fin_rec_type;
257 l_dest_asset_deprn_rec_old fa_api_types.asset_deprn_rec_type;
258 l_dest_asset_deprn_rec_new fa_api_types.asset_deprn_rec_type;
259
260 l_src_row_id varchar2(30);
261 l_dest_row_id varchar2(30);
262 l_src_return_status boolean;
263 l_dest_return_status boolean;
264
265 l_amount number;
266 l_src_primary_cost number; -- ??? use ???
267
268 l_period_rec FA_API_TYPES.period_rec_type;
269 l_rsob_tbl FA_CACHE_PKG.fazcrsob_sob_tbl_type;
270 l_reporting_flag varchar2(1);
271
272 l_exchange_rate number;
273 l_avg_rate number;
274
275 l_rowid varchar2(40);
276 l_return_status boolean;
277
278 l_calling_fn VARCHAR2(35) := 'fa_rsv_transfer_pub.do_all_books';
279 rsv_xfr_err exception;
280
281 BEGIN
282
283 -- load the initial values in structs
284 l_src_asset_hdr_rec.asset_id := p_src_asset_id;
285 l_src_asset_hdr_rec.book_type_code := p_book_type_code;
286 l_dest_asset_hdr_rec.asset_id := p_dest_asset_id;
287 l_dest_asset_hdr_rec.book_type_code := p_book_type_code;
288
289 px_src_trans_rec.transaction_type_code := 'GROUP ADJUSTMENT';
290 px_src_trans_rec.transaction_subtype := 'AMORTIZED';
291 px_src_trans_rec.transaction_key := 'GV';
292 px_dest_trans_rec.transaction_type_code := 'GROUP ADJUSTMENT';
293 px_dest_trans_rec.transaction_subtype := 'AMORTIZED';
294 px_dest_trans_rec.transaction_key := 'GV';
295
296 -- load the period struct for current period info
297 if not FA_UTIL_PVT.get_period_rec
298 (p_book => p_book_type_code,
299 p_effective_date => NULL,
300 x_period_rec => l_period_rec,
301 p_log_level_rec => p_log_level_rec) then
302 raise rsv_xfr_err;
303 end if;
304
305 -- note that we need to investigate / determine transaction subtype and track member impacts!!!!
306 -- how to handle amort start / trx_date , etc on the member in all three scenarios
307 -- can this be effectively backdated?
308
309 px_src_trans_rec.transaction_date_entered :=
310 greatest(l_period_rec.calendar_period_open_date,
311 least(sysdate,l_period_rec.calendar_period_close_date));
312
313 px_dest_trans_rec.transaction_date_entered := px_src_trans_rec.transaction_date_entered ;
314
315
316 -- we need the thid first for inserting clearing into adjustments
317 select fa_transaction_headers_s.nextval
318 into px_src_trans_rec.transaction_header_id
319 from dual;
320
321 select fa_transaction_headers_s.nextval
322 into px_dest_trans_rec.transaction_header_id
323 from dual;
324
325 -- insert the transaction link record (sequence will be used in table handler)
326
327 fa_trx_references_pkg.insert_row
328 (X_Rowid => l_rowid,
329 X_Trx_Reference_Id => px_src_trans_rec.trx_reference_id,
330 X_Book_Type_Code => l_src_asset_hdr_rec.book_type_code,
331 X_Src_Asset_Id => l_src_asset_hdr_rec.asset_id,
332 X_Src_Transaction_Header_Id => px_src_trans_rec.transaction_header_id,
333 X_Dest_Asset_Id => l_dest_asset_hdr_rec.asset_id,
334 X_Dest_Transaction_Header_Id => px_dest_trans_rec.transaction_header_id,
335 X_Member_Asset_Id => null,
336 X_Member_Transaction_Header_Id => null,
337 X_Transaction_Type => 'RESERVE TRANSFER',
338 X_Src_Transaction_Subtype => px_src_trans_rec.transaction_subtype,
339 X_Dest_Transaction_Subtype => px_dest_trans_rec.transaction_subtype,
340 X_Src_Amortization_Start_Date => px_src_trans_rec.amortization_start_date,
341 X_Dest_Amortization_Start_Date => px_dest_trans_rec.amortization_start_date,
342 X_Reserve_Transfer_Amount => p_amount,
343 X_Src_Expense_Amount => null,
344 X_Dest_Expense_Amount => null,
345 X_Src_Eofy_Reserve => null,
346 X_Dest_Eofy_Reserve => null,
347 X_Creation_Date => px_src_trans_rec.who_info.creation_date,
348 X_Created_By => px_src_trans_rec.who_info.created_by,
349 X_Last_Update_Date => px_src_trans_rec.who_info.last_update_date,
350 X_Last_Updated_By => px_src_trans_rec.who_info.last_updated_by,
351 X_Last_Update_Login => px_src_trans_rec.who_info.last_update_login,
352 X_Return_Status => l_return_status,
353 X_Calling_Fn => l_calling_fn,
354 p_log_level_rec => p_log_level_rec);
355
356 -- set the link id on destination too
357 px_dest_trans_rec.trx_reference_id := px_src_trans_rec.trx_reference_id;
358
359
360 -- SLA: create the inter-asset event
361
362 if not fa_xla_events_pvt.create_dual_transaction_event
363 (p_asset_hdr_rec_src => l_src_asset_hdr_rec,
364 p_asset_hdr_rec_dest => l_dest_asset_hdr_rec,
365 p_asset_type_rec_src => l_src_asset_type_rec,
366 p_asset_type_rec_dest => l_dest_asset_type_rec,
367 px_trans_rec_src => px_src_trans_rec,
368 px_trans_rec_dest => px_dest_trans_rec,
369 p_event_status => NULL,
370 p_calling_fn => l_calling_fn,
371 p_log_level_rec => p_log_level_rec) then
372 raise rsv_xfr_err;
373 end if;
374
375 -- Create transaction header rows
376 fa_transaction_headers_pkg.insert_row
377 (x_rowid => l_src_row_id,
378 x_transaction_header_id => px_src_trans_rec.transaction_header_id,
379 x_book_type_code => p_book_type_code,
380 x_asset_id => p_src_asset_id,
381 x_transaction_type_code => 'GROUP ADJUSTMENT',
382 x_transaction_date_entered => px_src_trans_rec.transaction_date_entered,
383 x_date_effective => px_src_trans_rec.who_info.last_update_date,
384 x_last_update_date => px_src_trans_rec.who_info.last_update_date,
385 x_last_updated_by => px_src_trans_rec.who_info.last_updated_by,
386 x_transaction_name => px_src_trans_rec.transaction_name,
387 x_last_update_login => px_src_trans_rec.who_info.last_update_login,
388 x_transaction_key => px_src_trans_rec.transaction_key,
389 x_transaction_subtype => px_dest_trans_rec.transaction_subtype,
390 x_amortization_start_date => px_src_trans_rec.amortization_start_date,
391 x_calling_interface => px_src_trans_rec.calling_interface,
392 x_mass_transaction_id => px_src_trans_rec.mass_transaction_id,
393 x_trx_reference_id => px_src_trans_rec.trx_reference_id,
394 x_event_id => px_src_trans_rec.event_id,
395 x_return_status => l_src_return_status,
396 x_calling_fn => l_calling_fn
397 ,p_log_level_rec => p_log_level_rec);
398
399 fa_transaction_headers_pkg.insert_row
400 (x_rowid => l_dest_row_id,
401 x_transaction_header_id => px_dest_trans_rec.transaction_header_id,
402 x_book_type_code => p_book_type_code,
403 x_asset_id => p_dest_asset_id,
404 x_transaction_type_code => 'GROUP ADJUSTMENT',
405 x_transaction_date_entered => px_dest_trans_rec.transaction_date_entered,
406 x_date_effective => px_dest_trans_rec.who_info.last_update_date,
407 x_last_update_date => px_dest_trans_rec.who_info.last_update_date,
408 x_last_updated_by => px_dest_trans_rec.who_info.last_updated_by,
409 x_transaction_name => px_dest_trans_rec.transaction_name,
410 x_last_update_login => px_dest_trans_rec.who_info.last_update_login,
411 x_transaction_key => px_dest_trans_rec.transaction_key,
412 x_transaction_subtype => px_dest_trans_rec.transaction_subtype,
413 x_amortization_start_date => px_dest_trans_rec.amortization_start_date,
414 x_calling_interface => px_dest_trans_rec.calling_interface,
415 x_mass_transaction_id => px_dest_trans_rec.mass_transaction_id,
416 x_trx_reference_id => px_dest_trans_rec.trx_reference_id,
417 x_event_id => px_dest_trans_rec.event_id,
418 x_return_status => l_dest_return_status,
419 x_calling_fn => l_calling_fn
420 ,p_log_level_rec => p_log_level_rec);
421
422
423 -- load the period struct for current period info
424 if not FA_UTIL_PVT.get_period_rec
425 (p_book => l_src_asset_hdr_rec.book_type_code,
426 p_effective_date => NULL,
427 x_period_rec => l_period_rec,
428 p_log_level_rec => p_log_level_rec) then
429 raise rsv_xfr_err;
430 end if;
431
432 -- call transaction approval for source asset
433 if not FA_TRX_APPROVAL_PKG.faxcat
434 (X_book => p_book_type_code,
435 X_asset_id => p_src_asset_id,
436 X_trx_type => px_src_trans_rec.transaction_type_code,
437 X_trx_date => px_src_trans_rec.transaction_date_entered,
438 X_init_message_flag => 'NO',
439 p_log_level_rec => p_log_level_rec) then
440 raise rsv_xfr_err;
441 end if;
442
443
444 -- call transaction approval for destination asset
445 if not FA_TRX_APPROVAL_PKG.faxcat
446 (X_book => p_book_type_code,
447 X_asset_id => p_dest_asset_id,
448 X_trx_type => px_dest_trans_rec.transaction_type_code,
449 X_trx_date => px_dest_trans_rec.transaction_date_entered,
450 X_init_message_flag => 'NO',
451 p_log_level_rec => p_log_level_rec) then
452 raise rsv_xfr_err;
453 end if;
454
455
456 -- also check if this is the period of addition - use absolute mode for adjustments
457 -- we will only clear cost outside period of addition
458 if not FA_ASSET_VAL_PVT.validate_period_of_addition
459 (p_asset_id => l_src_asset_hdr_rec.asset_id,
460 p_book => l_src_asset_hdr_rec.book_type_code,
461 p_mode => 'ABSOLUTE',
462 px_period_of_addition => l_src_asset_hdr_rec.period_of_addition,
463 p_log_level_rec => p_log_level_rec) then
464 raise rsv_xfr_err;
465 end if;
466
467 if not FA_ASSET_VAL_PVT.validate_period_of_addition
468 (p_asset_id => l_dest_asset_hdr_rec.asset_id,
469 p_book => l_dest_asset_hdr_rec.book_type_code,
470 p_mode => 'ABSOLUTE',
471 px_period_of_addition => l_dest_asset_hdr_rec.period_of_addition,
472 p_log_level_rec => p_log_level_rec) then
473 raise rsv_xfr_err;
474 end if;
475
476 /*
477 * BUG# 2795816: allowing this now
478 * if (l_src_asset_hdr_rec.period_of_addition <>
479 * l_dest_asset_hdr_rec.period_of_addition) then
480 *
481 * raise rsv_xfr_err;
482 * end if;
483 *
484 */
485
486
487 -- pop the structs for the non-fin information needed for trx
488 -- source
489 if not FA_UTIL_PVT.get_asset_desc_rec
490 (p_asset_hdr_rec => l_src_asset_hdr_rec,
491 px_asset_desc_rec => l_src_asset_desc_rec,
492 p_log_level_rec => p_log_level_rec) then
493 raise rsv_xfr_err;
494 end if;
495
496 if not FA_UTIL_PVT.get_asset_cat_rec
497 (p_asset_hdr_rec => l_src_asset_hdr_rec,
498 px_asset_cat_rec => l_src_asset_cat_rec,
499 p_date_effective => null,
500 p_log_level_rec => p_log_level_rec) then
501 raise rsv_xfr_err;
502 end if;
503
504 if not FA_UTIL_PVT.get_asset_type_rec
505 (p_asset_hdr_rec => l_src_asset_hdr_rec,
506 px_asset_type_rec => l_src_asset_type_rec,
507 p_date_effective => null,
508 p_log_level_rec => p_log_level_rec) then
509 raise rsv_xfr_err;
510 end if;
511
512
513
514 -- destination
515 if not FA_UTIL_PVT.get_asset_desc_rec
516 (p_asset_hdr_rec => l_dest_asset_hdr_rec,
517 px_asset_desc_rec => l_dest_asset_desc_rec,
518 p_log_level_rec => p_log_level_rec) then
519 raise rsv_xfr_err;
520 end if;
521
522 if not FA_UTIL_PVT.get_asset_cat_rec
523 (p_asset_hdr_rec => l_dest_asset_hdr_rec,
524 px_asset_cat_rec => l_dest_asset_cat_rec,
525 p_date_effective => null,
526 p_log_level_rec => p_log_level_rec) then
527 raise rsv_xfr_err;
528 end if;
529
530 if not FA_UTIL_PVT.get_asset_type_rec
531 (p_asset_hdr_rec => l_dest_asset_hdr_rec,
532 px_asset_type_rec => l_dest_asset_type_rec,
533 p_date_effective => null,
534 p_log_level_rec => p_log_level_rec) then
535 raise rsv_xfr_err;
536 end if;
537
538
539
540 -- Call the reporting books cache to get rep books.
541 if (NOT fa_cache_pkg.fazcrsob (
542 x_book_type_code => l_src_asset_hdr_rec.book_type_code,
543 x_sob_tbl => l_rsob_tbl,
544 p_log_level_rec => p_log_level_rec)) then
545 raise rsv_xfr_err;
546 end if;
547
548 for l_mrc_index in 0..l_rsob_tbl.COUNT loop
549
550 l_mrc_src_asset_hdr_rec := l_src_asset_hdr_rec;
551 l_mrc_dest_asset_hdr_rec := l_dest_asset_hdr_rec;
552
553 if (l_mrc_index = 0) then
554 l_mrc_src_asset_hdr_rec.set_of_books_id := l_src_asset_hdr_rec.set_of_books_id;
555 l_mrc_dest_asset_hdr_rec.set_of_books_id := l_src_asset_hdr_rec.set_of_books_id;
556 l_reporting_flag := 'P';
557 else
558 l_mrc_src_asset_hdr_rec.set_of_books_id := l_rsob_tbl(l_mrc_index);
559 l_mrc_dest_asset_hdr_rec.set_of_books_id := l_rsob_tbl(l_mrc_index);
560 l_reporting_flag := 'R';
561 end if;
562
563 -- Set the gl_sob profile to this reporting book
564 fnd_profile.put('GL_SET_OF_BKS_ID', l_mrc_src_asset_hdr_rec.set_of_books_id);
565 fnd_client_info.set_currency_context (l_mrc_src_asset_hdr_rec.set_of_books_id);
566
567 -- Need to always call fazcbcs
568 if (NOT fa_cache_pkg.fazcbcs (
569 X_book => l_mrc_src_asset_hdr_rec.book_type_code,
570 p_log_level_rec => p_log_level_rec)) then
571 raise rsv_xfr_err;
572 end if;
573
574 -- get the old fin and deprn information
575 if not FA_UTIL_PVT.get_asset_fin_rec
576 (p_asset_hdr_rec => l_mrc_src_asset_hdr_rec,
577 px_asset_fin_rec => l_src_asset_fin_rec_old,
578 p_transaction_header_id => NULL,
579 p_mrc_sob_type_code => l_reporting_flag,
580 p_log_level_rec => p_log_level_rec) then raise rsv_xfr_err;
581 end if;
582
583 --HH validate disabled_flag for source
584 if not FA_ASSET_VAL_PVT.validate_disabled_flag
585 (p_group_asset_id => l_mrc_src_asset_hdr_rec.asset_id,
586 p_book_type_code => l_mrc_src_asset_hdr_rec.book_type_code,
587 p_old_flag => l_src_asset_fin_rec_old.disabled_flag,
588 p_new_flag => l_src_asset_fin_rec_old.disabled_flag,
589 p_log_level_rec => p_log_level_rec) then
590 raise rsv_xfr_err;
591 end if; --end HH
592
593 if not FA_UTIL_PVT.get_asset_deprn_rec
594 (p_asset_hdr_rec => l_mrc_src_asset_hdr_rec ,
595 px_asset_deprn_rec => l_src_asset_deprn_rec_old,
596 p_period_counter => NULL,
597 p_mrc_sob_type_code => l_reporting_flag,
598 p_log_level_rec => p_log_level_rec) then raise rsv_xfr_err;
599 end if;
600
601
602 -- in order to derive the transfer amount for the reporting
603 -- books, we will use a ratio of the primary amount / primary cost
604 -- for the source asset
605
606
607 if (l_mrc_index = 0) then
608 l_amount := p_amount;
609 l_src_primary_cost := l_src_asset_fin_rec_old.cost;
610
611 else
612 if (l_src_primary_cost <> 0) then
613 l_amount := p_amount * (l_src_asset_fin_rec_old.cost / l_src_primary_cost);
614 else
615 -- get the latest average rate (used conditionally in some cases below)
616 if not fa_mc_util_pvt.get_latest_rate
617 (p_asset_id => l_mrc_src_asset_hdr_rec.asset_id,
618 p_book_type_code => l_mrc_src_asset_hdr_rec.book_type_code,
619 p_set_of_books_id => l_mrc_src_asset_hdr_rec.set_of_books_id,
620 px_rate => l_exchange_rate,
621 px_avg_exchange_rate => l_avg_rate ,
622 p_log_level_rec => p_log_level_rec) then raise rsv_xfr_err;
623 end if;
624 end if;
625 end if;
626
627
628
629 -- now process the source and detination impacts
630
631 ------------
632 -- SOURCE --
633 ------------
634
635 if not FA_RESERVE_TRANSFER_PVT.do_adjustment
636 (px_trans_rec => px_src_trans_rec,
637 px_asset_hdr_rec => l_mrc_src_asset_hdr_rec,
638 p_asset_desc_rec => l_src_asset_desc_rec,
639 p_asset_type_rec => l_src_asset_type_rec,
640 p_asset_cat_rec => l_src_asset_cat_rec,
641 p_asset_fin_rec_old => l_src_asset_fin_rec_old,
642 x_asset_fin_rec_new => l_src_asset_fin_rec_new,
643 p_asset_deprn_rec_old => l_src_asset_deprn_rec_old,
644 x_asset_deprn_rec_new => l_src_asset_deprn_rec_new,
645 p_period_rec => l_period_rec,
646 p_mrc_sob_type_code => l_reporting_flag,
647 p_source_dest => 'S',
648 p_amount => l_amount,
649 p_log_level_rec => p_log_level_rec)then
650 raise rsv_xfr_err;
651 end if; -- do_adjustment
652
653
654
655 -----------------
656 -- DESTINATION --
657 -----------------
658
659 -- get the destination fin and deprn information
660 if not FA_UTIL_PVT.get_asset_fin_rec
661 (p_asset_hdr_rec => l_mrc_dest_asset_hdr_rec,
662 px_asset_fin_rec => l_dest_asset_fin_rec_old,
663 p_transaction_header_id => NULL,
664 p_mrc_sob_type_code => l_reporting_flag,
665 p_log_level_rec => p_log_level_rec) then raise rsv_xfr_err;
666 end if;
667
668 --HH validate disabled_flag for dest.
669 if not FA_ASSET_VAL_PVT.validate_disabled_flag
670 (p_group_asset_id => l_mrc_dest_asset_hdr_rec.asset_id,
671 p_book_type_code => l_mrc_dest_asset_hdr_rec.book_type_code,
672 p_old_flag => l_dest_asset_fin_rec_old.disabled_flag,
673 p_new_flag => l_dest_asset_fin_rec_old.disabled_flag,
674 p_log_level_rec => p_log_level_rec) then
675 raise rsv_xfr_err;
676 end if; --end HH
677
678 if not FA_UTIL_PVT.get_asset_deprn_rec
679 (p_asset_hdr_rec => l_mrc_dest_asset_hdr_rec ,
680 px_asset_deprn_rec => l_dest_asset_deprn_rec_old,
681 p_period_counter => NULL,
682 p_mrc_sob_type_code => l_reporting_flag,
683 p_log_level_rec => p_log_level_rec) then raise rsv_xfr_err;
684 end if;
685
686 if not FA_RESERVE_TRANSFER_PVT.do_adjustment
687 (px_trans_rec => px_dest_trans_rec,
688 px_asset_hdr_rec => l_mrc_dest_asset_hdr_rec,
689 p_asset_desc_rec => l_dest_asset_desc_rec,
690 p_asset_type_rec => l_dest_asset_type_rec,
691 p_asset_cat_rec => l_dest_asset_cat_rec,
692 p_asset_fin_rec_old => l_dest_asset_fin_rec_old,
693 x_asset_fin_rec_new => l_dest_asset_fin_rec_new,
694 p_asset_deprn_rec_old => l_dest_asset_deprn_rec_old,
695 x_asset_deprn_rec_new => l_src_asset_deprn_rec_new,
696 p_period_rec => l_period_rec,
697 p_mrc_sob_type_code => l_reporting_flag,
698 p_source_dest => 'D',
699 p_amount => l_amount,
700 p_log_level_rec => p_log_level_rec)then
701 raise rsv_xfr_err;
702 end if; -- do_adjustment
703
704 /* R12 - obsolete
705
706 if not fa_interco_pvt.do_intercompany(
707 p_src_trans_rec => px_src_trans_rec,
708 p_src_asset_hdr_rec => l_mrc_src_asset_hdr_rec,
709 p_dest_trans_rec => px_dest_trans_rec,
710 p_dest_asset_hdr_rec => l_mrc_dest_asset_hdr_rec,
711 p_calling_fn => l_calling_fn,
712 p_mrc_sob_type_code => l_reporting_flag,
713 p_log_level_rec => p_log_level_rec) then raise rsv_xfr_err;
714 end if;
715 */
716
717 -- reset GL sob id to original value before moving to next book
718 fnd_profile.put('GL_SET_OF_BKS_ID', l_src_asset_hdr_rec.set_of_books_id);
719 fnd_client_info.set_currency_context (l_src_asset_hdr_rec.set_of_books_id);
720
721 end loop;
722
723 -- Reset the gl_sob profile
724 fnd_profile.put('GL_SET_OF_BKS_ID', l_src_asset_hdr_rec.set_of_books_id);
725 fnd_client_info.set_currency_context (l_src_asset_hdr_rec.set_of_books_id);
726
727 return true;
728
729 EXCEPTION
730
731 WHEN RSV_XFR_ERR THEN
732 fa_srvr_msg.add_message(calling_fn => l_calling_fn,
733 p_log_level_rec => p_log_level_rec);
734 return FALSE;
735
736 WHEN OTHERS THEN
737 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn
738 ,p_log_level_rec => p_log_level_rec);
739 return FALSE;
740
741
742 end do_all_books;
743
744 END FA_RESERVE_TRANSFER_PUB;