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.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;