[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;