1 PACKAGE BODY FA_ASSET_CALC_PVT as
2 /* $Header: FAVCALB.pls 120.211.12020000.7 2013/03/19 18:02:38 dvjoshi ship $ */
3
4 G_primary_new_cost NUMBER;
5 G_primary_salvage_value NUMBER;
6 G_primary_deprn_limit_amount NUMBER;
7
8 g_release number := fa_cache_pkg.fazarel_release;
9
10 FUNCTION calc_fin_info
11 (px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
12 p_inv_trans_rec IN FA_API_TYPES.inv_trans_rec_type,
13 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
14 p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
15 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
16 p_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
17 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
18 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
19 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
20 p_asset_deprn_rec_old IN FA_API_TYPES.asset_deprn_rec_type,
21 p_asset_deprn_rec_adj IN FA_API_TYPES.asset_deprn_rec_type,
22 px_asset_deprn_rec_new IN OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type,
23 p_period_rec IN FA_API_TYPES.period_rec_type,
24 p_reclassed_asset_id IN NUMBER default null,
25 p_reclass_src_dest IN VARCHAR2 default null,
26 p_reclassed_asset_dpis IN DATE default null,
27 p_mrc_sob_type_code IN VARCHAR2,
28 p_group_reclass_options_rec IN OUT NOCOPY FA_API_TYPES.group_reclass_options_rec_type,
29 p_calling_fn IN VARCHAR2
30 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
31
32
33 l_adjust_type varchar2(15);
34 l_deprn_exp number := 0;
35 l_deprn_exp_temp number := 0; --Bug 13620748
36 l_bonus_deprn_exp number := 0;
37 l_impairment_exp number := 0;
38 l_deprn_rsv number := 0;
39 l_bonus_deprn_rsv number := 0;
40 l_ann_adj_deprn_exp number := 0;
41 l_ann_adj_bonus_deprn_exp number := 0;
42
43 l_clearing number := 0;
44 l_cost_to_insert number := 0;
45 l_clearing_to_insert number := 0;
46
47 l_jdpis number;
48 l_asset_deprn_rec_adj FA_API_TYPES.asset_deprn_rec_type;
49
50 -- used for method cache
51 l_method_id number;
52 l_rate_source_rule varchar2(10);
53 l_deprn_basis_rule varchar2(4);
54 l_set_extend_flag boolean := FALSE;
55 l_reset_extend_flag boolean := FALSE;
56 l_extended_flag boolean := FALSE;
57 l_amortization_start_date date;
58 l_old_amortization_start_date date;
59
60 l_group_level_override varchar2(1) := NULL;
61 x_new_deprn_amount number;
62 x_new_bonus_amount number;
63 x_new_impairment_amount number;
64 l_rc number;
65
66 l_trxs_exist VARCHAR2(1);
67 l_calling_fn varchar2(40) := 'fa_asset_calc_pvt.calc_fin_info';
68 l_last_trx_count number;
69
70 l_deprn_reserve_exists number;
71
72 l_temp_deprn_reserve number; -- Used to pass deprn reserve depending whether
73 -- asset is in period of addition or not.
74 l_call_faxama boolean;
75
76 l_disabled_flag_changed boolean :=FALSE; --HH used to check
77 l_call_bs boolean := TRUE; --whether faxama for group should be called
78 -- or not
79 l_old_dpis date;
80
81 l_cap_temp_value number; -- temporary variable to manipulate eop(fy)_rec_cost(sal)
82 -- for capitalization.
83
84 l_nbv_for_sal number;
85 l_financial_info_changed BOOLEAN;
86
87 CURSOR c_get_member_trx is
88 select asset_id
89 , transaction_header_id
90 , transaction_type_code
91 , transaction_date_entered
92 , transaction_name
93 , source_transaction_header_id
94 , mass_reference_id
95 , transaction_subtype
96 , transaction_key
97 , amortization_start_date
98 , calling_interface
99 , mass_transaction_id
100 , member_transaction_header_id
101 , trx_reference_id
102 , last_update_date
103 , last_updated_by
104 , last_update_login
105 from fa_transaction_headers
106 where transaction_header_id = px_trans_rec.member_transaction_header_id;
107
108 -- Bug4958977: Introducing new cursor to trap dpis change only trx.
109 CURSOR c_check_dpis_change is
110 select inbk.transaction_header_id_in
111 from fa_books inbk
112 , fa_books outbk
113 where inbk.transaction_header_id_in = px_trans_rec.member_transaction_header_id
114 and outbk.asset_id = inbk.asset_id
115 and outbk.book_type_code = p_asset_hdr_rec.book_type_code
116 and outbk.transaction_header_id_out = px_trans_rec.member_transaction_header_id
117 and inbk.cost = outbk.cost
118 and nvl(inbk.salvage_value, 0) = nvl(outbk.salvage_value, 0)
119 and nvl(inbk.allowed_deprn_limit_amount, 0) = nvl(outbk.allowed_deprn_limit_amount, 0)
120 and inbk.date_placed_in_service <> outbk.date_placed_in_service;
121
122 --Bug8244128 Added a new cursor to fetch recognize_gain_loss
123 --from retirements table
124 CURSOR c_recognize_gain_loss_ret (l_thid number) is
125 select recognize_gain_loss
126 from fa_retirements
127 where transaction_header_id_in = l_thid;
128
129 CURSOR c_recognize_gain_loss_res (l_thid number) is
130 select recognize_gain_loss
131 from fa_retirements
132 where transaction_header_id_out = l_thid;
133
134 -- Bug 8520695
135 CURSOR c_check_addn is -- to check if there exists an addition transaction before current transaction
136 select count(1)
137 from fa_transaction_headers
138 where asset_id = p_asset_hdr_rec.asset_id
139 and transaction_header_id < px_trans_rec.transaction_header_id
140 and transaction_type_code = 'ADDITION';
141
142 l_addn_cnt number;
143 -- End Bug 8520695
144
145 -- Bug 10097181
146 cursor c_group_rcl_out is
147 select inbk.asset_id
148 from fa_books inbk
149 , fa_books outbk
150 where inbk.transaction_header_id_in = px_trans_rec.member_transaction_header_id
151 and outbk.asset_id = inbk.asset_id
152 and outbk.book_type_code = p_asset_hdr_rec.book_type_code
153 and outbk.transaction_header_id_out = inbk.transaction_header_id_in
154 and inbk.group_asset_id is null
155 and outbk.group_asset_id is not null;
156
157 l_group_rcl_out_asset number;
158
159 -- Bug4958977: following 2 new variables
160 l_temp_thid number;
161 l_dpis_change boolean := FALSE;
162
163 l_trans_rec FA_API_TYPES.trans_rec_type;
164 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
165 l_asset_desc_rec FA_API_TYPES.asset_desc_rec_type;
166 l_asset_fin_rec FA_API_TYPES.asset_fin_rec_type;
167 l_asset_cat_rec FA_API_TYPES.asset_cat_rec_type;
168 l_asset_type_rec FA_API_TYPES.asset_type_rec_type;
169 l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type; --Bug7008015
170
171 l_recognize_gain_loss VARCHAR2(5); -- Bug8244128
172
173 calc_err EXCEPTION;
174
175 BEGIN
176
177 if (p_log_level_rec.statement_level) then
178 fa_debug_pkg.add('calc_fin_info', 'at beginning of', 'calc_fin_info', p_log_level_rec => p_log_level_rec);
179 fa_debug_pkg.add('calc_fin_info',
180 'p_asset_fin_rec_adj.over_depreciate_option',
181 p_asset_fin_rec_adj.over_depreciate_option, p_log_level_rec => p_log_level_rec);
182 end if;
183
184
185 -- get category default info
186
187 l_jdpis := to_number(to_char(
188 nvl(px_asset_fin_rec_new.date_placed_in_service,
189 nvl(p_asset_fin_rec_adj.date_placed_in_service,
190 p_asset_fin_rec_old.date_placed_in_service)), 'J'));
191
192 if not fa_cache_pkg.fazccbd (X_book => p_asset_hdr_rec.book_type_code,
193 X_cat_id => p_asset_cat_rec.category_id,
194 X_jdpis => l_jdpis, p_log_level_rec => p_log_level_rec) then
195 raise calc_err;
196 end if;
197
198
199 -- load the global attribute information
200 FA_UTIL_PVT.load_char_value
201 (p_char_old => p_asset_fin_rec_old.global_attribute1,
202 p_char_adj => p_asset_fin_rec_adj.global_attribute1,
203 x_char_new => px_asset_fin_rec_new.global_attribute1, p_log_level_rec => p_log_level_rec);
204
205 FA_UTIL_PVT.load_char_value
206 (p_char_old => p_asset_fin_rec_old.global_attribute2,
207 p_char_adj => p_asset_fin_rec_adj.global_attribute2,
208 x_char_new => px_asset_fin_rec_new.global_attribute2, p_log_level_rec => p_log_level_rec);
209
210 FA_UTIL_PVT.load_char_value
211 (p_char_old => p_asset_fin_rec_old.global_attribute3,
212 p_char_adj => p_asset_fin_rec_adj.global_attribute3,
213 x_char_new => px_asset_fin_rec_new.global_attribute3, p_log_level_rec => p_log_level_rec);
214
215 FA_UTIL_PVT.load_char_value
216 (p_char_old => p_asset_fin_rec_old.global_attribute4,
217 p_char_adj => p_asset_fin_rec_adj.global_attribute4,
218 x_char_new => px_asset_fin_rec_new.global_attribute4, p_log_level_rec => p_log_level_rec);
219
220 FA_UTIL_PVT.load_char_value
221 (p_char_old => p_asset_fin_rec_old.global_attribute5,
222 p_char_adj => p_asset_fin_rec_adj.global_attribute5,
223 x_char_new => px_asset_fin_rec_new.global_attribute5, p_log_level_rec => p_log_level_rec);
224
225 FA_UTIL_PVT.load_char_value
226 (p_char_old => p_asset_fin_rec_old.global_attribute6,
227 p_char_adj => p_asset_fin_rec_adj.global_attribute6,
228 x_char_new => px_asset_fin_rec_new.global_attribute6, p_log_level_rec => p_log_level_rec);
229
230 FA_UTIL_PVT.load_char_value
231 (p_char_old => p_asset_fin_rec_old.global_attribute7,
232 p_char_adj => p_asset_fin_rec_adj.global_attribute7,
233 x_char_new => px_asset_fin_rec_new.global_attribute7, p_log_level_rec => p_log_level_rec);
234
235 FA_UTIL_PVT.load_char_value
236 (p_char_old => p_asset_fin_rec_old.global_attribute8,
237 p_char_adj => p_asset_fin_rec_adj.global_attribute8,
238 x_char_new => px_asset_fin_rec_new.global_attribute8, p_log_level_rec => p_log_level_rec);
239
240 FA_UTIL_PVT.load_char_value
241 (p_char_old => p_asset_fin_rec_old.global_attribute9,
242 p_char_adj => p_asset_fin_rec_adj.global_attribute9,
243 x_char_new => px_asset_fin_rec_new.global_attribute9, p_log_level_rec => p_log_level_rec);
244
245 FA_UTIL_PVT.load_char_value
246 (p_char_old => p_asset_fin_rec_old.global_attribute10,
247 p_char_adj => p_asset_fin_rec_adj.global_attribute10,
248 x_char_new => px_asset_fin_rec_new.global_attribute10, p_log_level_rec => p_log_level_rec);
249
250 FA_UTIL_PVT.load_char_value
251 (p_char_old => p_asset_fin_rec_old.global_attribute11,
252 p_char_adj => p_asset_fin_rec_adj.global_attribute11,
253 x_char_new => px_asset_fin_rec_new.global_attribute11, p_log_level_rec => p_log_level_rec);
254
255 FA_UTIL_PVT.load_char_value
256 (p_char_old => p_asset_fin_rec_old.global_attribute12,
257 p_char_adj => p_asset_fin_rec_adj.global_attribute12,
258 x_char_new => px_asset_fin_rec_new.global_attribute12, p_log_level_rec => p_log_level_rec);
259
260 FA_UTIL_PVT.load_char_value
261 (p_char_old => p_asset_fin_rec_old.global_attribute13,
262 p_char_adj => p_asset_fin_rec_adj.global_attribute13,
263 x_char_new => px_asset_fin_rec_new.global_attribute13, p_log_level_rec => p_log_level_rec);
264
265 FA_UTIL_PVT.load_char_value
266 (p_char_old => p_asset_fin_rec_old.global_attribute14,
267 p_char_adj => p_asset_fin_rec_adj.global_attribute14,
268 x_char_new => px_asset_fin_rec_new.global_attribute14, p_log_level_rec => p_log_level_rec);
269
270 FA_UTIL_PVT.load_char_value
271 (p_char_old => p_asset_fin_rec_old.global_attribute15,
272 p_char_adj => p_asset_fin_rec_adj.global_attribute15,
273 x_char_new => px_asset_fin_rec_new.global_attribute15, p_log_level_rec => p_log_level_rec);
274
275 FA_UTIL_PVT.load_char_value
276 (p_char_old => p_asset_fin_rec_old.global_attribute16,
277 p_char_adj => p_asset_fin_rec_adj.global_attribute16,
278 x_char_new => px_asset_fin_rec_new.global_attribute16, p_log_level_rec => p_log_level_rec);
279
280 FA_UTIL_PVT.load_char_value
281 (p_char_old => p_asset_fin_rec_old.global_attribute17,
282 p_char_adj => p_asset_fin_rec_adj.global_attribute17,
283 x_char_new => px_asset_fin_rec_new.global_attribute17, p_log_level_rec => p_log_level_rec);
284
285 FA_UTIL_PVT.load_char_value
286 (p_char_old => p_asset_fin_rec_old.global_attribute18,
287 p_char_adj => p_asset_fin_rec_adj.global_attribute18,
288 x_char_new => px_asset_fin_rec_new.global_attribute18, p_log_level_rec => p_log_level_rec);
289
290 FA_UTIL_PVT.load_char_value
291 (p_char_old => p_asset_fin_rec_old.global_attribute19,
292 p_char_adj => p_asset_fin_rec_adj.global_attribute19,
293 x_char_new => px_asset_fin_rec_new.global_attribute19, p_log_level_rec => p_log_level_rec);
294
295 FA_UTIL_PVT.load_char_value
296 (p_char_old => p_asset_fin_rec_old.global_attribute20,
297 p_char_adj => p_asset_fin_rec_adj.global_attribute20,
298 x_char_new => px_asset_fin_rec_new.global_attribute20, p_log_level_rec => p_log_level_rec);
299
300 FA_UTIL_PVT.load_char_value
301 (p_char_old => p_asset_fin_rec_old.global_attribute_category,
302 p_char_adj => p_asset_fin_rec_adj.global_attribute_category,
303 x_char_new => px_asset_fin_rec_new.global_attribute_category, p_log_level_rec => p_log_level_rec);
304
305 -- Changes made as per the ER No.s 6606548 and 6606552 by Sbyreddy Start
306
307 FA_UTIL_PVT.load_num_value
308 (p_num_old => p_asset_fin_rec_old.nbv_at_switch,
309 p_num_adj => p_asset_fin_rec_adj.nbv_at_switch,
310 x_num_new => px_asset_fin_rec_new.nbv_at_switch, p_log_level_rec => p_log_level_rec);
311
312 FA_UTIL_PVT.load_char_value
313 (p_char_old => p_asset_fin_rec_old.prior_deprn_limit_type,
314 p_char_adj => p_asset_fin_rec_adj.prior_deprn_limit_type,
315 x_char_new => px_asset_fin_rec_new.prior_deprn_limit_type, p_log_level_rec => p_log_level_rec);
316
317 FA_UTIL_PVT.load_num_value
318 (p_num_old => p_asset_fin_rec_old.prior_deprn_limit_amount,
319 p_num_adj => p_asset_fin_rec_adj.prior_deprn_limit_amount,
320 x_num_new => px_asset_fin_rec_new.prior_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
321
322 FA_UTIL_PVT.load_num_value
323 (p_num_old => p_asset_fin_rec_old.prior_deprn_limit,
324 p_num_adj => p_asset_fin_rec_adj.prior_deprn_limit,
325 x_num_new => px_asset_fin_rec_new.prior_deprn_limit, p_log_level_rec => p_log_level_rec);
326
327 --Bug 8620902 No need to set px_asset_fin_rec_new.period_counter_fully_reserved as it will
328 -- be set to null by adj and later set by depreciation.
329 --bug 8819226 commenting this as same thing is handelled below also.
330 /*IF (nvl(p_asset_fin_rec_old.extended_deprn_flag, '-1') <>
331 nvl(p_asset_fin_rec_adj.extended_deprn_flag, '-1')) and
332 nvl(fnd_profile.value('FA_JAPAN_TAX_REFORMS'),'N') = 'Y' then
333
334 FA_UTIL_PVT.load_num_value
335 (p_num_old => p_asset_fin_rec_old.period_counter_fully_reserved,
336 p_num_adj => p_asset_fin_rec_adj.period_counter_fully_reserved,
337 x_num_new => px_asset_fin_rec_new.period_counter_fully_reserved,
338 p_log_level_rec => p_log_level_rec);
339
340 END IF;*/
341
342 FA_UTIL_PVT.load_num_value
343 (p_num_old => p_asset_fin_rec_old.extended_depreciation_period,
344 p_num_adj => p_asset_fin_rec_adj.extended_depreciation_period,
345 x_num_new => px_asset_fin_rec_new.extended_depreciation_period, p_log_level_rec => p_log_level_rec);
346
347 FA_UTIL_PVT.load_char_value
348 (p_char_old => p_asset_fin_rec_old.prior_deprn_method,
349 p_char_adj => p_asset_fin_rec_adj.prior_deprn_method,
350 x_char_new => px_asset_fin_rec_new.prior_deprn_method, p_log_level_rec => p_log_level_rec);
351
352 FA_UTIL_PVT.load_num_value
353 (p_num_old => p_asset_fin_rec_old.prior_life_in_months,
354 p_num_adj => p_asset_fin_rec_adj.prior_life_in_months,
355 x_num_new => px_asset_fin_rec_new.prior_life_in_months, p_log_level_rec => p_log_level_rec);
356
357 FA_UTIL_PVT.load_num_value
358 (p_num_old => p_asset_fin_rec_old.prior_basic_rate,
359 p_num_adj => p_asset_fin_rec_adj.prior_basic_rate,
360 x_num_new => px_asset_fin_rec_new.prior_basic_rate, p_log_level_rec => p_log_level_rec);
361
362 FA_UTIL_PVT.load_num_value
363 (p_num_old => p_asset_fin_rec_old.prior_adjusted_rate,
364 p_num_adj => p_asset_fin_rec_adj.prior_adjusted_rate,
365 x_num_new => px_asset_fin_rec_new.prior_adjusted_rate, p_log_level_rec => p_log_level_rec);
366 -- Changes made as per the ER No.s 6606548 and 6606552 by End
367
368 if (px_trans_rec.transaction_type_code = 'ADDITION' or
369 px_trans_rec.transaction_type_code = 'CIP ADDITION' or
370 px_trans_rec.transaction_type_code = 'GROUP ADDITION' or
371 px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
372 px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT' or
373 px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT') then
374
375 -- Bug:8240522
376 FA_UTIL_PVT.load_num_value
377 (p_num_old => p_asset_fin_rec_old.contract_id,
378 p_num_adj => p_asset_fin_rec_adj.contract_id,
379 x_num_new => px_asset_fin_rec_new.contract_id, p_log_level_rec => p_log_level_rec);
380
381 px_asset_fin_rec_new.prorate_convention_code :=
382 nvl(p_asset_fin_rec_adj.prorate_convention_code,
383 nvl(p_asset_fin_rec_old.prorate_convention_code,
384 fa_cache_pkg.fazccbd_record.prorate_convention_code));
385 px_asset_fin_rec_new.depreciate_flag :=
386 nvl(p_asset_fin_rec_adj.depreciate_flag,
387 nvl(p_asset_fin_rec_old.depreciate_flag,
388 fa_cache_pkg.fazccbd_record.depreciate_flag));
389
390 --HH group ed.
391 px_asset_fin_rec_new.disabled_flag := p_asset_fin_rec_adj.disabled_flag;
392 --End HH
393 -- the following values can be nulled out either during
394 -- an adjustment (exc bonus) or during addition in comparison to
395 -- what would have been defaulted from the category.
396
397 -- note we check the old method because trx_type is not
398 -- enough as we only want the cat defaulting to occur
399 -- during the initial addition, not during a void in period of add
400
401 FA_UTIL_PVT.load_char_value
402 (p_char_old => p_asset_fin_rec_old.bonus_rule,
403 p_char_adj => p_asset_fin_rec_adj.bonus_rule,
404 x_char_new => px_asset_fin_rec_new.bonus_rule, p_log_level_rec => p_log_level_rec);
405
406 -- do not allow the nulling out of bonus rule during adj
407 if (px_asset_fin_rec_new.bonus_rule is null and
408 p_asset_fin_rec_old.bonus_rule is not null) then
409 fa_srvr_msg.add_message(
410 calling_fn => l_calling_fn,
411 name => 'FA_DEPRN_UPDATE_BONUS_RULE', p_log_level_rec => p_log_level_rec);
412 raise calc_err;
413 end if;
414
415 FA_UTIL_PVT.load_char_value
416 (p_char_old => p_asset_fin_rec_old.ceiling_name,
417 p_char_adj => p_asset_fin_rec_adj.ceiling_name,
418 x_char_new => px_asset_fin_rec_new.ceiling_name, p_log_level_rec => p_log_level_rec);
419
420 -- This is for FLAT RATE EXTENSION deprn basis rule
421 FA_UTIL_PVT.load_char_value
422 (p_char_old => p_asset_fin_rec_old.exclude_fully_rsv_flag,
423 p_char_adj => p_asset_fin_rec_adj.exclude_fully_rsv_flag,
424 x_char_new => px_asset_fin_rec_new.exclude_fully_rsv_flag, p_log_level_rec => p_log_level_rec);
425
426 FA_UTIL_PVT.load_num_value
427 (p_num_old => p_asset_fin_rec_old.cash_generating_unit_id,
428 p_num_adj => p_asset_fin_rec_adj.cash_generating_unit_id,
429 x_num_new => px_asset_fin_rec_new.cash_generating_unit_id, p_log_level_rec => p_log_level_rec);
430
431 if p_asset_type_rec.asset_type <> 'GROUP' then
432
433 FA_UTIL_PVT.load_num_value
434 (p_num_old => p_asset_fin_rec_old.group_asset_id,
435 p_num_adj => p_asset_fin_rec_adj.group_asset_id,
436 x_num_new => px_asset_fin_rec_new.group_asset_id, p_log_level_rec => p_log_level_rec);
437
438 -- validate new group info
439 if (px_asset_fin_rec_new.group_asset_id is not null) then
440 -- verify the asset exist in the book already
441 if not FA_ASSET_VAL_PVT.validate_group_asset
442 (p_group_asset_id => px_asset_fin_rec_new.group_asset_id,
443 p_book_type_code => p_asset_hdr_rec.book_type_code,
444 p_asset_type => p_asset_type_rec.asset_type
445 , p_log_level_rec => p_log_level_rec) then
446 raise calc_err;
447 end if;
448
449 end if;
450
451 end if;
452
453 if not calc_new_amounts
454 (px_trans_rec => px_trans_rec,
455 p_asset_hdr_rec => p_asset_hdr_rec,
456 p_asset_desc_rec => p_asset_desc_rec,
457 p_asset_type_rec => p_asset_type_rec,
458 p_asset_cat_rec => p_asset_cat_rec,
459 p_asset_fin_rec_old => p_asset_fin_rec_old,
460 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
461 px_asset_fin_rec_new => px_asset_fin_rec_new,
462 p_asset_deprn_rec_old => p_asset_deprn_rec_old,
463 p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
464 px_asset_deprn_rec_new => px_asset_deprn_rec_new,
465 p_mrc_sob_type_code => p_mrc_sob_type_code,
466 p_log_level_rec => p_log_level_rec
467 ) then
468 raise calc_err;
469 end if;
470
471 -- BUG# 3200703
472 -- do not allow amortization if not allowed at book level
473
474 if ((px_trans_rec.transaction_subtype = 'AMORTIZED' or
475 px_trans_rec.amortization_start_date is not null) and
476 fa_cache_pkg.fazcbc_record.amortize_flag = 'NO') then
477 fa_srvr_msg.add_message(
478 calling_fn => l_calling_fn,
479 name => 'FA_BOOK_AMORTIZED_NOT_ALLOW', p_log_level_rec => p_log_level_rec);
480 raise calc_err;
481 end if;
482
483 if (p_log_level_rec.statement_level) then
484 fa_debug_pkg.add('calc_new_info before Rsv change validate',
485 'p_asset_deprn_rec_adj.deprn_reserve',
486 p_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec => p_log_level_rec);
487 fa_debug_pkg.add('calc_new_info before Rsv change validate',
488 'p_asset_deprn_rec_adj.ytd_deprn',
489 p_asset_deprn_rec_adj.ytd_deprn, p_log_level_rec => p_log_level_rec);
490 end if;
491
492 -- Bug 12894769 : The validation needed for group only when adjustment performed directly on group
493 -- Bug 12612333 : Moved the validation from FAPADJB.pls
494 -- Bug 8471701 : Prevent reserve change if any 'B' row distribution is inactive
495 if ((nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) <> 0) or (nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) <> 0)) and
496 (p_asset_hdr_rec.period_of_addition = 'Y') and
497 (g_release <> 11) and
498 ((p_asset_type_rec.asset_type <> 'GROUP') or
499 ((p_asset_type_rec.asset_type = 'GROUP') and (nvl(px_trans_rec.transaction_key, 'XX') = 'GJ'))) then
500
501 if not FA_ASSET_VAL_PVT.validate_ltd_deprn_change
502 (p_book_type_code => p_asset_hdr_rec.book_type_code,
503 p_asset_Id => p_asset_hdr_rec.asset_id,
504 p_calling_fn => l_calling_fn,
505 p_log_level_rec => p_log_level_rec) then
506 raise calc_err;
507 end if;
508
509 end if;
510 -- End Bug 8471701
511
512 -- keeping this code after moving validate_asset_book call above
513 -- but not sure if it's correct ???
514 if (px_asset_fin_rec_new.group_asset_id is not null) then
515 if (px_asset_fin_rec_new.super_group_id is not null) then
516 -- *** validate super group exists ***
517 fa_srvr_msg.add_message(
518 calling_fn => l_calling_fn,
519 name => 'FA_NO_SUPER_GROUP_ALLOWED', p_log_level_rec => p_log_level_rec);
520 raise calc_err;
521 end if;
522 end if;
523
524 if (p_calling_fn = 'fa_cip_pvt.do_cap_rev') then
525 l_old_dpis := px_asset_fin_rec_new.date_placed_in_service;
526 else
527 l_old_dpis := p_asset_fin_rec_old.date_placed_in_service;
528 end if;
529
530 if not fa_asset_val_pvt.validate_dpis
531 (p_transaction_type_code => px_trans_rec.transaction_type_code,
532 p_book_type_code => p_asset_hdr_rec.book_type_code,
533 p_date_placed_in_service =>
534 px_asset_fin_rec_new.date_placed_in_service,
535 p_prorate_convention_code =>
536 px_asset_fin_rec_new.prorate_convention_code,
537 p_old_date_placed_in_service => -- Bug3724207
538 l_old_dpis, -- Bug3724207
539 p_asset_id => p_asset_hdr_rec.asset_id, -- Bug3724207
540 p_transaction_subtype => px_trans_rec.transaction_subtype,
541 p_asset_type => p_asset_type_rec.asset_type, -- bug 5501090
542 p_calling_interface => px_trans_rec.calling_interface,
543 p_calling_fn => l_calling_fn
544 , p_log_level_rec => p_log_level_rec)then
545 raise calc_err;
546 end if;
547
548 if (px_asset_fin_rec_new.group_asset_id is not null) then
549 if not fa_asset_val_pvt.validate_member_dpis
550 (p_book_type_code => p_asset_hdr_rec.book_type_code,
551 p_date_placed_in_service =>
552 px_asset_fin_rec_new.date_placed_in_service,
553 p_group_asset_Id =>
554 px_asset_fin_rec_new.group_asset_id,
555 p_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec) then
556 raise calc_err;
557 end if;
558 end if;
559
560 if not fa_asset_val_pvt.validate_depreciate_flag
561 (p_depreciate_flag => px_asset_fin_rec_new.depreciate_flag,
562 p_calling_fn => l_calling_fn
563 , p_log_level_rec => p_log_level_rec) then
564 raise calc_err;
565 end if;
566
567 -- need to calc the prorate date before calling calc_deprn_info
568 -- due to subcomponent life rule defaulting
569
570
571 if not calc_prorate_date
572 (p_asset_hdr_rec => p_asset_hdr_rec,
573 p_asset_type_rec => p_asset_type_rec,
574 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
575 px_asset_fin_rec_new => px_asset_fin_rec_new,
576 p_period_rec => p_period_rec,
577 p_log_level_rec => p_log_level_rec
578 ) then
579 raise calc_err;
580 end if;
581
582 if not calc_deprn_info
583 (p_trans_rec => px_trans_rec,
584 p_asset_hdr_rec => p_asset_hdr_rec,
585 p_asset_desc_rec => p_asset_desc_rec,
586 p_asset_cat_rec => p_asset_cat_rec,
587 p_asset_type_rec => p_asset_type_rec,
588 p_asset_fin_rec_old => p_asset_fin_rec_old,
589 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
590 px_asset_fin_rec_new => px_asset_fin_rec_new,
591 p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
592 p_asset_deprn_rec_new => px_asset_deprn_rec_new,
593 p_period_rec => p_period_rec,
594 p_log_level_rec => p_log_level_rec
595 ) then
596 raise calc_err;
597 end if;
598
599 if not calc_derived_amounts
600 (px_trans_rec => px_trans_rec,
601 p_asset_hdr_rec => p_asset_hdr_rec,
602 p_asset_desc_rec => p_asset_desc_rec,
603 p_asset_type_rec => p_asset_type_rec,
604 p_asset_cat_rec => p_asset_cat_rec,
605 p_asset_fin_rec_old => p_asset_fin_rec_old,
606 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
607 px_asset_fin_rec_new => px_asset_fin_rec_new,
608 p_asset_deprn_rec_old => p_asset_deprn_rec_old,
609 p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
610 px_asset_deprn_rec_new => px_asset_deprn_rec_new,
611 p_period_rec => p_period_rec,
612 p_mrc_sob_type_code => p_mrc_sob_type_code,
613 p_log_level_rec => p_log_level_rec
614 ) then
615 raise calc_err;
616 end if;
617
618 if p_asset_type_rec.asset_type <> 'GROUP' then
619 -- member level information must be copied from old to new
620 if px_asset_fin_rec_new.group_asset_id is not null then
621
622 if not calc_member_info
623 (p_trans_rec => px_trans_rec,
624 p_asset_hdr_rec => p_asset_hdr_rec,
625 p_asset_fin_rec_old => p_asset_fin_rec_old,
626 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
627 px_asset_fin_rec_new => px_asset_fin_rec_new,
628 p_asset_deprn_rec_old => p_asset_deprn_rec_old,
629 p_log_level_rec => p_log_level_rec
630 ) then
631 raise calc_err;
632 end if;
633
634 else
635
636 if not calc_standalone_info
637 (p_asset_hdr_rec => p_asset_hdr_rec,
638 p_asset_fin_rec_old => p_asset_fin_rec_old,
639 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
640 px_asset_fin_rec_new => px_asset_fin_rec_new,
641 p_asset_deprn_rec_new => px_asset_deprn_rec_new,
642 p_log_level_rec => p_log_level_rec
643 ) then
644 raise calc_err;
645 end if;
646 end if; -- (px_asset_fin_rec_new.group_asset_id is not null)
647
648 else -- Asset type is Group
649 --HH Validate disabled_flag
650 if not FA_ASSET_VAL_PVT.validate_disabled_flag
651 (p_group_asset_id => px_asset_fin_rec_new.group_asset_id,
652 p_book_type_code => p_asset_hdr_rec.book_type_code,
653 p_old_flag => p_asset_fin_rec_old.disabled_flag,
654 p_new_flag => px_asset_fin_rec_new.disabled_flag
655 , p_log_level_rec => p_log_level_rec) then
656 raise calc_err;
657 end if;
658
659 -- the following line is where we could allowed multi-tier
660 -- group associates / hierarchies is desired
661 px_asset_fin_rec_new.group_asset_id := NULL;
662
663 if (p_log_level_rec.statement_level) then
664 fa_debug_pkg.add('calc_new_info before calc group',
665 'p_asset_fin_rec_adj.over_depreciate_option',
666 p_asset_fin_rec_adj.over_depreciate_option, p_log_level_rec => p_log_level_rec);
667 end if;
668
669 if not FA_ASSET_VAL_PVT.validate_super_group (
670 p_book_type_code => p_asset_hdr_rec.book_type_code,
671 p_old_super_group_id => p_asset_fin_rec_old.super_group_id,
672 p_new_super_group_id => px_asset_fin_rec_new.super_group_id,
673 p_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec) then
674
675 if (p_log_level_rec.statement_level) then
676 fa_debug_pkg.add(l_calling_fn, 'Error calling function', 'FA_ASSET_VAL_PVT.validate_super_group', p_log_level_rec => p_log_level_rec);
677 end if;
678
679 raise calc_err;
680 end if;
681
682 if not calc_group_info
683 (p_trans_rec => px_trans_rec,
684 p_asset_hdr_rec => p_asset_hdr_rec,
685 p_asset_fin_rec_old => p_asset_fin_rec_old,
686 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
687 px_asset_fin_rec_new => px_asset_fin_rec_new,
688 p_asset_deprn_rec_old => p_asset_deprn_rec_old,
689 p_log_level_rec => p_log_level_rec
690 ) then
691 raise calc_err;
692 end if;
693
694 -- SLA: ***REVISIT***
695 if ( p_asset_hdr_rec.period_of_addition = 'Y' and
696 nvl(fa_cache_pkg.fazcdbr_record.rule_name,'ZZ') <> 'ENERGY PERIOD END BALANCE' ) then
697 l_temp_deprn_reserve := px_asset_deprn_rec_new.deprn_reserve;
698 else
699 l_temp_deprn_reserve := to_number(null);
700 end if;
701 if not (nvl(p_group_reclass_options_rec.group_reclass_type,'XXX') = 'CALC' and
702 px_asset_fin_rec_new.tracking_method is null and
703 nvl(p_asset_fin_rec_old.group_asset_id, -99) = nvl(px_asset_fin_rec_new.group_asset_id, -99)) then
704 if not fa_asset_val_pvt.validate_over_depreciate
705 (p_asset_hdr_rec => p_asset_hdr_rec,
706 p_asset_type => p_asset_type_rec.asset_type,
707 p_over_depreciate_option => px_asset_fin_rec_new.over_depreciate_option,
708 p_adjusted_recoverable_cost => px_asset_fin_rec_new.adjusted_recoverable_cost,
709 p_recoverable_cost => px_asset_fin_rec_new.recoverable_cost,
710 p_deprn_reserve_new => l_temp_deprn_reserve,
711 p_rate_source_rule => fa_cache_pkg.fazccmt_record.rate_source_rule,
712 p_deprn_basis_rule => fa_cache_pkg.fazccmt_record.deprn_basis_rule,
713 p_recapture_reserve_flag => px_asset_fin_rec_new.recapture_reserve_flag,
714 p_deprn_limit_type => px_asset_fin_rec_new.deprn_limit_type
715 , p_log_level_rec => p_log_level_rec) then
716 raise calc_err;
717 end if;
718 end if;
719 end if; --p_asset_type_rec.asset_type
720
721 /* bug#10094653 - validating unit_of_measure */
722 if fa_cache_pkg.fazccmt_record.rate_source_rule = 'PRODUCTION' then
723 if not fa_asset_val_pvt.validate_unit_of_measure(p_unit_of_measure => px_asset_fin_rec_new.unit_of_measure,
724 p_calling_fn => l_calling_fn,
725 p_log_level_rec => p_log_level_rec) then
726 if (p_log_level_rec.statement_level) then
727 fa_debug_pkg.add(l_calling_fn, 'Failed calling',
728 'FA_ASSET_VAL_PVT.validate_unit_of_measure', p_log_level_rec => p_log_level_rec);
729 end if;
730 raise calc_err;
731 end if;
732 end if;
733
734 -- Bug 9916378
735 if not FA_ASSET_VAL_PVT.validate_uop_method
736 (p_asset_hdr_rec => p_asset_hdr_rec,
737 p_asset_type_rec => p_asset_type_rec,
738 p_asset_fin_rec => px_asset_fin_rec_new,
739 p_asset_fin_rec_old => p_asset_fin_rec_old,
740 p_asset_deprn_rec => p_asset_deprn_rec_old,
741 p_log_level_rec => p_log_level_rec) then
742 raise calc_err;
743 end if;
744
745 -- Bug 9916378
746 if not FA_ASSET_VAL_PVT.validate_prev_period_amort
747 (p_asset_hdr_rec => p_asset_hdr_rec,
748 p_trans_rec => px_trans_rec,
749 p_period_rec => p_period_rec,
750 p_asset_retire_rec => null,
751 p_log_level_rec => p_log_level_rec) then
752 raise calc_err;
753 end if;
754
755 -- Check to prevent prior period trx with Energy UOP
756 if not FA_ASSET_VAL_PVT.validate_egy_prod_date (
757 p_calendar_period_start_date => p_period_rec.calendar_period_open_date,
758 p_transaction_date => nvl(px_trans_rec.amortization_start_date,
759 px_trans_rec.transaction_date_entered),
760 p_transaction_key => px_trans_rec.transaction_key,
761 p_rate_source_rule => fa_cache_pkg.fazccmt_record.rate_source_rule,
762 p_rule_name => fa_cache_pkg.fazcdrd_record.rule_name,
763 p_calling_fn => l_calling_fn,
764 p_log_level_rec => p_log_level_rec) then
765 if (p_log_level_rec.statement_level) then
766 fa_debug_pkg.add(l_calling_fn, 'Failed calling',
767 'FA_ASSET_VAL_PVT.validate_egy_prod_date', p_log_level_rec => p_log_level_rec);
768 end if;
769 raise calc_err;
770 end if;
771
772 if not FA_ASSET_VAL_PVT.validate_bonus_rule_resv
773 (p_asset_hdr_rec => p_asset_hdr_rec,
774 p_asset_desc_rec => p_asset_desc_rec,
775 p_asset_type_rec => p_asset_type_rec,
776 p_asset_fin_rec => px_asset_fin_rec_new,
777 p_asset_deprn_rec => px_asset_deprn_rec_new,
778 p_calling_fn => l_calling_fn,
779 p_log_level_rec => p_log_level_rec) then
780 if (p_log_level_rec.statement_level) then
781 fa_debug_pkg.add(l_calling_fn, 'Failed calling',
782 'FA_ASSET_VAL_PVT.validate_bonus_rule_resv', p_log_level_rec => p_log_level_rec);
783 end if;
784 raise calc_err;
785 end if;
786
787 if (px_trans_rec.transaction_type_code in
788 ('ADDITION', 'CIP ADDITION', 'GROUP ADDITION',
789 'ADJUSTMENT', 'CIP ADJUSTMENT', 'GROUP ADJUSTMENT')) then
790
791 -- Fix for Bug #3187975. Do Polish rule validations.
792
793 -- Check adjustment (since old rec is null for regular addition)
794 -- For adjustment, this is to prevent a method change out of a
795 -- polish rule as well as a regular adjustment.
796 if (p_asset_fin_rec_old.deprn_method_code is not null) then
797 if not FA_ASSET_VAL_PVT.validate_polish (
798 p_transaction_type_code => 'ADJUSTMENT',
799 p_method_code => p_asset_fin_rec_old.deprn_method_code,
800 p_life_in_months => p_asset_fin_rec_old.life_in_months,
801 p_asset_type => p_asset_type_rec.asset_type,
802 p_bonus_rule => p_asset_fin_rec_old.bonus_rule,
803 p_ceiling_name => p_asset_fin_rec_old.ceiling_name,
804 p_deprn_limit_type => p_asset_fin_rec_old.deprn_limit_type,
805 p_group_asset_id => p_asset_fin_rec_old.group_asset_id,
806 p_calling_fn => l_calling_fn
807 , p_log_level_rec => p_log_level_rec) then
808 raise calc_err;
809 end if;
810
811 -- For adjustment, this is to prevent a method change into a
812 -- polish rule as well as a regular adjustment.
813 if not FA_ASSET_VAL_PVT.validate_polish (
814 p_transaction_type_code => 'ADJUSTMENT',
815 p_method_code =>
816 px_asset_fin_rec_new.deprn_method_code,
817 p_life_in_months => px_asset_fin_rec_new.life_in_months,
818 p_asset_type => p_asset_type_rec.asset_type,
819 p_bonus_rule => px_asset_fin_rec_new.bonus_rule,
820 p_ceiling_name => px_asset_fin_rec_new.ceiling_name,
821 p_deprn_limit_type => px_asset_fin_rec_new.deprn_limit_type,
822 p_group_asset_id => px_asset_fin_rec_new.group_asset_id,
823 p_calling_fn => l_calling_fn
824 , p_log_level_rec => p_log_level_rec) then
825 raise calc_err;
826 end if;
827 else
828 -- Validate addition since old rec is null.
829 if not FA_ASSET_VAL_PVT.validate_polish (
830 p_transaction_type_code => 'ADDITION',
831 p_method_code =>
832 px_asset_fin_rec_new.deprn_method_code,
833 p_life_in_months => px_asset_fin_rec_new.life_in_months,
834 p_asset_type => p_asset_type_rec.asset_type,
835 p_bonus_rule => px_asset_fin_rec_new.bonus_rule,
836 p_ceiling_name => px_asset_fin_rec_new.ceiling_name,
837 p_deprn_limit_type => px_asset_fin_rec_new.deprn_limit_type,
838 p_group_asset_id => px_asset_fin_rec_new.group_asset_id,
839 p_date_placed_in_service
840 =>
841 px_asset_fin_rec_new.date_placed_in_service,
842 p_calendar_period_open_date
843 =>
844 p_period_rec.calendar_period_open_date,
845 p_ytd_deprn => px_asset_deprn_rec_new.ytd_deprn,
846 p_deprn_reserve => px_asset_deprn_rec_new.deprn_reserve,
847 p_calling_fn => l_calling_fn
848 , p_log_level_rec => p_log_level_rec) then
849 raise calc_err;
850 end if;
851 end if;
852 end if;
853
854 -- Bug 10025180 : Do not allow extending of asset in the period in which it got fully reserved in current period
855 -- Bug 12593804 : Do not allow extended asset addition which is fully reserved in current period
856 if ((nvl(px_asset_fin_rec_new.extended_deprn_flag,'N') = 'Y') and
857 (nvl(p_asset_fin_rec_old.extended_deprn_flag,'D') in ('D','N'))) then
858
859 if not FA_ASSET_VAL_PVT.validate_extending_asset
860 (p_asset_hdr_rec => p_asset_hdr_rec,
861 p_asset_fin_rec_old => p_asset_fin_rec_old,
862 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
863 p_asset_type_rec => p_asset_type_rec,
864 p_period_rec => p_period_rec,
865 p_log_level_rec => p_log_level_rec) then
866 raise calc_err;
867 end if;
868
869 end if;
870
871 -- perform final validation on all calculated amounts
872 -- and only do so in the period of addition
873
874 -- do not perform this check on groups nor on assets which
875 -- may have been in a group during the period of addition
876 -- the latter poses a problem in that this could be called
877 -- from a transaction following a group reclass such that
878 -- there is no difference in old and new. We might have
879 -- do see if the asset was ever in a group than bypass
880
881 -- R12 conditional handling
882 -- SLA Uptake
883 -- further restricting only to the first ADDITION
884 -- bug 8649223 (Added condition px_trans_rec.transaction_type_code = 'ADJUSTMENT')
885 if (p_asset_hdr_rec.period_of_addition = 'Y' and
886 p_asset_type_rec.asset_type <> 'GROUP' and
887 p_asset_fin_rec_old.group_asset_id is null and
888 px_asset_fin_rec_new.group_asset_id is null and
889 (G_release = 11 or
890 (px_trans_rec.transaction_type_code = 'ADDITION' or
891 -- px_trans_rec.transaction_type_code = 'ADJUSTMENT' or -- reverted for bug 8765988
892 px_trans_rec.transaction_type_code = 'CIP ADDITION'))) then
893
894 -- BUG# 2323997
895 -- no longer calling validate_rec_cost_reserve here
896 -- as it is handled by the following check for non-deprn-basis
897 -- assets... also changed passed value to be adj_rec_cost - BMR
898
899 ---------Added by Satish Byreddy As part of Reverse Catch up calculation Bug No. 6951549
900
901 if (nvl(px_asset_fin_rec_new.extended_deprn_flag,'X') in ('N','D',FND_API.G_MISS_CHAR)) then
902 l_reset_extend_flag := TRUE;
903 l_extended_flag := FALSE; -- Bug 6737486 don't need validations when resetting
904 ELSE
905 l_reset_extend_flag := FALSE;
906
907 end if;
908
909 IF NOT (l_reset_extend_flag) THEN
910
911 if not fa_asset_val_pvt.validate_adj_rec_cost
912 (p_adjusted_recoverable_cost => px_asset_fin_rec_new.adjusted_recoverable_cost,
913 p_deprn_reserve => px_asset_deprn_rec_new.deprn_reserve,
914 p_calling_fn => l_calling_fn
915 , p_log_level_rec => p_log_level_rec) then
916 raise calc_err;
917 end if;
918 END IF;
919
920 ---------End OF Addition by Satish Byreddy As part of Reverse Catch up calculation Bug No. 6951549
921
922 /*Bug#9682863 - Modified the parameters - instead of individual value passing records. */
923 if not fa_asset_val_pvt.validate_ytd_reserve
924 (p_asset_hdr_rec => p_asset_hdr_rec,
925 p_asset_type_rec => p_asset_type_rec,
926 p_asset_fin_rec_new => px_asset_fin_rec_new,
927 p_asset_deprn_rec_new => px_asset_deprn_rec_new,
928 p_asset_deprn_rec_old => p_asset_deprn_rec_old, -- Fix for bug 8790562
929 p_period_rec => p_period_rec,
930 p_calling_fn => l_calling_fn
931 , p_log_level_rec => p_log_level_rec) then
932 raise calc_err;
933 end if;
934
935 -- Bug 7491479 Need to set the period counter fully reserved if the asset was
936 -- added with cost = reserve
937 -- Bug 12556691 : Need to check deprn_limit_type to find out if deprn limit is used
938
939 if (nvl(fnd_profile.value('FA_JAPAN_TAX_REFORMS'),'N') = 'N' OR
940 (nvl(fnd_profile.value('FA_JAPAN_TAX_REFORMS'),'N') = 'Y' AND
941 px_asset_fin_rec_new.deprn_method_code <> 'JP-STL-EXTND')) then
942 if (p_asset_type_rec.asset_type = 'CAPITALIZED') then
943 if (nvl(px_asset_fin_rec_new.cost,0) <> 0) then
944 if (nvl(p_asset_fin_rec_adj.period_counter_fully_reserved, -- Bug 7661870
945 p_period_rec.period_counter) = p_period_rec.period_counter) then
946 if (px_asset_fin_rec_new.deprn_limit_type <> 'NONE') then
947 if (nvl(px_asset_fin_rec_new.cost,0) -
948 nvl(px_asset_deprn_rec_new.deprn_reserve,0) -
949 nvl(px_asset_fin_rec_new.allowed_deprn_limit_amount,0) = 0) then
950 px_asset_fin_rec_new.period_counter_fully_reserved :=
951 p_period_rec.period_counter;
952 px_asset_fin_rec_new.period_counter_life_complete :=
953 p_period_rec.period_counter;
954 else
955 px_asset_fin_rec_new.period_counter_fully_reserved := null;
956 px_asset_fin_rec_new.period_counter_life_complete := null;
957 end if;
958 else
959 if (nvl(px_asset_fin_rec_new.cost,0) -
960 nvl(px_asset_deprn_rec_new.deprn_reserve,0) -
961 nvl(px_asset_fin_rec_new.salvage_value,0) = 0) then
962 px_asset_fin_rec_new.period_counter_fully_reserved :=
963 p_period_rec.period_counter;
964 px_asset_fin_rec_new.period_counter_life_complete :=
965 p_period_rec.period_counter;
966 else
967 px_asset_fin_rec_new.period_counter_fully_reserved := null;
968 px_asset_fin_rec_new.period_counter_life_complete := null;
969 end if;
970 end if;
971 end if;
972 end if;
973 end if;
974 end if;
975 -- End of Bug 7491479
976 end if;
977
978 -- Bug 8722521 : Validation for Japan methods during Tax upload
979 if (nvl(px_trans_rec.calling_interface,'X') = 'FATAXUP') and
980 (nvl(fnd_profile.value('FA_JAPAN_TAX_REFORMS'),'N') = 'Y') then
981 if not FA_ASSET_VAL_PVT.validate_jp_taxupl (
982 p_trans_rec => px_trans_rec,
983 p_asset_type_rec => p_asset_type_rec,
984 p_asset_fin_rec => px_asset_fin_rec_new,
985 p_asset_hdr_rec => p_asset_hdr_rec,
986 p_asset_deprn_rec => px_asset_deprn_rec_new,
987 p_log_level_rec => p_log_level_rec) then
988 raise calc_err;
989 end if;
990 end if;
991
992 if (p_log_level_rec.statement_level) then
993 fa_debug_pkg.add('calc_fin_info',
994 'px_asset_fin_rec_new.production_capacity',
995 px_asset_fin_rec_new.production_capacity, p_log_level_rec => p_log_level_rec);
996 fa_debug_pkg.add('calc_fin_info',
997 'px_asset_deprn_rec_new.ltd_prod',
998 px_asset_deprn_rec_new.ltd_production, p_log_level_rec => p_log_level_rec);
999 fa_debug_pkg.add('calc_fin_info',
1000 'px_asset_deprn_rec_new.ytd_prod',
1001 px_asset_deprn_rec_new.ytd_production, p_log_level_rec => p_log_level_rec);
1002 fa_debug_pkg.add('calc_fin_info',
1003 'px_asset_fin_rec_new.short_fiscal_year_flag',
1004 px_asset_fin_rec_new.short_fiscal_year_flag, p_log_level_rec => p_log_level_rec);
1005 end if;
1006
1007 -- New Adjustments Behavior
1008 -- ------------------------
1009 -- Original versions simply called faadjust as usual.
1010 -- New model is as follows:
1011 --
1012 -- 1) the invoice engine will cllear all payables cost against
1013 -- the payables ccid for each line (prim and reporting)
1014 -- 2) faadjust is called with ins_adj passed as false
1015 -- and returns the amounts for expense and bonus expense
1016 -- 3) we determine any difference between the payables cost cleared
1017 -- and the delta cost which still needs to be flex built and posted
1018 -- 4) we pass all four amounts to a new version of faxiat which
1019 -- will insert them
1020 --
1021 -- Note: we can potentially enabled this at the time of addition
1022 -- as well instead of relying on CJE when desired.
1023
1024 if not fa_cache_pkg.fazccmt
1025 (X_method => px_asset_fin_rec_new.Deprn_Method_Code,
1026 X_life => px_asset_fin_rec_new.Life_In_Months
1027 , p_log_level_rec => p_log_level_rec) then
1028 raise calc_err;
1029 end if;
1030
1031 l_method_id := fa_cache_pkg.fazccmt_record.method_id;
1032 l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
1033 l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
1034
1035 ----------------------------------------------
1036 -- Call Depreciable Basis Rule
1037 -- Event type: Initial Addition
1038 -- This event type calculates adjusted_cost
1039 -- at the period of DPIS.
1040 ----------------------------------------------
1041 /*13513616 --No need to call if CGU is changed ,set old values */
1042 l_financial_info_changed := FA_ASSET_VAL_PVT.is_financial_info_changed(p_asset_fin_rec_old => p_asset_fin_rec_old,
1043 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
1044 px_asset_fin_rec_new => px_asset_fin_rec_new,
1045 p_log_level_rec => p_log_level_rec);
1046 /*bug#16426081 starts*/
1047 if(p_asset_fin_rec_adj.adjusted_cost <> 0) then
1048 px_trans_rec.transaction_key := 'BA';
1049 px_asset_fin_rec_new.adjusted_cost := p_asset_fin_rec_adj.adjusted_cost;
1050 l_financial_info_changed := false;
1051 end if;
1052 if not FA_ASSET_VAL_PVT.validate_cca_rules
1053 (p_trans_rec => px_trans_rec,
1054 p_asset_hdr_rec => p_asset_hdr_rec,
1055 p_asset_type_rec => p_asset_type_rec,
1056 p_asset_fin_rec => px_asset_fin_rec_new,
1057 p_asset_fin_rec_old => p_asset_fin_rec_old,
1058 p_asset_deprn_rec => px_asset_deprn_rec_new,
1059 p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
1060 p_period_rec => p_period_rec,
1061 p_log_level_rec => p_log_level_rec) then
1062 raise calc_err;
1063 end if;
1064 /*bug#16426081 ends*/
1065 if l_financial_info_changed then
1066 if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
1067 (
1068 p_event_type => 'INITIAL_ADDITION',
1069 p_asset_fin_rec_new => px_asset_fin_rec_new,
1070 p_asset_fin_rec_old => p_asset_fin_rec_old,
1071 p_asset_hdr_rec => p_asset_hdr_rec,
1072 p_asset_type_rec => p_asset_type_rec,
1073 p_asset_deprn_rec => px_asset_deprn_rec_new,
1074 p_trans_rec => px_trans_rec,
1075 p_period_rec => p_period_rec,
1076 p_used_by_adjustment => 'ADJUSTMENT',
1077 p_mrc_sob_type_code => p_mrc_sob_type_code,
1078 px_new_adjusted_cost => px_asset_fin_rec_new.adjusted_cost,
1079 px_new_raf => px_asset_fin_rec_new.rate_adjustment_factor,
1080 px_new_formula_factor => px_asset_fin_rec_new.formula_factor,
1081 p_log_level_rec => p_log_level_rec
1082 )
1083 )
1084 then
1085 raise calc_err;
1086 end if;
1087 end if;
1088 if (p_log_level_rec.statement_level) then
1089 fa_debug_pkg.add('calc_fin_info', 'trx_subtype',
1090 px_trans_rec.transaction_subtype, p_log_level_rec);
1091 fa_debug_pkg.add('calc_fin_info', 'transaction_type_code',
1092 px_trans_rec.transaction_type_code, p_log_level_rec);
1093 end if;
1094
1095 if (px_trans_rec.transaction_subtype = 'AMORTIZED') then
1096
1097 -- validate the amortization_start_date (do for add and adj)
1098 -- when not in period of addition, amort date is set to trx date
1099 -- BUG# 3194910 - for group, only do this for direct adjustments
1100 -- and not those spawned by members
1101
1102 if (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
1103 px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT' or
1104 (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
1105 px_trans_rec.transaction_key = 'GJ')) then
1106 l_amortization_start_date := px_trans_rec.transaction_date_entered;
1107 else
1108 l_amortization_start_date := px_trans_rec.amortization_start_date;
1109 end if;
1110
1111 -- Fix for Bug #2668073. Need to pass different variables to OUT
1112 -- NOCOPY and IN parameters for amort start date;
1113 l_old_amortization_start_date := l_amortization_start_date;
1114
1115
1116 if not FA_ASSET_VAL_PVT.validate_amort_start_date
1117 (p_transaction_type_code => px_trans_rec.transaction_type_code,
1118 p_asset_id => p_asset_hdr_rec.asset_id,
1119 p_book_type_code => p_asset_hdr_rec.book_type_code,
1120 p_date_placed_in_service => px_asset_fin_rec_new.date_placed_in_service,
1121 p_conversion_date => px_asset_fin_rec_new.conversion_date,
1122 p_period_rec => p_period_rec,
1123 p_amortization_start_date => l_old_amortization_start_date,
1124 p_db_rule_name => fa_cache_pkg.fazcdrd_record.rule_name,
1125 p_rate_source_rule => fa_cache_pkg.fazccmt_record.rate_source_rule,
1126 p_transaction_key => px_trans_rec.transaction_key,
1127 x_amortization_start_date => l_amortization_start_date,
1128 x_trxs_exist => l_trxs_exist,
1129 p_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec) then
1130 raise calc_err;
1131 end if;
1132
1133 if (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
1134 px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT' or
1135 px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT') then
1136 if ( l_amortization_start_date is not null) then
1137 px_trans_rec.transaction_date_entered := l_amortization_start_date;
1138 end if;
1139 px_trans_rec.amortization_start_date := l_amortization_start_date;
1140 else
1141 px_trans_rec.amortization_start_date := l_amortization_start_date;
1142 end if;
1143 end if;
1144
1145 if (px_trans_rec.transaction_subtype = 'AMORTIZED') and
1146 (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
1147 px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT') then
1148
1149 if not FA_ASSET_VAL_PVT.validate_cost_change (
1150 p_asset_id => p_asset_hdr_rec.asset_id,
1151 p_group_asset_id => px_asset_fin_rec_new.group_asset_id, --hh
1152 p_book_type_code => p_asset_hdr_rec.book_type_code,
1153 p_asset_type => p_asset_type_rec.asset_type,
1154 p_transaction_header_id => px_trans_rec.transaction_header_id,
1155 p_transaction_date => nvl(px_trans_rec.amortization_start_date,
1156 px_trans_rec.transaction_date_entered),
1157 p_cost => p_asset_fin_rec_old.cost,
1158 p_cost_adj => p_asset_fin_rec_adj.cost,
1159 p_salvage_value => p_asset_fin_rec_old.salvage_value,
1160 p_salvage_value_adj => p_asset_fin_rec_adj.salvage_value,
1161 p_deprn_limit_amount => p_asset_fin_rec_old.allowed_deprn_limit_amount,
1162 p_deprn_limit_amount_adj => p_asset_fin_rec_adj.allowed_deprn_limit_amount,
1163 p_mrc_sob_type_code => p_mrc_sob_type_code,
1164 p_set_of_books_id => p_asset_hdr_rec.set_of_books_id,
1165 p_over_depreciate_option => px_asset_fin_rec_new.over_depreciate_option, --hh
1166 p_log_level_rec => p_log_level_rec
1167 ) then
1168 raise calc_err;
1169 end if;
1170
1171 end if;
1172
1173 -- note: we want to pick up adjustments to group assets in the period
1174 -- of addition, but not the initial shell. in that case, the
1175 -- old struct will be null so comparing that
1176
1177 -- do not pick up such groups if an initial reserve adjustment has
1178 -- already been performed
1179
1180 -- R12 conditional logic
1181 -- SLA: since voids are obsolete changing the condition
1182
1183 if (((G_release = 11 and
1184 px_trans_rec.transaction_type_code = 'GROUP ADDITION') or
1185 (G_release <> 11 and
1186 px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
1187 p_asset_hdr_rec.period_of_addition = 'Y' )) and
1188 p_asset_fin_rec_old.rate_adjustment_factor is not null ) then
1189 select count(*)
1190 into l_deprn_reserve_exists
1191 from fa_deprn_summary
1192 where asset_id = p_asset_hdr_rec.asset_id
1193 and book_type_code = p_asset_hdr_rec.book_type_code
1194 and deprn_source_code = 'BOOKS'
1195 and deprn_reserve <> 0;
1196
1197 if (p_log_level_rec.statement_level) then
1198 fa_debug_pkg.add('calc_fin_info', 'l_deprn_reserve_exists for group', l_deprn_reserve_exists, p_log_level_rec => p_log_level_rec);
1199 end if;
1200
1201 end if;
1202
1203 if (p_log_level_rec.statement_level) then
1204 fa_debug_pkg.add(l_calling_fn, 'p_asset_fin_rec_old.rate_adjustment_factor', p_asset_fin_rec_old.rate_adjustment_factor, p_log_level_rec => p_log_level_rec);
1205 fa_debug_pkg.add(l_calling_fn, 'l_deprn_reserve_exists', l_deprn_reserve_exists, p_log_level_rec => p_log_level_rec);
1206 fa_debug_pkg.add(l_calling_fn, 'p_asset_deprn_rec_adj.deprn_reserve', p_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec => p_log_level_rec);
1207 end if;
1208
1209 --Bug8244128 Fetching recognize_gain_loss from retirements table
1210 if ( px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and px_trans_rec.transaction_key = 'MR' ) then
1211 open c_recognize_gain_loss_ret( px_trans_rec.member_transaction_header_id);
1212 fetch c_recognize_gain_loss_ret into l_recognize_gain_loss;
1213 close c_recognize_gain_loss_ret;
1214
1215 elsif ( px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and px_trans_rec.transaction_key = 'MS') then
1216 open c_recognize_gain_loss_res( px_trans_rec.member_transaction_header_id);
1217 fetch c_recognize_gain_loss_res into l_recognize_gain_loss;
1218 close c_recognize_gain_loss_res;
1219 end if;
1220
1221 if (p_log_level_rec.statement_level) then
1222 fa_debug_pkg.add(l_calling_fn, 'l_recognize_gain_loss', l_recognize_gain_loss, p_log_level_rec);
1223 end if;
1224
1225 -- Bug7017134: Modified condition below to handle adjustment in period of
1226 -- group addition. Following condition has to be true in order to properly
1227 -- skip call to any functions in faxama
1228
1229 -- R12 conditional logic
1230 -- SLA Uptake
1231 -- enter this code for additions and adjustments in period of addition
1232 -- to force catchup where needed too
1233 -- ** doesn't work coes asset isn't inserted yet **
1234
1235 if (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
1236 px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT' or
1237 (G_release = 11 and
1238 (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' or
1239 (px_trans_rec.transaction_type_code = 'GROUP ADDITION' and
1240 p_asset_fin_rec_old.rate_adjustment_factor is not null and
1241 l_deprn_reserve_exists = 0 and
1242 (px_trans_rec.transaction_key <> 'GJ' or
1243 (px_trans_rec.transaction_key = 'GJ' and
1244 nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) = 0))))) or
1245 (G_release <> 11 and
1246 (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
1247 nvl(l_deprn_reserve_exists,0) = 0 and
1248 (px_trans_rec.transaction_key <> 'GJ' or
1249 (px_trans_rec.transaction_key = 'GJ' and
1250 nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) = 0))) or
1251 (px_trans_rec.transaction_type_code = 'ADDITION' and
1252 p_asset_fin_rec_old.rate_adjustment_factor is not null))) then
1253
1254 if (p_log_level_rec.statement_level) then
1255 fa_debug_pkg.add('calc_fin_info', 'in adjustment logic', 'before check for dep_flag', p_log_level_rec => p_log_level_rec);
1256 end if;
1257
1258 -- much of this logic is based upon faxfa2b.pls
1259
1260 if (px_trans_rec.transaction_subtype = 'AMORTIZED' and
1261 /*bug#16426081 starts */
1262 (px_asset_fin_rec_new.cost <> 0 or
1263 (p_asset_fin_rec_old.group_asset_id is null and
1264 px_asset_fin_rec_new.group_asset_id is not null and
1265 p_asset_deprn_rec_old.deprn_reserve <> 0
1266 )
1267 )
1268 /*bug#16426081 ends */
1269 --px_asset_fin_rec_new.cost <> 0
1270 ) or
1271 (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' or
1272 px_trans_rec.transaction_type_code = 'GROUP ADDITION') then
1273 l_adjust_type := 'AMORTIZED';
1274 else
1275 l_adjust_type := 'EXPENSED';
1276 end if;
1277
1278 -- temporarily adding this until they are correctly built into the calc routines
1279 px_asset_fin_rec_new.rate_adjustment_factor := p_asset_fin_rec_old.rate_adjustment_factor;
1280 px_asset_fin_rec_new.formula_factor := 1;
1281
1282 -- Bug#3845714
1283 -- Following logic was added not to process BS for Sumup Case (to fix Bug3737670)
1284 -- Now Sumup Group will not be processed for FA_ADJ row
1285 if (px_asset_fin_rec_new.group_asset_id is null and
1286 nvl(px_asset_fin_rec_new.member_rollup_flag,'N') = 'Y') then
1287 l_call_bs := FALSE;
1288 end if;
1289
1290 -- SLA Uptake
1291 -- adding nvl around old value since additions will enter this code now
1292 -- also entering this logic when dep flag is set to yes when
1293 -- previously was no
1294
1295 if ((px_asset_fin_rec_new.depreciate_flag = nvl(p_asset_fin_rec_old.depreciate_flag,
1296 px_asset_fin_rec_new.depreciate_flag) or
1297 (G_release = 11 or
1298 (nvl(p_asset_fin_rec_old.depreciate_flag, 'YES') = 'NO' and
1299 px_asset_fin_rec_new.adjustment_required_status = 'ADD'))) and
1300 --HH only if disabled_flag is not Y.
1301 nvl(px_asset_fin_rec_new.disabled_flag,'N') = nvl(p_asset_fin_rec_old.disabled_flag,'N') and
1302 nvl(px_asset_fin_rec_new.reval_ceiling, 0) = nvl(p_asset_fin_rec_old.reval_ceiling, 0) and not
1303 (p_inv_trans_rec.invoice_transaction_id is not null and
1304 nvl(p_asset_fin_rec_adj.cost, 0) = 0)) then
1305
1306 if (p_log_level_rec.statement_level) then
1307 fa_debug_pkg.add('calc_fin_info', 'inside',
1308 'main adjustment logic', p_log_level_rec => p_log_level_rec);
1309 fa_debug_pkg.add('calc_fin_info', 'calling_interface', px_trans_rec.calling_interface, p_log_level_rec => p_log_level_rec);
1310 fa_debug_pkg.add('calc_fin_info', 'TRX_KEY before faxama', px_trans_rec.transaction_key, p_log_level_rec => p_log_level_rec);
1311 fa_debug_pkg.add('calc_fin_info', 'group_reclass_type before faxama',
1312 p_group_reclass_options_rec.group_reclass_type, p_log_level_rec => p_log_level_rec);
1313
1314 end if;
1315
1316 -- BUG# 4684363
1317 -- removing validation originally added for FA_NO_GC_CALC_FULLYRSV
1318 -- see older code for details
1319
1320 if ((px_asset_fin_rec_new.group_asset_id is null and
1321 nvl(px_asset_fin_rec_new.member_rollup_flag,'N') <> 'Y') or
1322 (px_asset_fin_rec_new.group_asset_id is not null and
1323 nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'CALCULATE')) then
1324
1325 -- new method
1326 -- BUG# 3134846
1327 -- need to account for the value of l_adjust_type rather than just
1328 -- just the value of the subtype here (see above)
1329 --
1330 -- if (px_trans_rec.transaction_subtype = 'AMORTIZED' and
1331 if (l_adjust_type = 'AMORTIZED' and
1332 --HH
1333 (nvl(px_asset_fin_rec_new.disabled_flag,'N') = 'N')) then
1334
1335 l_call_faxama := TRUE;
1336
1337 -- BUG# 6987729
1338 -- determine reclass case in order to skip calc/expense logic
1339 -- when inbound or outbound from a group
1340 -- and avoid calling as we don't want to double the
1341 -- hits to faxama/faxinaj here and in favgrecb.pls
1342
1343 if ((nvl(px_asset_fin_rec_new.group_asset_id, -99) <>
1344 nvl(p_asset_fin_rec_old.group_asset_id, -99)) AND
1345 (px_asset_fin_rec_new.group_asset_id is null OR
1346 p_asset_fin_rec_old.group_asset_id is null)) then
1347 l_call_faxama := FALSE;
1348 l_call_bs := FALSE;
1349 end if;
1350
1351
1352 -- if called from faxasset set flag for conc program
1353 -- to call faxama for backdated transactions.
1354 -- This is for backdated transactions that affect a group
1355 -- asset so that faxama is not invoked from form but from
1356 -- process group adjustments.
1357
1358 --
1359 -- This is the place where prior period transaction and group reclass
1360 -- to be processed with Process Group Adjustment concurrent program.
1361 -- Comment following if statement out for testing with script.
1362 -- There are 5 more places needs to be commented out in FAVGRECB.pls in
1363 -- order to make process to be done without concurrent program
1364 --
1365 if (px_trans_rec.calling_interface = 'FAXASSET') then
1366 if (p_asset_type_rec.asset_type = 'GROUP') then
1367 if (px_trans_rec.transaction_key in(
1368 'MA','MJ','MC','MV','MD','MN','GJ') and
1369 px_trans_rec.amortization_start_date <
1370 p_period_rec.calendar_period_open_date) then
1371
1372 px_asset_fin_rec_new.adjustment_required_status := 'GADJ';
1373 l_call_faxama := FALSE;
1374 l_call_bs := FALSE;
1375 elsif (px_trans_rec.transaction_key = 'GC' and
1376 p_group_reclass_options_rec.group_reclass_type = 'CALC') then
1377 px_asset_fin_rec_new.adjustment_required_status := 'GADJ';
1378 l_call_faxama := FALSE;
1379 l_call_bs := FALSE;
1380 -- lock member assets too here, bug 10097181
1381 open c_group_rcl_out;
1382 fetch c_group_rcl_out into l_group_rcl_out_asset;
1383 close c_group_rcl_out;
1384 if (nvl(l_group_rcl_out_asset,-99) > 0) then
1385 if (p_mrc_sob_type_code <> 'R') then
1386 update fa_books
1387 set adjustment_required_status = 'GADJ'
1388 where asset_id = l_group_rcl_out_asset
1389 and book_type_code = p_asset_hdr_rec.book_type_code
1390 and transaction_header_id_out is null;
1391 else
1392 update fa_mc_books
1393 set adjustment_required_status = 'GADJ'
1394 where asset_id = l_group_rcl_out_asset
1395 and book_type_code = p_asset_hdr_rec.book_type_code
1396 and set_of_books_id = p_asset_hdr_rec.set_of_books_id
1397 and transaction_header_id_out is null;
1398 end if;
1399 end if;
1400
1401 elsif (px_trans_rec.transaction_key = 'GC' and
1402 p_group_reclass_options_rec.group_reclass_type = 'MANUAL') then
1403 l_call_faxama := FALSE;
1404 l_call_bs := FALSE;
1405 elsif (px_trans_rec.transaction_key in ('MR', 'MS')) and -- ENERGY
1406 (px_asset_fin_rec_new.tracking_method = 'ALLOCATE') and -- ENERGY
1407 (fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE') and -- ENERGY
1408 (l_recognize_gain_loss = 'NO') then -- ENERGY
1409 -- Energy implementation requires FA_RETIREMENT_PVT.Do_Allocate to -- ENERGY
1410 -- be called from Process Group Adjsutment Conc program. -- ENERGY
1411 --8244128 Added the check for recognize gain and loss
1412 px_asset_fin_rec_new.adjustment_required_status := 'GADJ'; -- ENERGY
1413 elsif (px_trans_rec.transaction_key in ('MR', 'MS')) and -- ENERGY
1414 (px_asset_fin_rec_new.tracking_method = 'ALLOCATE') and -- ENERGY
1415 (fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE') and -- ENERGY
1416 (l_recognize_gain_loss = 'YES') then -- ENERGY
1417 --8244128 Added the condition to set adjustment_required_status
1418 -- for case with recognize_gain_loss as YES
1419 px_asset_fin_rec_new.adjustment_required_status := 'NONE'; -- ENERGY
1420 end if;
1421 elsif (p_asset_type_rec.asset_type <> 'GROUP' and
1422 p_asset_fin_rec_old.group_asset_id is not null and
1423 px_asset_fin_rec_new.group_asset_id is null and
1424 p_group_reclass_options_rec.group_reclass_type is not null) then
1425 l_call_faxama := FALSE;
1426 l_call_bs := FALSE;
1427 end if;
1428 end if;
1429 --
1430 --
1431 --
1432
1433 /*Bug 8941132 MRC Reclass -Start*/
1434 if (p_asset_type_rec.asset_type = 'GROUP') then
1435 if (px_trans_rec.transaction_key = 'GC' and p_group_reclass_options_rec.group_reclass_type = 'CALC') then
1436 l_call_faxama := FALSE;
1437 l_call_bs := FALSE;
1438 elsif (px_trans_rec.transaction_key = 'GC' and p_group_reclass_options_rec.group_reclass_type = 'MANUAL') then
1439 l_call_faxama := FALSE;
1440 l_call_bs := FALSE;
1441 end if;
1442 end if;
1443 /*Bug 8941132 MRC Reclass -End*/
1444
1445 if (p_log_level_rec.statement_level) then
1446 fa_debug_pkg.add('calc_fin_info', 'adjustment_required_status',
1447 px_asset_fin_rec_new.adjustment_required_status, p_log_level_rec => p_log_level_rec);
1448 fa_debug_pkg.add('calc_fin_info', 'l_call_faxama', l_call_faxama, p_log_level_rec => p_log_level_rec);
1449 end if;
1450
1451 --* Bug#3737670
1452 -- Skip to call faxama if the processing asset and transaction is matched with followings.
1453 -- Transaction - Group Reclassification
1454 -- Tracking Method - Calculate
1455 -- Depreciation Option - Member
1456 if nvl(px_asset_fin_rec_new.group_asset_id,-99) <> nvl(p_asset_fin_rec_old.group_asset_id,-99) and
1457 nvl(px_asset_fin_rec_new.tracking_method,'NONE') = 'CALCULATE' and
1458 nvl(px_asset_fin_rec_new.depreciation_option,'NONE') = 'MEMBER' then
1459 if (p_log_level_rec.statement_level) then
1460 fa_debug_pkg.add('calc_fin_info', 'Skip faxama since group reclass in calculate and Member', 'l_call_faxama is FALSE', p_log_level_rec => p_log_level_rec);
1461 end if;
1462 l_call_faxama := FALSE;
1463 end if;
1464
1465 -- Fix for Bug #3846324. Do not call faxama if the asset is not depreciating. We
1466 -- do not want a deprn expense catchup row created here.
1467 -- Bug4318400: for group(non-sumup group), faxama needs to be called.
1468 -- Not to call faxama for sumup group is taken care before this point
1469 if (px_asset_fin_rec_new.depreciate_flag = 'NO') and
1470 (p_asset_type_rec.asset_type <> 'GROUP') then
1471 l_call_faxama := FALSE;
1472 end if;
1473
1474 -- Bug4958977: Adding following entire if statement.
1475 -- trx could be dpis change if following conditions are met
1476 -- even though trx date is in current period
1477 if (px_trans_rec.transaction_key = 'MJ' and
1478 nvl(p_asset_fin_rec_adj.cost, 0) = 0 and
1479 nvl(p_asset_fin_rec_adj.cip_cost, 0) = 0 and
1480 nvl(p_asset_fin_rec_adj.salvage_value, 0) = 0 and
1481 nvl(p_asset_fin_rec_adj.allowed_deprn_limit_amount, 0) = 0) and
1482 (nvl(px_trans_rec.amortization_start_date,
1483 px_trans_rec.transaction_date_entered) >=
1484 p_period_rec.calendar_period_open_date) then
1485
1486 if (p_log_level_rec.statement_level) then
1487 fa_debug_pkg.add('calc_fin_info', 'could be dpis change', 'cont', p_log_level_rec => p_log_level_rec);
1488 end if;
1489
1490 OPEN c_check_dpis_change;
1491 FETCH c_check_dpis_change INTO l_temp_thid;
1492 CLOSE c_check_dpis_change;
1493
1494 if (p_log_level_rec.statement_level) then
1495 fa_debug_pkg.add('calc_fin_info', 'temp_thid', l_temp_thid, p_log_level_rec => p_log_level_rec);
1496 end if;
1497
1498 if (l_temp_thid is not null) then
1499 l_dpis_change := TRUE;
1500 else
1501 l_dpis_change := FALSE;
1502 end if;
1503 end if;
1504
1505 -- Call faxama only if this is prior period trx
1506 -- Bug4958977: Added condition "or (l_dpis_change)"
1507 if (((p_period_rec.calendar_period_open_date >
1508 px_trans_rec.amortization_start_date) or
1509 (l_dpis_change))and
1510 l_call_faxama and
1511 l_financial_info_changed) then
1512
1513 if (p_log_level_rec.statement_level) then
1514 fa_debug_pkg.add('calc_fin_info', 'calling FAXAMA', 'faxama', p_log_level_rec => p_log_level_rec);
1515 fa_debug_pkg.add('calc_fin_info', 'px_asset_fin_rec_new.reduction_rate', px_asset_fin_rec_new.reduction_rate, p_log_level_rec => p_log_level_rec);
1516 end if;
1517
1518 if (p_asset_type_rec.asset_type <> 'GROUP') then
1519
1520 if not FA_AMORT_PVT.faxama
1521 (px_trans_rec => px_trans_rec,
1522 p_asset_hdr_rec => p_asset_hdr_rec,
1523 p_asset_desc_rec => p_asset_desc_rec,
1524 p_asset_cat_rec => p_asset_cat_rec,
1525 p_asset_type_rec => p_asset_type_rec,
1526 p_asset_fin_rec_old => p_asset_fin_rec_old,
1527 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
1528 px_asset_fin_rec_new => px_asset_fin_rec_new,
1529 p_asset_deprn_rec => p_asset_deprn_rec_old,
1530 p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
1531 p_period_rec => p_period_rec,
1532 p_mrc_sob_type_code => p_mrc_sob_type_code,
1533 p_running_mode => fa_std_types.FA_DPR_NORMAL,
1534 p_used_by_revaluation => null,
1535 p_reclassed_asset_id => p_reclassed_asset_id,
1536 p_reclass_src_dest => p_reclass_src_dest,
1537 p_reclassed_asset_dpis => p_reclassed_asset_dpis,
1538 x_deprn_exp => l_deprn_exp,
1539 x_bonus_deprn_exp => l_bonus_deprn_exp,
1540 x_impairment_exp => l_impairment_exp
1541 , p_log_level_rec => p_log_level_rec) then
1542 return (FALSE);
1543 end if;
1544
1545 /* Bug 13620748 start */
1546
1547 -- basically we need to resverse the entire catchup in case
1548 -- their is an amrotized change of reserve in POA in R12
1549
1550 if (((nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0)
1551 OR (nvl(p_asset_deprn_rec_adj.ytd_deprn,0) <> 0)
1552 OR (NVL(p_asset_deprn_rec_adj.allow_taxup_flag,FALSE)))
1553 AND (p_asset_fin_rec_old.date_placed_in_service < p_period_rec.calendar_period_open_date)
1554 AND (p_asset_hdr_rec.period_of_addition = 'Y')
1555 AND G_release <> 11) THEN
1556
1557 BEGIN
1558 IF (p_mrc_sob_type_code <> 'R') then
1559 SELECT sum(decode(adj.debit_credit_flag,'DR',
1560 -1 * adj.adjustment_amount,
1561 adj.adjustment_amount))
1562 INTO l_deprn_exp_temp
1563 FROM fa_adjustments adj,
1564 fa_transaction_headers th
1565 WHERE th.book_type_code = p_asset_hdr_rec.book_type_code
1566 and th.asset_id = p_asset_hdr_rec.asset_id
1567 and th.transaction_type_code in ('ADDITION', 'ADJUSTMENT') --Bug7409454
1568 and adj.book_type_code = p_asset_hdr_rec.book_type_code
1569 and adj.asset_id = p_asset_hdr_rec.asset_id
1570 and adj.transaction_header_id = th.transaction_header_id
1571 and adj.source_type_code = 'DEPRECIATION'
1572 and adj.adjustment_type = 'EXPENSE'
1573 and adj.period_counter_created = p_period_rec.period_counter;
1574
1575 ELSE
1576
1577 SELECT sum(decode(adj.debit_credit_flag,'DR',
1578 -1 * adj.adjustment_amount,
1579 adj.adjustment_amount))
1580 INTO l_deprn_exp_temp
1581 FROM fa_mc_adjustments adj,
1582 fa_transaction_headers th
1583 WHERE th.book_type_code = p_asset_hdr_rec.book_type_code
1584 and th.asset_id = p_asset_hdr_rec.asset_id
1585 and th.transaction_type_code in ('ADDITION', 'ADJUSTMENT') ----Bug7409454
1586 and adj.book_type_code = p_asset_hdr_rec.book_type_code
1587 and adj.asset_id = p_asset_hdr_rec.asset_id
1588 and adj.transaction_header_id = th.transaction_header_id
1589 and adj.source_type_code = 'DEPRECIATION'
1590 and adj.adjustment_type = 'EXPENSE'
1591 and adj.period_counter_created = p_period_rec.period_counter
1592 and adj.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
1593
1594 END IF;
1595 EXCEPTION
1596 WHEN OTHERS THEN
1597 l_deprn_exp_temp := 0;
1598 END;
1599 end if;
1600 /* Bug 13620748 end */
1601 end if; -- (p_asset_type_rec.asset_type <> 'GROUP')
1602
1603 else
1604 -- calc_raf_adj_cost is the function to recalculate adj cost,
1605 -- raf, and formular factor and it is godd enough for current
1606 -- period trx.
1607 /*Bug 8941132: MRC Reclass For Group Reclass l_call_bs is always false
1608 Since faxama is called by FAPGADJB.pls
1609 if ((px_trans_rec.calling_interface <> 'FAXASSET') and
1610 (px_trans_rec.transaction_key = 'GC' and
1611 (p_group_reclass_options_rec.group_reclass_type = 'CALC'))) or
1612 */
1613 if (px_trans_rec.transaction_key in ('MR', 'MS')) then
1614 l_call_bs := TRUE;
1615 else
1616 l_call_bs := FALSE;
1617 end if;
1618
1619 -- 6950629 -> Only Contract_id adjustment, adjusted_cost calc is not updated*
1620 -- Bug7017134: There is no need to call calc_raf_adj_cost in case of
1621 -- GC, MR, MS.
1622 -- Bug 7390952, added nvl function
1623 if (nvl(px_trans_rec.transaction_key,'zz') not in ('GC', 'MR', 'MS') and
1624 l_financial_info_changed ) then
1625 if not FA_AMORT_PVT.calc_raf_adj_cost
1626 (p_trans_rec => px_trans_rec,
1627 p_asset_hdr_rec => p_asset_hdr_rec,
1628 p_asset_desc_rec => p_asset_desc_rec,
1629 p_asset_type_rec => p_asset_type_rec,
1630 p_asset_fin_rec_old => p_asset_fin_rec_old,
1631 px_asset_fin_rec_new => px_asset_fin_rec_new,
1632 p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
1633 p_asset_deprn_rec_new => px_asset_deprn_rec_new,
1634 p_period_rec => p_period_rec,
1635 p_group_reclass_options_rec => p_group_reclass_options_rec,
1636 p_mrc_sob_type_code => p_mrc_sob_type_code
1637 , p_log_level_rec => p_log_level_rec) then
1638 raise calc_err;
1639 end if;
1640 end if;
1641
1642 /* Begin of Bug 6803812 : Reverse the fa_adj entry created
1643 * for period of addition
1644 * if reserve change is made */
1645
1646 -- R12 conditional handling
1647 if (((nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0) or
1648 (nvl(p_asset_deprn_rec_adj.ytd_deprn,0) <> 0)
1649 OR (NVL(p_asset_deprn_rec_adj.allow_taxup_flag,FALSE))) and
1650 (p_asset_fin_rec_old.date_placed_in_service < p_period_rec.calendar_period_open_date) and
1651 (p_asset_hdr_rec.period_of_addition = 'Y') and
1652 G_release <> 11) then
1653
1654 begin
1655 if (p_mrc_sob_type_code <> 'R') then
1656 SELECT sum(decode(adj.debit_credit_flag,'DR',
1657 -1 * adj.adjustment_amount,
1658 adj.adjustment_amount)),
1659 sum(decode(adj.debit_credit_flag,'DR',
1660 -1 * adj.annualized_adjustment,
1661 adj.annualized_adjustment))
1662 INTO l_deprn_exp,l_ann_adj_deprn_exp
1663 FROM fa_adjustments adj,
1664 fa_transaction_headers th
1665 WHERE th.book_type_code = p_asset_hdr_rec.book_type_code
1666 and th.asset_id = p_asset_hdr_rec.asset_id
1667 and th.transaction_type_code in ('ADDITION', 'ADJUSTMENT') --Bug7409454
1668 and adj.book_type_code = p_asset_hdr_rec.book_type_code
1669 and adj.asset_id = p_asset_hdr_rec.asset_id
1670 and adj.transaction_header_id = th.transaction_header_id
1671 and adj.source_type_code = 'DEPRECIATION'
1672 and adj.adjustment_type = 'EXPENSE'
1673 and adj.period_counter_created = p_period_rec.period_counter;
1674
1675 else
1676
1677 SELECT sum(decode(adj.debit_credit_flag,'DR',
1678 -1 * adj.adjustment_amount,
1679 adj.adjustment_amount)),
1680 sum(decode(adj.debit_credit_flag,'DR',
1681 -1 * adj.annualized_adjustment,
1682 adj.annualized_adjustment))
1683 INTO l_deprn_exp,l_ann_adj_deprn_exp
1684 FROM fa_mc_adjustments adj,
1685 fa_transaction_headers th
1686 WHERE th.book_type_code = p_asset_hdr_rec.book_type_code
1687 and th.asset_id = p_asset_hdr_rec.asset_id
1688 and th.transaction_type_code in ('ADDITION', 'ADJUSTMENT') ----Bug7409454
1689 and adj.book_type_code = p_asset_hdr_rec.book_type_code
1690 and adj.asset_id = p_asset_hdr_rec.asset_id
1691 and adj.transaction_header_id = th.transaction_header_id
1692 and adj.source_type_code = 'DEPRECIATION'
1693 and adj.adjustment_type = 'EXPENSE'
1694 and adj.period_counter_created = p_period_rec.period_counter
1695 and adj.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
1696
1697 end if;
1698 EXCEPTION
1699 WHEN OTHERS THEN
1700 l_deprn_exp := 0;
1701 l_ann_adj_deprn_exp := 0;
1702 END;
1703
1704 end if; /* End of Bug 6803812 */
1705
1706 end if; -- (p_period_rec.calendar_period_open_date >
1707
1708 else
1709
1710 -- R12 conditional handling
1711 -- Begin of Bug 7153740 : Reverse the fa_adj entry created for period of addition
1712 -- if manual reserve change is done
1713 if (((nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0) or
1714 (nvl(p_asset_deprn_rec_adj.ytd_deprn,0) <> 0)
1715 OR (NVL(p_asset_deprn_rec_adj.allow_taxup_flag,FALSE))) and
1716 (p_asset_fin_rec_old.date_placed_in_service < p_period_rec.calendar_period_open_date) and
1717 (p_asset_hdr_rec.period_of_addition = 'Y') and
1718 G_release <> 11) then
1719
1720 --Bug#8598745 : To recalculate adjusted_cost.
1721 if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS (
1722 p_event_type => 'EXPENSED_ADJ',
1723 p_asset_fin_rec_new => px_asset_fin_rec_new,
1724 p_asset_fin_rec_old => p_asset_fin_rec_old,
1725 p_asset_hdr_rec => p_asset_hdr_rec,
1726 p_asset_type_rec => p_asset_type_rec,
1727 p_asset_deprn_rec => px_asset_deprn_rec_new,
1728 p_trans_rec => px_trans_rec,
1729 p_period_rec => p_period_rec,
1730 p_used_by_adjustment => 'ADJUSTMENT',
1731 p_mrc_sob_type_code => p_mrc_sob_type_code,
1732 p_hyp_total_rsv => px_asset_deprn_rec_new.deprn_reserve,
1733 p_hyp_total_ytd => px_asset_deprn_rec_new.ytd_deprn, --Bug 10180072 passed the value of YTD also
1734 p_recoverable_cost => px_asset_fin_rec_new.recoverable_cost,
1735 px_new_adjusted_cost => px_asset_fin_rec_new.adjusted_cost,
1736 px_new_raf => px_asset_fin_rec_new.rate_adjustment_factor,
1737 px_new_formula_factor => px_asset_fin_rec_new.formula_factor,
1738 p_log_level_rec => p_log_level_rec))then
1739 raise calc_err;
1740 end if;
1741
1742 BEGIN
1743 if (p_mrc_sob_type_code <> 'R') then
1744 SELECT sum(decode(adj.debit_credit_flag,'DR',
1745 -1 * adj.adjustment_amount,
1746 adj.adjustment_amount)),
1747 sum(decode(adj.debit_credit_flag,'DR',
1748 -1 * adj.annualized_adjustment,
1749 adj.annualized_adjustment))
1750 INTO l_deprn_exp,l_ann_adj_deprn_exp
1751 FROM fa_adjustments adj,
1752 fa_transaction_headers th
1753 WHERE th.book_type_code = p_asset_hdr_rec.book_type_code
1754 and th.asset_id = p_asset_hdr_rec.asset_id
1755 and th.transaction_type_code in ('ADDITION', 'ADJUSTMENT')
1756 and adj.book_type_code = p_asset_hdr_rec.book_type_code
1757 and adj.asset_id = p_asset_hdr_rec.asset_id
1758 and adj.transaction_header_id = th.transaction_header_id
1759 and adj.source_type_code = 'DEPRECIATION'
1760 and adj.adjustment_type = 'EXPENSE'
1761 and adj.period_counter_created = p_period_rec.period_counter;
1762
1763 else
1764
1765 SELECT sum(decode(adj.debit_credit_flag,'DR',
1766 -1 * adj.adjustment_amount,
1767 adj.adjustment_amount)),
1768 sum(decode(adj.debit_credit_flag,'DR',
1769 -1 * adj.annualized_adjustment,
1770 adj.annualized_adjustment))
1771 INTO l_deprn_exp,l_ann_adj_deprn_exp
1772 FROM fa_mc_adjustments adj,
1773 fa_transaction_headers th
1774 WHERE th.book_type_code = p_asset_hdr_rec.book_type_code
1775 and th.asset_id = p_asset_hdr_rec.asset_id
1776 and th.transaction_type_code in ('ADDITION', 'ADJUSTMENT')
1777 and adj.book_type_code = p_asset_hdr_rec.book_type_code
1778 and adj.asset_id = p_asset_hdr_rec.asset_id
1779 and adj.transaction_header_id = th.transaction_header_id
1780 and adj.source_type_code = 'DEPRECIATION'
1781 and adj.adjustment_type = 'EXPENSE'
1782 and adj.period_counter_created = p_period_rec.period_counter
1783 and adj.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
1784
1785 end if;
1786 EXCEPTION
1787 WHEN OTHERS THEN
1788 l_deprn_exp := 0;
1789 l_ann_adj_deprn_exp := 0;
1790 END;
1791 else
1792
1793 --HH we want to skip over faxexp if disabled_flag just changed
1794 --although we probably should never get in here.
1795 if l_financial_info_changed then
1796 if not FA_EXP_PVT.faxexp
1797 (px_trans_rec => px_trans_rec,
1798 p_asset_hdr_rec => p_asset_hdr_rec,
1799 p_asset_desc_rec => p_asset_desc_rec,
1800 p_asset_cat_rec => p_asset_cat_rec,
1801 p_asset_type_rec => p_asset_type_rec,
1802 p_asset_fin_rec_old => p_asset_fin_rec_old,
1803 px_asset_fin_rec_new => px_asset_fin_rec_new,
1804 p_asset_deprn_rec => p_asset_deprn_rec_old,
1805 p_period_rec => p_period_rec,
1806 p_mrc_sob_type_code => p_mrc_sob_type_code,
1807 p_running_mode => fa_std_types.FA_DPR_NORMAL,
1808 p_used_by_revaluation => null,
1809 x_deprn_exp => l_deprn_exp,
1810 x_bonus_deprn_exp => l_bonus_deprn_exp,
1811 x_impairment_exp => l_impairment_exp,
1812 x_ann_adj_deprn_exp => l_ann_adj_deprn_exp,
1813 x_ann_adj_bonus_deprn_exp => l_ann_adj_bonus_deprn_exp,
1814 p_log_level_rec => p_log_level_rec) then
1815 raise calc_err;
1816 end if;
1817 end if; --disabled_flag changed.
1818 end if; -- if (((nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0)..
1819 end if; -- amortized / expensed
1820
1821 if (p_log_level_rec.statement_level) then
1822 fa_debug_pkg.add('calc_fin_info', 'after user exits, adj_cost',
1823 px_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
1824 end if;
1825
1826 -- manual override - this is the only section in faadjust that
1827 -- needs to be propogated here
1828 if px_trans_rec.deprn_override_flag in (fa_std_types.FA_OVERRIDE_DPR,
1829 fa_std_types.FA_OVERRIDE_BONUS,
1830 fa_std_types.FA_OVERRIDE_DPR_BONUS) then
1831
1832 fa_std_types.deprn_override_trigger_enabled:= FALSE;
1833
1834 if (NVL(p_asset_fin_rec_old.tracking_method, ' ') = 'ALLOCATE') then
1835 UPDATE FA_DEPRN_OVERRIDE ov
1836 SET ov.transaction_header_id = px_trans_rec.transaction_header_id
1837 WHERE ov.book_type_code = p_asset_hdr_rec.book_type_code
1838 AND ov.used_by = 'ADJUSTMENT'
1839 AND ov.status = 'SELECTED'
1840 AND ov.transaction_header_id is null
1841 AND ov.asset_id IN
1842 (SELECT bk.asset_id
1843 FROM fa_books bk
1844 WHERE bk.book_type_code = ov.book_type_code
1845 AND bk.group_asset_id = p_asset_hdr_rec.asset_id
1846 AND bk.date_ineffective IS NULL);
1847 else
1848 UPDATE FA_DEPRN_OVERRIDE
1849 SET transaction_header_id = px_trans_rec.transaction_header_id
1850 WHERE book_type_code = p_asset_hdr_rec.book_type_code
1851 AND asset_id = p_asset_hdr_rec.asset_id
1852 AND used_by = 'ADJUSTMENT'
1853 AND status = 'SELECTED'
1854 AND transaction_header_id is null;
1855 end if;
1856
1857 fa_std_types.deprn_override_trigger_enabled:= TRUE;
1858 end if;
1859
1860 -- need to account for the value of l_adjust_type rather than just
1861 -- just the value of the subtype here (see above)
1862 --
1863 -- if (px_trans_rec.transaction_subtype = 'AMORTIZED' and
1864 if (l_adjust_type = 'AMORTIZED' and
1865 px_asset_fin_rec_new.cost = 0) then
1866 px_asset_fin_rec_new.rate_adjustment_factor := 1;
1867 end if;
1868
1869 if ((px_asset_fin_rec_new.formula_factor <> 1 or
1870 px_asset_fin_rec_new.rate_adjustment_factor <> 1) and
1871 l_rate_source_rule = 'FORMULA') then
1872 px_asset_fin_rec_new.old_adjusted_cost := p_asset_fin_rec_old.adjusted_cost;
1873 end if;
1874
1875 elsif p_asset_type_rec.asset_type='GROUP' and
1876 nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'CALCULATE' and
1877 nvl(px_asset_fin_rec_new.member_rollup_flag,'N') = 'Y'
1878 then
1879
1880 -- The returned adjusted_cost is supported only CCA.
1881
1882 if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
1883 (p_event_type => 'AMORT_ADJ',
1884 p_asset_fin_rec_new => px_asset_fin_rec_new,
1885 p_asset_fin_rec_old => p_asset_fin_rec_old,
1886 p_asset_hdr_rec => p_asset_hdr_rec,
1887 p_asset_type_rec => p_asset_type_rec,
1888 p_asset_deprn_rec => px_asset_deprn_rec_new,
1889 p_trans_rec => px_trans_rec,
1890 p_period_rec => p_period_rec,
1891 p_current_total_rsv => px_asset_deprn_rec_new.deprn_reserve,
1892 p_current_rsv => px_asset_deprn_rec_new.deprn_reserve -
1893 px_asset_deprn_rec_new.bonus_deprn_reserve - nvl(px_asset_deprn_rec_new.impairment_reserve,0),
1894 p_current_total_ytd => px_asset_deprn_rec_new.ytd_deprn,
1895 p_adj_reserve => p_asset_deprn_rec_adj.deprn_reserve,
1896 p_mrc_sob_type_code => p_mrc_sob_type_code,
1897 p_used_by_adjustment => 'ADJUSTMENT',
1898 px_new_adjusted_cost => px_asset_fin_rec_new.adjusted_cost,
1899 px_new_raf => px_asset_fin_rec_new.rate_adjustment_factor,
1900 px_new_formula_factor => px_asset_fin_rec_new.formula_factor,
1901 p_log_level_rec => p_log_level_rec)
1902 ) then
1903 raise calc_err;
1904 end if;
1905
1906 end if; -- Tracking Method is not Allocate for Group Member Asset.
1907
1908 elsif not (p_inv_trans_rec.invoice_transaction_id is not null and
1909 nvl(p_asset_fin_rec_adj.cost, 0) = 0) then -- depreciate flag changed
1910
1911 if (p_log_level_rec.statement_level) then
1912 fa_debug_pkg.add('calc_fin_info', 'entering',
1913 'logic for depreciate flag change', p_log_level_rec => p_log_level_rec);
1914 end if;
1915
1916 -- Recalculate eofy_reserve
1917 if px_asset_fin_rec_new.depreciate_flag='YES' and
1918 px_asset_deprn_rec_new.ytd_deprn =0
1919 then
1920 px_asset_fin_rec_new.eofy_reserve := px_asset_deprn_rec_new.deprn_reserve;
1921 end if;
1922
1923 ----------------------------------------------
1924 -- Call Depreciable Basis Rule
1925 -- for depreciate flag adjustment
1926 ----------------------------------------------
1927 if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
1928 (
1929 p_event_type => 'DEPRECIATE_FLAG_ADJ',
1930 p_asset_fin_rec_new => px_asset_fin_rec_new,
1931 p_asset_fin_rec_old => p_asset_fin_rec_old,
1932 p_asset_hdr_rec => p_asset_hdr_rec,
1933 p_asset_type_rec => p_asset_type_rec,
1934 p_asset_deprn_rec => px_asset_deprn_rec_new,
1935 p_trans_rec => px_trans_rec,
1936 p_period_rec => p_period_rec,
1937 p_mrc_sob_type_code => p_mrc_sob_type_code,
1938 px_new_adjusted_cost => px_asset_fin_rec_new.adjusted_cost,
1939 px_new_raf => px_asset_fin_rec_new.rate_adjustment_factor,
1940 px_new_formula_factor => px_asset_fin_rec_new.formula_factor,
1941 p_log_level_rec => p_log_level_rec
1942 )
1943 )
1944 then
1945 raise calc_err;
1946 end if;
1947 else -- BUG# 3615096: 0 cost change from invoice transaction
1948 if (p_log_level_rec.statement_level) then
1949 fa_debug_pkg.add('calc_fin_info', 'entering',
1950 'logic for zero cost invoice changes', p_log_level_rec => p_log_level_rec);
1951 end if;
1952
1953 px_asset_fin_rec_new := p_asset_fin_rec_old;
1954 end if; -- change in depreciate flag
1955
1956 -- R12 conditional logic
1957 -- SLA: since voids are obsolete chaning condition for group
1958
1959 elsif (px_trans_rec.transaction_type_code = 'ADDITION' or
1960 px_trans_rec.transaction_type_code = 'CIP ADDITION' or
1961 px_trans_rec.transaction_type_code = 'GROUP ADDITION' or
1962 (G_release <> 11 and
1963 px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
1964 p_asset_hdr_rec.period_of_addition = 'Y')) then
1965
1966 if (p_asset_type_rec.asset_type = 'GROUP') and
1967 (l_deprn_reserve_exists <> 0 or nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0 )then
1968
1969 /*Bug 8941132: MRC Reclass -No need to call faxama.
1970 if ((px_trans_rec.calling_interface <> 'FAXASSET') and
1971 (px_trans_rec.transaction_key = 'GC')) or */
1972
1973 if (px_trans_rec.transaction_key in ('MR', 'MS')) then
1974 l_call_bs := TRUE;
1975 else
1976 l_call_bs := FALSE;
1977 end if;
1978
1979 if not FA_AMORT_PVT.calc_raf_adj_cost
1980 (p_trans_rec => px_trans_rec,
1981 p_asset_hdr_rec => p_asset_hdr_rec,
1982 p_asset_desc_rec => p_asset_desc_rec,
1983 p_asset_type_rec => p_asset_type_rec,
1984 p_asset_fin_rec_old => p_asset_fin_rec_old,
1985 px_asset_fin_rec_new => px_asset_fin_rec_new,
1986 p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
1987 p_asset_deprn_rec_new => px_asset_deprn_rec_new,
1988 p_period_rec => p_period_rec,
1989 p_mrc_sob_type_code => p_mrc_sob_type_code
1990 , p_log_level_rec => p_log_level_rec) then
1991 raise calc_err;
1992 end if;
1993
1994 else
1995 ----------------------------------------------
1996 -- Call Depreciable Basis Rule
1997 -- for Addition
1998 ----------------------------------------------
1999 -- Bug4403330: passing 0 values to p_eofy_recoverable_cost,
2000 -- p_eop_recoverable_cost, p_eofy_salvage_value, and p_eop_salvage_value
2001 -- is necessary to avoid calling GET_EOFY_EOP in deprn basis function because
2002 -- the sql gets old non depreciable value that should be excluded.
2003 if (px_trans_rec.transaction_type_code = 'ADDITION') and
2004 (p_calling_fn = 'fa_cip_pvt.do_cap_rev') then
2005 l_cap_temp_value := 0;
2006 else
2007 l_cap_temp_value := null;
2008 end if;
2009
2010 if (p_log_level_rec.statement_level) then
2011 fa_debug_pkg.add('calc_fin_info1', 'p_asset_fin_rec_old.deprn_method_code1111111',
2012 p_asset_fin_rec_old.deprn_method_code, p_log_level_rec);
2013 fa_debug_pkg.add('calc_fin_info1', 'px_asset_fin_rec_new.deprn_method_code1111111',
2014 px_asset_fin_rec_new.deprn_method_code, p_log_level_rec);
2015 end if;
2016
2017 ----------------Added by Satish Byreddy as part of calculating Catchup Bug number 6951549
2018 IF px_asset_fin_rec_new.deprn_method_code = 'JP-STL-EXTND' OR
2019 p_asset_fin_rec_old.deprn_method_code = 'JP-STL-EXTND' THEN
2020
2021 if px_trans_rec.calling_interface NOT IN ('FATAXUP','FAMAPT') THEN
2022 --Bug 8834683 no need to cal catch up when asset with JP-STL-EXTND method code
2023 --is added with reserve.
2024 if (nvl(p_asset_deprn_rec_adj.deprn_reserve,0) = 0 )and
2025 (p_asset_fin_rec_old.date_placed_in_service < p_period_rec.calendar_period_open_date) and
2026 (p_asset_hdr_rec.period_of_addition = 'Y') and
2027 (px_trans_rec.transaction_type_code = 'ADDITION') then
2028 if l_financial_info_changed then
2029 -- Bug 8520695
2030 open c_check_addn;
2031 fetch c_check_addn into l_addn_cnt;
2032 close c_check_addn;
2033
2034 -- Prevent call to faxexp if the adj transaction is in POA
2035 if l_addn_cnt = 0 then
2036 if not FA_EXP_PVT.faxexp
2037 (px_trans_rec => px_trans_rec,
2038 p_asset_hdr_rec => p_asset_hdr_rec,
2039 p_asset_desc_rec => p_asset_desc_rec,
2040 p_asset_cat_rec => p_asset_cat_rec,
2041 p_asset_type_rec => p_asset_type_rec,
2042 p_asset_fin_rec_old => p_asset_fin_rec_old,
2043 px_asset_fin_rec_new => px_asset_fin_rec_new,
2044 p_asset_deprn_rec => p_asset_deprn_rec_old,
2045 p_period_rec => p_period_rec,
2046 p_mrc_sob_type_code => p_mrc_sob_type_code,
2047 p_running_mode => fa_std_types.FA_DPR_NORMAL,
2048 p_used_by_revaluation => null,
2049 x_deprn_exp => l_deprn_exp,
2050 x_bonus_deprn_exp => l_bonus_deprn_exp,
2051 x_impairment_exp => l_impairment_exp,
2052 x_ann_adj_deprn_exp => l_ann_adj_deprn_exp,
2053 x_ann_adj_bonus_deprn_exp => l_ann_adj_bonus_deprn_exp,
2054 p_log_level_rec => p_log_level_rec) then
2055 raise calc_err;
2056 end if;
2057 end if; -- End Bug 8520695
2058 end if; --disabled_flag changed.
2059 end if;--deprn resereve = 0
2060 end if;
2061 end if; -- px_asset_fin_rec_new.deprn_method_code = 'JP-STL-EXTND' OR
2062
2063
2064 ----------------End OF addition by Satish Byreddy as part of calculating Catchup Bug number 6951549
2065
2066 if px_trans_rec.calling_interface <> 'FAEXDEPR' THEN
2067 if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
2068 (
2069 p_event_type => 'ADDITION',
2070 p_asset_fin_rec_new => px_asset_fin_rec_new,
2071 p_asset_fin_rec_old => p_asset_fin_rec_old,
2072 p_asset_hdr_rec => p_asset_hdr_rec,
2073 p_asset_type_rec => p_asset_type_rec,
2074 p_asset_deprn_rec => px_asset_deprn_rec_new,
2075 p_trans_rec => px_trans_rec,
2076 p_period_rec => p_period_rec,
2077 p_eofy_recoverable_cost => l_cap_temp_value,
2078 p_eop_recoverable_cost => l_cap_temp_value,
2079 p_eofy_salvage_value => l_cap_temp_value,
2080 p_eop_salvage_value => l_cap_temp_value,
2081 p_mrc_sob_type_code => p_mrc_sob_type_code,
2082 px_new_adjusted_cost => px_asset_fin_rec_new.adjusted_cost,
2083 px_new_raf => px_asset_fin_rec_new.rate_adjustment_factor,
2084 px_new_formula_factor => px_asset_fin_rec_new.formula_factor,
2085 p_log_level_rec => p_log_level_rec
2086 )
2087 )
2088 then
2089 raise calc_err;
2090 end if;
2091 end if;
2092 if (px_trans_rec.transaction_type_code = 'ADDITION') then
2093 IF px_asset_fin_rec_new.deprn_method_code = 'JP-STL-EXTND' OR p_asset_fin_rec_old.deprn_method_code = 'JP-STL-EXTND' THEN
2094 if (p_log_level_rec.statement_level) then
2095 fa_debug_pkg.add('calc_fin_info1',
2096 'x_deprn_exp.deprn_reserve22222',
2097 l_deprn_exp, p_log_level_rec => p_log_level_rec);
2098 end if;
2099 px_asset_deprn_rec_new.deprn_reserve := nvl(px_asset_deprn_rec_new.deprn_reserve, 0) + nvl(l_deprn_exp, 0);
2100 px_asset_deprn_rec_new.ytd_deprn := nvl(px_asset_deprn_rec_new.ytd_deprn, 0) + nvl(l_deprn_exp, 0);
2101
2102 end if;
2103 end if;
2104
2105 end if;
2106
2107 end if;
2108
2109
2110
2111 --
2112 -- Following faxama will return catch-up for group.
2113 -- This is the one will use FA_BOOKS_SUMMARY table to calculate
2114 -- and maintain FA_BOOKS_SUMMARY.
2115 --
2116 if (p_asset_type_rec.asset_type = 'GROUP') and
2117 (l_call_bs) then
2118
2119 if -- (p_group_reclass_options_rec.group_reclass_type = 'CALC') and
2120 (p_asset_type_rec.asset_type = 'GROUP') and
2121 (p_reclass_src_dest = 'DESTINATION') then
2122 l_asset_deprn_rec_adj.deprn_reserve := nvl(l_asset_deprn_rec_adj.deprn_reserve, 0) +
2123 p_group_reclass_options_rec.reserve_amount;
2124 else
2125 l_asset_deprn_rec_adj := p_asset_deprn_rec_adj;
2126 end if;
2127
2128 if (not FA_AMORT_PVT.faxama(
2129 px_trans_rec => px_trans_rec,
2130 p_asset_hdr_rec => p_asset_hdr_rec,
2131 p_asset_desc_rec => p_asset_desc_rec,
2132 p_asset_cat_rec => p_asset_cat_rec,
2133 p_asset_type_rec => p_asset_type_rec,
2134 p_asset_fin_rec_old => p_asset_fin_rec_old,
2135 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
2136 px_asset_fin_rec_new => px_asset_fin_rec_new,
2137 p_asset_deprn_rec => p_asset_deprn_rec_old,
2138 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
2139 p_period_rec => p_period_rec,
2140 p_mrc_sob_type_code => p_mrc_sob_type_code,
2141 p_running_mode => fa_std_types.FA_DPR_NORMAL,
2142 p_used_by_revaluation => null,
2143 p_reclassed_asset_id => p_reclassed_asset_id,
2144 p_reclass_src_dest => p_reclass_src_dest,
2145 p_reclassed_asset_dpis => p_reclassed_asset_dpis,
2146 p_update_books_summary => TRUE,
2147 p_proceeds_of_sale => 0,
2148 p_cost_of_removal => 0,
2149 x_deprn_exp => l_deprn_exp,
2150 x_bonus_deprn_exp => l_bonus_deprn_exp,
2151 x_impairment_exp => l_impairment_exp,
2152 x_deprn_rsv => l_deprn_rsv, p_log_level_rec => p_log_level_rec)) then
2153
2154 if (p_log_level_rec.statement_level) then
2155 fa_debug_pkg.add('calc_fin_info', 'calling FA_AMORT_PVT.faxama', 'FAILED', p_log_level_rec => p_log_level_rec);
2156 end if;
2157
2158 raise calc_err;
2159
2160 end if; -- (not FA_AMORT_PVT.faxama
2161
2162 if (p_group_reclass_options_rec.group_reclass_type = 'CALC') and
2163 (p_asset_type_rec.asset_type = 'GROUP') and
2164 (p_reclass_src_dest = 'SOURCE') then
2165 p_group_reclass_options_rec.reserve_amount := -1 * l_deprn_rsv;
2166 end if;
2167
2168 end if; -- (p_asset_type_rec.asset_type = 'GROUP')
2169
2170
2171 if (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
2172 px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT') then
2173
2174 -- get the total amounted cleared for payables cost
2175 -- from the invoice engine (assumes its been flushed)
2176 if (p_mrc_sob_type_code <> 'R') then
2177 select nvl(sum(decode(debit_credit_flag,
2178 'CR', adjustment_amount,
2179 adjustment_amount * -1)), 0)
2180 into l_clearing
2181 from fa_adjustments
2182 where asset_id = p_asset_hdr_rec.asset_id
2183 and book_type_code = p_asset_hdr_rec.book_type_code
2184 and period_counter_created = p_period_rec.period_counter
2185 and transaction_header_id = px_trans_rec.transaction_header_id
2186 and adjustment_type = 'COST CLEARING';
2187 else
2188 select nvl(sum(decode(debit_credit_flag,
2189 'CR', adjustment_amount,
2190 adjustment_amount * -1)), 0)
2191 into l_clearing
2192 from fa_mc_adjustments
2193 where asset_id = p_asset_hdr_rec.asset_id
2194 and book_type_code = p_asset_hdr_rec.book_type_code
2195 and period_counter_created = p_period_rec.period_counter
2196 and transaction_header_id = px_trans_rec.transaction_header_id
2197 and adjustment_type = 'COST CLEARING'
2198 and set_of_books_id = p_asset_hdr_rec.set_of_books_id ;
2199 end if;
2200 end if;
2201
2202 /* Bug#9961363: Checking validation even for expensed trx
2203 -- Bug#9161943: Checking validation after recalculating new adjusted reserve
2204 -- Bug#7172602: Validate Salvage value change
2205 -- Bug 9935595: No need to validate salvage value for extended assets
2206 (either already extended or during availing extended state)
2207 -- Bug#9957314: Restricting validation when deprn_limit is defined for asset */
2208
2209 if (p_asset_type_rec.asset_type <> 'GROUP' and p_asset_fin_rec_old.group_asset_id is null and
2210 px_asset_fin_rec_new.group_asset_id is null) AND
2211 (nvl(p_asset_fin_rec_old.extended_deprn_flag, '-1') <> 'Y') AND
2212 (nvl(p_asset_fin_rec_old.extended_deprn_flag, '-1') = nvl(p_asset_fin_rec_adj.extended_deprn_flag, '-1')) AND
2213 p_asset_fin_rec_old.allowed_deprn_limit_amount is null AND
2214 px_asset_fin_rec_new.allowed_deprn_limit_amount is null
2215 then
2216
2217 if px_trans_rec.amortization_start_date is not null then
2218 l_nbv_for_sal := nvl(px_asset_fin_rec_new.cost,0) -
2219 nvl(px_asset_deprn_rec_new.deprn_reserve,0) -
2220 nvl(px_asset_deprn_rec_new.impairment_reserve,0);
2221 else
2222 l_nbv_for_sal := nvl(px_asset_fin_rec_new.cost,0);
2223 end if;
2224
2225 if not FA_ASSET_VAL_PVT.validate_salvage_value
2226 ( p_salvage_value => px_asset_fin_rec_new.salvage_value,
2227 p_nbv => l_nbv_for_sal,
2228 p_calling_fn => l_calling_fn,
2229 p_log_level_rec => p_log_level_rec) then
2230 raise calc_err;
2231 end if;
2232 end if;
2233
2234 -- process groups here to for the catchup but not for clearing
2235
2236 -- R12 conditional handling
2237 -- SLA: now insert catchup for capitalization
2238
2239 if (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
2240 px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT' or
2241 px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' or
2242 px_trans_rec.transaction_type_code = 'GROUP ADDITION' or
2243 (px_trans_rec.transaction_type_code = 'ADDITION' and
2244 p_asset_fin_rec_old.rate_adjustment_factor is not null and
2245 G_release <> 11 )) then
2246
2247 if (px_trans_rec.transaction_type_code = 'GROUP ADDITION' or
2248 (G_release <> 11 and
2249 (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
2250 p_asset_hdr_rec.period_of_addition = 'Y') or
2251 (px_trans_rec.transaction_type_code = 'ADJUSTMENT' and
2252 p_asset_hdr_rec.period_of_addition = 'Y'
2253 /* Bug 13620748 we need to add exp to deprn reserve if their is a reserve adj in POA
2254 (nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) = 0 and
2255 nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) = 0 )*/
2256 ))) then
2257 -- Bug 14342757 we need to make ure that we add expense only
2258 -- if there is an amoritzed change to reserve in POA
2259 IF (nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) = 0 and
2260 nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) = 0 ) OR
2261 ((nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) <> 0 and
2262 nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) <> 0 ) AND
2263 l_call_faxama AND
2264 (p_period_rec.calendar_period_open_date >
2265 px_trans_rec.amortization_start_date)) THEN
2266
2267 IF NOT (NVL(p_asset_deprn_rec_adj.allow_taxup_flag,FALSE)) THEN
2268 px_asset_deprn_rec_new.deprn_reserve := nvl(px_asset_deprn_rec_new.deprn_reserve, 0) + nvl(l_deprn_exp, 0);
2269 px_asset_deprn_rec_new.ytd_deprn := nvl(px_asset_deprn_rec_new.ytd_deprn, 0) + nvl(l_deprn_exp, 0);
2270 ELSE
2271
2272 IF (p_asset_deprn_rec_adj.deprn_reserve <> 0) THEN
2273 px_asset_deprn_rec_new.deprn_reserve := nvl(px_asset_deprn_rec_new.deprn_reserve, 0) + nvl(l_deprn_exp, 0);
2274 END IF;
2275
2276 IF (p_asset_deprn_rec_adj.ytd_deprn <> 0) THEN
2277 px_asset_deprn_rec_new.ytd_deprn := nvl(px_asset_deprn_rec_new.ytd_deprn, 0) + nvl(l_deprn_exp, 0);
2278 END IF;
2279
2280 END IF;
2281
2282 -- Bug 8533933
2283 px_asset_deprn_rec_new.bonus_ytd_deprn := nvl(px_asset_deprn_rec_new.bonus_ytd_deprn, 0) + nvl(l_bonus_deprn_exp, 0);
2284 px_asset_deprn_rec_new.bonus_deprn_reserve := nvl(px_asset_deprn_rec_new.bonus_deprn_reserve, 0) + nvl(l_bonus_deprn_exp, 0);
2285 -- End Bug 8533933
2286 END IF;
2287 end if;
2288 --bug 8765988/8649223 ( Adding this validation to prevent -ve NBV in POA via adjustement)
2289 if (p_asset_hdr_rec.period_of_addition = 'Y' and px_trans_rec.transaction_type_code = 'ADJUSTMENT' and
2290 nvl(px_asset_fin_rec_new.ALLOCATE_TO_FULLY_RSV_FLAG,'N') = 'N'
2291 ) then
2292 if not fa_asset_val_pvt.validate_adj_rec_cost
2293 (p_adjusted_recoverable_cost => px_asset_fin_rec_new.adjusted_recoverable_cost,
2294 p_deprn_reserve => px_asset_deprn_rec_new.deprn_reserve,
2295 p_calling_fn => l_calling_fn,
2296 p_log_level_rec => p_log_level_rec
2297 ) then
2298 raise calc_err;
2299 end if;
2300
2301 /*Bug#9488077/9130653 - added following condition */
2302 if (p_asset_deprn_rec_adj.deprn_reserve <> 0 OR p_asset_deprn_rec_adj.ytd_deprn <> 0) then
2303 --bug 8785230 Missing Validation for POA and +ve deprn reserve
2304 /*Bug#9682863 - Modified the parameters - instead of individual value passing records. */
2305 if not fa_asset_val_pvt.validate_ytd_reserve
2306 (p_asset_hdr_rec => p_asset_hdr_rec,
2307 p_asset_type_rec => p_asset_type_rec,
2308 p_asset_fin_rec_new => px_asset_fin_rec_new,
2309 p_asset_deprn_rec_new => px_asset_deprn_rec_new,
2310 p_period_rec => p_period_rec,
2311 p_asset_deprn_rec_old => p_asset_deprn_rec_old, /*Fix for bug 8790562 */
2312 p_calling_fn => l_calling_fn,
2313 p_log_level_rec => p_log_level_rec) then
2314
2315 raise calc_err;
2316 end if;
2317 end if;
2318 end if;
2319
2320
2321
2322 -- insure we do not post any catchup for group member
2323 if (px_asset_fin_rec_new.group_asset_id is not null) and
2324 nvl(px_asset_fin_rec_new.tracking_method,'OTHER') <> 'CALCULATE' then
2325 l_deprn_exp := 0;
2326 l_bonus_deprn_exp := 0;
2327 l_impairment_exp := 0;
2328 end if;
2329
2330 if (p_log_level_rec.statement_level) then
2331 fa_debug_pkg.add('calx_fin_info', 'calling', 'faxiat', p_log_level_rec => p_log_level_rec);
2332 fa_debug_pkg.add('calc_fin_info', 'after user exits, adj_cost',
2333 px_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
2334 end if;
2335
2336 -- insert all the amounts
2337 -- HH only if this is not a disabled_flag transaction
2338
2339 -- R12 conditional handling
2340 -- SLA do not insert cost/clearing for capitalization
2341 if (px_trans_rec.transaction_type_code = 'ADDITION' and
2342 (p_asset_fin_rec_old.rate_adjustment_factor is not null or
2343 G_release = 11)) then
2344 l_cost_to_insert := 0;
2345 l_clearing_to_insert := 0;
2346 else
2347 l_cost_to_insert := p_asset_fin_rec_adj.cost;
2348 l_clearing_to_insert := p_asset_fin_rec_adj.cost - l_clearing;
2349 end if;
2350
2351 if ((G_release <> 11 or
2352 px_trans_rec.transaction_type_code not in
2353 ('ADDITION', 'CIP ADDITION')) and
2354 l_financial_info_changed) then
2355 if not FA_INS_ADJ_PVT.faxiat
2356 (p_trans_rec => px_trans_rec,
2357 p_asset_hdr_rec => p_asset_hdr_rec,
2358 p_asset_desc_rec => p_asset_desc_rec,
2359 p_asset_cat_rec => p_asset_cat_rec,
2360 p_asset_type_rec => p_asset_type_rec,
2361 p_cost => l_cost_to_insert,
2362 p_clearing => l_clearing_to_insert,
2363 p_deprn_expense => l_deprn_exp + NVL (l_deprn_exp_temp,0), --Bug 13620748
2364 p_bonus_expense => l_bonus_deprn_exp,
2365 p_impair_expense => l_impairment_exp,
2366 p_ann_adj_amt => l_ann_adj_deprn_exp, --0
2367 p_mrc_sob_type_code => p_mrc_sob_type_code,
2368 p_calling_fn => l_calling_fn
2369 , p_log_level_rec => p_log_level_rec) then raise calc_err;
2370 end if;
2371 end if; --no change to disabled_flag
2372
2373 -- ENERGY and allocate in general
2374 -- Dupulicate group FA_ADJUSTMENTS entries on member asset
2375 --
2376 if (p_log_level_rec.statement_level) then
2377 fa_debug_pkg.add(l_calling_fn, 'l_deprn_exp', l_deprn_exp, p_log_level_rec => p_log_level_rec);
2378 fa_debug_pkg.add(l_calling_fn, 'l_bonus_deprn_exp', l_bonus_deprn_exp, p_log_level_rec => p_log_level_rec);
2379 fa_debug_pkg.add(l_calling_fn, 'p_asset_type_rec.asset_type', p_asset_type_rec.asset_type, p_log_level_rec => p_log_level_rec);
2380 fa_debug_pkg.add(l_calling_fn, 'px_trans_rec.member_transaction_header_id',
2381 px_trans_rec.member_transaction_header_id, p_log_level_rec => p_log_level_rec);
2382 fa_debug_pkg.add(l_calling_fn, 'l_disabled_flag_changed',(not l_financial_info_changed), p_log_level_rec => p_log_level_rec);
2383 end if;
2384
2385 -- Bug7008015: Relocated the condition about amount so that even if there is no expense
2386 -- at group level, process go thorugh following to determine if there is member reserve
2387 -- to backed out as expense.
2388 -- Bug7140693: Removed reinstatement from following condition
2389 if (p_asset_type_rec.asset_type = 'GROUP') and
2390 (px_trans_rec.member_transaction_header_id is not null) and
2391 (l_financial_info_changed) and
2392 (nvl(px_asset_fin_rec_new.tracking_method,'NO TRACK') = 'ALLOCATE') and
2393 (px_trans_rec.transaction_key <> 'MR') then
2394
2395 OPEN c_get_member_trx;
2396 FETCH c_get_member_trx INTO l_asset_hdr_rec.asset_id
2397 , l_trans_rec.transaction_header_id
2398 , l_trans_rec.transaction_type_code
2399 , l_trans_rec.transaction_date_entered
2400 , l_trans_rec.transaction_name
2401 , l_trans_rec.source_transaction_header_id
2402 , l_trans_rec.mass_reference_id
2403 , l_trans_rec.transaction_subtype
2404 , l_trans_rec.transaction_key
2405 , l_trans_rec.amortization_start_date
2406 , l_trans_rec.calling_interface
2407 , l_trans_rec.mass_transaction_id
2408 , l_trans_rec.member_transaction_header_id
2409 , l_trans_rec.trx_reference_id
2410 , l_trans_rec.who_info.last_update_date
2411 , l_trans_rec.who_info.last_updated_by
2412 , l_trans_rec.who_info.last_update_login;
2413 CLOSE c_get_member_trx;
2414
2415 l_trans_rec.who_info.created_by := l_trans_rec.who_info.last_updated_by;
2416 l_trans_rec.who_info.creation_date := l_trans_rec.who_info.last_update_date;
2417
2418 l_asset_hdr_rec.book_type_code := p_asset_hdr_rec.book_type_code;
2419 l_asset_hdr_rec.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
2420
2421 -- load the old structs
2422 if not FA_UTIL_PVT.get_asset_fin_rec
2423 (p_asset_hdr_rec => l_asset_hdr_rec,
2424 px_asset_fin_rec => l_asset_fin_rec,
2425 p_transaction_header_id => NULL,
2426 p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
2427 raise calc_err;
2428 end if;
2429
2430 if not FA_UTIL_PVT.get_asset_desc_rec
2431 (p_asset_hdr_rec => l_asset_hdr_rec,
2432 px_asset_desc_rec => l_asset_desc_rec, p_log_level_rec => p_log_level_rec) then
2433 raise calc_err;
2434 end if;
2435
2436 if not FA_UTIL_PVT.get_asset_cat_rec
2437 (p_asset_hdr_rec => l_asset_hdr_rec,
2438 px_asset_cat_rec => l_asset_cat_rec,
2439 p_date_effective => null, p_log_level_rec => p_log_level_rec) then
2440 raise calc_err;
2441 end if;
2442
2443 if not FA_UTIL_PVT.get_asset_type_rec
2444 (p_asset_hdr_rec => l_asset_hdr_rec,
2445 px_asset_type_rec => l_asset_type_rec,
2446 p_date_effective => null, p_log_level_rec => p_log_level_rec) then
2447 raise calc_err;
2448 end if;
2449
2450 --Bug7008015: Need member reserve
2451 if not FA_UTIL_PVT.get_asset_deprn_rec
2452 (p_asset_hdr_rec => l_asset_hdr_rec ,
2453 px_asset_deprn_rec => l_asset_deprn_rec,
2454 p_period_counter => NULL,
2455 p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
2456 raise calc_err;
2457 end if;
2458
2459 -- Bug7008015
2460 -- Fully reserve member asset if
2461 -- - l_adjust_type is AMORTIZED: If this is expensed, this won't be necessary as it takes care this
2462 -- - This is a member asset. - premature to apply this for all assets
2463 -- - Tracking method is allocate - premature to apply this for all assets
2464 -- - This is not group reclass
2465 -- - There is a change in cost
2466 -- - New reserve is more than the adj rec cost or adj rec cost is 0 while there is rsv balance
2467 -- If all above condition is met, asset will be fully reserve by expensing remaining nbv (adj rec cost - rsv)
2468 if (p_log_level_rec.statement_level) then
2469 fa_debug_pkg.add(l_calling_fn, 'l_adjust_type', l_adjust_type, p_log_level_rec => p_log_level_rec);
2470 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_new.group_asset_id', px_asset_fin_rec_new.group_asset_id, p_log_level_rec => p_log_level_rec);
2471 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_new.tracking_method', px_asset_fin_rec_new.tracking_method, p_log_level_rec => p_log_level_rec);
2472 fa_debug_pkg.add(l_calling_fn, 'px_trans_rec.transaction_key', px_trans_rec.transaction_key, p_log_level_rec => p_log_level_rec);
2473 fa_debug_pkg.add(l_calling_fn, 'p_asset_fin_rec_adj.cost', p_asset_fin_rec_adj.cost, p_log_level_rec => p_log_level_rec);
2474 fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec.deprn_reserve', l_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
2475 fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec.adjusted_recoverable_cost', l_asset_fin_rec.adjusted_recoverable_cost, p_log_level_rec => p_log_level_rec);
2476 fa_debug_pkg.add(l_calling_fn, 'l_deprn_exp', l_deprn_exp, p_log_level_rec => p_log_level_rec);
2477 end if;
2478
2479 if l_adjust_type = 'AMORTIZED' and
2480 (not (px_trans_rec.calling_interface = 'FAXASSET' and
2481 px_asset_fin_rec_new.adjustment_required_status = 'GADJ')) and
2482 l_asset_fin_rec.group_asset_id is not null and
2483 l_asset_fin_rec.tracking_method = 'ALLOCATE' and
2484 px_trans_rec.transaction_key <> 'GC' and
2485 nvl(px_asset_fin_rec_new.ALLOCATE_TO_FULLY_RSV_FLAG,'N') = 'N' and
2486 nvl(p_asset_fin_rec_adj.cost , 0) <> 0 and
2487 ( ( ( sign(nvl(l_asset_deprn_rec.deprn_reserve, 0) + nvl(l_deprn_exp, 0)) =
2488 sign(l_asset_fin_rec.adjusted_recoverable_cost) ) and
2489 ( abs(nvl(l_asset_deprn_rec.deprn_reserve, 0) + nvl(l_deprn_exp, 0)) >
2490 abs(l_asset_fin_rec.adjusted_recoverable_cost) ) ) or
2491 (l_asset_fin_rec.adjusted_recoverable_cost = 0 and l_asset_deprn_rec.deprn_reserve <> 0) ) then
2492 l_deprn_exp := l_asset_fin_rec.adjusted_recoverable_cost - nvl(l_asset_deprn_rec.deprn_reserve, 0);
2493 end if;
2494
2495 -- Bug7008015: call faxiat only if there is expense to back out for member assets
2496 if (nvl(l_deprn_exp, 0) <> 0 or nvl(l_bonus_deprn_exp, 0) <> 0 or nvl(l_impairment_exp, 0) <> 0) then
2497 if not FA_INS_ADJ_PVT.faxiat
2498 (p_trans_rec => l_trans_rec,
2499 p_asset_hdr_rec => l_asset_hdr_rec,
2500 p_asset_desc_rec => l_asset_desc_rec,
2501 p_asset_cat_rec => l_asset_cat_rec,
2502 p_asset_type_rec => l_asset_type_rec,
2503 p_cost => 0,
2504 p_clearing => 0,
2505 p_deprn_expense => l_deprn_exp,
2506 p_bonus_expense => l_bonus_deprn_exp,
2507 p_impair_expense => l_impairment_exp,
2508 p_ann_adj_amt => 0,
2509 p_track_member_flag => 'Y',
2510 p_mrc_sob_type_code => p_mrc_sob_type_code,
2511 p_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec) then
2512 raise calc_err;
2513 end if;
2514 end if;
2515
2516 end if;
2517 -- End of ENERGY Change
2518
2519 -- When Group Adjustment is processed for the group whose tracking
2520 -- method is allocate but the transaction kicked at group level,
2521 -- expense must be allocated to members.
2522 -- HH assuming this is not a change to disabled_flag
2523
2524 -- R12 conditional logic
2525 -- SLA voids are obsolete so group adjustments happen in period of add
2526 -- why are group adjustments i period of add not processed here
2527
2528 if (G_release = 11 or
2529 p_asset_hdr_rec.period_of_addition <> 'Y') and
2530 px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
2531 px_trans_rec.member_transaction_header_id is null and
2532 nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE' and
2533 l_financial_info_changed then
2534
2535 -- Call TRACK_ASSETS
2536 l_rc := fa_track_member_pvt.track_assets
2537 (P_book_type_code => p_asset_hdr_rec.book_type_code,
2538 P_group_asset_id => p_asset_hdr_rec.asset_id,
2539 P_period_counter => p_period_rec.period_num,
2540 P_fiscal_year => p_period_rec.fiscal_year,
2541 P_group_deprn_basis => fa_cache_pkg.fazccmt_record.deprn_basis_rule,
2542 P_group_exclude_salvage => fa_cache_pkg.fazccmt_record.exclude_salvage_value_flag,
2543 P_group_bonus_rule => px_asset_fin_rec_new.bonus_rule,
2544 P_group_deprn_amount => l_deprn_exp,
2545 P_group_bonus_amount => l_bonus_deprn_exp,
2546 P_tracking_method => px_asset_fin_rec_new.tracking_method,
2547 P_allocate_to_fully_ret_flag => px_asset_fin_rec_new.allocate_to_fully_ret_flag,
2548 P_allocate_to_fully_rsv_flag => px_asset_fin_rec_new.allocate_to_fully_rsv_flag,
2549 P_excess_allocation_option => px_asset_fin_rec_new.excess_allocation_option,
2550 P_depreciation_option => px_asset_fin_rec_new.depreciation_option,
2551 P_member_rollup_flag => px_asset_fin_rec_new.member_rollup_flag,
2552 P_group_level_override => l_group_level_override,
2553 P_period_of_addition => p_asset_hdr_rec.period_of_addition,
2554 P_transaction_date_entered =>
2555 px_trans_rec.transaction_date_entered, --HH: Added for 6782497
2556 P_mode => 'GROUP ADJUSTMENT',
2557 P_mrc_sob_type_code => p_mrc_sob_type_code,
2558 P_set_of_books_id => p_asset_hdr_rec.set_of_books_id,
2559 X_new_deprn_amount => x_new_deprn_amount,
2560 X_new_bonus_amount => x_new_bonus_amount, p_log_level_rec => p_log_level_rec);
2561 if l_rc <> 0 then
2562 raise calc_err;
2563 end if;
2564 end if;
2565
2566
2567 end if;
2568
2569 end if;
2570 return true;
2571
2572 EXCEPTION
2573
2574 when calc_err then
2575 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2576 return false;
2577
2578 when others then
2579 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2580 return false;
2581
2582 END calc_fin_info;
2583
2584
2585 FUNCTION calc_new_amounts
2586 (px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
2587 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
2588 p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
2589 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
2590 p_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
2591 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
2592 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
2593 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
2594 p_asset_deprn_rec_old IN FA_API_TYPES.asset_deprn_rec_type,
2595 p_asset_deprn_rec_adj IN FA_API_TYPES.asset_deprn_rec_type,
2596 px_asset_deprn_rec_new IN OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type,
2597 p_mrc_sob_type_code IN VARCHAR2
2598 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
2599
2600 l_reval_ceiling_adj NUMBER; -- BUG 2620221
2601
2602 l_calling_fn VARCHAR2(40) := 'fa_asset_calc_pvt.calc_new_amounts';
2603 calc_err EXCEPTION;
2604
2605 BEGIN
2606
2607
2608 -- This procedure basically sets all new info by deriving it from the old and adjustment structures.
2609 -- For additions, all will end up coming from the adj struct.
2610 --
2611 -- Different values can be intentionally nulled out / removed, but most can not...
2612 -- The depreciation related info, including method, life, short tax, bonus, etc will all
2613 -- be addressed by the validate_deprn_info function
2614
2615 -- Set all non-calculated and non-method info
2616
2617 -- these values can be nulled out intentionally so we use
2618 -- G_MISS values for defaults - ceiling hand group have been removed
2619 -- and merged in the bonus area becuase of the impacts of
2620 -- defaulting for additions
2621
2622 FA_UTIL_PVT.load_num_value
2623 (p_num_old => p_asset_fin_rec_old.itc_amount_id,
2624 p_num_adj => p_asset_fin_rec_adj.itc_amount_id,
2625 x_num_new => px_asset_fin_rec_new.itc_amount_id, p_log_level_rec => p_log_level_rec);
2626
2627 -- added for group enhancements
2628
2629 FA_UTIL_PVT.load_num_value
2630 (p_num_old => p_asset_fin_rec_old.super_group_id,
2631 p_num_adj => p_asset_fin_rec_adj.super_group_id,
2632 x_num_new => px_asset_fin_rec_new.super_group_id, p_log_level_rec => p_log_level_rec);
2633
2634 FA_UTIL_PVT.load_num_value
2635 (p_num_old => p_asset_fin_rec_old.cash_generating_unit_id,
2636 p_num_adj => p_asset_fin_rec_adj.cash_generating_unit_id,
2637 x_num_new => px_asset_fin_rec_new.cash_generating_unit_id, p_log_level_rec => p_log_level_rec);
2638
2639 -- moved dirivation of the salvage and limit types back down to their respective functions
2640
2641 -- these values must be populated - null in adjust means they must be set to old values
2642
2643 px_asset_fin_rec_new.date_placed_in_service := nvl(p_asset_fin_rec_adj.date_placed_in_service,
2644 p_asset_fin_rec_old.date_placed_in_service);
2645
2646 -- amounts that may increase to adjustment
2647 px_asset_fin_rec_new.cost := nvl(p_asset_fin_rec_adj.cost, 0) +
2648 nvl(p_asset_fin_rec_old.cost, 0);
2649
2650 if (p_asset_type_rec.asset_type = 'CIP' or
2651 p_asset_type_rec.asset_type = 'GROUP') then
2652 px_asset_fin_rec_new.cip_cost := nvl(p_asset_fin_rec_adj.cip_cost, 0) +
2653 nvl(p_asset_fin_rec_old.cip_cost, 0);
2654 else
2655 px_asset_fin_rec_new.cip_cost := 0;
2656 end if;
2657
2658 px_asset_fin_rec_new.production_capacity := nvl(p_asset_fin_rec_adj.production_capacity, 0) +
2659 nvl(p_asset_fin_rec_old.production_capacity, 0);
2660 px_asset_fin_rec_new.fully_rsvd_revals_counter := nvl(p_asset_fin_rec_adj.fully_rsvd_revals_counter, 0) +
2661 nvl(p_asset_fin_rec_old.fully_rsvd_revals_counter, 0);
2662 px_asset_fin_rec_new.reval_amortization_basis := nvl(p_asset_fin_rec_adj.reval_amortization_basis, 0) +
2663 nvl(p_asset_fin_rec_old.reval_amortization_basis, 0);
2664
2665 -- Bug 6795070: insert into fa_deprn_summary is based on
2666 -- px_asset_deprn_rec_new
2667 px_asset_deprn_rec_new.reval_amortization_basis := nvl(p_asset_deprn_rec_adj.reval_amortization_basis, 0) +
2668 nvl(p_asset_deprn_rec_old.reval_amortization_basis, 0);
2669
2670 -- Commenting this for the bug 2620221
2671 /*
2672 if (p_asset_fin_rec_old.reval_ceiling is null and
2673 p_asset_fin_rec_adj.reval_ceiling is null) then
2674 px_asset_fin_rec_new.reval_ceiling := null;
2675 else
2676 px_asset_fin_rec_new.reval_ceiling := nvl(p_asset_fin_rec_adj.reval_ceiling, 0) +
2677 nvl(p_asset_fin_rec_old.reval_ceiling, 0);
2678 end if;
2679 */
2680
2681
2682 -- Adding this for the BUG 2620221
2683 -- If the value of p_asset_fin_rec_adj.reval_ceiling is FND_API.G_MISS_NUM then make it NULL
2684 -- And after this calculate the value of New Reval Ceiling differently when the Adjusted Reval
2685 -- Ceiling is NULL.
2686 if (p_asset_fin_rec_adj.reval_ceiling = FND_API.G_MISS_NUM) then
2687 l_reval_ceiling_adj := null;
2688 else
2689 l_reval_ceiling_adj := p_asset_fin_rec_adj.reval_ceiling;
2690 end if;
2691
2692 if (l_reval_ceiling_adj is NULL) then
2693 px_asset_fin_rec_new.reval_ceiling := NULL;
2694 else
2695 px_asset_fin_rec_new.reval_ceiling := nvl(l_reval_ceiling_adj, 0) +
2696 nvl(p_asset_fin_rec_old.reval_ceiling, 0);
2697 end if;
2698
2699 px_asset_fin_rec_new.unrevalued_cost := nvl(p_asset_fin_rec_adj.unrevalued_cost,
2700 nvl(p_asset_fin_rec_adj.cost, 0)) +
2701 nvl(p_asset_fin_rec_old.unrevalued_cost,
2702 nvl(p_asset_fin_rec_old.cost, 0));
2703 px_asset_fin_rec_new.cip_cost := nvl(p_asset_fin_rec_adj.cip_cost, 0) +
2704 nvl(p_asset_fin_rec_old.cip_cost, 0);
2705
2706
2707 -- SLA Uptake
2708 -- keeping this for now, but it may need to change
2709 -- intention is to allow the new amounts to be calculated,
2710 -- but insert the ADJ via faxiat
2711
2712
2713 if (p_asset_hdr_rec.period_of_addition = 'Y') then
2714
2715 if px_trans_rec.transaction_type_code = 'ADDITION' /*Bug# - 9212314 */
2716 or px_trans_rec.transaction_type_code = 'CIP ADDITION' then /*Bug# - 10329295 */
2717 px_asset_fin_rec_new.original_cost := nvl(p_asset_fin_rec_adj.original_cost,
2718 nvl(p_asset_fin_rec_adj.cost, 0)) +
2719 nvl(p_asset_fin_rec_old.original_cost,
2720 nvl(p_asset_fin_rec_old.cost, 0));
2721 else
2722 px_asset_fin_rec_new.original_cost := nvl(p_asset_fin_rec_old.original_cost,0);
2723 end if;
2724 px_asset_deprn_rec_new.deprn_amount := 0;
2725 px_asset_deprn_rec_new.deprn_reserve := nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) +
2726 nvl(p_asset_deprn_rec_old.deprn_reserve, 0);
2727 px_asset_deprn_rec_new.ytd_deprn := nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) +
2728 nvl(p_asset_deprn_rec_old.ytd_deprn, 0);
2729 px_asset_deprn_rec_new.reval_deprn_reserve := nvl(p_asset_deprn_rec_adj.reval_deprn_reserve, 0) +
2730 nvl(p_asset_deprn_rec_old.reval_deprn_reserve, 0);
2731 px_asset_deprn_rec_new.reval_ytd_deprn := nvl(p_asset_deprn_rec_adj.reval_ytd_deprn, 0) +
2732 nvl(p_asset_deprn_rec_old.reval_ytd_deprn, 0);
2733 px_asset_deprn_rec_new.production := nvl(p_asset_deprn_rec_adj.production, 0) +
2734 nvl(p_asset_deprn_rec_old.production, 0);
2735 px_asset_deprn_rec_new.ltd_production := nvl(p_asset_deprn_rec_adj.ltd_production, 0) +
2736 nvl(p_asset_deprn_rec_old.ltd_production, 0);
2737 px_asset_deprn_rec_new.ytd_production := nvl(p_asset_deprn_rec_adj.ytd_production, 0) +
2738 nvl(p_asset_deprn_rec_old.ytd_production, 0);
2739
2740 px_asset_deprn_rec_new.bonus_deprn_amount := 0;
2741 px_asset_deprn_rec_new.bonus_deprn_reserve := nvl(p_asset_deprn_rec_adj.bonus_deprn_reserve, 0) +
2742 nvl(p_asset_deprn_rec_old.bonus_deprn_reserve, 0);
2743 px_asset_deprn_rec_new.bonus_ytd_deprn := nvl(p_asset_deprn_rec_adj.bonus_ytd_deprn, 0) +
2744 nvl(p_asset_deprn_rec_old.bonus_ytd_deprn, 0);
2745 px_asset_deprn_rec_new.impairment_amount := 0;
2746 px_asset_deprn_rec_new.ytd_impairment := 0;
2747 px_asset_deprn_rec_new.impairment_reserve := 0;
2748 else
2749
2750 px_asset_fin_rec_new.original_cost := nvl(p_asset_fin_rec_old.original_cost,0);
2751 px_asset_deprn_rec_new.deprn_reserve := nvl(p_asset_deprn_rec_old.deprn_reserve, 0);
2752 px_asset_deprn_rec_new.ytd_deprn := nvl(p_asset_deprn_rec_old.ytd_deprn, 0);
2753 px_asset_deprn_rec_new.reval_deprn_reserve := nvl(p_asset_deprn_rec_old.reval_deprn_reserve, 0);
2754 px_asset_deprn_rec_new.reval_ytd_deprn := nvl(p_asset_deprn_rec_old.reval_ytd_deprn, 0);
2755 px_asset_deprn_rec_new.ltd_production := nvl(p_asset_deprn_rec_old.ltd_production, 0);
2756 px_asset_deprn_rec_new.ytd_production := nvl(p_asset_deprn_rec_old.ytd_production, 0);
2757 px_asset_deprn_rec_new.bonus_deprn_reserve := nvl(p_asset_deprn_rec_old.bonus_deprn_reserve, 0);
2758 px_asset_deprn_rec_new.bonus_ytd_deprn := nvl(p_asset_deprn_rec_old.bonus_ytd_deprn, 0);
2759 px_asset_deprn_rec_new.impairment_amount := nvl(p_asset_deprn_rec_old.impairment_amount, 0);
2760 px_asset_deprn_rec_new.ytd_impairment := nvl(p_asset_deprn_rec_old.ytd_impairment, 0);
2761 px_asset_deprn_rec_new.impairment_reserve := nvl(p_asset_deprn_rec_old.impairment_reserve, 0);
2762
2763 end if;
2764
2765 px_asset_fin_rec_new.short_fiscal_year_flag := nvl(p_asset_fin_rec_adj.short_fiscal_year_flag,
2766 nvl(p_asset_fin_rec_old.short_fiscal_year_flag, 'NO'));
2767
2768 if (px_asset_fin_rec_new.short_fiscal_year_flag = 'YES') then
2769 px_asset_fin_rec_new.conversion_date := nvl(p_asset_fin_rec_adj.conversion_date,
2770 p_asset_fin_rec_old.conversion_date);
2771 px_asset_fin_rec_new.orig_deprn_start_date := nvl(p_asset_fin_rec_adj.orig_deprn_start_date,
2772 p_asset_fin_rec_old.orig_deprn_start_date);
2773 else
2774 px_asset_fin_rec_new.conversion_date := null;
2775 px_asset_fin_rec_new.orig_deprn_start_date := null;
2776 end if;
2777
2778 -- Japan Tax Phase3
2779 FA_UTIL_PVT.load_char_value
2780 (p_char_old => p_asset_fin_rec_old.extended_deprn_flag,
2781 p_char_adj => p_asset_fin_rec_adj.extended_deprn_flag,
2782 x_char_new => px_asset_fin_rec_new.extended_deprn_flag, p_log_level_rec => p_log_level_rec);
2783
2784 FA_UTIL_PVT.load_num_value
2785 (p_num_old => p_asset_fin_rec_old.extended_depreciation_period,
2786 p_num_adj => p_asset_fin_rec_adj.extended_depreciation_period,
2787 x_num_new => px_asset_fin_rec_new.extended_depreciation_period, p_log_level_rec => p_log_level_rec);
2788
2789 -- round those values holding currency amounts
2790 -- converted to use utils package instead of fa_round_pkg
2791 -- so that the correct sob (P/R) is always used to get currency
2792
2793
2794 if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.cost,
2795 p_asset_hdr_rec.book_type_code,
2796 p_asset_hdr_rec.set_of_books_id,
2797 p_log_level_rec => p_log_level_rec) then
2798 raise calc_err;
2799 end if;
2800
2801
2802 if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.original_cost,
2803 p_asset_hdr_rec.book_type_code,
2804 p_asset_hdr_rec.set_of_books_id,
2805 p_log_level_rec => p_log_level_rec) then
2806 raise calc_err;
2807 end if;
2808
2809 if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.reval_amortization_basis,
2810 p_asset_hdr_rec.book_type_code,
2811 p_asset_hdr_rec.set_of_books_id,
2812 p_log_level_rec => p_log_level_rec) then
2813 raise calc_err;
2814 end if;
2815
2816 if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.reval_ceiling,
2817 p_asset_hdr_rec.book_type_code,
2818 p_asset_hdr_rec.set_of_books_id,
2819 p_log_level_rec => p_log_level_rec) then
2820 raise calc_err;
2821 end if;
2822
2823 if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.unrevalued_cost,
2824 p_asset_hdr_rec.book_type_code,
2825 p_asset_hdr_rec.set_of_books_id,
2826 p_log_level_rec => p_log_level_rec) then
2827 raise calc_err;
2828 end if;
2829
2830 if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.cip_cost,
2831 p_asset_hdr_rec.book_type_code,
2832 p_asset_hdr_rec.set_of_books_id,
2833 p_log_level_rec => p_log_level_rec) then
2834 raise calc_err;
2835 end if;
2836
2837 if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.deprn_reserve,
2838 p_asset_hdr_rec.book_type_code,
2839 p_asset_hdr_rec.set_of_books_id,
2840 p_log_level_rec => p_log_level_rec) then
2841 raise calc_err;
2842 end if;
2843
2844 if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.ytd_deprn,
2845 p_asset_hdr_rec.book_type_code,
2846 p_asset_hdr_rec.set_of_books_id,
2847 p_log_level_rec => p_log_level_rec) then
2848 raise calc_err;
2849 end if;
2850
2851 if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.reval_deprn_reserve,
2852 p_asset_hdr_rec.book_type_code,
2853 p_asset_hdr_rec.set_of_books_id,
2854 p_log_level_rec => p_log_level_rec) then
2855 raise calc_err;
2856 end if;
2857
2858 if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.reval_ytd_deprn,
2859 p_asset_hdr_rec.book_type_code,
2860 p_asset_hdr_rec.set_of_books_id,
2861 p_log_level_rec => p_log_level_rec) then
2862 raise calc_err;
2863 end if;
2864
2865 if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.bonus_deprn_reserve,
2866 p_asset_hdr_rec.book_type_code,
2867 p_asset_hdr_rec.set_of_books_id,
2868 p_log_level_rec => p_log_level_rec) then
2869 raise calc_err;
2870 end if;
2871
2872 if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.bonus_ytd_deprn,
2873 p_asset_hdr_rec.book_type_code,
2874 p_asset_hdr_rec.set_of_books_id,
2875 p_log_level_rec => p_log_level_rec) then
2876 raise calc_err;
2877 end if;
2878
2879 if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.impairment_reserve,
2880 p_asset_hdr_rec.book_type_code,
2881 p_asset_hdr_rec.set_of_books_id,
2882 p_log_level_rec => p_log_level_rec) then
2883 raise calc_err;
2884 end if;
2885
2886 if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.ytd_impairment,
2887 p_asset_hdr_rec.book_type_code,
2888 p_asset_hdr_rec.set_of_books_id,
2889 p_log_level_rec => p_log_level_rec) then
2890 raise calc_err;
2891 end if;
2892
2893 if (p_mrc_sob_type_code <> 'R' and p_asset_type_rec.asset_type <> 'GROUP') then --Bug 9099190
2894 G_primary_new_cost := px_asset_fin_rec_new.cost;
2895 end if;
2896
2897 return true;
2898
2899 EXCEPTION
2900 when calc_err then
2901 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2902 return false;
2903
2904 when others then
2905 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2906 return false;
2907
2908
2909 END calc_new_amounts;
2910
2911 FUNCTION calc_derived_amounts
2912 (px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
2913 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
2914 p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
2915 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
2916 p_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
2917 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
2918 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
2919 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
2920 p_asset_deprn_rec_old IN FA_API_TYPES.asset_deprn_rec_type,
2921 p_asset_deprn_rec_adj IN FA_API_TYPES.asset_deprn_rec_type,
2922 px_asset_deprn_rec_new IN OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type,
2923 p_period_rec IN FA_API_TYPES.period_rec_type,
2924 p_mrc_sob_type_code IN VARCHAR2
2925 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
2926
2927 l_count number := 0;
2928 l_calling_fn VARCHAR2(40) := 'fa_asset_calc_pvt.calc_derived_amounts';
2929 calc_err EXCEPTION;
2930
2931 BEGIN
2932
2933 if not calc_deprn_start_date
2934 (p_asset_hdr_rec => p_asset_hdr_rec,
2935 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
2936 px_asset_fin_rec_new => px_asset_fin_rec_new,
2937 p_log_level_rec => p_log_level_rec
2938 ) then
2939 raise calc_err;
2940 end if;
2941
2942 if not calc_salvage_value
2943 (p_trans_rec => px_trans_rec,
2944 p_asset_hdr_rec => p_asset_hdr_rec,
2945 p_asset_type_rec => p_asset_type_rec,
2946 p_asset_fin_rec_old => p_asset_fin_rec_old,
2947 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
2948 px_asset_fin_rec_new => px_asset_fin_rec_new,
2949 p_mrc_sob_type_code => p_mrc_sob_type_code,
2950 p_log_level_rec => p_log_level_rec
2951 ) then
2952 raise calc_err;
2953 end if;
2954
2955 -- BUG# 2650528
2956 -- need to call calc_itc_info before calc_rec_cost
2957 -- in order to get the itc_basis otherwise the rec_cost
2958 -- would just be set to null
2959
2960 if (fa_cache_pkg.fazcbc_record.book_class = 'TAX' and
2961 px_asset_fin_rec_new.itc_amount_id is not null) then
2962 if not calc_itc_info
2963 (p_asset_hdr_rec => p_asset_hdr_rec,
2964 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
2965 px_asset_fin_rec_new => px_asset_fin_rec_new,
2966 p_log_level_rec => p_log_level_rec
2967 ) then
2968 raise calc_err;
2969 end if;
2970 end if;
2971
2972 if not calc_rec_cost
2973 (p_asset_hdr_rec => p_asset_hdr_rec,
2974 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
2975 px_asset_fin_rec_new => px_asset_fin_rec_new,
2976 p_log_level_rec => p_log_level_rec
2977 ) then
2978 raise calc_err;
2979 end if;
2980
2981
2982 if not calc_deprn_limit_adj_rec_cost
2983 (p_asset_hdr_rec => p_asset_hdr_rec,
2984 p_asset_type_rec => p_asset_type_rec,
2985 p_asset_fin_rec_old => p_asset_fin_rec_old,
2986 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
2987 px_asset_fin_rec_new => px_asset_fin_rec_new,
2988 p_mrc_sob_type_code => p_mrc_sob_type_code,
2989 p_log_level_rec => p_log_level_rec
2990 ) then
2991 raise calc_err;
2992 end if;
2993
2994
2995 if not calc_flags
2996 (p_trans_rec => px_trans_rec,
2997 p_asset_hdr_rec => p_asset_hdr_rec,
2998 p_asset_type_rec => p_asset_type_rec,
2999 p_asset_fin_rec_old => p_asset_fin_rec_old,
3000 px_asset_fin_rec_new => px_asset_fin_rec_new,
3001 p_asset_deprn_rec => px_asset_deprn_rec_new,
3002 p_period_rec => p_period_rec,
3003 p_log_level_rec => p_log_level_rec
3004 ) then
3005 raise calc_err;
3006 end if;
3007
3008 -- Japan Tax phase3 Start
3009 -- Bug 8559068 base bug 7707540: load_num_value is called only while setting/resetting
3010 -- the extended_deprn_flag also removed the fix for 6707623
3011 -- bug 8819226 do not change the value of both flags when deprn flag is switched ON/OFF
3012 -- Bug 9244648: Set pc_fully_rsvd when called from tax upload
3013 -- Bug 9707074 Non-JapanTax: do not change the value of both flags when deprn flag is switched ON/OFF
3014 if (((nvl(p_asset_fin_rec_old.extended_deprn_flag, '-1') <> nvl(p_asset_fin_rec_adj.extended_deprn_flag, '-1'))
3015 OR (nvl(p_asset_fin_rec_old.extended_deprn_flag, '-1') = 'Y')
3016 OR (nvl(px_trans_rec.calling_interface,'X') = 'FATAXUP'))
3017 and nvl(fnd_profile.value('FA_JAPAN_TAX_REFORMS'),'N') = 'Y')
3018 OR (nvl(p_asset_fin_rec_old.depreciate_flag, 'YES') = 'YES'
3019 AND nvl(px_asset_fin_rec_new.depreciate_flag, 'YES') = 'NO') then
3020
3021 FA_UTIL_PVT.load_num_value
3022 (p_num_old => p_asset_fin_rec_old.period_counter_life_complete,
3023 p_num_adj => p_asset_fin_rec_adj.period_counter_life_complete,
3024 x_num_new => px_asset_fin_rec_new.period_counter_life_complete,
3025 p_log_level_rec => p_log_level_rec);
3026
3027 FA_UTIL_PVT.load_num_value
3028 (p_num_old => p_asset_fin_rec_old.period_counter_fully_reserved,
3029 p_num_adj => p_asset_fin_rec_adj.period_counter_fully_reserved,
3030 x_num_new => px_asset_fin_rec_new.period_counter_fully_reserved,
3031 p_log_level_rec => p_log_level_rec);
3032
3033 end if;
3034
3035 if (p_log_level_rec.statement_level) then
3036 fa_debug_pkg.add(l_calling_fn, 'JPTX1: deprn_method_code', px_asset_fin_rec_new.deprn_method_code, p_log_level_rec);
3037 fa_debug_pkg.add(l_calling_fn, 'JPTX1: life_in_months', px_asset_fin_rec_new.life_in_months, p_log_level_rec);
3038 fa_debug_pkg.add(l_calling_fn, 'JPTX1: salvage_value', px_asset_fin_rec_new.salvage_value, p_log_level_rec);
3039 fa_debug_pkg.add(l_calling_fn, 'JPTX1: period_counter_fully_reserved',
3040 px_asset_fin_rec_new.period_counter_fully_reserved, p_log_level_rec);
3041 fa_debug_pkg.add(l_calling_fn, 'JPTX1: period_counter_life_complete',
3042 px_asset_fin_rec_new.period_counter_life_complete, p_log_level_rec);
3043 fa_debug_pkg.add(l_calling_fn, 'JPTX1: basic_rate', px_asset_fin_rec_new.basic_rate, p_log_level_rec);
3044 fa_debug_pkg.add(l_calling_fn, 'JPTX1: adjusted_rate', px_asset_fin_rec_new.adjusted_rate, p_log_level_rec);
3045 fa_debug_pkg.add(l_calling_fn, 'JPTX1: allowed_deprn_limit',
3046 px_asset_fin_rec_new.allowed_deprn_limit, p_log_level_rec);
3047 fa_debug_pkg.add(l_calling_fn, 'JPTX1: deprn_limit_type', px_asset_fin_rec_new.deprn_limit_type, p_log_level_rec);
3048 fa_debug_pkg.add(l_calling_fn, 'JPTX1: allowed_deprn_limit_amount',
3049 px_asset_fin_rec_new.allowed_deprn_limit_amount, p_log_level_rec);
3050 fa_debug_pkg.add(l_calling_fn, 'JPTX1: recoverable_cost', px_asset_fin_rec_new.recoverable_cost, p_log_level_rec);
3051 fa_debug_pkg.add(l_calling_fn, 'JPTX1: adjusted_rate', p_asset_fin_rec_old.adjusted_rate, p_log_level_rec);
3052 end if;
3053 -- Japan Tax phase3 End
3054
3055 return true;
3056
3057 EXCEPTION
3058 when calc_err then
3059 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3060 return false;
3061
3062 when others then
3063 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3064 return false;
3065
3066 END calc_derived_amounts;
3067
3068
3069 FUNCTION calc_prorate_date
3070 (p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
3071 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
3072 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
3073 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
3074 p_period_rec IN FA_API_TYPES.period_rec_type
3075 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3076
3077 l_count number:= 0;
3078 l_prorate_calendar varchar2(15);
3079 l_fiscal_year_name varchar2(30);
3080 l_calling_fn varchar2(40) := 'fa_asset_calc_pvt.calc_prorate_date';
3081 calc_err EXCEPTION;
3082
3083 BEGIN
3084
3085 l_prorate_calendar := fa_cache_pkg.fazcbc_record.prorate_calendar;
3086 l_fiscal_year_name := fa_cache_pkg.fazcbc_record.fiscal_year_name;
3087
3088 if (p_asset_type_rec.asset_type = 'GROUP') then
3089 px_asset_fin_rec_new.prorate_date := px_asset_fin_rec_new.date_placed_in_service;
3090 else
3091
3092 if (px_asset_fin_rec_new.prorate_convention_code is null) then
3093 fa_srvr_msg.add_message(
3094 calling_fn => l_calling_fn,
3095 name => 'FA_EXP_GET_PRORATE_INFO', p_log_level_rec => p_log_level_rec);
3096 raise calc_err;
3097 end if;
3098
3099 if not fa_cache_pkg.fazccvt
3100 (x_prorate_convention_code => px_asset_fin_rec_new.prorate_convention_code,
3101 x_fiscal_year_name => l_fiscal_year_name, p_log_level_rec => p_log_level_rec) then
3102 raise calc_err;
3103 end if;
3104
3105 if (p_log_level_rec.statement_level) then
3106 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_new.prorate_convention_code', px_asset_fin_rec_new.prorate_convention_code, p_log_level_rec => p_log_level_rec);
3107 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_new.date_placed_in_service', px_asset_fin_rec_new.date_placed_in_service, p_log_level_rec => p_log_level_rec);
3108 fa_debug_pkg.add(l_calling_fn, 'l_prorate_calendar', l_prorate_calendar, p_log_level_rec => p_log_level_rec);
3109 end if;
3110
3111 select /*+ leading(conv) use_nl(conv cp) index(cp) */
3112 prorate_date
3113 into px_asset_fin_rec_new.prorate_date
3114 from fa_calendar_periods cp,
3115 fa_conventions conv
3116 where conv.prorate_convention_code = px_asset_fin_rec_new.prorate_convention_code
3117 and conv.start_date <= px_asset_fin_rec_new.date_placed_in_service
3118 and conv.end_date >= px_asset_fin_rec_new.date_placed_in_service
3119 and cp.calendar_type = l_prorate_calendar
3120 and conv.prorate_date >= cp.start_date
3121 and conv.prorate_date <= cp.end_date;
3122
3123 -- BUG# 2251278
3124 -- removing the following as it prevent prorate periods that
3125 -- fall in a future period (such as FOL-MONTH)
3126 --
3127 -- and conv.prorate_date <= p_period_rec.fy_end_date;
3128
3129 end if; -- (p_asset_type_rec.asset_type = 'GROUP')
3130
3131 -- For Polish, we need additional changes here.
3132 -- First find out if we have a polish mechanism here
3133 if (nvl(px_asset_fin_rec_new.deprn_method_code,
3134 p_asset_fin_rec_adj.deprn_method_code) is not null) and
3135 (fa_cache_pkg.fazccmt (
3136 X_method => nvl(px_asset_fin_rec_new.deprn_method_code,
3137 p_asset_fin_rec_adj.deprn_method_code),
3138 X_life => nvl(px_asset_fin_rec_new.life_in_months,
3139 p_asset_fin_rec_adj.life_in_months),
3140 p_log_level_rec => p_log_level_rec
3141 )) then
3142 if (fa_cache_pkg.fazccmt_record.deprn_basis_rule_id is not null) then
3143 if (fa_cache_pkg.fazcdbr_record.polish_rule in (
3144 FA_STD_TYPES.FAD_DBR_POLISH_1,
3145 FA_STD_TYPES.FAD_DBR_POLISH_2)) then
3146 -- For Polish rules 1 and 2, set prorate_date based on dpis
3147 -- regardless of prorate convention.
3148 px_asset_fin_rec_new.prorate_date :=
3149 px_asset_fin_rec_new.date_placed_in_service;
3150 end if;
3151 end if;
3152 end if;
3153
3154 return true;
3155
3156 EXCEPTION
3157 when calc_err then
3158 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3159 return false;
3160
3161 when no_data_found then
3162 fa_srvr_msg.add_message(
3163 calling_fn => l_calling_fn,
3164 name => 'FA_EXP_GET_PRORATE_INFO', p_log_level_rec => p_log_level_rec);
3165 return FALSE;
3166
3167 when others then
3168 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3169
3170 return false;
3171
3172 END calc_prorate_date;
3173
3174 FUNCTION calc_deprn_start_date
3175 (p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
3176 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
3177 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type
3178 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3179
3180 l_dwaf varchar2(3);
3181 l_fiscal_year_name varchar2(30);
3182 l_calling_fn varchar2(40) := 'fa_asset_calc_pvt.calc_deprn_start_date';
3183 calc_err EXCEPTION;
3184
3185 BEGIN
3186
3187 l_fiscal_year_name := fa_cache_pkg.fazcbc_record.fiscal_year_name;
3188
3189 if not fa_cache_pkg.fazccvt
3190 (x_prorate_convention_code => px_asset_fin_rec_new.prorate_convention_code,
3191 x_fiscal_year_name => l_fiscal_year_name, p_log_level_rec => p_log_level_rec) then
3192 raise calc_err;
3193 end if;
3194
3195 l_dwaf := fa_cache_pkg.fazccvt_record.depr_when_acquired_flag;
3196
3197 if (l_dwaf = 'YES') then
3198 px_asset_fin_rec_new.deprn_start_date := px_asset_fin_rec_new.date_placed_in_service;
3199 else
3200 px_asset_fin_rec_new.deprn_start_date := px_asset_fin_rec_new.prorate_date;
3201 end if;
3202
3203 if px_asset_fin_rec_new.deprn_start_date is null then
3204 raise calc_err;
3205 end if;
3206
3207 return true;
3208
3209 EXCEPTION
3210 when calc_err then
3211 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3212 return false;
3213
3214 when others then
3215 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3216 return false;
3217
3218 END calc_deprn_start_date;
3219
3220
3221 FUNCTION calc_rec_cost
3222 (p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
3223 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
3224 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type
3225 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3226
3227 CURSOR c_get_rec_cost_w_ceiling IS
3228 select least(px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value,
3229 nvl(ce.limit, px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value))
3230 from fa_ceilings ce
3231 where ce.ceiling_name = px_asset_fin_rec_new.ceiling_name
3232 and px_asset_fin_rec_new.date_placed_in_service
3233 between ce.start_date and
3234 nvl(ce.end_date, px_asset_fin_rec_new.date_placed_in_service);
3235
3236 l_ceiling_type varchar2(30);
3237 l_calling_fn varchar2(40) := 'fa_asset_calc_pvt.calc_rec_cost';
3238
3239 l_temp_rec_cost number;
3240
3241 calc_err EXCEPTION;
3242
3243 BEGIN
3244
3245 -- can probably convert to cache calls here
3246
3247 if (px_asset_fin_rec_new.ceiling_name is not null) then
3248 select ceiling_type
3249 into l_ceiling_type
3250 from fa_ceiling_types
3251 where ceiling_name = px_asset_fin_rec_new.ceiling_name;
3252 end if;
3253
3254 if (px_asset_fin_rec_new.itc_amount_id is null) then
3255
3256 if l_ceiling_type = 'RECOVERABLE COST CEILING' then
3257
3258 OPEN c_get_rec_cost_w_ceiling;
3259 FETCH c_get_rec_cost_w_ceiling INTO l_temp_rec_cost;
3260
3261 if c_get_rec_cost_w_ceiling%NOTFOUND then
3262 px_asset_fin_rec_new.recoverable_cost := px_asset_fin_rec_new.cost -
3263 px_asset_fin_rec_new.salvage_value;
3264 else
3265 px_asset_fin_rec_new.recoverable_cost := l_temp_rec_cost;
3266 end if;
3267
3268 CLOSE c_get_rec_cost_w_ceiling;
3269
3270 else
3271 px_asset_fin_rec_new.recoverable_cost :=
3272 px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value;
3273
3274 end if;
3275 else
3276 if (l_ceiling_type = 'RECOVERABLE COST CEILING') then
3277 select least(px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value -
3278 px_asset_fin_rec_new.itc_basis * ir.basis_reduction_rate,
3279 nvl(ce.limit, px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value -
3280 px_asset_fin_rec_new.itc_basis * ir.basis_reduction_rate))
3281 into px_asset_fin_rec_new.recoverable_cost
3282 from fa_ceilings ce,
3283 fa_itc_rates ir
3284 where ir.itc_amount_id = px_asset_fin_rec_new.itc_amount_id
3285 and ce.ceiling_name = px_asset_fin_rec_new.ceiling_name
3286 and px_asset_fin_rec_new.date_placed_in_service
3287 between ce.start_date and
3288 nvl(ce.end_date, px_asset_fin_rec_new.date_placed_in_service);
3289
3290 else
3291 select px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value -
3292 px_asset_fin_rec_new.itc_basis * ir.basis_reduction_rate
3293 into px_asset_fin_rec_new.recoverable_cost
3294 from fa_itc_rates ir
3295 where ir.itc_amount_id = px_asset_fin_rec_new.itc_amount_id;
3296 end if;
3297 end if;
3298
3299 return true;
3300
3301 EXCEPTION
3302 when calc_err then
3303 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3304 return false;
3305
3306 when others then
3307 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3308 return false;
3309
3310 END calc_rec_cost;
3311
3312
3313 FUNCTION calc_deprn_limit_adj_rec_cost
3314 (p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
3315 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
3316 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
3317 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
3318 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
3319 p_called_from_faxama IN BOOLEAN DEFAULT FALSE, -- Bug 6604235
3320 p_mrc_sob_type_code IN VARCHAR2
3321 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3322
3323 l_calling_fn VARCHAR2(40) := 'fa_asset_calc_pvt.calc_deprn_limit';
3324 calc_err EXCEPTION;
3325
3326 BEGIN
3327
3328 -- like % salvage, we will now allow direct entry of limits on
3329 -- an asset by asset basis as part of the group project and
3330 -- no longer mandate from category
3331
3332 -- reclass with redefault MUST explicitly populate the
3333 -- fin_adj rec with the new categories info (including treating
3334 -- the amount as a delta) ??? verify feasibility of ths last point ???
3335
3336 if (p_log_level_rec.statement_level) then
3337 fa_debug_pkg.add(l_calling_fn,
3338 'deprn_limit type',
3339 p_asset_fin_rec_old.deprn_limit_type, p_log_level_rec => p_log_level_rec);
3340 fa_debug_pkg.add(l_calling_fn,
3341 'salvage type',
3342 p_asset_fin_rec_adj.deprn_limit_type, p_log_level_rec => p_log_level_rec);
3343 fa_debug_pkg.add(l_calling_fn,
3344 'delta deprn limit',
3345 p_asset_fin_rec_adj.allowed_deprn_limit, p_log_level_rec => p_log_level_rec);
3346 fa_debug_pkg.add(l_calling_fn,
3347 'delta deprn limit amount',
3348 p_asset_fin_rec_adj.allowed_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
3349 end if;
3350
3351 px_asset_fin_rec_new.deprn_limit_type :=
3352 nvl(p_asset_fin_rec_adj.deprn_limit_type,
3353 nvl(p_asset_fin_rec_old.deprn_limit_type, 'NONE'));
3354
3355 if (p_log_level_rec.statement_level) then
3356 fa_debug_pkg.add(l_calling_fn,
3357 'limit type',
3358 px_asset_fin_rec_new.deprn_limit_type, p_log_level_rec => p_log_level_rec);
3359 end if;
3360
3361 -- Bug 6863138 When called from faxama, adj rec will have new values
3362 -- Bug 12556373 changed the below IF condition
3363 if p_called_from_faxama and px_asset_fin_rec_new.deprn_limit_type <> 'NONE' then
3364 px_asset_fin_rec_new.allowed_deprn_limit := p_asset_fin_rec_adj.allowed_deprn_limit;
3365 px_asset_fin_rec_new.allowed_deprn_limit_amount := p_asset_fin_rec_adj.allowed_deprn_limit_amount;
3366 --bug 14838772 FP Bug 8601905 :- Recalculate the limit amount in case of PCT
3367 if (px_asset_fin_rec_new.deprn_limit_type = 'PCT') then
3368 px_asset_fin_rec_new.allowed_deprn_limit_amount := px_asset_fin_rec_new.cost -
3369 (px_asset_fin_rec_new.cost *
3370 px_asset_fin_rec_new.allowed_deprn_limit);
3371 if not FA_UTILS_PKG.faxceil(px_asset_fin_rec_new.allowed_deprn_limit_amount,
3372 p_asset_hdr_rec.book_type_code,
3373 p_asset_hdr_rec.set_of_books_id,
3374 p_log_level_rec => p_log_level_rec) then
3375 raise calc_err;
3376 end if;
3377 end if;
3378 -- Bug#6913554,For calculating correct reserve amount during back dated retirement transaction.
3379 if px_asset_fin_rec_new.cost <> 0 then
3380 px_asset_fin_rec_new.adjusted_recoverable_cost :=
3381 px_asset_fin_rec_new.cost - nvl(px_asset_fin_rec_new.allowed_deprn_limit_amount,0);
3382 else
3383 px_asset_fin_rec_new.adjusted_recoverable_cost := 0;
3384 end if;
3385 --Bug#6913554,End of fix.
3386
3387
3388 -- round the adj_rec_cost
3389 if not FA_UTILS_PKG.faxfloor(px_asset_fin_rec_new.adjusted_recoverable_cost,
3390 p_asset_hdr_rec.book_type_code,
3391 p_asset_hdr_rec.set_of_books_id,
3392 p_log_level_rec => p_log_level_rec) then
3393 raise calc_err;
3394 end if;
3395
3396 if (p_log_level_rec.statement_level) then
3397 fa_debug_pkg.add(l_calling_fn,
3398 'From faxama new allowed_deprn_limit_amount',
3399 px_asset_fin_rec_new.allowed_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
3400 fa_debug_pkg.add(l_calling_fn,
3401 'new allowed_deprn_limit',
3402 px_asset_fin_rec_new.allowed_deprn_limit, p_log_level_rec => p_log_level_rec);
3403 fa_debug_pkg.add(l_calling_fn,
3404 'px_asset_fin_rec_new.adjusted_recoverable_cost',
3405 px_asset_fin_rec_new.adjusted_recoverable_cost, p_log_level_rec => p_log_level_rec);
3406 end if;
3407
3408 return true;
3409
3410 end if;
3411 -- Bug 6863138 End
3412
3413 if (px_asset_fin_rec_new.deprn_limit_type = 'SUM' and
3414 p_asset_type_rec.asset_type <> 'GROUP') then
3415 fa_srvr_msg.add_message(
3416 calling_fn => l_calling_fn,
3417 name => '***FA_NO_SUM_NO_GROUP***',
3418 p_log_level_rec => p_log_level_rec);
3419 raise calc_err;
3420 elsif (px_asset_fin_rec_new.deprn_limit_type = 'AMT' and
3421 p_asset_type_rec.asset_type = 'GROUP') then
3422 fa_srvr_msg.add_message(
3423 calling_fn => l_calling_fn,
3424 name => '***FA_NO_LIM_AMT_FOR_GROUP***',
3425 p_log_level_rec => p_log_level_rec);
3426 raise calc_err;
3427 elsif (px_asset_fin_rec_new.deprn_limit_type <> 'AMT' and
3428 px_asset_fin_rec_new.deprn_limit_type <> 'PCT' and
3429 px_asset_fin_rec_new.deprn_limit_type <> 'SUM' and
3430 px_asset_fin_rec_new.deprn_limit_type <> 'NONE') then
3431 fa_srvr_msg.add_message(
3432 calling_fn => l_calling_fn,
3433 name => 'FA_INVALID_PARAMETER',
3434 token1 => 'VALUE',
3435 value1 => px_asset_fin_rec_new.deprn_limit_type,
3436 token2 => 'PARAM',
3437 value2 => 'DEPRN_LIMIT_TYPE', p_log_level_rec => p_log_level_rec);
3438 raise calc_err;
3439 end if;
3440
3441
3442
3443 -- enhancing for group and core to allow direct percentage
3444 -- entry for the assets and not just defaults from category
3445 -- note that we initially set the new value for the salvage %
3446 -- in calc_new_amounts and use that here.
3447 --
3448 -- NOTE: we loaded the "new.deprn_limit_type" value previously
3449 -- NOTE2: limit amount must be truncated
3450 --
3451 if (px_asset_fin_rec_new.deprn_limit_type = 'PCT') then
3452 -- use the percentage
3453 px_asset_fin_rec_new.allowed_deprn_limit := (nvl(p_asset_fin_rec_adj.allowed_deprn_limit, 0) +
3454 nvl(p_asset_fin_rec_old.allowed_deprn_limit, 0));
3455
3456 px_asset_fin_rec_new.allowed_deprn_limit_amount := px_asset_fin_rec_new.cost -
3457 (px_asset_fin_rec_new.cost *
3458 px_asset_fin_rec_new.allowed_deprn_limit);
3459
3460 -- BUG# 3092066
3461 -- use ceiling here, not round
3462 -- this results in a floor on the final amount
3463 if not FA_UTILS_PKG.faxceil(px_asset_fin_rec_new.allowed_deprn_limit_amount,
3464 p_asset_hdr_rec.book_type_code,
3465 p_asset_hdr_rec.set_of_books_id,
3466 p_log_level_rec => p_log_level_rec) then
3467 raise calc_err;
3468 end if;
3469
3470 px_asset_fin_rec_new.adjusted_recoverable_cost :=
3471 px_asset_fin_rec_new.cost - px_asset_fin_rec_new.allowed_deprn_limit_amount;
3472
3473 elsif (px_asset_fin_rec_new.deprn_limit_type = 'SUM') then
3474 -- this is used only for group assets
3475 -- performance may not be too great here
3476
3477
3478 -- BUG# 3198440
3479 -- for additions (old rec is null) just set to 0
3480
3481 px_asset_fin_rec_new.allowed_deprn_limit := null;
3482
3483 if (p_asset_fin_rec_old.deprn_limit_type is null) then
3484 px_asset_fin_rec_new.allowed_deprn_limit_amount := 0;
3485 elsif (p_asset_fin_rec_old.deprn_limit_type <> 'SUM') then
3486 if (p_mrc_sob_type_code <> 'R') then
3487 select nvl(sum(allowed_deprn_limit_amount), 0)
3488 into px_asset_fin_rec_new.allowed_deprn_limit_amount
3489 from fa_books bk,
3490 fa_additions_b ad
3491 where bk.transaction_header_id_out is null
3492 and bk.group_asset_id = p_asset_hdr_rec.asset_id
3493 and bk.asset_id = ad.asset_id
3494 and bk.book_type_code = p_asset_hdr_rec.book_type_code
3495 and ad.asset_type = 'CAPITALIZED';
3496 else
3497 select nvl(sum(allowed_deprn_limit_amount), 0)
3498 into px_asset_fin_rec_new.allowed_deprn_limit_amount
3499 from fa_mc_books bk,
3500 fa_additions_b ad
3501 where bk.transaction_header_id_out is null
3502 and bk.group_asset_id = p_asset_hdr_rec.asset_id
3503 and bk.asset_id = ad.asset_id
3504 and bk.book_type_code = p_asset_hdr_rec.book_type_code
3505 and ad.asset_type = 'CAPITALIZED'
3506 and bk.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3507 end if;
3508
3509 else
3510 px_asset_fin_rec_new.allowed_deprn_limit_amount :=
3511 nvl(p_asset_fin_rec_adj.allowed_deprn_limit_amount, 0) +
3512 nvl(p_asset_fin_rec_old.allowed_deprn_limit_amount, 0);
3513 end if;
3514
3515 -- validation
3516 if (px_asset_fin_rec_new.allowed_deprn_limit_amount = 0) then
3517 px_asset_fin_rec_new.adjusted_recoverable_cost :=
3518 px_asset_fin_rec_new.recoverable_cost;
3519 else
3520 px_asset_fin_rec_new.adjusted_recoverable_cost :=
3521 px_asset_fin_rec_new.cost - px_asset_fin_rec_new.allowed_deprn_limit_amount;
3522 end if;
3523 elsif (px_asset_fin_rec_new.deprn_limit_type = 'AMT') then
3524 px_asset_fin_rec_new.allowed_deprn_limit := null;
3525
3526 -- delta salvage amount may or may not be null
3527 -- use it or 0 for the delta
3528 if (p_mrc_sob_type_code <> 'R') then
3529
3530 -- BUG# 3516255
3531 -- when changing types, the delta is treated as the new amount
3532 -- we will not add to the prior value that may have been
3533 -- existed/calculated from previous type of PCT or SUM
3534 -- Bug 6705332 While extending assets
3535 -- p_asset_fin_rec_adj.allowed_deprn_limit_amount contains the final value.
3536 -- BUG 6806294 added the another 'OR' condition to check for ext deprn flag change
3537 if (p_asset_fin_rec_old.deprn_limit_type <> 'AMT') or
3538 ((nvl(p_asset_fin_rec_old.extended_deprn_flag,'N') <> 'Y') and
3539 (nvl(px_asset_fin_rec_new.extended_deprn_flag,'N') = 'Y'))
3540 or
3541 ((nvl(p_asset_fin_rec_old.extended_deprn_flag,'N') = 'Y') and
3542 (nvl(px_asset_fin_rec_new.extended_deprn_flag,'N') <> 'Y')) then
3543 px_asset_fin_rec_new.allowed_deprn_limit_amount :=
3544 nvl(p_asset_fin_rec_adj.allowed_deprn_limit_amount, 0);
3545
3546 else
3547 px_asset_fin_rec_new.allowed_deprn_limit_amount :=
3548 nvl(p_asset_fin_rec_adj.allowed_deprn_limit_amount, 0) +
3549 nvl(p_asset_fin_rec_old.allowed_deprn_limit_amount, 0);
3550 end if;
3551
3552 -- Bug 6604235 The validation need not be executed when
3553 -- calc_deprn_limit_adj_rec_cost is called from faxama
3554 -- (where we are recalculating from beginning).
3555 if (not p_called_from_faxama) and
3556 ((px_asset_fin_rec_new.cost > 0 and
3557 px_asset_fin_rec_new.allowed_deprn_limit_amount < 0) or
3558 (px_asset_fin_rec_new.cost < 0 and
3559 px_asset_fin_rec_new.allowed_deprn_limit_amount > 0)) then
3560 fa_srvr_msg.add_message(
3561 calling_fn => l_calling_fn,
3562 name => '***FA_DIFF_SIGN_LIMIT***',
3563 p_log_level_rec => p_log_level_rec);
3564 raise calc_err;
3565 elsif (px_asset_fin_rec_new.cost = 0) then
3566 px_asset_fin_rec_new.allowed_deprn_limit_amount := 0;
3567 end if;
3568
3569 G_primary_deprn_limit_amount := px_asset_fin_rec_new.allowed_deprn_limit_amount;
3570
3571 else
3572 -- Fix for Bug #2914328. Need to also make sure that
3573 -- G_primary_new_cost is not zero to avoid zero divide error.
3574 if (px_asset_fin_rec_new.cost <> 0) and
3575 (G_primary_new_cost <> 0) then
3576 px_asset_fin_rec_new.allowed_deprn_limit_amount :=
3577 G_primary_deprn_limit_amount *
3578 (px_asset_fin_rec_new.cost / G_primary_new_cost);
3579 else
3580 px_asset_fin_rec_new.allowed_deprn_limit_amount := 0;
3581 end if;
3582
3583 end if;
3584
3585 -- round the limit
3586 if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.allowed_deprn_limit_amount,
3587 p_asset_hdr_rec.book_type_code,
3588 p_asset_hdr_rec.set_of_books_id,
3589 p_log_level_rec => p_log_level_rec) then
3590 raise calc_err;
3591 end if;
3592
3593 px_asset_fin_rec_new.adjusted_recoverable_cost :=
3594 px_asset_fin_rec_new.cost - px_asset_fin_rec_new.allowed_deprn_limit_amount;
3595
3596 else -- NONE
3597 px_asset_fin_rec_new.allowed_deprn_limit_amount := NULL;
3598 px_asset_fin_rec_new.allowed_deprn_limit := NULL;
3599
3600 px_asset_fin_rec_new.adjusted_recoverable_cost :=
3601 px_asset_fin_rec_new.recoverable_cost;
3602
3603 end if;
3604
3605 -- round the adj_rec_cost
3606 if not FA_UTILS_PKG.faxfloor(px_asset_fin_rec_new.adjusted_recoverable_cost,
3607 p_asset_hdr_rec.book_type_code,
3608 p_asset_hdr_rec.set_of_books_id,
3609 p_log_level_rec => p_log_level_rec) then
3610 raise calc_err;
3611 end if;
3612
3613 if (p_log_level_rec.statement_level) then
3614 fa_debug_pkg.add(l_calling_fn,
3615 'new allowed_deprn_limit_amount',
3616 px_asset_fin_rec_new.allowed_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
3617 fa_debug_pkg.add(l_calling_fn,
3618 'px_asset_fin_rec_new.adjusted_recoverable_cost',
3619 px_asset_fin_rec_new.adjusted_recoverable_cost, p_log_level_rec => p_log_level_rec);
3620 end if;
3621
3622 return true;
3623
3624 EXCEPTION
3625 when calc_err then
3626 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3627 return false;
3628
3629 when others then
3630 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3631 return false;
3632
3633 END calc_deprn_limit_adj_rec_cost;
3634
3635
3636 FUNCTION calc_itc_info
3637 (p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
3638 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
3639 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type
3640 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3641
3642
3643 l_itc_amount_rate number;
3644 l_basis_reduction_rate number;
3645 l_itc_basis number;
3646 l_itc_basis_reduction_amount number;
3647 l_ceiling_limit number := 0;
3648 l_calling_fn varchar2(40) := 'fa_asset_calc_pvt.calc_itc_info';
3649 calc_err EXCEPTION;
3650
3651 BEGIN
3652
3653 select itc_amount_rate,
3654 basis_reduction_rate
3655 into l_itc_amount_rate,
3656 l_basis_reduction_rate
3657 from fa_itc_rates
3658 where itc_amount_id = px_asset_fin_rec_new.itc_amount_id;
3659
3660 if (px_asset_fin_rec_new.ceiling_name is not null) then
3661 select limit
3662 into l_ceiling_limit
3663 from fa_ceilings
3664 where ceiling_name = px_asset_fin_rec_new.ceiling_name
3665 and px_asset_fin_rec_new.date_placed_in_service between
3666 start_date and nvl(end_date, px_asset_fin_rec_new.date_placed_in_service);
3667 end if;
3668
3669 if (nvl(l_ceiling_limit, 0) = 0) then
3670 px_asset_fin_rec_new.itc_basis := px_asset_fin_rec_new.cost;
3671 else
3672 px_asset_fin_rec_new.itc_basis := least(px_asset_fin_rec_new.cost, l_ceiling_limit);
3673 end if;
3674
3675
3676 px_asset_fin_rec_new.itc_amount := px_asset_fin_rec_new.itc_basis * l_itc_amount_rate;
3677
3678 -- ????
3679
3680 -- round the amounts
3681 if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.itc_amount,
3682 p_asset_hdr_rec.book_type_code,
3683 p_asset_hdr_rec.set_of_books_id,
3684 p_log_level_rec => p_log_level_rec) then
3685 raise calc_err;
3686 end if;
3687
3688 if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.itc_basis,
3689 p_asset_hdr_rec.book_type_code,
3690 p_asset_hdr_rec.set_of_books_id,
3691 p_log_level_rec => p_log_level_rec) then
3692 raise calc_err;
3693 end if;
3694
3695
3696 return true;
3697
3698 EXCEPTION
3699 when calc_err then
3700 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3701 return false;
3702
3703 when others then
3704 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3705 return false;
3706
3707 END calc_itc_info;
3708
3709 FUNCTION calc_salvage_value
3710 (p_trans_rec IN FA_API_TYPES.trans_rec_type,
3711 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
3712 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
3713 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
3714 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
3715 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
3716 p_mrc_sob_type_code IN VARCHAR2
3717 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3718
3719 calc_err EXCEPTION;
3720 l_calling_fn VARCHAR2(40) := 'fa_asset_calc_pvt.calc_salvage_value';
3721
3722 BEGIN
3723
3724 if (p_log_level_rec.statement_level) then
3725 fa_debug_pkg.add(l_calling_fn,
3726 'old salvage type',
3727 p_asset_fin_rec_old.salvage_type, p_log_level_rec => p_log_level_rec);
3728 fa_debug_pkg.add(l_calling_fn,
3729 'adj salvage type',
3730 p_asset_fin_rec_adj.salvage_type, p_log_level_rec => p_log_level_rec);
3731 fa_debug_pkg.add(l_calling_fn,
3732 'delta salvage',
3733 p_asset_fin_rec_adj.salvage_value, p_log_level_rec => p_log_level_rec);
3734 fa_debug_pkg.add(l_calling_fn,
3735 'delta percent salvage',
3736 p_asset_fin_rec_adj.percent_salvage_value, p_log_level_rec => p_log_level_rec);
3737 end if;
3738
3739 -- note that the addition api will already derive the type
3740 -- so it should never be null here, but placing just in case
3741
3742 if (p_asset_type_rec.asset_type = 'GROUP') then
3743 px_asset_fin_rec_new.salvage_type :=
3744 nvl(p_asset_fin_rec_adj.salvage_type,
3745 nvl(p_asset_fin_rec_old.salvage_type, 'PCT'));
3746 else
3747 px_asset_fin_rec_new.salvage_type :=
3748 nvl(p_asset_fin_rec_adj.salvage_type,
3749 nvl(p_asset_fin_rec_old.salvage_type, 'AMT'));
3750 end if;
3751
3752 if (p_log_level_rec.statement_level) then
3753 fa_debug_pkg.add(l_calling_fn,
3754 'salvage type',
3755 px_asset_fin_rec_new.salvage_type, p_log_level_rec => p_log_level_rec);
3756 end if;
3757
3758 if (px_asset_fin_rec_new.salvage_type = 'SUM' and
3759 p_asset_type_rec.asset_type <> 'GROUP') then
3760 fa_srvr_msg.add_message(
3761 calling_fn => l_calling_fn,
3762 name => '***FA_NO_SUM_NO_GROUP***',
3763 p_log_level_rec => p_log_level_rec);
3764 raise calc_err;
3765 elsif (px_asset_fin_rec_new.salvage_type = 'AMT' and
3766 p_asset_type_rec.asset_type = 'GROUP') then
3767 fa_srvr_msg.add_message(
3768 calling_fn => l_calling_fn,
3769 name => '***FA_NO_SAL_AMT_FOR_GROUP***',
3770 p_log_level_rec => p_log_level_rec);
3771 raise calc_err;
3772 elsif (px_asset_fin_rec_new.salvage_type <> 'AMT' and
3773 px_asset_fin_rec_new.salvage_type <> 'PCT' and
3774 px_asset_fin_rec_new.salvage_type <> 'SUM') then
3775 fa_srvr_msg.add_message(
3776 calling_fn => l_calling_fn,
3777 name => 'FA_INVALID_PARAMETER',
3778 token1 => 'VALUE',
3779 value1 => px_asset_fin_rec_new.salvage_type,
3780 token2 => 'PARAM',
3781 value2 => 'SALVAGE_TYPE', p_log_level_rec => p_log_level_rec);
3782 raise calc_err;
3783 end if;
3784
3785
3786
3787 -- enhancing for group and core to allow direct percentage
3788 -- entry for the assets and not just defaults from category
3789 -- note that we initially set the new value for the salvage %
3790 -- in calc_new_amounts and use that here.
3791 --
3792 -- NOTE: we loaded the "new.type" value previously
3793
3794 if (px_asset_fin_rec_new.salvage_type = 'PCT') then
3795
3796 px_asset_fin_rec_new.percent_salvage_value := (nvl(p_asset_fin_rec_adj.percent_salvage_value, 0) +
3797 nvl(p_asset_fin_rec_old.percent_salvage_value, 0));
3798
3799 px_asset_fin_rec_new.salvage_value := (px_asset_fin_rec_new.cost *
3800 px_asset_fin_rec_new.percent_salvage_value);
3801
3802 if not FA_UTILS_PKG.faxceil(px_asset_fin_rec_new.salvage_value,
3803 p_asset_hdr_rec.book_type_code,
3804 p_asset_hdr_rec.set_of_books_id,
3805 p_log_level_rec => p_log_level_rec) then
3806 raise calc_err;
3807 end if;
3808
3809 elsif (px_asset_fin_rec_new.salvage_type = 'SUM') then
3810 -- this is used only for group assets
3811 -- performance may not be too great here
3812
3813 -- BUG# 3198440
3814 -- for additions (old rec is null) just set to 0
3815 px_asset_fin_rec_new.percent_salvage_value := null;
3816
3817 if (p_asset_fin_rec_old.salvage_type is null) then
3818 px_asset_fin_rec_new.salvage_value := 0;
3819 elsif (p_asset_fin_rec_old.salvage_type <> 'SUM') then
3820 if (p_mrc_sob_type_code <> 'R') then
3821 select nvl(sum(salvage_value), 0)
3822 into px_asset_fin_rec_new.salvage_value
3823 from fa_books bk,
3824 fa_additions_b ad
3825 where bk.transaction_header_id_out is null
3826 and bk.group_asset_id = p_asset_hdr_rec.asset_id
3827 and bk.asset_id = ad.asset_id
3828 and bk.book_type_code = p_asset_hdr_rec.book_type_code
3829 and ad.asset_type = 'CAPITALIZED';
3830 else
3831 select nvl(sum(salvage_value), 0)
3832 into px_asset_fin_rec_new.salvage_value
3833 from fa_mc_books bk,
3834 fa_additions_b ad
3835 where bk.transaction_header_id_out is null
3836 and bk.group_asset_id = p_asset_hdr_rec.asset_id
3837 and bk.asset_id = ad.asset_id
3838 and bk.book_type_code = p_asset_hdr_rec.book_type_code
3839 and ad.asset_type = 'CAPITALIZED'
3840 and bk.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3841 end if;
3842 else
3843 px_asset_fin_rec_new.salvage_value :=
3844 nvl(p_asset_fin_rec_adj.salvage_value, 0) +
3845 nvl(p_asset_fin_rec_old.salvage_value, 0);
3846 end if;
3847
3848 else -- AMT
3849
3850 px_asset_fin_rec_new.percent_salvage_value := null;
3851
3852 if (p_mrc_sob_type_code <> 'R') then
3853 -- delta salvage amount may or may not be null
3854 -- use it or 0 for the delta
3855
3856 -- NOTE: when changing types, the delta is treated as the new amount
3857 -- we will not add to the prior value that may have been
3858 -- existed/calculated from previous type of PCT or SUM
3859
3860 if (nvl(p_asset_fin_rec_old.salvage_type, 'AMT') <> 'AMT') then
3861 px_asset_fin_rec_new.salvage_value := nvl(p_asset_fin_rec_adj.salvage_value, 0);
3862 else
3863 px_asset_fin_rec_new.salvage_value := nvl(p_asset_fin_rec_adj.salvage_value, 0) +
3864 nvl(p_asset_fin_rec_old.salvage_value, 0);
3865 end if;
3866
3867 -- BUG# 3873652
3868 if (px_asset_fin_rec_new.cost = 0) then
3869 px_asset_fin_rec_new.salvage_value := 0;
3870 end if;
3871
3872 G_primary_salvage_value := px_asset_fin_rec_new.salvage_value;
3873
3874 else
3875 if (G_primary_new_cost <> 0) then
3876 px_asset_fin_rec_new.salvage_value := G_primary_salvage_value *
3877 (px_asset_fin_rec_new.cost / G_primary_new_cost);
3878 else
3879 px_asset_fin_rec_new.salvage_value := 0;
3880 end if;
3881 end if;
3882 end if;
3883
3884 -- round the amount
3885 if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.salvage_value,
3886 p_asset_hdr_rec.book_type_code,
3887 p_asset_hdr_rec.set_of_books_id,
3888 p_log_level_rec => p_log_level_rec) then
3889 raise calc_err;
3890 end if;
3891
3892 if (p_log_level_rec.statement_level) then
3893 fa_debug_pkg.add(l_calling_fn,
3894 'new salvage',
3895 px_asset_fin_rec_new.salvage_value, p_log_level_rec => p_log_level_rec);
3896 end if;
3897
3898 return true;
3899
3900 EXCEPTION
3901 when calc_err then
3902 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3903 return false;
3904 when others then
3905 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3906 return false;
3907
3908 END calc_salvage_value;
3909
3910
3911 FUNCTION calc_subcomp_life
3912 (p_trans_rec IN FA_API_TYPES.trans_rec_type,
3913 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
3914 p_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
3915 p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
3916 p_period_rec IN FA_API_TYPES.period_rec_type,
3917 px_asset_fin_rec IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
3918 p_calling_fn IN VARCHAR2
3919 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3920
3921 l_asset_type_rec FA_API_TYPES.asset_type_rec_type;
3922 l_calling_fn varchar2(40) := 'fa_asset_calc_pvt.calc_subcomp_life';
3923
3924 CURSOR RATE_DEF IS
3925 SELECT DISTINCT RATE_SOURCE_RULE
3926 FROM FA_METHODS
3927 WHERE METHOD_CODE = px_asset_fin_rec.deprn_method_code;
3928
3929 l_rate_source_rule varchar2(10);
3930
3931 l_cat_bk_lim number;
3932 l_min_life_in_months number;
3933 l_sub_life_rule varchar2(13);
3934
3935 CURSOR LIFE1_DEF IS
3936 select nvl(life_in_months,0),
3937 nvl(life_in_months,0),
3938 prorate_date
3939 from fa_books
3940 where book_type_code = p_asset_hdr_rec.book_type_code
3941 and asset_id = p_asset_desc_rec.parent_asset_id
3942 and transaction_header_id_out is null;
3943
3944 l_lim number;
3945 l_parent_life number;
3946 l_parent_prorate_date date;
3947
3948 -- can cache bc, ct, use dep_rec fpr fy
3949 CURSOR FY_DEF IS
3950 select round
3951 (nvl(sum
3952 (decode (bc.deprn_allocation_code,'E',
3953 1/ct.number_per_fiscal_year,
3954 (cp.end_date + 1 - cp.start_date) /
3955 (fy.end_date + 1 - fy.start_date))),0) * 12, 0)
3956 from fa_calendar_periods cp,
3957 fa_calendar_types ct,
3958 fa_book_controls bc,
3959 fa_fiscal_year fy
3960 where bc.book_type_code = p_asset_hdr_rec.book_type_code
3961 and bc.date_ineffective is null
3962 and ct.calendar_type = bc.prorate_calendar
3963 and ct.fiscal_year_name = bc.fiscal_year_name
3964 and cp.calendar_type = ct.calendar_type
3965 and ((cp.start_date >= l_parent_prorate_date and
3966 cp.end_date <= px_asset_fin_rec.prorate_date) )
3967 and fy.fiscal_year_name = bc.fiscal_year_name
3968 and fy.start_date <= cp.start_date
3969 and fy.end_date >= cp.end_date;
3970
3971 -- excluded due to bug 3872361
3972 /*
3973 or
3974 (cp.start_date <= l_parent_prorate_date and
3975 cp.end_date >= l_parent_prorate_date and
3976 cp.start_date <= px_asset_fin_rec.prorate_date and
3977 cp.end_date <= px_asset_fin_rec.prorate_date)
3978 */
3979
3980 l_fy number;
3981 l_new_life number;
3982
3983 calc_err EXCEPTION;
3984
3985 BEGIN
3986
3987 if (p_log_level_rec.statement_level) then
3988 fa_debug_pkg.add(l_calling_fn, 'entering', 'subcomponent life logic', p_log_level_rec => p_log_level_rec);
3989 end if;
3990
3991 OPEN RATE_DEF;
3992 FETCH RATE_DEF INTO
3993 l_rate_source_rule;
3994
3995 if (RATE_DEF%NOTFOUND) then
3996 CLOSE RATE_DEF;
3997 fa_srvr_msg.add_message(
3998 CALLING_FN => l_calling_fn,
3999 NAME => 'FA_SHARED_OBJECT_NOT_DEF',
4000 TOKEN1 => 'OBJECT',
4001 VALUE1 => 'Method', p_log_level_rec => p_log_level_rec);
4002 raise calc_err;
4003 else
4004 CLOSE RATE_DEF;
4005 end if;
4006
4007 if (l_rate_source_rule in ('FLAT', 'PRODUCTION')) then
4008 fa_srvr_msg.add_message(
4009 CALLING_FN => l_calling_fn,
4010 NAME => 'FA_MTH_LFR_INCOMPAT', p_log_level_rec => p_log_level_rec);
4011 raise calc_err;
4012 end if;
4013
4014 if not fa_cache_pkg.fazccbd
4015 (X_book => p_asset_hdr_rec.book_type_code,
4016 X_cat_id => p_asset_cat_rec.category_id,
4017 X_jdpis => to_number(to_char(px_asset_fin_rec.date_placed_in_service, 'J')),
4018 p_log_level_rec => p_log_level_rec
4019 ) then
4020 raise calc_err;
4021 else
4022 l_cat_bk_lim := nvl(fa_cache_pkg.fazccbd_record.life_in_months, 0);
4023 l_min_life_in_months := nvl(fa_cache_pkg.fazccbd_record.minimum_life_in_months, 0);
4024 l_sub_life_rule := fa_cache_pkg.fazccbd_record.subcomponent_life_rule;
4025 end if;
4026
4027 -- get the parents info
4028 OPEN LIFE1_DEF;
4029 FETCH LIFE1_DEF INTO
4030 l_lim,
4031 l_parent_life,
4032 l_parent_prorate_date;
4033
4034 if (LIFE1_DEF%NOTFOUND) then
4035 CLOSE LIFE1_DEF;
4036 fa_srvr_msg.add_message(
4037 CALLING_FN => l_calling_fn,
4038 NAME => 'FA_PARENT_BKS_NOT_EXIST', p_log_level_rec => p_log_level_rec);
4039 raise calc_err;
4040 else
4041 CLOSE LIFE1_DEF;
4042 end if;
4043
4044 if (p_log_level_rec.statement_level) then
4045 fa_debug_pkg.add(l_calling_fn, 'l_cat_bk_lim', l_cat_bk_lim, p_log_level_rec => p_log_level_rec);
4046 fa_debug_pkg.add(l_calling_fn, 'l_min_life_in_months', l_min_life_in_months, p_log_level_rec => p_log_level_rec);
4047 fa_debug_pkg.add(l_calling_fn, 'l_sub_life_rule', l_sub_life_rule, p_log_level_rec => p_log_level_rec);
4048 fa_debug_pkg.add(l_calling_fn, 'l_lim', l_lim, p_log_level_rec => p_log_level_rec);
4049 fa_debug_pkg.add(l_calling_fn, 'l_parent_life', l_parent_life, p_log_level_rec => p_log_level_rec);
4050 fa_debug_pkg.add(l_calling_fn, 'l_parent_prorate_date', l_parent_prorate_date, p_log_level_rec => p_log_level_rec);
4051 fa_debug_pkg.add(l_calling_fn, 'l_rate_source_rule', l_rate_source_rule, p_log_level_rec => p_log_level_rec);
4052 end if;
4053
4054 if (l_sub_life_rule = 'SAME LIFE') then
4055 if (l_lim = 0) then
4056 l_lim := l_cat_bk_lim;
4057 fa_srvr_msg.add_message(
4058 CALLING_FN => l_calling_fn,
4059 NAME => 'FA_PARENT_LIFE_NOT_SETUP', p_log_level_rec => p_log_level_rec);
4060 raise calc_err;
4061 end if;
4062 elsif (l_sub_life_rule = 'SAME END DATE') then
4063 if (l_parent_life = 0) then
4064 l_lim := l_cat_bk_lim;
4065 fa_srvr_msg.add_message(
4066 CALLING_FN => l_calling_fn,
4067 NAME => 'FA_PARENT_LIFE_NOT_SETUP', p_log_level_rec => p_log_level_rec);
4068 raise calc_err;
4069 else
4070
4071 -- need to derive the prorate convention and date if
4072 -- needed here as this is being called before
4073 -- the calc engine for an addition and cursor will
4074 -- return 0
4075
4076 if (px_asset_fin_rec.prorate_convention_code is null) then
4077 px_asset_fin_rec.prorate_convention_code :=
4078 fa_cache_pkg.fazccbd_record.prorate_convention_code;
4079 end if;
4080
4081 -- just needs to be <> GROUP
4082 l_asset_type_rec.asset_type := 'CAPITALIZED';
4083
4084 if not calc_prorate_date
4085 (p_asset_hdr_rec => p_asset_hdr_rec,
4086 p_asset_type_rec => l_asset_type_rec,
4087 p_asset_fin_rec_adj => px_asset_fin_rec,
4088 px_asset_fin_rec_new => px_asset_fin_rec,
4089 p_period_rec => p_period_rec,
4090 p_log_level_rec => p_log_level_rec
4091 ) then
4092 raise calc_err;
4093 end if;
4094
4095 if (p_log_level_rec.statement_level) then
4096 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec.prorate_date ', px_asset_fin_rec.prorate_date , p_log_level_rec => p_log_level_rec);
4097 end if;
4098
4099
4100 l_fy := 0;
4101 OPEN FY_DEF;
4102 FETCH FY_DEF INTO l_fy;
4103 if (FY_DEF%NOTFOUND) then
4104 CLOSE FY_DEF;
4105 fa_srvr_msg.add_message(
4106 CALLING_FN => l_calling_fn,
4107 NAME => 'FA_SHARED_OBJECT_NOT_DEF',
4108 TOKEN1 => 'OBJECT',
4109 VALUE1 => 'Fiscal Year or Calendar Period', p_log_level_rec => p_log_level_rec);
4110 raise calc_err;
4111 end if;
4112 CLOSE FY_DEF;
4113
4114 if (p_log_level_rec.statement_level) then
4115 fa_debug_pkg.add(l_calling_fn, 'l_fy', l_fy, p_log_level_rec => p_log_level_rec);
4116 end if;
4117
4118 -- If the parent asset is fully reserved i.e it's remaining life as
4119 -- computed here is <= 0 then the life of the subcomponent asset
4120 -- is one month.
4121
4122 if (l_fy >= l_parent_life) then
4123 -- If the parent asset is fully rsvd
4124 l_lim := 1;
4125 else
4126 -- The life is the lesser of the Category's life and parent's remaining life
4127 -- BUG# 1898874 - correcting the check to use l_cat_bk_lim instead of l_lim
4128 -- so that this is actually what happens. Previously, the same end date
4129 -- was always implemented no matter how much the child's life was inflated.
4130 -- bridgway 07/24/01
4131
4132 if ((l_parent_life - l_fy) < l_cat_bk_lim) then
4133 l_lim := l_parent_life - l_fy;
4134 else
4135 l_lim := l_cat_bk_lim;
4136 end if;
4137
4138 if (l_lim < l_min_life_in_months) then
4139 if (l_cat_bk_lim < l_min_life_in_months) then
4140 l_lim := l_min_life_in_months;
4141 else
4142 l_lim := l_cat_bk_lim;
4143 end if;
4144 end if;
4145
4146 end if; -- If the parent asset is fully reserved
4147
4148 end if; -- If parent's life is not setup
4149
4150 else
4151
4152 l_lim := l_cat_bk_lim;
4153
4154 end if;
4155
4156 -- l_new_life := 0; -- Change to l_lim to fix bug 737503
4157 l_new_life := l_lim;
4158
4159 if (p_log_level_rec.statement_level) then
4160 fa_debug_pkg.add(l_calling_fn, 'calling', 'validate_life', p_log_level_rec => p_log_level_rec);
4161 fa_debug_pkg.add(l_calling_fn, 'p_deprn_method', px_asset_fin_rec.deprn_method_code, p_log_level_rec => p_log_level_rec);
4162 fa_debug_pkg.add(l_calling_fn, 'l_cat_bk_lim', l_cat_bk_lim, p_log_level_rec => p_log_level_rec);
4163 fa_debug_pkg.add(l_calling_fn, 'l_lim', l_lim, p_log_level_rec => p_log_level_rec);
4164 fa_debug_pkg.add(l_calling_fn, 'l_new_life', l_new_life, p_log_level_rec => p_log_level_rec);
4165 end if;
4166
4167 if not fa_asset_val_pvt.validate_life
4168 (p_deprn_method => px_asset_fin_rec.deprn_method_code,
4169 p_rate_source_rule => l_rate_source_rule,
4170 p_life_in_months => l_cat_bk_lim,
4171 p_lim => l_lim,
4172 p_user_id => p_trans_rec.who_info.last_updated_by,
4173 p_curr_date => p_trans_rec.who_info.last_update_date,
4174 px_new_life => l_new_life,
4175 p_calling_fn => l_calling_fn
4176 , p_log_level_rec => p_log_level_rec) then
4177 raise calc_err;
4178 else
4179
4180 if (l_new_life <> 0) then
4181 px_asset_fin_rec.life_in_months := l_new_life;
4182 end if;
4183
4184 end if;
4185
4186 return TRUE;
4187
4188
4189 EXCEPTION
4190 when calc_err then
4191 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4192 return false;
4193
4194 when others then
4195 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4196 return false;
4197
4198 END calc_subcomp_life;
4199
4200
4201
4202 FUNCTION calc_flags
4203 (p_trans_rec IN FA_API_TYPES.trans_rec_type,
4204 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
4205 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
4206 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
4207 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
4208 p_asset_deprn_rec IN FA_API_TYPES.asset_deprn_rec_type,
4209 p_period_rec IN FA_API_TYPES.period_rec_type
4210 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
4211
4212 l_first_period number := 0;
4213
4214 l_current_fiscal_year number;
4215 l_fiscal_year_name varchar2(30);
4216
4217 l_rate_source_rule varchar2(10);
4218 l_deprn_basis_rule varchar2(4);
4219
4220 l_depreciate_flag varchar2(3);
4221 l_dep_flag_thid number;
4222 l_count_dep_flag number;
4223
4224 l_sty_success varchar2(3) := 'NO';
4225 l_calling_fn varchar2(40) := 'fa_asset_calc_pvt.calc_flags';
4226
4227 calc_err EXCEPTION;
4228
4229 BEGIN
4230
4231 -- this logic needs verification - ref faxfa2b.pls
4232
4233 l_current_fiscal_year := fa_cache_pkg.fazcbc_record.current_fiscal_year;
4234 l_fiscal_year_name := fa_cache_pkg.fazcbc_record.fiscal_year_name;
4235
4236 if not fa_cache_pkg.fazccmt
4237 ( X_method => px_asset_fin_rec_new.Deprn_Method_Code
4238 ,X_life => px_asset_fin_rec_new.Life_In_Months, p_log_level_rec => p_log_level_rec) then
4239 raise calc_err;
4240 end if;
4241
4242 l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
4243 l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
4244
4245
4246 px_asset_fin_rec_new.cost_change_flag := 'NO';
4247 px_asset_fin_rec_new.retirement_pending_flag := 'NO';
4248
4249
4250 if (p_asset_type_rec.asset_type = 'CAPITALIZED' or
4251 p_asset_type_rec.asset_type = 'CIP' or
4252 p_asset_type_rec.asset_type = 'GROUP') then
4253
4254 px_asset_fin_rec_new.capitalize_flag := 'YES';
4255 -- changed the following logic to mirror the forms
4256 -- though there discrepancies between faxfa1b.pls
4257
4258 -- SLA Uptake
4259 -- since we're taking the catchup here,
4260 -- reset flags as if no catchup is needed
4261
4262 if ((p_asset_hdr_rec.period_of_addition = 'Y') or
4263 (p_asset_hdr_rec.period_of_addition = 'N' and
4264 p_trans_rec.transaction_type_code = 'ADDITION')) then
4265
4266 if (p_asset_deprn_rec.deprn_reserve <> 0) then -- reserve
4267 /* Bug 8408871 - when reserve supplied no catchup required for any asset type */
4268 px_asset_fin_rec_new.adjustment_required_status := 'NONE';
4269 px_asset_fin_rec_new.annual_deprn_rounding_flag := 'RES';
4270 else
4271
4272 if (px_asset_fin_rec_new.date_placed_in_service >= p_period_rec.calendar_period_open_date and
4273 px_asset_fin_rec_new.date_placed_in_service <= p_period_rec.calendar_period_close_date) then
4274 px_asset_fin_rec_new.adjustment_required_status := 'ADD';
4275 px_asset_fin_rec_new.annual_deprn_rounding_flag := NULL;
4276 else -- not a current period addition
4277
4278 if (px_asset_fin_rec_new.date_placed_in_service >= p_period_rec.fy_start_date and
4279 px_asset_fin_rec_new.date_placed_in_service <= p_period_rec.fy_end_date ) then
4280 px_asset_fin_rec_new.adjustment_required_status := 'ADD';
4281 px_asset_fin_rec_new.annual_deprn_rounding_flag := NULL;
4282 else -- backdated addition to prior year
4283 px_asset_fin_rec_new.annual_deprn_rounding_flag := 'ADD';
4284 px_asset_fin_rec_new.adjustment_required_status := 'ADD';
4285 end if;
4286 end if;
4287
4288 -- BUG# 2522675
4289 -- when asset is set to amortize nbv, the adj_req flag must be
4290 -- set to none to avoid any additional catchup
4291 if ((p_trans_rec.transaction_subtype = 'AMORTIZED' and
4292 p_asset_type_rec.asset_type = 'CAPITALIZED') or
4293 (p_asset_type_rec.asset_type = 'GROUP')) then
4294 px_asset_fin_rec_new.adjustment_required_status := 'NONE';
4295 end if;
4296
4297 -- Bug4401476: Set rounding falg to RES if it is amortize nbv
4298 -- to avoid huge catchup even though entered reserve is 0..
4299 if (p_trans_rec.transaction_subtype = 'AMORTIZED' and
4300 p_asset_type_rec.asset_type = 'CAPITALIZED') then
4301 px_asset_fin_rec_new.annual_deprn_rounding_flag := 'RES';
4302 end if;
4303
4304 end if;
4305
4306 else -- adjustment
4307
4308 -- BUG# 3516246
4309 -- when adjustment is performed in period of capitalization
4310 -- we need to set to NONE and avoid catchup.
4311
4312 if (p_asset_fin_rec_old.adjustment_required_status = 'ADD') then
4313 px_asset_fin_rec_new.adjustment_required_status := 'NONE';
4314 else
4315 px_asset_fin_rec_new.adjustment_required_status :=
4316 p_asset_fin_rec_old.adjustment_required_status;
4317 end if;
4318
4319 -- Bug#3709494
4320 -- if the asset was added with the depreciate_flag set to NO
4321 -- and this is the FIRST time that we are changing it to YES,
4322 -- then perform catchup by setting adjustment_required_status to
4323 -- ADD.
4324
4325 -- R12 conditional logic
4326 if (G_release <> 11) then
4327 if (p_asset_fin_rec_old.adjustment_required_status = 'ADD') then
4328
4329 -- Bug#3709494
4330 -- if the asset was added with the depreciate_flag set to NO
4331 -- and this is the FIRST time that we are changing it to YES,
4332 -- then perform catchup by setting adjustment_required_status to
4333 -- ADD.
4334
4335 -- SLA: revisit this as catchup must occur at time of trx now!!!!
4336 -- ****
4337
4338 if (nvl(p_asset_fin_rec_old.depreciate_flag, 'YES') = 'NO') then
4339 --SLA: no need for flag, take catchup now
4340 -- catchup
4341 px_asset_fin_rec_new.adjustment_required_status :=
4342 p_asset_fin_rec_old.adjustment_required_status;
4343
4344 else
4345 -- No catchup
4346 px_asset_fin_rec_new.adjustment_required_status := 'NONE';
4347 end if;
4348 else
4349 px_asset_fin_rec_new.adjustment_required_status :=
4350 p_asset_fin_rec_old.adjustment_required_status;
4351 end if;
4352
4353 elsif ((nvl(p_asset_fin_rec_old.depreciate_flag, 'YES') = 'NO') and
4354 (nvl(px_asset_fin_rec_new.depreciate_flag, 'YES') = 'YES')) then
4355
4356 -- We confirmed that we have changed the depreciate_flag from
4357 -- NO to YES. Now we need to check if this is the asset were
4358 -- originally NO, and this is the first time it was changed to YES.
4359
4360 begin
4361
4362 select bk.depreciate_flag,
4363 bk.transaction_header_id_in
4364 into l_depreciate_flag,
4365 l_dep_flag_thid
4366 from fa_books bk,
4367 fa_transaction_headers th
4368 where th.asset_id = p_asset_hdr_rec.asset_id
4369 and th.book_type_code = p_asset_hdr_rec.book_type_code
4370 and th.transaction_type_code = 'ADDITION'
4371 and th.transaction_header_id = bk.transaction_header_id_in;
4372 exception
4373 when others then
4374 l_depreciate_flag := 'YES';
4375 end;
4376
4377 if (l_depreciate_flag = 'NO') then
4378
4379 -- The flag was originally NO. Now is this the first change?
4380 begin
4381
4382 select count(*)
4383 into l_count_dep_flag
4384 from fa_books
4385 where asset_id = p_asset_hdr_rec.asset_id
4386 and book_type_code = p_asset_hdr_rec.book_type_code
4387 and depreciate_flag = 'YES'
4388 and transaction_header_id_in >= l_dep_flag_thid
4389 and transaction_header_id_in <> p_trans_rec.transaction_header_id; /*Bug# 8631034 - For MRC */
4390
4391 exception
4392 when others then
4393 l_count_dep_flag := 1;
4394 end;
4395
4396 if (l_count_dep_flag = 0) then
4397 -- catchup
4398 -- Bug:5385123
4399 if p_trans_rec.transaction_subtype <> 'AMORTIZED' then
4400 px_asset_fin_rec_new.adjustment_required_status := 'ADD';
4401 end if;
4402 end if;
4403 end if;
4404 end if;
4405
4406 -- BUG# 2678718
4407 -- removing prior logic for checking first period
4408 -- of fiscal year and always setting flag to ADJ
4409
4410 /*
4411 select count(1)
4412 into l_first_period
4413 from fa_fiscal_year fy,
4414 fa_deprn_periods dp
4415 where l_fiscal_year_name = fy.fiscal_year_name
4416 and l_current_fiscal_year = fy.fiscal_year
4417 and dp.book_type_code = p_asset_hdr_rec.book_type_code
4418 and dp.calendar_period_open_date = fy.start_date
4419 and p_trans_rec.transaction_date_entered between
4420 dp.calendar_period_open_date and
4421 dp.calendar_period_close_date
4422 and rownum < 2;
4423
4424 if (l_first_period = 0) then
4425 px_asset_fin_rec_new.annual_deprn_rounding_flag := 'ADJ';
4426 else
4427
4428 if l_rate_source_rule = 'FLAT' then
4429 px_asset_fin_rec_new.annual_deprn_rounding_flag := 'ADJ';
4430 else
4431 px_asset_fin_rec_new.annual_deprn_rounding_flag := NULL;
4432 end if;
4433
4434 end if;
4435
4436 */
4437
4438 px_asset_fin_rec_new.annual_deprn_rounding_flag := 'ADJ';
4439
4440 end if;
4441
4442 else -- expensed asset
4443
4444 px_asset_fin_rec_new.adjustment_required_status := 'NONE';
4445 px_asset_fin_rec_new.annual_deprn_rounding_flag := NULL;
4446 px_asset_fin_rec_new.capitalize_flag := 'NO';
4447
4448 end if;
4449
4450 /*
4451 -- calculate the short tax and formula info
4452 if (l_Rate_Source_Rule = 'FORMULA') then
4453
4454 -- Get current fiscal year start and end dates.
4455
4456 fa_short_tax_years_pkg.calculate_short_tax_vals(
4457 X_Asset_Id => p_asset_hdr_rec.Asset_Id,
4458 X_Book_Type_Code => p_asset_hdr_rec.Book_type_Code,
4459 -- new columns
4460 X_Short_Fiscal_Year_Flag => px_asset_fin_rec_new.Short_Fiscal_Year_Flag,
4461 X_Date_Placed_In_Service => px_asset_fin_rec_new.Date_Placed_In_Service,
4462 X_Deprn_Start_Date => px_asset_fin_rec_new.Deprn_Start_Date,
4463 X_Prorate_Date => px_asset_fin_rec_new.Prorate_Date,
4464 X_Conversion_Date => px_asset_fin_rec_new.Conversion_Date,
4465 X_Orig_Deprn_Start_Date => px_asset_fin_rec_new.Orig_Deprn_Start_Date,
4466 X_Curr_Fy_Start_Date => p_period_rec.fy_start_date,
4467 X_Curr_Fy_End_Date => p_period_rec.fy_end_date,
4468 X_Life_In_Months => px_asset_fin_rec_new.Life_In_Months,
4469 X_Rate_Source_Rule => l_Rate_Source_Rule, -- BUG# 2016824
4470 X_Remaining_Life1 => px_asset_fin_rec_new.remaining_life1,
4471 X_Remaining_Life2 => px_asset_fin_rec_new.remaining_life2,
4472 X_Success => l_sty_success, p_log_level_rec => p_log_level_rec);
4473
4474 if (l_sty_success = 'NO') then
4475 raise calc_err;
4476 end if;
4477
4478 end if;
4479 */
4480
4481 return true;
4482
4483 EXCEPTION
4484 when calc_err then
4485 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4486 return false;
4487
4488 when others then
4489 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4490 return false;
4491
4492 END calc_flags;
4493
4494
4495 FUNCTION calc_deprn_info
4496 (p_trans_rec IN FA_API_TYPES.trans_rec_type,
4497 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
4498 p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
4499 p_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
4500 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
4501 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
4502 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
4503 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
4504 p_asset_deprn_rec_adj IN FA_API_TYPES.asset_deprn_rec_type,
4505 p_asset_deprn_rec_new IN FA_API_TYPES.asset_deprn_rec_type,
4506 p_period_rec IN FA_API_TYPES.period_rec_type
4507 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
4508
4509 l_count number;
4510 l_result boolean;
4511 l_unit_of_measure FA_BOOKS.UNIT_OF_MEASURE%TYPE;
4512
4513 l_method_id number;
4514 l_rate_source_rule FA_METHODS.rate_source_rule%TYPE;
4515 l_deprn_basis_rule FA_METHODS.deprn_basis_rule%TYPE;
4516
4517 l_last_period_counter number;
4518 l_calendar_period_open_date date;
4519 l_calendar_period_close_date date;
4520 h_prod_method number; -- added this for bug 3245984
4521
4522 CURSOR unit_of_measure IS
4523 select unit_of_measure
4524 from fa_books
4525 where asset_id = p_asset_hdr_rec.asset_id
4526 and book_type_code = fa_cache_pkg.fazcbc_record.distribution_source_book
4527 and transaction_header_id_out is NULL;
4528
4529 l_calling_fn VARCHAR2(40) := 'fa_asset_calc_pvt.calc_deprn_info';
4530 calc_err EXCEPTION;
4531
4532 BEGIN
4533
4534 l_last_period_counter := fa_cache_pkg.fazcbc_record.last_period_counter;
4535
4536 -- NOTE: moved additions defaulting to the private additions apit's init procedure
4537 -- as part of group project...
4538
4539 -- Set deprn info - "all or nothing" - this means that if you are changing the
4540 -- method you must provide the other info (life or rates for instance).
4541 -- the semi exception is production capacity which is done above based on delta
4542 if (p_asset_fin_rec_adj.deprn_method_code is not null) then
4543 px_asset_fin_rec_new.deprn_method_code := p_asset_fin_rec_adj.deprn_method_code;
4544 px_asset_fin_rec_new.life_in_months := p_asset_fin_rec_adj.life_in_months;
4545 px_asset_fin_rec_new.basic_rate := p_asset_fin_rec_adj.basic_rate;
4546 px_asset_fin_rec_new.adjusted_rate := p_asset_fin_rec_adj.adjusted_rate;
4547 px_asset_fin_rec_new.unit_of_measure := p_asset_fin_rec_adj.unit_of_measure;
4548 else
4549
4550 if (p_asset_fin_rec_adj.life_in_months is not null OR
4551 p_asset_fin_rec_adj.basic_rate is not null OR
4552 p_asset_fin_rec_adj.adjusted_rate is not null) then
4553 -- nvl(p_asset_fin_rec_adj.production_capacity, 0) <> 0) then
4554 fa_srvr_msg.add_message(
4555 calling_fn => l_calling_fn,
4556 name => 'FA_EXP_GET_METHOD_INFO', p_log_level_rec => p_log_level_rec);
4557 raise calc_err;
4558 end if;
4559
4560 if (p_asset_fin_rec_old.deprn_method_code is not null) then
4561 px_asset_fin_rec_new.deprn_method_code := p_asset_fin_rec_old.deprn_method_code;
4562 px_asset_fin_rec_new.life_in_months := p_asset_fin_rec_old.life_in_months;
4563 px_asset_fin_rec_new.basic_rate := p_asset_fin_rec_old.basic_rate;
4564 px_asset_fin_rec_new.adjusted_rate := p_asset_fin_rec_old.adjusted_rate;
4565 px_asset_fin_rec_new.unit_of_measure := p_asset_fin_rec_old.unit_of_measure;
4566 end if;
4567
4568 end if;
4569
4570
4571 -- do not allow method change is unplanned has been entered
4572 -- needed to check the methods per BUG# 2435403
4573 --fix for bug no.2536674
4574 /* if (p_trans_rec.transaction_type_code <> 'ADDITION' and
4575 p_trans_rec.transaction_type_code <> 'CIP ADDITION' and
4576 p_trans_rec.transaction_type_code <> 'GROUP ADDITION' and
4577 (p_asset_fin_rec_old.deprn_method_code <>
4578 p_asset_fin_rec_adj.deprn_method_code)) then
4579 if fa_asset_val_pvt.validate_unplanned_exists
4580 (p_book => p_asset_hdr_rec.book_type_code,
4581 p_asset_id => p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec) then
4582 fa_srvr_msg.add_message(
4583 calling_fn => 'l_calling_fn',
4584 name => '***FA_NO_METHOD_CHG_UNP***');
4585 raise calc_err;
4586 end if;
4587 end if;
4588 */
4589
4590 -- verify deprn information is valid by calling the method
4591 -- cache function - modified from STYR to handle all types.
4592 -- FYI: we MUST call the cache even when there is no method change
4593 -- because of potential impact of the flags on the depreciable
4594 -- basis, deprn_start_date and on adjusted_cost for nbv methods
4595 if not FA_CACHE_PKG.fazccmt(
4596 X_method => px_asset_fin_rec_new.deprn_method_code,
4597 X_life => px_asset_fin_rec_new.life_in_months
4598 , p_log_level_rec => p_log_level_rec) then
4599 raise calc_err;
4600 end if;
4601
4602
4603 l_method_id := fa_cache_pkg.fazccmt_record.method_id;
4604 l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
4605 l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
4606
4607 -- verify that basic rate and adj_rate are valid for flat
4608 -- rate methods and that production info is correct
4609
4610 if (px_asset_fin_rec_new.deprn_method_code is not null) then
4611 if (l_rate_source_rule = 'FLAT') then
4612
4613 select count(*)
4614 into l_count
4615 from fa_flat_rates
4616 where method_id = l_method_id
4617 and basic_rate = px_asset_fin_rec_new.basic_rate
4618 and adjusted_rate = px_asset_fin_rec_new.adjusted_rate;
4619
4620 if (l_count = 0) then
4621 fa_srvr_msg.add_message(
4622 calling_fn => l_calling_fn,
4623 name => 'FA_SHARED_INVALID_METHOD_RATE', p_log_level_rec => p_log_level_rec);
4624 raise calc_err;
4625 else
4626 px_asset_fin_rec_new.life_in_months := NULL;
4627 px_asset_fin_rec_new.production_capacity := NULL;
4628 px_asset_fin_rec_new.unit_of_measure := NULL;
4629 end if;
4630
4631 elsif (l_rate_source_rule = 'PRODUCTION') then
4632
4633 if (px_asset_fin_rec_new.production_capacity is null) then
4634 fa_srvr_msg.add_message(
4635 calling_fn => l_calling_fn,
4636 name => 'FA_BOOKS_NULL_PROD', p_log_level_rec => p_log_level_rec);
4637 raise calc_err;
4638 else
4639 px_asset_fin_rec_new.life_in_months := NULL;
4640 px_asset_fin_rec_new.adjusted_rate := NULL;
4641 px_asset_fin_rec_new.basic_rate := NULL;
4642 end if;
4643
4644 -- verify corp asset is UOP and get unit of measure
4645 -- Depreciate flag may not be 'NO'
4646 if ( /* (nvl(fa_cache_pkg.fazcdbr_record.rule_name,'ZZ') <> 'ENERGY PERIOD END BALANCE'
4647 OR p_asset_type_rec.asset_type = 'GROUP') and Commented for ENH 12600386 */
4648 px_asset_fin_rec_new.depreciate_flag <> 'YES') then -- Added for bug8584206
4649 fa_srvr_msg.add_message(calling_fn => l_calling_fn,
4650 name => 'FA_BOOK_INVALID_DEPRN_FLAG',
4651 p_log_level_rec => p_log_level_rec);
4652 raise calc_err;
4653 end if;
4654
4655 if (fa_cache_pkg.fazcbc_record.book_class = 'TAX') then
4656
4657 select count(1)
4658 into l_count
4659 from fa_books bk,
4660 fa_methods me
4661 where bk.book_type_code = fa_cache_pkg.fazcbc_record.distribution_source_book
4662 and bk.asset_id = p_asset_hdr_rec.asset_id
4663 and bk.transaction_header_id_out is null
4664 and me.method_code = bk.deprn_method_code
4665 and me.rate_source_rule = 'PRODUCTION';
4666
4667 if (l_count = 0) then
4668 fa_srvr_msg.add_message(
4669 calling_fn => l_calling_fn,
4670 name => 'FA_MASSCHG_NOT_PROD_IN_CORP', p_log_level_rec => p_log_level_rec);
4671 raise calc_err;
4672 end if;
4673
4674 OPEN unit_of_measure;
4675 FETCH unit_of_measure INTO px_asset_fin_rec_new.unit_of_measure;
4676 CLOSE unit_of_measure;
4677
4678 end if;
4679
4680 elsif (l_rate_source_rule = 'TABLE') then
4681 px_asset_fin_rec_new.adjusted_rate := NULL;
4682 px_asset_fin_rec_new.basic_rate := NULL;
4683 px_asset_fin_rec_new.production_capacity := NULL;
4684 px_asset_fin_rec_new.unit_of_measure := NULL;
4685 elsif (l_rate_source_rule = 'FORMULA') then
4686 px_asset_fin_rec_new.adjusted_rate := NULL;
4687 px_asset_fin_rec_new.basic_rate := NULL;
4688
4689 -- added this for bug 3245984
4690 h_prod_method := instr (fa_cache_pkg.fazcfor_record.formula_actual,'CAPACITY');
4691 -- if the formula has 'CAPACITY' in it, then it is a Production method
4692 -- otherwise, it is a Life method.
4693 if (h_prod_method = 0) then
4694 px_asset_fin_rec_new.production_capacity := NULL;
4695 px_asset_fin_rec_new.unit_of_measure := NULL;
4696 end if;
4697
4698 else
4699 px_asset_fin_rec_new.production_capacity := NULL;
4700 px_asset_fin_rec_new.unit_of_measure := NULL;
4701 end if;
4702
4703 end if; -- new method code is not null
4704
4705 px_asset_fin_rec_new.adjusted_capacity := px_asset_fin_rec_new.production_capacity;
4706
4707
4708 -- BUG# 4676908
4709 -- make sure the proate period match the method
4710 if (fa_cache_pkg.fazccmt_record.prorate_periods_per_year is not null) then
4711 if not fa_cache_pkg.fazcct
4712 (X_calendar => fa_cache_pkg.fazcbc_record.prorate_calendar, p_log_level_rec => p_log_level_rec) then
4713 raise calc_err;
4714 end if;
4715
4716 if (fa_cache_pkg.fazccmt_record.prorate_periods_per_year <>
4717 fa_cache_pkg.fazcct_record.number_per_fiscal_year) then
4718 fa_srvr_msg.add_message(
4719 calling_fn => l_calling_fn,
4720 name => 'FA_INVALID_DEPRN_METHOD', p_log_level_rec => p_log_level_rec);
4721 raise calc_err;
4722 end if;
4723 end if;
4724
4725 -- verify reserve and ytd = 0 for UOP
4726
4727 if (p_log_level_rec.statement_level) then
4728 fa_debug_pkg.add('calc_fin_info', 'p_asset_deprn_rec_adj.deprn_reserve',
4729 p_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec);
4730 fa_debug_pkg.add('calc_fin_info', 'p_asset_deprn_rec_adj.ytd_deprn',
4731 p_asset_deprn_rec_adj.ytd_deprn, p_log_level_rec);
4732 fa_debug_pkg.add('calc_fin_info', 'p_asset_deprn_rec_adj.ltd_prod',
4733 p_asset_deprn_rec_adj.ltd_production, p_log_level_rec);
4734 fa_debug_pkg.add('calc_fin_info', 'p_asset_deprn_rec_adj.ytd_prod',
4735 p_asset_deprn_rec_adj.ytd_production, p_log_level_rec);
4736 fa_debug_pkg.add('calc_fin_info', 'px_asset_fin_rec_new.short_fiscal_year_flag',
4737 px_asset_fin_rec_new.short_fiscal_year_flag, p_log_level_rec);
4738 end if;
4739
4740 -- modified for bug 8584206
4741 if (l_rate_source_rule = 'PRODUCTION') and
4742 ( ((nvl(p_trans_rec.transaction_key, 'XX') not in ('MR', 'MS','GC')) and p_asset_type_rec.asset_type = 'GROUP')
4743 OR
4744 (p_asset_type_rec.asset_type = 'CAPITALIZED' and
4745 ((px_asset_fin_rec_new.depreciate_flag = 'YES' AND Nvl(fa_cache_pkg.fazcdbr_record.rule_name, 'ZZ') <> 'ENERGY PERIOD END BALANCE' ) OR
4746 nvl(px_asset_fin_rec_new.group_asset_id,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM /* OR Commented and added above for ENH 12600386
4747 fa_cache_pkg.fazcdbr_record.rule_name <> 'ENERGY PERIOD END BALANCE' */ )) ) then
4748
4749 if (nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0 OR
4750 nvl(p_asset_deprn_rec_adj.ytd_deprn,0) <> 0) then
4751 fa_srvr_msg.add_message(
4752 calling_fn => l_calling_fn,
4753 name => 'FA_NO_RESERVE_FOR_PROD', p_log_level_rec => p_log_level_rec);
4754 raise calc_err;
4755 end if;
4756 end if;
4757
4758 -- verify STY information is valid
4759 if not fa_asset_val_pvt.validate_short_tax_year
4760 (p_book_type_code => p_asset_hdr_rec.book_type_code,
4761 p_transaction_type_code => p_trans_rec.transaction_type_code,
4762 p_asset_type => p_asset_type_rec.asset_type,
4763 p_short_fiscal_year_flag => px_asset_fin_rec_new.short_fiscal_year_flag,
4764 p_conversion_date => px_asset_fin_rec_new.conversion_date,
4765 px_orig_deprn_start_date => px_asset_fin_rec_new.orig_deprn_start_date,
4766 p_date_placed_in_service => px_asset_fin_rec_new.date_placed_in_service,
4767 p_ytd_deprn => p_asset_deprn_rec_new.ytd_deprn,
4768 p_deprn_reserve => p_asset_deprn_rec_new.deprn_reserve,
4769 p_period_rec => p_period_rec,
4770 p_calling_fn => l_calling_fn
4771 , p_log_level_rec => p_log_level_rec) then
4772 raise calc_err;
4773 end if;
4774
4775 -- Check Bonus Rule
4776
4777 if (px_asset_fin_rec_new.bonus_rule IS NOT NULL) then
4778 select count(*)
4779 into l_count
4780 from fa_bonus_rules
4781 where bonus_rule = px_asset_fin_rec_new.bonus_rule;
4782
4783 if (l_count = 0) then
4784 fa_srvr_msg.add_message(
4785 calling_fn => l_calling_fn,
4786 name => 'FA_INVALID_BONUS_RULE', p_log_level_rec => p_log_level_rec);
4787 raise calc_err;
4788 end if;
4789 end if;
4790
4791
4792 -- check super group
4793 if (l_rate_source_rule <> 'FLAT' and
4794 px_asset_fin_rec_new.super_group_id is not null) then
4795 fa_srvr_msg.add_message(
4796 calling_fn => l_calling_fn,
4797 name => '***FA_NO_SUPER_NO_FLAT***',
4798 p_log_level_rec => p_log_level_rec);
4799 raise calc_err;
4800 end if;
4801
4802 return true;
4803
4804 EXCEPTION
4805 when calc_err then
4806 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4807 return false;
4808
4809 when others then
4810 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4811 return false;
4812
4813 END calc_deprn_info;
4814
4815
4816 FUNCTION calc_group_info
4817 (p_trans_rec IN FA_API_TYPES.trans_rec_type,
4818 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
4819 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
4820 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
4821 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
4822 p_asset_deprn_rec_old IN FA_API_TYPES.asset_deprn_rec_type
4823 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) return boolean IS
4824
4825 CURSOR c_find_member_asset IS
4826 SELECT 'Y'
4827 FROM FA_BOOKS
4828 WHERE GROUP_ASSET_ID = p_asset_hdr_rec.asset_id
4829 AND BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
4830 AND TRANSACTION_HEADER_ID_OUT is NULL;
4831
4832 l_calling_fn VARCHAR2(40) := 'fa_asset_calc_pvt.calc_group_info';
4833
4834 l_member_exists VARCHAR2(1) := null;
4835
4836 calc_err EXCEPTION;
4837
4838 BEGIN
4839
4840 -- this will validate/set all the new group asset flags
4841 -- note that the addition api has already defaulted the
4842 -- values if they weren't specified. here we need to
4843 -- check for changes and validate the values
4844
4845 -- +++++ Reduction Rate +++++
4846
4847 px_asset_fin_rec_new.reduction_rate :=
4848 nvl(p_asset_fin_rec_adj.reduction_rate, 0) +
4849 nvl(p_asset_fin_rec_old.reduction_rate, 0);
4850
4851 --
4852 -- Function call fazccmt is mandatory before calling this function.
4853 -- Currently fazccmt is called in calc_deprn_info and calc_flag which
4854 -- is called from calc_derived_amounts.
4855 -- If calc_deprn_info is called before this function, then I can simply use
4856 -- new so don't need this much of the code.
4857 if (p_asset_fin_rec_adj.deprn_method_code is not null) then
4858 if not fa_cache_pkg.fazccmt
4859 (X_method => p_asset_fin_rec_adj.Deprn_Method_Code,
4860 X_life => p_asset_fin_rec_adj.Life_In_Months
4861 , p_log_level_rec => p_log_level_rec) then
4862 raise calc_err;
4863 end if;
4864 else
4865 if not fa_cache_pkg.fazccmt
4866 (X_method => p_asset_fin_rec_old.Deprn_Method_Code,
4867 X_life => p_asset_fin_rec_old.Life_In_Months
4868 , p_log_level_rec => p_log_level_rec) then
4869 raise calc_err;
4870 end if;
4871 end if;
4872
4873 if (nvl(fa_cache_pkg.fazcdrd_record.allow_reduction_rate_flag, 'N') = 'N') then
4874 px_asset_fin_rec_new.reduction_rate := to_number(null);
4875 end if;
4876
4877
4878 FA_UTIL_PVT.load_char_value
4879 (p_char_old => p_asset_fin_rec_old.over_depreciate_option,
4880 p_char_adj => p_asset_fin_rec_adj.over_depreciate_option,
4881 x_char_new => px_asset_fin_rec_new.over_depreciate_option
4882 , p_log_level_rec => p_log_level_rec);
4883
4884 --
4885 -- Set Over Depreciate to 'NO'
4886 -- 1. If it is set to DEPRN and FLAT-NBV method
4887 -- 2. If it is not NO and there is some deprn limit
4888 --
4889 if (fa_cache_pkg.fazcbc_record.book_class = 'TAX') then
4890
4891 if (px_asset_fin_rec_new.over_depreciate_option =
4892 fa_std_types.FA_OVER_DEPR_DEPRN) and
4893 (fa_cache_pkg.fazccmt_record.rate_source_rule = 'FLAT' and
4894 fa_cache_pkg.fazccmt_record.deprn_basis_rule = 'NBV') then
4895 px_asset_fin_rec_new.over_depreciate_option :=
4896 fa_std_types.FA_OVER_DEPR_NO;
4897 end if;
4898
4899 end if;
4900
4901 -- +++++ Over Depreciate +++++
4902 -- Validation moved to fa_asset_val_pvt.validate_over_depreciate
4903
4904 -- +++++ Reduction Flags +++++
4905 if (px_asset_fin_rec_new.reduction_rate is null) then
4906 px_asset_fin_rec_new.reduce_addition_flag := null;
4907 px_asset_fin_rec_new.reduce_adjustment_flag := null;
4908 px_asset_fin_rec_new.reduce_retirement_flag := null;
4909 else
4910 FA_UTIL_PVT.load_char_value
4911 (p_char_old => p_asset_fin_rec_old.reduce_addition_flag,
4912 p_char_adj => p_asset_fin_rec_adj.reduce_addition_flag,
4913 x_char_new => px_asset_fin_rec_new.reduce_addition_flag
4914 , p_log_level_rec => p_log_level_rec);
4915 FA_UTIL_PVT.load_char_value
4916 (p_char_old => p_asset_fin_rec_old.reduce_adjustment_flag,
4917 p_char_adj => p_asset_fin_rec_adj.reduce_adjustment_flag,
4918 x_char_new => px_asset_fin_rec_new.reduce_adjustment_flag
4919 , p_log_level_rec => p_log_level_rec);
4920 FA_UTIL_PVT.load_char_value
4921 (p_char_old => p_asset_fin_rec_old.reduce_retirement_flag,
4922 p_char_adj => p_asset_fin_rec_adj.reduce_retirement_flag,
4923 x_char_new => px_asset_fin_rec_new.reduce_retirement_flag
4924 , p_log_level_rec => p_log_level_rec);
4925 end if;
4926
4927 -- +++++ Retirement and Tracking Options +++++
4928 -- From here, these values are not updateable
4929 -- once depreciation is run or first member asset
4930 -- is added.
4931
4932 if (p_asset_hdr_rec.period_of_addition = 'Y') then
4933 OPEN c_find_member_asset;
4934 FETCH c_find_member_asset INTO l_member_exists;
4935
4936 if (c_find_member_asset%NOTFOUND) then
4937 l_member_exists := 'N';
4938 end if;
4939
4940 CLOSE c_find_member_asset;
4941
4942 end if;
4943
4944 if (p_asset_hdr_rec.period_of_addition <> 'Y') or
4945 (l_member_exists = 'Y') then
4946
4947 px_asset_fin_rec_new.recognize_gain_loss :=
4948 p_asset_fin_rec_old.recognize_gain_loss;
4949
4950 px_asset_fin_rec_new.recapture_reserve_flag :=
4951 p_asset_fin_rec_old.recapture_reserve_flag;
4952
4953 px_asset_fin_rec_new.limit_proceeds_flag :=
4954 p_asset_fin_rec_old.limit_proceeds_flag;
4955
4956 px_asset_fin_rec_new.terminal_gain_loss :=
4957 p_asset_fin_rec_old.terminal_gain_loss;
4958
4959 px_asset_fin_rec_new.exclude_proceeds_from_basis :=
4960 p_asset_fin_rec_old.exclude_proceeds_from_basis;
4961
4962 px_asset_fin_rec_new.retirement_deprn_option :=
4963 p_asset_fin_rec_old.retirement_deprn_option;
4964
4965 px_asset_fin_rec_new.tracking_method :=
4966 p_asset_fin_rec_old.tracking_method;
4967
4968 px_asset_fin_rec_new.allocate_to_fully_rsv_flag :=
4969 p_asset_fin_rec_old.allocate_to_fully_rsv_flag;
4970
4971 px_asset_fin_rec_new.allocate_to_fully_ret_flag :=
4972 p_asset_fin_rec_old.allocate_to_fully_ret_flag;
4973
4974 px_asset_fin_rec_new.excess_allocation_option :=
4975 p_asset_fin_rec_old.excess_allocation_option;
4976
4977 px_asset_fin_rec_new.depreciation_option :=
4978 p_asset_fin_rec_old.depreciation_option;
4979
4980 px_asset_fin_rec_new.member_rollup_flag :=
4981 p_asset_fin_rec_old.member_rollup_flag;
4982
4983 else -- No member asset in this group and still in period of addition
4984
4985 FA_UTIL_PVT.load_char_value
4986 (p_char_old => p_asset_fin_rec_old.recognize_gain_loss,
4987 p_char_adj => p_asset_fin_rec_adj.recognize_gain_loss,
4988 x_char_new => px_asset_fin_rec_new.recognize_gain_loss
4989 , p_log_level_rec => p_log_level_rec);
4990
4991 FA_UTIL_PVT.load_char_value
4992 (p_char_old => p_asset_fin_rec_old.recapture_reserve_flag,
4993 p_char_adj => p_asset_fin_rec_adj.recapture_reserve_flag,
4994 x_char_new => px_asset_fin_rec_new.recapture_reserve_flag
4995 , p_log_level_rec => p_log_level_rec);
4996
4997 FA_UTIL_PVT.load_char_value
4998 (p_char_old => p_asset_fin_rec_old.limit_proceeds_flag,
4999 p_char_adj => p_asset_fin_rec_adj.limit_proceeds_flag,
5000 x_char_new => px_asset_fin_rec_new.limit_proceeds_flag
5001 , p_log_level_rec => p_log_level_rec);
5002
5003 FA_UTIL_PVT.load_char_value
5004 (p_char_old => p_asset_fin_rec_old.terminal_gain_loss,
5005 p_char_adj => p_asset_fin_rec_adj.terminal_gain_loss,
5006 x_char_new => px_asset_fin_rec_new.terminal_gain_loss
5007 , p_log_level_rec => p_log_level_rec);
5008
5009 FA_UTIL_PVT.load_char_value
5010 (p_char_old => p_asset_fin_rec_old.exclude_proceeds_from_basis,
5011 p_char_adj => p_asset_fin_rec_adj.exclude_proceeds_from_basis,
5012 x_char_new => px_asset_fin_rec_new.exclude_proceeds_from_basis
5013 , p_log_level_rec => p_log_level_rec);
5014
5015 FA_UTIL_PVT.load_char_value
5016 (p_char_old => p_asset_fin_rec_old.retirement_deprn_option,
5017 p_char_adj => p_asset_fin_rec_adj.retirement_deprn_option,
5018 x_char_new => px_asset_fin_rec_new.retirement_deprn_option
5019 , p_log_level_rec => p_log_level_rec);
5020
5021 --
5022 -- Retirement Option Validations
5023 --
5024 if (nvl(px_asset_fin_rec_new.recognize_gain_loss, 'XXX')
5025 not in ('NO', 'YES')) then
5026 px_asset_fin_rec_new.recognize_gain_loss := 'NO';
5027 end if;
5028
5029 if (px_asset_fin_rec_new.over_depreciate_option <>
5030 fa_std_types.FA_OVER_DEPR_NO) and
5031 (nvl(px_asset_fin_rec_new.recapture_reserve_flag, 'N') <> 'N') then
5032 px_asset_fin_rec_new.recapture_reserve_flag := 'N';
5033 elsif (nvl(px_asset_fin_rec_new.recapture_reserve_flag, 'N') not in ('N', 'Y')) then
5034 px_asset_fin_rec_new.recapture_reserve_flag := 'N';
5035 end if;
5036
5037 if (px_asset_fin_rec_new.recognize_gain_loss = 'YES') and
5038 (nvl(px_asset_fin_rec_new.limit_proceeds_flag, 'N') <> 'Y') then
5039 px_asset_fin_rec_new.limit_proceeds_flag := 'N';
5040 elsif (nvl(px_asset_fin_rec_new.limit_proceeds_flag, 'N') not in ('N', 'Y')) then
5041 px_asset_fin_rec_new.limit_proceeds_flag := 'N';
5042 end if;
5043
5044 if (nvl(px_asset_fin_rec_new.terminal_gain_loss, 'XXX')
5045 not in ('NO', 'YES', 'END_OF_YEAR')) then
5046 px_asset_fin_rec_new.terminal_gain_loss := 'YES';
5047 end if;
5048
5049 FA_UTIL_PVT.load_char_value
5050 (p_char_old => p_asset_fin_rec_old.tracking_method,
5051 p_char_adj => p_asset_fin_rec_adj.tracking_method,
5052 x_char_new => px_asset_fin_rec_new.tracking_method
5053 , p_log_level_rec => p_log_level_rec);
5054
5055 FA_UTIL_PVT.load_char_value
5056 (p_char_old => p_asset_fin_rec_old.allocate_to_fully_rsv_flag,
5057 p_char_adj => p_asset_fin_rec_adj.allocate_to_fully_rsv_flag,
5058 x_char_new => px_asset_fin_rec_new.allocate_to_fully_rsv_flag
5059 , p_log_level_rec => p_log_level_rec);
5060
5061 FA_UTIL_PVT.load_char_value
5062 (p_char_old => p_asset_fin_rec_old.allocate_to_fully_ret_flag,
5063 p_char_adj => p_asset_fin_rec_adj.allocate_to_fully_ret_flag,
5064 x_char_new => px_asset_fin_rec_new.allocate_to_fully_ret_flag
5065 , p_log_level_rec => p_log_level_rec);
5066
5067 FA_UTIL_PVT.load_char_value
5068 (p_char_old => p_asset_fin_rec_old.excess_allocation_option,
5069 p_char_adj => p_asset_fin_rec_adj.excess_allocation_option,
5070 x_char_new => px_asset_fin_rec_new.excess_allocation_option
5071 , p_log_level_rec => p_log_level_rec);
5072
5073 FA_UTIL_PVT.load_char_value
5074 (p_char_old => p_asset_fin_rec_old.depreciation_option,
5075 p_char_adj => p_asset_fin_rec_adj.depreciation_option,
5076 x_char_new => px_asset_fin_rec_new.depreciation_option
5077 , p_log_level_rec => p_log_level_rec);
5078
5079 FA_UTIL_PVT.load_char_value
5080 (p_char_old => p_asset_fin_rec_old.member_rollup_flag,
5081 p_char_adj => p_asset_fin_rec_adj.member_rollup_flag,
5082 x_char_new => px_asset_fin_rec_new.member_rollup_flag
5083 , p_log_level_rec => p_log_level_rec);
5084
5085 --
5086 -- Tracking Option Validations
5087 --HH check allow_member_tracking_flag too.
5088 --
5089 if (px_asset_fin_rec_new.tracking_method is null) OR
5090 (nvl(fa_cache_pkg.fazcbc_record.allow_member_tracking_flag,'N') <> 'Y')then
5091
5092 px_asset_fin_rec_new.allocate_to_fully_rsv_flag := null;
5093 px_asset_fin_rec_new.allocate_to_fully_ret_flag := null;
5094 px_asset_fin_rec_new.excess_allocation_option := null;
5095 px_asset_fin_rec_new.depreciation_option := null;
5096 px_asset_fin_rec_new.member_rollup_flag := null;
5097
5098 elsif (px_asset_fin_rec_new.tracking_method = 'ALLOCATE') then
5099
5100 if (px_asset_fin_rec_new.allocate_to_fully_rsv_flag = 'Y') then
5101 px_asset_fin_rec_new.allocate_to_fully_ret_flag := 'Y';
5102 px_asset_fin_rec_new.excess_allocation_option := null;
5103 elsif (px_asset_fin_rec_new.allocate_to_fully_rsv_flag = 'N') then
5104 px_asset_fin_rec_new.allocate_to_fully_ret_flag := 'N';
5105 if (nvl(px_asset_fin_rec_new.excess_allocation_option, 'XXX')
5106 not in ('REDUCE', 'DISTRIBUTE')) then
5107 px_asset_fin_rec_new.excess_allocation_option := 'REDUCE';
5108 end if;
5109 else
5110 px_asset_fin_rec_new.allocate_to_fully_rsv_flag := 'N';
5111 px_asset_fin_rec_new.allocate_to_fully_ret_flag := 'N';
5112 end if;
5113
5114 px_asset_fin_rec_new.depreciation_option := null;
5115 px_asset_fin_rec_new.member_rollup_flag := null;
5116
5117 elsif (px_asset_fin_rec_new.tracking_method = 'CALCULATE') then
5118 if (nvl(px_asset_fin_rec_new.depreciation_option, 'XXX') not in ('GROUP', 'MEMBER')) then
5119 px_asset_fin_rec_new.depreciation_option := 'MEMBER';
5120 end if;
5121
5122 if (nvl(px_asset_fin_rec_new.member_rollup_flag, 'X') not in ('Y', 'N')) then
5123 px_asset_fin_rec_new.member_rollup_flag := 'N';
5124 end if;
5125
5126 --
5127 -- Bug5032617: Following if is just to ensure to prevent
5128 -- wrong combination of group setup values. (for API)
5129 --
5130 /*bug#15897249 modified the condition*/
5131 if ((px_asset_fin_rec_new.recognize_gain_loss = 'NO') or
5132 (px_asset_fin_rec_new.terminal_gain_loss <> 'YES')) and
5133 ((px_asset_fin_rec_new.member_rollup_flag = 'Y' and
5134 nvl(fa_cache_pkg.fazcdbr_record.rule_name,'ZZ') <> 'YEAR END BALANCE WITH POSITIVE REDUCTION AMOUNT')
5135 ) then
5136 fa_srvr_msg.add_message(
5137 calling_fn => 'fa_asset_calc_pvt.calc_group_info',
5138 name => 'FA_INVALID_PARAMETER',
5139 token1 => 'VALUE',
5140 value1 => px_asset_fin_rec_new.recognize_gain_loss,
5141 token2 => 'PARAM',
5142 value2 => 'RECOGNIZE_GAIN_LOSS', p_log_level_rec => p_log_level_rec);
5143 fa_srvr_msg.add_message(
5144 calling_fn => 'fa_asset_calc_pvt.calc_group_info',
5145 name => 'FA_INVALID_PARAMETER',
5146 token1 => 'VALUE',
5147 value1 => px_asset_fin_rec_new.terminal_gain_loss,
5148 token2 => 'PARAM',
5149 value2 => 'TERMINAL_GAIN_LOSS', p_log_level_rec => p_log_level_rec);
5150 fa_srvr_msg.add_message(
5151 calling_fn => 'fa_asset_calc_pvt.calc_group_info',
5152 name => 'FA_INVALID_PARAMETER',
5153 token1 => 'VALUE',
5154 value1 => px_asset_fin_rec_new.member_rollup_flag,
5155 token2 => 'PARAM',
5156 value2 => 'MEMBER_ROLLUP_FLAG', p_log_level_rec => p_log_level_rec);
5157
5158 raise calc_err;
5159 end if;
5160
5161
5162 px_asset_fin_rec_new.allocate_to_fully_rsv_flag := null;
5163 px_asset_fin_rec_new.allocate_to_fully_ret_flag := null;
5164 px_asset_fin_rec_new.excess_allocation_option := null;
5165
5166 else
5167 fa_srvr_msg.add_message(
5168 calling_fn => l_calling_fn,
5169 name => 'FA_INVALID_TRACKING_METHOD', p_log_level_rec => p_log_level_rec);
5170 raise calc_err;
5171 end if; -- (px_asset_fin_rec_new.tracking_method is null)
5172
5173 end if; -- (p_asset_hdr_rec.period_of_addition = 'Y') and
5174
5175 px_asset_fin_rec_new.ytd_proceeds :=
5176 nvl(p_asset_fin_rec_adj.ytd_proceeds, 0) +
5177 nvl(p_asset_fin_rec_old.ytd_proceeds, 0);
5178
5179 px_asset_fin_rec_new.ltd_proceeds :=
5180 nvl(p_asset_fin_rec_adj.ltd_proceeds, 0) +
5181 nvl(p_asset_fin_rec_old.ltd_proceeds, 0);
5182
5183 px_asset_fin_rec_new.eofy_reserve :=
5184 nvl(p_asset_fin_rec_adj.eofy_reserve, 0) +
5185 nvl(p_asset_fin_rec_old.eofy_reserve, 0);
5186
5187 FA_UTIL_PVT.load_char_value
5188 (p_char_old => p_asset_fin_rec_old.terminal_gain_loss_flag,
5189 p_char_adj => p_asset_fin_rec_adj.terminal_gain_loss_flag,
5190 x_char_new => px_asset_fin_rec_new.terminal_gain_loss_flag, p_log_level_rec => p_log_level_rec);
5191
5192
5193 if (px_asset_fin_rec_new.cost <> 0) and
5194 (p_asset_fin_rec_old.terminal_gain_loss_flag = 'Y') then
5195 px_asset_fin_rec_new.terminal_gain_loss_flag := 'N';
5196 end if;
5197
5198 if (px_asset_fin_rec_new.terminal_gain_loss_flag = 'Y') and
5199 (p_trans_rec.member_transaction_header_id is not null) then
5200 px_asset_fin_rec_new.terminal_gain_loss_flag := 'N';
5201 end if;
5202
5203 return true;
5204
5205 EXCEPTION
5206 when calc_err then
5207 if (c_find_member_asset%ISOPEN) then
5208 CLOSE c_find_member_asset;
5209 end if;
5210 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5211 return false;
5212
5213 when others then
5214 if (c_find_member_asset%ISOPEN) then
5215 CLOSE c_find_member_asset;
5216 end if;
5217 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5218 return false;
5219
5220 END calc_group_info;
5221
5222 FUNCTION calc_member_info
5223 (p_trans_rec IN FA_API_TYPES.trans_rec_type,
5224 p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
5225 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
5226 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
5227 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
5228 p_asset_deprn_rec_old IN FA_API_TYPES.asset_deprn_rec_type
5229 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) return boolean IS
5230
5231 CURSOR c_get_group_values IS
5232 SELECT recognize_gain_loss,
5233 recapture_reserve_flag,
5234 limit_proceeds_flag,
5235 terminal_gain_loss,
5236 exclude_proceeds_from_basis,
5237 retirement_deprn_option,
5238 tracking_method,
5239 allocate_to_fully_rsv_flag,
5240 allocate_to_fully_ret_flag,
5241 excess_allocation_option,
5242 depreciation_option,
5243 member_rollup_flag,
5244 reduction_rate,
5245 reduce_addition_flag,
5246 reduce_adjustment_flag,
5247 reduce_retirement_flag,
5248 disabled_flag, --hh
5249 over_depreciate_option -- hh
5250 FROM FA_BOOKS
5251 WHERE ASSET_ID = px_asset_fin_rec_new.group_asset_id
5252 AND BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
5253 AND transaction_header_id_out is null;
5254
5255 l_recognize_gain_loss varchar2(30);
5256 l_recapture_reserve_flag varchar2(1);
5257 l_limit_proceeds_flag varchar2(1);
5258 l_terminal_gain_loss varchar2(30);
5259 l_exclude_proceeds_from_basis varchar2(1);
5260 l_retirement_deprn_option varchar2(30);
5261 l_tracking_method varchar2(30);
5262 l_allocate_to_fully_rsv_flag varchar2(1);
5263 l_allocate_to_fully_ret_flag varchar2(1);
5264 l_excess_allocation_option varchar2(30);
5265 l_depreciation_option varchar2(30);
5266 l_member_rollup_flag varchar2(1);
5267 l_reduction_rate number;
5268 l_reduce_addition_flag varchar2(1);
5269 l_reduce_adjustment_flag varchar2(1);
5270 l_reduce_retirement_flag varchar2(1);
5271 l_disabled_flag varchar2(1); --HH
5272 l_over_depreciate_option varchar2(30); --hh
5273
5274 l_calling_fn VARCHAR2(40) := 'fa_asset_calc_pvt.calc_member_info';
5275
5276 calc_member_err EXCEPTION;
5277
5278 BEGIN
5279
5280 -- This function will copy the tracking related columns from old structure
5281 -- to new structure. And if the group assignment is changed,
5282 -- get new tracking related columns from FA_BOOKS instead of copying
5283 -- old to new.
5284
5285 -- Only when this asset is assigned to group, this module will be available.
5286
5287 if px_asset_fin_rec_new.group_asset_id is not null then
5288
5289 --
5290 -- Get group information for reduction rate and tracking related values.
5291 -- If there will be more, this can be replaced with get_asset_fin_rec.
5292 -- User cursor for now since we only need part of fa_books.
5293 --
5294 open c_get_group_values;
5295 fetch c_get_group_values into l_recognize_gain_loss,
5296 l_recapture_reserve_flag,
5297 l_limit_proceeds_flag,
5298 l_terminal_gain_loss,
5299 l_exclude_proceeds_from_basis,
5300 l_retirement_deprn_option,
5301 l_tracking_method,
5302 l_allocate_to_fully_rsv_flag,
5303 l_allocate_to_fully_ret_flag,
5304 l_excess_allocation_option,
5305 l_depreciation_option,
5306 l_member_rollup_flag,
5307 l_reduction_rate,
5308 l_reduce_addition_flag,
5309 l_reduce_adjustment_flag,
5310 l_reduce_retirement_flag,
5311 l_disabled_flag,
5312 l_over_depreciate_option;
5313
5314 /*bug#15897249 starts */
5315 if(nvl(p_asset_fin_rec_adj.reduction_rate, 0) <> 0 ) then
5316 If ((p_trans_rec.transaction_type_code = 'ADDITION' and
5317 nvl(l_reduce_addition_flag,'N') = 'N') or
5318 ((p_trans_rec.transaction_type_code = 'ADJUSTMENT') and
5319 nvl(l_reduce_adjustment_flag,'N') = 'N') )then fa_srvr_msg.add_message(
5320 calling_fn => 'fa_asset_calc_pvt.calc_member_info',
5321 name => 'FA_BOOK_NO_REDUCTION', p_log_level_rec => p_log_level_rec);
5322 raise calc_member_err;
5323 end if;
5324 end if;
5325 /*bug#15897249 ends */
5326
5327 --
5328 -- Set reduction rate
5329 -- If this is addition and REDUCE_ADDITION flag is Y or
5330 -- this is adjustment and REDUCE_ADJUSTMENT flag is Y, then
5331 -- set group reduction rate is no value is passed in fin_rec_adj.
5332 -- Otherwise, add fin_rec_adj reduction rate to old one.
5333 --
5334 if (((p_trans_rec.transaction_type_code = 'ADDITION') and
5335 (l_reduce_addition_flag = 'Y')) or
5336 (p_trans_rec.transaction_type_code = 'ADJUSTMENT') and
5337 (l_reduce_adjustment_flag = 'Y')) then
5338 if (p_asset_fin_rec_adj.reduction_rate is null) and
5339 (nvl(p_asset_fin_rec_old.reduction_rate,0) = 0 ) then --bug#15897249
5340 px_asset_fin_rec_new.reduction_rate := nvl(l_reduction_rate, 0);
5341 else
5342 px_asset_fin_rec_new.reduction_rate :=
5343 nvl(p_asset_fin_rec_old.reduction_rate, 0) +
5344 nvl(p_asset_fin_rec_adj.reduction_rate, 0);
5345 end if;
5346 else
5347 px_asset_fin_rec_new.reduction_rate := to_number(null);
5348 end if;
5349
5350 if px_asset_fin_rec_new.group_asset_id <>
5351 nvl(p_asset_fin_rec_old.group_asset_id,-99) then
5352
5353 -- In case the group asset is changed, need to replace with new
5354 -- tracking related columns from FA_BOOKS.
5355
5356 if c_get_group_values%NOTFOUND then
5357
5358 -- This is a case in which tracking method is not assigned to the group
5359 -- to which this member asset belongs...
5360
5361 fa_srvr_msg.add_message(
5362 calling_fn => 'fa_asset_calc_pvt.calc_member_info',
5363 name => 'FA_BOOK_INEFFECTIVE_BOOK', p_log_level_rec => p_log_level_rec);
5364 raise calc_member_err;
5365
5366 else
5367
5368 -- New tracking related columns will be set to new structure.
5369
5370 px_asset_fin_rec_new.recognize_gain_loss := l_recognize_gain_loss;
5371 px_asset_fin_rec_new.recapture_reserve_flag := l_recapture_reserve_flag;
5372 px_asset_fin_rec_new.limit_proceeds_flag := l_limit_proceeds_flag;
5373 px_asset_fin_rec_new.terminal_gain_loss := l_terminal_gain_loss;
5374 px_asset_fin_rec_new.exclude_proceeds_from_basis := l_exclude_proceeds_from_basis;
5375 px_asset_fin_rec_new.retirement_deprn_option := l_retirement_deprn_option;
5376 px_asset_fin_rec_new.tracking_method := l_tracking_method;
5377 px_asset_fin_rec_new.allocate_to_fully_rsv_flag := l_allocate_to_fully_rsv_flag;
5378 px_asset_fin_rec_new.allocate_to_fully_ret_flag := l_allocate_to_fully_ret_flag;
5379 px_asset_fin_rec_new.excess_allocation_option := l_excess_allocation_option;
5380 px_asset_fin_rec_new.depreciation_option := l_depreciation_option;
5381 px_asset_fin_rec_new.member_rollup_flag := l_member_rollup_flag;
5382 px_asset_fin_rec_new.disabled_flag := l_disabled_flag; --HH
5383 px_asset_fin_rec_new.over_depreciate_option := l_over_depreciate_option; --hh
5384
5385 end if;
5386
5387 else -- group assignment is not changed
5388 -- In this case, just copy from old to new.
5389 if (p_log_level_rec.statement_level) then
5390 fa_debug_pkg.add(l_calling_fn,'group assignment','not changed', p_log_level_rec => p_log_level_rec);
5391 fa_debug_pkg.add(l_calling_fn,'old OD option',p_asset_fin_rec_old.over_depreciate_option, p_log_level_rec => p_log_level_rec);
5392 fa_debug_pkg.add(l_calling_fn,'New OD option',px_asset_fin_rec_new.over_depreciate_option, p_log_level_rec => p_log_level_rec);
5393 fa_debug_pkg.add(l_calling_fn,'selected OD option',l_over_depreciate_option, p_log_level_rec => p_log_level_rec);
5394 end if;
5395
5396 px_asset_fin_rec_new.recognize_gain_loss :=
5397 p_asset_fin_rec_old.recognize_gain_loss;
5398
5399 px_asset_fin_rec_new.recapture_reserve_flag :=
5400 p_asset_fin_rec_old.recapture_reserve_flag;
5401
5402 px_asset_fin_rec_new.limit_proceeds_flag :=
5403 p_asset_fin_rec_old.limit_proceeds_flag;
5404
5405 px_asset_fin_rec_new.exclude_proceeds_from_basis :=
5406 p_asset_fin_rec_old.exclude_proceeds_from_basis;
5407
5408 px_asset_fin_rec_new.retirement_deprn_option :=
5409 p_asset_fin_rec_old.retirement_deprn_option;
5410
5411 px_asset_fin_rec_new.terminal_gain_loss :=
5412 p_asset_fin_rec_old.terminal_gain_loss;
5413
5414 px_asset_fin_rec_new.tracking_method :=
5415 p_asset_fin_rec_old.tracking_method;
5416
5417 px_asset_fin_rec_new.allocate_to_fully_rsv_flag :=
5418 p_asset_fin_rec_old.allocate_to_fully_rsv_flag;
5419
5420 px_asset_fin_rec_new.allocate_to_fully_ret_flag :=
5421 p_asset_fin_rec_old.allocate_to_fully_ret_flag;
5422
5423 px_asset_fin_rec_new.excess_allocation_option :=
5424 p_asset_fin_rec_old.excess_allocation_option;
5425
5426 px_asset_fin_rec_new.depreciation_option :=
5427 p_asset_fin_rec_old.depreciation_option;
5428
5429 px_asset_fin_rec_new.member_rollup_flag :=
5430 p_asset_fin_rec_old.member_rollup_flag;
5431 --HH
5432 px_asset_fin_rec_new.disabled_flag :=
5433 p_asset_fin_rec_old.disabled_flag;
5434 --make sure there is a value here for cost sign change function
5435 px_asset_fin_rec_new.over_depreciate_option :=
5436 nvl(p_asset_fin_rec_old.over_depreciate_option, l_over_depreciate_option);
5437 --eHH
5438
5439 end if; -- px_asset_fin_rec_new.group_asset_id <> nvl(p_asset_f.....
5440
5441 close c_get_group_values;
5442
5443 end if; -- px_asset_fin_rec_new.group_asset_id is not null;
5444
5445 if p_asset_hdr_rec.period_of_addition = 'Y' then
5446 px_asset_fin_rec_new.eofy_reserve := nvl(p_asset_deprn_rec_old.deprn_reserve, 0) -
5447 nvl(p_asset_deprn_rec_old.ytd_deprn, 0);
5448 else
5449 px_asset_fin_rec_new.eofy_reserve :=
5450 nvl(p_asset_fin_rec_adj.eofy_reserve, 0) +
5451 nvl(p_asset_fin_rec_old.eofy_reserve, 0);
5452 end if;
5453
5454 return true;
5455
5456 EXCEPTION
5457 when calc_member_err then
5458 if (c_get_group_values%ISOPEN) then
5459 CLOSE c_get_group_values;
5460 end if;
5461
5462 return false;
5463
5464 when others then
5465 if (c_get_group_values%ISOPEN) then
5466 CLOSE c_get_group_values;
5467 end if;
5468 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5469 return false;
5470
5471 END calc_member_info;
5472
5473
5474 --RELOCATED
5475 --RELOCATED Relocated to FAVAMRTB.pls
5476 --RELOCATED
5477 --RELOCATED FUNCTION calc_raf_adj_cost
5478 --RELOCATED (p_trans_rec IN FA_API_TYPES.trans_rec_type,
5479 --RELOCATED p_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
5480 --RELOCATED p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
5481 --RELOCATED p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
5482 --RELOCATED p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
5483 --RELOCATED px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
5484 --RELOCATED p_asset_deprn_rec_adj IN FA_API_TYPES.asset_deprn_rec_type,
5485 --RELOCATED p_asset_deprn_rec_new IN FA_API_TYPES.asset_deprn_rec_type,
5486 --RELOCATED p_period_rec IN FA_API_TYPES.period_rec_type,
5487 --RELOCATED p_mrc_sob_type_code IN VARCHAR2
5488 --RELOCATED ) RETURN BOOLEAN IS
5489 --RELOCATED
5490 --RELOCATED
5491 --RELOCATED BEGIN
5492 --RELOCATED
5493 --RELOCATED return true;
5494 --RELOCATED
5495 --RELOCATED END calc_raf_adj_cost;
5496 --RELOCATED
5497
5498
5499 FUNCTION calc_standalone_info
5500 (p_asset_hdr_rec IN FA_API_TYPES.asset_Hdr_rec_type,
5501 p_asset_fin_rec_old IN FA_API_TYPES.asset_fin_rec_type,
5502 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
5503 px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
5504 p_asset_deprn_rec_new IN FA_API_TYPES.asset_deprn_rec_type
5505 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) return boolean IS
5506
5507 l_calling_fn VARCHAR2(40) := 'fa_asset_calc_pvt.calc_standalone_info';
5508
5509 BEGIN
5510
5511 --
5512 -- Setting Group Related variables
5513 px_asset_fin_rec_new.reduction_rate := null;
5514 px_asset_fin_rec_new.reduce_addition_flag := null;
5515 px_asset_fin_rec_new.reduce_adjustment_flag := null;
5516 px_asset_fin_rec_new.reduce_retirement_flag := null;
5517
5518 px_asset_fin_rec_new.recognize_gain_loss := null;
5519 px_asset_fin_rec_new.recapture_reserve_flag := null;
5520 px_asset_fin_rec_new.limit_proceeds_flag := null;
5521 px_asset_fin_rec_new.terminal_gain_loss := null;
5522 px_asset_fin_rec_new.exclude_proceeds_from_basis := null;
5523 px_asset_fin_rec_new.retirement_deprn_option := null;
5524
5525 px_asset_fin_rec_new.tracking_method := null;
5526 px_asset_fin_rec_new.allocate_to_fully_rsv_flag := null;
5527 px_asset_fin_rec_new.allocate_to_fully_ret_flag := null;
5528 px_asset_fin_rec_new.excess_allocation_option := null;
5529 px_asset_fin_rec_new.depreciation_option := null;
5530 px_asset_fin_rec_new.member_rollup_flag := null;
5531 px_asset_fin_rec_new.super_group_id := null;
5532 px_asset_fin_rec_new.over_depreciate_option := null;
5533 px_asset_fin_rec_new.ytd_proceeds := null;
5534 px_asset_fin_rec_new.ltd_proceeds := null;
5535 px_asset_fin_rec_new.ltd_cost_of_removal := null;
5536 px_asset_fin_rec_new.exclude_fully_rsv_flag := null;
5537 px_asset_fin_rec_new.terminal_gain_loss_flag := null;
5538
5539 if p_asset_hdr_rec.period_of_addition = 'Y' then
5540 px_asset_fin_rec_new.eofy_reserve := nvl(p_asset_deprn_rec_new.deprn_reserve, 0) -
5541 nvl(p_asset_deprn_rec_new.ytd_deprn, 0);
5542 else
5543 px_asset_fin_rec_new.eofy_reserve :=
5544 nvl(p_asset_fin_rec_adj.eofy_reserve, 0) +
5545 nvl(p_asset_fin_rec_old.eofy_reserve, 0);
5546 end if;
5547
5548 return true;
5549
5550 EXCEPTION
5551 when others then
5552 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5553 return false;
5554
5555 END calc_standalone_info;
5556
5557
5558
5559 END FA_ASSET_CALC_PVT;