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