DBA Data[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;