[Home] [Help]
PACKAGE BODY: APPS.FA_GAINLOSS_RET_PKG
Source
1 PACKAGE BODY FA_GAINLOSS_RET_PKG AS
2 /* $Header: fagretb.pls 120.13.12010000.1 2008/07/28 13:21:55 appldev ship $*/
3
4 g_print_debug boolean := fa_cache_pkg.fa_print_debug;
5
6 /*===========================================================================
7 | NAME fagfpc |
8 | |
9 | FUNCTION Determines the number of periods need to be catchup. |
10 | A negative number corresponds to the case where the period |
11 | number of the DATE EFFECTIVE of the retirement is less than |
12 | the current period number. A positive number corresponds to |
13 | teh reverse case. If retirement prorate date is in current |
14 | period, then # of periods catchup is zero. |
15 | |
16 | HISTORY 1/12/89 R Rumanang Created |
17 | 8/22/90 R Rumanang add prorate_calendar |
18 | 04/12/91 M Chan Modified for MPL 9 |
19 | 01/08/97 S Behura Rewrote in PL/SQL |
20 |===========================================================================*/
21 -- Bug6187408 Added cpdnum_set
22 FUNCTION fagfpc(book in varchar2, ret_p_date in date,
23 cpdnum number, cpd_fiscal_year number,
24 p_cal in out nocopy varchar2, d_cal in out varchar2,
25 pdspyr number, pds_catchup in out nocopy number,
26 startdp in out nocopy number, enddp in out number,
27 startpp in out nocopy number, endpp in out number,
28 fiscal_year_name in out nocopy varchar2,
29 cpdnum_set varchar2,
30 p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null) RETURN BOOLEAN IS
31
32 fagfpc_err exception;
33
34 dummy number;
35 ret_pro_mth number;
36 ret_pro_fy number;
37 fiscal_year number;
38 ret_p_period_num number;
39 ret_p_jdate number;
40 p_pds_per_yr integer;
41
42
43 h_startpp integer;
44 h_endpp integer;
45 h_ret_p_jstartdate integer;
46 h_p_cal varchar2(21);
47 h_d_cal varchar2(21);
48 h_fiscal_year_name varchar2(31);
49 h_ret_p_date date;
50 h_cpp_jstartdate number;
51 h_cpdnum number;
52 h_book varchar2(15);
53 h_cpd_fy number;
54
55 l_calling_fn varchar2(80) := 'fa_gainloss_ret_pkg.fagfpc';
56
57 BEGIN <<FAGFPC>>
58
59 h_d_cal := d_cal;
60 h_p_cal := p_cal;
61 h_fiscal_year_name := fiscal_year_name;
62 h_ret_p_date := ret_p_date;
63 h_book := book;
64 h_cpdnum := cpdnum;
65 h_cpd_fy := cpd_fiscal_year;
66
67 ret_p_jdate := to_char(ret_p_date, 'J');
68
69 if not fa_cache_pkg.fazccp(d_cal, fiscal_year_name, ret_p_jdate,
70 ret_p_period_num, fiscal_year, dummy
71 ,p_log_level_rec => p_log_level_rec) then
72 fa_srvr_msg.add_message(calling_fn => l_calling_fn
73 ,p_log_level_rec => p_log_level_rec);
74 raise fagfpc_err;
75 end if;
76
77 if not fa_GAINLOSS_MIS_PKG.faggfy(ret_p_date, p_cal,
78 ret_pro_mth, ret_pro_fy,
79 fiscal_year_name
80 ,p_log_level_rec => p_log_level_rec) then
81
82 fa_srvr_msg.add_message(
83 calling_fn => 'fa_gainloss_ret_pkg.fagfpc',
84 name => 'FA_RET_GENERIC_ERROR',
85 token1 => 'MODULE',
86 value1 => 'FAGGFY',
87 token2 => 'INFO',
88 value2 => 'Retirement Prorate Date',
89 token3 => 'ASSET',
90 value3 => NULL
91 ,p_log_level_rec => p_log_level_rec);
92
93 return(FALSE);
94
95 end if;
96
97 -- Get the number of periods per year in the rate calendar
98 if not fa_cache_pkg.fazcct(p_cal) then
99 fa_srvr_msg.add_message(calling_fn => 'fa_gainloss_ret_pkg.fagfpc'
100 ,p_log_level_rec => p_log_level_rec);
101 raise fagfpc_err;
102 end if;
103
104 p_pds_per_yr := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
105
106
107 begin
108
109 -- Bug6187408
110 -- Added the condition to check for daily prorate assets
111 if cpdnum_set = 'N' then
112 SELECT to_number (to_char (cp.start_date, 'J'))
113 INTO h_cpp_jstartdate
114 FROM fa_deprn_periods dp,
115 fa_calendar_periods cp,
116 fa_fiscal_year fy
117 WHERE cp.calendar_type = h_d_cal
118 AND fy.fiscal_year_name = h_fiscal_year_name
119 AND fy.fiscal_year = h_cpd_fy
120 AND dp.fiscal_year = fy.fiscal_year
121 AND dp.book_type_code = h_book
122 AND dp.period_num = h_cpdnum
123 AND dp.period_name = cp.period_name
124 AND dp.period_num = cp.period_num;
125 end if;
126 EXCEPTION
127 when no_data_found then
128 raise fagfpc_err;
129 end;
130
131
132 -- getting start prorate period num
133
134 begin
135 -- Bug6187408
136 -- Added the condition to check for daily prorate assets
137 if cpdnum_set = 'N' then
138 SELECT period_num
139 INTO h_startpp
140 FROM fa_calendar_periods
141 WHERE calendar_type = h_p_cal
142 AND to_date (h_cpp_jstartdate,'J')
143 between start_date and end_date;
144 else
145 h_startpp := h_cpdnum;
146 end if;
147
148 EXCEPTION
149 when no_data_found then
150 raise fagfpc_err;
151 end;
152
153
154 -- getting end prorate period num
155
156 begin
157 SELECT period_num
158 INTO h_endpp
159 FROM fa_calendar_periods
160 WHERE calendar_type = h_p_cal
161 AND trunc(h_ret_p_date)
162 between start_date and end_date;
163 EXCEPTION
164 when no_data_found then
165 raise fagfpc_err;
166 end;
167
168 startpp := h_startpp;
169 endpp := h_endpp;
170
171 /* Retirement cannot accross fiscal year, thus it always happen in current
172 fiscal year. However, retirement_prorate_convention may cause the
173 prorate_date in the next year (ie: FOLLOWING-MONTH.)
174 */
175
176 pds_catchup := (((ret_pro_fy * p_pds_per_yr) + h_endpp) -
177 ((cpd_fiscal_year * p_pds_per_yr) + h_startpp));
178
179 -- Bug6187408
180 -- Added the condition to check for daily prorate assets
181 if cpdnum_set = 'N' then
182
183 startdp := cpdnum;
184 enddp := cpdnum;
185 end if;
186 return(TRUE);
187
188 EXCEPTION
189
190 when others then
191 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn
192 ,p_log_level_rec => p_log_level_rec);
193 return FALSE;
194
195 END FAGFPC;
196
197 /*==========================================================================
198 | NAME faggrv |
199 | |
200 | FUNCTION Gets current depreciation reserve after adjsuted with |
201 | total adjustments so far for this period. For TAX |
202 | retirement, we need to look for if there is any tax |
203 | adjustment or not. |
204 | |
205 | HISTORY 9/9/89 R Rumanang Created |
206 | 9/5/90 R Rumanang Updated for Tax Reserve |
207 | Adjustment |
208 | 04/11/91 M Chan Rewrite for MPL 9 to speed up the|
209 | retirement program. |
210 | 01/08/97 S Behura Rewrote into PL/SQL |
211 | 08/11/97 S Behura Rewrote into PL/SQL(10.7) |
212 |==========================================================================*/
213
214 FUNCTION faggrv(asset_id number, book in varchar2, cpd_ctr number,
215 adj_rsv in out nocopy number, reval_adj_rsv in out number,
216 prior_fy_exp in out nocopy number, ytd_deprn in out number,
217 bonus_rsv in out nocopy number,
218 bonus_ytd_deprn in out nocopy number,
219 prior_fy_bonus_exp in out nocopy number,
220 mrc_sob_type_code in varchar2,
221 p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null) RETURN BOOLEAN IS
222
223 faggrv_err exception;
224
225 dpr_row fa_STD_TYPES.fa_deprn_row_struct;
226 h_success boolean;
227
228 l_calling_fn varchar2(80) := 'fa_gainloss_ret_pkg.faggrv';
229
230 BEGIN <<FAGGRV>>
231
232 if p_log_level_rec.statement_level then fa_debug_pkg.add(l_calling_fn, 'IN FAGGRV', '', p_log_level_rec); end if;
233
234 if p_log_level_rec.statement_level then
235 fa_debug_pkg.add
236 (fname => l_calling_fn,
237 element => 'Getting depreciation reserve adjustments',
238 value => ''
239 ,p_log_level_rec => p_log_level_rec);
240 end if;
241
242 /* we need to take into account about the CREDIT, because Reinstatement
243 of a retirement will put up a CR of reserve. h_tot_adjustment holds
244 the value of adjustment to reserve + expense for this period */
245
246 dpr_row.asset_id := asset_id;
247 dpr_row.book := book;
248 dpr_row.dist_id := 0;
249 dpr_row.period_ctr := cpd_ctr;
250 dpr_row.mrc_sob_type_code := mrc_sob_type_code;
251
252 FA_QUERY_BALANCES_PKG.query_balances_int (
253 X_DPR_ROW => dpr_row,
254 X_RUN_MODE => 'STANDARD',
255 X_DEBUG => FALSE,
256 X_SUCCESS => H_SUCCESS,
257 X_CALLING_FN => l_calling_fn,
258 X_TRANSACTION_HEADER_ID => -1
259 ,p_log_level_rec => p_log_level_rec);
260
261 if dpr_row.period_ctr <> 0 then
262 adj_rsv := dpr_row.deprn_rsv;
263 reval_adj_rsv := dpr_row.reval_rsv;
264 bonus_rsv := dpr_row.bonus_deprn_rsv;
265 bonus_ytd_deprn := dpr_row.bonus_ytd_deprn;
266
267 /*** Copy dpr_row.prior_fy_exp to prior_fy_exp. ***/
268 prior_fy_exp := dpr_row.prior_fy_exp;
269 prior_fy_bonus_exp := dpr_row.prior_fy_bonus_exp;
270 ytd_deprn := dpr_row.ytd_deprn;
271 else
272 -- faggrv: no values found in query fin info function
273 fa_srvr_msg.add_message(calling_fn => l_calling_fn
274 ,p_log_level_rec => p_log_level_rec);
275 raise faggrv_err;
276 end if;
277
278 return(TRUE);
279
280 EXCEPTION
281
282 when faggrv_err then
283 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn
284 ,p_log_level_rec => p_log_level_rec);
285 return FALSE;
286
287 when others then
288 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn
289 ,p_log_level_rec => p_log_level_rec);
290 return FALSE;
291
292
293 END FAGGRV;
294
295 /*=============================================================================
296 | |
297 | NAME fagret |
298 | |
299 | FUNCTION This function does the retirement process based on the |
300 | retirement structure and book information. |
301 | Briefly, it determines the number of periods need to be |
302 | catchup based on the DATE_EFFECTIVE of the retirement and the |
303 | current period START_DATE. The number of periods catchup is |
304 | determined by substracting the current period number from |
305 | the period number of DATE_EFFECTIVE. If the number is |
306 | positive, then we need to calculate the depreciation amount |
307 | needs to be taken each period; otherwise, we don't need to |
308 | determine the depreciation rate since we can obtain the |
309 | deprn_amount need to be taken from the previous records in |
310 | deprn_summary and deprn_detail. |
311 | |
312 | HISTORY 1/12/89 R Rumanang Created |
313 | 6/23/89 R Rumanang Standarized |
314 | 8/30/89 R Rumanang Add calls to fagprv, etc as part |
315 | of the GL interface project. |
316 | 9/08/89 R Rumanang When capitalize_flag is NO, just set |
317 | the retirment to PROCESSED. |
318 | 04/08/91 M Chan Rewrite the module so that it will |
319 | handle the retirement process in a |
320 | better way. |
321 | 01/08/97 S Behura Rewrote into PL/SQL |
322 | 08/11/97 S Behura Rewrote into PL/SQL(10.7) |
323 |============================================================================*/
324
325 FUNCTION fagret(ret in out nocopy fa_RET_TYPES.ret_struct,
326 bk in out nocopy fa_RET_TYPES.book_struct,
327 dpr in out nocopy fa_STD_TYPES.dpr_struct, today in date,
328 cpd_ctr number, cpdnum number, retpdnum in out nocopy number,
329 user_id number,
330 p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null) Return BOOLEAN IS
331 fagret_err exception;
332
333 -- Cursors and variables added for bug4343087
334 CURSOR c_get_new_bk is
335 select adjusted_cost
336 , salvage_value
337 , recoverable_cost
338 , adjusted_recoverable_cost
339 , reval_amortization_basis
340 , old_adjusted_cost
341 from fa_books
342 where asset_id = ret.asset_id
343 and book_type_code = ret.book
344 and transaction_header_id_out is null;
345
346 CURSOR c_get_new_mc_bk is
347 select adjusted_cost
348 , salvage_value
349 , recoverable_cost
350 , adjusted_recoverable_cost
351 , reval_amortization_basis
352 , old_adjusted_cost
353 from fa_books_mrc_v
354 where asset_id = ret.asset_id
355 and book_type_code = ret.book
356 and transaction_header_id_out is null;
357
358 l_temp_deprn_amt number;
359 l_temp_bonus_deprn_amt number;
360 l_temp_reval_deprn_amt number;
361 l_temp_reval_amort number;
362 -- End of Cursors and variables added for bug4343087
363
364 periods_catchup number;
365 start_pd number;
366 end_pd number;
367 start_ppd number;
368 end_ppd number;
369 deprn_amt number;
370 bonus_deprn_amt number;
371 bonus_deprn_reserve number;
372 bonus_ytd_deprn number;
373 deprn_reserve number;
374 reval_deprn_amt number;
375 reval_amort number;
376 reval_reserve number;
377 prior_fy_exp number;
378 prior_fy_bonus_exp number;
379 ytd_deprn number;
380 jdate_retired number;
381 ret_prorate_jdate number;
382 cost_frac number;
383
384 d_cost_retired number;
385 d_current_cost number;
386 d_cost_frac number;
387
388 h_date_retired date;
389 h_ret_prorate_date date;
390 h_jdate_retired number;
391 h_ret_prorate_jdate number;
392
393
394 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
395 l_asset_deprn_rec_old FA_API_TYPES.asset_deprn_rec_type;
396
397 -- Bug 4639408
398 l_temp_deprn_reserve number;
399
400 h_end_pd number; -- bug fix 6259953
401 h_fiscal_year number; -- bug fix 6259953
402
403 l_calling_fn varchar2(80) := 'fa_gainloss_ret_pkg.fagret';
404 --Bug6187408
405 --Added new cursor and variable to check for retirement in period of addition
406 h_cpdnum number; --Bug6187408
407 prd_flag varchar2(1);
408 cpdnum_set varchar2(1);
409 cursor c_prd_flag is
410 select 'Y'
411 from fa_calendar_periods fcp1,
412 fa_calendar_periods fcp2,
413 fa_book_controls fbc
414 where to_date (dpr.prorate_jdate,'J') BETWEEN fcp1.start_date and fcp1.end_date
415 and fbc.book_type_code = dpr.book
416 and fcp1.calendar_type = fbc.deprn_calendar
417 and to_date (decode( dpr.jdate_retired,0,null,dpr.jdate_retired),'J') BETWEEN fcp2.start_date and fcp2.end_date
418 and fcp2.calendar_type=fcp1.calendar_type
419 and fcp1.period_name=fcp2.period_name;
420
421 BEGIN <<FAGRET>>
422
423
424 deprn_amt := 0;
425 deprn_reserve := 0;
426 bonus_deprn_amt := 0;
427 bonus_deprn_reserve := 0;
428 reval_deprn_amt := 0;
429 reval_amort := 0;
430 reval_reserve := 0;
431 prior_fy_exp := 0;
432 prior_fy_bonus_exp := 0;
433 ytd_deprn := 0;
434 cost_frac := 0;
435 bonus_ytd_deprn := 0;
436
437 if (bk.current_cost is null or bk.current_cost = 0) then
438 cost_frac := 0;
439 else
440 cost_frac := ret.cost_retired / bk.current_cost;
441 end if;
442
443 --Commented out the following to avoid rounding of
444 --Cost_Frac. Bug no 1050284
445
446 -- CHECK: SNARAYAN. may need to round cost frac to 8 digits
447
448 /* if not EFA_utilities.faxrnd(cost_frac, ret.book, cost_frac) then
449 'Call faxrnd to round cost_frac in fagret');
450 end if;*/
451
452
453 if (bk.group_asset_id is not null) then
454 l_asset_hdr_rec.asset_id := bk.group_asset_id;
455 l_asset_hdr_rec.book_type_code := ret.book;
456 l_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
457
458 if not fa_util_pvt.get_asset_deprn_rec (
459 p_asset_hdr_rec => l_asset_hdr_rec,
460 px_asset_deprn_rec => l_asset_deprn_rec_old,
461 p_mrc_sob_type_code => ret.mrc_sob_type_code
462 ,p_log_level_rec => p_log_level_rec) then
463 fa_srvr_msg.add_message(
464 calling_fn => l_calling_fn,
465 name => 'FA_RET_GENERIC_ERROR',
466 token1 => 'MODULE',
467 value1 => 'get_asset_deprn_rec',
468 token2 => 'INFO',
469 value2 => 'old deprn',
470 token3 => 'ASSET',
471 value3 => ret.asset_number
472 ,p_log_level_rec => p_log_level_rec);
473
474 return false;
475 end if;
476 end if;
477
478 if p_log_level_rec.statement_level then fa_debug_pkg.add(l_calling_fn, 'in fagret1 ', '', p_log_level_rec); end if;
479
480 if not faggrv(ret.asset_id, ret.book, cpd_ctr, deprn_reserve,
481 reval_reserve, prior_fy_exp, ytd_deprn,
482 bonus_deprn_reserve, bonus_ytd_deprn,
483 prior_fy_bonus_exp,
484 ret.mrc_sob_type_code
485 ,p_log_level_rec => p_log_level_rec) then
486
487 fa_srvr_msg.add_message(
488 calling_fn => l_calling_fn,
489 name => 'FA_RET_GENERIC_ERROR',
490 token1 => 'MODULE',
491 value1 => 'FAGGRV',
492 token2 => 'INFO',
493 value2 => 'reserve',
494 token3 => 'ASSET',
495 value3 => ret.asset_number
496 ,p_log_level_rec => p_log_level_rec);
497
498 return(FALSE);
499
500 end if;
501
502 if p_log_level_rec.statement_level then fa_debug_pkg.add(l_calling_fn, 'in fagret2', '', p_log_level_rec); end if;
503
504 dpr.deprn_rsv := deprn_reserve;
505 dpr.reval_rsv := reval_reserve;
506 dpr.prior_fy_exp := prior_fy_exp;
507 dpr.ytd_deprn := ytd_deprn;
508 dpr.bonus_deprn_rsv := bonus_deprn_reserve;
509 dpr.bonus_ytd_deprn := bonus_ytd_deprn;
510 dpr.prior_fy_bonus_exp := prior_fy_bonus_exp;
511
512 dpr.rsv_known_flag := TRUE;
513
514 --Bug6187408
515 -- Get the number of periods per year in the rate calendar
516 if not fa_cache_pkg.fazcct(bk.p_cal) then
517 fa_srvr_msg.add_message(calling_fn => 'fa_gainloss_ret_pkg.fagret'
518 ,p_log_level_rec => p_log_level_rec);
519 raise fagret_err;
520 end if;
521 h_cpdnum := cpdnum;
522 open c_prd_flag;
523 fetch c_prd_flag into prd_flag;
524 if c_prd_flag%NOTFOUND then
525 prd_flag := 'N';
526 end if;
527 close c_prd_flag;
528 if fa_cache_pkg.fazcct_record.number_per_fiscal_year = 365 and prd_flag = 'Y' then
529
530 start_pd := cpdnum;
531 end_pd := cpdnum;
532 cpdnum_set := 'Y';
533
534 SELECT facp.period_num
535 INTO h_cpdnum
536 FROM fa_calendar_periods facp
537 WHERE facp.calendar_type = bk.p_cal
538 AND ( facp.start_date = bk.prorate_date
539 OR facp.end_date = bk.prorate_date );
540 else
541 cpdnum_set := 'N';
542 end if;
543 --Bug6187408
544 --Passing h_cpdnum instead of cpdnum and added cpdnum_set flag
545 if not fagfpc(ret.book, bk.ret_prorate_date, h_cpdnum,
546 bk.cpd_fiscal_year, bk.p_cal, bk.d_cal,
547 bk.pers_per_yr, periods_catchup,
548 start_pd, end_pd, start_ppd, end_ppd,
549 bk.fiscal_year_name,
550 cpdnum_set
551 ,p_log_level_rec => p_log_level_rec) then
552
553 fa_srvr_msg.add_message(
554 calling_fn => l_calling_fn,
555 name => 'FA_RET_GENERIC_ERROR',
556 token1 => 'MODULE',
557 value1 => 'FAGFPC',
558 token2 => 'INFO',
559 value2 => 'catchup period',
560 token3 => 'ASSET',
561 value3 => ret.asset_number
562 ,p_log_level_rec => p_log_level_rec);
563
564 return(FALSE);
565
566 end if;
567
568 if p_log_level_rec.statement_level then fa_debug_pkg.add(l_calling_fn, 'in fagret3', '', p_log_level_rec); end if;
569
570 /* If it's capitalize and also depreciate, we will calculate
571 depreciation; otherwise, we will skip it
572 */
573
574 jdate_retired := to_char(ret.date_retired, 'J');
575 h_jdate_retired := to_char(ret.date_retired, 'J');
576 ret_prorate_jdate := to_char(bk.ret_prorate_date, 'J');
577 h_ret_prorate_jdate := to_char(bk.ret_prorate_date, 'J');
578
579 dpr.jdate_retired := jdate_retired;
580 dpr.ret_prorate_jdate := ret_prorate_jdate;
581
582 if start_pd = 0 then /* If start is zero, calculate the whole deprn*/
583 dpr.p_cl_begin := 1;
584 /* It is O.K. to assign 1 to dpr->p_cl_begin, because the deprn
585 engine is smart enough to skip over periods before the deprn
586 start period */
587
588 else
589 dpr.p_cl_begin := start_pd;
590 end if;
591
592 dpr.p_cl_end := end_pd;
593
594 deprn_amt := 0;
595
596 if bk.capitalize and bk.depreciate and (ret.wip_asset is null or
597 ret.wip_asset <= 0) then
598 -- Bug#4867806: if (periods_catchup > 0) and (not bk.fully_reserved) then
599 -- bk.depr_first_year_ret=> 0:1=No:Yes; Need to back out expense when bk.depr_first_year_ret=0 (No)
600 if (periods_catchup > 0 or bk.depr_first_year_ret = 0) and (not bk.fully_reserved) then
601
602 if p_log_level_rec.statement_level then fa_debug_pkg.add(l_calling_fn, 'in fagret3.1', '', p_log_level_rec); end if;
603
604 -- bug 6259953 (Added logic to correctly set end_pd and dpr.y_end if retirement
605 -- prorate date falls in subsequent periods/years)
606 if (periods_catchup > 0) then
607
608 begin
609 select period_num
610 into h_end_pd
611 from fa_calendar_periods cp
612 where calendar_type = dpr.calendar_type
613 and bk.ret_prorate_date between start_date and end_date;
614
615 select fiscal_year
616 into h_fiscal_year
617 from fa_fiscal_year
618 where fiscal_year_name = fa_cache_pkg.fazcbc_record.fiscal_year_name
619 and bk.ret_prorate_date between start_date and end_date;
620
621 exception
622 when others then
623 h_end_pd := end_pd;
624 h_fiscal_year := dpr.y_end;
625 end;
626
627 end_pd := h_end_pd;
628 dpr.y_end := h_fiscal_year;
629
630 if g_print_debug then
631 fa_debug_pkg.add(l_calling_fn, 'End period', end_pd);
632 fa_debug_pkg.add(l_calling_fn, 'End fiscal year', dpr.y_end);
633 end if;
634
635
636 end if;
637 -- End bug 6259953
638
639 if not FA_GAINLOSS_DPR_PKG.fagcdp(dpr, deprn_amt,
640 bonus_deprn_amt,
641 reval_deprn_amt,
642 reval_amort, bk.deprn_start_date,
643 bk.d_cal, bk.p_cal, start_pd, end_pd,
644 bk.prorate_fy, bk.dsd_fy, bk.prorate_jdate,
645 bk.deprn_start_jdate
646 ,p_log_level_rec => p_log_level_rec) then
647
648 fa_srvr_msg.add_message(
649 calling_fn => l_calling_fn,
650 name => 'FA_RET_GENERIC_ERROR',
651 token1 => 'MODULE',
652 value1 => 'FAGCDP',
653 token2 => 'INFO',
654 value2 => 'depreciation number',
655 token3 => 'ASSET',
656 value3 => ret.asset_number
657 ,p_log_level_rec => p_log_level_rec);
658
659 return(FALSE);
660
661 end if;
662
663 if p_log_level_rec.statement_level then fa_debug_pkg.add(l_calling_fn, 'in fagret3.2', '', p_log_level_rec); end if;
664
665 -- Bug4343087:
666 -- In order to find correct catchup amount without rounding
667 -- error we need to find expense before retirement(before) and
668 -- after retirement(after) and then subtract after amount from before.
669 -- Following portion of code finds after amounts and then subtract
670 -- before amount that is found in previous fagcdp call.
671 if p_log_level_rec.statement_level then
672 fa_debug_pkg.add (l_calling_fn, 'before deprn_amt', deprn_amt
673 ,p_log_level_rec => p_log_level_rec);
674 fa_debug_pkg.add (l_calling_fn, 'before bonus_deprn_amt', bonus_deprn_amt
675 ,p_log_level_rec => p_log_level_rec);
676 fa_debug_pkg.add (l_calling_fn, 'before reval_deprn_amt', reval_deprn_amt
677 ,p_log_level_rec => p_log_level_rec);
678 fa_debug_pkg.add (l_calling_fn, 'before reval_amort', reval_amort
679 ,p_log_level_rec => p_log_level_rec);
680 end if;
681
682 -- Store before amount
683 l_temp_deprn_amt := deprn_amt;
684 l_temp_bonus_deprn_amt := bonus_deprn_amt;
685 l_temp_reval_deprn_amt := reval_deprn_amt;
686 l_temp_reval_amort := reval_amort;
687
688 -- Get after fin ncial info for calling fagcdp
689 if (ret.mrc_sob_type_code = 'R') then
690 open c_get_new_mc_bk;
691 fetch c_get_new_mc_bk into dpr.adj_cost
692 , dpr.salvage_value
693 , dpr.rec_cost
694 , dpr.adj_rec_cost
695 , dpr.reval_amo_basis
696 , dpr.old_adj_cost;
697 close c_get_new_mc_bk;
698 else
699 open c_get_new_bk;
700 fetch c_get_new_bk into dpr.adj_cost
701 , dpr.salvage_value
702 , dpr.rec_cost
703 , dpr.adj_rec_cost
704 , dpr.reval_amo_basis
705 , dpr.old_adj_cost;
706 close c_get_new_bk;
707 end if;
708
709 -- fix for 4639408
710 dpr.deprn_rsv := cost_frac * deprn_reserve;
711 if not FA_UTILS_PKG.faxrnd(dpr.deprn_rsv, ret.book) then
712 fa_srvr_msg.add_message(calling_fn => l_calling_fn);
713 return FALSE;
714 end if;
715 dpr.deprn_rsv := deprn_reserve - dpr.deprn_rsv;
716 -- end fix for 4639408
717
718 if p_log_level_rec.statement_level then
719 fa_debug_pkg.add (l_calling_fn, 'calling function', 'FA_GAINLOSS_DPR_PKG.fagcdp'
720 ,p_log_level_rec => p_log_level_rec);
721 end if;
722
723 -- Find new expense using after amounts
724 if not FA_GAINLOSS_DPR_PKG.fagcdp(dpr, deprn_amt,
725 bonus_deprn_amt,
726 reval_deprn_amt,
727 reval_amort, bk.deprn_start_date,
728 bk.d_cal, bk.p_cal, start_pd, end_pd,
729 bk.prorate_fy, bk.dsd_fy, bk.prorate_jdate,
730 bk.deprn_start_jdate
731 ,p_log_level_rec => p_log_level_rec) then
732
733 if p_log_level_rec.statement_level then
734 fa_debug_pkg.add (l_calling_fn, 'calling FA_GAINLOSS_DPR_PKG.fagcdp', 'FAILED'
735 ,p_log_level_rec => p_log_level_rec);
736 end if;
737
738 fa_srvr_msg.add_message(
739 calling_fn => l_calling_fn,
740 name => 'FA_RET_GENERIC_ERROR',
741 token1 => 'MODULE',
742 value1 => 'FAGCDP',
743 token2 => 'INFO',
744 value2 => 'depreciation number',
745 token3 => 'ASSET',
746 value3 => ret.asset_number
747 ,p_log_level_rec => p_log_level_rec);
748
749 return(FALSE);
750
751 end if;
752
753 if p_log_level_rec.statement_level then
754 fa_debug_pkg.add (l_calling_fn, 'after deprn_amt', deprn_amt
755 ,p_log_level_rec => p_log_level_rec);
756 fa_debug_pkg.add (l_calling_fn, 'after bonus_deprn_amt', bonus_deprn_amt
757 ,p_log_level_rec => p_log_level_rec);
758 fa_debug_pkg.add (l_calling_fn, 'after reval_deprn_amt', reval_deprn_amt
759 ,p_log_level_rec => p_log_level_rec);
760 fa_debug_pkg.add (l_calling_fn, 'after reval_amort', reval_amort
761 ,p_log_level_rec => p_log_level_rec);
762 end if;
763
764 -- Find catchup amount by subtracting before from after amounts.
765 deprn_amt := l_temp_deprn_amt - deprn_amt;
766 bonus_deprn_amt := l_temp_bonus_deprn_amt - bonus_deprn_amt;
767 reval_deprn_amt := l_temp_reval_deprn_amt - reval_deprn_amt;
768 reval_amort := l_temp_reval_amort - reval_amort;
769
770 if p_log_level_rec.statement_level then
771 fa_debug_pkg.add (l_calling_fn, 'final deprn_amt', deprn_amt
772 ,p_log_level_rec => p_log_level_rec);
773 fa_debug_pkg.add (l_calling_fn, 'final bonus_deprn_amt', bonus_deprn_amt
774 ,p_log_level_rec => p_log_level_rec);
775 fa_debug_pkg.add (l_calling_fn, 'final reval_deprn_amt', reval_deprn_amt
776 ,p_log_level_rec => p_log_level_rec);
777 fa_debug_pkg.add (l_calling_fn, 'final reval_amort', reval_amort
778 ,p_log_level_rec => p_log_level_rec);
779 end if;
780
781 -- Bug fix 6113545 (Commenting the below four lines)
782 /*deprn_amt := deprn_amt * cost_frac;
783 bonus_deprn_amt := bonus_deprn_amt * cost_frac;
784 reval_deprn_amt := reval_deprn_amt * cost_frac;
785 reval_amort := reval_amort * cost_frac;*/
786 -- End of bug fix 6113545
787
788 /* BUG# 2482031: rounding issue - YYOON */
789 if not FA_UTILS_PKG.faxrnd(x_amount => deprn_amt
790 ,x_book => ret.book
791 ,p_log_level_rec => p_log_level_rec) then
792 return FALSE;
793 end if;
794
795
796 if not FA_UTILS_PKG.faxrnd(x_amount => bonus_deprn_amt
797 ,x_book => ret.book
798 ,p_log_level_rec => p_log_level_rec) then
799 return FALSE;
800 end if;
801
802 if not FA_UTILS_PKG.faxrnd(x_amount => reval_deprn_amt
803 ,x_book => ret.book
804 ,p_log_level_rec => p_log_level_rec) then
805 return FALSE;
806 end if;
807
808 if not FA_UTILS_PKG.faxrnd(x_amount => reval_amort
809 ,x_book => ret.book
810 ,p_log_level_rec => p_log_level_rec) then
811 return FALSE;
812 end if;
813
814 end if;
815
816 if p_log_level_rec.statement_level then fa_debug_pkg.add(l_calling_fn, 'in fagret3.3', '', p_log_level_rec); end if;
817
818 if not FA_GAINLOSS_UPD_PKG.fagpdp(ret, bk, dpr, today,
819 periods_catchup, cpd_ctr,
820 cpdnum, cost_frac, deprn_amt,
821 bonus_deprn_amt,
822 reval_deprn_amt, reval_amort,
823 reval_reserve, user_id
824 ,p_log_level_rec => p_log_level_rec) then
825
826 fa_srvr_msg.add_message(
827 calling_fn => l_calling_fn,
828 name => 'FA_RET_INSERT_ERROR',
829 token1 => 'MODULE',
830 value1 => 'FAGPDP',
831 token2 => 'ACTION',
832 value2 => 'insert',
833 token3 => 'TYPE',
834 value3 => 'Depreciation',
835 token4 => 'ASSET',
836 value4 => ret.asset_number
837 ,p_log_level_rec => p_log_level_rec);
838
839 return(FALSE);
840
841 end if;
842
843 if p_log_level_rec.statement_level then fa_debug_pkg.add(l_calling_fn, 'in fagret3.4', '', p_log_level_rec); end if;
844
845 end if; -- end of - if bk.capitalize
846
847 if (ret.wip_asset is NULL or ret.wip_asset <= 0) then
848
849 if not FA_GAINLOSS_UPD_PKG.fagprv(ret, bk, cpd_ctr,
850 cost_frac, today, user_id,
851 deprn_amt, reval_deprn_amt, reval_amort,
852 deprn_reserve, reval_reserve,
853 bonus_deprn_amt, bonus_deprn_reserve
854 ,p_log_level_rec => p_log_level_rec) then
855
856 fa_srvr_msg.add_message(
857 calling_fn => l_calling_fn,
858 name => 'FA_RET_INSERT_ERROR',
859 token1 => 'MODULE',
860 value1 => 'FAGPRV',
861 token2 => 'ACTION',
862 value2 => 'insert',
863 token3 => 'TYPE',
864 value3 => 'Depreciation Reserve',
865 token4 => 'ASSET',
866 value4 => ret.asset_number
867 ,p_log_level_rec => p_log_level_rec);
868
869 return(FALSE);
870
871 end if; -- end of - if not rupd.fagprv
872
873 end if; -- end of - if (ret.wip_asset
874
875 if not FA_GAINLOSS_UPD_PKG.fagpct(ret, bk, cpd_ctr, today,
876 user_id
877 ,p_log_level_rec => p_log_level_rec) then
878
879 fa_srvr_msg.add_message(
880 calling_fn => l_calling_fn,
881 name => 'FA_RET_INSERT_ERROR',
882 token1 => 'MODULE',
883 value1 => 'FAGPCT',
884 token2 => 'ACTION',
885 value2 => 'insert',
886 token3 => 'TYPE',
887 value3 => 'Cost',
888 token4 => 'ASSET',
889 value4 => ret.asset_number
890 ,p_log_level_rec => p_log_level_rec);
891
892 return(FALSE);
893
894 end if;
895
896 dpr.y_begin := bk.prorate_fy;
897 dpr.y_end := bk.cpd_fiscal_year;
898
899 if retpdnum = 1 then
900
901 dpr.y_end := bk.cpd_fiscal_year - 1;
902 retpdnum := bk.pers_per_yr;
903
904 else
905
906 retpdnum := retpdnum - 1;
907
908 end if;
909
910 if dpr.y_end < bk.prorate_fy then
911
912 retpdnum := 0; /* Special value assigned */
913
914 end if;
915
916 if p_log_level_rec.statement_level then fa_debug_pkg.add(l_calling_fn, 'in fagret6', '', p_log_level_rec); end if;
917
918 if not FA_GAINLOSS_UPD_PKG.fagurt(ret, bk, cpd_ctr, dpr,
919 cost_frac, retpdnum,
920 today, user_id
921 ,p_log_level_rec => p_log_level_rec) then
922
923 fa_srvr_msg.add_message(
924 calling_fn => l_calling_fn,
925 name => 'FA_RET_INSERT_ERROR',
926 token1 => 'MODULE',
927 value1 => 'FAGURT',
928 token2 => 'ACTION',
929 value2 => 'make',
930 token3 => 'TYPE',
931 value3 => 'table',
932 token4 => 'ASSET',
933 value4 => ret.asset_number
934 ,p_log_level_rec => p_log_level_rec);
935
936 return(FALSE);
937
938 end if; -- end of - if not rupd.fagurt
939
940 if p_log_level_rec.statement_level then fa_debug_pkg.add(l_calling_fn, 'in fagret999', '', p_log_level_rec); end if;
941
942 if (bk.group_asset_id is not null) then
943 -- +++++ Process Group Asse +++++
944 if not FA_RETIREMENT_PVT.Do_Retirement_in_CGL(
945 p_ret => ret,
946 p_bk => bk,
947 p_dpr => dpr,
948 p_asset_deprn_rec_old => l_asset_deprn_rec_old,
949 p_mrc_sob_type_code => ret.mrc_sob_type_code,
950 p_calling_fn => l_calling_fn
951 ,p_log_level_rec => p_log_level_rec) then
952
953 fa_srvr_msg.add_message(calling_fn => l_calling_fn,
954 name => 'FA_RET_INSERT_ERROR',
955 token1 => 'MODULE',
956 value1 => 'FA_RETIREMENT_PVT.Do_Retirement_in_CGL',
957 token2 => 'ACTION',
958 value2 => 'make',
959 token3 => 'TYPE',
960 value3 => 'table',
961 token4 => 'ASSET',
962 value4 => ret.asset_number
963 ,p_log_level_rec => p_log_level_rec);
964 return false;
965 end if;
966 end if; -- (bk.group_asset_id is not null)
967
968 return(TRUE);
969
970 EXCEPTION
971
972 when others then
973 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn
974 ,p_log_level_rec => p_log_level_rec);
975 return FALSE;
976
977
978 END FAGRET;
979
980
981
982 END FA_GAINLOSS_RET_PKG; -- End of Package EFA_RRET