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.12.12010000.2 2008/07/31 07:05:59 sbhaskar ship $ */
3 
4 g_print_debug boolean := fa_cache_pkg.fa_print_debug;
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_INTERCO_AP  CONSTANT NUMBER := 4;
11 FA_TFR_INTERCO_AR  CONSTANT NUMBER := 5;
12 FA_TFR_BONUS_DEPRN_RSV CONSTANT NUMBER := 6;
13 
14 /* BUG# 1823498 MRC changes
15  * following cursor was borrowed from famcospb.pls and is
16  * used to pick up the primary and all associated reporting books
17  * for processing
18  *    -- bridgway 6/20/01
19  */
20 
21   CURSOR n_sob_id (p_psob_id IN NUMBER,
22                    p_book_type_code IN VARCHAR2) is
23   SELECT p_psob_id AS sob_id,
24          1 AS index_id
25     FROM dual
26    UNION
27   SELECT set_of_books_id AS sob_id,
28          2 AS index_id
29     FROM fa_mc_book_controls
30    WHERE book_type_code = p_book_type_code
31      AND primary_set_of_books_id = p_psob_id
32      AND enabled_flag = 'Y'
33    ORDER BY 2;
34 
35 
36 --
37 -- FUNCTION fautfr
38 --
39 
40 FUNCTION fautfr(X_thid               IN   NUMBER,
41                 X_asset_id           IN   NUMBER,
42                 X_book               IN   VARCHAR2,
43                 X_txn_type_code      IN   VARCHAR2,
44                 X_period_ctr         IN   NUMBER,
45                 X_curr_units         IN   NUMBER,
46                 X_today              IN   DATE,
47                 X_old_cat_id         IN   NUMBER,
48                 X_new_cat_id         IN   NUMBER,
49                 X_asset_type         IN   VARCHAR2,
50                 X_last_update_date   IN DATE default sysdate,
51                 X_last_updated_by    IN NUMBER default -1,
52                 X_last_update_login  IN NUMBER default -1,
53                 X_init_message_flag  IN VARCHAR2 DEFAULT 'NO'
54  ,p_log_level_rec           IN     FA_API_TYPES.log_level_rec_type default null)
55          return BOOLEAN is
56 
57 
58    h_amount_cleard NUMBER := 0;
59    h_book          fa_book_controls.book_type_code%TYPE;
60    h_book_class    fa_book_controls.book_class%TYPE;
61    h_dist_book     fa_book_controls.distribution_source_book%TYPE;
62 
63    h_msg_name      VARCHAR2(30) := NULL;
64    h_cur_per_ctr   NUMBER;
65    h_period_ctr    NUMBER;
66 
67    h_adj           fa_adjust_type_pkg.fa_adj_row_struct;
68    h_dpr           fa_std_types.fa_deprn_row_struct;
69 
70    h_proceed       BOOLEAN;
71    ERROR_FOUND     EXCEPTION;
72    h_count         NUMBER;
73    h_status        BOOLEAN;
74 
75    -- BUG# 1823498 mrc changes
76    h_primary_sob_id    number;
77    h_profile_sob_id    number;
78    h_currency_context  varchar2(64);
79    h_mrc_sob_type_code varchar2(1);
80 
81    --bug2353154
82    l_account_flex              NUMBER;
83    l_bal_segnum                NUMBER;
84    l_old_dist_id               NUMBER;
85    l_old_ccid                  NUMBER;
86    l_total_amt_to_prorate      NUMBER;
87    l_total_units_to_process    NUMBER;
88    l_amount_inserted_tr_out    NUMBER;
89    l_old_bal_seg               VARCHAR2(25);
90 
91    h_tracking_method     VARCHAR2(30);
92    h_member_rollup_flag  VARCHAR2(1);
93 
94 
95    -- SLA: book cursor is obsolete
96 
97    BEGIN
98 
99      if (X_init_message_flag = 'YES') then
100          FA_SRVR_MSG.INIT_SERVER_MESSAGE;   /* init server msg stack */
101          fa_debug_pkg.initialize;           /* init debug msg stack */
102      end if;
103 
104      /* BUG# 1823498
105       * get the current sob profile option value for later usage
106       * as it needs to reset upon completion or failure, then get
107       * the set_of_books_id for the corp book being processed
108       */
109 
110      fnd_profile.get('GL_SET_OF_BKS_ID', h_profile_sob_id);
111      h_currency_context := SUBSTRB(USERENV('CLIENT_INFO'),45,10);
112 
113      if (X_txn_type_code NOT in ('TRANSFER','UNIT ADJUSTMENT','RECLASS',
114                                  'TRANSFER OUT')) then
115         return (TRUE);
116      end if;
117 
118      if (g_print_debug) then
119         fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fautfr',
120                          element => 'txn_type_code',
121                          value   => X_txn_type_code
122                          ,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      h_adj.asset_invoice_id := 0;
142      h_adj.leveling_flag := TRUE;
143 
144      if (X_txn_type_code = 'RECLASS') then
145         h_adj.source_type_code := 'RECLASS';
146      else
147         h_adj.source_type_code := 'TRANSFER';
148      end if;
149 
150      h_adj.code_combination_id   := 0;
151      h_adj.transaction_header_id := X_thid;
152      h_adj.asset_id              := X_asset_id;
153      h_adj.adjustment_amount     := 0;
154      h_adj.distribution_id       := 0;
155      h_adj.annualized_adjustment := 0;
156      h_adj.last_update_date      := X_today;
157      h_adj.current_units         := X_curr_units;
158      h_adj.selection_thid        := X_thid;
159      h_adj.flush_adj_flag        := FALSE;
160      h_adj.gen_ccid_flag         := TRUE;
161      h_adj.amount_inserted       := 0;
162 
163      h_msg_name                  := 'FA_TFR_BOOK_INFO';
164 
165      -- SLA: no more books loop, distirbution api will handle the main loop
166 
167      h_proceed := TRUE;
168      h_book    := X_book;
169 
170      if (g_print_debug) then
171         fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fautfr',
172                          element => 'book',
173                          value   => h_book
174                          ,p_log_level_rec => p_log_level_rec);
175      end if;
176 
177      if (NOT fa_cache_pkg.fazcbc(X_book => h_book
178   ,p_log_level_rec => p_log_level_rec)) then
179         raise ERROR_FOUND;
180      end if;
181 
182      h_book_class := fa_cache_pkg.fazcbc_record.book_class;
183      -- BUG# 1945407 need to get primary sob for each book in the loop
184      h_primary_sob_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
185 
186      -- for partial unit retirement, insert adjustments rows only for
187      -- TAX book, since gain/loss will take care of the CORP book.
188 
189      if (X_txn_type_code = 'TRANSFER OUT') then
190         h_dist_book := fa_cache_pkg.fazcbc_record.distribution_source_book;
191         if (h_dist_book = h_book) then
192            h_proceed := FALSE;
193         end if;
194      end if;
195 
196 
197      -- if tax book, get taxbook current period_counter
198 
199      -- BUG# 3341189
200      -- removing validation on period_counter, etc as it is already
201      -- imbedded in the main cursor
202 
203      -- SLA: always used passed period counter
204      h_cur_per_ctr := X_period_ctr;
205 
206      if (h_proceed) then
207 
208         h_adj.book_type_code          := h_book;
209         h_adj.period_counter_created  := h_cur_per_ctr;
210         h_adj.period_counter_adjusted := h_cur_per_ctr;
211 
212         -- BUG# 6951826
213         if (X_Asset_Type     <> 'GROUP' and
214             (h_tracking_method = 'ALLOCATE' OR
215              (h_tracking_method = 'CALCULATE' AND
216               h_member_rollup_flag = 'N'))) then
217            h_adj.track_member_flag := 'Y';
218         else
219            h_adj.track_member_flag := null;
220         end if;
221 
222         /* BUG# 1823498 adding for MRC enhancements
223          * loop through each SOB (primary and reporting) and
224          * and process each directly to avoid rounding errors
225          *    -- bridgway 06/20/01
226          */
227 
228         for c_rec in n_sob_id(h_primary_sob_id, h_book) loop
229 
230            if c_rec.index_id = 1 then
231               h_mrc_sob_type_code := 'P';
232            else
233               h_mrc_sob_type_code := 'R';
234            end if;
235 
236            -- set the gl_sob profile to this reporting book
237            fnd_profile.put('GL_SET_OF_BKS_ID', c_rec.sob_id);
238            fnd_client_info.set_currency_context (c_rec.sob_id);
239 
240            h_dpr.asset_id          := X_asset_id;
241            h_dpr.book              := h_book;
242            h_dpr.period_ctr        := 0;
243            h_dpr.dist_id           := 0;
244            h_dpr.mrc_sob_type_code := h_mrc_sob_type_code;
245 
246            -- query for the deprn reserve, reval reserve, before we clear out
247            -- the accounts, for a consistent read value
248            -- bonus: bonus_deprn_rsv,bonus_ytd_deprn,bonus_exp added
249            --        to query balances
250 
251            fa_query_balances_pkg.query_balances_int(
252                               X_DPR_ROW => h_dpr,
253                               X_RUN_MODE => 'STANDARD',
254                               X_DEBUG => FALSE,
255                               X_SUCCESS => h_status,
256                               X_CALLING_FN => 'FA_TRANSFER_XIT_PKG.fautfr',
257                               X_TRANSACTION_HEADER_ID => -1
258                               ,p_log_level_rec => p_log_level_rec);
259            if (NOT h_status) then
260               raise ERROR_FOUND;
261            end if;
262 
263            if (X_txn_type_code = 'TRANSFER') then
264 
265               if (NOT fatsgl(X_adj => h_adj,
266                              X_cat_id            => X_new_cat_id,
267                              X_asset_type        => X_asset_type,
268                              X_last_update_date  => X_last_update_date,
269                              X_last_updated_by   => X_last_updated_by,
270                              X_last_update_login => X_last_update_login,
271                              X_mrc_sob_type_code => h_mrc_sob_type_code
272                              ,p_log_level_rec => p_log_level_rec)) then
273                  raise ERROR_FOUND;
274 
275               end if;
276 
277            -- bonus: implies reclass
278 
279            else
280 
281               h_adj.track_member_flag := null;
282 
283               -- move the cost
284               if (NOT fadotfr(X_adj_ptr           => h_adj,
285                               X_acctcode          => FA_TFR_COST,
286                               X_old_cat_id        => X_old_cat_id,
287                               X_new_cat_id        => X_new_cat_id,
288                               X_asset_type        => X_asset_type,
289                               X_last_update_date  => X_last_update_date,
290                               X_last_updated_by   => X_last_updated_by,
291                               X_last_update_login => X_last_update_login,
292                               X_mrc_sob_type_code => h_mrc_sob_type_code
293                               ,p_log_level_rec => p_log_level_rec)) then
294                   raise ERROR_FOUND;
295               end if;
296 
297               -- BUG# 6951826
298               if (X_Asset_Type     <> 'GROUP' and
299                   (h_tracking_method = 'ALLOCATE' OR
300                    (h_tracking_method = 'CALCULATE' AND
301                     h_member_rollup_flag = 'N'))) then
302                  h_adj.track_member_flag := 'Y';
303               else
304                  h_adj.track_member_flag := null;
305               end if;
306 
307               -- move the deprn reserve
308               h_adj.flush_adj_flag := TRUE;
309               if (NOT fadotfr(X_adj_ptr           => h_adj,
310                               X_acctcode          => FA_TFR_DEPRN_RSV,
311                               X_old_cat_id        => X_old_cat_id,
312                               X_new_cat_id        => X_new_cat_id,
313                               X_asset_type        => X_asset_type,
314                               X_last_update_date  => X_last_update_date,
315                               X_last_updated_by   => X_last_updated_by,
316                               X_last_update_login => X_last_update_login,
317                               X_mrc_sob_type_code => h_mrc_sob_type_code
318                               ,p_log_level_rec => p_log_level_rec)) then
319                   raise ERROR_FOUND;
320               end if;
321 
322 
323               -- bonus: move the bonus deprn reserve if bonus reserve exist
324               if nvl(h_dpr.bonus_deprn_rsv,0) <> 0 then
325                  h_adj.flush_adj_flag := TRUE;
326                  if (NOT fadotfr(X_adj_ptr           => h_adj,
327                                  X_acctcode          => FA_TFR_BONUS_DEPRN_RSV,
328                                  X_old_cat_id        => X_old_cat_id,
329                                  X_new_cat_id        => X_new_cat_id,
330                                  X_asset_type        => X_asset_type,
331                                  X_last_update_date  => X_last_update_date,
332                                  X_last_updated_by   => X_last_updated_by,
333                                  X_last_update_login => X_last_update_login,
334                                  X_mrc_sob_type_code => h_mrc_sob_type_code
335                                  ,p_log_level_rec => p_log_level_rec)) then
336                     raise ERROR_FOUND;
337                  end if;
338               end if;
339 
340               -- move the reval_reserve, set flush = TRUE to insert all the
341               -- FA_ADJUSTMENTS rows to the database
342 
343               if (nvl(h_dpr.reval_rsv,0) <> 0) then
344                  h_adj.flush_adj_flag := TRUE;
345                  if (NOT fadotfr(X_adj_ptr           => h_adj,
346                                  X_acctcode          => FA_TFR_REVAL_RSV,
347                                  X_old_cat_id        => X_old_cat_id,
348                                  X_new_cat_id        => X_new_cat_id,
349                                  X_asset_type        => X_asset_type,
350                                  X_last_update_date  => X_last_update_date,
351                                  X_last_updated_by   => X_last_updated_by,
352                                  X_last_update_login => X_last_update_login,
353                                  X_mrc_sob_type_code => h_mrc_sob_type_code
354                                  ,p_log_level_rec => p_log_level_rec)) then
355                      raise ERROR_FOUND;
356                  end if;
357 
358               end if; -- reval rsv
359 
360            end if;  -- if X_txn_type_code
361 
362         end loop;  -- end mrc
363 
364      end if;   --  if h_proceed
365 
366      -- BUG# 2376085
367      -- reset GL sob id to original value before moving to next book
368      fnd_profile.put('GL_SET_OF_BKS_ID', h_profile_sob_id);
369      fnd_client_info.set_currency_context (h_currency_context);
370 
371      -- SLA: end loop / cursor
372 
373      -- reset GL sob id to original value
374      fnd_profile.put('GL_SET_OF_BKS_ID', h_profile_sob_id);
375      fnd_client_info.set_currency_context (h_currency_context);
376 
377      return (TRUE);
378 
379 
380   EXCEPTION
381      when ERROR_FOUND then
382         -- reset GL sob id to original value
383         fnd_profile.put('GL_SET_OF_BKS_ID', h_profile_sob_id);
384         fnd_client_info.set_currency_context (h_currency_context);
385 
386         fa_srvr_msg.add_message(calling_fn => 'FA_TRANSFER_XIT_PKG.fautfr',
387                                 name => h_msg_name
388                                 ,p_log_level_rec => p_log_level_rec);
389 
390         return(FALSE);
391 
392 
393      when others then
394         -- reset GL sob id to original value
395         fnd_profile.put('GL_SET_OF_BKS_ID', h_profile_sob_id);
396         fnd_client_info.set_currency_context (h_currency_context);
397 
398         fa_srvr_msg.add_sql_error(calling_fn => 'FA_TRANSFER_XIT_PKG.fautfr'
399                 ,p_log_level_rec => p_log_level_rec);
400 
401         return(FALSE);
402 
403   END;
404 
405 --
406 -- FUNCTION fadotfr
407 --
408 
409 FUNCTION fadotfr(X_adj_ptr           IN OUT NOCOPY  fa_adjust_type_pkg.fa_adj_row_struct,
410                  X_acctcode          IN NUMBER,
411                  X_old_cat_id        IN NUMBER,
412                  X_new_cat_id        IN NUMBER,
413                  X_asset_type        IN VARCHAR2,
414                  X_last_update_date  IN DATE default sysdate,
415                  X_last_updated_by   IN NUMBER default -1,
416                  X_last_update_login IN NUMBER default -1,
417                  X_mrc_sob_type_code IN VARCHAR2
418  ,p_log_level_rec           IN     FA_API_TYPES.log_level_rec_type default null)
419          return BOOLEAN is
420 
421    h_amount_cleared NUMBER;
422    h_msg_name       VARCHAR2(30);
423    h_token1         VARCHAR2(30);
424    h_token2         VARCHAR2(30);
425    h_value1         NUMBER;
426    h_value2         NUMBER;
427    ERROR_FOUND      EXCEPTION;
428 
429 
430 BEGIN
431 
432    h_msg_name := NULL;
433 
434 
435    -- clear out the account for all distributions
436    if (NOT setacct(X_adj_ptr     => X_adj_ptr,
437                    X_acctcode    => X_acctcode,
438                    X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
439                    X_cat_id      => X_old_cat_id,
440                    X_asset_type  => X_asset_type
441                    ,p_log_level_rec => p_log_level_rec)) then
442        raise ERROR_FOUND;
443    end if;
444 
445    X_adj_ptr.selection_retid   := X_old_cat_id;
446    X_adj_ptr.selection_mode    := fa_adjust_type_pkg.FA_AJ_CLEAR;
447    X_adj_ptr.mrc_sob_type_code := X_mrc_sob_type_code;
448    X_adj_ptr.source_dest_code  := 'SOURCE';
449 
450    if (NOT fa_ins_adjust_pkg.faxinaj(X_adj_ptr,
451                                      X_last_update_date,
452                                      X_last_updated_by,
453                                      X_last_update_login
454                                      ,p_log_level_rec => p_log_level_rec)) then
455       if (g_print_debug) then
456          fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fadotfr',
457                           element => 'X_acctcode',
458                           value   => X_acctcode
459                           ,p_log_level_rec => p_log_level_rec);
460          fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fadotfr',
461                           element => 'adjustment_type',
462                           value   => X_adj_ptr.adjustment_type
463                           ,p_log_level_rec => p_log_level_rec);
464          fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fadotfr',
465                           element => 'select_mode',
466                           value   => X_adj_ptr.selection_mode
467                           ,p_log_level_rec => p_log_level_rec);
468       end if;
469       raise ERROR_FOUND;
470    end if;
471 
472    -- save amount cleared
473 
474    h_amount_cleared := X_adj_ptr.amount_inserted;
475 
476    -- set adjustment amount to be amount cleared
477    X_adj_ptr.adjustment_amount := h_amount_cleared;
478    X_adj_ptr.amount_inserted   := 0;
479 
480    -- transfer cleared amount to new account
481    if (NOT setacct(X_adj_ptr     => X_adj_ptr,
482                    X_acctcode    => X_acctcode,
483                    X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
484                    X_cat_id      => X_new_cat_id,
485                    X_asset_type  => X_asset_type
486 ,p_log_level_rec => p_log_level_rec)) then
487       raise ERROR_FOUND;
488    end if;
489 
490    X_adj_ptr.selection_retid   := X_new_cat_id;
491    X_adj_ptr.selection_mode    := fa_adjust_type_pkg.FA_AJ_ACTIVE;
492    X_adj_ptr.mrc_sob_type_code := X_mrc_sob_type_code;
493    X_adj_ptr.source_dest_code  := 'DEST';
494 
495    if (NOT fa_ins_adjust_pkg.faxinaj(X_adj_ptr,
496                                      X_last_update_date,
497                                      X_last_updated_by,
498                                      X_last_update_login
499                                      ,p_log_level_rec => p_log_level_rec)) then
500       if (g_print_debug) then
501          fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fadotfr',
502                           element => 'X_acctcode',
503                           value   => X_acctcode
504                           ,p_log_level_rec => p_log_level_rec);
505          fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fadotfr',
506                           element => 'adjustment_type',
507                           value   => X_adj_ptr.adjustment_type
508                           ,p_log_level_rec => p_log_level_rec);
509          fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fadotfr',
510                           element => 'select_mode',
511                           value   => X_adj_ptr.selection_mode
512                           ,p_log_level_rec => p_log_level_rec);
513       end if;
514       raise ERROR_FOUND;
515    end if;
516 
517    -- check to make sure amount cleared is same as amount transferred.
518    if (h_amount_cleared <> X_adj_ptr.amount_inserted) then
519        h_msg_name := 'FA_TFR_UNBAL_AMTS';
520        h_token1   := 'CLEARED';
521        h_token2   := 'INSERTED';
522        h_value1   := h_amount_cleared;
523        h_value2   := X_adj_ptr.amount_inserted;
524        raise ERROR_FOUND;
525    end if;
526 
527    /* clear the amount inserted */
528 
529    X_adj_ptr.amount_inserted := 0;
530 
531    return TRUE;
532 
533 
534 EXCEPTION
535    when ERROR_FOUND then
536       fa_srvr_msg.add_message(calling_fn => 'FA_TRANSFER_XIT_PKG.fadotfr',
537                               name       => h_msg_name,
538                               token1     => h_token1, value1=>h_value1,
539                               token2     => h_token2, value2=>h_value2
540  ,p_log_level_rec => p_log_level_rec);
541       return FALSE;
542 
543    when OTHERS then
544       fa_srvr_msg.add_sql_error(calling_fn => 'FA_TRANSFER_XIT_PKG.fadotfr'
545             ,p_log_level_rec => p_log_level_rec);
546       return FALSE;
547 
548 END fadotfr;
549 
550 
551 --
552 -- FUNCTION setacct
553 --
554 
555 FUNCTION setacct(X_adj_ptr     IN OUT NOCOPY fa_adjust_type_pkg.fa_adj_row_struct,
556                  X_acctcode    IN NUMBER,
557                  X_select_mode IN NUMBER,
558                  X_cat_id      IN NUMBER,
559                  X_asset_type  IN VARCHAR2
560  ,p_log_level_rec           IN     FA_API_TYPES.log_level_rec_type default null)
561         return BOOLEAN is
562 
563    h_book          X_adj_ptr.book_type_code%type;
564    h_category_id   NUMBER;
565 
566 BEGIN
567 
568    if (g_print_debug) then
569       fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.setacct',
570                        element => 'X_acctcode',
571                        value   => X_acctcode
572                        ,p_log_level_rec => p_log_level_rec);
573       fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.setacct',
574                        element => 'adjustment_type',
575                        value   => X_adj_ptr.adjustment_type
576                        ,p_log_level_rec => p_log_level_rec);
577       fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.setacct',
578                        element => 'X_select_mode',
579                        value   => X_select_mode
580                        ,p_log_level_rec => p_log_level_rec);
581    end if;
582 
583    h_book := X_adj_ptr.book_type_code;
584    h_category_id := X_cat_id;
585 
586    if (X_acctcode = FA_TFR_COST) then
587 
588       X_adj_ptr.adjustment_type := 'COST';
589 
590       if (X_asset_type = 'CIP') then
591           X_adj_ptr.account_type := 'CIP_COST_ACCT';
592 
593          select cip_cost_acct
594            into X_adj_ptr.account
595            from fa_category_books
596           where book_type_code = h_book
597             and category_id = h_category_id;
598 
599       elsif (X_asset_type = 'CAPITALIZED' OR
600              X_asset_type = 'EXPENSED' OR
601              X_asset_type = 'GROUP' ) then
602 
603          X_adj_ptr.account_type := 'ASSET_COST_ACCT';
604 
605          select asset_cost_acct
606            into X_adj_ptr.account
607            from fa_category_books
608           where book_type_code = h_book
609             and category_id = h_category_id;
610 
611       end if;
612 
613       if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
614          X_adj_ptr.debit_credit_flag := 'CR';
615       else
616          X_adj_ptr.debit_credit_flag := 'DR';
617       end if;
618 
619    elsif (X_acctcode = FA_TFR_DEPRN_RSV) then
620 
621       X_adj_ptr.adjustment_type := 'RESERVE';
622       X_adj_ptr.account_type := 'DEPRN_RESERVE_ACCT';
623 
624 
625       select deprn_reserve_acct
626         into X_adj_ptr.account
627         from fa_category_books
628        where book_type_code = h_book
629          and category_id = h_category_id;
630 
631       if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
632          X_adj_ptr.debit_credit_flag := 'DR';
633       else
634          X_adj_ptr.debit_credit_flag := 'CR';
635       end if;
636 
637    -- bonus
638    elsif (X_acctcode = FA_TFR_BONUS_DEPRN_RSV) then
639 
640       X_adj_ptr.adjustment_type := 'BONUS RESERVE';
641       X_adj_ptr.account_type    := 'BONUS_DEPRN_RESERVE_ACCT';
642 
643 
644       select bonus_deprn_reserve_acct
645         into X_adj_ptr.account
646         from fa_category_books
647        where book_type_code = h_book
648          and category_id = h_category_id;
649 
650       if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
651          X_adj_ptr.debit_credit_flag := 'DR';
652       else
653          X_adj_ptr.debit_credit_flag := 'CR';
654       end if;
655 
656 
657    elsif (X_acctcode = FA_TFR_REVAL_RSV) then
658 
659       X_adj_ptr.adjustment_type := 'REVAL RESERVE';
660       X_adj_ptr.account_type    := 'REVAL_RESERVE_ACCT';
661 
662       select reval_reserve_acct
663         into X_adj_ptr.account
664         from fa_category_books
665        where book_type_code = h_book
666          and category_id = h_category_id;
667 
668       if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
669          X_adj_ptr.debit_credit_flag := 'DR';
670       else
671          X_adj_ptr.debit_credit_flag := 'CR';
672       end if;
673 
674 
675    elsif (X_acctcode = FA_TFR_INTERCO_AR) then
676 
677       X_adj_ptr.adjustment_type := 'INTERCO AR';
678       X_adj_ptr.account_type    := 'INTERCO_AR_ACCT';
679 
680       select ar_intercompany_acct
681         into X_adj_ptr.account
682         from fa_book_controls
683        where book_type_code = h_book;
684 
685       if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
686          X_adj_ptr.debit_credit_flag := 'DR';
687       else
688          X_adj_ptr.debit_credit_flag := 'CR';
689       end if;
690 
691 
692    elsif (X_acctcode = FA_TFR_INTERCO_AP) then
693 
694       X_adj_ptr.adjustment_type := 'INTERCO AP';
695       X_adj_ptr.account_type    := 'INTERCO_AP_ACCT';
696 
697       select ap_intercompany_acct
698         into X_adj_ptr.account
699         from fa_book_controls
700        where book_type_code = h_book;
701 
702       if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
703          X_adj_ptr.debit_credit_flag := 'CR';
704       else
705          X_adj_ptr.debit_credit_flag := 'DR';
706       end if;
707 
708    end if;
709 
710    if (X_select_mode = fa_adjust_type_pkg.FA_AJ_CLEAR) then
711       X_adj_ptr.source_dest_code := 'SOURCE';
712    else
713       X_adj_ptr.source_dest_code := 'DEST';
714    end if;
715 
716    return TRUE;
717 
718 EXCEPTION
719    when OTHERS then
720       fa_srvr_msg.add_sql_error(calling_fn=>'FA_TRANSFER_XIT_PKG.setacct'
721             ,p_log_level_rec => p_log_level_rec);
722       return FALSE;
723 
724 END setacct;
725 
726 
727 --
728 -- FUNCTION fatsgl
729 --
730 
731 FUNCTION fatsgl(X_adj               IN OUT NOCOPY fa_adjust_type_pkg.fa_adj_row_struct,
732                 X_cat_id            IN  NUMBER,
733                 X_asset_type        IN VARCHAR2,
734                 X_last_update_date  IN DATE default sysdate,
735                 X_last_updated_by   IN NUMBER default -1,
736                 X_last_update_login IN NUMBER default -1,
737                 X_mrc_sob_type_code IN VARCHAR2
738  ,p_log_level_rec           IN     FA_API_TYPES.log_level_rec_type default null)
739          return BOOLEAN is
740 
741   h_dpr        FA_STD_TYPES.FA_DEPRN_ROW_STRUCT;
742   h_msg_name   VARCHAR2(30);
743   h_status     BOOLEAN;
744 
745   h_total_cost_to_prorate        NUMBER := 0;
746   h_total_rsv_to_prorate         NUMBER := 0;
747   h_total_rev_to_prorate         NUMBER := 0;
748   h_total_bonus_rsv_to_prorate   NUMBER := 0;
749 
750   h_total_units_to_process    NUMBER := 0;
751   h_num_units_processed       NUMBER := 0;
752 
753   h_cost_inserted_so_far      NUMBER := 0;
754   h_rsv_inserted_so_far       NUMBER := 0;
755   h_rev_inserted_so_far       NUMBER := 0;
756   h_bonus_rsv_inserted_so_far NUMBER := 0;
757 
758   h_term_dist_flag NUMBER;
759   h_thid           NUMBER;
760   h_dist_id        NUMBER;
761   h_ccid           NUMBER;
762   h_units_assigned NUMBER;
763 
764   l_orig_track_member_flag varchar2(1);
765 
766   ERROR_FOUND      EXCEPTION;
767 
768   -- find all distributions affected by the transfer
769   CURSOR dist_cursor is
770 
771       SELECT
772           DECODE(TH.TRANSACTION_HEADER_ID,
773                  DH.TRANSACTION_HEADER_ID_OUT, 1,
774                  DH.TRANSACTION_HEADER_ID_IN, 2,
775                  3),
776           TH.TRANSACTION_HEADER_ID,
777           DH.DISTRIBUTION_ID,
778           DH.CODE_COMBINATION_ID,
779           DH.UNITS_ASSIGNED
780       FROM
781           FA_DISTRIBUTION_HISTORY DH,
782           FA_TRANSACTION_HEADERS TH
783       WHERE
784           TH.TRANSACTION_HEADER_ID = X_adj.selection_thid AND
785          (TH.TRANSACTION_HEADER_ID = DH.TRANSACTION_HEADER_ID_IN OR
786           TH.TRANSACTION_HEADER_ID = DH.TRANSACTION_HEADER_ID_OUT)
787       ORDER BY
788           1,
789           DH.DISTRIBUTION_ID;
790 
791 BEGIN
792 
793    l_orig_track_member_flag := X_adj.track_member_flag;
794 
795    h_msg_name := 'FA_TFR_OPEN_DIST';
796 
797    open dist_cursor;
798 
799    loop
800 
801       h_msg_name := 'FA_TFR_FETCH_DIST';
802 
803       fetch dist_cursor into
804             h_term_dist_flag,
805             h_thid,
806             h_dist_id,
807             h_ccid,
808             h_units_assigned;
809 
810       exit when dist_cursor%NOTFOUND;
811 
812       h_msg_name := NULL;
813 
814       X_adj.code_combination_id := h_ccid;
815       X_adj.distribution_id     := h_dist_id;
816 
817       -- call the insert into fa_adjusments funtion in SINGLE mode to insert the
818       -- individual fa_adjustments rows. other values already set in fautfr.
819 
820       X_adj.selection_mode := fa_adjust_type_pkg.FA_AJ_TRANSFER_SINGLE;
821       X_adj.gen_ccid_flag  := TRUE;
822 
823       -- will process terminated rows first.
824       if (h_term_dist_flag = 1) then
825          -- if terminated distribution rows
826 
827          h_total_units_to_process := h_total_units_to_process + h_units_assigned;
828 
829          -- get the amounts to insert: cost, deprn_reserve, reval_reserve
830          -- by calling the query fin info funtion.
831 
832          h_dpr.asset_id          := X_adj.asset_id;
833          h_dpr.period_ctr        := 0;
834          h_dpr.book              := X_adj.book_type_code;
835          h_dpr.dist_id           := h_dist_id;
836          h_dpr.mrc_sob_type_code := X_mrc_sob_type_code;
837 
838          fa_query_balances_pkg.query_balances_int(
839                                   X_DPR_ROW               => h_dpr,
840                                   X_RUN_MODE              => 'STANDARD',
841                                   X_DEBUG                 => FALSE,
842                                   X_SUCCESS               => h_status,
843                                   X_CALLING_FN            => 'FA_TRANSFER_XIT_PKG.fatsgl',
844                                   X_TRANSACTION_HEADER_ID => -1
845                                   ,p_log_level_rec => p_log_level_rec);
846 
847          if (NOT h_status) then
848             raise ERROR_FOUND;
849          end if;
850 
851          if (g_print_debug) then
852             fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
853                              element => 'h_dpr.cost',
854                              value   => h_dpr.cost
855                              ,p_log_level_rec => p_log_level_rec);
856             fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
857                              element => 'h_dpr.deprn_reserve',
858                              value   => h_dpr.deprn_rsv
859                              ,p_log_level_rec => p_log_level_rec);
860             fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
861                              element => 'h_dpr.reval_reserve',
862                              value   => h_dpr.reval_rsv
863                              ,p_log_level_rec => p_log_level_rec);
864          end if;
865 
866          -- clear cost
867 
868          if (NOT setacct(X_adj_ptr => X_adj,
869                          X_acctcode => FA_TFR_COST,
870                          X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
871                          X_cat_id => X_cat_id,
872                          X_asset_type => X_asset_type
873                          ,p_log_level_rec => p_log_level_rec)) then
874             raise ERROR_FOUND;
875          end if;
876 
877          X_adj.adjustment_amount := h_dpr.cost;
878          X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
879          X_adj.track_member_flag := null;
880 
881          if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
882                                            X_last_update_date,
883                                            X_last_updated_by,
884                                            X_last_update_login
885                                            ,p_log_level_rec => p_log_level_rec)) then
886             if (g_print_debug) then
887                fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
888                                 element => 'X_acctcode',
889                                 value   => 'FA_TFR_COST'
890                                 ,p_log_level_rec => p_log_level_rec);
891                fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
892                                 element => 'adjustment_type',
893                                 value   => X_adj.adjustment_type
894                                 ,p_log_level_rec => p_log_level_rec);
895                fa_debug_pkg.add(fname => 'FA_TRANSFER_XIT_PKG.fatsgl',
896                                 element => 'select_mode',
897                                 value   => X_adj.selection_mode
898                                 ,p_log_level_rec => p_log_level_rec);
899             end if;
900             raise ERROR_FOUND;
901          end if;
902 
903 
904          -- accumulate cost from terminated rows to redistribute to active rows.
905          h_total_cost_to_prorate := h_total_cost_to_prorate + X_adj.amount_inserted;
906 
907          X_adj.track_member_flag := l_orig_track_member_flag;
908 
909          -- clear deprn_reserve
910 
911          if (NOT setacct(X_adj_ptr     => X_adj,
912                          X_acctcode    => FA_TFR_DEPRN_RSV,
913                          X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
914                          X_cat_id      => X_cat_id,
915                          X_asset_type  => X_asset_type
916                          ,p_log_level_rec => p_log_level_rec)) then
917             raise ERROR_FOUND;
918          end if;
919 
920          X_adj.adjustment_amount := h_dpr.deprn_rsv;
921          X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
922 
923          if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
924                                            X_last_update_date,
925                                            X_last_updated_by,
926                                            X_last_update_login
927                                            ,p_log_level_rec => p_log_level_rec)) then
928             if (g_print_debug) then
929                fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
930                                 element => 'X_acctcode',
931                                 value   => 'FA_TFR_DEPRN_RSV'
932                                 ,p_log_level_rec => p_log_level_rec);
933                fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
934                                 element => 'adjustment_type',
935                                 value   => X_adj.adjustment_type
936                                 ,p_log_level_rec => p_log_level_rec);
937                fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
938                                 element => 'select_mode',
939                                 value   => X_adj.selection_mode
940                                 ,p_log_level_rec => p_log_level_rec);
941             end if;
942             raise ERROR_FOUND;
943          end if;
944 
945          -- accumulate deprn_reserve from terminated rows to redistribute to active rows
946          h_total_rsv_to_prorate := h_total_rsv_to_prorate + X_adj.amount_inserted;
947 
948          -- clear bonus_deprn_reserve
949          -- bonus: move the bonus deprn reserve if bonus reserve exist
950          if nvl(h_dpr.bonus_deprn_rsv,0) <> 0 then
951             if (NOT setacct(X_adj_ptr     => X_adj,
952                             X_acctcode    => FA_TFR_BONUS_DEPRN_RSV,
953                             X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
954                             X_cat_id      => X_cat_id,
955                             X_asset_type  => X_asset_type
956                             ,p_log_level_rec => p_log_level_rec)) then
957                raise ERROR_FOUND;
958             end if;
959             X_adj.adjustment_amount := h_dpr.bonus_deprn_rsv;
960             X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
961 
962             if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
963                                               X_last_update_date,
964                                               X_last_updated_by,
965                                               X_last_update_login
966                                               ,p_log_level_rec => p_log_level_rec)) then
967                if (g_print_debug) then
968                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
969                                    element => 'X_acctcode',
970                                    value   => 'FA_TFR_BONUS_DEPRN_RSV'
971                                    ,p_log_level_rec => p_log_level_rec);
972                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
973                                    element => 'adjustment_type',
974                                    value   => X_adj.adjustment_type
975                                    ,p_log_level_rec => p_log_level_rec);
976                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
977                                    element => 'select_mode',
978                                    value   => X_adj.selection_mode
979                                    ,p_log_level_rec => p_log_level_rec);
980                end if;
981                raise ERROR_FOUND;
982             end if;
983 
984             -- accumulate bonus_deprn_reserve from terminated rows to redistribute to active rows
985             -- bonus: calculation to be checked.
986             -- bonus: same logic as for deprn reserve used.
987             h_total_bonus_rsv_to_prorate := h_total_bonus_rsv_to_prorate +
988                                             X_adj.amount_inserted;
989          end if; -- end bonus rule condition
990 
991          -- clear reval reserve
992          if (nvl(h_dpr.reval_rsv,0) <> 0) then
993             X_adj.adjustment_amount := h_dpr.reval_rsv;
994             X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
995 
996             if (NOT setacct(X_adj_ptr     => X_adj,
997                             X_acctcode    => FA_TFR_REVAL_RSV,
998                             X_select_mode => fa_adjust_type_pkg.FA_AJ_CLEAR,
999                             X_cat_id      => X_cat_id,
1000                             X_asset_type  => X_asset_type
1001                             ,p_log_level_rec => p_log_level_rec)) then
1002                raise ERROR_FOUND;
1003             end if;
1004 
1005             if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1006                                               X_last_update_date,
1007                                               X_last_updated_by,
1008                                               X_last_update_login
1009                                               ,p_log_level_rec => p_log_level_rec)) then
1010                if (g_print_debug) then
1011                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1012                                    element => 'X_acctcode',
1013                                    value   => 'FA_TFR_REVAL_RSV'
1014                                    ,p_log_level_rec => p_log_level_rec);
1015                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1016                                    element => 'adjustment_type',
1017                                    value   => X_adj.adjustment_type
1018                                    ,p_log_level_rec => p_log_level_rec);
1019                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1020                                    element => 'select_mode',
1021                                    value   => X_adj.selection_mode
1022                                    ,p_log_level_rec => p_log_level_rec);
1023                end if;
1024                raise ERROR_FOUND;
1025             end if;
1026 
1027             -- accumulate reval reserve
1028             h_total_rev_to_prorate := h_total_rev_to_prorate +
1029                                       X_adj.amount_inserted;
1030          end if;
1031 
1032       elsif (h_term_dist_flag = 2) then
1033          -- if active distribution rows
1034 
1035          X_adj.track_member_flag := null;
1036 
1037          h_num_units_processed := h_num_units_processed + h_units_assigned;
1038 
1039          if (h_num_units_processed < h_total_units_to_process) then
1040             -- if not the last distribution
1041 
1042             -- transfer cost
1043             if (NOT setacct(X_adj_ptr     => X_adj,
1044                             X_acctcode    => FA_TFR_COST,
1045                             X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1046                             X_cat_id      => X_cat_id,
1047                             X_asset_type  => X_asset_type
1048                             ,p_log_level_rec => p_log_level_rec)) then
1049                raise ERROR_FOUND;
1050             end if;
1051 
1052             X_adj.adjustment_amount := (h_total_cost_to_prorate *
1053                                         h_units_assigned) /
1054                                         h_total_units_to_process;
1055 
1056             if (NOT fa_utils_pkg.faxrnd(X_amount => X_adj.adjustment_amount,
1057                                         X_book   => X_adj.book_type_code
1058                                         ,p_log_level_rec => p_log_level_rec)) then
1059                raise ERROR_FOUND;
1060             end if;
1061 
1062             h_cost_inserted_so_far := h_cost_inserted_so_far +
1063                                       X_adj.adjustment_amount;
1064 
1065             X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1066 
1067             if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1068                                               X_last_update_date,
1069                                               X_last_updated_by,
1070                                               X_last_update_login
1071                                               ,p_log_level_rec => p_log_level_rec)) then
1072                if (g_print_debug) then
1073                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1074                                    element => 'X_acctcode',
1075                                    value   => 'FA_TFR_COST'
1076                                    ,p_log_level_rec => p_log_level_rec);
1077                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1078                                    element => 'adjustment_type',
1079                                    value   => X_adj.adjustment_type
1080                                    ,p_log_level_rec => p_log_level_rec);
1081                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1082                                    element => 'select_mode',
1083                                    value   => X_adj.selection_mode
1084                                    ,p_log_level_rec => p_log_level_rec);
1085                end if;
1086                raise ERROR_FOUND;
1087             end if;
1088 
1089             X_adj.track_member_flag := l_orig_track_member_flag;
1090 
1091             -- transfer deprn reserve
1092 
1093             if (NOT setacct(X_adj_ptr     => X_adj,
1094                             X_acctcode    => FA_TFR_DEPRN_RSV,
1095                             X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1096                             X_cat_id      => X_cat_id,
1097                             X_asset_type  => X_asset_type
1098                             ,p_log_level_rec => p_log_level_rec)) then
1099                raise ERROR_FOUND;
1100             end if;
1101 
1102             X_adj.adjustment_amount := (h_total_rsv_to_prorate *
1103                                         h_units_assigned) /
1104                                         h_total_units_to_process;
1105 
1106             if (NOT fa_utils_pkg.faxrnd(X_amount => X_adj.adjustment_amount,
1107                                         X_book   => X_adj.book_type_code
1108                                         ,p_log_level_rec => p_log_level_rec)) then
1109                raise ERROR_FOUND;
1110             end if;
1111 
1112             h_rsv_inserted_so_far := h_rsv_inserted_so_far +
1113                                      X_adj.adjustment_amount;
1114 
1115             X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1116 
1117             if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1118                                               X_last_update_date,
1119                                               X_last_updated_by,
1120                                               X_last_update_login
1121                                               ,p_log_level_rec => p_log_level_rec)) then
1122 
1123                if (g_print_debug) then
1124                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1125                                    element => 'X_acctcode',
1126                                    value   => 'FA_TFR_DEPRN_RSV'
1127                                    ,p_log_level_rec => p_log_level_rec);
1128                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1129                                    element => 'adjustment_type',
1130                                    value   => X_adj.adjustment_type
1131                                    ,p_log_level_rec => p_log_level_rec);
1132                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1133                                    element => 'select_mode',
1134                                    value   => X_adj.selection_mode
1135                                    ,p_log_level_rec => p_log_level_rec);
1136                end if;
1137                raise ERROR_FOUND;
1138             end if;
1139 
1140             -- transfer bonus deprn reserve
1141             -- bonus: adjustment_amount must be checked.
1142             -- bonus: h_total_bonus_rsv_to_prorate is created.
1143             -- bonus:same logic as for deprn_reserve used.
1144             -- bonus: move the bonus deprn reserve if bonus reserve exist
1145 
1146             if nvl(h_dpr.bonus_deprn_rsv,0) <> 0 then
1147                if (NOT setacct(X_adj_ptr     => X_adj,
1148                                X_acctcode    => FA_TFR_BONUS_DEPRN_RSV,
1149                                X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1150                                X_cat_id      => X_cat_id,
1151                                X_asset_type  => X_asset_type
1152                                ,p_log_level_rec => p_log_level_rec)) then
1153                       raise ERROR_FOUND;
1154                end if;
1155 
1156                X_adj.adjustment_amount := (h_total_bonus_rsv_to_prorate *
1157                                            h_units_assigned) /
1158                                            h_total_units_to_process;
1159 
1160                if (NOT fa_utils_pkg.faxrnd(X_amount => X_adj.adjustment_amount,
1161                                            X_book   => X_adj.book_type_code
1162                                            ,p_log_level_rec => p_log_level_rec)) then
1163                   raise ERROR_FOUND;
1164                end if;
1165 
1166                h_bonus_rsv_inserted_so_far := h_bonus_rsv_inserted_so_far +
1167                                               X_adj.adjustment_amount;
1168 
1169                X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1170 
1171                if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1172                                                  X_last_update_date,
1173                                                  X_last_updated_by,
1174                                                  X_last_update_login
1175                                                  ,p_log_level_rec => p_log_level_rec)) then
1176 
1177                   if (g_print_debug) then
1178                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1179                                       element => 'X_acctcode',
1180                                       value   => 'FA_TFR_BONUS_DEPRN_RSV'
1181                                       ,p_log_level_rec => p_log_level_rec);
1182                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1183                                       element => 'adjustment_type',
1184                                       value   => X_adj.adjustment_type
1185                                       ,p_log_level_rec => p_log_level_rec);
1186                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1187                                       element => 'select_mode',
1188                                       value   => X_adj.selection_mode
1189                                       ,p_log_level_rec => p_log_level_rec);
1190                   end if;
1191                   raise ERROR_FOUND;
1192                end if;
1193             end if;  -- end bonus rule condition
1194 
1195             -- transfer reval reserve
1196             if (nvl(h_total_rev_to_prorate,0) <> 0) then
1197 
1198                if (NOT setacct(X_adj_ptr     => X_adj,
1199                                X_acctcode    => FA_TFR_REVAL_RSV,
1200                                X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1201                                X_cat_id      => X_cat_id,
1202                                X_asset_type  => X_asset_type
1203                                ,p_log_level_rec => p_log_level_rec)) then
1204                   raise ERROR_FOUND;
1205                end if;
1206 
1207                X_adj.adjustment_amount := (h_total_rev_to_prorate *
1208                                            h_units_assigned) /
1209                                            h_total_units_to_process;
1210 
1211                if (NOT fa_utils_pkg.faxrnd(X_amount => X_adj.adjustment_amount,
1212                                            X_book   => X_adj.book_type_code
1213                                            ,p_log_level_rec => p_log_level_rec)) then
1214                   raise ERROR_FOUND;
1215                end if;
1216 
1217                h_rev_inserted_so_far := h_rev_inserted_so_far +
1218                                         X_adj.adjustment_amount;
1219 
1220                X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1221 
1222                if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1223                                                  X_last_update_date,
1224                                                  X_last_updated_by,
1225                                                  X_last_update_login
1226                                                  ,p_log_level_rec => p_log_level_rec)) then
1227                   if (g_print_debug) then
1228                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1229                                       element => 'X_acctcode',
1230                                       value   => 'FA_TFR_REVAL_RSV'
1231                                       ,p_log_level_rec => p_log_level_rec);
1232                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1233                                       element => 'adjustment_type',
1234                                       value   => X_adj.adjustment_type
1235                                       ,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
1239                                       ,p_log_level_rec => p_log_level_rec);
1240                   end if;
1241                   raise ERROR_FOUND;
1242                end if;
1243             end if;
1244 
1245          elsif (h_num_units_processed = h_total_units_to_process) then
1246             -- if last active distribution row
1247 
1248             -- move cost
1249 
1250              X_adj.track_member_flag := null;
1251 
1252             if (NOT setacct(X_adj_ptr     => X_adj,
1253                             X_acctcode    => FA_TFR_COST,
1254                             X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1255                             X_cat_id      => X_cat_id,
1256                             X_asset_type  => X_asset_type
1257                             ,p_log_level_rec => p_log_level_rec)) then
1258                raise ERROR_FOUND;
1259             end if;
1260 
1261             -- assign remaining penny to last distribution
1262             X_adj.adjustment_amount := h_total_cost_to_prorate -
1263                                        h_cost_inserted_so_far;
1264 
1265             X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1266 
1267             if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1268                                               X_last_update_date,
1269                                               X_last_updated_by,
1270                                               X_last_update_login
1271                                               ,p_log_level_rec => p_log_level_rec)) then
1272                if (g_print_debug) then
1273                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1274                                    element => 'X_acctcode',
1275                                    value   => 'FA_TFR_COST'
1276                                    ,p_log_level_rec => p_log_level_rec);
1277                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1278                                    element => 'adjustment_type',
1279                                    value   => X_adj.adjustment_type
1280                                    ,p_log_level_rec => p_log_level_rec);
1281                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1282                                    element => 'select_mode',
1283                                    value   => X_adj.selection_mode
1284                                    ,p_log_level_rec => p_log_level_rec);
1285                end if;
1286                raise ERROR_FOUND;
1287             end if;
1288 
1289             X_adj.flush_adj_flag := TRUE;  -- flush to db
1290             X_adj.track_member_flag := l_orig_track_member_flag;
1291 
1292             -- move deprn reserve
1293             if (NOT setacct(X_adj_ptr     => X_adj,
1294                             X_acctcode    => FA_TFR_DEPRN_RSV,
1295                             X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1296                             X_cat_id      => X_cat_id,
1297                             X_asset_type  => X_asset_type
1298                             ,p_log_level_rec => p_log_level_rec)) then
1299                raise ERROR_FOUND;
1300             end if;
1301 
1302             X_adj.adjustment_amount := h_total_rsv_to_prorate -
1303                                        h_rsv_inserted_so_far;
1304 
1305             X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1306 
1307             if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1308                                               X_last_update_date,
1309                                               X_last_updated_by,
1310                                               X_last_update_login
1311                                               ,p_log_level_rec => p_log_level_rec)) then
1312                if (g_print_debug) then
1313                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1314                                    element => 'X_acctcode',
1315                                    value   => 'FA_TFR_DEPRN_RSV'
1316                                    ,p_log_level_rec => p_log_level_rec);
1317                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1318                                    element => 'adjustment_type',
1319                                    value   => X_adj.adjustment_type
1320                                    ,p_log_level_rec => p_log_level_rec);
1321                   fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1322                                    element => 'select_mode',
1323                                    value   => X_adj.selection_mode
1324                                    ,p_log_level_rec => p_log_level_rec);
1325                end if;
1326                raise ERROR_FOUND;
1327             end if;
1328 
1329             -- move bonus deprn reserve
1330             -- bonus: same logic as for deprn_reserve used.
1331             -- bonus: move the bonus deprn reserve if bonus reserve exist
1332             if nvl(h_dpr.bonus_deprn_rsv,0) <> 0 then
1333                if (NOT setacct(X_adj_ptr     => X_adj,
1334                                X_acctcode    => FA_TFR_BONUS_DEPRN_RSV,
1335                                X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1336                                X_cat_id      => X_cat_id,
1337                                X_asset_type  => X_asset_type
1338                                ,p_log_level_rec => p_log_level_rec)) then
1339                   raise ERROR_FOUND;
1340                end if;
1341 
1342                X_adj.adjustment_amount := h_total_bonus_rsv_to_prorate -
1343                                           h_bonus_rsv_inserted_so_far;
1344 
1345                X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1346 
1347                if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1348                                                  X_last_update_date,
1349                                                  X_last_updated_by,
1350                                                  X_last_update_login
1351                                                  ,p_log_level_rec => p_log_level_rec)) then
1352                   if (g_print_debug) then
1353                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1354                                       element => 'X_acctcode',
1355                                       value   => 'FA_TFR_BONUS_DEPRN_RSV'
1356                                       ,p_log_level_rec => p_log_level_rec);
1357                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1358                                       element => 'adjustment_type',
1359                                       value   => X_adj.adjustment_type
1360                                       ,p_log_level_rec => p_log_level_rec);
1361                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1362                                       element => 'select_mode',
1363                                       value   => X_adj.selection_mode
1364                                       ,p_log_level_rec => p_log_level_rec);
1365                   end if;
1366                   raise ERROR_FOUND;
1367                end if;
1368             end if;
1369 
1370             -- move reval reserve
1371 
1372             if (nvl(h_total_rev_to_prorate,0) <> 0) then
1373                X_adj.flush_adj_flag := TRUE;  -- flush to db
1374 
1375                if (NOT setacct(X_adj_ptr     => X_adj,
1376                                X_acctcode    => FA_TFR_REVAL_RSV,
1377                                X_select_mode => fa_adjust_type_pkg.FA_AJ_ACTIVE,
1378                                X_cat_id      => X_cat_id,
1379                                X_asset_type  => X_asset_type
1380                                ,p_log_level_rec => p_log_level_rec)) then
1381                   raise ERROR_FOUND;
1382                end if;
1383 
1384                X_adj.adjustment_amount := h_total_rev_to_prorate -
1385                                           h_rev_inserted_so_far;
1386 
1387                X_adj.mrc_sob_type_code := X_mrc_sob_type_code;
1388 
1389                if (NOT fa_ins_adjust_pkg.faxinaj(X_adj,
1390                                                  X_last_update_date,
1391                                                  X_last_updated_by,
1392                                                  X_last_update_login
1393                                                  ,p_log_level_rec => p_log_level_rec)) then
1394                   if (g_print_debug) then
1395                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1396                                       element => 'X_acctcode',
1397                                       value   => 'FA_TFR_REVAL_RSV'
1398                                       ,p_log_level_rec => p_log_level_rec);
1399                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1400                                       element => 'adjustment_type',
1401                                       value   => X_adj.adjustment_type
1402                                       ,p_log_level_rec => p_log_level_rec);
1403                      fa_debug_pkg.add(fname   => 'FA_TRANSFER_XIT_PKG.fatsgl',
1404                                       element => 'select_mode',
1405                                       value   => X_adj.selection_mode
1406                                       ,p_log_level_rec => p_log_level_rec);
1407                   end if;
1408                   raise ERROR_FOUND;
1409                end if;
1410             end if;
1411          else
1412             h_msg_name := 'FA_TFR_INTERCO_UNBAL';
1413             raise ERROR_FOUND;
1414          end if;
1415       else
1416          h_msg_name := 'FA_TFR_INVALID_DIST_FLAG';
1417          raise ERROR_FOUND;
1418       end if;
1419 
1420    end loop;
1421 
1422    h_msg_name := 'FA_TFR_CLOSE_DIST_CURSOR';
1423    close dist_cursor;
1424 
1425    return TRUE;
1426 
1427 EXCEPTION
1428    when ERROR_FOUND then
1429       fa_srvr_msg.add_message(calling_fn => 'FA_TRANSFER_XIT_PKG.fatsgl',
1430                               name       => h_msg_name
1431                               ,p_log_level_rec => p_log_level_rec);
1432       close dist_cursor;
1433       return FALSE;
1434 
1435    when OTHERS then
1436       fa_srvr_msg.add_sql_error(calling_fn=> 'FA_TRANSFER_XIT_PKG.fatsgl'
1437             ,p_log_level_rec => p_log_level_rec);
1438       close dist_cursor;
1439       return FALSE;
1440 
1441 END fatsgl;
1442 
1443 END FA_TRANSFER_XIT_PKG;