DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_TRACK_MEMBER_PVT

Source


1 PACKAGE BODY FA_TRACK_MEMBER_PVT as
2 /* $Header: FAVTRACKB.pls 120.75.12020000.3 2012/07/23 12:45:24 rmandali ship $ */
3 
4 function populate_unplanned_exp(p_set_of_books_id IN NUMBER,
5                            p_mrc_sob_type_code in VARCHAR2,
6                            p_book_type_code IN VARCHAR2,
7                            p_period_counter IN NUMBER,
8                            p_group_asset_id IN NUMBER, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
9 return boolean;
10 
11 function search_index_table(p_period_counter IN number,
12                       p_member_asset_id in number,
13                       p_group_asset_id in number,
14                       p_sob_id in number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
15 return number;
16 
17 procedure put_track_index(p_period_counter IN number,
18                           p_member_asset_id in number,
19                           p_group_asset_id in number,
20                           p_sob_id in number,
21                           p_index_value in number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type);
22 
23 procedure delete_track_index(p_period_counter IN number,
24                           p_member_asset_id in number,
25                           p_group_asset_id in number,
26                           p_sob_id in number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type);
27 
28 primary_cost number; -- Used in override function
29 
30 -- Bug 8703676 : To be used in ins_dd_adj
31 type num_tbl_type  is table of number        index by binary_integer;
32 g_primary_trx_hdr_id_tbl num_tbl_type ;
33 
34 --------------------------------------------------------------------------
35 --
36 --   Function: track_assets
37 --
38 --   Description:
39 --      Main logic to track individual asset level amounts.
40 --
41 --   Returns:
42 --      0 - No error / 1 - Error
43 --
44 --------------------------------------------------------------------------
45 
46 FUNCTION track_assets(P_book_type_code             in varchar2,
47                       P_group_asset_id             in number,
48                       P_period_counter             in number,
49                       P_fiscal_year                in number,
50                       P_loop_end_year              in number, -- default NULL,
51                       P_loop_end_period            in number, -- default NULL,
52                       P_group_deprn_basis          in varchar2,
53                       P_group_exclude_salvage      in varchar2, -- default NULL,
54                       P_group_bonus_rule           in varchar2, -- default NULL,
55                       P_group_deprn_amount         in number, -- default 0,
56                       P_group_bonus_amount         in number, -- default 0,
57                       P_tracking_method            in varchar2, -- default null,
58                       P_allocate_to_fully_ret_flag in varchar2, -- default null,
59                       P_allocate_to_fully_rsv_flag in varchar2, -- default null,
60                       P_excess_allocation_option   in varchar2, -- default 'REDUCE',
61                       P_depreciation_option        in varchar2, -- default null,
62                       P_member_rollup_flag         in varchar2, -- default null,
63                       P_subtraction_flag           in varchar2, -- default NULL,
64                       P_group_level_override       in out nocopy varchar2, -- default NULL,
65                       P_update_override_status     in boolean, -- default ture,
66                       P_period_of_addition         in varchar2, -- default NULL,
67                       P_transaction_date_entered   in date, -- default null,
68                       P_mode                       in varchar2, -- default NULL,
69                       P_mrc_sob_type_code          in varchar2, -- default 'N',
70                       p_set_of_books_id            in number,
71                       X_new_deprn_amount           out nocopy number,
72                       X_new_bonus_amount           out nocopy number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type default null)
73   return number is
74 
75 -- variables for the input and output parameters
76 x_counter               number;
77 x_fully_reserved_flag   varchar2(1);
78 x_fully_retired_flag    varchar2(1);
79 x_group_deprn_amount    number;
80 x_group_bonus_amount    number;
81 
82 h_deprn_calendar        varchar2(15);
83 h_perds_per_yr          number;
84 h_period_counter        number;
85 h_reporting_flag        varchar2(1);
86 h_dummy                 number;
87 h_rtn                   boolean := TRUE;
88 
89 h_loop_end_year         number := nvl(P_loop_end_year,to_number(NULL));
90 h_loop_end_period       number := nvl(P_loop_end_period,to_number(NULL));
91 
92 -- Structure for track members
93 l_track_members         track_member_type;
94 
95 l_calling_fn        varchar2(35) := 'fa_track_member_pvt.track_assets';
96 
97 main_err            exception;
98 
99 -- cursor to check data existing
100 cursor CHECK_TEMP_TABLE is
101   select 1
102     from FA_TRACK_MEMBERS
103    where group_asset_id = P_group_asset_id
104      and period_counter = h_period_counter - 1
105      and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
106 
107 -- cursor to get Period Counter
108 cursor GET_PERIOD_COUNTER is
109   select period_counter
110     from fa_deprn_periods
111    where book_type_code=P_book_type_code
112      and fiscal_year=P_fiscal_year
113      and period_num=P_period_counter;
114 
115 cursor GET_PERIOD_COUNTER_MRC is
116   select period_counter
117     from fa_mc_deprn_periods
118    where book_type_code=P_book_type_code
119      and fiscal_year=P_fiscal_year
120      and period_num=P_period_counter
121      and set_of_books_id = p_set_of_books_id;
122 
123 begin <<TRACK_ASSETS>>
124 if (p_log_level_rec.statement_level) then
125   fa_debug_pkg.add(l_calling_fn,'== TRACK_ASSET is Started ==','Parameters', p_log_level_rec => p_log_level_rec);
126   fa_debug_pkg.add(l_calling_fn,'P_group_asset_id',P_group_asset_id, p_log_level_rec => p_log_level_rec);
127   fa_debug_pkg.add(l_calling_fn,'P_fiscal_year:P_period_counter:h_period_counter',P_fiscal_year||':'||P_period_counter||':'||h_period_counter, p_log_level_rec => p_log_level_rec);
128   fa_debug_pkg.add(l_calling_fn,'P_group_deprn_amount:P_group_bonus_amount',P_group_deprn_amount||':'||P_group_bonus_amount, p_log_level_rec => p_log_level_rec);
129   fa_debug_pkg.add(l_calling_fn,'P_tracking_method:P_mode:P_mrc_sob_type_code',P_tracking_method||':'||P_mode||':'||P_mrc_sob_type_code, p_log_level_rec => p_log_level_rec);
130   fa_debug_pkg.add(l_calling_fn,'P_allocate_to_fully_ret:rsv_flag', P_allocate_to_fully_ret_flag||':'||P_allocate_to_fully_rsv_flag, p_log_level_rec => p_log_level_rec);
131   fa_debug_pkg.add(l_calling_fn,'P_excess_allocation_option:P_subtraction_flag',P_excess_allocation_option||':'||P_subtraction_flag, p_log_level_rec => p_log_level_rec);
132 end if;
133 
134 -- Check if Cache Package has been called:
135 if FA_CACHE_PKG.fazcbc_record.set_of_books_id is null then
136      if (NOT fa_cache_pkg.fazcbc(X_book => P_book_type_code, p_log_level_rec => p_log_level_rec)) then
137       raise main_err;
138    end if;
139 end if;
140 
141 -- Get Period Counter
142 if p_mrc_sob_type_code <> 'R' then
143 
144   open GET_PERIOD_COUNTER;
145   fetch GET_PERIOD_COUNTER into h_period_counter;
146   if GET_PERIOD_COUNTER%NOTFOUND then
147     select deprn_calendar into h_deprn_calendar
148       from fa_book_controls
149      where book_type_code=P_Book_Type_code;
150     if not fa_cache_pkg.fazcct(X_calendar=>h_deprn_calendar, p_log_level_rec => p_log_level_rec) then
151         fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
152         raise main_err;
153     end if;
154     h_perds_per_yr   := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
155     h_period_counter := P_fiscal_Year * h_perds_per_yr + P_Period_Counter;
156   end if;
157   close GET_PERIOD_COUNTER;
158 else -- For Reporting Book
159 
160   open GET_PERIOD_COUNTER_MRC;
161   fetch GET_PERIOD_COUNTER_MRC into h_period_counter;
162   if GET_PERIOD_COUNTER_MRC%NOTFOUND then
163     select deprn_calendar into h_deprn_calendar
164       from fa_book_controls
165      where book_type_code=P_Book_Type_code;
166     if not fa_cache_pkg.fazcct(X_Calendar=>h_deprn_calendar, p_log_level_rec => p_log_level_rec) then
167         fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
168         raise main_err;
169     end if;
170     h_perds_per_yr   := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
171     h_period_counter := P_fiscal_Year * h_perds_per_yr + P_Period_Counter;
172   end if;
173   close GET_PERIOD_COUNTER_MRC;
174 end if;
175 
176 if nvl(P_tracking_method,'OTHER') = 'ALLOCATE' then
177 
178   -- Call Allocation Logic function
179   if not allocate(P_book_type_code => P_book_type_code,
180                   P_group_asset_id => P_group_asset_id,
181                   P_period_counter => h_period_counter,
182                   P_fiscal_year    => P_fiscal_year,
183                   P_group_deprn_basis => P_group_deprn_basis,
184                   P_group_exclude_salvage => P_group_exclude_salvage,
185                   P_group_bonus_rule  => P_group_bonus_rule,
186                   P_group_deprn_amount => P_group_deprn_amount,
187                   P_group_bonus_amount => P_group_bonus_amount,
188                   P_allocate_to_fully_ret_flag => P_allocate_to_fully_ret_flag,
189                   P_allocate_to_fully_rsv_flag => P_allocate_to_fully_rsv_flag,
190                   P_excess_allocation_option   => P_excess_allocation_option,
191                   P_subtraction_flag => P_subtraction_flag,
192                   P_group_level_override => P_group_level_override,
193                   P_update_override_status => P_update_override_status,
194                   P_mrc_sob_type_code    => p_mrc_sob_type_code,
195                   P_set_of_books_id      => p_set_of_books_id,
196                   P_mode                 => P_mode,
197                   X_new_deprn_amount     => X_new_deprn_amount,
198                   X_new_bonus_amount     => X_new_bonus_amount,
199                   p_log_level_rec => p_log_level_rec) then
200       raise main_err;
201   end if;
202 
203 else  -- Calculation Type
204   -- Debug
205   if (p_log_level_rec.statement_level) then
206     fa_debug_pkg.add(l_calling_fn,'P_depreciation_option:P_member_rollup_flag',P_depreciation_option||':'||P_member_rollup_flag, p_log_level_rec => p_log_level_rec);
207   end if;
208   /* for now, Calculate Method is handled in Depreciation Engine. in this case, this part will be just skipped.  */
209 end if;
210 
211 if nvl(P_mode,'DEPRECIATION') = 'UNPLANNED' or
212    nvl(P_mode,'DEPRECIATION') = 'GROUP ADJUSTMENT' then
213 
214 -- This is a case when this program is called from Group Adjustments.
215 -- So allocated amount will be inserted/updated into FA_ADJUSTMENTS or FA_DEPRN_SUMMARY/DETAIL
216 -- or FA_BOOKS following P_mode
217 
218    if not ins_dd_adj(P_book_type_Code => P_book_type_code,
219                      P_group_asset_id => P_group_asset_id,
220                      P_period_counter => h_period_counter,
221                      P_fiscal_year    => P_fiscal_year,
222                      P_period_of_addition => P_period_of_addition,
223                      P_transaction_date_entered => P_transaction_date_entered,
224                      P_mrc_sob_type_code => P_mrc_sob_type_code,
225                      P_set_of_books_id => p_set_of_books_id,
226                      P_mode           => P_mode,
227                      p_log_level_rec => p_log_level_rec) then
228       raise main_err;
229    end if;
230 end if;
231 
232 return 0;
233 
234 exception
235   when main_err then
236     delete fa_track_members;
237     fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
238     return 1;
239 
240   when others then
241     fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
242     return 1;
243 end TRACK_ASSETS;
244 
245 --------------------------------------------------------------------------
246 --
247 --  Function: allocate
248 --
249 --  Description:
250 --     Calculate the allocated amount based on the parameters
251 --
252 --------------------------------------------------------------------------
253 
254 FUNCTION allocate(P_book_type_code             in varchar2,
255                   P_group_asset_id             in number,
256                   P_period_counter             in number,
257                   P_fiscal_year                in number,
258                   P_group_deprn_basis          in varchar2,
259                   P_group_exclude_salvage      in varchar2, -- default NULL,
260                   P_group_bonus_rule           in varchar2, -- default NULL,
261                   P_group_deprn_amount         in number, -- default 0,
262                   P_group_bonus_amount         in number, -- default 0,
263                   P_allocate_to_fully_ret_flag in varchar2, -- default NULL,
264                   P_allocate_to_fully_rsv_flag in varchar2, -- default NULL,
265                   P_excess_allocation_option   in varchar2, -- default 'REDUCE',
266                   P_subtraction_flag           in varchar2, -- default NULL,
267                   P_group_level_override       in out nocopy varchar2, -- default NULL,
268                   P_update_override_status     in boolean, -- default true,
269                   P_mrc_sob_type_code          in varchar2, -- default 'N',
270                   P_set_of_books_id            in number,
271                   P_mode                       in varchar2, -- default NULL,
272                   X_new_deprn_amount           out nocopy number,
273                   X_new_bonus_amount           out nocopy number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
274   return boolean is
275 
276 -- variables for the input and output parameters
277 h_book_type_code      varchar2(30);
278 h_group_asset_id      number;
279 h_period_counter      number;
280 h_fiscal_year         number;
281 h_fully_reserved_flag varchar2(1);
282 h_perds_per_yr        number;
283 
284 h_rec_cost_for_odda   number; -- Added to fix bug
285 h_sv_for_odda         number; -- Added to fix bug
286 
287 h_cost                       number;
288 h_total_allocation_basis     number;
289 h_adjusted_recoverable_cost  number;
290 h_adjusted_cost              number;
291 h_salvage_value              number;
292 h_recoverable_cost           number;
293 h_deprn_reserve              number;
294 h_ytd_deprn                  number;
295 h_bonus_deprn_reserve        number;
296 h_bonus_ytd_deprn            number;
297 
298 h_excl_sv                    varchar2(1);
299 h_allocation_basis           number;
300 h_system_deprn_amount        number;
301 h_system_bonus_amount        number;
302 h_difference_deprn_amount    number;
303 h_difference_bonus_amount    number;
304 
305 h_total_cost                 number;
306 h_total_adjusted_cost        number;
307 h_total_recoverable_cost     number;
308 
309 h_group_adjusted_cost        number;
310 h_group_rec_cost             number;
311 
312 h_member_asset_id            number;
313 h_adjustment_type            number;
314 h_adjustment_amount          number;
315 h_debit_credit_flag          varchar2(30);
316 h_all_member_fully_reserved  varchar2(1);
317 h_group_deprn_amount         number;
318 h_group_bonus_amount         number;
319 h_catchup_expense            number;
320 h_catchup_bonus              number;
321 
322 h_group_expense              number;
323 h_group_bonus                number;
324 h_deprn_amount               number;
325 h_bonus_amount               number;
326 h_fixed_deprn_amount         number;
327 h_fixed_bonus_amount         number;
328 
329 h_member_override_flag       varchar2(1);
330 h_period_num                 number;
331 h_current_period_number      number;
332 
333 h_perd_ctr                   number;
334 h_adjusted_cost_next_period  number;
335 h_prior_year_reserve         number;
336 h_fiscal_year_next_period    number;
337 h_fully_rsv_member           varchar2(1);
338 -- variables for work
339 x_total_allocated_deprn_amount  number;
340 x_total_allocated_bonus_amount  number;
341 x_allocated_deprn_amount        number;
342 x_allocated_bonus_amount        number;
343 x_check_amount                  number;
344 x_calc_done                     varchar2(1) := 'N';
345 x_sum_of_deprn_amount           number;
346 x_sum_of_bonus_amount           number;
347 x_check_reserve_flag            varchar2(1);
348 x_fully_reserved_flag           varchar2(1);
349 x_allocated_normal_amount       number;
350 
351 
352 h_reporting_flag             varchar2(1);
353 h_ds_fy                      number;
354 
355 h_deprn_expense              number;
356 h_bonus_expense              number;
357 h_added_group_deprn_amount   number;
358 h_added_group_bonus_amount   number;
359 h_fix_amount_member          number;
360 h_total_deprn_expense        number;
361 h_total_bonus_expense        number;
362 
363 l_track_member_in            track_member_struct;
364 l_track_member_out           track_member_struct;
365 l_processed_number           number;
366 l_last_asset_index           number;
367 
368 --* unplanned treatment
369 h_unplanned_member_asset     number;
370 h_unplanned_expense          number;
371 h_unplanned_expense_mem      number;
372 
373 l_reserve_amount             number;  -- ENERGY
374 l_group_dbr_name             varchar2(80); -- deprn basis rule name for group -- ENERGY
375 l_temp_num                   number; -- ENERGY
376 l_temp_char                  varchar2(30);   -- ENERGY
377 l_temp_bool                  boolean;   -- ENERGY
378 l_group_reserve              number; -- ENERGY
379 
380 l_calling_fn                 varchar2(35) := 'fa_track_member_pvt.allocate';
381 allocate_err                 exception;
382 allocate_override_err        exception;
383 -- bug 8394833
384    type num_tbl_type  is table of number        index by binary_integer;
385    l_mem_asset_id_tbl                               num_tbl_type;
386    l_unplanned_exp_tbl                              num_tbl_type;
387    l_unplanned_exp_mem_tbl                          num_tbl_type;
388    l_batch_size                                     NUMBER;
389 -- bug 8394833
390 
391 ---- For regular mode
392 --* Cursor for All Members
393   cursor ALL_MEMBERS is
394    select bk.asset_id,
395           bk.cost,
396           decode(h_excl_sv,'N',bk.adjusted_cost,bk.adjusted_cost+bk.salvage_value) adjusted_cost,
397           bk.salvage_value,
398           bk.recoverable_cost,
399           bk.adjusted_recoverable_cost,
400           bk.period_counter_fully_retired,
401           bk.period_counter_fully_reserved,
402           bk.eofy_reserve,
403           nvl(ds.period_counter,0) period_counter,
404           nvl(ds.deprn_reserve,0) deprn_reserve,
405           nvl(ds.ytd_deprn,0) ytd_deprn,
406           nvl(ds.bonus_deprn_reserve,0) bonus_deprn_reserve,
407           nvl(ds.bonus_ytd_deprn,0) bonus_ytd_deprn
408      from fa_books bk,
409           fa_deprn_summary ds,
410           fa_additions_b ad
411     where bk.group_asset_id = h_group_asset_id
412       and bk.book_type_code = h_book_type_code
413       and bk.date_ineffective is null
414       and bk.depreciate_flag = 'YES'
415       and ds.book_type_code = h_book_type_code
416       and ds.asset_id = bk.asset_id
417       and ds.period_counter =
418             (select max(ds1.period_counter)
419                from fa_deprn_summary ds1
420               where ds1.book_type_code = h_book_type_code
421                 and ds1.asset_id = bk.asset_id
422                 and ds1.period_counter <= h_period_counter - 1)
423       and ad.asset_id = bk.asset_id
424       and ad.asset_type = 'CAPITALIZED'
425     order by ad.asset_number;
426 
427 -- ENERGY
428   cursor c_get_adj(c_asset_id  number) is
429 --    select nvl(sum(decode(aj.adjustment_type, 'RESERVE', decode(aj.debit_credit_flag, 'DR', -1, 1) * aj.adjustment_amount,
430 --                                              'EXPENSE',  )), 0)
431     select nvl(sum(decode(aj.adjustment_type, 'RESERVE',decode(aj.debit_credit_flag, 'DR', -1, 1),
432                                            'EXPENSE',decode(aj.debit_credit_flag, 'CR', -1, 1))* aj.adjustment_amount), 0)
433     from   fa_adjustments aj
434     where  aj.asset_id = c_asset_id
435     and    aj.book_type_code = h_book_type_code
436     and    aj.period_counter_created = h_period_counter
437     and    aj.adjustment_type in ('RESERVE',  'EXPENSE');
438 
439 -- ENERGY
440   cursor c_get_mc_adj(c_asset_id  number) is
441     select nvl(sum(decode(aj.adjustment_type, 'RESERVE',decode(aj.debit_credit_flag, 'DR', -1, 1),
442                                            'EXPENSE',decode(aj.debit_credit_flag, 'CR', -1, 1))* aj.adjustment_amount), 0)
443     from   fa_mc_adjustments aj
444     where  aj.asset_id = c_asset_id
445     and    aj.book_type_code = h_book_type_code
446     and    aj.period_counter_created = h_period_counter
447     and    aj.adjustment_type in ('RESERVE',  'EXPENSE')
448     and    aj.set_of_books_id = p_set_of_books_id;
449 
450   cursor ALL_MEMBERS_MRC is
451    select bk.asset_id,
452           bk.cost,
453           decode(h_excl_sv,'N',bk.adjusted_cost,bk.adjusted_cost+bk.salvage_value) adjusted_cost,
454           bk.salvage_value,
455           bk.recoverable_cost,
456           bk.adjusted_recoverable_cost,
457           bk.period_counter_fully_retired,
458           bk.period_counter_fully_reserved,
459           bk.eofy_reserve,
460           nvl(ds.period_counter,0) period_counter,
461           nvl(ds.deprn_reserve,0) deprn_reserve,
462           nvl(ds.ytd_deprn,0) ytd_deprn,
463           nvl(ds.bonus_deprn_reserve,0) bonus_deprn_reserve,
464           nvl(ds.bonus_ytd_deprn,0) bonus_ytd_deprn
465      from fa_mc_books bk,
466           fa_mc_deprn_summary ds,
467           fa_additions_b ad
468     where bk.group_asset_id = h_group_asset_id
469       and bk.book_type_code = h_book_type_code
470       and bk.date_ineffective is null
471       and bk.depreciate_flag = 'YES'
472       and bk.set_of_books_id = p_set_of_books_id
473       and ds.book_type_code = h_book_type_code
474       and ds.asset_id = bk.asset_id
475       and ds.period_counter =
476             (select max(ds1.period_counter)
477                from fa_mc_deprn_summary ds1
478               where ds1.book_type_code = h_book_type_code
479                 and ds1.asset_id = bk.asset_id
480                 and ds1.set_of_books_id = p_set_of_books_id
481                 and ds1.period_counter <= h_period_counter - 1)
482       and ds.set_of_books_id(+) = p_set_of_books_id
483       and ad.asset_id = bk.asset_id
484       and ad.asset_type = 'CAPITALIZED'
485     order by ad.asset_number;
486 
487 --* Cursor for All Members total depreciable basis
488   cursor ALL_MEMBERS_TOTAL is
489    select sum(bk.cost),
490           decode(h_excl_sv,'N',sum(bk.adjusted_cost),sum(bk.adjusted_cost+bk.salvage_value)),
491           sum(bk.recoverable_cost)
492      from fa_books bk,
493           fa_additions_b ad
494     where bk.group_asset_id = h_group_asset_id
495       and bk.date_ineffective is null
496       and bk.depreciate_flag = 'YES'
497       and bk.book_type_code = h_book_type_code
498       and ad.asset_id = bk.asset_id
499       and ad.asset_type='CAPITALIZED';
500 
501   cursor ALL_MEMBERS_TOTAL_MRC is
502    select sum(bk.cost),
503           decode(h_excl_sv,'N',sum(bk.adjusted_cost),sum(bk.adjusted_cost+bk.salvage_value)),
504           sum(bk.recoverable_cost)
505      from fa_mc_books bk,
506           fa_additions_b ad
507     where bk.group_asset_id = h_group_asset_id
508       and bk.date_ineffective is null
509       and bk.book_type_code = h_book_type_code
510       and bk.set_of_books_id = p_set_of_books_id
511       and bk.depreciate_flag = 'YES'
512       and ad.asset_id = bk.asset_id
513       and ad.asset_type = 'CAPITALIZED';
514 
515 --* Cursor for total of Members excluded fully retired
516   cursor MEMBERS_EX_RETIRED_TOTAL is
517    select sum(bk.cost),
518           decode(h_excl_sv,'N',sum(bk.adjusted_cost),sum(bk.adjusted_cost+bk.salvage_value)),
519           sum(bk.recoverable_cost)
520      from fa_books bk,
521           fa_additions_b ad
522     where bk.group_asset_id = h_group_asset_id
523       and bk.date_ineffective is null
524       and bk.period_counter_fully_retired is null
525       and bk.book_type_code = h_book_type_code
526       and bk.depreciate_flag = 'YES'
527       and ad.asset_id = bk.asset_id
528       and ad.asset_type = 'CAPITALIZED';
529 
530   cursor MEMBERS_EX_RETIRED_TOTAL_MRC is
531    select sum(bk.cost),
532           decode(h_excl_sv,'N',sum(bk.adjusted_cost),sum(bk.adjusted_cost+bk.salvage_value)),
533           sum(bk.recoverable_cost)
534      from fa_mc_books bk,
535           fa_additions_b ad
536     where bk.group_asset_id = h_group_asset_id
537       and bk.date_ineffective is null
538       and bk.period_counter_fully_retired is null
539       and bk.book_type_code = h_book_type_code
540       and bk.set_of_books_id = p_set_of_books_id
541       and bk.depreciate_flag = 'YES'
542       and ad.asset_id = bk.asset_id
543       and ad.asset_type = 'CAPITALIZED';
544 
545 --* Cursor for total of Members excluded fully reserved
546   cursor MEMBERS_EX_RESERVED_TOTAL is
547    select sum(bk.cost),
548           decode(h_excl_sv,'N',sum(bk.adjusted_cost),sum(bk.adjusted_cost+bk.salvage_value)),
549           sum(bk.recoverable_cost)
550      from fa_books bk,
551           fa_additions_b ad
552     where bk.group_asset_id = h_group_asset_id
553       and bk.date_ineffective is null
554       and bk.period_counter_fully_reserved is null
555       and bk.book_type_code = h_book_type_code
556       and bk.depreciate_flag = 'YES'
557       and ad.asset_id = bk.asset_id
558       and ad.asset_type = 'CAPITALIZED';
559 
560   cursor MEMBERS_EX_RESERVED_TOTAL_MRC is
561    select sum(bk.cost),
562           decode(h_excl_sv,'N',sum(bk.adjusted_cost),sum(bk.adjusted_cost+bk.salvage_value)),
563           sum(bk.recoverable_cost)
564      from fa_mc_books bk,
565           fa_additions_b ad
566     where bk.group_asset_id = h_group_asset_id
567       and bk.date_ineffective is null
568       and bk.period_counter_fully_reserved is null
569       and bk.book_type_code = h_book_type_code
570       and bk.set_of_books_id = p_set_of_books_id
571       and bk.depreciate_flag = 'YES'
572       and ad.asset_id = bk.asset_id
573       and ad.asset_type = 'CAPITALIZED';
574 
575 --* Cursor for total of Members excluded both fully retired and fully reserved
576   cursor MEMBER_EX_BOTH_TOTAL is
577    select sum(bk.cost),
578           decode(h_excl_sv,'N',sum(bk.adjusted_cost),sum(bk.adjusted_cost+bk.salvage_value)),
579           sum(bk.recoverable_cost)
580      from fa_books bk,
581           fa_additions_b ad
582     where bk.group_asset_id = h_group_asset_id
583       and bk.date_ineffective is null
584       and bk.period_counter_fully_retired is null
585       and bk.period_counter_fully_reserved is null
586       and bk.book_type_code = h_book_type_code
587       and bk.depreciate_flag = 'YES'
588       and ad.asset_id = bk.asset_id
589       and ad.asset_type = 'CAPITALIZED';
590 
591   cursor MEMBER_EX_BOTH_TOTAL_MRC is
592    select sum(bk.cost),
593           decode(h_excl_sv,'N',sum(bk.adjusted_cost),sum(bk.adjusted_cost+bk.salvage_value)),
594           sum(bk.recoverable_cost)
595      from fa_mc_books bk,
596           fa_additions_b ad
597     where bk.group_asset_id = h_group_asset_id
598       and bk.date_ineffective is null
599       and bk.period_counter_fully_retired is null
600       and bk.period_counter_fully_reserved is null
601       and bk.book_type_code = h_book_type_code
602       and bk.set_of_books_id = p_set_of_books_id
603       and bk.depreciate_flag = 'YES'
604       and ad.asset_id = bk.asset_id
605       and ad.asset_type = 'CAPITALIZED';
606 
607 --* Cursor to check if the member becomes fully reserved
608 cursor FULLY_RSV_MEMBER is
609   select 'Y'
610     from fa_track_members
611    where group_asset_id=h_group_asset_id
612      and member_asset_id=h_member_asset_id
613      and period_counter=h_period_counter
614      and (fully_reserved_flag is not null
615           or
616           fully_retired_flag is not null)
617      and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
618 
619 --* Cursor for Reallocation
620 cursor REALLOCATE_MEMBER is
621   select tr.member_asset_id,
622          tr.cost,
623          tr.allocation_basis,
624          nvl(tr.override_flag,'N') override_flag,
625          bk.adjusted_recoverable_cost,
626          bk.recoverable_cost,
627          bk.salvage_value,
628          ds.deprn_reserve,
629          ds.ytd_deprn,
630          ds.bonus_deprn_reserve,
631          ds.bonus_ytd_deprn
632     from fa_track_members tr,
633          fa_books         bk,
634          fa_deprn_summary ds,
635          fa_deprn_periods dp,
636          fa_additions_b   ad
637    where tr.group_asset_id = h_group_asset_id
638      and tr.period_counter = h_period_counter
639      and tr.fiscal_year = h_fiscal_year
640      and nvl(tr.set_of_books_id,-99) = nvl(p_set_of_books_id,-99)
641      and nvl(tr.fully_reserved_flag,'N') <> 'Y'
642 --     and nvl(tr.override_flag,'N') <> 'Y'
643      and bk.book_type_code = h_book_type_code
644      and bk.asset_id = tr.member_asset_id
645      and bk.date_effective <= nvl(dp.period_close_date,sysdate)
646      and nvl(bk.date_ineffective,sysdate) >= nvl(dp.period_close_date,sysdate)
647      and dp.book_type_code = bk.book_type_code
648      and dp.period_counter = h_period_counter
649      and ds.book_type_code = bk.book_type_code
650      and ds.period_counter = h_period_counter - 1
651      and ds.asset_id = bk.asset_id
652      and ad.asset_id = bk.asset_id
653    order by ad.asset_number;
654 
655 cursor REALLOCATE_MEMBER_MRC is
656   select tr.member_asset_id,
657          tr.cost,
658          tr.allocation_basis,
659          nvl(tr.override_flag,'N') override_flag,
660          bk.adjusted_recoverable_cost,
661          bk.recoverable_cost,
662          bk.salvage_value,
663          ds.deprn_reserve,
664          ds.ytd_deprn,
665          ds.bonus_deprn_reserve,
666          ds.bonus_ytd_deprn
667     from fa_track_members tr,
668          fa_mc_books      bk,
669          fa_mc_deprn_summary ds,
670          fa_mc_deprn_periods dp,
671          fa_additions_b   ad
672    where tr.group_asset_id = h_group_asset_id
673      and tr.period_counter = h_period_counter
674      and tr.fiscal_year = h_fiscal_year
675      and nvl(tr.set_of_books_id,-99) = nvl(p_set_of_books_id,-99)
676      and nvl(tr.fully_reserved_flag,'N') <> 'Y'
677 --     and nvl(tr.override_flag,'N') <> 'Y'
678      and bk.book_type_code = h_book_type_code
679      and bk.asset_id = tr.member_asset_id
680      and bk.set_of_books_id = p_set_of_books_id
681      and bk.date_effective <= nvl(dp.period_close_date,sysdate)
682      and nvl(bk.date_ineffective,sysdate) >= nvl(dp.period_close_date,sysdate)
683      and dp.book_type_code = bk.book_type_code
684      and dp.period_counter = h_period_counter
685      and dp.set_of_books_id = p_set_of_books_id
686      and ds.book_type_code = bk.book_type_code
687      and ds.period_counter = h_period_counter - 1
688      and ds.asset_id = bk.asset_id
689      and ds.set_of_books_id = p_set_of_books_id
690      and ad.asset_id = bk.asset_id
691    order by ad.asset_number;
692 
693 --* Cursor for Group Adjusted Cost or Recoverable Cost
694 cursor GROUP_BASIS is
695   select decode(h_excl_sv,'N',bk.adjusted_cost,bk.adjusted_cost+bk.salvage_value) adjusted_cost,
696          bk.recoverable_cost recoverable_cost
697     from fa_books bk
698    where bk.book_type_code=h_book_type_code
699      and bk.asset_id = h_group_asset_id
700      and bk.date_ineffective is null;
701 
702 cursor GROUP_BASIS_MRC is
703   select decode(h_excl_sv,'N',bk.adjusted_cost,bk.adjusted_cost+bk.salvage_value) adjusted_cost,
704          bk.recoverable_cost recoverable_cost
705     from fa_mc_books bk
706    where bk.book_type_code=h_book_type_code
707      and bk.asset_id = h_group_asset_id
708      and bk.date_ineffective is null
709      and bk.set_of_books_id = p_set_of_books_id;
710 
711 --* cursor to get period number
712 cursor GET_PERIOD_NUM(p_period_counter number) is
713   select period_num
714     from fa_deprn_periods
715    where book_type_code = h_book_type_code
716      and period_counter = p_period_counter;
717 
718 cursor GET_PERIOD_NUM_MRC(p_period_counter number) is
719   select period_num
720     from fa_mc_deprn_periods
721    where book_type_code = h_book_type_code
722      and period_counter = p_period_counter
723      and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
724 
725 --* Cursor for FA_ADJUSTMENTS
726 cursor FA_ADJ_EXPENSE(p_member_asset_id number) is
727    select sum(decode(adj.adjustment_type,'EXPENSE',
728                      decode(adj.debit_credit_flag,
729                      'DR',adj.adjustment_amount,
730                      'CR', -1 * adj.adjustment_amount))),
731           sum(decode(adj.adjustment_type,'BONUS EXPENSE',
732                      decode(adj.debit_credit_flag,
733                      'DR',adj.adjustment_amount,
734                      'CR', -1 * adj.adjustment_amount)))
735      from fa_transaction_headers th1,
736           fa_transaction_headers th2,
737           fa_adjustments adj
738     where adj.transaction_header_id = th1.transaction_header_id
739       and adj.asset_id = h_group_asset_id
740       and adj.book_type_code = h_book_type_code
741       and adj.period_counter_adjusted = h_period_counter
742       and th1.asset_id = adj.asset_id
743       and th1.member_transaction_header_id = th2.transaction_header_id
744       and th2.asset_id = nvl(p_member_asset_id,th2.asset_id);
745 
746 cursor FA_ADJ_EXPENSE_MRC (p_member_asset_id number) is
747    select sum(decode(adj.adjustment_type,'EXPENSE',
748                      decode(adj.debit_credit_flag,
749                      'DR',adj.adjustment_amount,
750                      'CR', -1 * adj.adjustment_amount))),
751           sum(decode(adj.adjustment_type,'BONUS EXPENSE',
752                      decode(adj.debit_credit_flag,
753                      'DR',adj.adjustment_amount,
754                      'CR', -1 * adj.adjustment_amount)))
755      from fa_mc_adjustments adj,
756           fa_transaction_headers th1,
757           fa_transaction_headers th2
758     where adj.transaction_header_id = th1.transaction_header_id
759       and adj.asset_id = h_group_asset_id
760       and adj.book_type_code = h_book_type_code
761       and adj.period_counter_adjusted = h_period_counter
762       and adj.set_of_books_id = p_set_of_books_id
763       and th1.asset_id = adj.asset_id
764       and th1.member_transaction_header_id = th2.transaction_header_id
765       and th2.asset_id = nvl(p_member_asset_id,th2.asset_id);
766 
767 --* Cursor for member assets not to reallocate
768 cursor FIX_AMOUNT_MEMBER is
769   select member_asset_id
770     from fa_track_members
771    where group_asset_id = P_group_asset_id
772      and period_counter = P_period_counter
773      and fiscal_year = P_fiscal_year
774      and (nvl(fully_reserved_flag,'N') = 'Y' or nvl(override_flag,'N') = 'Y');
775 
776 --* Cursor for FA_ADJUSTMENTS for unplanned depreciation
777 cursor FA_ADJ_UNPLANNED is
778    select /*+ ORDERED Index(TH2 FA_TRANSACTION_HEADERS_N1)
779                INDEX(TH1 FA_TRANSACTION_HEADERS_N7)
780                INDEX(ADJ FA_ADJUSTMENTS_U1)*/
781        sum(decode(adj.adjustment_type,'EXPENSE',
782                      decode(adj.debit_credit_flag,
783                      'DR',adj.adjustment_amount,
784                      'CR', -1 * adj.adjustment_amount)))
785      from fa_transaction_headers th2,
786           fa_transaction_headers th1,
787           fa_adjustments adj
788     where adj.transaction_header_id = th1.transaction_header_id
789       and adj.asset_id = h_group_asset_id
790       and adj.book_type_code = h_book_type_code
791       and adj.period_counter_adjusted = h_period_counter
792       and th1.asset_id = adj.asset_id
793       and th1.member_transaction_header_id = th2.transaction_header_id
794       and th2.asset_id = h_unplanned_member_asset
795       and th2.transaction_type_code = 'ADJUSTMENT'
796       and th2.transaction_key in ('UA','UE');
797 
798 cursor FA_ADJ_UNPLANNED_MEM is
799    select sum(decode(adj.adjustment_type,'EXPENSE',
800                      decode(adj.debit_credit_flag,
801                      'DR',adj.adjustment_amount,
802                      'CR', -1 * adj.adjustment_amount)))
803      from fa_adjustments adj,
804           fa_transaction_headers th
805     where adj.book_type_code = h_book_type_code
806       and adj.asset_id = h_unplanned_member_asset
807       and adj.period_counter_adjusted = h_period_counter
808       and adj.transaction_header_id = th.transaction_header_id
809       and th.transaction_type_code = 'ADJUSTMENT'
810       and th.transaction_key in ('UA','UE')
811       and nvl(adj.track_member_flag,'N') = 'N';
812 
813 cursor FA_ADJ_UNPLANNED_MRC is
814    select sum(decode(adj.adjustment_type,'EXPENSE',
815                      decode(adj.debit_credit_flag,
816                      'DR',adj.adjustment_amount,
817                      'CR', -1 * adj.adjustment_amount)))
818      from fa_mc_adjustments adj,
819           fa_transaction_headers th1,
820           fa_transaction_headers th2
821     where adj.transaction_header_id = th1.transaction_header_id
822       and adj.asset_id = h_group_asset_id
823       and adj.book_type_code = h_book_type_code
824       and adj.period_counter_adjusted = h_period_counter
825       and adj.set_of_books_id = p_set_of_books_id
826       and th1.asset_id = adj.asset_id
827       and th1.member_transaction_header_id = th2.transaction_header_id
828       and th2.asset_id = h_unplanned_member_asset
829       and th2.transaction_type_code = 'ADJUSTMENT'
830       and th2.transaction_key in ('UA','UE');
831 
832 cursor FA_ADJ_UNPLANNED_MEM_MRC is
833    select sum(decode(adj.adjustment_type,'EXPENSE',
834                      decode(adj.debit_credit_flag,
835                      'DR',adj.adjustment_amount,
836                      'CR', -1 * adj.adjustment_amount)))
837      from fa_mc_adjustments adj,
838           fa_transaction_headers th
839     where adj.book_type_code = h_book_type_code
840       and adj.asset_id = h_member_asset_id
841       and adj.set_of_books_id = p_set_of_books_id
842       and adj.period_counter_adjusted = h_period_counter
843       and adj.transaction_header_id = th.transaction_header_id
844       and th.transaction_type_code = 'ADJUSTMENT'
845       and th.transaction_key in ('UA','UE');
846 
847 -- Bug # 8394833 Added below index hint to improve the performance
848 cursor C_MEM_UNPLAN_ADJ is
849    select /*+ Index (TM fa_track_members_N1) */
850               member_asset_id
851              ,sum(decode(adj.adjustment_type,'EXPENSE'
852                  , decode(adj.debit_credit_flag, 'DR',adj.adjustment_amount
853                  , 'CR', -1 * adj.adjustment_amount))
854                  )
855    from  fa_track_members tm
856          , fa_adjustments adj
857          , fa_transaction_headers th1
858          , fa_transaction_headers th2
859    where tm.group_asset_id = P_group_asset_id
860      and tm.period_counter = P_period_counter
861      and tm.fiscal_year = P_fiscal_year
862      and nvl(tm.set_of_books_id,-99) = nvl(p_set_of_books_id,-99)
863      and adj.transaction_header_id = th1.transaction_header_id
864      and adj.asset_id = h_group_asset_id
865      and adj.book_type_code = h_book_type_code
866      and adj.period_counter_adjusted = h_period_counter
867      and th1.asset_id = adj.asset_id
868      and th1.member_transaction_header_id = th2.transaction_header_id
869      and tm.member_asset_id = th2.asset_id  /* h_unplanned_member_asset */
870      and th2.transaction_type_code = 'ADJUSTMENT'
871      and th2.transaction_key in ('UA','UE')
872    Group by member_asset_id;
873 
874 cursor C_MEM_UNPLAN_ADJ_MRC is
875    select /*+ Index (TM fa_track_members_N1) */
876               member_asset_id
877              ,sum(decode(adj.adjustment_type,'EXPENSE'
878                  , decode(adj.debit_credit_flag, 'DR',adj.adjustment_amount
879                  , 'CR', -1 * adj.adjustment_amount))
880                  )
881    from  fa_track_members tm
882          , fa_mc_adjustments adj
883          , fa_transaction_headers th1
884          , fa_transaction_headers th2
885    where tm.group_asset_id = P_group_asset_id
886       and tm.period_counter = P_period_counter
887       and tm.fiscal_year = P_fiscal_year
888       and nvl(tm.set_of_books_id,-99) = nvl(p_set_of_books_id,-99)
889       and adj.transaction_header_id = th1.transaction_header_id
890       and adj.set_of_books_id = p_set_of_books_id
891       and adj.asset_id = h_group_asset_id
892       and adj.book_type_code = h_book_type_code
893       and adj.period_counter_adjusted = h_period_counter
894       and th1.asset_id = adj.asset_id
895       and th1.member_transaction_header_id = th2.transaction_header_id
896       and tm.member_asset_id = th2.asset_id  /* h_unplanned_member_asset */
897       and th2.transaction_type_code = 'ADJUSTMENT'
898       and th2.transaction_key in ('UA','UE')
899    Group by member_asset_id;
900 
901 -- ENERGY
902 -- ENERGY
903 cursor c_get_basis_rule_name is
904   select db.rule_name
905   from   fa_deprn_basis_rules db
906        , fa_methods mt
907        , fa_books bk
908   where  db.deprn_basis_rule_id = mt.deprn_basis_rule_id
909   and    mt.method_code = bk.deprn_method_code
910   and    nvl(mt.life_in_months, -99) = nvl(bk.life_in_months, -99)
911   and    bk.book_type_code = h_book_type_code
912   and    bk.asset_id = P_group_asset_id
913   and    bk.transaction_header_id_out is null;
914 -- ENERGY
915 -- ENERGY
916 
917 --bug 11927088
918   cursor c_adj_count(c_asset_id  number) is
919     select count(1)
920     from   fa_adjustments aj
921     where  aj.asset_id = c_asset_id
922     and    aj.book_type_code = h_book_type_code
923     and    aj.period_counter_created = h_period_counter
924     and    aj.adjustment_type in ('RESERVE',  'EXPENSE')
925     and    aj.adjustment_amount <> 0;
926 
927   cursor c_mc_adj_count(c_asset_id  number) is
928     select count(1)
929     from   fa_mc_adjustments aj
930     where  aj.asset_id = c_asset_id
931     and    aj.book_type_code = h_book_type_code
932     and    aj.period_counter_created = h_period_counter
933     and    aj.adjustment_type in ('RESERVE',  'EXPENSE')
934     and    aj.adjustment_amount <> 0
935     and    aj.set_of_books_id = p_set_of_books_id;
936 
937 l_adj_count number;
938 --bug 11927088
939 
940 --Bug 6809835, 6879353
941 l_total_reserve number;
942 l_check_amount  number;
943 
944 main_err            exception;
945 
946 BEGIN <<ALLOCATE>>
947 
948    if (p_log_level_rec.statement_level) then
949       fa_debug_pkg.add(l_calling_fn,'++ ALLOCATE Started ++','+++', p_log_level_rec => p_log_level_rec);
950    end if;
951 
952    -- Set parameters into internal variables
953    h_group_asset_id := P_group_asset_id;
954    h_book_type_code := P_book_type_code;
955    h_period_counter := P_period_counter;
956    h_fiscal_year     := P_fiscal_year;
957 
958    -- Apply MRC related feature --
959    if p_mrc_sob_type_code <> 'R' then
960 
961       open GET_PERIOD_NUM(h_period_counter);
962       fetch GET_PERIOD_NUM into h_current_period_number;
963 
964       if GET_PERIOD_NUM%NOTFOUND then
965          h_current_period_number := h_period_counter - (h_fiscal_year * h_perds_per_yr);
966       end if;
967 
968       close GET_PERIOD_NUM;
969    else
970 
971       open GET_PERIOD_NUM_MRC(h_period_counter);
972       fetch GET_PERIOD_NUM_MRC into h_current_period_number;
973 
974       if GET_PERIOD_NUM_MRC%NOTFOUND then
975          h_current_period_number := h_period_counter - (h_fiscal_year * h_perds_per_yr);
976       end if;
977 
978       close GET_PERIOD_NUM_MRC;
979    end if;
980 
981    h_perds_per_yr   := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
982 
983    if (p_log_level_rec.statement_level) then
984       fa_debug_pkg.add(l_calling_fn, 'h_sob_id:book:period_ctr:cur_period_num:perds_per_fy'
985                                    , p_set_of_books_id||':'||h_book_type_code||':'||
986                                      h_period_counter||':'||h_current_period_number||':'||h_perds_per_yr, p_log_level_rec => p_log_level_rec);
987    end if;
988 
989    l_group_dbr_name := null;                            -- ENERGY
990                                                         -- ENERGY
991    OPEN c_get_basis_rule_name;                          -- ENERGY
992    FETCH c_get_basis_rule_name INTO l_group_dbr_name;   -- ENERGY
993    CLOSE c_get_basis_rule_name;                         -- ENERGY
994 
995    if (l_group_dbr_name = 'ENERGY PERIOD END BALANCE') then
996 
997       if (p_log_level_rec.statement_level) then
998                fa_debug_pkg.add(l_calling_fn, 'Call',
999                                 'fa_query_balances_pkg.query_balances', p_log_level_rec => p_log_level_rec);
1000       end if;
1001 
1002       fa_query_balances_pkg.query_balances(
1003                       X_asset_id => p_group_asset_id,
1004                       X_book => P_book_type_code,
1005                       X_period_ctr => 0,
1006                       X_dist_id => 0,
1007                       X_run_mode => 'STANDARD',
1008                       X_cost => l_temp_num,
1009                       X_deprn_rsv => l_group_reserve,
1010                       X_reval_rsv => l_temp_num,
1011                       X_ytd_deprn => l_temp_num,
1012                       X_ytd_reval_exp => l_temp_num,
1013                       X_reval_deprn_exp => l_temp_num,
1014                       X_deprn_exp => l_temp_num,
1015                       X_reval_amo => l_temp_num,
1016                       X_prod => l_temp_num,
1017                       X_ytd_prod => l_temp_num,
1018                       X_ltd_prod => l_temp_num,
1019                       X_adj_cost => l_temp_num,
1020                       X_reval_amo_basis => l_temp_num,
1021                       X_bonus_rate => l_temp_num,
1022                       X_deprn_source_code => l_temp_char,
1023                       X_adjusted_flag => l_temp_bool,
1024                       X_transaction_header_id => -1,
1025                       X_bonus_deprn_rsv => l_temp_num,
1026                       X_bonus_ytd_deprn => l_temp_num,
1027                       X_bonus_deprn_amount => l_temp_num,
1028                       X_impairment_rsv => l_temp_num,
1029                       X_ytd_impairment => l_temp_num,
1030                       X_impairment_amount => l_temp_num,
1031                       X_capital_adjustment => l_temp_num,
1032                       X_general_fund => l_temp_num,
1033                       X_mrc_sob_type_code => p_mrc_sob_type_code,
1034                       X_set_of_books_id => p_set_of_books_id,
1035                       p_log_level_rec => p_log_level_rec);
1036 
1037       if (p_log_level_rec.statement_level) then
1038          fa_debug_pkg.add(l_calling_fn, 'l_group_reserve',
1039                                 l_group_reserve, p_log_level_rec => p_log_level_rec);
1040       end if;
1041 
1042    end if; -- (l_group_dbr_name = 'ENERGY PERIOD END BALANCE')
1043 
1044    if nvl(P_group_exclude_salvage,'N') in ('YES','Y') then
1045       h_excl_sv := 'Y';
1046    else
1047       h_excl_sv := 'N';
1048    end if;
1049 
1050    -- Initialize the variables
1051    x_total_allocated_deprn_amount := 0;
1052    x_total_allocated_bonus_amount := 0;
1053    x_check_reserve_flag  := 'Y';
1054 
1055    if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
1056 
1057       if not p_track_member_table.exists(1) then
1058          if (p_log_level_rec.statement_level) then
1059             fa_debug_pkg.add(l_calling_fn, 'populate previous rows', 'call here', p_log_level_rec => p_log_level_rec);
1060          end if;
1061 
1062          if not populate_previous_rows(p_book_type_code => h_book_type_code,
1063                                        p_group_asset_id => h_group_asset_id,
1064                                        p_period_counter => h_period_counter,
1065                                        p_fiscal_year    => h_fiscal_year,
1066                                        p_transaction_header_id => null,
1067                                        p_allocate_to_fully_ret_flag => nvl(P_allocate_to_fully_ret_flag,'N'),
1068                                        p_allocate_to_fully_rsv_flag => nvl(P_allocate_to_fully_rsv_flag,'N'),
1069                                        p_mrc_sob_type_code => P_mrc_sob_type_code,
1070                                        p_set_of_books_id => P_set_of_books_id,
1071                                        p_log_level_rec => p_log_level_rec) then
1072             raise allocate_err;
1073          end if;
1074       end if; -- End of preparion for Adjustment mode
1075    end if;
1076 
1077    if (p_log_level_rec.statement_level) then
1078       fa_debug_pkg.add(l_calling_fn, 'Before start to loop for total amounts:p_track_member_table.COUNT',
1079                        p_track_member_table.count, p_log_level_rec => p_log_level_rec);
1080    end if;
1081 
1082    -- Get the Allocation Basis
1083    if nvl(P_allocate_to_fully_ret_flag,'N') = 'N' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' then
1084 
1085       if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
1086 
1087          h_total_cost := 0;
1088          h_total_adjusted_cost := 0;
1089          h_total_recoverable_cost := 0;
1090 
1091 -- issue query against fa_books_summary
1092          For i IN 1 .. p_track_member_table.COUNT LOOP
1093 
1094             if p_track_member_table(i).group_asset_id = h_group_asset_id and
1095                p_track_member_table(i).period_counter = h_period_counter and
1096                nvl(p_track_member_table(i).set_of_books_id,-99) = nvl(p_set_of_books_id, -99) then
1097 
1098                if nvl(p_track_member_table(i).fully_retired_flag,'N') = 'N' and
1099                   nvl(p_track_member_table(i).fully_reserved_flag,'N') = 'N' then
1100 
1101                   h_total_cost := h_total_cost + p_track_member_table(i).cost;
1102                   h_total_recoverable_cost := h_total_recoverable_cost + p_track_member_table(i).recoverable_cost;
1103 
1104                   if h_excl_sv = 'Y' then
1105                      h_total_adjusted_cost := h_total_adjusted_cost + p_track_member_table(i).adjusted_cost +
1106                                               p_track_member_table(i).salvage_value;
1107                   else
1108                      h_total_adjusted_cost := h_total_adjusted_cost + p_track_member_table(i).adjusted_cost;
1109                   end if;
1110                end if;
1111             end if;
1112 
1113          END LOOP;
1114 
1115       else -- Regular Mode
1116          --Bug6795984
1117 --bug6919091         if p_mrc_sob_type_code <> 'R' then
1118 --bug6919091            open MEMBERS_EX_RETIRED_TOTAL;
1119 --bug6919091            fetch MEMBERS_EX_RETIRED_TOTAL into h_total_cost,h_total_adjusted_cost,h_total_recoverable_cost;
1120 --bug6919091            close MEMBERS_EX_RETIRED_TOTAL;
1121 --bug6919091         else
1122 --bug6919091            open MEMBERS_EX_RETIRED_TOTAL_MRC;
1123 --bug6919091            fetch MEMBERS_EX_RETIRED_TOTAL_MRC into h_total_cost,h_total_adjusted_cost,h_total_recoverable_cost;
1124 --bug6919091            close MEMBERS_EX_RETIRED_TOTAL_MRC;
1125 --bug6919091         end if;
1126 
1127          if p_mrc_sob_type_code <> 'R' then
1128             open MEMBER_EX_BOTH_TOTAL;
1129             fetch MEMBER_EX_BOTH_TOTAL into h_total_cost,h_total_adjusted_cost,h_total_recoverable_cost;
1130             close MEMBER_EX_BOTH_TOTAL;
1131          else -- Reporting Book
1132             open MEMBER_EX_BOTH_TOTAL_MRC;
1133             fetch MEMBER_EX_BOTH_TOTAL_MRC into h_total_cost,h_total_adjusted_cost,h_total_recoverable_cost;
1134             close MEMBER_EX_BOTH_TOTAL_MRC;
1135          end if;
1136       end if; -- nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
1137 
1138    elsif nvl(P_allocate_to_fully_ret_flag,'N') = 'N' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'Y' then
1139 
1140       x_check_reserve_flag := 'N';
1141 
1142       if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
1143 
1144          h_total_cost := 0;
1145          h_total_adjusted_cost := 0;
1146          h_total_recoverable_cost := 0;
1147 
1148          For i IN 1 .. p_track_member_table.COUNT LOOP
1149 
1150             if p_track_member_table(i).group_asset_id = h_group_asset_id and
1151                p_track_member_table(i).period_counter = h_period_counter and
1152                nvl(p_track_member_table(i).set_of_books_id,-99) = nvl(p_set_of_books_id, -99) then
1153 
1154                if nvl(p_track_member_table(i).fully_retired_flag,'N') = 'N' then
1155                   h_total_cost := h_total_cost + p_track_member_table(i).cost;
1156                   h_total_recoverable_cost := h_total_recoverable_cost + p_track_member_table(i).recoverable_cost;
1157 
1158                   if h_excl_sv = 'Y' then
1159                      h_total_adjusted_cost := h_total_adjusted_cost + p_track_member_table(i).adjusted_cost +
1160                                               p_track_member_table(i).salvage_value;
1161                   else
1162                      h_total_adjusted_cost := h_total_adjusted_cost + p_track_member_table(i).adjusted_cost;
1163                   end if;
1164                end if;
1165             end if;
1166 
1167          END LOOP;
1168 
1169       else -- Regular Mode
1170          if p_mrc_sob_type_code <> 'R' then
1171             open MEMBERS_EX_RETIRED_TOTAL;
1172             fetch MEMBERS_EX_RETIRED_TOTAL into h_total_cost,h_total_adjusted_cost,h_total_recoverable_cost;
1173             close MEMBERS_EX_RETIRED_TOTAL;
1174          else
1175             open MEMBERS_EX_RETIRED_TOTAL_MRC;
1176             fetch MEMBERS_EX_RETIRED_TOTAL_MRC into h_total_cost,h_total_adjusted_cost,h_total_recoverable_cost;
1177             close MEMBERS_EX_RETIRED_TOTAL_MRC;
1178          end if;
1179       end if;
1180 
1181    elsif nvl(P_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' then
1182 
1183       if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
1184 
1185          h_total_cost := 0;
1186          h_total_adjusted_cost := 0;
1187          h_total_recoverable_cost := 0;
1188 
1189          For i IN 1 .. p_track_member_table.COUNT LOOP
1190 
1191             if p_track_member_table(i).group_asset_id = h_group_asset_id and
1192                p_track_member_table(i).period_counter = h_period_counter and
1193                nvl(p_track_member_table(i).set_of_books_id,-99) = nvl(p_set_of_books_id, -99) then
1194 
1195                if nvl(p_track_member_table(i).fully_reserved_flag,'N') = 'N' then
1196                   h_total_cost := h_total_cost + p_track_member_table(i).cost;
1197                   h_total_recoverable_cost := h_total_recoverable_cost + p_track_member_table(i).recoverable_cost;
1198 
1199                   if h_excl_sv = 'Y' then
1200                      h_total_adjusted_cost := h_total_adjusted_cost + p_track_member_table(i).adjusted_cost +
1201                      p_track_member_table(i).salvage_value;
1202                   else
1203                      h_total_adjusted_cost := h_total_adjusted_cost + p_track_member_table(i).adjusted_cost;
1204                   end if;
1205                end if;
1206             end if;
1207 
1208          END LOOP;
1209 
1210       else -- Regular Mode
1211         --Bug6795984
1212 --bug6919091        if p_mrc_sob_type_code <> 'R' then
1213 --bug6919091            open ALL_MEMBERS_TOTAL;
1214 --bug6919091            fetch ALL_MEMBERS_TOTAL into h_total_cost, h_total_adjusted_cost,h_total_recoverable_cost;
1215 --bug6919091            close ALL_MEMBERS_TOTAL;
1216 --bug6919091         else
1217 --bug6919091            open ALL_MEMBERS_TOTAL_MRC;
1218 --bug6919091            fetch ALL_MEMBERS_TOTAL_MRC into h_total_cost, h_total_adjusted_cost,h_total_recoverable_cost;
1219 --bug6919091            close ALL_MEMBERS_TOTAL_MRC;
1220 --bug6919091         end if;
1221 
1222          if p_mrc_sob_type_code <> 'R' then
1223             open MEMBERS_EX_RESERVED_TOTAL;
1224             fetch MEMBERS_EX_RESERVED_TOTAL into h_total_cost,h_total_adjusted_cost,h_total_recoverable_cost;
1225             close MEMBERS_EX_RESERVED_TOTAL;
1226          else
1227             open MEMBERS_EX_RESERVED_TOTAL_MRC;
1228             fetch MEMBERS_EX_RESERVED_TOTAL_MRC into h_total_cost,h_total_adjusted_cost,h_total_recoverable_cost;
1229             close MEMBERS_EX_RESERVED_TOTAL_MRC;
1230          end if;
1231       end if;
1232 
1233    else -- Both are 'Y'
1234 
1235       x_check_reserve_flag := 'N';
1236 
1237       if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
1238 
1239          h_total_cost := 0;
1240          h_total_adjusted_cost := 0;
1241          h_total_recoverable_cost := 0;
1242 
1243          For i IN 1 .. p_track_member_table.COUNT LOOP
1244 
1245             if p_track_member_table(i).group_asset_id = h_group_asset_id and
1246                p_track_member_table(i).period_counter = h_period_counter and
1247                nvl(p_track_member_table(i).set_of_books_id,-99) = nvl(p_set_of_books_id, -99) then
1248 
1249                h_total_cost := h_total_cost + p_track_member_table(i).cost;
1250                h_total_recoverable_cost := h_total_recoverable_cost + p_track_member_table(i).recoverable_cost;
1251 
1252                if h_excl_sv = 'Y' then
1253                   h_total_adjusted_cost := h_total_adjusted_cost + p_track_member_table(i).adjusted_cost +
1254                   p_track_member_table(i).salvage_value;
1255                else
1256                   h_total_adjusted_cost := h_total_adjusted_cost + p_track_member_table(i).adjusted_cost;
1257                end if;
1258             end if;
1259 
1260          END LOOP;
1261 
1262       else -- Regular Mode
1263          if p_mrc_sob_type_code <> 'R' then
1264             open ALL_MEMBERS_TOTAL;
1265             fetch ALL_MEMBERS_TOTAL into h_total_cost, h_total_adjusted_cost,h_total_recoverable_cost;
1266             close ALL_MEMBERS_TOTAL;
1267          else
1268             open ALL_MEMBERS_TOTAL_MRC;
1269             fetch ALL_MEMBERS_TOTAL_MRC into h_total_cost, h_total_adjusted_cost,h_total_recoverable_cost;
1270             close ALL_MEMBERS_TOTAL_MRC;
1271          end if;
1272       end if;
1273    end if; -- Total allocation basis logic end
1274 
1275    if (p_log_level_rec.statement_level) then
1276       fa_debug_pkg.add(l_calling_fn,'h_total_cost:h_total_adj_cost:h_total_rec_cost',
1277                        h_total_cost||':'||h_total_adjusted_cost||':'||h_total_recoverable_cost, p_log_level_rec => p_log_level_rec);
1278    end if;
1279 
1280    --* Calculate allocated amounts for all member assets
1281    -- Set Total Allocation Base for Denominator
1282    -- Bug7487450: Removed energy specific treatment as NBV part below
1283    --             takes care the calculation
1284    if P_group_deprn_basis = 'COST' then
1285       h_total_allocation_basis := h_total_recoverable_cost;
1286    else
1287       h_total_allocation_basis := h_total_adjusted_cost;
1288    end if;
1289 
1290    if (p_log_level_rec.statement_level) then
1291       fa_debug_pkg.add(l_calling_fn, 'P_mode', P_mode, p_log_level_rec => p_log_level_rec);
1292       fa_debug_pkg.add(l_calling_fn, 'l_group_dbr_name', l_group_dbr_name, p_log_level_rec => p_log_level_rec);
1293       fa_debug_pkg.add(l_calling_fn, 'P_group_deprn_basis', P_group_deprn_basis, p_log_level_rec => p_log_level_rec);
1294       fa_debug_pkg.add(l_calling_fn, 'h_total_allocation_basis', h_total_allocation_basis, p_log_level_rec => p_log_level_rec);
1295    end if;
1296 
1297    --bug6923135
1298    -- bypassing following check if the mode is DEPRECIATION so that even allocation basis is zero,
1299    -- member asset retired in this period will be picked up and gets row in FA_TRACK_MEMBERS and
1300    -- eventually gets rows in DD and DS.  Since I do not know the impact for ADJUSTMENT case, lifting this
1301    -- for DEPRECIATION only
1302    if nvl(h_total_allocation_basis,0) = 0
1303                   and nvl(P_mode,'DEPRECIATION') <> 'DEPRECIATION' --bug6923135
1304                then -- Since system cannot calculate the allocation
1305       if (p_log_level_rec.statement_level) then
1306          fa_debug_pkg.add(l_calling_fn,'Since total allocation basis is ZERO','Skip out this function', p_log_level_rec => p_log_level_rec);
1307       end if;
1308 
1309       goto skip_allocate;
1310    end if;
1311 
1312 
1313    -- Adjustment Mode
1314    if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
1315 
1316       -- Get period Number
1317       open GET_PERIOD_NUM(P_period_counter+1);
1318       fetch GET_PERIOD_NUM into h_perd_ctr;
1319 
1320       if GET_PERIOD_NUM%NOTFOUND then
1321          h_perd_ctr := (P_period_counter + 1) - (h_fiscal_year * h_perds_per_yr);
1322 
1323          if h_perd_ctr > h_perds_per_yr then
1324             h_perd_ctr := h_perd_ctr - h_perds_per_yr;
1325          end if;
1326       end if;
1327 
1328       close GET_PERIOD_NUM;
1329 
1330       For i in 1 .. p_track_member_table.COUNT loop
1331 
1332          if (p_log_level_rec.statement_level) then
1333             fa_debug_pkg.add(l_calling_fn,'adjustment-loop started: indicator of this loop', i, p_log_level_rec => p_log_level_rec);
1334             fa_debug_pkg.add(l_calling_fn,'+++ In Loop (1) +++','+++');
1335          end if;
1336 
1337          if p_track_member_table(i).group_asset_id = h_group_asset_id and
1338             p_track_member_table(i).period_counter = h_period_counter and
1339             nvl(p_track_member_table(i).set_of_books_id,-99) = nvl(p_set_of_books_id, -99) then
1340 
1341             if (nvl(P_allocate_to_fully_ret_flag,'N') = 'N' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' and
1342                 nvl(p_track_member_table(i).fully_reserved_flag,'N') = 'N' and
1343                 nvl(p_track_member_table(i).fully_retired_flag,'N') = 'N')
1344               or
1345                (nvl(P_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' and
1346                 nvl(p_track_member_table(i).fully_reserved_flag,'N') = 'N')
1347               or
1348                (nvl(P_allocate_to_fully_ret_flag,'N') = 'N' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'Y' and
1349                 nvl(p_track_member_table(i).fully_retired_flag,'N') = 'N')
1350               or
1351                (nvl(P_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'Y') then
1352 
1353                if (p_log_level_rec.statement_level) then
1354                   fa_debug_pkg.add(l_calling_fn,
1355                                    'table('||i||').group_asset_id:period_counter,sob_id,reserved_flag:retired_flag ',
1356                                    p_track_member_table(i).group_Asset_id||':'||
1357                                    p_track_member_table(i).period_counter||
1358                                    ':'|| p_track_member_table(i).set_of_books_id||':'||
1359                                    p_track_member_table(i).fully_reserved_flag||':'||
1360                                    p_track_member_table(i).fully_retired_flag);
1361                end if;
1362 
1363                l_track_member_in := p_track_member_table(i);
1364                h_deprn_reserve := nvl(l_track_member_in.deprn_reserve,0);
1365                h_bonus_deprn_reserve := nvl(l_track_member_in.bonus_deprn_reserve,0);
1366                h_member_asset_id := l_track_member_in.member_asset_id;
1367 
1368                if h_current_period_number = 1 then
1369                   h_ytd_deprn  := 0;
1370                   h_bonus_ytd_deprn := 0;
1371                else
1372                   h_ytd_deprn     := p_track_member_table(i).ytd_deprn;
1373                   h_bonus_ytd_deprn := p_track_member_table(i).bonus_ytd_deprn;
1374                end if;
1375 
1376                if (p_log_level_rec.statement_level) then
1377                   fa_debug_pkg.add(l_calling_fn, '+++ In Loop (2) ++ Loop indicator ', i);
1378                   fa_debug_pkg.add(l_calling_fn, 'member_in.member_asset_id:deprn_reserve',
1379                                    l_track_member_in.member_asset_id||':'||l_track_member_in.deprn_reserve, p_log_level_rec => p_log_level_rec);
1380                   fa_debug_pkg.add(l_calling_fn, 'h_period_num:h_ytd_deprn', h_perd_ctr||':'||h_ytd_deprn, p_log_level_rec => p_log_level_rec);
1381                end if;
1382 
1383                -- Set Allocation Basis
1384                                                                                -- ENERGY
1385                if (l_group_dbr_name = 'ENERGY PERIOD END BALANCE') then        -- ENERGY
1386                   h_allocation_basis := p_track_member_table(i).adjusted_cost; -- ENERGY
1387                elsif P_group_deprn_basis = 'COST' then                         -- ENERGY
1388                   h_allocation_basis := p_track_member_table(i).recoverable_cost;
1389                elsif h_excl_sv = 'Y' then
1390                   h_allocation_basis := p_track_member_table(i).adjusted_cost + p_track_member_table(i).salvage_value;
1391                else
1392                   h_allocation_basis := p_track_member_table(i).adjusted_cost;
1393                end if;
1394 
1395                h_rec_cost_for_odda := p_track_member_table(i).recoverable_cost;
1396                h_sv_for_odda := p_track_member_table(i).salvage_value;
1397 
1398                h_deprn_amount := P_group_deprn_amount;
1399                h_bonus_amount := nvl(P_group_bonus_amount,0);
1400                x_calc_done := 'N';
1401 
1402                if (p_log_level_rec.statement_level) then
1403                   fa_debug_pkg.add(l_calling_fn, '+++ In Loop (3) ++ Before call allocation_main', '+++');
1404                   fa_debug_pkg.add(l_calling_fn, 'h_allocation_basis:total_allocation_basis:check_reserve_flag',
1405                                    h_allocation_basis||':'||h_total_allocation_basis||':'|| x_check_reserve_flag, p_log_level_rec => p_log_level_rec);
1406                end if;
1407 
1408                -- Call Allocation_main to allocate the group amount to member assets
1409                if not allocation_main(P_book_type_code => h_book_type_code,
1410                                       P_group_asset_id => h_group_asset_id,
1411                                       P_member_asset_id => l_track_member_in.member_asset_id,
1412                                       P_period_counter => h_period_counter,
1413                                       P_fiscal_year => h_fiscal_year,
1414                                       P_group_bonus_rule => P_group_bonus_rule,
1415                                       P_group_deprn_amount => h_deprn_amount,
1416                                       P_group_bonus_amount => h_bonus_amount,
1417                                       P_allocation_basis => h_allocation_basis,
1418                                       P_total_allocation_basis => h_total_allocation_basis,
1419                                       P_ytd_deprn => h_ytd_deprn,
1420                                       P_bonus_ytd_deprn => h_bonus_ytd_deprn,
1421                                       P_track_member_in => l_track_member_in,
1422                                       P_check_reserve_flag => x_check_reserve_flag,
1423                                       P_subtraction_flag => P_subtraction_flag,
1424                                       P_group_level_override => P_group_level_override,
1425                                       P_update_override_status => P_update_override_status,
1426                                       PX_difference_deprn_amount => h_difference_deprn_amount,
1427                                       PX_difference_bonus_amount => h_difference_bonus_amount,
1428                                       X_system_deprn_amount => h_system_deprn_amount,
1429                                       X_system_bonus_amount => h_system_bonus_amount,
1430                                       X_track_member_out => l_track_member_out,
1431                                       P_mrc_sob_type_code => P_mrc_sob_type_code,
1432                                       P_set_of_books_id => p_set_of_books_id,
1433                                       P_mode => P_mode,
1434                                       P_rec_cost_for_odda => h_rec_cost_for_odda,
1435                                       P_sv_for_odda => h_sv_for_odda,
1436                                       p_log_level_rec => p_log_level_rec) then
1437                   raise allocate_err;
1438                end if; -- call allocation_main
1439 
1440                x_calc_done := 'Y';
1441 
1442                if h_perd_ctr <> 1 then
1443                   h_prior_year_reserve := nvl(p_track_member_table(i).eofy_reserve,0);
1444                   h_fiscal_year_next_period := h_fiscal_year;
1445                else -- This is the first period of the fiscal year
1446                   h_prior_year_reserve := nvl(l_track_member_out.deprn_reserve,0);
1447                   h_fiscal_year_next_period := h_fiscal_year + 1;
1448                end if;
1449 
1450                -- Update current period row of P_TRACK_MEMBER table
1451                if p_track_member_table(i).group_asset_id = h_group_Asset_id and
1452                   p_track_member_table(i).member_asset_id = l_track_member_in.member_asset_id and
1453                   p_track_member_table(i).period_counter = h_period_counter and
1454                   p_track_member_table(i).fiscal_year = h_fiscal_year and
1455                   p_track_member_table(i).set_of_books_id = nvl(p_set_of_books_id, -99) then
1456 
1457                   p_track_member_table(i).cost := l_track_member_out.cost;
1458                   p_track_member_table(i).adjusted_cost := l_track_member_out.adjusted_cost;
1459                   p_track_member_table(i).recoverable_cost := l_track_member_out.recoverable_cost;
1460                   p_track_member_table(i).salvage_value := l_track_member_out.salvage_value;
1461                   p_track_member_table(i).adjusted_recoverable_cost := l_track_member_out.adjusted_recoverable_cost;
1462                   p_track_member_table(i).allocation_basis := l_track_member_out.allocation_basis;
1463                   p_track_member_table(i).total_allocation_basis := l_track_member_out.total_allocation_basis;
1464                   p_track_member_table(i).allocated_deprn_amount := l_track_member_out.allocated_deprn_amount;
1465                   p_track_member_table(i).allocated_bonus_amount := l_track_member_out.allocated_bonus_amount;
1466                   p_track_member_table(i).fully_reserved_flag := l_track_member_out.fully_reserved_flag;
1467                   p_track_member_table(i).system_deprn_amount := l_track_member_out.system_deprn_amount;
1468                   p_track_member_table(i).system_bonus_amount := l_track_member_out.system_bonus_amount;
1469                   p_track_member_table(i).override_flag := l_track_member_out.override_flag;
1470                   p_track_member_table(i).deprn_reserve := l_track_member_out.deprn_reserve;
1471                   p_track_member_table(i).ytd_deprn := l_track_member_out.ytd_deprn;
1472                   p_track_member_table(i).bonus_deprn_reserve := l_track_member_out.bonus_deprn_reserve;
1473                   p_track_member_table(i).bonus_ytd_deprn := l_track_member_out.bonus_ytd_deprn;
1474 
1475                   l_last_asset_index := i;
1476 
1477                   if (p_log_level_rec.statement_level) then
1478                      fa_debug_pkg.add(l_calling_fn, 'Updated current period row into p_track_member_table', '***');
1479 
1480                      if not display_debug_message2(i, l_calling_fn,
1481 p_log_level_rec) then
1482                         fa_debug_pkg.add(l_calling_fn, 'display_debug_message2', 'error returned', p_log_level_rec => p_log_level_rec);
1483                      end if;
1484 
1485                   end if;
1486                end if;
1487 
1488             end if;
1489 
1490          end if; -- This record is for this group and period?
1491 
1492       end loop;
1493 
1494    else -- Regular Mode
1495 
1496       h_deprn_amount := P_group_deprn_amount;
1497       h_bonus_amount := nvl(P_group_bonus_amount,0);
1498 
1499       -- Added code for group depreciation amount in case of year end balance
1500       -- passed group amount doesn't include current period catchup expense,
1501       -- so add up the catchup expense at this place
1502       if nvl(P_subtraction_flag,'N') = 'Y' then
1503          if (p_log_level_rec.statement_level) then
1504             fa_debug_pkg.add(l_calling_fn,'++ Start to add current period expense catch up ++','+++', p_log_level_rec => p_log_level_rec);
1505          end if;
1506 
1507          if p_mrc_sob_type_code <> 'R' then
1508             -- Get group level adjustment
1509             open FA_ADJ_EXPENSE(to_number(NULL));
1510             fetch FA_ADJ_EXPENSE into h_deprn_expense, h_bonus_expense;
1511             close FA_ADJ_EXPENSE;
1512          else
1513             -- Get group level adjustment
1514             open FA_ADJ_EXPENSE_MRC(to_number(NULL));
1515             fetch FA_ADJ_EXPENSE_MRC into h_deprn_expense, h_bonus_expense;
1516             close FA_ADJ_EXPENSE_MRC;
1517          end if;
1518 
1519          if (p_log_level_rec.statement_level) then
1520             fa_debug_pkg.add(l_calling_fn, 'h_deprn_expense:h_bonus_expense', h_deprn_expense||':'||h_bonus_expense, p_log_level_rec => p_log_level_rec);
1521          end if;
1522 
1523   --       h_deprn_amount := h_deprn_amount + nvl(h_deprn_expense,0);
1524   --       h_bonus_amount := h_bonus_amount + nvl(h_bonus_expense,0);
1525       end if;
1526 
1527       h_added_group_deprn_amount := h_deprn_amount;
1528       h_added_group_bonus_amount := h_bonus_amount;
1529 
1530       if p_mrc_sob_type_code <> 'R' then
1531 
1532          For mem in ALL_MEMBERS loop
1533             if (p_log_level_rec.statement_level) then
1534                fa_debug_pkg.add(l_calling_fn, 'asset_id', mem.asset_id, p_log_level_rec => p_log_level_rec);
1535                fa_debug_pkg.add(l_calling_fn, 'P_allocate_to_fully_ret_flag', P_allocate_to_fully_ret_flag, p_log_level_rec => p_log_level_rec);
1536                fa_debug_pkg.add(l_calling_fn, 'P_allocate_to_fully_rsv_flag', P_allocate_to_fully_rsv_flag, p_log_level_rec => p_log_level_rec);
1537                fa_debug_pkg.add(l_calling_fn, 'mem.period_counter_fully_reserved', mem.period_counter_fully_reserved, p_log_level_rec => p_log_level_rec);
1538                fa_debug_pkg.add(l_calling_fn, 'mem.period_counter_fully_retired', mem.period_counter_fully_retired, p_log_level_rec => p_log_level_rec);
1539                fa_debug_pkg.add(l_calling_fn, 'h_period_counter', h_period_counter, p_log_level_rec => p_log_level_rec);
1540 
1541                fa_debug_pkg.add(l_calling_fn,'regular-loop started: ', '(1)++Primary/Non-MRC Book');
1542                fa_debug_pkg.add(l_calling_fn,'+++ In Loop (1) +++','+++');
1543             end if;
1544 
1545             OPEN c_adj_count(mem.asset_id);
1546             FETCH c_adj_count INTO l_adj_count;
1547             CLOSE c_adj_count;
1548 
1549             --ENERGY
1550             if (nvl(P_allocate_to_fully_ret_flag,'N') = 'N' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' and
1551                (mem.period_counter_fully_reserved is NULL or mem.period_counter_fully_reserved = h_period_counter) and /*Bug#9145376 */
1552                (mem.period_counter_fully_retired is NULL  or mem.period_counter_fully_retired = h_period_counter)) -- ENERGY
1553               or
1554                (nvl(P_allocate_to_fully_ret_flag,'N') = 'N' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' and -- Bug6923135
1555                 (mem.period_counter_fully_retired = h_period_counter))                                          -- Bug6923135
1556               or
1557                (nvl(P_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' and
1558                 mem.period_counter_fully_reserved is NULL)
1559               or
1560                (nvl(P_allocate_to_fully_ret_flag,'N') = 'N' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'Y' and
1561                 (mem.period_counter_fully_retired is NULL or mem.period_counter_fully_retired = h_period_counter)) -- ENERGY
1562               or
1563                (nvl(P_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'Y')
1564               or
1565                (l_adj_count > 0) then
1566 
1567               l_reserve_amount := 0;                  -- ENERGY
1568               OPEN c_get_adj(mem.asset_id);           -- ENERGY
1569               FETCH c_get_adj INTO l_reserve_amount;  -- ENERGY
1570               CLOSE c_get_adj;                        -- ENERGY
1571               if (p_log_level_rec.statement_level) then
1572                  fa_debug_pkg.add(l_calling_fn,'l_reserve_amount', l_reserve_amount, p_log_level_rec => p_log_level_rec);
1573                  fa_debug_pkg.add(l_calling_fn,'mem.deprn_reserve', mem.deprn_reserve, p_log_level_rec => p_log_level_rec);
1574               end if;
1575 
1576                l_track_member_in.deprn_reserve := mem.deprn_reserve + l_reserve_amount; -- ENERGY
1577                l_track_member_in.reserve_adjustment_amount := l_reserve_amount;         -- ENERGY
1578 --               h_deprn_reserve := mem.deprn_reserve;                                  -- ENERGY
1579                 h_deprn_reserve := mem.deprn_reserve + l_reserve_amount;                -- ENERGY
1580                h_member_asset_id := mem.asset_id;
1581 
1582                if (p_log_level_rec.statement_level) then
1583                   fa_debug_pkg.add(l_calling_fn, '+++ In Loop (2) ++ Member Asset to be processed ',
1584                                    h_member_asset_id);
1585                end if;
1586 
1587                -- Check fiscal year of populated deprn summary
1588                select fiscal_year into h_ds_fy
1589                  from fa_deprn_periods
1590                 where book_type_code = h_book_type_code
1591                   and period_counter = mem.period_counter;
1592 
1593                if h_fiscal_year <> h_ds_fy then
1594                   mem.ytd_deprn := 0;
1595                   mem.bonus_ytd_deprn := 0;
1596                end if;
1597 
1598                if h_current_period_number = 1 then
1599                   h_ytd_deprn := 0;
1600                   h_bonus_ytd_deprn := 0;
1601                else
1602                   h_ytd_deprn := mem.ytd_deprn;
1603                   h_bonus_ytd_deprn := mem.bonus_ytd_deprn;
1604                end if;
1605 
1606                l_track_member_in.bonus_deprn_reserve := mem.bonus_deprn_reserve;
1607                l_track_member_in.member_asset_id := mem.asset_id;
1608                l_track_member_in.salvage_value   := mem.salvage_value;
1609 
1610                if h_excl_sv = 'Y' then
1611                   l_track_member_in.adjusted_cost := mem.adjusted_cost - mem.salvage_value;
1612                else
1613                   l_track_member_in.adjusted_cost := mem.adjusted_cost;
1614                end if;
1615 
1616                l_track_member_in.recoverable_cost := mem.recoverable_cost;
1617                h_recoverable_cost := l_track_member_in.recoverable_cost;
1618                l_track_member_in.adjusted_recoverable_cost := mem.adjusted_recoverable_cost;
1619                h_adjusted_recoverable_cost := l_track_member_in.adjusted_recoverable_cost;
1620                l_track_member_in.cost := mem.cost;
1621 
1622                -- Set Allocation Basis
1623                if (l_group_dbr_name = 'ENERGY PERIOD END BALANCE') then        -- ENERGY
1624                   h_allocation_basis := l_track_member_in.recoverable_cost - l_track_member_in.deprn_reserve; -- ENERGY
1625                elsif P_group_deprn_basis = 'COST' then                         -- ENERGY
1626                   h_allocation_basis := mem.recoverable_cost;
1627                else
1628                   h_allocation_basis := mem.adjusted_cost;
1629                end if;
1630 
1631                h_rec_cost_for_odda := mem.recoverable_cost;
1632                h_sv_for_odda := mem.salvage_value;
1633 
1634                x_calc_done := 'N';
1635 
1636                if (p_log_level_rec.statement_level) then
1637                   fa_debug_pkg.add(l_calling_fn, '+++ In Loop (3) ++ Before call allocation_main', '+++');
1638                   fa_debug_pkg.add(l_calling_fn, 'h_allocation_basis:total_allocation_basis:check_reserve_flag',
1639                                    h_allocation_basis||':'||h_total_allocation_basis||':'||x_check_reserve_flag, p_log_level_rec => p_log_level_rec);
1640                end if;
1641 
1642                -- Call Allocation_main to allocate the group amount to member assets
1643                if not allocation_main(P_book_type_code => h_book_type_code,
1644                                       P_group_asset_id => h_group_asset_id,
1645                                       P_member_asset_id => mem.asset_id,
1646                                       P_period_counter => h_period_counter,
1647                                       P_fiscal_year => h_fiscal_year,
1648                                       P_group_bonus_rule => P_group_bonus_rule,
1649                                       P_group_deprn_amount => h_deprn_amount,
1650                                       P_group_bonus_amount => h_bonus_amount,
1651                                       P_allocation_basis => h_allocation_basis,
1652                                       P_total_allocation_basis => h_total_allocation_basis,
1653                                       P_ytd_deprn => h_ytd_deprn,
1654                                       P_bonus_ytd_deprn => h_bonus_ytd_deprn,
1655                                       P_track_member_in => l_track_member_in,
1656                                       P_check_reserve_flag => x_check_reserve_flag,
1657                                       P_subtraction_flag => P_subtraction_flag,
1658                                       P_group_level_override => P_group_level_override,
1659                                       P_update_override_status => P_update_override_status,
1660                                       PX_difference_deprn_amount => h_difference_deprn_amount,
1661                                       PX_difference_bonus_amount => h_difference_bonus_amount,
1662                                       X_system_deprn_amount => h_system_deprn_amount,
1663                                       X_system_bonus_amount => h_system_bonus_amount,
1664                                       X_track_member_out => l_track_member_out,
1665                                       P_mrc_sob_type_code => 'P',
1666                                       P_set_of_books_id => P_set_of_books_id,
1667                                       P_mode => P_mode,
1668                                       P_rec_cost_for_odda => h_rec_cost_for_odda,
1669                                       P_sv_for_odda => h_sv_for_odda,
1670                                       p_log_level_rec => p_log_level_rec) then
1671                   raise allocate_err;
1672                end if; -- call allocation main
1673                x_calc_done := 'Y';
1674 
1675                --
1676                -- This is necessary because original adj cost update was performed when group
1677                -- adj cost was updated but at that time, member adj cost was not updated
1678                -- correctly because of lack of allocated unplanned amounts
1679                --
1680                if (l_group_dbr_name = 'ENERGY PERIOD END BALANCE') and                                          -- ENERGY
1681                   (mem.asset_id is not null) and                                                                -- ENERGY
1682                   (nvl(l_track_member_out.allocated_deprn_amount, 0) <> 0) and                                  -- ENERGY
1683                   (nvl(P_mode,'DEPRECIATION') = 'UNPLANNED') then                                               -- ENERGY
1684                                                                                                                 -- ENERGY
1685                   update fa_books                                                                               -- ENERGY
1686                   set    adjusted_cost = adjusted_cost - nvl(l_track_member_out.allocated_deprn_amount, 0)      -- ENERGY
1687                   where transaction_header_id_out is null                                                       -- ENERGY
1688                   and   asset_id = mem.asset_id                                                                 -- ENERGY
1689                   and   book_type_code = h_book_type_code;                                                      -- ENERGY
1690                                                                                                                 -- ENERGY
1691                end if;                                                                                          -- ENERGY
1692 
1693             end if; -- check flag
1694          end loop;
1695 
1696       else -- Reporting Book Case
1697 
1698          For mem in ALL_MEMBERS_MRC loop
1699 
1700             if (p_log_level_rec.statement_level) then
1701                fa_debug_pkg.add(l_calling_fn,'regular-loop started: ', '(1)++Reporting Book');
1702                fa_debug_pkg.add(l_calling_fn,'+++ In Loop (1) +++','+++');
1703             end if;
1704 
1705             OPEN c_mc_adj_count(mem.asset_id);
1706             FETCH c_mc_adj_count INTO l_adj_count;
1707             CLOSE c_mc_adj_count;
1708 
1709             if (nvl(P_allocate_to_fully_ret_flag,'N') = 'N' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' and
1710                 mem.period_counter_fully_reserved is NULL and (mem.period_counter_fully_retired is NULL or  -- ENERGY
1711                                                                mem.period_counter_fully_retired = h_period_counter)) -- ENERGY
1712               or
1713                (nvl(P_allocate_to_fully_ret_flag,'N') = 'N' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' and -- Bug6923135
1714                 (mem.period_counter_fully_retired = h_period_counter))                                          -- Bug6923135
1715               or
1716                (nvl(P_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' and
1717                 mem.period_counter_fully_reserved is NULL)
1718               or
1719                (nvl(P_allocate_to_fully_ret_flag,'N') = 'N' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'Y' and
1720                 (mem.period_counter_fully_retired is NULL or mem.period_counter_fully_retired = h_period_counter)) -- ENERGY
1721               or
1722                (nvl(P_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(P_allocate_to_fully_rsv_flag,'N') = 'Y')
1723               or
1724                (l_adj_count > 0) then
1725 
1726               l_reserve_amount := 0;                  -- ENERGY
1727               OPEN c_get_mc_adj(mem.asset_id);           -- ENERGY
1728               FETCH c_get_mc_adj INTO l_reserve_amount;  -- ENERGY
1729               CLOSE c_get_mc_adj;                        -- ENERGY
1730               if (p_log_level_rec.statement_level) then
1731                  fa_debug_pkg.add(l_calling_fn,'l_reserve_amount', l_reserve_amount, p_log_level_rec => p_log_level_rec);
1732                  fa_debug_pkg.add(l_calling_fn,'mem.deprn_reserve', mem.deprn_reserve, p_log_level_rec => p_log_level_rec);
1733               end if;
1734 
1735                l_track_member_in.deprn_reserve := mem.deprn_reserve + l_reserve_amount; -- ENERGY
1736                l_track_member_in.reserve_adjustment_amount := l_reserve_amount;         -- ENERGY
1737                h_deprn_reserve := mem.deprn_reserve + l_reserve_amount;                -- ENERGY
1738 
1739                l_track_member_in.deprn_reserve := h_deprn_reserve;
1740                h_member_asset_id := mem.asset_id;
1741 
1742                if (p_log_level_rec.statement_level) then
1743                   fa_debug_pkg.add(l_calling_fn, '+++ In Loop (2) ++ Member Asset to be processed ',
1744                                    h_member_asset_id);
1745                end if;
1746 
1747                -- Check fiscal year of populated deprn summary
1748                select fiscal_year into h_ds_fy
1749                  from fa_mc_deprn_periods
1750                 where book_type_code = h_book_type_code
1751                   and period_counter = mem.period_counter
1752                   and set_of_books_id = p_set_of_books_id;
1753 
1754                if h_fiscal_year <> h_ds_fy then
1755                   mem.ytd_deprn := 0;
1756                   mem.bonus_ytd_deprn := 0;
1757                end if;
1758 
1759                if h_current_period_number = 1 then
1760                   h_ytd_deprn := 0;
1761                   h_bonus_ytd_deprn := 0;
1762                else
1763                   h_ytd_deprn := mem.ytd_deprn;
1764                   h_bonus_ytd_deprn := mem.bonus_ytd_deprn;
1765                end if;
1766 
1767                l_track_member_in.bonus_deprn_reserve := mem.bonus_deprn_reserve;
1768                l_track_member_in.member_asset_id := mem.asset_id;
1769                l_track_member_in.salvage_value   := mem.salvage_value;
1770 
1771                if h_excl_sv = 'Y' then
1772                   l_track_member_in.adjusted_cost := mem.adjusted_cost - mem.salvage_value;
1773                else
1774                   l_track_member_in.adjusted_cost := mem.adjusted_cost;
1775                end if;
1776 
1777                l_track_member_in.recoverable_cost := mem.recoverable_cost;
1778                h_recoverable_cost := l_track_member_in.recoverable_cost;
1779                l_track_member_in.adjusted_recoverable_cost := mem.adjusted_recoverable_cost;
1780                h_adjusted_recoverable_cost := l_track_member_in.adjusted_recoverable_cost;
1781                l_track_member_in.cost := mem.cost;
1782 
1783                -- Set Allocation Basis
1784                if P_group_deprn_basis = 'COST' then
1785                   h_allocation_basis := mem.recoverable_cost;
1786                else
1787                   h_allocation_basis := mem.adjusted_cost;
1788                end if;
1789 
1790                h_rec_cost_for_odda := mem.recoverable_cost;
1791                h_sv_for_odda := mem.salvage_value;
1792 
1793                if (p_log_level_rec.statement_level) then
1794                   fa_debug_pkg.add(l_calling_fn, '+++ In Loop (3) ++ Before call allocation_main', '+++');
1795                   fa_debug_pkg.add(l_calling_fn, 'h_allocation_basis:total_allocation_basis:check_reserve_flag',
1796                                 h_allocation_basis||':'||h_total_allocation_basis||':'||x_check_reserve_flag, p_log_level_rec => p_log_level_rec);
1797                end if;
1798 
1799                -- Call Allocation_main to allocate the group amount to member assets
1800                if not allocation_main(P_book_type_code => h_book_type_code,
1801                                    P_group_asset_id => h_group_asset_id,
1802                                    P_member_asset_id => mem.asset_id,
1803                                    P_period_counter => h_period_counter,
1804                                    P_fiscal_year => h_fiscal_year,
1805                                    P_group_bonus_rule => P_group_bonus_rule,
1806                                    P_group_deprn_amount => h_deprn_amount,
1807                                    P_group_bonus_amount => h_bonus_amount,
1808                                    P_allocation_basis => h_allocation_basis,
1809                                    P_total_allocation_basis => h_total_allocation_basis,
1810                                    P_ytd_deprn => h_ytd_deprn,
1811                                    P_bonus_ytd_deprn => h_bonus_ytd_deprn,
1812                                    P_track_member_in => l_track_member_in,
1813                                    P_check_reserve_flag => x_check_reserve_flag,
1814                                    P_subtraction_flag => P_subtraction_flag,
1815                                    P_group_level_override => P_group_level_override,
1816                                    P_update_override_status => P_update_override_status,
1817                                    PX_difference_deprn_amount => h_difference_deprn_amount,
1818                                    PX_difference_bonus_amount => h_difference_bonus_amount,
1819                                    X_system_deprn_amount => h_system_deprn_amount,
1820                                    X_system_bonus_amount => h_system_bonus_amount,
1821                                    X_track_member_out => l_track_member_out,
1822                                    P_mrc_sob_type_code => 'R',
1823                                    P_set_of_books_id => p_set_of_books_id,
1824                                    P_mode => P_mode,
1825                                    P_rec_cost_for_odda => h_rec_cost_for_odda,
1826                                    P_sv_for_odda => h_sv_for_odda,
1827                                    p_log_level_rec => p_log_level_rec) then
1828                   raise allocate_err;
1829                end if; -- call allocation main
1830 
1831                x_calc_done := 'Y';
1832 
1833                --
1834                -- This is necessary because original adj cost update was performed when group
1835                -- adj cost was updated but at that time, member adj cost was not updated
1836                -- correctly because of lack of allocated unplanned amounts
1837                --
1838                if (l_group_dbr_name = 'ENERGY PERIOD END BALANCE') and                                          -- ENERGY
1839                   (mem.asset_id is not null) and                                                                -- ENERGY
1840                   (nvl(l_track_member_out.allocated_deprn_amount, 0) <> 0) and                                  -- ENERGY
1841                   (nvl(P_mode,'DEPRECIATION') = 'UNPLANNED') then                                               -- ENERGY
1842 
1843                   update fa_mc_books                                                                         -- ENERGY
1844                   set    adjusted_cost = adjusted_cost - nvl(l_track_member_out.allocated_deprn_amount, 0)      -- ENERGY
1845                   where transaction_header_id_out is null                                                       -- ENERGY
1846                   and   asset_id = mem.asset_id                                                                 -- ENERGY
1847                   and   book_type_code = h_book_type_code                                                      -- ENERGY
1848                   and   set_of_books_id = p_set_of_books_id;
1849 
1850                end if;                                                                                          -- ENERGY
1851 
1852             end if; -- check flag
1853          end loop;
1854       end if; -- Check Primary book or Reporting Book?
1855    end if; -- Case for RUN_MODE
1856 
1857    -- Following is a logic for last asset (whose asset numbre is biggest.)
1858 
1859    if nvl(x_calc_done,'N') = 'Y' and nvl(l_track_member_out.override_flag,'N') <> 'Y' then
1860 
1861       if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
1862          if (p_log_level_rec.statement_level) then
1863             fa_debug_pkg.add(l_calling_fn, '+++ Final Asset Rounding Logic', 'for ADJUSTMENT', p_log_level_rec => p_log_level_rec);
1864          end if;
1865 
1866          x_sum_of_deprn_amount := 0;
1867          x_sum_of_bonus_amount := 0;
1868 
1869          For j IN 1 .. p_track_member_table.COUNT LOOP
1870             if p_track_member_table(j).group_asset_id = h_group_asset_id and
1871                p_track_member_table(j).period_counter = h_period_counter and
1872                nvl(p_track_member_table(j).set_of_books_id, -99) = nvl(p_set_of_books_id,-99) and
1873                p_track_member_table(j).member_asset_id <> l_track_member_in.member_asset_id then
1874 
1875                x_sum_of_deprn_amount := x_sum_of_deprn_amount + nvl(p_track_member_table(j).system_deprn_amount,0);
1876                x_sum_of_bonus_amount := x_sum_of_bonus_amount + nvl(p_track_member_table(j).system_bonus_amount,0);
1877 
1878             end if;
1879          END LOOP;
1880       else
1881          if (p_log_level_rec.statement_level) then
1882             fa_debug_pkg.add(l_calling_fn, '+++ Final Asset Rounding Logic', 'for DEPRECIATION', p_log_level_rec => p_log_level_rec);
1883          end if;
1884 
1885          select nvl(sum(system_deprn_amount),0),
1886                 nvl(sum(system_bonus_amount),0)
1887            into x_sum_of_deprn_amount,x_sum_of_bonus_amount
1888            from fa_track_members
1889            where group_asset_id = P_group_asset_id
1890             and member_asset_id <> l_track_member_in.member_asset_id
1891             and period_counter = P_period_counter
1892             and fiscal_year    = P_fiscal_year
1893             and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
1894 
1895          --Bug6916669
1896          --to check if the last member is already fully reserved
1897           begin
1898                   select fully_reserved_flag
1899                    into x_fully_reserved_flag
1900                    from fa_track_members
1901                    where group_asset_id = P_group_asset_id
1902                     and member_asset_id = l_track_member_in.member_asset_id
1903                     and period_counter = P_period_counter
1904                     and fiscal_year    = P_fiscal_year
1905                     and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
1906           exception
1907                 When Others then
1908                  x_fully_reserved_flag := 'N';
1909           end;
1910       end if;
1911 
1912       if (p_log_level_rec.statement_level) then
1913          fa_debug_pkg.add(l_calling_fn, 'x_sum_of_deprn:bonus_amount',
1914                           x_sum_of_deprn_amount||':'||x_sum_of_bonus_amount, p_log_level_rec => p_log_level_rec);
1915       end if;
1916 
1917       -- Final Asset Rounding Adjustment
1918       x_allocated_deprn_amount := P_group_deprn_amount - x_sum_of_deprn_amount; -- h_system_deprn_amount);
1919       x_allocated_bonus_amount := nvl(P_group_bonus_amount,0) - nvl(x_sum_of_bonus_amount,0);
1920                                                                                 -- nvl(h_system_bonus_amount,0));
1921 
1922       h_system_deprn_amount := x_allocated_deprn_amount;
1923       h_system_bonus_amount := x_allocated_bonus_amount;
1924 
1925       -- In case subtraction flag is set, subtract previous ytd from current ytd
1926       if nvl(P_subtraction_flag,'N') = 'Y' then
1927          x_allocated_deprn_amount := x_allocated_deprn_amount - h_ytd_deprn;
1928          x_allocated_bonus_amount := x_allocated_bonus_amount - h_bonus_ytd_deprn;
1929       end if;
1930 
1931       if (p_log_level_rec.statement_level) then
1932          fa_debug_pkg.add(l_calling_fn, 'x_allocated_deprn:bonus_amount(1)', x_allocated_deprn_amount||':'||
1933                           x_allocated_bonus_amount);
1934          fa_debug_pkg.add(l_calling_fn, 'x_check_reserve_flag', x_check_reserve_flag, p_log_level_rec => p_log_level_rec);
1935       end if;
1936 
1937       if nvl(x_check_reserve_flag,'N') = 'Y' then -- Check is necessary only when allocate_fully_reserve flag is 'N'.
1938          -- Check if this member asset is not fully reserved due to this allocated amount.
1939          x_check_amount := l_track_member_in.adjusted_recoverable_cost;
1940 
1941          if (p_log_level_rec.statement_level) then
1942             fa_debug_pkg.add(l_calling_fn, 'member_in.deprn_reserve', l_track_member_in.deprn_reserve, p_log_level_rec => p_log_level_rec);
1943             fa_debug_pkg.add(l_calling_fn, 'x_allocated_deprn:bonus_amount(2)', x_allocated_deprn_amount||':'||
1944                              x_allocated_bonus_amount);
1945             fa_debug_pkg.add(l_calling_fn, 'x_check_amount', x_check_amount, p_log_level_rec => p_log_level_rec);
1946          end if;
1947 
1948 
1949 
1950         -- Bug6987667:Old way did not handle when cost is -ve and rsv is +ve.
1951         -- So modified to multiply -1 if cost is -ve.
1952         --Bug6809835 Modified fix done for bug 6520356
1953         --abs should only be taken if total reserve and cost are both -ive
1954         -- Bug 6879353 : Use local variables instead of modifying the actual values
1955         if (x_check_amount < 0) then
1956             l_total_reserve := -1*(l_track_member_in.deprn_reserve + x_allocated_deprn_amount);
1957             l_check_amount := -1*(x_check_amount);
1958         else
1959             l_total_reserve := l_track_member_in.deprn_reserve + x_allocated_deprn_amount;
1960             l_check_amount := x_check_amount;
1961         end if;
1962 
1963         --Bug6916669
1964          --to check if the last member is already fully reserved
1965         -- Bug 6879353 : Use local variables for the check
1966         if ( l_total_reserve >= l_check_amount ) or ( nvl(x_fully_reserved_flag,'N') = 'Y' ) then
1967             x_fully_reserved_flag := 'Y';
1968 
1969             --Bug7008015: reset allocate_deprn_amount only if it was not fully reserved even before allocation
1970             -- This is to avoid backing out and reallocate rsv due to downward cost adjustments
1971             -- if reserve (before allocation) is greater than the adjusted_recoverable_cost, then allocate 0 amount
1972             -- and add original allocated amount as difference and reallocate it to other member assets
1973             if ((x_check_amount < 0) and
1974                 (l_check_amount > -1*(l_track_member_in.deprn_reserve))) or
1975                ((x_check_amount > 0) and
1976                 (l_check_amount > (l_track_member_in.deprn_reserve))) then
1977                h_difference_deprn_amount := h_difference_deprn_amount + (x_allocated_deprn_amount - x_check_amount);
1978                x_allocated_deprn_amount := x_check_amount - l_track_member_in.deprn_reserve;
1979             else
1980                h_difference_deprn_amount := h_difference_deprn_amount + x_allocated_deprn_amount;
1981                x_allocated_deprn_amount := 0;
1982             end if;
1983 
1984             if P_group_bonus_rule is not null then
1985 
1986                x_allocated_normal_amount := x_allocated_deprn_amount - l_track_member_out.allocated_bonus_amount;
1987 
1988                if (x_allocated_deprn_amount - x_allocated_normal_amount < x_check_amount) and
1989                   (x_allocated_deprn_amount - x_allocated_normal_amount > 0) then
1990 
1991                   h_difference_bonus_amount := h_difference_bonus_amount + (x_allocated_bonus_amount -
1992                                                (x_allocated_deprn_amount - x_allocated_normal_amount));
1993                   x_allocated_bonus_amount := x_allocated_deprn_amount - x_allocated_normal_amount;
1994                else
1995                   h_difference_bonus_amount := h_difference_bonus_amount + x_allocated_bonus_amount;
1996                   x_allocated_bonus_amount := 0;
1997                end if;
1998             end if;
1999          end if; -- Check if this asset becomes fully reserved
2000       end if;
2001 
2002       -- Get Period number
2003       if p_mrc_sob_type_code <> 'R' then
2004 
2005          open GET_PERIOD_NUM(P_period_counter);
2006          fetch GET_PERIOD_NUM into h_period_num;
2007 
2008          if GET_PERIOD_NUM%NOTFOUND then
2009             h_period_num := P_period_counter - (P_fiscal_year * h_perds_per_yr);
2010          end if;
2011 
2012          close GET_PERIOD_NUM;
2013       else
2014 
2015          open GET_PERIOD_NUM_MRC(P_period_counter);
2016          fetch GET_PERIOD_NUM_MRC into h_period_num;
2017 
2018          if GET_PERIOD_NUM_MRC%NOTFOUND then
2019             h_period_num := P_period_counter - (P_fiscal_year * h_perds_per_yr);
2020          end if;
2021 
2022          close GET_PERIOD_NUM_MRC;
2023       end if;
2024 
2025       -- Reduce subtraction case
2026       if nvl(P_mode,'DEPRECIATION') = 'DEPRECIATION' and nvl(P_subtraction_flag,'N') = 'Y' then
2027 
2028          -- Subtract group level catchup expense since it will be added later.
2029          h_deprn_expense := 0;
2030          h_bonus_expense := 0;
2031 
2032          if p_mrc_sob_type_code <> 'R' then
2033             open FA_ADJ_EXPENSE(l_track_member_in.member_asset_id);
2034             fetch FA_ADJ_EXPENSE into h_deprn_expense, h_bonus_expense;
2035             close FA_ADJ_EXPENSE;
2036          else
2037             open FA_ADJ_EXPENSE_MRC(l_track_member_in.member_asset_id);
2038             fetch FA_ADJ_EXPENSE_MRC into h_deprn_expense, h_bonus_expense;
2039             close FA_ADJ_EXPENSE_MRC;
2040          end if;
2041 
2042          x_allocated_deprn_amount := x_allocated_deprn_amount - nvl(h_deprn_expense,0);
2043          x_allocated_bonus_amount := x_allocated_bonus_amount - nvl(h_bonus_expense,0);
2044  --        X_system_deprn_amount := x_system_deprn_amount - nvl(h_deprn_expense,0);
2045  --        X_system_bonus_amount := x_system_bonus_amount - nvl(h_bonus_expense,0);
2046          if (p_log_level_rec.statement_level) then
2047             fa_debug_pkg.add(l_calling_fn, '** after Subtraction Case **', '***');
2048             fa_debug_pkg.add(l_calling_fn, 'x_allocated_deprn:bonus_amount',
2049                              x_allocated_deprn_amount||':'||x_allocated_deprn_amount, p_log_level_rec => p_log_level_rec);
2050             fa_debug_pkg.add(l_calling_fn, 'h_deprn:bonus_expense', h_deprn_expense||':'||h_bonus_expense, p_log_level_rec => p_log_level_rec);
2051          end if;
2052       end if;
2053 
2054       -- Calculate Deprn Reserve
2055 --      h_deprn_reserve := nvl(h_deprn_reserve,0) + nvl(x_allocated_deprn_amount,0); -- ENERGY
2056       h_deprn_reserve := nvl(h_deprn_reserve,0) + nvl(x_allocated_deprn_amount,0) - nvl(l_reserve_amount, 0); -- ENERGY
2057       h_bonus_deprn_reserve := nvl(h_bonus_deprn_reserve,0) + nvl(x_allocated_bonus_amount,0);
2058 
2059       if h_period_num <> 1 then
2060          h_ytd_deprn := nvl(h_ytd_deprn,0) + nvl(x_allocated_deprn_amount,0);
2061          h_bonus_ytd_deprn := nvl(h_bonus_ytd_deprn,0) + nvl(x_allocated_bonus_amount,0);
2062       else
2063          h_ytd_deprn := nvl(x_allocated_deprn_amount,0);
2064          h_bonus_ytd_deprn := nvl(x_allocated_bonus_amount,0);
2065       end if;
2066 
2067       if (p_log_level_rec.statement_level) then
2068          fa_debug_pkg.add(l_calling_fn,'+++ Just before update table or PL/SQL table +++', P_mode, p_log_level_rec => p_log_level_rec);
2069          fa_debug_pkg.add(l_calling_fn,'x_allocated_deprn:bonus_amount',
2070                           x_allocated_deprn_amount||':'||x_allocated_bonus_amount, p_log_level_rec => p_log_level_rec);
2071          fa_debug_pkg.add(l_calling_fn, 'h_ytd_deprn:h_deprn_reserve:h_bonus_ytd_deprn:h_bonus_deprn_reserve',
2072                                           h_ytd_deprn||':'||h_deprn_reserve||':'||h_bonus_deprn_reserve||
2073                                         ':'||h_bonus_ytd_deprn, p_log_level_rec => p_log_level_rec);
2074          fa_debug_pkg.add(l_calling_fn, 'x_fully_reserved_flag', x_fully_reserved_flag, p_log_level_rec => p_log_level_rec);
2075 
2076          if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2077             fa_debug_pkg.add(l_calling_fn, 'l_last_asset_index(ADJUSTMENT mode)', l_last_asset_index);
2078          end if;
2079       end if;
2080 
2081       if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2082 
2083          p_track_member_table(l_last_asset_index).allocated_deprn_amount := x_allocated_deprn_amount;
2084          p_track_member_table(l_last_asset_index).allocated_bonus_amount := x_allocated_bonus_amount;
2085          p_track_member_table(l_last_asset_index).fully_reserved_flag := x_fully_reserved_flag;
2086          p_track_member_table(l_last_asset_index).system_deprn_amount := h_system_deprn_amount;
2087          p_track_member_table(l_last_asset_index).system_bonus_amount := h_system_bonus_amount;
2088          p_track_member_table(l_last_asset_index).deprn_reserve := h_deprn_reserve;
2089          p_track_member_table(l_last_asset_index).ytd_deprn := h_ytd_deprn;
2090          p_track_member_table(l_last_asset_index).bonus_deprn_reserve := h_bonus_deprn_reserve;
2091          p_track_member_table(l_last_asset_index).bonus_ytd_deprn := h_bonus_ytd_deprn;
2092 
2093          if (p_log_level_rec.statement_level) then
2094             fa_debug_pkg.add(l_calling_fn,
2095                              'In final asset rounding, Updated following row into p_track_member_table',
2096                              l_last_asset_index, p_log_level_rec => p_log_level_rec);
2097 
2098             if not display_debug_message2(l_last_asset_index, l_calling_fn,
2099 p_log_level_rec) then
2100                fa_debug_pkg.add(l_calling_fn, 'display_debug_message2', 'error returned', p_log_level_rec => p_log_level_rec);
2101             end if;
2102          end if;
2103       else
2104 -- ENERGY
2105         if (p_log_level_rec.statement_level) then
2106            fa_debug_pkg.add(l_calling_fn, 'before update ', '1', p_log_level_rec => p_log_level_rec);
2107            fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', h_member_asset_id, p_log_level_rec => p_log_level_rec);
2108            fa_debug_pkg.add(l_calling_fn, 'x_allocated_deprn_amount', x_allocated_deprn_amount, p_log_level_rec => p_log_level_rec);
2109            fa_debug_pkg.add(l_calling_fn, 'h_ytd_deprn', h_ytd_deprn, p_log_level_rec => p_log_level_rec);
2110            fa_debug_pkg.add(l_calling_fn, 'h_deprn_reserve', h_deprn_reserve, p_log_level_rec => p_log_level_rec);
2111         end if;
2112 -- ENERGY
2113 
2114          -- Update FA_TRACK_MEMBERS table
2115         update FA_TRACK_MEMBERS
2116            set allocated_deprn_amount = x_allocated_deprn_amount,
2117                allocated_bonus_amount = x_allocated_bonus_amount,
2118                fully_reserved_flag = x_fully_reserved_flag,
2119                system_deprn_amount = h_system_deprn_amount,
2120                system_bonus_amount = h_system_bonus_amount,
2121                deprn_reserve = h_deprn_reserve,
2122                ytd_deprn = h_ytd_deprn,
2123                bonus_deprn_reserve = h_bonus_deprn_reserve,
2124                bonus_ytd_deprn = h_bonus_ytd_deprn
2125          where group_asset_id = P_group_asset_id
2126            and member_asset_id = h_member_asset_id
2127            and period_counter = P_period_counter
2128            and fiscal_year = P_fiscal_year
2129            and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
2130       end if;
2131    end if; -- Final Asset treatment
2132 
2133    --* Calculate the Difference from original group amount
2134 
2135    if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2136       x_total_allocated_deprn_amount := 0;
2137       x_total_allocated_bonus_amount := 0;
2138 
2139       For j IN 1 .. p_track_member_table.COUNT LOOP
2140 
2141          if p_track_member_table(j).group_asset_id = h_group_asset_id and
2142             p_track_member_table(j).period_counter = h_period_counter and
2143             nvl(p_track_member_table(j).set_of_books_id,-99) = nvl(p_set_of_books_id,-99) then
2144 
2145             if nvl(P_subtraction_flag,'N') = 'N' and nvl(p_track_member_table(j).override_flag,'N') <> 'Y' then
2146                x_total_allocated_deprn_amount := x_total_allocated_deprn_amount +
2147                                                  nvl(p_track_member_table(j).allocated_deprn_amount, 0); --bug6912446: Added nvl
2148                x_total_allocated_bonus_amount := x_total_allocated_bonus_amount +
2149                                                  nvl(p_track_member_table(j).allocated_bonus_amount, 0); --bug6912446: Added nvl
2150             else
2151                x_total_allocated_deprn_amount := x_total_allocated_deprn_amount +
2152                                                  nvl(p_track_member_table(j).system_deprn_amount, 0); --bug6912446: Added nvl
2153                x_total_allocated_bonus_amount := x_total_allocated_bonus_amount +
2154                                                  nvl(p_track_member_table(j).system_bonus_amount, 0); --bug6912446: Added nvl
2155             end if;
2156          end if;
2157       END LOOP;
2158    else
2159      select sum(decode(nvl(P_subtraction_flag,'N'),'N',
2160                 decode(nvl(override_flag,'N'),'Y',system_deprn_amount,allocated_deprn_amount), -- Periodic Case
2161                 system_deprn_amount)), -- Subtraction Case
2162             sum(decode(nvl(P_subtraction_flag,'N'),'N',
2163                 decode(nvl(override_flag,'N'),'Y',system_bonus_amount,allocated_bonus_amount), -- Periodic Case
2164                 system_bonus_amount)) -- Subtraction Case
2165        into x_total_allocated_deprn_amount,x_total_allocated_bonus_amount
2166        from fa_track_members
2167       where group_asset_id = P_group_asset_id
2168         and period_counter = P_period_counter
2169         and fiscal_year = P_fiscal_year
2170         and nvl(set_of_books_id,-99) = p_set_of_books_id;
2171    end if;
2172 
2173    h_difference_deprn_amount := P_group_deprn_amount - nvl(x_total_allocated_deprn_amount,0);
2174    h_difference_bonus_amount := nvl(P_group_bonus_amount,0) - nvl(x_total_allocated_bonus_amount,0);
2175 
2176    if nvl(P_allocate_to_fully_rsv_flag,'N') = 'N' and
2177       (P_excess_allocation_option = 'DISTRIBUTE' or nvl(P_group_level_override,'N') <> 'N') then
2178 
2179       if (p_log_level_rec.statement_level) then
2180          fa_debug_pkg.add(l_calling_fn, '+++ Reallocation Logic Start +++', '+++', p_log_level_rec => p_log_level_rec);
2181          fa_debug_pkg.add(l_calling_fn, 'h_difference_deprn:bonus_amount',
2182                           h_difference_deprn_amount||':'||h_difference_bonus_amount, p_log_level_rec => p_log_level_rec);
2183          fa_debug_pkg.add(l_calling_fn, 'P_allocate_to_fully_rsv_flag:P_excess_allocation_option',
2184                                          P_allocate_to_fully_rsv_flag||':'||P_excess_allocation_option, p_log_level_rec => p_log_level_rec);
2185          fa_debug_pkg.add(l_calling_fn, 'P_group_level_override', P_group_level_override, p_log_level_rec => p_log_level_rec);
2186       end if;
2187 
2188       -- Logic to reallocate amounts
2189       h_group_deprn_amount := h_deprn_amount;
2190       h_group_bonus_amount := h_bonus_amount;
2191 
2192       h_all_member_fully_reserved := 'N';
2193       --Bug6907818
2194       x_fully_reserved_flag := 'N';
2195 
2196       Loop -- This loop continues until all amounts are distributed or all members become fully reserved.
2197 
2198          exit when (nvl(h_difference_deprn_amount,0) = 0 and nvl(h_difference_bonus_amount,0) = 0);
2199          exit when (nvl(h_all_member_fully_reserved,'N') = 'Y');
2200 
2201          if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2202             h_fixed_deprn_amount := 0;
2203             h_fixed_bonus_amount := 0;
2204 
2205             For j IN 1 .. p_track_member_table.COUNT LOOP
2206 
2207                if p_track_member_table(j).group_asset_id = h_group_asset_id and
2208                   p_track_member_table(j).period_counter = h_period_counter and
2209                   nvl(p_track_member_table(j).set_of_books_id,-99) = nvl(p_set_of_books_id,-99) then
2210 
2211                   if nvl(p_track_member_table(j).fully_reserved_flag,'N') = 'Y' or
2212                      nvl(p_track_member_table(j).override_flag,'N') = 'Y' then
2213 
2214                      if nvl(P_subtraction_flag,'N') = 'N' and
2215                         nvl(p_track_member_table(j).fully_reserved_flag,'N') = 'Y' then
2216 
2217                         h_fixed_deprn_amount := h_fixed_deprn_amount + p_track_member_table(j).allocated_deprn_amount;
2218                         h_fixed_bonus_amount := h_fixed_bonus_amount + p_track_member_table(j).allocated_bonus_amount;
2219                      else
2220                         h_fixed_deprn_amount := h_fixed_deprn_amount + p_track_member_table(j).system_deprn_amount;
2221                         h_fixed_bonus_amount := h_fixed_bonus_amount + p_track_member_table(j).system_bonus_amount;
2222                      end if;
2223                   end if;
2224                end if;
2225             END LOOP;
2226          else
2227             -- Total Amount to be distributed
2228             select nvl(sum(decode(nvl(P_subtraction_flag,'N'),'N',
2229                        decode(nvl(fully_reserved_flag,'N'),'Y',
2230                                                 allocated_deprn_amount,
2231                                                 system_deprn_amount), -- Normal Case
2232                        system_deprn_amount)), -- Subtraction Case
2233                        0),
2234                    nvl(sum(decode(nvl(P_subtraction_flag,'N'),'N',
2235                       decode(nvl(fully_reserved_flag,'N'),'Y',
2236                                                 allocated_bonus_amount,
2237                                                 system_bonus_amount), -- Normal Case
2238                        system_deprn_amount)), -- Subtraction Case
2239                        0)
2240               into h_fixed_deprn_amount,h_fixed_bonus_amount
2241               from fa_track_members
2242              where group_asset_id = P_group_asset_id
2243                and period_counter = P_period_counter
2244                and fiscal_year = P_fiscal_year
2245                and (nvl(fully_reserved_flag,'N') = 'Y' or nvl(override_flag,'N') = 'Y');
2246 
2247             --* Query up the non-reallocate member assets in case of subtraction
2248             if nvl(P_mode,'DEPRECIATION') = 'DEPRECIATION' and
2249                nvl(P_subtraction_flag,'N') = 'Y' then
2250 
2251                -- Subtract group level catchup expense since it will be added later.
2252                h_total_deprn_expense := 0;
2253                h_total_bonus_expense := 0;
2254 
2255                FOR fix_member IN FIX_AMOUNT_MEMBER LOOP
2256 
2257                   h_fix_amount_member := fix_member.member_asset_id;
2258                   h_deprn_expense := 0;
2259                   h_bonus_expense := 0;
2260 
2261                   if p_mrc_sob_type_code <> 'R' then
2262                      open FA_ADJ_EXPENSE(l_track_member_in.member_asset_id);
2263                      fetch FA_ADJ_EXPENSE into h_deprn_expense, h_bonus_expense;
2264                      close FA_ADJ_EXPENSE;
2265                   else
2266                      open FA_ADJ_EXPENSE_MRC(l_track_member_in.member_asset_id);
2267                      fetch FA_ADJ_EXPENSE_MRC into h_deprn_expense, h_bonus_expense;
2268                      close FA_ADJ_EXPENSE_MRC;
2269                   end if;
2270 
2271 --                   h_total_deprn_expense := h_total_deprn_expense + nvl(h_deprn_expense,0);
2272 --                   h_total_bonus_expense := h_total_bonus_expense + nvl(h_bonus_expense,0);
2273                end loop;
2274 
2275                h_fixed_deprn_amount := nvl(h_fixed_deprn_amount,0) + nvl(h_total_deprn_expense,0);
2276                h_fixed_deprn_amount := nvl(h_fixed_deprn_amount,0) + nvl(h_total_deprn_expense,0);
2277             end if;
2278 
2279          end if;
2280 
2281          if (p_log_level_rec.statement_level) then
2282             fa_debug_pkg.add(l_calling_fn, 'h_fixed_deprn:bonus_amount',
2283                              h_fixed_deprn_amount||':'||h_fixed_bonus_amount, p_log_level_rec => p_log_level_rec);
2284          end if;
2285 
2286          h_group_deprn_amount := h_deprn_amount - h_fixed_deprn_amount;
2287          h_group_bonus_amount := h_bonus_amount - h_fixed_bonus_amount;
2288 
2289          if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2290             h_total_allocation_basis := 0;
2291 
2292             For j IN 1 .. p_track_member_table.COUNT LOOP
2293 
2294                if p_track_member_table(j).group_asset_id = h_group_asset_id and
2295                   p_track_member_table(j).period_counter = h_period_counter + 1 and
2296                   nvl(p_track_member_table(j).set_of_books_id,-99) = nvl(p_set_of_books_id,-99) then
2297 
2298                   if nvl(p_track_member_table(j).fully_reserved_flag,'N') <> 'Y' and
2299                      nvl(p_track_member_table(j).override_flag,'N')<> 'Y' and
2300                      p_track_member_table(j).group_asset_id = P_group_asset_id and
2301                      p_track_member_table(j).period_counter = P_period_counter + 1 then
2302 
2303                      h_total_allocation_basis := h_total_allocation_basis + p_track_member_table(j).allocation_basis;
2304                   end if;
2305                end if;
2306             END LOOP;
2307          else
2308             Select nvl(sum(allocation_basis),0) into h_total_allocation_basis
2309               from fa_track_members
2310              where group_asset_id = P_group_asset_id
2311                and period_counter = P_period_counter
2312                and fiscal_year = P_fiscal_year
2313                and nvl(fully_reserved_flag,'N') <> 'Y'
2314                and nvl(override_flag,'N') <> 'Y';
2315          end if;
2316 
2317          -- Reset the difference variables
2318          h_difference_deprn_amount := 0;
2319          h_difference_bonus_amount := 0;
2320          h_all_member_fully_reserved := 'Y';
2321 
2322          if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2323 
2324             For j in 1 .. p_track_member_table.COUNT loop
2325 
2326                if p_track_member_table(j).group_asset_id = h_group_asset_id and
2327                   p_track_member_table(j).period_counter = h_period_counter and
2328                   nvl(p_track_member_table(j).set_of_books_id,-99) = nvl(p_set_of_books_id,-99) then
2329 
2330                   if nvl(p_track_member_table(j).fully_reserved_flag,'N') <> 'Y' and
2331                      nvl(p_track_member_table(j).override_flag,'N')<> 'Y' and
2332                      p_track_member_table(j).group_asset_id = P_group_asset_id and
2333                      p_track_member_table(j).period_counter = P_period_counter + 1 then
2334 
2335                      l_track_member_in := p_track_member_table(j);
2336                      h_member_asset_id := l_track_member_in.member_asset_id;
2337 
2338                      if (p_log_level_rec.statement_level) then
2339                         fa_debug_pkg.add(l_calling_fn, 'Reallocate to member asset (Adjustment Mode)',
2340                                                        l_track_member_in.member_asset_id);
2341                      end if;
2342 
2343                      if h_current_period_number = 1 then
2344                         h_ytd_deprn := 0;
2345                         h_bonus_ytd_deprn     := 0;
2346                      else
2347                         h_ytd_deprn           := p_track_member_table(j).ytd_deprn;
2348                         h_bonus_ytd_deprn     := p_track_member_table(j).bonus_ytd_deprn;
2349                      end if;
2350 
2351                      -- Set Allocation Basis
2352                      h_allocation_basis := p_track_member_table(j).allocation_basis;
2353                      h_all_member_fully_reserved := 'N';
2354 
2355                      h_rec_cost_for_odda := p_track_member_table(j).recoverable_cost;
2356                      h_sv_for_odda := p_tracK_member_table(j).salvage_value;
2357 
2358                      -- Call Allocation_main to allocate the group amount to member assets
2359                      x_calc_done := 'N';
2360 
2361                      if not allocation_main(P_book_type_code => h_book_type_code,
2362                                            P_group_asset_id => h_group_asset_id,
2363                                            P_member_asset_id => l_track_member_in.member_asset_id,
2364                                            P_period_counter => h_period_counter,
2365                                            P_fiscal_year => h_fiscal_year,
2366                                            P_group_bonus_rule => P_group_bonus_rule,
2367                                            P_group_deprn_amount => h_group_deprn_amount,
2368                                            P_group_bonus_amount => h_group_bonus_amount,
2369                                            P_allocation_basis => h_allocation_basis,
2370                                            P_total_allocation_basis => h_total_allocation_basis,
2371                                            P_ytd_deprn => h_ytd_deprn,
2372                                            P_bonus_ytd_deprn => h_bonus_ytd_deprn,
2373                                            P_track_member_in => l_track_member_in,
2374                                            P_check_reserve_flag => x_check_reserve_flag,
2375                                            P_subtraction_flag => P_subtraction_flag,
2376                                            P_group_level_override => P_group_level_override,
2377                                            P_update_override_status => P_update_override_status,
2378                                            P_member_override_flag => h_member_override_flag,
2379                                            PX_difference_deprn_amount => h_difference_deprn_amount,
2380                                            PX_difference_bonus_amount => h_difference_bonus_amount,
2381                                            X_system_deprn_amount => h_system_deprn_amount,
2382                                            X_system_bonus_amount => h_system_bonus_amount,
2383                                            X_track_member_out => l_track_member_out,
2384                                            P_mrc_sob_type_code => 'P',
2385                                            P_set_of_books_id => p_set_of_books_id,
2386                                            P_mode => P_mode,
2387                                            P_rec_cost_for_odda => h_rec_cost_for_odda,
2388                                            P_sv_for_odda => h_sv_for_odda,
2389                                            p_log_level_rec => p_log_level_rec) then
2390                         raise allocate_err;
2391                      end if;
2392 
2393                      x_calc_done := 'Y';
2394 
2395                      -- Update the PX_TRACK_MEMBER(J) for the next period
2396                      p_track_member_table(j).allocated_deprn_amount := l_track_member_out.allocated_deprn_amount;
2397                      p_track_member_table(j).allocated_bonus_amount := l_track_member_out.allocated_bonus_amount;
2398                      p_track_member_table(j).fully_reserved_flag := l_track_member_out.fully_reserved_flag;
2399                      p_track_member_table(j).system_deprn_amount := l_track_member_out.system_deprn_amount;
2400                      p_track_member_table(j).system_bonus_amount := l_track_member_out.system_bonus_amount;
2401                      p_track_member_table(j).deprn_reserve := l_track_member_out.deprn_reserve;
2402                      p_track_member_table(j).ytd_deprn := l_track_member_out.ytd_deprn;
2403                      p_track_member_table(j).bonus_deprn_reserve := l_track_member_out.bonus_deprn_reserve;
2404                      p_track_member_table(j).bonus_ytd_deprn := l_track_member_out.bonus_ytd_deprn;
2405 
2406                      l_processed_number := j;
2407 
2408                      if (p_log_level_rec.statement_level) then
2409                         fa_debug_pkg.add(l_calling_fn,
2410                                          'In reallocation logic, Updated following row into p_track_member_table',
2411                                          l_processed_number, p_log_level_rec => p_log_level_rec);
2412 
2413                         if not display_debug_message2(l_processed_number, l_calling_fn, p_log_level_rec) then
2414                            fa_debug_pkg.add(l_calling_fn, 'display_debug_message2', 'error returned', p_log_level_rec => p_log_level_rec);
2415                         end if;
2416                      end if;
2417 
2418                   end if;
2419                end if;
2420             end loop; -- Loop for P_TRACK_MEMBER_TABLE
2421 
2422          else -- regular mode
2423 
2424 
2425             if P_mrc_sob_type_code <> 'R' then
2426 
2427                For realloc in REALLOCATE_MEMBER loop
2428 
2429                   l_track_member_in.group_asset_id := P_group_Asset_id;
2430                   l_track_member_in.member_asset_id := realloc.member_asset_id;
2431                   h_member_asset_id := realloc.member_asset_id;
2432                   l_track_member_in.override_flag := nvl(realloc.override_flag,'N');
2433 
2434                   if (p_log_level_rec.statement_level) then
2435                      fa_debug_pkg.add(l_calling_fn, 'Reallocate to member asset(Prmary Book)',
2436                                       l_track_member_in.member_asset_id);
2437                   end if;
2438 
2439                   if h_current_period_number = 1 then
2440                      h_ytd_deprn     := 0;
2441                      h_bonus_ytd_deprn     := 0;
2442                   else
2443                      h_ytd_deprn     := realloc.ytd_deprn;
2444                      h_bonus_ytd_deprn     := realloc.bonus_ytd_deprn;
2445                   end if;
2446 
2447                   --Bug6989520: Adding same logic as main loop above.
2448                   --This also resets l_track_member_in.reserve_adjustment_amount.
2449                   l_reserve_amount := 0;
2450                   OPEN c_get_adj(realloc.member_asset_id);
2451                   FETCH c_get_adj INTO l_reserve_amount;
2452                   CLOSE c_get_adj;
2453                   if (p_log_level_rec.statement_level) then
2454                      fa_debug_pkg.add(l_calling_fn,'l_reserve_amount', l_reserve_amount, p_log_level_rec => p_log_level_rec);
2455                      fa_debug_pkg.add(l_calling_fn,'realloc.deprn_reserve', realloc.deprn_reserve, p_log_level_rec => p_log_level_rec);
2456                   end if;
2457 
2458                   l_track_member_in.deprn_reserve := realloc.deprn_reserve + l_reserve_amount;
2459                   l_track_member_in.reserve_adjustment_amount := l_reserve_amount;
2460 
2461                   l_track_member_in.bonus_deprn_reserve := realloc.bonus_deprn_reserve;
2462                   l_track_member_in.cost := realloc.cost;
2463 
2464                   -- Set Allocation Basis
2465                   h_allocation_basis := realloc.allocation_basis;
2466                   h_all_member_fully_reserved := 'N';
2467                   h_rec_Cost_for_odda := realloc.recoverable_cost;
2468                   h_sv_for_odda := realloc.salvage_value;
2469 
2470                   --bug6795984
2471                   l_track_member_in.recoverable_cost := realloc.recoverable_cost;
2472                   l_track_member_in.adjusted_recoverable_cost := realloc.adjusted_recoverable_cost;
2473 
2474                   -- Call Allocation_main to allocate the group amount to member assets
2475                   x_calc_done := 'N';
2476                   if not allocation_main(P_book_type_code => h_book_type_code,
2477                                          P_group_asset_id => h_group_asset_id,
2478                                          P_member_asset_id => realloc.member_asset_id,
2479                                          P_period_counter => h_period_counter,
2480                                          P_fiscal_year => h_fiscal_year,
2481                                          P_group_bonus_rule => P_group_bonus_rule,
2482                                          P_group_deprn_amount => h_group_deprn_amount,
2483                                          P_group_bonus_amount => h_group_bonus_amount,
2484                                          P_allocation_basis => h_allocation_basis,
2485                                          P_total_allocation_basis => h_total_allocation_basis,
2486                                          P_ytd_deprn => h_ytd_deprn,
2487                                          P_bonus_ytd_deprn => h_bonus_ytd_deprn,
2488                                          P_track_member_in => l_track_member_in,
2489                                          P_check_reserve_flag => x_check_reserve_flag,
2490                                          P_subtraction_flag => P_subtraction_flag,
2491                                          P_group_level_override => P_group_level_override,
2492                                          P_update_override_status => P_update_override_status,
2493                                          P_member_override_flag => h_member_override_flag,
2494                                          PX_difference_deprn_amount => h_difference_deprn_amount,
2495                                          PX_difference_bonus_amount => h_difference_bonus_amount,
2496                                          X_system_deprn_amount => h_system_deprn_amount,
2497                                          X_system_bonus_amount => h_system_bonus_amount,
2498                                          X_track_member_out => l_track_member_out,
2499                                          P_mrc_sob_type_code => 'P',
2500                                          P_set_of_books_id => p_set_of_books_id,
2501                                          P_mode => P_mode,
2502                                          P_rec_cost_for_odda => h_rec_cost_for_odda,
2503                                          P_sv_for_odda => h_sv_for_odda,
2504                                          p_log_level_rec => p_log_level_rec) then
2505                      raise allocate_err;
2506                   end if;
2507 
2508                   x_calc_done := 'Y';
2509 
2510                end loop;
2511 
2512             else -- For Reporting Book
2513 
2514                For realloc in REALLOCATE_MEMBER_MRC loop
2515 
2516                   l_track_member_in.group_Asset_id := P_group_asset_id;
2517                   l_track_member_in.member_asset_id := realloc.member_asset_id;
2518                   h_member_asset_id := realloc.member_asset_id;
2519                   l_track_member_in.override_flag := nvl(realloc.override_flag,'N');
2520 
2521                   if (p_log_level_rec.statement_level) then
2522                      fa_debug_pkg.add(l_calling_fn, 'Reallocate to member asset (Reporting Book)',
2523                                       l_track_member_in.member_asset_id);
2524                   end if;
2525 
2526                   if h_current_period_number = 1 then
2527                      h_ytd_deprn       := 0;
2528                      h_bonus_ytd_deprn := 0;
2529                   else
2530                      h_ytd_deprn       := realloc.ytd_deprn;
2531                      h_bonus_ytd_deprn := realloc.bonus_ytd_deprn;
2532                   end if;
2533 
2534                   --Bug6989520: Adding same logic as main loop above.
2535                   --This also resets l_track_member_in.reserve_adjustment_amount.
2536                   l_reserve_amount := 0;
2537                   OPEN c_get_mc_adj(realloc.member_asset_id);
2538                   FETCH c_get_mc_adj INTO l_reserve_amount;
2539                   CLOSE c_get_mc_adj;
2540                   if (p_log_level_rec.statement_level) then
2541                      fa_debug_pkg.add(l_calling_fn,'l_reserve_amount', l_reserve_amount, p_log_level_rec => p_log_level_rec);
2542                      fa_debug_pkg.add(l_calling_fn,'realloc.deprn_reserve', realloc.deprn_reserve, p_log_level_rec => p_log_level_rec);
2543                   end if;
2544 
2545                   l_track_member_in.deprn_reserve := realloc.deprn_reserve + l_reserve_amount;
2546                   l_track_member_in.reserve_adjustment_amount := l_reserve_amount;
2547 
2548                   l_track_member_in.bonus_deprn_reserve := realloc.bonus_deprn_reserve;
2549                   l_track_member_in.cost := realloc.cost;
2550 
2551                   -- Set Allocation Basis
2552                   h_allocation_basis := realloc.allocation_basis;
2553                   h_all_member_fully_reserved := 'N';
2554                   h_rec_cost_for_odda := realloc.recoverable_cost;
2555                   h_sv_for_odda := realloc.salvage_value;
2556 
2557                   -- Call Allocation_main to allocate the group amount to member assets
2558                   x_calc_done := 'N';
2559 
2560                   if not allocation_main(P_book_type_code => h_book_type_code,
2561                                          P_group_asset_id => h_group_asset_id,
2562                                          P_member_asset_id => realloc.member_asset_id,
2563                                          P_period_counter => h_period_counter,
2564                                          P_fiscal_year => h_fiscal_year,
2565                                          P_group_bonus_rule => P_group_bonus_rule,
2566                                          P_group_deprn_amount => h_group_deprn_amount,
2567                                          P_group_bonus_amount => h_group_bonus_amount,
2568                                          P_allocation_basis => h_allocation_basis,
2569                                          P_total_allocation_basis => h_total_allocation_basis,
2570                                          P_ytd_deprn => h_ytd_deprn,
2571                                          P_bonus_ytd_deprn => h_bonus_ytd_deprn,
2572                                          P_track_member_in => l_track_member_in,
2573                                          P_check_reserve_flag => x_check_reserve_flag,
2574                                          P_subtraction_flag => P_subtraction_flag,
2575                                          P_group_level_override => P_group_level_override,
2576                                          P_update_override_status => P_update_override_status,
2577                                          P_member_override_flag => h_member_override_flag,
2578                                          PX_difference_deprn_amount => h_difference_deprn_amount,
2579                                          PX_difference_bonus_amount => h_difference_bonus_amount,
2580                                          X_system_deprn_amount => h_system_deprn_amount,
2581                                          X_system_bonus_amount => h_system_bonus_amount,
2582                                          X_track_member_out => l_track_member_out,
2583                                          P_mrc_sob_type_code => 'R',
2584                                          P_set_of_books_id => p_set_of_books_id,
2585                                          P_mode => P_mode,
2586                                          P_rec_cost_for_odda => h_rec_cost_for_odda,
2587                                          P_sv_for_odda => h_sv_for_odda,
2588                                          p_log_level_rec => p_log_level_rec) then
2589                      raise allocate_err;
2590                   end if;
2591 
2592                   x_calc_done := 'Y';
2593 
2594                end loop;
2595 
2596             end if; -- Reporting Book or Primary Book?
2597 
2598          end if; -- Adjutment Mode or Regular Mode
2599 
2600          if nvl(x_calc_done,'N') = 'Y' and
2601             nvl(l_track_member_out.override_flag,'N') <> 'Y' and nvl(h_all_member_fully_reserved,'N') = 'N' then
2602 
2603             if (p_log_level_rec.statement_level) then
2604                fa_debug_pkg.add(l_calling_fn, '+++ Final Asset Rounding (Reallocation) Start ++', '+++');
2605                fa_debug_pkg.add(l_calling_fn, 'h_system_deprn:bonus_amount',
2606                                 h_system_deprn_amount||':'||h_system_bonus_amount, p_log_level_rec => p_log_level_rec);
2607             end if;
2608 
2609             if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2610                x_sum_of_deprn_amount := 0;
2611                x_sum_of_bonus_amount := 0;
2612 
2613                For j IN 1 .. p_track_member_table.COUNT LOOP
2614 
2615                   if p_track_member_table(j).group_asset_id = h_group_asset_id and
2616                      p_track_member_table(j).period_counter = h_period_counter and
2617                      nvl(p_track_member_table(j).set_of_books_id,-99) = nvl(p_set_of_books_id,-99) then
2618 
2619                      if nvl(p_track_member_table(j).fully_reserved_flag,'N') <> 'Y' and
2620                         nvl(p_track_member_table(j).override_flag,'N') <> 'Y' and
2621                         p_track_member_table(j).group_Asset_id = P_group_Asset_id and
2622                         p_track_member_table(j).member_asset_id <> l_track_member_in.member_asset_id and
2623                         p_track_member_table(j).period_counter = P_period_counter then
2624 
2625                         x_sum_of_deprn_amount := x_sum_of_deprn_amount + p_track_member_table(j).system_deprn_amount;
2626                         x_sum_of_bonus_amount := x_sum_of_bonus_amount + p_track_member_table(j).system_bonus_amount;
2627 
2628                      end if;
2629 
2630                   end if;
2631 
2632                END LOOP;
2633             else
2634                select nvl(sum(system_deprn_amount),0),nvl(sum(system_bonus_amount),0)
2635                  into x_sum_of_deprn_amount,x_sum_of_bonus_amount
2636                  from fa_track_members
2637                 where group_asset_id = P_group_asset_id
2638                   and member_asset_id <> l_track_member_in.member_asset_id
2639                   and period_counter = P_period_counter
2640                   and fiscal_year    = P_fiscal_year
2641                   and nvl(fully_reserved_flag,'N') <> 'Y'
2642                   and nvl(override_flag,'N') <> 'Y'
2643                   and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
2644             end if;
2645 
2646             if (p_log_level_rec.statement_level) then
2647                fa_debug_pkg.add(l_calling_fn, 'x_sum_of_deprn:bonus_amount(realloc)',
2648                                 x_sum_of_deprn_amount||':'||x_sum_of_bonus_amount);
2649             end if;
2650 
2651             -- Final Asset Rounding Adjustment
2652             x_allocated_deprn_amount := h_group_deprn_amount - x_sum_of_deprn_amount; -- h_system_deprn_amount);
2653             x_allocated_bonus_amount := nvl(h_group_bonus_amount,0) - nvl(x_sum_of_bonus_amount,0);
2654                                                                                      -- nvl(h_system_bonus_amount,0));
2655 
2656             h_system_deprn_amount := x_allocated_deprn_amount;
2657             h_system_bonus_amount := x_allocated_bonus_amount;
2658 
2659             -- subtraction flag
2660             if nvl(P_subtraction_flag,'N') = 'Y' then
2661                x_allocated_deprn_amount := x_allocated_deprn_amount - h_ytd_deprn;
2662                x_allocated_bonus_amount := x_allocated_bonus_amount - h_bonus_ytd_deprn;
2663 
2664                if nvl(P_mode,'DEPRECIATION') = 'DEPRECIATION' then
2665 
2666                   -- Subtract group level catchup expense since it will be added later.
2667                   h_deprn_expense := 0;
2668                   h_bonus_expense := 0;
2669 
2670                   if p_mrc_sob_type_code <> 'R' then
2671                      open FA_ADJ_EXPENSE(l_track_member_in.member_asset_id);
2672                      fetch FA_ADJ_EXPENSE into h_deprn_expense, h_bonus_expense;
2673                      close FA_ADJ_EXPENSE;
2674                   else
2675                      open FA_ADJ_EXPENSE_MRC(l_track_member_in.member_asset_id);
2676                      fetch FA_ADJ_EXPENSE_MRC into h_deprn_expense, h_bonus_expense;
2677                      close FA_ADJ_EXPENSE_MRC;
2678                   end if;
2679 
2680                   if nvl(P_mode,'ADJUSTMENT') <> 'DEPRECIATION' then
2681                      x_allocated_deprn_amount := x_allocated_deprn_amount - nvl(h_deprn_expense,0);
2682                      x_allocated_bonus_amount := x_allocated_bonus_amount - nvl(h_bonus_expense,0);
2683                   end if;
2684                end if;
2685             end if;
2686 
2687             -- Check if this member asset is not fully reserved die to this allocated amount.
2688             x_check_amount := l_track_member_in.adjusted_recoverable_cost;
2689 
2690             --bug6911981
2691             --Need to add following logic like bug6809835 (below is the same comment for the bug)
2692             --Bug6809835 Modified fix done for bug 6520356
2693             --abs should only be taken if total reserve and cost are both -ive
2694             -- Bug 6879353 : Use local variables instead of modifying the actual values
2695             -- Bug6987667:Old way did not handle when cost is -ve and rsv is +ve.
2696             -- So modified to multiply -1 if cost is -ve.
2697             if (x_check_amount < 0) then
2698                l_total_reserve := -1*(l_track_member_in.deprn_reserve + x_allocated_deprn_amount);
2699                l_check_amount := -1*(x_check_amount);
2700             else
2701                l_total_reserve := l_track_member_in.deprn_reserve + x_allocated_deprn_amount;
2702                l_check_amount := x_check_amount;
2703             end if;
2704 
2705             --bug6911981
2706             --Need to add following logic like bug6879353 (below is the same comment for the bug)
2707             -- Bug 6879353 : Use local variables for the check
2708             if l_total_reserve >= l_check_amount then
2709 
2710 --bug6911981            if l_track_member_in.deprn_reserve + x_allocated_deprn_amount >= x_check_amount then
2711                x_fully_reserved_flag := 'Y';
2712                h_difference_deprn_amount := h_difference_deprn_amount + (x_allocated_deprn_amount -
2713                                                                               (x_check_amount - l_track_member_in.deprn_reserve));
2714                x_allocated_deprn_amount := x_check_amount - l_track_member_in.deprn_reserve;
2715 
2716                if P_group_bonus_rule is not null then
2717 
2718                   x_allocated_normal_amount := x_allocated_deprn_amount - x_allocated_bonus_amount;
2719 
2720                   if (x_allocated_deprn_amount - x_allocated_normal_amount < x_check_amount) and
2721                      (x_allocated_deprn_amount - x_allocated_normal_amount > 0) then
2722 
2723                      h_difference_bonus_amount := h_difference_bonus_amount + (x_allocated_bonus_amount -
2724                                                   (x_allocated_deprn_amount - x_allocated_normal_amount));
2725                      x_allocated_bonus_amount := x_allocated_deprn_amount - x_allocated_normal_amount;
2726                   else
2727                      h_difference_bonus_amount := h_difference_bonus_amount + x_allocated_bonus_amount;
2728                      x_allocated_bonus_amount := 0;
2729                   end if;
2730                end if;
2731             end if;
2732 
2733             -- Recalculate Reserve
2734             h_deprn_reserve := l_track_member_in.deprn_reserve + x_allocated_deprn_amount;
2735             h_bonus_deprn_reserve := nvl(l_track_member_in.bonus_deprn_reserve,0) + nvl(x_allocated_bonus_amount,0);
2736 
2737             if h_period_num <> 1 then
2738                h_ytd_deprn     := h_ytd_deprn + x_allocated_deprn_amount;
2739                h_bonus_ytd_deprn     := nvl(h_bonus_ytd_deprn,0) + nvl(x_allocated_bonus_amount,0);
2740             else
2741                h_ytd_deprn     := x_allocated_deprn_amount;
2742                h_bonus_ytd_deprn     := nvl(x_allocated_bonus_amount,0);
2743             end if;
2744 
2745             if (p_log_level_rec.statement_level) then
2746                fa_debug_pkg.add(l_calling_fn,'+++ Just before update table or PL/SQL table (Realloc) +++', P_mode);
2747                fa_debug_pkg.add(l_calling_fn,'x_allocated_deprn:bonus_amount',
2748                                 x_allocated_deprn_amount||':'||x_allocated_bonus_amount, p_log_level_rec => p_log_level_rec);
2749                fa_debug_pkg.add(l_calling_fn, 'h_ytd_deprn:h_deprn_reserve:h_bonus_ytd_deprn:h_bonus_deprn_reserve',
2750                                                h_ytd_deprn||':'||h_deprn_reserve||':'||h_bonus_deprn_reserve||':'||
2751                                                h_bonus_ytd_deprn, p_log_level_rec => p_log_level_rec);
2752                fa_debug_pkg.add(l_calling_fn, 'x_fully_reserved_flag', x_fully_reserved_flag, p_log_level_rec => p_log_level_rec);
2753 
2754                if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2755                   fa_debug_pkg.add(l_calling_fn, 'l_processed_number', l_processed_number, p_log_level_rec => p_log_level_rec);
2756                end if;
2757             end if;
2758 
2759             if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2760                p_track_member_table(l_processed_number).allocated_deprn_amount := x_allocated_deprn_amount;
2761                p_track_member_table(l_processed_number).allocated_bonus_amount := x_allocated_bonus_amount;
2762                p_track_member_table(l_processed_number).fully_reserved_flag := x_fully_reserved_flag;
2763                p_track_member_table(l_processed_number).system_deprn_amount := h_system_deprn_amount;
2764                p_track_member_table(l_processed_number).system_bonus_amount := h_system_bonus_amount;
2765                p_track_member_table(l_processed_number).deprn_reserve := h_deprn_reserve;
2766                p_track_member_table(l_processed_number).ytd_deprn := h_ytd_deprn;
2767                p_track_member_table(l_processed_number).bonus_deprn_reserve := h_bonus_deprn_reserve;
2768                p_track_member_table(l_processed_number).bonus_ytd_deprn := h_bonus_ytd_deprn;
2769             else
2770 -- ENERGY
2771         if (p_log_level_rec.statement_level) then
2772            fa_debug_pkg.add(l_calling_fn, 'before update ', '2', p_log_level_rec => p_log_level_rec);
2773            fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', h_member_asset_id, p_log_level_rec => p_log_level_rec);
2774            fa_debug_pkg.add(l_calling_fn, 'x_allocated_deprn_amount', x_allocated_deprn_amount, p_log_level_rec => p_log_level_rec);
2775            fa_debug_pkg.add(l_calling_fn, 'h_ytd_deprn', h_ytd_deprn, p_log_level_rec => p_log_level_rec);
2776            fa_debug_pkg.add(l_calling_fn, 'h_deprn_reserve', h_deprn_reserve, p_log_level_rec => p_log_level_rec);
2777         end if;
2778 -- ENERGY
2779                -- Update FA_TRACK_MEMBERS table
2780                update FA_TRACK_MEMBERS
2781                   set allocated_deprn_amount = x_allocated_deprn_amount,
2782                       allocated_bonus_amount = x_allocated_bonus_amount,
2783                       fully_reserved_flag = x_fully_reserved_flag,
2784                       system_deprn_amount = h_system_deprn_amount,
2785                       system_bonus_amount = h_system_bonus_amount,
2786                       deprn_reserve = h_deprn_reserve,
2787                       ytd_deprn = h_ytd_deprn,
2788                       bonus_deprn_reserve = h_bonus_deprn_reserve,
2789                       bonus_ytd_deprn = h_bonus_ytd_deprn
2790                 where group_asset_id = P_group_asset_id
2791                   and member_asset_id = h_member_asset_id
2792                   and period_counter = P_period_counter
2793                   and fiscal_year = P_fiscal_year
2794                   and  nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
2795             end if;
2796          end if;
2797       end loop;
2798 
2799       if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2800 
2801          x_total_allocated_deprn_amount := 0;
2802          x_total_allocated_bonus_amount := 0;
2803 
2804          For j IN 1 .. p_track_member_table.COUNT LOOP
2805             if p_track_member_table(j).group_asset_id = P_group_Asset_id and
2806                p_track_member_table(j).period_counter = P_period_counter and
2807                nvl(p_track_member_table(j).set_of_books_id,-99) = nvl(p_set_of_books_id,-99) then
2808 
2809                x_total_allocated_deprn_amount := x_total_allocated_deprn_amount +
2810                                                  nvl(p_track_member_table(j).allocated_deprn_amount, 0); -- bug6912446: Added nvl
2811                x_total_allocated_bonus_amount := x_total_allocated_bonus_amount +
2812                                                  nvl(p_track_member_table(j).allocated_bonus_amount, 0); -- bug6912446: Added nvl
2813             end if;
2814          END LOOP;
2815       else
2816          -- Query total of allocated amounts
2817          select sum(allocated_deprn_amount),sum(allocated_bonus_amount)
2818            into x_total_allocated_deprn_amount,x_total_allocated_bonus_amount
2819            from fa_track_members
2820           where group_asset_id = P_group_asset_id
2821             and period_counter = P_period_counter
2822             and fiscal_year    = P_fiscal_year
2823             and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
2824          end if;
2825 
2826          if h_all_member_fully_reserved = 'Y' and
2827             (nvl(h_difference_deprn_amount,0) <> 0 or nvl(h_difference_bonus_amount,0) <> 0) and
2828             nvl(P_group_level_override,'N') <> 'N' then
2829 
2830             -- This is a case when all member asset has been fully reserved and group level has been overridden.
2831             raise allocate_override_err;
2832 
2833          elsif nvl(h_difference_deprn_amount,0) <> 0 or nvl(h_difference_bonus_amount,0) <> 0 and
2834                nvl(P_group_level_override,'N') <> 'N' then
2835             raise allocate_override_err;
2836          else
2837             X_new_deprn_amount := x_total_allocated_deprn_amount;
2838             X_new_bonus_amount := x_total_allocated_bonus_amount;
2839          end if;
2840       else -- This is a case in which system doesn't need to reallocate amounts
2841 
2842          if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2843 
2844             x_total_allocated_deprn_amount := 0;
2845             x_total_allocated_bonus_amount := 0;
2846 
2847             For j IN 1 .. p_track_member_table.COUNT LOOP
2848 
2849                if p_track_member_table(j).group_asset_id = P_group_Asset_id and
2850                   p_track_member_table(j).period_counter = P_period_counter and
2851                   nvl(p_track_member_table(j).set_of_books_id,-99) = nvl(p_set_of_books_id, -99) then
2852 
2853                   x_total_allocated_deprn_amount := x_total_allocated_deprn_amount +
2854                                                     p_track_member_table(j).allocated_deprn_amount;
2855                   x_total_allocated_bonus_amount := x_total_allocated_bonus_amount +
2856                                                     p_track_member_table(j).allocated_bonus_amount;
2857                end if;
2858             END LOOP;
2859          else
2860             -- Query total of allocated amounts using really applocated amounts
2861             select sum(allocated_deprn_amount),sum(allocated_bonus_amount)
2862               into x_total_allocated_deprn_amount,x_total_allocated_bonus_amount
2863               from fa_track_members
2864              where group_asset_id = P_group_asset_id
2865                and period_counter = P_period_counter
2866                and fiscal_year    = P_fiscal_year
2867                and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
2868           end if;
2869 
2870          X_new_deprn_amount := x_total_allocated_deprn_amount;
2871          X_new_bonus_amount := x_total_allocated_bonus_amount;
2872       end if;
2873 
2874       if nvl(p_mode,'DEPRECIATION') = 'ADJUSTMENT' then
2875          -- Insert new row into P_TRACK_MEMBER table for the next period
2876          l_processed_number := p_track_member_table.count;
2877 
2878         /* bug 7195989, used new function for bulk processing */
2879          if not populate_unplanned_exp(p_set_of_books_id => p_set_of_books_id,
2880                                        p_mrc_sob_type_code => p_mrc_sob_type_code,
2881                                        p_book_type_code => h_book_type_code,
2882                                        p_period_counter => p_period_counter,
2883                                        p_group_asset_id => P_group_asset_id,
2884                                        p_log_level_rec => p_log_level_rec) then
2885             fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2886             raise main_err;
2887          end if;
2888 
2889          For j IN 1 .. p_track_member_table.count loop
2890 
2891           if p_track_member_table(j).group_asset_id = P_group_asset_id and
2892              p_track_member_table(j).period_counter = P_period_counter and
2893              nvl(p_track_member_table(j).set_of_books_id, -99) = nvl(p_set_of_books_id, -99) and
2894              nvl(p_track_member_table(j).fully_reserved_flag,'N') <> 'Y' then
2895 
2896              h_unplanned_expense := nvl(p_track_member_table(j).unplanned_deprn_amount,0);
2897 
2898             if h_unplanned_expense <> 0 then
2899                p_track_member_table(j).allocated_deprn_amount :=
2900                                       nvl(p_track_member_table(j).allocated_deprn_amount,0) + h_unplanned_expense;
2901                p_track_member_table(j).ytd_deprn := nvl(p_track_member_table(j).ytd_deprn,0) + h_unplanned_expense;
2902                p_track_member_table(j).deprn_reserve := nvl(p_track_member_table(j).deprn_reserve,0) +
2903                                                         h_unplanned_expense;
2904                if (p_log_level_rec.statement_level) then
2905                   fa_debug_pkg.add(l_calling_fn,'Added Unplanned Depreciation Expense',
2906                                    h_unplanned_member_asset||':'||h_unplanned_expense||','||h_period_counter, p_log_level_rec => p_log_level_rec);
2907                end if;
2908             end if;
2909 
2910             l_processed_number := l_processed_number + 1;
2911             p_track_member_table(l_processed_number).group_asset_id := p_track_member_table(j).group_asset_id;
2912             p_track_member_table(l_processed_number).member_asset_id := p_track_member_table(j).member_asset_id;
2913             p_track_member_table(l_processed_number).period_counter := h_period_counter + 1;
2914             p_track_member_table(l_processed_number).fiscal_year := h_fiscal_year_next_period;
2915             p_track_member_table(l_processed_number).set_of_books_id := p_track_member_table(j).set_of_books_id;
2916             p_track_member_table(l_processed_number).cost := p_track_member_table(j).cost;
2917             p_track_member_table(l_processed_number).adjusted_cost := p_track_member_table(j).adjusted_cost;
2918             p_track_member_table(l_processed_number).recoverable_cost := p_track_member_table(j).recoverable_cost;
2919             p_track_member_table(l_processed_number).salvage_value := p_track_member_table(j).salvage_value;
2920             p_track_member_table(l_processed_number).adjusted_recoverable_cost :=
2921                                                                 p_track_member_table(j).adjusted_recoverable_cost;
2922             p_track_member_table(l_processed_number).allocation_basis := p_track_member_table(j).allocation_basis;
2923             p_track_member_table(l_processed_number).total_allocation_basis :=
2924                                                                 p_track_member_table(j).total_allocation_basis;
2925             p_track_member_table(l_processed_number).allocated_deprn_amount := 0;
2926             p_track_member_table(l_processed_number).allocated_bonus_amount := 0;
2927             p_track_member_table(l_processed_number).fully_reserved_flag :=
2928                                                                 p_track_member_table(j).fully_reserved_flag;
2929             p_track_member_table(l_processed_number).system_deprn_amount := 0;
2930             p_track_member_table(l_processed_number).system_bonus_amount := 0;
2931             p_track_member_table(l_processed_number).override_flag := p_track_member_table(j).override_flag;
2932             p_track_member_table(l_processed_number).deprn_reserve := p_track_member_table(j).deprn_reserve;
2933             p_track_member_table(l_processed_number).ytd_deprn := p_track_member_table(j).ytd_deprn;
2934             p_track_member_table(l_processed_number).bonus_deprn_reserve :=
2935                                                                       p_track_member_table(j).bonus_deprn_reserve;
2936             p_track_member_table(l_processed_number).bonus_ytd_deprn := p_track_member_table(j).bonus_ytd_deprn;
2937 
2938             if h_fiscal_year_next_period <> h_fiscal_year then
2939                p_track_member_table(l_processed_number).eofy_reserve := p_track_member_table(j).deprn_reserve;
2940             else
2941                p_track_member_table(l_processed_number).eofy_reserve := p_track_member_table(j).eofy_reserve;
2942             end if;
2943 
2944             -- Add new record to index table
2945             put_track_index(p_track_member_table(l_processed_number).period_counter,
2946                             p_track_member_table(l_processed_number).member_asset_id ,
2947                             p_track_member_table(l_processed_number).group_asset_id,
2948                             p_track_member_table(l_processed_number).set_of_books_id,l_processed_number,
2949                             p_log_level_rec);
2950 
2951             if (p_log_level_rec.statement_level) then
2952 
2953                fa_debug_pkg.add(l_calling_fn, 'Inserted new row into p_track_member_table', l_processed_number, p_log_level_rec => p_log_level_rec);
2954 
2955                if not display_debug_message2(l_processed_number, l_calling_fn, p_log_level_rec) then
2956                   fa_debug_pkg.add(l_calling_fn, 'display_debug_message2', 'error returned', p_log_level_rec => p_log_level_rec);
2957                end if;
2958             end if;
2959          end if;
2960       end LOOP; -- All PL/SQL table check
2961    elsif nvl(p_mode,'DEPRECIATION') = 'DEPRECIATION' then
2962    -- Bug # 8394833 Added below code for bluk changes
2963        l_batch_size  := nvl(fa_cache_pkg.fa_batch_size, 1000);
2964        If p_mrc_sob_type_code <> 'R' then
2965           Open c_mem_unplan_adj;
2966             loop
2967             fetch c_mem_unplan_adj bulk collect
2968             into l_mem_asset_id_tbl,
2969                  l_unplanned_exp_tbl
2970                   limit l_batch_size;
2971              if (l_mem_asset_id_tbl.count = 0)
2972                 then exit;
2973              end if;
2974              for l_count in 1..l_mem_asset_id_tbl.count loop
2975                   h_unplanned_member_asset := l_mem_asset_id_tbl(l_count);
2976                   open FA_ADJ_UNPLANNED_MEM;
2977                   fetch FA_ADJ_UNPLANNED_MEM into l_unplanned_exp_mem_tbl(l_count);
2978                   close FA_ADJ_UNPLANNED_MEM;
2979                   l_unplanned_exp_tbl(l_count) := l_unplanned_exp_tbl(l_count) + l_unplanned_exp_mem_tbl(l_count);
2980              end loop;
2981 
2982              FORALL l_count IN 1..l_mem_asset_id_tbl.count
2983                 UPDATE FA_BOOKS_SUMMARY
2984                   SET DEPRN_AMOUNT = l_unplanned_exp_tbl(l_count) + DEPRN_AMOUNT,
2985                       YTD_DEPRN = l_unplanned_exp_tbl(l_count) + YTD_DEPRN
2986                 WHERE BOOK_TYPE_CODE = h_book_type_code
2987                   AND PERIOD_COUNTER = h_period_counter
2988                   AND ASSET_ID = l_mem_asset_id_tbl(l_count)
2989                   AND l_unplanned_exp_tbl(l_count) <> 0;
2990               end loop;
2991             close c_mem_unplan_adj;
2992           Else
2993              Open c_mem_unplan_adj_mrc;
2994                loop
2995                fetch c_mem_unplan_adj_mrc bulk collect
2996                into l_mem_asset_id_tbl,
2997                     l_unplanned_exp_tbl
2998                      limit l_batch_size;
2999                 if (l_mem_asset_id_tbl.count = 0) then exit; end if;
3000 
3001                 for l_count in 1..l_mem_asset_id_tbl.count loop
3002                      h_unplanned_member_asset := l_mem_asset_id_tbl(l_count);
3003                      open FA_ADJ_UNPLANNED_MEM_MRC;
3004                      fetch FA_ADJ_UNPLANNED_MEM_MRC into l_unplanned_exp_mem_tbl(l_count);
3005                      close FA_ADJ_UNPLANNED_MEM_MRC;
3006                      l_unplanned_exp_tbl(l_count) := l_unplanned_exp_tbl(l_count) + l_unplanned_exp_mem_tbl(l_count);
3007                 end loop;
3008 
3009                 FORALL l_count IN 1..l_mem_asset_id_tbl.count
3010                    UPDATE FA_MC_BOOKS_SUMMARY
3011                      SET DEPRN_AMOUNT = l_unplanned_exp_tbl(l_count) + DEPRN_AMOUNT,
3012                          YTD_DEPRN = l_unplanned_exp_tbl(l_count) + YTD_DEPRN
3013                    WHERE BOOK_TYPE_CODE = h_book_type_code
3014                      AND PERIOD_COUNTER = h_period_counter
3015 		     AND SET_OF_BOOKS_ID = p_set_of_books_id
3016                      AND ASSET_ID = l_mem_asset_id_tbl(l_count)
3017                      AND l_unplanned_exp_tbl(l_count) <> 0;
3018                  end loop;
3019                close c_mem_unplan_adj_mrc;
3020            End if;
3021    end if; -- Adjustment mode check
3022 
3023 <<skip_allocate>>
3024    if X_new_deprn_amount is null then
3025       X_new_deprn_amount := 0;
3026    end if;
3027 
3028    if X_new_bonus_amount is null then
3029       X_new_bonus_amount := 0;
3030    end if;
3031 
3032    return(true);
3033 
3034 exception
3035    when allocate_err then
3036       fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3037       return (FALSE);
3038 
3039    when allocate_override_err then
3040       fa_srvr_msg.add_message (calling_fn => l_calling_fn,
3041                                name => 'FA_NO_MEMBER_OVERRIDE', p_log_level_rec => p_log_level_rec);
3042       return (FALSE);
3043 
3044    when others then
3045       fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3046       return (FALSE);
3047 end allocate;
3048 
3049 ---------------------------------------------------------------------------
3050 --
3051 --  Function:  check_group_amounts
3052 --
3053 --  Description:
3054 --              This function is called when system needs to update
3055 --              Group Level Amounts as a result of tracking logic.
3056 --              If system cannot update the group level amounts
3057 --              due to some reason, this function will return false.
3058 --
3059 --  Returns:
3060 --     0 - No error / 1 - error
3061 --
3062 ---------------------------------------------------------------------------
3063 
3064 FUNCTION check_group_amounts(P_book_type_code        in varchar2,
3065                            P_group_asset_id        in number,
3066                            P_period_counter        in number,
3067                            P_perd_deprn_exp        in number,
3068                            P_year_deprn_exp        in number,
3069                            P_recoverable_cost      in number,
3070                            P_adj_rec_cost          in number,
3071                            P_current_deprn_reserve in number,
3072                            P_nbv_threshold         in number,
3073                            P_nbv_thresh_amount     in number,
3074                            P_rec_cost_abs_value    in number,
3075                            X_life_complete_flag    out nocopy varchar2,
3076                            X_fully_reserved_flag   out nocopy varchar2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type default null)
3077    return number is
3078 
3079 -- varibales for internal
3080 nbv_absval              number;
3081 adj_rec_cost_absval     number;
3082 rsv_absval              number;
3083 
3084 l_calling_fn            varchar2(40) := 'fa_track_member_pvt.check_group_amount';
3085 chk_grp_amt_err         exception;
3086 
3087 begin <<CHECK_GROUP_AMOUNT>>
3088 
3089 -- If the remaining depreciation is small (absolutely OR relatively), then fully depreciate the asset
3090 -- Calculate the absolute value of the asset's new NBV, Use adj_rec_cost as base instead of dpr.rec_cost
3091 nbv_absval := abs(P_adj_rec_cost - (P_current_deprn_reserve + P_year_deprn_exp + P_perd_deprn_exp));
3092 
3093 -- Debug
3094 if (p_log_level_rec.statement_level) then
3095     fa_debug_pkg.add(l_calling_fn,'++ CHECK_GROUP_AMOUNT ++++', 'Parameters', p_log_level_rec => p_log_level_rec);
3096     fa_debug_pkg.add(l_calling_fn,'P_adj_rec_cost:P_cur_deprn_rsv:P_year_deprn_exp:P_perd_deprn_exp',
3097                                    P_adj_rec_cost||':'||P_current_deprn_reserve||':'||P_year_deprn_exp||':'||P_perd_deprn_exp, p_log_level_rec => p_log_level_rec);
3098     fa_debug_pkg.add(l_calling_fn,'nbv_absval:P_nbv_threshold:P_nbv_threshold_amount',
3099                                    nbv_absval||':'||P_nbv_threshold||':'||P_nbv_thresh_amount, p_log_level_rec => p_log_level_rec);
3100 end if;
3101 
3102 -- Get the absolute value of the asset's Adjusted Recoverable Cost, do not use Recoverable Cost
3103 adj_rec_cost_absval := abs (P_adj_rec_cost);
3104 
3105 /* Unnecessary Check
3106 -- Check the NBV against the constant value, and then
3107 -- against the fraction of the Adjusted Recoverable Cost
3108 if (nbv_absval < P_nbv_thresh_amount) or (nbv_absval <  P_nbv_threshold * adj_rec_cost_absval)  then
3109    -- In this case, system must update the Depreciation Expense Amount but passed amount cannot be updated.
3110    -- So at this time error will be raised.
3111   raise chk_grp_amt_err;
3112 end if;
3113 */
3114 
3115 rsv_absval := abs (P_current_deprn_reserve + P_year_deprn_exp + P_perd_deprn_exp);
3116 
3117 -- if asset's deprn reserve is greater than adjusted revoverable cost, set fully reserve flag.
3118 -- For assets which do not have deprn limit, recoverable cost is always equal to adjusted recoverable cost
3119 if  adj_rec_cost_absval < rsv_absval then
3120    -- In this case, reserve is excessed Depreciation Limit.
3121    raise chk_grp_amt_err;
3122 elsif adj_rec_cost_absval = rsv_absval then
3123   X_fully_reserved_flag := 'Y';
3124   X_life_complete_flag := 'Y';
3125 end if;
3126 
3127 return 0;
3128 
3129 exception
3130   when chk_grp_amt_err then
3131     fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3132     return 1;
3133 
3134   when others then
3135     fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3136     return 1;
3137 
3138 end check_group_amounts;
3139 
3140 ---------------------------------------------------------------------------
3141 --
3142 --  Function:  allocation_main
3143 --
3144 --  Description:
3145 --              This function is called to allocate group level amount
3146 --              to member assets. This is the main logic to allocate amounts
3147 --              to members.
3148 --
3149 ----------------------------------------------------------------------------
3150 
3151 FUNCTION allocation_main(P_book_type_code            in varchar2,
3152                          P_group_asset_id            in number,
3153                          P_member_asset_id           in number,
3154                          P_period_counter            in number,
3155                          P_fiscal_year               in number,
3156                          P_group_bonus_rule          in varchar2, -- default null,
3157                          P_group_deprn_amount        in number,
3158                          P_group_bonus_amount        in number, -- default 0,
3159                          P_allocation_basis          in number,
3160                          P_total_allocation_basis    in number,
3161                          P_ytd_deprn                 in number,
3162                          P_bonus_ytd_deprn           in number, -- default 0,
3163                          P_track_member_in           in track_member_struct,
3164                          P_check_reserve_flag        in Varchar2, -- default null,
3165                          P_subtraction_flag          in varchar2, -- default null,
3166                          P_group_level_override      in out nocopy varchar2, -- default null,
3167                          P_update_override_status    in boolean, -- default true,
3168                          P_member_override_flag      in varchar2, -- default null,
3169                          PX_difference_deprn_amount  in out nocopy number,
3170                          PX_difference_bonus_amount  in out nocopy number,
3171                          X_system_deprn_amount       out nocopy number,
3172                          X_system_bonus_amount       out nocopy number,
3173                          X_track_member_out          out nocopy track_member_struct,
3174                          P_mrc_sob_type_code         in varchar2, -- default 'N',
3175                          P_set_of_books_id           in number,
3176                          P_mode                      in Varchar2,
3177                          P_rec_cost_for_odda         in number,
3178                          P_sv_for_odda               in number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
3179   return boolean is
3180 
3181 -- variables
3182 x_calc_done                  varchar2(1);
3183 x_alloccation_basis          number;
3184 x_total_allocation_amounts   number;
3185 x_allocated_deprn_amount     number;
3186 x_allocated_bonus_amount     number;
3187 x_allocated_normal_amount    number;
3188 x_fully_reserved_flag        varchar2(1);
3189 x_check_amount               number;
3190 
3191 x_deprn_reserve              number;
3192 x_ytd_deprn                  number;
3193 x_bonus_deprn_reserve        number;
3194 x_bonus_ytd_deprn            number;
3195 x_dummy                      number;
3196 
3197 -- variables to call override function
3198 x_override_flag              varchar2(1);
3199 h_used_by                    boolean;
3200 h_perd_ctr                   number;
3201 h_perd_deprn_amount          number;
3202 h_perd_bonus_amount          number;
3203 h_deprn_override_flag        varchar2(1);
3204 h_return_code                number;
3205 h_catchup_expense            number;
3206 h_catchup_bonus              number;
3207 l_deprn_override_used_by     varchar2(30); --Bug11886090
3208 
3209 h_perds_per_yr               number;
3210 h_book_type_code             varchar2(30);
3211 h_group_asset_id             number;
3212 h_member_asset_id            number;
3213 h_period_counter             number;
3214 h_fiscal_year                number;
3215 h_allocation_basis           number;
3216 h_total_allocation_basis     number;
3217 
3218 h_reporting_flag             varchar2(1);
3219 
3220 h_cost                       number;
3221 h_adjusted_cost              number;
3222 h_salvage_value              number;
3223 h_recoverable_cost           number;
3224 h_adjusted_recoverable_cost  number;
3225 
3226 h_prior_year_reserve         number;
3227 h_eofy_recoverable_cost      number;
3228 h_eop_recoverable_cost       number;
3229 h_eofy_salvage_value         number;
3230 h_eop_salvage_value          number;
3231 h_deprn_override             number;
3232 
3233 h_deprn_expense              number;
3234 h_bonus_expense              number;
3235 
3236 l_calling_fn                 varchar2(35) := 'fa_track_member_pvt.allocation_main';
3237 allocation_main_err          exception;
3238 allocation_main_override_err exception;
3239 allocation_main_update_err exception;
3240 
3241 -- Check cursor
3242 cursor CHECK_EXISTS is
3243  select 1
3244    from fa_track_members
3245   where group_asset_id = h_group_asset_id
3246     and member_asset_id = h_member_asset_id
3247     and period_counter = h_period_counter
3248     and fiscal_year = h_fiscal_year
3249     and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
3250 
3251 --* cursor to get period number
3252 cursor GET_PERIOD_NUM(p_per_counter number) is
3253   select period_num
3254     from fa_deprn_periods
3255    where book_type_code = P_book_type_code
3256      and period_counter = p_per_counter;
3257 
3258 cursor GET_PERIOD_NUM_MRC(p_per_counter number) is
3259   select period_num
3260     from fa_mc_deprn_periods
3261    where book_type_code = P_book_type_code
3262      and period_counter = p_per_counter
3263      and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
3264 
3265 --* Cursor for FA_ADJUSTMENTS
3266 cursor FA_ADJ_EXPENSE(p_member_asset_id number) is
3267    select /*+ ORDERED
3268           Index(TH2 FA_TRANSACTION_HEADERS_N1)
3269           INDEX(TH1 FA_TRANSACTION_HEADERS_N7)
3270           INDEX(ADJ FA_ADJUSTMENTS_U1)*/
3271           sum(decode(adj.adjustment_type,'EXPENSE',
3272                      decode(adj.debit_credit_flag,
3273                      'DR',adj.adjustment_amount,
3274                      'CR', -1 * adj.adjustment_amount))),
3275           sum(decode(adj.adjustment_type,'BONUS EXPENSE',
3276                      decode(adj.debit_credit_flag,
3277                      'DR',adj.adjustment_amount,
3278                      'CR', -1 * adj.adjustment_amount)))
3279      from fa_transaction_headers th2,
3280           fa_transaction_headers th1,
3281           fa_adjustments adj
3282     where adj.transaction_header_id = th1.transaction_header_id
3283       and adj.asset_id = p_group_asset_id
3284       and adj.book_type_code = p_book_type_code
3285       and adj.period_counter_adjusted = p_period_counter
3286       and th1.asset_id = adj.asset_id
3287       and th1.member_transaction_header_id = th2.transaction_header_id
3288       and th2.asset_id = nvl(p_member_asset_id,th2.asset_id);
3289 
3290 --* Cursor for FA_ADJUSTMENTS
3291 cursor FA_ADJ_EXPENSE_MRC (p_member_asset_id number) is
3292       select
3293           sum(decode(adj.adjustment_type,'EXPENSE',
3294                      decode(adj.debit_credit_flag,
3295                      'DR',adj.adjustment_amount,
3296                      'CR', -1 * adj.adjustment_amount))),
3297           sum(decode(adj.adjustment_type,'BONUS EXPENSE',
3298                      decode(adj.debit_credit_flag,
3299                      'DR',adj.adjustment_amount,
3300                      'CR', -1 * adj.adjustment_amount)))
3301      from fa_transaction_headers th2,
3302           fa_transaction_headers th1,
3303           fa_mc_adjustments adj
3304     where adj.transaction_header_id = th1.transaction_header_id
3305       and adj.asset_id = p_group_asset_id
3306       and adj.book_type_code = p_book_type_code
3307       and adj.period_counter_adjusted = p_period_counter
3308       and adj.set_of_books_id = p_set_of_books_id
3309       and th1.asset_id = adj.asset_id
3310       and th1.member_transaction_header_id = th2.transaction_header_id
3311       and th2.asset_id = nvl(p_member_asset_id,th2.asset_id);
3312 
3313 --Bug 6809835, 6879353
3314 l_total_reserve number;
3315 l_check_amount  number;
3316 
3317 begin
3318    /* Apply MRC related feature */
3319 
3320    if (p_log_level_rec.statement_level) then
3321        fa_debug_pkg.add(l_calling_fn, '+++ ALLOCATION_MAIN start +++', '+++', p_log_level_rec => p_log_level_rec);
3322        fa_debug_pkg.add(l_calling_fn, 'p_set_of_books_id', p_set_of_books_id, p_log_level_rec => p_log_level_rec);
3323        fa_debug_pkg.add(l_calling_fn, 'P_group_deprn_amount:P_allocation_basis:P_total_allocation_basis:P_ytd_deprn',
3324                                        P_group_deprn_amount||':'||P_allocation_basis||':'||P_total_allocation_basis||':'||P_ytd_deprn, p_log_level_rec => p_log_level_rec);
3325    end if;
3326 
3327    -- Reset calculation flag
3328    x_calc_done := 'N';
3329 
3330    -- Get period Number
3331    if P_mrc_sob_type_code <> 'R' then
3332      open GET_PERIOD_NUM(P_period_counter);
3333      fetch GET_PERIOD_NUM into h_perd_ctr;
3334      if GET_PERIOD_NUM%NOTFOUND then
3335        h_perds_per_yr   := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
3336        h_perd_ctr := P_period_counter - (P_fiscal_year * h_perds_per_yr);
3337      end if;
3338      close GET_PERIOD_NUM;
3339    else
3340      open GET_PERIOD_NUM_MRC(P_period_counter);
3341      fetch GET_PERIOD_NUM_MRC into h_perd_ctr;
3342      if GET_PERIOD_NUM_MRC%NOTFOUND then
3343        h_perds_per_yr   := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
3344        h_perd_ctr := P_period_counter - (P_fiscal_year * h_perds_per_yr);
3345      end if;
3346      close GET_PERIOD_NUM_MRC;
3347    end if;
3348 
3349    -- Calculate Allocated Amount
3350    -- In case subtraction_flag = 'Y', P_group_amount and P_group_bonus_amount will be
3351    -- YTD amount, otherwise those will be periodic depreciation.
3352 
3353    --Bug7022054: Avoid 0 divisor
3354    if (nvl(P_total_allocation_basis, 0) = 0) then
3355       x_allocated_deprn_amount := 0;
3356       x_allocated_bonus_amount := 0;
3357    else
3358       x_allocated_deprn_amount := P_group_deprn_amount * P_allocation_basis / P_total_allocation_basis;
3359       x_allocated_bonus_amount := nvl(P_group_bonus_amount,0) * P_allocation_basis / P_total_allocation_basis;
3360    end if;
3361 
3362 
3363    -- Rounding
3364    if not fa_utils_pkg.faxrnd
3365           (x_amount => x_allocated_deprn_amount,
3366            x_book   => P_book_type_code,
3367            x_set_of_books_id => p_set_of_books_id,
3368            p_log_level_rec => p_log_level_rec) then
3369           raise allocation_main_err;
3370    end if;
3371    if not fa_utils_pkg.faxrnd
3372           (x_amount => x_allocated_bonus_amount,
3373            x_book => P_book_type_code,
3374            x_set_of_books_id => p_set_of_books_id,
3375            p_log_level_rec => p_log_level_rec) then
3376       raise allocation_main_err;
3377    end if;
3378 
3379    -- System Allocated Amount is YTD when Subtraction Flag is 'Y' and these amounts may be updated later.
3380    X_system_deprn_amount := x_allocated_deprn_amount;
3381    X_system_bonus_amount := x_allocated_bonus_amount;
3382 
3383    -- Calculate subtract amount when subtraction flag is 'Y'
3384    if nvl(P_subtraction_flag,'N') = 'Y' then
3385       x_allocated_deprn_amount := x_allocated_deprn_amount - P_ytd_deprn;
3386       x_allocated_bonus_amount := x_allocated_bonus_amount - P_bonus_ytd_deprn;
3387       X_system_deprn_amount := x_allocated_deprn_amount + P_ytd_deprn;
3388       X_system_bonus_amount := x_allocated_bonus_amount + P_bonus_ytd_deprn;
3389    end if;
3390 
3391    x_allocated_normal_amount := x_allocated_deprn_amount - x_allocated_bonus_amount;
3392 
3393    if (p_log_level_rec.statement_level) then
3394        fa_debug_pkg.add(l_calling_fn, 'x_allocated_deprn:bonus_amount(1)', x_allocated_deprn_amount||':'||x_allocated_bonus_amount);
3395        fa_debug_pkg.add(l_calling_fn, 'x_system_deprn:bonus_amount', x_system_deprn_amount||':'||x_system_bonus_amount, p_log_level_rec => p_log_level_rec);
3396        fa_debug_pkg.add(l_calling_fn, 'x_allocated_normal_amount', x_allocated_normal_amount, p_log_level_rec => p_log_level_rec);
3397    end if;
3398 
3399    -- Set calculation flag
3400    x_calc_done := 'Y';
3401    x_override_flag := 'N';
3402 
3403    -- Manual Override feature call
3404    if (fa_cache_pkg.fa_deprn_override_enabled) and
3405       nvl(P_mode,'DEPRECIATION') in ('DEPRECIATION','ADJUSTMENT') then
3406 
3407    -- Override feature is applicable only when this is processed
3408    -- in Depreciation or Catchup Calculation in Adjustment
3409      if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
3410         h_used_by := TRUE;
3411         l_deprn_override_used_by := 'ADJ'; --Bug11886090
3412      else
3413         h_used_by := FALSE;
3414         l_deprn_override_used_by := 'DEP'; --Bug11886090
3415      end if;
3416 
3417    savepoint member_override; -- In case this override is not acceptable, need to be rollbacked
3418 
3419      if (p_log_level_rec.statement_level) then
3420        fa_debug_pkg.add(l_calling_fn, 'l_processing_member_table', l_processing_member_table, p_log_level_rec => p_log_level_rec);
3421      end if;
3422 
3423      if nvl(l_processing_member_table,'NO') = 'YES' then -- This is a case to call override_member_amounts
3424 
3425        if (p_log_level_rec.statement_level) then
3426          fa_debug_pkg.add(l_calling_fn, 'Query overridden amount from override table', '***');
3427        end if;
3428 
3429        if not override_member_amount(p_book_type_code => P_book_type_code,
3430                                      p_member_asset_id => P_member_asset_id,
3431                                      p_fiscal_year => P_fiscal_year,
3432                                      p_period_num => h_perd_ctr,
3433                                      p_ytd_deprn => P_ytd_deprn,
3434                                      p_bonus_ytd_deprn => P_bonus_ytd_deprn,
3435                                      x_override_deprn_amount => h_perd_deprn_amount,
3436                                      x_override_bonus_amount => h_perd_bonus_amount,
3437                                      x_deprn_override_flag => h_deprn_override_flag,
3438                                      p_calling_fn => 'POPULATE_MEMBER_ASSETS_TABLE',
3439                                      p_mrc_sob_type_code => P_mrc_sob_type_code,
3440                                      p_recoverable_cost => P_rec_cost_for_odda,
3441                                      p_salvage_value => P_sv_for_odda,
3442                                      p_log_level_rec => p_log_level_rec) then
3443           rollback to member_override;
3444           raise allocation_main_err;
3445        end if;
3446      else
3447        if not FA_CDE_PKG.faodda(book=> P_book_type_code,
3448                               Deprn_Override_Used_By => l_deprn_override_used_by, --Bug11886090
3449                               asset_id => P_member_asset_id,
3450                               bonus_rule => P_group_bonus_rule,
3451                               fyctr => P_fiscal_year,
3452                               perd_ctr => h_perd_ctr,
3453                               prod_rate_src_flag => FALSE,
3454                               deprn_projecting_flag => FALSE,
3455                               override_depr_amt => h_perd_deprn_amount,
3456                               override_bonus_amt => h_perd_bonus_amount,
3457                               deprn_override_flag => h_deprn_override_flag,
3458                               return_code => h_return_code,
3459                               p_ytd_deprn => P_ytd_deprn,
3460                               p_bonus_ytd_deprn => P_bonus_ytd_deprn,
3461                               p_update_override_status => P_update_override_status,
3462                               p_mrc_sob_type_code => P_mrc_sob_type_code,
3463                               p_set_of_books_id => p_set_of_books_id,
3464                               p_recoverable_cost => P_rec_cost_for_odda,
3465                               p_salvage_value => P_sv_for_odda, p_log_level_rec => p_log_level_rec) then
3466                 rollback to member_override;
3467                 raise allocation_main_err;
3468        end if;
3469      end if;
3470 
3471      if (p_log_level_rec.statement_level) then
3472        fa_debug_pkg.add(l_calling_fn, 'h_deprn_override_flag', h_deprn_override_flag, p_log_level_rec => p_log_level_rec);
3473      end if;
3474 
3475      h_deprn_override := 0;
3476      if h_deprn_override_flag <> fa_std_types.FA_NO_OVERRIDE then
3477         if nvl(P_group_level_override,'N') = 'Y' then
3478            rollback to member_override;
3479            raise allocation_main_override_err;
3480         else
3481            x_override_flag := 'Y';
3482         end if;
3483         if h_deprn_override_flag = fa_std_types.FA_OVERRIDE_DPR then
3484            x_allocated_deprn_amount := h_perd_deprn_amount;
3485            h_deprn_override := 1;
3486         elsif h_deprn_override_flag = fa_std_types.FA_OVERRIDE_DPR_BONUS then
3487            x_allocated_deprn_amount := h_perd_deprn_amount;
3488            x_allocated_bonus_amount := h_perd_bonus_amount;
3489            h_deprn_override := 3;
3490         elsif h_deprn_override_flag = fa_std_types.FA_OVERRIDE_BONUS then
3491            x_allocated_bonus_amount := h_perd_bonus_amount;
3492            h_deprn_override := 2;
3493         end if; -- override type check
3494 
3495         P_group_level_override := h_deprn_override_flag;
3496      end if; -- override flag check
3497    end if; -- override is enable or not
3498 
3499    if (p_log_level_rec.statement_level) then
3500      fa_debug_pkg.add(l_calling_fn, 'P_group_deprn_override', P_group_level_override, p_log_level_rec => p_log_level_rec);
3501      fa_debug_pkg.add(l_calling_fn, 'P_check_reserve_flag', P_check_reserve_flag, p_log_level_rec => p_log_level_rec);
3502      fa_debug_pkg.add(l_calling_fn, 'P_track_member_in.adjusted_recoverable_cost:recoverable_cost',
3503                                                       P_track_member_in.adjusted_recoverable_cost||':'||P_track_member_in.recoverable_cost, p_log_level_rec => p_log_level_rec);
3504      fa_debug_pkg.add(l_calling_fn, 'P_track_member_in.deprn_reserve',P_track_member_in.deprn_reserve, p_log_level_rec => p_log_level_rec);
3505      fa_debug_pkg.add(l_calling_fn, 'x_allocated_deprn_amount',x_allocated_deprn_amount, p_log_level_rec => p_log_level_rec);
3506    end if;
3507 
3508    -- Check if this member asset is not fully reserved due to this allocated amount.
3509    if P_check_reserve_flag = 'Y' then
3510       x_check_amount := P_track_member_in.adjusted_recoverable_cost;
3511 
3512       -- Bug6987667:Old way did not handle when cost is -ve and rsv is +ve.
3513       -- So modified to multiply -1 if cost is -ve.
3514       --Bug6809835 Modified fix done for bug 6520356
3515       --abs should only be taken if total reserve and cost are both -ive
3516       -- Bug 6879353 : Use local variables instead of modifying the actual values
3517       if (x_check_amount < 0) then
3518             l_total_reserve := -1*(P_track_member_in.deprn_reserve + x_allocated_deprn_amount);
3519             l_check_amount := -1*(x_check_amount);
3520       else
3521             l_total_reserve := P_track_member_in.deprn_reserve + x_allocated_deprn_amount;
3522             l_check_amount := x_check_amount;
3523       end if;
3524 
3525       -- Bug 6879353 : Use local variables for the check
3526       if l_total_reserve >= l_check_amount then
3527          if nvl(x_override_flag,'N') <> 'Y' then
3528             x_fully_reserved_flag := 'Y';
3529 
3530             --Bug7008015: reset allocate_deprn_amount only if it was not fully reserved even before allocation
3531             -- This is to avoid backing out and reallocate rsv due to downward cost adjustments
3532             -- if reserve (before allocation) is greater than the adjusted_recoverable_cost, then allocate 0 amount
3533             -- and add original allocated amount as difference and reallocate it to other member assets
3534             if ((x_check_amount < 0) and
3535                 (l_check_amount > -1*(P_track_member_in.deprn_reserve))) or
3536                ((x_check_amount > 0) and
3537                 (l_check_amount > (P_track_member_in.deprn_reserve))) then
3538                PX_difference_deprn_amount := PX_difference_deprn_amount +
3539                                              x_allocated_deprn_amount - (x_check_amount - P_track_member_in.deprn_reserve);
3540                x_allocated_deprn_amount := x_check_amount - P_track_member_in.deprn_reserve;
3541             else
3542                PX_difference_deprn_amount := PX_difference_deprn_amount + x_allocated_deprn_amount;
3543                x_allocated_deprn_amount := 0;
3544             end if;
3545 
3546 
3547             if (x_allocated_deprn_amount - x_allocated_normal_amount < x_check_amount) and
3548                (x_allocated_deprn_amount - x_allocated_normal_amount > 0) and
3549                 P_group_bonus_rule is not null then
3550                PX_difference_bonus_amount := PX_difference_bonus_amount + x_allocated_bonus_amount -
3551                                                         (x_allocated_deprn_amount - x_allocated_normal_amount);
3552                x_allocated_bonus_amount := x_allocated_deprn_amount - x_allocated_normal_amount;
3553             else
3554                PX_difference_bonus_amount := PX_difference_bonus_amount + x_allocated_bonus_amount;
3555                x_allocated_bonus_amount := 0;
3556             end if;
3557 
3558             -- In case Subtraction Flag is 'Y', replace the system amount with limited amount.
3559             if nvl(P_subtraction_flag,'N') = 'Y' then
3560                X_system_deprn_amount := x_allocated_deprn_amount + P_ytd_deprn;
3561                X_system_bonus_amount := x_allocated_bonus_amount + P_bonus_ytd_deprn;
3562             end if;
3563 
3564          else -- If the deprn amount is overridden....
3565             rollback to member_override;
3566             raise allocation_main_update_err;
3567 
3568          end if; -- Check if Overridden or not
3569       end if; -- The case not to excess the limit
3570    end if; -- Check if reserve check is required or not
3571 
3572    -- Reduce subtraction case
3573    if nvl(P_mode,'DEPRECIATION') = 'DEPRECIATION' and nvl(P_subtraction_flag,'N') = 'Y' then
3574       -- Subtract group level catchup expense since it will be added later.
3575      h_deprn_expense := 0;
3576      h_bonus_expense := 0;
3577      if p_mrc_sob_type_code <> 'R' then
3578        open FA_ADJ_EXPENSE(p_member_asset_id);
3579        fetch FA_ADJ_EXPENSE into h_deprn_expense, h_bonus_expense;
3580        close FA_ADJ_EXPENSE;
3581      else
3582        open FA_ADJ_EXPENSE_MRC(p_member_asset_id);
3583        fetch FA_ADJ_EXPENSE_MRC into h_deprn_expense, h_bonus_expense;
3584        close FA_ADJ_EXPENSE_MRC;
3585      end if;
3586      x_allocated_deprn_amount := x_allocated_deprn_amount - nvl(h_deprn_expense,0);
3587      x_allocated_bonus_amount := x_allocated_bonus_amount - nvl(h_bonus_expense,0);
3588    --  X_system_deprn_amount := x_system_deprn_amount - nvl(h_deprn_expense,0);
3589    --  X_system_bonus_amount := x_system_bonus_amount - nvl(h_bonus_expense,0);
3590      if (p_log_level_rec.statement_level) then
3591        fa_debug_pkg.add(l_calling_fn, '** after Subtraction Case **', '***');
3592        fa_debug_pkg.add(l_calling_fn, 'x_allocated_deprn:bonus_amount', x_allocated_deprn_amount||':'||x_allocated_deprn_amount, p_log_level_rec => p_log_level_rec);
3593        fa_debug_pkg.add(l_calling_fn, 'x_system_deprn:bonus_amount', x_system_deprn_amount||':'||x_system_deprn_amount, p_log_level_rec => p_log_level_rec);
3594        fa_debug_pkg.add(l_calling_fn, 'h_deprn:bonus_expense', h_deprn_expense||':'||h_bonus_expense, p_log_level_rec => p_log_level_rec);
3595      end if;
3596    end if;
3597 
3598    if (p_log_level_rec.statement_level) then
3599      fa_debug_pkg.add(l_calling_fn, 'P_track_member_in.reserve_adjustment_amount', -- ENERGY
3600                       P_track_member_in.reserve_adjustment_amount, p_log_level_rec => p_log_level_rec);                -- ENERGY
3601    end if;
3602 
3603    -- Calculate Reserve Amount
3604    x_deprn_reserve := nvl(P_track_member_in.deprn_reserve,0) + nvl(x_allocated_deprn_amount,0) -- ENERGY
3605                       - nvl(P_track_member_in.reserve_adjustment_amount, 0);                   -- ENERGY
3606 
3607    if h_perd_ctr <> 1 then
3608       x_ytd_deprn := nvl(P_ytd_deprn,0) + nvl(x_allocated_deprn_amount,0);
3609    else
3610       x_ytd_deprn := nvl(x_allocated_deprn_amount,0);
3611    end if;
3612 
3613    x_bonus_deprn_reserve := nvl(P_track_member_in.bonus_deprn_reserve,0) + nvl(x_allocated_bonus_amount,0);
3614 
3615    if h_perd_ctr <> 1 then
3616       x_bonus_ytd_deprn     := nvl(P_bonus_ytd_deprn,0) + nvl(x_allocated_bonus_amount,0);
3617    else
3618       x_bonus_ytd_deprn     := nvl(x_allocated_bonus_amount,0);
3619    end if;
3620 
3621    -- Debugging
3622    h_group_asset_id := P_group_asset_id;
3623    h_member_asset_id := P_member_asset_id;
3624    h_period_counter := P_period_counter;
3625    h_fiscal_year := P_fiscal_year;
3626    h_allocation_basis := P_allocation_basis;
3627    h_total_allocation_basis := P_total_allocation_basis;
3628    h_cost := P_track_member_in.cost;
3629    h_adjusted_cost := P_track_member_in.adjusted_cost;
3630    h_salvage_value := P_track_member_in.salvage_value;
3631    h_recoverable_cost := P_track_member_in.recoverable_cost;
3632    h_adjusted_recoverable_cost := P_track_member_in.adjusted_recoverable_cost;
3633 
3634    if (p_log_level_rec.statement_level) then
3635       fa_debug_pkg.add(l_calling_fn,'+++ Just before storing calculated amounts (mode=)', P_mode);
3636       fa_debug_pkg.add(l_calling_fn,'h_group_asset:h_member_asset:h_period_counter:h_fiscal_year',
3637                                      h_group_asset_id||':'||h_member_asset_id||':'||h_period_counter||':'||h_fiscal_year, p_log_level_rec => p_log_level_rec);
3638       fa_debug_pkg.add(l_calling_fn, 'h_cost:h_adjusted_cost:h_salvage_value:h_recoverable_cost:h_adj_rec_cost',
3639                                      h_cost||':'||h_adjusted_cost||':'||h_salvage_value||':'||h_recoverable_cost||':'||h_adjusted_recoverable_cost, p_log_level_rec => p_log_level_rec);
3640       fa_debug_pkg.add(l_calling_fn,'x_allocated_deprn:bonus_amount(2)', x_allocated_deprn_amount||':'||x_allocated_bonus_amount);
3641       fa_debug_pkg.add(l_calling_fn,'x_system_deprn:bonus_amount(2)', x_system_deprn_amount||':'||x_system_bonus_amount);
3642       fa_debug_pkg.add(l_calling_fn, 'x_ytd_deprn:x_deprn_reserve:x_bonus_ytd_deprn:x_bonus_deprn_reserve',
3643                                      x_ytd_deprn||':'||x_deprn_reserve||':'||x_bonus_deprn_reserve||':'||x_bonus_ytd_deprn, p_log_level_rec => p_log_level_rec);
3644       fa_debug_pkg.add(l_calling_fn, 'h_total_allocation_basis:h_allocation_basis', h_total_allocation_basis||':'||h_allocation_basis, p_log_level_rec => p_log_level_rec);
3645       fa_debug_pkg.add(l_calling_fn, 'h_fully_reserved_flag', x_fully_reserved_flag, p_log_level_rec => p_log_level_rec);
3646    end if;
3647 
3648    if nvl(P_mode,'DEPRECIATION') <> 'ADJUSTMENT' then
3649      -- Check if the row has been inserted
3650      x_dummy := to_number(NULL);
3651 
3652      open CHECK_EXISTS;
3653      fetch CHECK_EXISTS into x_dummy;
3654      close CHECK_EXISTS;
3655      if (p_log_level_rec.statement_level) then
3656        fa_debug_pkg.add('allocation_main','insert/update check', x_dummy, p_log_level_rec => p_log_level_rec);
3657      end if;
3658 
3659      --bug6923135
3660      --Placing nvl around variables so that pro*c code can handle the fetched value.
3661      if x_dummy is NULL then
3662        -- Insert into  FA_TRACK_MEMBERS table
3663        Insert into FA_TRACK_MEMBERS(group_asset_id,
3664                                 member_asset_id,
3665                                 period_counter,
3666                                 fiscal_year,
3667                                 set_of_books_id,
3668                                 allocation_basis,
3669                                 total_allocation_basis,
3670                                 allocated_deprn_amount,
3671                                 allocated_bonus_amount,
3672                                 fully_reserved_flag,
3673                                 system_deprn_amount,
3674                                 system_bonus_amount,
3675                                 cost,
3676                                 adjusted_cost,
3677                                 salvage_value,
3678                                 recoverable_cost,
3679                                 adjusted_recoverable_cost,
3680                                 override_flag,
3681                                 deprn_reserve,
3682                                 ytd_deprn,
3683                                 bonus_deprn_reserve,
3684                                 bonus_ytd_deprn,
3685                                 deprn_override_flag)
3686           values
3687               (h_group_asset_id,
3688                h_member_asset_id,
3689                h_period_counter,
3690                h_fiscal_year,
3691                p_set_of_books_id,
3692                h_allocation_basis,
3693                h_total_allocation_basis,
3694                nvl(x_allocated_deprn_amount, 0), --bug6923135
3695                nvl(x_allocated_bonus_amount, 0), --bug6923135
3696                x_fully_reserved_flag,
3697                nvl(X_system_deprn_amount, 0), --bug6923135
3698                nvl(X_system_bonus_amount, 0), --bug6923135
3699                h_cost,
3700                h_adjusted_cost,
3701                h_salvage_value,
3702                h_recoverable_cost,
3703                h_adjusted_recoverable_cost,
3704                x_override_flag,
3705                x_deprn_reserve,
3706                x_ytd_deprn,
3707                x_bonus_deprn_reserve,
3708                x_bonus_ytd_deprn,
3709                h_deprn_override);
3710      else -- Need to update
3711        if nvl(P_member_override_flag,'N') <> 'Y' then
3712          Update FA_TRACK_MEMBERS
3713             set allocation_basis = h_allocation_basis,
3714                 total_allocation_basis = h_total_allocation_basis,
3715                 allocated_deprn_amount = x_allocated_deprn_amount,
3716                 allocated_bonus_amount = x_allocated_bonus_amount,
3717                 fully_reserved_flag = x_fully_reserved_flag,
3718                 system_deprn_amount = x_system_deprn_amount,
3719                 system_bonus_amount = x_system_bonus_amount,
3720                 deprn_reserve = x_deprn_reserve,
3721                 ytd_deprn = x_ytd_deprn,
3722                 bonus_deprn_reserve = x_bonus_deprn_reserve,
3723                 bonus_ytd_deprn = x_bonus_ytd_deprn
3724           where group_asset_id = h_group_asset_id
3725             and member_asset_id = h_member_asset_id
3726             and period_counter = h_period_counter
3727             and fiscal_year = h_fiscal_year
3728             and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
3729        else -- In case this member has been overridden...
3730          Update FA_TRACK_MEMBERS
3731             set system_deprn_amount = x_system_deprn_amount,
3732                 system_bonus_amount = x_system_bonus_amount
3733           where group_asset_id = h_group_asset_id
3734             and member_asset_id = h_member_asset_id
3735             and period_counter = h_period_counter
3736             and fiscal_year = h_fiscal_year
3737             and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
3738        end if; -- P_member_override_flag
3739      end if; -- h_dummy
3740    end if; -- Adjustment or not
3741 
3742    -- Set P_track_member_out
3743    X_track_member_out.group_Asset_id := h_group_asset_id;
3744    X_track_member_out.member_asset_id := h_member_asset_id;
3745    X_track_member_out.period_counter := h_period_counter;
3746    X_track_member_out.fiscal_year := h_fiscal_year;
3747    X_track_member_out.set_of_books_id := p_set_of_books_id;
3748    X_track_member_out.cost := h_cost;
3749    X_track_member_out.adjusted_cost := h_adjusted_cost;
3750    X_track_member_out.salvage_value := h_salvage_value;
3751    X_track_member_out.recoverable_cost := h_recoverable_cost;
3752    X_track_member_out.adjusted_recoverable_cost := h_adjusted_recoverable_cost;
3753    X_track_member_out.allocation_basis := h_allocation_basis;
3754    X_track_member_out.total_allocation_basis := h_total_allocation_basis;
3755    X_track_member_out.allocated_deprn_amount := x_allocated_deprn_amount;
3756    X_track_member_out.allocated_bonus_amount := x_allocated_bonus_amount;
3757    X_track_member_out.fully_reserved_flag := x_fully_reserved_flag;
3758    X_track_member_out.system_deprn_amount := X_system_deprn_amount;
3759    X_track_member_out.system_bonus_amount := X_system_bonus_amount;
3760    X_track_member_out.cost := h_cost;
3761    X_track_member_out.adjusted_cost := h_adjusted_cost;
3762    X_track_member_out.salvage_value := h_salvage_value;
3763    X_track_member_out.recoverable_cost := h_recoverable_cost;
3764    X_track_member_out.adjusted_recoverable_cost := h_adjusted_recoverable_cost;
3765    X_track_member_out.override_flag := x_override_flag;
3766    X_track_member_out.deprn_reserve := x_deprn_reserve;
3767    X_track_member_out.ytd_deprn := x_ytd_deprn;
3768    X_track_member_out.bonus_deprn_reserve := x_bonus_deprn_reserve;
3769    X_track_member_out.bonus_ytd_deprn := x_bonus_ytd_deprn;
3770 
3771    -- Set Calc Flag
3772    x_calc_done := 'Y';
3773 
3774    return(true);
3775 
3776 exception
3777   when allocation_main_err then
3778     rollback to member_override;
3779     fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3780     return(false);
3781 
3782   when allocation_main_override_err then
3783     rollback to member_override;
3784     fa_srvr_msg.add_message (calling_fn => l_calling_fn,
3785                              name => 'FA_NO_MEMBER_OVERRIDE', p_log_level_rec => p_log_level_rec);
3786     return(false);
3787 
3788   when allocation_main_update_err then
3789     rollback to member_override;
3790     fa_srvr_msg.add_message (calling_fn => l_calling_fn,
3791                                  name => 'FA_CANNOT_UPDATE_OVERRIDE', p_log_level_rec => p_log_level_rec);
3792     return(false);
3793 
3794   when others then
3795     rollback to member_override;
3796     fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3797     return(false);
3798 
3799 end allocation_main;
3800 
3801 ----------------------------------------------------------------------------
3802 --
3803 --  Function:   update_depreciable_basis
3804 --
3805 --  Description:
3806 --              This function is called to update Depreciable Basis in some cases.
3807 --              The case when this function is called is that the group level depreciable
3808 --              basis rule has group level check logic, such as 50% rules for CCA or India.
3809 --              In these logic, system needs to check group level net amount for the specified
3810 --              period to decide if 50% reduction is applied or not.
3811 --              This cannot be checked at member level. So after group level depreciable basis
3812 --              updated is done, Deprn Basis Rule function will call this function to update
3813 --              member level depreciable basis.
3814 --              to members.
3815 --              When l_process_deprn_for_member is 'NO', this is not processed.
3816 --
3817 ----------------------------------------------------------------------------
3818 
3819 FUNCTION update_deprn_basis(p_group_rule_in          in fa_std_types.fa_deprn_rule_in_struct,
3820                             p_apply_reduction_flag   in varchar2, -- default NULL,
3821                             p_mode                   in varchar2
3822                             ,p_log_level_rec       IN fa_api_types.log_level_rec_type) -- default NULL)
3823   return boolean is
3824 
3825 --* Structure to call Deprn Basis Rule
3826 fa_rule_in      fa_std_types.fa_deprn_rule_in_struct;
3827 fa_rule_out     fa_std_types.fa_deprn_rule_out_struct;
3828 
3829 --* Internal Variables
3830 x_counter               number;
3831 x_added_cost            number;
3832 x_retired_cost          number;
3833 x_asset_type            varchar2(15);
3834 x_fully_retired_flag    varchar2(1);
3835 h_current_adjusted_cost number;
3836 h_current_cost          number;
3837 h_current_salvage_value number;
3838 h_current_adj_recoverable_cost number;
3839 h_current_recoverable_cost number;
3840 
3841 h_adj_cost              number;
3842 h_adj_salvage_value     number;
3843 h_adj_adjusted_rec_cost number;
3844 h_adj_transaction_header_id        number;
3845 h_adj_member_trans_header_id       number;
3846 h_adj_eofy_reserve      number;
3847 
3848 h_adj_salvage_type      varchar2(30);
3849 h_adj_percent_salvage   number;
3850 h_adj_limit_type        varchar2(30);
3851 h_adj_percent_limit     number;
3852 
3853 h_transaction_type_code            varchar2(20);
3854 h_transaction_key                  varchar2(2);
3855 h_asset_id                         number;
3856 h_cur_period_counter  number;
3857 
3858 h_check_adj_cost  number;
3859 
3860 --* Host related variables
3861 h_book_type_code        varchar2(30);
3862 h_group_asset_id        number;
3863 h_member_asset_id       number;
3864 h_period_counter        number;
3865 h_fiscal_year           number;
3866 h_set_of_books_id       number;
3867 h_trans_period_counter  number;
3868 
3869 h_eofy_rec_cost         number;
3870 h_eofy_salvage_value    number;
3871 h_eofy_adj_cost         number;
3872 h_new_prior_year_reserve    number;
3873 h_new_eofy_recoverable_cost number;
3874 h_new_eofy_salvage_value number;
3875 h_new_eop_recoverable_cost number;
3876 h_new_eop_salvage_value number;
3877 h_new_eofy_reserve       number;
3878 
3879 h_eop_adj_cost           number;
3880 h_prior_eofy_reserve     number;
3881 
3882 h_catchup_expense       number;
3883 h_bonus_catchup_expense number;
3884 h_catchup_expense_mem   number;
3885 h_bonus_catchup_mem     number;
3886 h_dummy                 number;
3887 h_recognize_gain_loss   varchar2(15);
3888 k                       number;
3889 h_memory_update_status  varchar2(3);
3890 
3891 h_rsv_adjustment        number;
3892 h_bonus_rsv_adjustment  number;
3893 h_rsv_adjustment_mem    number;
3894 h_bonus_rsv_adj_mem     number;
3895 h_net_proceeds          number;
3896 h_net_proceeds_mem      number;
3897 h_reserve_retired       number;
3898 
3899 h_ds_fy                 number;
3900 l_addition_check        varchar2(1);
3901 l_addition_number       number;
3902 l_track_member          track_member_struct;
3903 
3904 l_adj_asset_type        varchar2(11);
3905 l_transaction_header_id number;
3906 l_transaction_date_entered date;
3907 
3908 h_trans_fiscal_year     number;
3909 h_trans_period_num      number;
3910 h_fiscal_year_name      varchar2(30);
3911 h_calendar_type         varchar2(15);
3912 h_period_per_fiscal_year number;
3913 
3914 h_exclude_fully_rsv_flag varchar2(1);
3915 
3916 h_check_row_existing    varchar2(1);
3917 
3918 l_calling_fn            varchar2(40) := 'fa_track_member_pvt.update_deprn_basis';
3919 upd_deprn_err           exception;
3920 
3921 --* cursor to query members belonged to the specified group
3922 --  this is used to update deprn basis when group level is updated
3923 cursor ALL_MEMBERS is
3924   select bk.group_asset_id group_asset_id,
3925          bk.asset_id       member_asset_id,
3926          bk.cost           cost,
3927          bk.salvage_value  salvage_value,
3928          bk.recoverable_cost recoverable_cost,
3929          bk.adjusted_cost  adjusted_cost,
3930          bk.adjusted_recoverable_cost adjusted_recoverable_cost,
3931          bk.period_counter_fully_retired fully_retired_flag,
3932          bk.period_counter_fully_reserved fully_reserved_flag,
3933          bk.eofy_reserve    bk_eofy_reserve,
3934          bk.eofy_adj_cost  eofy_adj_cost,
3935          ds.period_counter ds_period_counter,
3936          ds.deprn_reserve  ds_deprn_reserve,
3937          ds.ytd_deprn      ds_ytd_deprn,
3938          ds.bonus_deprn_reserve ds_bonus_deprn_reserve,
3939          ds.bonus_ytd_deprn ds_bonus_ytd_deprn,
3940          temp.deprn_reserve temp_deprn_reserve,
3941          temp.ytd_deprn     temp_ytd_deprn,
3942          temp.bonus_deprn_reserve temp_bonus_deprn_reserve,
3943          temp.bonus_ytd_deprn temp_bonus_ytd_deprn,
3944          temp.prior_year_reserve temp_prior_year_reserve,
3945          temp.eofy_recoverable_cost temp_eofy_recoverable_cost,
3946          temp.eop_recoverable_cost temp_eop_recoverable_cost,
3947          temp.eofy_salvage_value temp_eofy_salvage_value,
3948          temp.eop_salvage_value  temp_eop_salvage_value
3949     from fa_books bk,
3950          fa_deprn_summary ds,
3951          fa_track_members temp
3952    where bk.book_type_code = h_book_type_code
3953      and bk.group_asset_id = h_group_asset_id
3954      and bk.date_ineffective is null
3955      and ds.book_type_code = bk.book_type_code
3956      and ds.asset_id = bk.asset_id
3957      and (ds.period_counter =
3958           (select max(ds1.period_counter)
3959              from fa_deprn_summary ds1
3960             where ds1.book_type_code=h_book_type_code
3961               and ds1.asset_id=bk.asset_id
3962               and ds1.period_counter <= h_period_counter - 1)
3963          or
3964           ds.period_counter = nvl(bk.period_counter_fully_reserved,-99))
3965      and temp.member_asset_id (+) = bk.asset_id
3966      and temp.period_counter (+) = h_period_counter
3967      and temp.fiscal_year (+) = h_fiscal_year
3968      and temp.set_of_books_id (+) = nvl(h_set_of_books_id,-99);
3969 
3970 cursor ALL_MEMBERS_MRC is
3971   select bk.group_asset_id group_asset_id,
3972          bk.asset_id       member_asset_id,
3973          bk.cost           cost,
3974          bk.salvage_value  salvage_value,
3975          bk.recoverable_cost recoverable_cost,
3976          bk.adjusted_cost  adjusted_cost,
3977          bk.adjusted_recoverable_cost adjusted_recoverable_cost,
3978          bk.period_counter_fully_retired fully_retired_flag,
3979          bk.period_counter_fully_reserved fully_reserved_flag,
3980          bk.eofy_reserve    bk_eofy_reserve,
3981          bk.eofy_adj_cost  eofy_adj_cost,
3982          ds.period_counter ds_period_counter,
3983          ds.deprn_reserve  ds_deprn_reserve,
3984          ds.ytd_deprn      ds_ytd_deprn,
3985          ds.bonus_deprn_reserve ds_bonus_deprn_reserve,
3986          ds.bonus_ytd_deprn ds_bonus_ytd_deprn,
3987          temp.deprn_reserve temp_deprn_reserve,
3988          temp.ytd_deprn     temp_ytd_deprn,
3989          temp.bonus_deprn_reserve temp_bonus_deprn_reserve,
3990          temp.bonus_ytd_deprn temp_bonus_ytd_deprn,
3991          temp.prior_year_reserve temp_prior_year_reserve,
3992          temp.eofy_recoverable_cost temp_eofy_recoverable_cost,
3993          temp.eop_recoverable_cost temp_eop_recoverable_cost,
3994          temp.eofy_salvage_value temp_eofy_salvage_value,
3995          temp.eop_salvage_value  temp_eop_salvage_value
3996     from fa_mc_books bk,
3997          fa_mc_deprn_summary ds,
3998          fa_track_members temp
3999    where bk.book_type_code = h_book_type_code
4000      and bk.group_asset_id = h_group_asset_id
4001      and bk.date_ineffective is null
4002      and bk.set_of_books_id =h_set_of_books_id
4003      and ds.book_type_code = bk.book_type_code
4004      and ds.asset_id = bk.asset_id
4005 --     and ds.period_counter = h_period_counter - 1
4006      and (ds.period_counter =
4007           (select max(ds1.period_counter)
4008              from fa_mc_deprn_summary ds1
4009             where ds1.book_type_code=h_book_type_code
4010               and ds1.asset_id=bk.asset_id
4011               and ds1.set_of_books_id = h_set_of_books_id
4012               and ds1.period_counter <= h_period_counter - 1)
4013          or
4014           ds.period_counter = nvl(bk.period_counter_fully_reserved,-99))
4015      and ds.set_of_books_id = h_set_of_books_id
4016      and temp.member_asset_id (+) = bk.asset_id
4017      and temp.period_counter (+) = h_period_counter
4018      and temp.fiscal_year (+) = h_fiscal_year
4019      and nvl(temp.set_of_books_id (+),-99) = nvl(h_set_of_books_id,-99);
4020 
4021 --* New Adjusted Cost to call Deprn Basis Rule
4022 cursor CURRENT_ADJ_COST is
4023   select temp.cost,
4024          temp.salvage_value,
4025          temp.recoverable_cost,
4026          temp.adjusted_cost,
4027          temp.adjusted_recoverable_cost
4028     from fa_track_members temp
4029    where temp.group_asset_id = h_group_asset_id
4030      and temp.member_asset_id = h_member_asset_id
4031      and temp.period_counter = h_period_counter
4032      and nvl(temp.set_of_books_id,-99) = nvl(h_set_of_books_id,-99);
4033 
4034 --* Check if current period table exists or not
4035 cursor CHECK_CURRENT_TABLE is
4036  select 1
4037    from fa_track_members
4038   where group_asset_id = h_group_asset_id
4039     and member_asset_id = h_member_asset_id
4040     and period_counter = h_period_counter
4041     and fiscal_year = h_fiscal_year
4042     and nvl(set_of_books_id,-99) = nvl(h_set_of_books_id,-99);
4043 
4044 --* For ADJUSTMENT table
4045 --* Cursor for FA_ADJUSTMENTS
4046 cursor FA_ADJ_EXPENSE is
4047    select sum(decode(adj.adjustment_type,'EXPENSE',
4048                      decode(adj.debit_credit_flag,
4049                      'DR',adj.adjustment_amount,
4050                      'CR', -1 * adj.adjustment_amount))),
4051           sum(decode(adj.adjustment_type,'BONUS EXPENSE',
4052                      decode(adj.debit_credit_flag,
4053                      'DR',adj.adjustment_amount,
4054                      'CR', -1 * adj.adjustment_amount)))
4055      from fa_adjustments adj,
4056           fa_transaction_headers th1,
4057           fa_transaction_headers th2
4058     where adj.transaction_header_id = th1.transaction_header_id
4059       and adj.asset_id = h_group_asset_id
4060       and adj.book_type_code = h_book_type_code
4061       and adj.period_counter_adjusted = h_period_counter
4062       and th1.asset_id = adj.asset_id
4063       and th1.member_transaction_header_id = th2.transaction_header_id
4064       and th2.asset_id = h_member_asset_id;
4065 
4066 cursor FA_ADJ_EXPENSE_MEM is
4067    select sum(decode(adj.adjustment_type,'EXPENSE',
4068                      decode(adj.debit_credit_flag,
4069                      'DR',adj.adjustment_amount,
4070                      'CR', -1 * adj.adjustment_amount))),
4071           sum(decode(adj.adjustment_type,'BONUS EXPENSE',
4072                      decode(adj.debit_credit_flag,
4073                      'DR',adj.adjustment_amount,
4074                      'CR', -1 * adj.adjustment_amount)))
4075      from fa_adjustments adj
4076     where adj.book_type_code = h_book_type_code
4077       and adj.asset_id = h_member_asset_id
4078       and adj.period_counter_adjusted = h_period_counter;
4079 
4080 --* Cursor for FA_ADJUSTMENTS
4081 cursor FA_ADJ_EXPENSE_MRC is
4082    select sum(decode(adj.adjustment_type,'EXPENSE',
4083                      decode(adj.debit_credit_flag,
4084                      'DR',adj.adjustment_amount,
4085                      'CR', -1 * adj.adjustment_amount))),
4086           sum(decode(adj.adjustment_type,'BONUS EXPENSE',
4087                      decode(adj.debit_credit_flag,
4088                      'DR',adj.adjustment_amount,
4089                      'CR', -1 * adj.adjustment_amount)))
4090      from fa_mc_adjustments adj,
4091           fa_transaction_headers th1,
4092           fa_transaction_headers th2
4093     where adj.transaction_header_id = th1.transaction_header_id
4094       and adj.asset_id = h_group_asset_id
4095       and adj.book_type_code = h_book_type_code
4096       and adj.period_counter_adjusted = h_period_counter
4097       and adj.set_of_books_id = h_set_of_books_id
4098       and th1.asset_id = adj.asset_id
4099       and th1.member_transaction_header_id = th2.transaction_header_id
4100       and th2.asset_id = h_member_asset_id;
4101 
4102 cursor FA_ADJ_EXPENSE_MEM_MRC is
4103    select sum(decode(adj.adjustment_type,'EXPENSE',
4104                      decode(adj.debit_credit_flag,
4105                      'DR',adj.adjustment_amount,
4106                      'CR', -1 * adj.adjustment_amount))),
4107           sum(decode(adj.adjustment_type,'BONUS EXPENSE',
4108                      decode(adj.debit_credit_flag,
4109                      'DR',adj.adjustment_amount,
4110                      'CR', -1 * adj.adjustment_amount)))
4111      from fa_mc_adjustments adj
4112     where adj.book_type_code = h_book_type_code
4113       and adj.asset_id = h_member_asset_id
4114       and adj.set_of_books_id = h_set_of_books_id
4115       and adj.period_counter_adjusted = h_period_counter;
4116 
4117 --* Cursor for Delta
4118 cursor GET_DELTA is
4119            select new_bk.cost - old_bk.cost,
4120                   decode(new_bk.salvage_type,'AMT',
4121                          decode(old_bk.salvage_type,'AMT', new_bk.salvage_value - old_bk.salvage_value,
4122                                                            new_bk.salvage_value)),
4123                   decode(new_bk.deprn_limit_type,'AMT',
4124                          decode(old_bk.deprn_limit_type,'AMT',
4125                                 new_bk.adjusted_recoverable_cost - old_bk.adjusted_recoverable_cost,
4126                                 new_bk.adjusted_recoverable_cost)),
4127                   new_bk.salvage_type,
4128                   decode(new_bk.salvage_type,'PCT',new_bk.percent_salvage_value),
4129                   new_bk.deprn_limit_type,
4130                   decode(new_bk.deprn_limit_type,'PCT',new_bk.allowed_deprn_limit)
4131              from fa_books new_bk,
4132                   fa_books old_bk
4133             where new_bk.book_type_code = p_group_rule_in.book_type_code
4134               and new_bk.asset_id = h_member_asset_id
4135               and new_bk.transaction_header_id_in = h_adj_member_trans_header_id
4136               and old_bk.book_type_code = new_bk.book_type_code
4137               and old_bk.asset_id = new_bk.asset_id
4138               and old_bk.transaction_header_id_out = new_bk.transaction_header_id_in;
4139 
4140 cursor GET_DELTA_MRC is
4141            select new_bk.cost - old_bk.cost,
4142                   decode(new_bk.salvage_type,'AMT',
4143                          decode(old_bk.salvage_type,'AMT', new_bk.salvage_value - old_bk.salvage_value,
4144                                                            new_bk.salvage_value)),
4145                   decode(new_bk.deprn_limit_type,'AMT',
4146                          decode(old_bk.deprn_limit_type,'AMT',
4147                                 new_bk.adjusted_recoverable_cost - old_bk.adjusted_recoverable_cost,
4148                                 new_bk.adjusted_recoverable_cost)),
4149                   new_bk.salvage_type,
4150                   decode(new_bk.salvage_type,'PCT',new_bk.percent_salvage_value),
4151                   new_bk.deprn_limit_type,
4152                   decode(new_bk.deprn_limit_type,'PCT',new_bk.allowed_deprn_limit)
4153              from fa_mc_books new_bk,
4154                   fa_mc_books old_bk
4155             where new_bk.book_type_code = p_group_rule_in.book_type_code
4156               and new_bk.asset_id = h_member_asset_id
4157               and new_bk.transaction_header_id_in = h_adj_member_trans_header_id
4158               and new_bk.set_of_books_id = h_set_of_books_id
4159               and old_bk.book_type_code = new_bk.book_type_code
4160               and old_bk.asset_id = new_bk.asset_id
4161               and old_bk.transaction_header_id_out = new_bk.transaction_header_id_in
4162               and old_bk.set_of_books_id = h_set_of_books_id;
4163 
4164 --* Cursor for FA_ADJUSTMENTS (Reserve Adjustments)
4165 /*
4166 cursor FA_ADJ_RESERVE is
4167    select sum(decode(adj.adjustment_type,'RESERVE',
4168                      decode(adj.debit_credit_flag,
4169                      'CR',adj.adjustment_amount,
4170                      'DR', -1 * adj.adjustment_amount))),
4171           sum(decode(adj.adjustment_type,'BONUS RESERVE',
4172                      decode(adj.debit_credit_flag,
4173                      'CR',adj.adjustment_amount,
4174                      'DR', -1 * adj.adjustment_amount))),
4175           nvl(sum(decode(adj.adjustment_type,'PROCEEDS CLR',
4176                      decode(adj.debit_credit_flag,
4177                      'DR',adj.adjustment_amount,
4178                      'CR', -1 * adj.adjustment_amount))),0) -
4179           nvl(sum(decode(adj.adjustment_type,'REMOVALCOST CLR',
4180                      decode(adj.debit_credit_flag,
4181                      'CR',adj.adjustment_amount,
4182                      'DR', -1 * adj.adjustment_amount))),0)
4183      from fa_adjustments adj,
4184           fa_transaction_headers th1,
4185           fa_transaction_headers th2
4186     where adj.transaction_header_id = th1.transaction_header_id
4187       and adj.asset_id = h_group_asset_id
4188       and adj.book_type_code = h_book_type_code
4189       and adj.period_counter_adjusted = h_period_counter
4190       and th1.asset_id = adj.asset_id
4191       and th1.member_transaction_header_id = th2.transaction_header_id
4192       and th2.asset_id = h_member_asset_id
4193       and th2.transaction_header_id <> nvl(h_adj_member_trans_header_id,0);
4194 */
4195 -- ENERGY
4196 -- ENERGY
4197 cursor FA_ADJ_RESERVE is
4198    select sum(decode(adj.adjustment_type,'RESERVE',
4199                      decode(adj.debit_credit_flag,
4200                      'CR',adj.adjustment_amount,
4201                      'DR', -1 * adj.adjustment_amount))),
4202           sum(decode(adj.adjustment_type,'BONUS RESERVE',
4203                      decode(adj.debit_credit_flag,
4204                      'CR',adj.adjustment_amount,
4205                      'DR', -1 * adj.adjustment_amount))),
4206           nvl(sum(decode(adj.adjustment_type,'PROCEEDS CLR',
4207                      decode(adj.debit_credit_flag,
4208                      'DR',adj.adjustment_amount,
4209                      'CR', -1 * adj.adjustment_amount))),0) -
4210           nvl(sum(decode(adj.adjustment_type,'REMOVALCOST CLR',
4211                      decode(adj.debit_credit_flag,
4212                      'CR',adj.adjustment_amount,
4213                      'DR', -1 * adj.adjustment_amount))),0)
4214      from fa_adjustments adj,
4215           fa_transaction_headers th1
4216     where adj.transaction_header_id = th1.transaction_header_id
4217       and adj.asset_id = h_member_asset_id
4218       and adj.book_type_code = h_book_type_code
4219       and adj.period_counter_adjusted = h_period_counter
4220       and th1.asset_id = adj.asset_id
4221       and th1.transaction_header_id <> nvl(h_adj_member_trans_header_id,0);
4222 -- ENERGY
4223 -- ENERGY
4224 
4225 
4226 cursor FA_ADJ_RESERVE_MEM is
4227    select sum(decode(adj.adjustment_type,'RESERVE',
4228                      decode(adj.debit_credit_flag,
4229                      'CR',adj.adjustment_amount,
4230                      'DR', -1 * adj.adjustment_amount))),
4231           sum(decode(adj.adjustment_type,'BONUS RESERVE',
4232                      decode(adj.debit_credit_flag,
4233                      'CR',adj.adjustment_amount,
4234                      'DR', -1 * adj.adjustment_amount))),
4235           nvl(sum(decode(adj.adjustment_type,'PROCEEDS CLR',
4236                      decode(adj.debit_credit_flag,
4237                      'DR',adj.adjustment_amount,
4238                      'CR', -1 * adj.adjustment_amount))),0) -
4239           nvl(sum(decode(adj.adjustment_type,'REMOVALCOST CLR',
4240                      decode(adj.debit_credit_flag,
4241                      'CR',adj.adjustment_amount,
4242                      'DR', -1 * adj.adjustment_amount))),0)
4243      from fa_adjustments adj
4244     where adj.book_type_code = h_book_type_code
4245       and adj.asset_id = h_member_asset_id
4246       and adj.period_counter_adjusted = h_period_counter
4247       and nvl(adj.track_member_flag, 'N') = 'N';   -- ENERGY
4248 
4249 --* Cursor for FA_ADJUSTMENTS
4250 cursor FA_ADJ_RESERVE_MRC is
4251   select /*+ ORDERED
4252                   Index(TH2 FA_TRANSACTION_HEADERS_N1)
4253                   INDEX(TH1 FA_TRANSACTION_HEADERS_N7)
4254                   INDEX(ADJ FA_ADJUSTMENTS_U1)*/
4255           sum(decode(adj.adjustment_type,'RESERVE',
4256                      decode(adj.debit_credit_flag,
4257                      'CR',adj.adjustment_amount,
4258                      'DR', -1 * adj.adjustment_amount))),
4259           sum(decode(adj.adjustment_type,'BONUS RESERVE',
4260                      decode(adj.debit_credit_flag,
4261                      'CR',adj.adjustment_amount,
4262                      'DR', -1 * adj.adjustment_amount))),
4263           nvl(sum(decode(adj.adjustment_type,'PROCEEDS CLR',
4264                      decode(adj.debit_credit_flag,
4265                      'DR',adj.adjustment_amount,
4266                      'CR', -1 * adj.adjustment_amount))),0) +
4267           nvl(sum(decode(adj.adjustment_type,'REMOVALCOST CLR',
4268                      decode(adj.debit_credit_flag,
4269                      'CR',adj.adjustment_amount,
4270                      'DR', -1 * adj.adjustment_amount))),0)
4271      from fa_transaction_headers th2,
4272           fa_transaction_headers th1,
4273           fa_mc_adjustments adj
4274     where adj.transaction_header_id = th1.transaction_header_id
4275       and adj.asset_id = h_group_asset_id
4276       and adj.book_type_code = h_book_type_code
4277       and adj.period_counter_adjusted = h_period_counter
4278       and adj.set_of_books_id = h_set_of_books_id
4279       and th1.asset_id = adj.asset_id
4280       and th1.member_transaction_header_id = th2.transaction_header_id
4281       and th2.asset_id = h_member_asset_id
4282       and th2.transaction_header_id <> nvl(h_adj_member_trans_header_id,0);
4283 
4284 cursor FA_ADJ_RESERVE_MEM_MRC is
4285    select sum(decode(adj.adjustment_type,'RESERVE',
4286                      decode(adj.debit_credit_flag,
4287                      'CR',adj.adjustment_amount,
4288                      'DR', -1 * adj.adjustment_amount))),
4289           sum(decode(adj.adjustment_type,'BONUS RESERVE',
4290                      decode(adj.debit_credit_flag,
4291                      'CR',adj.adjustment_amount,
4292                      'DR', -1 * adj.adjustment_amount))),
4293           nvl(sum(decode(adj.adjustment_type,'PROCEEDS CLR',
4294                      decode(adj.debit_credit_flag,
4295                      'DR',adj.adjustment_amount,
4296                      'CR', -1 * adj.adjustment_amount))),0) +
4297           nvl(sum(decode(adj.adjustment_type,'REMOVALCOST CLR',
4298                      decode(adj.debit_credit_flag,
4299                      'CR',adj.adjustment_amount,
4300                      'DR', -1 * adj.adjustment_amount))),0)
4301      from fa_mc_adjustments adj
4302     where adj.book_type_code = h_book_type_code
4303       and adj.asset_id = h_member_asset_id
4304       and adj.set_of_books_id = h_set_of_books_id
4305       and adj.period_counter_adjusted = h_period_counter
4306       and nvl(adj.track_member_flag, 'N') = 'N';   -- ENERGY
4307 
4308 cursor GET_TRANS_ASSET_TYPE is
4309    select ad.asset_type
4310      from fa_transaction_headers th,
4311           fa_additions_b ad
4312     where th.transaction_header_id = p_group_rule_in.adj_transaction_header_id
4313       and ad.asset_id = th.asset_id;
4314 
4315 cursor GET_NEW_BOOKS is
4316    select new_bk.cost,
4317           new_bk.salvage_value,
4318           new_bk.adjusted_recoverable_cost,
4319           new_bk.salvage_type,
4320           new_bk.percent_salvage_value,
4321           new_bk.deprn_limit_type,
4322           new_bk.allowed_deprn_limit
4323      from fa_books new_bk
4324     where new_bk.book_type_code = p_group_rule_in.book_type_code
4325       and new_bk.asset_id = h_member_asset_id
4326       and new_bk.transaction_header_id_in = h_adj_member_trans_header_id;
4327 
4328 cursor GET_NEW_BOOKS_MRC is
4329    select new_bk.cost,
4330           new_bk.salvage_value,
4331           new_bk.adjusted_recoverable_cost,
4332           new_bk.salvage_type,
4333           new_bk.percent_salvage_value,
4334           new_bk.deprn_limit_type,
4335           new_bk.allowed_deprn_limit
4336      from fa_mc_books new_bk
4337     where new_bk.book_type_code = p_group_rule_in.book_type_code
4338       and new_bk.asset_id = h_member_asset_id
4339       and new_bk.transaction_header_id_in = h_adj_member_trans_header_id
4340       and new_bk.set_of_books_id = h_set_of_books_id;
4341 
4342 cursor GET_EXCLUDE_FULLY_RSV_FLAG is
4343   select exclude_fully_rsv_flag
4344     from fa_books
4345    where book_type_code = h_book_type_code
4346      and asset_id = h_group_asset_id
4347      and date_ineffective is null;
4348 
4349 cursor GET_EXCLUDE_FULLY_RSV_FLAG_MRC is
4350   select exclude_fully_rsv_flag
4351     from fa_mc_books
4352    where book_type_code = h_book_type_code
4353      and asset_id = h_group_asset_id
4354      and date_ineffective is null
4355      and set_of_books_id = h_set_of_books_id;
4356 
4357 begin
4358 
4359 if p_group_rule_in.tracking_method = 'ALLOCATE' and nvl(l_process_deprn_for_member,'YES') = 'YES' then
4360 
4361 if (p_log_level_rec.statement_level) then
4362     fa_debug_pkg.add(l_calling_fn, '+++ Update Depreciable Basis for member assets +++', '+++', p_log_level_rec => p_log_level_rec);
4363 end if;
4364 
4365 -- Initialization
4366 h_book_type_code := p_group_rule_in.book_type_code;
4367 h_group_asset_id := p_group_rule_in.asset_id;
4368 h_period_counter := p_group_rule_in.period_counter;
4369 h_fiscal_year    := p_group_rule_in.fiscal_year;
4370 h_cur_period_counter := FA_CACHE_PKG.fazcbc_record.last_period_counter + 1;
4371 h_set_of_books_id := p_group_rule_in.set_of_books_id;
4372 
4373 /* Apply MRC related feature */
4374 if p_group_rule_in.mrc_sob_type_code <> 'R' then
4375 
4376   open GET_EXCLUDE_FULLY_RSV_FLAG;
4377   fetch GET_EXCLUDE_FULLY_RSV_FLAG into h_exclude_fully_rsv_flag;
4378   close GET_EXCLUDE_FULLY_RSV_FLAG;
4379 else
4380 
4381   open GET_EXCLUDE_FULLY_RSV_FLAG_MRC;
4382   fetch GET_EXCLUDE_FULLY_RSV_FLAG_MRC into h_exclude_fully_rsv_flag;
4383   close GET_EXCLUDE_FULLY_RSV_FLAG_MRC;
4384 end if;
4385 
4386 if (p_log_level_rec.statement_level) then
4387     fa_debug_pkg.add(l_calling_fn, 'h_sob_id:group_asset_id:period_counter:fiscal_year:cur_period_num:mode',
4388                            h_set_of_books_id||':'||h_group_asset_id||':'||h_period_counter||':'||h_fiscal_year||':'||h_cur_period_counter||':'||p_mode, p_log_level_rec => p_log_level_rec);
4389 end if;
4390 
4391 -- If this is called during Adjustment and this is oldest period to be calculated,
4392 -- Query necessary data from table and insert those into FA_TRACKING_TEMP
4393 
4394 if nvl(P_mode,'DEPRECIATION') = 'ADJUSTMENT' then
4395 
4396       if not p_track_member_table.exists(1) then
4397         if (p_log_level_rec.statement_level) then
4398           fa_debug_pkg.add(l_calling_fn, '++ populate previous rows call ++', 'ADJUSTMENT MDOE', p_log_level_rec => p_log_level_rec);
4399           fa_debug_pkg.add(l_calling_fn, 'h_period_counter', h_period_counter, p_log_level_rec => p_log_level_rec);
4400         end if;
4401 
4402         l_transaction_header_id := p_group_rule_in.adj_mem_transaction_header_id;
4403 
4404         if p_group_rule_in.adj_mem_transaction_header_id is null and
4405            p_group_rule_in.adj_transaction_header_id is not null then
4406 
4407           open GET_TRANS_ASSET_TYPE;
4408           fetch GET_TRANS_ASSET_TYPE into l_adj_asset_type;
4409           close GET_TRANS_ASSET_TYPE;
4410 
4411           if l_adj_asset_type = 'CAPITALIZED' then
4412             l_transaction_header_id := p_group_rule_in.adj_transaction_header_id;
4413           end if;
4414         end if;
4415 
4416         if not populate_previous_rows(p_book_type_code => h_book_type_code,
4417                                       p_group_asset_id => h_group_asset_id,
4418                                       p_period_counter => h_period_counter,
4419                                       p_fiscal_year    => h_fiscal_year,
4420                                       p_transaction_header_id => l_transaction_header_id,
4421                                       p_allocate_to_fully_ret_flag => p_group_rule_in.allocate_to_fully_ret_flag,
4422                                       p_allocate_to_fully_rsv_flag => p_group_rule_in.allocate_to_fully_rsv_flag,
4423                                       p_mrc_sob_type_code => p_group_rule_in.mrc_sob_type_code,
4424                                       p_set_of_books_id=>h_set_of_books_id,
4425                       p_log_level_rec => p_log_level_rec) then
4426           if (p_log_level_rec.statement_level) then
4427             fa_debug_pkg.add(l_calling_fn, '++ populate_member_amounts_table ++', 'Returned FALSE', p_log_level_rec => p_log_level_rec);
4428           end if;
4429           raise upd_deprn_err;
4430         end if;
4431       end if; -- End of preparion for Adjustment mode
4432 
4433       if (p_log_level_rec.statement_level) then
4434          fa_debug_pkg.add(l_calling_fn, '++ populate_previous_rows done ++', '+++', p_log_level_rec => p_log_level_rec);
4435          fa_debug_pkg.add(l_calling_fn, 'group_in.adj_transaction_header_id',
4436                                                           p_group_rule_in.adj_transaction_header_id, p_log_level_rec => p_log_level_rec);
4437       end if;
4438 
4439       -- Before starting to process member deprn basis update,
4440       -- check the transaction if Transaction Header ID is not Null
4441       -- If the transaction is made as Addition, dummy row will be inserted
4442       -- into tracking table
4443 
4444       h_adj_member_trans_header_id := NULL;
4445       if p_group_rule_in.adj_mem_transaction_header_id is not NULL then
4446           -- In this period, come transaction has occurred.
4447           h_adj_member_trans_header_id := p_group_rule_in.adj_mem_transaction_header_id;
4448 
4449           if (p_log_level_rec.statement_level) then
4450              fa_debug_pkg.add(l_calling_fn, '++ Logic for member header id is not NULL ++', '+++', p_log_level_rec => p_log_level_rec);
4451              fa_debug_pkg.add(l_calling_fn, 'h_adj_member_trans_header_id', h_adj_member_trans_header_id, p_log_level_rec => p_log_level_rec);
4452           end if;
4453 
4454           select asset_id,transaction_type_code,transaction_key,nvl(amortization_start_date,transaction_date_entered)
4455             into h_asset_id,h_transaction_type_code,h_transaction_key,l_transaction_date_entered
4456             from fa_transaction_headers
4457            where transaction_header_id = h_adj_member_trans_header_id;
4458 
4459           h_period_per_fiscal_year := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
4460 
4461           select fiscal_year_name, deprn_calendar
4462             into h_fiscal_year_name,h_calendar_type
4463             from fa_book_controls
4464            where book_type_code=h_book_type_code;
4465 
4466           select fiscal_year into h_trans_fiscal_year
4467             from fa_fiscal_year
4468            where fiscal_year_name = h_fiscal_year_name
4469              and start_date <= l_transaction_date_entered
4470              and end_date >= l_transaction_date_entered;
4471 
4472           select period_num into h_trans_period_num
4473             from fa_calendar_periods
4474            where calendar_type = h_calendar_type
4475              and start_date <= l_transaction_date_entered
4476              and end_date >= l_transaction_date_entered;
4477 
4478           h_trans_period_counter := h_trans_fiscal_year*h_period_per_fiscal_year+h_trans_period_num;
4479 
4480           if (p_log_level_rec.statement_level) then
4481             fa_debug_pkg.add(l_calling_fn, 'h_asset_id', h_asset_id, p_log_level_rec => p_log_level_rec);
4482             fa_debug_pkg.add(l_calling_fn, 'h_transaction_type_code:h_transaction_key', h_transaction_type_code||':'||h_transaction_key, p_log_level_rec => p_log_level_rec);
4483             fa_debug_pkg.add(l_calling_fn, 'h_trans_period_counter', h_trans_period_counter, p_log_level_rec => p_log_level_rec);
4484           end if;
4485       end if;
4486 
4487     if p_group_rule_in.event_type <> 'AFTER_DEPRN' then
4488 
4489       For i in 1 .. p_track_member_table.count loop
4490 
4491         if (p_log_level_rec.statement_level) then
4492            fa_debug_pkg.add(l_calling_fn, '+++ In Loop (1): Loop indicator +++', i);
4493            fa_debug_pkg.add(l_calling_fn, 'Loop until (exit number)', p_track_member_table.count);
4494         end if;
4495 
4496         l_track_member := p_track_member_table(i);
4497 
4498         if  nvl(l_track_member.group_Asset_id, -99) = h_group_asset_id and
4499             l_track_member.period_counter = nvl(h_trans_period_counter,-99) and
4500             nvl(l_track_member.set_of_books_id,-99) = nvl(h_set_of_books_id,-99) and
4501           ((nvl(p_group_rule_in.allocate_to_fully_ret_flag,'N') = 'N' and
4502             nvl(p_group_rule_in.allocate_to_fully_rsv_flag,'N') = 'N' and
4503             nvl(l_track_member.fully_retired_flag,'N') = 'N' and nvl(l_track_member.fully_reserved_flag,'N') = 'N')
4504           or
4505            (nvl(p_group_rule_in.allocate_to_fully_ret_flag,'N') = 'Y' and
4506             nvl(p_group_rule_in.allocate_to_fully_rsv_flag,'N') = 'N' and
4507             nvl(l_track_member.fully_reserved_flag,'N') = 'N')
4508           or
4509            (nvl(p_group_rule_in.allocate_to_fully_ret_flag,'N') = 'N' and
4510             nvl(p_group_rule_in.allocate_to_fully_rsv_flag,'N') = 'Y' and
4511             nvl(l_track_member.fully_retired_flag,'N') = 'N')
4512           or
4513            (nvl(p_group_rule_in.allocate_to_fully_ret_flag,'N') = 'Y' and
4514             nvl(p_group_rule_in.allocate_to_fully_rsv_flag,'N') = 'Y'))
4515 
4516         then
4517 
4518         if (p_log_level_rec.statement_level) then
4519            fa_debug_pkg.add(l_calling_fn, 'member_table('||i||').member_asset_id:retired_flag:reserved_flag:period_counter',
4520                                           p_track_member_table(i).member_asset_id||':'||p_track_member_table(i).fully_retired_flag||':'||
4521                                           p_track_member_table(i).fully_reserved_flag||':'||p_track_member_table(i).period_counter);
4522         end if;
4523 
4524         h_member_asset_id := l_track_member.member_asset_id;
4525         if (p_log_level_rec.statement_level) then
4526            fa_debug_pkg.add(l_calling_fn, '++ In Loop (2) + h_member_asset_id', h_member_asset_id);
4527         end if;
4528 
4529         h_adj_eofy_reserve := 0;
4530 
4531         -- Get the delta for this transaction
4532         if nvl(h_asset_id,-99) = h_member_asset_id
4533 --           and nvl(h_transaction_type_code,'NULL') <> 'ADDITION'
4534 --           and nvl(h_transaction_type_code,'NULL') <> 'ADDITION/VOID' then
4535            and h_period_counter = h_trans_period_counter then -- This transaction is for this member
4536 
4537            -- Query old fa_books and new fa_books to calculate delta
4538           if p_group_rule_in.mrc_sob_type_code <> 'R' then
4539             open GET_DELTA;
4540             fetch GET_DELTA into h_adj_cost,h_adj_salvage_value,h_adj_adjusted_rec_cost,
4541                                  h_adj_salvage_type,h_adj_percent_salvage,
4542                                  h_adj_limit_type,h_adj_percent_limit;
4543             if GET_DELTA%NOTFOUND then
4544               open GET_NEW_BOOKS;
4545               fetch GET_NEW_BOOKS into h_adj_cost,h_adj_salvage_value,h_adj_adjusted_rec_cost,
4546                                        h_adj_salvage_type,h_adj_percent_salvage,
4547                                        h_adj_limit_type,h_adj_percent_limit;
4548               if GET_NEW_BOOKS%NOTFOUND then
4549                 h_adj_cost := 0;
4550                 h_adj_salvage_value := 0;
4551                 h_adj_adjusted_rec_cost := 0;
4552                 h_adj_salvage_type := 'NULL';
4553                 h_adj_percent_salvage := 0;
4554                 h_adj_limit_type := 'NULL';
4555                 h_adj_percent_limit := 0;
4556               end if;
4557               close GET_NEW_BOOKS;
4558             end if;
4559             close GET_DELTA;
4560           else
4561             open GET_DELTA_MRC;
4562             fetch GET_DELTA_MRC into h_adj_cost,h_adj_salvage_value,h_adj_adjusted_rec_cost,
4563                                      h_adj_salvage_type,h_adj_percent_salvage,
4564                                      h_adj_limit_type,h_adj_percent_limit;
4565 
4566             if GET_DELTA_MRC%NOTFOUND then
4567               open GET_NEW_BOOKS_MRC;
4568               fetch GET_NEW_BOOKS_MRC into h_adj_cost,h_adj_salvage_value,h_adj_adjusted_rec_cost,
4569                                            h_adj_salvage_type,h_adj_percent_salvage,
4570                                            h_adj_limit_type,h_adj_percent_limit;
4571 
4572               if GET_NEW_BOOKS_MRC%NOTFOUND then
4573                 h_adj_cost := 0;
4574                 h_adj_salvage_value := 0;
4575                 h_adj_adjusted_rec_cost := 0;
4576                 h_adj_salvage_type := 'NULL';
4577                 h_adj_percent_salvage := 0;
4578                 h_adj_limit_type := 'NULL';
4579                 h_adj_percent_limit := 0;
4580               end if;
4581               close GET_NEW_BOOKS_MRC;
4582             end if;
4583             close GET_DELTA_MRC;
4584           end if;
4585 
4586           if nvl(h_asset_id,-99) = h_member_asset_id
4587            and h_period_counter = h_trans_period_counter
4588            and nvl(h_transaction_type_code,'NULL') in ('PARTIAL RETIREMENT','FULL RETIREMENT') then
4589 
4590            -- Query fa_retirements for entered eofy_reserve
4591             if p_group_rule_in.mrc_sob_type_code <> 'R' then
4592 
4593               select recognize_gain_loss,nvl(eofy_reserve,0),(-1)*nvl(reserve_retired,0)
4594                 into h_recognize_gain_loss,h_adj_eofy_reserve,h_reserve_retired
4595                 from fa_retirements
4596                where transaction_header_id_in = h_adj_member_trans_header_id;
4597             else
4598 
4599               select recognize_gain_loss,nvl(eofy_reserve,0),(-1)*nvl(reserve_retired,0)
4600                 into h_recognize_gain_loss,h_adj_eofy_reserve,h_reserve_retired
4601                 from fa_mc_retirements
4602                where transaction_header_id_in = h_adj_member_trans_header_id
4603                  and set_of_books_id = h_set_of_books_id;
4604             end if;
4605 
4606             if nvl(h_recognize_gain_loss,'NO') = 'NO' then
4607               h_adj_eofy_reserve := 0;
4608             end if;
4609 
4610             if (p_log_level_rec.statement_level) then
4611               fa_debug_pkg.add(l_calling_fn, 'h_adj_eofy_reserve', h_adj_eofy_reserve, p_log_level_rec => p_log_level_rec);
4612             end if;
4613           end if;
4614         else  -- This transaction is not for this transaction
4615           h_adj_cost := 0;
4616           h_adj_salvage_value := 0;
4617           h_adj_adjusted_rec_cost := 0;
4618           h_adj_salvage_type := 'NULL';
4619           h_adj_percent_salvage := 0;
4620           h_adj_limit_type := 'NULL';
4621           h_adj_percent_limit := 0;
4622         end if;
4623 
4624 -- get reserve/expense adjustments
4625         if p_group_rule_in.mrc_sob_type_code <> 'R' then
4626           open FA_ADJ_RESERVE;
4627           fetch FA_ADJ_RESERVE into h_rsv_adjustment,h_bonus_rsv_adjustment,h_net_proceeds;
4628           close FA_ADJ_RESERVE;
4629 
4630           open FA_ADJ_RESERVE_MEM;
4631           fetch FA_ADJ_RESERVE_MEM into h_rsv_adjustment_mem,h_bonus_rsv_adj_mem,h_net_proceeds_mem;
4632           close FA_ADJ_RESERVE_MEM;
4633         else
4634           open FA_ADJ_RESERVE_MRC;
4635           fetch FA_ADJ_RESERVE_MRC into h_rsv_adjustment,h_bonus_rsv_adjustment,h_net_proceeds;
4636           close FA_ADJ_RESERVE_MRC;
4637 
4638           open FA_ADJ_RESERVE_MEM_MRC;
4639           fetch FA_ADJ_RESERVE_MEM_MRC into h_rsv_adjustment_mem,h_bonus_rsv_adj_mem,h_net_proceeds_mem;
4640           close FA_ADJ_RESERVE_MEM_MRC;
4641         end if;
4642 
4643       -- Added member level catchup and reserve adjustment
4644         h_catchup_expense := nvl(h_catchup_expense,0) + nvl(h_catchup_expense_mem,0);
4645         h_bonus_catchup_expense := nvl(h_bonus_catchup_expense,0) + nvl(h_bonus_catchup_mem,0);
4646         h_rsv_adjustment := nvl(h_rsv_adjustment,0) + nvl(h_rsv_adjustment_mem,0) + nvl(h_reserve_retired,0);
4647         h_bonus_rsv_adjustment := nvl(h_bonus_rsv_adjustment,0) + nvl(h_bonus_rsv_adj_mem,0);
4648 
4649         h_rsv_adjustment := nvl(h_rsv_adjustment,0) + nvl(h_catchup_expense,0);
4650         h_bonus_rsv_adjustment := nvl(h_bonus_rsv_adjustment,0) + nvl(h_bonus_catchup_expense,0);
4651         h_net_proceeds := nvl(h_net_proceeds,0);
4652         h_catchup_expense := nvl(h_catchup_expense,0);
4653         h_bonus_catchup_expense := nvl(h_bonus_catchup_expense,0);
4654 
4655         if (p_log_level_rec.statement_level) then
4656            fa_debug_pkg.add(l_calling_fn, 'h_catchup_expense:h_bonus_catchup_expense', h_catchup_expense||':'||h_bonus_catchup_expense, p_log_level_rec => p_log_level_rec);
4657            fa_debug_pkg.add(l_calling_fn, 'h_rsv_adjustment:h_bonus_rsv_adjustment', h_rsv_adjustment||':'||h_bonus_rsv_adjustment, p_log_level_rec => p_log_level_rec);
4658            fa_debug_pkg.add(l_calling_fn, 'h_net_proceeds', h_net_proceeds, p_log_level_rec => p_log_level_rec);
4659         end if;
4660 
4661         h_current_cost := l_track_member.cost;
4662         h_current_salvage_value := l_track_member.salvage_value;
4663         h_current_recoverable_cost := l_track_member.recoverable_cost;
4664         h_current_adjusted_cost := l_track_member.adjusted_cost;
4665         h_current_adj_recoverable_cost := l_track_member.adjusted_recoverable_cost;
4666 
4667         -- Update current cost
4668         if nvl(h_asset_id,-99) = h_member_asset_id
4669            and nvl(h_transaction_type_code,'NULL') in ('FULL RETIREMENT','PARTIAL RETIREMENT') then
4670           if nvl(h_recognize_gain_loss,'NO') = 'YES' then
4671             h_current_cost := h_current_cost + h_adj_cost;
4672           else
4673             h_current_cost := h_current_cost;
4674           end if;
4675         else
4676           h_current_cost := h_current_cost + h_adj_cost;
4677         end if;
4678 
4679         if h_adj_salvage_type = 'PCT' then
4680           h_current_salvage_value := h_current_cost * h_adj_percent_salvage;
4681         else
4682           h_current_salvage_value := h_current_salvage_value + h_adj_salvage_value;
4683         end if;
4684 
4685         h_current_recoverable_cost := h_current_cost - h_current_salvage_value;
4686 
4687         if h_adj_limit_type = 'PCT' then
4688           h_current_adj_recoverable_cost := h_current_cost * h_adj_percent_limit;
4689         else
4690           h_current_adj_recoverable_cost := h_current_adj_recoverable_cost + h_adj_adjusted_rec_cost;
4691         end if;
4692 
4693         if l_track_member.cost = 0 then -- fully retired now
4694            x_fully_retired_flag := 'Y';
4695         else
4696            x_fully_retired_flag := 'N';
4697         end if;
4698 
4699         -- Set the input parameters for Deprn Basis Rule
4700         fa_rule_in := p_group_rule_in;
4701 
4702         fa_rule_in.group_asset_id := h_group_asset_id;
4703         fa_rule_in.asset_id := l_track_member.member_asset_id;
4704 
4705         if nvl(h_asset_id,-99) = h_member_asset_id
4706            and nvl(h_transaction_type_code,'NULL') in ('FULL RETIREMENT','PARTIAL RETIREMENT') then
4707           fa_rule_in.event_type := 'RETIREMENT';
4708           fa_rule_in.adjustment_amount := (-1)*fa_rule_in.adjustment_amount;
4709         end if;
4710 
4711         -- Get Asset type
4712         select asset_type into x_asset_type
4713           from fa_additions_b
4714          where asset_id = l_track_member.member_asset_id;
4715 
4716         fa_rule_in.asset_type := x_asset_type;
4717         if nvl(h_asset_id,-99) <> l_track_member.member_asset_id then
4718           fa_rule_in.adjustment_amount := 0;
4719         end if;
4720         fa_rule_in.cost := h_current_cost;
4721         fa_rule_in.salvage_value := h_current_salvage_value;
4722         fa_rule_in.recoverable_cost := h_current_recoverable_cost;
4723         fa_rule_in.adjusted_cost := l_track_member.adjusted_cost;
4724         fa_rule_in.current_total_rsv := l_track_member.deprn_reserve + h_rsv_adjustment;
4725         fa_rule_in.current_rsv := (l_track_member.deprn_reserve + h_rsv_adjustment)
4726                                  - (l_track_member.bonus_deprn_reserve + h_bonus_rsv_adjustment);
4727         fa_rule_in.current_total_ytd := l_track_member.ytd_deprn + h_catchup_expense;
4728         fa_rule_in.current_ytd := (l_track_member.ytd_deprn + h_catchup_expense)
4729                                  - (l_track_member.bonus_ytd_deprn + h_bonus_catchup_expense);
4730         fa_rule_in.old_adjusted_cost := h_current_adjusted_cost;
4731 
4732         -- Get eofy, eop amounts
4733         if not FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP
4734           (p_asset_id =>       fa_rule_in.asset_id,
4735            p_book_type_code => fa_rule_in.book_type_code,
4736            p_fiscal_year =>    fa_rule_in.fiscal_year,
4737            p_period_num =>     fa_rule_in.period_num,
4738            p_recoverable_cost => fa_rule_in.recoverable_cost,
4739            p_salvage_value => fa_rule_in.salvage_value,
4740            p_transaction_date_entered => fa_rule_in.transaction_date_entered,
4741            p_mrc_sob_type_code => p_group_rule_in.mrc_sob_type_code,
4742            p_set_of_books_id => p_group_rule_in.set_of_books_id,
4743            x_eofy_recoverable_cost => h_new_eofy_recoverable_cost,
4744            x_eofy_salvage_value => h_new_eofy_salvage_value,
4745            x_eop_recoverable_cost => h_new_eop_recoverable_cost,
4746            x_eop_salvage_value => h_new_eop_salvage_value, p_log_level_rec => p_log_level_rec) then
4747          raise upd_deprn_err;
4748         end if;
4749 
4750         fa_rule_in.eofy_recoverable_cost := h_new_eofy_recoverable_cost;
4751         fa_rule_in.eop_recoverable_cost := h_new_eop_recoverable_cost;
4752         fa_rule_in.eofy_salvage_value := h_new_eofy_salvage_value;
4753         fa_rule_in.eop_salvage_value := h_new_eop_salvage_value;
4754         fa_rule_in.eofy_reserve := l_track_member.eofy_reserve - nvl(h_adj_eofy_reserve,0);
4755 
4756         l_track_member.eofy_recoverable_cost := h_new_eofy_recoverable_cost;
4757         l_track_member.eop_recoverable_cost := h_new_eop_recoverable_cost;
4758         l_track_member.eofy_salvage_value := h_new_eofy_salvage_value;
4759         l_track_member.eop_salvage_value := h_new_eop_salvage_value;
4760 
4761         fa_rule_in.apply_reduction_flag := nvl(p_apply_reduction_flag,'N');
4762 
4763         if (p_log_level_rec.statement_level) then
4764           if not display_debug_message(fa_rule_in => fa_rule_in,
4765                                        p_calling_fn => l_calling_fn,
4766                                        p_log_level_rec => p_log_level_rec) then
4767             fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
4768           end if;
4769         end if;
4770 
4771         -- Call Deprn Basis Rule for this transaction or period
4772         if (not fa_calc_deprn_basis1_pkg.faxcdb(rule_in => fa_rule_in,
4773                                                 rule_out => fa_rule_out, p_log_level_rec => p_log_level_rec)) then
4774            raise upd_deprn_err;
4775         end if;
4776 
4777         if (p_log_level_rec.statement_level) then
4778            fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', h_member_asset_id, p_log_level_rec => p_log_level_rec);
4779            fa_debug_pkg.add(l_calling_fn, 'fa_rule_out.new_adjusted_cost',
4780                                                                    fa_rule_out.new_adjusted_cost, p_log_level_rec => p_log_level_rec);
4781            fa_debug_pkg.add(l_calling_fn, 'h_current_cost', h_current_cost, p_log_level_rec => p_log_level_rec);
4782         end if;
4783 
4784         -- delete from existing table
4785         delete_track_index(p_track_member_table(i).period_counter, p_track_member_table(i).member_asset_id,
4786                         p_track_member_table(i).group_asset_id,p_track_member_table(i).set_of_books_id, p_log_level_rec);
4787 
4788         p_track_member_table(i).group_asset_id := h_group_asset_id;
4789         p_track_member_table(i).member_asset_id := h_member_asset_id;
4790         p_track_member_table(i).period_counter := h_period_counter;
4791         p_track_member_table(i).fiscal_year := h_fiscal_year;
4792         p_track_member_table(i).set_of_books_id := h_set_of_books_id;
4793         p_track_member_table(i).cost := h_current_cost;
4794         p_track_member_table(i).adjusted_cost := fa_rule_out.new_adjusted_cost;
4795         p_track_member_table(i).salvage_value := h_current_salvage_value;
4796         p_track_member_table(i).recoverable_cost := h_current_recoverable_cost;
4797         p_track_member_table(i).adjusted_recoverable_cost := h_current_adj_recoverable_cost;
4798         p_track_member_table(i).eofy_reserve := l_track_member.eofy_reserve - nvl(h_adj_eofy_reserve,0);
4799         p_track_member_table(i).eofy_recoverable_cost := l_track_member.eofy_recoverable_cost;
4800         p_track_member_table(i).eop_recoverable_cost := l_track_member.eop_recoverable_cost;
4801         p_track_member_table(i).eofy_salvage_value := l_track_member.eofy_salvage_value;
4802         p_track_member_table(i).eop_salvage_value := l_track_member.eop_salvage_value;
4803 
4804         /* Populate index table */
4805         put_track_index(h_period_counter, h_member_asset_id,h_group_asset_id,h_set_of_books_id,i, p_log_level_rec);
4806 
4807         For j in 1 .. p_track_member_eofy_table.COUNT loop
4808          if p_track_member_eofy_table(j).group_asset_id = h_group_asset_id and
4809             p_track_member_eofy_table(j).member_asset_id = h_member_asset_id and
4810             nvl(p_track_member_eofy_table(j).set_of_books_id, -99) = nvl(h_set_of_books_id, -99) then
4811            p_track_member_eofy_table(j).cost := h_current_cost;
4812            p_track_member_eofy_table(j).salvage_value := h_current_salvage_value;
4813            p_track_member_eofy_table(j).recoverable_cost := h_current_recoverable_cost;
4814            p_track_member_eofy_table(j).adjusted_cost := fa_rule_out.new_adjusted_cost;
4815            p_track_member_eofy_table(j).eofy_reserve := p_track_member_table(i).eofy_reserve;
4816            exit;
4817          end if;
4818         END LOOP;
4819 
4820         if (p_log_level_rec.statement_level) then
4821            fa_debug_pkg.add(l_calling_fn, '++ Finally updated p_track_member_table ', i, p_log_level_rec => p_log_level_rec);
4822            if not display_debug_message2(i => i, p_calling_fn => l_calling_fn, p_log_level_rec=> p_log_level_rec) then
4823              fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
4824            end if;
4825         end if;
4826 
4827        end if; -- allocation type
4828       end loop;
4829 
4830     else -- In case of AFTER_DEPRN with ADJUSTMENT mode
4831 
4832       if (p_log_level_rec.statement_level) then
4833          fa_debug_pkg.add(l_calling_fn, '+++ In Loop (0) for AFTER_DEPRN ++ Indicator ++', 'Just before loop');
4834          fa_debug_pkg.add(l_calling_fn, 'h_group_asset_id:h_period_counter', h_group_asset_id||':'||h_period_counter, p_log_level_rec => p_log_level_rec);
4835          fa_debug_pkg.add(l_calling_fn, 'period_Counter to be updated', (h_period_counter + 1));
4836       end if;
4837 
4838       For i in 1 .. p_track_member_table.count loop
4839 
4840         if (p_log_level_rec.statement_level) then
4841            fa_debug_pkg.add(l_calling_fn, '+++ In Loop (1) for AFTER_DEPRN ++ Indicator ++', i);
4842            fa_debug_pkg.add(l_calling_fn, 'Loop until (exit number)', p_track_member_table.count);
4843         end if;
4844 
4845         l_track_member := p_track_member_table(i);
4846         if  nvl(l_track_member.group_asset_id, -99) = h_group_asset_id and
4847             l_track_member.period_counter = h_period_counter + 1 and
4848             nvl(l_track_member.set_of_books_id,-99) = nvl(h_set_of_books_id,-99) and
4849           ((nvl(p_group_rule_in.allocate_to_fully_ret_flag,'N') = 'N' and
4850             nvl(p_group_rule_in.allocate_to_fully_rsv_flag,'N') = 'N' and
4851             nvl(l_track_member.fully_retired_flag,'N') = 'N' and nvl(l_track_member.fully_reserved_flag,'N') = 'N')
4852           or
4853            (nvl(p_group_rule_in.allocate_to_fully_ret_flag,'N') = 'Y' and
4854             nvl(p_group_rule_in.allocate_to_fully_rsv_flag,'N') = 'N' and
4855             nvl(l_track_member.fully_reserved_flag,'N') = 'N')
4856           or
4857            (nvl(p_group_rule_in.allocate_to_fully_ret_flag,'N') = 'N' and
4858             nvl(p_group_rule_in.allocate_to_fully_rsv_flag,'N') = 'Y' and
4859             nvl(l_track_member.fully_retired_flag,'N') = 'N')
4860           or
4861            (nvl(p_group_rule_in.allocate_to_fully_ret_flag,'N') = 'Y' and
4862             nvl(p_group_rule_in.allocate_to_fully_rsv_flag,'N') = 'Y'))
4863 
4864         then
4865 
4866         if (p_log_level_rec.statement_level) then
4867            fa_debug_pkg.add(l_calling_fn, 'p_track_member_table('||i||').member_asset_id:retired_flag:reserved_flag:period_counter',
4868                                                         p_track_member_table(i).member_asset_id||':'||p_track_member_table(i).fully_retired_flag||':'||
4869                                                         p_track_member_table(i).fully_reserved_flag||':'||p_track_member_table(i).period_counter);
4870         end if;
4871 
4872         h_member_asset_id := l_track_member.member_asset_id;
4873         if (p_log_level_rec.statement_level) then
4874            fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', h_member_asset_id, p_log_level_rec => p_log_level_rec);
4875         end if;
4876 
4877         h_current_cost := l_track_member.cost;
4878         h_current_salvage_value := l_track_member.salvage_value;
4879         h_current_recoverable_cost := l_track_member.recoverable_cost;
4880         h_current_adjusted_cost := l_track_member.adjusted_cost;
4881         h_current_adj_recoverable_cost := l_track_member.adjusted_recoverable_cost;
4882 
4883         if l_track_member.cost = 0 then -- fully retired now
4884            x_fully_retired_flag := 'Y';
4885         else
4886            x_fully_retired_flag := 'N';
4887         end if;
4888 
4889         -- Set the input parameters for Deprn Basis Rule
4890         fa_rule_in := p_group_rule_in;
4891 
4892         fa_rule_in.group_asset_id := h_group_asset_id;
4893         fa_rule_in.asset_id := l_track_member.member_asset_id;
4894 
4895         -- Get Asset type
4896         select asset_type into x_asset_type
4897           from fa_additions_b
4898          where asset_id = h_member_asset_id;
4899 
4900 -- get reserve/expense adjustments
4901         if p_group_rule_in.mrc_sob_type_code <> 'R' then
4902           open FA_ADJ_RESERVE;
4903           fetch FA_ADJ_RESERVE into h_rsv_adjustment,h_bonus_rsv_adjustment,h_net_proceeds;
4904           close FA_ADJ_RESERVE;
4905 
4906 
4907           open FA_ADJ_RESERVE_MEM;
4908           fetch FA_ADJ_RESERVE_MEM into h_rsv_adjustment_mem,h_bonus_rsv_adj_mem,h_net_proceeds_mem;
4909           close FA_ADJ_RESERVE_MEM;
4910 
4911         else
4912           open FA_ADJ_RESERVE_MRC;
4913           fetch FA_ADJ_RESERVE_MRC into h_rsv_adjustment,h_bonus_rsv_adjustment,h_net_proceeds;
4914           close FA_ADJ_RESERVE_MRC;
4915 
4916           open FA_ADJ_RESERVE_MEM_MRC;
4917           fetch FA_ADJ_RESERVE_MEM_MRC into h_rsv_adjustment_mem,h_bonus_rsv_adj_mem,h_net_proceeds_mem;
4918           close FA_ADJ_RESERVE_MEM_MRC;
4919 
4920         end if;
4921 
4922       -- Added member level catchup and reserve adjustment
4923         h_catchup_expense := nvl(h_catchup_expense,0) + nvl(h_catchup_expense_mem,0);
4924         h_bonus_catchup_expense := nvl(h_bonus_catchup_expense,0) + nvl(h_bonus_catchup_mem,0);
4925         h_rsv_adjustment := nvl(h_rsv_adjustment,0) + nvl(h_rsv_adjustment_mem,0);
4926         h_bonus_rsv_adjustment := nvl(h_bonus_rsv_adjustment,0) + nvl(h_bonus_rsv_adj_mem,0);
4927 
4928         h_rsv_adjustment := nvl(h_rsv_adjustment,0) + nvl(h_catchup_expense,0);
4929         h_bonus_rsv_adjustment := nvl(h_bonus_rsv_adjustment,0) + nvl(h_bonus_catchup_expense,0);
4930         h_net_proceeds := nvl(h_net_proceeds,0);
4931         h_catchup_expense := nvl(h_catchup_expense,0);
4932         h_bonus_catchup_expense := nvl(h_bonus_catchup_expense,0);
4933 
4934         if (p_log_level_rec.statement_level) then
4935            fa_debug_pkg.add(l_calling_fn, 'h_catchup_expense:h_bonus_catchup_expense', h_catchup_expense||':'||h_bonus_catchup_expense, p_log_level_rec => p_log_level_rec);
4936            fa_debug_pkg.add(l_calling_fn, 'h_rsv_adjustment:h_bonus_rsv_adjustment', h_rsv_adjustment||':'||h_bonus_rsv_adjustment, p_log_level_rec => p_log_level_rec);
4937            fa_debug_pkg.add(l_calling_fn, 'h_net_proceeds', h_net_proceeds, p_log_level_rec => p_log_level_rec);
4938         end if;
4939 
4940         fa_rule_in.asset_type := x_asset_type;
4941         fa_rule_in.adjustment_amount := nvl(x_added_cost,0) + nvl(x_retired_cost,0);
4942         fa_rule_in.cost := h_current_cost;
4943         fa_rule_in.salvage_value := h_current_salvage_value;
4944         fa_rule_in.recoverable_cost := h_current_recoverable_cost;
4945         fa_rule_in.adjusted_cost := l_track_member.adjusted_cost;
4946         fa_rule_in.current_total_rsv := l_track_member.deprn_reserve + h_rsv_adjustment;
4947         fa_rule_in.current_rsv := (l_track_member.deprn_reserve + h_rsv_adjustment)
4948                                  - (l_track_member.bonus_deprn_reserve + h_bonus_rsv_adjustment);
4949         fa_rule_in.current_total_ytd := l_track_member.ytd_deprn + h_catchup_expense;
4950         fa_rule_in.current_ytd := (l_track_member.ytd_deprn + h_catchup_expense)
4951                                  - (l_track_member.bonus_ytd_deprn + h_bonus_catchup_expense);
4952         fa_rule_in.old_adjusted_cost := h_current_adjusted_cost;
4953 
4954         fa_rule_in.eofy_reserve := l_track_member.eofy_reserve;
4955 
4956         -- Get eofy, eop amounts
4957         if not FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP
4958           (p_asset_id =>       fa_rule_in.asset_id,
4959            p_book_type_code => fa_rule_in.book_type_code,
4960            p_fiscal_year =>    fa_rule_in.fiscal_year,
4961            p_period_num =>     fa_rule_in.period_num,
4962            p_recoverable_cost => fa_rule_in.recoverable_cost,
4963            p_salvage_value => fa_rule_in.salvage_value,
4964            p_transaction_date_entered => fa_rule_in.transaction_date_entered,
4965            p_mrc_sob_type_code => p_group_rule_in.mrc_sob_type_code,
4966            p_set_of_books_id =>  p_group_rule_in.set_of_books_id,
4967            x_eofy_recoverable_cost => h_new_eofy_recoverable_cost,
4968            x_eofy_salvage_value => h_new_eofy_salvage_value,
4969            x_eop_recoverable_cost => h_new_eop_recoverable_cost,
4970            x_eop_salvage_value => h_new_eop_salvage_value, p_log_level_rec => p_log_level_rec) then
4971          raise upd_deprn_err;
4972 
4973         end if;
4974 
4975         fa_rule_in.eofy_recoverable_cost := h_new_eofy_recoverable_cost;
4976         fa_rule_in.eop_recoverable_cost := h_new_eop_recoverable_cost;
4977         fa_rule_in.eofy_salvage_value := h_new_eofy_salvage_value;
4978         fa_rule_in.eop_salvage_value := h_new_eop_salvage_value;
4979 
4980         fa_rule_in.apply_reduction_flag := nvl(p_apply_reduction_flag,'N');
4981 
4982         if (p_log_level_rec.statement_level) then
4983            if not display_debug_message(fa_rule_in => fa_rule_in,
4984                                         p_calling_fn => l_calling_fn,
4985                                         p_log_level_rec => p_log_level_rec) then
4986              fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
4987            end if;
4988         end if;
4989 
4990         -- Call Deprn Basis Rule for this transaction or period
4991         if (not fa_calc_deprn_basis1_pkg.faxcdb(rule_in => fa_rule_in,
4992                                                 rule_out => fa_rule_out, p_log_level_rec => p_log_level_rec)) then
4993            raise upd_deprn_err;
4994         end if;
4995 
4996         if (p_log_level_rec.statement_level) then
4997            fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', h_member_asset_id, p_log_level_rec => p_log_level_rec);
4998            fa_debug_pkg.add(l_calling_fn, 'fa_rule_out.new_adjusted_cost', fa_rule_out.new_adjusted_cost, p_log_level_rec => p_log_level_rec);
4999            fa_debug_pkg.add(l_calling_fn, 'h_current_cost', h_current_cost, p_log_level_rec => p_log_level_rec);
5000         end if;
5001 
5002          -- Calculate EOFY_RESERVE as prior year reserve amount
5003          if nvl(fa_rule_in.eofy_flag,'N') = 'Y' then
5004            h_new_eofy_reserve := l_track_member.deprn_reserve;
5005          else
5006            h_new_eofy_reserve := l_track_member.eofy_reserve;
5007          end if;
5008 
5009         if (p_log_level_rec.statement_level) then
5010            fa_debug_pkg.add(l_calling_fn, 'update_deprn:h_new_eofy_reserve', h_new_eofy_reserve, p_log_level_rec => p_log_level_rec);
5011         end if;
5012 
5013         p_track_member_table(i).adjusted_cost := fa_rule_out.new_adjusted_cost;
5014         p_track_member_table(i).eofy_reserve := h_new_eofy_reserve;
5015 
5016         if (p_log_level_rec.statement_level) then
5017           fa_debug_pkg.add(l_calling_fn, '++ End of updating p_track_member_table after depreciation', i, p_log_level_rec => p_log_level_rec);
5018           if not display_debug_message2(i, l_calling_fn, p_log_level_rec) then
5019             fa_debug_pkg.add(l_calling_fn, 'display_debug_message2','returned error', p_log_level_rec => p_log_level_rec);
5020           end if;
5021         end if;
5022 
5023        end if; -- allocation type
5024 
5025       end loop;
5026 
5027       --* Following logic is prepared for exclude_salvage_value in FA_BOOKS is set.
5028       --  In this case, adjusted_cost of fully reserved should be removed from adjusted_cost
5029       -- of group asset. so need to maintain the memory table adjusted cost
5030       if nvl(h_exclude_fully_rsv_flag,'N') = 'Y' and
5031          nvl(p_group_rule_in.eofy_flag,'N') =  'Y' and
5032          nvl(fa_cache_pkg.fazccmt_record.deprn_basis_rule,'COST') = 'NBV' then
5033 
5034         if (p_log_level_rec.statement_level) then
5035           fa_debug_pkg.add(l_calling_fn, 'Fully Reserve Asset treatment', 'Starts++++', p_log_level_rec => p_log_level_rec);
5036         end if;
5037 
5038         For t IN 1.. p_track_member_table.COUNT LOOP
5039           if nvl(p_track_member_table(t).fully_reserved_flag,'N') = 'Y' and
5040              nvl(p_track_member_table(t).set_of_books_id,-99) = nvl(h_set_of_books_id,-99) then
5041             p_track_member_table(t).adjusted_cost := nvl(p_track_member_table(t).recoverable_cost,0)
5042                                                     - nvl(p_track_member_table(t).deprn_reserve,0);
5043             if (p_log_level_rec.statement_level) then
5044               fa_debug_pkg.add(l_calling_fn, 'Updated fully reserved member asset', h_member_asset_id, p_log_level_rec => p_log_level_rec);
5045               fa_debug_pkg.add(l_calling_fn, 'Newly set Adjusted_cost and period_counter',
5046                                   p_track_member_table(t).adjusted_Cost||','||p_track_member_table(t).period_counter);
5047             end if;
5048           end if;
5049         End Loop;
5050 
5051         if (p_log_level_rec.statement_level) then
5052           fa_debug_pkg.add(l_calling_fn, 'Fully Reserve Asset treatment', 'Ended++++', p_log_level_rec => p_log_level_rec);
5053         end if;
5054       end if;
5055 
5056       end if; -- event_type check
5057 
5058    else -- Regular Mode: Periodic Update after depreciation
5059 
5060      if p_group_rule_in.mrc_sob_type_code <> 'R' then
5061 
5062       For member in ALL_MEMBERS loop
5063 
5064          h_member_asset_id := member.member_asset_id;
5065 
5066          if (p_log_level_rec.statement_level) then
5067            fa_debug_pkg.add(l_calling_fn, '+++ In Loop (1) ++ started for Primary/Non-MRC Book +++', '+++');
5068            fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', h_member_asset_id, p_log_level_rec => p_log_level_rec);
5069          end if;
5070 
5071          fa_rule_in := p_group_rule_in;
5072 
5073          h_asset_id := null;
5074          h_transaction_type_code := null;
5075 
5076          if p_group_rule_in.adj_mem_transaction_header_id is not NULL then
5077            -- In this period, come transaction has occurred.
5078            h_adj_member_trans_header_id := p_group_rule_in.adj_mem_transaction_header_id;
5079 
5080            if (p_log_level_rec.statement_level) then
5081              fa_debug_pkg.add(l_calling_fn, 'h_adj_member_trans_header_id', h_adj_member_trans_header_id, p_log_level_rec => p_log_level_rec);
5082            end if;
5083 
5084            if h_adj_member_trans_header_id is not null then
5085               select asset_id,transaction_type_code
5086                 into h_asset_id,h_transaction_type_code
5087                 from fa_transaction_headers
5088                where transaction_header_id = h_adj_member_trans_header_id;
5089            else
5090               h_asset_id := null;
5091            end if;
5092          end if;
5093 
5094          if (p_log_level_rec.statement_level) then
5095            fa_debug_pkg.add(l_calling_fn, 'processed member_asset_id', h_asset_id, p_log_level_rec => p_log_level_rec);
5096          end if;
5097 
5098          fa_rule_in.asset_id := member.member_asset_id;
5099          fa_rule_in.group_asset_id := h_group_asset_id;
5100 
5101          -- Get Asset type
5102          select asset_type into x_asset_type
5103            from fa_additions_b
5104           where asset_id = member.member_asset_id;
5105 
5106          fa_rule_in.asset_type := x_asset_type;
5107          fa_rule_in.cost := member.cost;
5108          fa_rule_in.salvage_value := member.salvage_value;
5109          fa_rule_in.recoverable_cost := member.recoverable_cost;
5110          fa_rule_in.adjusted_cost := member.adjusted_cost;
5111 
5112          fa_rule_in.hyp_basis := 0;
5113          fa_rule_in.hyp_total_rsv := 0;
5114          fa_rule_in.hyp_rsv := 0;
5115          fa_rule_in.hyp_total_ytd := 0;
5116          fa_rule_in.hyp_ytd := 0;
5117 
5118          fa_rule_in.old_adjusted_cost := member.adjusted_cost;
5119          fa_rule_in.old_raf := 1;
5120          fa_rule_in.old_formula_factor := 1;
5121 
5122 -- ENERGY
5123 
5124          open FA_ADJ_RESERVE;
5125          fetch FA_ADJ_RESERVE into h_rsv_adjustment,h_bonus_rsv_adjustment,h_net_proceeds;
5126          close FA_ADJ_RESERVE;
5127 
5128 --h_rsv_adjustment := 0;
5129 --h_bonus_rsv_adjustment := 0;
5130 --h_net_proceeds := 0;
5131 -- ENERGY
5132          open FA_ADJ_EXPENSE;
5133          fetch FA_ADJ_EXPENSE into h_catchup_expense,h_bonus_catchup_expense;
5134          close FA_ADJ_EXPENSE;
5135 
5136          open FA_ADJ_RESERVE_MEM;
5137          fetch FA_ADJ_RESERVE_MEM into h_rsv_adjustment_mem,h_bonus_rsv_adj_mem,h_net_proceeds_mem;
5138          close FA_ADJ_RESERVE_MEM;
5139 
5140          open FA_ADJ_EXPENSE_MEM;
5141          fetch FA_ADJ_EXPENSE_MEM into h_catchup_expense_mem,h_bonus_catchup_mem;
5142          close FA_ADJ_EXPENSE_MEM;
5143 
5144       -- Added member level catchup and reserve adjustment
5145         h_catchup_expense := nvl(h_catchup_expense,0) + nvl(h_catchup_expense_mem,0);
5146         h_bonus_catchup_expense := nvl(h_bonus_catchup_expense,0) + nvl(h_bonus_catchup_mem,0);
5147         h_rsv_adjustment := nvl(h_rsv_adjustment,0) + nvl(h_rsv_adjustment_mem,0);
5148         h_bonus_rsv_adjustment := nvl(h_bonus_rsv_adjustment,0) + nvl(h_bonus_rsv_adj_mem,0);
5149 
5150          h_rsv_adjustment := nvl(h_rsv_adjustment,0) + nvl(h_catchup_expense,0);
5151          h_bonus_rsv_adjustment := nvl(h_bonus_rsv_adjustment,0) + nvl(h_bonus_catchup_expense,0);
5152          h_net_proceeds := nvl(h_net_proceeds,0);
5153          h_catchup_expense := nvl(h_catchup_expense,0);
5154          h_bonus_catchup_expense := nvl(h_bonus_catchup_expense,0);
5155 
5156          if (p_log_level_rec.statement_level) then
5157            fa_debug_pkg.add(l_calling_fn, 'h_catchup_expense:h_bonus_catchup_expense', h_catchup_expense||':'||h_bonus_catchup_expense, p_log_level_rec => p_log_level_rec);
5158            fa_debug_pkg.add(l_calling_fn, 'h_rsv_adjustment:h_bonus_rsv_adjustment', h_rsv_adjustment||':'||h_bonus_rsv_adjustment, p_log_level_rec => p_log_level_rec);
5159            fa_debug_pkg.add(l_calling_fn, 'h_net_proceeds', h_net_proceeds, p_log_level_rec => p_log_level_rec);
5160          end if;
5161 
5162          if p_group_rule_in.event_type = 'AFTER_DEPRN' and member.fully_reserved_flag is null then
5163            -- Check FA_ADJUSTMENTS table if there is any depreciation expense during this period.
5164 
5165               fa_rule_in.current_total_rsv := member.temp_deprn_reserve + nvl(h_rsv_adjustment,0);
5166               fa_rule_in.current_rsv := member.temp_deprn_reserve + nvl(h_rsv_adjustment,0)
5167                                             - (member.temp_bonus_deprn_reserve + nvl(h_bonus_rsv_adjustment,0));
5168               fa_rule_in.current_total_ytd := member.temp_ytd_deprn + nvl(h_catchup_expense,0);
5169               fa_rule_in.current_ytd := member.temp_ytd_deprn + nvl(h_catchup_expense,0)
5170                                             - (member.temp_bonus_ytd_deprn + nvl(h_bonus_catchup_expense,0));
5171 
5172               fa_rule_in.eofy_reserve := member.temp_prior_year_reserve;
5173               fa_rule_in.eofy_recoverable_cost := member.temp_eofy_recoverable_cost;
5174               fa_rule_in.eop_recoverable_cost := member.temp_eop_recoverable_cost;
5175               fa_rule_in.eofy_salvage_value := member.temp_eofy_salvage_value;
5176               fa_rule_in.eop_salvage_value := member.temp_eop_salvage_value;
5177 
5178          else
5179 
5180             -- Check if current fiscal year is same year as populated deprn summary table
5181             select fiscal_year into h_ds_fy
5182               from fa_deprn_periods
5183              where book_type_code = h_book_type_code
5184                and period_counter = member.ds_period_counter;
5185 
5186             if h_ds_fy <> h_fiscal_year then
5187 --              member.bk_eofy_reserve := member.bk_eofy_reserve;  + member.ds_ytd_deprn;
5188               member.ds_ytd_deprn := 0;
5189             end if;
5190 
5191             fa_rule_in.current_total_rsv := member.ds_deprn_reserve + h_rsv_adjustment;
5192             fa_rule_in.current_rsv := (member.ds_deprn_reserve + h_rsv_adjustment)
5193                                     - (member.ds_bonus_deprn_reserve + h_bonus_rsv_adjustment);
5194             fa_rule_in.current_total_ytd := member.ds_ytd_deprn + h_catchup_expense;
5195             fa_rule_in.current_ytd := (member.ds_ytd_deprn + h_catchup_expense)
5196                                     - (member.ds_bonus_ytd_deprn + h_bonus_catchup_expense);
5197 
5198             fa_rule_in.eofy_reserve :=member.bk_eofy_reserve;
5199 
5200             -- Get eofy, eop amounts
5201             if not FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP
5202                (p_asset_id =>       fa_rule_in.asset_id,
5203                 p_book_type_code => fa_rule_in.book_type_code,
5204                 p_fiscal_year =>    fa_rule_in.fiscal_year,
5205                 p_period_num =>     fa_rule_in.period_num,
5206                 p_recoverable_cost => fa_rule_in.recoverable_cost,
5207                 p_salvage_value => fa_rule_in.salvage_value,
5208                 p_transaction_date_entered => fa_rule_in.transaction_date_entered,
5209                 p_mrc_sob_type_code => p_group_rule_in.mrc_sob_type_code,
5210                 p_set_of_books_id => p_group_rule_in.set_of_books_id,
5211                 x_eofy_recoverable_cost => h_new_eofy_recoverable_cost,
5212                 x_eofy_salvage_value => h_new_eofy_salvage_value,
5213                 x_eop_recoverable_cost => h_new_eop_recoverable_cost,
5214                 x_eop_salvage_value => h_new_eop_salvage_value, p_log_level_rec => p_log_level_rec) then
5215               fa_srvr_msg.add_message(calling_fn => 'fa_track_member_pvt.udpate_deprn_basis.get_eofy_eop',  p_log_level_rec => p_log_level_rec);
5216               return(false);
5217 
5218             end if;
5219 
5220             fa_rule_in.eofy_recoverable_cost := h_new_eofy_recoverable_cost;
5221             fa_rule_in.eop_recoverable_cost := h_new_eop_recoverable_cost;
5222             fa_rule_in.eofy_salvage_value := h_new_eofy_salvage_value;
5223             fa_rule_in.eop_salvage_value := h_new_eop_salvage_value;
5224 
5225             if nvl(h_asset_id,-99) <> member.member_asset_id then
5226                -- This transaction is not for this member asset
5227                -- so I need to remove
5228 
5229                fa_rule_in.adjustment_amount := 0;
5230                fa_rule_in.transaction_header_id := to_number(NULL);
5231                fa_rule_in.proceeds_of_sale := 0;
5232                fa_rule_in.cost_of_removal := 0;
5233                fa_rule_in.unplanned_amount := 0;
5234 
5235             end if;  -- Transaction Check
5236 
5237          end if; -- AFTER_DEPRN ?
5238 
5239          fa_rule_in.apply_reduction_flag := nvl(p_apply_reduction_flag,'N');
5240 
5241          if (not fa_calc_deprn_basis1_pkg.faxcdb(rule_in => fa_rule_in,
5242                                                  rule_out => fa_rule_out, p_log_level_rec => p_log_level_rec)) then
5243             raise upd_deprn_err;
5244          end if;
5245 
5246          --* Update FA_BOOKS table
5247          if nvl(fa_rule_in.eofy_flag,'N') = 'Y' then
5248            h_prior_eofy_reserve := member.bk_eofy_reserve;
5249            h_new_eofy_reserve := fa_rule_in.current_total_rsv;
5250            h_eofy_adj_cost   := member.adjusted_cost;
5251            h_eop_adj_cost := null;
5252          else
5253            if member.bk_eofy_reserve is not null then
5254              h_new_eofy_reserve := member.bk_eofy_reserve;
5255            else
5256              h_new_eofy_reserve := null;
5257            end if;
5258            h_eop_adj_cost := member.adjusted_cost;
5259            h_prior_eofy_reserve := null;
5260          end if;
5261 
5262          if (p_log_level_rec.statement_level) then
5263             fa_debug_pkg.add(l_calling_fn, '++ update FA_BOOKS for ',member.member_asset_id, p_log_level_rec => p_log_level_rec);
5264             fa_debug_pkg.add(l_calling_fn, 'fa_rule_out.new_adjusted_cost ',fa_rule_out.new_adjusted_cost, p_log_level_rec => p_log_level_rec);
5265             fa_debug_pkg.add(l_calling_fn, 'h_eofy_adj_cost:h_eop_adj_cost:h_new_eofy_reserve ',
5266                                             h_eofy_adj_cost||':'||h_eop_adj_cost||':'||h_new_eofy_reserve, p_log_level_rec => p_log_level_rec);
5267          end if;
5268 
5269          update fa_books
5270             set adjusted_cost = fa_rule_out.new_adjusted_cost,
5271                 eofy_adj_cost = h_eofy_adj_cost,
5272                 eofy_reserve = h_new_eofy_reserve,
5273                 eop_adj_cost = h_eop_adj_cost,
5274                 prior_eofy_reserve = h_prior_eofy_reserve,
5275                 adjustment_required_status='NONE'
5276           where book_type_code = p_group_rule_in.book_type_code
5277             and asset_id = member.member_asset_id
5278             and date_ineffective is null;
5279 
5280        end loop;
5281 
5282      else -- Reporting Book
5283 
5284       For member in ALL_MEMBERS_MRC loop
5285 
5286          h_member_asset_id := member.member_asset_id;
5287 
5288          if (p_log_level_rec.statement_level) then
5289            fa_debug_pkg.add(l_calling_fn, '+++ In Loop (1) ++ started for Reporting Book +++', '+++');
5290            fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', h_member_asset_id, p_log_level_rec => p_log_level_rec);
5291          end if;
5292 
5293          fa_rule_in := p_group_rule_in;
5294 
5295          h_asset_id := null;
5296          h_transaction_type_code := null;
5297 
5298          if p_group_rule_in.adj_mem_transaction_header_id is not NULL then
5299            -- In this period, come transaction has occurred.
5300            h_adj_member_trans_header_id := p_group_rule_in.adj_mem_transaction_header_id;
5301 
5302            if (p_log_level_rec.statement_level) then
5303              fa_debug_pkg.add(l_calling_fn, 'h_adj_member_trans_header_id',h_adj_member_trans_header_id, p_log_level_rec => p_log_level_rec);
5304            end if;
5305 
5306            if h_adj_member_trans_header_id is not null then
5307               select asset_id,transaction_type_code
5308                 into h_asset_id,h_transaction_type_code
5309                 from fa_transaction_headers
5310                where transaction_header_id = h_adj_member_trans_header_id;
5311            else
5312               h_asset_id := null;
5313            end if;
5314          end if;
5315 
5316          if (p_log_level_rec.statement_level) then
5317            fa_debug_pkg.add(l_calling_fn, 'processed member_asset_id', h_asset_id, p_log_level_rec => p_log_level_rec);
5318          end if;
5319 
5320          fa_rule_in.asset_id := member.member_asset_id;
5321          fa_rule_in.group_asset_id := h_group_asset_id;
5322 
5323          -- Get Asset type
5324          select asset_type into x_asset_type
5325            from fa_additions_b
5326           where asset_id = member.member_asset_id;
5327 
5328          fa_rule_in.asset_type := x_asset_type;
5329          fa_rule_in.cost := member.cost;
5330          fa_rule_in.salvage_value := member.salvage_value;
5331          fa_rule_in.recoverable_cost := member.recoverable_cost;
5332          fa_rule_in.adjusted_cost := member.adjusted_cost;
5333          fa_rule_in.eofy_reserve := member.bk_eofy_reserve;
5334 
5335           open FA_ADJ_RESERVE_MRC;
5336           fetch FA_ADJ_RESERVE_MRC into h_rsv_adjustment,h_bonus_rsv_adjustment,h_net_proceeds;
5337           close FA_ADJ_RESERVE_MRC;
5338 
5339           open FA_ADJ_EXPENSE_MRC;
5340           fetch FA_ADJ_EXPENSE_MRC into h_catchup_expense,h_bonus_catchup_expense;
5341           close FA_ADJ_EXPENSE_MRC;
5342 
5343           open FA_ADJ_RESERVE_MEM_MRC;
5344           fetch FA_ADJ_RESERVE_MEM_MRC into h_rsv_adjustment_mem,h_bonus_rsv_adj_mem,h_net_proceeds_mem;
5345           close FA_ADJ_RESERVE_MEM_MRC;
5346 
5347           open FA_ADJ_EXPENSE_MEM_MRC;
5348           fetch FA_ADJ_EXPENSE_MEM_MRC into h_catchup_expense_mem,h_bonus_catchup_mem;
5349           close FA_ADJ_EXPENSE_MEM_MRC;
5350 
5351       -- Added member level catchup and reserve adjustment
5352         h_catchup_expense := nvl(h_catchup_expense,0) + nvl(h_catchup_expense_mem,0);
5353         h_bonus_catchup_expense := nvl(h_bonus_catchup_expense,0) + nvl(h_bonus_catchup_mem,0);
5354         h_rsv_adjustment := nvl(h_rsv_adjustment,0) + nvl(h_rsv_adjustment_mem,0);
5355         h_bonus_rsv_adjustment := nvl(h_bonus_rsv_adjustment,0) + nvl(h_bonus_rsv_adj_mem,0);
5356 
5357           h_rsv_adjustment := nvl(h_rsv_adjustment,0) + nvl(h_catchup_expense,0);
5358           h_bonus_rsv_adjustment := nvl(h_bonus_rsv_adjustment,0) + nvl(h_bonus_catchup_expense,0);
5359           h_net_proceeds := nvl(h_net_proceeds,0);
5360           h_catchup_expense := nvl(h_catchup_expense,0);
5361           h_bonus_catchup_expense := nvl(h_bonus_catchup_expense,0);
5362 
5363           if (p_log_level_rec.statement_level) then
5364             fa_debug_pkg.add(l_calling_fn, 'h_catchup_expense:h_bonus_catchup_expense', h_catchup_expense||':'||h_bonus_catchup_expense, p_log_level_rec => p_log_level_rec);
5365             fa_debug_pkg.add(l_calling_fn, 'h_rsv_adjustment:h_bonus_rsv_adjustment', h_rsv_adjustment||':'||h_bonus_rsv_adjustment, p_log_level_rec => p_log_level_rec);
5366             fa_debug_pkg.add(l_calling_fn, 'h_net_proceeds', h_net_proceeds, p_log_level_rec => p_log_level_rec);
5367           end if;
5368 
5369          if p_group_rule_in.event_type = 'AFTER_DEPRN' and member.fully_reserved_flag is null then
5370            -- Check if there is catchup expense in this period.
5371 
5372             fa_rule_in.current_total_rsv := member.temp_deprn_reserve + nvl(h_rsv_adjustment,0);
5373             fa_rule_in.current_rsv := member.temp_deprn_reserve + nvl(h_rsv_adjustment,0)
5374                                             - (member.temp_bonus_deprn_reserve + nvl(h_bonus_rsv_adjustment,0));
5375             fa_rule_in.current_total_ytd := member.temp_ytd_deprn + nvl(h_catchup_expense,0);
5376             fa_rule_in.current_ytd := member.temp_ytd_deprn + nvl(h_catchup_expense,0)
5377                                             - (member.temp_bonus_ytd_deprn + nvl(h_bonus_catchup_expense,0));
5378 
5379             fa_rule_in.eofy_reserve := member.temp_prior_year_reserve;
5380             fa_rule_in.eofy_recoverable_cost := member.temp_eofy_recoverable_cost;
5381             fa_rule_in.eop_recoverable_cost := member.temp_eop_recoverable_cost;
5382             fa_rule_in.eofy_salvage_value := member.temp_eofy_salvage_value;
5383             fa_rule_in.eop_salvage_value := member.temp_eop_salvage_value;
5384 
5385          else
5386 
5387             -- Check if current fiscal year is same year as populated deprn summary table
5388             select fiscal_year into h_ds_fy
5389               from fa_deprn_periods
5390              where book_type_code = h_book_type_code
5391                and period_counter = member.ds_period_counter;
5392 
5393             if h_ds_fy <> h_fiscal_year then
5394 --              member.bk_eofy_reserve := member.bk_eofy_reserve; -- + member.ds_ytd_deprn;
5395               member.ds_ytd_deprn := 0;
5396             end if;
5397 
5398             fa_rule_in.current_total_rsv := member.ds_deprn_reserve + h_rsv_adjustment;
5399             fa_rule_in.current_rsv := (member.ds_deprn_reserve + h_rsv_adjustment)
5400                                     - (member.ds_bonus_deprn_reserve + h_bonus_rsv_adjustment);
5401             fa_rule_in.current_total_ytd := member.ds_ytd_deprn + h_catchup_expense;
5402             fa_rule_in.current_ytd := (member.ds_ytd_deprn + h_catchup_expense)
5403                                     - (member.ds_bonus_ytd_deprn + h_bonus_catchup_expense);
5404 
5405             fa_rule_in.eofy_reserve := member.bk_eofy_reserve;
5406 
5407             -- Get eofy, eop amounts
5408             if not FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP
5409                (p_asset_id =>       fa_rule_in.asset_id,
5410                 p_book_type_code => fa_rule_in.book_type_code,
5411                 p_fiscal_year =>    fa_rule_in.fiscal_year,
5412                 p_period_num =>     fa_rule_in.period_num,
5413                 p_recoverable_cost => fa_rule_in.recoverable_cost,
5414                 p_salvage_value => fa_rule_in.salvage_value,
5415                 p_transaction_date_entered => fa_rule_in.transaction_date_entered,
5416                 p_mrc_sob_type_code => p_group_rule_in.mrc_sob_type_code,
5417                 p_set_of_books_id => p_group_rule_in.set_of_books_id,
5418                 x_eofy_recoverable_cost => h_new_eofy_recoverable_cost,
5419                 x_eofy_salvage_value => h_new_eofy_salvage_value,
5420                 x_eop_recoverable_cost => h_new_eop_recoverable_cost,
5421                 x_eop_salvage_value => h_new_eop_salvage_value, p_log_level_rec => p_log_level_rec) then
5422               raise upd_deprn_err;
5423 
5424             end if;
5425 
5426             fa_rule_in.eofy_recoverable_cost := h_new_eofy_recoverable_cost;
5427             fa_rule_in.eop_recoverable_cost := h_new_eop_recoverable_cost;
5428             fa_rule_in.eofy_salvage_value := h_new_eofy_salvage_value;
5429             fa_rule_in.eop_salvage_value := h_new_eop_salvage_value;
5430 
5431             if nvl(h_asset_id,-99) <> member.member_asset_id then
5432                -- This transaction is not for this member asset
5433                -- so I need to remove
5434 
5435                fa_rule_in.adjustment_amount := 0;
5436                fa_rule_in.transaction_header_id := to_number(NULL);
5437                fa_rule_in.proceeds_of_sale := 0;
5438                fa_rule_in.cost_of_removal := 0;
5439                fa_rule_in.unplanned_amount := 0;
5440 
5441             end if;  -- Transaction Check
5442 
5443          end if; -- AFTER DEPRN?
5444 
5445          fa_rule_in.apply_reduction_flag := nvl(p_apply_reduction_flag,'N');
5446 
5447          if (not fa_calc_deprn_basis1_pkg.faxcdb(rule_in => fa_rule_in,
5448                                                  rule_out => fa_rule_out, p_log_level_rec => p_log_level_rec)) then
5449             raise upd_deprn_err;
5450          end if;
5451 
5452          --* Update FA_BOOKS table
5453          if nvl(fa_rule_in.eofy_flag,'N') = 'Y' then
5454            h_new_eofy_reserve := fa_rule_in.current_total_rsv;
5455            h_eofy_adj_cost   := member.adjusted_cost;
5456            h_prior_eofy_reserve := member.bk_eofy_reserve;
5457            h_eop_adj_cost   := null;
5458          else
5459            if member.bk_eofy_reserve is not null then
5460              h_new_eofy_reserve := member.bk_eofy_reserve;
5461            else
5462              h_new_eofy_reserve := null;
5463            end if;
5464            h_eop_adj_cost   := member.eofy_adj_cost;
5465            h_prior_eofy_reserve := null;
5466          end if;
5467 
5468          if (p_log_level_rec.statement_level) then
5469             fa_debug_pkg.add(l_calling_fn, '++ update FA_BOOKS for ',member.member_asset_id, p_log_level_rec => p_log_level_rec);
5470             fa_debug_pkg.add(l_calling_fn, 'fa_rule_out.new_adjusted_cost ',fa_rule_out.new_adjusted_cost, p_log_level_rec => p_log_level_rec);
5471             fa_debug_pkg.add(l_calling_fn, 'h_eofy_adj_cost:h_eop_adj_cost:h_new_eofy_reserve ',
5472                                             h_eofy_adj_cost||':'||h_eop_adj_cost||':'||h_new_eofy_reserve, p_log_level_rec => p_log_level_rec);
5473          end if;
5474 
5475          update fa_mc_books
5476             set adjusted_cost = fa_rule_out.new_adjusted_cost,
5477                 eofy_adj_cost = h_eofy_adj_cost,
5478                 eofy_reserve = h_new_eofy_reserve,
5479                 eop_adj_cost = h_eop_adj_cost,
5480                 prior_eofy_reserve = h_prior_eofy_reserve
5481           where book_type_code = p_group_rule_in.book_type_code
5482             and asset_id = member.member_asset_id
5483             and date_ineffective is null
5484             and set_of_books_id = h_set_of_books_id;
5485 
5486        end loop;
5487 
5488      end if; -- Primary or Reporting Book?
5489 
5490    end if; -- AJUSTMENT?
5491 
5492 end if; -- ALLOCATE?
5493 
5494 return(true);
5495 
5496 exception
5497   when upd_deprn_err then
5498     fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5499     return(false);
5500 
5501   when others then
5502     fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5503     return(false);
5504 
5505 end update_deprn_basis;
5506 
5507 
5508 ----------------------------------------------------------------------------
5509 --
5510 --  Function:   ins_dd_adj
5511 --
5512 --  Description:
5513 --
5514 --              This function is called to insert allocated amount
5515 --              into FA_ADJ or FA_DEPRN_DETAIL/SUMMARY in case
5516 --              that Unplanned Depreciation is made.
5517 --
5518 ----------------------------------------------------------------------------
5519 
5520 FUNCTION ins_dd_adj(p_book_type_code         in varchar2,
5521                     p_group_asset_id         in number,
5522                     p_period_counter         in number,
5523                     p_fiscal_year            in number,
5524                     p_period_of_addition     in varchar2, -- default NULL,
5525                     p_transaction_date_entered in date, -- default NULL,
5526                     p_mrc_sob_type_code      in varchar2, -- default 'N',
5527                     p_set_of_books_id        in number,
5528                     p_mode                   in varchar2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
5529   return boolean is
5530 
5531 --* Internal structure
5532 p_asset_hdr_rec      FA_API_TYPES.asset_hdr_rec_type;
5533 x_asset_fin_rec      FA_API_TYPES.asset_fin_rec_type;
5534 l_asset_deprn_rec    FA_API_TYPES.asset_deprn_rec_type;
5535 l_adj                fa_adjust_type_pkg.fa_adj_row_struct;
5536 
5537 --* Internal Variable
5538 p_transaction_header_id   number;
5539 l_transaction_key         varchar2(2);
5540 
5541 l_status                  boolean;
5542 
5543 l_calling_fn              varchar2(35) := 'fa_track_member_pvt.ins_dd_adj';
5544 ins_dd_adj_err            exception;
5545 l_rowid                   rowid;
5546 
5547 l_debit_credit_flag       varchar(2);
5548 l_allocated_deprn_amount  number;
5549 l_deprn_adjustment_amount number;
5550 
5551 l_index                   number := 1; -- Bug 8703676
5552 
5553 --* cursor to query the member inserted into FA_TRACK_MEMBERS
5554 -- after allocation
5555 cursor MEMBERS is
5556   select member_asset_id,
5557          allocated_deprn_amount,
5558          fully_reserved_flag
5559     from fa_track_members
5560    where group_asset_id = p_group_asset_id
5561      and period_counter = p_period_counter
5562      and fiscal_year = p_fiscal_year
5563      and nvl(set_of_books_id,-99) = nvl(p_set_of_books_id,-99);
5564 
5565 begin
5566 
5567 /* Apply MRC related feature */
5568 
5569 if (p_log_level_rec.statement_level) then
5570     fa_debug_pkg.add(l_calling_fn, '+++ INS_DD_ADJ start +++', '+++', p_log_level_rec => p_log_level_rec);
5571     fa_debug_pkg.add(l_calling_fn, 'p_set_of_books_id', p_set_of_books_id, p_log_level_rec => p_log_level_rec);
5572 end if;
5573 
5574 -- Currently this function will be called only after Unplanned Depreciation for Group Level.
5575 
5576 if p_mode = 'UNPLANNED' or P_mode = 'GROUP ADJUSTMENT' then
5577 
5578   if P_mode = 'UNPLANNED' then
5579     l_transaction_key := 'UA';
5580   else
5581     l_transaction_key := NULL;
5582   end if;
5583 
5584   -- Loop for members
5585   for member in MEMBERS loop
5586 
5587    if member.allocated_deprn_amount <> 0 then
5588     -- Set p_asset_hdr_rec
5589     p_asset_hdr_rec.asset_id := member.member_asset_id;
5590     p_asset_hdr_rec.book_type_code := p_book_type_code;
5591     p_asset_hdr_rec.set_of_books_id := p_set_of_books_id;
5592 
5593     -- Call get_asset_fin_rec
5594     if not FA_UTIL_PVT.get_asset_fin_rec(p_asset_hdr_rec => p_asset_hdr_rec,
5595                                          px_asset_fin_rec => x_asset_fin_rec,
5596                                          p_transaction_header_id => NULL,
5597                                          p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
5598       raise ins_dd_adj_err;
5599     end if;
5600 
5601     --Bug#8692192 - To create transaction for primary book only
5602     if p_mrc_sob_type_code <> 'R' then
5603        -- Get new Transaction Header ID
5604        select fa_transaction_headers_s.nextval
5605          into p_transaction_header_id
5606          from dual;
5607 
5608        -- Bug 8703676 : Store the trx_hdr_id during the primary loop
5609        g_primary_trx_hdr_id_tbl(l_index) :=  p_transaction_header_id;
5610        l_index := l_index + 1;
5611 
5612        FA_TRANSACTION_HEADERS_PKG.Insert_Row
5613                       (X_Rowid                          => l_rowid,
5614                        X_Transaction_Header_Id          => p_transaction_header_id,
5615                        X_Book_Type_Code                 => p_asset_hdr_rec.book_type_code,
5616                        X_Asset_Id                       => p_asset_hdr_rec.asset_id,
5617                        X_Transaction_Type_Code          => 'ADJUSTMENT',
5618                        X_Transaction_Date_Entered       => p_transaction_date_entered,
5619                        X_Date_Effective                 => sysdate,
5620                        X_Last_Update_Date               => sysdate,
5621                        X_Last_Updated_By                => -1,
5622                        X_Transaction_Name               => NULL,
5623                        X_Invoice_Transaction_Id         => NULL,
5624                        X_Source_Transaction_Header_Id   => NULL,
5625                        X_Mass_Reference_Id              => NULL,
5626                        X_Last_Update_Login              => -1,
5627                        X_Transaction_Subtype            => 'AMORTIZED',
5628                        X_Attribute1                     => null,
5629                        X_Attribute2                     => null,
5630                        X_Attribute3                     => null,
5631                        X_Attribute4                     => null,
5632                        X_Attribute5                     => null,
5633                        X_Attribute6                     => null,
5634                        X_Attribute7                     => null,
5635                        X_Attribute8                     => null,
5636                        X_Attribute9                     => null,
5637                        X_Attribute10                    => null,
5638                        X_Attribute11                    => null,
5639                        X_Attribute12                    => null,
5640                        X_Attribute13                    => null,
5641                        X_Attribute14                    => null,
5642                        X_Attribute15                    => null,
5643                        X_Attribute_Category_Code        => null,
5644                        X_Transaction_Key                => l_transaction_key,
5645                        X_Amortization_Start_Date        => NULL,
5646                        X_Calling_Interface              => null,
5647                        X_Mass_Transaction_ID            => null,
5648                        X_Return_Status                  => l_status,
5649                        X_Calling_Fn                     => 'fa_track_member_pvt.ins_dd_adj'
5650                       ,  p_log_level_rec => p_log_level_rec);
5651 
5652              if not l_status then
5653                 raise ins_dd_adj_err;
5654              end if;
5655     else
5656 
5657        -- Bug 8703676 : Get the trx_hdr_id saved during the primary loop
5658        p_transaction_header_id := g_primary_trx_hdr_id_tbl(l_index);
5659        l_index := l_index + 1;
5660 
5661     end if;
5662 
5663                -- terminate the row
5664              fa_books_pkg.deactivate_row
5665                      (X_asset_id                  => p_asset_hdr_rec.asset_id,
5666                       X_book_type_code            => p_asset_hdr_rec.book_type_code,
5667                       X_transaction_header_id_out => p_transaction_header_id,
5668                       X_date_ineffective          => sysdate,
5669                       X_mrc_sob_type_code         => p_mrc_sob_type_code,
5670                       X_set_of_books_id           => p_asset_hdr_rec.set_of_books_id,
5671                       X_Calling_Fn                => 'fa_track_member_pvt.ins_dd_adj'
5672                       ,  p_log_level_rec => p_log_level_rec);
5673 
5674              l_rowid := null;
5675 
5676              if nvl(member.fully_reserved_flag,'N') = 'Y'  then /*Bug# 9145376 */
5677                 x_asset_fin_rec.period_counter_fully_reserved := p_period_counter;
5678              else
5679                 x_asset_fin_rec.period_counter_fully_reserved := NULL;
5680              end if;
5681 
5682              x_asset_fin_rec.period_counter_life_complete := x_asset_fin_rec.period_counter_fully_reserved;
5683 
5684              -- insert the row
5685              fa_books_pkg.insert_row
5686                      (X_Rowid                        => l_rowid,
5687                       X_Book_Type_Code               => p_asset_hdr_rec.book_type_code,
5688                       X_Asset_Id                     => p_asset_hdr_rec.asset_id,
5689                       X_Date_Placed_In_Service       => x_asset_fin_rec.date_placed_in_service,
5690                       X_Date_Effective               => sysdate,
5691                       X_Deprn_Start_Date             => x_asset_fin_rec.deprn_start_date,
5692                       X_Deprn_Method_Code            => x_asset_fin_rec.deprn_method_code,
5693                       X_Life_In_Months               => x_asset_fin_rec.life_in_months,
5694                       X_Rate_Adjustment_Factor       => x_asset_fin_rec.rate_adjustment_factor,
5695                       X_Adjusted_Cost                => x_asset_fin_rec.adjusted_cost,
5696                       X_Cost                         => x_asset_fin_rec.cost,
5697                       X_Original_Cost                => x_asset_fin_rec.original_cost,
5698                       X_Salvage_Value                => x_asset_fin_rec.salvage_value,
5699                       X_Prorate_Convention_Code      => x_asset_fin_rec.prorate_convention_code,
5700                       X_Prorate_Date                 => x_asset_fin_rec.prorate_date,
5701                       X_Cost_Change_Flag             => x_asset_fin_rec.cost_change_flag,
5702                       X_Adjustment_Required_Status   => x_asset_fin_rec.adjustment_required_status,
5703                       X_Capitalize_Flag              => x_asset_fin_rec.capitalize_flag,
5704                       X_Retirement_Pending_Flag      => x_asset_fin_rec.retirement_pending_flag,
5705                       X_Depreciate_Flag              => x_asset_fin_rec.depreciate_flag,
5706                       X_Last_Update_Date             => sysdate,
5707                       X_Last_Updated_By              => -1,
5708                       X_Date_Ineffective             => NULL,
5709                       X_Transaction_Header_Id_In     => p_transaction_header_id,
5710                       X_Transaction_Header_Id_Out    => NULL,
5711                       X_Itc_Amount_Id                => x_asset_fin_rec.itc_amount_id,
5712                       X_Itc_Amount                   => x_asset_fin_rec.itc_amount,
5713                       X_Retirement_Id                => x_asset_fin_rec.retirement_id,
5714                       X_Tax_Request_Id               => x_asset_fin_rec.tax_request_id,
5715                       X_Itc_Basis                    => x_asset_fin_rec.itc_basis,
5716                       X_Basic_Rate                   => x_asset_fin_rec.basic_rate,
5717                       X_Adjusted_Rate                => x_asset_fin_rec.adjusted_rate,
5718                       X_Bonus_Rule                   => x_asset_fin_rec.bonus_rule,
5719                       X_Ceiling_Name                 => x_asset_fin_rec.ceiling_name,
5720                       X_Recoverable_Cost             => x_asset_fin_rec.recoverable_cost,
5721                       X_Last_Update_Login            => -1,
5722                       X_Adjusted_Capacity            => x_asset_fin_rec.adjusted_capacity,
5723                       X_Fully_Rsvd_Revals_Counter    => x_asset_fin_rec.fully_rsvd_revals_counter,
5724                       X_Idled_Flag                   => x_asset_fin_rec.idled_flag,
5725                       X_Period_Counter_Capitalized   => x_asset_fin_rec.period_counter_capitalized,
5726                       X_PC_Fully_Reserved            => x_asset_fin_rec.period_counter_fully_reserved,
5727                       X_Period_Counter_Fully_Retired => x_asset_fin_rec.period_counter_fully_retired,
5728                       X_Production_Capacity          => x_asset_fin_rec.production_capacity,
5729                       X_Reval_Amortization_Basis     => x_asset_fin_rec.reval_amortization_basis,
5730                       X_Reval_Ceiling                => x_asset_fin_rec.reval_ceiling,
5731                       X_Unit_Of_Measure              => x_asset_fin_rec.unit_of_measure,
5732                       X_Unrevalued_Cost              => x_asset_fin_rec.unrevalued_cost,
5733                       X_Annual_Deprn_Rounding_Flag   => 'ADJ',
5734                       X_Percent_Salvage_Value        => x_asset_fin_rec.percent_salvage_value,
5735                       X_Allowed_Deprn_Limit          => x_asset_fin_rec.allowed_deprn_limit,
5736                       X_Allowed_Deprn_Limit_Amount   => x_asset_fin_rec.allowed_deprn_limit_amount,
5737                       X_Period_Counter_Life_Complete => x_asset_fin_rec.period_counter_life_complete,
5738                       X_Adjusted_Recoverable_Cost    => x_asset_fin_rec.adjusted_recoverable_cost,
5739                       X_Short_Fiscal_Year_Flag       => x_asset_fin_rec.short_fiscal_year_flag,
5740                       X_Conversion_Date              => x_asset_fin_rec.conversion_date,
5741                       X_Orig_Deprn_Start_Date        => x_asset_fin_rec.orig_deprn_start_date,
5742                       X_Remaining_Life1              => x_asset_fin_rec.remaining_life1,
5743                       X_Remaining_Life2              => x_asset_fin_rec.remaining_life2,
5744                       X_Old_Adj_Cost                 => x_asset_fin_rec.old_adjusted_cost,
5745                       X_Formula_Factor               => x_asset_fin_rec.formula_factor,
5746                       X_gf_Attribute1                => x_asset_fin_rec.global_attribute1,
5747                       X_gf_Attribute2                => x_asset_fin_rec.global_attribute2,
5748                       X_gf_Attribute3                => x_asset_fin_rec.global_attribute3,
5749                       X_gf_Attribute4                => x_asset_fin_rec.global_attribute4,
5750                       X_gf_Attribute5                => x_asset_fin_rec.global_attribute5,
5751                       X_gf_Attribute6                => x_asset_fin_rec.global_attribute6,
5752                       X_gf_Attribute7                => x_asset_fin_rec.global_attribute7,
5753                       X_gf_Attribute8                => x_asset_fin_rec.global_attribute8,
5754                       X_gf_Attribute9                => x_asset_fin_rec.global_attribute9,
5755                       X_gf_Attribute10               => x_asset_fin_rec.global_attribute10,
5756                       X_gf_Attribute11               => x_asset_fin_rec.global_attribute11,
5757                       X_gf_Attribute12               => x_asset_fin_rec.global_attribute12,
5758                       X_gf_Attribute13               => x_asset_fin_rec.global_attribute13,
5759                       X_gf_Attribute14               => x_asset_fin_rec.global_attribute14,
5760                       X_gf_Attribute15               => x_asset_fin_rec.global_attribute15,
5761                       X_gf_Attribute16               => x_asset_fin_rec.global_attribute16,
5762                       X_gf_Attribute17               => x_asset_fin_rec.global_attribute17,
5763                       X_gf_Attribute18               => x_asset_fin_rec.global_attribute18,
5764                       X_gf_Attribute19               => x_asset_fin_rec.global_attribute19,
5765                       X_gf_Attribute20               => x_asset_fin_rec.global_attribute20,
5766                       X_global_attribute_category    => x_asset_fin_rec.global_attribute_category,
5767                       X_group_asset_id               => x_asset_fin_rec.group_asset_id,
5768                       X_salvage_type                 => x_asset_fin_rec.salvage_type,
5769                       X_deprn_limit_type             => x_asset_fin_rec.deprn_limit_type,
5770                       X_over_depreciate_option       => x_asset_fin_rec.over_depreciate_option,
5771                       X_super_group_id               => x_asset_fin_rec.super_group_id,
5772                       X_reduction_rate               => x_asset_fin_rec.reduction_rate,
5773                       X_reduce_addition_flag         => x_asset_fin_rec.reduce_addition_flag,
5774                       X_reduce_adjustment_flag       => x_asset_fin_rec.reduce_adjustment_flag,
5775                       X_reduce_retirement_flag       => x_asset_fin_rec.reduce_retirement_flag,
5776                       X_recognize_gain_loss          => x_asset_fin_rec.recognize_gain_loss,
5777                       X_recapture_reserve_flag       => x_asset_fin_rec.recapture_reserve_flag,
5778                       X_limit_proceeds_flag          => x_asset_fin_rec.limit_proceeds_flag,
5779                       X_terminal_gain_loss           => x_asset_fin_rec.terminal_gain_loss,
5780                       X_tracking_method              => x_asset_fin_rec.tracking_method,
5781                       X_allocate_to_fully_rsv_flag   => x_asset_fin_rec.allocate_to_fully_rsv_flag,
5782                       X_allocate_to_fully_ret_flag   => x_asset_fin_rec.allocate_to_fully_ret_flag,
5783                       X_exclude_fully_rsv_flag       => x_asset_fin_rec.exclude_fully_rsv_flag,
5784                       X_excess_allocation_option     => x_asset_fin_rec.excess_allocation_option,
5785                       X_depreciation_option          => x_asset_fin_rec.depreciation_option,
5786                       X_member_rollup_flag           => x_asset_fin_rec.member_rollup_flag,
5787                       X_ytd_proceeds                 => x_asset_fin_rec.ytd_proceeds,
5788                       X_ltd_proceeds                 => x_asset_fin_rec.ltd_proceeds,
5789                       X_eofy_reserve                 => x_asset_fin_rec.eofy_reserve,
5790                       X_cip_cost                     => x_asset_fin_rec.cip_cost,
5791                       X_terminal_gain_loss_amount    => x_asset_fin_rec.terminal_gain_loss_amount,
5792                       X_ltd_cost_of_removal          => x_asset_fin_rec.ltd_cost_of_removal,
5793                       X_exclude_proceeds_from_basis  => x_asset_fin_rec.exclude_proceeds_from_basis,
5794                       X_retirement_deprn_option      => x_asset_fin_rec.retirement_deprn_option,
5795                       X_terminal_gain_loss_flag      => x_asset_fin_rec.terminal_gain_loss_flag,
5796                       X_mrc_sob_type_code            => p_mrc_sob_type_code,
5797                       X_set_of_books_id              => p_asset_hdr_rec.set_of_books_id,
5798                       X_Return_Status                => l_status,
5799                       X_Calling_Fn                   => 'fa_track_member_pvt.ins_dd_adj'
5800                 ,p_log_level_rec => p_log_level_rec);
5801 
5802           if not l_status then
5803              raise ins_dd_adj_err;
5804           end if;
5805 
5806           if (nvl(p_period_of_addition,'N') <> 'Y') then
5807 
5808                 l_debit_credit_flag := 'DR';
5809                 l_allocated_deprn_amount  := l_allocated_deprn_amount;
5810 
5811 
5812              l_adj.transaction_header_id    := p_transaction_header_id;
5813              l_adj.asset_id                 := p_asset_hdr_rec.asset_id;
5814              l_adj.book_type_code           := p_asset_hdr_rec.book_type_code;
5815              l_adj.period_counter_created   := p_period_counter;
5816              l_adj.period_counter_adjusted  := p_period_counter;
5817              l_adj.current_units            := 0;
5818              l_adj.selection_mode           := FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
5819              l_adj.selection_thid           := 0;
5820              l_adj.selection_retid          := 0;
5821              l_adj.leveling_flag            := FALSE;
5822              l_adj.last_update_date         := sysdate;
5823 
5824              l_adj.flush_adj_flag           := TRUE;
5825              l_adj.gen_ccid_flag            := FALSE;
5826              l_adj.annualized_adjustment    := 0;
5827              l_adj.asset_invoice_id         := 0;
5828              l_adj.code_combination_id      := 0;
5829              l_adj.distribution_id          := 0;
5830 
5831              l_adj.deprn_override_flag:= '';
5832 
5833              l_adj.source_type_code    := 'DEPRECIATION';
5834              l_adj.adjustment_type     := 'EXPENSE';
5835              l_adj.account             := 0;
5836              l_adj.account_type        := 'DEPRN_EXPENSE_ACCT';
5837              l_adj.debit_credit_flag   := l_debit_credit_flag;
5838              l_adj.adjustment_amount   := member.allocated_deprn_amount;
5839              l_adj.mrc_sob_type_code   := p_mrc_sob_type_code;
5840              l_adj.set_of_books_id     := p_set_of_books_id;
5841              l_adj.track_member_flag   := 'Y';
5842 
5843              if not FA_INS_ADJUST_PKG.faxinaj
5844                 (l_adj,
5845                  sysdate,
5846                  -1,
5847                  -1, p_log_level_rec => p_log_level_rec) then
5848                 raise ins_dd_adj_err;
5849              end if;
5850 
5851           else  -- period of addition
5852 
5853             if (p_log_level_rec.statement_level) then
5854               fa_debug_pkg.add(l_calling_fn, 'period of addition', 'processed', p_log_level_rec => p_log_level_rec);
5855             end if;
5856 
5857             -- get any current deprn adjustment amount balance (not available in query bal)
5858             if (p_mrc_sob_type_code = 'R') then
5859 
5860               select sum(nvl(deprn_adjustment_amount, 0))
5861                 into l_deprn_adjustment_amount
5862                 from fa_mc_deprn_detail
5863                where asset_id       = p_asset_hdr_rec.asset_id
5864                  and book_type_code = p_asset_hdr_rec.book_type_code
5865                  and set_of_books_id = p_set_of_books_id;
5866 
5867            else -- primary
5868 
5869              select sum(nvl(deprn_adjustment_amount, 0))
5870                into l_deprn_adjustment_amount
5871                from fa_deprn_detail
5872               where asset_id       = p_asset_hdr_rec.asset_id
5873                 and book_type_code = p_asset_hdr_rec.book_type_code;
5874 
5875            end if;
5876 
5877             if (p_log_level_rec.statement_level) then
5878               fa_debug_pkg.add(l_calling_fn, 'l_deprn_adjustment_amount', l_deprn_adjustment_amount, p_log_level_rec => p_log_level_rec);
5879             end if;
5880 
5881            -- calculate new value using unplanned amount as delta
5882            -- get current balance
5883            if not FA_UTIL_PVT.get_asset_deprn_rec(p_asset_hdr_rec => p_asset_hdr_rec,
5884                                                   px_asset_deprn_rec => l_asset_deprn_rec,
5885                                                   p_period_counter => p_period_counter - 1,
5886                                                   p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
5887               raise ins_dd_adj_err;
5888 
5889            end if;
5890 
5891            l_asset_deprn_rec.deprn_reserve := member.allocated_deprn_amount + nvl(l_asset_deprn_rec.deprn_reserve, 0);
5892            l_asset_deprn_rec.ytd_deprn     := member.allocated_deprn_amount + nvl(l_asset_deprn_rec.ytd_deprn, 0);
5893 
5894            l_deprn_adjustment_amount       := member.allocated_deprn_amount + nvl(l_deprn_adjustment_amount, 0);
5895 
5896             if (p_log_level_rec.statement_level) then
5897               fa_debug_pkg.add(l_calling_fn, 'member.allocated_deprn_amount', member.allocated_deprn_amount, p_log_level_rec => p_log_level_rec);
5898               fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec.deprn_reserve:ytd_deprn',
5899                                                       l_asset_deprn_rec.deprn_reserve||':'||l_asset_deprn_rec.ytd_deprn, p_log_level_rec => p_log_level_rec);
5900               fa_debug_pkg.add(l_calling_fn, 'l_deprn_adjustment_amount', l_deprn_adjustment_amount, p_log_level_rec => p_log_level_rec);
5901             end if;
5902 
5903            FA_DEPRN_SUMMARY_PKG.Update_Row
5904                       (X_Book_Type_Code                 => p_asset_hdr_rec.book_type_code,
5905                        X_Asset_Id                       => p_asset_hdr_rec.asset_id,
5906                        X_Ytd_Deprn                      => l_asset_deprn_rec.ytd_deprn,
5907                        X_Deprn_Reserve                  => l_asset_deprn_rec.deprn_reserve,
5908                        X_Period_Counter                 => p_period_counter - 1,
5909                        X_mrc_sob_type_code              => p_mrc_sob_type_code,
5910                        X_set_of_books_id                => p_asset_hdr_rec.set_of_books_id,
5911 
5912                        X_Calling_Fn                     => 'fa_track_member_pvt.ins_dd_adj'
5913                       ,  p_log_level_rec => p_log_level_rec);
5914 
5915            if not FA_INS_DETAIL_PKG.FAXINDD
5916                  (X_book_type_code           => p_asset_hdr_rec.book_type_code,
5917                   X_asset_id                 => p_asset_hdr_rec.asset_id,
5918                   X_deprn_adjustment_amount  => l_deprn_adjustment_amount,
5919                   X_mrc_sob_type_code        => p_mrc_sob_type_code,
5920                   X_set_of_books_id          => p_asset_hdr_rec.set_of_books_id
5921                  , p_log_level_rec => p_log_level_rec) then
5922               raise ins_dd_adj_err;
5923 
5924       end if;
5925 
5926    end if; -- end if period of addition
5927   end if; -- Adjustment_Amount is zero or not
5928 
5929   end loop;
5930 
5931 end if; -- UNPLANNED?
5932 
5933 return true;
5934 
5935 EXCEPTION
5936    when ins_dd_adj_err then
5937       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5938       return false;
5939 
5940    when others then
5941       fa_srvr_msg.add_sql_error
5942           (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5943       return false;
5944 
5945 end ins_dd_adj;
5946 
5947 ----------------------------------------------------------------------------
5948 --
5949 --  Function:   populate previous rows
5950 --
5951 --  Description:
5952 --
5953 --              This function is called to prepare PL/SQL table to process
5954 --              allocation under ADJUSTMENT mode
5955 --              If PL/SQL table doesn't exist, this function will extend the
5956 --              table with necessary values for member assets to be processed
5957 --              at one period before the starting period made subsequently.
5958 --
5959 ----------------------------------------------------------------------------
5960 FUNCTION populate_previous_rows(p_book_type_code     in varchar2,
5961                                 p_group_asset_id     in number,
5962                                 p_period_counter     in number,
5963                                 p_fiscal_year        in number,
5964                                 p_transaction_header_id in number,
5965                                 p_loop_end_year      in number,
5966                                 p_loop_end_period    in number,
5967                                 p_allocate_to_fully_ret_flag in varchar2,
5968                                 p_allocate_to_fully_rsv_flag in varchar2,
5969                                 p_mrc_sob_type_code  in varchar2, -- default 'N'
5970                                 p_set_of_books_id    in number,
5971                                 p_calling_fn         in varchar2 ,p_log_level_rec       IN     fa_api_types.log_level_rec_type) -- default null
5972   return boolean is
5973 
5974 --* Structure to call Deprn Basis Rule
5975 fa_rule_in      fa_std_types.fa_deprn_rule_in_struct;
5976 fa_rule_out     fa_std_types.fa_deprn_rule_out_struct;
5977 
5978 --* Host related variables
5979 h_book_type_code        varchar2(30);
5980 h_group_asset_id        number;
5981 h_member_asset_id       number;
5982 h_period_counter        number;
5983 h_fiscal_year           number;
5984 h_period_number         number;
5985 h_current_year_flag     varchar2(1);
5986 h_transaction_date      date;
5987 h_last_trans_id         number;
5988 h_perd_per_fiscal_year  number;
5989 
5990 h_cost                  number;
5991 h_adjusted_cost         number;
5992 h_recoverable_cost      number;
5993 h_salvage_value         number;
5994 h_adjusted_recoverable_cost     number;
5995 h_pc_fully_reserved     number;
5996 h_pc_fully_retired      number;
5997 h_eofy_reserve          number;
5998 h_deprn_reserve         number;
5999 h_ytd_deprn             number;
6000 h_bonus_deprn_reserve   number;
6001 h_bonus_ytd_deprn       number;
6002 h_eop_fiscal_year       number;
6003 
6004 h_loop_end_year         number;
6005 h_loop_end_period       number;
6006 h_loop_period_counter   number;
6007 
6008 h_method_code           varchar2(30);
6009 h_life_in_months        number;
6010 
6011 h_eofy_rec_cost         number;
6012 h_eofy_salvage_value    number;
6013 h_eofy_adj_cost         number;
6014 
6015 h_eofy_reserve_adjustment   number;
6016 h_adj_reserve           number;
6017 
6018 h_amort_addition_date   date;
6019 h_temp_deprn_reserve    number;
6020 h_temp_ytd_deprn        number;
6021 
6022 i                       number;
6023 h_adj_asset_id          number;
6024 h_adj_trans_type        varchar2(20);
6025 
6026 l_calling_fn            varchar2(45) := 'fa_track_member_pvt.populate_previous_rows';
6027 populate_previous_rows_err           exception;
6028 
6029 l_member_asset_id  number;
6030 
6031    cursor c_get_member_asset_id is
6032       select mth.asset_id
6033       from   fa_transaction_headers mth
6034 --           , fa_transaction_headers gth
6035 --      where  gth.transaction_header_id = p_transaction_header_id
6036 --      and    mth.transaction_header_id = gth.member_transaction_header_id;
6037       where  mth.transaction_header_id = p_transaction_header_id;
6038 
6039 
6040 -- cursor to get period close date
6041 cursor GET_PERD_CLOSE_DATE is
6042   select nvl(calendar_period_close_date,sysdate)
6043     from fa_deprn_periods
6044    where book_type_code = h_book_type_code
6045      and period_counter = h_loop_period_counter;
6046 
6047 cursor GET_PERD_CLOSE_DATE_MRC is
6048   select nvl(calendar_period_close_date,sysdate)
6049     from fa_mc_deprn_periods
6050    where book_type_code = h_book_type_code
6051      and period_counter = h_loop_period_counter
6052      and set_of_books_id = p_set_of_books_id;
6053 
6054 -- cursor to get period close date
6055 cursor GET_TRANS_DATE is
6056   select nvl(amortization_start_date,transaction_date_entered), asset_id, transaction_type_code
6057     from fa_transaction_headers
6058    where book_type_code = h_book_type_code
6059      and transaction_header_id = p_transaction_header_id;
6060 
6061 -- cursor to get all members at the specified period
6062 cursor ALL_MEMBERS(h_date date) is
6063   select bk.asset_id
6064     from fa_books  bk,
6065          fa_additions_b ad
6066    where bk.book_type_code = h_book_type_code
6067      and bk.group_asset_id = h_group_asset_id
6068      and bk.date_placed_in_service <= h_date
6069      and bk.depreciate_flag = 'YES'
6070      and bk.date_ineffective is null
6071      and ad.asset_id = bk.asset_id
6072      and ad.asset_type = 'CAPITALIZED'
6073      and bk.asset_id = nvl(l_member_asset_id, bk.asset_id)
6074    order by ad.asset_number;
6075 
6076 cursor ALL_MEMBERS_MRC(h_date date) is
6077   select bk.asset_id
6078     from fa_mc_books  bk,
6079          fa_additions_b ad
6080    where bk.book_type_code = h_book_type_code
6081      and bk.group_asset_id = h_group_asset_id
6082      and bk.set_of_books_id = p_set_of_books_id
6083      and bk.date_placed_in_service <= h_date
6084      and bk.depreciate_flag = 'YES'
6085      and bk.date_ineffective is null
6086      and bk.asset_id = nvl(l_member_asset_id, bk.asset_id)
6087      and ad.asset_id = bk.asset_id
6088      and ad.asset_type = 'CAPITALIZED'
6089    order by ad.asset_number;
6090 
6091 -- cursor to query start period condition of all members belonged to the specified group
6092 cursor ALL_MEMBER_FOR_ADJ_MODE(p_member_asset_id number) is
6093   select bk.cost,
6094          bk.adjusted_cost,
6095          bk.recoverable_cost,
6096          bk.salvage_value,
6097          bk.adjusted_recoverable_cost,
6098          bk.period_counter_fully_reserved,
6099          bk.period_counter_fully_retired,
6100          decode(ds.deprn_source_code,'BOOKS',ds.deprn_reserve - ds.ytd_deprn,
6101                 decode(dp1.fiscal_year,h_fiscal_year,ds.deprn_reserve - ds.ytd_deprn,
6102                        ds.deprn_reserve)), -- bk.eofy_reserve,
6103          ds.deprn_reserve,
6104          decode(dp1.fiscal_year,h_fiscal_year,ds.ytd_deprn,0),
6105          ds.bonus_deprn_reserve,
6106          decode(dp1.fiscal_year,h_fiscal_year,ds.bonus_ytd_deprn,0),
6107          dp1.fiscal_year
6108     from fa_books  bk,
6109          fa_deprn_periods dp,
6110          fa_deprn_periods dp1,
6111          fa_deprn_summary ds,
6112          fa_additions_b ad
6113    where dp.book_type_code = h_book_type_code
6114      and dp.period_counter = h_loop_period_counter
6115      and bk.book_type_code = dp.book_type_code
6116      and bk.asset_id = p_member_asset_id
6117      and (bk.transaction_header_id_out = p_transaction_header_id or
6118           bk.transaction_header_id_out = h_last_trans_id or
6119          (bk.date_ineffective is null and
6120           bk.transaction_header_id_in <> nvl(p_transaction_header_id,-1) and
6121           not exists (select 'y'
6122                         from fa_books bk1
6123                        where bk1.book_type_code = bk.book_type_code
6124                          and bk1.asset_id = bk.asset_id
6125                          and bk1.transaction_header_id_out = nvl(p_transaction_header_id,-1))))
6126      and bk.depreciate_flag = decode(p_transaction_header_id,NULL,'YES',bk.depreciate_flag) -- added for bug 8584206
6127      and ds.book_type_code = bk.book_type_code
6128      and ds.period_counter =
6129          (select min(period_counter)
6130             from fa_deprn_summary ds1
6131            where ds1.book_type_code = h_book_type_code
6132              and ds1.asset_id = bk.asset_id
6133              and ds1.period_counter >= h_period_counter - 1)
6134      and ds.asset_id = bk.asset_id
6135      and dp1.book_type_code = h_book_type_code
6136      and dp1.period_counter = ds.period_counter
6137      and ad.asset_id = bk.asset_id
6138      and ad.asset_type = 'CAPITALIZED'
6139    order by ad.asset_number;
6140 
6141 cursor ALL_MEMBER_FOR_ADJ_MODE_MRC(p_member_asset_id number) is
6142   select bk.cost,
6143          bk.adjusted_cost,
6144          bk.recoverable_cost,
6145          bk.salvage_value,
6146          bk.adjusted_recoverable_cost,
6147          bk.period_counter_fully_reserved,
6148          bk.period_counter_fully_retired,
6149          decode(ds.deprn_source_code,'BOOKS',ds.deprn_reserve - ds.ytd_deprn,
6150                 decode(dp1.fiscal_year,h_fiscal_year,ds.deprn_reserve - ds.ytd_deprn,
6151                 ds.deprn_reserve)), -- bk.eofy_reserve,
6152          ds.deprn_reserve,
6153          decode(dp1.fiscal_year,h_fiscal_year,ds.ytd_deprn,0),
6154          ds.bonus_deprn_reserve,
6155          decode(dp1.fiscal_year,h_fiscal_year,ds.bonus_ytd_deprn,0),
6156          dp1.fiscal_year
6157     from fa_mc_books  bk,
6158          fa_mc_deprn_periods dp,
6159          fa_mc_deprn_periods dp1,
6160          fa_mc_deprn_summary ds,
6161          fa_additions_b ad
6162    where dp.book_type_code = h_book_type_code
6163      and dp.period_counter = h_loop_period_counter
6164      and dp.set_of_books_id = p_set_of_books_id
6165      and bk.book_type_code = dp.book_type_code
6166      and bk.asset_id = p_member_asset_id
6167      and bk.set_of_books_id = p_set_of_books_id
6168      and (bk.transaction_header_id_out = p_transaction_header_id or
6169          bk.transaction_header_id_out = h_last_trans_id or
6170          (bk.date_ineffective is null and
6171           bk.transaction_header_id_in <> nvl(p_transaction_header_id,-1) and
6172           not exists (select 'y'
6173                         from fa_mc_books bk1
6174                        where bk1.book_type_code = bk.book_type_code
6175                          and bk1.asset_id = bk.asset_id
6176                          and bk1.transaction_header_id_out = nvl(p_transaction_header_id,-1)
6177                          and set_of_books_id = p_set_of_books_id)))
6178      and bk.depreciate_flag = decode(p_transaction_header_id,NULL,'YES',bk.depreciate_flag) -- added for bug 8584206
6179      and ds.book_type_code = bk.book_type_code
6180      and ds.period_counter =
6181          (select min(period_counter)
6182             from fa_mc_deprn_summary ds1
6183            where ds1.book_type_code = h_book_type_code
6184              and ds1.asset_id = bk.asset_id
6185              and ds1.period_counter >= h_period_counter - 1)
6186      and ds.set_of_books_id = p_set_of_books_id
6187      and ds.asset_id = bk.asset_id
6188      and dp1.book_type_code = h_book_type_code
6189      and dp1.period_counter = ds.period_counter
6190      and dp1.set_of_books_id = p_set_of_books_id
6191      and ad.asset_id = bk.asset_id
6192      and ad.asset_type = 'CAPITALIZED'
6193    order by ad.asset_number;
6194 
6195 -- cursor to query start period condition of all members belonged to the specified group
6196 cursor ALL_MEMBER_FOR_ADDITION(p_member_asset_id number) is
6197   select bk.cost,
6198          bk.adjusted_cost,
6199          bk.recoverable_cost,
6200          bk.salvage_value,
6201          bk.adjusted_recoverable_cost,
6202          bk.period_counter_fully_reserved,
6203          bk.period_counter_fully_retired,
6204          decode(ds.deprn_source_code,'BOOKS',ds.deprn_reserve - ds.ytd_deprn,
6205                 decode(dp.fiscal_year,h_fiscal_year,ds.deprn_reserve - ds.ytd_deprn,
6206                        ds.deprn_reserve)), -- bk.eofy_reserve,
6207          ds.deprn_reserve,
6208          ds.ytd_deprn,
6209          ds.bonus_deprn_reserve,
6210          ds.bonus_ytd_deprn,
6211          dp.fiscal_year
6212     from fa_books  bk,
6213          fa_deprn_periods dp,
6214          fa_deprn_summary ds,
6215          fa_additions_b ad
6216    where dp.book_type_code = h_book_type_code
6217      and dp.period_counter = h_loop_period_counter
6218      and bk.book_type_code = dp.book_type_code
6219      and bk.asset_id = p_member_asset_id
6220      and bk.date_ineffective is null
6221      and bk.depreciate_flag = 'YES'
6222      and ds.book_type_code = bk.book_type_code
6223      and ds.period_counter =
6224          (select min(period_counter)
6225             from fa_deprn_summary ds1
6226            where ds1.book_type_code = h_book_type_code
6227              and ds1.asset_id = bk.asset_id
6228              and ds1.period_counter >= h_period_counter - 1)
6229      and ds.asset_id = bk.asset_id
6230      and ad.asset_id = bk.asset_id
6231      and ad.asset_type = 'CAPITALIZED'
6232    order by ad.asset_number;
6233 
6234 cursor ALL_MEMBER_FOR_ADDITION_MRC(p_member_asset_id number) is
6235   select bk.cost,
6236          bk.adjusted_cost,
6237          bk.recoverable_cost,
6238          bk.salvage_value,
6239          bk.adjusted_recoverable_cost,
6240          bk.period_counter_fully_reserved,
6241          bk.period_counter_fully_retired,
6242          decode(ds.deprn_source_code,'BOOKS',ds.deprn_reserve - ds.ytd_deprn,
6243                 decode(dp.fiscal_year,h_fiscal_year,ds.deprn_reserve - ds.ytd_deprn,
6244                        ds.deprn_reserve)), -- bk.eofy_reserve,
6245          ds.deprn_reserve,
6246          ds.ytd_deprn,
6247          ds.bonus_deprn_reserve,
6248          ds.bonus_ytd_deprn,
6249          dp.fiscal_year
6250     from fa_mc_books  bk,
6251          fa_mc_deprn_periods dp,
6252          fa_mc_deprn_summary ds,
6253          fa_additions_b ad
6254    where dp.book_type_code = h_book_type_code
6255      and dp.period_counter = h_loop_period_counter
6256      and dp.set_of_books_id = p_set_of_books_id
6257      and bk.book_type_code = dp.book_type_code
6258      and bk.asset_id = p_member_asset_id
6259      and bk.set_of_books_id = p_set_of_books_id
6260      and bk.date_ineffective is null
6261      and bk.depreciate_flag = 'YES'
6262      and ds.book_type_code = bk.book_type_code
6263      and ds.period_counter =
6264          (select min(period_counter)
6265             from fa_mc_deprn_summary ds1
6266            where ds1.book_type_code = h_book_type_code
6267              and ds1.asset_id = bk.asset_id
6268              and ds1.period_counter >= h_period_counter - 1)
6269      and ds.set_of_books_id = p_set_of_books_id
6270      and ds.asset_id = bk.asset_id
6271      and ad.asset_id = bk.asset_id
6272      and ad.asset_type = 'CAPITALIZED'
6273    order by ad.asset_number;
6274 
6275 cursor MEMBER_START_PERIOD is
6276   select bk.recoverable_cost,
6277          bk.salvage_value
6278     from fa_books  bk,
6279          fa_deprn_periods dp
6280    where bk.book_type_code = h_book_type_code
6281      and bk.group_asset_id = h_member_asset_id
6282      and bk.date_effective <= nvl(dp.period_close_date,sysdate)
6283      and nvl(bk.date_ineffective,sysdate) >= nvl(dp.period_close_date,sysdate)
6284      and dp.book_type_code = bk.book_type_code
6285      and dp.fiscal_year = h_fiscal_year - 1
6286      and dp.period_num = (select max(period_num) from fa_deprn_periods dp1
6287                            where dp1.book_type_code = h_book_type_code
6288                              and dp1.fiscal_year = h_fiscal_year - 1);
6289 
6290 cursor MEMBER_START_PERIOD_MRC is
6291   select bk.recoverable_cost,
6292          bk.salvage_value
6293     from fa_mc_books  bk,
6294          fa_mc_deprn_periods dp
6295    where bk.book_type_code = h_book_type_code
6296      and bk.group_asset_id = h_member_asset_id
6297      and bk.set_of_books_id = p_set_of_books_id
6298      and bk.date_effective <= nvl(dp.period_close_date,sysdate)
6299      and nvl(bk.date_ineffective,sysdate) >= nvl(dp.period_close_date,sysdate)
6300      and dp.book_type_code = bk.book_type_code
6301      and dp.fiscal_year = h_fiscal_year - 1
6302      and dp.period_num = (select max(period_num) from fa_mc_deprn_periods dp1
6303                            where dp1.book_type_code = h_book_type_code
6304                              and dp1.fiscal_year = h_fiscal_year - 1
6305                              and dp1.set_of_books_id = p_set_of_books_id)
6306      and dp.set_of_books_id = p_set_of_books_id;
6307 
6308 cursor GET_PERIOD is
6309   select period_counter + 1
6310     from fa_deprn_periods
6311    where book_type_code = h_book_type_code
6312      and fiscal_year = h_loop_end_year
6313      and period_num = h_loop_end_period;
6314 
6315 cursor GET_PERIOD_MRC is
6316   select period_counter + 1
6317     from fa_mc_deprn_periods
6318    where book_type_code = h_book_type_code
6319      and fiscal_year = h_loop_end_year
6320      and period_num = h_loop_end_period
6321      and set_of_books_id = p_set_of_books_id;
6322 
6323 --* Cursor for EOFY_RESERVE adjustment
6324 cursor FA_RET_RSV is
6325   select sum(nvl(ret.reserve_retired,0) - nvl(ret.eofy_reserve,0))
6326     from fa_retirements ret
6327    where ret.book_type_code = h_book_type_code
6328      and ret.asset_id = h_member_asset_id
6329      and exists
6330          (select th1.transaction_header_id
6331             from fa_transaction_headers th1,
6332                  fa_deprn_periods dp1,
6333                  fa_deprn_periods dp3
6334            where th1.asset_id = ret.asset_id
6335              and dp1.book_type_code = h_book_type_code
6336              and dp1.fiscal_year =
6337                  (select dp2.fiscal_year
6338                     from fa_deprn_periods dp2
6339                    where dp2.book_type_code = dp1.book_type_code
6340                      and dp2.period_Counter = h_period_counter - 1)
6341              and dp1.period_num = 1
6342              and dp3.book_type_code = dp1.book_type_code
6343              and dp3.period_counter = h_period_counter - 1
6344              and nvl(th1.amortization_start_date,th1.transaction_date_entered) >= dp1.calendar_period_open_date
6345              and nvl(th1.amortization_start_date,th1.transaction_date_entered) <= dp3.calendar_period_close_date
6346              and th1.transaction_type_code in ('PARTIAL RETIREMENT','FULL RETIREMENT')
6347              and th1.transaction_header_id = ret.transaction_header_id_in);
6348 
6349 cursor FA_RET_RSV_MRC is
6350   select sum(nvl(ret.reserve_retired,0) - nvl(ret.eofy_reserve,0))
6351     from fa_mc_retirements ret
6352    where ret.book_type_code = h_book_type_code
6353      and ret.asset_id = h_member_asset_id
6354      and ret.set_of_books_id = p_set_of_books_id
6355      and exists
6356          (select th1.transaction_header_id
6357             from fa_transaction_headers th1,
6358                  fa_deprn_periods dp1,
6359                  fa_deprn_periods dp3
6360            where th1.asset_id = ret.asset_id
6361              and dp1.book_type_code = h_book_type_code
6362              and dp1.fiscal_year =
6363                  (select dp2.fiscal_year
6364                     from fa_deprn_periods dp2
6365                    where dp2.book_type_code = dp1.book_type_code
6366                      and dp2.period_Counter = h_period_counter - 1)
6367              and dp1.period_num = 1
6368              and dp3.book_type_code = dp1.book_type_code
6369              and dp3.period_counter = h_period_counter - 1
6370              and nvl(th1.amortization_start_date,th1.transaction_date_entered) >= dp1.calendar_period_open_date
6371              and nvl(th1.amortization_start_date,th1.transaction_date_entered) <= dp3.calendar_period_close_date
6372              and th1.transaction_type_code in ('PARTIAL RETIREMENT','FULL RETIREMENT')
6373              and th1.transaction_header_id = ret.transaction_header_id_in);
6374 
6375 cursor FA_ADJ_RESERVE is
6376    select sum(decode(adj.debit_credit_flag,
6377                      'DR',adj.adjustment_amount,
6378                      'CR', -1 * adj.adjustment_amount))
6379      from fa_adjustments adj
6380     where adj.book_type_code = h_book_type_code
6381       and adj.asset_id = h_member_asset_id
6382       and adj.adjustment_type = 'RESERVE'
6383       and adj.source_type_code = 'ADJUSTMENT'
6384       and nvl(adj.track_member_flag, 'N') = 'N' -- ENERGY
6385       and adj.period_counter_adjusted in
6386          (select dp2.period_counter
6387             from fa_deprn_periods dp1,
6388                  fa_deprn_periods dp2
6389            where dp1.book_type_code = adj.book_type_code
6390              and dp1.period_counter = h_period_counter - 1
6391              and dp2.book_type_code = dp1.book_type_code
6392              and dp2.fiscal_year = dp1.fiscal_year
6393              and dp2.period_counter <= dp1.period_counter);
6394 
6395 cursor FA_ADJ_RESERVE_MRC is
6396    select sum(decode(adj.debit_credit_flag,
6397                      'DR',adj.adjustment_amount,
6398                      'CR', -1 * adj.adjustment_amount))
6399      from fa_mc_adjustments adj
6400     where adj.book_type_code = h_book_type_code
6401       and adj.asset_id = h_member_asset_id
6402       and adj.adjustment_type = 'RESERVE'
6403       and adj.source_type_code = 'ADJUSTMENT'
6404       and adj.set_of_books_id = p_set_of_books_id
6405       and nvl(adj.track_member_flag, 'N') = 'N'    -- ENERGY
6406       and adj.period_counter_adjusted in
6407          (select dp2.period_counter
6408             from fa_mc_deprn_periods dp1,
6409                  fa_mc_deprn_periods dp2
6410            where dp1.book_type_code = adj.book_type_code
6411              and dp1.period_counter = h_period_counter - 1
6412              and dp1.set_of_books_id = p_set_of_books_id
6413              and dp2.book_type_code = dp1.book_type_code
6414              and dp2.fiscal_year = dp1.fiscal_year
6415              and dp2.set_of_books_id = p_set_of_books_id
6416              and dp2.period_counter <= dp1.period_counter);
6417 
6418 cursor ADDITION_RESERVE_YTD is
6419    select ds.deprn_reserve,
6420           ds.ytd_deprn
6421      from fa_deprn_summary ds
6422     where ds.book_type_code=h_book_type_code
6423       and ds.asset_id=h_member_asset_id
6424       and ds.deprn_source_code='BOOKS';
6425 
6426 cursor ADDITION_RESERVE_YTD_MRC is
6427    select ds.deprn_reserve,
6428           ds.ytd_deprn
6429      from fa_mc_deprn_summary ds
6430     where ds.book_type_code=h_book_type_code
6431       and ds.asset_id=h_member_asset_id
6432       and ds.deprn_source_code='BOOKS'
6433       and ds.set_of_books_id=p_set_of_books_id;
6434 
6435 cursor ADDITION_DATE is
6436   select nvl(amortization_start_date,transaction_date_entered)
6437     from fa_transaction_headers
6438    where transaction_type_code = 'ADDITION'
6439      and asset_id = h_member_asset_id;
6440 
6441 --* Get latest transaction id for the member asset
6442 cursor GET_LAST_TRANS_ID(p_member_asset_id number, p_trans_id number) is
6443   select TH.TRANSACTION_HEADER_ID
6444     from FA_TRANSACTION_HEADERS TH,
6445          FA_TRANSACTION_HEADERS TH1,
6446          FA_CALENDAR_PERIODS DP,
6447          FA_FISCAL_YEAR FY
6448    where DP.calendar_type = fa_cache_pkg.fazcbc_record.deprn_calendar
6449      and FY.fiscal_year_name = fa_cache_pkg.fazcbc_record.fiscal_year_name
6450      and TH.asset_id = p_member_asset_id
6451      and TH.transaction_type_code not in ('TRANSFER OUT', 'TRANSFER IN', 'TRANSFER', 'TRANSFER IN/VOID',
6452                                           'RECLASS', 'UNIT ADJUSTMENT','REINSTATEMENT')
6453      and nvl(TH.amortization_start_date,TH.transaction_date_entered) between DP.start_date and DP.end_date
6454      and DP.start_date >= FY.start_date
6455      and DP.end_date <= FY.end_date
6456      and TH1.transaction_header_id = p_trans_id
6457      and nvl(TH1.amortization_start_date,TH1.transaction_date_entered) between DP.start_date and DP.end_date
6458      and nvl(TH.amortization_start_date,TH.transaction_date_entered) <= nvl(TH1.amortization_start_date,TH1.transaction_date_entered)
6459 order by nvl(TH.amortization_start_date,TH.transaction_date_entered), TH.transaction_header_id desc;
6460 
6461 begin
6462 
6463 if (p_log_level_rec.statement_level) then
6464    fa_debug_pkg.add(l_calling_fn, '+++ populate_previous_rows: Just Started +++', 'Parameters', p_log_level_rec => p_log_level_rec);
6465    fa_debug_pkg.add(l_calling_fn, 'p_book:group:period_ctr:fiscal_yr:trans_hdr_id:mrc_type',
6466          p_book_type_code||':'||p_group_asset_id||':'||p_period_counter||':'||p_fiscal_year||':'||p_transaction_header_id||':'||p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec);
6467 end if;
6468 
6469 
6470 if (nvl(fa_cache_pkg.fazcdrd_record.allow_reduction_rate_flag, 'N') = 'N') then
6471 open c_get_member_asset_id;
6472 fetch c_get_member_asset_id into l_member_asset_id;
6473 close c_get_member_asset_id;
6474 if (p_log_level_rec.statement_level) then
6475    fa_debug_pkg.add(l_calling_fn, 'l_member_asset_id', l_member_asset_id, p_log_level_rec => p_log_level_rec);
6476 end if;
6477 end if;
6478 
6479 
6480 h_book_type_code := p_book_type_code;
6481 h_group_asset_id := p_group_asset_id;
6482 h_period_counter := p_period_counter;
6483 h_fiscal_year := p_fiscal_year;
6484 h_loop_end_year := p_loop_end_year;
6485 h_loop_end_period := p_loop_end_period;
6486 
6487 /* Apply MRC related feature */
6488 
6489 -- Query necessary data from table and insert those into FA_TRACKING_TEMP
6490 
6491 if p_mrc_sob_type_code <> 'R' then
6492 
6493   if h_loop_end_year is not null and h_loop_end_period is not null then
6494   /* Get period counter of the next period of loop end */
6495     open GET_PERIOD;
6496     fetch GET_PERIOD into h_loop_period_counter;
6497     if GET_PERIOD%NOTFOUND then
6498       close GET_PERIOD;
6499        raise populate_previous_rows_err;
6500     end if;
6501     close GET_PERIOD;
6502   else
6503     h_loop_period_counter := h_period_counter;
6504   end if;
6505 
6506   if (p_log_level_rec.statement_level) then
6507     fa_debug_pkg.add(l_calling_fn, 'h_loop_period_counter', h_loop_period_counter, p_log_level_rec => p_log_level_rec);
6508   end if;
6509 
6510   if nvl(p_calling_fn,'OTHER') = 'TRACK_ASSETS' then -- Get group level info
6511     select deprn_method_code,life_in_months
6512       into h_method_code,h_life_in_months
6513       from fa_books
6514      where book_type_code = h_book_type_code
6515        and asset_id = h_group_asset_id
6516        and date_ineffective is null;
6517   end if;
6518 
6519   i := 0;
6520   h_adj_asset_id := NULL;
6521   h_adj_trans_type := NULL;
6522 
6523   if p_transaction_header_id is not null then
6524    open GET_TRANS_DATE;
6525    fetch GET_TRANS_DATE into h_transaction_date, h_adj_asset_id, h_adj_trans_type;
6526    close GET_TRANS_DATE;
6527   else
6528    open GET_PERD_CLOSE_DATE;
6529    fetch GET_PERD_CLOSE_DATE into h_transaction_date;
6530    close GET_PERD_CLOSE_DATE;
6531   end if;
6532 
6533   if h_transaction_date is null then -- This is a case this process is called to process allocation
6534                                      -- other than the transaction.need to get period end date for
6535                                      -- transaction date
6536    h_perd_per_fiscal_year := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
6537    if h_perd_per_fiscal_year is null then
6538       if not fa_cache_pkg.fazcct(fa_cache_pkg.fazcbc_record.deprn_calendar, p_log_level_rec => p_log_level_rec) then
6539          raise populate_previous_rows_err;
6540       end if;
6541       h_perd_per_fiscal_year := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
6542    end if;
6543 
6544    select DP.end_date into h_transaction_date
6545      from FA_FISCAL_YEAR FY,
6546           FA_CALENDAR_PERIODS DP
6547     where DP.calendar_type = fa_cache_pkg.fazcbc_record.deprn_calendar
6548       and DP.period_num = p_period_counter - p_fiscal_year*h_perd_per_fiscal_year
6549       and FY.fiscal_year_name = fa_cache_pkg.fazcbc_record.fiscal_year_name
6550       and FY.fiscal_year = p_fiscal_year
6551       and DP.start_date >= FY.start_date
6552       and DP.end_date <= FY.end_date;
6553 
6554    if (p_log_level_rec.statement_level) then
6555      fa_debug_pkg.add(l_calling_fn, 'h_transaction_date from table', h_transaction_date, p_log_level_rec => p_log_level_rec);
6556    end if;
6557 --   h_transaction_date := sysdate;
6558   end if;
6559 
6560   For pop_mem in ALL_MEMBERS(h_transaction_date) loop
6561 
6562    if (p_log_level_rec.statement_level) then
6563      fa_debug_pkg.add(l_calling_fn, '+++ In Loop (1) for member loop starts +++ (transaction_date)', h_transaction_date);
6564      fa_debug_pkg.add(l_calling_fn, 'pop_mem.member_asset', pop_mem.asset_id, p_log_level_rec => p_log_level_rec);
6565    end if;
6566 
6567    h_member_asset_id := pop_mem.asset_id;
6568 
6569 -- Check if selected member asset is the asset to be processed or not.
6570 -- Support backdated addition with reserve case.
6571    open ADDITION_DATE;
6572    fetch ADDITION_DATE into h_amort_addition_date;
6573    if ADDITION_DATE%NOTFOUND then
6574      close ADDITION_DATE;
6575      raise populate_previous_rows_err;
6576    end if;
6577    close ADDITION_DATE;
6578 
6579    if h_amort_addition_date > h_transaction_date then -- Addition start date is later than this period
6580      open ADDITION_RESERVE_YTD;
6581      fetch ADDITION_RESERVE_YTD into h_temp_deprn_reserve, h_temp_ytd_deprn;
6582      close ADDITION_RESERVE_YTD;
6583      if nvl(h_temp_deprn_reserve,0) <> 0 then
6584        goto skip_process;
6585      end if;
6586    end if;
6587 
6588 -- Query Retirement Related Amounts
6589    open FA_RET_RSV;
6590    fetch FA_RET_RSV into h_eofy_reserve_adjustment;
6591    close FA_RET_RSV;
6592 
6593 -- Query Reserve Adjustment
6594    open FA_ADJ_RESERVE;
6595    fetch FA_ADJ_RESERVE into h_adj_reserve;
6596    close FA_ADJ_RESERVE;
6597 
6598    h_eofy_reserve_adjustment := nvl(h_eofy_reserve_adjustment,0);
6599 
6600 -- Check if the passed transaction is the transaction for this member asset
6601    if nvl(h_adj_asset_id,-99) <> h_member_asset_id then
6602      open GET_LAST_TRANS_ID(h_member_asset_id, p_transaction_header_id);
6603      fetch GET_LAST_TRANS_ID into h_last_trans_id;
6604      close GET_LAST_TRANS_ID;
6605    else
6606      h_last_trans_id := p_transaction_header_id;
6607    end if;
6608 
6609    if (p_log_level_rec.statement_level) then
6610      fa_debug_pkg.add(l_calling_fn, 'h_eofy_reserve_adjustment', h_eofy_reserve_adjustment, p_log_level_rec => p_log_level_rec);
6611      fa_debug_pkg.add(l_calling_fn, 'h_last_trans_id', h_last_trans_id, p_log_level_rec => p_log_level_rec);
6612    end if;
6613 
6614    open ALL_MEMBER_FOR_ADJ_MODE(h_member_asset_id);
6615    fetch ALL_MEMBER_FOR_ADJ_MODE into h_cost, h_adjusted_cost, h_recoverable_cost,
6616                                         h_salvage_value, h_adjusted_recoverable_cost,
6617                                         h_pc_fully_reserved,
6618                                         h_pc_fully_retired,
6619                                         h_eofy_reserve,
6620                                         h_deprn_reserve, h_ytd_deprn,
6621                                         h_bonus_deprn_reserve, h_bonus_ytd_deprn, h_eop_fiscal_year;
6622    if ALL_MEMBER_FOR_ADJ_MODE%NOTFOUND then
6623 
6624      open ALL_MEMBER_FOR_ADDITION(h_member_asset_id);
6625      fetch ALL_MEMBER_FOR_ADDITION into h_cost, h_adjusted_cost, h_recoverable_cost,
6626                                         h_salvage_value, h_adjusted_recoverable_cost,
6627                                         h_pc_fully_reserved,
6628                                         h_pc_fully_retired,
6629                                         h_eofy_reserve,
6630                                         h_deprn_reserve, h_ytd_deprn,
6631                                         h_bonus_deprn_reserve, h_bonus_ytd_deprn, h_eop_fiscal_year;
6632      if ALL_MEMBER_FOR_ADDITION%NOTFOUND then
6633        if (p_log_level_rec.statement_level) then
6634          fa_debug_pkg.add(l_calling_fn, 'No rows in FA_BOOKS of member asset', h_member_asset_id, p_log_level_rec => p_log_level_rec);
6635        end if;
6636      else
6637        i := i + 1;
6638        p_track_member_table(i).group_asset_id := h_group_asset_id;
6639        p_track_member_table(i).member_asset_id := h_member_asset_id;
6640        p_track_member_table(i).set_of_books_id := p_set_of_books_id;
6641        p_track_member_table(i).period_counter := h_period_counter;
6642        p_track_member_table(i).fiscal_year := h_fiscal_year;
6643        p_track_member_table(i).cost := 0;
6644        p_track_member_table(i).salvage_value := 0;
6645        p_track_member_table(i).adjusted_cost := 0;
6646        p_track_member_table(i).recoverable_cost := 0;
6647        p_track_member_table(i).adjusted_recoverable_cost := 0;
6648        p_track_member_table(i).deprn_reserve := nvl(h_deprn_reserve,0);
6649        p_track_member_table(i).ytd_deprn := nvl(h_ytd_deprn,0);
6650        p_track_member_table(i).bonus_deprn_reserve := 0;
6651        p_track_member_table(i).bonus_ytd_deprn := 0;
6652        p_track_member_table(i).eofy_reserve := nvl(h_deprn_reserve,0) - nvl(h_ytd_deprn,0);
6653        p_track_member_table(i).eofy_recoverable_cost := 0;
6654        p_track_member_table(i).eop_recoverable_cost := 0;
6655        p_track_member_table(i).eofy_salvage_value := 0;
6656        p_track_member_table(i).eop_salvage_value := 0;
6657 
6658        /* Populate index table */
6659        put_track_index(h_period_counter, h_member_asset_id,h_group_asset_id,p_set_of_books_id,i,p_log_level_rec);
6660 
6661        if (p_log_level_rec.statement_level) then
6662          fa_debug_pkg.add(l_calling_fn, '++ Stored values for added member asset indicator', i, p_log_level_rec => p_log_level_rec);
6663          if not display_debug_message2(i => i, p_calling_fn=> l_calling_fn,
6664 p_log_level_rec => p_log_level_rec) then
6665            fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
6666          end if;
6667        end if;
6668      end if;
6669      close ALL_MEMBER_FOR_ADDITION;
6670    elsif ((nvl(p_allocate_to_fully_ret_flag,'N') = 'N' and nvl(p_allocate_to_fully_rsv_flag,'N') = 'N' and
6671         nvl(h_pc_fully_retired,h_period_counter) >= h_period_counter and
6672         nvl(h_pc_fully_reserved,h_period_counter+1) > h_period_counter)
6673                or
6674        (nvl(p_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(p_allocate_to_fully_rsv_flag,'N') = 'N' and
6675         nvl(h_pc_fully_reserved,h_period_counter+1) > h_period_counter)
6676                or
6677        (nvl(p_allocate_to_fully_ret_flag,'N') = 'N' and nvl(p_allocate_to_fully_rsv_flag,'N') = 'Y' and
6678         nvl(h_pc_fully_retired,h_period_counter) >= h_period_counter)
6679                Or
6680        (nvl(p_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(p_allocate_to_fully_rsv_flag,'N') = 'Y'))
6681 
6682       then
6683        if (p_log_level_rec.statement_level) then
6684          fa_debug_pkg.add('fa_track_member_pvt', '++ In case when member asset is queried ++ ', i, p_log_level_rec => p_log_level_rec);
6685        end if;
6686        if h_eop_fiscal_year = h_fiscal_year then
6687          h_eofy_reserve := nvl(h_eofy_reserve,0) + nvl(h_eofy_reserve_adjustment,0) + nvl(h_adj_reserve,0);
6688        end if;
6689 
6690        -- Try to query eofy_reserve from memory
6691        if (nvl(h_adj_asset_id,-99) <> h_member_asset_id and
6692           nvl(h_adj_trans_type,'NULL') <> 'ADDITION' )then
6693 
6694         For j in 1 .. p_track_member_eofy_table.COUNT loop
6695          if p_track_member_eofy_table(j).group_asset_id = h_group_asset_id and
6696             p_track_member_eofy_table(j).member_asset_id = h_member_asset_id and
6697             nvl(p_track_member_eofy_table(j).set_of_books_id,-99) = nvl(p_set_of_books_id, -99) then
6698 --            p_track_member_eofy_table(j).fiscal_year = h_fiscal_year then
6699            if (p_log_level_rec.statement_level) then
6700              fa_debug_pkg.add(l_calling_fn, 'p_track_member_eofy_table('||j||').cost:salvage:rec_cost:adj_cost:eofy_reserve',
6701                                              p_track_member_eofy_table(j).cost||':'||p_track_member_eofy_table(j).salvage_value||':'||
6702                                              p_track_member_eofy_table(j).recoverable_cost||':'||p_track_member_eofy_table(j).adjusted_cost||':'||
6703                                              p_track_member_eofy_table(j).eofy_reserve);
6704            end if;
6705            h_cost := p_track_member_eofy_table(j).cost;
6706            h_salvage_value := p_track_member_eofy_table(j).salvage_value;
6707            h_recoverable_cost := p_track_member_eofy_table(j).recoverable_cost;
6708            h_adjusted_cost := p_track_member_eofy_table(j).adjusted_cost;
6709            h_eofy_reserve := p_track_member_eofy_table(j).eofy_reserve;
6710            exit;
6711          end if;
6712         END LOOP;
6713        end if; -- if this processed transactin is addition of this member...
6714 
6715        i := i + 1;
6716 
6717        open MEMBER_START_PERIOD;
6718        fetch MEMBER_START_PERIOD into h_eofy_rec_cost,h_eofy_salvage_value;
6719        close MEMBER_START_PERIOD;
6720 
6721        -- Set p_track_member_type
6722        p_track_member_table(i).group_asset_id := h_group_asset_id;
6723        p_track_member_table(i).member_asset_id := h_member_asset_id;
6724        p_track_member_table(i).set_of_books_id := p_set_of_books_id;
6725        p_track_member_table(i).period_counter := h_period_counter;
6726        p_track_member_table(i).fiscal_year := h_fiscal_year;
6727        p_track_member_table(i).cost := h_cost;
6728        p_track_member_table(i).salvage_value := h_salvage_value;
6729        p_track_member_table(i).adjusted_cost := h_adjusted_cost;
6730        p_track_member_table(i).recoverable_cost := h_recoverable_cost;
6731        p_track_member_table(i).adjusted_recoverable_cost := h_adjusted_recoverable_cost;
6732        p_track_member_table(i).deprn_reserve := h_deprn_reserve;
6733        p_track_member_table(i).ytd_deprn := h_ytd_deprn;
6734        p_track_member_table(i).bonus_deprn_reserve := h_bonus_deprn_reserve;
6735        p_track_member_table(i).bonus_ytd_deprn := h_bonus_ytd_deprn;
6736        p_track_member_table(i).eofy_reserve := h_eofy_reserve; -- + h_eofy_reserve_adjustment;
6737        p_track_member_table(i).eofy_recoverable_cost := h_eofy_rec_cost;
6738        p_track_member_table(i).eop_recoverable_cost := h_recoverable_cost;
6739        p_track_member_table(i).eofy_salvage_value := h_eofy_salvage_value;
6740        p_track_member_table(i).eop_salvage_value := h_salvage_value;
6741 
6742        /* Populate index table */
6743        put_track_index(h_period_counter, h_member_asset_id,h_group_asset_id,p_set_of_books_id,i,p_log_level_rec);
6744 
6745        if nvl(h_pc_fully_reserved,h_period_counter+1) > h_period_counter then
6746          p_track_member_table(i).fully_reserved_flag := 'N';
6747        else
6748          p_track_member_table(i).fully_reserved_flag := 'Y';
6749        end if;
6750        if nvl(h_pc_fully_retired,h_period_counter+1) > h_period_counter then
6751          p_track_member_table(i).fully_retired_flag := 'N';
6752        else
6753          p_track_member_table(i).fully_retired_flag := 'Y';
6754        end if;
6755 
6756      end if; -- This is an asset to be processed
6757      close ALL_MEMBER_FOR_ADJ_MODE;
6758      if (p_log_level_rec.statement_level) then
6759        fa_debug_pkg.add(l_calling_fn, '++ Stored values indicator', i, p_log_level_rec => p_log_level_rec);
6760        if i > 0 then
6761         if not display_debug_message2(i => i, p_calling_fn=> l_calling_fn,
6762 p_log_level_rec => p_log_level_rec) then
6763           fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
6764         end if;
6765        end if;
6766      end if;
6767 <<skip_process>>
6768     null;
6769 
6770   end loop;
6771 
6772 else -- For Reporting Book
6773 
6774   if h_loop_end_year is not null and h_loop_end_period is not null then
6775     /* Get period counter of the next period of loop end */
6776     open GET_PERIOD_MRC;
6777     fetch GET_PERIOD_MRC into h_loop_period_counter;
6778     if GET_PERIOD_MRC%NOTFOUND then
6779       close GET_PERIOD_MRC;
6780        raise populate_previous_rows_err;
6781     end if;
6782     close GET_PERIOD_MRC;
6783   else
6784     h_loop_period_counter := h_period_counter;
6785   end if;
6786 
6787   if nvl(p_calling_fn,'OTHER') = 'TRACK_ASSETS' then -- Get group level info
6788     select deprn_method_code,life_in_months
6789       into h_method_code,h_life_in_months
6790       from fa_mc_books
6791      where book_type_code = h_book_type_code
6792        and asset_id = h_group_asset_id
6793        and date_ineffective is null
6794        and set_of_books_id = p_set_of_books_id;
6795   end if;
6796 
6797   i := 0;
6798   h_adj_asset_id := NULL;
6799   h_adj_trans_type := NULL;
6800 
6801   if p_transaction_header_id is not null then
6802    open GET_TRANS_DATE;
6803    fetch GET_TRANS_DATE into h_transaction_date,h_adj_asset_id,h_adj_trans_type;
6804    close GET_TRANS_DATE;
6805   else
6806    open GET_PERD_CLOSE_DATE_MRC;
6807    fetch GET_PERD_CLOSE_DATE_MRC into h_transaction_date;
6808    close GET_PERD_CLOSE_DATE_MRC;
6809   end if;
6810 
6811   if h_transaction_date is null then -- This is a case this process is called to process allocation
6812                                      -- other than the transaction.need to get period end date for
6813                                      -- transaction date
6814    h_perd_per_fiscal_year := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
6815    if h_perd_per_fiscal_year is null then
6816       if not fa_cache_pkg.fazcct(fa_cache_pkg.fazcbc_record.deprn_calendar, p_log_level_rec => p_log_level_rec) then
6817          raise populate_previous_rows_err;
6818       end if;
6819       h_perd_per_fiscal_year := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
6820    end if;
6821 
6822    select DP.end_date into h_transaction_date
6823      from FA_FISCAL_YEAR FY,
6824           FA_CALENDAR_PERIODS DP
6825     where DP.calendar_type = fa_cache_pkg.fazcbc_record.deprn_calendar
6826       and DP.period_num = p_period_counter - p_fiscal_year*h_perd_per_fiscal_year
6827       and FY.fiscal_year_name = fa_cache_pkg.fazcbc_record.fiscal_year_name
6828       and FY.fiscal_year = p_fiscal_year
6829       and DP.start_date >= FY.start_date
6830       and DP.end_date <= FY.end_date;
6831 
6832    if (p_log_level_rec.statement_level) then
6833      fa_debug_pkg.add(l_calling_fn, 'h_transaction_date from table', h_transaction_date, p_log_level_rec => p_log_level_rec);
6834    end if;
6835 --   h_transaction_date := sysdate;
6836   end if;
6837 
6838   For pop_mem in ALL_MEMBERS_MRC(h_transaction_date) loop
6839 
6840     h_member_asset_id := pop_mem.asset_id;
6841 
6842     if (p_log_level_rec.statement_level) then
6843       fa_debug_pkg.add(l_calling_fn, '+++ In Loop (1) for member loop starts +++ (Reporting Book/transaction_date)',
6844                                                                                                     h_transaction_date);
6845       fa_debug_pkg.add(l_calling_fn, 'pop_mem.member_asset', pop_mem.asset_id, p_log_level_rec => p_log_level_rec);
6846     end if;
6847 
6848 -- Check if selected member asset is the asset to be processed or not.
6849 -- Support backdated addition with reserve case.
6850    open ADDITION_DATE;
6851    fetch ADDITION_DATE into h_amort_addition_date;
6852    if ADDITION_DATE%NOTFOUND then
6853      close ADDITION_DATE;
6854      raise populate_previous_rows_err;
6855    end if;
6856    close ADDITION_DATE;
6857 
6858    if h_amort_addition_date > h_transaction_date then -- Addition start date is later than this period
6859      open ADDITION_RESERVE_YTD;
6860      fetch ADDITION_RESERVE_YTD into h_temp_deprn_reserve, h_temp_ytd_deprn;
6861      close ADDITION_RESERVE_YTD;
6862      if nvl(h_temp_deprn_reserve,0) <> 0 then
6863        goto skip_process;
6864      end if;
6865    end if;
6866 
6867 -- Query Retirement Related Amounts
6868    open FA_RET_RSV_MRC;
6869    fetch FA_RET_RSV_MRC into h_eofy_reserve_adjustment;
6870    close FA_RET_RSV_MRC;
6871 
6872 -- Query Reserve Adjustment
6873    open FA_ADJ_RESERVE_MRC;
6874    fetch FA_ADJ_RESERVE_MRC into h_adj_reserve;
6875    close FA_ADJ_RESERVE_MRC;
6876 
6877    h_eofy_reserve_adjustment := nvl(h_eofy_reserve_adjustment,0);
6878    if (p_log_level_rec.statement_level) then
6879      fa_debug_pkg.add(l_calling_fn, 'h_eofy_reserve_adjustment', h_eofy_reserve_adjustment, p_log_level_rec => p_log_level_rec);
6880    end if;
6881 
6882 
6883 
6884     open ALL_MEMBER_FOR_ADJ_MODE_MRC(h_member_asset_id);
6885     fetch ALL_MEMBER_FOR_ADJ_MODE_MRC into h_cost, h_adjusted_cost, h_recoverable_cost,
6886                                         h_salvage_value, h_adjusted_recoverable_cost,
6887                                         h_pc_fully_reserved,
6888                                         h_pc_fully_retired,
6889                                         h_eofy_reserve,
6890                                         h_deprn_reserve, h_ytd_deprn,
6891                                         h_bonus_deprn_reserve, h_bonus_ytd_deprn, h_eop_fiscal_year;
6892    if ALL_MEMBER_FOR_ADJ_MODE_MRC%NOTFOUND then
6893 
6894      open ALL_MEMBER_FOR_ADDITION_MRC(h_member_asset_id);
6895      fetch ALL_MEMBER_FOR_ADDITION_MRC into h_cost, h_adjusted_cost, h_recoverable_cost,
6896                                         h_salvage_value, h_adjusted_recoverable_cost,
6897                                         h_pc_fully_reserved,
6898                                         h_pc_fully_retired,
6899                                         h_eofy_reserve,
6900                                         h_deprn_reserve, h_ytd_deprn,
6901                                         h_bonus_deprn_reserve, h_bonus_ytd_deprn, h_eop_fiscal_year;
6902      if ALL_MEMBER_FOR_ADDITION_MRC%NOTFOUND then
6903        if (p_log_level_rec.statement_level) then
6904          fa_debug_pkg.add(l_calling_fn, 'No rows in FA_BOOKS(Reporting Book) of member asset', h_member_asset_id);
6905        end if;
6906        i := i + 1;
6907        p_track_member_table(i).group_asset_id := h_group_asset_id;
6908        p_track_member_table(i).member_asset_id := h_member_asset_id;
6909        p_track_member_table(i).set_of_books_id := p_set_of_books_id;
6910        p_track_member_table(i).period_counter := h_period_counter;
6911        p_track_member_table(i).fiscal_year := h_fiscal_year;
6912        p_track_member_table(i).cost := 0;
6913        p_track_member_table(i).salvage_value := 0;
6914        p_track_member_table(i).adjusted_cost := 0;
6915        p_track_member_table(i).recoverable_cost := 0;
6916        p_track_member_table(i).adjusted_recoverable_cost := 0;
6917        p_track_member_table(i).deprn_reserve := nvl(h_deprn_reserve,0);
6918        p_track_member_table(i).ytd_deprn := nvl(h_ytd_deprn,0);
6919        p_track_member_table(i).bonus_deprn_reserve := 0;
6920        p_track_member_table(i).bonus_ytd_deprn := 0;
6921        p_track_member_table(i).eofy_reserve := nvl(h_deprn_reserve,0) - nvl(h_ytd_deprn,0);
6922        p_track_member_table(i).eofy_recoverable_cost := 0;
6923        p_track_member_table(i).eop_recoverable_cost := 0;
6924        p_track_member_table(i).eofy_salvage_value := 0;
6925        p_track_member_table(i).eop_salvage_value := 0;
6926 
6927        /* Populate index table */
6928        put_track_index(h_period_counter, h_member_asset_id,h_group_asset_id,p_set_of_books_id,i, p_log_level_rec);
6929 
6930        if (p_log_level_rec.statement_level) then
6931          fa_debug_pkg.add(l_calling_fn, '++ Stored values indicator', i, p_log_level_rec => p_log_level_rec);
6932          if not display_debug_message2(i => i, p_calling_fn=> l_calling_fn,
6933 p_log_level_rec=> p_log_level_rec) then
6934            fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
6935          end if;
6936        end if;
6937      end if;
6938      close ALL_MEMBER_FOR_ADDITION_MRC;
6939 
6940    elsif ((nvl(p_allocate_to_fully_ret_flag,'N') = 'N' and nvl(p_allocate_to_fully_rsv_flag,'N') = 'N' and
6941         nvl(h_pc_fully_retired,h_period_counter+1) > h_period_counter and
6942         nvl(h_pc_fully_reserved,h_period_counter+1) > h_period_counter)
6943                or
6944        (nvl(p_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(p_allocate_to_fully_rsv_flag,'N') = 'N' and
6945         nvl(h_pc_fully_reserved,h_period_counter+1) > h_period_counter)
6946                or
6947        (nvl(p_allocate_to_fully_ret_flag,'N') = 'N' and nvl(p_allocate_to_fully_rsv_flag,'N') = 'Y' and
6948         nvl(h_pc_fully_retired,h_period_counter+1) > h_period_counter)
6949                Or
6950        (nvl(p_allocate_to_fully_ret_flag,'N') = 'Y' and nvl(p_allocate_to_fully_rsv_flag,'N') = 'Y'))
6951 
6952       then
6953        if (p_log_level_rec.statement_level) then
6954          fa_debug_pkg.add('fa_track_member_pvt', '++ In case when member asset is queried ++ ', i, p_log_level_rec => p_log_level_rec);
6955        end if;
6956        if h_eop_fiscal_year = h_fiscal_year then
6957          h_eofy_reserve := nvl(h_eofy_reserve,0) + nvl(h_eofy_reserve_adjustment,0) + nvl(h_adj_reserve,0);
6958        end if;
6959 
6960     -- Try to query eofy_reserve from memory
6961        if (nvl(h_adj_asset_id,-99) <> h_member_asset_id and
6962           nvl(h_adj_trans_type,'NULL') <> 'ADDITION' )then
6963 
6964         For j in 1 .. p_track_member_eofy_table.COUNT loop
6965          if p_track_member_eofy_table(j).group_asset_id = h_group_asset_id and
6966             p_track_member_eofy_table(j).member_asset_id = h_member_asset_id and
6967             nvl(p_track_member_eofy_table(j).set_of_books_id, -99) = nvl(p_set_of_books_id, -99) then
6968 --            p_track_member_eofy_table(j).fiscal_year = h_fiscal_year then
6969            if (p_log_level_rec.statement_level) then
6970              fa_debug_pkg.add(l_calling_fn, 'p_track_member_eofy_table('||j||').cost:salvage:rec_cost:adj_cost:eofy_reserve',
6971                                              p_track_member_eofy_table(j).cost||':'||p_track_member_eofy_table(j).salvage_value||':'||
6972                                              p_track_member_eofy_table(j).recoverable_cost||':'||p_track_member_eofy_table(j).adjusted_cost||':'||
6973                                              p_track_member_eofy_table(j).eofy_reserve);
6974            end if;
6975            h_cost := p_track_member_eofy_table(j).cost;
6976            h_salvage_value := p_track_member_eofy_table(j).salvage_value;
6977            h_recoverable_cost := p_track_member_eofy_table(j).recoverable_cost;
6978            h_adjusted_cost := p_track_member_eofy_table(j).adjusted_cost;
6979            h_eofy_reserve := p_track_member_eofy_table(j).eofy_reserve;
6980            exit;
6981          end if;
6982         END LOOP;
6983        end if;
6984 
6985        i := i + 1;
6986 
6987        open MEMBER_START_PERIOD_MRC;
6988        fetch MEMBER_START_PERIOD_MRC into h_eofy_rec_cost,h_eofy_salvage_value;
6989        close MEMBER_START_PERIOD_MRC;
6990 
6991        -- Set p_track_member_type
6992        p_track_member_table(i).group_asset_id := h_group_asset_id;
6993        p_track_member_table(i).member_asset_id := pop_mem.asset_id;
6994        p_track_member_table(i).set_of_books_id := p_set_of_books_id;
6995        p_track_member_table(i).period_counter := h_period_counter;
6996        p_track_member_table(i).fiscal_year := h_fiscal_year;
6997        p_track_member_table(i).cost := h_cost;
6998        p_track_member_table(i).salvage_value := h_salvage_value;
6999        p_track_member_table(i).adjusted_cost := h_adjusted_cost;
7000        p_track_member_table(i).recoverable_cost := h_recoverable_cost;
7001        p_track_member_table(i).adjusted_recoverable_cost := h_adjusted_recoverable_cost;
7002        p_track_member_table(i).deprn_reserve := h_deprn_reserve;
7003        p_track_member_table(i).ytd_deprn := h_ytd_deprn;
7004        p_track_member_table(i).bonus_deprn_reserve := h_bonus_deprn_reserve;
7005        p_track_member_table(i).bonus_ytd_deprn := h_bonus_ytd_deprn;
7006        p_track_member_table(i).eofy_reserve := h_eofy_reserve; -- + h_eofy_reserve_adjustment;
7007        p_track_member_table(i).eofy_recoverable_cost := h_eofy_rec_cost;
7008        p_track_member_table(i).eop_recoverable_cost := h_recoverable_cost;
7009        p_track_member_table(i).eofy_salvage_value := h_eofy_salvage_value;
7010        p_track_member_table(i).eop_salvage_value := h_salvage_value;
7011 
7012        /* Populate index table */
7013        put_track_index(h_period_counter,pop_mem.asset_id,h_group_asset_id,p_set_of_books_id,i,p_log_level_rec);
7014 
7015 
7016        if nvl(h_pc_fully_reserved,h_period_counter+1) > h_period_counter then
7017          p_track_member_table(i).fully_reserved_flag := 'N';
7018        else
7019          p_track_member_table(i).fully_reserved_flag := 'Y';
7020        end if;
7021        if nvl(h_pc_fully_retired,h_period_counter+1) > h_period_counter then
7022          p_track_member_table(i).fully_retired_flag := 'N';
7023        else
7024          p_track_member_table(i).fully_retired_flag := 'Y';
7025        end if;
7026 
7027      end if; -- This is an asset to be processed
7028      close ALL_MEMBER_FOR_ADJ_MODE_MRC;
7029      if (p_log_level_rec.statement_level) then
7030          fa_debug_pkg.add(l_calling_fn, '+++ Stored values (For MRC book) indicator ', i);
7031          if i > 0 then
7032            if not display_debug_message2(i => i, p_calling_fn => l_calling_fn, p_log_level_rec=> p_log_level_rec) then
7033              fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
7034            end if;
7035          end if;
7036      end if;
7037    <<skip_process>>
7038      null;
7039 
7040   end loop;
7041 
7042 end if; -- Primary Book or Reporting Book?
7043 
7044 return(true);
7045 
7046 exception
7047   when populate_previous_rows_err then
7048     fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
7049     return(false);
7050 
7051   when others then
7052     fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
7053     return(false);
7054 
7055 end populate_previous_rows;
7056 
7057 --+=====================================================================
7058 -- Function: get_member_at_start
7059 --
7060 --  This function will be called from adjustment engine
7061 --  to poulate the member assets at the time of running faxcde
7062 --  Using transaction_date_entered passed from engine,
7063 --  member assets are defined.
7064 --  And populate the necessary info into FA_TRACK_MEMBER table.
7065 --
7066 --+=====================================================================
7067 
7068 FUNCTION get_member_at_start(p_period_rec                 in FA_API_TYPES.period_rec_type,
7069                              p_trans_rec                  in FA_API_TYPES.trans_rec_type,
7070                              p_asset_hdr_rec              in FA_API_TYPES.asset_hdr_rec_type,
7071                              p_asset_fin_rec              in FA_API_TYPES.asset_fin_rec_type,
7072                              p_dpr_in                     in FA_STD_TYPES.dpr_struct,
7073                              p_mrc_sob_type_code          in varchar2 default 'N', p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
7074   return boolean is
7075 
7076 --* Host related variables
7077 h_book_type_code        varchar2(30);
7078 h_group_asset_id        number;
7079 h_set_of_books_id       number;
7080 
7081 h_period_counter        number;
7082 h_fiscal_year           number;
7083 h_period_num            number;
7084 
7085 h_fiscal_year_name      varchar2(30);
7086 h_calendar_type         varchar2(15);
7087 
7088 h_member_asset_id       number;
7089 i                       number;
7090 
7091 h_deprn_method_code     varchar2(15);
7092 h_life_in_months        number;
7093 h_apply_reduction_flag  varchar2(1);
7094 h_deprn_source_code     varchar2(30);
7095 h_ytd_deprn             number;
7096 h_deprn_reserve         number;
7097 h_group_deprn_basis     varchar2(4);
7098 h_eofy_flag             varchar2(1);
7099 h_period_per_fiscal_year number;
7100 h_last_trans_id         number;
7101 
7102 h_trans_exists_flag     boolean := FALSE;
7103 h_transaction_header_id number;
7104 h_delta_cost            number;
7105 h_delta_recoverable_cost number;
7106 h_new_limit_type        varchar2(15);
7107 h_old_limit_type        varchar2(15);
7108 h_new_deprn_limit       number;
7109 h_new_deprn_limit_amount number;
7110 h_depreciate_flag       varchar2(3);
7111 
7112 h_old_cost              number;
7113 h_old_salvage_value     number;
7114 h_old_recoverable_cost  number;
7115 h_old_adjusted_rec_cost number;
7116 
7117 h_bonus_deprn_reserve   number;
7118 h_bonus_ytd_deprn       number;
7119 
7120 l_new_ind               number;
7121 h_temp_limit_amount     number;
7122 
7123 h_adj_cost              number;
7124 h_adj_rec_cost          number;
7125 h_adj_salvage_value     number;
7126 
7127 h_new_cost              number;
7128 h_new_recoverable_cost  number;
7129 h_new_salvage_value     number;
7130 h_new_adjusted_rec_cost number;
7131 h_eofy_reserve          number;
7132 
7133 --* Recalculation Start Period
7134 h_start_fiscal_year     number;
7135 h_start_period_num      number;
7136 h_start_period_counter  number;
7137 
7138 h_fully_reserved_flag   varchar2(1);
7139 h_fully_retired_flag    varchar2(1);
7140 
7141 --* Reclass Check variable
7142 h_old_group_asset_id    number;
7143 h_new_group_asset_id    number;
7144 h_mem_trans_thid        number;
7145 
7146 l_calling_fn            varchar2(45) := 'fa_track_member_pvt.get_member_at_start';
7147 get_member_at_start_err           exception;
7148 
7149 --* Structure to call Deprn Basis Rule
7150 fa_rule_in      fa_std_types.fa_deprn_rule_in_struct;
7151 fa_rule_out     fa_std_types.fa_deprn_rule_out_struct;
7152 
7153 --* Get all transaction headers exists until the specified period
7154 cursor ALL_TRANS_IN_PERIOD(p_fiscal_year  number, p_period_num number,p_member_asset_id number) is
7155   select TH.TRANSACTION_HEADER_ID
7156     from FA_TRANSACTION_HEADERS TH,
7157          FA_FISCAL_YEAR FY,
7158          FA_CALENDAR_PERIODS DP
7159    where DP.calendar_type = h_calendar_type
7160      and DP.period_num = p_period_num
7161      and FY.fiscal_year_name = h_fiscal_year_name
7162      and FY.fiscal_year = p_fiscal_year
7163      and TH.asset_id = p_member_asset_id
7164      and TH.transaction_type_code not in ('TRANSFER OUT', 'TRANSFER IN', 'TRANSFER', 'TRANSFER IN/VOID',
7165                                           'RECLASS', 'UNIT ADJUSTMENT','REINSTATEMENT')
7166      and nvl(th.amortization_start_date,TH.transaction_date_entered) <= DP.end_date
7167      and DP.start_date >= FY.start_date
7168      and DP.end_date <= FY.end_date
7169 order by nvl(th.amortization_start_date,TH.transaction_date_entered), TH.transaction_header_id asc;
7170 
7171 --* Get delta between the amounts before the transaction and after the transaction
7172 cursor GET_DELTA_FOR_MEMBER(p_member_asset_id number, p_transaction_header_id number) is
7173   select BK_IN.COST - nvl(BK_OUT.COST,0) delta_cost,
7174          BK_IN.RECOVERABLE_COST - nvl(BK_OUT.RECOVERABLE_COST,0) delta_rec_cost,
7175          BK_IN.DEPRN_LIMIT_TYPE new_limit_type,
7176          BK_OUT.DEPRN_LIMIT_TYPE old_limit_type,
7177          BK_IN.ALLOWED_DEPRN_LIMIT new_deprn_limit,
7178          BK_IN.ALLOWED_DEPRN_LIMIT_AMOUNT new_deprn_limit_amount,
7179          BK_IN.DEPRECIATE_FLAG depreciate_flag
7180     from FA_BOOKS BK_IN,
7181          FA_BOOKS BK_OUT
7182    where BK_IN.book_type_code = h_book_type_code
7183      and BK_IN.asset_id = h_member_asset_id
7184      and BK_IN.transaction_header_id_in = p_transaction_header_id
7185      and BK_OUT.book_type_code(+) = BK_IN.book_type_code
7186      and BK_OUT.asset_id(+) = BK_IN.asset_id
7187      and BK_OUT.transaction_header_id_out(+) = BK_IN.transaction_header_id_in;
7188 
7189 cursor GET_DELTA_FOR_MEMBER_MRC(p_member_asset_id number, p_transaction_header_id number) is
7190   select BK_IN.COST - nvl(BK_OUT.COST,0) delta_cost,
7191          BK_IN.RECOVERABLE_COST - nvl(BK_OUT.RECOVERABLE_COST,0) delta_rec_cost,
7192          BK_IN.DEPRN_LIMIT_TYPE new_limit_type,
7193          BK_OUT.DEPRN_LIMIT_TYPE old_limit_type,
7194          BK_IN.ALLOWED_DEPRN_LIMIT new_deprn_limit,
7195          BK_IN.ALLOWED_DEPRN_LIMIT_AMOUNT old_deprn_limit,
7196          BK_IN.DEPRECIATE_FLAG depreciate_flag
7197     from FA_MC_BOOKS BK_IN,
7198          FA_MC_BOOKS BK_OUT
7199    where BK_IN.book_type_code = h_book_type_code
7200      and BK_IN.asset_id = h_member_asset_id
7201      and BK_IN.transaction_header_id_in = p_transaction_header_id
7202      and BK_IN.set_of_books_id = h_set_of_books_id
7203      and BK_OUT.book_type_code(+) = BK_IN.book_type_code
7204      and BK_OUT.asset_id(+) = BK_IN.asset_id
7205      and BK_OUT.transaction_header_id_out(+) = BK_IN.transaction_header_id_in
7206      and BK_OUT.set_of_books_id = h_set_of_books_id;
7207 
7208 -- cursor to get all members at the specified period
7209 cursor ALL_MEMBERS_AT_AMORT(p_fiscal_year number,p_period_num number) is
7210 select distinct bk.asset_id member_asset_id, ad.asset_number
7211   from fa_books bk,
7212        fa_additions_b ad
7213  where bk.book_type_code = h_book_type_code
7214    and bk.group_asset_id = h_group_asset_id
7215    and bk.depreciate_flag = 'YES'
7216    and exists
7217          (select TH1.TRANSACTION_HEADER_ID
7218             from FA_TRANSACTION_HEADERS TH1,
7219                  FA_CALENDAR_PERIODS DP1,
7220                  FA_FISCAL_YEAR FY
7221            where TH1.book_type_code = BK.book_type_code
7222              and DP1.calendar_type = h_calendar_type
7223              and DP1.period_num = p_period_num
7224              and FY.fiscal_year_name = h_fiscal_year_name
7225              and FY.fiscal_year = p_fiscal_year
7226              and nvl(TH1.amortization_start_date,TH1.transaction_date_entered) <= DP1.end_date
7227              and DP1.end_date <= FY.end_date
7228              and BK.TRANSACTION_HEADER_ID_IN = TH1.TRANSACTION_HEADER_ID)
7229    and ad.asset_id = bk.asset_id
7230    and ad.asset_type = 'CAPITALIZED'
7231    order by ad.asset_number asc;
7232 
7233 cursor ALL_MEMBERS_AT_AMORT_MRC(p_fiscal_year number,p_period_num number) is
7234 select distinct bk.asset_id member_asset_id, ad.asset_number
7235   from fa_mc_books bk,
7236        fa_additions_b ad
7237  where bk.book_type_code = h_book_type_code
7238    and bk.group_asset_id = h_group_asset_id
7239    and bk.depreciate_flag = 'YES'
7240    and bk.set_of_books_id = h_set_of_books_id
7241    and exists
7242          (select TH1.TRANSACTION_HEADER_ID
7243             from FA_TRANSACTION_HEADERS TH1,
7244                  FA_CALENDAR_PERIODS DP1,
7245                  FA_FISCAL_YEAR FY
7246            where TH1.book_type_code = BK.book_type_code
7247              and DP1.calendar_type = h_calendar_type
7248              and DP1.period_num = p_period_num
7249              and FY.fiscal_year_name = h_fiscal_year_name
7250              and FY.fiscal_year = p_fiscal_year
7251              and nvl(TH1.amortization_start_date,TH1.transaction_date_entered) <= DP1.end_date
7252              and DP1.end_date <= FY.end_date
7253              and BK.TRANSACTION_HEADER_ID_IN = TH1.TRANSACTION_HEADER_ID)
7254    and ad.asset_id = bk.asset_id
7255    and ad.asset_type = 'CAPITALIZED'
7256    order by ad.asset_number asc;
7257 
7258 cursor RECLASS_TRANS_CHECK(p_member_asset_id number,p_thid number) is
7259   select BK_IN.group_asset_id
7260     from fa_books BK_IN
7261    where BK_IN.book_type_code = h_book_type_code
7262      and BK_IN.asset_id = p_member_asset_id
7263      and BK_IN.transaction_header_id_in = p_thid;
7264 
7265 cursor RECLASS_TRANS_CHECK_MRC(p_member_asset_id number,p_thid number) is
7266   select BK_IN.group_asset_id
7267     from fa_mc_books BK_IN
7268    where BK_IN.book_type_code = h_book_type_code
7269      and BK_IN.asset_id = p_member_asset_id
7270      and BK_IN.transaction_header_id_in = p_thid
7271      and BK_IN.set_of_books_id = h_set_of_books_id;
7272 
7273 cursor GET_RESERVE_AT_ADDITION(p_asset_id number, p_period_counter number) is
7274   select deprn_source_code,
7275          ytd_deprn,
7276          deprn_reserve
7277     from fa_deprn_summary
7278    where book_type_code = h_book_type_code
7279      and asset_id = p_asset_id
7280      and period_counter = p_period_counter;
7281 
7282 cursor GET_RESERVE_AT_ADDITION_MRC(p_asset_id number, p_period_counter number) is
7283   select deprn_source_code,
7284          ytd_deprn,
7285          deprn_reserve
7286     from fa_mc_deprn_summary
7287    where book_type_code = h_book_type_code
7288      and asset_id = p_asset_id
7289      and period_counter = p_period_counter
7290      and set_of_books_id = h_set_of_books_id;
7291 
7292 begin
7293 
7294 if (p_log_level_rec.statement_level) then
7295    fa_debug_pkg.add(l_calling_fn, '+++ Get Member at Start ++ started', 'Parameters', p_log_level_rec => p_log_level_rec);
7296    fa_debug_pkg.add(l_calling_fn, 'book_type_code:group_asset_id:mem_thid',
7297                            p_asset_hdr_rec.book_type_code||':'||p_asset_hdr_rec.asset_id||':'||p_trans_rec.member_transaction_header_id, p_log_level_rec => p_log_level_rec);
7298 end if;
7299 
7300 p_track_member_table.delete;
7301 p_track_mem_index_table.delete;
7302 
7303 h_book_type_code := p_asset_hdr_rec.book_type_code;
7304 h_group_asset_id := p_asset_hdr_rec.asset_id;
7305 h_start_fiscal_year := p_dpr_in.y_begin;
7306 h_start_period_num := p_dpr_in.p_cl_begin;
7307 
7308 h_period_counter := p_period_rec.period_counter;
7309 h_fiscal_year := p_period_rec.fiscal_year;
7310 h_period_num  := p_period_rec.period_num;
7311 
7312 h_deprn_method_code := p_asset_fin_rec.deprn_method_code;
7313 h_life_in_months := p_asset_fin_rec.life_in_months;
7314 
7315 h_mem_trans_thid := nvl(p_trans_rec.member_transaction_header_id,-99);
7316 --* Prepare to call Deprn Basis Rule - 1
7317 h_period_per_fiscal_year := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
7318 h_start_period_counter := h_start_fiscal_year*h_period_per_fiscal_year+h_start_period_num;
7319 
7320 h_set_of_books_id := p_asset_hdr_rec.set_of_books_id;
7321 
7322 select fiscal_year_name, deprn_calendar
7323   into h_fiscal_year_name,h_calendar_type
7324   from fa_book_controls
7325  where book_type_code = h_book_type_code;
7326 
7327 if (p_log_level_rec.statement_level) then
7328    fa_debug_pkg.add(l_calling_fn, 'h_fiscal_year_name:h_calendar_type', h_fiscal_year_name||':'||h_calendar_type, p_log_level_rec => p_log_level_rec);
7329 end if;
7330 
7331 
7332 --* Need to call deprn basis rule to get correct adjusted cost at the loop start period.
7333 -- Followings are preparation to call faxcdb
7334 if (p_log_level_rec.statement_level) then
7335   fa_debug_pkg.add(l_calling_fn, '+++ Preparation to call deprn basis rule function +++', '+++', p_log_level_rec => p_log_level_rec);
7336   fa_debug_pkg.add(l_calling_fn, 'h_period_counter:h_fiscal_year:h_deprn_method_code:h_life_in_months',
7337                                   h_period_counter||':'||h_fiscal_year||':'||h_deprn_method_code||':'||h_life_in_months, p_log_level_rec => p_log_level_rec);
7338   fa_debug_pkg.add(l_calling_fn, 'Method Cache is called.', '***');
7339 end if;
7340 
7341 if not fa_cache_pkg.fazccmt(X_method => h_deprn_method_code,
7342                             X_life => h_life_in_months, p_log_level_rec => p_log_level_rec) then
7343   if (p_log_level_rec.statement_level) then
7344      fa_debug_pkg.add(l_calling_fn, '++ fa_cache_pkg.fazccmt is errored out ++', '+++', p_log_level_rec => p_log_level_rec);
7345   end if;
7346   raise get_member_at_start_err;
7347 end if;
7348 
7349 -- Populate Method related information from cache
7350 h_group_deprn_basis := fa_cache_pkg.fazccmt_record.deprn_basis_rule; -- COST or NBV
7351 
7352 --* If this proceesing period is last period of the fiscal year set h_eofy_flag = 'Y'
7353 --* call depreciable basis rule function to update adjusted cost for the next year
7354 if h_start_period_num = h_period_per_fiscal_year then
7355    h_eofy_flag := 'Y';
7356 else
7357    h_eofy_flag := 'N';
7358 end if;
7359 
7360 --* Set group level parameters
7361 fa_rule_in.event_type := 'AMORT_ADJ';
7362 fa_rule_in.book_type_code := h_book_type_code;
7363 fa_rule_in.fiscal_year := h_start_fiscal_year;
7364 fa_rule_in.period_num := h_start_period_num;
7365 fa_rule_in.method_code := h_deprn_method_code;
7366 fa_rule_in.life_in_months := h_life_in_months;
7367 fa_rule_in.method_type := fa_cache_pkg.fazccmt_record.rate_source_rule;
7368 fa_rule_in.calc_basis := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
7369 fa_rule_in.mrc_sob_type_code := p_mrc_sob_type_code;
7370 fa_rule_in.set_of_books_id := h_set_of_books_id;
7371 fa_rule_in.group_asset_id := h_group_asset_id;
7372 fa_rule_in.period_counter := h_start_period_counter;
7373 
7374 --* Group Level information (50% application) if the basis rule assigned to this method enables reduction rate
7375 if fa_cache_pkg.fazcdrd_record.rule_name in ('YEAR END BALANCE WITH POSITIVE REDUCTION',
7376                                              'YEAR END BALANCE WITH HALF YEAR RULE') then
7377 
7378   if not check_reduction_application(p_rule_name => fa_cache_pkg.fazcdrd_record.rule_name,
7379                                      p_group_asset_id => h_group_asset_id,
7380                                      p_book_type_code => h_book_type_code,
7381                                      p_period_counter => h_start_period_counter,
7382                                      p_group_deprn_basis => h_group_deprn_basis,
7383                                      p_reduction_rate => p_asset_fin_rec.reduction_rate,
7384                                      p_group_eofy_rec_cost => 0, -- Since this is called for first period of life
7385                                      p_group_eofy_salvage_value => 0,
7386                                      p_group_eofy_reserve => 0,
7387                                      p_mrc_sob_type_code => p_mrc_sob_type_code,
7388                                      p_set_of_books_id => h_set_of_books_id,
7389                                      x_apply_reduction_flag => h_apply_reduction_flag,
7390                                      p_log_level_rec => p_log_level_rec) then
7391      raise get_member_at_start_err;
7392   end if;
7393 end if;
7394 
7395 -- Query member assets from FA_BOOKS at the time of transction_date_entered
7396 
7397 i := 0;
7398 if p_mrc_sob_type_code <> 'R' then
7399 
7400   -- Loop for all member assets existed in the amort period populated above
7401   For get_member in ALL_MEMBERS_AT_AMORT(h_fiscal_year,h_period_num) loop
7402 
7403     i := i + 1; -- Count up for subscript
7404     h_member_asset_id := get_member.member_asset_id;
7405 
7406     if (p_log_level_rec.statement_level) then
7407       fa_debug_pkg.add(l_calling_fn, '+++ In Loop (1) : member asset id', h_member_asset_id);
7408       fa_debug_pkg.add(l_calling_fn, 'h_mem_trans_thid', h_mem_trans_thid, p_log_level_rec => p_log_level_rec);
7409     end if;
7410 
7411     --* Check if this transaction is reclass and this member asset is now reclassed or not
7412     if h_mem_trans_thid <> -99 then
7413 
7414       open RECLASS_TRANS_CHECK(h_member_asset_id, h_mem_trans_thid);
7415       fetch RECLASS_TRANS_CHECK into h_new_group_asset_id;
7416       if RECLASS_TRANS_CHECK%NOTFOUND then
7417         null;
7418       elsif h_new_group_asset_id is null then
7419         -- Now this asset becomes single asset. Don't need to include the calculation
7420         close RECLASS_TRANS_CHECK;
7421         if (p_log_level_rec.statement_level) then
7422           fa_debug_pkg.add(l_calling_fn, 'This member asset doesnt belong to this group asset','+++', p_log_level_rec => p_log_level_rec);
7423         end if;
7424         goto skip_processing;
7425       elsif h_new_group_asset_id <> h_group_asset_id then -- This is a case of reclass and this asset is now going to other group
7426         close RECLASS_TRANS_CHECK;
7427         if (p_log_level_rec.statement_level) then
7428           fa_debug_pkg.add(l_calling_fn, 'This member asset doesnt belong to this group asset','+++', p_log_level_rec => p_log_level_rec);
7429         end if;
7430         goto skip_processing;
7431       end if;
7432       close RECLASS_TRANS_CHECK;
7433     end if;
7434 
7435     --* Process get delta of cost, rec cost, salvage value etc...
7436     --* Query transaction header id of this member assetin this period
7437     h_trans_exists_flag := FALSE;
7438     h_transaction_header_id := to_number(NULL);
7439     h_delta_cost := 0;
7440     h_delta_recoverable_cost := 0;
7441     h_new_adjusted_rec_cost := to_number(NULL);
7442 
7443     h_adj_cost := 0;
7444     h_adj_rec_cost := 0;
7445     h_adj_salvage_value := 0;
7446 
7447     For ALL_TRANS IN ALL_TRANS_IN_PERIOD(h_fiscal_year,h_period_num, h_member_asset_id) Loop
7448        h_trans_exists_flag := TRUE;
7449        h_transaction_header_id := ALL_TRANS.transaction_header_id;
7450 
7451        --* query delta for this transaction
7452        open GET_DELTA_FOR_MEMBER(h_member_asset_id, h_transaction_header_id);
7453        fetch GET_DELTA_FOR_MEMBER into h_delta_cost, h_delta_recoverable_cost, h_new_limit_type, h_old_limit_type,
7454                                        h_new_deprn_limit, h_new_deprn_limit_amount, h_depreciate_flag;
7455        if GET_DELTA_FOR_MEMBER%NOTFOUND then
7456          h_trans_exists_flag := FALSE;
7457          h_transaction_header_id := to_number(NULL);
7458          h_delta_cost := 0;
7459          h_delta_recoverable_cost := 0;
7460          h_new_adjusted_rec_cost := to_number(NULL);
7461        end if;
7462        close GET_DELTA_FOR_MEMBER;
7463 
7464        h_adj_cost := h_adj_cost + h_delta_cost;
7465        h_adj_rec_cost := h_adj_rec_cost + h_delta_recoverable_cost;
7466        h_adj_salvage_value := h_adj_cost - h_adj_rec_cost;
7467 
7468        if (p_log_level_rec.statement_level) then
7469          fa_debug_pkg.add(l_calling_fn, '++++ LOOP FOR GETTING DELTA *** THID', h_transaction_header_id);
7470          fa_debug_pkg.add(l_calling_fn, 'h_delta_cost:h_delta_recoverable_cost', h_delta_cost||':'||h_delta_recoverable_cost, p_log_level_rec => p_log_level_rec);
7471          fa_debug_pkg.add(l_calling_fn, 'h_adj_cost:h_adj_rec_cost:h_adj_salvage_value', h_adj_cost||':'||h_adj_salvage_value, p_log_level_rec => p_log_level_rec);
7472        end if;
7473     End loop;
7474 
7475     if (p_log_level_rec.statement_level) then
7476        fa_debug_pkg.add(l_calling_fn, '++++ AFTER LOOP FOR ALL_TRANS_IN_PERIOD ****', '****');
7477        fa_debug_pkg.add(l_calling_fn, 'h_new_limit_type:h_new_deprn_limit:h_new_deprn_limit_amount',
7478                                        h_new_limit_type||':'||h_new_deprn_limit||':'||h_new_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
7479     end if;
7480 
7481      --* Set old amounts as zero since this process will be made for just start period
7482      h_old_cost := 0;
7483      h_old_salvage_value := 0;
7484      h_old_recoverable_cost := 0;
7485      h_old_adjusted_rec_cost := 0;
7486 
7487      h_bonus_deprn_reserve := 0;
7488      h_bonus_ytd_deprn := 0;
7489      -- Then enter this asset to extended memory table at this moment
7490      l_new_ind := nvl(p_track_member_table.COUNT,0) + 1;
7491      --* This is a case when this asset is added in this period.
7492      open GET_RESERVE_AT_ADDITION(h_member_asset_id, h_start_period_counter - 1);
7493      fetch GET_RESERVE_AT_ADDITION into h_deprn_source_code, h_ytd_deprn, h_deprn_reserve;
7494 
7495      if GET_RESERVE_AT_ADDITION%NOTFOUND then
7496 
7497        -- Set zero initial reserve
7498        if (p_log_level_rec.statement_level) then
7499           fa_debug_pkg.add(l_calling_fn, 'Member asset which cannot find DEPRN SUMMARY table',
7500                            h_member_asset_id, p_log_level_rec => p_log_level_rec);
7501        end if;
7502 
7503        h_ytd_deprn := 0;
7504        h_deprn_reserve := 0;
7505 
7506      elsif h_deprn_source_code <> 'BOOK' then
7507        -- Set zero initial reserve
7508 
7509        if (p_log_level_rec.statement_level) then
7510           fa_debug_pkg.add(l_calling_fn, 'This Member asset record', h_deprn_source_code, p_log_level_rec => p_log_level_rec);
7511        end if;
7512 
7513        h_ytd_deprn := 0;
7514        h_deprn_reserve := 0;
7515 
7516      end if;
7517      close GET_RESERVE_AT_ADDITION;
7518 
7519      if (p_log_level_rec.statement_level) then
7520        fa_debug_pkg.add(l_calling_fn, 'l_new_ind', l_new_ind, p_log_level_rec => p_log_level_rec);
7521      end if;
7522      p_track_member_table(l_new_ind).group_asset_id := h_group_asset_id;
7523      p_track_member_table(l_new_ind).member_asset_id := h_member_asset_id;
7524      p_track_member_table(l_new_ind).set_of_books_id := h_set_of_books_id;
7525      p_track_member_table(l_new_ind).period_counter := h_start_period_counter;
7526      p_track_member_table(l_new_ind).fiscal_year := h_start_fiscal_year;
7527      p_track_member_table(l_new_ind).cost := h_old_cost;
7528      p_track_member_table(l_new_ind).salvage_value := h_old_salvage_value;
7529      p_track_member_table(l_new_ind).adjusted_cost := h_old_recoverable_cost;
7530      p_track_member_table(l_new_ind).recoverable_cost := h_old_recoverable_cost;
7531      p_track_member_table(l_new_ind).adjusted_recoverable_cost := h_old_adjusted_rec_cost;
7532      p_track_member_table(l_new_ind).deprn_reserve := h_deprn_reserve;
7533      p_track_member_table(l_new_ind).ytd_deprn := h_ytd_deprn;
7534      p_track_member_table(l_new_ind).bonus_deprn_reserve := 0;
7535      p_track_member_table(l_new_ind).bonus_ytd_deprn := 0;
7536      p_track_member_table(l_new_ind).eofy_reserve := h_deprn_reserve - h_ytd_deprn;
7537      p_track_member_table(l_new_ind).eofy_recoverable_cost := 0;
7538      p_track_member_table(l_new_ind).eop_recoverable_cost := 0;
7539      p_track_member_table(l_new_ind).eofy_salvage_value := 0;
7540      p_track_member_table(l_new_ind).eop_salvage_value := 0;
7541      p_track_member_table(l_new_ind).set_of_books_id := nvl(h_set_of_books_id, -99);
7542      h_eofy_reserve := h_deprn_reserve - h_ytd_deprn;
7543 
7544      /* Populate index table */
7545      put_track_index(h_start_period_counter,h_member_asset_id,h_group_asset_id,h_set_of_books_id,l_new_ind,p_log_level_rec);
7546 
7547    --* Member Asset level information
7548      --* adjust by the delta
7549      h_new_cost := h_old_cost + h_adj_cost;
7550      h_new_recoverable_cost := h_old_recoverable_cost + h_adj_rec_cost;
7551      h_new_salvage_value := h_old_salvage_value + h_adj_salvage_value;
7552 
7553      if nvl(h_new_limit_type,'NONE') = 'PCT' then
7554          h_temp_limit_amount := h_new_cost*(1 - h_new_deprn_limit);
7555          fa_round_pkg.fa_floor(h_temp_limit_amount,h_book_type_code, p_log_level_rec => p_log_level_rec);
7556          h_new_adjusted_rec_cost := h_new_cost - h_temp_limit_amount;
7557      elsif nvl(h_new_limit_type,'NONE') = 'NONE' then
7558          h_new_adjusted_rec_cost := h_new_recoverable_cost; -- In this case, it should be same as new recoverable cost
7559      else
7560          h_new_adjusted_rec_cost := h_new_deprn_limit_amount;
7561      end if;
7562 
7563      if (p_log_level_rec.statement_level) then
7564          fa_debug_pkg.add(l_calling_fn, 'h_new_cost:h_new_rec_cost:h_new_salvage:h_new_adj_rec_cost',
7565                                          h_new_cost||':'||h_new_recoverable_cost||':'||h_new_salvage_value||':'||h_new_adjusted_rec_cost, p_log_level_rec => p_log_level_rec);
7566      end if;
7567 
7568      -- Get Asset type
7569      select ASSET_TYPE
7570        into fa_rule_in.asset_type
7571        from fa_additions_b
7572       where asset_id = h_member_asset_id;
7573 
7574      --* Set fa_rule_in to call deprn basis rule function
7575      fa_rule_in.asset_id := h_member_asset_id;
7576      fa_rule_in.depreciate_flag := h_depreciate_flag;
7577      fa_rule_in.adjustment_amount := 0;
7578      fa_rule_in.cost := h_new_cost;
7579      fa_rule_in.salvage_value := h_new_salvage_value;
7580      fa_rule_in.recoverable_cost := h_new_recoverable_cost;
7581      fa_rule_in.adjusted_cost := h_new_recoverable_cost;
7582      fa_rule_in.current_total_rsv := h_deprn_reserve;
7583      fa_rule_in.current_rsv := h_deprn_reserve;
7584      fa_rule_in.current_total_ytd := h_ytd_deprn;
7585      fa_rule_in.current_ytd := h_ytd_deprn;
7586      fa_rule_in.old_adjusted_cost := h_new_recoverable_cost;
7587      fa_rule_in.eofy_reserve := nvl(h_deprn_reserve,0) - nvl(h_ytd_deprn,0);
7588 
7589      fa_rule_in.eofy_recoverable_cost := 0;
7590      fa_rule_in.eop_recoverable_cost := 0;
7591      fa_rule_in.eofy_salvage_value := 0;
7592      fa_rule_in.eop_salvage_value := 0;
7593      fa_rule_in.apply_reduction_flag := h_apply_reduction_flag;
7594 
7595      if (p_log_level_rec.statement_level) then
7596        if not display_debug_message(fa_rule_in => fa_rule_in,
7597                                     p_calling_fn => l_calling_fn,
7598                                     p_log_level_rec => p_log_level_rec) then
7599        fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
7600        end if;
7601      end if;
7602 
7603      -- Call Deprn Basis Rule for this transaction or period
7604      if (not fa_calc_deprn_basis1_pkg.faxcdb(rule_in => fa_rule_in,
7605                                              rule_out => fa_rule_out, p_log_level_rec => p_log_level_rec)) then
7606        if (p_log_level_rec.statement_level) then
7607          fa_debug_pkg.add(l_calling_fn, 'FAXCDB is errored out', '+++', p_log_level_rec => p_log_level_rec);
7608        end if;
7609        raise get_member_at_start_err;
7610      end if;
7611 
7612      --* Since the fully reserved asset is included in the depreciable basis to calculate RAF
7613      p_track_member_table(l_new_ind).fully_reserved_flag := NULL;
7614      p_track_member_table(l_new_ind).fully_retired_flag := NULL;
7615 
7616      if (p_log_level_rec.statement_level) then
7617        fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', fa_rule_in.asset_id, p_log_level_rec => p_log_level_rec);
7618        fa_debug_pkg.add(l_calling_fn, 'fa_rule_out.new_adjusted_cost', fa_rule_out.new_adjusted_cost, p_log_level_rec => p_log_level_rec);
7619      end if;
7620 
7621      --* Set calculated adjusted cost into p_track_member_table
7622      p_track_member_table(l_new_ind).cost := h_new_cost;
7623      p_track_member_table(l_new_ind).salvage_value := h_new_salvage_value;
7624      p_track_member_table(l_new_ind).recoverable_cost := h_new_recoverable_cost;
7625      p_track_member_table(l_new_ind).adjusted_cost := fa_rule_out.new_adjusted_cost;
7626      p_track_member_table(l_new_ind).adjusted_recoverable_cost := h_new_adjusted_rec_cost;
7627 
7628      if (p_log_level_rec.statement_level) then
7629        fa_debug_pkg.add(l_calling_fn, '++ In Loop (2) indicator', i);
7630        if not display_debug_message2(i => i, p_calling_fn => l_calling_fn,
7631 p_log_level_rec => p_log_level_rec) then
7632           fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
7633        end if;
7634      end if;
7635 
7636 <<skip_processing>>
7637      if (p_log_level_rec.statement_level) then
7638        fa_debug_pkg.add(l_calling_fn, '++ End of Loop ++', i, p_log_level_rec => p_log_level_rec);
7639      end if;
7640 
7641   end loop;
7642 
7643 else -- Reporting Book
7644   -- Loop for all member assets existed in the amort period populated above
7645   For get_member in ALL_MEMBERS_AT_AMORT_MRC(h_fiscal_year,h_period_num) loop
7646 
7647     i := i + 1; -- Count up for subscript
7648     h_member_asset_id := get_member.member_asset_id;
7649 
7650     if (p_log_level_rec.statement_level) then
7651       fa_debug_pkg.add(l_calling_fn, '+++ In Loop (1) : member asset id', h_member_asset_id);
7652     end if;
7653 
7654     --* Check if this transaction is reclass and this member asset is now reclassed or not
7655     if h_mem_trans_thid <> -99 then
7656       open RECLASS_TRANS_CHECK(h_member_asset_id, h_mem_trans_thid);
7657       fetch RECLASS_TRANS_CHECK into h_new_group_asset_id;
7658       if RECLASS_TRANS_CHECK%NOTFOUND then
7659         null;
7660       elsif h_new_group_asset_id is null then
7661         -- Now this asset becomes single asset. Don't need to include the calculation
7662         close RECLASS_TRANS_CHECK;
7663         if (p_log_level_rec.statement_level) then
7664           fa_debug_pkg.add(l_calling_fn, 'This member asset doesnt belong to this group asset','+++', p_log_level_rec => p_log_level_rec);
7665         end if;
7666         goto skip_processing;
7667       elsif h_new_group_asset_id <> h_group_asset_id then -- This is a case of reclass and this asset is now going to other group
7668         close RECLASS_TRANS_CHECK;
7669         if (p_log_level_rec.statement_level) then
7670           fa_debug_pkg.add(l_calling_fn, 'This member asset doesnt belong to this group asset','+++', p_log_level_rec => p_log_level_rec);
7671         end if;
7672         goto skip_processing;
7673       end if;
7674       close RECLASS_TRANS_CHECK;
7675     end if;
7676 
7677     --* Process get delta of cost, rec cost, salvage value etc...
7678     --* Query transaction header id of this member assetin this period
7679     h_trans_exists_flag := FALSE;
7680     h_transaction_header_id := to_number(NULL);
7681     h_delta_cost := 0;
7682     h_delta_recoverable_cost := 0;
7683     h_new_adjusted_rec_cost := to_number(NULL);
7684 
7685     h_adj_cost := 0;
7686     h_adj_rec_cost := 0;
7687     h_adj_salvage_value := 0;
7688 
7689     For ALL_TRANS IN ALL_TRANS_IN_PERIOD(h_fiscal_year,h_period_num, h_member_asset_id) Loop
7690        h_trans_exists_flag := TRUE;
7691        h_transaction_header_id := ALL_TRANS.transaction_header_id;
7692 
7693        --* query delta for this transaction
7694        open GET_DELTA_FOR_MEMBER_MRC(h_member_asset_id, h_transaction_header_id);
7695        fetch GET_DELTA_FOR_MEMBER_MRC into h_delta_cost, h_delta_recoverable_cost, h_new_limit_type, h_old_limit_type,
7696                                        h_new_deprn_limit, h_new_deprn_limit_amount, h_depreciate_flag;
7697        if GET_DELTA_FOR_MEMBER_MRC%NOTFOUND then
7698          h_trans_exists_flag := FALSE;
7699          h_transaction_header_id := to_number(NULL);
7700          h_delta_cost := 0;
7701          h_delta_recoverable_cost := 0;
7702          h_new_adjusted_rec_cost := to_number(NULL);
7703        end if;
7704        close GET_DELTA_FOR_MEMBER_MRC;
7705 
7706        h_adj_cost := h_adj_cost + h_delta_cost;
7707        h_adj_rec_cost := h_adj_rec_cost + h_delta_recoverable_cost;
7708        h_adj_salvage_value := h_adj_cost - h_adj_rec_cost;
7709 
7710        if (p_log_level_rec.statement_level) then
7711          fa_debug_pkg.add(l_calling_fn, '++++ LOOP FOR GET_DELTA_FOR_MEMBER_MRC *** THID', h_transaction_header_id);
7712          fa_debug_pkg.add(l_calling_fn, 'h_delta_cost:h_delta_rec_cost', h_delta_cost||':'||h_delta_recoverable_cost, p_log_level_rec => p_log_level_rec);
7713          fa_debug_pkg.add(l_calling_fn, 'h_adj_cost:h_adj_rec_cost:h_adj_salvage_value', h_adj_cost||':'||h_adj_rec_cost||':'||h_adj_salvage_value, p_log_level_rec => p_log_level_rec);
7714        end if;
7715     End loop;
7716 
7717      if (p_log_level_rec.statement_level) then
7718        fa_debug_pkg.add(l_calling_fn, '++++ AFTER LOOP FOR GETTING DELTA ****', '****');
7719        fa_debug_pkg.add(l_calling_fn, 'h_new_limit_type:h_new_deprn_limit:h_new_deprn_limit_amount',
7720                                        h_new_limit_type||':'||h_new_deprn_limit||':'||h_new_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
7721      end if;
7722 
7723      --* Set old amounts as zero since this process will be made for just start period
7724      h_old_cost := 0;
7725      h_old_salvage_value := 0;
7726      h_old_recoverable_cost := 0;
7727      h_old_adjusted_rec_cost := 0;
7728 
7729      h_bonus_deprn_reserve := 0;
7730      h_bonus_ytd_deprn := 0;
7731      -- Then enter this asset to extended memory table at this moment
7732      l_new_ind := nvl(p_track_member_table.COUNT,0) + 1;
7733      --* This is a case when this asset is added in this period.
7734      open GET_RESERVE_AT_ADDITION_MRC(h_member_asset_id, h_start_period_counter - 1);
7735      fetch GET_RESERVE_AT_ADDITION_MRC into h_deprn_source_code, h_ytd_deprn, h_deprn_reserve;
7736 
7737      if GET_RESERVE_AT_ADDITION_MRC%NOTFOUND then
7738        -- Set zero initial reserve
7739 
7740        if (p_log_level_rec.statement_level) then
7741           fa_debug_pkg.add(l_calling_fn, 'Member asset which cannot find DEPRN SUMMARY table',
7742                            h_member_asset_id, p_log_level_rec => p_log_level_rec);
7743        end if;
7744 
7745        h_ytd_deprn := 0;
7746        h_deprn_reserve := 0;
7747 
7748      elsif h_deprn_source_code <> 'BOOK' then
7749        -- Set zero initial reserve
7750 
7751        if (p_log_level_rec.statement_level) then
7752           fa_debug_pkg.add(l_calling_fn, 'This Member asset record', h_deprn_source_code, p_log_level_rec => p_log_level_rec);
7753        end if;
7754 
7755        h_ytd_deprn := 0;
7756        h_deprn_reserve := 0;
7757 
7758      end if;
7759      close GET_RESERVE_AT_ADDITION_MRC;
7760 
7761      if (p_log_level_rec.statement_level) then
7762        fa_debug_pkg.add(l_calling_fn, 'l_new_ind', l_new_ind, p_log_level_rec => p_log_level_rec);
7763      end if;
7764      p_track_member_table(l_new_ind).group_asset_id := h_group_asset_id;
7765      p_track_member_table(l_new_ind).member_asset_id := h_member_asset_id;
7766      p_track_member_table(l_new_ind).set_of_books_id := h_set_of_books_id;
7767      p_track_member_table(l_new_ind).period_counter := h_start_period_counter;
7768      p_track_member_table(l_new_ind).fiscal_year := h_start_fiscal_year;
7769      p_track_member_table(l_new_ind).cost := h_old_cost;
7770      p_track_member_table(l_new_ind).salvage_value := h_old_salvage_value;
7771      p_track_member_table(l_new_ind).adjusted_cost := h_old_recoverable_cost;
7772      p_track_member_table(l_new_ind).recoverable_cost := h_old_recoverable_cost;
7773      p_track_member_table(l_new_ind).adjusted_recoverable_cost := h_old_adjusted_rec_cost;
7774      p_track_member_table(l_new_ind).deprn_reserve := h_deprn_reserve;
7775      p_track_member_table(l_new_ind).ytd_deprn := h_ytd_deprn;
7776      p_track_member_table(l_new_ind).bonus_deprn_reserve := 0;
7777      p_track_member_table(l_new_ind).bonus_ytd_deprn := 0;
7778      p_track_member_table(l_new_ind).eofy_reserve := h_deprn_reserve - h_ytd_deprn;
7779      p_track_member_table(l_new_ind).eofy_recoverable_cost := 0;
7780      p_track_member_table(l_new_ind).eop_recoverable_cost := 0;
7781      p_track_member_table(l_new_ind).eofy_salvage_value := 0;
7782      p_track_member_table(l_new_ind).eop_salvage_value := 0;
7783      p_track_member_table(l_new_ind).set_of_books_id := nvl(h_set_of_books_id, -99);
7784      h_eofy_reserve := h_deprn_reserve - h_ytd_deprn;
7785 
7786      /* Populate index table */
7787      put_track_index(h_start_period_counter,h_member_asset_id,h_group_asset_id,h_set_of_books_id,l_new_ind,p_log_level_rec);
7788 
7789    --* Member Asset level information
7790      --* adjust by the delta
7791      h_new_cost := h_old_cost + h_adj_cost;
7792      h_new_recoverable_cost := h_old_recoverable_cost + h_adj_rec_cost;
7793      h_new_salvage_value := h_old_salvage_value + h_adj_salvage_value;
7794 
7795      if nvl(h_new_limit_type,'NONE') = 'PCT' then
7796          h_temp_limit_amount := h_new_cost*(1 - h_new_deprn_limit);
7797          fa_round_pkg.fa_floor(h_temp_limit_amount,h_book_type_code, p_log_level_rec => p_log_level_rec);
7798          h_new_adjusted_rec_cost := h_new_cost - h_temp_limit_amount;
7799      elsif nvl(h_new_limit_type,'NONE') = 'NONE' then
7800          h_new_adjusted_rec_cost := h_new_recoverable_cost; -- In this case, it should be same as new recoverable cost
7801      else
7802          h_new_adjusted_rec_cost := h_new_deprn_limit_amount;
7803      end if;
7804 
7805      if (p_log_level_rec.statement_level) then
7806          fa_debug_pkg.add(l_calling_fn, '++++ AFTER GETTING NEW COST etc ***', '*****');
7807          fa_debug_pkg.add(l_calling_fn, 'h_new_cost:h_new_rec_cost:h_new_salvage:h_new_adj_rec_cost',
7808                                          h_new_cost||':'||h_new_recoverable_cost||':'||h_new_salvage_value||':'||h_new_adjusted_rec_cost, p_log_level_rec => p_log_level_rec);
7809      end if;
7810 
7811      -- Get Asset type
7812      select ASSET_TYPE
7813        into fa_rule_in.asset_type
7814        from fa_additions_b
7815       where asset_id = h_member_asset_id;
7816 
7817      --* Set fa_rule_in to call deprn basis rule function
7818      fa_rule_in.asset_id := h_member_asset_id;
7819      fa_rule_in.depreciate_flag := h_depreciate_flag;
7820      fa_rule_in.adjustment_amount := 0;
7821      fa_rule_in.cost := h_new_cost;
7822      fa_rule_in.salvage_value := h_new_salvage_value;
7823      fa_rule_in.recoverable_cost := h_new_recoverable_cost;
7824      fa_rule_in.adjusted_cost := h_new_recoverable_cost;
7825      fa_rule_in.current_total_rsv := h_deprn_reserve;
7826      fa_rule_in.current_rsv := h_deprn_reserve;
7827      fa_rule_in.current_total_ytd := h_ytd_deprn;
7828      fa_rule_in.current_ytd := h_ytd_deprn;
7829      fa_rule_in.old_adjusted_cost := h_new_recoverable_cost;
7830      fa_rule_in.eofy_reserve := nvl(h_deprn_reserve,0) - nvl(h_ytd_deprn,0);
7831 
7832      fa_rule_in.eofy_recoverable_cost := 0;
7833      fa_rule_in.eop_recoverable_cost := 0;
7834      fa_rule_in.eofy_salvage_value := 0;
7835      fa_rule_in.eop_salvage_value := 0;
7836      fa_rule_in.apply_reduction_flag := h_apply_reduction_flag;
7837 
7838      if (p_log_level_rec.statement_level) then
7839        if not display_debug_message(fa_rule_in => fa_rule_in,
7840                                     p_calling_fn => l_calling_fn,
7841 p_log_level_rec => p_log_level_rec) then
7842        fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
7843        end if;
7844      end if;
7845 
7846      -- Call Deprn Basis Rule for this transaction or period
7847      if (not fa_calc_deprn_basis1_pkg.faxcdb(rule_in => fa_rule_in,
7848                                              rule_out => fa_rule_out, p_log_level_rec => p_log_level_rec)) then
7849        if (p_log_level_rec.statement_level) then
7850          fa_debug_pkg.add(l_calling_fn, 'FAXCDB is errored out', '+++', p_log_level_rec => p_log_level_rec);
7851        end if;
7852        raise get_member_at_start_err;
7853      end if;
7854 
7855      --* Since the fully reserved asset is included in the depreciable basis to calculate RAF
7856      p_track_member_table(l_new_ind).fully_reserved_flag := NULL;
7857      p_track_member_table(l_new_ind).fully_retired_flag := NULL;
7858 
7859      if (p_log_level_rec.statement_level) then
7860        fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', fa_rule_in.asset_id, p_log_level_rec => p_log_level_rec);
7861        fa_debug_pkg.add(l_calling_fn, 'fa_rule_out.new_adjusted_cost', fa_rule_out.new_adjusted_cost, p_log_level_rec => p_log_level_rec);
7862      end if;
7863 
7864      --* Set calculated adjusted cost into p_track_member_table
7865      p_track_member_table(l_new_ind).cost := h_new_cost;
7866      p_track_member_table(l_new_ind).salvage_value := h_new_salvage_value;
7867      p_track_member_table(l_new_ind).recoverable_cost := h_new_recoverable_cost;
7868      p_track_member_table(l_new_ind).adjusted_cost := fa_rule_out.new_adjusted_cost;
7869      p_track_member_table(l_new_ind).adjusted_recoverable_cost := h_new_adjusted_rec_cost;
7870 
7871      if (p_log_level_rec.statement_level) then
7872        fa_debug_pkg.add(l_calling_fn, '++ In Loop (2) indicator', i);
7873        if not display_debug_message2(i => i, p_calling_fn => l_calling_fn,
7874 p_log_level_rec=> p_log_level_rec) then
7875           fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
7876        end if;
7877      end if;
7878 
7879 <<skip_processing>>
7880      if (p_log_level_rec.statement_level) then
7881        fa_debug_pkg.add(l_calling_fn, '++ End of Loop ++', i, p_log_level_rec => p_log_level_rec);
7882      end if;
7883 
7884   end loop;
7885 
7886 end if;
7887 
7888 return(true);
7889 
7890 exception
7891   when get_member_at_start_err then
7892     fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
7893     return(false);
7894 
7895   when others then
7896     fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
7897     return(false);
7898 
7899 end get_member_at_start;
7900 
7901 --+=====================================================================
7902 -- Function: update_member_books
7903 --
7904 --  This function will be called from adjustment engine
7905 --  to update FA_BOOKS for each member assets
7906 --  Using stored adjusted_cost in FA_TRACK_MEMBERS,
7907 --  FA_BOOKS will be updated.
7908 --
7909 --+=====================================================================
7910 
7911 FUNCTION update_member_books(p_trans_rec          in FA_API_TYPES.trans_rec_type,
7912                              p_asset_hdr_rec      in FA_API_TYPES.asset_hdr_rec_type,
7913                              p_dpr_in             in FA_STD_TYPES.dpr_struct,
7914                              p_mrc_sob_type_code  in varchar2
7915 ,p_log_level_rec       IN     fa_api_types.log_level_rec_type) -- default 'N'
7916   return boolean is
7917 
7918 --* Host related variables
7919 h_book_type_code        varchar2(30);
7920 h_group_asset_id        number;
7921 h_member_asset_id       number;
7922 h_fiscal_year           number;
7923 h_period_num            number;
7924 h_period_counter        number;
7925 h_set_of_books_id       number;
7926 
7927 h_adjusted_cost         number;
7928 h_eofy_reserve          number;
7929 
7930 l_calling_fn            varchar2(45) := 'fa_track_member_pvt.update_member_books';
7931 update_member_err           exception;
7932 
7933 
7934 l_member_asset_id  number;
7935 
7936    cursor c_get_member_asset_id is
7937       select mth.asset_id
7938       from   fa_transaction_headers mth
7939       where  mth.transaction_header_id = p_trans_rec.member_transaction_header_id;
7940 
7941 -- cursor to get period_counter
7942 cursor GET_PERIOD_COUNTER is
7943   select period_counter
7944     from fa_deprn_periods
7945    where book_type_code = h_book_type_code
7946      and fiscal_year = h_fiscal_year
7947      and period_num = h_period_num;
7948 
7949 cursor GET_PERIOD_COUNTER_MRC is
7950   select period_counter
7951     from fa_mc_deprn_periods
7952    where book_type_code = h_book_type_code
7953      and fiscal_year = h_fiscal_year
7954      and period_num = h_period_num
7955      and set_of_books_id = h_set_of_books_id;
7956 
7957 -- cursor to query start period condition of all members belonged to the specified group
7958 cursor ALL_MEMBERS is
7959   select bk.asset_id,
7960          bk.group_asset_id
7961     from fa_books bk
7962    where bk.book_type_code = h_book_type_code
7963      and bk.group_asset_id = h_group_asset_id
7964      and bk.date_ineffective is null
7965      and bk.depreciate_flag = 'YES'
7966      and bk.asset_id = nvl(l_member_asset_id, bk.asset_id)
7967    order by asset_id;
7968 
7969 cursor ALL_MEMBERS_MRC is
7970   select bk.asset_id,
7971          bk.group_asset_id
7972     from fa_mc_books bk
7973    where bk.book_type_code = h_book_type_code
7974      and bk.group_asset_id = h_group_asset_id
7975      and bk.date_ineffective is null
7976      and bk.depreciate_flag = 'YES'
7977      and bk.set_of_books_id = h_set_of_books_id
7978      and bk.asset_id = nvl(l_member_asset_id, bk.asset_id)
7979    order by asset_id;
7980 
7981 begin
7982 
7983 if (p_log_level_rec.statement_level) then
7984    fa_debug_pkg.add('fa_track_member_pvt', '*** update_member_books Started', '***');
7985    fa_debug_pkg.add('fa_track_member_pvt', 'book_type_code:group_asset_id', p_asset_hdr_rec.book_type_code||':'||p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
7986 end if;
7987 
7988 h_book_type_code := p_asset_hdr_rec.book_type_code;
7989 h_group_asset_id := p_asset_hdr_rec.asset_id;
7990 h_fiscal_year := p_dpr_in.y_end;
7991 h_period_num := p_dpr_in.p_cl_end;
7992 h_set_of_books_id := p_asset_hdr_rec.set_of_books_id;
7993 
7994 if (nvl(fa_cache_pkg.fazcdrd_record.allow_reduction_rate_flag, 'N') = 'N') then
7995 open c_get_member_asset_id;
7996 fetch c_get_member_asset_id into l_member_asset_id;
7997 close c_get_member_asset_id;
7998 if (p_log_level_rec.statement_level) then
7999    fa_debug_pkg.add(l_calling_fn, 'l_member_asset_id', l_member_asset_id, p_log_level_rec => p_log_level_rec);
8000 end if;
8001 end if;
8002 
8003 
8004 if (p_log_level_rec.statement_level) then
8005    fa_debug_pkg.add(l_calling_fn, 'fiscal_year:period_num', h_fiscal_year||':'||h_period_num, p_log_level_rec => p_log_level_rec);
8006 end if;
8007 
8008 /* Apply MRC related feature */
8009 if p_mrc_sob_type_code <> 'R' then
8010 
8011   open GET_PERIOD_COUNTER;
8012   fetch GET_PERIOD_COUNTER into h_period_counter;
8013   close GET_PERIOD_COUNTER;
8014 else
8015 
8016   open GET_PERIOD_COUNTER_MRC;
8017   fetch GET_PERIOD_COUNTER_MRC into h_period_counter;
8018   close GET_PERIOD_COUNTER_MRC;
8019 end if;
8020 
8021 h_period_counter := h_period_counter + 1;
8022 
8023 if (p_log_level_rec.statement_level) then
8024    fa_debug_pkg.add(l_calling_fn, 'h_set_of_books_id:period_counter', h_set_of_books_id||':'||h_period_counter, p_log_level_rec => p_log_level_rec);
8025 end if;
8026 
8027 -- Query member assets from FA_BOOKS with current date
8028 if p_mrc_sob_type_code <> 'R' then
8029 
8030   -- Loop for all member populated above
8031   For update_member in ALL_MEMBERS loop
8032 
8033     h_member_asset_id := update_member.asset_id;
8034 
8035     h_adjusted_cost := null;
8036     h_eofy_reserve := null;
8037 
8038     For i IN 1 .. p_track_member_table.COUNT LOOP
8039 
8040       if p_track_member_table(i).group_asset_id = h_group_asset_id and
8041          p_track_member_table(i).member_asset_id = h_member_asset_id and
8042          p_track_member_table(i).period_counter = h_period_counter and
8043          nvl(p_track_member_table(i).set_of_books_id, -99) = nvl(h_set_of_books_id, -99) and
8044 
8045           ((nvl(p_dpr_in.allocate_to_fully_ret_flag,'N') = 'N' and
8046             nvl(p_dpr_in.allocate_to_fully_rsv_flag,'N') = 'N' and
8047             nvl(p_track_member_table(i).fully_retired_flag,'N') = 'N' and nvl(p_track_member_table(i).fully_reserved_flag,'N') = 'N')
8048           or
8049            (nvl(p_dpr_in.allocate_to_fully_ret_flag,'N') = 'Y' and
8050             nvl(p_dpr_in.allocate_to_fully_rsv_flag,'N') = 'N' and
8051             nvl(p_track_member_table(i).fully_reserved_flag,'N') = 'N')
8052           or
8053            (nvl(p_dpr_in.allocate_to_fully_ret_flag,'N') = 'N' and
8054             nvl(p_dpr_in.allocate_to_fully_rsv_flag,'N') = 'Y' and
8055             nvl(p_track_member_table(i).fully_retired_flag,'N') = 'N')
8056           or
8057            (nvl(p_dpr_in.allocate_to_fully_ret_flag,'N') = 'Y' and
8058             nvl(p_dpr_in.allocate_to_fully_rsv_flag,'N') = 'Y'))
8059 
8060      then
8061 
8062            h_adjusted_cost := nvl(p_track_member_table(i).adjusted_cost,0);
8063            h_eofy_reserve := p_track_member_table(i).eofy_reserve;
8064 
8065            if (p_log_level_rec.statement_level) then
8066              fa_debug_pkg.add('fa_track_member_pvt', 'member asset id', h_member_asset_id, p_log_level_rec => p_log_level_rec);
8067              fa_debug_pkg.add('fa_track_member_pvt', 'adjusted cost', h_adjusted_cost, p_log_level_rec => p_log_level_rec);
8068              fa_debug_pkg.add('fa_track_member_pvt', 'eofy reserve', h_eofy_reserve, p_log_level_rec => p_log_level_rec);
8069            end if;
8070 
8071            -- Update FA_BOOKS table
8072            Update FA_BOOKS set adjusted_cost = h_adjusted_cost,
8073                                eofy_reserve = h_eofy_reserve,
8074                                last_update_date = sysdate,
8075                                last_updated_by = -1
8076                          where book_type_code = h_book_type_code
8077                            and asset_id = h_member_asset_id
8078                            and group_asset_id = h_group_asset_id
8079                            and date_ineffective is null;
8080 /* Bug 6929073 -  The following update statement added for half year basis rule with 50% reduction rule.
8081                   when the member asset is added in second half then its adjusted_cost should be 50%.
8082                   But its being populated as full value in 'Book' row of fa_ds. in Fa_books also its populated with full value.
8083                   But the above update statement is updating the correct value, if tracking method is allocate.
8084                   The following update statement written similar to above. */
8085            Update fa_deprn_summary set   adjusted_cost = h_adjusted_cost
8086                                    where book_type_code = h_book_type_code
8087                                      and asset_id = h_member_asset_id
8088                                      and not exists (select 'non period of addition'
8089                                                      from   fa_Deprn_summary
8090                                                      where  deprn_source_code = 'DEPRN'
8091                                                         and asset_id = h_member_asset_id
8092                                                         and book_type_code = h_book_type_code)
8093                                      and exists (select 'reduction rate'
8094                                                  from fa_books
8095                                                  where asset_id = h_group_asset_id
8096                                                    and book_type_code = h_book_type_code
8097                                                    and transaction_header_id_out is null
8098                                                    and nvl(reduction_rate,0) <> 0
8099                                                    and reduce_addition_flag = 'Y')
8100                                      and deprn_source_code = 'BOOKS';
8101 
8102            exit;
8103       end if;
8104     END LOOP;
8105 
8106   end loop; -- get_member loop
8107 
8108 else -- Reporting Book
8109 
8110   -- Loop for all member populated above
8111   For update_member in ALL_MEMBERS_MRC loop
8112 
8113     h_member_asset_id := update_member.asset_id;
8114 
8115     h_adjusted_cost := null;
8116     h_eofy_reserve := null;
8117 
8118     For i IN 1 .. p_track_member_table.COUNT LOOP
8119 
8120       if p_track_member_table(i).group_asset_id = h_group_asset_id and
8121          p_track_member_table(i).member_asset_id = h_member_asset_id and
8122          p_track_member_table(i).period_counter = h_period_counter and
8123          nvl(p_track_member_table(i).set_of_books_id,-99) = nvl(h_set_of_books_id,-99) and
8124 
8125           ((nvl(p_dpr_in.allocate_to_fully_ret_flag,'N') = 'N' and
8126             nvl(p_dpr_in.allocate_to_fully_rsv_flag,'N') = 'N' and
8127             nvl(p_track_member_table(i).fully_retired_flag,'N') = 'N' and nvl(p_track_member_table(i).fully_reserved_flag,'N') = 'N')
8128           or
8129            (nvl(p_dpr_in.allocate_to_fully_ret_flag,'N') = 'Y' and
8130             nvl(p_dpr_in.allocate_to_fully_rsv_flag,'N') = 'N' and
8131             nvl(p_track_member_table(i).fully_reserved_flag,'N') = 'N')
8132           or
8133            (nvl(p_dpr_in.allocate_to_fully_ret_flag,'N') = 'N' and
8134             nvl(p_dpr_in.allocate_to_fully_rsv_flag,'N') = 'Y' and
8135             nvl(p_track_member_table(i).fully_retired_flag,'N') = 'N')
8136           or
8137            (nvl(p_dpr_in.allocate_to_fully_ret_flag,'N') = 'Y' and
8138             nvl(p_dpr_in.allocate_to_fully_rsv_flag,'N') = 'Y'))
8139 
8140       then
8141 
8142            h_adjusted_cost := p_track_member_table(i).adjusted_cost;
8143            h_eofy_reserve := p_track_member_table(i).eofy_reserve;
8144 
8145            if (p_log_level_rec.statement_level) then
8146              fa_debug_pkg.add('fa_track_member_pvt', 'member asset id', h_member_asset_id, p_log_level_rec => p_log_level_rec);
8147              fa_debug_pkg.add('fa_track_member_pvt', 'adjusted cost', h_adjusted_cost, p_log_level_rec => p_log_level_rec);
8148              fa_debug_pkg.add('fa_track_member_pvt', 'eofy reserve', h_eofy_reserve, p_log_level_rec => p_log_level_rec);
8149            end if;
8150 
8151            -- Update FA_BOOKS table
8152            Update FA_MC_BOOKS set adjusted_cost = h_adjusted_cost,
8153                                      eofy_reserve = h_eofy_reserve,
8154                                      last_update_date = sysdate,
8155                                      last_updated_by = -1
8156                                where book_type_code = h_book_type_code
8157                                  and asset_id = h_member_asset_id
8158                                  and group_asset_id = h_group_asset_id
8159                                  and date_ineffective is null
8160                                  and set_of_books_id = h_set_of_books_id;
8161 
8162 /* Bug 6929073 -  The following update statement added for half year basis rule with 50% reduction rule.
8163                   when the member asset is added in second half then its adjusted_cost should be 50%.
8164                   But its being populated as full value. in Fa_books also its populated with full value.
8165                   But the above update statement is updating the correct value, if tracking method is allocate.
8166                   The following update statement written similar to above. */
8167 
8168            Update fa_mc_deprn_summary set   adjusted_cost = h_adjusted_cost
8169                                    where book_type_code = h_book_type_code
8170                                      and asset_id = h_member_asset_id
8171                                      and not exists (select 'non period of addition'
8172                                                      from   fa_mc_deprn_summary
8173                                                      where  deprn_source_code = 'DEPRN'
8174                                                         and asset_id = h_member_asset_id
8175                                                         and book_type_code = h_book_type_code
8176                                                         and set_of_books_id = h_set_of_books_id)
8177                                      and exists (select /*+ index(FA_MC_BOOKS FA_MC_BOOKS_U2) */'reduction rate'
8178                                                  from FA_MC_BOOKS
8179                                                  where asset_id = h_group_asset_id
8180                                                    and book_type_code = h_book_type_code
8181                                                    and transaction_header_id_out is null
8182                                                    and nvl(reduction_rate,0) <> 0
8183                                                    and reduce_addition_flag = 'Y'
8184                                                    and set_of_books_id = h_set_of_books_id)
8185                                      and deprn_source_code = 'BOOKS'
8186                                      and set_of_books_id = h_set_of_books_id;
8187 
8188            exit;
8189       end if;
8190     END LOOP;
8191 
8192   end loop; -- get_member loop
8193 
8194 end if; -- Primary Book or Reporting Book?
8195 
8196 return(true);
8197 
8198 exception
8199   when update_member_err then
8200     fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
8201     return(false);
8202 
8203   when others then
8204     fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
8205     return(false);
8206 
8207 end update_member_books;
8208 
8209 --+=====================================================================
8210 -- Function: member_eofy_rsv
8211 --
8212 --  This function will be called from adjustment engine at the end
8213 --  of main loop.
8214 --  In order to pass of each member's eofy_reserve,
8215 --  calculated eofy_reserve will be kept in PL\SQL table
8216 --
8217 --+=====================================================================
8218 
8219 FUNCTION member_eofy_rsv(p_asset_hdr_rec      in FA_API_TYPES.asset_hdr_rec_type,
8220                          p_dpr_in             in FA_STD_TYPES.dpr_struct,
8221                          p_mrc_sob_type_code  in varchar2
8222 ,p_log_level_rec       IN     fa_api_types.log_level_rec_type) -- default 'N'
8223   return boolean is
8224 
8225 --* Host related variables
8226 h_book_type_code        varchar2(30);
8227 h_group_asset_id        number;
8228 h_member_asset_id       number;
8229 h_fiscal_year           number;
8230 h_period_num            number;
8231 h_period_counter        number;
8232 h_set_of_books_id       number;
8233 
8234 h_cost                  number;
8235 h_salvage_value         number;
8236 h_recoverable_cost      number;
8237 h_adjusted_cost         number;
8238 h_eofy_reserve          number;
8239 j                       number;
8240 
8241 l_calling_fn            varchar2(45) := 'fa_track_member_pvt.member_eofy_rsv';
8242 member_eofy_rsv_err           exception;
8243 
8244 -- cursor to get period_counter
8245 cursor GET_PERIOD_COUNTER is
8246   select period_counter
8247     from fa_deprn_periods
8248    where book_type_code = h_book_type_code
8249      and fiscal_year = h_fiscal_year
8250      and period_num = h_period_num;
8251 
8252 cursor GET_PERIOD_COUNTER_MRC is
8253   select period_counter
8254     from fa_mc_deprn_periods
8255    where book_type_code = h_book_type_code
8256      and fiscal_year = h_fiscal_year
8257      and period_num = h_period_num
8258      and set_of_books_id = h_set_of_books_id;
8259 
8260 begin
8261 
8262 if (p_log_level_rec.statement_level) then
8263    fa_debug_pkg.add(l_calling_fn, '++++ member_eofy_rsv:Just Started ++++', '++++++', p_log_level_rec => p_log_level_rec);
8264    fa_debug_pkg.add(l_calling_fn, 'book_type_code:group_asset_id', p_asset_hdr_rec.book_type_code||':'||p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
8265 end if;
8266 
8267 h_book_type_code := p_asset_hdr_rec.book_type_code;
8268 h_group_asset_id := p_asset_hdr_rec.asset_id;
8269 h_fiscal_year := p_dpr_in.y_end;
8270 h_period_num := p_dpr_in.p_cl_end;
8271 
8272 if (p_log_level_rec.statement_level) then
8273    fa_debug_pkg.add(l_calling_fn, 'fiscal_year:period_num', h_fiscal_year||':'||h_period_num, p_log_level_rec => p_log_level_rec);
8274 end if;
8275 
8276 /* Apply MRC related feature */
8277 if p_mrc_sob_type_code <> 'R' then
8278 
8279   open GET_PERIOD_COUNTER;
8280   fetch GET_PERIOD_COUNTER into h_period_counter;
8281   close GET_PERIOD_COUNTER;
8282 else
8283   open GET_PERIOD_COUNTER_MRC;
8284   fetch GET_PERIOD_COUNTER_MRC into h_period_counter;
8285   close GET_PERIOD_COUNTER_MRC;
8286 end if;
8287 
8288 h_period_counter := h_period_counter + 1;
8289 
8290 if (p_log_level_rec.statement_level) then
8291    fa_debug_pkg.add(l_calling_fn, 'h_set_of_books_id:period_counter', h_set_of_books_id||':'||h_period_counter, p_log_level_rec => p_log_level_rec);
8292 end if;
8293 
8294 if nvl(p_track_member_eofy_table.count,0) > 0 then
8295   p_track_member_eofy_table.delete;
8296   if (p_log_level_rec.statement_level) then
8297     fa_debug_pkg.add(l_calling_fn, 'p_track_member_eofy_table is deleted', 1, p_log_level_rec => p_log_level_rec);
8298   end if;
8299 end if;
8300 
8301 j := 0;
8302 -- Loop for all member populated above
8303 For i in 1 .. p_track_member_table.COUNT loop
8304 
8305   if p_track_member_table(i).group_asset_id = h_group_asset_id and
8306      p_track_member_table(i).period_counter = h_period_counter and
8307      nvl(p_track_member_table(i).set_of_books_id,-99) = nvl(h_set_of_books_id,-99) then
8308 
8309      j := j + 1;
8310      h_member_asset_id := p_track_member_table(i).member_asset_id;
8311      h_cost := p_track_member_table(i).cost;
8312      h_salvage_value := p_track_member_table(i).salvage_value;
8313      h_recoverable_cost := p_track_member_table(i).recoverable_cost;
8314      h_adjusted_cost := p_track_member_table(i).adjusted_cost;
8315      h_eofy_reserve := p_track_member_table(i).eofy_reserve;
8316      if (p_log_level_rec.statement_level) then
8317        fa_debug_pkg.add(l_calling_fn, '+++ member_eofy_rsv:Folloings are stored +++', '+++', p_log_level_rec => p_log_level_rec);
8318        fa_debug_pkg.add(l_calling_fn, 'set_of_books_id:group_asset_id:member_asset_id', h_set_of_books_id||':'||h_group_asset_id||':'||h_member_asset_id, p_log_level_rec => p_log_level_rec);
8319        fa_debug_pkg.add(l_calling_fn, 'fiscal_year', h_fiscal_year, p_log_level_rec => p_log_level_rec);
8320        fa_debug_pkg.add(l_calling_fn, 'cost:salvage:rec_cost:adj_cost:eofy_rsv',
8321                                       h_cost||':'||h_salvage_value||':'||h_recoverable_cost||':'||h_adjusted_cost||':'||h_eofy_reserve, p_log_level_rec => p_log_level_rec);
8322      end if;
8323 
8324      p_track_member_eofy_table(j).group_asset_id := h_group_asset_id;
8325      p_track_member_eofy_table(j).member_asset_id := h_member_asset_id;
8326 --     p_track_member_eofy_table(j).fiscal_year := h_fiscal_year;
8327      p_track_member_eofy_table(j).cost := h_cost;
8328      p_track_member_eofy_table(j).salvage_value := h_salvage_value;
8329      p_track_member_eofy_table(j).recoverable_cost := h_recoverable_cost;
8330      p_track_member_eofy_table(j).adjusted_cost := h_adjusted_cost;
8331      p_track_member_eofy_table(j).eofy_reserve := h_eofy_reserve;
8332      p_track_member_eofy_table(j).set_of_books_id := h_set_of_books_id;
8333 
8334   end if;
8335 
8336 END LOOP;
8337 
8338 return(true);
8339 
8340 exception
8341   when member_eofy_rsv_err then
8342     fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
8343     return(false);
8344 
8345   when others then
8346     fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
8347     return(false);
8348 
8349 end member_eofy_rsv;
8350 
8351 --+=====================================================================
8352 -- Function: populate_member_assets_table
8353 --
8354 --  This function will be called to extend member assets PL/SQL table
8355 --  to process faxcde correctly.
8356 --  When this function is called, allocation calculation will be
8357 --  made from group DPIS to one period before when recalculation will start
8358 --
8359 --+=====================================================================
8360 
8361 FUNCTION populate_member_assets_table(p_trans_rec               in FA_API_TYPES.trans_rec_type default null,
8362                                       p_asset_hdr_rec           in FA_API_TYPES.asset_hdr_rec_type,
8363                                       p_asset_fin_rec_new       in FA_API_TYPES.asset_fin_rec_type,
8364                                       p_populate_for_recalc_period  in varchar2,
8365                                       p_amort_start_date        in date,
8366                                       p_recalc_start_fy         in number,
8367                                       p_recalc_start_period_num in number,
8368                                       p_no_allocation_for_last  in varchar2,
8369                                       p_mrc_sob_type_code       in varchar2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
8370   return boolean is
8371 
8372 --* Local variables used in this process
8373 h_book_type_code             varchar2(30);
8374 h_set_of_books_id            number;
8375 h_group_asset_id             number;
8376 h_group_dpis                 date;
8377 h_group_dpis_period_counter  number;
8378 h_group_dpis_fiscal_year     number;
8379 h_group_dpis_period_num      number;
8380 h_amort_period_counter       number;
8381 h_recalc_period_counter      number;
8382 h_length_of_loop             number;
8383 h_processing_period_counter  number;
8384 h_processing_fiscal_year     number;
8385 h_processing_period_num      number;
8386 h_cur_period_counter         number;
8387 l_member_asset_id            number;
8388 
8389 h_first_period_counter     number;
8390 
8391 -- Processing member information
8392 h_member_asset_id            number;
8393 h_new_cost                   number;
8394 h_new_salvage_value          number;
8395 h_new_recoverable_cost       number;
8396 h_new_adjusted_rec_cost      number;
8397 h_new_eofy_recoverable_cost  number;
8398 h_new_eop_recoverable_cost   number;
8399 h_new_eofy_salvage_value     number;
8400 h_new_eop_salvage_value      number;
8401 h_depreciate_flag            varchar2(3);
8402 
8403 h_old_cost                   number;
8404 h_old_salvage_value          number;
8405 h_old_recoverable_cost       number;
8406 h_old_adjusted_cost          number;
8407 h_old_adjusted_rec_cost      number;
8408 h_eofy_reserve               number;
8409 
8410 -- variables for bs table
8411 h_fiscal_year                number;
8412 h_period_num                 number;
8413 h_deprn_method_code          varchar(30);
8414 h_life_in_months             number;
8415 h_calendar_period_open_date  date;
8416 h_calendar_period_close_date date;
8417 h_group_cost                 number;
8418 h_group_adjusted_rec_cost    number;
8419 h_group_salvage_value        number;
8420 h_group_adjusted_cost        number;
8421 h_group_recoverable_cost     number;
8422 h_group_deprn_amount         number;
8423 h_group_ytd_deprn            number;
8424 h_group_deprn_reserve        number;
8425 h_group_bonus_deprn_amount   number;
8426 h_group_bonus_ytd_deprn      number;
8427 h_group_bonus_deprn_reserve  number;
8428 h_group_system_deprn_amount  number;
8429 h_group_system_bonus_deprn   number;
8430 h_group_eofy_reserve         number;
8431 h_group_eofy_rec_cost        number;
8432 h_group_eofy_salvage_value   number;
8433 h_group_deprn_override       varchar2(1);
8434 h_group_bonus_rule           varchar2(30);
8435 h_group_recognize_gain_loss  varchar2(30);
8436 
8437 h_temp_system_deprn_amount   number;
8438 h_temp_system_bonus_deprn    number;
8439 
8440 h_perd_ctr_fully_retired     number;
8441 h_perd_ctr_fully_reserved    number;
8442 
8443 -- Parameters for CALC_REDUCTION_AMOUNT
8444 h_half_year_rule_flag        varchar2(1);
8445 h_change_in_cost             number;
8446 h_change_in_cost_to_reduce   number;
8447 h_total_change_in_cost       number;
8448 h_net_proceeds               number;
8449 h_net_proceeds_to_reduce     number;
8450 h_total_net_proceeds         number;
8451 h_first_half_cost            number;
8452 h_first_half_cost_to_reduce  number;
8453 h_second_half_cost           number;
8454 h_second_half_cost_to_reduce number;
8455 
8456 h_apply_reduction_flag       varchar2(1);
8457 h_reduction_amount           number;
8458 h_fy_begin_nbv               number;
8459 h_check_amount               number;
8460 h_reduction_rate             number;
8461 
8462 h_group_adj_expense          number;
8463 h_group_adj_bonus_expense    number;
8464 
8465 h_periodic_expense           number;
8466 h_periodic_bonus_expense     number;
8467 
8468 h_group_deprn_basis          varchar2(4);
8469 h_group_exclude_salvage      varchar2(1);
8470 h_group_deprn_amount_parm    number;
8471 h_group_bonus_amount_parm    number;
8472 h_tracking_method            varchar2(30);
8473 h_allocate_to_fully_rsv_flag varchar2(1);
8474 h_allocate_to_fully_ret_flag varchar2(1);
8475 h_excess_allocation_option   varchar2(30);
8476 h_depreciation_option        varchar2(30);
8477 h_member_rollup_flag         varchar2(1);
8478 h_subtraction_flag           varchar2(1);
8479 h_eofy_flag                  varchar2(1);
8480 
8481 h_deprn_calendar             varchar2(15);
8482 h_fiscal_year_name           varchar2(30);
8483 h_period_per_fiscal_year     number;
8484 
8485 h_find_flag_1                boolean := FALSE;
8486 h_find_flag_2                boolean := FALSE;
8487 h_find_flag_3                boolean := FALSE;
8488 
8489 x_new_deprn_amount           number;
8490 x_new_bonus_amount           number;
8491 
8492 l_new_ind                    number;
8493 l_processing_ind             binary_integer;
8494 k                            binary_integer;
8495 h_deprn_source_code          varchar2(15);
8496 h_deprn_reserve              number;
8497 h_ytd_deprn                  number;
8498 h_bonus_deprn_reserve        number;
8499 h_bonus_ytd_deprn            number;
8500 
8501 --* variables for Delta
8502 h_trans_exists_flag          boolean := FALSE;
8503 h_transaction_header_id      number;
8504 h_delta_cost                 number;
8505 h_delta_adjusted_cost        number; -- Bug 8484007
8506 h_new_delta_adjusted_cost    number; -- Bug 8484007
8507 h_delta_recoverable_cost     number;
8508 h_new_limit_type             varchar2(15);
8509 h_old_limit_type             varchar2(15);
8510 h_new_deprn_limit            number;
8511 h_new_deprn_limit_amount     number;
8512 h_new_group_asset_id         number;
8513 h_new_perd_ctr_ret           number;
8514 
8515 h_adj_cost                   number;
8516 h_adj_rec_cost               number;
8517 h_adj_salvage_value          number;
8518 h_temp_limit_amount          number;
8519 
8520 h_transaction_type_code      varchar2(20);
8521 h_transaction_key            varchar2(2); -- Bug 8484007
8522 h_adj_eofy_reserve           number;
8523 h_new_eofy_reserve           number;
8524 h_adj_reserve_retired        number;
8525 h_new_reserve_retired        number;
8526 h_recognize_gain_loss        varchar2(30);
8527 h_eofy_reserve_zero          varchar2(1);
8528 
8529 --* To control Cache call
8530 h_old_deprn_method_code          varchar(30) := NULL;
8531 h_old_life_in_months             number := -99;
8532 
8533 h_temp_fiscal_year           number;
8534 h_temp_period_num            number;
8535 
8536 h_exclude_fully_rsv_flag     varchar2(1);
8537 
8538 --* Check reclassed member assets
8539 h_max_thid_in_this_group     number;
8540 h_max_thid_in_other_group    number;
8541 h_skip_control               boolean := false;
8542 
8543 --* Exception
8544 x_rtn_code                   number;
8545 l_calling_fn                 varchar2(50) := 'fa_track_member_pvt.populate_member_assets_table';
8546 pop_mem_table_err            exception;
8547 
8548 
8549 --* Cursor to get period counter from date
8550 cursor GET_FY_PERDNUM(p_date date) is
8551   select FY.fiscal_year,
8552          DP.period_num
8553     from fa_fiscal_year FY,
8554          fa_calendar_periods DP
8555    where FY.fiscal_year_name = h_fiscal_year_name
8556      and DP.calendar_type = h_deprn_calendar
8557      and DP.end_date <= FY.end_date
8558      and p_date >= DP.start_date
8559      and p_date <= DP.end_date
8560      and p_date >= FY.start_date
8561      and p_date <= FY.end_date;
8562 
8563 --* Cursor to populate member assets exist at the period
8564 /* Modified for bug 7195989
8565 This cursor returns asset_ids of which are part of the group in the given period.
8566 a . Column "max_trx_id_in_this_group" is the max(transaction_header_id) for an asset in the given period
8567     and when asset is member of the current group. In line view "bk_max" fetches such record.
8568 b. Column "max_trx_id_in_other_group" is the max(transaction_header_id) for an asset in the given period
8569     and when asset is NOT member of the current group.
8570 
8571 To get max(transaction_header_id) for in current and other group, we used in line views bk_max and
8572    bk_other_max.
8573 
8574 Same logic applies to cursor GET_MEMBER_ASSETS_MRC as well
8575 */
8576 cursor GET_MEMBER_ASSETS(p_fiscal_year number,p_period_num number) is
8577   select distinct BK.ASSET_ID, AD.asset_number,
8578          bk_max.transaction_header_id_in as max_trx_id_in_this_group,
8579          bk_other_max.transaction_header_id_in as max_trx_id_in_other_group
8580     from FA_BOOKS BK,
8581          FA_ADDITIONS_B AD,
8582       (
8583       select distinct bk_in.asset_id, bk_in.book_type_code,
8584              first_value(bk_in.transaction_header_id_in)
8585              over (partition by bk_in.asset_id, bk_in.book_type_code
8586              order by bk_in.transaction_header_id_in desc nulls last) as transaction_header_id_in
8587       from   fa_books bk_in,
8588              FA_TRANSACTION_HEADERS TH1,
8589              FA_CALENDAR_PERIODS DP1,
8590              FA_FISCAL_YEAR FY
8591       where TH1.book_type_code = BK_in.book_type_code
8592        and DP1.calendar_type = h_deprn_calendar
8593        and DP1.period_num = p_period_num
8594        and FY.fiscal_year_name = h_fiscal_year_name
8595        and FY.fiscal_year = p_fiscal_year
8596        and nvl(TH1.amortization_start_date,TH1.transaction_date_entered) <= DP1.end_date
8597        and DP1.start_date >= FY.start_date
8598        and DP1.end_date <= FY.end_date
8599        and BK_in.TRANSACTION_HEADER_ID_IN = TH1.TRANSACTION_HEADER_ID
8600        and bk_in.book_type_code = h_book_type_code
8601        and bk_in.group_asset_id = h_group_asset_id
8602        and bk_in.asset_id = nvl(l_member_asset_id,bk_in.asset_id)
8603       ) bk_max,
8604       (
8605       select distinct bk_in.asset_id, bk_in.book_type_code,
8606              first_value(bk_in.transaction_header_id_in)
8607              over (partition by bk_in.asset_id, bk_in.book_type_code
8608              order by bk_in.transaction_header_id_in desc nulls last) as transaction_header_id_in
8609       from   fa_books bk_in,
8610              FA_TRANSACTION_HEADERS TH1,
8611              FA_CALENDAR_PERIODS DP1,
8612              FA_FISCAL_YEAR FY
8613       where TH1.book_type_code = BK_in.book_type_code
8614        and DP1.calendar_type = h_deprn_calendar
8615        and DP1.period_num = p_period_num
8616        and FY.fiscal_year_name = h_fiscal_year_name
8617        and FY.fiscal_year = p_fiscal_year
8618        and nvl(TH1.amortization_start_date,TH1.transaction_date_entered) <= DP1.end_date
8619        and DP1.start_date >= FY.start_date
8620        and DP1.end_date <= FY.end_date
8621        and BK_in.TRANSACTION_HEADER_ID_IN = TH1.TRANSACTION_HEADER_ID
8622        and bk_in.book_type_code = h_book_type_code
8623        and nvl(bk_in.group_asset_id,-1) <> h_group_asset_id
8624        and (bk_in.asset_id, bk_in.book_type_code) in
8625            (
8626             select distinct bk_in2.asset_id, bk_in2.book_type_code
8627             from   fa_books bk_in2,
8628                    FA_TRANSACTION_HEADERS TH2,
8629                    FA_CALENDAR_PERIODS DP2,
8630                    FA_FISCAL_YEAR FY2
8631             where TH2.book_type_code = BK_in2.book_type_code
8632              and DP2.calendar_type = h_deprn_calendar
8633              and DP2.period_num = p_period_num
8634              and FY2.fiscal_year_name = h_fiscal_year_name
8635              and FY2.fiscal_year = p_fiscal_year
8636              and nvl(TH2.amortization_start_date,TH2.transaction_date_entered) <= DP1.end_date
8637              and DP2.start_date >= FY2.start_date
8638              and DP2.end_date <= FY2.end_date
8639              and BK_in2.TRANSACTION_HEADER_ID_IN = TH2.TRANSACTION_HEADER_ID
8640 	     and bk_in2.asset_id = TH2.asset_id
8641              and bk_in2.book_type_code = h_book_type_code
8642              and bk_in2.group_asset_id = h_group_asset_id
8643 	     and bk_in.asset_id = nvl(l_member_asset_id,bk_in.asset_id)
8644            )
8645       ) bk_other_max
8646       where BK.book_type_code = h_book_type_code
8647       and BK.group_asset_id = h_group_asset_id
8648       and AD.asset_id = BK.asset_id
8649       and AD.asset_type = 'CAPITALIZED'
8650       and bk_max.asset_id = bk.asset_id
8651       and bk_max.book_type_code = bk.book_type_code
8652       and bk_other_max.asset_id(+) = bk.asset_id
8653       and bk_other_max.book_type_code(+) = bk.book_type_code
8654       order by AD.asset_number asc;
8655 
8656 cursor GET_MEMBER_ASSETS_MRC(p_fiscal_year number,p_period_num number) is
8657   select distinct BK.ASSET_ID, AD.asset_number,
8658          bk_max.transaction_header_id_in as max_trx_id_in_this_group,
8659          bk_other_max.transaction_header_id_in as max_trx_id_in_other_group
8660     from FA_MC_BOOKS BK,
8661          FA_ADDITIONS_B AD,
8662       (
8663       select distinct bk_in.asset_id, bk_in.book_type_code,
8664              first_value(bk_in.transaction_header_id_in)
8665              over (partition by bk_in.asset_id, bk_in.book_type_code
8666              order by bk_in.transaction_header_id_in desc nulls last) as transaction_header_id_in
8667       from   fa_mc_books bk_in,
8668              FA_TRANSACTION_HEADERS TH1,
8669              FA_CALENDAR_PERIODS DP1,
8670              FA_FISCAL_YEAR FY
8671       where TH1.book_type_code = BK_in.book_type_code
8672        and DP1.calendar_type = h_deprn_calendar
8673        and DP1.period_num = p_period_num
8674        and FY.fiscal_year_name = h_fiscal_year_name
8675        and FY.fiscal_year = p_fiscal_year
8676        and nvl(TH1.amortization_start_date,TH1.transaction_date_entered) <= DP1.end_date
8677        and DP1.start_date >= FY.start_date
8678        and DP1.end_date <= FY.end_date
8679        and BK_in.TRANSACTION_HEADER_ID_IN = TH1.TRANSACTION_HEADER_ID
8680        and bk_in.book_type_code = h_book_type_code
8681        and bk_in.group_asset_id = h_group_asset_id
8682        and bk_in.set_of_books_id = h_set_of_books_id
8683        and bk_in.asset_id = nvl(l_member_asset_id,bk_in.asset_id)
8684       ) bk_max,
8685       (
8686       select distinct bk_in.asset_id, bk_in.book_type_code,
8687              first_value(bk_in.transaction_header_id_in)
8688              over (partition by bk_in.asset_id, bk_in.book_type_code
8689              order by bk_in.transaction_header_id_in desc nulls last) as transaction_header_id_in
8690       from   fa_mc_books bk_in,
8691              FA_TRANSACTION_HEADERS TH1,
8692              FA_CALENDAR_PERIODS DP1,
8693              FA_FISCAL_YEAR FY
8694       where TH1.book_type_code = BK_in.book_type_code
8695        and DP1.calendar_type = h_deprn_calendar
8696        and DP1.period_num = p_period_num
8697        and FY.fiscal_year_name = h_fiscal_year_name
8698        and FY.fiscal_year = p_fiscal_year
8699        and nvl(TH1.amortization_start_date,TH1.transaction_date_entered) <= DP1.end_date
8700        and DP1.start_date >= FY.start_date
8701        and DP1.end_date <= FY.end_date
8702        and BK_in.TRANSACTION_HEADER_ID_IN = TH1.TRANSACTION_HEADER_ID
8703        and bk_in.book_type_code = h_book_type_code
8704        and nvl(bk_in.group_asset_id,-1) <> h_group_asset_id
8705        and bk_in.set_of_books_id = h_set_of_books_id
8706        and (bk_in.asset_id, bk_in.book_type_code) in
8707            (
8708             select distinct bk_in2.asset_id, bk_in2.book_type_code
8709             from   fa_mc_books bk_in2,
8710                    FA_TRANSACTION_HEADERS TH2,
8711                    FA_CALENDAR_PERIODS DP2,
8712                    FA_FISCAL_YEAR FY2
8713             where TH2.book_type_code = BK_in2.book_type_code
8714              and DP2.calendar_type = h_deprn_calendar
8715              and DP2.period_num = p_period_num
8716              and FY2.fiscal_year_name = h_fiscal_year_name
8717              and FY2.fiscal_year = p_fiscal_year
8718              and nvl(TH2.amortization_start_date,TH2.transaction_date_entered) <= DP1.end_date
8719              and DP2.start_date >= FY2.start_date
8720              and DP2.end_date <= FY2.end_date
8721              and BK_in2.TRANSACTION_HEADER_ID_IN = TH2.TRANSACTION_HEADER_ID
8722 	     and bk_in2.asset_id = TH2.asset_id
8723              and bk_in2.book_type_code = h_book_type_code
8724              and bk_in2.group_asset_id = h_group_asset_id
8725              and bk_in2.set_of_books_id = h_set_of_books_id
8726 	     and bk_in.asset_id = nvl(l_member_asset_id,bk_in.asset_id)
8727            )
8728       ) bk_other_max
8729       where BK.book_type_code = h_book_type_code
8730       and BK.group_asset_id = h_group_asset_id
8731       and BK.set_of_books_id = h_set_of_books_id
8732       and AD.asset_id = BK.asset_id
8733       and AD.asset_type = 'CAPITALIZED'
8734       and bk_max.asset_id = bk.asset_id
8735       and bk_max.book_type_code = bk.book_type_code
8736       and bk_other_max.asset_id(+) = bk.asset_id
8737       and bk_other_max.book_type_code(+) = bk.book_type_code
8738       order by AD.asset_number asc;
8739 
8740 
8741 --* Check fully reserve or fully retired
8742 cursor CHK_FULLY_RESERVE_RETIRED(p_asset_id number) is
8743   select bk.allocate_to_fully_ret_flag,
8744          bk.allocate_to_fully_rsv_flag,
8745          bk.period_counter_fully_retired,
8746          bk.period_counter_fully_reserved
8747     from fa_books bk
8748    where bk.book_type_code = h_book_type_code
8749      and bk.asset_id = p_asset_id
8750      and bk.date_ineffective is null;
8751 
8752 cursor CHK_FULLY_RESERVE_RETIRED_MRC(p_asset_id number) is
8753   select bk.allocate_to_fully_ret_flag,
8754          bk.allocate_to_fully_rsv_flag,
8755          bk.period_counter_fully_retired,
8756          bk.period_counter_fully_reserved
8757     from fa_mc_books bk
8758    where bk.book_type_code = h_book_type_code
8759      and bk.asset_id = p_asset_id
8760      and bk.date_ineffective is null
8761      and bk.set_of_books_id = h_set_of_books_id;
8762 
8763 --* Get all transaction headers exists in the specified period
8764 cursor ALL_TRANS_IN_PERIOD(p_fiscal_year number, p_period_num number, p_member_asset_id number) is
8765   select TH.TRANSACTION_HEADER_ID, TH.TRANSACTION_TYPE_CODE,TH.TRANSACTION_KEY --Bug 8484007
8766     from FA_TRANSACTION_HEADERS TH,
8767          FA_CALENDAR_PERIODS DP,
8768          FA_FISCAL_YEAR FY
8769    where DP.calendar_type = h_deprn_calendar
8770      and DP.period_num = p_period_num
8771      and FY.fiscal_year_name = h_fiscal_year_name
8772      and FY.fiscal_year = p_fiscal_year
8773      and TH.asset_id = p_member_asset_id
8774      and TH.transaction_type_code not in ('TRANSFER OUT', 'TRANSFER IN', 'TRANSFER', 'TRANSFER IN/VOID',
8775 --
8776 --                                          'RECLASS', 'UNIT ADJUSTMENT','REINSTATEMENT')
8777                                          'RECLASS', 'UNIT ADJUSTMENT')
8778      and nvl(TH.amortization_start_date,TH.transaction_date_entered) between DP.start_date and DP.end_date
8779      and DP.start_date >= FY.start_date
8780      and DP.end_date <= FY.end_date
8781 order by nvl(TH.amortization_start_date,TH.transaction_date_entered), TH.transaction_header_id asc;
8782 
8783 --* Get delta between the amounts before the transaction and after the transaction
8784 cursor GET_DELTA_FOR_MEMBER(p_member_asset_id number, p_transaction_header_id number) is
8785   select BK_IN.COST - nvl(BK_OUT.COST,0) delta_cost,
8786          BK_IN.RECOVERABLE_COST - nvl(BK_OUT.RECOVERABLE_COST,0) delta_rec_cost,
8787          BK_IN.DEPRN_LIMIT_TYPE new_limit_type,
8788          BK_OUT.DEPRN_LIMIT_TYPE old_limit_type,
8789          BK_IN.ALLOWED_DEPRN_LIMIT new_deprn_limit,
8790          BK_IN.ALLOWED_DEPRN_LIMIT_AMOUNT new_deprn_limit_amount,
8791          BK_IN.DEPRECIATE_FLAG depreciate_flag,
8792          BK_IN.group_asset_id group_asset_id,
8793          BK_IN.period_counter_fully_retired period_counter_fully_retired,
8794          bk_in.adjusted_cost -nvl(bk_out.adjusted_cost, 0) delta_adjusted_cost -- Bug 8484007
8795     from FA_BOOKS BK_IN,
8796          FA_BOOKS BK_OUT
8797    where BK_IN.book_type_code = h_book_type_code
8798      and BK_IN.group_asset_id = h_group_asset_id
8799      and BK_IN.asset_id = h_member_asset_id
8800      and BK_IN.transaction_header_id_in = p_transaction_header_id
8801      and BK_OUT.book_type_code(+) = BK_IN.book_type_code
8802      and BK_OUT.group_asset_id(+) = BK_IN.group_Asset_id
8803      and BK_OUT.asset_id(+) = BK_IN.asset_id
8804      and BK_OUT.transaction_header_id_out(+) = BK_IN.transaction_header_id_in;
8805 
8806 cursor GET_DELTA_FOR_MEMBER_MRC(p_member_asset_id number, p_transaction_header_id number) is
8807   select BK_IN.COST - nvl(BK_OUT.COST,0) delta_cost,
8808          BK_IN.RECOVERABLE_COST - nvl(BK_OUT.RECOVERABLE_COST,0) delta_rec_cost,
8809          BK_IN.DEPRN_LIMIT_TYPE new_limit_type,
8810          BK_OUT.DEPRN_LIMIT_TYPE old_limit_type,
8811          BK_IN.ALLOWED_DEPRN_LIMIT new_deprn_limit,
8812          BK_IN.ALLOWED_DEPRN_LIMIT_AMOUNT old_deprn_limit,
8813          BK_IN.DEPRECIATE_FLAG depreciate_flag,
8814          BK_IN.group_Asset_id group_asset_id,
8815          BK_IN.period_counter_fully_retired period_counter_fully_retired,
8816          bk_in.adjusted_cost -nvl(bk_out.adjusted_cost,0) delta_adjusted_cost -- Bug 8484007
8817     from FA_MC_BOOKS BK_IN,
8818          FA_MC_BOOKS BK_OUT
8819    where BK_IN.book_type_code = h_book_type_code
8820      and BK_IN.group_asset_id = h_group_asset_id
8821      and BK_IN.asset_id = h_member_asset_id
8822      and BK_IN.transaction_header_id_in = p_transaction_header_id
8823      and BK_IN.set_of_books_id = h_set_of_books_id
8824      and BK_OUT.book_type_code(+) = BK_IN.book_type_code
8825      and BK_OUT.group_asset_id(+) = BK_IN.group_Asset_id
8826      and BK_OUT.asset_id(+) = BK_IN.asset_id
8827      and BK_OUT.transaction_header_id_out(+) = BK_IN.transaction_header_id_in
8828      and BK_OUT.set_of_books_id(+) = h_set_of_books_id ; --Bug 8941132
8829 
8830 --* Cursor to get eofy_reserve adjustment from fa_retirements
8831 cursor GET_RETIREMENTS(p_thid number) is
8832   select recognize_gain_loss,
8833          nvl(eofy_reserve,0),
8834          (-1)*nvl(reserve_retired,0)
8835     from fa_retirements
8836    where transaction_header_id_in = p_thid;
8837 
8838 cursor GET_RETIREMENTS_MRC(p_thid number) is
8839   select recognize_gain_loss,
8840          nvl(eofy_reserve,0),
8841          (-1)*nvl(reserve_retired,0)
8842     from fa_mc_retirements
8843    where transaction_header_id_in = p_thid
8844      and set_of_books_id = h_set_of_books_id;
8845 
8846 --* Cursor to get reserve retired for reinstatement
8847 cursor GET_REINSTATEMENT(p_thid number) is
8848   select recognize_gain_loss,
8849          nvl(eofy_reserve,0),
8850          nvl(reserve_retired,0)
8851     from fa_retirements
8852    where transaction_header_id_out = p_thid;
8853 
8854 cursor GET_REINSTATEMENT_MRC(p_thid number) is
8855   select recognize_gain_loss,
8856          nvl(eofy_reserve,0),
8857          nvl(reserve_retired,0)
8858     from fa_mc_retirements
8859    where transaction_header_id_out = p_thid
8860      and set_of_books_id = h_set_of_books_id;
8861 
8862 --* Cursor to query reserve/ytd at addition
8863 cursor GET_RESERVE_AT_ADDITION(p_asset_id number, p_period_counter number) is
8864   select deprn_source_code,
8865          ytd_deprn,
8866          deprn_reserve
8867     from fa_deprn_summary
8868    where book_type_code = h_book_type_code
8869      and asset_id = p_asset_id
8870      and period_counter = p_period_counter;
8871 
8872 cursor GET_RESERVE_AT_ADDITION_MRC(p_asset_id number, p_period_counter number) is
8873   select deprn_source_code,
8874          ytd_deprn,
8875          deprn_reserve
8876     from fa_mc_deprn_summary
8877    where book_type_code = h_book_type_code
8878      and asset_id = p_asset_id
8879      and period_counter = p_period_counter
8880      and set_of_books_id = h_set_of_books_id;
8881 
8882 --* Get Catchup Expense for the group asset
8883 cursor GET_ADJ_EXPENSE(p_period_counter number) is
8884    select sum(decode(adj.adjustment_type,'EXPENSE',
8885                      decode(adj.debit_credit_flag,
8886                      'DR',adj.adjustment_amount,
8887                      'CR', -1 * adj.adjustment_amount))),
8888           sum(decode(adj.adjustment_type,'BONUS EXPENSE',
8889                      decode(adj.debit_credit_flag,
8890                      'DR',adj.adjustment_amount,
8891                      'CR', -1 * adj.adjustment_amount)))
8892      from fa_adjustments adj
8893     where adj.asset_id = h_group_asset_id
8894       and adj.book_type_code = h_book_type_code
8895       and adj.period_counter_adjusted = p_period_counter;
8896 
8897 cursor GET_ADJ_EXPENSE_MRC(p_period_counter number) is
8898    select sum(decode(adj.adjustment_type,'EXPENSE',
8899                      decode(adj.debit_credit_flag,
8900                      'DR',adj.adjustment_amount,
8901                      'CR', -1 * adj.adjustment_amount))),
8902           sum(decode(adj.adjustment_type,'BONUS EXPENSE',
8903                      decode(adj.debit_credit_flag,
8904                      'DR',adj.adjustment_amount,
8905                      'CR', -1 * adj.adjustment_amount)))
8906      from fa_mc_adjustments adj
8907     where adj.asset_id = h_group_asset_id
8908       and adj.book_type_code = h_book_type_code
8909       and adj.period_counter_adjusted = p_period_counter
8910       and set_of_books_id = h_set_of_books_id;
8911 
8912 --* cursor to populate Group Assets record from FA_BOOKS_SUMMARY
8913 cursor GET_GROUP_INFO(p_period_counter number) is
8914   select FISCAL_YEAR,
8915          PERIOD_NUM,
8916          CALENDAR_PERIOD_OPEN_DATE,
8917          CALENDAR_PERIOD_CLOSE_DATE,
8918          COST,
8919          SALVAGE_VALUE,
8920          RECOVERABLE_COST,
8921          ADJUSTED_RECOVERABLE_COST,
8922          ADJUSTED_COST,
8923          DEPRN_METHOD_CODE,
8924          LIFE_IN_MONTHS,
8925          BONUS_RULE,
8926          DEPRN_AMOUNT,
8927          YTD_DEPRN,
8928          DEPRN_RESERVE,
8929          BONUS_DEPRN_AMOUNT,
8930          BONUS_YTD_DEPRN,
8931          BONUS_DEPRN_RESERVE,
8932          DEPRN_OVERRIDE_FLAG,
8933 --         EOFY_RECOVERABLE_COST,
8934 --         EOFY_SALVAGE_VALULE,
8935          EOFY_RESERVE,
8936          SYSTEM_DEPRN_AMOUNT,
8937          SYSTEM_BONUS_DEPRN_AMOUNT
8938     from FA_BOOKS_SUMMARY
8939    where book_type_code = h_book_type_code
8940      and asset_id = h_group_asset_id
8941      and period_counter = p_period_counter;
8942 
8943 cursor GET_GROUP_INFO_MRC(p_period_counter number) is
8944   select FISCAL_YEAR,
8945          PERIOD_NUM,
8946          CALENDAR_PERIOD_OPEN_DATE,
8947          CALENDAR_PERIOD_CLOSE_DATE,
8948          COST,
8949          SALVAGE_VALUE,
8950          RECOVERABLE_COST,
8951          ADJUSTED_RECOVERABLE_COST,
8952          ADJUSTED_COST,
8953          DEPRN_METHOD_CODE,
8954          LIFE_IN_MONTHS,
8955          BONUS_RULE,
8956          DEPRN_AMOUNT,
8957          YTD_DEPRN,
8958          DEPRN_RESERVE,
8959          BONUS_DEPRN_AMOUNT,
8960          BONUS_YTD_DEPRN,
8961          BONUS_DEPRN_RESERVE,
8962          DEPRN_OVERRIDE_FLAG,
8963 --         EOFY_RECOVERABLE_COST,
8964 --         EOFY_SALVAGE_VALULE,
8965          EOFY_RESERVE,
8966          SYSTEM_DEPRN_AMOUNT,
8967          SYSTEM_BONUS_DEPRN_AMOUNT
8968     from FA_MC_BOOKS_SUMMARY
8969    where book_type_code = h_book_type_code
8970      and asset_id = h_group_asset_id
8971      and period_counter = p_period_counter
8972      and set_of_books_id = h_set_of_books_id;
8973 
8974 cursor GET_GROUP_SYSTEM_INFO(p_fiscal_year number, p_period_counter_end number) is
8975   select sum(nvl(SYSTEM_DEPRN_AMOUNT,0)),
8976          sum(nvl(SYSTEM_BONUS_DEPRN_AMOUNT,0))
8977     from FA_BOOKS_SUMMARY
8978    where book_type_code = h_book_type_code
8979      and asset_id = h_group_asset_id
8980      and fiscal_year = p_fiscal_year
8981      and period_counter <= p_period_counter_end;
8982 
8983 cursor GET_GROUP_SYSTEM_INFO_MRC(p_fiscal_year number, p_period_counter_end number) is
8984   select sum(nvl(SYSTEM_DEPRN_AMOUNT,0)),
8985          sum(nvl(SYSTEM_BONUS_DEPRN_AMOUNT,0))
8986     from FA_MC_BOOKS_SUMMARY
8987    where book_type_code = h_book_type_code
8988      and asset_id = h_group_asset_id
8989      and fiscal_year = p_fiscal_year
8990      and period_counter <= p_period_counter_end
8991      and set_of_books_id = h_set_of_books_id;
8992 
8993 --* cursor to populate Group Assets record (Temporary)
8994 cursor GET_GROUP_SALVAGE(p_fiscal_year number, p_period_num number) is
8995   select SALVAGE_VALUE,
8996          RECOVERABLE_COST
8997     from FA_BOOKS_SUMMARY
8998    where book_type_code = h_book_type_code
8999      and asset_id = h_group_asset_id
9000      and fiscal_year = p_fiscal_year
9001      and period_num = p_period_num;
9002 
9003 cursor GET_GROUP_SALVAGE_MRC(p_fiscal_year number, p_period_num number) is
9004   select SALVAGE_VALUE,
9005          RECOVERABLE_COST
9006     from FA_MC_BOOKS_SUMMARY
9007    where book_type_code = h_book_type_code
9008      and asset_id = h_group_asset_id
9009      and fiscal_year = p_fiscal_year
9010      and period_num = p_period_num
9011      and set_of_books_id = h_set_of_books_id;
9012 
9013 -- cursor to query fa_books_summary for this member/period
9014 cursor GET_PRV_ROW_BS is
9015   select COST,
9016          SALVAGE_VALUE,
9017          RECOVERABLE_COST,
9018          ADJUSTED_COST,
9019          ADJUSTED_RECOVERABLE_COST,
9020          DEPRN_RESERVE,
9021          BONUS_DEPRN_RESERVE,
9022          YTD_DEPRN,
9023          BONUS_YTD_DEPRN,
9024          EOFY_RESERVE
9025     from FA_BOOKS_SUMMARY
9026    where book_type_code = h_book_type_code
9027      and group_asset_id = h_group_asset_id
9028      and period_counter = h_processing_period_counter -1
9029      and asset_id = h_member_asset_id;
9030 
9031 cursor GET_PRV_ROW_BS_MRC is
9032   select COST,
9033          SALVAGE_VALUE,
9034          RECOVERABLE_COST,
9035          ADJUSTED_COST,
9036          ADJUSTED_RECOVERABLE_COST,
9037          DEPRN_RESERVE,
9038          BONUS_DEPRN_RESERVE,
9039          YTD_DEPRN,
9040          BONUS_YTD_DEPRN,
9041          EOFY_RESERVE
9042     from FA_MC_BOOKS_SUMMARY
9043    where book_type_code = h_book_type_code
9044      and group_asset_id = h_group_asset_id
9045      and period_counter = h_processing_period_counter -1
9046      and asset_id = h_member_asset_id
9047      and set_of_books_id = h_set_of_books_id;
9048 
9049 --* Get new group asset id
9050 cursor GET_NEW_GROUP(p_member_asset_id number, p_transaction_header_id number) is
9051   select BK_IN.group_asset_id group_asset_id
9052     from FA_BOOKS BK_IN,
9053          FA_BOOKS BK_OUT
9054    where BK_IN.book_type_code = h_book_type_code
9055      and BK_IN.asset_id = h_member_asset_id
9056      and BK_IN.transaction_header_id_in = p_transaction_header_id
9057      and BK_OUT.book_type_code(+) = BK_IN.book_type_code
9058      and BK_OUT.group_asset_id(+) = h_group_Asset_id
9059      and BK_OUT.asset_id(+) = BK_IN.asset_id
9060      and BK_OUT.transaction_header_id_out(+) = BK_IN.transaction_header_id_in;
9061 
9062 cursor GET_NEW_GROUP_MRC(p_member_asset_id number, p_transaction_header_id number) is
9063   select BK_IN.group_Asset_id group_asset_id
9064     from FA_MC_BOOKS BK_IN,
9065          FA_MC_BOOKS BK_OUT
9066    where BK_IN.book_type_code = h_book_type_code
9067      and BK_IN.asset_id = h_member_asset_id
9068      and BK_IN.transaction_header_id_in = p_transaction_header_id
9069      and BK_IN.set_of_books_id = h_set_of_books_id
9070      and BK_OUT.book_type_code(+) = BK_IN.book_type_code
9071      and BK_OUT.group_asset_id(+) = h_group_Asset_id
9072      and BK_OUT.asset_id(+) = BK_IN.asset_id
9073      and BK_OUT.transaction_header_id_out(+) = BK_IN.transaction_header_id_in
9074      and BK_OUT.set_of_books_id(+) = h_set_of_books_id; --Bug 8941132
9075 
9076 --* Structure to call Deprn Basis Rule
9077 fa_rule_in      fa_std_types.fa_deprn_rule_in_struct;
9078 fa_rule_out     fa_std_types.fa_deprn_rule_out_struct;
9079 
9080 cursor c_get_member_asset_id is
9081    select mth.asset_id
9082      from   fa_transaction_headers mth
9083     where  mth.transaction_header_id = p_trans_rec.member_transaction_header_id;
9084 
9085 BEGIN
9086    if (p_log_level_rec.statement_level) then
9087       fa_debug_pkg.add(l_calling_fn, '+++ Populate Member Assets Table ++ is Started ++', '+++', p_log_level_rec => p_log_level_rec);
9088       fa_debug_pkg.add(l_calling_fn, 'p_populate_for_recalc_period', p_populate_for_recalc_period, p_log_level_rec => p_log_level_rec);
9089    end if;
9090 
9091    -- Get basic information from input parameters
9092    h_book_type_code := p_asset_hdr_rec.book_type_code;
9093    h_group_asset_id := p_asset_hdr_rec.asset_id;
9094    h_group_dpis := p_asset_fin_rec_new.date_placed_in_service;
9095    h_set_of_books_id := p_asset_hdr_rec.set_of_books_id;
9096 
9097    /*Bug13805724 - No need to process all assets ,process one in transaction. */
9098    if (fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE') and  -- ENERGY
9099       (fa_cache_pkg.fazccmt_record.rate_source_rule = FA_STD_TYPES.FAD_RSR_PROD) then
9100       open c_get_member_asset_id;
9101       fetch c_get_member_asset_id into l_member_asset_id;
9102       close c_get_member_asset_id;
9103       if (p_log_level_rec.statement_level) then
9104          fa_debug_pkg.add(l_calling_fn, 'l_member_asset_id', l_member_asset_id, p_log_level_rec => p_log_level_rec);
9105       end if;
9106    end if;
9107 
9108    -- Query Group Asset DPIS' period counter and amort date's period counter from FA_BOOKS
9109    select deprn_calendar, fiscal_year_name
9110    into   h_deprn_calendar, h_fiscal_year_name
9111    from   fa_book_controls
9112    where  book_type_code = h_book_type_code;
9113 
9114    if (p_log_level_rec.statement_level) then
9115      fa_debug_pkg.add(l_calling_fn, 'h_deprn_calendar:h_fiscal_year_name',
9116                       h_deprn_calendar||':'||h_fiscal_year_name, p_log_level_rec => p_log_level_rec);
9117    end if;
9118 
9119    if not fa_cache_pkg.fazcct(h_deprn_calendar, p_log_level_rec => p_log_level_rec) then
9120       if (p_log_level_rec.statement_level) then
9121          fa_debug_pkg.add(l_calling_fn, 'Calendar Cache call is failed', '+++', p_log_level_rec => p_log_level_rec);
9122       end if;
9123       raise pop_mem_table_err;
9124    end if;
9125 
9126    h_period_per_fiscal_year := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
9127 
9128    open GET_FY_PERDNUM(p_amort_start_date);
9129    fetch GET_FY_PERDNUM into h_temp_fiscal_year,h_temp_period_num;
9130 
9131    if GET_FY_PERDNUM%NOTFOUND then
9132       close GET_FY_PERDNUM;
9133 
9134       if (p_log_level_rec.statement_level) then
9135          fa_debug_pkg.add(l_calling_fn, '++ No record is found for the date (1)', p_amort_start_date);
9136       end if;
9137 
9138       raise pop_mem_table_err;
9139 
9140    end if;
9141 
9142    close GET_FY_PERDNUM;
9143 
9144    h_amort_period_counter := h_temp_fiscal_year*h_period_per_fiscal_year+h_temp_period_num;
9145    h_recalc_period_counter := p_recalc_start_fy*h_period_per_fiscal_year+p_recalc_start_period_num;
9146 
9147    h_temp_fiscal_year := 0;
9148    h_temp_period_num := 0;
9149 
9150    if nvl(p_populate_for_recalc_period,'N') = 'N' then
9151 
9152       open GET_FY_PERDNUM(h_group_dpis);
9153       fetch GET_FY_PERDNUM into h_temp_fiscal_year,h_temp_period_num;
9154 
9155       if GET_FY_PERDNUM%NOTFOUND then
9156          close GET_FY_PERDNUM;
9157 
9158          if (p_log_level_rec.statement_level) then
9159             fa_debug_pkg.add(l_calling_fn, '++ No record is found for the date (2)', h_group_dpis);
9160          end if;
9161          raise pop_mem_table_err;
9162       end if;
9163 
9164       close GET_FY_PERDNUM;
9165 
9166       h_group_dpis_period_counter := h_temp_fiscal_year*h_period_per_fiscal_year+h_temp_period_num;
9167       h_group_dpis_fiscal_year := h_temp_fiscal_year;
9168       h_group_dpis_period_num := h_temp_period_num;
9169 
9170    else
9171       h_group_dpis_period_counter := h_recalc_period_counter;
9172       h_group_dpis_fiscal_year := p_recalc_start_fy;
9173       h_group_dpis_period_num := p_recalc_start_period_num;
9174 
9175    end if;
9176 
9177    h_processing_fiscal_year := h_group_dpis_fiscal_year;
9178    h_processing_period_num := h_group_dpis_period_num -1 ;
9179 
9180    -- If this is Reporting Books, get set of books id
9181    if p_mrc_sob_type_code <> 'R' then
9182 
9183       select period_counter
9184         into h_cur_period_Counter
9185         from fa_deprn_periods
9186        where book_type_Code = h_book_type_code
9187          and period_close_date is null;
9188 
9189       select exclude_fully_rsv_flag,recognize_gain_loss
9190         into h_exclude_fully_rsv_flag,h_group_recognize_gain_loss
9191         from fa_books
9192        where book_type_code = h_book_type_code
9193          and asset_id = h_group_asset_id
9194          and date_ineffective is null;
9195 
9196    else -- Reporting Book
9197 
9198       select period_counter
9199         into h_cur_period_Counter
9200         from fa_mc_deprn_periods
9201        where book_type_Code = h_book_type_code
9202          and period_close_date is null
9203          and set_of_books_id = h_set_of_books_id;
9204 
9205       select exclude_fully_rsv_flag,recognize_gain_loss
9206         into h_exclude_fully_rsv_flag,h_group_recognize_gain_loss
9207         from fa_mc_books
9208        where book_type_code = h_book_type_code
9209          and asset_id = h_group_asset_id
9210          and date_ineffective is null
9211          and set_of_books_id = h_set_of_books_id;
9212    end if;
9213 
9214    if h_group_dpis_period_counter is null or h_amort_period_counter is null then
9215       raise pop_mem_table_err;
9216    end if;
9217 
9218    -- Prepare Loop for until recalculation start period so that depreciation engine
9219    -- can allocate new amounts correctly.
9220    h_length_of_loop := h_recalc_period_counter - h_group_dpis_period_counter + 1;
9221 
9222    if (p_log_level_rec.statement_level) then
9223       fa_debug_pkg.add(l_calling_fn, 'h_group_dpis_period_counter', h_group_dpis_period_counter, p_log_level_rec => p_log_level_rec);
9224       fa_debug_pkg.add(l_calling_fn, 'h_length_of_loop', h_length_of_loop, p_log_level_rec => p_log_level_rec);
9225       fa_debug_pkg.add(l_calling_fn, 'h_period_per_fiscal_year', h_period_per_fiscal_year, p_log_level_rec => p_log_level_rec);
9226    end if;
9227 
9228    -- Now loop between h_group_dpis_period_counter and h_prv_period_counter to populate
9229    -- member assets amounts
9230    For i IN 1.. h_length_of_loop LOOP
9231 
9232       -- Current processing period counter
9233       h_processing_period_counter := h_group_dpis_period_counter + (i-1);
9234       h_processing_period_num := h_processing_period_num + 1;
9235 
9236       if h_processing_period_num > h_period_per_fiscal_year then
9237          h_processing_period_num := 1;
9238          h_processing_fiscal_year := h_processing_fiscal_year + 1;
9239       end if;
9240 
9241       if (p_log_level_rec.statement_level) then
9242          fa_debug_pkg.add(l_calling_fn, 'h_processing_period_counter:fiscal_year:period_num',
9243                           h_processing_period_counter||':'||h_processing_fiscal_year||':'||
9244                           h_processing_period_num, p_log_level_rec => p_log_level_rec);
9245       end if;
9246 
9247       -- Check if this period is later than amortization start date.
9248       -- If so, books_summary table information should be populated from
9249       -- global variable's table instead of querying table.
9250       h_find_flag_1 := FALSE;
9251       h_find_flag_2 := FALSE;
9252       h_first_period_counter := NULL;
9253 
9254       if h_processing_period_counter >= h_amort_period_counter then
9255 
9256          --* Populate Group Asset information from global variables
9257          For m IN 1.. fa_amort_pvt.t_period_counter.COUNT LOOP
9258             if fa_amort_pvt.t_period_counter(m) = h_processing_period_counter then
9259                h_find_flag_1 := TRUE;
9260                h_fiscal_year := fa_amort_pvt.t_fiscal_year(m);
9261                h_period_num := fa_amort_pvt.t_period_num(m);
9262                h_calendar_period_open_date := fa_amort_pvt.t_calendar_period_open_date(m);
9263                h_calendar_period_close_date := fa_amort_pvt.t_calendar_period_close_date(m);
9264                h_group_cost := fa_amort_pvt.t_cost(m);
9265                h_group_salvage_value := fa_amort_pvt.t_salvage_value(m);
9266                h_group_recoverable_cost := fa_amort_pvt.t_recoverable_cost(m);
9267                h_group_adjusted_rec_cost := fa_amort_pvt.t_adjusted_recoverable_cost(m);
9268                h_group_adjusted_cost := fa_amort_pvt.t_adjusted_cost(m);
9269                h_deprn_method_code := fa_amort_pvt.t_deprn_method_code(m);
9270                h_life_in_months := fa_amort_pvt.t_life_in_months(m);
9271                h_group_bonus_rule := fa_amort_pvt.t_bonus_rule(m);
9272                h_group_deprn_amount := fa_amort_pvt.t_deprn_amount(m);
9273                h_group_ytd_deprn := fa_amort_pvt.t_ytd_deprn(m);
9274                h_group_deprn_reserve := fa_amort_pvt.t_deprn_reserve(m);
9275                h_group_bonus_deprn_amount := fa_amort_pvt.t_bonus_deprn_amount(m);
9276                h_group_bonus_ytd_deprn := fa_amort_pvt.t_bonus_ytd_deprn(m);
9277                h_group_bonus_deprn_reserve := fa_amort_pvt.t_bonus_deprn_reserve(m);
9278                h_group_deprn_override := fa_amort_pvt.t_deprn_override_flag(m);
9279                h_group_eofy_reserve := fa_amort_pvt.t_eofy_reserve(m);
9280                h_group_system_deprn_amount := fa_amort_pvt.t_system_deprn_amount(m);
9281                h_group_system_bonus_deprn := fa_amort_pvt.t_system_bonus_deprn_amount(m);
9282             end if;
9283          End Loop;
9284 
9285          if (h_find_flag_1) then
9286 
9287             For n IN 1.. fa_amort_pvt.t_period_counter.COUNT LOOP
9288 
9289                if fa_amort_pvt.t_fiscal_year(n) = h_fiscal_year - 1 and
9290                   fa_amort_pvt.t_period_num(n) = h_period_per_fiscal_year then
9291 
9292                   h_find_flag_2 := TRUE;
9293                   h_group_eofy_rec_cost := fa_amort_pvt.t_recoverable_cost(n);
9294                   h_group_eofy_salvage_value := fa_amort_pvt.t_salvage_value(n);
9295 
9296                end if;
9297 
9298             End Loop;
9299 
9300          end if;
9301 
9302       end if; -- (if processing period counter >= amort period counter)
9303 
9304       if (p_log_level_rec.statement_level) then
9305          if (h_find_flag_1) then
9306             fa_debug_pkg.add(l_calling_fn, 'Memory Table has data for this asset', '+++', p_log_level_rec => p_log_level_rec);
9307          else
9308             fa_debug_pkg.add(l_calling_fn, 'Need to query fa_books_summary table due to no data in'||
9309                              ' memory table','+++', p_log_level_rec => p_log_level_rec);
9310          end if;
9311       end if;
9312 
9313       if not (h_find_flag_1) then -- there is no record for this group asset/period in global variables.
9314 
9315          if (p_log_level_rec.statement_level) then
9316             fa_debug_pkg.add(l_calling_fn, 'h_processing_period_counter', h_processing_period_counter, p_log_level_rec => p_log_level_rec);
9317             fa_debug_pkg.add(l_calling_fn, 'p_mrc_sob_type_code', p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec);
9318          end if;
9319 
9320          if p_mrc_sob_type_code <> 'R' then
9321             --* Query Group Asset information for this processing period
9322             open GET_GROUP_INFO(h_processing_period_counter);
9323             fetch GET_GROUP_INFO into h_fiscal_year
9324                                     , h_period_num
9325                                     , h_calendar_period_open_date
9326                                     , h_calendar_period_close_date
9327                                     , h_group_cost
9328                                     , h_group_salvage_value
9329                                     , h_group_recoverable_cost
9330                                     , h_group_adjusted_rec_cost
9331                                     , h_group_adjusted_cost
9332                                     , h_deprn_method_code
9333                                     , h_life_in_months
9334                                     , h_group_bonus_rule
9335                                     , h_group_deprn_amount
9336                                     , h_group_ytd_deprn
9337                                     , h_group_deprn_reserve
9338                                     , h_group_bonus_deprn_amount
9339                                     , h_group_bonus_ytd_deprn
9340                                     , h_group_bonus_deprn_reserve
9341                                     , h_group_deprn_override
9342  --                                   , h_group_eofy_rec_cost
9343  --                                   , h_group_eofy_salvage_value
9344                                     , h_group_eofy_reserve
9345                                     , h_group_system_deprn_amount
9346                                     , h_group_system_bonus_deprn;
9347             close GET_GROUP_INFO;
9348          else
9349             --* Query Group Asset information for this processing period
9350             open GET_GROUP_INFO_MRC(h_processing_period_counter);
9351             fetch GET_GROUP_INFO_MRC into h_fiscal_year
9352                                         , h_period_num
9353                                         , h_calendar_period_open_date
9354                                         , h_calendar_period_close_date
9355                                         , h_group_cost
9356                                         , h_group_salvage_value
9357                                         , h_group_recoverable_cost
9358                                         , h_group_adjusted_rec_cost
9359                                         , h_group_adjusted_cost
9360                                         , h_deprn_method_code
9361                                         , h_life_in_months
9362                                         , h_group_bonus_rule
9363                                         , h_group_deprn_amount
9364                                         , h_group_ytd_deprn
9365                                         , h_group_deprn_reserve
9366                                         , h_group_bonus_deprn_amount
9367                                         , h_group_bonus_ytd_deprn
9368                                         , h_group_bonus_deprn_reserve
9369                                         , h_group_deprn_override
9370  --                                       ,  h_group_eofy_rec_cost
9371  --                                       , h_group_eofy_salvage_value
9372                                         , h_group_eofy_reserve
9373                                         , h_group_system_deprn_amount
9374                                         , h_group_system_bonus_deprn;
9375             close GET_GROUP_INFO_MRC;
9376          end if; -- (p_mrc_sob_type_code)
9377       end if; -- (h_find_flag)
9378 
9379       if not (h_find_flag_2) then
9380          -- There is no record for this group and eofy period in global variables.
9381 
9382          if p_mrc_sob_type_code <> 'R' then
9383             open GET_GROUP_SALVAGE(h_fiscal_year-1, h_period_per_fiscal_year);
9384             fetch GET_GROUP_SALVAGE into h_group_eofy_salvage_value, h_group_eofy_rec_cost;
9385             close GET_GROUP_SALVAGE;
9386          else
9387             open GET_GROUP_SALVAGE_MRC(h_fiscal_year-1, h_period_per_fiscal_year);
9388             fetch GET_GROUP_SALVAGE_MRC into h_group_eofy_salvage_value, h_group_eofy_rec_cost;
9389             close GET_GROUP_SALVAGE_MRC;
9390          end if;
9391       end if;
9392 
9393       if (p_log_level_rec.statement_level) then
9394          fa_debug_pkg.add(l_calling_fn, 'h_deprn_method_code:h_life_in_months',
9395                           h_deprn_method_code||':'||h_life_in_months, p_log_level_rec => p_log_level_rec);
9396       end if;
9397 
9398       --* Prepare Cache for Method information
9399       if i <> 1 and
9400          h_old_deprn_method_code <> h_deprn_method_code and
9401          nvl(h_old_life_in_months,-99) <> nvl(h_life_in_months,-99) then
9402 
9403          if (p_log_level_rec.statement_level) then
9404            fa_debug_pkg.add(l_calling_fn, 'Method Cache is called.', '***');
9405          end if;
9406 
9407          if not fa_cache_pkg.fazccmt(X_method => h_deprn_method_code,
9408                                      X_life => h_life_in_months, p_log_level_rec => p_log_level_rec) then
9409             if (p_log_level_rec.statement_level) then
9410                fa_debug_pkg.add(l_calling_fn, '++ fa_cache_pkg.fazccmt is errored out ++', '+++', p_log_level_rec => p_log_level_rec);
9411             end if;
9412 
9413             raise pop_mem_table_err;
9414          end if;
9415 
9416          h_old_deprn_method_code := h_deprn_method_code;
9417          h_old_life_in_months := h_life_in_months;
9418       end if;
9419 
9420       -- Populate Method related information from cache
9421       h_group_deprn_basis := fa_cache_pkg.fazccmt_record.deprn_basis_rule; -- COST or NBV
9422 
9423       --* Get system deprn amount if subtraction flag is 'Y'
9424       if nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y' then
9425 
9426         if (p_log_level_rec.statement_level) then
9427           fa_debug_pkg.add(l_calling_fn, '++ Logic in case the subtraction flag is Y (1)' , '+++');
9428           fa_debug_pkg.add(l_calling_fn, 'h_processing_fiscal_year', h_processing_fiscal_year, p_log_level_rec => p_log_level_rec);
9429         end if;
9430 
9431          h_first_period_counter := NULL;
9432          h_temp_system_deprn_amount := 0;
9433          h_temp_system_bonus_deprn := 0;
9434 
9435          For m IN 1.. fa_amort_pvt.t_period_counter.COUNT LOOP
9436            if fa_amort_pvt.t_fiscal_year(m) = h_processing_fiscal_year
9437               and fa_amort_pvt.t_period_counter(m) <= h_processing_period_counter then
9438 
9439               if h_first_period_counter is null then
9440                 h_first_period_counter := fa_amort_pvt.t_period_counter(m);
9441               elsif h_first_period_counter > fa_amort_pvt.t_period_counter(m) then
9442                 h_first_period_counter := fa_amort_pvt.t_period_counter(m);
9443               end if;
9444 
9445               if (p_log_level_rec.statement_level) then
9446                 fa_debug_pkg.add(l_calling_fn, '++ Logic in case the subtraction flag is Y (2-1)' , '+++');
9447                 fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_period_counter(m)', fa_amort_pvt.t_period_counter(m));
9448                 fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_system_deprn_amount(m)', fa_amort_pvt.t_system_deprn_amount(m));
9449                 fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_system_bonus_deprn_amount(m)',
9450                                                              fa_amort_pvt.t_system_bonus_deprn_amount(m));
9451               end if;
9452 
9453               h_temp_system_deprn_amount := nvl(h_temp_system_deprn_amount,0) + nvl(fa_amort_pvt.t_system_deprn_amount(m),0);
9454               h_temp_system_bonus_deprn := nvl(h_temp_system_bonus_deprn,0) + nvl(fa_amort_pvt.t_system_bonus_deprn_amount(m),0);
9455 
9456               if (p_log_level_rec.statement_level) then
9457                 fa_debug_pkg.add(l_calling_fn, '++ Logic in case the subtraction flag is Y (2-2)' , '+++');
9458                 fa_debug_pkg.add(l_calling_fn, 'h_first_period_counter', h_first_period_counter, p_log_level_rec => p_log_level_rec);
9459                 fa_debug_pkg.add(l_calling_fn, 'h_temp_system_deprn:bonus_amount', h_temp_system_deprn_amount||':'||h_temp_system_bonus_deprn, p_log_level_rec => p_log_level_rec);
9460               end if;
9461           end if;
9462         End Loop;
9463 
9464         if h_first_period_counter is null then -- NO summation is calculated from memory table
9465           if p_mrc_sob_type_code <> 'R' then
9466             open GET_GROUP_SYSTEM_INFO(h_processing_fiscal_year, h_processing_period_counter);
9467             fetch GET_GROUP_SYSTEM_INFO into h_group_system_deprn_amount, h_group_system_bonus_deprn;
9468             close GET_GROUP_SYSTEM_INFO;
9469           else
9470             open GET_GROUP_SYSTEM_INFO_MRC(h_processing_fiscal_year, h_processing_period_counter);
9471             fetch GET_GROUP_SYSTEM_INFO_MRC into h_group_system_deprn_amount, h_group_system_bonus_deprn;
9472             close GET_GROUP_SYSTEM_INFO_MRC;
9473           end if;
9474         else -- some amounts has been calculated
9475           if p_mrc_sob_type_code <> 'R' then
9476             open GET_GROUP_SYSTEM_INFO(h_processing_fiscal_year, h_first_period_counter - 1);
9477             fetch GET_GROUP_SYSTEM_INFO into h_group_system_deprn_amount, h_group_system_bonus_deprn;
9478             close GET_GROUP_SYSTEM_INFO;
9479           else
9480             open GET_GROUP_SYSTEM_INFO_MRC(h_processing_fiscal_year, h_first_period_counter -1);
9481             fetch GET_GROUP_SYSTEM_INFO_MRC into h_group_system_deprn_amount, h_group_system_bonus_deprn;
9482             close GET_GROUP_SYSTEM_INFO_MRC;
9483           end if;
9484           h_group_system_deprn_amount := nvl(h_group_system_deprn_amount,0) + nvl(h_temp_system_deprn_amount,0);
9485           h_group_system_bonus_deprn := nvl(h_group_system_bonus_deprn,0) + nvl(h_temp_system_bonus_deprn,0);
9486 
9487         end if;
9488 
9489         if (p_log_level_rec.statement_level) then
9490           fa_debug_pkg.add(l_calling_fn, '++ Logic in case the subtraction flag is Y (3)' , '+++');
9491           fa_debug_pkg.add(l_calling_fn, 'h_group_system_deprn:bonus_amount', h_group_system_deprn_amount||':'||h_group_system_bonus_deprn, p_log_level_rec => p_log_level_rec);
9492         end if;
9493 
9494       end if; -- Subtraction
9495 
9496 
9497       --* Prepare to call Deprn Basis Rule - 1
9498 
9499       --* If this proceesing period is last period of the fiscal year set h_eofy_flag = 'Y'
9500       --* call depreciable basis rule function to update adjusted cost for the next year
9501       if h_period_num = h_period_per_fiscal_year then
9502          h_eofy_flag := 'Y';
9503       else
9504          h_eofy_flag := 'N';
9505       end if;
9506 
9507       fa_rule_in.event_type := 'AMORT_ADJ';
9508       fa_rule_in.book_type_code := h_book_type_code;
9509       fa_rule_in.fiscal_year := h_fiscal_year;
9510       fa_rule_in.period_num := h_period_num;
9511       fa_rule_in.period_counter := h_processing_period_counter;
9512       fa_rule_in.method_code := h_deprn_method_code;
9513       fa_rule_in.life_in_months := h_life_in_months;
9514       fa_rule_in.method_type := fa_cache_pkg.fazccmt_record.rate_source_rule;
9515       fa_rule_in.calc_basis := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
9516       fa_rule_in.mrc_sob_type_code := p_mrc_sob_type_code;
9517       fa_rule_in.set_of_books_id := h_set_of_books_id;
9518       fa_rule_in.group_asset_id := h_group_asset_id;
9519       fa_rule_in.recognize_gain_loss := h_group_recognize_gain_loss;
9520 
9521       --* Group Level information (50% application) if the basis rule assigned to this method enables reduction rate
9522       if fa_cache_pkg.fazcdrd_record.rule_name in ('YEAR END BALANCE WITH POSITIVE REDUCTION',
9523                                                    'YEAR END BALANCE WITH HALF YEAR RULE') then
9524 
9525         if not check_reduction_application(p_rule_name => fa_cache_pkg.fazcdrd_record.rule_name,
9526                                            p_group_asset_id => h_group_asset_id,
9527                                            p_book_type_code => h_book_type_code,
9528                                            p_period_counter => h_processing_period_counter,
9529                                            p_group_deprn_basis => h_group_deprn_basis,
9530                                            p_reduction_rate => p_asset_fin_rec_new.reduction_rate,
9531                                            p_group_eofy_rec_cost => h_group_eofy_rec_cost,
9532                                            p_group_eofy_salvage_value => h_group_eofy_salvage_value,
9533                                            p_group_eofy_reserve => h_group_eofy_reserve,
9534                                            p_mrc_sob_type_code => p_mrc_sob_type_code,
9535                                            p_set_of_books_id =>
9536 h_set_of_books_id,
9537                                            x_apply_reduction_flag => h_apply_reduction_flag,
9538                                            p_log_level_rec => p_log_level_rec) then
9539             raise pop_mem_table_err;
9540         end if;
9541        end if;
9542 
9543        if p_mrc_sob_type_code <> 'R' then -- Primary Book's treatment
9544 
9545          --* Loop for all member assets which has existed in the processing period
9546          For ALL_MEMBER in GET_MEMBER_ASSETS(h_processing_fiscal_year, h_processing_period_num) Loop
9547            h_member_asset_id := ALL_MEMBER.asset_id;
9548 
9549            h_max_thid_in_this_group := all_member.max_trx_id_in_this_group ;
9550            h_max_thid_in_other_group := all_member.max_trx_id_in_other_group;
9551 
9552            if (p_log_level_rec.statement_level) then
9553              fa_debug_pkg.add(l_calling_fn, '*** Check member has been reclassified out or not ***',
9554                                           h_member_asset_id||':'||h_processing_fiscal_year||':'||h_processing_period_num);
9555            end if;
9556 
9557            --* First of all, check if this selected member is actually reclassed out or not
9558            if h_max_thid_in_this_group < nvl(h_max_thid_in_other_group,-1) then
9559              if (p_log_level_rec.statement_level) then
9560                fa_debug_pkg.add(l_calling_fn, '*** This member has been reclassified out ***', '***');
9561                fa_debug_pkg.add(l_calling_fn, 'h_max_thid_in_this_group:h_max_thid_in_other_group',
9562                                                h_max_thid_in_this_group||':'||h_max_thid_in_other_group, p_log_level_rec => p_log_level_rec);
9563              end if;
9564              goto skip_asset;
9565            end if;
9566 
9567            open CHK_FULLY_RESERVE_RETIRED(h_member_asset_id);
9568            fetch CHK_FULLY_RESERVE_RETIRED into h_allocate_to_fully_ret_flag,h_allocate_to_fully_rsv_flag,
9569                                                 h_perd_ctr_fully_retired, h_perd_ctr_fully_reserved;
9570            close CHK_FULLY_RESERVE_RETIRED;
9571 
9572            if nvl(h_allocate_to_fully_ret_flag,'N') = 'N' and
9573               nvl(h_perd_ctr_fully_retired,h_processing_period_counter+1) < h_processing_period_counter then
9574 
9575               if (p_log_level_rec.statement_level) then
9576                  fa_debug_pkg.add(l_calling_fn, 'Skip this asset due to fully retired', h_member_asset_id, p_log_level_rec => p_log_level_rec);
9577               end if;
9578               goto skip_asset;
9579            end if;
9580 
9581            if nvl(h_allocate_to_fully_rsv_flag,'N') = 'N' and
9582               nvl(h_perd_ctr_fully_reserved,h_processing_period_counter+1) < h_processing_period_counter then
9583 
9584               if (p_log_level_rec.statement_level) then
9585                  fa_debug_pkg.add(l_calling_fn, 'Skip this asset due to fully reserved', h_member_asset_id, p_log_level_rec => p_log_level_rec);
9586               end if;
9587               goto skip_asset;
9588            end if;
9589 
9590            if (p_log_level_rec.statement_level) then
9591              fa_debug_pkg.add(l_calling_fn, '*** Member Loop Starts ***', '***');
9592              fa_debug_pkg.add(l_calling_fn, 'Processing Member Asset', h_member_asset_id, p_log_level_rec => p_log_level_rec);
9593            end if;
9594 
9595            --* Process get delta of cost, rec cost, salvage value etc...
9596            --* Query transaction header id of this member assetin this period
9597            h_trans_exists_flag := FALSE;
9598            h_transaction_header_id := to_number(NULL);
9599            h_delta_cost := 0;
9600            h_delta_adjusted_cost := 0;  --Bug8484007
9601            h_new_delta_adjusted_cost := 0;  --Bug8484007
9602            h_delta_recoverable_cost := 0;
9603            h_new_adjusted_rec_cost := to_number(NULL);
9604 
9605            h_adj_cost := 0;
9606            h_adj_rec_cost := 0;
9607            h_adj_salvage_value := 0;
9608 
9609            h_new_limit_type := NULL;
9610            h_new_deprn_limit := to_number(NULL);
9611            h_new_deprn_limit_amount := to_number(NULL);
9612            h_new_group_asset_id := h_group_asset_id;
9613 
9614            h_recognize_gain_loss := NULL;
9615            h_adj_eofy_reserve := 0;
9616            h_new_eofy_reserve := 0;
9617            h_adj_reserve_retired := 0;
9618            h_new_reserve_retired := 0;
9619 
9620            h_new_perd_ctr_ret := to_number(NULL);
9621            h_eofy_reserve_zero := 'N';
9622 
9623            For ALL_TRANS IN ALL_TRANS_IN_PERIOD(h_processing_fiscal_year,h_processing_period_num, h_member_asset_id) Loop
9624              h_trans_exists_flag := TRUE;
9625              h_transaction_header_id := ALL_TRANS.transaction_header_id;
9626              h_transaction_type_code := ALL_TRANS.transaction_type_code;
9627              h_transaction_key := ALL_TRANS.transaction_key; --Bug8484007
9628 
9629              --* query delta for this transaction
9630              open GET_DELTA_FOR_MEMBER(h_member_asset_id, h_transaction_header_id);
9631              fetch GET_DELTA_FOR_MEMBER into h_delta_cost, h_delta_recoverable_cost, h_new_limit_type, h_old_limit_type,
9632                                              h_new_deprn_limit, h_new_deprn_limit_amount, h_depreciate_flag, h_new_group_asset_id
9633                                              ,h_new_perd_ctr_ret,h_new_delta_adjusted_cost; --Bug8484007
9634              if GET_DELTA_FOR_MEMBER%FOUND then
9635                close GET_DELTA_FOR_MEMBER;
9636                h_adj_cost := h_adj_cost + h_delta_cost;
9637                h_adj_rec_cost := h_adj_rec_cost + h_delta_recoverable_cost;
9638                h_adj_salvage_value := h_adj_cost - h_adj_rec_cost;
9639 
9640                if (p_log_level_rec.statement_level) then
9641                  fa_debug_pkg.add(l_calling_fn, '++++ LOOP FOR GETTING DELTA *** THID', h_transaction_header_id);
9642                  fa_debug_pkg.add(l_calling_fn, 'h_delta_cost:h_delta_rec_cost', h_delta_cost||':'||h_delta_recoverable_cost, p_log_level_rec => p_log_level_rec);
9643                  fa_debug_pkg.add(l_calling_fn, 'h_adj_cost:h_adj_rec_cost:h_adj_salvage', h_adj_cost||':'||h_adj_rec_cost||':'||h_adj_salvage_value, p_log_level_rec => p_log_level_rec);
9644                  fa_debug_pkg.add(l_calling_fn, 'h_new_perd_ctr_ret', h_new_perd_ctr_ret, p_log_level_rec => p_log_level_rec);
9645                  fa_debug_pkg.add(l_calling_fn, 'fa_cache_pkg.fazcdrd_record.rule_name',
9646                                   fa_cache_pkg.fazcdrd_record.rule_name, p_log_level_rec => p_log_level_rec);
9647                end if;
9648 
9649                if nvl(h_transaction_type_code,'NULL') in ('PARTIAL RETIREMENT','FULL RETIREMENT') then
9650                  open GET_RETIREMENTS(h_transaction_header_id);
9651                  fetch GET_RETIREMENTS into h_recognize_gain_loss, h_adj_eofy_reserve, h_adj_reserve_retired;
9652                  close GET_RETIREMENTS;
9653 
9654                  -- ENERGY
9655                  -- reserve retired will not be equal to cost when recognize_gain_loss = 'NO'
9656                  -- ONLY if fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE'
9657                  if nvl(h_recognize_gain_loss,'NO') = 'NO' and -- ENERGY
9658                     (nvl(fa_cache_pkg.fazcdrd_record.rule_name, 'NONE') <> 'ENERGY PERIOD END BALANCE') then
9659                    h_new_eofy_reserve := 0;
9660                  else
9661                    h_new_eofy_reserve := nvl(h_new_eofy_reserve,0) + nvl(h_adj_eofy_reserve,0);
9662                    h_new_reserve_retired := nvl(h_new_reserve_retired,0) + nvl(h_adj_reserve_retired,0);
9663                  end if;
9664 
9665                  if (p_log_level_rec.statement_level) then
9666                    fa_debug_pkg.add(l_calling_fn, '++++ LOOP FOR GETTING RETIREMENT *** THID', h_transaction_header_id);
9667                    fa_debug_pkg.add(l_calling_fn, 'h_new_eofy_reserve:h_new_reserve_retired',
9668                                     h_new_eofy_reserve||':'||h_new_reserve_retired, p_log_level_rec => p_log_level_rec);
9669                  end if;
9670                elsif (nvl(h_transaction_type_code,'NULL') = 'REINSTATEMENT') and
9671                      (nvl(fa_cache_pkg.fazcdrd_record.rule_name, 'NONE') = 'ENERGY PERIOD END BALANCE') then
9672                      --
9673                  open GET_REINSTATEMENT(h_transaction_header_id);
9674                  fetch GET_REINSTATEMENT into h_recognize_gain_loss, h_adj_eofy_reserve, h_adj_reserve_retired;
9675                  close GET_REINSTATEMENT;
9676 
9677                  if (p_log_level_rec.statement_level) then
9678                     fa_debug_pkg.add(l_calling_fn, 'h_adj_reserve_retired', h_adj_reserve_retired, p_log_level_rec => p_log_level_rec);
9679                     fa_debug_pkg.add(l_calling_fn, 'h_new_reserve_retired', h_new_reserve_retired, p_log_level_rec => p_log_level_rec);
9680                  end if;
9681 
9682                  h_new_reserve_retired := nvl(h_new_reserve_retired,0) + nvl(h_adj_reserve_retired,0);
9683                end if; -- Retirement treatment
9684 
9685                -- Added for bug 8484007
9686                if (h_transaction_key = 'RA') then
9687                   h_delta_adjusted_cost := h_delta_adjusted_cost + h_new_delta_adjusted_cost;
9688                end if;
9689                if (p_log_level_rec.statement_level) then
9690                   fa_debug_pkg.add(l_calling_fn, 'h_new_delta_adjusted_cost', h_new_delta_adjusted_cost, p_log_level_rec);
9691                   fa_debug_pkg.add(l_calling_fn, 'h_delta_adjusted_cost', h_delta_adjusted_cost, p_log_level_rec);
9692                end if;
9693 
9694              else  --   if GET_DELTA_FOR_MEMBER%NOTFOUND then
9695                close GET_DELTA_FOR_MEMBER;
9696                 -- Check if this transaction is reclassification and if this is a reason why the delta cannot be found, then
9697                 -- just skip this member's process.
9698                open GET_NEW_GROUP(h_member_asset_id, h_transaction_header_id);
9699                fetch GET_NEW_GROUP into h_new_group_asset_id;
9700                if GET_NEW_GROUP%FOUND then
9701                  if (p_log_level_rec.statement_level) then
9702                    fa_debug_pkg.add(l_calling_fn, '++++ Check the transaction is reclass or not ***', h_transaction_header_id);
9703                    fa_debug_pkg.add(l_calling_fn, 'h_group_asset_id:h_new_group_asset_id', h_group_asset_id||':'||h_new_group_asset_id, p_log_level_rec => p_log_level_rec);
9704                  end if;
9705                  if h_group_Asset_id <> nvl(h_new_group_Asset_id,-99) then
9706                    close GET_NEW_GROUP;
9707                    goto skip_thid;
9708                  end if;
9709                end if;
9710                close GET_NEW_GROUP;
9711 
9712                if (p_log_level_rec.statement_level) then
9713                  fa_debug_pkg.add(l_calling_fn, '++++ Just set null to all ****', h_transaction_header_id);
9714                end if;
9715             end if;
9716     <<skip_thid>>
9717                if (p_log_level_rec.statement_level) then
9718                  fa_debug_pkg.add(l_calling_fn, '*** This is the end of loop ***', h_transaction_header_id);
9719                end if;
9720 
9721            End loop;
9722 
9723            if (p_log_level_rec.statement_level) then
9724              fa_debug_pkg.add(l_calling_fn, '++++ AFTER LOOP FOR GETTING DELTA ****', '****');
9725              fa_debug_pkg.add(l_calling_fn, 'h_new_limit_type:new_limit:new_limit_amount',
9726                                              h_new_limit_type||':'||h_new_deprn_limit||':'||h_new_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
9727              fa_debug_pkg.add(l_calling_fn, 'h_new_group_asset_id', h_new_group_Asset_id, p_log_level_rec => p_log_level_rec);
9728            end if;
9729 
9730            h_find_flag_3 := FALSE;
9731 
9732          --* If the bs table of the previous period exists, query bs table
9733          if nvl(p_populate_for_recalc_period,'N') = 'T' then
9734              open GET_PRV_ROW_BS;
9735              fetch GET_PRV_ROW_BS into h_old_cost,
9736                                        h_old_salvage_value,
9737                                        h_old_recoverable_cost,
9738                                        h_old_adjusted_cost,
9739                                        h_old_adjusted_rec_cost,
9740                                        h_deprn_reserve,
9741                                        h_bonus_deprn_reserve,
9742                                        h_ytd_deprn,
9743                                        h_bonus_ytd_deprn,
9744                                        h_eofy_reserve;
9745              if GET_PRV_ROW_BS%NOTFOUND then
9746                 if (p_log_level_rec.statement_level) then
9747                    fa_debug_pkg.add(l_calling_fn, 'No data in FA_BOOKS_SUMMARY', '***');
9748                 end if;
9749              else
9750                 if (p_log_level_rec.statement_level) then
9751                    fa_debug_pkg.add(l_calling_fn, 'Data in FA_BOOKS_SUMMARY', 'FOUND', p_log_level_rec => p_log_level_rec);
9752                 end if;
9753                 if h_processing_period_num = 1 then
9754                   h_ytd_deprn := 0;
9755                   h_bonus_ytd_deprn := 0;
9756                   h_eofy_reserve := h_deprn_reserve;
9757                 end if;
9758                 h_find_flag_3 := TRUE;
9759                 if h_new_limit_type is null then
9760                   h_new_limit_type := 'AMT';
9761                   h_new_deprn_limit_amount := h_old_cost - h_old_adjusted_rec_cost;
9762                 end if;
9763              end if;
9764 
9765              close GET_PRV_ROW_BS;
9766 
9767           else -- Other case
9768 
9769            --* Check if this asset exists in p_track_member table
9770            k := 0;
9771            if (p_log_level_rec.statement_level) then
9772              fa_debug_pkg.add(l_calling_fn, 'p_track_member_table.count', p_track_member_table.COUNT, p_log_level_rec => p_log_level_rec);
9773            end if;
9774            /* Bug 7231274, added for bug - start */
9775            k := search_index_table(h_processing_period_counter,h_member_asset_id,
9776                              h_group_asset_id, h_set_of_books_id,p_log_level_rec);
9777 
9778            if ( k > 0 ) then
9779               h_find_flag_3 := TRUE;
9780               l_processing_ind := k; -- Keep index for memory table.
9781               h_old_cost := p_track_member_table(k).cost;
9782               h_old_salvage_value := p_track_member_table(k).salvage_value;
9783               h_old_recoverable_cost := p_track_member_table(k).recoverable_cost;
9784               h_old_adjusted_rec_cost := p_track_member_table(k).adjusted_recoverable_cost;
9785 
9786               h_deprn_reserve := p_track_member_table(k).deprn_reserve;
9787               h_bonus_deprn_reserve := p_track_member_table(k).bonus_deprn_reserve;
9788               h_ytd_deprn := p_track_member_table(k).ytd_deprn;
9789               h_bonus_ytd_deprn := p_track_member_table(k).bonus_ytd_deprn;
9790               h_eofy_reserve := p_track_member_table(k).eofy_reserve;
9791 
9792               if h_new_limit_type is null then
9793                 h_new_limit_type := 'AMT';
9794                 h_new_deprn_limit_amount := h_old_cost - h_old_adjusted_rec_cost;
9795               end if;
9796 
9797               if nvl(h_new_group_asset_id, -99) <> h_group_asset_id then
9798                 delete_track_index(h_processing_period_counter, h_member_asset_id,
9799                         h_group_asset_id,h_set_of_books_id,p_log_level_rec);
9800 
9801                 p_track_member_table(k).group_asset_id := h_new_group_asset_id;
9802 
9803                 put_track_index(h_processing_period_counter, h_member_asset_id,h_new_group_asset_id,h_set_of_books_id,k,p_log_level_rec);
9804 
9805                 if (p_log_level_rec.statement_level) then
9806                   fa_debug_pkg.add(l_calling_fn, 'This member does not belong to this group anymore', '+++', p_log_level_rec => p_log_level_rec);
9807                 end if;
9808               end if;
9809            end if;
9810            /* Bug 7231274, added for bug - end */
9811 
9812          end if; -- If bs table should be queried or not...
9813 
9814            if nvl(h_new_group_asset_id, -99) <> h_group_asset_id then
9815              goto skip_asset;
9816            end if;
9817 
9818            if not (h_find_flag_3) then  -- This is a case the processing member asset doesn't exist in memory table
9819               h_old_cost := 0;
9820               h_old_salvage_value := 0;
9821               h_old_recoverable_cost := 0;
9822               h_old_adjusted_rec_cost := 0;
9823 
9824               h_bonus_deprn_reserve := 0;
9825               h_bonus_ytd_deprn := 0;
9826               --* This is a case when this asset is added in this period.
9827               open GET_RESERVE_AT_ADDITION(h_member_asset_id, h_processing_period_counter - 1);
9828               fetch GET_RESERVE_AT_ADDITION into h_deprn_source_code, h_ytd_deprn, h_deprn_reserve;
9829               if GET_RESERVE_AT_ADDITION%NOTFOUND then
9830                 -- Set zero initial reserve
9831 
9832                 if (p_log_level_rec.statement_level) then
9833                    fa_debug_pkg.add(l_calling_fn, 'Member asset which cannot find DEPRN SUMMARY table',
9834                                     h_member_asset_id, p_log_level_rec => p_log_level_rec);
9835                 end if;
9836 
9837                 h_ytd_deprn := 0;
9838                 h_deprn_reserve := 0;
9839               elsif h_deprn_source_code <> 'BOOKS' then
9840                 -- Set zero initial reserve
9841 
9842                 if (p_log_level_rec.statement_level) then
9843                    fa_debug_pkg.add(l_calling_fn, 'This Member assets record', h_deprn_source_code, p_log_level_rec => p_log_level_rec);
9844                 end if;
9845                 h_ytd_deprn := 0;
9846                 h_deprn_reserve := 0;
9847               end if;
9848               close GET_RESERVE_AT_ADDITION;
9849            end if;
9850 
9851 
9852            if nvl(p_populate_for_recalc_period,'N') = 'T'  or
9853               not (h_find_flag_3) then
9854 
9855               -- Then enter this asset to extended memory table at this moment
9856               l_new_ind := nvl(p_track_member_table.COUNT,0) + 1;
9857               l_processing_ind := l_new_ind;
9858               if (p_log_level_rec.statement_level) then
9859                 fa_debug_pkg.add(l_calling_fn, 'l_new_ind', l_new_ind, p_log_level_rec => p_log_level_rec);
9860               end if;
9861               p_track_member_table(l_new_ind).group_asset_id := h_group_asset_id;
9862               p_track_member_table(l_new_ind).member_asset_id := h_member_asset_id;
9863               p_track_member_table(l_new_ind).set_of_books_id := h_set_of_books_id;
9864               p_track_member_table(l_new_ind).period_counter := h_processing_period_counter;
9865               p_track_member_table(l_new_ind).fiscal_year := h_fiscal_year;
9866               p_track_member_table(l_new_ind).cost := h_old_cost;
9867               p_track_member_table(l_new_ind).salvage_value := h_old_salvage_value;
9868               p_track_member_table(l_new_ind).adjusted_cost := h_old_recoverable_cost;
9869               p_track_member_table(l_new_ind).recoverable_cost := h_old_recoverable_cost;
9870               p_track_member_table(l_new_ind).adjusted_recoverable_cost := h_old_adjusted_rec_cost;
9871               p_track_member_table(l_new_ind).deprn_reserve := h_deprn_reserve;
9872               p_track_member_table(l_new_ind).ytd_deprn := h_ytd_deprn;
9873               p_track_member_table(l_new_ind).bonus_deprn_reserve := 0;
9874               p_track_member_table(l_new_ind).bonus_ytd_deprn := 0;
9875               if nvl(p_populate_for_recalc_period,'N') = 'T' and (h_find_flag_3) then
9876                 p_track_member_table(l_new_ind).eofy_reserve := h_eofy_reserve;
9877               else
9878                 p_track_member_table(l_new_ind).eofy_reserve := h_deprn_reserve - h_ytd_deprn;
9879                 h_eofy_reserve := h_deprn_reserve - h_ytd_deprn;
9880               end if;
9881               p_track_member_table(l_new_ind).eofy_recoverable_cost := 0;
9882               p_track_member_table(l_new_ind).eop_recoverable_cost := 0;
9883               p_track_member_table(l_new_ind).eofy_salvage_value := 0;
9884               p_track_member_table(l_new_ind).eop_salvage_value := 0;
9885               p_track_member_table(l_new_ind).set_of_books_id := nvl(h_set_of_books_id, -99);
9886 
9887               /* Populate index table */
9888               put_track_index(h_processing_period_counter,h_member_asset_id,h_group_asset_id,h_set_of_books_id,l_new_ind,p_log_level_rec);
9889 
9890            end if;
9891 
9892          --* Member Asset level information
9893            --* adjust by the delta
9894            h_new_cost := h_old_cost + h_adj_cost;
9895            h_new_recoverable_cost := h_old_recoverable_cost + h_adj_rec_cost;
9896            h_new_salvage_value := h_old_salvage_value + h_adj_salvage_value;
9897 
9898            if nvl(h_new_limit_type,'NONE') = 'PCT' then
9899              h_temp_limit_amount := h_new_cost*(1 - h_new_deprn_limit);
9900              fa_round_pkg.fa_floor(h_temp_limit_amount,h_book_type_code, p_log_level_rec => p_log_level_rec);
9901              h_new_adjusted_rec_cost := h_new_cost - h_temp_limit_amount;
9902            elsif nvl(h_new_limit_type,'NONE') = 'NONE' then
9903              h_new_adjusted_rec_cost := h_new_recoverable_cost; -- In this case, it should be same as new recoverable cost
9904            else
9905              h_new_adjusted_rec_cost := h_new_cost - h_new_deprn_limit_amount;
9906            end if;
9907 
9908            if (p_log_level_rec.statement_level) then
9909              fa_debug_pkg.add(l_calling_fn, '++++ AFTER GETTING NEW COST etc ***', '*****');
9910              fa_debug_pkg.add(l_calling_fn, 'h_new_cost:h_new_rec_cost:h_new_salvage:h_new_adj_rec_cost',
9911                                              h_new_cost||':'||h_new_recoverable_cost||':'||h_new_salvage_value||':'||h_new_adjusted_rec_cost, p_log_level_rec => p_log_level_rec);
9912            end if;
9913 
9914            -- Get Asset type
9915            select ASSET_TYPE
9916              into fa_rule_in.asset_type
9917              from fa_additions_b
9918             where asset_id = h_member_asset_id;
9919 
9920            -- Get eofy, eop amounts
9921            if not FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP
9922                         (p_asset_id =>       h_member_asset_id,
9923                          p_book_type_code => h_book_type_code,
9924                          p_fiscal_year =>    h_fiscal_year,
9925                          p_period_num =>     h_period_num,
9926                          p_mrc_sob_type_code => p_mrc_sob_type_code,
9927                          p_set_of_books_id => h_set_of_books_id,
9928                          x_eofy_recoverable_cost => h_new_eofy_recoverable_cost,
9929                          x_eofy_salvage_value => h_new_eofy_salvage_value,
9930                          x_eop_recoverable_cost => h_new_eop_recoverable_cost,
9931                          x_eop_salvage_value => h_new_eop_salvage_value, p_log_level_rec => p_log_level_rec) then
9932              raise pop_mem_table_err;
9933            end if;
9934 
9935            fa_rule_in.asset_id := h_member_asset_id;
9936            fa_rule_in.depreciate_flag := h_depreciate_flag;
9937            fa_rule_in.adjustment_amount := nvl(h_new_cost,0) - nvl(h_old_cost,0);
9938            fa_rule_in.cost := h_new_cost;
9939            fa_rule_in.salvage_value := h_new_salvage_value;
9940            fa_rule_in.recoverable_cost := h_new_recoverable_cost;
9941            fa_rule_in.adjusted_cost := h_old_adjusted_cost;
9942            fa_rule_in.current_total_rsv := h_deprn_reserve + nvl(h_new_reserve_retired,0) - nvl(h_delta_adjusted_cost,0); --Bug8484007
9943            fa_rule_in.current_rsv := h_deprn_reserve + nvl(h_new_reserve_retired,0) - nvl(h_bonus_deprn_reserve,0) - nvl(h_delta_adjusted_cost,0); --Bug8484007
9944            fa_rule_in.current_total_ytd := h_ytd_deprn;
9945            fa_rule_in.current_ytd := h_ytd_deprn - nvl(h_bonus_ytd_deprn,0);
9946            fa_rule_in.old_adjusted_cost := h_old_adjusted_cost;
9947            fa_rule_in.eofy_reserve := h_eofy_reserve - nvl(h_new_eofy_reserve,0);
9948 
9949            fa_rule_in.eofy_recoverable_cost := h_new_eofy_recoverable_cost;
9950            fa_rule_in.eop_recoverable_cost := h_new_eop_recoverable_cost;
9951            fa_rule_in.eofy_salvage_value := h_new_eofy_salvage_value;
9952            fa_rule_in.eop_salvage_value := h_new_eop_salvage_value;
9953            fa_rule_in.apply_reduction_flag := h_apply_reduction_flag;
9954 
9955            if (p_log_level_rec.statement_level) then
9956              if not display_debug_message(fa_rule_in => fa_rule_in,
9957                                           p_calling_fn => l_calling_fn,
9958 p_log_level_rec=> p_log_level_rec) then
9959                fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
9960              end if;
9961            end if;
9962 
9963            -- Call Deprn Basis Rule for this transaction or period
9964            if (not fa_calc_deprn_basis1_pkg.faxcdb(rule_in => fa_rule_in,
9965                                                    rule_out => fa_rule_out, p_log_level_rec => p_log_level_rec)) then
9966              if (p_log_level_rec.statement_level) then
9967                fa_debug_pkg.add(l_calling_fn, 'FAXCDB is errored out', '+++', p_log_level_rec => p_log_level_rec);
9968              end if;
9969              raise pop_mem_table_err;
9970            end if;
9971 
9972            if (p_log_level_rec.statement_level) then
9973              fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', fa_rule_in.asset_id, p_log_level_rec => p_log_level_rec);
9974              fa_debug_pkg.add(l_calling_fn, 'fa_rule_out.new_adjusted_cost', fa_rule_out.new_adjusted_cost, p_log_level_rec => p_log_level_rec);
9975              fa_debug_pkg.add(l_calling_fn, 'h_current_cost', h_new_cost, p_log_level_rec => p_log_level_rec);
9976            end if;
9977 
9978            --* Set calculated adjusted cost into p_track_member_table
9979 
9980             p_track_member_table(l_processing_ind).cost := h_new_cost;
9981             p_track_member_table(l_processing_ind).salvage_value := h_new_salvage_value;
9982             p_track_member_table(l_processing_ind).recoverable_cost := h_new_recoverable_cost;
9983             p_track_member_table(l_processing_ind).adjusted_cost := fa_rule_out.new_adjusted_cost;
9984             p_track_member_table(l_processing_ind).adjusted_recoverable_cost := h_new_adjusted_rec_cost;
9985             p_track_member_table(l_processing_ind).deprn_reserve := p_track_member_table(l_processing_ind).deprn_reserve - nvl(h_delta_adjusted_cost,0); --Bug8484007
9986 
9987             if h_new_reserve_retired is not null then
9988               p_track_member_table(l_processing_ind).deprn_reserve := p_track_member_table(l_processing_ind).deprn_reserve + nvl(h_new_reserve_retired,0);
9989             end if;
9990             if h_new_eofy_reserve is not null then
9991               p_track_member_table(l_processing_ind).eofy_reserve := p_track_member_table(l_processing_ind).eofy_reserve - nvl(h_new_eofy_reserve,0);
9992             end if;
9993 
9994             if h_new_perd_ctr_ret is not null then
9995               if h_new_perd_ctr_ret <= h_processing_period_counter then
9996                 p_track_member_table(l_processing_ind).fully_retired_flag := 'Y';
9997               end if;
9998             end if;
9999 
10000             if (p_log_level_rec.statement_level) then
10001               fa_debug_pkg.add(l_calling_fn, 'New p_track_member_table is as follows: Indicator', l_processing_ind, p_log_level_rec => p_log_level_rec);
10002               if not display_debug_message2(l_processing_ind, l_calling_fn,
10003 p_log_level_rec) then
10004                  null;
10005               end if;
10006             end if;
10007 
10008     <<skip_asset>>
10009             if (p_log_level_rec.statement_level) then
10010               fa_debug_pkg.add(l_calling_fn, '+++ End of Loop +++', '++++', p_log_level_rec => p_log_level_rec);
10011             end if;
10012 
10013          End Loop; -- (For ALL_MMEBER)
10014 
10015     else -- Reporting Book's treatment
10016 
10017          --* Loop for all member assets which has existed in the processing period
10018          For ALL_MEMBER in  GET_MEMBER_ASSETS_MRC(h_processing_fiscal_year,h_processing_period_num) Loop
10019            h_member_asset_id := ALL_MEMBER.asset_id;
10020 
10021            h_max_thid_in_this_group := all_member.max_trx_id_in_this_group ;
10022            h_max_thid_in_other_group := all_member.max_trx_id_in_other_group;
10023 
10024            if (p_log_level_rec.statement_level) then
10025              fa_debug_pkg.add(l_calling_fn, '*** Check member has been reclassified out or not ***',
10026                                           h_member_asset_id||':'||h_processing_fiscal_year||':'||h_processing_period_num);
10027            end if;
10028 
10029            if h_max_thid_in_this_group < nvl(h_max_thid_in_other_group,-1) then
10030              if (p_log_level_rec.statement_level) then
10031                fa_debug_pkg.add(l_calling_fn, '*** This member has been reclassified out ***', '***');
10032                fa_debug_pkg.add(l_calling_fn, 'h_max_thid_in_this_group:h_max_thid_in_other_group',
10033                                                h_max_thid_in_this_group||':'||h_max_thid_in_other_group, p_log_level_rec => p_log_level_rec);
10034              end if;
10035              goto skip_asset;
10036            end if;
10037 
10038            open CHK_FULLY_RESERVE_RETIRED_MRC(h_member_asset_id);
10039            fetch CHK_FULLY_RESERVE_RETIRED_MRC into h_allocate_to_fully_ret_flag,h_allocate_to_fully_rsv_flag,
10040                                                 h_perd_ctr_fully_retired, h_perd_ctr_fully_reserved;
10041            close CHK_FULLY_RESERVE_RETIRED_MRC;
10042 
10043            if nvl(h_allocate_to_fully_ret_flag,'N') = 'N' and
10044               nvl(h_perd_ctr_fully_retired,h_processing_period_counter+1) < h_processing_period_counter then
10045 
10046               if (p_log_level_rec.statement_level) then
10047                  fa_debug_pkg.add(l_calling_fn, 'Skip this asset due to fully retired',
10048                                   h_member_asset_id, p_log_level_rec => p_log_level_rec);
10049               end if;
10050               goto skip_asset;
10051            end if;
10052 
10053            if nvl(h_allocate_to_fully_rsv_flag,'N') = 'N' and
10054               nvl(h_perd_ctr_fully_reserved,h_processing_period_counter+1) < h_processing_period_counter then
10055 
10056               if (p_log_level_rec.statement_level) then
10057                  fa_debug_pkg.add(l_calling_fn, 'Skip this asset due to fully reserved',
10058                                   h_member_asset_id, p_log_level_rec => p_log_level_rec);
10059               end if;
10060 
10061               goto skip_asset;
10062            end if;
10063 
10064            if (p_log_level_rec.statement_level) then
10065              fa_debug_pkg.add(l_calling_fn, '*** Member Loop Starts ***', '*Reporting Book*');
10066              fa_debug_pkg.add(l_calling_fn, 'Processing Member Asset', h_member_asset_id, p_log_level_rec => p_log_level_rec);
10067            end if;
10068 
10069            --* Process get delta of cost, rec cost, salvage value etc...
10070            --* Query transaction header id of this member assetin this period
10071            h_trans_exists_flag := FALSE;
10072            h_transaction_header_id := to_number(NULL);
10073            h_delta_cost := 0;
10074            h_delta_adjusted_cost := 0; --Bug8484007
10075            h_new_delta_adjusted_cost := 0; --Bug8484007
10076            h_delta_recoverable_cost := 0;
10077            h_new_adjusted_rec_cost := to_number(NULL);
10078 
10079            h_adj_cost := 0;
10080            h_adj_rec_cost := 0;
10081            h_adj_salvage_value := 0;
10082 
10083            h_new_limit_type := NULL;
10084            h_new_deprn_limit := to_number(NULL);
10085            h_new_deprn_limit_amount := to_number(NULL);
10086            h_new_group_asset_id := h_group_asset_id;
10087 
10088            h_recognize_gain_loss := NULL;
10089            h_adj_eofy_reserve := 0;
10090            h_new_eofy_reserve := 0;
10091            h_adj_reserve_retired := 0;
10092            h_new_reserve_retired := 0;
10093 
10094            For ALL_TRANS IN ALL_TRANS_IN_PERIOD(h_processing_fiscal_year,h_processing_period_num, h_member_asset_id) Loop
10095              h_trans_exists_flag := TRUE;
10096              h_transaction_header_id := ALL_TRANS.transaction_header_id;
10097              h_transaction_type_code := ALL_TRANS.transaction_type_code;
10098              h_transaction_key := ALL_TRANS.transaction_key; -- Bug8484007
10099 
10100              --* query delta for this transaction
10101              open GET_DELTA_FOR_MEMBER_MRC(h_member_asset_id, h_transaction_header_id);
10102              fetch GET_DELTA_FOR_MEMBER_MRC into h_delta_cost, h_delta_recoverable_cost, h_new_limit_type, h_old_limit_type,
10103                                              h_new_deprn_limit, h_new_deprn_limit_amount, h_depreciate_flag, h_new_group_Asset_id
10104                                              ,h_new_perd_ctr_ret,h_new_delta_adjusted_cost;
10105              if GET_DELTA_FOR_MEMBER_MRC%FOUND then
10106                close GET_DELTA_FOR_MEMBER_MRC;
10107                h_adj_cost := h_adj_cost + h_delta_cost;
10108                h_adj_rec_cost := h_adj_rec_cost + h_delta_recoverable_cost;
10109                h_adj_salvage_value := h_adj_cost - h_adj_rec_cost;
10110 
10111                if (p_log_level_rec.statement_level) then
10112                  fa_debug_pkg.add(l_calling_fn, '++++ LOOP FOR GETTING DELTA *** THID', h_transaction_header_id);
10113                  fa_debug_pkg.add(l_calling_fn, 'h_delta_cost:h_delta_rec_cost', h_delta_cost||':'||h_delta_recoverable_cost, p_log_level_rec => p_log_level_rec);
10114                  fa_debug_pkg.add(l_calling_fn, 'h_adj_cost:h_adj_rec_cost:h_adj_salvage', h_adj_cost||':'||h_adj_rec_cost||':'||h_adj_salvage_value, p_log_level_rec => p_log_level_rec);
10115                  fa_debug_pkg.add(l_calling_fn, 'h_new_perd_ctr_ret', h_new_perd_ctr_ret, p_log_level_rec => p_log_level_rec);
10116                end if;
10117 
10118                if nvl(h_transaction_type_code,'NULL') in ('PARTIAL RETIREMENT','FULL RETIREMENT') then
10119                  open GET_RETIREMENTS_MRC(h_transaction_header_id);
10120                  fetch GET_RETIREMENTS_MRC into h_recognize_gain_loss, h_adj_eofy_reserve, h_adj_reserve_retired;
10121                  close GET_RETIREMENTS_MRC;
10122 
10123                  if nvl(h_recognize_gain_loss,'NO') = 'NO' then
10124                    h_new_eofy_reserve := 0;
10125                  else
10126                    h_new_eofy_reserve := nvl(h_new_eofy_reserve,0) + nvl(h_adj_eofy_reserve,0);
10127                    h_new_reserve_retired := nvl(h_new_reserve_retired,0) + nvl(h_adj_reserve_retired,0);
10128                  end if;
10129 
10130                  if (p_log_level_rec.statement_level) then
10131                    fa_debug_pkg.add(l_calling_fn, '++++ LOOP FOR GETTING RETIREMENT *** THID', h_transaction_header_id);
10132                    fa_debug_pkg.add(l_calling_fn, 'h_new_eofy_reserve:h_new_reserve_retired', h_new_eofy_reserve||':'||h_new_reserve_retired, p_log_level_rec => p_log_level_rec);
10133                  end if;
10134                end if; -- Retirement treatment
10135 
10136                -- Added for bug 8484007
10137                if (h_transaction_key = 'RA') then
10138                   h_delta_adjusted_cost := h_delta_adjusted_cost + h_new_delta_adjusted_cost;
10139                end if;
10140                if (p_log_level_rec.statement_level) then
10141                   fa_debug_pkg.add(l_calling_fn, 'h_new_delta_adjusted_cost', h_new_delta_adjusted_cost, p_log_level_rec);
10142                   fa_debug_pkg.add(l_calling_fn, 'h_delta_adjusted_cost', h_delta_adjusted_cost, p_log_level_rec);
10143                end if;
10144 
10145              else  --   if GET_DELTA_FOR_MEMBER%NOTFOUND then
10146                close GET_DELTA_FOR_MEMBER_MRC;
10147                 -- Check if this transaction is reclassification and if this is a reason why the delta cannot be found, then
10148                 -- just skip this member's process.
10149                open GET_NEW_GROUP_MRC(h_member_asset_id, h_transaction_header_id);
10150                fetch GET_NEW_GROUP_MRC into h_new_group_asset_id;
10151                if GET_NEW_GROUP_MRC%FOUND then
10152                  if (p_log_level_rec.statement_level) then
10153                    fa_debug_pkg.add(l_calling_fn, '++++ Check the transaction is reclass or not ***', h_transaction_header_id);
10154                    fa_debug_pkg.add(l_calling_fn, 'h_group_asset_id:h_new_group_asset_id', h_group_asset_id||':'||h_new_group_asset_id, p_log_level_rec => p_log_level_rec);
10155                  end if;
10156                  if h_group_Asset_id <> nvl(h_new_group_Asset_id,-99) then
10157                    close GET_NEW_GROUP_MRC;
10158                    goto skip_thid;
10159                  end if;
10160                end if;
10161                close GET_NEW_GROUP_MRC;
10162 
10163                if (p_log_level_rec.statement_level) then
10164                  fa_debug_pkg.add(l_calling_fn, '++++ Just set null to all ****', h_transaction_header_id);
10165                end if;
10166             end if;
10167     <<skip_thid>>
10168                if (p_log_level_rec.statement_level) then
10169                  fa_debug_pkg.add(l_calling_fn, '*** This is the end of loop ***', h_transaction_header_id);
10170                end if;
10171 
10172            End loop;
10173 
10174            if (p_log_level_rec.statement_level) then
10175              fa_debug_pkg.add(l_calling_fn, '++++ AFTER LOOP FOR GETTING DELTA ***', '****');
10176              fa_debug_pkg.add(l_calling_fn, 'h_new_limit_type:limit:limit_amount', h_new_limit_type||':'||h_new_deprn_limit||':'||h_new_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
10177              fa_debug_pkg.add(l_calling_fn, 'h_new_group_asset_id', h_new_group_Asset_id, p_log_level_rec => p_log_level_rec);
10178            end if;
10179 
10180            h_find_flag_3 := FALSE;
10181 
10182          --* If the bs table of the previous period exists, query bs table
10183          if nvl(p_populate_for_recalc_period,'N') = 'T' then
10184              open GET_PRV_ROW_BS_MRC;
10185              fetch GET_PRV_ROW_BS_MRC into h_old_cost,
10186                                        h_old_salvage_value,
10187                                        h_old_recoverable_cost,
10188                                        h_old_adjusted_cost,
10189                                        h_old_adjusted_rec_cost,
10190                                        h_deprn_reserve,
10191                                        h_bonus_deprn_reserve,
10192                                        h_ytd_deprn,
10193                                        h_bonus_ytd_deprn,
10194                                        h_eofy_reserve;
10195              if GET_PRV_ROW_BS_MRC%NOTFOUND then
10196                 if (p_log_level_rec.statement_level) then
10197                    fa_debug_pkg.add(l_calling_fn, 'No data in FA_BOOKS_SUMMARY', '***');
10198                 end if;
10199              else
10200                 if (p_log_level_rec.statement_level) then
10201                    fa_debug_pkg.add(l_calling_fn, 'Data in FA_BOOKS_SUMMARY', 'FOUND', p_log_level_rec => p_log_level_rec);
10202                 end if;
10203                 if h_processing_period_num = 1 then
10204                   h_ytd_deprn := 0;
10205                   h_bonus_ytd_deprn := 0;
10206                   h_eofy_reserve := h_deprn_reserve;
10207                 end if;
10208                 h_find_flag_3 := TRUE;
10209                 if h_new_limit_type is null then
10210                   h_new_limit_type := 'AMT';
10211                   h_new_deprn_limit_amount := h_old_cost - h_old_adjusted_rec_cost;
10212                 end if;
10213              end if;
10214              close GET_PRV_ROW_BS_MRC;
10215 
10216           else -- Other case
10217 
10218            k := 0;
10219            --* Check if this exists in p_track_member table
10220 
10221            /* Bug 7231274, added for bug - start */
10222            k := search_index_table(h_processing_period_counter,h_member_asset_id,
10223                              h_group_asset_id, h_set_of_books_id,
10224 p_log_level_rec);
10225 
10226            if ( k > 0 ) then
10227               h_find_flag_3 := TRUE;
10228               l_processing_ind := k; -- Keep index for memory table.
10229               h_old_cost := p_track_member_table(k).cost;
10230               h_old_salvage_value := p_track_member_table(k).salvage_value;
10231               h_old_recoverable_cost := p_track_member_table(k).recoverable_cost;
10232               h_old_adjusted_rec_cost := p_track_member_table(k).adjusted_recoverable_cost;
10233 
10234               h_deprn_reserve := p_track_member_table(k).deprn_reserve;
10235               h_bonus_deprn_reserve := p_track_member_table(k).bonus_deprn_reserve;
10236               h_ytd_deprn := p_track_member_table(k).ytd_deprn;
10237               h_bonus_ytd_deprn := p_track_member_table(k).bonus_ytd_deprn;
10238               h_eofy_reserve := p_track_member_table(k).eofy_reserve;
10239 
10240               if h_new_limit_type is null then
10241                 h_new_limit_type := 'AMT';
10242                 h_new_deprn_limit_amount := h_old_cost - h_old_adjusted_rec_cost;
10243               end if;
10244 
10245               if nvl(h_new_group_asset_id, -99) <> h_group_asset_id then
10246                 delete_track_index(h_processing_period_counter, h_member_asset_id,
10247                         h_group_asset_id,h_set_of_books_id, p_log_level_rec);
10248 
10249                 p_track_member_table(k).group_asset_id := h_new_group_asset_id;
10250 
10251                 put_track_index(h_processing_period_counter, h_member_asset_id,h_new_group_asset_id,h_set_of_books_id,k,p_log_level_rec);
10252 
10253                 if (p_log_level_rec.statement_level) then
10254                   fa_debug_pkg.add(l_calling_fn, 'This member does not belong to this group anymore', '+++', p_log_level_rec => p_log_level_rec);
10255                 end if;
10256               end if;
10257            end if;
10258            /* Bug 7231274, added for bug - end */
10259 
10260          end if; -- If bs table should be queried or not...
10261 
10262            if nvl(h_new_group_asset_id, -99) <> h_group_asset_id then
10263              goto skip_asset;
10264            end if;
10265 
10266            if not (h_find_flag_3) then  -- This is a case the processing member asset doesn't exist in memory table
10267               h_old_cost := 0;
10268               h_old_salvage_value := 0;
10269               h_old_recoverable_cost := 0;
10270               h_old_adjusted_rec_cost := 0;
10271 
10272 
10273               h_bonus_deprn_reserve := 0;
10274               h_bonus_ytd_deprn := 0;
10275               --* This is a case when this asset is added in this period.
10276               open GET_RESERVE_AT_ADDITION_MRC(h_member_asset_id, h_processing_period_counter);
10277               fetch GET_RESERVE_AT_ADDITION_MRC into h_deprn_source_code, h_ytd_deprn, h_deprn_reserve;
10278               if GET_RESERVE_AT_ADDITION_MRC%NOTFOUND then
10279                 -- Set zero initial reserve
10280 
10281                 if (p_log_level_rec.statement_level) then
10282                    fa_debug_pkg.add(l_calling_fn, 'Member asset which cannot find DEPRN SUMMARY table',
10283                                     h_member_asset_id, p_log_level_rec => p_log_level_rec);
10284                 end if;
10285 
10286                 h_ytd_deprn := 0;
10287                 h_deprn_reserve := 0;
10288               elsif h_deprn_source_code <> 'BOOKS' then
10289                 -- Set zero initial reserve
10290 
10291                 if (p_log_level_rec.statement_level) then
10292                    fa_debug_pkg.add(l_calling_fn, 'This Member assets record', h_deprn_source_code, p_log_level_rec => p_log_level_rec);
10293                 end if;
10294 
10295                 h_ytd_deprn := 0;
10296                 h_deprn_reserve := 0;
10297               end if;
10298               close GET_RESERVE_AT_ADDITION_MRC;
10299             end if;
10300 
10301             if nvl(p_populate_for_recalc_period,'N') = 'T' or
10302                not (h_find_flag_3) then
10303 
10304               -- Then enter this asset to extended memory table at this moment
10305               l_new_ind := p_track_member_table.COUNT + 1;
10306               l_processing_ind := l_new_ind;
10307               if (p_log_level_rec.statement_level) then
10308                 fa_debug_pkg.add(l_calling_fn, 'l_new_ind', l_new_ind, p_log_level_rec => p_log_level_rec);
10309               end if;
10310               p_track_member_table(l_new_ind).group_asset_id := h_group_asset_id;
10311               p_track_member_table(l_new_ind).member_asset_id := h_member_asset_id;
10312               p_track_member_table(l_new_ind).set_of_books_id := h_set_of_books_id;
10313               p_track_member_table(l_new_ind).period_counter := h_processing_period_counter;
10314               p_track_member_table(l_new_ind).fiscal_year := h_fiscal_year;
10315               p_track_member_table(l_new_ind).cost := h_new_cost;
10316               p_track_member_table(l_new_ind).salvage_value := h_new_salvage_value;
10317               p_track_member_table(l_new_ind).adjusted_cost := h_new_recoverable_cost;
10318               p_track_member_table(l_new_ind).recoverable_cost := h_new_recoverable_cost;
10319               p_track_member_table(l_new_ind).adjusted_recoverable_cost := h_new_adjusted_rec_cost;
10320               p_track_member_table(l_new_ind).deprn_reserve := h_deprn_reserve;
10321               p_track_member_table(l_new_ind).ytd_deprn := h_ytd_deprn;
10322               p_track_member_table(l_new_ind).bonus_deprn_reserve := 0;
10323               p_track_member_table(l_new_ind).bonus_ytd_deprn := 0;
10324               if nvl(p_populate_for_recalc_period,'N') = 'T' and (h_find_flag_3) then
10325                 p_track_member_table(l_new_ind).eofy_reserve := h_eofy_reserve;
10326               else
10327                 p_track_member_table(l_new_ind).eofy_reserve := h_deprn_reserve - h_ytd_deprn;
10328                 h_eofy_reserve := h_deprn_reserve - h_ytd_deprn;
10329               end if;
10330               p_track_member_table(l_new_ind).eofy_recoverable_cost := 0;
10331               p_track_member_table(l_new_ind).eop_recoverable_cost := 0;
10332               p_track_member_table(l_new_ind).eofy_salvage_value := 0;
10333               p_track_member_table(l_new_ind).eop_salvage_value := 0;
10334               p_track_member_table(l_new_ind).set_of_books_id := h_set_of_books_id;
10335 
10336               /* Populate index table */
10337               put_track_index(h_processing_period_counter,h_member_asset_id,h_group_asset_id,h_set_of_books_id,l_new_ind,p_log_level_rec);
10338 
10339            end if;
10340 
10341            --* Member Asset level information
10342 
10343            --* adjust by the delta
10344            h_new_cost := h_old_cost + h_adj_cost;
10345            h_new_recoverable_cost := h_old_recoverable_cost + h_adj_rec_cost;
10346            h_new_salvage_value := h_old_salvage_value + h_adj_salvage_value;
10347 
10348            if nvl(h_new_limit_type,'NONE') = 'PCT' then
10349              h_temp_limit_amount := h_new_cost*(1-h_new_deprn_limit);
10350              fa_round_pkg.fa_floor(h_temp_limit_amount,h_book_type_code, p_log_level_rec => p_log_level_rec);
10351              h_new_adjusted_rec_cost := h_new_cost - h_temp_limit_amount;
10352            elsif nvl(h_new_limit_type,'NONE') = 'NONE' then
10353              h_new_adjusted_rec_cost := h_new_recoverable_cost; -- In this case, it should be same as new recoverable cost
10354            else
10355              h_new_adjusted_rec_cost := h_new_cost - h_new_deprn_limit_amount;
10356            end if;
10357 
10358            if (p_log_level_rec.statement_level) then
10359              fa_debug_pkg.add(l_calling_fn, '++++ AFTER GETTING NEW COST etc ***', '*****');
10360              fa_debug_pkg.add(l_calling_fn, 'h_new_cost:h_new_rec_cost:h_new_salvage:h_new_adj_rec_cost',
10361                                              h_new_cost||':'||h_new_recoverable_cost||':'||h_new_salvage_value||':'||h_new_adjusted_rec_cost, p_log_level_rec => p_log_level_rec);
10362            end if;
10363 
10364            -- Get Asset type
10365            select ASSET_TYPE
10366              into fa_rule_in.asset_type
10367              from fa_additions_b
10368             where asset_id = h_member_asset_id;
10369 
10370            -- Get eofy, eop amounts
10371            if not FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP
10372                         (p_asset_id =>       h_member_asset_id,
10373                          p_book_type_code => h_book_type_code,
10374                          p_fiscal_year =>    h_fiscal_year,
10375                          p_period_num =>     h_period_num,
10376                          p_mrc_sob_type_code => p_mrc_sob_type_code,
10377                          p_set_of_books_id => h_set_of_books_id,
10378                          x_eofy_recoverable_cost => h_new_eofy_recoverable_cost,
10379                          x_eofy_salvage_value => h_new_eofy_salvage_value,
10380                          x_eop_recoverable_cost => h_new_eop_recoverable_cost,
10381                          x_eop_salvage_value => h_new_eop_salvage_value, p_log_level_rec => p_log_level_rec) then
10382              raise pop_mem_table_err;
10383            end if;
10384 
10385            fa_rule_in.asset_id := h_member_asset_id;
10386            fa_rule_in.depreciate_flag := h_depreciate_flag;
10387            fa_rule_in.adjustment_amount := nvl(h_new_cost,0) - nvl(h_old_cost,0);
10388            fa_rule_in.cost := h_new_cost;
10389            fa_rule_in.salvage_value := h_new_salvage_value;
10390            fa_rule_in.recoverable_cost := h_new_recoverable_cost;
10391            fa_rule_in.adjusted_cost := h_old_adjusted_cost;
10392            fa_rule_in.current_total_rsv := h_deprn_reserve + nvl(h_new_reserve_retired,0) - nvl(h_delta_adjusted_cost,0); --Bug8484007
10393            fa_rule_in.current_rsv := h_deprn_reserve + nvl(h_new_reserve_retired,0) - nvl(h_bonus_deprn_reserve,0) - nvl(h_delta_adjusted_cost,0); --Bug8484007
10394            fa_rule_in.current_total_ytd := h_ytd_deprn;
10395            fa_rule_in.current_ytd := h_ytd_deprn - nvl(h_bonus_ytd_deprn,0);
10396            fa_rule_in.old_adjusted_cost := h_old_adjusted_cost;
10397 
10398            if nvl(h_eofy_reserve_zero,'N') = 'Y' then
10399              fa_rule_in.eofy_reserve := 0;
10400            else
10401              fa_rule_in.eofy_reserve := h_eofy_reserve - nvl(h_new_eofy_reserve,0);
10402            end if;
10403 
10404            fa_rule_in.eofy_recoverable_cost := h_new_eofy_recoverable_cost;
10405            fa_rule_in.eop_recoverable_cost := h_new_eop_recoverable_cost;
10406            fa_rule_in.eofy_salvage_value := h_new_eofy_salvage_value;
10407            fa_rule_in.eop_salvage_value := h_new_eop_salvage_value;
10408            fa_rule_in.apply_reduction_flag := h_apply_reduction_flag;
10409 
10410            if (p_log_level_rec.statement_level) then
10411              if not display_debug_message(fa_rule_in => fa_rule_in,
10412                                           p_calling_fn => l_calling_fn,
10413                                           p_log_level_rec => p_log_level_rec) then
10414                fa_debug_pkg.add(l_calling_fn, 'display_debug_message', 'error', p_log_level_rec => p_log_level_rec);
10415              end if;
10416            end if;
10417 
10418            -- Call Deprn Basis Rule for this transaction or period
10419            if (not fa_calc_deprn_basis1_pkg.faxcdb(rule_in => fa_rule_in,
10420                                                    rule_out => fa_rule_out, p_log_level_rec => p_log_level_rec)) then
10421              raise pop_mem_table_err;
10422            end if;
10423 
10424            if (p_log_level_rec.statement_level) then
10425              fa_debug_pkg.add(l_calling_fn, 'h_member_asset_id', fa_rule_in.asset_id, p_log_level_rec => p_log_level_rec);
10426              fa_debug_pkg.add(l_calling_fn, 'fa_rule_out.new_adjusted_cost', fa_rule_out.new_adjusted_cost, p_log_level_rec => p_log_level_rec);
10427              fa_debug_pkg.add(l_calling_fn, 'h_current_cost', h_new_cost, p_log_level_rec => p_log_level_rec);
10428            end if;
10429 
10430            --* Set calculated adjusted cost into p_track_member_table
10431 
10432             p_track_member_table(l_processing_ind).cost := h_new_cost;
10433             p_track_member_table(l_processing_ind).salvage_value := h_new_salvage_value;
10434             p_track_member_table(l_processing_ind).recoverable_cost := h_new_recoverable_cost;
10435             p_track_member_table(l_processing_ind).adjusted_cost := fa_rule_out.new_adjusted_cost;
10436             p_track_member_table(l_processing_ind).adjusted_recoverable_cost := h_new_adjusted_rec_cost;
10437             p_track_member_table(l_processing_ind).deprn_reserve := p_track_member_table(l_processing_ind).deprn_reserve - nvl(h_delta_adjusted_cost,0); --Bug8484007
10438 
10439             if h_new_reserve_retired is not null then
10440               p_track_member_table(l_processing_ind).deprn_reserve := p_track_member_table(l_processing_ind).deprn_reserve + nvl(h_new_reserve_retired,0);
10441             end if;
10442             if h_new_eofy_reserve is not null then
10443               p_track_member_table(l_processing_ind).eofy_reserve := p_track_member_table(l_processing_ind).eofy_reserve - nvl(h_new_eofy_reserve,0);
10444             end if;
10445 
10446             if h_new_perd_ctr_ret is not null then
10447               if h_new_perd_ctr_ret <= h_processing_period_counter then
10448                 p_track_member_table(l_processing_ind).fully_retired_flag := 'Y';
10449               end if;
10450             end if;
10451 
10452     <<skip_asset>>
10453             if (p_log_level_rec.statement_level) then
10454               fa_debug_pkg.add(l_calling_fn, '+++ End of Loop +++', '++++', p_log_level_rec => p_log_level_rec);
10455             end if;
10456 
10457          End Loop; -- (For ALL_MMEBER)
10458       end if;  -- Primary or Reporting?
10459 
10460       --* From this point, Start to process allocate logic
10461       if (p_log_level_rec.statement_level) then
10462         fa_debug_pkg.add(l_calling_fn, '*** Ended all member assets treatment ***', '***');
10463         fa_debug_pkg.add(l_calling_fn, '*** Start process to allocate group level amount ***', '***');
10464       end if;
10465 
10466       if p_mrc_sob_type_code <> 'R' then
10467 
10468         -- Get expense/bonus expense adjustment of this group asset at this period
10469         open GET_ADJ_EXPENSE(h_processing_period_counter);
10470         fetch GET_ADJ_EXPENSE into h_group_adj_expense, h_group_adj_bonus_expense;
10471         close GET_ADJ_EXPENSE;
10472 
10473       else
10474 
10475         -- Get expense/bonus expense adjustment of this group asset at this period
10476         open GET_ADJ_EXPENSE_MRC(h_processing_period_counter);
10477         fetch GET_ADJ_EXPENSE_MRC into h_group_adj_expense, h_group_adj_bonus_expense;
10478         close GET_ADJ_EXPENSE_MRC;
10479 
10480       end if;
10481 
10482       -- Calculate purely periodic expense
10483       h_periodic_expense := h_group_deprn_amount - nvl(h_group_adj_expense,0);
10484       h_periodic_bonus_expense := nvl(h_group_bonus_deprn_amount,0) - nvl(h_group_adj_bonus_expense,0);
10485 
10486       if fa_cache_pkg.fazccmt_record.exclude_salvage_value_flag = 'YES' then
10487         h_group_exclude_salvage := 'Y';
10488       else
10489         h_group_exclude_salvage := 'N';
10490       end if;
10491 
10492       h_group_deprn_amount_parm := h_group_system_deprn_amount;
10493       h_group_bonus_amount_parm := h_group_system_bonus_deprn;
10494       h_tracking_method := p_asset_fin_rec_new.tracking_method;
10495       h_allocate_to_fully_rsv_flag := p_asset_fin_rec_new.allocate_to_fully_rsv_flag;
10496       h_allocate_to_fully_ret_flag := p_asset_fin_rec_new.allocate_to_fully_ret_flag;
10497       h_excess_allocation_option := p_asset_fin_rec_new.excess_allocation_option;
10498       h_depreciation_option := p_asset_fin_rec_new.depreciation_option;
10499       h_member_rollup_flag := p_asset_fin_rec_new.member_rollup_flag;
10500       h_subtraction_flag := fa_cache_pkg.fazcdrd_record.subtract_ytd_flag;
10501 
10502       if h_processing_period_counter <> h_recalc_period_counter or
10503          (h_processing_period_counter = h_recalc_period_counter and
10504           p_no_allocation_for_last = 'N') then
10505 
10506 
10507          l_processing_member_table := 'YES';
10508 
10509          x_rtn_code :=  TRACK_ASSETS(P_book_type_code => h_book_type_code,
10510                              P_group_asset_id => h_group_asset_id,
10511                              P_period_counter => h_period_num,
10512                              P_fiscal_year => h_fiscal_year,
10513                              P_group_deprn_basis => h_group_deprn_basis,
10514                              P_group_exclude_salvage => h_group_exclude_salvage,
10515                              P_group_bonus_rule => h_group_bonus_rule,
10516                              P_group_deprn_amount => h_group_deprn_amount_parm,
10517                              P_group_bonus_amount => h_group_bonus_amount_parm,
10518                              P_tracking_method => h_tracking_method,
10519                              P_allocate_to_fully_ret_flag => h_allocate_to_fully_ret_flag,
10520                              P_allocate_to_fully_rsv_flag => h_allocate_to_fully_rsv_flag,
10521                              P_excess_allocation_option => h_excess_allocation_option,
10522                              P_depreciation_option => h_depreciation_option,
10523                              P_member_rollup_flag => h_member_rollup_flag,
10524                              P_subtraction_flag => h_subtraction_flag,
10525                              P_group_level_override => h_group_deprn_override,
10526                              P_mode => 'ADJUSTMENT',
10527                              P_mrc_sob_type_code => p_mrc_sob_type_code,
10528                              P_set_of_books_id => h_set_of_books_id,
10529                              X_new_deprn_amount => x_new_deprn_amount,
10530                              X_new_bonus_amount => x_new_bonus_amount,
10531                              p_log_level_rec => p_log_level_rec);
10532 
10533         if x_rtn_code <> 0 then
10534           l_processing_member_table := 'NO';
10535           raise pop_mem_table_err;
10536         end if;
10537 
10538         l_processing_member_table := 'NO';
10539 
10540       else
10541 
10542         if (p_log_level_rec.statement_level) then
10543            fa_debug_pkg.add(l_calling_fn, '**** This processing period is last period of loop ****',
10544                             '****');
10545         end if;
10546 
10547       end if;
10548 
10549       if (p_log_level_rec.statement_level) then
10550         fa_debug_pkg.add(l_calling_fn, '*** End of Period Loop ** Period Counter processed',
10551                          h_processing_period_counter);
10552       end if;
10553 
10554    End Loop; -- (For i IN 1.. h_length_of_loop)
10555 
10556    --* Following logic is prepared for exclude_salvage_value in FA_BOOKS is set.
10557    --  In this case, adjusted_cost of fully reserved should be removed from adjusted_cost
10558    -- of group asset. so need to maintain the memory table adjusted cost
10559          if nvl(h_exclude_fully_rsv_flag,'N') = 'Y'  and
10560             nvl(fa_cache_pkg.fazccmt_record.deprn_basis_rule,'COST') = 'NBV' then
10561 
10562            if (p_log_level_rec.statement_level) then
10563              fa_debug_pkg.add(l_calling_fn, 'Fully Reserve Asset treatment', 'Starts++++', p_log_level_rec => p_log_level_rec);
10564              fa_debug_pkg.add(l_calling_fn, 'h_processing_fiscal_year lopped out', h_processing_fiscal_year, p_log_level_rec => p_log_level_rec);
10565            end if;
10566 
10567           -- If the fully reserved period is in the different fiscal year than
10568           -- the fiscal year when the process is done.
10569            For t IN 1.. p_track_member_table.COUNT LOOP
10570              if nvl(p_track_member_table(t).fully_reserved_flag,'N') = 'Y' and
10571                 nvl(p_track_member_table(t).fiscal_year,h_group_dpis_fiscal_year) <> h_processing_fiscal_year and
10572                 nvl(p_track_member_table(t).set_of_books_id,-99) = nvl(h_set_of_books_id,-99) then
10573                p_track_member_table(t).adjusted_cost := nvl(p_track_member_table(t).recoverable_cost,0)
10574                                                        - nvl(p_track_member_table(t).deprn_reserve,0);
10575                if (p_log_level_rec.statement_level) then
10576                  fa_debug_pkg.add(l_calling_fn, 'Updated fully reserved member asset',
10577                                                      p_track_member_table(t).member_asset_id);
10578                  fa_debug_pkg.add(l_calling_fn, 'Newly set Adjusted_cost and period_counter',
10579                                      p_track_member_table(t).adjusted_Cost||','||p_track_member_table(t).period_counter);
10580                end if;
10581              end if;
10582            End Loop;
10583 
10584            if (p_log_level_rec.statement_level) then
10585              fa_debug_pkg.add(l_calling_fn, 'Fully Reserve Asset treatment', 'Ended++++', p_log_level_rec => p_log_level_rec);
10586            end if;
10587 
10588          end if;
10589 
10590 
10591    return(true);
10592 
10593 EXCEPTION
10594    when pop_mem_table_err then
10595         fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
10596         return false;
10597 
10598    when others then
10599         fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
10600         return false;
10601 
10602 
10603 end populate_member_assets_table;
10604 
10605 
10606 
10607 --+=====================================================================
10608 -- Function: populate_member_reserve
10609 --
10610 --  This function will be called to query tracked reserve amount
10611 --  for group reclassification.
10612 --  This function is used to skip recalculation from DPIS to reclassification
10613 --  date populating member level reserve amount tracked.
10614 --
10615 --+=====================================================================
10616 
10617 FUNCTION populate_member_reserve(p_trans_rec               in FA_API_TYPES.trans_rec_type,
10618                                  p_asset_hdr_rec           in FA_API_TYPES.asset_hdr_rec_type,
10619                                  p_asset_fin_rec_new       in FA_API_TYPES.asset_fin_rec_type,
10620                                  p_mrc_sob_type_code       in varchar2,
10621                                  x_deprn_reserve           out nocopy number,
10622                                  x_eofy_reserve            out nocopy number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
10623   return boolean is
10624 
10625    l_asset_fin_rec_new           FA_API_TYPES.asset_fin_rec_type;
10626 
10627    h_book_type_code              varchar2(30);
10628    h_member_asset_id             number(15);
10629    h_group_asset_id              number(15);
10630    h_period_counter              number;
10631    h_cur_fiscal_year             number;
10632    h_cur_period_num              number;
10633 
10634    h_trans_period_counter        number;
10635 
10636    h_reserve_dpis_current        number;
10637    h_eofy_reserve                number;
10638    h_set_of_books_id             number;
10639 
10640    h_ytd_deprn                   number;
10641    h_ds_fiscal_year              number;
10642 
10643    h_adj_eofy_reserve            number;
10644    h_adj_reserve                 number;
10645 
10646 --* Cursor to populate the member level amounts
10647    cursor FETCH_MEMBER_ASSET is
10648      select asset_id
10649        from fa_transaction_headers
10650       where transaction_header_id = p_trans_rec.member_transaction_header_id;
10651 
10652 --* Cursor to get current open period
10653     cursor GET_CUR_PERIOD is
10654      select period_counter, fiscal_year, period_num
10655        from fa_deprn_periods
10656       where book_type_code = h_book_type_code
10657         and period_close_date is null;
10658 
10659     cursor GET_CUR_PERIOD_MRC is
10660      select period_counter, fiscal_year, period_num
10661        from fa_mc_deprn_periods
10662       where book_type_code = h_book_type_code
10663         and period_close_date is null
10664         and set_of_books_id = h_set_of_books_id;
10665 
10666    cursor MEM_EXP_RESERVE is
10667      select ds1.deprn_reserve,ds1.ytd_deprn,dp1.fiscal_year
10668        from fa_deprn_summary ds1,
10669             fa_deprn_periods dp1
10670       where ds1.book_type_code = h_book_type_code
10671         and ds1.asset_id = h_member_asset_id
10672         and dp1.book_type_code = ds1.book_type_Code
10673         and dp1.period_counter = ds1.period_counter
10674         and ds1.period_counter =
10675             (select max(period_counter)
10676                from fa_deprn_summary ds2
10677               where ds2.book_type_code = h_book_type_code
10678                 and ds2.asset_id = h_member_asset_id
10679                 and period_counter <= h_period_counter);
10680 
10681    cursor MEM_EXP_RESERVE_MRC is
10682      select ds1.deprn_reserve,ds1.ytd_deprn,dp1.fiscal_year
10683        from fa_mc_deprn_summary ds1,
10684             fa_mc_deprn_periods dp1
10685       where ds1.book_type_code = h_book_type_code
10686         and ds1.asset_id = h_member_asset_id
10687         and ds1.set_of_books_id = h_set_of_books_id
10688         and dp1.book_type_code = ds1.book_type_Code
10689         and dp1.period_counter = ds1.period_counter
10690         and dp1.set_of_books_id = h_set_of_books_id
10691         and ds1.period_counter =
10692             (select max(period_counter)
10693                from fa_mc_deprn_summary ds2
10694               where ds2.book_type_code = h_book_type_code
10695                 and ds2.asset_id = h_member_asset_id
10696                 and period_counter <= h_period_counter
10697                 and set_of_books_id = h_set_of_books_id);
10698 
10699 --* Cursor for EOFY_RESERVE adjustment
10700 cursor FA_RET_RSV is
10701   select sum(nvl(ret.reserve_retired,0) - nvl(ret.eofy_reserve,0))
10702     from fa_retirements ret
10703    where ret.book_type_code = h_book_type_code
10704      and ret.asset_id = h_member_asset_id
10705      and exists
10706          (select th1.transaction_header_id
10707             from fa_transaction_headers th1,
10708                  fa_deprn_periods dp1,
10709                  fa_deprn_periods dp3
10710            where th1.asset_id = ret.asset_id
10711              and dp1.book_type_code = h_book_type_code
10712              and dp1.fiscal_year =
10713                  (select dp2.fiscal_year
10714                     from fa_deprn_periods dp2
10715                    where dp2.book_type_code = dp1.book_type_code
10716                      and dp2.period_Counter = h_period_counter - 1)
10717              and dp1.period_num = 1
10718              and dp3.book_type_code = dp1.book_type_code
10719              and dp3.period_counter = h_period_counter - 1
10720              and nvl(th1.amortization_start_date,th1.transaction_date_entered) >= dp1.calendar_period_open_date
10721              and nvl(th1.amortization_start_date,th1.transaction_date_entered) <= dp3.calendar_period_close_date
10722              and th1.transaction_type_code in ('PARTIAL RETIREMENT','FULL RETIREMENT')
10723              and th1.transaction_header_id = ret.transaction_header_id_in);
10724 
10725 cursor FA_RET_RSV_MRC is
10726   select sum(nvl(ret.reserve_retired,0) - nvl(ret.eofy_reserve,0))
10727     from fa_mc_retirements ret
10728    where ret.book_type_code = h_book_type_code
10729      and ret.asset_id = h_member_asset_id
10730      and ret.set_of_books_id = h_set_of_books_id
10731      and exists
10732          (select th1.transaction_header_id
10733             from fa_transaction_headers th1,
10734                  fa_mc_deprn_periods dp1,
10735                  fa_mc_deprn_periods dp3
10736            where th1.asset_id = ret.asset_id
10737              and dp1.book_type_code = h_book_type_code
10738              and dp1.fiscal_year =
10739                  (select dp2.fiscal_year
10740                     from fa_mc_deprn_periods dp2
10741                    where dp2.book_type_code = dp1.book_type_code
10742                      and dp2.period_Counter = h_period_counter - 1
10743                      and dp2.set_of_books_id = h_set_of_books_id
10744                      and dp2.set_of_books_id = h_set_of_books_id)
10745              and dp1.period_num = 1
10746              and dp3.book_type_code = dp1.book_type_code
10747              and dp3.period_counter = h_period_counter - 1
10748              and dp1.set_of_books_id = h_set_of_books_id
10749              and dp3.set_of_books_id = h_set_of_books_id
10750              and nvl(th1.amortization_start_date,th1.transaction_date_entered) >= dp1.calendar_period_open_date
10751              and nvl(th1.amortization_start_date,th1.transaction_date_entered) <= dp3.calendar_period_close_date
10752              and th1.transaction_type_code in ('PARTIAL RETIREMENT','FULL RETIREMENT')
10753              and th1.transaction_header_id = ret.transaction_header_id_in);
10754 
10755 cursor FA_ADJ_RESERVE is
10756    select sum(decode(adj.debit_credit_flag,
10757                      'DR',adj.adjustment_amount,
10758                      'CR', -1 * adj.adjustment_amount))
10759      from fa_adjustments adj
10760     where adj.book_type_code = h_book_type_code
10761       and adj.asset_id = h_member_asset_id
10762       and adj.adjustment_type = 'RESERVE'
10763       and nvl(adj.track_member_flag, 'N') = 'N' -- ENERGY
10764       and adj.source_type_code = 'ADJUSTMENT'
10765       and exists
10766          (select dp2.period_counter
10767             from fa_deprn_periods dp1,
10768                  fa_deprn_periods dp2
10769            where dp1.book_type_code = adj.book_type_code
10770              and dp1.period_counter = h_period_counter - 1
10771              and dp2.book_type_code = dp1.book_type_code
10772              and dp2.fiscal_year = dp1.fiscal_year
10773              and dp2.period_counter <= dp1.period_counter
10774              and dp2.period_counter = adj.period_counter_adjusted);
10775 
10776 cursor FA_ADJ_RESERVE_MRC is
10777    select sum(decode(adj.debit_credit_flag,
10778                      'DR',adj.adjustment_amount,
10779                      'CR', -1 * adj.adjustment_amount))
10780      from fa_mc_adjustments adj
10781     where adj.book_type_code = h_book_type_code
10782       and adj.asset_id = h_member_asset_id
10783       and adj.adjustment_type = 'RESERVE'
10784       and nvl(adj.track_member_flag, 'N') = 'N'    -- ENERGY
10785       and adj.source_type_code = 'ADJUSTMENT'
10786       and adj.set_of_books_id = h_set_of_books_id
10787       and exists
10788          (select dp2.period_counter
10789             from fa_mc_deprn_periods dp1,
10790                  fa_mc_deprn_periods dp2
10791            where dp1.book_type_code = adj.book_type_code
10792              and dp1.period_counter = h_period_counter - 1
10793              and dp2.book_type_code = dp1.book_type_code
10794              and dp2.fiscal_year = dp1.fiscal_year
10795              and dp2.period_counter <= dp1.period_counter
10796              and dp2.period_counter = adj.period_counter_adjusted
10797              and dp1.set_of_books_id = h_set_of_books_id
10798              and dp2.set_of_books_id = h_set_of_books_id);
10799 
10800 
10801    l_calling_fn                  VARCHAR2(50) := 'fa_group_reclass_pvt.populate_member_amounts';
10802    pop_mem_amt_err               EXCEPTION;
10803 
10804 
10805 BEGIN
10806 
10807 if (p_log_level_rec.statement_level) then
10808   fa_debug_pkg.add(l_calling_fn, '+++ populate member reserve starts +++ ',p_trans_rec.amortization_start_date , p_log_level_rec => p_log_level_rec);
10809 end if;
10810 
10811 -- Populate Member Asset id processed in this transaction
10812 open FETCH_MEMBER_ASSET;
10813 fetch FETCH_MEMBER_ASSET into h_member_asset_id;
10814 
10815 if FETCH_MEMBER_ASSET%NOTFOUND then
10816 
10817    if (p_log_level_rec.statement_level) then
10818       fa_debug_pkg.add(l_calling_fn, 'No transaction information for this group THID',
10819                        p_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
10820       fa_debug_pkg.add(l_calling_fn, 'No transaction information for this member THID',
10821                        p_trans_rec.member_transaction_header_id, p_log_level_rec => p_log_level_rec);
10822    end if;
10823   close FETCH_MEMBER_ASSET;
10824 
10825 else -- Normal processing
10826 
10827   close FETCH_MEMBER_ASSET;
10828 
10829   -- Get current open period counter and transaction period counter
10830 
10831   h_book_type_code := p_asset_hdr_rec.book_type_code;
10832   h_group_asset_id := p_asset_hdr_rec.asset_id;
10833   h_set_of_books_id := p_asset_hdr_rec.set_of_books_id;
10834 
10835   -- Populate Subtract Ytd Flag
10836   if not fa_cache_pkg.fazccmt(X_method => p_asset_fin_rec_new.deprn_method_code,
10837                               X_life => p_asset_fin_rec_new.life_in_months, p_log_level_rec => p_log_level_rec) then
10838     raise pop_mem_amt_err;
10839   end if;
10840 
10841   -- Populate reserve from dpis to current, eofy_reserve
10842   if nvl(p_mrc_sob_type_code, 'N') <> 'R' then
10843 
10844     open GET_CUR_PERIOD;
10845     fetch GET_CUR_PERIOD into h_period_counter, h_cur_fiscal_year, h_cur_period_num;
10846     if GET_CUR_PERIOD%NOTFOUND then
10847       raise pop_mem_amt_err;
10848     end if;
10849 
10850     open MEM_EXP_RESERVE;
10851     fetch MEM_EXP_RESERVE into h_reserve_dpis_current,h_ytd_deprn,h_ds_fiscal_year;
10852     if MEM_EXP_RESERVE%NOTFOUND then
10853       h_reserve_dpis_current := 0;
10854     end if;
10855     close MEM_EXP_RESERVE;
10856 
10857     open FA_RET_RSV;
10858     fetch FA_RET_RSV into h_adj_eofy_reserve;
10859     close FA_RET_RSV;
10860 
10861     open FA_ADJ_RESERVE;
10862     fetch FA_ADJ_RESERVE into h_adj_reserve;
10863     close FA_ADJ_RESERVE;
10864 
10865     select eofy_reserve into h_eofy_reserve
10866       from fa_books
10867      where book_type_code = h_book_type_code
10868        and asset_id = h_member_asset_id
10869        and date_ineffective is null;
10870 
10871   else
10872 
10873     open GET_CUR_PERIOD_MRC;
10874     fetch GET_CUR_PERIOD_MRC into h_period_counter, h_cur_fiscal_year, h_cur_period_num;
10875     if GET_CUR_PERIOD_MRC%NOTFOUND then
10876       raise pop_mem_amt_err;
10877     end if;
10878 
10879     open MEM_EXP_RESERVE_MRC;
10880     fetch MEM_EXP_RESERVE_MRC into h_reserve_dpis_current,h_ytd_deprn,h_ds_fiscal_year;
10881     if MEM_EXP_RESERVE_MRC%NOTFOUND then
10882       h_reserve_dpis_current := 0;
10883     end if;
10884     close MEM_EXP_RESERVE_MRC;
10885 
10886     open FA_RET_RSV_MRC;
10887     fetch FA_RET_RSV_MRC into h_adj_eofy_reserve;
10888     close FA_RET_RSV_MRC;
10889 
10890     open FA_ADJ_RESERVE_MRC;
10891     fetch FA_ADJ_RESERVE_MRC into h_adj_reserve;
10892     close FA_ADJ_RESERVE_MRC;
10893 
10894     select eofy_reserve into h_eofy_reserve
10895       from fa_mc_books
10896      where book_type_code = h_book_type_code
10897        and asset_id = h_member_asset_id
10898        and date_ineffective is null
10899        and set_of_books_id = h_set_of_books_id;
10900 
10901   end if;
10902 
10903   if (p_log_level_rec.statement_level) then
10904        fa_debug_pkg.add(l_calling_fn,'h_eofy_reserve:reserve_dpis_current',h_eofy_reserve||':'||h_reserve_dpis_current, p_log_level_rec => p_log_level_rec);
10905        fa_debug_pkg.add(l_calling_fn,'h_period_counter:cur_fiscal_year:cur_period_num',h_period_counter||':'||h_cur_fiscal_year||':'||h_cur_period_num, p_log_level_rec => p_log_level_rec);
10906        fa_debug_pkg.add(l_calling_fn,'h_ds_fiscal_year', h_ds_fiscal_year, p_log_level_rec => p_log_level_rec);
10907        fa_debug_pkg.add(l_calling_fn,'h_ytd_deprn', h_ytd_deprn, p_log_level_rec => p_log_level_rec);
10908        fa_debug_pkg.add(l_calling_fn,'h_adj_eofy_reserve:h_adj_reserve',h_adj_eofy_reserve||':'||h_adj_reserve, p_log_level_rec => p_log_level_rec);
10909   end if;
10910 
10911   if nvl(h_eofy_reserve,0) = 0 then
10912     if h_cur_fiscal_year = h_ds_fiscal_year then
10913        h_eofy_reserve := h_reserve_dpis_current - h_ytd_deprn + nvl(h_adj_eofy_reserve,0) + nvl(h_adj_reserve,0);
10914     else
10915        h_eofy_reserve := h_reserve_dpis_current;
10916     end if;
10917   end if;
10918 
10919   if (p_log_level_rec.statement_level) then
10920     fa_debug_pkg.add(l_calling_fn, 'x_deprn_reserve:x_eofy_reserve', h_reserve_dpis_current||':'||h_eofy_reserve, p_log_level_rec => p_log_level_rec);
10921   end if;
10922 
10923   -- Set return value
10924   x_deprn_reserve := h_reserve_dpis_current;
10925   x_eofy_reserve := h_eofy_reserve;
10926 
10927 end if;
10928 
10929 return true;
10930 
10931 EXCEPTION
10932    when pop_mem_amt_err then
10933         fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
10934         return false;
10935 
10936    when others then
10937         fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
10938         return false;
10939 
10940 
10941 end populate_member_reserve;
10942 
10943 --+=====================================================================
10944 -- Function: check_reduction_application
10945 --
10946 --  This function will be called to check if 50% rule is applied at group
10947 --  level or not before calling deprn basis rule function for each member
10948 --
10949 --+=====================================================================
10950 
10951 FUNCTION check_reduction_application(p_rule_name           in varchar2,
10952                                      p_group_asset_id      in number,
10953                                      p_book_type_code      in varchar2,
10954                                      p_period_counter      in number,
10955                                      p_group_deprn_basis   in varchar2,
10956                                      p_reduction_rate      in number,
10957                                      p_group_eofy_rec_cost in number,
10958                                      p_group_eofy_salvage_value in number,
10959                                      p_group_eofy_reserve  in number,
10960                                      p_mrc_sob_type_code   in varchar2,
10961                                      p_set_of_books_id     in number,
10962                                      x_apply_reduction_flag out nocopy varchar2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
10963   return boolean is
10964 
10965 --* Local variables
10966 h_half_year_rule_flag      varchar2(1);
10967 
10968 h_change_in_cost           number;
10969 h_change_in_cost_to_reduce number;
10970 h_total_change_in_cost     number;
10971 h_net_proceeds             number;
10972 h_net_proceeds_to_reduce   number;
10973 h_total_net_proceeds       number;
10974 h_first_half_cost          number;
10975 h_first_half_cost_to_reduce number;
10976 h_second_half_cost         number;
10977 h_second_half_cost_to_reduce number;
10978 
10979 h_reduction_amount         number;
10980 h_fy_begin_nbv             number;
10981 h_check_amount             number;
10982 
10983 l_calling_fn               varchar2(50) := 'FA_TRACK_MEMBER_PVT.CHECK_REDUCTION_APPLICATION';
10984 chk_reduction_err          exception;
10985 
10986 begin
10987 
10988   if (p_log_level_rec.statement_level) then
10989     fa_debug_pkg.add(l_calling_fn, '+++ Start to check 50% rule application ++ ', '+++');
10990   end if;
10991 
10992   if p_rule_name in ('YEAR END BALANCE WITH POSITIVE REDUCTION',
10993                      'YEAR END BALANCE WITH HALF YEAR RULE') then
10994     --* Set necessary parameters to call CALC_REDUCTION_AMOUNT
10995     if p_rule_name = 'YEAR END BALANCE WITH HALF YEAR RULE' then
10996       h_half_year_rule_flag := 'Y';
10997     else
10998       h_half_year_rule_flag := 'N';
10999     end if;
11000 
11001     if (p_log_level_rec.statement_level) then
11002       fa_debug_pkg.add(l_calling_fn, 'Just before calling CALC_REDUCTION_AMOUNT', '***');
11003     end if;
11004 
11005     if not FA_CALC_DEPRN_BASIS1_PKG.CALC_REDUCTION_AMOUNT
11006           (p_asset_id                   => p_group_asset_id,
11007            p_group_asset_id             => p_group_asset_id,
11008            p_asset_type                 => 'GROUP',
11009            p_book_type_code             => p_book_type_code,
11010            p_period_counter             => p_period_counter,
11011            p_half_year_rule_flag        => h_half_year_rule_flag,
11012            p_mrc_sob_type_code          => p_mrc_sob_type_code,
11013            p_set_of_books_id            => p_set_of_books_id,
11014            x_change_in_cost             => h_change_in_cost,
11015            x_change_in_cost_to_reduce   => h_change_in_cost_to_reduce,
11016            x_total_change_in_cost       => h_total_change_in_cost,
11017            x_net_proceeds               => h_net_proceeds,
11018            x_net_proceeds_to_reduce     => h_net_proceeds_to_reduce,
11019            x_total_net_proceeds         => h_total_net_proceeds,
11020            x_first_half_cost            => h_first_half_cost,
11021            x_first_half_cost_to_reduce  => h_first_half_cost_to_reduce,
11022            x_second_half_cost           => h_second_half_cost,
11023            x_second_half_cost_to_reduce => h_second_half_cost_to_reduce, p_log_level_rec => p_log_level_rec) then
11024 
11025       raise chk_reduction_err;
11026 
11027     end if; -- Call CALC_REDUCTION_AMOUNT
11028 
11029     h_reduction_amount := 0;
11030     x_apply_reduction_flag := NULL;
11031 
11032     -- Check the deprn basis rule name
11033     if p_rule_name = 'YEAR END BALANCE WITH POSITIVE REDUCTION' then
11034       -- This is a logic for Positive Reduction
11035       -- Check to apply reduction amount and calculate reduction amount
11036 
11037       If (h_change_in_cost - h_net_proceeds >0) then
11038         if p_group_deprn_basis ='COST' then
11039           h_reduction_amount := nvl(h_change_in_cost_to_reduce,0);
11040         else -- NBV Base
11041           h_reduction_amount := nvl(h_change_in_cost_to_reduce,0) - nvl(h_net_proceeds_to_reduce,0);
11042         end if;
11043       end if;  -- Reduction amount condition
11044 
11045       if h_reduction_amount<>0 then
11046         -- Apply reduction amount to group asset
11047         x_apply_reduction_flag :='Y';
11048       end if;
11049 
11050     else -- Case for Half Year Rule
11051       -- Check whether 1st half year's reduction amount
11052       h_fy_begin_nbv := nvl(p_group_eofy_rec_cost,0) + nvl(p_group_eofy_salvage_value,0)
11053                                                              - nvl(p_group_eofy_reserve,0);
11054 
11055       h_check_amount := nvl(h_fy_begin_nbv,0) + nvl(h_first_half_cost,0) - nvl(h_net_proceeds,0);
11056 
11057       x_apply_reduction_flag := 'N';
11058       -- Calculate first reduction amount
11059       if (h_check_amount < 0) then
11060         h_reduction_amount := h_check_amount*nvl(p_reduction_rate,0);
11061         if h_reduction_amount<>0 then
11062           -- Apply reduction amount to group asset
11063           x_apply_reduction_flag :='Y';
11064         end if;
11065       else
11066         x_apply_reduction_flag := 'Y';
11067       end if; -- End calculate first reduction amount
11068     end if; -- (if Rule Name = POSITIVE REDUCTION?)
11069   end if; -- (if Rule Name in (POSITIVE REDUCTION, HALF YEAR)?)
11070   --* This is the end of 50% rule applicablity check
11071 
11072 return (true);
11073 
11074 EXCEPTION
11075    when chk_reduction_err then
11076         fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
11077         return false;
11078 
11079    when others then
11080         fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
11081         return false;
11082 
11083 
11084 end check_reduction_application;
11085 
11086 
11087 --+=====================================================================
11088 -- Function: display_debug_message
11089 --
11090 --  This function will be called to display debug message
11091 --
11092 --+=====================================================================
11093 
11094 FUNCTION display_debug_message(fa_rule_in                  in fa_std_types.fa_deprn_rule_in_struct,
11095                                p_calling_fn                in varchar2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
11096 
11097   return boolean is
11098 
11099 --* local variables
11100 l_calling_fn         varchar2(50);
11101 begin
11102 
11103 l_calling_fn := p_calling_fn;
11104 
11105 fa_debug_pkg.add(l_calling_fn, '++ Debug Message for fa_rule_in structure ++', fa_rule_in.asset_id, p_log_level_rec => p_log_level_rec);
11106 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.event_type', fa_rule_in.event_type, p_log_level_rec => p_log_level_rec);
11107 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.book_type_code', fa_rule_in.book_type_code, p_log_level_rec => p_log_level_rec);
11108 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.asset_type', fa_rule_in.asset_type, p_log_level_rec => p_log_level_rec);
11109 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.method_code', fa_rule_in.method_code, p_log_level_rec => p_log_level_rec);
11110 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.life_in_months', fa_rule_in.life_in_months, p_log_level_rec => p_log_level_rec);
11111 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.cost',fa_rule_in.cost, p_log_level_rec => p_log_level_rec);
11112 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.salvage_value',fa_rule_in.salvage_value, p_log_level_rec => p_log_level_rec);
11113 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.recoverable_cost',fa_rule_in.recoverable_cost, p_log_level_rec => p_log_level_rec);
11114 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.current_total_rsv', fa_rule_in.current_total_rsv, p_log_level_rec => p_log_level_rec);
11115 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.current_rsv', fa_rule_in.current_rsv, p_log_level_rec => p_log_level_rec);
11116 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.current_total_ytd', fa_rule_in.current_total_ytd, p_log_level_rec => p_log_level_rec);
11117 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.old_adjusted_cost', fa_rule_in.old_adjusted_cost, p_log_level_rec => p_log_level_rec);
11118 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.old_raf',fa_rule_in.old_raf, p_log_level_rec => p_log_level_rec);
11119 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.period_counter', fa_rule_in.period_counter, p_log_level_rec => p_log_level_rec);
11120 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.fiscal_year', fa_rule_in.fiscal_year, p_log_level_rec => p_log_level_rec);
11121 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.tracking_method',fa_rule_in.tracking_method, p_log_level_rec => p_log_level_rec);
11122 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.used_by_adjustment', fa_rule_in.used_by_adjustment, p_log_level_rec => p_log_level_rec);
11123 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.eofy_flag', fa_rule_in.eofy_flag, p_log_level_rec => p_log_level_rec);
11124 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.eofy_reserve', fa_rule_in.eofy_reserve, p_log_level_rec => p_log_level_rec);
11125 fa_debug_pkg.add(l_calling_fn, 'fa_rule_in.mrc_sob_type_code', fa_rule_in.mrc_sob_type_code, p_log_level_rec => p_log_level_rec);
11126 
11127 return(true);
11128 
11129 end display_debug_message;
11130 
11131 --+=====================================================================
11132 -- Function: display_debug_message2
11133 --
11134 --  This function will be called to display debug message
11135 --  This is for p_track_member_table
11136 --+=====================================================================
11137 
11138 FUNCTION display_debug_message2(i                  in number,
11139                                 p_calling_fn       in varchar2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
11140 
11141   return boolean is
11142 
11143 --* local variables
11144 l_calling_fn         varchar2(50);
11145 begin
11146 
11147 l_calling_fn := p_calling_fn;
11148 
11149 fa_debug_pkg.add(l_calling_fn, '++ Debug Message display for p_track_member_table ++ Indicator ', i, p_log_level_rec => p_log_level_rec);
11150 fa_debug_pkg.add(l_calling_fn, 'member_asset_id', p_track_member_table(i).member_asset_id);
11151 fa_debug_pkg.add(l_calling_fn, 'set_of_books_id', p_track_member_table(i).set_of_books_id);
11152 fa_debug_pkg.add(l_calling_fn, 'period_counter', p_track_member_table(i).period_counter);
11153 fa_debug_pkg.add(l_calling_fn, 'fiscal_year', p_track_member_table(i).fiscal_year);
11154 fa_debug_pkg.add(l_calling_fn, 'cost', p_track_member_table(i).cost);
11155 fa_debug_pkg.add(l_calling_fn, 'salvage_value', p_track_member_table(i).salvage_value);
11156 fa_debug_pkg.add(l_calling_fn, 'recoverable_cost', p_track_member_table(i).recoverable_cost);
11157 fa_debug_pkg.add(l_calling_fn, 'adjusted_cost', p_track_member_table(i).adjusted_cost);
11158 fa_debug_pkg.add(l_calling_fn, 'adjusted_recoverable_cost', p_track_member_table(i).adjusted_recoverable_cost);
11159 fa_debug_pkg.add(l_calling_fn, 'deprn_amount', p_track_member_table(i).allocated_deprn_amount);
11160 fa_debug_pkg.add(l_calling_fn, 'deprn_reserve', p_track_member_table(i).deprn_reserve);
11161 fa_debug_pkg.add(l_calling_fn, 'ytd_deprn', p_track_member_table(i).ytd_deprn);
11162 fa_debug_pkg.add(l_calling_fn, 'bonus_deprn_amount', p_track_member_table(i).allocated_bonus_amount);
11163 fa_debug_pkg.add(l_calling_fn, 'bonus_deprn_reserve', p_track_member_table(i).bonus_deprn_reserve);
11164 fa_debug_pkg.add(l_calling_fn, 'bonus_ytd_deprn', p_track_member_table(i).bonus_ytd_deprn);
11165 fa_debug_pkg.add(l_calling_fn, 'eofy_reserve', p_track_member_table(i).eofy_reserve);
11166 fa_debug_pkg.add(l_calling_fn, 'eofy_recoverable_cost', p_track_member_table(i).eofy_recoverable_cost);
11167 fa_debug_pkg.add(l_calling_fn, 'eofy_salvage_value', p_track_member_table(i).eofy_salvage_value);
11168 fa_debug_pkg.add(l_calling_fn, 'fully_reserved_flag', p_track_member_table(i).fully_reserved_flag);
11169 fa_debug_pkg.add(l_calling_fn, 'fully_retired_flag', p_track_member_table(i).fully_retired_flag);
11170 
11171 return true;
11172 
11173 end display_debug_message2;
11174 
11175 --+=====================================================================
11176 -- Function: copy_member_table
11177 --
11178 --  This function will be called to backup the memory table
11179 --  restore backuped memory table
11180 --
11181 --+=====================================================================
11182 
11183 FUNCTION copy_member_table(p_backup_restore        in varchar2,
11184                            p_current_fiscal_year   in number,
11185                            p_current_period_num    in number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
11186 
11187   return boolean is
11188 
11189 --* local variables
11190 h_period_counter     number;
11191 h_number_per_fy      number;
11192 l_calling_fn         varchar2(50) := 'FA_TRACK_MEMBER_PVT.COPY_MEMBER_TABLE';
11193 
11194 begin
11195 
11196 if p_backup_restore = 'BACKUP' then
11197   if (p_log_level_rec.statement_level) then
11198     fa_debug_pkg.add(l_calling_fn, '++++ Backup p_track_member_table starts ++++', '++++', p_log_level_rec => p_log_level_rec);
11199     fa_debug_pkg.add(l_calling_fn, 'Backup p_track_member_table rows', p_track_member_table.COUNT, p_log_level_rec => p_log_level_rec);
11200     fa_debug_pkg.add(l_calling_fn, 'Last processed fiscal year:period_num', p_current_fiscal_year||':'||p_current_period_num, p_log_level_rec => p_log_level_rec);
11201   end if;
11202 
11203   if p_current_fiscal_year is not null and p_current_period_num is not null then
11204     h_number_per_fy := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
11205     h_period_counter := p_current_fiscal_year*h_number_per_fy+p_current_period_num;
11206   else
11207     h_period_counter := NULL;
11208   end if;
11209 
11210   p_track_member_table_for_deprn.delete;
11211 
11212   For l_ind IN 1.. p_track_member_table.COUNT LOOP
11213 
11214    p_track_member_table_for_deprn(l_ind).group_asset_id := p_track_member_table(l_ind).group_asset_id;
11215    p_track_member_table_for_deprn(l_ind).member_asset_id := p_track_member_table(l_ind).member_asset_id;
11216    p_track_member_table_for_deprn(l_ind).period_counter := p_track_member_table(l_ind).period_counter;
11217    p_track_member_table_for_deprn(l_ind).fiscal_year := p_track_member_table(l_ind).fiscal_year;
11218    p_track_member_table_for_deprn(l_ind).set_of_books_id := p_track_member_table(l_ind).set_of_books_id;
11219    p_track_member_table_for_deprn(l_ind).allocation_basis := p_track_member_table(l_ind).allocation_basis;
11220    p_track_member_table_for_deprn(l_ind).total_allocation_basis := p_track_member_table(l_ind).total_allocation_basis;
11221    p_track_member_table_for_deprn(l_ind).allocated_deprn_amount:= p_track_member_table(l_ind).allocated_deprn_amount;
11222    p_track_member_table_for_deprn(l_ind).allocated_bonus_amount:= p_track_member_table(l_ind).allocated_bonus_amount;
11223    p_track_member_table_for_deprn(l_ind).system_deprn_amount:= p_track_member_table(l_ind).system_deprn_amount;
11224    p_track_member_table_for_deprn(l_ind).system_bonus_amount:= p_track_member_table(l_ind).system_bonus_amount;
11225    p_track_member_table_for_deprn(l_ind).fully_reserved_flag := p_track_member_table(l_ind).fully_reserved_flag;
11226    p_track_member_table_for_deprn(l_ind).fully_retired_flag := p_track_member_table(l_ind).fully_retired_flag;
11227    p_track_member_table_for_deprn(l_ind).override_flag := p_track_member_table(l_ind).override_flag;
11228    p_track_member_table_for_deprn(l_ind).cost := p_track_member_table(l_ind).cost;
11229    p_track_member_table_for_deprn(l_ind).adjusted_cost := p_track_member_table(l_ind).adjusted_cost;
11230    p_track_member_table_for_deprn(l_ind).eofy_adj_cost := p_track_member_table(l_ind).eofy_adj_cost;
11231    p_track_member_table_for_deprn(l_ind).recoverable_cost := p_track_member_table(l_ind).recoverable_cost;
11232    p_track_member_table_for_deprn(l_ind).salvage_value := p_track_member_table(l_ind).salvage_value;
11233    p_track_member_table_for_deprn(l_ind).adjusted_recoverable_cost := p_track_member_table(l_ind).adjusted_recoverable_cost;
11234    p_track_member_table_for_deprn(l_ind).eofy_reserve := p_track_member_table(l_ind).eofy_reserve;
11235    p_track_member_table_for_deprn(l_ind).deprn_reserve := p_track_member_table(l_ind).deprn_reserve;
11236    p_track_member_table_for_deprn(l_ind).ytd_deprn := p_track_member_table(l_ind).ytd_deprn;
11237    p_track_member_table_for_deprn(l_ind).bonus_deprn_reserve := p_track_member_table(l_ind).bonus_deprn_reserve;
11238    p_track_member_table_for_deprn(l_ind).bonus_ytd_deprn := p_track_member_table(l_ind).bonus_ytd_deprn;
11239    p_track_member_table_for_deprn(l_ind).eofy_recoverable_cost := p_track_member_table(l_ind).eofy_recoverable_cost;
11240    p_track_member_table_for_deprn(l_ind).eop_recoverable_cost := p_track_member_table(l_ind).eop_recoverable_cost;
11241    p_track_member_table_for_deprn(l_ind).eofy_salvage_value := p_track_member_table(l_ind).eofy_salvage_value;
11242    p_track_member_table_for_deprn(l_ind).eop_salvage_value := p_track_member_table(l_ind).eop_salvage_value;
11243 
11244    --p_track_member_table_for_deprn(l_ind).member_index := p_track_member_table(l_ind).member_index;
11245 
11246  End Loop;
11247 
11248 else
11249   if (p_log_level_rec.statement_level) then
11250     fa_debug_pkg.add(l_calling_fn, '++++ Restore p_track_member_table starts ++++', '++++', p_log_level_rec => p_log_level_rec);
11251     fa_debug_pkg.add(l_calling_fn, 'Restored p_track_member_table rows', p_track_member_table_for_deprn.COUNT, p_log_level_rec => p_log_level_rec);
11252   end if;
11253 
11254   p_track_member_table.delete;
11255   p_track_mem_index_table.delete;
11256 
11257   For l_ind IN 1.. p_track_member_table_for_deprn.COUNT LOOP
11258 
11259    p_track_member_table(l_ind).group_asset_id := p_track_member_table_for_deprn(l_ind).group_asset_id;
11260    p_track_member_table(l_ind).member_asset_id := p_track_member_table_for_deprn(l_ind).member_asset_id;
11261    p_track_member_table(l_ind).period_counter := p_track_member_table_for_deprn(l_ind).period_counter;
11262    p_track_member_table(l_ind).fiscal_year := p_track_member_table_for_deprn(l_ind).fiscal_year;
11263    p_track_member_table(l_ind).set_of_books_id := p_track_member_table_for_deprn(l_ind).set_of_books_id;
11264    p_track_member_table(l_ind).allocation_basis := p_track_member_table_for_deprn(l_ind).allocation_basis;
11265    p_track_member_table(l_ind).total_allocation_basis := p_track_member_table_for_deprn(l_ind).total_allocation_basis;
11266    p_track_member_table(l_ind).allocated_deprn_amount:= p_track_member_table_for_deprn(l_ind).allocated_deprn_amount;
11267    p_track_member_table(l_ind).allocated_bonus_amount:= p_track_member_table_for_deprn(l_ind).allocated_bonus_amount;
11268    p_track_member_table(l_ind).system_deprn_amount:= p_track_member_table_for_deprn(l_ind).system_deprn_amount;
11269    p_track_member_table(l_ind).system_bonus_amount:= p_track_member_table_for_deprn(l_ind).system_bonus_amount;
11270    p_track_member_table(l_ind).fully_reserved_flag := p_track_member_table_for_deprn(l_ind).fully_reserved_flag;
11271    p_track_member_table(l_ind).fully_retired_flag := p_track_member_table_for_deprn(l_ind).fully_retired_flag;
11272    p_track_member_table(l_ind).override_flag := p_track_member_table_for_deprn(l_ind).override_flag;
11273    p_track_member_table(l_ind).cost := p_track_member_table_for_deprn(l_ind).cost;
11274    p_track_member_table(l_ind).adjusted_cost := p_track_member_table_for_deprn(l_ind).adjusted_cost;
11275    p_track_member_table(l_ind).eofy_adj_cost := p_track_member_table_for_deprn(l_ind).eofy_adj_cost;
11276    p_track_member_table(l_ind).recoverable_cost := p_track_member_table_for_deprn(l_ind).recoverable_cost;
11277    p_track_member_table(l_ind).salvage_value := p_track_member_table_for_deprn(l_ind).salvage_value;
11278    p_track_member_table(l_ind).adjusted_recoverable_cost := p_track_member_table_for_deprn(l_ind).adjusted_recoverable_cost;
11279    p_track_member_table(l_ind).eofy_reserve := p_track_member_table_for_deprn(l_ind).eofy_reserve;
11280    p_track_member_table(l_ind).deprn_reserve := p_track_member_table_for_deprn(l_ind).deprn_reserve;
11281    p_track_member_table(l_ind).ytd_deprn := p_track_member_table_for_deprn(l_ind).ytd_deprn;
11282    p_track_member_table(l_ind).bonus_deprn_reserve := p_track_member_table_for_deprn(l_ind).bonus_deprn_reserve;
11283    p_track_member_table(l_ind).bonus_ytd_deprn := p_track_member_table_for_deprn(l_ind).bonus_ytd_deprn;
11284    p_track_member_table(l_ind).eofy_recoverable_cost := p_track_member_table_for_deprn(l_ind).eofy_recoverable_cost;
11285    p_track_member_table(l_ind).eop_recoverable_cost := p_track_member_table_for_deprn(l_ind).eop_recoverable_cost;
11286    p_track_member_table(l_ind).eofy_salvage_value := p_track_member_table_for_deprn(l_ind).eofy_salvage_value;
11287    p_track_member_table(l_ind).eop_salvage_value := p_track_member_table_for_deprn(l_ind).eop_salvage_value;
11288 
11289  put_track_index(p_track_member_table_for_deprn(l_ind).period_counter,p_track_member_table_for_deprn(l_ind).member_asset_id,
11290                  p_track_member_table_for_deprn(l_ind).group_asset_id,p_track_member_table_for_deprn(l_ind).set_of_books_id,
11291                  l_ind,p_log_level_rec);
11292 
11293    --p_track_member_table(l_ind).member_index := p_track_member_table_for_deprn(l_ind).member_index;
11294 
11295    if (p_log_level_rec.statement_level) then
11296       fa_debug_pkg.add('#### HH Test ###', 'Period Counter, member_asset_id restored',
11297                       p_track_member_table(l_ind).period_counter||','||
11298                       p_track_member_table(l_ind).member_asset_id);
11299    end if;
11300 
11301  End Loop;
11302 
11303 end if;
11304 
11305 if (p_log_level_rec.statement_level) then
11306   fa_debug_pkg.add(l_calling_fn, p_backup_restore||' has been done ++++', '++++', p_log_level_rec => p_log_level_rec);
11307 end if;
11308 
11309 return(true);
11310 
11311 end copy_member_table;
11312 
11313 --+=====================================================================
11314 -- Function: create_update_books_summary
11315 --
11316 --  This function will be called to insert row into fa_books_summary if not exists
11317 --  update fa_books_summary row if exists
11318 --  Used merge statement for bug 7195989
11319 --+=====================================================================
11320 
11321 FUNCTION create_update_bs_table(p_trans_rec         in FA_API_TYPES.trans_rec_type,
11322                                 p_book_type_code    in varchar2,
11323                                 p_group_asset_id    in varchar2,
11324                                 p_mrc_sob_type_code in varchar2,
11325                                 p_sob_id            in number, --Bug 8941132
11326                                 p_calling_fn        in varchar2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
11327   return boolean is
11328 
11329 --* Local variables
11330 l_calling_fn        varchar2(50) := 'FA_TRACK_MEMBER_PVT.create_update_bs_table';
11331 
11332 type t_type_num is table of number index by binary_integer;
11333 type t_type_varchar is table of varchar2(1000) index by binary_integer;
11334 type t_type_date is table of date index by binary_integer;
11335 l_tbl_group_asset_id t_type_num;
11336 l_tbl_member_asset_id t_type_num;
11337 l_tbl_period_counter t_type_num;
11338 l_tbl_set_of_books_id t_type_num;
11339 l_tbl_alloc_deprn_amt t_type_num;
11340 l_tbl_alloc_bonus_amt t_type_num;
11341 l_tbl_cost t_type_num;
11342 l_tbl_adjusted_cost t_type_num;
11343 l_tbl_recoverable_cost t_type_num;
11344 l_tbl_salvage_value t_type_num;
11345 l_tbl_adj_recoverable_cost t_type_num;
11346 l_tbl_deprn_reserve t_type_num;
11347 l_tbl_ytd_deprn t_type_num;
11348 l_tbl_bonus_ytd_deprn t_type_num;
11349 l_tbl_bonus_deprn_reserve t_type_num;
11350 l_tbl_eofy_reserve t_type_num;
11351 
11352 l_primary_sob number; --Bug 8941132
11353 k number; --Bug 8941132
11354 
11355 
11356 begin
11357       l_primary_sob := fa_cache_pkg.fazcbc_record.set_of_books_id; --Bug 8941132
11358       k:=1; --Bug 8941132
11359 
11360       for i IN 1.. p_track_member_table.COUNT
11361       loop
11362          if p_sob_id = p_track_member_table(i).SET_OF_BOOKS_ID then
11363             l_tbl_group_asset_id(k)  := p_track_member_table(i).GROUP_ASSET_ID;
11364             l_tbl_member_asset_id(k) := p_track_member_table(i).MEMBER_ASSET_ID;
11365             l_tbl_period_counter(k)  := p_track_member_table(i).PERIOD_COUNTER;
11366             l_tbl_set_of_books_id(k) := p_track_member_table(i).SET_OF_BOOKS_ID;
11367             l_tbl_alloc_deprn_amt(k) := p_track_member_table(i).ALLOCATED_DEPRN_AMOUNT;
11368             l_tbl_alloc_bonus_amt(k) := p_track_member_table(i).ALLOCATED_BONUS_AMOUNT;
11369             l_tbl_cost(k)             := p_track_member_table(i).COST;
11370             l_tbl_adjusted_cost(k)    := p_track_member_table(i).ADJUSTED_COST;
11371             l_tbl_recoverable_cost(k) := p_track_member_table(i).RECOVERABLE_COST;
11372             l_tbl_salvage_value(k)    := p_track_member_table(i).SALVAGE_VALUE;
11373             l_tbl_adj_recoverable_cost(k) :=  p_track_member_table(i).ADJUSTED_RECOVERABLE_COST;
11374             l_tbl_deprn_reserve(k)    := p_track_member_table(i).DEPRN_RESERVE;
11375             l_tbl_ytd_deprn(k)        := p_track_member_table(i).YTD_DEPRN;
11376             l_tbl_bonus_deprn_reserve(k) := p_track_member_table(i).BONUS_DEPRN_RESERVE;
11377             l_tbl_bonus_ytd_deprn(k)  := p_track_member_table(i).BONUS_YTD_DEPRN;
11378             l_tbl_eofy_reserve(k) := p_track_member_table(i).EOFY_RESERVE;
11379             k:= k+1;
11380          end if;
11381       end loop;
11382 
11383    if p_mrc_sob_type_code = 'R' then
11384       forall j in 1..l_tbl_member_asset_id.COUNT
11385       MERGE INTO FA_MC_BOOKS_SUMMARY BS
11386       USING (SELECT
11387                   l_tbl_group_asset_id(j) as group_asset_id,
11388                   l_tbl_member_asset_id(j) as member_asset_id,
11389                   l_tbl_period_counter(j) as period_counter,
11390                   l_tbl_set_of_books_id(j) as set_of_books_id,
11391                   l_tbl_alloc_deprn_amt(j) as allocated_deprn_amount,
11392                   l_tbl_alloc_bonus_amt(j) as allocated_bonus_amount,
11393                   l_tbl_cost(j) as cost,
11394                   l_tbl_adjusted_cost(j) as adjusted_cost,
11395                   l_tbl_recoverable_cost(j) as recoverable_cost,
11396                   l_tbl_salvage_value(j) as salvage_value,
11397                   l_tbl_adj_recoverable_cost(j) as adjusted_recoverable_cost,
11398                   l_tbl_deprn_reserve(j) as deprn_reserve,
11399                   l_tbl_ytd_deprn(j) as ytd_deprn,
11400                   l_tbl_bonus_deprn_reserve(j) as bonus_deprn_reserve,
11401                   l_tbl_bonus_ytd_deprn(j) as bonus_ytd_deprn,
11402                   l_tbl_eofy_reserve(j) as eofy_reserve
11403             from dual
11404             ) TM
11405          ON ((BS.ASSET_ID = tm.member_asset_id) AND
11406              (BS.BOOK_TYPE_CODE = p_book_type_code) AND
11407              (BS.SET_OF_BOOKS_ID = tm.set_of_books_id) AND
11408              (BS.PERIOD_COUNTER = tm.period_counter))
11409          WHEN MATCHED THEN
11410             UPDATE
11411             SET    BS.COST                       = tm.cost,
11412                    BS.SALVAGE_VALUE              = tm.salvage_value,
11413                    BS.RECOVERABLE_COST           = tm.recoverable_cost,
11414                    BS.ADJUSTED_RECOVERABLE_COST  = tm.adjusted_recoverable_cost,
11415                    BS.ADJUSTED_COST              = tm.adjusted_cost,
11416                    BS.DEPRN_AMOUNT               = tm.allocated_deprn_amount,
11417                    BS.YTD_DEPRN                  = tm.ytd_deprn,
11418                    BS.DEPRN_RESERVE              = tm.deprn_reserve,
11419                    BS.BONUS_DEPRN_AMOUNT         = tm.allocated_bonus_amount,
11420                    BS.BONUS_YTD_DEPRN            = tm.bonus_ytd_deprn,
11421                    BS.BONUS_DEPRN_RESERVE        = tm.bonus_deprn_reserve,
11422                    BS.EOFY_RESERVE               = tm.eofy_reserve,
11423                    BS.LAST_UPDATE_DATE           = p_trans_rec.who_info.last_update_date,
11424                    BS.LAST_UPDATED_BY            = p_trans_rec.who_info.last_updated_by,
11425                    BS.LAST_UPDATE_LOGIN          = p_trans_rec.who_info.last_update_login
11426          WHEN NOT MATCHED THEN
11427             INSERT (BS.SET_OF_BOOKS_ID,
11428                     BS.ASSET_ID,
11429                     BS.GROUP_ASSET_ID,
11430                     BS.BOOK_TYPE_CODE,
11431                     BS.PERIOD_COUNTER,
11432                     BS.COST,
11433                     BS.SALVAGE_VALUE,
11434                     BS.RECOVERABLE_COST,
11435                     BS.ADJUSTED_COST,
11436                     BS.ADJUSTED_RECOVERABLE_COST,
11437                     BS.DEPRN_AMOUNT,
11438                     BS.BONUS_DEPRN_AMOUNT,
11439                     BS.DEPRN_RESERVE,
11440                     BS.BONUS_DEPRN_RESERVE,
11441                     BS.YTD_DEPRN,
11442                     BS.BONUS_YTD_DEPRN,
11443                     BS.EOFY_RESERVE,
11444                     BS.CREATION_DATE,
11445                     BS.CREATED_BY,
11446                     BS.LAST_UPDATE_DATE,
11447                     BS.LAST_UPDATED_BY,
11448                     BS.LAST_UPDATE_LOGIN
11449             ) VALUES (
11450                     tm.set_of_books_id,
11451                     tm.member_asset_id,
11452                     tm.group_asset_id,
11453                     p_book_type_code,
11454                     tm.period_counter,
11455                     tm.cost,
11456                     tm.salvage_value,
11457                     tm.recoverable_cost,
11458                     tm.adjusted_cost,
11459                     tm.adjusted_recoverable_cost,
11460                     tm.allocated_deprn_amount,
11461                     tm.allocated_bonus_amount,
11462                     tm.deprn_reserve,
11463                     tm.bonus_deprn_reserve,
11464                     tm.ytd_deprn,
11465                     tm.bonus_ytd_deprn,
11466                     tm.eofy_reserve,
11467                     p_trans_rec.who_info.last_update_date,
11468                     p_trans_rec.who_info.last_updated_by,
11469                     p_trans_rec.who_info.last_update_date,
11470                     p_trans_rec.who_info.last_updated_by,
11471                     p_trans_rec.who_info.last_update_login
11472             );
11473 
11474    else
11475       forall j in 1..l_tbl_member_asset_id.COUNT
11476       MERGE INTO FA_BOOKS_SUMMARY BS
11477       USING (
11478             SELECT
11479                   l_tbl_group_asset_id(j) as group_asset_id,
11480                   l_tbl_member_asset_id(j) as member_asset_id,
11481                   l_tbl_period_counter(j) as period_counter,
11482                   l_tbl_set_of_books_id(j) as set_of_books_id,
11483                   l_tbl_alloc_deprn_amt(j) as allocated_deprn_amount,
11484                   l_tbl_alloc_bonus_amt(j) as allocated_bonus_amount,
11485                   l_tbl_cost(j) as cost,
11486                   l_tbl_adjusted_cost(j) as adjusted_cost,
11487                   l_tbl_recoverable_cost(j) as recoverable_cost,
11488                   l_tbl_salvage_value(j) as salvage_value,
11489                   l_tbl_adj_recoverable_cost(j) as adjusted_recoverable_cost,
11490                   l_tbl_deprn_reserve(j) as deprn_reserve,
11491                   l_tbl_ytd_deprn(j) as ytd_deprn,
11492                   l_tbl_bonus_deprn_reserve(j) as bonus_deprn_reserve,
11493                   l_tbl_bonus_ytd_deprn(j) as bonus_ytd_deprn,
11494                   l_tbl_eofy_reserve(j) as eofy_reserve
11495             from dual
11496             ) TM
11497          ON ((BS.ASSET_ID = tm.member_asset_id) AND
11498              (BS.BOOK_TYPE_CODE = p_book_type_code) AND
11499              (BS.PERIOD_COUNTER = tm.period_counter))
11500          WHEN MATCHED THEN
11501             UPDATE
11502             SET    BS.COST                       = tm.cost,
11503                    BS.SALVAGE_VALUE              = tm.salvage_value,
11504                    BS.RECOVERABLE_COST           = tm.recoverable_cost,
11505                    BS.ADJUSTED_RECOVERABLE_COST  = tm.adjusted_recoverable_cost,
11506                    BS.ADJUSTED_COST              = tm.adjusted_cost,
11507                    BS.DEPRN_AMOUNT               = tm.allocated_deprn_amount,
11508                    BS.YTD_DEPRN                  = tm.ytd_deprn,
11509                    BS.DEPRN_RESERVE              = tm.deprn_reserve,
11510                    BS.BONUS_DEPRN_AMOUNT         = tm.allocated_bonus_amount,
11511                    BS.BONUS_YTD_DEPRN            = tm.bonus_ytd_deprn,
11512                    BS.BONUS_DEPRN_RESERVE        = tm.bonus_deprn_reserve,
11513                    BS.EOFY_RESERVE               = tm.eofy_reserve,
11514                    BS.LAST_UPDATE_DATE           = p_trans_rec.who_info.last_update_date,
11515                    BS.LAST_UPDATED_BY            = p_trans_rec.who_info.last_updated_by,
11516                    BS.LAST_UPDATE_LOGIN          = p_trans_rec.who_info.last_update_login
11517          WHEN NOT MATCHED THEN
11518             INSERT (BS.ASSET_ID,
11519                     BS.GROUP_ASSET_ID,
11520                     BS.BOOK_TYPE_CODE,
11521                     BS.PERIOD_COUNTER,
11522                     BS.COST,
11523                     BS.SALVAGE_VALUE,
11524                     BS.RECOVERABLE_COST,
11525                     BS.ADJUSTED_COST,
11526                     BS.ADJUSTED_RECOVERABLE_COST,
11527                     BS.DEPRN_AMOUNT,
11528                     BS.BONUS_DEPRN_AMOUNT,
11529                     BS.DEPRN_RESERVE,
11530                     BS.BONUS_DEPRN_RESERVE,
11531                     BS.YTD_DEPRN,
11532                     BS.BONUS_YTD_DEPRN,
11533                     BS.EOFY_RESERVE,
11534                     BS.CREATION_DATE,
11535                     BS.CREATED_BY,
11536                     BS.LAST_UPDATE_DATE,
11537                     BS.LAST_UPDATED_BY,
11538                     BS.LAST_UPDATE_LOGIN
11539             ) VALUES (
11540                     tm.member_asset_id,
11541                     tm.group_asset_id,
11542                     p_book_type_code,
11543                     tm.period_counter,
11544                     tm.cost,
11545                     tm.salvage_value,
11546                     tm.recoverable_cost,
11547                     tm.adjusted_cost,
11548                     tm.adjusted_recoverable_cost,
11549                     tm.allocated_deprn_amount,
11550                     tm.allocated_bonus_amount,
11551                     tm.deprn_reserve,
11552                     tm.bonus_deprn_reserve,
11553                     tm.ytd_deprn,
11554                     tm.bonus_ytd_deprn,
11555                     tm.eofy_reserve,
11556                     p_trans_rec.who_info.last_update_date,
11557                     p_trans_rec.who_info.last_updated_by,
11558                     p_trans_rec.who_info.last_update_date,
11559                     p_trans_rec.who_info.last_updated_by,
11560                     p_trans_rec.who_info.last_update_login
11561             );
11562    end if;
11563    return (true);
11564 
11565 exception
11566   when others then
11567     fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
11568     return false;
11569 
11570 end create_update_bs_table;
11571 
11572 --+=====================================================================
11573 -- Function: override_member_amount
11574 --
11575 --  This function will be called to override deprn amount of member assets
11576 --  This is called only when populate_member_assets_table calls
11577 --
11578 --+=====================================================================
11579 
11580 FUNCTION override_member_amount(p_book_type_code        in varchar2,
11581                                 p_member_asset_id       in number,
11582                                 p_fiscal_year           in number,
11583                                 p_period_num            in number,
11584                                 p_ytd_deprn             in number,
11585                                 p_bonus_ytd_deprn       in number,
11586                                 x_override_deprn_amount out nocopy number,
11587                                 x_override_bonus_amount out nocopy number,
11588                                 x_deprn_override_flag   out nocopy varchar2,
11589                                 p_calling_fn            in varchar2,
11590                                 p_mrc_sob_type_code     in varchar2,
11591                                 p_recoverable_cost      in number,
11592                                 p_salvage_value         in number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
11593   return boolean is
11594 
11595 --* Local variables
11596 h_period_name             varchar2(15);
11597 h_set_of_books_id         number;
11598 h_reporting_flag          varchar2(1);
11599 
11600 h_calendar_type           varchar2(15);
11601 h_fy_name                 varchar2(30);
11602 h_num_per_fy              number;
11603 
11604 h_subtract_ytd_flag       varchar2(1);
11605 h_deprn_override_id       number;
11606 
11607 report_cost               number;
11608 l_avg_rate                number;
11609 
11610 --* Exceptions
11611 l_calling_fn              varchar2(50) := 'FA_TRACK_MEMBER_PVT.OVERRIDE_MEMBER_AMOUNTS';
11612 
11613 --* Cursor to query FA_DEPRN_OVERRIDE with 'POSTED' and 'DEPRECIATION'
11614 cursor GET_OVERRIDE_AMOUNT is
11615    SELECT deprn_amount, bonus_deprn_amount, subtract_ytd_flag, deprn_override_id
11616      FROM FA_DEPRN_OVERRIDE
11617     WHERE
11618       book_type_code = p_book_type_code and
11619       asset_id = p_member_asset_id and
11620       period_name = h_period_name and
11621       used_by = 'DEPRECIATION' and
11622       status = 'POSTED';
11623 
11624 begin
11625 
11626 if (p_log_level_rec.statement_level) then
11627     fa_debug_pkg.add(l_calling_fn, '*** Start OVERRIDE for populate_member_assets_table process', '***');
11628     fa_debug_pkg.add(l_calling_fn, 'p_book_type_code:p_member_asset_id:p_mrc_sob_type_code',
11629                                     p_book_type_code||':'||p_member_asset_id||':'||p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec);
11630     fa_debug_pkg.add(l_calling_fn, 'p_calling_fn', p_calling_fn, p_log_level_rec => p_log_level_rec);
11631 end if;
11632 
11633 if nvl(p_calling_fn,'NULL') = 'POPULATE_MEMBER_ASSETS_TABLE' then
11634   -- This funcation can work only during processing populate_member_assets_table
11635 
11636   IF p_mrc_sob_type_code = 'R' THEN
11637     h_reporting_flag := 'R';
11638   ELSE
11639     h_reporting_flag := 'P';
11640   END IF;
11641 
11642   if (p_log_level_rec.statement_level) then
11643     fa_debug_pkg.add(l_calling_fn, 'h_set_of_books_id:h_reporting_flag', h_set_of_books_id||':'||h_reporting_flag, p_log_level_rec => p_log_level_rec);
11644   end if;
11645    /* select the corresponding period_counter for the current period: fyctr, perd_ctr */
11646   h_calendar_type:= fa_cache_pkg.fazcbc_record.deprn_calendar;
11647   h_fy_name:= fa_cache_pkg.fazcbc_record.fiscal_year_name;
11648   h_num_per_fy:= fa_cache_pkg.fazcct_record.number_per_fiscal_year;
11649 
11650   select cp.period_name
11651     into h_period_name
11652     from fa_calendar_periods cp, fa_fiscal_year fy
11653    where cp.calendar_type = h_calendar_type and
11654          cp.period_num = p_period_num and
11655          cp.start_date >= fy.start_date and
11656          cp.end_date <= fy.end_date and
11657          fy.fiscal_year_name = h_fy_name and
11658          fy.fiscal_year = p_fiscal_year;
11659 
11660   if (p_log_level_rec.statement_level) then
11661      fa_debug_pkg.add(l_calling_fn, 'h_period_name', h_period_name, p_log_level_rec => p_log_level_rec);
11662   end if;
11663   /* Query override table */
11664   open GET_OVERRIDE_AMOUNT;
11665   fetch GET_OVERRIDE_AMOUNT INTO x_override_deprn_amount, x_override_bonus_amount, h_subtract_ytd_flag, h_deprn_override_id;
11666   close GET_OVERRIDE_AMOUNT;
11667 
11668   if (p_log_level_rec.statement_level) then
11669      fa_debug_pkg.add(l_calling_fn, 'x_override_deprn:bonus_amount', x_override_deprn_amount||':'||x_override_bonus_amount, p_log_level_rec => p_log_level_rec);
11670      fa_debug_pkg.add(l_calling_fn, 'p_ytd_deprn:bonus_ytd', p_ytd_deprn||':'||p_bonus_ytd_deprn, p_log_level_rec => p_log_level_rec);
11671      fa_debug_pkg.add(l_calling_fn, 'p_recoverable_cost:p_salvage_value', p_recoverable_cost||':'||p_salvage_value, p_log_level_rec => p_log_level_rec);
11672   end if;
11673 
11674   l_avg_rate := 1;
11675 
11676   if (h_reporting_flag <> 'R') then
11677      primary_cost:= p_recoverable_cost + p_salvage_value;
11678   else
11679      report_cost:= p_recoverable_cost + p_salvage_value;
11680   end if;
11681 
11682   if (p_log_level_rec.statement_level) then
11683      fa_debug_pkg.add(l_calling_fn, 'primary_cost:report_cost', primary_cost||':'||report_cost, p_log_level_rec => p_log_level_rec);
11684   end if;
11685 
11686    -- ratio = Reporting Books Cost / Primary books Cost for adjustment.
11687    --         the above calculation can be used once the depreciaion
11688    --         program was built in one-step.
11689    --       = use latest average rate for depreciation until one-step depreciation is built.
11690 
11691   if primary_cost <> 0 then
11692     l_avg_rate:= report_cost / primary_cost;
11693   end if;
11694 
11695   IF x_override_deprn_amount is not null THEN
11696       x_deprn_override_flag:= fa_std_types.FA_OVERRIDE_DPR;
11697       x_deprn_override_flag:= fa_std_types.FA_OVERRIDE_DPR;
11698       if (h_reporting_flag = 'R') then
11699           x_override_deprn_amount := x_override_deprn_amount * l_avg_rate;
11700       end if;
11701       IF x_override_bonus_amount is not null THEN
11702          x_deprn_override_flag:= fa_std_types.FA_OVERRIDE_DPR_BONUS;
11703          if (h_reporting_flag = 'R') then
11704            x_override_bonus_amount:= x_override_bonus_amount * l_avg_rate;
11705          end if;
11706       END IF;
11707   ELSIF x_override_bonus_amount is not null THEN
11708       x_deprn_override_flag:= fa_std_types.FA_OVERRIDE_BONUS;
11709       if (h_reporting_flag = 'R') then
11710          x_override_bonus_amount:= x_override_bonus_amount * l_avg_rate;
11711       end if;
11712    ELSE
11713       x_deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
11714    END IF;
11715 
11716   --  When user provided YTD amount
11717   IF NVL(h_subtract_ytd_flag,'N') = 'Y' THEN
11718     x_override_deprn_amount := x_override_deprn_amount - (p_ytd_deprn - p_bonus_ytd_deprn);
11719     x_override_bonus_amount := x_override_bonus_amount - p_bonus_ytd_deprn;
11720   END IF;
11721 
11722   if (p_log_level_rec.statement_level) then
11723     fa_debug_pkg.add(l_calling_fn, 'x_override_deprn:bonus_amount:override_flag',
11724                      x_override_deprn_amount||':'||x_override_bonus_amount||':'||x_deprn_override_flag, p_log_level_rec => p_log_level_rec);
11725   end if;
11726 
11727 end if;
11728 
11729 return(TRUE);
11730 
11731 exception
11732    when others then
11733       x_deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
11734       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
11735       return(TRUE);
11736 
11737 end override_member_amount;
11738 
11739 /* This function populates unplanned expense details
11740 to PL-SQL table p_track_member_table
11741 created for bug 7195989
11742 */
11743 FUNCTION populate_unplanned_exp(p_set_of_books_id IN NUMBER,
11744                            p_mrc_sob_type_code in VARCHAR2,
11745                            p_book_type_code IN VARCHAR2,
11746                            p_period_counter IN NUMBER,
11747                            p_group_asset_id IN NUMBER, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
11748   return boolean IS
11749 cursor C_FA_ADJ_UNPLANNED is
11750    select sum(decode(adj.adjustment_type,'EXPENSE',
11751                        decode(adj.debit_credit_flag,
11752                  'DR',adj.adjustment_amount,
11753                  'CR', -1 * adj.adjustment_amount))) as grp_unpln_exp,
11754           sum(decode(adj.adjustment_type,'EXPENSE',
11755                        decode(adj.debit_credit_flag,
11756                  'DR',adj.adjustment_amount,
11757                  'CR', -1 * adj.adjustment_amount))) as mem_unpln_exp,
11758           th2.asset_id member_asset_id
11759      from fa_adjustments adj,
11760         fa_adjustments adj_mem,
11761         fa_transaction_headers th1,
11762         fa_transaction_headers th2
11763     where adj.transaction_header_id = th1.transaction_header_id
11764       and adj.asset_id = p_group_asset_id
11765       and adj.book_type_code = p_book_type_code
11766       and adj.period_counter_adjusted = p_period_counter
11767       and th1.asset_id = adj.asset_id
11768       and th1.member_transaction_header_id = th2.transaction_header_id
11769       and th2.transaction_type_code = 'ADJUSTMENT'
11770       and th2.transaction_key in ('UA','UE')
11771       and adj_mem.transaction_header_id(+) = th2.transaction_header_id
11772       and adj_mem.period_counter_adjusted(+) = p_period_counter
11773       and adj_mem.asset_id(+) = th2.asset_id
11774       and nvl(adj_mem.track_member_flag(+),'N') = 'N'
11775    group by th2.asset_id;
11776 
11777 cursor C_FA_ADJ_UNPLANNED_MRC is
11778    select sum(decode(adj.adjustment_type,'EXPENSE',
11779                        decode(adj.debit_credit_flag,
11780                  'DR',adj.adjustment_amount,
11781                  'CR', -1 * adj.adjustment_amount))) as grp_unpln_exp,
11782           sum(decode(adj.adjustment_type,'EXPENSE',
11783                        decode(adj.debit_credit_flag,
11784                  'DR',adj.adjustment_amount,
11785                  'CR', -1 * adj.adjustment_amount))) as mem_unpln_exp,
11786           th2.asset_id member_asset_id
11787      from fa_mc_adjustments adj,
11788         fa_mc_adjustments adj_mem,
11789         fa_transaction_headers th1,
11790         fa_transaction_headers th2
11791     where adj.transaction_header_id = th1.transaction_header_id
11792       and adj.asset_id = p_group_asset_id
11793       and adj.book_type_code = p_book_type_code
11794       and adj.period_counter_adjusted = p_period_counter
11795       and th1.asset_id = adj.asset_id
11796       and th1.member_transaction_header_id = th2.transaction_header_id
11797       and th2.transaction_type_code = 'ADJUSTMENT'
11798       and th2.transaction_key in ('UA','UE')
11799       and adj_mem.transaction_header_id(+) = th2.transaction_header_id
11800       and adj_mem.period_counter_adjusted(+) = p_period_counter
11801       and adj_mem.asset_id(+) = th2.asset_id
11802       and nvl(adj_mem.track_member_flag(+),'N') = 'N'
11803       and adj.set_of_books_id = p_set_of_books_id
11804       and adj_mem.set_of_books_id(+) = p_set_of_books_id
11805    group by th2.asset_id;
11806 
11807    type t_tbl_unpln_exp is TABLE of C_FA_ADJ_UNPLANNED%rowtype index by binary_integer;
11808    l_tbl_unpln_exp t_tbl_unpln_exp;
11809    l_calling_fn   varchar2(50) := 'FA_TRACK_MEMBER_PVT.POPULATE_UNPLANNED_EXP';
11810 begin
11811 
11812    if p_mrc_sob_type_code <> 'R' then
11813          open C_FA_ADJ_UNPLANNED;
11814          fetch C_FA_ADJ_UNPLANNED bulk collect into l_tbl_unpln_exp;
11815          close C_FA_ADJ_UNPLANNED;
11816    else
11817          open C_FA_ADJ_UNPLANNED_MRC;
11818          fetch C_FA_ADJ_UNPLANNED_MRC bulk collect into l_tbl_unpln_exp;
11819          close C_FA_ADJ_UNPLANNED_MRC;
11820    end if;
11821 
11822    for i in 1..l_tbl_unpln_exp.COUNT
11823    loop
11824       for j in 1..p_track_member_table.count
11825       loop
11826          if p_track_member_table(j).group_asset_id = P_group_asset_id and
11827              p_track_member_table(j).period_counter = P_period_counter and
11828              p_track_member_table(j).member_asset_id = l_tbl_unpln_exp(i).member_asset_id and
11829              nvl(p_track_member_table(j).set_of_books_id, -99) = nvl(p_set_of_books_id, -99) then
11830              if  nvl(p_track_member_table(j).fully_reserved_flag,'N') <> 'Y' then
11831                  p_track_member_table(j).unplanned_deprn_amount := nvl(l_tbl_unpln_exp(i).grp_unpln_exp,0) +
11832                                                     nvl(l_tbl_unpln_exp(i).mem_unpln_exp,0);
11833              end if;
11834              EXIT;
11835          end if;
11836       end loop;
11837    end loop;
11838    return (TRUE);
11839 exception
11840   when others then
11841     fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
11842     return false;
11843 end populate_unplanned_exp;
11844 
11845   function search_index_table(p_period_counter IN number,
11846                       p_member_asset_id IN number,
11847                       p_group_asset_id IN number,
11848                       p_sob_id IN number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
11849   return number is
11850     l_calling_fn   varchar2(50) := 'FA_TRACK_MEMBER_PVT.SEARCH_INDEX_TABLE';
11851     l_index_key varchar2(152);
11852     main_err    exception;
11853   Begin
11854     l_index_key := lpad(p_period_counter,38,'0')||lpad(p_member_asset_id,38,'0')||lpad(p_group_asset_id,38,'0')||lpad(nvl(p_sob_id,-99),38,'0');
11855     if (p_track_mem_index_table.exists(l_index_key)) then
11856       return p_track_mem_index_table(l_index_key);
11857     else
11858        return -1;
11859     end if;
11860   Exception
11861     when others then
11862       fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
11863       raise main_err;
11864   end search_index_table;
11865 
11866   procedure put_track_index(p_period_counter IN number,
11867                           p_member_asset_id IN number,
11868                           p_group_asset_id IN number,
11869                           p_sob_id IN number,
11870                           p_index_value IN number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) is
11871     l_calling_fn   varchar2(50) := 'FA_TRACK_MEMBER_PVT.PUT_TRACK_INDEX';
11872     l_index_key varchar2(152);
11873     main_err    exception;
11874   begin
11875     l_index_key := lpad(p_period_counter,38,'0')||lpad(p_member_asset_id,38,'0')||lpad(p_group_asset_id,38,'0')||lpad(nvl(p_sob_id,-99),38,'0');
11876     p_track_mem_index_table(l_index_key) := p_index_value;
11877   Exception
11878     when others then
11879       fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
11880       raise main_err;
11881   end put_track_index;
11882 
11883 
11884   procedure delete_track_index(p_period_counter IN number,
11885                           p_member_asset_id IN number,
11886                           p_group_asset_id IN number,
11887                           p_sob_id IN number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) is
11888     l_calling_fn   varchar2(50) := 'FA_TRACK_MEMBER_PVT.DELETE_TRACK_INDEX';
11889     l_index_key varchar2(152);
11890     main_err    exception;
11891   begin
11892     l_index_key := lpad(p_period_counter,38,'0')||lpad(p_member_asset_id,38,'0')||lpad(p_group_asset_id,38,'0')||lpad(nvl(p_sob_id,-99),38,'0');
11893     if (p_track_mem_index_table.exists(l_index_key)) then
11894       p_track_mem_index_table.delete(l_index_key);
11895     end if;
11896   Exception
11897     when others then
11898       fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
11899       raise main_err;
11900   end;
11901 
11902 
11903 END FA_TRACK_MEMBER_PVT;