[Home] [Help]
PACKAGE BODY: APPS.FA_RECLASS_PVT
Source
1 PACKAGE BODY FA_RECLASS_PVT as
2 /* $Header: FAVRECB.pls 120.21.12020000.3 2012/11/30 13:47:15 spooyath ship $ */
3
4
5 /* ---------------------------------------------------------------
6 * Name : Do_reclass
7 * Type : Function
8 * Returns : Boolean
9 * Purpose : Perform reclass transaction for an asset
10 * Calling Details : This function expects the following parameters with
11 * valid data for it to perform the Reclass transaction
12 * successfully
13 * px_trans_rec.amortization_start_date
14 * px_asset_desc_rec.asset_number
15 * pxx_asset_cat_rec_new.category_id
16 * ---------------------------------------------------------------- */
17 FUNCTION do_reclass (
18 px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
19 px_asset_desc_rec IN OUT NOCOPY FA_API_TYPES.asset_desc_rec_type,
20 px_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
21 px_asset_type_rec IN OUT NOCOPY FA_API_TYPES.asset_type_rec_type,
22 px_asset_cat_rec_old IN OUT NOCOPY FA_API_TYPES.asset_cat_rec_type,
23 px_asset_cat_rec_new IN OUT NOCOPY FA_API_TYPES.asset_cat_rec_type,
24 p_recl_opt_rec IN FA_API_TYPES.reclass_options_rec_type , p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
25 return boolean IS
26
27 l_err_stage varchar2(230);
28 i integer:= 1;
29 l_asset_dist_tbl FA_API_TYPES.asset_dist_tbl_type;
30 l_trans_rec FA_API_TYPES.trans_rec_type;
31
32 l_calling_fn varchar2(40) := 'fa_reclass_pvt.do_reclass';
33 call_err EXCEPTION;
34
35 BEGIN
36
37 l_err_stage:= 'validate_reclass';
38 if (p_log_level_rec.statement_level) then
39 fa_debug_pkg.add(l_calling_fn, '-', 'before '||l_err_stage, p_log_level_rec => p_log_level_rec);
40 end if;
41
42 if NOT validate_reclass(
43 p_trans_rec => px_trans_rec,
44 p_asset_desc_rec => px_asset_desc_rec,
45 p_asset_hdr_rec => px_asset_hdr_rec,
46 p_asset_type_rec => px_asset_type_rec,
47 p_asset_cat_rec_old => px_asset_cat_rec_old,
48 p_asset_cat_rec_new => px_asset_cat_rec_new,
49 p_log_level_rec => p_log_level_rec ) then
50
51 raise call_err;
52 end if;
53
54 -- perform basic reclass
55 -- Populate old and new dist lines
56 l_err_stage:= 'fa_reclass_util_pvt.get_asset_distribution';
57
58 if (p_log_level_rec.statement_level) then
59 fa_debug_pkg.add(l_calling_fn, '-', 'before '||l_err_stage, p_log_level_rec => p_log_level_rec);
60 end if;
61
62 if NOT fa_reclass_util_pvt.get_asset_distribution(
63 p_trans_rec => px_trans_rec,
64 p_asset_hdr_rec => px_asset_hdr_rec,
65 p_asset_cat_rec_old => px_asset_cat_rec_old,
66 p_asset_cat_rec_new => px_asset_cat_rec_new,
67 px_asset_dist_tbl => l_asset_dist_tbl,
68 p_calling_fn => l_calling_fn , p_log_level_rec => p_log_level_rec) then
69 raise call_err;
70 end if;
71
72
73 -- populate category desc flex info based on
74 -- p_rec_opt_rec.copy_cat_desc_flag
75 l_err_stage:= 'fa_reclass_util_pvt.get_cat_desc_flex';
76 -- dbms_output.put_line(l_err_stage);
77 if (p_log_level_rec.statement_level) then
78 fa_debug_pkg.add(l_calling_fn, '-', 'before '||l_err_stage, p_log_level_rec => p_log_level_rec);
79 end if;
80
81 if NOT fa_reclass_util_pvt.get_cat_desc_flex(
82 p_asset_hdr_rec => px_asset_hdr_rec,
83 px_asset_desc_rec => px_asset_desc_rec,
84 p_asset_cat_rec_old => px_asset_cat_rec_old,
85 px_asset_cat_rec_new => px_asset_cat_rec_new,
86 p_recl_opt_rec => p_recl_opt_rec,
87 p_calling_fn => l_calling_fn , p_log_level_rec => p_log_level_rec) then
88 raise call_err;
89 end if;
90
91 -- save for future use as the do_distributions api populates the
92 -- the transaction_subtype to RECLASS. This fails call to do_adjustments
93 -- as it expects EXPENSED or AMORTIZED as trx_subtype
94 l_trans_rec := px_trans_rec;
95
96 -- BUG# 3325400
97 -- forcing selection of the thid here rather
98 -- then relying on table handler
99 select fa_transaction_headers_s.nextval
100 into px_trans_rec.transaction_header_id
101 from dual;
102
103 -- Bug 15877517 : Reinitialize who_info as well
104 px_trans_rec.who_info.creation_date := sysdate;
105 px_trans_rec.who_info.last_update_date := sysdate;
106
107
108 l_err_stage:= 'fa_distribution_pvt.do_distribution';
109 -- dbms_output.put_line(l_err_stage);
110 if (p_log_level_rec.statement_level) then
111 fa_debug_pkg.add(l_calling_fn, '-', 'before '||l_err_stage, p_log_level_rec => p_log_level_rec);
112 end if;
113
114 if not fa_distribution_pvt.do_distribution(
115 px_trans_rec => px_trans_rec,
116 px_asset_hdr_rec => px_asset_hdr_rec,
117 px_asset_cat_rec_new => px_asset_cat_rec_new,
118 px_asset_dist_tbl => l_asset_dist_tbl , p_log_level_rec => p_log_level_rec) then
119 raise call_err;
120 end if;
121
122 /*
123 * Code hook for IAC
124 */
125 if (FA_IGI_EXT_PKG.IAC_Enabled) then
126 l_err_stage:= 'FA_IGI_EXT_PKG.Do_Reclass';
127 if (p_log_level_rec.statement_level) then
128 fa_debug_pkg.add(l_calling_fn, '-', 'before '||l_err_stage, p_log_level_rec => p_log_level_rec);
129 end if;
130
131 if not FA_IGI_EXT_PKG.Do_Reclass(
132 p_trans_rec => px_trans_rec,
133 p_asset_hdr_rec => px_asset_hdr_rec,
134 p_asset_cat_rec_old => px_asset_cat_rec_old,
135 p_asset_cat_rec_new => px_asset_cat_rec_new,
136 p_asset_desc_rec => px_asset_desc_rec,
137 p_asset_type_rec => px_asset_type_rec,
138 p_calling_function => l_calling_fn ) then
139
140 raise call_err;
141 end if;
142 end if; -- (FA_IGI_EXT_PKG.IAC_Enabled)
143
144 -- save the transaction date for future use
145 l_trans_rec.transaction_date_entered:= px_trans_rec.transaction_date_entered;
146
147 if (p_log_level_rec.statement_level) then
148 fa_debug_pkg.add(l_calling_fn, 'transaction_date_entered', l_trans_rec.transaction_date_entered, p_log_level_rec => p_log_level_rec);
149 end if;
150 -- keep the rest same as original because the dist api updates few columns
151 -- which we may not need
152 l_trans_rec.transaction_header_id := px_trans_rec.transaction_header_id;
153 px_trans_rec := l_trans_rec;
154
155 if (p_log_level_rec.statement_level) then
156 fa_debug_pkg.add(l_calling_fn, 'redefault_flag', p_recl_opt_rec.redefault_flag, p_log_level_rec => p_log_level_rec);
157 end if;
158
159 -- perform redefault
160 if p_recl_opt_rec.redefault_flag = 'YES' then
161 -- validate redefault
162 -- dbms_output.put_line('validate redefault');
163 if NOT validate_redefault(
164 px_trans_rec => px_trans_rec,
165 px_asset_desc_rec => px_asset_desc_rec,
166 px_asset_hdr_rec => px_asset_hdr_rec,
167 px_asset_type_rec => px_asset_type_rec,
168 px_asset_cat_rec_old => px_asset_cat_rec_old,
169 px_asset_cat_rec_new => px_asset_cat_rec_new,
170 p_mass_request_id => null,
171 p_log_level_rec => p_log_level_rec ) then
172 raise call_err;
173 end if;
174
175 if (p_log_level_rec.statement_level) then
176 fa_debug_pkg.add(l_calling_fn, '-', 'before do_redefault', p_log_level_rec => p_log_level_rec);
177 end if;
178 -- do_redefault
179 if NOT do_redefault(
180 px_trans_rec => px_trans_rec,
181 px_asset_desc_rec => px_asset_desc_rec,
182 px_asset_hdr_rec => px_asset_hdr_rec,
183 px_asset_type_rec => px_asset_type_rec,
184 px_asset_cat_rec_old => px_asset_cat_rec_old,
185 px_asset_cat_rec_new => px_asset_cat_rec_new,
186 p_mass_request_id => p_recl_opt_rec.mass_request_id ,
187 p_log_level_rec => p_log_level_rec) then
188 raise call_err;
189 end if;
190
191 end if; /* p_redefault_flag */
192
193
194 -- dbms_output.put_line('end of fa_reclass_pvt');
195 return TRUE;
196
197 EXCEPTION
198 when call_err then
199 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
200 return FALSE;
201
202 when others then
203 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
204 return FALSE;
205
206 END do_reclass;
207
208
209 -- ------------------------------------------------------
210
211 -- ------------------------------------------------------
212 FUNCTION validate_reclass (
213 p_trans_rec IN FA_API_TYPES.trans_rec_type,
214 p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
215 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
216 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
217 p_asset_cat_rec_old IN FA_API_TYPES.asset_cat_rec_type,
218 p_asset_cat_rec_new IN FA_API_TYPES.asset_cat_rec_type , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) return boolean is
219
220 l_err_stage varchar2(100);
221 l_calling_fn varchar2(40) := 'fa_reclass_pvt.validate_reclass';
222 call_err EXCEPTION;
223 BEGIN
224
225 l_err_stage:= 'fa_reclass_util_pvt.validate_units';
226 -- dbms_output.put_line(l_err_stage);
227 if not fa_reclass_util_pvt.validate_units(
228 p_trans_rec.transaction_type_code,
229 p_asset_hdr_rec.asset_id,
230 l_calling_fn , p_log_level_rec => p_log_level_rec) then
231 raise call_err;
232 end if;
233
234 l_err_stage:= 'fa_reclass_util_pvt.validate_cat_types';
235 -- dbms_output.put_line(l_err_stage);
236 if not fa_reclass_util_pvt.validate_cat_types(
237 p_trans_rec.transaction_type_code,
238 p_asset_cat_rec_old.category_id,
239 p_asset_cat_rec_new.category_id,
240 p_asset_desc_rec.lease_id,
241 p_asset_hdr_rec.asset_id,
242 l_calling_fn , p_log_level_rec => p_log_level_rec) then
243 raise call_err;
244 end if;
245
246 -- validate CIP accounts
247 l_err_stage:= 'fa_reclass_util_pvt.validate_CIP_accounts';
248 -- dbms_output.put_line(l_err_stage);
249 if not fa_reclass_util_pvt.validate_CIP_accounts(
250 p_trans_rec.transaction_type_code,
251 p_asset_hdr_rec.book_type_code,
252 p_asset_type_rec.asset_type,
253 p_asset_cat_rec_new.category_id,
254 l_calling_fn , p_log_level_rec => p_log_level_rec) then
255 raise call_err;
256 end if;
257
258 l_err_stage:= 'fa_reclass_util_pvt.check_cat_book_setup';
259 -- dbms_output.put_line(l_err_stage);
260 if not fa_reclass_util_pvt.check_cat_book_setup(
261 p_trans_rec.transaction_type_code,
262 p_asset_cat_rec_new.category_id,
263 p_asset_hdr_rec.asset_id,
264 l_calling_fn , p_log_level_rec => p_log_level_rec) then
265 raise call_err;
266 end if;
267
268 l_err_stage:= 'fa_reclass_util_pvt.validate_pending_retire';
269 -- dbms_output.put_line(l_err_stage);
270 if not fa_reclass_util_pvt.validate_pending_retire(
271 p_trans_rec.transaction_type_code,
272 p_asset_hdr_rec.asset_id,
273 l_calling_fn , p_log_level_rec => p_log_level_rec) then
274 raise call_err;
275 end if;
276
277 l_err_stage:= 'fa_reclass_util_pvt.validate_fully_retired';
278 -- dbms_output.put_line(l_err_stage);
279 if not fa_reclass_util_pvt.validate_fully_retired(
280 p_trans_rec.transaction_type_code,
281 p_asset_hdr_rec.asset_id,
282 l_calling_fn , p_log_level_rec => p_log_level_rec) then
283 raise call_err;
284 end if;
285
286 /*
287 -- validate transaction date
288 if not fa_reclass_util_pvt.validate_transaction_date(
289 p_trans_rec,
290 p_asset_hdr_rec.asset_id,
291 p_asset_hdr_rec.book_type_code,
292 l_calling_fn , p_log_level_rec => p_log_level_rec) then
293 raise call_err;
294 end if;
295 */
296
297
298 return TRUE;
299
300 EXCEPTION
301 when call_err then
302 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
303 return FALSE;
304
305 when others then
306 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
307 return FALSE;
308
309 END validate_reclass;
310
311 -- ----------------------------------------------------
312
313
314 -- ----------------------------------------------------
315
316 FUNCTION validate_redefault(
317 px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
318 px_asset_desc_rec IN OUT NOCOPY FA_API_TYPES.asset_desc_rec_type,
319 px_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
320 px_asset_type_rec IN OUT NOCOPY FA_API_TYPES.asset_type_rec_type,
321 px_asset_cat_rec_old IN OUT NOCOPY FA_API_TYPES.asset_cat_rec_type,
322 px_asset_cat_rec_new IN OUT NOCOPY FA_API_TYPES.asset_cat_rec_type,
323 p_mass_request_id IN NUMBER DEFAULT null , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) return boolean IS
324
325
326 BEGIN
327 null;
328
329 return TRUE;
330 END validate_redefault;
331
332
333 /* --------------------------------------------------------------------
334 *
335 *
336 *
337 *
338 * ---------------------------------------------------------------------- */
339 FUNCTION do_redefault(
340 px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
341 px_asset_desc_rec IN OUT NOCOPY FA_API_TYPES.asset_desc_rec_type,
342 px_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
343 px_asset_type_rec IN OUT NOCOPY FA_API_TYPES.asset_type_rec_type,
344 px_asset_cat_rec_old IN OUT NOCOPY FA_API_TYPES.asset_cat_rec_type,
345 px_asset_cat_rec_new IN OUT NOCOPY FA_API_TYPES.asset_cat_rec_type,
346 p_mass_request_id IN NUMBER DEFAULT null , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) return boolean IS
347
348 CURSOR book_cr( p_asset_id number ) IS
349 SELECT TH.book_type_code
350 FROM FA_BOOK_CONTROLS BC,
351 FA_TRANSACTION_HEADERS TH
352 WHERE TH.transaction_type_code||'' IN ('ADDITION','CIP ADDITION', 'GROUP ADDITION')
353 AND TH.asset_id = p_asset_id
354 AND BC.book_type_code = TH.book_type_code
355 AND nvl(BC.date_ineffective, sysdate + 1) > sysdate
356 GROUP BY TH.book_type_code
357 ORDER BY MIN(TH.date_effective);
358
359 CURSOR get_old_rules( p_book varchar2, p_asset number ) IS
360 SELECT book_type_code,
361 date_placed_in_service, date_placed_in_service,
362 prorate_convention_code, deprn_method_code,
363 life_in_months, basic_rate, adjusted_rate,
364 production_capacity, unit_of_measure,
365 bonus_rule, NULL, ceiling_name,
366 depreciate_flag, allowed_deprn_limit,
367 allowed_deprn_limit_amount, percent_salvage_value
368 FROM FA_BOOKS bk
369 WHERE bk.book_type_code = p_book
370 AND bk.asset_id = p_asset
371 AND bk.date_ineffective IS NULL;
372
373 l_book_type_code varchar2(30);
374 l_amortize_flag varchar2(3);
375 l_last_updated_by number;
376 l_last_update_date date;
377 l_last_update_login number;
378
379 l_old_rules FA_LOAD_TBL_PKG.asset_deprn_info:= null;
380 l_new_rules FA_LOAD_TBL_PKG.asset_deprn_info:= null;
381 l_found BOOLEAN := FALSE;
382 l_rule_change_exists boolean;
383
384 l_rate_source_rules VARCHAR2(10);
385 l_deprn_basis_rule VARCHAR2(10);
386 l_prorate_date date;
387
388 l_trans_rec FA_API_TYPES.trans_rec_type;
389 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
390 l_asset_desc_rec FA_API_TYPES.asset_desc_rec_type;
391 l_asset_type_rec FA_API_TYPES.asset_type_rec_type;
392 l_asset_cat_rec FA_API_TYPES.asset_cat_rec_type;
393 l_asset_fin_rec FA_API_TYPES.asset_fin_rec_type;
394 l_asset_fin_rec_adj FA_API_TYPES.asset_fin_rec_type;
395 l_asset_fin_rec_new FA_API_TYPES.asset_fin_rec_type;
396 l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
397 l_asset_deprn_rec_adj FA_API_TYPES.asset_deprn_rec_type;
398 l_asset_deprn_rec_new FA_API_TYPES.asset_deprn_rec_type;
399 l_asset_dist_tbl FA_API_TYPES.asset_dist_tbl_type;
400
401 l_asset_fin_mrc_tbl_new FA_API_TYPES.asset_fin_tbl_type;
402 l_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
403 l_inv_trans_rec_dummy FA_API_TYPES.inv_trans_rec_type;
404 l_inv_tbl_dummy FA_API_TYPES.inv_tbl_type;
405 l_group_reclass_options_rec FA_API_TYPES.group_reclass_options_rec_type;
406
407 l_return_status VARCHAR2(1);
408 l_mesg_count NUMBER;
409 l_mesg_data VARCHAR2(2000);
410
411 l_corp_book varchar2(30);
412 l_jdpis number;
413
414 l_calling_fn varchar2(40) := 'fa_reclass_pvt.do_redefault';
415 call_err EXCEPTION;
416
417 BEGIN
418
419 -- dbms_output.put_line('start do_default');
420
421 if px_trans_rec.transaction_subtype = 'AMORTIZED' then
422 l_amortize_flag := 'YES';
423 else
424 l_amortize_flag := 'NO';
425 end if;
426
427 if (p_log_level_rec.statement_level) then
428 fa_debug_pkg.add(l_calling_fn, 'transaction_subtype', px_trans_rec.transaction_subtype, p_log_level_rec => p_log_level_rec);
429 fa_debug_pkg.add(l_calling_fn, 'l_corp_book', px_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
430 end if;
431 -- Always corp book is passed in the asset_hdr_rec
432 -- so save it for future use
433 l_corp_book := px_asset_hdr_rec.book_type_code;
434
435 -- load new deprn_rules
436 -- dbms_output.put_line('load_Deprn_Rules');
437
438 /* BUG# 3296729 - replacing this with call to common cache
439 *
440 * FA_LOAD_TBL_PKG.Load_Deprn_Rules_Tbl(
441 * p_corp_book => l_corp_book,
442 * p_category_id => px_asset_cat_rec_new.category_id,
443 * x_return_status => l_found);
444 * IF NOT l_found THEN
445 * raise call_err;
446 * END IF;
447 */
448
449
450 FOR book_rec in book_cr(px_asset_hdr_rec.asset_id) LOOP
451
452 -- validate redefault for each book
453 -- dbms_output.put_line('FA_RECLASS_UTIL_PVT.Validate_Adjustment', p_log_level_rec => p_log_level_rec);
454 -- Bug#12620567
455 if NOT FA_RECLASS_UTIL_PVT.Validate_Adjustment(
456 p_transaction_type_code => px_trans_rec.transaction_type_code,
457 p_asset_id => px_asset_hdr_rec.asset_id,
458 p_book_type_code => book_rec.book_type_code,
459 p_amortize_flag => l_amortize_flag,
460 p_mr_req_id => 1 , p_log_level_rec => p_log_level_rec) then
461 raise call_err;
462 end if;
463
464 -- Get old(current) depreciation rules from the current books row.
465 -- dbms_output.put_line('get_old_rules for :'||book_rec.book_type_code);
466
467 OPEN get_old_rules( book_rec.book_type_code, px_asset_hdr_rec.asset_id);
468 FETCH get_old_rules INTO l_old_rules;
469 CLOSE get_old_rules;
470
471 l_found:= FALSE;
472 -- dbms_output.put_line('Get_Deprn_Rules for : '||book_rec.book_type_code);
473 -- dbms_output.put_line('start_dpis'||to_char(l_old_rules.start_dpis));
474 -- Get new depreciation rules for the cursor_book.
475
476 /* BUG# 3296729 - replacing this with call to common cache
477 *
478 * FA_LOAD_TBL_PKG.Get_Deprn_Rules(
479 * p_book_type_code => book_rec.book_type_code,
480 * p_date_placed_in_service => l_old_rules.start_dpis,
481 * x_deprn_rules_rec => l_new_rules,
482 * x_found => l_found );
483 * IF not l_found THEN
484 * raise call_err;
485 * END IF;
486 */
487
488 l_jdpis := to_number(to_char(l_old_rules.start_dpis, 'J'));
489
490 if not fa_cache_pkg.fazccbd
491 (X_book => book_rec.book_type_code,
492 X_cat_id => px_asset_cat_rec_new.category_id,
493 X_jdpis => l_jdpis, p_log_level_rec => p_log_level_rec) then
494 raise call_err;
495 end if;
496
497 if (l_old_rules.deprn_method = 'JP-STL-EXTND') then
498 l_new_rules := l_old_rules;
499 else
500 -- now load cached values into the new rules table
501 l_new_rules.book_type_code := book_rec.book_type_code;
502 l_new_rules.start_dpis := fa_cache_pkg.fazccbd_record.start_dpis;
503 l_new_rules.end_dpis := fa_cache_pkg.fazccbd_record.end_dpis;
504 l_new_rules.prorate_conv_code := fa_cache_pkg.fazccbd_record.prorate_convention_code;
505 l_new_rules.deprn_method := fa_cache_pkg.fazccbd_record.deprn_method;
506 l_new_rules.life_in_months := fa_cache_pkg.fazccbd_record.life_in_months;
507 l_new_rules.basic_rate := fa_cache_pkg.fazccbd_record.basic_rate;
508 l_new_rules.adjusted_rate := fa_cache_pkg.fazccbd_record.adjusted_rate;
509 l_new_rules.production_capacity := fa_cache_pkg.fazccbd_record.production_capacity;
510 l_new_rules.unit_of_measure := fa_cache_pkg.fazccbd_record.unit_of_measure;
511 if (px_asset_type_rec.asset_type <> 'GROUP') then
512 l_new_rules.bonus_rule := fa_cache_pkg.fazccbd_record.bonus_rule;
513 end if;
514 l_new_rules.itc_amount := NULL;
515 l_new_rules.ceiling_name := fa_cache_pkg.fazccbd_record.ceiling_name;
516 l_new_rules.depreciate_flag := fa_cache_pkg.fazccbd_record.depreciate_flag;
517 l_new_rules.allow_deprn_limit := fa_cache_pkg.fazccbd_record.allowed_deprn_limit;
518 l_new_rules.deprn_limit_amount := fa_cache_pkg.fazccbd_record.special_deprn_limit_amount;
519 l_new_rules.percent_salvage_value := fa_cache_pkg.fazccbd_record.percent_salvage_value;
520
521 end if;
522
523 -- dbms_output.put_line('See if any rule change is needed');
524 -- See if any rule change is needed.
525 if (p_log_level_rec.statement_level) then
526 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.book_type_code ',l_new_rules.book_type_code , p_log_level_rec => p_log_level_rec);
527 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.start_dpis ',l_new_rules.start_dpis , p_log_level_rec => p_log_level_rec);
528 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.end_dpis ',l_new_rules.end_dpis , p_log_level_rec => p_log_level_rec);
529 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.prorate_conv_code ',l_new_rules.prorate_conv_code , p_log_level_rec => p_log_level_rec);
530 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.prorate_conv_code ',l_old_rules.prorate_conv_code , p_log_level_rec => p_log_level_rec);
531 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.deprn_method ',l_new_rules.deprn_method , p_log_level_rec => p_log_level_rec);
532 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.deprn_method ',l_old_rules.deprn_method , p_log_level_rec => p_log_level_rec);
533 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.life_in_months ',l_new_rules.life_in_months , p_log_level_rec => p_log_level_rec);
534 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.life_in_months ',l_old_rules.life_in_months , p_log_level_rec => p_log_level_rec);
535 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.basic_rate ',l_new_rules.basic_rate , p_log_level_rec => p_log_level_rec);
536 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.basic_rate ',l_old_rules.basic_rate , p_log_level_rec => p_log_level_rec);
537 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.adjusted_rate ',l_new_rules.adjusted_rate , p_log_level_rec => p_log_level_rec);
538 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.adjusted_rate ',l_old_rules.adjusted_rate , p_log_level_rec => p_log_level_rec);
539 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.production_capacity ',l_new_rules.production_capacity , p_log_level_rec => p_log_level_rec);
540 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.production_capacity ',l_old_rules.production_capacity , p_log_level_rec => p_log_level_rec);
541 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.unit_of_measure ',l_new_rules.unit_of_measure , p_log_level_rec => p_log_level_rec);
542 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.unit_of_measure ',l_old_rules.unit_of_measure , p_log_level_rec => p_log_level_rec);
543 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.bonus_rule ',l_new_rules.bonus_rule , p_log_level_rec => p_log_level_rec);
544 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.bonus_rule ',l_old_rules.bonus_rule , p_log_level_rec => p_log_level_rec);
545 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.itc_amount ',l_new_rules.itc_amount , p_log_level_rec => p_log_level_rec);
546 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.itc_amount ',l_old_rules.itc_amount , p_log_level_rec => p_log_level_rec);
547 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.ceiling_name ',l_new_rules.ceiling_name , p_log_level_rec => p_log_level_rec);
548 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.ceiling_name ',l_old_rules.ceiling_name , p_log_level_rec => p_log_level_rec);
549 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.depreciate_flag ',l_new_rules.depreciate_flag , p_log_level_rec => p_log_level_rec);
550 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.depreciate_flag ',l_old_rules.depreciate_flag , p_log_level_rec => p_log_level_rec);
551 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.allow_deprn_limit ',l_new_rules.allow_deprn_limit , p_log_level_rec => p_log_level_rec);
552 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.allow_deprn_limit ',l_old_rules.allow_deprn_limit , p_log_level_rec => p_log_level_rec);
553 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.deprn_limit_amount ',l_new_rules.deprn_limit_amount , p_log_level_rec => p_log_level_rec);
554 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.deprn_limit_amount ',l_old_rules.deprn_limit_amount , p_log_level_rec => p_log_level_rec);
555 fa_debug_pkg.add(l_calling_fn, 'l_new_rules.percent_salvage_value',l_new_rules.percent_salvage_value, p_log_level_rec => p_log_level_rec);
556 fa_debug_pkg.add(l_calling_fn, 'l_old_rules.percent_salvage_value',l_old_rules.percent_salvage_value, p_log_level_rec => p_log_level_rec);
557
558 end if;
559
560 IF ((l_old_rules.prorate_conv_code = l_new_rules.prorate_conv_code) AND
561 (l_old_rules.deprn_method = l_new_rules.deprn_method) AND
562 (nvl(l_old_rules.life_in_months, 99999) =
563 nvl(l_new_rules.life_in_months, 99999)) AND
564 (nvl(l_old_rules.basic_rate, 99999) =
565 nvl(l_new_rules.basic_rate, 99999)) AND
566 (nvl(l_old_rules.adjusted_rate, 99999) =
567 nvl(l_new_rules.adjusted_rate, 99999)) AND
568 (nvl(l_old_rules.production_capacity, 99999) =
569 nvl(l_new_rules.production_capacity, 99999)) AND
570 (nvl(l_old_rules.unit_of_measure, 99999) =
571 nvl(l_new_rules.unit_of_measure, 99999)) AND
572 (nvl(l_old_rules.bonus_rule, 'NULL') =
573 nvl(l_new_rules.bonus_rule, 'NULL')) AND
574 (nvl(l_old_rules.ceiling_name, 'NULL') =
575 nvl(l_new_rules.ceiling_name, 'NULL')) AND
576 /* Skip this check -- we will not change depreciate flag through mass reclass.
577 (l_old_rules.depreciate_flag = l_new_rules.depreciate_flag) AND
578 */
579 (nvl(l_old_rules.percent_salvage_value, 99) =
580 nvl(l_new_rules.percent_salvage_value, 99)))
581 THEN
582 if l_old_rules.allow_deprn_limit is not null then
583 if (nvl(l_old_rules.allow_deprn_limit, 99) =
584 nvl(l_new_rules.allow_deprn_limit, 99)) then
585 l_rule_change_exists := FALSE;
586 else
587 l_rule_change_exists := TRUE;
588 end if;
589 elsif l_old_rules.deprn_limit_amount is not null then
590 if (nvl(to_char(l_old_rules.deprn_limit_amount), 'NULL') =
591 nvl(to_char(l_new_rules.deprn_limit_amount), 'NULL')) then
592 l_rule_change_exists := FALSE;
593 else
594 l_rule_change_exists := TRUE;
595 end if;
596 elsif (l_new_rules.allow_deprn_limit is not null or
597 l_new_rules.deprn_limit_amount is not null) then
598 l_rule_change_exists := TRUE;
599 else
600 l_rule_change_exists := FALSE;
601 end if;
602 ELSE
603 l_rule_change_exists := TRUE;
604 END IF;
605 --Bug6395440 starts
606 --Commenting the following check and adding an IF condition below
607 /*
608 IF (NOT l_rule_change_exists) then
609 return TRUE;
610 END IF;
611 */
612 IF l_rule_change_exists then
613
614 /*==================================+
615 | Perform Redefault Transaction |
616 +==================================*/
617 l_asset_hdr_rec:= null;
618 l_asset_hdr_rec:= px_asset_hdr_rec;
619 l_asset_hdr_rec.book_type_code := book_rec.book_type_code;
620
621 -- dbms_output.put_line('populate_adjust_info');
622 if (p_log_level_rec.statement_level) then
623 fa_debug_pkg.add(l_calling_fn, '-', 'before populate_adjust_info', p_log_level_rec => p_log_level_rec);
624 end if;
625 if NOT populate_adjust_info (
626 px_trans_rec => px_trans_rec,
627 px_asset_hdr_rec => l_asset_hdr_rec,
628 px_asset_desc_rec => px_asset_desc_rec,
629 px_asset_type_rec => px_asset_type_rec,
630 px_asset_cat_rec => px_asset_cat_rec_new,
631 px_asset_fin_rec => l_asset_fin_rec,
632 px_asset_fin_rec_adj => l_asset_fin_rec_adj,
633 px_asset_deprn_rec => l_asset_deprn_rec,
634 px_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
635 p_old_rules => l_old_rules,
636 p_new_rules => l_new_rules,
637 p_log_level_rec => p_log_level_rec ) then
638 raise call_err;
639 end if;
640
641 -- reset the header_id for next book
642 px_trans_rec.transaction_header_id:= null;
643
644 /* Bug 2718610:
645 Passing the transaction_date_entered and amortization_start_date
646 as null to the Public Adjustments API. The Adj API will take care of
647 populating these values according to the current open period
648 of the book_type_code */
649
650 /* ****** commenting this fix for bug 3446237 ***** */
651 -- px_trans_rec.transaction_date_entered := null; -- bug 2718610
652 -- px_trans_rec.amortization_start_date := null; -- bug 2718610
653 /* bug 2718610 is now indirectly fixed by bug 2888021 */
654
655
656 -- dbms_output.put_line('FA_ADJUSTMENT_PUB.do_adjustment');
657 if (p_log_level_rec.statement_level) then
658 fa_debug_pkg.add(l_calling_fn, '-', 'before FA_ADJUSTMENT_PUB.do_adjustment', p_log_level_rec => p_log_level_rec);
659 end if;
660 FA_ADJUSTMENT_PUB.do_adjustment(
661 p_api_version => 1.0,
662 p_init_msg_list => FND_API.G_FALSE,
663 p_commit => FND_API.G_FALSE,
664 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
665 x_return_status => l_return_status,
666 x_msg_count => l_mesg_count,
667 x_msg_data => l_mesg_data,
668 p_calling_fn => 'FA_RECLASS_PVT.do_redefault',
669 px_trans_rec => px_trans_rec,
670 px_asset_hdr_rec => l_asset_hdr_rec,
671 p_asset_fin_rec_adj => l_asset_fin_rec_adj,
672 x_asset_fin_rec_new => l_asset_fin_rec_new,
673 x_asset_fin_mrc_tbl_new => l_asset_fin_mrc_tbl_new,
674 px_inv_trans_rec => l_inv_trans_rec_dummy,
675 px_inv_tbl => l_inv_tbl_dummy,
676 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
677 x_asset_deprn_rec_new => l_asset_deprn_rec_new,
678 x_asset_deprn_mrc_tbl_new => l_asset_deprn_mrc_tbl_new,
679 p_group_reclass_options_rec => l_group_reclass_options_rec );
680
681
682 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
683 -- dbms_output.put_line('fa_adjustment_pub error');
684 raise call_err;
685 end if;
686 END IF;
687 END LOOP;
688
689 return TRUE;
690
691 EXCEPTION
692 when call_err then
693 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
694 return FALSE;
695
696 when others then
697 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
698 return FALSE;
699
700 END do_redefault;
701
702
703 FUNCTION populate_adjust_info (
704 px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
705 px_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
706 px_asset_desc_rec IN OUT NOCOPY FA_API_TYPES.asset_desc_rec_type,
707 px_asset_type_rec IN OUT NOCOPY FA_API_TYPES.asset_type_rec_type,
708 px_asset_cat_rec IN OUT NOCOPY FA_API_TYPES.asset_cat_rec_type,
709 px_asset_fin_rec IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
710 px_asset_fin_rec_adj IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
711 px_asset_deprn_rec IN OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type,
712 px_asset_deprn_rec_adj IN OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type,
713 p_old_rules IN FA_LOAD_TBL_PKG.asset_deprn_info,
714 p_new_rules IN FA_LOAD_TBL_PKG.asset_deprn_info
715 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) return boolean IS
716
717 CURSOR get_prorate_date(p_dpis date) IS
718 SELECT conv.prorate_date
719 FROM FA_CONVENTIONS conv
720 WHERE conv.prorate_convention_code = p_new_rules.prorate_conv_code
721 AND p_dpis between conv.start_date and conv.end_date;
722
723 l_use_deprn_limits_flag VARCHAR2(3) := 'NO';
724 l_prorate_date date;
725 l_status boolean;
726 l_fiscal_year_name varchar2(30);
727 l_period_rec FA_API_TYPES.period_rec_type;
728
729 l_calling_fn varchar2(40) := 'fa_reclass_pvt.populate_adjust_info';
730 call_err EXCEPTION;
731 BEGIN
732
733
734 if NOT FA_UTIL_PVT.get_asset_desc_rec(
735 p_asset_hdr_rec => px_asset_hdr_rec,
736 px_asset_desc_rec => px_asset_desc_rec , p_log_level_rec => p_log_level_rec) then
737 raise call_err;
738 end if;
739
740 if NOT FA_UTIL_PVT.get_asset_type_rec(
741 p_asset_hdr_rec => px_asset_hdr_rec,
742 px_asset_type_rec => px_asset_type_rec,
743 p_date_effective => null , p_log_level_rec => p_log_level_rec) then
744 raise call_err;
745 end if;
746
747 if NOT FA_UTIL_PVT.get_asset_cat_rec(
748 p_asset_hdr_rec => px_asset_hdr_rec,
749 px_asset_cat_rec => px_asset_cat_rec,
750 p_date_effective => null , p_log_level_rec => p_log_level_rec) then
751 raise call_err;
752 end if;
753
754 if NOT FA_UTIL_PVT.get_asset_fin_rec(
755 p_asset_hdr_rec => px_asset_hdr_rec,
756 px_asset_fin_rec => px_asset_fin_rec,
757 p_transaction_header_id => null,
758 p_mrc_sob_type_code => 'P', p_log_level_rec => p_log_level_rec) then
759 raise call_err;
760 end if;
761
762 -- copy orig record to adjusted record
763 -- px_asset_fin_rec_adj:= px_asset_fin_rec;
764
765 if NOT FA_UTIL_PVT.get_asset_deprn_rec(
766 p_asset_hdr_rec => px_asset_hdr_rec,
767 px_asset_deprn_rec => px_asset_deprn_rec,
768 p_period_counter => null,
769 p_mrc_sob_type_code => 'P', p_log_level_rec => p_log_level_rec) then
770 raise call_err;
771 end if;
772
773 -- copy orig record to adjusted record
774 -- px_asset_deprn_rec_adj:= px_asset_deprn_rec;
775
776
777 -- assign new values to the adj record, based on the new rules
778 --
779 -- BUG# 3361196 - we need to populate the delta not the new values
780 -- note the premise that null values in category result in
781 -- null values in the new (don't treat null as delta here)
782
783 px_asset_fin_rec_adj.unit_of_measure := p_new_rules.unit_of_measure;
784 px_asset_fin_rec_adj.deprn_method_code := p_new_rules.deprn_method;
785 px_asset_fin_rec_adj.life_in_months := p_new_rules.life_in_months;
786 px_asset_fin_rec_adj.prorate_convention_code := p_new_rules.prorate_conv_code;
787 -- BUG# 3930865
788 -- we should not be setting dep_flag as part of redefault
789 -- already removed from prior checks
790 -- px_asset_fin_rec_adj.depreciate_flag := p_new_rules.depreciate_flag;
791 px_asset_fin_rec_adj.basic_rate := p_new_rules.basic_rate;
792 px_asset_fin_rec_adj.adjusted_rate := p_new_rules.adjusted_rate;
793
794
795 -- use G_MISS_* here....
796
797 if (p_new_rules.ceiling_name is null) then
798 px_asset_fin_rec_adj.ceiling_name := FND_API.G_MISS_CHAR;
799 else
800 px_asset_fin_rec_adj.ceiling_name := p_new_rules.ceiling_name;
801 end if;
802
803 if (p_new_rules.bonus_rule is null OR
804 (px_asset_fin_rec.group_asset_id is not null and nvl(px_asset_fin_rec.member_rollup_flag,'Z') <> 'Y')
805 ) then
806 px_asset_fin_rec_adj.bonus_rule := FND_API.G_MISS_CHAR;
807 else
808 px_asset_fin_rec_adj.bonus_rule := p_new_rules.bonus_rule;
809 end if;
810
811
812 -- these are where we need to derive values using the delta
813 -- first derive the types
814 --
815 -- note the premise that null values in category result in
816 -- null values in the new (don't treat null as delta here)
817 -- the behavior on delta salvage is dabateable
818 --
819 -- (whether to remove/reverse or treat as no delta)
820 -- for now going with no delta since majority of customer
821 -- do not use percent salvage on the category
822
823 if (p_new_rules.percent_salvage_value is not null) then
824 px_asset_fin_rec_adj.salvage_type := 'PCT';
825 px_asset_fin_rec_adj.percent_salvage_value :=
826 p_new_rules.percent_salvage_value -
827 nvl(p_old_rules.percent_salvage_value, 0);
828 else
829 px_asset_fin_rec_adj.percent_salvage_value := NULL;
830
831 -- use default type based on asset type
832 if (px_asset_type_rec.asset_type = 'GROUP') then
833 px_asset_fin_rec_adj.salvage_type := 'PCT';
834 else
835 px_asset_fin_rec_adj.salvage_type := 'AMT';
836 end if;
837 end if;
838
839 if (p_new_rules.allow_deprn_limit is not null) then
840 px_asset_fin_rec_adj.deprn_limit_type := 'PCT';
841 px_asset_fin_rec_adj.allowed_deprn_limit :=
842 p_new_rules.allow_deprn_limit -
843 nvl(p_old_rules.allow_deprn_limit, 0);
844 elsif (p_new_rules.deprn_limit_amount is not null) then
845 px_asset_fin_rec_adj.deprn_limit_type := 'AMT';
846 if (p_old_rules.allow_deprn_limit is not null) then
847 px_asset_fin_rec_adj.allowed_deprn_limit_amount :=
848 p_new_rules.deprn_limit_amount;
849 else
850 px_asset_fin_rec_adj.allowed_deprn_limit_amount :=
851 p_new_rules.deprn_limit_amount -
852 nvl(p_old_rules.deprn_limit_amount, 0);
853 end if;
854
855 else
856 -- type of NONE will handle the reversal from prior info
857 px_asset_fin_rec_adj.deprn_limit_type := 'NONE';
858 px_asset_fin_rec_adj.allowed_deprn_limit := NULL;
859 px_asset_fin_rec_adj.allowed_deprn_limit_amount := NULL;
860 end if;
861
862 if (p_new_rules.production_capacity is not null) then
863 px_asset_fin_rec_adj.production_capacity :=
864 p_new_rules.production_capacity -
865 nvl(p_old_rules.production_capacity, 0);
866 end if;
867
868 -- Bug 14266323 : Redefault amortization_date also
869 if px_trans_rec.transaction_subtype = 'AMORTIZED' then
870 if not FA_UTIL_PVT.get_period_rec
871 (p_book => px_asset_hdr_rec.book_type_code,
872 x_period_rec => l_period_rec,
873 p_log_level_rec => p_log_level_rec) then
874 raise call_err;
875 end if;
876
877 px_trans_rec.transaction_date_entered :=
878 greatest(l_period_rec.calendar_period_open_date,
879 least(sysdate,l_period_rec.calendar_period_close_date));
880
881 px_trans_rec.transaction_date_entered :=
882 to_date(to_char(px_trans_rec.transaction_date_entered,'DD/MM/YYYY'),'DD/MM/YYYY');
883
884 px_trans_rec.amortization_start_date := px_trans_rec.transaction_date_entered;
885
886 end if;
887
888 if (p_log_level_rec.statement_level) then
889 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_adj.deprn_limit_type',px_asset_fin_rec_adj.deprn_limit_type, p_log_level_rec => p_log_level_rec);
890 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_adj.allowed_deprn_limit', px_asset_fin_rec_adj.allowed_deprn_limit, p_log_level_rec => p_log_level_rec);
891 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_adj.allowed_deprn_limit_amount', px_asset_fin_rec_adj.allowed_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
892 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_adj.salvage_type', px_asset_fin_rec_adj.salvage_type, p_log_level_rec => p_log_level_rec);
893 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_adj.percent_salvage_value', px_asset_fin_rec_adj.percent_salvage_value, p_log_level_rec => p_log_level_rec);
894 end if;
895
896 /*** this was where the old code for old trx engine call was ***/
897
898 return TRUE;
899
900 EXCEPTION
901 when call_err then
902 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
903 return FALSE;
904
905 when others then
906 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
907 return FALSE;
908
909 END populate_adjust_info;
910
911
912 END FA_RECLASS_PVT;