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