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