DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_TRANSFER_PVT

Source


1 PACKAGE BODY FA_TRANSFER_PVT AS
2 /* $Header: FAVTFRB.pls 120.19.12020000.3 2012/11/02 12:19:49 gigupta ship $   */
3 
4 
5 FUNCTION faxzdrs (drs in out nocopy fa_std_types.fa_deprn_row_struct, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
6          return boolean is
7 
8 begin <<FAXZDRS>>
9     drs.asset_id            := 0;
10     drs.book                := '0';
11     drs.dist_id             := 0;
12     drs.period_ctr          := 0;
13     drs.adjusted_flag       := FALSE;
14     drs.deprn_exp           := 0;
15     drs.reval_deprn_exp     := 0;
16     drs.reval_amo           := 0;
17     drs.prod                := 0;
18     drs.ytd_deprn           := 0;
19     drs.ytd_reval_deprn_exp := 0;
20     drs.ytd_prod            := 0;
21     drs.deprn_adjust_exp    := 0;
22     drs.deprn_rsv           := 0;
23     drs.reval_rsv           := 0;
24     drs.ltd_prod            := 0;
25     drs.cost                := 0;
26     drs.adj_cost            := 0;
27     drs.reval_amo_basis     := 0;
28     drs.bonus_rate          := 0;
29     drs.add_cost_to_clear   := 0;
30     drs.deprn_source_code   := null;
31     drs.bonus_deprn_amount        := 0; --
32     drs.bonus_ytd_deprn           := 0;
33     drs.bonus_deprn_rsv           := 0;
34 --    drs.bonus_deprn_adjust_exp    := 0;
35 --    drs.bonus_reval_deprn_exp     := 0;
36 --    drs.bonus_ytd_reval_deprn_exp := 0;
37 
38     drs.prior_fy_exp := 0;
39     drs.prior_fy_bonus_exp := 0;
40 
41     return (TRUE);
42 end FAXZDRS;
43 
44 
45 FUNCTION faxidda
46              (p_trans_rec       fa_api_types.trans_rec_type,
47               p_asset_hdr_rec   fa_api_types.asset_hdr_rec_type,
48               p_asset_desc_rec  fa_api_types.asset_desc_rec_type,
49               p_asset_cat_rec   fa_api_types.asset_cat_rec_type,
50               p_asset_dist_rec  fa_api_types.asset_dist_rec_type,
51               cur_per_ctr       integer,
52               adj_amts          in out nocopy fa_std_types.fa_deprn_row_struct,
53               source            varchar2,
54               reverse_flag      boolean,
55               ann_adj_amts      fa_std_types.fa_deprn_row_struct,
56               mrc_sob_type_code varchar2
57              , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean is
58 
59    account              varchar2(40);
60    adj                  fa_adjust_type_pkg.fa_adj_row_struct;
61    h_interco_num        number;
62    h_tfr_num            number;
63    h_transaction_units  number;
64    h_orig_units         number;
65 
66    X_LAST_UPDATE_DATE  date := sysdate;
67    X_last_updated_by   number := -888;
68    X_last_update_login number := -888;
69 
70    l_calling_fn       varchar2(40) := '';
71    error_found        exception;
72 
73 begin <<FAXIDDA>>
74 
75    adj.transaction_header_id   := p_trans_rec.transaction_header_id;
76    adj.asset_invoice_id        := 0;
77    adj.source_type_code        := source;
78    adj.code_combination_id     := p_asset_dist_rec.expense_ccid;
79    adj.book_type_code          := p_asset_hdr_rec.book_type_code;
80    adj.period_counter_created  := cur_per_ctr;
81    adj.asset_id                := p_asset_hdr_rec.asset_id;
82    adj.period_counter_adjusted := cur_per_ctr;
83    adj.distribution_id         := p_asset_dist_rec.distribution_id;
84    adj.annualized_adjustment   := 0;
85    adj.last_update_date        := p_trans_rec.who_info.last_update_date;
86    adj.current_units           := p_asset_desc_rec.current_units;
87    adj.selection_mode          := fa_adjust_type_pkg.FA_AJ_SINGLE;
88    adj.selection_thid          := 0;
89    adj.selection_retid         := 0;
90    adj.flush_adj_flag          := TRUE;
91    adj.leveling_flag           := TRUE;
92    adj.annualized_adjustment   := 0;
93    adj.mrc_sob_type_code       := mrc_sob_type_code;
94    adj.set_of_books_id         := p_asset_hdr_rec.set_of_books_id;
95    adj.gen_ccid_flag := TRUE;
96 
97    if not fa_cache_pkg.fazccb (p_asset_hdr_rec.book_type_code,
98                                p_asset_cat_rec.category_id, p_log_level_rec => p_log_level_rec) then
99       raise error_found;
100    end if;
101 
102 
103 
104    /* Insert FA_ADJUSTMENTS rows for all nonzero elements, and for */
105    /* Deprn Expense even if zero */
106 
107    if TRUE then
108 
109       account               := fa_cache_pkg.fazccb_record.DEPRN_EXPENSE_ACCT;
110       adj.adjustment_type   := 'EXPENSE';
111       adj.debit_credit_flag := 'DR';
112 
113       if reverse_flag then
114          adj.adjustment_amount     := -adj_amts.deprn_exp;
115          adj_amts.deprn_exp        := -adj_amts.deprn_exp;
116          adj.source_dest_code      := 'SOURCE';
117       else
118          adj.adjustment_amount     := adj_amts.deprn_exp;
119          adj.annualized_adjustment := ann_adj_amts.deprn_exp;
120          adj.source_dest_code      := 'DEST';
121       end if;
122 
123       adj.account_type := 'DEPRN_EXPENSE_ACCT';
124       adj.account      := account;
125 
126       if (p_log_level_rec.statement_level) then
127          fa_debug_pkg.add(l_calling_fn,'adjustment_amount', adj.adjustment_amount, p_log_level_rec => p_log_level_rec);
128          fa_debug_pkg.add(l_calling_fn,'annualized', adj.annualized_adjustment, p_log_level_rec => p_log_level_rec);
129       end if;
130 
131       if (NOT FA_INS_ADJUST_PKG.faxinaj(adj,
132                                         X_last_update_date,
133                                         X_last_updated_by,
134                                         X_last_update_login, p_log_level_rec => p_log_level_rec)) then
135          raise error_found;
136       end if;
137 
138       if (p_log_level_rec.statement_level) then
139          fa_debug_pkg.add(l_calling_fn,'after faxinaj',1, p_log_level_rec => p_log_level_rec);
140       end if;
141 
142    end if;
143 
144    if (p_log_level_rec.statement_level) then
145       fa_debug_pkg.add(l_calling_fn, 'adj_amts.reval_deprn_exp', adj_amts.reval_deprn_exp, p_log_level_rec => p_log_level_rec);
146       fa_debug_pkg.add(l_calling_fn, 'adj_amts.reval_amo ', adj_amts.reval_amo, p_log_level_rec => p_log_level_rec);
147       fa_debug_pkg.add(l_calling_fn, 'adj_amts.deprn_rsv',  adj_amts.deprn_rsv, p_log_level_rec => p_log_level_rec);
148    end if;
149 
150 
151    if adj_amts.bonus_deprn_amount <> 0 then
152       -- Post bonus_deprn_exp to BONUS_DEPRN_EXPENSE_ACCT,
153       -- so use value of account/account_type (set above)
154 
155       account               := fa_cache_pkg.fazccb_record.BONUS_DEPRN_EXPENSE_ACCT;
156       adj.adjustment_type   := 'BONUS EXPENSE';
157       adj.debit_credit_flag :=  'DR';
158 
159       if reverse_flag then
160          adj.adjustment_amount        := -adj_amts.bonus_deprn_amount;
161          adj_amts.bonus_deprn_amount  := -adj_amts.bonus_deprn_amount;
162          adj.source_dest_code         := 'SOURCE';
163       else
164          adj.adjustment_amount     := adj_amts.bonus_deprn_amount;
165          adj.annualized_adjustment := ann_adj_amts.bonus_deprn_amount;
166          adj.source_dest_code      := 'DEST';
167       end if;
168 
169       adj.account_type  := 'BONUS_DEPRN_EXPENSE_ACCT';
170       adj.account       := account;
171 
172       if (NOT FA_INS_ADJUST_PKG.faxinaj(adj,
173                                         X_last_update_date,
174                                         X_last_updated_by,
175                                         X_last_update_login, p_log_level_rec => p_log_level_rec)) then
176 
177          raise error_found;
178       end if;
179    end if;
180 
181    if adj_amts.bonus_deprn_rsv <> 0 then
182 
183       -- Post bonus_deprn_rsv to BONUS_DEPRN_RESERVE_ACCT,
184       -- so use value of account/account_type (set above)
185 
186       account               := fa_cache_pkg.fazccb_record.BONUS_DEPRN_RESERVE_ACCT;
187       adj.adjustment_type   := 'BONUS RESERVE';
188       adj.debit_credit_flag :=  'DR';
189 
190       if reverse_flag then
191          adj.adjustment_amount     := -adj_amts.bonus_deprn_rsv;
192          adj_amts.bonus_deprn_rsv  := -adj_amts.bonus_deprn_rsv;
193          adj.source_dest_code         := 'SOURCE';
194       else
195          adj.adjustment_amount     := adj_amts.bonus_deprn_rsv;
196          adj.annualized_adjustment := ann_adj_amts.bonus_deprn_rsv;
197          adj.source_dest_code      := 'DEST';
198       end if;
199 
200       adj.account_type  := 'BONUS_DEPRN_RESERVE_ACCT';
201       adj.account       := account;
202 
203       if p_trans_rec.transaction_type_code = 'TRANSFER' then
204          adj.source_type_code := 'TRANSFER';
205       end if;
206 
207       if (NOT FA_INS_ADJUST_PKG.faxinaj(adj,
208                                         X_last_update_date,
209                                         X_last_updated_by,
210                                         X_last_update_login, p_log_level_rec => p_log_level_rec)) then
211          raise error_found;
212       end if;
213    end if;
214 
215    if adj_amts.reval_deprn_exp <> 0 then
216 
217       -- Post reval_deprn_exp to DEPRN_EXPENSE_ACCT,
218       -- so use value of account/account_type (set above)
219 
220       account := fa_cache_pkg.fazccb_record.DEPRN_EXPENSE_ACCT;
221       adj.debit_credit_flag := 'DR';
222       adj.adjustment_type := 'REVAL EXPENSE';
223       adj.debit_credit_flag :=  'DR';
224 
225       if reverse_flag then
226          adj.adjustment_amount     := -adj_amts.reval_deprn_exp;
227          adj_amts.reval_deprn_exp  := -adj_amts.reval_deprn_exp;
228          adj.source_dest_code         := 'SOURCE';
229       else
230          adj.adjustment_amount     := adj_amts.reval_deprn_exp;
231          adj.annualized_adjustment := ann_adj_amts.reval_deprn_exp;
232          adj.source_dest_code      := 'DEST';
233       end if;
234 
235       adj.account_type := 'DEPRN_EXPENSE_ACCT';
236       adj.account      := account;
237 
238       if (NOT FA_INS_ADJUST_PKG.faxinaj(adj,
239                                        X_last_update_date,
240                                        X_last_updated_by,
241                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
242 
243          raise error_found;
244       end if;
245    end if;
246 
247    if adj_amts.reval_amo <> 0 then
248 
249       account               := fa_cache_pkg.fazccb_record.REVAL_AMORTIZATION_ACCT;
250       adj.adjustment_type   := 'REVAL AMORT'; -- bug 3233299
251       adj.debit_credit_flag := 'DR';
252 
253       if reverse_flag then
254          adj.adjustment_amount := -adj_amts.reval_amo;
255          adj_amts.reval_amo    := -adj_amts.reval_amo;
256          adj.source_dest_code         := 'SOURCE';
257       else
258          adj.adjustment_amount     := adj_amts.reval_amo;
259          adj.annualized_adjustment := ann_adj_amts.reval_amo;
260          adj.source_dest_code      := 'DEST';
261       end if;
262 
263       adj.account      := account;
264       adj.account_type := 'REVAL_AMORTIZATION_ACCT';
265 
266       if (NOT FA_INS_ADJUST_PKG.faxinaj(adj,
267                                        X_last_update_date,
268                                        X_last_updated_by,
269                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
270          raise error_found;
271       end if;
272    end if;
273 
274    if adj_amts.deprn_rsv <> 0 then
275 
276       account               := fa_cache_pkg.fazccb_record.DEPRN_RESERVE_ACCT;
277       adj.adjustment_type   := 'RESERVE';
278       adj.debit_credit_flag := 'DR';
279 
280       if reverse_flag then
281          adj.adjustment_amount := -adj_amts.deprn_rsv;
282          adj_amts.deprn_rsv    := -adj_amts.deprn_rsv;
283          adj.source_dest_code  := 'SOURCE';
284       else
285          adj.adjustment_amount := adj_amts.deprn_rsv;
286          adj.source_dest_code  := 'DEST';
287       end if;
288 
289       adj.account      := account;
290       adj.account_type := 'DEPRN_RESERVE_ACCT';
291 
292 
293       if p_trans_rec.transaction_type_code = 'TRANSFER' then
294          adj.source_type_code := 'TRANSFER';
295       end if;
296 
297 
298       if (NOT FA_INS_ADJUST_PKG.faxinaj(adj,
299                                        X_last_update_date,
300                                        X_last_updated_by,
301                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
302 
303          raise error_found;
304       end if;
305    end if;
306 
307 
308    -- SLA: interco logic is completely obsolete
309 
310    if adj_amts.reval_rsv <> 0 then
311 
312       account := fa_cache_pkg.fazccb_record.REVAL_RESERVE_ACCT;
313       adj.adjustment_type   := 'REVAL RESERVE';
314       adj.debit_credit_flag :='DR';
315 
316 /* bug4277366
317       if reverse_flag then
318          adj.adjustment_amount := -adj_amts.reval_rsv;
319          adj_amts.reval_rsv    := -adj_amts.reval_rsv;
320       else
321          adj.adjustment_amount := adj_amts.reval_rsv;
322       end if;
323 */
324       adj.adjustment_amount := adj_amts.reval_rsv;
325 
326       adj.account := account;
327       adj.account_type := 'REVAL_RESERVE_ACCT';
328 
329       if (NOT FA_INS_ADJUST_PKG.faxinaj(adj,
330                                              X_last_update_date,
331                                              X_last_updated_by,
332                                              X_last_update_login, p_log_level_rec => p_log_level_rec)) then
333          raise error_found;
334       end if;
335    end if;
336 
337    /* sla: obsolete - not needed at time of trx
338    if not fa_drs_pkg.faxaadr (adj_amts, detail_amts, p_log_level_rec => p_log_level_rec) then
339       raise error_found;
340    end if;
341 
342    if not fa_drs_pkg.faxaadr (adj_amts, summary_amts, p_log_level_rec => p_log_level_rec) then
343       raise error_found;
344    end if;
345    */
346 
347    if p_log_level_rec.statement_level then
348       fa_debug_pkg.add(l_calling_fn,'END',1, p_log_level_rec => p_log_level_rec);
349    end if;
350 
351    return (TRUE);
352 
353 exception
354    when error_found then
355         fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
356         return (FALSE);
357 
358    when others then
359         fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
360         return (FALSE);
361 
362 end FAXIDDA;
363 /*===========================================================================+
364  |                                                                           |
365  |   faxrda                                                                  |
366  |                                                                           |
367  |   FA Utility Reverse Depreciation and Adjustments                         |
368  |                                                                           |
369  +===========================================================================*/
370 FUNCTION faxrda (p_trans_rec       fa_api_types.trans_rec_type,
371                  p_asset_hdr_rec   fa_api_types.asset_hdr_rec_type,
372                  p_asset_desc_rec  fa_api_types.asset_desc_rec_type,
373                  p_asset_cat_rec   fa_api_types.asset_cat_rec_type,
374                  p_asset_dist_rec  fa_api_types.asset_dist_rec_type,
375                  cur_per_ctr       integer,
376                  from_per_ctr      integer,
377                  adj_amts          in out nocopy fa_std_types.fa_deprn_row_struct,
378                  ins_adj_flag      boolean,
379                  source            varchar2,
380                  mrc_sob_type_code varchar2
381 , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean is
382 
383    fy                 integer(5);
384    period_fracs       fa_std_types.table_fa_cp_struct;
385 
386    frac_to_backout    number;
387    from_fy            integer(5);
388    adj_to_retain      number;
389 
390    adj_deprn          fa_std_types.fa_deprn_row_struct;
391    ann_adj_amts       fa_std_types.fa_deprn_row_struct;
392 
393    dd_deprn_exp       number;
394    dd_reval_deprn_exp number;
395    dd_reval_amo       number;
396    deprn_calendar     varchar2(30);
397    pers_per_yr        integer(5);
398    b                  boolean;
399    dd_bonus_deprn_exp number;
400 
401    aj_per_ctr_created    number;
402    aj_adj_dr             number;
403    aj_ann_adj_dr         number;
404    aj_adj_type           varchar2(30);
405 
406    l_calling_fn       varchar2(40) := 'faxrda';
407    error_found        exception;
408 
409    /* Bug 3810323 */
410    tot_per               integer;
411    no_of_per_to_exclude  integer;
412    prev_trx_id           number(15);
413    prev_from_ctr_trx     number(15);
414    prev_from_ctr_eff     number(15);
415 
416    h_amort_per_ctr number(15);
417    h_no_of_per_to_exclude number(15);
418    h_add_per_ctr  number(15);
419    h_trx_type  number(15);
420 
421    CURSOR AJ IS
422         SELECT aj.period_counter_created per_ctr_created,
423                decode (aj.debit_credit_flag,
424                        'DR', aj.adjustment_amount,
425                        'CR', -aj.adjustment_amount,
426                        0) adj_dr,
427                decode(sign(
428                         decode (aj.debit_credit_flag,
429                         'DR',aj.adjustment_amount,
430                         'CR', -aj.adjustment_amount,
431                         0) ),
432                      1,aj.annualized_adjustment,-1,-aj.annualized_adjustment,0) ann_adj_dr,
433                decode (aj.adjustment_type,
434                        'EXPENSE',              1,
435                        'REVAL EXPENSE',        2,
436                        'REVAL AMORT',          3, -- BUG# 3233299
437                        'RESERVE',              4,
438                        'REVAL RESERVE',        5,
439                        'BONUS EXPENSE',        6,
440                        'BONUS RESERVE',        7,
441                        0) adj_type
442           FROM fa_adjustments aj
443          WHERE aj.book_type_code  = p_asset_hdr_rec.book_type_code
444            AND aj.asset_id        = p_asset_hdr_rec.asset_id
445            AND aj.distribution_id = p_asset_dist_rec.distribution_id
446            AND aj.period_counter_created between
447                        from_per_ctr and cur_per_ctr
448            AND aj.adjustment_type||'' <> 'RESERVE'
449            AND decode (aj.adjustment_type,
450                        'EXPENSE',              1,
451                        'REVAL EXPENSE',        2,
452                        'REVAL AMORT',          3,
453                        'RESERVE',              4,
454                        'REVAL RESERVE',        5,
455                        'BONUS EXPENSE',        6,
456                        'BONUS RESERVE',        7,
457                        0) <> 0;
458 
459 
460    CURSOR MRC_AJ IS
461         SELECT aj.period_counter_created per_ctr_created,
462                decode (aj.debit_credit_flag,
463                        'DR', aj.adjustment_amount,
464                        'CR', -aj.adjustment_amount,
465                        0) adj_dr,
466                decode(sign(
467                         decode (aj.debit_credit_flag,
468                         'DR',aj.adjustment_amount,
469                         'CR', -aj.adjustment_amount,
470                         0) ),
471                      1,aj.annualized_adjustment,-1,-aj.annualized_adjustment,0) ann_adj_dr,
472                decode (aj.adjustment_type,
473                        'EXPENSE',              1,
474                        'REVAL EXPENSE',        2,
475                        'REVAL AMORT',          3,  -- BUG# 3233299
476                        'RESERVE',              4,
477                        'REVAL RESERVE',        5,
478                        'BONUS EXPENSE',        6,
479                        'BONUS RESERVE',        7,
480                        0) adj_type
481           FROM fa_mc_adjustments aj
482          WHERE aj.book_type_code  = p_asset_hdr_rec.book_type_code
483            AND aj.asset_id        = p_asset_hdr_rec.asset_id
484            AND aj.distribution_id = p_asset_dist_rec.distribution_id
485            AND aj.set_of_books_id = p_asset_hdr_rec.set_of_books_id
486            AND aj.period_counter_created between
487                   from_per_ctr and cur_per_ctr
488            AND aj.adjustment_type||'' <> 'RESERVE'
489            AND decode (aj.adjustment_type,
490                        'EXPENSE',              1,
491                        'REVAL EXPENSE',        2,
492                        'REVAL AMORT',          3,
493                        'RESERVE',              4,
494                        'REVAL RESERVE',        5,
495                        'BONUS EXPENSE',        6,
496                        'BONUS RESERVE',        7,
497                        0) <> 0;
498 
499 
500     -- Get Fractions for all periods in Fiscal Year containing Cur_Per_Ctr
501     -- and From_Per_Ctr; cache this information for future use
502 
503    /*Bug 14809351-to add expense in current period */
504    CURSOR C_AJ IS
505         SELECT aj.period_counter_created per_ctr_created,
506                decode (aj.debit_credit_flag,
507                        'DR', aj.adjustment_amount,
508                        'CR', -aj.adjustment_amount,
509                        0) adj_dr,
510                decode(sign(
511                         decode (aj.debit_credit_flag,
512                         'DR',aj.adjustment_amount,
513                         'CR', -aj.adjustment_amount,
514                         0) ),
515                      1,aj.annualized_adjustment,-1,-aj.annualized_adjustment,0) ann_adj_dr,
516                decode (aj.adjustment_type,
517                        'EXPENSE',              1,
518                        'REVAL EXPENSE',        2,
519                        'REVAL AMORT',          3, -- BUG# 3233299
520                        'RESERVE',              4,
521                        'REVAL RESERVE',        5,
522                        'BONUS EXPENSE',        6,
523                        'BONUS RESERVE',        7,
524                        0) adj_type
525           FROM fa_adjustments aj
526          WHERE aj.book_type_code  = p_asset_hdr_rec.book_type_code
527            AND aj.asset_id        = p_asset_hdr_rec.asset_id
528            AND aj.distribution_id = p_asset_dist_rec.distribution_id
529            AND aj.period_counter_created = cur_per_ctr
530            AND aj.adjustment_type||'' <> 'RESERVE'
531            AND decode (aj.adjustment_type,
532                        'EXPENSE',              1,
533                        'REVAL EXPENSE',        2,
534                        'REVAL AMORT',          3,
535                        'RESERVE',              4,
536                        'REVAL RESERVE',        5,
537                        'BONUS EXPENSE',        6,
538                        'BONUS RESERVE',        7,
539                        0) <> 0;
540 
541 
542    CURSOR C_MRC_AJ IS
543         SELECT aj.period_counter_created per_ctr_created,
544                decode (aj.debit_credit_flag,
545                        'DR', aj.adjustment_amount,
546                        'CR', -aj.adjustment_amount,
547                        0) adj_dr,
548                decode(sign(
549                         decode (aj.debit_credit_flag,
550                         'DR',aj.adjustment_amount,
551                         'CR', -aj.adjustment_amount,
552                         0) ),
553                      1,aj.annualized_adjustment,-1,-aj.annualized_adjustment,0) ann_adj_dr,
554                decode (aj.adjustment_type,
555                        'EXPENSE',              1,
556                        'REVAL EXPENSE',        2,
557                        'REVAL AMORT',          3,  -- BUG# 3233299
558                        'RESERVE',              4,
559                        'REVAL RESERVE',        5,
560                        'BONUS EXPENSE',        6,
561                        'BONUS RESERVE',        7,
562                        0) adj_type
563           FROM fa_mc_adjustments aj
564          WHERE aj.book_type_code  = p_asset_hdr_rec.book_type_code
565            AND aj.asset_id        = p_asset_hdr_rec.asset_id
566            AND aj.distribution_id = p_asset_dist_rec.distribution_id
567            AND aj.set_of_books_id = p_asset_hdr_rec.set_of_books_id
568            AND aj.period_counter_created = cur_per_ctr
569            AND aj.adjustment_type||'' <> 'RESERVE'
570            AND decode (aj.adjustment_type,
571                        'EXPENSE',              1,
572                        'REVAL EXPENSE',        2,
573                        'REVAL AMORT',          3,
574                        'RESERVE',              4,
575                        'REVAL RESERVE',        5,
576                        'BONUS EXPENSE',        6,
577                        'BONUS RESERVE',        7,
578                        0) <> 0;
579 
580 
581 begin <<FAXRDA>>
582 
583    if (p_log_level_rec.statement_level) then
584       fa_debug_pkg.add('FAXRDA','dist_id',p_asset_dist_rec.distribution_id, p_log_level_rec => p_log_level_rec);
585       fa_debug_pkg.add(l_calling_fn, 'from_per_ctr', from_per_ctr, p_log_level_rec => p_log_level_rec);
586       fa_debug_pkg.add(l_calling_fn, 'cur_per_ctr',  cur_per_ctr, p_log_level_rec => p_log_level_rec);
587    end if;
588 
589    deprn_calendar:=fa_cache_pkg.fazcbc_record.DEPRN_CALENDAR;
590 
591    if not fa_cache_pkg.fazcct (deprn_calendar, p_log_level_rec => p_log_level_rec) then
592       raise error_found;
593    end if;
594 
595    pers_per_yr := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
596 
597    fy      := trunc((cur_per_ctr-1)  / pers_per_yr);  -- Integer\
598    from_fy := trunc((from_per_ctr-1) / pers_per_yr);  -- Division
599 
600    if from_fy <> fy then
601       fa_srvr_msg.add_message(calling_fn => l_calling_fn,
602                               name       => 'FA_RDA_BACKOUT_ACROSS_YEARS', p_log_level_rec => p_log_level_rec);
603       raise error_found;
604    end if;
605 
606    if not fa_cache_pkg.fazcff (deprn_calendar,
607                                p_asset_hdr_rec.book_type_code,
608                                fy,
609                                period_fracs, p_log_level_rec => p_log_level_rec) then
610       raise error_found;
611    end if;
612 
613 
614    -- Get information from FA_DEPRN_DETAIL for the Distribution requested
615 
616    begin
617       if (mrc_sob_type_code = 'R') then
618 
619          SELECT nvl (sum (dd.deprn_amount), 0),
620                 nvl (sum (dd.reval_deprn_expense), 0),
621                 nvl (sum (dd.reval_amortization), 0),
622                 nvl (sum (nvl(dd.bonus_deprn_amount,0)), 0)
623            INTO dd_deprn_exp,
624                 dd_reval_deprn_exp,
625                 dd_reval_amo,
626                 dd_bonus_deprn_exp
627            FROM fa_mc_deprn_detail dd
628           WHERE dd.book_type_code  = p_asset_hdr_rec.book_type_code
629             AND dd.asset_id        = p_asset_hdr_rec.asset_id
630             AND dd.distribution_id = p_asset_dist_rec.distribution_id
631             AND dd.period_counter  between
632                     from_per_ctr and cur_per_ctr
633             AND dd.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
634       else
635          SELECT nvl (sum (dd.deprn_amount), 0),
636                 nvl (sum (dd.reval_deprn_expense), 0),
637                 nvl (sum (dd.reval_amortization), 0),
638                 nvl (sum (nvl(dd.bonus_deprn_amount,0)), 0)
639            INTO dd_deprn_exp,
640                 dd_reval_deprn_exp,
641                 dd_reval_amo,
642                 dd_bonus_deprn_exp
643            FROM fa_deprn_detail dd
644           WHERE dd.book_type_code  = p_asset_hdr_rec.book_type_code
645             AND dd.asset_id        = p_asset_hdr_rec.asset_id
646             AND dd.distribution_id = p_asset_dist_rec.distribution_id
647             AND dd.period_counter  between
648                     from_per_ctr and cur_per_ctr;
649       end if;
650    exception
651       when others then
652            null;
653    end;
654 
655 
656 
657     /* Fix for bug 3810323 - start */
658 
659     tot_per := 0;
660     no_of_per_to_exclude := 0;
661     prev_trx_id := 0;
662     prev_from_ctr_trx := 0;
663     prev_from_ctr_eff := 0;
664 
665     /* Check if the current prior period transfer overlaps the previous one */
666     begin
667        select max(trx.transaction_header_id)
668        into prev_trx_id
669        from fa_transaction_headers trx
670        where  trx.book_type_code = p_asset_hdr_rec.book_type_code
671          and  trx.asset_id = p_asset_hdr_rec.asset_id
672          and  trx.transaction_type_code = 'TRANSFER'
673          and  trx.transaction_header_id < p_trans_rec.transaction_header_id
674          and  exists
675               (select 1
676                from fa_transaction_headers trx2,
677                     fa_deprn_periods dp_trx,
678                     fa_deprn_periods dp_eff
679                where trx2.transaction_header_id=trx.transaction_header_id
680                  and trx2.transaction_date_entered between dp_trx.calendar_period_open_date
681                                                        and dp_trx.calendar_period_close_date
682                  and dp_trx.book_type_code=trx2.book_type_code
683                  and trx2.date_effective between dp_eff.period_open_date
684                                              and dp_eff.period_close_date
685                  and dp_eff.book_type_code=trx2.book_type_code
686                  and dp_trx.period_counter < dp_eff.period_counter
687                  and from_per_ctr > dp_trx.period_counter
688                  and from_per_ctr < dp_eff.period_counter
689               )
690        ;
691     exception
692       when no_data_found then
693          null;
694     end;
695 
696 
697     if (prev_trx_id >= 1) then
698 
699        begin
700            select dp1.period_counter
701                  ,dp2.period_counter
702            into   prev_from_ctr_trx
703                  ,prev_from_ctr_eff
704            from   fa_transaction_headers trx,
705                   fa_deprn_periods dp1,
706                   fa_deprn_periods dp2
707            where  trx.transaction_header_id=prev_trx_id
708              and  dp1.book_type_code = trx.book_type_code
709              and  trx.transaction_date_entered between dp1.CALENDAR_PERIOD_OPEN_DATE
710                                                    and dp1.CALENDAR_PERIOD_CLOSE_DATE
711              and  dp2.book_type_code = trx.book_type_code
712              and  trx.date_effective between dp2.period_open_date
713                                          and dp2.period_close_date
714            ;
715       exception
716         when no_data_found then
717            raise error_found;
718       end;
719 
720       tot_per := cur_per_ctr - prev_from_ctr_trx;
721       no_of_per_to_exclude :=  from_per_ctr - prev_from_ctr_trx;
722 
723     else
724       fa_debug_pkg.add(l_calling_fn,'GIRI ', 'IN ELSE', p_log_level_rec => p_log_level_rec);
725        h_no_of_per_to_exclude := 0;
726        h_amort_per_ctr := 0;
727        h_trx_type := -1;
728        h_add_per_ctr := 0;
729        begin
730           select dp1.period_counter - dp2.period_counter,
731 		         dp2.period_counter,dp3.period_counter,
732 				 decode (th.transaction_subtype,'AMORTIZED',1,0)
733             into h_no_of_per_to_exclude,
734                  h_amort_per_ctr,
735 	             h_add_per_ctr,
736 	             h_trx_type
737           from fa_deprn_periods dp1,
738                fa_deprn_periods dp2,
739                fa_deprn_periods dp3,
740                fa_transaction_headers th
741           where     dp1.book_type_code = p_asset_hdr_rec.book_type_code
742                and  dp2.book_type_code = dp1.book_type_code
743 	       and  dp3.book_type_code = dp1.book_type_code
744                and  dp1.period_counter = from_per_ctr
745                and  th.book_type_code =  p_asset_hdr_rec.book_type_code
746                and  th.asset_id = p_asset_hdr_rec.asset_id
747                and  th.transaction_type_code ='ADDITION'
748                and  nvl(th.amortization_start_date,th.transaction_date_entered) between dp2.calendar_period_open_date
749                                                  and dp2.calendar_period_close_date
750                and  th.date_effective between dp3.period_open_date and dp3.period_close_date;
751 
752        no_of_per_to_exclude := h_no_of_per_to_exclude;
753        tot_per := cur_per_ctr - h_amort_per_ctr;
754       exception
755         when no_data_found then
756            NULL;
757       end;
758    end if;
759 
760    /*Fix for 3810323 - end*/
761 
762    if p_log_level_rec.statement_level then
763       fa_debug_pkg.add(l_calling_fn,'dd_deprn_exp to reverse', dd_deprn_exp, p_log_level_rec => p_log_level_rec);
764       fa_debug_pkg.add(l_calling_fn,'dd_reval_deprn_exp to reverse', dd_reval_deprn_exp, p_log_level_rec => p_log_level_rec);
765       fa_debug_pkg.add(l_calling_fn,'dd_reval_amo to reverse ', dd_reval_amo, p_log_level_rec => p_log_level_rec);
766    end if;
767    /*Bug 14809351-to add expense in current period */
768    if (mrc_sob_type_code = 'R') then
769       open c_mrc_aj;
770    else
771       open c_aj;
772    end if;
773 
774    LOOP
775       if p_log_level_rec.statement_level then
776          fa_debug_pkg.add(l_calling_fn,'fetching', 'c_aj cursor', p_log_level_rec => p_log_level_rec);
777       end if;
778 
779       if (mrc_sob_type_code = 'R') then
780          fetch c_mrc_aj
781           into aj_per_ctr_created    ,
782                aj_adj_dr             ,
783                aj_ann_adj_dr         ,
784                aj_adj_type           ;
785          EXIT WHEN C_MRC_AJ%NOTFOUND OR C_MRC_AJ%NOTFOUND IS NULL;
786       else
787          fetch c_aj
788           into aj_per_ctr_created    ,
789                aj_adj_dr             ,
790                aj_ann_adj_dr         ,
791                aj_adj_type           ;
792          EXIT WHEN C_AJ%NOTFOUND OR C_AJ%NOTFOUND IS NULL;
793       end if;
794       if aj_adj_type = 0 then
795          null;
796       elsif aj_adj_type = 1 then
797          dd_deprn_exp := dd_deprn_exp + aj_adj_dr;
798       elsif aj_adj_type = 2 then
799          dd_reval_deprn_exp := dd_reval_deprn_exp + aj_adj_dr;
800       elsif aj_adj_type = 3 then
801          dd_reval_amo := dd_reval_amo + aj_adj_dr;
802       elsif aj_adj_type = 4 then
803          null;
804       elsif aj_adj_type = 5 then
805          null;
806       elsif aj_adj_type = 6 then
807          dd_bonus_deprn_exp := dd_bonus_deprn_exp + aj_adj_dr;
808       elsif aj_adj_type = 7 then
809          null;
810       else
811          fa_srvr_msg.add_message (calling_fn => 'l_calling_fn',
812                                   name         => 'switch', p_log_level_rec => p_log_level_rec);
813          raise error_found;
814       end if;
815 
816    end loop;
817    if p_log_level_rec.statement_level then
818       fa_debug_pkg.add(l_calling_fn,'dd_deprn_exp to reverse at 2', dd_deprn_exp, p_log_level_rec => p_log_level_rec);
819       fa_debug_pkg.add(l_calling_fn,'dd_reval_deprn_exp to reverse at 2', dd_reval_deprn_exp, p_log_level_rec => p_log_level_rec);
820       fa_debug_pkg.add(l_calling_fn,'dd_reval_amo to reverse at 2', dd_reval_amo, p_log_level_rec => p_log_level_rec);
821    end if;
822 
823    -- Get information from FA_ADJUSTMENTS for the Distribution requested
824 
825    b := faxzdrs (adj_deprn,p_log_level_rec);
826    b := faxzdrs (ann_adj_amts,p_log_level_rec);
827 
828    if p_log_level_rec.statement_level then
829       fa_debug_pkg.add(l_calling_fn,'opening', 'aj cursor', p_log_level_rec => p_log_level_rec);
830    end if;
831 
832    if (mrc_sob_type_code = 'R') then
833       open mrc_aj;
834    else
835       open aj;
836    end if;
837 
838    LOOP
839 
840       if p_log_level_rec.statement_level then
841          fa_debug_pkg.add(l_calling_fn,'fetching', 'aj cursor', p_log_level_rec => p_log_level_rec);
842       end if;
843 
844       if (mrc_sob_type_code = 'R') then
845          fetch mrc_aj
846           into aj_per_ctr_created    ,
847                aj_adj_dr             ,
848                aj_ann_adj_dr         ,
849                aj_adj_type           ;
850          EXIT WHEN MRC_AJ%NOTFOUND OR MRC_AJ%NOTFOUND IS NULL;
851       else
852          fetch aj
853           into aj_per_ctr_created    ,
854                aj_adj_dr             ,
855                aj_ann_adj_dr         ,
856                aj_adj_type           ;
857          EXIT WHEN AJ%NOTFOUND OR AJ%NOTFOUND IS NULL;
858       end if;
859 
860       frac_to_backout := 0;
861 
862       if p_log_level_rec.statement_level then
863          fa_debug_pkg.add(l_calling_fn,'starting', 'fy calc', p_log_level_rec => p_log_level_rec);
864       end if;
865 
866       for i in  mod(from_per_ctr-1,fy)..mod(aj_per_ctr_created-1,fy)-1 loop
867           frac_to_backout := frac_to_backout + period_fracs(i).frac;
868       end loop;
869 
870       if p_log_level_rec.statement_level then
871          fa_debug_pkg.add(l_calling_fn,'calcing', 'adj_to_retain1', p_log_level_rec => p_log_level_rec);
872       end if;
873 
874       adj_to_retain := aj_adj_dr - frac_to_backout * aj_ann_adj_dr;
875 
876       b := FA_UTILS_PKG.faxrnd ( adj_to_retain, p_asset_hdr_rec.book_type_code, p_asset_hdr_rec.set_of_books_id,  p_log_level_rec => p_log_level_rec);
877 
878       if p_log_level_rec.statement_level then
879          fa_debug_pkg.add(l_calling_fn,'calcing', 'adj_to_retain2', p_log_level_rec => p_log_level_rec);
880       end if;
881 
882       if (adj_to_retain*aj_adj_dr < 0) or
883          (adj_to_retain=0 and aj_adj_dr <> 0) or
884          (aj_adj_dr = 0 and  adj_to_retain <> 0) then
885          adj_to_retain := 0;
886       end if;
887 
888       if p_log_level_rec.statement_level then
889          fa_debug_pkg.add(l_calling_fn,'entering', 'main branching', p_log_level_rec => p_log_level_rec);
890       end if;
891 
892       if aj_adj_type = 0 then
893          null;
894       elsif aj_adj_type = 1 then
895          adj_deprn.deprn_exp := adj_to_retain + adj_deprn.deprn_exp;
896       elsif aj_adj_type = 2 then
897          adj_deprn.reval_deprn_exp := adj_deprn.reval_deprn_exp + adj_to_retain;
898       elsif aj_adj_type = 3 then
899          adj_deprn.reval_amo := adj_deprn.reval_amo + adj_to_retain;
900       elsif aj_adj_type = 4 then
901          adj_deprn.deprn_rsv := adj_deprn.deprn_rsv + adj_to_retain;
902       elsif aj_adj_type = 5 then
903          adj_deprn.reval_rsv := adj_deprn.reval_rsv + adj_to_retain;
904       elsif aj_adj_type = 6 then
905          adj_deprn.bonus_deprn_amount := adj_deprn.bonus_deprn_amount + adj_to_retain;
906       elsif aj_adj_type = 7 then
907          adj_deprn.bonus_deprn_rsv := adj_deprn.bonus_deprn_rsv + adj_to_retain;
908       else
909          fa_srvr_msg.add_message (calling_fn => 'l_calling_fn',
910                                   name         => 'switch', p_log_level_rec => p_log_level_rec);
911          raise error_found;
912       end if;
913 
914    end loop;
915 
916    if p_log_level_rec.statement_level then
917       fa_debug_pkg.add(l_calling_fn,'closing', 'aj cursor', p_log_level_rec => p_log_level_rec);
918    end if;
919 
920    if (mrc_sob_type_code = 'R') then
921       close mrc_aj;
922    else
923       close aj;
924    end if;
925 
926    if p_log_level_rec.statement_level then
927       fa_debug_pkg.add(l_calling_fn,'getting', 'total reserveral amounts', p_log_level_rec => p_log_level_rec);
928    end if;
929 
930    /* Fix for bug 3810323: commented out this
931 
932    -- Set ADJ = DD - Tot_Adj_To_Reverse
933    -- BUG# 3296373 : adding this if condition
934    if (adj_deprn.deprn_exp <> 0) then
935       adj_amts.deprn_exp      := adj_deprn.deprn_exp;
936    else
937       adj_amts.deprn_exp      := dd_deprn_exp       - adj_deprn.deprn_exp;
938    end if;
939 
940    adj_amts.reval_deprn_exp   := dd_reval_deprn_exp - adj_deprn.reval_deprn_exp;
941    adj_amts.reval_amo         := dd_reval_amo       - adj_deprn.reval_amo;
942    adj_amts.bonus_deprn_amount := dd_bonus_deprn_exp - adj_deprn.bonus_deprn_amount;
943 
944    -- RKP: offset the deprn_exp's effect on rsv; reval_exp also
945    adj_amts.deprn_rsv := adj_amts.deprn_exp;
946    adj_amts.reval_rsv := adj_amts.reval_deprn_exp;
947   */
948 
949   /* Fix for bug 3810323 - start*/
950 
951    adj_amts.deprn_exp := dd_deprn_exp - adj_deprn.deprn_exp;
952    /*Bug#10057417 - changing logic for bonus deprn amount,making it same deprn exp. */
953    adj_amts.bonus_deprn_amount := dd_bonus_deprn_exp - adj_deprn.bonus_deprn_amount;
954 
955       if (((prev_trx_id > 0) and (tot_per <> 0) and (no_of_per_to_exclude <> 0)) or
956        ( h_trx_type = 0 and h_add_per_ctr >= from_per_ctr and no_of_per_to_exclude <> 0))  then
957 
958      adj_amts.deprn_exp := dd_deprn_exp - (no_of_per_to_exclude * (dd_deprn_exp / tot_per));
959      b := fa_utils_pkg.faxrnd(adj_amts.deprn_exp, p_asset_hdr_rec.book_type_code, p_asset_hdr_rec.set_of_books_id, p_log_level_rec => p_log_level_rec);
960      adj_amts.bonus_deprn_amount := dd_bonus_deprn_exp - (no_of_per_to_exclude * (dd_bonus_deprn_exp / tot_per));
961      b := fa_utils_pkg.faxrnd(adj_amts.bonus_deprn_amount, p_asset_hdr_rec.book_type_code, p_asset_hdr_rec.set_of_books_id, p_log_level_rec => p_log_level_rec);
962 
963    end if;
964 
965    adj_amts.reval_deprn_exp   := dd_reval_deprn_exp - adj_deprn.reval_deprn_exp;
966    adj_amts.reval_amo         := dd_reval_amo       - adj_deprn.reval_amo;
967 
968    adj_amts.deprn_rsv := adj_amts.deprn_exp;
969    adj_amts.reval_rsv := adj_amts.reval_deprn_exp;
970    adj_amts.bonus_deprn_rsv := adj_amts.bonus_deprn_amount ;
971 
972   /* Fix for bug 3810323 - end*/
973 
974    if p_log_level_rec.statement_level then
975       fa_debug_pkg.add(l_calling_fn,'calling', 'faxidda', p_log_level_rec => p_log_level_rec);
976    end if;
977 
978    if ins_adj_flag then
979       if not faxidda (p_trans_rec,
980                       p_asset_hdr_rec ,
981                       p_asset_desc_rec ,
982                       p_asset_cat_rec  ,
983                       p_asset_dist_rec  ,
984                       cur_per_ctr,
985                       adj_amts,
986                       source,
987                       TRUE,
988                       ann_adj_amts,
989                       mrc_sob_type_code,
990                       p_log_level_rec) then
991          raise error_found;
992       end if;
993    end if;
994 
995    return (TRUE);
996 
997 Exception
998    when error_found then
999         fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
1000         return (FALSE);
1001 
1002    when others then
1003         fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
1004         return (FALSE);
1005 
1006 end FAXRDA;
1007 
1008 
1009 /*===========================================================================+
1010  |  NAME                                                                     |
1011  |      fadgdd - get prior pd deprn detail                                   |
1012  |                                                                           |
1013  +===========================================================================*/
1014 
1015 FUNCTION fadgdd (p_trans_rec       fa_api_types.trans_rec_type,
1016                  p_asset_hdr_rec   fa_api_types.asset_hdr_rec_type,
1017                  p_asset_desc_rec  fa_api_types.asset_desc_rec_type,
1018                  p_asset_cat_rec   fa_api_types.asset_cat_rec_type,
1019                  p_asset_dist_rec  fa_api_types.asset_dist_rec_type,
1020                  p_period_rec      fa_api_types.period_rec_type,
1021                  from_per_ctr      integer,
1022                  drs               in out nocopy fa_std_types.fa_deprn_row_struct,
1023                  backout_flag      boolean,
1024                  mrc_sob_type_code varchar2
1025   , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)  return boolean is
1026 
1027     dist                fa_std_types.dh_adj_type;
1028     counter             integer(4);
1029     b                   boolean;
1030 
1031     -- BUG 1301957:
1032     --  ann_adj_amts has been created
1033     --  to store annulized adjustment amounts - YYOON
1034 
1035     ann_adj_amts         fa_std_types.fa_deprn_row_struct;
1036     i_temp              number;
1037     num_of_periods      number;
1038 
1039     cur_per_ctr    number;
1040     period_num     number;
1041     ccp_start_date date;
1042     ccp_end_date   date;
1043     cp_start_date  date;
1044     cp_end_date    date;
1045 
1046     l_calling_fn       varchar2(40) := 'fadgdd';
1047     error_found        exception;
1048 
1049 
1050 begin <<FADGDD>>
1051 
1052    if (p_log_level_rec.statement_level) then
1053       fa_debug_pkg.add(l_calling_fn, 'dist_id',      p_asset_dist_rec.distribution_id, p_log_level_rec => p_log_level_rec);
1054       fa_debug_pkg.add(l_calling_fn, 'from_per_ctr', from_per_ctr, p_log_level_rec => p_log_level_rec);
1055    end if;
1056 
1057    cur_per_ctr    := p_period_rec.period_counter;
1058    period_num     := p_period_rec.period_num;
1059    ccp_start_date := p_period_rec.calendar_period_open_date;
1060    ccp_end_date   := p_period_rec.calendar_period_close_date;
1061    cp_start_date  := p_period_rec.period_open_date;
1062    cp_end_date    := sysdate;
1063 
1064    counter := 1;
1065 
1066    -- BUG1301957:
1067    -- Initialize ann_adj_amts - YYOON
1068 
1069    b:= faxzdrs (ann_adj_amts,p_log_level_rec);
1070 
1071 
1072    if backout_flag then
1073 
1074       -- Backing out depreciation from terminated distribution
1075       if p_log_level_rec.statement_level then
1076          fa_debug_pkg.add(l_calling_fn,'calling faxrda',1, p_log_level_rec => p_log_level_rec);
1077       end if;
1078 
1079       if not faxrda
1080                             (p_trans_rec,
1081                              p_asset_hdr_rec,
1082                              p_asset_desc_rec,
1083                              p_asset_cat_rec,
1084                              p_asset_dist_rec,
1085                              cur_per_ctr,
1086                              from_per_ctr,
1087                              drs,
1088                              TRUE,
1089                              'DEPRECIATION',
1090                              mrc_sob_type_code,
1091                              p_log_level_rec) then
1092          raise error_found;
1093       end if;
1094 
1095       -- Now flip sign of the adjustment amounts we reversed out
1096 
1097       drs.deprn_exp       := -drs.deprn_exp;
1098       drs.reval_deprn_exp := -drs.reval_deprn_exp;
1099       drs.reval_amo       := -drs.reval_amo;
1100       drs.deprn_rsv       := -drs.deprn_rsv;
1101       drs.reval_rsv       := -drs.reval_rsv;
1102 
1103 
1104       -- excluding deprn_adj_exp updates as this will be done by deprn
1105 
1106       if p_log_level_rec.statement_level then
1107          fa_debug_pkg.add(l_calling_fn,'flip backout drs.deprn_rsv', drs.deprn_rsv, p_log_level_rec => p_log_level_rec);
1108       end if;
1109 
1110       drs.bonus_deprn_amount := -drs.bonus_deprn_amount;
1111       drs.bonus_deprn_rsv := -drs.bonus_deprn_rsv;
1112 
1113    else
1114 
1115       if p_log_level_rec.statement_level then
1116          fa_debug_pkg.add(l_calling_fn,'backout_flag', 'FALSE', p_log_level_rec => p_log_level_rec);
1117       end if;
1118 
1119       -- Moving backed out depreciation to created distribution
1120 
1121       -- BUG# 1527238
1122       -- fix is obsolete as this will be processed immediately upon
1123       -- transfer transaction so category is always the same
1124 
1125       -- BUG 1301957:
1126       -- Get the number of periods in a fiscal year
1127       -- YYOON on 6/13/01
1128 
1129       num_of_periods := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
1130 
1131       -- BUG 1301957:
1132       --  The following routine calculates annualized adjustment amounts
1133       --  and copy them to ann_adj_amts structure.
1134       --  - YYOON on 6/13/01
1135 
1136       ann_adj_amts.deprn_exp          := drs.deprn_exp * num_of_periods;
1137       ann_adj_amts.reval_deprn_exp    := drs.reval_deprn_exp *
1138                                                 num_of_periods;
1139       ann_adj_amts.reval_amo          := drs.reval_amo * num_of_periods;
1140       ann_adj_amts.bonus_deprn_amount := drs.bonus_deprn_amount * num_of_periods;
1141 
1142       if p_log_level_rec.statement_level then
1143          fa_debug_pkg.add(l_calling_fn,' calling faxidda',1, p_log_level_rec => p_log_level_rec);
1144       end if;
1145 
1146       if not faxidda
1147                       (p_trans_rec,
1148                        p_asset_hdr_rec ,
1149                        p_asset_desc_rec ,
1150                        p_asset_cat_rec  ,
1151                        p_asset_dist_rec  ,
1152                        cur_per_ctr,
1153                        drs,
1154                        'DEPRECIATION',
1155                        FALSE,
1156                        ann_adj_amts,
1157                        mrc_sob_type_code,
1158                        p_log_level_rec) then
1159          raise error_found;
1160       end if;
1161 
1162    end if;
1163 
1164    return (TRUE);
1165 
1166 exception
1167    when error_found then
1168         fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
1169         return (FALSE);
1170 
1171    when others then
1172         fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
1173         return (FALSE);
1174 
1175 end FADGDD;
1176 
1177 /*===========================================================================+
1178  |  NAME                                                                     |
1179  |      fadppt                                                               |
1180  |                                                                           |
1181  |  FUNCTION                                                                 |
1182  |      Calculates depreciation for a prior period transfer.                 |
1183  |                                                                           |
1184  |  NOTES                                                                    |
1185  +===========================================================================*/
1186 
1187 FUNCTION fadppt (p_trans_rec       fa_api_types.trans_rec_type,
1188                  p_asset_hdr_rec   fa_api_types.asset_hdr_rec_type,
1189                  p_asset_desc_rec  fa_api_types.asset_desc_rec_type,
1190                  p_asset_cat_rec   fa_api_types.asset_cat_rec_type,
1191                  p_asset_dist_tbl  fa_api_types.asset_dist_tbl_type
1192   , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean is
1193 
1194    b                 boolean;
1195    total_dep_backout number;
1196    total_ua_backout  number;
1197    backout_share     number;
1198    backout_taken     number;
1199    old_backout_taken number;
1200    dist_total_deprn  number;    /* total deprn for a dist record */
1201    row_ctr           integer;
1202    row_ctr_temp      integer :=0;   /* bug# 5523484*/
1203    dist_book         varchar2(30);
1204 
1205    backout_drs       fa_std_types.fa_deprn_row_struct;
1206    total_backout_drs fa_std_types.fa_deprn_row_struct;
1207    insert_drs        fa_std_types.fa_deprn_row_struct;
1208    taken_drs         fa_std_types.fa_deprn_row_struct;
1209 
1210    ppd_ctr           integer;
1211    in_dist           integer;
1212    units_assigned    number;
1213    trans_id          integer;
1214    deprn_calendar    varchar2(30);
1215    pers_per_yr       integer(5);
1216    fy_name           varchar2(30);
1217 
1218    cur_period_ctr number;
1219    period_num     number;
1220    ccp_start_date date;
1221    ccp_end_date   date;
1222    cp_start_date  date;
1223    cp_end_date    date;
1224 
1225    l_mrc_sob_type_code varchar2(1);
1226 
1227    l_asset_hdr_rec    fa_api_types.asset_hdr_rec_type;
1228    l_asset_dist_rec   fa_api_types.asset_dist_rec_type;
1229    l_period_rec       fa_api_types.period_rec_type;
1230 
1231    l_calling_fn       varchar2(40) := 'fadgdd';
1232    error_found        exception;
1233 
1234    -- C3 not needed since we're taking in dist_tbl
1235    -- adding new cursor just to get dist id from new distributions
1236    CURSOR c_dist_id (p_asset_id     number,
1237                      p_expense_ccid number,
1238                      p_location_id  number,
1239                      p_assigned_to  number) is
1240      select distribution_id
1241        from fa_distribution_history
1242       where asset_id                = p_asset_id
1243         and nvl(assigned_to,-9999) = nvl(p_assigned_to,-9999)
1244         and code_combination_id    = p_expense_ccid
1245         and location_id            = p_location_id
1246         and date_ineffective      is null;
1247 
1248   CURSOR n_sob_id (p_psob_id IN NUMBER,
1249                    p_book_type_code IN VARCHAR2) is
1250   SELECT p_psob_id AS sob_id,
1251          1 AS index_id
1252     FROM dual
1253    UNION
1254   SELECT set_of_books_id AS sob_id,
1255          2 AS index_id
1256     FROM fa_mc_book_controls
1257    WHERE book_type_code = p_book_type_code
1258      AND primary_set_of_books_id = p_psob_id
1259      AND enabled_flag = 'Y'
1260    ORDER BY 2;
1261 
1262 
1263 begin <<FADPPT>>
1264 
1265    -- moving logic from fadgbi here:
1266    -- load the cache for current period counter
1267 
1268    dist_book      := fa_cache_pkg.fazcbc_record.distribution_source_book;
1269    deprn_calendar := fa_cache_pkg.fazcbc_record.deprn_calendar;
1270    fy_name        := fa_cache_pkg.fazcbc_record.fiscal_year_name;
1271 
1272    if not fa_util_pvt.get_period_rec
1273            (p_book           => p_asset_hdr_rec.book_type_code,
1274             x_period_rec     => l_period_rec, p_log_level_rec => p_log_level_rec) then
1275       raise error_found;
1276    end if;
1277 
1278    cur_period_ctr := l_period_rec.period_counter;
1279    period_num     := l_period_rec.period_num;
1280    ccp_start_date := l_period_rec.calendar_period_open_date;
1281    ccp_end_date   := l_period_rec.calendar_period_close_date;
1282    cp_start_date  := l_period_rec.period_open_date;
1283    cp_end_date    := sysdate;
1284 
1285    if not fa_cache_pkg.fazcct
1286            (x_calendar => deprn_calendar, p_log_level_rec => p_log_level_rec) then
1287       raise error_found;
1288    end if;
1289 
1290    pers_per_yr    := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
1291 
1292    if p_log_level_rec.statement_level then
1293       fa_srvr_msg.add_message(calling_fn => l_calling_fn,
1294                               name       => 'FA_DEPRN_DEBUG2',
1295                               token1     => 'CCP_DATE',
1296                               value1     => ccp_start_date,
1297                               token2     => 'CP_DATE',
1298                               value2     => cp_start_date, p_log_level_rec => p_log_level_rec);
1299    end if;
1300 
1301    backout_taken     := 0;
1302    old_backout_taken := 0;
1303 
1304    SELECT cp.period_num + (pers_per_yr * fy.fiscal_year)
1305      INTO ppd_ctr
1306      FROM fa_calendar_periods cp,
1307           fa_calendar_types ct,
1308           fa_fiscal_year fy
1309     WHERE p_trans_rec.transaction_date_entered
1310               between cp.start_date and cp.end_date
1311       AND cp.calendar_type = deprn_calendar
1312       AND ct.calendar_type = cp.calendar_type
1313       AND p_trans_rec.transaction_date_entered
1314               between fy.start_date and fy.end_date
1315       AND fy.fiscal_year_name = fy_name;
1316 
1317 
1318    row_ctr           := 0;
1319    total_dep_backout := 0;
1320    total_ua_backout  := 0;
1321 
1322    -- continue until all distribution records are found
1323 
1324    if fa_cache_pkg.fazcbc_record.book_class = 'TAX' then
1325       trans_id := p_trans_rec.source_transaction_header_id;
1326    else
1327       trans_id := p_trans_rec.transaction_header_id;
1328    end if;
1329 
1330    -- first determine total units effected
1331    for row_ctr in 1..p_asset_dist_tbl.count loop --C3
1332       if (p_asset_dist_tbl(row_ctr).distribution_id is null) then
1333          total_ua_backout := total_ua_backout +
1334                              p_asset_dist_tbl(row_ctr).transaction_units;
1335       end if;
1336    end loop;
1337 
1338    --total_ua_backout := -total_ua_backout;
1339 
1340    l_asset_hdr_rec :=  p_asset_hdr_rec;
1341 
1342    -- loop through primary and reportign and then through each distribution
1343    for c_rec in n_sob_id(fa_cache_pkg.fazcbc_record.set_of_books_id,
1344                          p_asset_hdr_rec.book_type_code) loop
1345 
1346       b := faxzdrs (backout_drs, p_log_level_rec);
1347       b := faxzdrs (total_backout_drs, p_log_level_rec);
1348       b := faxzdrs (insert_drs, p_log_level_rec);
1349       b := faxzdrs (taken_drs, p_log_level_rec);
1350 
1351       if (c_rec.index_id = 1) then
1352          l_mrc_sob_type_code := 'P';
1353       else
1354          l_mrc_sob_type_code := 'R';
1355       end if;
1356 
1357       l_asset_hdr_rec.set_of_books_id := c_rec.sob_id;
1358 
1359       for row_ctr in 1..p_asset_dist_tbl.count loop --C3
1360 
1361          row_ctr_temp := row_ctr; --bug# 5523484
1362          dist_total_deprn := 0;
1363          l_asset_dist_rec := p_asset_dist_tbl(row_ctr);
1364 
1365          if (l_asset_dist_rec.distribution_id is not null) then
1366 
1367             -- terminated distribution, back out
1368 
1369             if not fadgdd (p_trans_rec,
1370                            l_asset_hdr_rec,
1371                            p_asset_desc_rec,
1372                            p_asset_cat_rec,
1373                            l_asset_dist_rec,
1374                            l_period_rec,
1375                            ppd_ctr,
1376                            backout_drs,
1377                            TRUE,
1378                            l_mrc_sob_type_code,
1379                             p_log_level_rec) then
1380                raise error_found;
1381             end if;
1382 
1383 
1384             total_backout_drs.deprn_exp       := total_backout_drs.deprn_exp +
1385                                                  backout_drs.deprn_exp;
1386             total_backout_drs.reval_deprn_exp := total_backout_drs.reval_deprn_exp +
1387                                                  backout_drs.reval_deprn_exp;
1388             total_backout_drs.reval_amo       := total_backout_drs.reval_amo +
1389                                                  backout_drs.reval_amo;
1390             total_backout_drs.deprn_rsv       := total_backout_drs.deprn_rsv +
1391                                                  backout_drs.deprn_rsv;
1392             total_backout_drs.reval_rsv       := total_backout_drs.reval_rsv +
1393                                                  backout_drs.reval_rsv;
1394             total_backout_drs.bonus_deprn_amount := total_backout_drs.bonus_deprn_amount +
1395                                                  backout_drs.bonus_deprn_amount;
1396 
1397             total_backout_drs.bonus_deprn_rsv := total_backout_drs.bonus_deprn_rsv +
1398                                                  backout_drs.bonus_deprn_rsv;
1399 
1400             b := faxzdrs (backout_drs, p_log_level_rec);
1401 
1402          else
1403 
1404             -- newly created distribution
1405 
1406             -- retrieve the dist id
1407             open c_dist_id (p_asset_hdr_rec.asset_id,
1408                             l_asset_dist_rec.expense_ccid,
1409                             l_asset_dist_rec.location_ccid,
1410                             l_asset_dist_rec.assigned_to);
1411 
1412             fetch c_dist_id into l_asset_dist_rec.distribution_id;
1413             close c_dist_id;
1414 
1415             insert_drs.deprn_exp := total_backout_drs.deprn_exp *
1416                                     (l_asset_dist_rec.transaction_units /
1417                                      total_ua_backout);
1418 
1419             b := fa_utils_pkg.faxrnd(insert_drs.deprn_exp, p_asset_hdr_rec.book_type_code, l_asset_hdr_rec.set_of_books_id,p_log_level_rec => p_log_level_rec);
1420 
1421             taken_drs.deprn_exp := taken_drs.deprn_exp + insert_drs.deprn_exp;
1422 
1423             insert_drs.reval_deprn_exp := total_backout_drs.reval_deprn_exp *
1424                                           (l_asset_dist_rec.transaction_units /
1425                                            total_ua_backout);
1426 
1427             b:=fa_utils_pkg.faxrnd(insert_drs.reval_deprn_exp, p_asset_hdr_rec.book_type_code, l_asset_hdr_rec.set_of_books_id, p_log_level_rec => p_log_level_rec);
1428 
1429             taken_drs.reval_deprn_exp := taken_drs.reval_deprn_exp +
1430                                          insert_drs.reval_deprn_exp;
1431             taken_drs.reval_deprn_exp := taken_drs.reval_deprn_exp +
1432                                          insert_drs.reval_deprn_exp;
1433 
1434             insert_drs.reval_amo := total_backout_drs.reval_amo *
1435                                     (l_asset_dist_rec.transaction_units /
1436                                      total_ua_backout);
1437 
1438             b := fa_utils_pkg.faxrnd(insert_drs.reval_amo, p_asset_hdr_rec.book_type_code,l_asset_hdr_rec.set_of_books_id, p_log_level_rec => p_log_level_rec);
1439 
1440             taken_drs.reval_amo := taken_drs.reval_amo + insert_drs.reval_amo;
1441 
1442             -- RKP: also do this for rsv, reval rsv
1443 
1444             insert_drs.deprn_rsv := total_backout_drs.deprn_rsv *
1445                                     (l_asset_dist_rec.transaction_units /
1446                                      total_ua_backout);
1447 
1448 
1449             b := fa_utils_pkg.faxrnd(insert_drs.deprn_rsv, p_asset_hdr_rec.book_type_code, l_asset_hdr_rec.set_of_books_id, p_log_level_rec => p_log_level_rec);
1450 
1451             taken_drs.deprn_rsv := taken_drs.deprn_rsv + insert_drs.deprn_rsv;
1452 
1453             insert_drs.reval_rsv := total_backout_drs.reval_rsv *
1454                                     (l_asset_dist_rec.transaction_units /
1455                                      total_ua_backout);
1456 
1457             b := fa_utils_pkg.faxrnd(insert_drs.reval_rsv, p_asset_hdr_rec.book_type_code, l_asset_hdr_rec.set_of_books_id, p_log_level_rec => p_log_level_rec);
1458 
1459             taken_drs.reval_rsv := taken_drs.reval_rsv + insert_drs.reval_rsv;
1460 
1461             insert_drs.bonus_deprn_amount := total_backout_drs.bonus_deprn_amount *
1462                                           (l_asset_dist_rec.transaction_units /
1463                                            total_ua_backout);
1464 
1465             b := fa_utils_pkg.faxrnd (insert_drs.bonus_deprn_amount, p_asset_hdr_rec.book_type_code,l_asset_hdr_rec.set_of_books_id, p_log_level_rec => p_log_level_rec);
1466 
1467 
1468             taken_drs.bonus_deprn_amount := taken_drs.bonus_deprn_amount +
1469                                          insert_drs.bonus_deprn_amount;
1470 
1471             insert_drs.bonus_deprn_rsv := total_backout_drs.bonus_deprn_rsv *
1472                                           (l_asset_dist_rec.transaction_units /
1473                                           total_ua_backout);
1474 
1475             b := fa_utils_pkg.faxrnd (insert_drs.bonus_deprn_rsv, p_asset_hdr_rec.book_type_code, l_asset_hdr_rec.set_of_books_id, p_log_level_rec => p_log_level_rec);
1476 
1477 
1478             taken_drs.bonus_deprn_rsv := taken_drs.bonus_deprn_rsv +
1479                                          insert_drs.bonus_deprn_rsv;
1480 
1481 
1482             if not fadgdd (p_trans_rec,
1483                            l_asset_hdr_rec,
1484                            p_asset_desc_rec,
1485                            p_asset_cat_rec,
1486                            l_asset_dist_rec,
1487                            l_period_rec,
1488                            ppd_ctr,
1489                            insert_drs,
1490                            FALSE,
1491                            l_mrc_sob_type_code,
1492                            p_log_level_rec) then
1493                raise error_found;
1494             end if;
1495          end if;
1496       end loop; -- end of dist loop
1497 
1498       -- if row_ctr <> 0 then
1499       if row_ctr_temp <> 0 then
1500 
1501          -- Bug#6999340: Allocating unprocessed amount to the new distribution_id created.
1502          l_asset_dist_rec := p_asset_dist_tbl(row_ctr_temp);
1503 
1504          open c_dist_id (p_asset_hdr_rec.asset_id,
1505                             l_asset_dist_rec.expense_ccid,
1506                             l_asset_dist_rec.location_ccid,
1507                             l_asset_dist_rec.assigned_to);
1508 
1509 
1510          fetch c_dist_id into l_asset_dist_rec.distribution_id;
1511 
1512          if c_dist_id%found then  -- bug# 5523484
1513 
1514 
1515             insert_drs.deprn_exp       := total_backout_drs.deprn_exp - taken_drs.deprn_exp;
1516             insert_drs.reval_deprn_exp := total_backout_drs.reval_deprn_exp -
1517                                           taken_drs.reval_deprn_exp;
1518             insert_drs.reval_amo       := total_backout_drs.reval_amo-taken_drs.reval_amo;
1519 
1520             -- RKP: also do this for deprn rsv, reval rsv
1521             insert_drs.deprn_rsv := total_backout_drs.deprn_rsv-taken_drs.deprn_rsv;
1522             insert_drs.reval_rsv := total_backout_drs.reval_rsv-taken_drs.reval_rsv;
1523 
1524             insert_drs.bonus_deprn_amount := total_backout_drs.bonus_deprn_amount -
1525                                              taken_drs.bonus_deprn_amount;
1526 
1527             insert_drs.bonus_deprn_rsv := total_backout_drs.bonus_deprn_rsv -
1528                                           taken_drs.bonus_deprn_rsv;
1529 
1530             backout_share    := total_dep_backout - old_backout_taken;
1531             dist_total_deprn := backout_share;
1532 
1533             if not fadgdd (p_trans_rec,
1534                         l_asset_hdr_rec,
1535                         p_asset_desc_rec,
1536                         p_asset_cat_rec,
1537                         l_asset_dist_rec,
1538                         l_period_rec,
1539                         ppd_ctr,
1540                         insert_drs,
1541                         FALSE,
1542                         l_mrc_sob_type_code,
1543                         p_log_level_rec) then
1544                raise error_found;
1545             end if;
1546          end if; -- bug# 5523484
1547          close c_dist_id;
1548 
1549       else
1550          fa_srvr_msg.add_message
1551                              (calling_fn => l_calling_fn,
1552                               name       => 'FA_DEPRN_NO_DIST_HIST',
1553                               token1     => 'ROUTINE',
1554                               value1     => l_calling_fn,
1555                               token2     => 'ASSET_NUM',
1556                               value2     => p_asset_desc_rec.asset_number,
1557                               token3     => 'ASSET_ID',
1558                               value3     => p_asset_hdr_rec.asset_id,
1559                               token4     => 'BOOK_TYPE',
1560                               value4     => p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
1561 
1562       end if;
1563 
1564    end loop;    -- end of mrc loop
1565 
1566    return (TRUE);
1567 
1568 <<fadppt_no_ppt>>
1569     fa_srvr_msg.add_message(calling_fn => l_calling_fn,
1570                             name       => 'FA_DEPRN_NO_PRIOR',
1571                             token1     => 'ASSET_NUM',
1572                             value1     => p_asset_desc_rec.asset_number, p_log_level_rec => p_log_level_rec);
1573 
1574     -- SLA: fadrars call is obsolete:
1575 
1576     return (TRUE);
1577 
1578 Exception
1579 
1580    when error_found then
1581         fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
1582         return (FALSE);
1583 
1584    when others then
1585 
1586         fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
1587         return (FALSE);
1588 
1589 end FADPPT;
1590 
1591 
1592 
1593 /*===========================================================================+
1594  |  NAME                                                                     |
1595  |      fadrars                                                              |
1596  |                                                                           |
1597  |  FUNCTION                                                                 |
1598  |      Resets fa_distribution_history.period_adjustment values to 0 for     |
1599  |  all records of a specified asset and book type.  Also resets the         |
1600  |  fa_books.adjustment_required_status to 'NONE' for the specified record.  |
1601  |                                                                           |
1602  |  NOTE                                                                     |
1603  |     obsolete for SLA for transfers                                        |
1604  +===========================================================================*/
1605 
1606 /*===========================================================================+
1607  |  NAME                                                                     |
1608  |      fadppa                                                               |
1609  |                                                                           |
1610  |  FUNCTION                                                                 |
1611  |      Calculates depreciation for a Prior Period Addition.                 |
1612  |      Also, added faduxx to update FA_BOOKS with new adjusted rates, bonus |
1613  |      rule, bonus rates for NBV assets                                     |
1614  |                                                                           |
1615  |  NOTES                                                                    |
1616  |      obsolete for SLA                                                     |
1617  +===========================================================================*/
1618 
1619 /*===========================================================================+
1620  |                                                                           |
1621  |      fadpaa                                                               |
1622  |                                                                           |
1623  |      FA Depreciation Process Adjustments Array                            |
1624  |                                                                           |
1625  |      Inserts a row into fa_deprn_detail for each row in the Adjustments   |
1626  |              array; then inserts one row into fa_deprn_summary for        |
1627  |              sum of values in array                                       |
1628  |                                                                           |
1629  |  NOTES                                                                    |
1630  |      obsolete for SLA                                                     |
1631  +===========================================================================*/
1632 
1633 /*===========================================================================+
1634  |  NAME                                                                     |
1635  |      fadadp                                                               |
1636  |                                                                           |
1637  |  FUNCTION                                                                 |
1638  |      Calculates adjusted depreciation for a specified asset_id and        |
1639  |  book_type and stores the distributed depreciation amounts in the         |
1640  |  fa_deprn_detail table.                                                   |
1641  |      Returns the total amount of adjusted depreciation on the asset.      |
1642  |                                                                           |
1643  |  NOTES                                                                    |
1644  |      This routine was rewritten to handle prior period transfers.  Now    |
1645  |      it does very little except call routines to handle either transfers  |
1646  |      or additions.                                                        |
1647  |                                                                           |
1648  |      obsolete for SLA                                                     |
1649  +===========================================================================*/
1650 
1651 
1652 /*===========================================================================+
1653  |  NAME                                                                     |
1654  |      fadatd                                                               |
1655  |                                                                           |
1656  |  FUNCTION                                                                 |
1657  |      1.  updates deprn_detail and deprn_summary records by adding the     |
1658  |              adjustments records to them where the deprn records exist.   |
1659  |      2.  inserts deprn_detail and deprn_summary records by copying        |
1660  |              the adjustments records where the deprn records don't exist. |
1661  |                                                                           |
1662  |  NOTES                                                                    |
1663  |      this remains in pro*c and is not part of SLA                         |
1664  +===========================================================================*/
1665 
1666 
1667 END FA_TRANSFER_PVT;