DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_PROCESS_GROUPS_PKG

Source


1 PACKAGE BODY FA_PROCESS_GROUPS_PKG AS
2 /* $Header: FAPGADJB.pls 120.32.12020000.2 2013/05/02 16:02:22 dvjoshi ship $ */
3 TYPE num_tbl  IS TABLE OF NUMBER       INDEX BY BINARY_INTEGER;
4 TYPE date_tbl IS TABLE OF DATE         INDEX BY BINARY_INTEGER;
5 TYPE v30_tbl  IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
6 
7 g_log_level_rec fa_api_types.log_level_rec_type;
8 g_release       number  := fa_cache_pkg.fazarel_release;
9 
10 --*********************** Private functions ******************************--
11 -- private declaration for books (mrc) wrapper
12 FUNCTION do_all_books(
13                 p_book                  IN  VARCHAR2,
14                 p_source_group_asset_id IN  NUMBER DEFAULT NULL,
15                 p_dest_group_asset_id   IN  NUMBER DEFAULT NULL,
16                 p_trx_number            IN  NUMBER DEFAULT NULL)
17                         RETURN BOOLEAN;
18 
19 PROCEDURE do_pending_groups(
20                 errbuf                  OUT NOCOPY VARCHAR2,
21                 retcode                 OUT NOCOPY NUMBER,
22                 p_book                  IN  VARCHAR2,
23                 p_source_group_asset_id IN  NUMBER,
24                 p_dest_group_asset_id   IN  NUMBER DEFAULT NULL,
25                 p_trx_number            IN  NUMBER DEFAULT NULL) IS
26 
27     l_calling_fn   varchar2(60) :=
28                 'fa_process_groups_pkg.do_pending_groups';
29     l_calling_fn2  varchar2(60) := 'do_pending_groups';
30 
31     l_msg_count         NUMBER := 0;
32     l_msg_data          VARCHAR2(2000) := NULL;
33 
34     group_adj_err       exception;
35 
36 BEGIN
37 
38    if (not g_log_level_rec.initialized) then
39       if (NOT fa_util_pub.get_log_level_rec (
40                 x_log_level_rec =>  g_log_level_rec
41       )) then
42          raise  FND_API.G_EXC_ERROR;
43       end if;
44    end if;
45 
46    g_release := fa_cache_pkg.fazarel_release;
47 
48    fa_srvr_msg.Init_Server_Message; -- Initialize server message stack
49    fa_debug_pkg.Initialize;         -- Initialize debug message stack
50 
51    if not do_all_books(
52                 p_book                  => p_book,
53                 p_source_group_asset_id => p_source_group_asset_id,
54                 p_dest_group_asset_id   => p_dest_group_asset_id,
55                 p_trx_number            => p_trx_number) then
56       raise group_adj_err;
57    end if;
58 
59    -- Dump Debug messages when run in debug mode to log file
60    if (g_log_level_rec.statement_level) then
61       fa_debug_pkg.Write_Debug_Log;
62    end if;
63 
64    fa_srvr_msg.add_message(
65                 calling_fn => NULL, --Bug 8528173
66                 name       => 'FA_SHARED_END_SUCCESS',
67                 token1     => 'PROGRAM',
68                 value1     => 'FAPGADJ', p_log_level_rec => g_log_level_rec);
69 
70    FND_MSG_PUB.Count_And_Get(
71                 p_count         => l_msg_count,
72                 p_data          => l_msg_data);
73 
74    fa_srvr_msg.Write_Msg_Log(l_msg_count, l_msg_data, p_log_level_rec => g_log_level_rec);
75 
76    -- return success to concurrent manager
77    retcode := 0;
78 
79 EXCEPTION
80    WHEN GROUP_ADJ_ERR THEN
81       ROLLBACK WORK;
82       fa_srvr_msg.add_message(
83                  calling_fn => 'fa_process_groups_pkg.do_pending_groups',
84                  name       => 'FA_SHARED_END_WITH_ERROR',
85                  token1     => 'PROGRAM',
86                  value1     => 'FAPGADJ',  p_log_level_rec => g_log_level_rec);
87 
88       if (g_log_level_rec.statement_level) then
89          fa_debug_pkg.Write_Debug_Log;
90       end if;
91       FND_MSG_PUB.Count_And_Get(
92                         p_count         => l_msg_count,
93                         p_data          => l_msg_data);
94       fa_srvr_msg.Write_Msg_Log(l_msg_count, l_msg_data, p_log_level_rec => g_log_level_rec);
95       -- return failure to concurrent manager
96       retcode := 2;
97    WHEN OTHERS THEN
98       ROLLBACK WORK;
99       fa_srvr_msg.add_sql_error (
100                 calling_fn => l_calling_fn, p_log_level_rec => g_log_level_rec);
101       fa_srvr_msg.add_message(
102                 calling_fn => l_calling_fn,
103                 name       => 'FA_SHARED_END_WITH_ERROR',
104                 token1     => 'PROGRAM',
105                 value1     => 'FAPGADJ', p_log_level_rec => g_log_level_rec);
106 
107       if (g_log_level_rec.statement_level) then
108          fa_debug_pkg.Write_Debug_Log;
109       end if;
110       FND_MSG_PUB.Count_And_Get(
111                         p_count         => l_msg_count,
112                         p_data          => l_msg_data);
113       fa_srvr_msg.Write_Msg_Log(l_msg_count, l_msg_data, p_log_level_rec => g_log_level_rec);
114       -- return failure to concurrent manager
115       retcode := 2;
116 END do_pending_groups;
117 
118 FUNCTION do_all_books(
119                 p_book                  IN  VARCHAR2,
120                 p_source_group_asset_id IN  NUMBER DEFAULT NULL,
121                 p_dest_group_asset_id   IN  NUMBER DEFAULT NULL,
122                 p_trx_number            IN  NUMBER DEFAULT NULL)
123                         RETURN BOOLEAN IS
124 
125    -- source group asset
126    -- if not group reclass then this is the only group which is being
127    -- impacted by member trxn
128    l_trans_rec                  FA_API_TYPES.trans_rec_type;
129    l_asset_hdr_rec              FA_API_TYPES.asset_hdr_rec_type;
130    l_asset_desc_rec             FA_API_TYPES.asset_desc_rec_type;
131    l_asset_type_rec             FA_API_TYPES.asset_type_rec_type;
132    l_asset_cat_rec              FA_API_TYPES.asset_cat_rec_type;
133    l_asset_fin_rec_old          FA_API_TYPES.asset_fin_rec_type;
134    l_asset_fin_rec_adj          FA_API_TYPES.asset_fin_rec_type;
135    l_asset_fin_rec_new          FA_API_TYPES.asset_fin_rec_type;
136    l_asset_deprn_rec_old        FA_API_TYPES.asset_deprn_rec_type;
137    l_asset_deprn_rec_adj        FA_API_TYPES.asset_deprn_rec_type;
138    l_asset_deprn_rec_new        FA_API_TYPES.asset_deprn_rec_type;
139    l_period_rec                 FA_API_TYPES.period_rec_type;
140 
141    l_asset_fin_rec_adj_null     FA_API_TYPES.asset_fin_rec_type;
142    l_asset_deprn_rec_adj_null   FA_API_TYPES.asset_deprn_rec_type;
143 
144    l_trx_ref_rec                fa_api_types.trx_ref_rec_type;
145 
146    l_sob_tbl                    FA_CACHE_PKG.fazcrsob_sob_tbl_type;
147    l_mrc_sob_type_code          varchar2(1);
148 
149    l_source_asset_id            number;
150    l_dest_asset_id              number;
151    l_asset_id                   number;
152    l_old_trx_id                 number;
153    l_trx_id_in                  number;
154 
155    l_adj_count                  number;
156 
157    l_reclassed_asset_id         number;
158    l_reclass_src_dest           varchar2(10);
159    l_reclassed_asset_dpis       date;
160    l_deprn_exp                  number;
161    l_bonus_deprn_exp            number;
162    l_impairment_exp             number;
163    l_rowid                      rowid;
164 
165    l_deprn_rsv                  number;
166 
167    -- HHIRAGA added
168    l_group_level_override       varchar2(1) := NULL;
169    x_new_deprn_amount           number;
170    x_new_bonus_amount           number;
171    l_rc                         number;
172 
173    -- SLA
174    l_thid                       number(15);
175    l_prior_trx_reference_id     number(15) := 0;
176    l_prior_trx_count            number(15);
177    l_event_type_code            varchar2(30);
178    l_trx_ref_type               varchar2(30);
179    l_asset_type                 varchar2(30);
180    l_src_asset_type             varchar2(30);
181    l_dest_asset_type            varchar2(30);
182 
183    l_calling_fn   varchar2(60) :=
184                 'fa_process_groups_pkg.do_all_books';
185 
186    cursor get_group_assets is
187         select  bk.asset_id,
188                 bk.transaction_header_id_in,
189                 bk.rowid,
190                 th.transaction_type_code,
191                 th.transaction_date_entered,
192                 th.transaction_subtype,
193                 th.transaction_key,
194                 th.amortization_start_date,
195                 th.calling_interface,
196                 th.member_transaction_header_id,
197                 th.trx_reference_id,
198                 th.event_id
199         from fa_books bk,
200              fa_transaction_headers th
201         where bk.asset_id in (l_source_asset_id, l_dest_asset_id)
202         and   bk.book_type_code = p_book
203         and   bk.adjustment_required_status = 'GADJ'
204         and   bk.date_ineffective is null
205         and   th.transaction_header_id = bk.transaction_header_id_in
206         order by bk.transaction_header_id_in;
207 
208    cursor get_all_groups is
209         select  bk.asset_id,
210                 bk.transaction_header_id_in,
211                 bk.rowid,
212                 th.transaction_type_code,
213                 th.transaction_date_entered,
214                 th.transaction_subtype,
215                 th.transaction_key,
216                 th.amortization_start_date,
217                 th.calling_interface,
218                 th.member_transaction_header_id,
219                 th.trx_reference_id,
220                 th.event_id
221         from fa_books bk,
222              fa_transaction_headers th
223         where bk.book_type_code = p_book
224         and   bk.adjustment_required_status = 'GADJ'
225         and   bk.date_ineffective is null
226         and   th.transaction_header_id = bk.transaction_header_id_in
227         order by bk.transaction_header_id_in;
228 
229    cursor get_old_trx is
230         select transaction_header_id_in
231         from fa_books
232         where asset_id = l_asset_id
233         and   book_type_code = p_book
234         and   transaction_header_id_out = l_trx_id_in;
235 
236    cursor check_adj_status is
237         select count(*)
238         from fa_books
239         where transaction_header_id_in = l_trx_id_in
240         and   adjustment_required_status = 'GADJ';
241 
242    --Bug#8675920
243    cursor check_mc_adj_status is
244         select count(*)
245         from fa_mc_books
246         where transaction_header_id_in = l_trx_id_in
247         and set_of_books_id = l_asset_hdr_rec.set_of_books_id
248         and   adjustment_required_status = 'GADJ';
249 
250    cursor get_trx_ref is
251         select  TRX_REFERENCE_ID,
252                  TRANSACTION_TYPE,
253                  SRC_TRANSACTION_SUBTYPE,
254                  DEST_TRANSACTION_SUBTYPE,
255                  BOOK_TYPE_CODE,
256                  SRC_ASSET_ID,
257                  SRC_TRANSACTION_HEADER_ID,
258                  DEST_ASSET_ID,
259                  DEST_TRANSACTION_HEADER_ID,
260                  MEMBER_ASSET_ID,
261                  MEMBER_TRANSACTION_HEADER_ID,
262                  SRC_AMORTIZATION_START_DATE,
263                  DEST_AMORTIZATION_START_DATE,
264                  RESERVE_TRANSFER_AMOUNT,
265                  SRC_EXPENSE_AMOUNT,
266                  DEST_EXPENSE_AMOUNT,
267                  SRC_EOFY_RESERVE,
268                  DEST_EOFY_RESERVE
269         from fa_trx_references
270         where TRX_REFERENCE_ID = l_trans_rec.trx_reference_id;
271 
272    --
273    -- Energy Enhancement.
274    --
275    CURSOR c_get_unplanned_amt IS
276       select decode(debit_credit_flag,'DR',adjustment_amount,'CR',-1*adjustment_amount) /*Bug#9684024 */
277       from   fa_adjustments
278       where  asset_id = l_asset_hdr_rec.asset_id
279       and    book_type_code = l_asset_hdr_rec.book_type_code
280       and    transaction_header_id = l_trans_rec.transaction_header_id;
281 
282    CURSOR c_mc_get_unplanned_amt IS
283       select decode(debit_credit_flag,'DR',adjustment_amount,'CR',-1*adjustment_amount)
284       from   fa_mc_adjustments
285       where  asset_id = l_asset_hdr_rec.asset_id
286       and    book_type_code = l_asset_hdr_rec.book_type_code
287       and    transaction_header_id = l_trans_rec.transaction_header_id
288       and    set_of_books_id = l_asset_hdr_rec.set_of_books_id;
289 
290    l_unplanned_deprn_rec  FA_API_TYPES.unplanned_deprn_rec_type;
291    l_group_deprn_amount   NUMBER;
292    l_group_bonus_amount   NUMBER;
293    l_return_code          NUMBER;
294 
295 
296    -- Cursor to get member's reserve retired
297    CURSOR c_get_member_rsv_ret IS
298       select nvl(reserve_retired, 0)
299       from   fa_retirements
300       where  transaction_header_id_in = l_trans_rec.member_transaction_header_id;
301 
302    CURSOR c_mc_get_member_rsv_ret IS
303       select nvl(reserve_retired, 0)
304       from   fa_mc_retirements
305       where  transaction_header_id_in = l_trans_rec.member_transaction_header_id
306       and    set_of_books_id = l_asset_hdr_rec.set_of_books_id;
307 
308    CURSOR c_get_member_rsv_rei IS
309       select nvl(reserve_retired, 0)
310            , transaction_header_id_in
311       from   fa_retirements
312       where  transaction_header_id_out = l_trans_rec.member_transaction_header_id;
313 
314    CURSOR c_mc_get_member_rsv_rei IS
315       select nvl(reserve_retired, 0)
316            , transaction_header_id_in
317       from   fa_mc_retirements
318       where  transaction_header_id_out = l_trans_rec.member_transaction_header_id
319       and    set_of_books_id = l_asset_hdr_rec.set_of_books_id;
320 
321 
322    -- Cursor to get group's reserve retired
323    CURSOR c_get_group_rsv_ret IS
324       select sum(decode(debit_credit_flag, 'CR', -1, 1) *
325                  decode(l_trans_rec.transaction_key, 'MR', 1, -1) *
326                  adjustment_amount)
327       from   fa_adjustments
328       where  asset_id = l_asset_hdr_rec.asset_id
329       and    book_type_code = l_asset_hdr_rec.book_type_code
330       and    transaction_header_id = l_trans_rec.transaction_header_id
331       and    adjustment_type = 'RESERVE';
332 
333    CURSOR c_mc_get_group_rsv_ret IS --Bug 9076882
334       select sum(decode(debit_credit_flag, 'CR', -1, 1) *
335                  decode(l_trans_rec.transaction_key, 'MR', 1, -1) *
336                  adjustment_amount)
337       from   fa_mc_adjustments
338       where  asset_id = l_asset_hdr_rec.asset_id
339       and    book_type_code = l_asset_hdr_rec.book_type_code
340       and    transaction_header_id = l_trans_rec.transaction_header_id
341       and    adjustment_type = 'RESERVE'
342       and    set_of_books_id = l_asset_hdr_rec.set_of_books_id;
343 
344 
345    l_member_reserve_amount   number;
346    l_group_reserve_amount    number;
347 
348    CURSOR c_get_member_trx is
349       select th.asset_id
350            , th.transaction_header_id
351            , th.transaction_type_code
352            , th.transaction_date_entered
353            , th.transaction_name
354            , th.source_transaction_header_id
355            , th.mass_reference_id
356            , th.transaction_subtype
357            , th.transaction_key
358            , th.amortization_start_date
359            , th.calling_interface
360            , th.mass_transaction_id
361            , th.member_transaction_header_id
362            , th.trx_reference_id
363            , th.last_update_date
364            , th.last_updated_by
365            , th.last_update_login
366            , th.event_id
367            , tr.transaction_type
368       from   fa_transaction_headers th,
369              fa_trx_references tr  --Added for bug 537059
370       where  th.transaction_header_id = l_trans_rec.member_transaction_header_id
371       and    tr.trx_reference_id(+) = th.trx_reference_id;  --Added for bug 537059
372 
373 
374 
375    lm_trans_rec              FA_API_TYPES.trans_rec_type;
376    lm_asset_hdr_rec          FA_API_TYPES.asset_hdr_rec_type;
377    lm_asset_desc_rec         FA_API_TYPES.asset_desc_rec_type;
378    lm_asset_fin_rec          FA_API_TYPES.asset_fin_rec_type;
379    lm_asset_cat_rec          FA_API_TYPES.asset_cat_rec_type;
380    lm_asset_type_rec         FA_API_TYPES.asset_type_rec_type;
381    lm_asset_deprn_rec        FA_API_TYPES.asset_deprn_rec_type;
382 
383    l_mem_ret_thid            NUMBER; -- Member asset retirement thid
384 
385    l_return_status  varchar2(10);
386    l_msg_count      number;
387    l_msg_data       varchar2(512);
388 
389    group_adj_err      exception;
390 
391    TRX_CUR             boolean := FALSE;
392    BOOK_CUR            boolean := FALSE;
393 
394    -- Bug 8862296 Changes start here
395    l_src_trans_rec                 FA_API_TYPES.trans_rec_type;
396    l_src_asset_hdr_rec             FA_API_TYPES.asset_hdr_rec_type;
397    l_dest_trans_rec                FA_API_TYPES.trans_rec_type;
398    l_dest_asset_hdr_rec            FA_API_TYPES.asset_hdr_rec_type;
399    l_inv_trans_rec                 FA_API_TYPES.inv_trans_rec_type;
400    l_dest_inv_tbl                  FA_API_TYPES.inv_tbl_type;
401 
402    CURSOR c_get_trx_reference IS
403    SELECT SRC_ASSET_ID,
404           BOOK_TYPE_CODE,
405           SRC_TRANSACTION_HEADER_ID,
406           SRC_TRANSACTION_SUBTYPE,
407           SRC_AMORTIZATION_START_DATE,
408           TRX_REFERENCE_ID,
409           EVENT_ID,
410           DEST_ASSET_ID,
411           BOOK_TYPE_CODE,
412           DEST_TRANSACTION_HEADER_ID,
413           DEST_TRANSACTION_SUBTYPE,
414           DEST_AMORTIZATION_START_DATE,
415           TRX_REFERENCE_ID,
416           EVENT_ID,
417           TRANSACTION_TYPE,
418           INVOICE_TRANSACTION_ID
419      FROM FA_TRX_REFERENCES
420     WHERE SRC_TRANSACTION_HEADER_ID = P_TRX_NUMBER;
421 
422    CURSOR c_inv_tbl IS
423    SELECT PO_VENDOR_ID,
424           ASSET_INVOICE_ID,
425           FIXED_ASSETS_COST,
426           DELETED_FLAG,
427           PO_NUMBER,
428           INVOICE_NUMBER,
429           PAYABLES_BATCH_NAME,
430           PAYABLES_CODE_COMBINATION_ID,
431           FEEDER_SYSTEM_NAME,
432           CREATE_BATCH_DATE,
433           CREATE_BATCH_ID,
434           INVOICE_DATE,
435           PAYABLES_COST,
436           POST_BATCH_ID,
437           INVOICE_ID,
438           AP_DISTRIBUTION_LINE_NUMBER,
439           PAYABLES_UNITS,
440           SPLIT_MERGED_CODE,
441           DESCRIPTION,
442           PARENT_MASS_ADDITION_ID,
443           UNREVALUED_COST,
444           MERGED_CODE,
445           SPLIT_CODE,
446           MERGE_PARENT_MASS_ADDITIONS_ID,
447           SPLIT_PARENT_MASS_ADDITIONS_ID,
448           PROJECT_ASSET_LINE_ID,
449           PROJECT_ID,
450           TASK_ID,
451           DEPRECIATE_IN_GROUP_FLAG,
452           MATERIAL_INDICATOR_FLAG,
453           SOURCE_LINE_ID,
454           INVOICE_DISTRIBUTION_ID,
455           INVOICE_LINE_NUMBER,
456           PO_DISTRIBUTION_ID
457      FROM FA_ASSET_INVOICES
458     WHERE ASSET_ID = L_SRC_ASSET_HDR_REC.ASSET_ID
459       AND INVOICE_TRANSACTION_ID_OUT = L_INV_TRANS_REC.INVOICE_TRANSACTION_ID;
460 
461    CURSOR c_inv_rate (P_SOURCE_LINE_ID IN NUMBER) IS
462    SELECT MCAI.SET_OF_BOOKS_ID,
463           MCAI.EXCHANGE_RATE,
464           MCAI.FIXED_ASSETS_COST
465      FROM FA_MC_ASSET_INVOICES MCAI,
466           FA_MC_BOOK_CONTROLS  MCBK
467     WHERE MCAI.SOURCE_LINE_ID  = P_SOURCE_LINE_ID
468       AND MCAI.SET_OF_BOOKS_ID = MCBK.SET_OF_BOOKS_ID
469       AND MCBK.BOOK_TYPE_CODE  = L_SRC_ASSET_HDR_REC.BOOK_TYPE_CODE
470       AND MCBK.ENABLED_FLAG    = 'Y';
471 
472    i NUMBER;
473    j NUMBER;
474    -- Bug 8862296 Changes end here
475 
476 BEGIN
477 
478    if (g_log_level_rec.statement_level) then
479        fa_debug_pkg.add('do_pending_groups',
480                         'do_all_books',
481                         'begin', p_log_level_rec => g_log_level_rec);
482    end if;
483 
484    -- call the sob cache to get the table of sob_ids
485    if not FA_CACHE_PKG.fazcrsob
486           (x_book_type_code => p_book,
487            x_sob_tbl        => l_sob_tbl, p_log_level_rec => g_log_level_rec) then
488       raise group_adj_err;
489    end if;
490 
491    -- call the book_controls cache
492    if NOT fa_cache_pkg.fazcbc(X_book => p_book, p_log_level_rec => g_log_level_rec) then
493       raise group_adj_err;
494    end if;
495 
496    l_source_asset_id := nvl(p_source_group_asset_id, -1);
497    l_dest_asset_id := nvl(p_dest_group_asset_id,-1);
498 
499    if (l_source_asset_id = -1 and l_dest_asset_id = -1) then
500       BOOK_CUR := TRUE;
501       open get_all_groups;
502    else
503       TRX_CUR := TRUE;
504       open get_group_assets;
505    end if;
506    loop
507 
508       -- recall the book_controls cache for each trx
509       if NOT fa_cache_pkg.fazcbc(X_book => p_book,
510                                  p_log_level_rec => g_log_level_rec) then
511          raise group_adj_err;
512       end if;
513 
514       if TRX_CUR then
515           if (g_log_level_rec.statement_level) then
516              fa_debug_pkg.add('do_pending_groups',
517                         'CURSOR',
518                         'USING TRX_CUR', p_log_level_rec => g_log_level_rec);
519           end if;
520          fetch get_group_assets into
521                 l_asset_id,
522                 l_trx_id_in,
523                 l_rowid,
524                 l_trans_rec.transaction_type_code,
525                 l_trans_rec.transaction_date_entered,
526                 l_trans_rec.transaction_subtype,
527                 l_trans_rec.transaction_key,
528                 l_trans_rec.amortization_start_date,
529                 l_trans_rec.calling_interface,
530                 l_trans_rec.member_transaction_header_id,
531                 l_trans_rec.trx_reference_id,
532                 l_trans_rec.event_id;
533          if (get_group_assets%NOTFOUND) then
534             exit;
535          end if;
536       elsif BOOK_CUR then
537           if (g_log_level_rec.statement_level) then
538              fa_debug_pkg.add('do_pending_groups',
539                         'USING BOOK_CUR CURSOR',
540                         'USING BOOK_CUR', p_log_level_rec => g_log_level_rec);
541           end if;
542 
543          fetch get_all_groups into
544                 l_asset_id,
545                 l_trx_id_in,
546                 l_rowid,
547                 l_trans_rec.transaction_type_code,
548                 l_trans_rec.transaction_date_entered,
549                 l_trans_rec.transaction_subtype,
550                 l_trans_rec.transaction_key,
551                 l_trans_rec.amortization_start_date,
552                 l_trans_rec.calling_interface,
553                 l_trans_rec.member_transaction_header_id,
554                 l_trans_rec.trx_reference_id,
555                 l_trans_rec.event_id;
556 
557          if (get_all_groups%NOTFOUND) then
558             exit;
559          end if;
560       end if;
561 
562       --bridgway: SLA, moving commit cycle here due to inter-asset transactions
563       if (nvl(l_trans_rec.trx_reference_id, -99) <> nvl(l_prior_trx_reference_id, -99)) then
564          fnd_concurrent.af_commit;
565       end if;
566 
567       l_prior_trx_reference_id := l_trans_rec.trx_reference_id;
568 
569 
570       l_trans_rec.transaction_header_id := l_trx_id_in;
571 
572       open get_old_trx;
573       fetch get_old_trx into l_old_trx_id;
574       close get_old_trx;
575 
576       l_asset_hdr_rec.asset_id := l_asset_id;
577       l_asset_hdr_rec.book_type_code := p_book;
578       l_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
579 
580       if (g_log_level_rec.statement_level) then
581           fa_debug_pkg.add('do_pending_groups.do_all_books',
582                         'fetched asset and trx',
583                         l_asset_id || ' - ' || l_trx_id_in, p_log_level_rec => g_log_level_rec);
584       end if;
585 
586 
587       -- loop through each book starting with the primary and
588       -- call the private API for each
589       FOR l_sob_index in 0..l_sob_tbl.count LOOP
590          if (l_sob_index = 0) then
591             l_mrc_sob_type_code := 'P';
592             l_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
593 
594             -- SLA uptake - set event status from incomplete to unprocessed
595             -- need to determine original event type in this case
596             --
597             -- invoice transfer and group reclass pose a two-fold issue in that both
598             -- events must be completely processed.
599             --
600             -- in order to call the api, we must know pretty much everything
601             -- we new at time of the original member event including the
602             -- asset type, etc
603 
604             if (g_log_level_rec.statement_level) then
605                fa_debug_pkg.add(l_calling_fn,
606                            'fetching member_trx cursor',
607                            '',
608                            p_log_level_rec => g_log_level_rec);
609             end if;
610 
611             if (l_trans_rec.member_transaction_header_id is not null) then
612 
613                OPEN c_get_member_trx;
614                FETCH c_get_member_trx INTO lm_asset_hdr_rec.asset_id
615                                          , lm_trans_rec.transaction_header_id
616                                          , lm_trans_rec.transaction_type_code
617                                          , lm_trans_rec.transaction_date_entered
618                                          , lm_trans_rec.transaction_name
619                                          , lm_trans_rec.source_transaction_header_id
620                                          , lm_trans_rec.mass_reference_id
621                                          , lm_trans_rec.transaction_subtype
622                                          , lm_trans_rec.transaction_key
623                                          , lm_trans_rec.amortization_start_date
624                                          , lm_trans_rec.calling_interface
625                                          , lm_trans_rec.mass_transaction_id
626                                          , lm_trans_rec.member_transaction_header_id
627                                          , lm_trans_rec.trx_reference_id
628                                          , lm_trans_rec.who_info.last_update_date
629                                          , lm_trans_rec.who_info.last_updated_by
630                                          , lm_trans_rec.who_info.last_update_login
631                                          , lm_trans_rec.event_id  --Added for bug 537059
632                                          , l_trx_ref_type; -- bug 5475029
633                CLOSE c_get_member_trx;
634 
635             end if;
636 
637             if (g_log_level_rec.statement_level) then
638                fa_debug_pkg.add(l_calling_fn,
639                            'fetching event from XLA',
640                            l_trans_rec.event_id,
641                            p_log_level_rec => g_log_level_rec);
642             end if;
643 
644             if not fa_xla_events_pvt.get_event_type
645                        (p_event_id         => l_trans_rec.event_id,
646                         x_event_type_code  => l_event_type_code ,
647                         p_log_level_rec    => g_log_level_rec
648                        ) then
649                  raise group_adj_err;
650             end if;
651 
652             --Added one more condition lm_trans_rec.event_id is not null in following
653             --if for bug 537059.
654             -- bug 5475029: modified the following if condition
655             --if (l_trans_rec.trx_reference_id is not null and lm_trans_rec.event_id is not null) then
656             if (nvl(l_trx_ref_type,'STANDARD TRX') = 'INVOICE TRANSFER') then
657 
658                if not fa_xla_events_pvt.update_inter_transaction_event
659                   (p_ledger_id              => l_asset_hdr_rec.set_of_books_id,
660                    p_trx_reference_id       => lm_trans_rec.trx_reference_id,
661                    p_book_type_code         => p_book,
662                    p_event_type_code        => l_event_type_code,
663                    p_event_date             => l_trans_rec.transaction_date_entered,
664                    p_event_status_code      => FA_XLA_EVENTS_PVT.C_EVENT_UNPROCESSED,
665                    p_calling_fn             => l_calling_fn,
666                    p_log_level_rec          => g_log_level_rec) then
667                  raise group_adj_err;
668                end if;
669 
670             else -- non inter asset trx
671 
672                if (l_trans_rec.member_transaction_header_id is not null) then
673                   -- member driven transactions
674                   l_thid := lm_trans_rec.transaction_header_id;
675                else
676                   -- direct group transaction
677                   l_thid := l_trans_rec.transaction_header_id;
678                end if;
679 
680                if not fa_xla_events_pvt.update_transaction_event
681                   (p_ledger_id              => l_asset_hdr_rec.set_of_books_id,
682                    p_transaction_header_id  => l_thid,
683                    p_book_type_code         => p_book,
684                    p_event_type_code        => l_event_type_code,
685                    p_event_date             => l_trans_rec.transaction_date_entered,
686                    p_event_status_code      => FA_XLA_EVENTS_PVT.C_EVENT_UNPROCESSED,
687                    p_calling_fn             => l_calling_fn,
688                    p_log_level_rec          => g_log_level_rec) then
689                   raise group_adj_err;
690                end if;
691 
692             end if;
693 
694          else
695             l_mrc_sob_type_code := 'R';
696             l_asset_hdr_rec.set_of_books_id := l_sob_tbl(l_sob_index);
697 
698          end if;
699 
700          -- call the cache to set the sob_id used for rounding and other lower
701          -- level code for each book.
702          if NOT fa_cache_pkg.fazcbcs(X_book => p_book,
703                                      X_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
704                                      p_log_level_rec => g_log_level_rec)
705                                                                         then
706             raise group_adj_err;
707          end if;
708 
709          if (g_log_level_rec.statement_level) then
710             fa_debug_pkg.add('do_pending_groups.do_all_books',
711                         'TRX KEY',
712                         l_trans_rec.transaction_key, p_log_level_rec => g_log_level_rec);
713          end if;
714 
715          if (l_trans_rec.transaction_key  not in ('GC', 'UA', 'UE', 'MR', 'MS')) then
716 
717             if not FA_ASSET_VAL_PVT.validate_period_of_addition
718               (p_asset_id            => l_asset_hdr_rec.asset_id,
719                p_book                => l_asset_hdr_rec.book_type_code,
720                p_mode                => 'ABSOLUTE',
721                px_period_of_addition => l_asset_hdr_rec.period_of_addition, p_log_level_rec => g_log_level_rec) then
722                   raise group_adj_err;
723             end if;
724 
725             if (g_log_level_rec.statement_level) then
726                 fa_debug_pkg.add('do_pending_groups',
727                         'AFTER validate_period_of_addition',
728                         l_asset_hdr_rec.period_of_addition, p_log_level_rec => g_log_level_rec);
729             end if;
730 
731             if not FA_UTIL_PVT.get_asset_desc_rec
732               (p_asset_hdr_rec         => l_asset_hdr_rec,
733                px_asset_desc_rec       => l_asset_desc_rec
734                , p_log_level_rec => g_log_level_rec) then
735                raise group_adj_err;
736             end if;
737             if (g_log_level_rec.statement_level) then
738                 fa_debug_pkg.add('do_pending_groups',
739                         'AFTER',
740                         'get_asset_desc_rec', p_log_level_rec => g_log_level_rec);
741             end if;
742 
743             if not FA_UTIL_PVT.get_asset_cat_rec
744                (p_asset_hdr_rec         => l_asset_hdr_rec,
745                 px_asset_cat_rec        => l_asset_cat_rec,
746                 p_date_effective        => null
747                 , p_log_level_rec => g_log_level_rec) then
748                 raise group_adj_err;
749             end if;
750 
751             if (g_log_level_rec.statement_level) then
752                fa_debug_pkg.add('do_pending_groups',
753                         'AFTER',
754                         'get_asset_cat_rec', p_log_level_rec => g_log_level_rec);
755             end if;
756 
757             if not FA_UTIL_PVT.get_asset_type_rec
758                (p_asset_hdr_rec         => l_asset_hdr_rec,
759                 px_asset_type_rec       => l_asset_type_rec,
760                 p_date_effective        => null
761                 , p_log_level_rec => g_log_level_rec) then
762                 raise group_adj_err;
763             end if;
764 
765             if (g_log_level_rec.statement_level) then
766                fa_debug_pkg.add('do_pending_groups',
767                         'AFTER get_asset_cat_rec',
768                         l_asset_type_rec.asset_type, p_log_level_rec => g_log_level_rec);
769             end if;
770 
771             -- load the old structs
772             if not FA_UTIL_PVT.get_asset_fin_rec
773                (p_asset_hdr_rec         => l_asset_hdr_rec,
774                 px_asset_fin_rec        => l_asset_fin_rec_old,
775                 p_transaction_header_id => l_old_trx_id,
776                 p_mrc_sob_type_code     => l_mrc_sob_type_code
777                 , p_log_level_rec => g_log_level_rec) then raise group_adj_err;
778             end if;
779             if (g_log_level_rec.statement_level) then
780                 fa_debug_pkg.add('do_pending_groups',
781                         'AFTER get_asset_fin_rec OLD',
782                         l_asset_fin_rec_old.cost, p_log_level_rec => g_log_level_rec);
783             end if;
784 
785             if not FA_UTIL_PVT.get_asset_deprn_rec
786                (p_asset_hdr_rec         => l_asset_hdr_rec ,
787                 px_asset_deprn_rec      => l_asset_deprn_rec_old,
788                 p_period_counter        => NULL,
789                 p_mrc_sob_type_code     => l_mrc_sob_type_code
790                 , p_log_level_rec => g_log_level_rec) then raise group_adj_err;
791             end if;
792 
793             if (g_log_level_rec.statement_level) then
794                fa_debug_pkg.add('do_pending_groups',
795                         'AFTER',
796                         'get_asset_deprn_rec OLD', p_log_level_rec => g_log_level_rec);
797             end if;
798             -- load the new structs
799             if not FA_UTIL_PVT.get_asset_fin_rec
800                (p_asset_hdr_rec         => l_asset_hdr_rec,
801                 px_asset_fin_rec        => l_asset_fin_rec_new,
802                 p_transaction_header_id => NULL,
803                 p_mrc_sob_type_code     => l_mrc_sob_type_code
804                 , p_log_level_rec => g_log_level_rec) then raise group_adj_err;
805             end if;
806             if (g_log_level_rec.statement_level) then
807                 fa_debug_pkg.add('do_pending_groups',
808                         'AFTER get_asset_fin_rec NEW',
809                         l_asset_fin_rec_new.cost, p_log_level_rec => g_log_level_rec);
810             end if;
811             if (NOT FA_UTIL_PVT.get_period_rec (
812               p_book           => l_asset_hdr_rec.book_type_code,
813               p_effective_date => NULL,
814               x_period_rec     => l_period_rec, p_log_level_rec => g_log_level_rec)) then
815               raise group_adj_err;
816             end if;
817 
818             if (g_log_level_rec.statement_level) then
819                 fa_debug_pkg.add('do_pending_groups',
820                         'AFTERALLSTRUCTS',
821                         'AFTERALLSTRUCTS', p_log_level_rec => g_log_level_rec);
822             end if;
823 
824             if (g_log_level_rec.statement_level) then
825                 fa_debug_pkg.add('do_pending_groups',
826                         'not-groupreclass',
827                         'CALLING FAXAMA', p_log_level_rec => g_log_level_rec);
828             end if;
829 
830             if (not FA_AMORT_PVT.faxama(
831                          px_trans_rec            => l_trans_rec,
832                          p_asset_hdr_rec         => l_asset_hdr_rec,
833                          p_asset_desc_rec        => l_asset_desc_rec,
834                          p_asset_cat_rec         => l_asset_cat_rec,
835                          p_asset_type_rec        => l_asset_type_rec,
836                          p_asset_fin_rec_old     => l_asset_fin_rec_old,
837                          p_asset_fin_rec_adj     => l_asset_fin_rec_adj_null,
838                          px_asset_fin_rec_new    => l_asset_fin_rec_new,
839                          p_asset_deprn_rec       => l_asset_deprn_rec_old,
840                          p_asset_deprn_rec_adj   => l_asset_deprn_rec_adj_null,
841                          p_period_rec            => l_period_rec,
842                          p_mrc_sob_type_code     => l_mrc_sob_type_code,
843                          p_running_mode          => fa_std_types.FA_DPR_NORMAL,
844                          p_used_by_revaluation   => null,
845                          p_reclassed_asset_id    => l_reclassed_asset_id,
846                          p_reclass_src_dest      => l_reclass_src_dest,
847                          p_reclassed_asset_dpis  => l_reclassed_asset_dpis,
848                          p_update_books_summary  => TRUE,
849                          p_proceeds_of_sale      => 0,
850                          p_cost_of_removal       => 0,
851                          x_deprn_exp             => l_deprn_exp,
852                          x_bonus_deprn_exp       => l_bonus_deprn_exp,
853                          x_impairment_exp        => l_impairment_exp,
854                          x_deprn_rsv             => l_deprn_rsv, p_log_level_rec => g_log_level_rec)) then
855 
856                if (g_log_level_rec.statement_level) then
857                   fa_debug_pkg.add('calc_fin_info', 'calling FA_AMORT_PVT.faxama', 'FAILED',  p_log_level_rec => g_log_level_rec);
858                end if;
859 
860                raise group_adj_err;
861 
862             end if; -- (not FA_AMORT_PVT.faxama
863 
864 
865             -- insert the deprn amounts
866             if not FA_INS_ADJ_PVT.faxiat
867                      (p_trans_rec       => l_trans_rec,
868                       p_asset_hdr_rec   => l_asset_hdr_rec,
869                       p_asset_desc_rec  => l_asset_desc_rec,
870                       p_asset_cat_rec   => l_asset_cat_rec,
871                       p_asset_type_rec  => l_asset_type_rec,
872                       p_cost            => 0,
873                       p_clearing        => 0,
874                       p_deprn_expense   => l_deprn_exp,
875                       p_bonus_expense   => l_bonus_deprn_exp,
876                       p_impair_expense  => l_impairment_exp,
877                       p_ann_adj_amt     => 0,
878                       p_mrc_sob_type_code => l_mrc_sob_type_code,
879                       p_calling_fn      => l_calling_fn
880                      , p_log_level_rec => g_log_level_rec) then raise group_adj_err;
881             end if;
882 
883 
884             --
885             -- Dupulicate group FA_ADJUSTMENTS entries on member asset
886             --
887             if (nvl(l_deprn_exp, 0) <> 0 or nvl(l_bonus_deprn_exp, 0) <> 0) and
888                (l_asset_type_rec.asset_type = 'GROUP') and
889                (l_trans_rec.member_transaction_header_id is not null) and
890                (nvl(l_asset_fin_rec_new.tracking_method,'NO TRACK') = 'ALLOCATE') then
891 
892                -- bridgway: moved the member fetch above as we need info for SLA purposes
893 
894                lm_trans_rec.who_info.created_by := l_trans_rec.who_info.last_updated_by;
895                lm_trans_rec.who_info.creation_date := l_trans_rec.who_info.last_update_date;
896 
897                lm_asset_hdr_rec.book_type_code := l_asset_hdr_rec.book_type_code;
898                lm_asset_hdr_rec.set_of_books_id := l_asset_hdr_rec.set_of_books_id;
899 
900                -- load the old structs
901                if not FA_UTIL_PVT.get_asset_fin_rec
902                        (p_asset_hdr_rec         => lm_asset_hdr_rec,
903                         px_asset_fin_rec        => lm_asset_fin_rec,
904                         p_transaction_header_id => NULL,
905                         p_mrc_sob_type_code     => l_mrc_sob_type_code, p_log_level_rec => g_log_level_rec) then
906                   raise group_adj_err;
907                end if;
908 
909                if not FA_UTIL_PVT.get_asset_desc_rec
910                        (p_asset_hdr_rec         => lm_asset_hdr_rec,
911                         px_asset_desc_rec       => lm_asset_desc_rec, p_log_level_rec => g_log_level_rec) then
912                   raise group_adj_err;
913                end if;
914 
915                if not FA_UTIL_PVT.get_asset_cat_rec
916                        (p_asset_hdr_rec         => lm_asset_hdr_rec,
917                         px_asset_cat_rec        => lm_asset_cat_rec,
918                         p_date_effective        => null, p_log_level_rec => g_log_level_rec) then
919                   raise group_adj_err;
920                end if;
921 
922                if not FA_UTIL_PVT.get_asset_type_rec
923                        (p_asset_hdr_rec         => lm_asset_hdr_rec,
924                         px_asset_type_rec       => lm_asset_type_rec,
925                         p_date_effective        => null, p_log_level_rec => g_log_level_rec) then
926                   raise group_adj_err;
927                end if;
928 
929                --Bug7008015: Need member reserve
930                if not FA_UTIL_PVT.get_asset_deprn_rec
931                       (p_asset_hdr_rec         => lm_asset_hdr_rec ,
932                        px_asset_deprn_rec      => lm_asset_deprn_rec,
933                        p_period_counter        => NULL,
934                        p_mrc_sob_type_code     => l_mrc_sob_type_code, p_log_level_rec => g_log_level_rec) then
935                   raise group_adj_err;
936                end if;
937 
938                -- Bug7008015
939                -- Fully reserve member asset if
940                -- - l_adjust_type is AMORTIZED: If this is expensed, this won't be necessary as it takes care this
941                -- - This is a member asset.  - premature to apply this for all assets
942                -- - Tracking method is allocate - premature to apply this for all assets
943                -- - This is not group reclass
944                -- - There is a change in cost
945                -- - New reserve is more than the adj rec cost or adj rec cost is 0 while there is rsv balance
946                -- If all above condition is met, asset will be fully reserve by expensing remaining nbv (adj rec cost - rsv)
947                if (g_log_level_rec.statement_level) then
948                   fa_debug_pkg.add(l_calling_fn, 'lm_asset_fin_rec.group_asset_id', lm_asset_fin_rec.group_asset_id, p_log_level_rec => g_log_level_rec);
949                   fa_debug_pkg.add(l_calling_fn, 'lm_asset_fin_rec.tracking_method', lm_asset_fin_rec.tracking_method, p_log_level_rec => g_log_level_rec);
950                   fa_debug_pkg.add(l_calling_fn, 'l_trans_rec.transaction_key', l_trans_rec.transaction_key, p_log_level_rec => g_log_level_rec);
951                   fa_debug_pkg.add(l_calling_fn, 'delta cost', nvl(l_asset_fin_rec_new.cost , 0) - nvl(l_asset_fin_rec_old.cost, 0));
952                   fa_debug_pkg.add(l_calling_fn, 'lm_asset_deprn_rec.deprn_reserve', lm_asset_deprn_rec.deprn_reserve, p_log_level_rec => g_log_level_rec);
953                   fa_debug_pkg.add(l_calling_fn, 'lm_asset_fin_rec.adjusted_recoverable_cost', lm_asset_fin_rec.adjusted_recoverable_cost, p_log_level_rec => g_log_level_rec);
954                   fa_debug_pkg.add(l_calling_fn, 'l_deprn_exp', l_deprn_exp, p_log_level_rec => g_log_level_rec);
955                end if;
956 
957                if lm_asset_fin_rec.group_asset_id is not null and
958                   lm_asset_fin_rec.tracking_method = 'ALLOCATE' and
959                   l_trans_rec.transaction_key <> 'GC' and
960                   nvl(l_asset_fin_rec_new.cost , 0) - nvl(l_asset_fin_rec_old.cost, 0) <> 0 and
961                   ( ( ( sign(nvl(lm_asset_deprn_rec.deprn_reserve, 0) + nvl(l_deprn_exp, 0)) =
962                                                             sign(lm_asset_fin_rec.adjusted_recoverable_cost) ) and
963                          ( abs(nvl(lm_asset_deprn_rec.deprn_reserve, 0) + nvl(l_deprn_exp, 0)) >
964                                                             abs(lm_asset_fin_rec.adjusted_recoverable_cost)   )  ) or
965                     (lm_asset_fin_rec.adjusted_recoverable_cost = 0 and lm_asset_deprn_rec.deprn_reserve <> 0)     ) then
966                   l_deprn_exp := lm_asset_fin_rec.adjusted_recoverable_cost - nvl(lm_asset_deprn_rec.deprn_reserve, 0);
967                end if;
968 
969                if not FA_INS_ADJ_PVT.faxiat
970                         (p_trans_rec       => lm_trans_rec,
971                          p_asset_hdr_rec   => lm_asset_hdr_rec,
972                          p_asset_desc_rec  => lm_asset_desc_rec,
973                          p_asset_cat_rec   => lm_asset_cat_rec,
974                          p_asset_type_rec  => lm_asset_type_rec,
975                          p_cost            => 0,
976                          p_clearing        => 0,
977                          p_deprn_expense   => l_deprn_exp,
978                          p_bonus_expense   => l_bonus_deprn_exp,
979                          p_impair_expense  => l_impairment_exp,
980                          p_ann_adj_amt     => 0,
981                          p_track_member_flag => 'Y',
982                          p_mrc_sob_type_code => l_mrc_sob_type_code,
983                          p_calling_fn      => l_calling_fn, p_log_level_rec => g_log_level_rec) then
984                   raise group_adj_err;
985                end if;
986 
987             end if;
988 
989             -- now update fa_books
990             if (l_mrc_sob_type_code = 'R') then
991                update fa_mc_books
992                set rate_adjustment_factor =
993                         l_asset_fin_rec_new.rate_adjustment_factor,
994                    reval_amortization_basis =
995                         l_asset_fin_rec_new.reval_amortization_basis,
996                    adjusted_cost = l_asset_fin_rec_new.adjusted_cost,
997                    adjusted_capacity = l_asset_fin_rec_new.adjusted_capacity,
998                    eofy_reserve = l_asset_fin_rec_new.eofy_reserve,
999                    adjustment_required_status = 'NONE'
1000                where asset_id = l_asset_id
1001                  and book_type_code = p_book
1002                  and transaction_header_id_out is null;
1003             else
1004                update fa_books
1005                set rate_adjustment_factor =
1006                         l_asset_fin_rec_new.rate_adjustment_factor,
1007                    reval_amortization_basis =
1008                         l_asset_fin_rec_new.reval_amortization_basis,
1009                    adjusted_cost = l_asset_fin_rec_new.adjusted_cost,
1010                    adjusted_capacity = l_asset_fin_rec_new.adjusted_capacity,
1011                    eofy_reserve = l_asset_fin_rec_new.eofy_reserve,
1012                    adjustment_required_status = 'NONE'
1013                where rowid = l_rowid;
1014             end if;
1015 
1016             -- HHIRAGA
1017             --++ Added for tracking
1018             -- When Group Adjustment is processed for the group whose tracking
1019             -- method is allocate but the transaction kicked at group level,
1020             -- expense must be allocated to members.
1021             -- HH assuming this is not a change to disabled_flag
1022             if l_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
1023                l_trans_rec.member_transaction_header_id is null and
1024                nvl(l_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE' then
1025 --               not l_disabled_flag_changed then
1026            -- Call TRACK_ASSETS
1027                l_rc := fa_track_member_pvt.track_assets
1028                      (P_book_type_code             => l_asset_hdr_rec.book_type_code,
1029                       P_group_asset_id             => l_asset_hdr_rec.asset_id,
1030                       P_period_counter             => l_period_rec.period_num,
1031                       P_fiscal_year                => l_period_rec.fiscal_year,
1032                       P_group_deprn_basis          => fa_cache_pkg.fazccmt_record.deprn_basis_rule,
1033                       P_group_exclude_salvage      => fa_cache_pkg.fazccmt_record.exclude_salvage_value_flag,
1034                       P_group_bonus_rule           => l_asset_fin_rec_new.bonus_rule,
1035                       P_group_deprn_amount         => l_deprn_exp,
1036                       P_group_bonus_amount         => l_bonus_deprn_exp,
1037                       P_tracking_method            => l_asset_fin_rec_new.tracking_method,
1038                       P_allocate_to_fully_ret_flag => l_asset_fin_rec_new.allocate_to_fully_ret_flag,
1039                       P_allocate_to_fully_rsv_flag => l_asset_fin_rec_new.allocate_to_fully_rsv_flag,
1040                       P_excess_allocation_option   => l_asset_fin_rec_new.excess_allocation_option,
1041                       P_depreciation_option        => l_asset_fin_rec_new.depreciation_option,
1042                       P_member_rollup_flag         => l_asset_fin_rec_new.member_rollup_flag,
1043                       P_group_level_override       => l_group_level_override,
1044                       P_period_of_addition         => l_asset_hdr_rec.period_of_addition,
1045                       P_transaction_date_entered   => l_trans_rec.transaction_date_entered,
1046                       P_mode                       => 'GROUP ADJUSTMENT',
1047                       P_mrc_sob_type_code          => l_mrc_sob_type_code,
1048                       P_set_of_books_id            => l_asset_hdr_rec.set_of_books_id,
1049                       X_new_deprn_amount           => x_new_deprn_amount,
1050                       X_new_bonus_amount           => x_new_bonus_amount,  p_log_level_rec => g_log_level_rec);
1051                if l_rc <> 0  then
1052                  raise group_adj_err;
1053                end if;
1054            end if; -- Tracking is ALLOCATE
1055 
1056 
1057          elsif (l_trans_rec.transaction_key = 'GC' and l_sob_index = 0) then --Bug 8941132 Reclass call only for primary book
1058 
1059             -- the asset currently fetched could have have been
1060             -- processed already as source,dest trxn in this run
1061             -- after the initial fetch
1062             --Bug#8675920 Need to call do_group_reclass for Reporting currecy too.
1063             if l_mrc_sob_type_code = 'P' then
1064                open check_adj_status;
1065                fetch check_adj_status into l_adj_count;
1066                close check_adj_status;
1067             else
1068                open check_mc_adj_status;
1069                fetch check_mc_adj_status into l_adj_count;
1070                close check_mc_adj_status;
1071             end if;
1072             if (l_adj_count = 1) then
1073                open get_trx_ref;
1074                fetch get_trx_ref into
1075                         l_trx_ref_rec.TRX_REFERENCE_ID,
1076                         l_trx_ref_rec.TRANSACTION_TYPE,
1077                         l_trx_ref_rec.SRC_TRANSACTION_SUBTYPE,
1078                         l_trx_ref_rec.DEST_TRANSACTION_SUBTYPE,
1079                         l_trx_ref_rec.BOOK_TYPE_CODE,
1080                         l_trx_ref_rec.SRC_ASSET_ID,
1081                         l_trx_ref_rec.SRC_TRANSACTION_HEADER_ID,
1082                         l_trx_ref_rec.DEST_ASSET_ID,
1083                         l_trx_ref_rec.DEST_TRANSACTION_HEADER_ID,
1084                         l_trx_ref_rec.MEMBER_ASSET_ID,
1085                         l_trx_ref_rec.MEMBER_TRANSACTION_HEADER_ID,
1086                         l_trx_ref_rec.SRC_AMORTIZATION_START_DATE,
1087                         l_trx_ref_rec.DEST_AMORTIZATION_START_DATE,
1088                         l_trx_ref_rec.RESERVE_TRANSFER_AMOUNT,
1089                         l_trx_ref_rec.SRC_EXPENSE_AMOUNT,
1090                         l_trx_ref_rec.DEST_EXPENSE_AMOUNT,
1091                         l_trx_ref_rec.SRC_EOFY_RESERVE,
1092                         l_trx_ref_rec.DEST_EOFY_RESERVE;
1093                close get_trx_ref;
1094                if (g_log_level_rec.statement_level) then
1095                    fa_debug_pkg.add('do_all_books',
1096                         'calling do_group_reclass',
1097                          'calling do_group_reclass', p_log_level_rec => g_log_level_rec);
1098                end if;
1099 
1100                if not do_group_reclass(
1101                         p_trx_ref_rec           => l_trx_ref_rec,
1102                         p_mrc_sob_type_code     => l_mrc_sob_type_code,
1103                         p_set_of_books_id       => l_asset_hdr_rec.set_of_books_id,
1104                         p_log_level_rec         => g_log_level_rec) then --Bug 8941132 added g_log_level_rec
1105                   raise GROUP_ADJ_ERR;
1106                end if;
1107             end if; -- l_adj_count = 1
1108 
1109          elsif (l_trans_rec.transaction_key in ('UA', 'UE')) then
1110             --
1111             -- Allocating unplanned depreciation against group to its member assets
1112             --
1113 
1114             -- load the new structs
1115             if not FA_UTIL_PVT.get_asset_fin_rec(
1116                       p_asset_hdr_rec         => l_asset_hdr_rec,
1117                       px_asset_fin_rec        => l_asset_fin_rec_new,
1118                       p_transaction_header_id => NULL,
1119                       p_mrc_sob_type_code     => l_mrc_sob_type_code, p_log_level_rec => g_log_level_rec) then
1120                raise group_adj_err;
1121             end if;
1122 
1123             if not FA_UTIL_PVT.get_period_rec (
1124                       p_book           => l_asset_hdr_rec.book_type_code,
1125                       p_effective_date => NULL,
1126                       x_period_rec     => l_period_rec, p_log_level_rec => g_log_level_rec) then
1127                raise group_adj_err;
1128             end if;
1129 
1130             if (l_mrc_sob_type_code <> 'R') then
1131                if not fa_cache_pkg.fazccmt(l_asset_fin_rec_new.deprn_method_code
1132                                          , l_asset_fin_rec_new.life_in_months, p_log_level_rec => g_log_level_rec) then
1133                   fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => g_log_level_rec);
1134                   raise group_adj_err;
1135                end if;
1136             end if;
1137 
1138             --
1139             -- Get unplanned amount
1140             --
1141             if (l_mrc_sob_type_code = 'R') then
1142                OPEN c_mc_get_unplanned_amt;
1143                FETCH c_mc_get_unplanned_amt INTO l_unplanned_deprn_rec.unplanned_amount;
1144                CLOSE c_mc_get_unplanned_amt;
1145             else
1146                OPEN c_get_unplanned_amt;
1147                FETCH c_get_unplanned_amt INTO l_unplanned_deprn_rec.unplanned_amount;
1148                CLOSE c_get_unplanned_amt;
1149             end if;
1150 
1151             l_rc := FA_TRACK_MEMBER_PVT.TRACK_ASSETS
1152                        (P_book_type_code             => l_asset_hdr_rec.book_type_code,
1153                         P_group_asset_id             => l_asset_hdr_rec.asset_id,
1154                         P_period_counter             => l_period_rec.period_num,
1155                         P_fiscal_year                => l_period_rec.fiscal_year,
1156                         P_group_deprn_basis          => fa_cache_pkg.fazccmt_record.deprn_basis_rule,
1157                         P_group_exclude_salvage      => fa_cache_pkg.fazccmt_record.exclude_salvage_value_flag,
1158                         P_group_bonus_rule           => l_asset_fin_rec_new.bonus_rule,
1159                         P_group_deprn_amount         => l_unplanned_deprn_rec.unplanned_amount,
1160                         P_group_bonus_amount         => 0,
1161                         P_tracking_method            => l_asset_fin_rec_new.tracking_method,
1162                         P_allocate_to_fully_ret_flag => l_asset_fin_rec_new.allocate_to_fully_ret_flag,
1163                         P_allocate_to_fully_rsv_flag => l_asset_fin_rec_new.allocate_to_fully_rsv_flag,
1164                         P_excess_allocation_option   => l_asset_fin_rec_new.excess_allocation_option,
1165                         P_subtraction_flag           => 'N',
1166                         P_group_level_override       => l_group_level_override,
1167                         P_transaction_date_entered   => l_trans_rec.transaction_date_entered,
1168                         P_mode                       => 'UNPLANNED',
1169                         P_mrc_sob_type_code          => l_mrc_sob_type_code,
1170                         P_set_of_books_id            => l_asset_hdr_rec.set_of_books_id,
1171                         X_new_deprn_amount           => l_group_deprn_amount,
1172                         X_new_bonus_amount           => l_group_bonus_amount,  p_log_level_rec => g_log_level_rec);
1173 
1174             if l_rc <> 0 then
1175                raise GROUP_ADJ_ERR;
1176             elsif l_group_deprn_amount <> l_unplanned_deprn_rec.unplanned_amount then
1177                raise GROUP_ADJ_ERR;
1178             end if;
1179 
1180 
1181          elsif l_trans_rec.transaction_key in ('MR', 'MS') then
1182             --
1183             -- Allocating remaining reserve(group reserve retired - retired member reserve retired) to
1184             -- remaining member assets.
1185             --
1186 
1187             -- load the new structs
1188             if not FA_UTIL_PVT.get_asset_fin_rec(
1189                       p_asset_hdr_rec         => l_asset_hdr_rec,
1190                       px_asset_fin_rec        => l_asset_fin_rec_new,
1191                       p_transaction_header_id => NULL,
1192                       p_mrc_sob_type_code     => l_mrc_sob_type_code, p_log_level_rec => g_log_level_rec) then
1193                raise group_adj_err;
1194             end if;
1195 
1196             if not FA_UTIL_PVT.get_period_rec (
1197                       p_book           => l_asset_hdr_rec.book_type_code,
1198                       p_effective_date => NULL,
1199                       x_period_rec     => l_period_rec, p_log_level_rec => g_log_level_rec) then
1200                raise group_adj_err;
1201             end if;
1202 
1203             --
1204             -- Get member's and group's reserve retired to find out
1205             -- amount to allocate to remaining member assets
1206             --
1207             if (l_mrc_sob_type_code = 'R') then
1208                if (l_trans_rec.transaction_key = 'MR') then
1209                   OPEN c_mc_get_member_rsv_ret;
1210                   FETCH c_mc_get_member_rsv_ret INTO l_member_reserve_amount;
1211                   CLOSE c_mc_get_member_rsv_ret;
1212 
1213                   l_mem_ret_thid := null;
1214                else
1215                   OPEN c_mc_get_member_rsv_rei;
1216                   FETCH c_mc_get_member_rsv_rei INTO l_member_reserve_amount, l_mem_ret_thid;
1217                   CLOSE c_mc_get_member_rsv_rei;
1218                end if;
1219 
1220                OPEN c_mc_get_group_rsv_ret;
1221                FETCH c_mc_get_group_rsv_ret INTO l_group_reserve_amount;
1222                CLOSE c_mc_get_group_rsv_ret;
1223             else
1224                if (l_trans_rec.transaction_key = 'MR') then
1225                   OPEN c_get_member_rsv_ret;
1226                   FETCH c_get_member_rsv_ret INTO l_member_reserve_amount;
1227                   CLOSE c_get_member_rsv_ret;
1228 
1229                   l_mem_ret_thid := null;
1230                else
1231                   OPEN c_get_member_rsv_rei;
1232                   FETCH c_get_member_rsv_rei INTO l_member_reserve_amount, l_mem_ret_thid;
1233                   CLOSE c_get_member_rsv_rei;
1234                end if;
1235 
1236                OPEN c_get_group_rsv_ret;
1237                FETCH c_get_group_rsv_ret INTO l_group_reserve_amount;
1238                CLOSE c_get_group_rsv_ret;
1239             end if;
1240 
1241             if not FA_UTIL_PVT.get_asset_deprn_rec
1242                 (p_asset_hdr_rec         => l_asset_hdr_rec ,
1243                  px_asset_deprn_rec      => l_asset_deprn_rec_new,
1244                  p_period_counter        => NULL,
1245                  p_mrc_sob_type_code     => l_mrc_sob_type_code
1246                  , p_log_level_rec => g_log_level_rec) then raise group_adj_err;
1247             end if;
1248 
1249             if (g_log_level_rec.statement_level) then
1250                fa_debug_pkg.add(l_calling_fn,'l_trans_rec.transaction_key', l_trans_rec.transaction_key, p_log_level_rec => g_log_level_rec);
1251                fa_debug_pkg.add(l_calling_fn,'p_reserve_amount', l_group_reserve_amount - l_member_reserve_amount, p_log_level_rec => g_log_level_rec);
1252                fa_debug_pkg.add(l_calling_fn,'p_mem_ret_thid', l_mem_ret_thid, p_log_level_rec => g_log_level_rec);
1253             end if;
1254 
1255             if not FA_RETIREMENT_PVT.Do_Allocation(
1256                       p_trans_rec         => l_trans_rec,
1257                       p_asset_hdr_rec     => l_asset_hdr_rec,
1258                       p_asset_fin_rec     => l_asset_fin_rec_new,
1259                       p_asset_deprn_rec_new => l_asset_deprn_rec_new,
1260                       p_period_rec        => l_period_rec,
1261                       p_reserve_amount    => l_group_reserve_amount - l_member_reserve_amount,
1262                       p_mem_ret_thid      => l_mem_ret_thid,
1263                       p_mrc_sob_type_code => l_mrc_sob_type_code,
1264                       p_calling_fn        => 'FAPGADJ', p_log_level_rec => g_log_level_rec) then
1265                raise group_adj_err;
1266             end if;
1267 
1268          end if;  -- l_trans_rec.transaction_key <> GC
1269 
1270          if (l_trans_rec.transaction_key in ('UA', 'UE', 'MR', 'MS')) then
1271 
1272             if(l_mrc_sob_type_code = 'R') then
1273                update fa_mc_books
1274                set adjustment_required_status = 'NONE'
1275                where asset_id = l_asset_id
1276                and book_type_code = p_book
1277                and transaction_header_id_out is null;
1278             else
1279                update fa_books
1280                set adjustment_required_status = 'NONE'
1281                where rowid = l_rowid;
1282             end if;
1283          end if;
1284 
1285          -- Bug 8862296 Changes start here
1286          if (l_trans_rec.transaction_key = 'MJ' and
1287              lm_trans_rec.transaction_key = 'IT' and
1288              nvl(p_source_group_asset_id,-99) = nvl(p_dest_group_asset_id,-99)) then
1289 
1290             -- call for dest
1291             OPEN c_get_trx_reference;
1292             FETCH c_get_trx_reference
1293              INTO l_src_asset_hdr_rec.asset_id,
1294                   l_src_asset_hdr_rec.book_type_code,
1295                   l_src_trans_rec.transaction_header_id,
1296                   l_src_trans_rec.transaction_subtype,
1297                   l_src_trans_rec.amortization_start_date,
1298                   l_src_trans_rec.trx_reference_id,
1299                   l_src_trans_rec.event_id,
1300                   l_dest_asset_hdr_rec.asset_id,
1301                   l_dest_asset_hdr_rec.book_type_code,
1302                   l_dest_trans_rec.transaction_header_id,
1303                   l_dest_trans_rec.transaction_subtype,
1304                   l_dest_trans_rec.amortization_start_date,
1305                   l_dest_trans_rec.trx_reference_id,
1306                   l_dest_trans_rec.event_id,
1307                   l_inv_trans_rec.transaction_type,
1308                   l_inv_trans_rec.invoice_transaction_id;
1309             CLOSE c_get_trx_reference;
1310 
1311             l_src_trans_rec.transaction_type_code := 'ADJUSTMENT';
1312             l_src_trans_rec.transaction_key := 'IT';
1313             l_src_trans_rec.transaction_date_entered := l_dest_trans_rec.amortization_start_date;
1314             l_src_trans_rec.calling_interface := 'CUSTOM';
1315 
1316             l_dest_trans_rec.transaction_type_code := 'ADJUSTMENT';
1317             l_dest_trans_rec.transaction_key := 'IT';
1318             l_dest_trans_rec.transaction_date_entered := l_dest_trans_rec.amortization_start_date;
1319             l_dest_trans_rec.calling_interface := 'CUSTOM';
1320 
1321             l_src_asset_hdr_rec.set_of_books_id := l_asset_hdr_rec.set_of_books_id;
1322             l_dest_asset_hdr_rec.set_of_books_id := l_asset_hdr_rec.set_of_books_id;
1323 
1324             OPEN c_inv_tbl;
1325             i :=1;
1326             LOOP
1327                J :=1;
1328                FETCH c_inv_tbl
1329                INTO l_dest_inv_tbl(i).PO_VENDOR_ID,
1330                     l_dest_inv_tbl(i).ASSET_INVOICE_ID,
1331                     l_dest_inv_tbl(i).FIXED_ASSETS_COST,
1332                     l_dest_inv_tbl(i).DELETED_FLAG,
1333                     l_dest_inv_tbl(i).PO_NUMBER,
1334                     l_dest_inv_tbl(i).INVOICE_NUMBER,
1335                     l_dest_inv_tbl(i).PAYABLES_BATCH_NAME,
1336                     l_dest_inv_tbl(i).PAYABLES_CODE_COMBINATION_ID,
1337                     l_dest_inv_tbl(i).FEEDER_SYSTEM_NAME,
1338                     l_dest_inv_tbl(i).CREATE_BATCH_DATE,
1339                     l_dest_inv_tbl(i).CREATE_BATCH_ID,
1340                     l_dest_inv_tbl(i).INVOICE_DATE,
1341                     l_dest_inv_tbl(i).PAYABLES_COST,
1342                     l_dest_inv_tbl(i).POST_BATCH_ID,
1343                     l_dest_inv_tbl(i).INVOICE_ID,
1344                     l_dest_inv_tbl(i).AP_DISTRIBUTION_LINE_NUMBER,
1345                     l_dest_inv_tbl(i).PAYABLES_UNITS,
1346                     l_dest_inv_tbl(i).SPLIT_MERGED_CODE,
1347                     l_dest_inv_tbl(i).DESCRIPTION,
1348                     l_dest_inv_tbl(i).PARENT_MASS_ADDITION_ID,
1349                     l_dest_inv_tbl(i).UNREVALUED_COST,
1350                     l_dest_inv_tbl(i).MERGED_CODE,
1351                     l_dest_inv_tbl(i).SPLIT_CODE,
1352                     l_dest_inv_tbl(i).MERGE_PARENT_MASS_ADDITIONS_ID,
1353                     l_dest_inv_tbl(i).SPLIT_PARENT_MASS_ADDITIONS_ID,
1354                     l_dest_inv_tbl(i).PROJECT_ASSET_LINE_ID,
1355                     l_dest_inv_tbl(i).PROJECT_ID,
1356                     l_dest_inv_tbl(i).TASK_ID,
1357                     l_dest_inv_tbl(i).DEPRECIATE_IN_GROUP_FLAG,
1358                     l_dest_inv_tbl(i).MATERIAL_INDICATOR_FLAG,
1359                     l_dest_inv_tbl(i).PRIOR_SOURCE_LINE_ID,
1360                     l_dest_inv_tbl(i).INVOICE_DISTRIBUTION_ID,
1361                     l_dest_inv_tbl(i).INVOICE_LINE_NUMBER,
1362                     l_dest_inv_tbl(i).PO_DISTRIBUTION_ID;
1363 
1364                EXIT WHEN c_inv_tbl%NOTFOUND;
1365                l_dest_inv_tbl(i).source_line_id    := null;
1366 
1367                FOR c_rec in c_inv_rate(l_dest_inv_tbl(i).PRIOR_SOURCE_LINE_ID) LOOP
1368                   if (g_log_level_rec.statement_level) then
1369                      fa_debug_pkg.add(l_calling_fn,'set_of_books_id', c_rec.set_of_books_id,  p_log_level_rec => g_log_level_rec);
1370                      fa_debug_pkg.add(l_calling_fn,'exchange_rate', c_rec.exchange_rate,  p_log_level_rec => g_log_level_rec);
1371                   end if;
1372                   l_dest_inv_tbl(i).inv_rate_tbl(j).set_of_books_id  := c_rec.set_of_books_id;
1373                   l_dest_inv_tbl(i).inv_rate_tbl(j).exchange_rate    := c_rec.exchange_rate;
1374                   l_dest_inv_tbl(i).inv_rate_tbl(j).cost             := c_rec.fixed_assets_cost;
1375                   j := j+1;
1376                END LOOP;
1377 
1378                i := i+1;
1379             END LOOP;
1380 
1381             IF NOT FA_INV_XFR_PUB.do_inv_sub_transfer
1382                   (p_src_trans_rec      => l_src_trans_rec,
1383                    p_src_asset_hdr_rec  => l_src_asset_hdr_rec,
1384                    p_dest_trans_rec     => l_dest_trans_rec,
1385                    p_dest_asset_hdr_rec => l_dest_asset_hdr_rec,
1386                    p_inv_tbl            => l_dest_inv_tbl,
1387                    p_inv_trans_rec      => l_inv_trans_rec,
1388                    p_log_level_rec      => g_log_level_rec) then
1389                raise GROUP_ADJ_ERR;
1390             end if;
1391 
1392          end if;
1393          -- Bug 8862296 Changes end here
1394 
1395       end loop; -- FOR all books loop
1396                --
1397       COMMIT WORK;
1398    end loop; -- trxs loop
1399    if (TRX_CUR) then
1400       close get_group_assets;
1401    else close get_all_groups;
1402    end if;
1403 
1404    return TRUE;
1405 EXCEPTION
1406    WHEN GROUP_ADJ_ERR THEN
1407       fa_srvr_msg.add_message(
1408           calling_fn => l_calling_fn, p_log_level_rec => g_log_level_rec);
1409       return FALSE;
1410    WHEN OTHERS THEN
1411       fa_srvr_msg.add_sql_error (
1412           calling_fn => l_calling_fn, p_log_level_rec => g_log_level_rec);
1413       return FALSE;
1414 
1415 END do_all_books;
1416 
1417 FUNCTION do_group_reclass(
1418                 p_trx_ref_rec           IN  fa_api_types.trx_ref_rec_type,
1419                 p_mrc_sob_type_code     IN VARCHAR2,
1420                 p_set_of_books_id       IN number,
1421                 p_log_level_rec         IN FA_API_TYPES.log_level_rec_type) --Bug 8941132 added p_log_level_rec
1422                         RETURN BOOLEAN IS
1423 
1424    l_mem_trans_rec              fa_api_types.trans_rec_type;
1425    l_mem_asset_hdr_rec          fa_api_types.asset_hdr_rec_type;
1426    l_mem_asset_desc_rec         fa_api_types.asset_desc_rec_type;
1427    l_mem_asset_type_rec         fa_api_types.asset_type_rec_type;
1428    l_mem_asset_cat_rec          fa_api_types.asset_cat_rec_type;
1429    l_mem_asset_fin_rec_old      fa_api_types.asset_fin_rec_type;
1430    l_mem_asset_fin_rec_adj      fa_api_types.asset_fin_rec_type;
1431    l_mem_asset_fin_rec_new      fa_api_types.asset_fin_rec_type;
1432    l_mem_asset_deprn_rec_old    fa_api_types.asset_deprn_rec_type;
1433    l_mem_asset_deprn_rec_adj    fa_api_types.asset_deprn_rec_type;
1434    l_mem_asset_deprn_rec_new    fa_api_types.asset_deprn_rec_type;
1435 
1436    l_src_trans_rec              fa_api_types.trans_rec_type;
1437    l_src_asset_hdr_rec          fa_api_types.asset_hdr_rec_type;
1438    l_src_asset_desc_rec         fa_api_types.asset_desc_rec_type;
1439    l_src_asset_type_rec         fa_api_types.asset_type_rec_type;
1440    l_src_asset_cat_rec          fa_api_types.asset_cat_rec_type;
1441    l_src_asset_fin_rec_old      fa_api_types.asset_fin_rec_type;
1442    l_src_asset_fin_rec_adj      fa_api_types.asset_fin_rec_type;
1443    l_src_asset_fin_rec_new      fa_api_types.asset_fin_rec_type;
1444    l_src_asset_deprn_rec_old    fa_api_types.asset_deprn_rec_type;
1445    l_src_asset_deprn_rec_adj    fa_api_types.asset_deprn_rec_type;
1446    l_src_asset_deprn_rec_new    fa_api_types.asset_deprn_rec_type;
1447 
1448    l_dest_trans_rec              fa_api_types.trans_rec_type;
1449    l_dest_asset_hdr_rec          fa_api_types.asset_hdr_rec_type;
1450    l_dest_asset_desc_rec         fa_api_types.asset_desc_rec_type;
1451    l_dest_asset_type_rec         fa_api_types.asset_type_rec_type;
1452    l_dest_asset_cat_rec          fa_api_types.asset_cat_rec_type;
1453    l_dest_asset_fin_rec_old      fa_api_types.asset_fin_rec_type;
1454    l_dest_asset_fin_rec_adj      fa_api_types.asset_fin_rec_type;
1455    l_dest_asset_fin_rec_new      fa_api_types.asset_fin_rec_type;
1456    l_dest_asset_deprn_rec_old    fa_api_types.asset_deprn_rec_type;
1457    l_dest_asset_deprn_rec_adj    fa_api_types.asset_deprn_rec_type;
1458    l_dest_asset_deprn_rec_new    fa_api_types.asset_deprn_rec_type;
1459 
1460    l_period_rec                  fa_api_types.period_rec_type;
1461 
1462    -- For calling faxama
1463    l_asset_deprn_rec_adj         fa_api_types.asset_deprn_rec_type;
1464    l_bonus_deprn_exp             number;
1465    l_impairment_exp              number;
1466    l_deprn_rsv                   number;
1467 
1468    -- used for faxinaj calls
1469    l_exp_adj                 FA_ADJUST_TYPE_PKG.fa_adj_row_struct;
1470    l_rsv_adj                 FA_ADJUST_TYPE_PKG.fa_adj_row_struct;
1471 
1472    l_asset_id                   number;
1473    l_trx_id_in                  number;
1474    l_old_trx_id                 number;
1475    l_trx_id                     number;
1476 
1477    l_src_asset                  number := -1;
1478    l_dest_asset                 number := -1;
1479 
1480    l_group_reclass_code         varchar2(20);
1481    l_calling_fn                 varchar2(60) := 'fa_group_process_groups_pkg.do_rcl';
1482 
1483    group_rec_err                exception;
1484 
1485    -- BUG# 6936546
1486    l_api_version                NUMBER      := 1.0;
1487    l_init_msg_list              VARCHAR2(1) := FND_API.G_FALSE;
1488    l_commit                     VARCHAR2(1) := FND_API.G_FALSE;
1489    l_validation_level           NUMBER      := FND_API.G_VALID_LEVEL_NONE;
1490    l_return_status2             VARCHAR2(1);
1491    l_msg_count                  NUMBER;
1492    l_msg_data                   VARCHAR2(2000);
1493    l_trans_rec                  FA_API_TYPES.trans_rec_type;
1494    l_asset_hdr_rec              FA_API_TYPES.asset_hdr_rec_type;
1495    l_asset_dist_tbl             FA_API_TYPES.asset_dist_tbl_type;
1496 
1497    l_distribution_id            num_tbl;
1498    l_units_assigned             num_tbl;
1499    l_code_combination_id        num_tbl;
1500    l_location_id                num_tbl;
1501    l_assigned_to                num_tbl;
1502 
1503    l_transfer_amount            NUMBER; --Bug6987743:
1504 
1505    cursor c_member_dists (p_asset_id number) is
1506    select distribution_id,
1507           units_assigned,
1508           code_combination_id,
1509           location_id,
1510           assigned_to
1511      from fa_distribution_history
1512     where asset_id = p_asset_id
1513       and transaction_header_id_out is null;
1514 
1515    cursor get_old_trx is
1516         select transaction_header_id_in
1517         from fa_books
1518         where asset_id = l_asset_id
1519         and   book_type_code = p_trx_ref_rec.book_type_code
1520         and   transaction_header_id_out = l_trx_id_in;
1521 
1522 
1523    cursor get_trx_rec_info is
1524         select transaction_header_id,
1525                 transaction_type_code,
1526                 transaction_date_entered,
1527                 transaction_name,
1528                 source_transaction_header_id,
1529                 mass_reference_id,
1530                 transaction_subtype,
1531                 transaction_key,
1532                 amortization_start_date,
1533                 'FAPGADJ',
1534                 mass_transaction_id,
1535                 member_transaction_header_id,
1536                 trx_reference_id
1537         from fa_transaction_headers
1538         where transaction_header_id = l_trx_id;
1539 
1540    --Bug6987743: Getting previously transfered reserve
1541    cursor c_get_reserve is
1542       select nvl(reserve_transfer_amount, 0)
1543       from fa_trx_references
1544       where dest_asset_id = l_src_asset_hdr_rec.asset_id
1545       and   member_asset_id = p_trx_ref_rec.member_asset_id
1546       and   book_type_code = p_trx_ref_rec.book_type_code
1547       order by trx_reference_id desc;
1548 
1549    --Bug 8941132 Start
1550    l_sob_tbl                     FA_CACHE_PKG.fazcrsob_sob_tbl_type;
1551 
1552    TYPE reclass_option_tbl       IS TABLE OF FA_API_TYPES.group_reclass_options_rec_type INDEX BY BINARY_INTEGER;
1553    TYPE asset_fin_rec_new_tbl    IS TABLE OF FA_API_TYPES.asset_fin_rec_type             INDEX BY BINARY_INTEGER;
1554    TYPE trans_rec_new_tbl        IS TABLE OF FA_API_TYPES.trans_rec_type                 INDEX BY BINARY_INTEGER;
1555    TYPE asset_hdr_rec_new_tbl    IS TABLE OF FA_API_TYPES.asset_hdr_rec_type             INDEX BY BINARY_INTEGER;
1556    TYPE asset_type_rec_new_tbl   IS TABLE OF FA_API_TYPES.asset_type_rec_type            INDEX BY BINARY_INTEGER;
1557    TYPE amort_init_member_tbl    IS TABLE OF FA_API_TYPES.amort_init_rec_type            INDEX BY BINARY_INTEGER;
1558    TYPE asset_deprn_rec_tbl      IS TABLE OF FA_API_TYPES.asset_deprn_rec_type           INDEX BY BINARY_INTEGER;
1559 
1560    l_group_reclass_options_rec   reclass_option_tbl;
1561    l_grp_src_trans_rec           trans_rec_new_tbl;
1562    l_grp_src_asset_hdr_rec       asset_hdr_rec_new_tbl;
1563    l_grp_src_asset_type_rec      asset_type_rec_new_tbl;
1564    l_grp_src_asset_fin_rec_new   asset_fin_rec_new_tbl;
1565    l_grp_dest_trans_rec          trans_rec_new_tbl;
1566    l_grp_dest_asset_hdr_rec      asset_hdr_rec_new_tbl;
1567    l_grp_dest_asset_type_rec     asset_type_rec_new_tbl;
1568    l_grp_dest_asset_fin_rec_new  asset_fin_rec_new_tbl;
1569    l_amort_init_member_rec       amort_init_member_tbl;
1570    l_mem_asset_deprn_rec_old_tbl asset_deprn_rec_tbl;
1571 
1572    l_mrc_sob_type_code           VARCHAR2(2);
1573    l_src_old_trx_id              number;
1574    l_mem_old_trx_id              number;
1575    l_dest_old_trx_id             number;
1576    --Bug 8941132 End
1577 
1578 BEGIN
1579 
1580    if (p_log_level_rec.statement_level) then
1581       fa_debug_pkg.add('do_group_reclass',
1582                        'in do_group_reclass',
1583                        'in do_group_reclass', p_log_level_rec => p_log_level_rec);
1584    end if;
1585 
1586    -- Bug 8941132: call the sob cache to get the table of sob_ids
1587    if not FA_CACHE_PKG.fazcrsob
1588           (x_book_type_code => p_trx_ref_rec.book_type_code,
1589            x_sob_tbl        => l_sob_tbl,
1590            p_log_level_rec  => p_log_level_rec) then
1591       raise group_rec_err;
1592    end if;
1593 
1594    -- get the member asset recs
1595    l_mem_asset_hdr_rec.asset_id := p_trx_ref_rec.member_asset_id;
1596    l_mem_asset_hdr_rec.book_type_code := p_trx_ref_rec.book_type_code;
1597    l_mem_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
1598 
1599    l_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
1600 
1601    if (p_log_level_rec.statement_level) then
1602       fa_debug_pkg.add('do_group_reclass',
1603                        'member_asset_id START',
1604                        l_mem_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
1605    end if;
1606 
1607    if not FA_ASSET_VAL_PVT.validate_period_of_addition
1608              (p_asset_id            => l_mem_asset_hdr_rec.asset_id,
1609               p_book                => l_mem_asset_hdr_rec.book_type_code,
1610               p_mode                => 'ABSOLUTE',
1611               px_period_of_addition => l_mem_asset_hdr_rec.period_of_addition, p_log_level_rec => p_log_level_rec) then
1612                   raise group_rec_err;
1613    end if;
1614 
1615    if not FA_UTIL_PVT.get_asset_desc_rec
1616               (p_asset_hdr_rec         => l_mem_asset_hdr_rec,
1617                px_asset_desc_rec       => l_mem_asset_desc_rec
1618                , p_log_level_rec => p_log_level_rec) then
1619                raise group_rec_err;
1620    end if;
1621 
1622    if not FA_UTIL_PVT.get_asset_cat_rec
1623                (p_asset_hdr_rec         => l_mem_asset_hdr_rec,
1624                 px_asset_cat_rec        => l_mem_asset_cat_rec,
1625                 p_date_effective        => null
1626                 , p_log_level_rec => p_log_level_rec) then
1627                 raise group_rec_err;
1628    end if;
1629 
1630    if not FA_UTIL_PVT.get_asset_type_rec
1631                (p_asset_hdr_rec         => l_mem_asset_hdr_rec,
1632                 px_asset_type_rec       => l_mem_asset_type_rec,
1633                 p_date_effective        => null
1634                 , p_log_level_rec => p_log_level_rec) then
1635                 raise group_rec_err;
1636    end if;
1637 
1638    if NOT FA_UTIL_PVT.get_period_rec
1639                (p_book           => l_mem_asset_hdr_rec.book_type_code,
1640                 p_effective_date => NULL,
1641                 x_period_rec     => l_period_rec,
1642                 p_log_level_rec  => p_log_level_rec) then
1643                 raise group_rec_err;
1644    end if;
1645 
1646    -- load the old structs
1647 
1648    l_trx_id_in := p_trx_ref_rec.MEMBER_TRANSACTION_HEADER_ID;
1649    l_asset_id := l_mem_asset_hdr_rec.asset_id;
1650    open get_old_trx;
1651    fetch get_old_trx into l_old_trx_id;
1652    close get_old_trx;
1653 
1654    if not FA_UTIL_PVT.get_asset_fin_rec
1655                (p_asset_hdr_rec         => l_mem_asset_hdr_rec,
1656                 px_asset_fin_rec        => l_mem_asset_fin_rec_old,
1657                 p_transaction_header_id => l_old_trx_id,
1658                 p_mrc_sob_type_code     => p_mrc_sob_type_code,
1659                 p_log_level_rec         => p_log_level_rec) then
1660                 raise group_rec_err;
1661    end if;
1662 
1663    if not FA_UTIL_PVT.get_asset_fin_rec
1664                (p_asset_hdr_rec         => l_mem_asset_hdr_rec,
1665                 px_asset_fin_rec        => l_mem_asset_fin_rec_new,
1666                 p_transaction_header_id => NULL,
1667                 p_mrc_sob_type_code     => p_mrc_sob_type_code,
1668                 p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
1669    end if;
1670    if (p_log_level_rec.statement_level) then
1671       fa_debug_pkg.add('do_group_reclass','l_mem_asset_fin_rec_old.cost',l_mem_asset_fin_rec_old.cost, p_log_level_rec => p_log_level_rec);
1672       fa_debug_pkg.add('do_group_reclass','l_mem_asset_fin_rec_new.cost',l_mem_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
1673    end if;
1674 
1675    if not FA_UTIL_PVT.get_asset_deprn_rec
1676                (p_asset_hdr_rec         => l_mem_asset_hdr_rec ,
1677                 px_asset_deprn_rec      => l_mem_asset_deprn_rec_old,
1678                 p_period_counter        => NULL,
1679                 p_mrc_sob_type_code     => p_mrc_sob_type_code,
1680                 p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
1681    end if;
1682 
1683    l_trx_id := p_trx_ref_rec.member_transaction_header_id;
1684    open get_trx_rec_info;
1685    fetch get_trx_rec_info into
1686                 l_mem_trans_rec.transaction_header_id,
1687                 l_mem_trans_rec.transaction_type_code,
1688                 l_mem_trans_rec.transaction_date_entered,
1689                 l_mem_trans_rec.transaction_name,
1690                 l_mem_trans_rec.source_transaction_header_id,
1691                 l_mem_trans_rec.mass_reference_id,
1692                 l_mem_trans_rec.transaction_subtype,
1693                 l_mem_trans_rec.transaction_key,
1694                 l_mem_trans_rec.amortization_start_date,
1695                 l_mem_trans_rec.calling_interface,
1696                 l_mem_trans_rec.mass_transaction_id,
1697                 l_mem_trans_rec.member_transaction_header_id,
1698                 l_mem_trans_rec.trx_reference_id;
1699     close get_trx_rec_info;
1700 
1701    if (p_log_level_rec.statement_level) then
1702       fa_debug_pkg.add('do_group_reclass',
1703                        'member_asset_id recs done',
1704                        l_mem_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
1705    end if;
1706 
1707    l_src_asset_hdr_rec          := l_mem_asset_hdr_rec;
1708    l_dest_asset_hdr_rec         := l_mem_asset_hdr_rec;
1709 
1710    l_src_asset_hdr_rec.asset_id  := l_mem_asset_fin_rec_old.group_asset_id;
1711    l_dest_asset_hdr_rec.asset_id := l_mem_asset_fin_rec_new.group_asset_id;
1712 
1713    -- get src info
1714    if (l_mem_asset_fin_rec_old.group_asset_id is not null) then
1715 
1716       l_src_asset := l_mem_asset_fin_rec_old.group_asset_id;
1717       if not FA_UTIL_PVT.get_asset_desc_rec
1718                            (p_asset_hdr_rec         => l_src_asset_hdr_rec,
1719                             px_asset_desc_rec       => l_src_asset_desc_rec
1720                            , p_log_level_rec => p_log_level_rec) then
1721          raise group_rec_err;
1722       end if;
1723 
1724       if not FA_UTIL_PVT.get_asset_cat_rec
1725                           (p_asset_hdr_rec         => l_src_asset_hdr_rec,
1726                             px_asset_cat_rec        => l_src_asset_cat_rec,
1727                             p_date_effective        => null
1728                            , p_log_level_rec => p_log_level_rec) then
1729          raise group_rec_err;
1730       end if;
1731 
1732       if not FA_UTIL_PVT.get_asset_type_rec
1733                           (p_asset_hdr_rec         => l_src_asset_hdr_rec,
1734                             px_asset_type_rec       => l_src_asset_type_rec,
1735                             p_date_effective        => null
1736                             , p_log_level_rec => p_log_level_rec) then
1737          raise group_rec_err;
1738       end if;
1739 
1740       if not FA_ASSET_VAL_PVT.validate_period_of_addition
1741                       (p_asset_id            => l_src_asset_hdr_rec.asset_id,
1742                        p_book                => l_src_asset_hdr_rec.book_type_code,
1743                        p_mode                => 'ABSOLUTE',
1744                        px_period_of_addition =>
1745                                 l_src_asset_hdr_rec.period_of_addition, p_log_level_rec => p_log_level_rec) then
1746          raise group_rec_err;
1747       end if;
1748 
1749       l_trx_id := p_trx_ref_rec.src_transaction_header_id;
1750       open get_trx_rec_info;
1751       fetch get_trx_rec_info into
1752                 l_src_trans_rec.transaction_header_id,
1753                 l_src_trans_rec.transaction_type_code,
1754                 l_src_trans_rec.transaction_date_entered,
1755                 l_src_trans_rec.transaction_name,
1756                 l_src_trans_rec.source_transaction_header_id,
1757                 l_src_trans_rec.mass_reference_id,
1758                 l_src_trans_rec.transaction_subtype,
1759                 l_src_trans_rec.transaction_key,
1760                 l_src_trans_rec.amortization_start_date,
1761                 l_src_trans_rec.calling_interface,
1762                 l_src_trans_rec.mass_transaction_id,
1763                 l_src_trans_rec.member_transaction_header_id,
1764                 l_src_trans_rec.trx_reference_id;
1765       close get_trx_rec_info;
1766 
1767       if (p_log_level_rec.statement_level) then
1768          fa_debug_pkg.add('do_group_reclass',
1769                        'src_asset_id recs done',
1770                        l_src_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
1771       end if;
1772 
1773    end if;
1774 
1775    if (l_mem_asset_fin_rec_new.group_asset_id is not null and
1776        nvl(l_mem_asset_fin_rec_old.group_asset_id, -99) <>
1777                         l_mem_asset_fin_rec_new.group_asset_id ) then
1778 
1779       l_dest_asset := l_mem_asset_fin_rec_new.group_asset_id;
1780 
1781       -- get dest info
1782       if not FA_UTIL_PVT.get_asset_desc_rec
1783                            (p_asset_hdr_rec         => l_dest_asset_hdr_rec,
1784                             px_asset_desc_rec       => l_dest_asset_desc_rec
1785                            , p_log_level_rec => p_log_level_rec) then
1786          raise group_rec_err;
1787       end if;
1788 
1789       if not FA_UTIL_PVT.get_asset_cat_rec
1790                            (p_asset_hdr_rec         => l_dest_asset_hdr_rec,
1791                             px_asset_cat_rec        => l_dest_asset_cat_rec,
1792                             p_date_effective        => null
1793                            , p_log_level_rec => p_log_level_rec) then
1794          raise group_rec_err;
1795       end if;
1796 
1797       if not FA_UTIL_PVT.get_asset_type_rec
1798                            (p_asset_hdr_rec         => l_dest_asset_hdr_rec,
1799                             px_asset_type_rec       => l_dest_asset_type_rec,
1800                             p_date_effective        => null
1801                             , p_log_level_rec => p_log_level_rec) then
1802          raise group_rec_err;
1803       end if;
1804 
1805       if not FA_ASSET_VAL_PVT.validate_period_of_addition
1806                (p_asset_id            => l_dest_asset_hdr_rec.asset_id,
1807                 p_book                => l_dest_asset_hdr_rec.book_type_code,
1808                 p_mode                => 'ABSOLUTE',
1809                 px_period_of_addition =>
1810                         l_dest_asset_hdr_rec.period_of_addition, p_log_level_rec => p_log_level_rec) then
1811          raise group_rec_err;
1812       end if;
1813 
1814       l_trx_id := p_trx_ref_rec.dest_transaction_header_id;
1815       open get_trx_rec_info;
1816       fetch get_trx_rec_info into
1817                 l_dest_trans_rec.transaction_header_id,
1818                 l_dest_trans_rec.transaction_type_code,
1819                 l_dest_trans_rec.transaction_date_entered,
1820                 l_dest_trans_rec.transaction_name,
1821                 l_dest_trans_rec.source_transaction_header_id,
1822                 l_dest_trans_rec.mass_reference_id,
1823                 l_dest_trans_rec.transaction_subtype,
1824                 l_dest_trans_rec.transaction_key,
1825                 l_dest_trans_rec.amortization_start_date,
1826                 l_dest_trans_rec.calling_interface,
1827                 l_dest_trans_rec.mass_transaction_id,
1828                 l_dest_trans_rec.member_transaction_header_id,
1829                 l_dest_trans_rec.trx_reference_id;
1830       close get_trx_rec_info;
1831 
1832       if (p_log_level_rec.statement_level) then
1833          fa_debug_pkg.add('do_group_reclass',
1834                        'dest_asset_id recs done',
1835                        l_dest_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
1836       end if;
1837 
1838 
1839    end if;  -- dest info
1840 
1841    if (nvl(l_mem_asset_fin_rec_old.group_asset_id, -99)
1842                         = nvl(l_mem_asset_fin_rec_new.group_asset_id, -99)) then
1843             raise group_rec_err;
1844    elsif (l_mem_asset_fin_rec_old.group_asset_id is not null and
1845                 l_mem_asset_fin_rec_new.group_asset_id is not null) then
1846             l_group_reclass_code := 'GRP-GRP';
1847    elsif (l_mem_asset_fin_rec_old.group_asset_id is not null) then
1848             l_group_reclass_code := 'GRP-NONE';
1849    else
1850             l_group_reclass_code := 'NONE-GRP';
1851    end if;
1852 
1853    if (p_log_level_rec.statement_level) then
1854       fa_debug_pkg.add(l_calling_fn, 'reclass code', l_group_reclass_code, p_log_level_rec => p_log_level_rec);
1855    end if;
1856 
1857    l_trx_id_in := l_src_trans_rec.transaction_header_id;
1858    l_asset_id := l_src_asset_hdr_rec.asset_id;
1859    open get_old_trx;
1860    fetch get_old_trx into l_src_old_trx_id;
1861    close get_old_trx;
1862 
1863    l_trx_id_in := p_trx_ref_rec.MEMBER_TRANSACTION_HEADER_ID;
1864    l_asset_id := l_mem_asset_hdr_rec.asset_id;
1865    open get_old_trx;
1866    fetch get_old_trx into l_mem_old_trx_id;
1867    close get_old_trx;
1868 
1869    l_trx_id_in := l_dest_trans_rec.transaction_header_id;
1870    l_asset_id := l_dest_asset_hdr_rec.asset_id;
1871    open get_old_trx;
1872    fetch get_old_trx into l_dest_old_trx_id;
1873    close get_old_trx;
1874 
1875    -- Release lock from member asset. No harm releasing for both books
1876    /* bug 10097181 */
1877    if (l_group_reclass_code = 'GRP-NONE' ) then
1878       update fa_books
1879       set adjustment_required_status = 'NONE'
1880       where asset_id = p_trx_ref_rec.member_asset_id
1881       and book_type_code = p_trx_ref_rec.book_type_code
1882       and adjustment_required_status = 'GADJ'
1883       and transaction_header_id_out is null;
1884       if l_sob_tbl.count > 0 then
1885          update fa_mc_books
1886          set adjustment_required_status = 'NONE'
1887          where asset_id = p_trx_ref_rec.member_asset_id
1888          and book_type_code = p_trx_ref_rec.book_type_code
1889          and adjustment_required_status = 'GADJ'
1890          and transaction_header_id_out is null;
1891       end if;
1892    end if;
1893 
1894    FOR l_sob_index in 0..l_sob_tbl.count LOOP
1895 
1896       if (l_sob_index = 0) then
1897          l_mrc_sob_type_code := 'P';
1898          l_mem_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
1899       else
1900          l_mrc_sob_type_code := 'R';
1901          l_mem_asset_hdr_rec.set_of_books_id := l_sob_tbl(l_sob_index);
1902       end if;
1903 
1904       if not FA_UTIL_PVT.get_asset_deprn_rec
1905               (p_asset_hdr_rec         => l_mem_asset_hdr_rec ,
1906                px_asset_deprn_rec      => l_mem_asset_deprn_rec_old,
1907                p_period_counter        => NULL,
1908                p_mrc_sob_type_code     => l_mrc_sob_type_code,
1909                p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
1910       end if;
1911       l_mem_asset_deprn_rec_old_tbl(l_sob_index) := l_mem_asset_deprn_rec_old;
1912 
1913    END LOOP;
1914 
1915    ------------
1916    -- SOURCE --
1917    ------------
1918    if (p_log_level_rec.statement_level) then
1919          fa_debug_pkg.add(l_calling_fn, 'processing','source asset', p_log_level_rec => p_log_level_rec);
1920    end if;
1921 
1922    -- If the asset was moved out of a group, deduct the asset's cost from the
1923    -- old group
1924    FOR l_sob_index in 0..l_sob_tbl.count LOOP
1925       --
1926       -- Initialize Member Tables
1927       --
1928       FA_AMORT_PVT.initMemberTable;
1929 
1930       if (l_sob_index = 0) then
1931          l_mrc_sob_type_code := 'P';
1932          l_src_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
1933          l_mem_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
1934       else
1935          l_mrc_sob_type_code := 'R';
1936          l_src_asset_hdr_rec.set_of_books_id := l_sob_tbl(l_sob_index);
1937          l_mem_asset_hdr_rec.set_of_books_id := l_sob_tbl(l_sob_index);
1938       end if;
1939 
1940       l_group_reclass_options_rec(l_sob_index).group_reclass_type := 'CALC';
1941 
1942       if not FA_UTIL_PVT.get_asset_fin_rec
1943             (p_asset_hdr_rec         => l_mem_asset_hdr_rec,
1944              px_asset_fin_rec        => l_mem_asset_fin_rec_old,
1945              p_transaction_header_id => l_mem_old_trx_id,
1946              p_mrc_sob_type_code     => l_mrc_sob_type_code,
1947              p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
1948       end if;
1949 
1950       if not FA_UTIL_PVT.get_asset_deprn_rec
1951             (p_asset_hdr_rec         => l_mem_asset_hdr_rec ,
1952              px_asset_deprn_rec      => l_mem_asset_deprn_rec_old,
1953              p_period_counter        => NULL,
1954              p_mrc_sob_type_code     => l_mrc_sob_type_code,
1955              p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
1956       end if;
1957 
1958       if l_mem_asset_fin_rec_old.group_asset_id is not null then
1959 
1960          -- get the old and new fin,deprn information
1961          if not FA_UTIL_PVT.get_asset_fin_rec
1962                     (p_asset_hdr_rec         => l_src_asset_hdr_rec,
1963                      px_asset_fin_rec        => l_src_asset_fin_rec_old,
1964                      p_transaction_header_id => l_src_old_trx_id,
1965                      p_mrc_sob_type_code     => l_mrc_sob_type_code,
1966                      p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
1967          end if;
1968 
1969          if not FA_UTIL_PVT.get_asset_fin_rec
1970                     (p_asset_hdr_rec         => l_src_asset_hdr_rec,
1971                      px_asset_fin_rec        => l_src_asset_fin_rec_new,
1972                      p_transaction_header_id => null,
1973                      p_mrc_sob_type_code     => l_mrc_sob_type_code,
1974                      p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
1975          end if;
1976 
1977          if not FA_UTIL_PVT.get_asset_deprn_rec
1978                     (p_asset_hdr_rec         => l_src_asset_hdr_rec,
1979                      px_asset_deprn_rec      => l_src_asset_deprn_rec_old,
1980                      p_period_counter        => NULL,
1981                      p_mrc_sob_type_code     => l_mrc_sob_type_code,
1982                      p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
1983          end if;
1984 
1985          if not FA_UTIL_PVT.get_asset_deprn_rec
1986                     (p_asset_hdr_rec         => l_src_asset_hdr_rec ,
1987                      px_asset_deprn_rec      => l_src_asset_deprn_rec_new,
1988                      p_period_counter        => NULL,
1989                      p_mrc_sob_type_code     => l_mrc_sob_type_code,
1990                      p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
1991          end if;
1992 
1993          /*Bug 8765735 - Start*/
1994  	      if not fa_cache_pkg.fazccmt(l_src_asset_fin_rec_old.deprn_method_code,
1995  	                                  l_src_asset_fin_rec_old.life_in_months,
1996  	                                  p_log_level_rec => g_log_level_rec) then
1997  	                                  fa_srvr_msg.add_message (calling_fn => l_calling_fn,p_log_level_rec=>g_log_level_rec);
1998  	         raise group_rec_err;
1999  	      end if;
2000  	      /*Bug 8765735 - End*/
2001          /*Bug 8814747 added this condition for Energy methods amortization date is always current period.
2002  	        So we are calculating the reserve in bsRecalculate. Not required to pass from here.*/
2003  	      if (not(nvl(fa_cache_pkg.fazcdbr_record.rule_name,'ZZ') = 'ENERGY PERIOD END BALANCE' and
2004  	              l_src_asset_fin_rec_old.tracking_method = 'ALLOCATE')) then
2005 
2006          if (l_src_asset_fin_rec_old.tracking_method = 'ALLOCATE' or
2007              (l_src_asset_fin_rec_old.tracking_method = 'CALCULATE' and
2008               nvl(l_src_asset_fin_rec_old.member_rollup_flag, 'N') = 'N')) then
2009 
2010             OPEN c_get_reserve;
2011             FETCH c_get_reserve INTO l_transfer_amount;
2012             CLOSE c_get_reserve;
2013 
2014             l_src_asset_deprn_rec_adj.deprn_reserve := -1 * nvl(l_transfer_amount, 0);
2015 
2016             if (p_log_level_rec.statement_level) then
2017                fa_debug_pkg.add(l_calling_fn, 'Getting previously transferred rsv', l_transfer_amount , p_log_level_rec => p_log_level_rec);
2018                fa_debug_pkg.add(l_calling_fn, 'l_src_asset_deprn_rec_adj.deprn_reserve', l_src_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec => p_log_level_rec);
2019             end if;
2020          end if;
2021          end if;
2022 
2023          --
2024          -- Calling faxama
2025          --
2026          if (not FA_AMORT_PVT.faxama(
2027                             px_trans_rec            => l_src_trans_rec,
2028                             p_asset_hdr_rec         => l_src_asset_hdr_rec,
2029                             p_asset_desc_rec        => l_src_asset_desc_rec,
2030                             p_asset_cat_rec         => l_src_asset_cat_rec,
2031                             p_asset_type_rec        => l_src_asset_type_rec,
2032                             p_asset_fin_rec_old     => l_src_asset_fin_rec_old,
2033                             px_asset_fin_rec_new    => l_src_asset_fin_rec_new,
2034                             p_asset_deprn_rec       => l_src_asset_deprn_rec_old,
2035                             p_asset_deprn_rec_adj   => l_src_asset_deprn_rec_adj,
2036                             p_period_rec            => l_period_rec,
2037                             p_mrc_sob_type_code     => l_mrc_sob_type_code,
2038                             p_running_mode          => fa_std_types.FA_DPR_NORMAL,
2039                             p_used_by_revaluation   => null,
2040                             p_reclassed_asset_id    => l_mem_asset_hdr_rec.asset_id,
2041                             p_reclass_src_dest      => 'SOURCE',
2042                             p_reclassed_asset_dpis  => l_mem_asset_fin_rec_old.date_placed_in_service,
2043                             p_update_books_summary  => TRUE,
2044                             p_proceeds_of_sale      => 0,
2045                             p_cost_of_removal       => 0,
2046                             x_deprn_exp             => l_group_reclass_options_rec(l_sob_index).source_exp_amount,
2047                             x_bonus_deprn_exp       => l_bonus_deprn_exp,
2048                             x_impairment_exp        => l_impairment_exp,
2049                             x_deprn_rsv             => l_deprn_rsv, p_log_level_rec => p_log_level_rec)) then
2050 
2051                if (p_log_level_rec.statement_level) then
2052                   fa_debug_pkg.add(l_calling_fn, 'calling FA_AMORT_PVT.faxama', 'FAILED',  p_log_level_rec => p_log_level_rec);
2053                end if;
2054 
2055                raise group_rec_err;
2056 
2057          end if; -- (not FA_AMORT_PVT.faxama
2058 
2059          l_grp_src_trans_rec(l_sob_index) := l_src_trans_rec;
2060          l_grp_src_asset_hdr_rec(l_sob_index) := l_src_asset_hdr_rec;
2061          l_grp_src_asset_type_rec(l_sob_index) := l_src_asset_type_rec;
2062          l_grp_src_asset_fin_rec_new(l_sob_index) := l_src_asset_fin_rec_new;
2063 
2064          If (l_group_reclass_code = 'GRP-GRP') then
2065             FOR i in 1..fa_amort_pvt.tmd_period_counter.COUNT LOOP
2066                l_amort_init_member_rec(l_sob_index).tmd_period_counter(i)     := fa_amort_pvt.tmd_period_counter(i);
2067                l_amort_init_member_rec(l_sob_index).tmd_cost(i)               := fa_amort_pvt.tmd_cost(i);
2068                l_amort_init_member_rec(l_sob_index).tm_cost(i)                := fa_amort_pvt.tm_cost(i);
2069                l_amort_init_member_rec(l_sob_index).tmd_cip_cost(i)           := fa_amort_pvt.tmd_cip_cost(i);
2070                l_amort_init_member_rec(l_sob_index).tm_cip_cost(i)            := fa_amort_pvt.tm_cip_cost(i);
2071                l_amort_init_member_rec(l_sob_index).tmd_salvage_value(i)      := fa_amort_pvt.tmd_salvage_value(i);
2072                l_amort_init_member_rec(l_sob_index).tm_salvage_value(i)       := fa_amort_pvt.tm_salvage_value(i);
2073                l_amort_init_member_rec(l_sob_index).tmd_deprn_limit_amount(i) := fa_amort_pvt.tmd_deprn_limit_amount(i);
2074                l_amort_init_member_rec(l_sob_index).tm_deprn_limit_amount(i)  := fa_amort_pvt.tm_deprn_limit_amount(i);
2075             END LOOP;
2076          End If;
2077 
2078          -- call the category books cache for the accounts
2079          if not fa_cache_pkg.fazccb
2080             (X_book   => l_src_asset_hdr_rec.book_type_code,
2081             X_cat_id => l_src_asset_cat_rec.category_id, p_log_level_rec => p_log_level_rec) then
2082             raise group_rec_err;
2083          end if;
2084 
2085          -- set up the structs to be passed to faxinaj
2086          l_rsv_adj.book_type_code           := l_src_asset_hdr_rec.book_type_code;
2087          l_rsv_adj.period_counter_created   := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
2088          l_rsv_adj.period_counter_adjusted  := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
2089          l_rsv_adj.selection_mode           := FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
2090          l_rsv_adj.selection_thid           := 0;
2091          l_rsv_adj.selection_retid          := 0;
2092          l_rsv_adj.leveling_flag            := TRUE;
2093          l_rsv_adj.last_update_date         := l_src_trans_rec.transaction_date_entered;
2094          l_rsv_adj.flush_adj_flag           := TRUE;
2095          l_rsv_adj.gen_ccid_flag            := TRUE;
2096          l_rsv_adj.annualized_adjustment    := 0;
2097          l_rsv_adj.asset_invoice_id         := 0;
2098          l_rsv_adj.distribution_id          := 0;
2099          l_rsv_adj.mrc_sob_type_code        := l_mrc_sob_type_code;
2100          l_rsv_adj.set_of_books_id          := l_src_asset_hdr_rec.set_of_books_id;
2101          l_rsv_adj.source_type_code         := 'ADJUSTMENT';
2102          l_rsv_adj.adjustment_type          := 'RESERVE';
2103          l_rsv_adj.code_combination_id      := fa_cache_pkg.fazccb_record.reserve_account_ccid;
2104          l_rsv_adj.account                  := fa_cache_pkg.fazccb_record.deprn_reserve_acct;
2105          l_rsv_adj.account_type             := 'DEPRN_RESERVE_ACCT';
2106 
2107          l_rsv_adj.transaction_header_id    := l_src_trans_rec.transaction_header_id;
2108          l_rsv_adj.asset_id                 := l_src_asset_hdr_rec.asset_id;
2109          l_rsv_adj.current_units            := l_src_asset_desc_rec.current_units;
2110          l_rsv_adj.code_combination_id      := fa_cache_pkg.fazccb_record.reserve_account_ccid;
2111          l_rsv_adj.account                  := fa_cache_pkg.fazccb_record.deprn_reserve_acct;
2112          l_rsv_adj.debit_credit_flag        := 'DR';
2113 
2114 
2115          l_exp_adj.book_type_code           := l_src_asset_hdr_rec.book_type_code;
2116          l_exp_adj.period_counter_created   := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
2117          l_exp_adj.period_counter_adjusted  := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
2118          l_exp_adj.selection_mode           := FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
2119          l_exp_adj.selection_thid           := 0;
2120          l_exp_adj.selection_retid          := 0;
2121          l_exp_adj.leveling_flag            := TRUE;
2122          l_exp_adj.last_update_date         := l_src_trans_rec.transaction_date_entered;
2123          l_exp_adj.flush_adj_flag           := TRUE;
2124          l_exp_adj.gen_ccid_flag            := TRUE;
2125          l_exp_adj.annualized_adjustment    := 0;
2126          l_exp_adj.asset_invoice_id         := 0;
2127          l_exp_adj.distribution_id          := 0;
2128          l_exp_adj.mrc_sob_type_code        := l_mrc_sob_type_code;
2129          l_exp_adj.set_of_books_id          := l_src_asset_hdr_rec.set_of_books_id;
2130          l_exp_adj.source_type_code         := 'DEPRECIATION';
2131          l_exp_adj.adjustment_type          := 'EXPENSE';
2132          l_exp_adj.account_type             := 'DEPRN_EXPENSE_ACCT';
2133 
2134          l_exp_adj.transaction_header_id    := l_src_trans_rec.transaction_header_id;
2135          l_exp_adj.asset_id                 := l_src_asset_hdr_rec.asset_id;
2136          l_exp_adj.current_units            := l_src_asset_desc_rec.current_units;
2137          l_exp_adj.code_combination_id      := 0;
2138          l_exp_adj.account                  := fa_cache_pkg.fazccb_record.deprn_expense_acct;
2139          l_exp_adj.debit_credit_flag        := 'CR';
2140 
2141          -- Expense accounts have to be CR for the old acct
2142          -- Reserve accounts have to be DR for the old acct
2143 
2144          if (nvl(l_group_reclass_options_rec(l_sob_index).source_exp_amount, 0) <> 0) then
2145 
2146             l_exp_adj.adjustment_amount := -1 * l_group_reclass_options_rec(l_sob_index).source_exp_amount;
2147 
2148             if (p_log_level_rec.statement_level) then
2149                fa_debug_pkg.add(l_calling_fn, 'calling faxinaj','for exp source group', p_log_level_rec => p_log_level_rec);
2150             end if;
2151 
2152             l_exp_adj.track_member_flag := null; --Bug 9089120
2153 
2154             if not FA_INS_ADJUST_PKG.faxinaj
2155                   (l_exp_adj,
2156                    l_src_trans_rec.who_info.last_update_date,
2157                    l_src_trans_rec.who_info.last_updated_by,
2158                    l_src_trans_rec.who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
2159                raise group_rec_err;
2160             end if;
2161 
2162             if (nvl(l_src_asset_fin_rec_old.tracking_method, 'NO TRACK') = 'ALLOCATE') then
2163 
2164               -- call the category books cache for the accounts
2165                if not fa_cache_pkg.fazccb
2166                          (X_book   => l_mem_asset_hdr_rec.book_type_code,
2167                           X_cat_id => l_mem_asset_cat_rec.category_id, p_log_level_rec => p_log_level_rec) then
2168                   raise group_rec_err;
2169                end if;
2170 
2171                l_exp_adj.transaction_header_id    := l_mem_trans_rec.transaction_header_id;
2172                l_exp_adj.current_units            := l_mem_asset_desc_rec.current_units;
2173                l_exp_adj.asset_id                 := l_mem_asset_hdr_rec.asset_id;
2174                l_exp_adj.account                  := fa_cache_pkg.fazccb_record.deprn_expense_acct;
2175                l_exp_adj.track_member_flag        := 'Y';
2176 
2177                if (p_log_level_rec.statement_level) then
2178                   fa_debug_pkg.add(l_calling_fn, 'calling faxinaj','for exp source track', p_log_level_rec => p_log_level_rec);
2179                end if;
2180 
2181                if not FA_INS_ADJUST_PKG.faxinaj
2182                        (l_exp_adj,
2183                        l_src_trans_rec.who_info.last_update_date,
2184                        l_src_trans_rec.who_info.last_updated_by,
2185                        l_src_trans_rec.who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
2186                      raise group_rec_err;
2187                end if;
2188             end if;
2189 
2190          end if;
2191 
2192          if (nvl(l_deprn_rsv, 0) <> 0) then
2193 
2194             l_group_reclass_options_rec(l_sob_index).reserve_amount := -1 * l_deprn_rsv;
2195             l_rsv_adj.adjustment_amount := l_group_reclass_options_rec(l_sob_index).reserve_amount;
2196 
2197             if (p_log_level_rec.statement_level) then
2198                fa_debug_pkg.add(l_calling_fn, 'calling faxinaj','for rsv source group', p_log_level_rec => p_log_level_rec);
2199             end if;
2200 
2201             l_rsv_adj.track_member_flag := null; --Bug 9089120
2202 
2203             if not FA_INS_ADJUST_PKG.faxinaj
2204                   (l_rsv_adj,
2205                    l_src_trans_rec.who_info.last_update_date,
2206                    l_src_trans_rec.who_info.last_updated_by,
2207                    l_src_trans_rec.who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
2208                   raise group_rec_err;
2209             end if;
2210 
2211             if (nvl(l_src_asset_fin_rec_old.tracking_method,'NO TRACK')='ALLOCATE') then
2212 
2213                -- call the category books cache for the accounts
2214                if not fa_cache_pkg.fazccb
2215                          (X_book   => l_mem_asset_hdr_rec.book_type_code,
2216                           X_cat_id => l_mem_asset_cat_rec.category_id, p_log_level_rec => p_log_level_rec) then
2217                   raise group_rec_err;
2218                end if;
2219 
2220                l_rsv_adj.transaction_header_id    := l_mem_trans_rec.transaction_header_id;
2221                l_rsv_adj.current_units            := l_mem_asset_desc_rec.current_units;
2222                l_rsv_adj.asset_id                 := l_mem_asset_hdr_rec.asset_id;
2223                l_rsv_adj.code_combination_id      := fa_cache_pkg.fazccb_record.reserve_account_ccid;
2224                l_rsv_adj.account                  := fa_cache_pkg.fazccb_record.deprn_reserve_acct;
2225                l_rsv_adj.track_member_flag        := 'Y';
2226 
2227                if (p_log_level_rec.statement_level) then
2228                   fa_debug_pkg.add(l_calling_fn, 'calling faxinaj','for rsv source track', p_log_level_rec => p_log_level_rec);
2229                end if;
2230 
2231                if not FA_INS_ADJUST_PKG.faxinaj
2232                   (l_rsv_adj,
2233                   l_src_trans_rec.who_info.last_update_date,
2234                   l_src_trans_rec.who_info.last_updated_by,
2235                   l_src_trans_rec.who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
2236                   raise group_rec_err;
2237                end if;
2238             end if;
2239 
2240          end if;
2241 
2242       -- Modified to call FA_GROUP_RECLASS2_PVT.do_adjustment
2243       -- even old group id is populated if the track method is allocate
2244 
2245       else  -- asset was originally standalone
2246 
2247          if (p_log_level_rec.statement_level) then
2248                fa_debug_pkg.add(l_calling_fn, 'source is','standalone', p_log_level_rec => p_log_level_rec);
2249          end if;
2250 
2251          -- whether expense or reserve transfer, amount must be set to
2252          -- the current reserve balance in order to remove all balances
2253          -- from the memeber asset (i.e. ignore calc / manual) this is
2254          -- done internally inside the private api
2255 
2256          -- set the main structs equal to member if asset was
2257          -- originally standalone
2258 
2259          l_src_trans_rec           := l_mem_trans_rec;
2260          l_src_asset_hdr_rec       := l_mem_asset_hdr_rec;
2261          l_src_asset_desc_rec      := l_mem_asset_desc_rec;
2262          l_src_asset_type_rec      := l_mem_asset_type_rec;
2263          l_src_asset_cat_rec       := l_mem_asset_cat_rec;
2264          l_src_asset_fin_rec_new   := l_mem_asset_fin_rec_old; -- NOTE: using old
2265          l_src_asset_deprn_rec_new := l_mem_asset_deprn_rec_old_tbl(l_sob_index);
2266 
2267 
2268          if (p_log_level_rec.statement_level) then
2269                   fa_debug_pkg.add(l_calling_fn, 'calling FA_GROUP_RECLASS2_PVT.do_adjustment', l_src_asset_hdr_rec.asset_id,  p_log_level_rec => p_log_level_rec);
2270          end if;
2271 
2272          if not FA_GROUP_RECLASS2_PVT.do_adjustment
2273                     (px_trans_rec                 => l_src_trans_rec,
2274                      p_asset_hdr_rec              => l_src_asset_hdr_rec,
2275                      p_asset_desc_rec             => l_src_asset_desc_rec,
2276                      p_asset_type_rec             => l_src_asset_type_rec,
2277                      p_asset_cat_rec              => l_src_asset_cat_rec,
2278                      p_asset_fin_rec_old          => l_src_asset_fin_rec_old,
2279                      p_asset_fin_rec_new          => l_src_asset_fin_rec_new,
2280                      p_asset_deprn_rec_old        => l_src_asset_deprn_rec_new,
2281                      p_mem_asset_hdr_rec          => l_mem_asset_hdr_rec,
2282                      p_mem_asset_desc_rec         => l_mem_asset_desc_rec,
2283                      p_mem_asset_type_rec         => l_mem_asset_type_rec,
2284                      p_mem_asset_cat_rec          => l_mem_asset_cat_rec,
2285                      p_mem_asset_fin_rec_new      => l_mem_asset_fin_rec_old,
2286                      p_mem_asset_deprn_rec_new    => l_mem_asset_deprn_rec_old_tbl(l_sob_index),
2287                      px_group_reclass_options_rec => l_group_reclass_options_rec(l_sob_index),
2288                      p_period_rec                 => l_period_rec,
2289                      p_mrc_sob_type_code          => l_mrc_sob_type_code,
2290                      p_src_dest                   => 'SOURCE',
2291                      p_log_level_rec              => p_log_level_rec) then
2292             raise group_rec_err;
2293          end if;
2294          l_grp_src_trans_rec(l_sob_index) := l_src_trans_rec;
2295          l_grp_src_asset_hdr_rec(l_sob_index) := l_src_asset_hdr_rec;
2296          l_grp_src_asset_type_rec(l_sob_index) := l_src_asset_type_rec;
2297          l_grp_src_asset_fin_rec_new(l_sob_index) := l_src_asset_fin_rec_new;
2298 
2299          if (p_log_level_rec.statement_level) then
2300             fa_debug_pkg.add(l_calling_fn, 'after FA_GROUP_RECLASS2_PVT.do_adjustment',l_src_asset_hdr_rec.asset_id,  p_log_level_rec => p_log_level_rec);
2301          end if;
2302 
2303       end if; -- end of source
2304    END LOOP;
2305 
2306 
2307    -- clear the track flags before we start again
2308    l_exp_adj.track_member_flag        := NULL;
2309    l_rsv_adj.track_member_flag        := NULL;
2310 
2311 
2312 
2313    --------------------------
2314    -- CONDITIONAL TRANSFER --
2315    --------------------------
2316 
2317    -- BUG# 6936546
2318    -- in allocation cases it is possible in cases where asset is moving into or out of
2319    -- a standalone status for true expense to be combined with tracked expense in the
2320    -- same period.  In order to seperate these for correct reserve processing from DD
2321    -- for journaling purposes, we will force a transfer so we can seperate the two
2322    -- into different distributions when the reclass is backdated creating expense
2323    --
2324    -- thus this transfer effectively is a complete wash, although only cost
2325    -- will be moved in the transaction.
2326    --
2327    -- NOTE: this would spawn a transfer when occuring in tax books as well
2328    --       since we share distirubtions, there is really no way around this...
2329 
2330    if ((l_group_reclass_code = 'GRP-NONE' or
2331         l_group_reclass_code = 'NONE-GRP') and
2332        (nvl(l_src_asset_fin_rec_old.tracking_method,'NONE')  <> 'CALCULATE' or
2333         nvl(l_dest_asset_fin_rec_old.tracking_method,'NONE') <> 'CALCULATE') and
2334        l_mem_asset_hdr_rec.period_of_addition <> 'Y') then
2335 
2336       if (p_mrc_sob_type_code <> 'R') then
2337 
2338          open c_member_dists (p_asset_id => l_mem_asset_hdr_rec.asset_id);
2339          fetch c_member_dists bulk collect
2340           into l_distribution_id,
2341                l_units_assigned,
2342                l_code_combination_id,
2343                l_location_id,
2344                l_assigned_to;
2345          close c_member_dists;
2346 
2347          -- load current dists into array
2348          for i in 1..l_distribution_id.count loop
2349             l_asset_dist_tbl(1).distribution_id   := l_distribution_id(i);
2350             l_asset_dist_tbl(1).transaction_units := -l_units_assigned(i);
2351             l_asset_dist_tbl(2).expense_ccid      := l_code_combination_id(i);
2352             l_asset_dist_tbl(2).location_ccid     := l_location_id(i);
2353             l_asset_dist_tbl(2).assigned_to       := l_assigned_to(i);
2354             l_asset_dist_tbl(2).transaction_units := l_units_assigned(i);
2355 
2356             if (p_log_level_rec.statement_level) then
2357                fa_debug_pkg.add(l_calling_fn, 'calling' ,'transfer api for standalone asset', p_log_level_rec => p_log_level_rec);
2358             end if;
2359 
2360             l_asset_hdr_rec := l_mem_asset_hdr_rec;
2361             l_asset_hdr_rec.book_type_code := fa_cache_pkg.fazcbc_record.distribution_source_book;
2362 
2363             FA_TRANSFER_PUB.do_transfer
2364                (p_api_version         => l_api_version,
2365                 p_init_msg_list       => l_init_msg_list,
2366                 p_commit              => l_commit,
2367                 p_validation_level    => l_validation_level,
2368                 p_calling_fn          => l_calling_fn,
2369                 x_return_status       => l_return_status2,
2370                 x_msg_count           => l_msg_count,
2371                 x_msg_data            => l_msg_data,
2372                 px_trans_rec          => l_trans_rec,
2373                 px_asset_hdr_rec      => l_asset_hdr_rec,
2374                 px_asset_dist_tbl     => l_asset_dist_tbl);
2375 
2376             if (l_return_status2 <> FND_API.G_RET_STS_SUCCESS) then
2377                raise group_rec_err;
2378             end if;
2379             -- following update and that in the else is needed in case
2380             -- the transfer was performed on STANDALONE->GROUP
2381             -- case where the reserve would have been inserted as track
2382             -- when it should not have been.
2383 
2384             if (l_group_reclass_code = 'NONE-GRP') then
2385 
2386                update fa_adjustments
2387                   set track_member_flag     = null
2388                 where transaction_header_id = l_trans_rec.transaction_header_id
2389                   and book_type_code        = l_asset_hdr_rec.book_type_code;
2390             end if;
2391 
2392          end loop;
2393 
2394       elsif (l_group_reclass_code = 'NONE-GRP') then  -- reporting is implied in else
2395 
2396          update fa_mc_adjustments
2397             set track_member_flag     = null
2398           where transaction_header_id in
2399                 (select transaction_header_id
2400                  from fa_transaction_headers th_in
2401                 where th_in.asset_id = l_mem_asset_hdr_rec.asset_id
2402                   and th_in.book_type_code = l_mem_asset_hdr_rec.book_type_code
2403                   and th_in.transaction_type_code = 'TRANSFER'
2404                   and th_in.transaction_header_id > l_mem_trans_rec.transaction_header_id);
2405 
2406       end if;
2407 
2408    end if;
2409 
2410 
2411    ------------
2412    -- DESTINATION --
2413    ------------
2414    if (p_log_level_rec.statement_level) then
2415          fa_debug_pkg.add(l_calling_fn, 'processing','dest asset', p_log_level_rec => p_log_level_rec);
2416    end if;
2417 
2418    FOR l_sob_index in 0..l_sob_tbl.count LOOP
2419 
2420       --
2421       -- Initialize Member Tables
2422       --
2423       FA_AMORT_PVT.initMemberTable;
2424 
2425       if (l_sob_index = 0) then
2426          l_mrc_sob_type_code := 'P';
2427          l_dest_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
2428          l_mem_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
2429       else
2430          l_mrc_sob_type_code := 'R';
2431          l_dest_asset_hdr_rec.set_of_books_id := l_sob_tbl(l_sob_index);
2432          l_mem_asset_hdr_rec.set_of_books_id := l_sob_tbl(l_sob_index);
2433       end if;
2434 
2435 
2436       if not FA_UTIL_PVT.get_asset_fin_rec
2437               (p_asset_hdr_rec         => l_mem_asset_hdr_rec,
2438                px_asset_fin_rec        => l_mem_asset_fin_rec_old,
2439                p_transaction_header_id => l_mem_old_trx_id,
2440                p_mrc_sob_type_code     => l_mrc_sob_type_code,
2441                p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
2442       end if;
2443 
2444       if not FA_UTIL_PVT.get_asset_fin_rec
2445               (p_asset_hdr_rec         => l_mem_asset_hdr_rec,
2446                px_asset_fin_rec        => l_mem_asset_fin_rec_new,
2447                p_transaction_header_id => null,
2448                p_mrc_sob_type_code     => l_mrc_sob_type_code,
2449                p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
2450       end if;
2451 
2452       if not FA_UTIL_PVT.get_asset_deprn_rec
2453               (p_asset_hdr_rec         => l_mem_asset_hdr_rec ,
2454                px_asset_deprn_rec      => l_mem_asset_deprn_rec_new,
2455                p_period_counter        => NULL,
2456                p_mrc_sob_type_code     => l_mrc_sob_type_code,
2457                p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
2458       end if;
2459 
2460       -- If the asset was moved into a group, add the asset's cost to the new group
2461       if l_mem_asset_fin_rec_new.group_asset_id is not null then
2462 
2463          if (p_log_level_rec.statement_level) then
2464              fa_debug_pkg.add(l_calling_fn, 'processing dest as ','group', p_log_level_rec => p_log_level_rec);
2465          end if;
2466 
2467           -- get the old fin and deprn information
2468          if not FA_UTIL_PVT.get_asset_fin_rec
2469                  (p_asset_hdr_rec         => l_dest_asset_hdr_rec,
2470                   px_asset_fin_rec        => l_dest_asset_fin_rec_old,
2471                   p_transaction_header_id => l_dest_old_trx_id,
2472                   p_mrc_sob_type_code     => l_mrc_sob_type_code,
2473                   p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
2474          end if;
2475 
2476          if not FA_UTIL_PVT.get_asset_fin_rec
2477                  (p_asset_hdr_rec         => l_dest_asset_hdr_rec,
2478                   px_asset_fin_rec        => l_dest_asset_fin_rec_new,
2479                   p_transaction_header_id => null,
2480                   p_mrc_sob_type_code     => l_mrc_sob_type_code,
2481                   p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
2482          end if;
2483 
2484          if not FA_UTIL_PVT.get_asset_deprn_rec
2485                  (p_asset_hdr_rec         => l_dest_asset_hdr_rec,
2486                   px_asset_deprn_rec      => l_dest_asset_deprn_rec_old,
2487                   p_period_counter        => NULL,
2488                   p_mrc_sob_type_code     => l_mrc_sob_type_code,
2489                   p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
2490          end if;
2491 
2492          if not FA_UTIL_PVT.get_asset_deprn_rec
2493                  (p_asset_hdr_rec         => l_dest_asset_hdr_rec,
2494                   px_asset_deprn_rec      => l_dest_asset_deprn_rec_new,
2495                   p_period_counter        => NULL,
2496                   p_mrc_sob_type_code     => l_mrc_sob_type_code,
2497                   p_log_level_rec         => p_log_level_rec) then raise group_rec_err;
2498          end if;
2499 
2500          l_asset_deprn_rec_adj.deprn_reserve := l_group_reclass_options_rec(l_sob_index).reserve_amount;
2501          --
2502          -- This is used to calculate adj.eofy_reserve in faxama.
2503          --
2504          if l_mem_asset_fin_rec_old.group_asset_id is null then
2505             l_asset_deprn_rec_adj.ytd_deprn := l_mem_asset_deprn_rec_old_tbl(l_sob_index).ytd_deprn;
2506          end if;
2507 
2508          If (l_group_reclass_code = 'GRP-GRP') then
2509             FOR i in 1..l_amort_init_member_rec(l_sob_index).tmd_period_counter.count LOOP
2510                fa_amort_pvt.tmd_period_counter(i)     := l_amort_init_member_rec(l_sob_index).tmd_period_counter(i);
2511                fa_amort_pvt.tmd_cost(i)               := l_amort_init_member_rec(l_sob_index).tmd_cost(i);
2512                fa_amort_pvt.tm_cost(i)                := l_amort_init_member_rec(l_sob_index).tm_cost(i);
2513                fa_amort_pvt.tmd_cip_cost(i)           := l_amort_init_member_rec(l_sob_index).tmd_cip_cost(i);
2514                fa_amort_pvt.tm_cip_cost(i)            := l_amort_init_member_rec(l_sob_index).tm_cip_cost(i);
2515                fa_amort_pvt.tmd_salvage_value(i)      := l_amort_init_member_rec(l_sob_index).tmd_salvage_value(i);
2516                fa_amort_pvt.tm_salvage_value(i)       := l_amort_init_member_rec(l_sob_index).tm_salvage_value(i);
2517                fa_amort_pvt.tmd_deprn_limit_amount(i) := l_amort_init_member_rec(l_sob_index).tmd_deprn_limit_amount(i);
2518                fa_amort_pvt.tm_deprn_limit_amount(i)  := l_amort_init_member_rec(l_sob_index).tm_deprn_limit_amount(i);
2519             END LOOP;
2520          End If;
2521 
2522          if (not FA_AMORT_PVT.faxama(
2523                          px_trans_rec            => l_dest_trans_rec,
2524                          p_asset_hdr_rec         => l_dest_asset_hdr_rec,
2525                          p_asset_desc_rec        => l_dest_asset_desc_rec,
2526                          p_asset_cat_rec         => l_dest_asset_cat_rec,
2527                          p_asset_type_rec        => l_dest_asset_type_rec,
2528                          p_asset_fin_rec_old     => l_dest_asset_fin_rec_old,
2529                          px_asset_fin_rec_new    => l_dest_asset_fin_rec_new,
2530                          p_asset_deprn_rec       => l_dest_asset_deprn_rec_old,
2531                          p_asset_deprn_rec_adj   => l_asset_deprn_rec_adj,
2532                          p_period_rec            => l_period_rec,
2533                          p_mrc_sob_type_code     => l_mrc_sob_type_code,
2534                          p_running_mode          => fa_std_types.FA_DPR_NORMAL,
2535                          p_used_by_revaluation   => null,
2536                          p_reclassed_asset_id    => l_mem_asset_hdr_rec.asset_id,
2537                          p_reclass_src_dest      => 'DESTINATION',
2538                          p_reclassed_asset_dpis  => l_mem_asset_fin_rec_old.date_placed_in_service,
2539                          p_update_books_summary  => TRUE,
2540                          p_proceeds_of_sale      => 0,
2541                          p_cost_of_removal       => 0,
2542                          x_deprn_exp             => l_group_reclass_options_rec(l_sob_index).destination_exp_amount,
2543                          x_bonus_deprn_exp       => l_bonus_deprn_exp,
2544                          x_impairment_exp        => l_impairment_exp,
2545                          x_deprn_rsv             => l_deprn_rsv, p_log_level_rec => p_log_level_rec)) then
2546 
2547             if (p_log_level_rec.statement_level) then
2548                fa_debug_pkg.add('calc_fin_info', 'calling FA_AMORT_PVT.faxama', 'FAILED',  p_log_level_rec => p_log_level_rec);
2549             end if;
2550             return (FALSE);
2551 
2552          end if; -- (not FA_AMORT_PVT.faxama
2553 
2554          l_grp_dest_trans_rec(l_sob_index) := l_dest_trans_rec;
2555          l_grp_dest_asset_hdr_rec(l_sob_index) := l_dest_asset_hdr_rec;
2556          l_grp_dest_asset_type_rec(l_sob_index) := l_dest_asset_type_rec;
2557          l_grp_dest_asset_fin_rec_new(l_sob_index) := l_dest_asset_fin_rec_new;
2558 
2559          -- call the category books cache for the accounts
2560          if not fa_cache_pkg.fazccb
2561                (X_book   => l_dest_asset_hdr_rec.book_type_code,
2562                 X_cat_id => l_dest_asset_cat_rec.category_id, p_log_level_rec => p_log_level_rec) then
2563             raise group_rec_err;
2564          end if;
2565 
2566          -- set up the structs to be passed to faxinaj
2567          l_rsv_adj.book_type_code           := l_src_asset_hdr_rec.book_type_code;
2568          l_rsv_adj.period_counter_created   := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
2569          l_rsv_adj.period_counter_adjusted  := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
2570          l_rsv_adj.selection_mode           := FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
2571          l_rsv_adj.selection_thid           := 0;
2572          l_rsv_adj.selection_retid          := 0;
2573          l_rsv_adj.leveling_flag            := TRUE;
2574          l_rsv_adj.last_update_date         := l_grp_src_trans_rec(l_sob_index).transaction_date_entered;
2575          l_rsv_adj.flush_adj_flag           := TRUE;
2576          l_rsv_adj.gen_ccid_flag            := TRUE;
2577          l_rsv_adj.annualized_adjustment    := 0;
2578          l_rsv_adj.asset_invoice_id         := 0;
2579          l_rsv_adj.distribution_id          := 0;
2580          l_rsv_adj.mrc_sob_type_code        := l_mrc_sob_type_code;
2581          l_rsv_adj.set_of_books_id          := l_dest_asset_hdr_rec.set_of_books_id;
2582          l_rsv_adj.source_type_code         := 'ADJUSTMENT';
2583          l_rsv_adj.adjustment_type          := 'RESERVE';
2584          l_rsv_adj.code_combination_id      := fa_cache_pkg.fazccb_record.reserve_account_ccid;
2585          l_rsv_adj.account                  := fa_cache_pkg.fazccb_record.deprn_reserve_acct;
2586          l_rsv_adj.account_type             := 'DEPRN_RESERVE_ACCT';
2587 
2588          l_rsv_adj.asset_id                 := l_src_asset_hdr_rec.asset_id;
2589          l_rsv_adj.current_units            := l_src_asset_desc_rec.current_units;
2590          l_rsv_adj.code_combination_id      := fa_cache_pkg.fazccb_record.reserve_account_ccid;
2591          l_rsv_adj.account                  := fa_cache_pkg.fazccb_record.deprn_reserve_acct;
2592          l_rsv_adj.debit_credit_flag        := 'CR';
2593 
2594          l_exp_adj.book_type_code           := l_src_asset_hdr_rec.book_type_code;
2595          l_exp_adj.period_counter_created   := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
2596          l_exp_adj.period_counter_adjusted  := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
2597          l_exp_adj.selection_mode           := FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
2598          l_exp_adj.selection_thid           := 0;
2599          l_exp_adj.selection_retid          := 0;
2600          l_exp_adj.leveling_flag            := TRUE;
2601          l_exp_adj.last_update_date         := l_grp_src_trans_rec(l_sob_index).transaction_date_entered;
2602          l_exp_adj.flush_adj_flag           := TRUE;
2603          l_exp_adj.gen_ccid_flag            := TRUE;
2604          l_exp_adj.annualized_adjustment    := 0;
2605          l_exp_adj.asset_invoice_id         := 0;
2606          l_exp_adj.distribution_id          := 0;
2607          l_exp_adj.mrc_sob_type_code        := l_mrc_sob_type_code;
2608          l_exp_adj.set_of_books_id          := l_dest_asset_hdr_rec.set_of_books_id;
2609          l_exp_adj.source_type_code         := 'DEPRECIATION';
2610          l_exp_adj.adjustment_type          := 'EXPENSE';
2611          l_exp_adj.account_type             := 'DEPRN_EXPENSE_ACCT';
2612 
2613          l_exp_adj.asset_id                 := l_src_asset_hdr_rec.asset_id;
2614          l_exp_adj.current_units            := l_src_asset_desc_rec.current_units;
2615          l_exp_adj.code_combination_id      := 0;
2616          l_exp_adj.account                  := fa_cache_pkg.fazccb_record.deprn_expense_acct;
2617          l_exp_adj.debit_credit_flag        := 'DR';
2618 
2619          -- set up the structs to be passed to faxinaj
2620          l_rsv_adj.transaction_header_id    := l_dest_trans_rec.transaction_header_id;
2621          l_rsv_adj.asset_id                 := l_dest_asset_hdr_rec.asset_id;
2622          l_rsv_adj.current_units            := l_dest_asset_desc_rec.current_units;
2623 
2624          l_exp_adj.transaction_header_id    := l_dest_trans_rec.transaction_header_id;
2625          l_exp_adj.asset_id                 := l_dest_asset_hdr_rec.asset_id;
2626          l_exp_adj.current_units            := l_dest_asset_desc_rec.current_units;
2627 
2628          -- Expense accounts have to be DR for the new acct
2629          -- Reserve accounts have to be CR for the new acct
2630 
2631          if (nvl(l_group_reclass_options_rec(l_sob_index).destination_exp_amount, 0) <> 0) then
2632 
2633             l_exp_adj.adjustment_amount := l_group_reclass_options_rec(l_sob_index).destination_exp_amount;
2634 
2635             if (p_log_level_rec.statement_level) then
2636                fa_debug_pkg.add(l_calling_fn, 'calling faxinaj','for exp dest', p_log_level_rec => p_log_level_rec);
2637             end if;
2638 
2639             l_exp_adj.track_member_flag := null; --Bug 9089120
2640 
2641             if not FA_INS_ADJUST_PKG.faxinaj
2642                (l_exp_adj,
2643                 l_dest_trans_rec.who_info.last_update_date,
2644                 l_dest_trans_rec.who_info.last_updated_by,
2645                 l_dest_trans_rec.who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
2646                raise group_rec_err;
2647             end if;
2648 
2649              /*Bug#9881684 - Modify condition to create reserve track for member if member_rollup_flag is NO
2650                             and tracking method is calculate */
2651             if (nvl(l_dest_asset_fin_rec_new.tracking_method, 'NO TRACK') = 'ALLOCATE') or
2652                (nvl(l_dest_asset_fin_rec_new.tracking_method,'NO TRACK')='CALCULATE' and
2653                 nvl(l_dest_asset_fin_rec_new.member_rollup_flag,'N') = 'N') then
2654 
2655                -- call the category books cache for the accounts
2656                if not fa_cache_pkg.fazccb
2657                          (X_book   => l_mem_asset_hdr_rec.book_type_code,
2658                           X_cat_id => l_mem_asset_cat_rec.category_id, p_log_level_rec => p_log_level_rec) then
2659                   raise group_rec_err;
2660                end if;
2661 
2662                l_exp_adj.transaction_header_id    := l_mem_trans_rec.transaction_header_id;
2663                l_exp_adj.current_units            := l_mem_asset_desc_rec.current_units;
2664                l_exp_adj.asset_id                 := l_mem_asset_hdr_rec.asset_id;
2665                l_exp_adj.account                  := fa_cache_pkg.fazccb_record.deprn_expense_acct;
2666                l_exp_adj.track_member_flag        := 'Y';
2667 
2668                if (p_log_level_rec.statement_level) then
2669                   fa_debug_pkg.add(l_calling_fn, 'calling faxinaj','for exp dest track', p_log_level_rec => p_log_level_rec);
2670                end if;
2671 
2672                if not FA_INS_ADJUST_PKG.faxinaj
2673                        (l_exp_adj,
2674                        l_grp_src_trans_rec(l_sob_index).who_info.last_update_date,
2675                        l_grp_src_trans_rec(l_sob_index).who_info.last_updated_by,
2676                        l_grp_src_trans_rec(l_sob_index).who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
2677                   raise group_rec_err;
2678                end if;
2679             end if;
2680 
2681          end if;
2682 
2683          if (nvl(l_group_reclass_options_rec(l_sob_index).reserve_amount, 0) <> 0) then
2684 
2685             l_rsv_adj.adjustment_amount := l_group_reclass_options_rec(l_sob_index).reserve_amount;
2686 
2687             if (p_log_level_rec.statement_level) then
2688                fa_debug_pkg.add(l_calling_fn, 'calling faxinaj','for rsv dest', p_log_level_rec => p_log_level_rec);
2689             end if;
2690 
2691             l_rsv_adj.track_member_flag := null; --Bug 9089120
2692 
2693             if not FA_INS_ADJUST_PKG.faxinaj
2694                (l_rsv_adj,
2695                 l_dest_trans_rec.who_info.last_update_date,
2696                 l_dest_trans_rec.who_info.last_updated_by,
2697                 l_dest_trans_rec.who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
2698                raise group_rec_err;
2699             end if;
2700 
2701             /*Bug#9881684 - Modify condition to create reserve track for member if member_rollup_flag is NO
2702                             and tracking method is calculate */
2703             if (nvl(l_dest_asset_fin_rec_new.tracking_method,'NO TRACK')='ALLOCATE') or
2704                (nvl(l_dest_asset_fin_rec_new.tracking_method,'NO TRACK')='CALCULATE' and
2705                 nvl(l_dest_asset_fin_rec_new.member_rollup_flag,'N') = 'N') then
2706 
2707                -- call the category books cache for the accounts
2708                if not fa_cache_pkg.fazccb
2709                          (X_book   => l_mem_asset_hdr_rec.book_type_code,
2710                           X_cat_id => l_mem_asset_cat_rec.category_id, p_log_level_rec => p_log_level_rec) then
2711                   raise group_rec_err;
2712                end if;
2713 
2714                l_rsv_adj.transaction_header_id    := l_mem_trans_rec.transaction_header_id;
2715                l_rsv_adj.current_units            := l_mem_asset_desc_rec.current_units;
2716                l_rsv_adj.asset_id                 := l_mem_asset_hdr_rec.asset_id;
2717                l_rsv_adj.code_combination_id      := fa_cache_pkg.fazccb_record.reserve_account_ccid;
2718                l_rsv_adj.account                  := fa_cache_pkg.fazccb_record.deprn_reserve_acct;
2719                l_rsv_adj.track_member_flag        := 'Y';
2720 
2721                if (p_log_level_rec.statement_level) then
2722                   fa_debug_pkg.add(l_calling_fn, 'calling faxinaj','for rsv dest track', p_log_level_rec => p_log_level_rec);
2723                end if;
2724 
2725                if not FA_INS_ADJUST_PKG.faxinaj
2726                   (l_rsv_adj,
2727                   l_grp_src_trans_rec(l_sob_index).who_info.last_update_date,
2728                   l_grp_src_trans_rec(l_sob_index).who_info.last_updated_by,
2729                   l_grp_src_trans_rec(l_sob_index).who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
2730                   raise group_rec_err;
2731                end if;
2732             end if;
2733          end if;
2734 
2735       else -- asset is now standalone
2736 
2737          -- set the main structs equal to member if asset was
2738          -- originally standalone
2739 
2740          l_dest_trans_rec           := l_mem_trans_rec;
2741          l_dest_asset_hdr_rec       := l_mem_asset_hdr_rec;
2742          l_dest_asset_desc_rec      := l_mem_asset_desc_rec;
2743          l_dest_asset_type_rec      := l_mem_asset_type_rec;
2744          l_dest_asset_cat_rec       := l_mem_asset_cat_rec;
2745          l_dest_asset_fin_rec_old   := l_mem_asset_fin_rec_old;
2746          l_dest_asset_fin_rec_new   := l_mem_asset_fin_rec_new;
2747          l_dest_asset_deprn_rec_old := l_mem_asset_deprn_rec_old_tbl(l_sob_index);
2748          l_dest_asset_deprn_rec_new := l_mem_asset_deprn_rec_new;
2749 
2750          if (p_log_level_rec.statement_level) then
2751                fa_debug_pkg.add(l_calling_fn,'calling FA_GROUP_RECLASS2_PVT.do_adjustment',l_dest_asset_hdr_rec.asset_id,  p_log_level_rec => p_log_level_rec);
2752          end if;
2753 
2754          --Bug6983091: Replaced l_dest_asset_deprn_rec_new with l_dest_asset_deprn_rec_old
2755          --            as parameter for p_asset_deprn_rec_old
2756          if not FA_GROUP_RECLASS2_PVT.do_adjustment
2757                  (px_trans_rec                 => l_dest_trans_rec,
2758                   p_asset_hdr_rec              => l_dest_asset_hdr_rec,
2759                   p_asset_desc_rec             => l_dest_asset_desc_rec,
2760                   p_asset_type_rec             => l_dest_asset_type_rec,
2761                   p_asset_cat_rec              => l_dest_asset_cat_rec,
2762                   p_asset_fin_rec_old          => l_dest_asset_fin_rec_old,
2763                   p_asset_fin_rec_new          => l_dest_asset_fin_rec_new,
2764                   p_asset_deprn_rec_old        => l_dest_asset_deprn_rec_old,
2765                   p_mem_asset_hdr_rec          => l_mem_asset_hdr_rec,
2766                   p_mem_asset_desc_rec         => l_mem_asset_desc_rec,
2767                   p_mem_asset_type_rec         => l_mem_asset_type_rec,
2768                   p_mem_asset_cat_rec          => l_mem_asset_cat_rec,
2769                   p_mem_asset_fin_rec_new      => l_mem_asset_fin_rec_new,
2770                   p_mem_asset_deprn_rec_new    => l_mem_asset_deprn_rec_new,
2771                   px_group_reclass_options_rec => l_group_reclass_options_rec(l_sob_index),
2772                   p_period_rec                 => l_period_rec,
2773                   p_mrc_sob_type_code          => l_mrc_sob_type_code,
2774                   p_src_dest                   => 'DESTINATION'
2775                          , p_log_level_rec => p_log_level_rec) then
2776             raise group_rec_err;
2777          end if;
2778 
2779          if (p_log_level_rec.statement_level) then
2780                   fa_debug_pkg.add(l_calling_fn,'after FA_GROUP_RECLASS2_PVT.do_adjustment',l_dest_asset_hdr_rec.asset_id,  p_log_level_rec => p_log_level_rec);
2781          end if;
2782 
2783       end if; -- end of destination
2784    END LOOP;
2785 
2786    -- process any intercompany effects
2787    -- R12 conditional logic
2788    FOR l_sob_index in 0..l_sob_tbl.count LOOP
2789       if (G_release = 11) then
2790          if not fa_interco_pvt.do_all_books
2791                    (p_src_trans_rec          => l_grp_src_trans_rec(l_sob_index),
2792                     p_src_asset_hdr_rec      => l_grp_src_asset_hdr_rec(l_sob_index),
2793                     p_dest_trans_rec         => l_grp_dest_trans_rec(l_sob_index),
2794                     p_dest_asset_hdr_rec     => l_grp_dest_asset_hdr_rec(l_sob_index),
2795                     p_calling_fn             => l_calling_fn
2796                    , p_log_level_rec => p_log_level_rec) then raise group_rec_err;
2797          end if;
2798       end if;
2799    END LOOP;
2800 
2801    FOR l_sob_index in 0..l_sob_tbl.count LOOP
2802 
2803       if (l_sob_index = 0) then
2804 
2805          if (l_src_asset_type_rec.asset_type = 'GROUP') then
2806             update fa_books
2807             set    adjustment_required_status = 'NONE'
2808                  , adjusted_cost = l_grp_src_asset_fin_rec_new(l_sob_index).adjusted_cost
2809                  , rate_adjustment_factor = l_grp_src_asset_fin_rec_new(l_sob_index).rate_adjustment_factor
2810                  , formula_factor = l_grp_src_asset_fin_rec_new(l_sob_index).formula_factor
2811                  , salvage_value = l_grp_src_asset_fin_rec_new(l_sob_index).salvage_value
2812                  , allowed_deprn_limit_amount = l_grp_src_asset_fin_rec_new(l_sob_index).allowed_deprn_limit_amount
2813                  , recoverable_cost = l_grp_src_asset_fin_rec_new(l_sob_index).recoverable_cost
2814                  , adjusted_recoverable_cost = l_grp_src_asset_fin_rec_new(l_sob_index).adjusted_recoverable_cost
2815                  , adjusted_capacity = l_grp_src_asset_fin_rec_new(l_sob_index).adjusted_capacity
2816                  , reval_amortization_basis = l_grp_src_asset_fin_rec_new(l_sob_index).reval_amortization_basis
2817                  , eofy_reserve = l_grp_src_asset_fin_rec_new(l_sob_index).eofy_reserve
2818             where  asset_id = l_src_asset
2819             and    book_type_code = p_trx_ref_rec.book_type_code
2820             and    transaction_header_id_out is null;
2821          else
2822             update fa_books
2823             set    adjustment_required_status = 'NONE'
2824             where  asset_id = l_src_asset
2825             and    book_type_code = p_trx_ref_rec.book_type_code
2826             and    transaction_header_id_out is null;
2827          end if;
2828 
2829          if (l_dest_asset_type_rec.asset_type = 'GROUP') then
2830             update fa_books
2831             set    adjustment_required_status = 'NONE'
2832                  , adjusted_cost = l_grp_dest_asset_fin_rec_new(l_sob_index).adjusted_cost
2833                  , rate_adjustment_factor = l_grp_dest_asset_fin_rec_new(l_sob_index).rate_adjustment_factor
2834                  , formula_factor = l_grp_dest_asset_fin_rec_new(l_sob_index).formula_factor
2835                  , salvage_value = l_grp_dest_asset_fin_rec_new(l_sob_index).salvage_value
2836                  , allowed_deprn_limit_amount = l_grp_dest_asset_fin_rec_new(l_sob_index).allowed_deprn_limit_amount
2837                  , recoverable_cost = l_grp_dest_asset_fin_rec_new(l_sob_index).recoverable_cost
2838                  , adjusted_recoverable_cost = l_grp_dest_asset_fin_rec_new(l_sob_index).adjusted_recoverable_cost
2839                  , adjusted_capacity = l_grp_dest_asset_fin_rec_new(l_sob_index).adjusted_capacity
2840                  , reval_amortization_basis = l_grp_dest_asset_fin_rec_new(l_sob_index).reval_amortization_basis
2841                  , eofy_reserve = l_grp_dest_asset_fin_rec_new(l_sob_index).eofy_reserve
2842             where  asset_id = l_dest_asset
2843             and    book_type_code = p_trx_ref_rec.book_type_code
2844             and    transaction_header_id_out is null;
2845          else
2846             update fa_books
2847             set    adjustment_required_status = 'NONE'
2848             where  asset_id = l_dest_asset
2849             and    book_type_code = p_trx_ref_rec.book_type_code
2850             and    transaction_header_id_out is null;
2851          end if;
2852 
2853          update fa_trx_references
2854          set reserve_transfer_amount = l_group_reclass_options_rec(l_sob_index).reserve_amount
2855            , src_expense_amount = l_group_reclass_options_rec(l_sob_index).source_exp_amount
2856            , dest_expense_amount = l_group_reclass_options_rec(l_sob_index).destination_exp_amount
2857          where trx_reference_id =  l_src_trans_rec.trx_reference_id;
2858 
2859       else
2860          if (l_src_asset_type_rec.asset_type = 'GROUP') then
2861             update fa_mc_books
2862             set    adjustment_required_status = 'NONE'
2863                  , adjusted_cost = l_grp_src_asset_fin_rec_new(l_sob_index).adjusted_cost
2864                  , rate_adjustment_factor = l_grp_src_asset_fin_rec_new(l_sob_index).rate_adjustment_factor
2865                  , formula_factor = l_grp_src_asset_fin_rec_new(l_sob_index).formula_factor
2866                  , salvage_value = l_grp_src_asset_fin_rec_new(l_sob_index).salvage_value
2867                  , allowed_deprn_limit_amount = l_grp_src_asset_fin_rec_new(l_sob_index).allowed_deprn_limit_amount
2868                  , recoverable_cost = l_grp_src_asset_fin_rec_new(l_sob_index).recoverable_cost
2869                  , adjusted_recoverable_cost = l_grp_src_asset_fin_rec_new(l_sob_index).adjusted_recoverable_cost
2870                  , adjusted_capacity = l_grp_src_asset_fin_rec_new(l_sob_index).adjusted_capacity
2871                  , reval_amortization_basis = l_grp_src_asset_fin_rec_new(l_sob_index).reval_amortization_basis
2872                  , eofy_reserve = l_grp_src_asset_fin_rec_new(l_sob_index).eofy_reserve
2873             where  asset_id = l_src_asset
2874             and    book_type_code = p_trx_ref_rec.book_type_code
2875             and    transaction_header_id_out is null
2876             and    set_of_books_id = l_sob_tbl(l_sob_index);
2877          else
2878             update fa_mc_books
2879             set    adjustment_required_status = 'NONE'
2880             where  asset_id = l_src_asset
2881             and    book_type_code = p_trx_ref_rec.book_type_code
2882             and    transaction_header_id_out is null
2883             and    set_of_books_id = l_sob_tbl(l_sob_index);
2884          end if;
2885 
2886          if (l_dest_asset_type_rec.asset_type = 'GROUP') then
2887             update fa_mc_books
2888             set    adjustment_required_status = 'NONE'
2889                  , adjusted_cost = l_grp_dest_asset_fin_rec_new(l_sob_index).adjusted_cost
2890                  , rate_adjustment_factor = l_grp_dest_asset_fin_rec_new(l_sob_index).rate_adjustment_factor
2891                  , formula_factor = l_grp_dest_asset_fin_rec_new(l_sob_index).formula_factor
2892                  , salvage_value = l_grp_dest_asset_fin_rec_new(l_sob_index).salvage_value
2893                  , allowed_deprn_limit_amount = l_grp_dest_asset_fin_rec_new(l_sob_index).allowed_deprn_limit_amount
2894                  , recoverable_cost = l_grp_dest_asset_fin_rec_new(l_sob_index).recoverable_cost
2895                  , adjusted_recoverable_cost = l_grp_dest_asset_fin_rec_new(l_sob_index).adjusted_recoverable_cost
2896                  , adjusted_capacity = l_grp_dest_asset_fin_rec_new(l_sob_index).adjusted_capacity
2897                  , reval_amortization_basis = l_grp_dest_asset_fin_rec_new(l_sob_index).reval_amortization_basis
2898                  , eofy_reserve = l_grp_dest_asset_fin_rec_new(l_sob_index).eofy_reserve
2899             where  asset_id = l_dest_asset
2900             and    book_type_code = p_trx_ref_rec.book_type_code
2901             and    transaction_header_id_out is null
2902             and    set_of_books_id = l_sob_tbl(l_sob_index);
2903          else
2904             update fa_mc_books
2905             set    adjustment_required_status = 'NONE'
2906             where  asset_id = l_dest_asset
2907             and    book_type_code = p_trx_ref_rec.book_type_code
2908             and    transaction_header_id_out is null
2909             and    set_of_books_id = l_sob_tbl(l_sob_index);
2910          end if;
2911       end if;
2912    END LOOP;
2913 
2914    --
2915    -- Source group is the only potential group requires terminal gain loss
2916    -- calculation.
2917    --
2918    FOR l_sob_index in 0..l_sob_tbl.count LOOP
2919       if (l_sob_index = 0) then
2920          l_mrc_sob_type_code := 'P';
2921       else
2922          l_mrc_sob_type_code := 'R';
2923       end if;
2924 
2925       if not FA_RETIREMENT_PVT.Check_Terminal_Gain_Loss(
2926                       p_trans_rec         => l_grp_src_trans_rec(l_sob_index),
2927                       p_asset_hdr_rec     => l_grp_src_asset_hdr_rec(l_sob_index),
2928                       p_asset_type_rec    => l_grp_src_asset_type_rec(l_sob_index),
2929                       p_asset_fin_rec     => l_grp_src_asset_fin_rec_new(l_sob_index),
2930                       p_period_rec        => l_period_rec,
2931                       p_mrc_sob_type_code => l_mrc_sob_type_code,
2932                       p_calling_fn        => l_calling_fn, p_log_level_rec => p_log_level_rec) then
2933          if (p_log_level_rec.statement_level) then
2934                fa_debug_pkg.add(l_calling_fn, 'Failed Calling',
2935                            ' FA_RETIREMENT_PVT.Check_Terminal_Gain_Loss',  p_log_level_rec => p_log_level_rec);
2936          end if;
2937          raise group_rec_err;
2938       end if;
2939    END LOOP;
2940 
2941    --
2942    -- Initialize Member Tables
2943    --
2944    FA_AMORT_PVT.initMemberTable;
2945 
2946    if (p_log_level_rec.statement_level) then
2947             fa_debug_pkg.add(l_calling_fn,
2948                         'FA_GROUP_RECLASS2_PVT.do_adjustment END',
2949                         'RECLASS PROCESSED FOR SOURCE AND DEST',  p_log_level_rec => p_log_level_rec);
2950    end if;
2951 
2952    return TRUE;
2953 
2954 EXCEPTION
2955 
2956    WHEN GROUP_REC_ERR THEN
2957       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2958       return FALSE;
2959 
2960    WHEN OTHERS THEN
2961       fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2962       return FALSE;
2963 
2964 END do_group_reclass;
2965 
2966 END FA_PROCESS_GROUPS_PKG;