DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_TRANSFER_XIT_PKG

Source


1 PACKAGE BODY FA_TRANSFER_XIT_PKG as
2 /* $Header: FAXTFRXB.pls 120.19.12020000.2 2012/07/19 12:47:01 mswetha ship $ */
3 
4 g_release                  number  := fa_cache_pkg.fazarel_release;
5 
6 -- Constants used for function setacct
7 FA_TFR_COST        CONSTANT NUMBER := 1;
8 FA_TFR_DEPRN_RSV   CONSTANT NUMBER := 2;
9 FA_TFR_REVAL_RSV   CONSTANT NUMBER := 3;
10 FA_TFR_BONUS_DEPRN_RSV CONSTANT NUMBER := 6;
11 FA_TFR_IMPAIRMENT_RSV CONSTANT NUMBER := 7;
12 FA_CAPITAL_ADJUSTMENT CONSTANT NUMBER := 8; -- Bug 6666666
13 FA_GENERAL_FUND    CONSTANT NUMBER := 9;    -- Bug 6666666
14 
15 
16 
17 /* BUG# 1823498 MRC changes
18  * following cursor was borrowed from famcospb.pls and is
19  * used to pick up the primary and all associated reporting books
20  * for processing
21  *    -- bridgway 6/20/01
22  */
23 
24   CURSOR n_sob_id (p_psob_id IN NUMBER,
25                    p_book_type_code IN VARCHAR2) is
26   SELECT p_psob_id AS sob_id,
27          1 AS index_id
28     FROM dual
29    UNION
30   SELECT set_of_books_id AS sob_id,
31          2 AS index_id
32     FROM fa_mc_book_controls
33    WHERE book_type_code = p_book_type_code
34      AND primary_set_of_books_id = p_psob_id
35      AND enabled_flag = 'Y'
36    ORDER BY 2;
37 
38 
39 --
40 -- FUNCTION fautfr
41 --
42 
43 FUNCTION fautfr(X_thid               IN   NUMBER,
44                 X_asset_id           IN   NUMBER,
45                 X_book               IN   VARCHAR2,
46                 X_txn_type_code      IN   VARCHAR2,
47                 X_period_ctr         IN   NUMBER,
48                 X_curr_units         IN   NUMBER,
49                 X_today              IN   DATE,
50                 X_old_cat_id         IN   NUMBER,
51                 X_new_cat_id         IN   NUMBER,
52                 X_asset_type         IN   VARCHAR2,
53                 X_last_update_date   IN DATE default sysdate,
54                 X_last_updated_by    IN NUMBER default -1,
55                 X_last_update_login  IN NUMBER default -1,
56                 X_init_message_flag  IN VARCHAR2 DEFAULT 'NO', p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
57          return BOOLEAN is
58 
59 
60    h_amount_cleard NUMBER := 0;
61    h_book          fa_book_controls.book_type_code%TYPE;
62    h_book_class    fa_book_controls.book_class%TYPE;
63    h_dist_book     fa_book_controls.distribution_source_book%TYPE;
64 
65    h_date_eff      DATE;
66    h_msg_name      VARCHAR2(30) := NULL;
67    h_cur_per_ctr   NUMBER;
68    h_period_ctr    NUMBER;
69 
70    h_adj           fa_adjust_type_pkg.fa_adj_row_struct;
71    h_dpr           fa_std_types.fa_deprn_row_struct;
72 
73    h_proceed       BOOLEAN;
74    ERROR_FOUND     EXCEPTION;
75    h_count         NUMBER;
76    h_status        BOOLEAN;
77 
78 -- BUG# 1823498 mrc changes
79    h_primary_sob_id  number;
80    h_profile_sob_id  number;
81    h_currency_context varchar2(64);
82    h_mrc_sob_type_code varchar2(1);
83 
84    --bug2353154
85    l_account_flex              NUMBER;
86    l_bal_segnum                NUMBER;
87    l_old_dist_id               NUMBER;
88    l_old_ccid                  NUMBER;
89    l_total_amt_to_prorate      NUMBER;
90    l_total_units_to_process    NUMBER;
91    l_amount_inserted_tr_out    NUMBER;
92    l_old_bal_seg               VARCHAR2(25);
93    h_pc 		       number;
94    h_tracking_method     VARCHAR2(30);
95    h_member_rollup_flag  VARCHAR2(1);
96    h_is_prior_period	boolean;
97    h_exp_moved		boolean := false;
98 
99    -- R12 removing this cursor as FAVDISTB.pls now drives by book
100 
101    BEGIN
102 
103      if (X_init_message_flag = 'YES') then
104          FA_SRVR_MSG.INIT_SERVER_MESSAGE;   /* init server msg stack */
105          fa_debug_pkg.initialize;           /* init debug msg stack */
106      end if;
107 
108      /* BUG# 1823498
109       * get the current sob profile option value for later usage
110       * as it needs to reset upon completion or failure, then get
111       * the set_of_books_id for the corp book being processed
112       */
113 
114      if (X_txn_type_code NOT in ('TRANSFER','UNIT ADJUSTMENT','RECLASS',
115                                  'TRANSFER OUT')) then
116         return (TRUE);
117      end if;
118 
119      if (p_log_level_rec.statement_level) then
120         fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fautfr',
121                          element => 'txn_type_code',
122                          value   => X_txn_type_code, p_log_level_rec => p_log_level_rec);
123      end if;
124 
125      if (nvl(fa_cache_pkg.fazcbc_record.allow_group_deprn_flag, 'N') = 'Y' and
126          nvl(fa_cache_pkg.fazcbc_record.allow_member_tracking_flag, 'N') = 'Y') then
127         select nvl(bk.tracking_method, 'NONE'),
128                nvl(bk.member_rollup_flag, 'N')
129           into h_tracking_method,
130                h_member_rollup_flag
131           from fa_books bk
132          where asset_id = X_asset_id
133            and book_type_code = X_book
134            and transaction_header_id_out is null;
135 
136      else
137         h_tracking_method := 'NONE';
138         h_member_rollup_flag := 'Y';
139      end if;
140 
141 
142      h_adj.asset_invoice_id := 0;
143      h_adj.leveling_flag := TRUE;
144 
145      if (X_txn_type_code = 'RECLASS') then
146         h_adj.source_type_code := 'RECLASS';
147      else
148         h_adj.source_type_code := 'TRANSFER';
149      end if;
150 
151      h_adj.code_combination_id := 0;
152      h_adj.transaction_header_id := X_thid;
153      h_adj.asset_id := X_asset_id;
154      h_adj.adjustment_amount := 0;
155      h_adj.distribution_id := 0;
156      h_adj.annualized_adjustment := 0;
157      h_adj.last_update_date := X_today;
158      h_adj.current_units := X_curr_units;
159      h_adj.selection_thid := X_thid;
160      h_adj.flush_adj_flag := FALSE;
161      h_adj.gen_ccid_flag := TRUE;
162      h_adj.amount_inserted := 0;
163 
164      h_msg_name := 'FA_TFR_BOOK_INFO';
165 
166      h_proceed := TRUE;
167      h_book    := X_book;
168 
169      if (X_txn_type_code = 'TRANSFER OUT') then
170         h_dist_book := fa_cache_pkg.fazcbc_record.distribution_source_book;
171         if (h_dist_book = h_book) then
172            return TRUE;
173         end if;
174      end if;
175 
176 
177      -- SLA: always used passed period counter
178      h_cur_per_ctr := X_period_ctr;
179 
180      h_adj.book_type_code := h_book;
181      h_adj.period_counter_created := h_cur_per_ctr;
182      h_adj.period_counter_adjusted := h_cur_per_ctr;
183 
184      h_primary_sob_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
185 
186      -- BUG# 6951826
187       if (X_Asset_Type     <> 'GROUP' and
188           (h_tracking_method = 'ALLOCATE' OR
189            (h_tracking_method = 'CALCULATE' AND
190             h_member_rollup_flag = 'N'))) then
191          h_adj.track_member_flag := 'Y';
192       else
193          h_adj.track_member_flag := null;
194       end if;
195 
196       /* BUG# 1823498 adding for MRC enhancements
197        * loop through each SOB (primary and reporting) and
198        * and process each directly to avoid rounding errors
199        *    -- bridgway 06/20/01
200        */
201 
202       for c_rec in n_sob_id(h_primary_sob_id, h_book) loop
203 
204          if c_rec.index_id = 1 then
205             h_mrc_sob_type_code := 'P';
206          else
207             h_mrc_sob_type_code := 'R';
208          end if;
209 
210          h_dpr.asset_id := X_asset_id;
211          h_dpr.book := h_book;
212          h_dpr.period_ctr := 0;
213          h_dpr.dist_id := 0;
214          h_dpr.mrc_sob_type_code := h_mrc_sob_type_code;
215          h_dpr.set_of_books_id := c_rec.sob_id;
216 
217          -- query for the deprn reserve, reval reserve, before we clear out
218          -- the accounts, for a consistent read value
219          -- bonus: bonus_deprn_rsv,bonus_ytd_deprn,bonus_exp added
220          --        to query balances
221          fa_query_balances_pkg.query_balances_int(
222                               X_DPR_ROW => h_dpr,
223                               X_RUN_MODE => 'STANDARD',
224                               X_DEBUG => FALSE,
225                               X_SUCCESS => h_status,
226                               X_CALLING_FN => 'FA_TRANSFER_XIT_PKG.fautfr',
227                               X_TRANSACTION_HEADER_ID => -1, p_log_level_rec => p_log_level_rec);
228          if (NOT h_status) then
229             raise ERROR_FOUND;
230          end if;
231 
232 
233          if (X_txn_type_code = 'TRANSFER') then
234 
235             if (NOT fatsgl(X_adj => h_adj,
236                                  X_cat_id => X_new_cat_id,
237                                  X_asset_type => X_asset_type,
238                                  X_last_update_date  => X_last_update_date,
239                                  X_last_updated_by   => X_last_updated_by,
240                                  X_last_update_login => X_last_update_login,
241                                  X_mrc_sob_type_code => h_mrc_sob_type_code,
242                                  X_set_of_books_id => c_rec.sob_id,
243                                  p_log_level_rec => p_log_level_rec)) then
244                 raise ERROR_FOUND;
245             end if;
246 
247          -- bonus: implies reclass
248          else
249 
250             h_adj.track_member_flag := null;
251 
252             -- move the cost
253             if (NOT fadotfr(X_adj_ptr => h_adj,
254                                   X_acctcode => FA_TFR_COST,
255                                   X_old_cat_id => X_old_cat_id,
256                                   X_new_cat_id => X_new_cat_id,
257                                   X_asset_type => X_asset_type,
258                                   X_last_update_date  => X_last_update_date,
259                                   X_last_updated_by   => X_last_updated_by,
260                                   X_last_update_login => X_last_update_login,
261                                   X_mrc_sob_type_code => h_mrc_sob_type_code,
262                                   X_set_of_books_id => c_rec.sob_id,
263                                   p_log_level_rec => p_log_level_rec)) then
264                 raise ERROR_FOUND;
265              end if;
266 
267 
268              -- BUG# 6951826
269              if (X_Asset_Type     <> 'GROUP' and
270                  (h_tracking_method = 'ALLOCATE' OR
271                   (h_tracking_method = 'CALCULATE' AND
272                    h_member_rollup_flag = 'N'))) then
273                 h_adj.track_member_flag := 'Y';
274              else
275                 h_adj.track_member_flag := null;
276              end if;
277 
278 
279              -- move the deprn reserve
280              h_adj.flush_adj_flag := TRUE;
281              if (NOT fadotfr(X_adj_ptr => h_adj,
282                                   X_acctcode => FA_TFR_DEPRN_RSV,
283                                   X_old_cat_id => X_old_cat_id,
284                                   X_new_cat_id => X_new_cat_id,
285                                   X_asset_type => X_asset_type,
286                                   X_last_update_date  => X_last_update_date,
287                                   X_last_updated_by   => X_last_updated_by,
288                                   X_last_update_login => X_last_update_login,
289                                   X_mrc_sob_type_code => h_mrc_sob_type_code,
290                                   X_set_of_books_id => c_rec.sob_id,
291                                   p_log_level_rec => p_log_level_rec)) then
292                 raise ERROR_FOUND;
293              end if;
294 
295 
296              -- bonus: move the bonus deprn reserve if bonus reserve exist
297              if nvl(h_dpr.bonus_deprn_rsv,0) <> 0 then
298                 h_adj.flush_adj_flag := TRUE;
299                 if (NOT fadotfr(X_adj_ptr => h_adj,
300                                      X_acctcode => FA_TFR_BONUS_DEPRN_RSV,
301                                      X_old_cat_id => X_old_cat_id,
302                                      X_new_cat_id => X_new_cat_id,
303                                      X_asset_type => X_asset_type,
304                                      X_last_update_date  => X_last_update_date,
305                                      X_last_updated_by   => X_last_updated_by,
306                                      X_last_update_login => X_last_update_login,
307                                      X_mrc_sob_type_code => h_mrc_sob_type_code,
308                                      X_set_of_books_id => c_rec.sob_id,
309                                      p_log_level_rec => p_log_level_rec)) then
310                 raise ERROR_FOUND;                     end if;
311              end if;
312 
313              if nvl(h_dpr.impairment_rsv,0) <> 0 then
314                 h_adj.flush_adj_flag := TRUE;
315                 if (NOT fadotfr(X_adj_ptr => h_adj,
316                                      X_acctcode => FA_TFR_IMPAIRMENT_RSV,
317                                      X_old_cat_id => X_old_cat_id,
318                                      X_new_cat_id => X_new_cat_id,
319                                      X_asset_type => X_asset_type,
320                                      X_last_update_date  => X_last_update_date,
321                                      X_last_updated_by   => X_last_updated_by,
322                                      X_last_update_login => X_last_update_login,
323                                      X_mrc_sob_type_code => h_mrc_sob_type_code,
324                                      X_set_of_books_id => c_rec.sob_id,
325                                      p_log_level_rec => p_log_level_rec)) then
326                 raise ERROR_FOUND;                     end if;
327              end if;
328 
329              -- move the reval_reserve, set flush = TRUE to insert all the
330              -- FA_ADJUSTMENTS rows to the database
331 
332              if (nvl(h_dpr.reval_rsv,0) <> 0) then
333                 h_adj.flush_adj_flag := TRUE;
334                 if (NOT fadotfr(X_adj_ptr => h_adj,
335                                       X_acctcode => FA_TFR_REVAL_RSV,
336                                       X_old_cat_id => X_old_cat_id,
337                                       X_new_cat_id => X_new_cat_id,
338                                       X_asset_type => X_asset_type,
339                                       X_last_update_date  => X_last_update_date,
340                                       X_last_updated_by   => X_last_updated_by,
341                                       X_last_update_login => X_last_update_login,
342                                       X_mrc_sob_type_code => h_mrc_sob_type_code,
343                                       X_set_of_books_id => c_rec.sob_id,
344                                       p_log_level_rec => p_log_level_rec)) then
345                     raise ERROR_FOUND;
346                 end if;
347              end if;
348 
349              /* Bug 6666666 : Added for SORP Compliance */
350              if nvl(h_dpr.capital_adjustment,0) <> 0 then
351                 -- h_adj.flush_adj_flag := TRUE;
352                 if (NOT fadotfr(X_adj_ptr => h_adj,
353                                      X_acctcode => FA_CAPITAL_ADJUSTMENT,
354                                      X_old_cat_id => X_old_cat_id,
355                                      X_new_cat_id => X_new_cat_id,
356                                      X_asset_type => X_asset_type,
357                                      X_last_update_date  => X_last_update_date,
358                                      X_last_updated_by   => X_last_updated_by,
359                                      X_last_update_login => X_last_update_login,
360                                      X_mrc_sob_type_code => h_mrc_sob_type_code,
361                                      X_set_of_books_id => c_rec.sob_id,
362                                      p_log_level_rec => p_log_level_rec)) then
363                 raise ERROR_FOUND;                     end if;
364              end if;
365 
366              /* Bug 6666666 : Added for SORP Compliance */
367              if nvl(h_dpr.general_fund,0) <> 0 then
368                 -- h_adj.flush_adj_flag := TRUE;
369                 if (NOT fadotfr(X_adj_ptr => h_adj,
370                                      X_acctcode => FA_GENERAL_FUND,
371                                      X_old_cat_id => X_old_cat_id,
372                                      X_new_cat_id => X_new_cat_id,
373                                      X_asset_type => X_asset_type,
374                                      X_last_update_date  => X_last_update_date,
375                                      X_last_updated_by   => X_last_updated_by,
376                                      X_last_update_login => X_last_update_login,
377                                      X_mrc_sob_type_code => h_mrc_sob_type_code,
378                                      X_set_of_books_id => c_rec.sob_id,
379                                      p_log_level_rec => p_log_level_rec)) then
380                         raise ERROR_FOUND;                     end if;
381              end if;
382 
383           end if;  -- if X_txn_type_code
384 
385       end loop;  -- end mrc
386 
387      /* Bug#4424613:
388         By having a new function faumvexp, we will be moving the existing catchup expense
389         created by amortized adj expense
390         to a new distribution created by reclass
391         in period of addition.
392         Please note that the main select in fautfr returns no rows to process in this scenario
393         though it is called even in period of addition.
394      */
395 
396      -- R12 conditional logic
397      if (G_release = 11) then
398         h_is_prior_period := TRUE;
399         IF NOT faucper(X_asset_id => X_asset_id,
400                     X_is_prior_period => h_is_prior_period,
401                     X_book => X_book,
402                     p_log_level_rec => p_log_level_rec)  THEN
403            RAISE error_found;
404         END IF;
405 
406         --Bug#7396223:
407         --Included Transfer along with reclass
408         if (NOT h_is_prior_period
409             and X_txn_type_code in ('RECLASS','TRANSFER')) then
410 
411            IF NOT faumvexp(X_asset_id => X_asset_id
412                       ,X_book_type_code => X_book
413                       ,X_th_id => X_thid
414                       ,X_to_category_id => X_new_cat_id
415                       ,X_exp_moved => h_exp_moved
416                       ,X_last_update_date => X_last_update_date
417                       ,X_last_updated_by => X_last_updated_by
418                       ,X_last_update_login => X_last_update_login,
419                       p_log_level_rec => p_log_level_rec) THEN
420 
421                     RAISE error_found;
422            END IF;
423 
424         end if;
425 
426      end if;
427 
428      return (TRUE);
429 
430 
431   EXCEPTION
432      when ERROR_FOUND then
433         fa_srvr_msg.add_message(calling_fn => 'FA_TRANSFER_XIT_PKG.fautfr',
434                                 name => h_msg_name, p_log_level_rec => p_log_level_rec);
435 
436         return(FALSE);
437 
438 
439      when others then
440         fa_srvr_msg.add_sql_error(calling_fn => 'FA_TRANSFER_XIT_PKG.fautfr', p_log_level_rec => p_log_level_rec);
441 
442         return(FALSE);
443 
444   END;
445 
446 --
447 -- FUNCTION fadotfr
448 --
449 
450 FUNCTION fadotfr(X_adj_ptr       IN OUT NOCOPY  fa_adjust_type_pkg.fa_adj_row_struct,
451                  X_acctcode      IN   NUMBER,
452                  X_old_cat_id    IN   NUMBER,
453                  X_new_cat_id    IN   NUMBER,
454                  X_asset_type    IN   VARCHAR2,
455                  X_last_update_date  IN DATE default sysdate,
456                  X_last_updated_by   IN NUMBER default -1,
457                  X_last_update_login IN NUMBER default -1,
458                  X_mrc_sob_type_code IN VARCHAR2,
459                  X_set_of_books_id   IN NUMBER,
460                  p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
461          return BOOLEAN is
462 
463   h_amount_cleared NUMBER;
464   h_msg_name       VARCHAR2(30);
465   h_token1         VARCHAR2(30);
466   h_token2         VARCHAR2(30);
467   h_value1         NUMBER;
468   h_value2         NUMBER;
469   ERROR_FOUND      EXCEPTION;
470 
471 
472   BEGIN
473 
474      h_msg_name := NULL;
475 
476 
477      -- clear out the account for all distributions
478      if (NOT setacct(X_adj_ptr => X_adj_ptr,
479                      X_acctcode => X_acctcode,
480                      X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
481                      X_cat_id => X_old_cat_id,
482                      X_asset_type => X_asset_type,
483                      p_log_level_rec => p_log_level_rec)) then
484          raise ERROR_FOUND;
485      end if;
486 
487      X_adj_ptr.selection_retid := X_old_cat_id;
488      X_adj_ptr.selection_mode := fa_adjust_type_pkg.FA_AJ_CLEAR;
489      X_adj_ptr.mrc_sob_type_code := X_mrc_sob_type_code;
490      X_adj_ptr.source_dest_code  := 'SOURCE';
491      X_adj_ptr.set_of_books_id := X_set_of_books_id;
492 
493      if (NOT fa_ins_adjust_pkg.faxinaj(X_adj_ptr,
494                                        X_last_update_date,
495                                        X_last_updated_by,
496                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
497         if (p_log_level_rec.statement_level) then
498             fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fadotfr',
499                              element => 'X_acctcode',
500                              value   => X_acctcode, p_log_level_rec => p_log_level_rec);
501             fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fadotfr',
502                              element => 'adjustment_type',
503                              value   => X_adj_ptr.adjustment_type, p_log_level_rec => p_log_level_rec);
504             fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fadotfr',
505                              element => 'select_mode',
506                              value   => X_adj_ptr.selection_mode, p_log_level_rec => p_log_level_rec);
507         end if;
508         raise ERROR_FOUND;
509      end if;
510 
511      -- save amount cleared
512 
513      h_amount_cleared := X_adj_ptr.amount_inserted;
514 
515      -- set adjustment amount to be amount cleared
516      X_adj_ptr.adjustment_amount := h_amount_cleared;
517 
518      X_adj_ptr.amount_inserted := 0;
519 
520      -- transfer cleared amount to new account
521      if (NOT setacct(X_adj_ptr => X_adj_ptr,
522                      X_acctcode => X_acctcode,
523                      X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
524                      X_cat_id => X_new_cat_id,
525                      X_asset_type => X_asset_type,
526                      p_log_level_rec => p_log_level_rec )) then
527          raise ERROR_FOUND;
528      end if;
529 
530      X_adj_ptr.selection_retid := X_new_cat_id;
531      X_adj_ptr.selection_mode := fa_adjust_type_pkg.FA_AJ_ACTIVE;
532      X_adj_ptr.mrc_sob_type_code := X_mrc_sob_type_code;
533      X_adj_ptr.source_dest_code  := 'DEST';
534      X_adj_ptr.set_of_books_id := X_set_of_books_id;
535 
536      if (NOT fa_ins_adjust_pkg.faxinaj(X_adj_ptr,
537                                        X_last_update_date,
538                                        X_last_updated_by,
539                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
540         if (p_log_level_rec.statement_level) then
541             fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fadotfr',
542                              element => 'X_acctcode',
543                              value   => X_acctcode, p_log_level_rec => p_log_level_rec);
544             fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fadotfr',
545                              element => 'adjustment_type',
546                              value   => X_adj_ptr.adjustment_type, p_log_level_rec => p_log_level_rec);
547             fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fadotfr',
548                              element => 'select_mode',
549                              value   => X_adj_ptr.selection_mode, p_log_level_rec => p_log_level_rec);
550         end if;
551         raise ERROR_FOUND;
552      end if;
553 
554    -- check to make sure amount cleared is same as amount transferred.
555      if (h_amount_cleared <> X_adj_ptr.amount_inserted) then
556          h_msg_name := 'FA_TFR_UNBAL_AMTS';
557          h_token1 := 'CLEARED';
558          h_token2 := 'INSERTED';
559          h_value1 := h_amount_cleared;
560          h_value2 := X_adj_ptr.amount_inserted;
561          raise ERROR_FOUND;
562      end if;
563 
564      /* clear the amount inserted */
565 
566      X_adj_ptr.amount_inserted := 0;
567 
568      return TRUE;
569 
570 
571   EXCEPTION
572     when ERROR_FOUND then
573       fa_srvr_msg.add_message(calling_fn => 'FA_TRANSFER_XIT_PKG.fadotfr',
574                               name => h_msg_name,
575                               token1=> h_token1, value1=>h_value1,
576                               token2=> h_token2, value2=>h_value2, p_log_level_rec => p_log_level_rec);
577       return FALSE;
578 
579     when OTHERS then
580       fa_srvr_msg.add_sql_error(calling_fn => 'FA_TRANSFER_XIT_PKG.fadotfr', p_log_level_rec => p_log_level_rec);
581       return FALSE;
582 
583   END fadotfr;
584 
585 
586 --
587 -- FUNCTION setacct
588 --
589 
590 FUNCTION setacct(X_adj_ptr  IN OUT NOCOPY fa_adjust_type_pkg.fa_adj_row_struct,
591                  X_acctcode IN NUMBER,
592                  X_select_mode IN NUMBER,
593                  X_cat_id      IN NUMBER,
594                  X_asset_type  IN VARCHAR2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
595         return BOOLEAN is
596 
597   h_book          X_adj_ptr.book_type_code%type;
598   h_category_id   NUMBER;
599 
600   BEGIN
601 
602       if (p_log_level_rec.statement_level) then
603           fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.setacct',
604                            element => 'X_acctcode',
605                            value   => X_acctcode, p_log_level_rec => p_log_level_rec);
606           fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.setacct',
607                            element => 'adjustment_type',
608                            value   => X_adj_ptr.adjustment_type, p_log_level_rec => p_log_level_rec);
609           fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.setacct',
610                            element => 'X_select_mode',
611                            value   => X_select_mode, p_log_level_rec => p_log_level_rec);
612       end if;
613 
614       h_book := X_adj_ptr.book_type_code;
615       h_category_id := X_cat_id;
616 
617       if (X_acctcode = FA_TFR_COST) then
618 
619           X_adj_ptr.adjustment_type := 'COST';
620 
621           if (X_asset_type = 'CIP') then
622               X_adj_ptr.account_type := 'CIP_COST_ACCT';
623 
624              select cip_cost_acct
625              into X_adj_ptr.account
626              from fa_category_books
627              where book_type_code = h_book
628              and category_id = h_category_id;
629 
630           elsif (X_asset_type = 'CAPITALIZED' OR
631                  X_asset_type = 'EXPENSED' OR
632                  X_asset_type = 'GROUP' ) then
633 
634              X_adj_ptr.account_type := 'ASSET_COST_ACCT';
635 
636              select asset_cost_acct
637              into X_adj_ptr.account
638              from fa_category_books
639              where book_type_code = h_book
640              and category_id = h_category_id;
641           end if;
642 
643           if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
644               X_adj_ptr.debit_credit_flag := 'CR';
645           else
646               X_adj_ptr.debit_credit_flag := 'DR';
647           end if;
648 
649       elsif (X_acctcode = FA_TFR_DEPRN_RSV) then
650 
651           X_adj_ptr.adjustment_type := 'RESERVE';
652           X_adj_ptr.account_type := 'DEPRN_RESERVE_ACCT';
653 
654 
655           select deprn_reserve_acct
656           into X_adj_ptr.account
657           from fa_category_books
658           where book_type_code = h_book
659           and category_id = h_category_id;
660 
661           if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
662              X_adj_ptr.debit_credit_flag := 'DR';
663           else
664              X_adj_ptr.debit_credit_flag := 'CR';
665           end if;
666 -- bonus
667       elsif (X_acctcode = FA_TFR_BONUS_DEPRN_RSV) then
668 
669           X_adj_ptr.adjustment_type := 'BONUS RESERVE';
670           X_adj_ptr.account_type := 'BONUS_DEPRN_RESERVE_ACCT';
671 
672 
673           select bonus_deprn_reserve_acct
674           into X_adj_ptr.account
675           from fa_category_books
676           where book_type_code = h_book
677           and category_id = h_category_id;
678 
679           if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
680              X_adj_ptr.debit_credit_flag := 'DR';
681           else
682              X_adj_ptr.debit_credit_flag := 'CR';
683           end if;
684 
685       elsif (X_acctcode = FA_TFR_IMPAIRMENT_RSV) then
686 
687           X_adj_ptr.adjustment_type := 'IMPAIR RESERVE';
688           X_adj_ptr.account_type := 'IMPAIR_RESERVE_ACCT';
689 
690 
691           select impair_reserve_acct
692           into X_adj_ptr.account
693           from fa_category_books
694           where book_type_code = h_book
695           and category_id = h_category_id;
696 
697           if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
698              X_adj_ptr.debit_credit_flag := 'DR';
699           else
700              X_adj_ptr.debit_credit_flag := 'CR';
701           end if;
702 
703       /*Bug 6666666 : Added for SORP Compliance */
704       elsif (X_acctcode = FA_CAPITAL_ADJUSTMENT) then
705 
706           X_adj_ptr.adjustment_type := 'CAPITAL ADJ';
707           X_adj_ptr.account_type := 'CAPITAL_ADJ_ACCT';
708 
709           select capital_adj_acct
710           into X_adj_ptr.account
711           from fa_category_books
712           where book_type_code = h_book
713           and category_id = h_category_id;
714 
715           if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
716              X_adj_ptr.debit_credit_flag := 'CR';
717           else
718              X_adj_ptr.debit_credit_flag := 'DR';
719           end if;
720 
721       /*Bug 6666666 : Added for SORP Compliance */
722       elsif (X_acctcode = FA_GENERAL_FUND) then
723 
724           X_adj_ptr.adjustment_type := 'GENERAL FUND';
725           X_adj_ptr.account_type := 'GENERAL_FUND_ACCT';
726 
727           select general_fund_acct
728           into X_adj_ptr.account
729           from fa_category_books
730           where book_type_code = h_book
731           and category_id = h_category_id;
732 
733           if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
734              X_adj_ptr.debit_credit_flag := 'DR';
735           else
736              X_adj_ptr.debit_credit_flag := 'CR';
737           end if;
738 
739       elsif (X_acctcode = FA_TFR_REVAL_RSV) then
740 
741           X_adj_ptr.adjustment_type := 'REVAL RESERVE';
742           X_adj_ptr.account_type := 'REVAL_RESERVE_ACCT';
743 
744           select reval_reserve_acct
745           into X_adj_ptr.account
746           from fa_category_books
747           where book_type_code = h_book
748           and category_id = h_category_id;
749 
750           if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
751              X_adj_ptr.debit_credit_flag := 'DR';
752           else
753              X_adj_ptr.debit_credit_flag := 'CR';
754           end if;
755 
756       end if;
757 
758       if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
759          X_adj_ptr.source_dest_code := 'SOURCE';
760       else
761          X_adj_ptr.source_dest_code := 'DEST';
762       end if;
763 
764       return TRUE;
765 
766   EXCEPTION
767       when OTHERS then
768          fa_srvr_msg.add_sql_error(calling_fn=>'FA_TRANSFER_XIT_PKG.setacct', p_log_level_rec => p_log_level_rec);
769          return FALSE;
770 
771   END setacct;
772 
773 
774 --
775 -- FUNCTION fatsgl
776 --
777 
778 FUNCTION fatsgl(X_adj         IN OUT NOCOPY fa_adjust_type_pkg.fa_adj_row_struct,
779                 X_cat_id      IN  NUMBER,
780                 X_asset_type  IN VARCHAR2,
781                 X_last_update_date  IN DATE default sysdate,
782                 X_last_updated_by   IN NUMBER default -1,
783                 X_last_update_login IN NUMBER default -1,
784                 X_mrc_sob_type_code IN VARCHAR2,
785                 X_set_of_books_id   IN NUMBER,
786                 p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
787          return BOOLEAN is
788 
789   h_dpr        FA_STD_TYPES.FA_DEPRN_ROW_STRUCT;
790   h_msg_name   VARCHAR2(30);
791   h_status     BOOLEAN;
792 
793   h_total_cost_to_prorate  NUMBER := 0;
794   h_total_rsv_to_prorate   NUMBER := 0;
795   h_total_rev_to_prorate   NUMBER := 0;
796   h_total_bonus_rsv_to_prorate   NUMBER := 0;
797   h_total_impair_rsv_to_prorate   NUMBER := 0;
798 
799   h_total_capital_to_prorate NUMBER := 0; -- Bug 6666666 : Capital Adjustment to prorate
800   h_total_general_to_prorate NUMBER := 0; -- Bug 6666666 : General Fund to prorate
801 
802   h_total_units_to_process NUMBER := 0;
803   h_num_units_processed    NUMBER := 0;
804 
805   h_cost_inserted_so_far   NUMBER := 0;
806   h_rsv_inserted_so_far    NUMBER := 0;
807   h_rev_inserted_so_far    NUMBER := 0;
808   h_bonus_rsv_inserted_so_far NUMBER := 0;
809   h_impair_rsv_inserted_so_far NUMBER := 0;
810 
811   h_capital_inserted_so_far NUMBER := 0; -- Bug 6666666 : Capital Adjustment inserted so far
812   h_general_inserted_so_far NUMBER := 0; -- Bug 6666666 : General Fund inserted so far
813 
814   h_term_dist_flag NUMBER;
815   h_thid           NUMBER;
816   h_dist_id        NUMBER;
817   h_ccid           NUMBER;
818   h_units_assigned NUMBER;
819 
820   l_orig_track_member_flag varchar2(1);
821 
822   ERROR_FOUND      EXCEPTION;
823 
824   -- find all distributions affected by the transfer
825   CURSOR dist_cursor is
826 
827       SELECT
828           DECODE(TH.TRANSACTION_HEADER_ID,
829                  DH.TRANSACTION_HEADER_ID_OUT, 1,
830                  DH.TRANSACTION_HEADER_ID_IN, 2,
831                  3),
832           TH.TRANSACTION_HEADER_ID,
833           DH.DISTRIBUTION_ID,
834           DH.CODE_COMBINATION_ID,
835           DH.UNITS_ASSIGNED
836       FROM
837           FA_DISTRIBUTION_HISTORY DH,
838           FA_TRANSACTION_HEADERS TH
839       WHERE
840           TH.TRANSACTION_HEADER_ID = X_adj.selection_thid AND
841          (TH.TRANSACTION_HEADER_ID = DH.TRANSACTION_HEADER_ID_IN OR
842           TH.TRANSACTION_HEADER_ID = DH.TRANSACTION_HEADER_ID_OUT)
843       ORDER BY
844           1,
845           DH.DISTRIBUTION_ID;
846 
847   BEGIN
848 
849      l_orig_track_member_flag := X_adj.track_member_flag;
850 
851      h_msg_name := 'FA_TFR_OPEN_DIST';
852 
853      open dist_cursor;
854 
855      loop
856 
857         h_msg_name := 'FA_TFR_FETCH_DIST';
858 
859         fetch dist_cursor into
860            h_term_dist_flag,
861            h_thid,
862            h_dist_id,
863            h_ccid,
864            h_units_assigned;
865 
866         exit when dist_cursor%NOTFOUND;
867 
868         h_msg_name := NULL;
869 
870         X_adj.code_combination_id := h_ccid;
871         X_adj.distribution_id := h_dist_id;
872 
873         -- call the insert into fa_adjusments funtion in SINGLE mode to insert the
874         -- individual fa_adjustments rows. other values already set in fautfr.
875 
876         X_adj.selection_mode := fa_adjust_type_pkg.FA_AJ_TRANSFER_SINGLE;
877         X_adj.gen_ccid_flag := TRUE;
878 
879         -- will process terminated rows first.
880         if (h_term_dist_flag = 1) then
881             -- if terminated distribution rows
882 
883             h_total_units_to_process := h_total_units_to_process + h_units_assigned;
884 
885             -- get the amounts to insert: cost, deprn_reserve, reval_reserve
886             -- by calling the query fin info funtion.
887 
888             h_dpr.asset_id := X_adj.asset_id;
889             h_dpr.period_ctr := 0;
890             h_dpr.book := X_adj.book_type_code;
891             h_dpr.dist_id := h_dist_id;
892             h_dpr.mrc_sob_type_code := X_mrc_sob_type_code;
893             h_dpr.set_of_books_id := X_set_of_books_id;
894 
895             fa_query_balances_pkg.query_balances_int(
896                                   X_DPR_ROW => h_dpr,
897                                   X_RUN_MODE => 'STANDARD',
898                                   X_DEBUG => FALSE,
899                                   X_SUCCESS => h_status,
900                                   X_CALLING_FN => 'FA_TRANSFER_XIT_PKG.fatsgl',
901                               X_TRANSACTION_HEADER_ID => -1, p_log_level_rec => p_log_level_rec);
902             if (NOT h_status) then
903                raise ERROR_FOUND;
904             end if;
905 
906             if (p_log_level_rec.statement_level) then
907                 fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
908                                  element => 'h_dpr.cost',
909                                  value   => h_dpr.cost, p_log_level_rec => p_log_level_rec);
910                 fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
911                                  element => 'h_dpr.deprn_reserve',
912                                  value   => h_dpr.deprn_rsv, p_log_level_rec => p_log_level_rec);
913                 fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
914                                  element => 'h_dpr.reval_reserve',
915                                  value   => h_dpr.reval_rsv, p_log_level_rec => p_log_level_rec);
916             end if;
917 
918             -- clear cost
919 
920             if (NOT setacct(X_adj_ptr => X_adj,
921                             X_acctcode => FA_TFR_COST,
922                             X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
923                             X_cat_id => X_cat_id,
924                             X_asset_type => X_asset_type,
925                             p_log_level_rec => p_log_level_rec)) then
926                 raise ERROR_FOUND;
927             end if;
928             X_adj.adjustment_amount := h_dpr.cost;
929             X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
930             X_adj.track_member_flag := null;
931             X_adj.set_of_books_id := X_set_of_books_id;
932 
933             if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
934                                        X_last_update_date,
935                                        X_last_updated_by,
936                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
937               if (p_log_level_rec.statement_level) then
938                   fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
939                                    element => 'X_acctcode',
940                                    value   => 'FA_TFR_COST', p_log_level_rec => p_log_level_rec);
941                   fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
942                                    element => 'adjustment_type',
943                                    value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
944                   fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
945                                    element => 'select_mode',
946                                    value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
947               end if;
948               raise ERROR_FOUND;
949             end if;
950 
951 
952             -- accumulate cost from terminated rows to redistribute to active rows.
953             h_total_cost_to_prorate := h_total_cost_to_prorate +
954                                        X_adj.amount_inserted;
955 
956 
957             X_adj.track_member_flag := l_orig_track_member_flag;
958 
959             -- clear deprn_reserve
960 
961             if (NOT setacct(X_adj_ptr => X_adj,
962                             X_acctcode => FA_TFR_DEPRN_RSV,
963                             X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
964                             X_cat_id => X_cat_id,
965                             X_asset_type => X_asset_type,
966                             p_log_level_rec => p_log_level_rec)) then
967                raise ERROR_FOUND;
968             end if;
969             X_adj.adjustment_amount := h_dpr.deprn_rsv;
970             X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
971             X_adj.set_of_books_id := X_set_of_books_id;
972 
973             if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
974                                        X_last_update_date,
975                                        X_last_updated_by,
976                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
977               if (p_log_level_rec.statement_level) then
978                   fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
979                                    element => 'X_acctcode',
980                                    value   => 'FA_TFR_DEPRN_RSV', p_log_level_rec => p_log_level_rec);
981                   fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
982                                    element => 'adjustment_type',
983                                    value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
984                   fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
985                                    element => 'select_mode',
986                                    value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
987               end if;
988               raise ERROR_FOUND;
989             end if;
990 -- accumulate deprn_reserve from terminated rows to redistribute to active rows
991             h_total_rsv_to_prorate := h_total_rsv_to_prorate +
992                                       X_adj.amount_inserted;
993 
994             -- clear bonus_deprn_reserve
995             -- bonus: move the bonus deprn reserve if bonus reserve exist
996          if nvl(h_dpr.bonus_deprn_rsv,0) <> 0 then
997                        if (NOT setacct(X_adj_ptr => X_adj,
998                             X_acctcode => FA_TFR_BONUS_DEPRN_RSV,
999                             X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
1000                             X_cat_id => X_cat_id,
1001                             X_asset_type => X_asset_type,
1002                             p_log_level_rec => p_log_level_rec)) then
1003                  raise ERROR_FOUND;
1004               end if;
1005               X_adj.adjustment_amount := h_dpr.bonus_deprn_rsv;
1006               X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1007               X_adj.set_of_books_id := X_set_of_books_id;
1008 
1009               if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1010                                        X_last_update_date,
1011                                        X_last_updated_by,
1012                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1013                 if (p_log_level_rec.statement_level) then
1014                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1015                                    element => 'X_acctcode',
1016                                    value   => 'FA_TFR_BONUS_DEPRN_RSV', p_log_level_rec => p_log_level_rec);
1017                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1018                                    element => 'adjustment_type',
1019                                    value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1020                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1021                                    element => 'select_mode',
1022                                    value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1023                 end if;
1024                 raise ERROR_FOUND;
1025               end if;
1026 
1027 
1028 -- accumulate bonus_deprn_reserve from terminated rows to redistribute to active rows
1029 -- bonus: calculation to be checked.
1030 -- bonus: same logic as for deprn reserve used.
1031               h_total_bonus_rsv_to_prorate := h_total_bonus_rsv_to_prorate +
1032                                       X_adj.amount_inserted;
1033             end if; -- end bonus rule condition
1034 
1035          if nvl(h_dpr.impairment_rsv,0) <> 0 then
1036                        if (NOT setacct(X_adj_ptr => X_adj,
1037                             X_acctcode => FA_TFR_IMPAIRMENT_RSV,
1038                             X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
1039                             X_cat_id => X_cat_id,
1040                             X_asset_type => X_asset_type,
1041                             p_log_level_rec => p_log_level_rec)) then
1042                  raise ERROR_FOUND;
1043               end if;
1044               X_adj.adjustment_amount := h_dpr.impairment_rsv;
1045               X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1046               X_adj.set_of_books_id := X_set_of_books_id;
1047 
1048               if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1049                                        X_last_update_date,
1050                                        X_last_updated_by,
1051                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1052                 if (p_log_level_rec.statement_level) then
1053                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1054                                    element => 'X_acctcode',
1055                                    value   => 'FA_TFR_IMPAIRMENT_RSV', p_log_level_rec => p_log_level_rec);
1056                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1057                                    element => 'adjustment_type',
1058                                    value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1059                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1060                                    element => 'select_mode',
1061                                    value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1062                 end if;
1063                 raise ERROR_FOUND;
1064               end if;
1065 
1066               h_total_impair_rsv_to_prorate :=
1067                   h_total_impair_rsv_to_prorate + X_adj.amount_inserted;
1068 
1069             end if;
1070 
1071          -- Bug 6666666
1072          -- Capital Adjustment
1073          if nvl(h_dpr.capital_adjustment,0) <> 0 then
1074                        if (NOT setacct(X_adj_ptr => X_adj,
1075                             X_acctcode => FA_CAPITAL_ADJUSTMENT,
1076                             X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
1077                             X_cat_id => X_cat_id,
1078                             X_asset_type => X_asset_type,
1079                             p_log_level_rec => p_log_level_rec)) then
1080                  raise ERROR_FOUND;
1081               end if;
1082               X_adj.adjustment_amount := h_dpr.capital_adjustment;
1083               X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1084               X_adj.set_of_books_id := X_set_of_books_id;
1085 
1086               if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1087                                        X_last_update_date,
1088                                        X_last_updated_by,
1089                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1090                 if (p_log_level_rec.statement_level) then
1091                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1092                                    element => 'X_acctcode',
1093                                    value   => 'FA_CAPITAL_ADJUSTMENT', p_log_level_rec => p_log_level_rec);
1094                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1095                                    element => 'adjustment_type',
1096                                    value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1097                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1098                                    element => 'select_mode',
1099                                    value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1100                 end if;
1101                 raise ERROR_FOUND;
1102               end if;
1103 
1104               h_total_capital_to_prorate :=
1105                   h_total_capital_to_prorate + X_adj.amount_inserted;
1106 
1107             end if;
1108 
1109          -- Bug 6666666
1110          -- General Fund
1111          if nvl(h_dpr.general_fund,0) <> 0 then
1112                        if (NOT setacct(X_adj_ptr => X_adj,
1113                             X_acctcode => FA_GENERAL_FUND,
1114                             X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
1115                             X_cat_id => X_cat_id,
1116                             X_asset_type => X_asset_type,
1117                             p_log_level_rec => p_log_level_rec)) then
1118                  raise ERROR_FOUND;
1119               end if;
1120               X_adj.adjustment_amount := h_dpr.general_fund;
1121               X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1122               X_adj.set_of_books_id := X_set_of_books_id;
1123 
1124               if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1125                                        X_last_update_date,
1126                                        X_last_updated_by,
1127                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1128                 if (p_log_level_rec.statement_level) then
1129                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1130                                    element => 'X_acctcode',
1131                                    value   => 'FA_GENERAL_FUND', p_log_level_rec => p_log_level_rec);
1132                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1133                                    element => 'adjustment_type',
1134                                    value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1135                     fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1136                                    element => 'select_mode',
1137                                    value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1138                 end if;
1139                 raise ERROR_FOUND;
1140               end if;
1141 
1142               h_total_general_to_prorate :=
1143                   h_total_general_to_prorate + X_adj.amount_inserted;
1144 
1145             end if;
1146 
1147 
1148             -- clear reval reserve
1149             if (nvl(h_dpr.reval_rsv,0) <> 0) then
1150                 X_adj.adjustment_amount := h_dpr.reval_rsv;
1151                 X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1152                 X_adj.set_of_books_id := X_set_of_books_id;
1153 
1154                 if (NOT setacct(X_adj_ptr => X_adj,
1155                                 X_acctcode => FA_TFR_REVAL_RSV,
1156                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
1157                                 X_cat_id => X_cat_id,
1158                                 X_asset_type => X_asset_type,
1159                                 p_log_level_rec => p_log_level_rec)) then
1160                     raise ERROR_FOUND;
1161                 end if;
1162 
1163                 if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1164                                        X_last_update_date,
1165                                        X_last_updated_by,
1166                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1167                   if (p_log_level_rec.statement_level) then
1168                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1169                                       element => 'X_acctcode',
1170                                       value   => 'FA_TFR_REVAL_RSV', p_log_level_rec => p_log_level_rec);
1171                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1172                                       element => 'adjustment_type',
1173                                       value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1174                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1175                                        element => 'select_mode',
1176                                        value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1177                   end if;
1178                   raise ERROR_FOUND;
1179                 end if;
1180 
1181 
1182                 -- accumulate reval reserve
1183                 h_total_rev_to_prorate := h_total_rev_to_prorate +
1184                                           X_adj.amount_inserted;
1185             end if;
1186 
1187         elsif (h_term_dist_flag = 2) then
1188             -- if active distribution rows
1189 
1190             h_num_units_processed := h_num_units_processed + h_units_assigned;
1191 
1192             if (h_num_units_processed < h_total_units_to_process) then
1193               -- if not the last distribution
1194 
1195 
1196               X_adj.track_member_flag := null;
1197 
1198               -- transfer cost
1199               if (NOT setacct(X_adj_ptr => X_adj,
1200                                 X_acctcode => FA_TFR_COST,
1201                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1202                                 X_cat_id => X_cat_id,
1203                                 X_asset_type => X_asset_type,
1204                                 p_log_level_rec => p_log_level_rec)) then
1205                     raise ERROR_FOUND;
1206                 end if;
1207 
1208                 X_adj.adjustment_amount := (h_total_cost_to_prorate *
1209                                             h_units_assigned) /
1210                                             h_total_units_to_process;
1211 
1212                 if (NOT fa_utils_pkg.faxrnd(X_amount => X_adj.adjustment_amount,
1213                                             X_book => X_adj.book_type_code,
1214                                             X_set_of_books_id => X_adj.set_of_books_id,
1215                                             p_log_level_rec => p_log_level_rec)) then
1216                     raise ERROR_FOUND;
1217                 end if;
1218 
1219                 h_cost_inserted_so_far := h_cost_inserted_so_far +
1220                                           X_adj.adjustment_amount;
1221 
1222                 X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1223                 X_adj.set_of_books_id := X_set_of_books_id;
1224 
1225                 if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1226                                        X_last_update_date,
1227                                        X_last_updated_by,
1228                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1229                   if (p_log_level_rec.statement_level) then
1230                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1231                                        element => 'X_acctcode',
1232                                        value   => 'FA_TFR_COST', p_log_level_rec => p_log_level_rec);
1233                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1234                                        element => 'adjustment_type',
1235                                        value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1236                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1237                                        element => 'select_mode',
1238                                        value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1239                   end if;
1240                   raise ERROR_FOUND;
1241                 end if;
1242 
1243 
1244                X_adj.track_member_flag := l_orig_track_member_flag;
1245 
1246                -- transfer deprn reserve
1247 
1248                if (NOT setacct(X_adj_ptr => X_adj,
1249                                 X_acctcode => FA_TFR_DEPRN_RSV,
1250                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1251                                 X_cat_id => X_cat_id,
1252                                 X_asset_type => X_asset_type,
1253                                 p_log_level_rec => p_log_level_rec)) then
1254                     raise ERROR_FOUND;
1255                 end if;
1256 
1257                 X_adj.adjustment_amount := (h_total_rsv_to_prorate *
1258                                             h_units_assigned) /
1259                                             h_total_units_to_process;
1260                 if (NOT fa_utils_pkg.faxrnd(X_amount=>X_adj.adjustment_amount,
1261                                             X_book  => X_adj.book_type_code,
1262                                             X_set_of_books_id => X_adj.set_of_books_id,
1263                                             p_log_level_rec => p_log_level_rec)) then
1264                     raise ERROR_FOUND;
1265                 end if;
1266                 h_rsv_inserted_so_far := h_rsv_inserted_so_far +
1267                                          X_adj.adjustment_amount;
1268 
1269                 X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1270                 X_adj.set_of_books_id := X_set_of_books_id;
1271 
1272                 if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1273                                        X_last_update_date,
1274                                        X_last_updated_by,
1275                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1276 
1277                    if (p_log_level_rec.statement_level) then
1278                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1279                                         element => 'X_acctcode',
1280                                         value   => 'FA_TFR_DEPRN_RSV', p_log_level_rec => p_log_level_rec);
1281                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1282                                         element => 'adjustment_type',
1283                                         value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1284                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1285                                         element => 'select_mode',
1286                                         value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1287                    end if;
1288                    raise ERROR_FOUND;
1289                 end if;
1290 
1291 
1292                -- transfer bonus deprn reserve
1293 --bonus: adjustment_amount must be checked.
1294 --bonus: h_total_bonus_rsv_to_prorate is created.
1295 -- bonus:same logic as for deprn_reserve used.
1296 -- bonus: move the bonus deprn reserve if bonus reserve exist
1297             if nvl(h_dpr.bonus_deprn_rsv,0) <> 0 then
1298                  if (NOT setacct(X_adj_ptr => X_adj,
1299                                 X_acctcode => FA_TFR_BONUS_DEPRN_RSV,
1300                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1301                                 X_cat_id => X_cat_id,
1302                                 X_asset_type => X_asset_type,
1303                                 p_log_level_rec => p_log_level_rec)) then
1304                       raise ERROR_FOUND;
1305                   end if;
1306 
1307                   X_adj.adjustment_amount := (h_total_bonus_rsv_to_prorate *
1308                                             h_units_assigned) /
1309                                             h_total_units_to_process;
1310                   if (NOT fa_utils_pkg.faxrnd(X_amount=>X_adj.adjustment_amount,
1311                                             X_book  => X_adj.book_type_code,
1312                                             X_set_of_books_id => X_adj.set_of_books_id,
1313                                             p_log_level_rec => p_log_level_rec)) then
1314                     raise ERROR_FOUND;
1315                   end if;
1316                   h_bonus_rsv_inserted_so_far := h_bonus_rsv_inserted_so_far +
1317                                          X_adj.adjustment_amount;
1318 
1319                   X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1320                   X_adj.set_of_books_id := X_set_of_books_id;
1321 
1322                   if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1323                                        X_last_update_date,
1324                                        X_last_updated_by,
1325                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1326 
1327                      if (p_log_level_rec.statement_level) then
1328                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1329                                         element => 'X_acctcode',
1330                                         value   => 'FA_TFR_BONUS_DEPRN_RSV', p_log_level_rec => p_log_level_rec);
1331                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1332                                         element => 'adjustment_type',
1333                                         value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1334                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1335                                         element => 'select_mode',
1336                                         value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1337                      end if;
1338                      raise ERROR_FOUND;
1339                   end if;
1340              end if;  -- end bonus rule condition
1341 
1342             if nvl(h_dpr.impairment_rsv,0) <> 0 then
1343                  if (NOT setacct(X_adj_ptr => X_adj,
1344                                 X_acctcode => FA_TFR_IMPAIRMENT_RSV,
1345                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE
1346 ,
1347                                 X_cat_id => X_cat_id,
1348                                 X_asset_type => X_asset_type,
1349                                 p_log_level_rec => p_log_level_rec)) then
1350                       raise ERROR_FOUND;
1351                   end if;
1352 
1353                   X_adj.adjustment_amount :=
1354                                    (h_total_impair_rsv_to_prorate *
1355                                             h_units_assigned) /
1356                                             h_total_units_to_process;
1357                   if (NOT fa_utils_pkg.faxrnd(X_amount=>X_adj.adjustment_amount,
1358                                        X_book  => X_adj.book_type_code,
1359                                        X_set_of_books_id => X_adj.set_of_books_id,
1360                                        p_log_level_rec => p_log_level_rec)) then
1361                     raise ERROR_FOUND;
1362                   end if;
1363                   h_impair_rsv_inserted_so_far :=
1364                     h_impair_rsv_inserted_so_far + X_adj.adjustment_amount;
1365 
1366                   X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1367                   X_adj.set_of_books_id := X_set_of_books_id;
1368 
1369                   if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1370                                        X_last_update_date,
1371                                        X_last_updated_by,
1372                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1373 
1374                      if (p_log_level_rec.statement_level) then
1375                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1376                                         element => 'X_acctcode',
1377                                         value   => 'FA_TFR_IMPAIRMENT_RSV', p_log_level_rec => p_log_level_rec);
1378                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1379                                         element => 'adjustment_type',
1380                                         value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1381                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1382                                         element => 'select_mode',
1383                                         value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1384                      end if;
1385                      raise ERROR_FOUND;
1386                   end if;
1387              end if;
1388 
1389             /* Bug 666666 : SORP Compliance */
1390             /* Capital Adjustment */
1391             if nvl(h_dpr.capital_adjustment,0) <> 0 then
1392                  if (NOT setacct(X_adj_ptr => X_adj,
1393                                 X_acctcode => FA_CAPITAL_ADJUSTMENT,
1394                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE
1395 ,
1396                                 X_cat_id => X_cat_id,
1397                                 X_asset_type => X_asset_type,
1398                                 p_log_level_rec => p_log_level_rec)) then
1399                       raise ERROR_FOUND;
1400                   end if;
1401 
1402                   X_adj.adjustment_amount :=
1403                                    (h_total_capital_to_prorate *
1404                                             h_units_assigned) /
1405                                             h_total_units_to_process;
1406                   if (NOT fa_utils_pkg.faxrnd(X_amount=>X_adj.adjustment_amount,
1407                                        X_book  => X_adj.book_type_code,
1408                                        X_set_of_books_id => X_adj.set_of_books_id,
1409                                        p_log_level_rec => p_log_level_rec)) then
1410                     raise ERROR_FOUND;
1411                   end if;
1412                   h_capital_inserted_so_far :=
1413                     h_capital_inserted_so_far + X_adj.adjustment_amount;
1414 
1415                   X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1416                   X_adj.set_of_books_id := X_set_of_books_id;
1417 
1418                   if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1419                                        X_last_update_date,
1420                                        X_last_updated_by,
1421                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1422 
1423                      if (p_log_level_rec.statement_level) then
1424                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1425                                         element => 'X_acctcode',
1426                                         value   => 'FA_CAPITAL_ADJUSTMENT', p_log_level_rec => p_log_level_rec);
1427                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1428                                         element => 'adjustment_type',
1429                                         value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1430                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1431                                         element => 'select_mode',
1432                                         value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1433                      end if;
1434                      raise ERROR_FOUND;
1435                   end if;
1436              end if;
1437 
1438 
1439             /* Bug 666666 : SORP Compliance */
1440             /* General Fund */
1441             if nvl(h_dpr.general_fund,0) <> 0 then
1442                  if (NOT setacct(X_adj_ptr => X_adj,
1443                                 X_acctcode => FA_GENERAL_FUND,
1444                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE
1445 ,
1446                                 X_cat_id => X_cat_id,
1447                                 X_asset_type => X_asset_type,
1448                                 p_log_level_rec => p_log_level_rec)) then
1449                       raise ERROR_FOUND;
1450                   end if;
1451 
1452                   X_adj.adjustment_amount :=
1453                                    (h_total_general_to_prorate *
1454                                             h_units_assigned) /
1455                                             h_total_units_to_process;
1456                   if (NOT fa_utils_pkg.faxrnd(X_amount=>X_adj.adjustment_amount,
1457                                        X_book  => X_adj.book_type_code,
1458                                        X_set_of_books_id => X_adj.set_of_books_id,
1459 
1460                                        p_log_level_rec => p_log_level_rec)) then
1461                     raise ERROR_FOUND;
1462                   end if;
1463                   h_general_inserted_so_far :=
1464                     h_general_inserted_so_far + X_adj.adjustment_amount;
1465 
1466                   X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1467                   X_adj.set_of_books_id := X_set_of_books_id;
1468 
1469                   if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1470                                        X_last_update_date,
1471                                        X_last_updated_by,
1472                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1473 
1474                      if (p_log_level_rec.statement_level) then
1475                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1476                                         element => 'X_acctcode',
1477                                         value   => 'FA_GENERAL_FUND', p_log_level_rec => p_log_level_rec);
1478                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1479                                         element => 'adjustment_type',
1480                                         value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1481                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1482                                         element => 'select_mode',
1483                                         value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1484                      end if;
1485                      raise ERROR_FOUND;
1486                   end if;
1487              end if;
1488 
1489                 -- transfer reval reserve
1490 
1491                 if (nvl(h_total_rev_to_prorate,0) <> 0) then
1492 
1493                     if (NOT setacct(X_adj_ptr => X_adj,
1494                                     X_acctcode => FA_TFR_REVAL_RSV,
1495                                     X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1496                                     X_cat_id => X_cat_id,
1497                                     X_asset_type => X_asset_type,
1498                                     p_log_level_rec => p_log_level_rec)) then
1499                         raise ERROR_FOUND;
1500                     end if;
1501                     X_adj.adjustment_amount := (h_total_rev_to_prorate *
1502                                                 h_units_assigned) /
1503                                                 h_total_units_to_process;
1504                     if (NOT fa_utils_pkg.faxrnd(X_amount => X_adj.adjustment_amount,
1505                                                 X_book   => X_adj.book_type_code,
1506                                                 X_set_of_books_id => X_adj.set_of_books_id,
1507 p_log_level_rec => p_log_level_rec)) then
1508                         raise ERROR_FOUND;
1509                     end if;
1510                     h_rev_inserted_so_far := h_rev_inserted_so_far +
1511                                              X_adj.adjustment_amount;
1512 
1513                     X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1514                     X_adj.set_of_books_id := X_set_of_books_id;
1515 
1516                     if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1517                                        X_last_update_date,
1518                                        X_last_updated_by,
1519                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1520                       if (p_log_level_rec.statement_level) then
1521                         fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1522                                          element => 'X_acctcode',
1523                                          value   => 'FA_TFR_REVAL_RSV', p_log_level_rec => p_log_level_rec);
1524                         fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1525                                          element => 'adjustment_type',
1526                                          value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1527                         fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1528                                          element => 'select_mode',
1529                                          value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1530                      end if;
1531                      raise ERROR_FOUND;
1532                     end if;
1533 
1534                 end if;
1535 
1536             elsif (h_num_units_processed = h_total_units_to_process) then
1537               -- if last active distribution row
1538 
1539               -- move cost
1540 
1541               X_adj.track_member_flag := null;
1542 
1543               if (NOT setacct(X_adj_ptr => X_adj,
1544                                 X_acctcode => FA_TFR_COST,
1545                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1546                                 X_cat_id => X_cat_id,
1547                                 X_asset_type => X_asset_type,
1548                                 p_log_level_rec => p_log_level_rec)) then
1549                     raise ERROR_FOUND;
1550                 end if;
1551 
1552                 -- assign remaining penny to last distribution
1553                 X_adj.adjustment_amount := h_total_cost_to_prorate -
1554                                            h_cost_inserted_so_far;
1555 
1556                 X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1557                 X_adj.set_of_books_id := X_set_of_books_id;
1558 
1559                 if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1560                                        X_last_update_date,
1561                                        X_last_updated_by,
1562                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1563                   if (p_log_level_rec.statement_level) then
1564                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1565                                        element => 'X_acctcode',
1566                                        value   => 'FA_TFR_COST', p_log_level_rec => p_log_level_rec);
1567                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1568                                        element => 'adjustment_type',
1569                                        value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1570                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1571                                        element => 'select_mode',
1572                                        value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1573                   end if;
1574                     raise ERROR_FOUND;
1575                 end if;
1576 
1577                 X_adj.flush_adj_flag := TRUE;  -- flush to db
1578                 X_adj.track_member_flag := l_orig_track_member_flag;
1579 
1580                 -- move deprn reserve
1581                 if (NOT setacct(X_adj_ptr => X_adj,
1582                                 X_acctcode => FA_TFR_DEPRN_RSV,
1583                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1584                                 X_cat_id => X_cat_id,
1585                                 X_asset_type => X_asset_type,
1586                                 p_log_level_rec => p_log_level_rec)) then
1587                     raise ERROR_FOUND;
1588                 end if;
1589                 X_adj.adjustment_amount := h_total_rsv_to_prorate -
1590                                            h_rsv_inserted_so_far;
1591 
1592                 X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1593                 X_adj.set_of_books_id := X_set_of_books_id;
1594 
1595                 if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1596                                        X_last_update_date,
1597                                        X_last_updated_by,
1598                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1599                   if (p_log_level_rec.statement_level) then
1600                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1601                                        element => 'X_acctcode',
1602                                        value   => 'FA_TFR_DEPRN_RSV', p_log_level_rec => p_log_level_rec);
1603                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1604                                        element => 'adjustment_type',
1605                                        value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1606                       fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1607                                        element => 'select_mode',
1608                                        value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1609                   end if;
1610                     raise ERROR_FOUND;
1611                 end if;
1612 
1613                 -- move bonus deprn reserve
1614 -- bonus: same logic as for deprn_reserve used.
1615 -- bonus: move the bonus deprn reserve if bonus reserve exist
1616             if nvl(h_dpr.bonus_deprn_rsv,0) <> 0 then
1617                   if (NOT setacct(X_adj_ptr => X_adj,
1618                                 X_acctcode => FA_TFR_BONUS_DEPRN_RSV,
1619                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1620                                 X_cat_id => X_cat_id,
1621                                 X_asset_type => X_asset_type,
1622                                 p_log_level_rec => p_log_level_rec)) then
1623                       raise ERROR_FOUND;
1624                   end if;
1625                   X_adj.adjustment_amount := h_total_bonus_rsv_to_prorate -
1626                                            h_bonus_rsv_inserted_so_far;
1627 
1628                   X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1629                   X_adj.set_of_books_id := X_set_of_books_id;
1630 
1631                   if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1632                                        X_last_update_date,
1633                                        X_last_updated_by,
1634                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1635                     if (p_log_level_rec.statement_level) then
1636                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1637                                        element => 'X_acctcode',
1638                                        value   => 'FA_TFR_BONUS_DEPRN_RSV', p_log_level_rec => p_log_level_rec);
1639                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1640                                        element => 'adjustment_type',
1641                                        value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1642                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1643                                        element => 'select_mode',
1644                                        value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1645                     end if;
1646                     raise ERROR_FOUND;
1647                end if;
1648           end if;
1649 
1650             if nvl(h_dpr.impairment_rsv,0) <> 0 then
1651                   if (NOT setacct(X_adj_ptr => X_adj,
1652                                 X_acctcode => FA_TFR_IMPAIRMENT_RSV,
1653                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1654                                 X_cat_id => X_cat_id,
1655                                 X_asset_type => X_asset_type,
1656                                 p_log_level_rec => p_log_level_rec)) then
1657                       raise ERROR_FOUND;
1658                   end if;
1659                   X_adj.adjustment_amount := h_total_impair_rsv_to_prorate -
1660                                              h_impair_rsv_inserted_so_far;
1661 
1662                   X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1663                   X_adj.set_of_books_id := X_set_of_books_id;
1664 
1665                   if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1666                                        X_last_update_date,
1667                                        X_last_updated_by,
1668                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1669                     if (p_log_level_rec.statement_level) then
1670                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1671                                        element => 'X_acctcode',
1672                                        value   => 'FA_TFR_IMPAIRMENT_RSV', p_log_level_rec => p_log_level_rec);
1673                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1674                                        element => 'adjustment_type',
1675                                        value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1676                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1677                                        element => 'select_mode',
1678                                        value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1679                     end if;
1680                     raise ERROR_FOUND;
1681                end if;
1682           end if;
1683 
1684           /* Bug 6666666 : SORP Complaince */
1685           /* Capital Adjustment */
1686             if nvl(h_dpr.capital_adjustment,0) <> 0 then
1687                   if (NOT setacct(X_adj_ptr => X_adj,
1688                                 X_acctcode => FA_CAPITAL_ADJUSTMENT,
1689                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1690                                 X_cat_id => X_cat_id,
1691                                 X_asset_type => X_asset_type,
1692                                 p_log_level_rec => p_log_level_rec)) then
1693                       raise ERROR_FOUND;
1694                   end if;
1695                   X_adj.adjustment_amount := h_total_capital_to_prorate -
1696                                              h_capital_inserted_so_far;
1697 
1698                   X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1699                   X_adj.set_of_books_id := X_set_of_books_id;
1700 
1701                   if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1702                                        X_last_update_date,
1703                                        X_last_updated_by,
1704                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1705                     if (p_log_level_rec.statement_level) then
1706                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1707                                        element => 'X_acctcode',
1708                                        value   => 'FA_CAPITAL_ADJUSTMENT', p_log_level_rec => p_log_level_rec);
1709                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1710                                        element => 'adjustment_type',
1711                                        value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1712                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1713                                        element => 'select_mode',
1714                                        value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1715                     end if;
1716                     raise ERROR_FOUND;
1717                end if;
1718           end if;
1719 
1720 
1721           /* Bug 6666666 : SORP Complaince */
1722           /* General Fund */
1723             if nvl(h_dpr.general_fund,0) <> 0 then
1724                   if (NOT setacct(X_adj_ptr => X_adj,
1725                                 X_acctcode => FA_GENERAL_FUND,
1726                                 X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1727                                 X_cat_id => X_cat_id,
1728                                 X_asset_type => X_asset_type,
1729                                 p_log_level_rec => p_log_level_rec)) then
1730                       raise ERROR_FOUND;
1731                   end if;
1732                   X_adj.adjustment_amount := h_total_general_to_prorate -
1733                                              h_general_inserted_so_far;
1734 
1735                   X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1736                   X_adj.set_of_books_id := X_set_of_books_id;
1737 
1738                   if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1739                                        X_last_update_date,
1740                                        X_last_updated_by,
1741                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1742                     if (p_log_level_rec.statement_level) then
1743                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1744                                        element => 'X_acctcode',
1745                                        value   => 'FA_GENERAL_FUND', p_log_level_rec => p_log_level_rec);
1746                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1747                                        element => 'adjustment_type',
1748                                        value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1749                        fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1750                                        element => 'select_mode',
1751                                        value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1752                     end if;
1753                     raise ERROR_FOUND;
1754                end if;
1755           end if;
1756 
1757                 -- move reval reserve
1758 
1759                 if (nvl(h_total_rev_to_prorate,0) <> 0) then
1760 
1761                     X_adj.flush_adj_flag := TRUE;  -- flush to db
1762 
1763                     if (NOT setacct(X_adj_ptr => X_adj,
1764                                     X_acctcode => FA_TFR_REVAL_RSV,
1765                                     X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1766                                     X_cat_id => X_cat_id,
1767                                     X_asset_type => X_asset_type,
1768                                     p_log_level_rec => p_log_level_rec)) then
1769                         raise ERROR_FOUND;
1770                     end if;
1771                     X_adj.adjustment_amount := h_total_rev_to_prorate -
1772                                                h_rev_inserted_so_far;
1773 
1774                     X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1775                     X_adj.set_of_books_id := X_set_of_books_id;
1776 
1777                     if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1778                                        X_last_update_date,
1779                                        X_last_updated_by,
1780                                        X_last_update_login, p_log_level_rec => p_log_level_rec)) then
1781                       if (p_log_level_rec.statement_level) then
1782                          fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1783                                           element => 'X_acctcode',
1784                                           value   => 'FA_TFR_REVAL_RSV', p_log_level_rec => p_log_level_rec);
1785                          fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1786                                           element => 'adjustment_type',
1787                                           value   => X_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
1788                          fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
1789                                           element => 'select_mode',
1790                                           value   => X_adj.selection_mode, p_log_level_rec => p_log_level_rec);
1791                       end if;
1792                       raise ERROR_FOUND;
1793                     end if;
1794                 end if;
1795             else
1796                 h_msg_name := 'FA_TFR_INTERCO_UNBAL';
1797                 raise ERROR_FOUND;
1798             end if;
1799         else
1800             h_msg_name := 'FA_TFR_INVALID_DIST_FLAG';
1801             raise ERROR_FOUND;
1802         end if;
1803 
1804     end loop;
1805 
1806     h_msg_name := 'FA_TFR_CLOSE_DIST_CURSOR';
1807     close dist_cursor;
1808 
1809     return TRUE;
1810 
1811   EXCEPTION
1812     when ERROR_FOUND then
1813         fa_srvr_msg.add_message(calling_fn => 'FA_TRANSFER_XIT_PKG.fatsgl',
1814                                 name => h_msg_name, p_log_level_rec => p_log_level_rec);
1815         close dist_cursor;
1816         return FALSE;
1817 
1818     when OTHERS then
1819         fa_srvr_msg.add_sql_error(calling_fn=> 'FA_TRANSFER_XIT_PKG.fatsgl', p_log_level_rec => p_log_level_rec);
1820         close dist_cursor;
1821         return FALSE;
1822 
1823   END fatsgl;
1824 
1825 
1826 
1827 FUNCTION faucper(X_asset_id NUMBER,
1828                  X_is_prior_period IN OUT NOCOPY BOOLEAN,
1829                  X_book VARCHAR2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)         RETURN BOOLEAN IS
1830 
1831         h_is_prior_period       NUMBER :=0;
1832         h_book_spec             NUMBER :=0;
1833     BEGIN
1834 
1835         IF (X_book IS NULL) THEN
1836             h_book_spec := 0 ;
1837         ELSE
1838             h_book_spec := 1;
1839         END IF;
1840 
1841 
1842         SELECT distinct 1
1843         INTO
1844             h_is_prior_period
1845         FROM
1846             FA_DEPRN_PERIODS DP_NOW,
1847             FA_DEPRN_PERIODS DP,
1848             FA_BOOK_CONTROLS BC,
1849             FA_TRANSACTION_HEADERS TH
1850         WHERE
1851             TH.ASSET_ID = X_asset_id AND
1852             TH.TRANSACTION_TYPE_CODE = DECODE(BC.BOOK_CLASS,'CORPORATE',
1853                                               'TRANSFER IN','ADDITION') AND
1854             TH.BOOK_TYPE_CODE = BC.BOOK_TYPE_CODE AND
1855             BC.BOOK_TYPE_CODE = DECODE(h_book_spec, 1,
1856                                        X_book,
1857                                        TH.BOOK_TYPE_CODE) AND
1858             TH.DATE_EFFECTIVE BETWEEN
1859                 DP.PERIOD_OPEN_DATE AND
1860                 NVL(DP.PERIOD_CLOSE_DATE, SYSDATE)
1861         AND
1862             DP.BOOK_TYPE_CODE = TH.BOOK_TYPE_CODE AND
1863             DP.PERIOD_COUNTER < DP_NOW.PERIOD_COUNTER AND
1864             DP_NOW.BOOK_TYPE_CODE = TH.BOOK_TYPE_CODE AND
1865             DP_NOW.PERIOD_CLOSE_DATE IS NULL;
1866 
1867         if h_is_prior_period = 1 then
1868            X_is_prior_period := TRUE ;
1869         else
1870            X_is_prior_period := FALSE;
1871         end if;
1872 
1873         RETURN (TRUE);
1874 
1875     EXCEPTION
1876         WHEN NO_DATA_FOUND THEN
1877             X_is_prior_period := FALSE;
1878             RETURN (TRUE);
1879 
1880         WHEN OTHERS THEN
1881             FA_SRVR_MSG.ADD_SQL_ERROR (
1882                         CALLING_FN => 'FA_TRANSFER_XIT_PKG.faucper', p_log_level_rec => p_log_level_rec);
1883 
1884             RETURN (FALSE);
1885 
1886     END faucper;
1887 
1888 
1889 /*===========================================================================
1890  |
1891  | NAME:         faumvexp() - FA Move Expense
1892  |
1893  | DESCRIPTION:  Move catchup expense like amort adj expense
1894  |               to a new distribution for reclass in period of addition...
1895  |
1896  |               Even though the main select in fautfr is called in period of addition
1897  |               it doesn't return any rows to process.
1898  |               Using this new function, we will be processing
1899  |               the movement of any catchup expenses
1900  |               from the old dist to the new dist.
1901  |
1902  |
1903  | RETURNS:    TRUE, on successful completion
1904  |             FALSE, on error condition
1905  |
1906  |   History
1907  |        16-Aug-2005           YYOON              Created
1908  |
1909 ============================================================================*/
1910 
1911 FUNCTION faumvexp(X_asset_id 		NUMBER
1912                  ,X_book_type_code 	VARCHAR2
1913                  ,X_th_id 		NUMBER
1914                  ,X_to_category_id	NUMBER
1915                  ,X_exp_moved 		OUT NOCOPY BOOLEAN
1916 		 ,X_last_update_date 	DATE
1917                  ,X_last_updated_by	NUMBER
1918                  ,X_last_update_login	NUMBER
1919                  , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
1920 
1921 
1922    l_set_of_books_id           number;
1923 
1924   CURSOR n_sob_id (p_psob_id IN NUMBER,
1925                    p_book_type_code IN VARCHAR2) is
1926   SELECT p_psob_id AS sob_id,
1927          1 AS index_id
1928     FROM dual
1929    UNION
1930   SELECT set_of_books_id AS sob_id,
1931          2 AS index_id
1932     FROM fa_mc_book_controls
1933    WHERE book_type_code = p_book_type_code
1934      AND primary_set_of_books_id = p_psob_id
1935      AND enabled_flag = 'Y'
1936    ORDER BY 2;
1937 
1938 
1939   CURSOR c_sum_exp (p_asset_id       number
1940                ,p_book_type_code varchar
1941                ,p_pc             number
1942                ,p_thid           number
1943                ) IS
1944     select adj.adjustment_type, max('DR'),
1945            sum(decode(adj.debit_credit_flag,'DR', adj.adjustment_amount,
1946                -adj.adjustment_amount)) adjustment_amount,
1947            sum(decode(adj.debit_credit_flag,'DR', adj.annualized_adjustment,
1948                -adj.annualized_adjustment)) annualized_adjustment,
1949            max(adj.track_member_flag) -- Bug7461343
1950     from fa_adjustments adj
1951         ,fa_additions_b ad
1952         ,fa_distribution_history fad
1953     where adj.asset_id = p_asset_id
1954       and adj.book_type_code = p_book_type_code
1955       and adj.source_type_code = 'DEPRECIATION'
1956       and adj.adjustment_type in ('EXPENSE', 'BONUS EXPENSE', 'IMPAIR EXPENSE')
1957       and adj.period_counter_created = p_pc
1958       and ad.asset_id = adj.asset_id
1959       and fad.asset_id = adj.asset_id
1960       and fad.book_type_code = adj.book_type_code
1961       and fad.distribution_id = adj.distribution_id
1962       and fad.transaction_header_id_out = p_thid
1963     group by adj.adjustment_type;
1964 
1965   CURSOR c_sum_mrc_exp (p_asset_id       number
1966                ,p_book_type_code varchar
1967                ,p_pc             number
1968                ,p_thid           number
1969                ) IS
1970     select adj.adjustment_type, max('DR'),
1971            sum(decode(adj.debit_credit_flag,'DR', adj.adjustment_amount,
1972                -adj.adjustment_amount)) adjustment_amount,
1973            sum(decode(adj.debit_credit_flag,'DR', adj.annualized_adjustment,
1974                -adj.annualized_adjustment)) annualized_adjustment,
1975            max(adj.track_member_flag) -- Bug7461343
1976     from fa_mc_adjustments adj
1977         ,fa_additions_b ad
1978         ,fa_distribution_history fad
1979     where adj.asset_id = p_asset_id
1980       and adj.book_type_code = p_book_type_code
1981       and adj.source_type_code = 'DEPRECIATION'
1982       and adj.adjustment_type in ('EXPENSE', 'BONUS EXPENSE', 'IMPAIR EXPENSE')
1983       and adj.period_counter_created = p_pc
1984       and adj.set_of_books_id = l_set_of_books_id
1985       and ad.asset_id = adj.asset_id
1986       and fad.asset_id = adj.asset_id
1987       and fad.book_type_code = adj.book_type_code
1988       and fad.distribution_id = adj.distribution_id
1989       and fad.transaction_header_id_out = p_thid
1990     group by adj.adjustment_type;
1991 
1992   CURSOR c_new_dists (p_thid number) IS
1993     select dh.distribution_id, dh.code_combination_id, dh.units_assigned
1994     from fa_distribution_history dh
1995     where dh.transaction_header_id_in = p_thid
1996       and dh.date_ineffective is null
1997     order by dh.distribution_id;
1998 
1999   CURSOR c_sum_dists (p_thid number) IS
2000     select sum(dh.units_assigned)
2001     from fa_distribution_history dh
2002     where dh.transaction_header_id_in = p_thid;
2003 
2004     ERROR_FOUND     EXCEPTION;
2005 
2006 
2007     l_adj                  	fa_adjust_type_pkg.fa_adj_row_struct;
2008 
2009     l_pc		  	number(15);
2010     l_primary_sob_id  		number(15);
2011     l_mrc_sob_type_code 	varchar2(1);
2012     l_deprn_exp_acct 		varchar2(25);
2013     l_bonus_deprn_exp_acct 	varchar2(25);
2014     l_impairment_exp_acct       varchar2(25);
2015 
2016     l_adj_type			varchar2(15);
2017     l_dr_cr_flag		varchar2(2);
2018     l_adj_amount		number;
2019     l_annualized_adj_amount	number;
2020     l_current_units		number;
2021     l_sum_units_assigned	number;
2022     l_track_member_flag         varchar2(1); -- Bug7461343
2023 
2024     l_new_dist_id		number(15);
2025     l_new_ccid			number(15);
2026     l_trx_header_id             NUMBER; -- Bug 10387406
2027 
2028     BEGIN
2029 
2030         -- h_book_class := fa_cache_pkg.fazcbc_record.book_class;
2031         l_primary_sob_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
2032 
2033         for c_rec in n_sob_id(l_primary_sob_id, X_book_type_code) loop
2034 
2035           if c_rec.index_id = 1 then
2036              l_mrc_sob_type_code := 'P';
2037           else
2038              l_mrc_sob_type_code := 'R';
2039           end if;
2040 
2041           l_set_of_books_id := c_rec.sob_id;
2042 
2043           begin
2044 
2045             if (l_mrc_sob_type_code='R') then
2046 
2047               select ds.period_counter + 1
2048               into l_pc
2049               from fa_mc_deprn_summary ds
2050               where ds.asset_id = X_asset_id
2051                 and ds.book_type_code = X_book_type_code
2052                 and ds.deprn_source_code = 'BOOKS'
2053                 and ds.set_of_books_id = l_set_of_books_id;
2054 
2055             else
2056 
2057               select ds.period_counter + 1
2058               into l_pc
2059               from fa_deprn_summary ds
2060               where ds.asset_id = X_asset_id
2061                 and ds.book_type_code = X_book_type_code
2062                 and ds.deprn_source_code = 'BOOKS';
2063 
2064             end if;
2065 
2066 
2067             select DEPRN_EXPENSE_ACCT,
2068                    BONUS_DEPRN_EXPENSE_ACCT,
2069                    IMPAIR_EXPENSE_ACCT
2070             into l_deprn_exp_acct,
2071                  l_bonus_deprn_exp_acct,
2072                  l_impairment_exp_acct
2073             from fa_category_books
2074             where book_type_code = X_book_type_code
2075               and category_id = X_to_category_id;
2076 
2077           exception
2078             when others then raise no_data_found;
2079           end;
2080 
2081 
2082 
2083           if (l_mrc_sob_type_code='R') then
2084              open c_sum_mrc_exp(X_asset_id
2085                        ,X_book_type_code
2086                        ,l_pc
2087                        ,X_th_id
2088                        );
2089           else
2090              open c_sum_exp(X_asset_id
2091                         ,X_book_type_code
2092                         ,l_pc
2093                         ,X_th_id
2094                         );
2095           end if;
2096 
2097           open c_sum_dists(X_th_id);
2098           fetch c_sum_dists into l_sum_units_assigned;
2099           if c_sum_dists%NOTFOUND then exit; end if;
2100           close c_sum_dists;
2101 
2102           l_adj.transaction_header_id   := X_th_id;
2103           l_adj.period_counter_created  := l_pc;
2104           l_adj.period_counter_adjusted := l_pc;
2105           l_adj.asset_id                := X_asset_id;
2106           l_adj.book_type_code          := X_book_type_code;
2107 
2108           loop
2109 
2110             if (l_mrc_sob_type_code='R') then
2111                fetch c_sum_mrc_exp into
2112                   l_adj_type,
2113                   l_dr_cr_flag,
2114                   l_adj_amount,
2115                   l_annualized_adj_amount,
2116                   l_track_member_flag; --Bug7461343
2117 
2118                if c_sum_mrc_exp%NOTFOUND then exit; end if;
2119             else
2120                fetch c_sum_exp into
2121                   l_adj_type,
2122                   l_dr_cr_flag,
2123                   l_adj_amount,
2124                   l_annualized_adj_amount,
2125                   l_track_member_flag; --Bug7461343
2126 
2127                if c_sum_exp%NOTFOUND then exit; end if;
2128             end if;
2129 
2130             l_adj.track_member_flag       := l_track_member_flag; -- Bug7461343
2131             l_adj.adjustment_type         := l_adj_type;
2132             l_adj.debit_credit_flag       := l_dr_cr_flag;
2133 
2134             open c_new_dists(X_th_id);
2135 
2136             loop
2137 
2138               l_adj.selection_mode := FA_ADJUST_TYPE_PKG.FA_AJ_TRANSFER_SINGLE;
2139               l_adj.selection_thid          := 0;
2140               l_adj.selection_retid         := 0;
2141               l_adj.asset_invoice_id        := 0;
2142               l_adj.source_type_code        := 'DEPRECIATION';
2143               l_adj.last_update_date        := SYSDATE;
2144               l_adj.flush_adj_flag          := TRUE;
2145               l_adj.leveling_flag           := TRUE;
2146               l_adj.gen_ccid_flag           := TRUE;
2147               l_adj.code_combination_id     := 0;
2148 
2149 
2150               fetch c_new_dists into l_new_dist_id
2151                                     ,l_new_ccid
2152                                     ,l_current_units;
2153               if c_new_dists%NOTFOUND then exit; end if;
2154 
2155               l_adj.distribution_id         := l_new_dist_id;
2156               l_adj.code_combination_id     := l_new_ccid;
2157               l_adj.current_units  	  := l_current_units;
2158 
2159 
2160               if (l_adj_type = 'BONUS EXPENSE') then
2161                 l_adj.account_type := 'BONUS_DEPRN_EXPENSE_ACCT';
2162                 l_adj.account      := l_bonus_deprn_exp_acct;
2163               elsif (l_adj_type = 'IMPAIR EXPENSE') then
2164                 l_adj.account_type := 'IMPAIR_EXPENSE_ACCT';
2165                 l_adj.account      := l_impairment_exp_acct;
2166               else
2167                 l_adj.account_type := 'DEPRN_EXPENSE_ACCT';
2168                 l_adj.account      := l_deprn_exp_acct;
2169               end if;
2170 
2171               l_adj.mrc_sob_type_code       := l_mrc_sob_type_code;
2172               l_adj.set_of_books_id := l_set_of_books_id;
2173 
2174               l_adj.adjustment_amount       := l_adj_amount * l_current_units /
2175                                                l_sum_units_assigned;
2176               l_adj.annualized_adjustment   := l_annualized_adj_amount * l_current_units /
2177                                                l_sum_units_assigned;
2178 
2179 	      select transaction_header_id -- Bug 10387406
2180               into l_trx_header_id
2181               from fa_transaction_headers
2182               where asset_id = X_asset_id
2183               and book_type_code = X_book_type_code
2184               and transaction_type_code = 'ADDITION';
2185 
2186 	      l_adj.transaction_header_id   := l_trx_header_id; -- Bug 10387406
2187 
2188               if (NOT fa_ins_adjust_pkg.faxinaj(l_adj,
2189                                                 X_last_update_date,
2190                                                 X_last_updated_by,
2191                                                 X_last_update_login, p_log_level_rec => p_log_level_rec)) then
2192                  if (p_log_level_rec.statement_level) then
2193                    fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.faumvexp',
2194                                     element => 'account',
2195                                     value   => l_adj.account, p_log_level_rec => p_log_level_rec);
2196                    fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.faumvexp',
2197                                     element => 'adjustment_type',
2198                                     value   => l_adj.adjustment_type, p_log_level_rec => p_log_level_rec);
2199                    fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.faumvexp',
2200                                     element => 'selection_mode',
2201                                     value   => l_adj.selection_mode, p_log_level_rec => p_log_level_rec);
2202                  end if;
2203                  raise ERROR_FOUND;
2204               end if;
2205             end loop;
2206             close c_new_dists;
2207          end loop;
2208          if (l_mrc_sob_type_code='R') then
2209             close c_sum_mrc_exp;
2210          else
2211             close c_sum_exp;
2212          end if;
2213 
2214          begin
2215 
2216            if (l_mrc_sob_type_code='R') then
2217 
2218               delete from fa_mc_adjustments adj
2219                where adj.asset_id = X_asset_id
2220                  and adj.book_type_code = X_book_type_code
2221                  and adj.period_counter_created = l_pc
2222                  and adj.set_of_books_id = l_set_of_books_id
2223                  and adj.source_type_code = 'DEPRECIATION'
2224                  and adj.adjustment_type in ('EXPENSE', 'BONUS EXPENSE', 'IMPAIR EXPENSE')
2225                  and adj.distribution_id in
2226                     (select dh.distribution_id
2227                        from fa_distribution_history dh
2228                       where dh.transaction_header_id_out = X_th_id)
2229                  and exists
2230                     (select adj1.transaction_header_id
2231                        from fa_mc_adjustments adj1
2232                       where adj1.asset_id = X_asset_id
2233                         and adj1.transaction_header_id = X_th_id
2234                         and adj1.book_type_code = X_book_type_code
2235                         and adj1.period_counter_created = l_pc
2236                         and adj1.set_of_books_id = l_set_of_books_id
2237                         and adj1.source_type_code = 'DEPRECIATION'
2238                         and adj1.adjustment_type in ('EXPENSE', 'BONUS EXPENSE', 'IMPAIR EXPENSE'));
2239 
2240            else
2241 
2242               delete from fa_adjustments adj
2243                where adj.asset_id = X_asset_id
2244                  and adj.book_type_code = X_book_type_code
2245                  and adj.period_counter_created = l_pc
2246                  and adj.source_type_code = 'DEPRECIATION'
2247                  and adj.adjustment_type in ('EXPENSE', 'BONUS EXPENSE', 'IMPAIR EXPENSE')
2248                  and adj.distribution_id in
2249                     (select dh.distribution_id
2250                        from fa_distribution_history dh
2251                       where dh.transaction_header_id_out = X_th_id)
2252                  and exists
2253                     (select adj1.transaction_header_id
2254                        from fa_adjustments adj1
2255                       where adj1.asset_id = X_asset_id
2256                         and adj1.transaction_header_id = X_th_id
2257                         and adj1.book_type_code = X_book_type_code
2258                         and adj1.period_counter_created = l_pc
2259                         and adj1.source_type_code = 'DEPRECIATION'
2260                         and adj1.adjustment_type in ('EXPENSE', 'BONUS EXPENSE', 'IMPAIR EXPENSE'));
2261            end if;
2262 
2263          exception
2264             when others then null;
2265 
2266          end;
2267 
2268        end loop; -- loop for sob_id
2269 
2270        X_exp_moved := TRUE;
2271        RETURN (TRUE);
2272 
2273     EXCEPTION
2274         WHEN NO_DATA_FOUND THEN
2275             X_exp_moved := FALSE;
2276 
2277             RETURN (TRUE);
2278 
2279         WHEN OTHERS THEN
2280             X_exp_moved := FALSE;
2281             FA_SRVR_MSG.ADD_SQL_ERROR (
2282                         CALLING_FN => 'FA_TRANSFER_XIT_PKG.faumvexp', p_log_level_rec => p_log_level_rec);
2283 
2284             RETURN (FALSE);
2285 
2286     END faumvexp;
2287 
2288 
2289 END FA_TRANSFER_XIT_PKG;