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