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