1 PACKAGE BODY FA_ADJUSTMENT_PUB as
2 /* $Header: FAPADJB.pls 120.102.12020000.6 2013/03/22 05:47:47 dvjoshi ship $ */
3
4 --*********************** Global constants ******************************--
5
6 G_PKG_NAME CONSTANT varchar2(30) := 'FA_ADJUSTMENT_PUB';
7 G_API_NAME CONSTANT varchar2(30) := 'Adjustment API';
8 G_API_VERSION CONSTANT number := 1.0;
9
10 g_log_level_rec fa_api_types.log_level_rec_type;
11 g_release number := fa_cache_pkg.fazarel_release;
12
13 --*********************** Private functions ******************************--
14
15 -- private declaration for books (mrc) wrapper
16
17 g_cip_cost number := 0;
18 g_cost number := 0;
19 g_last_invoice_thid number;
20 g_last_group_asset_id number;
21
22 FUNCTION do_all_books
23 (px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
24 px_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
25 p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
26 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
30 px_inv_tbl IN OUT NOCOPY FA_API_TYPES.inv_tbl_type,
27 p_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
28 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
29 px_inv_trans_rec IN OUT NOCOPY FA_API_TYPES.inv_trans_rec_type,
31 p_asset_deprn_rec_adj IN FA_API_TYPES.asset_deprn_rec_type,
32 p_group_reclass_options_rec IN FA_API_TYPES.group_reclass_options_rec_type,
33 p_log_level_rec IN FA_API_TYPES.log_level_rec_type
34 ) RETURN BOOLEAN;
35
36
37 --*********************** Public procedures ******************************--
38
39 PROCEDURE do_adjustment
40 (p_api_version IN NUMBER,
41 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
42 p_commit IN VARCHAR2 := FND_API.G_FALSE,
43 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
44 p_calling_fn IN VARCHAR2,
45 x_return_status OUT NOCOPY VARCHAR2,
46 x_msg_count OUT NOCOPY NUMBER,
47 x_msg_data OUT NOCOPY VARCHAR2,
48
49 px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
50 px_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
51 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
52 x_asset_fin_rec_new OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
53 x_asset_fin_mrc_tbl_new OUT NOCOPY FA_API_TYPES.asset_fin_tbl_type,
54 px_inv_trans_rec IN OUT NOCOPY FA_API_TYPES.inv_trans_rec_type,
55 px_inv_tbl IN OUT NOCOPY FA_API_TYPES.inv_tbl_type,
56 p_asset_deprn_rec_adj IN FA_API_TYPES.asset_deprn_rec_type,
57 x_asset_deprn_rec_new OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type,
58 x_asset_deprn_mrc_tbl_new OUT NOCOPY FA_API_TYPES.asset_deprn_tbl_type,
59 p_group_reclass_options_rec IN FA_API_TYPES.group_reclass_options_rec_type) IS
60
61 l_reporting_flag varchar2(1);
62 l_inv_count number := 0;
63 l_rate_count number := 0;
64 l_deprn_count number := 0;
65 l_count number := 0;
66
67 l_asset_fin_rec_adj FA_API_TYPES.asset_fin_rec_type := p_asset_fin_rec_adj;
68 l_asset_fin_mrc_tbl_adj FA_API_TYPES.asset_fin_tbl_type;
69 l_asset_deprn_rec_adj FA_API_TYPES.asset_deprn_rec_type;
70 l_asset_deprn_mrc_tbl_adj FA_API_TYPES.asset_deprn_tbl_type;
71
72 l_asset_fin_rec_new FA_API_TYPES.asset_fin_rec_type := p_asset_fin_rec_adj;
73 l_asset_fin_mrc_tbl_new FA_API_TYPES.asset_fin_tbl_type;
74 l_asset_deprn_rec_new FA_API_TYPES.asset_deprn_rec_type;
75 l_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
76
77 l_asset_desc_rec FA_API_TYPES.asset_desc_rec_type;
78 l_asset_type_rec FA_API_TYPES.asset_type_rec_type;
79 l_asset_cat_rec FA_API_TYPES.asset_cat_rec_type;
80
81 -- used for tax books when doing cip-in-tax or autocopy
82 l_trans_rec FA_API_TYPES.trans_rec_type;
83 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
84 l_tax_book_tbl FA_CACHE_PKG.fazctbk_tbl_type;
85 l_tax_index NUMBER; -- index for tax loop
86 l_inv_trans_rec FA_API_TYPES.inv_trans_rec_type; /* Added for Bug 12380342 */
87
88 -- Bug:5930979:Japan Tax Reform Project
89 l_deprn_method_code varchar2(12);
90 l_life_in_months Number(4);
91
92 l_calling_fn VARCHAR2(35) := 'fa_adjustment_pub.do_adjustment';
93 adj_err EXCEPTION;
94
95 l_trx_stack boolean := FALSE; /*bug#16426081 */
96
97
98 BEGIN
99
100 SAVEPOINT DO_ADJUSTMENT;
101 if (not g_log_level_rec.initialized) then
102 if (NOT fa_util_pub.get_log_level_rec (
103 x_log_level_rec => g_log_level_rec
104 )) then
105 raise adj_err;
106 end if;
107 end if;
108
109 g_release := fa_cache_pkg.fazarel_release;
110
111 g_cip_cost := 0;
112 -- Initialize message list if p_init_msg_list is set to TRUE.
113 if (fnd_api.to_boolean(p_init_msg_list)) then
114 -- initialize error message stack.
115 fa_srvr_msg.init_server_message;
116
117 -- initialize debug message stack.
118 fa_debug_pkg.initialize;
119 end if;
120
121 -- Check version of the API
122 -- Standard call to check for API call compatibility.
123 if NOT fnd_api.compatible_api_call (
124 G_API_VERSION,
125 p_api_version,
126 G_API_NAME,
127 G_PKG_NAME
128 ) then
129 x_return_status := FND_API.G_RET_STS_ERROR;
130 raise adj_err;
131 end if;
132 /*bug#16426081 */
133 declare
134 l1_dist_trans_rec fa_api_types.trans_rec_type;
135 l1_asset_desc_rec fa_api_types.asset_desc_rec_type;
136 l1_asset_type_rec fa_api_types.asset_type_rec_type;
137 l1_asset_cat_rec fa_api_types.asset_cat_rec_type;
138 l1_asset_hierarchy_rec fa_api_types.asset_hierarchy_rec_type;
139 l1_asset_fin_rec fa_api_types.asset_fin_rec_type;
140 l1_asset_deprn_rec fa_api_types.asset_deprn_rec_type;
141 l1_asset_dist_tbl fa_api_types.asset_dist_tbl_type;
142
143 begin
144 If not FA_ADJUSTMENT_PVT.process_trx_stack (
145 p_orig_trx_type => 'ADJ',
146 x_trx_stack => l_trx_stack,
147 -- Standard Parameters --
151 x_msg_data => x_msg_data,
148 p_validation_level => p_validation_level,
149 x_return_status => x_return_status,
150 x_msg_count => x_msg_count,
152 p_calling_fn => p_calling_fn,
153 p_log_level_rec => g_log_level_rec,
154 -- Transaction Object --
155 px_trans_rec => px_trans_rec,
156 px_dist_trans_rec => l1_dist_trans_rec,
157 -- Asset Object --
158 px_asset_hdr_rec => px_asset_hdr_rec,
159 px_asset_desc_rec => l1_asset_desc_rec,
160 px_asset_type_rec => l1_asset_type_rec,
161 px_asset_cat_rec => l1_asset_cat_rec,
162 px_asset_hierarchy_rec => l1_asset_hierarchy_rec,
163 px_asset_fin_rec => l1_asset_fin_rec,
164 px_asset_deprn_rec => l1_asset_deprn_rec,
165 px_asset_dist_tbl => l1_asset_dist_tbl,
166 -- Invoice Object --
167 px_inv_tbl => px_inv_tbl,
168 ---- adjustment related parameters -------------
169 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
170 x_asset_fin_rec_new => x_asset_fin_rec_new,
171 x_asset_fin_mrc_tbl_new => x_asset_fin_mrc_tbl_new,
172 px_inv_trans_rec => px_inv_trans_rec,
173 p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
174 x_asset_deprn_rec_new => x_asset_deprn_rec_new,
175 x_asset_deprn_mrc_tbl_new => x_asset_deprn_mrc_tbl_new,
176 p_group_reclass_options_rec => p_group_reclass_options_rec
177 ) then
178 raise adj_err;
179 end if;
180 exception
181 when others then
182 raise adj_err;
183 end;
184 if l_trx_stack then
185 return;
186 end if;
187 /*bug#16426081 */
188
189 -- call the cache for the primary transaction book
190 if NOT fa_cache_pkg.fazcbc(X_book => px_asset_hdr_rec.book_type_code, p_log_level_rec => g_log_level_rec) then
191 raise adj_err;
192 end if;
193
194 px_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
195
196 -- verify the asset exist in the book already
197 if not FA_ASSET_VAL_PVT.validate_asset_book
198 (p_transaction_type_code => 'ADJUSTMENT',
199 p_book_type_code => px_asset_hdr_rec.book_type_code,
200 p_asset_id => px_asset_hdr_rec.asset_id,
201 p_calling_fn => l_calling_fn
202 , p_log_level_rec => g_log_level_rec) then
203 raise adj_err;
204 end if;
205
206 -- Account for transaction submitted from a responsibility
207 -- that is not tied to a SOB_ID by getting the value from
208 -- the book struct
209
210 -- Get the book type code P,R or N
211 if not fa_cache_pkg.fazcsob
212 (X_set_of_books_id => px_asset_hdr_rec.set_of_books_id,
213 X_mrc_sob_type_code => l_reporting_flag
214 , p_log_level_rec => g_log_level_rec) then
215 raise adj_err;
216 end if;
217
218 -- Error out if the program is submitted from the Reporting Responsibility
219 -- No transaction permitted directly on reporting books.
220
221 IF l_reporting_flag = 'R' THEN
222 fa_srvr_msg.add_message
223 (calling_fn => l_calling_fn,
224 name => 'MRC_OSP_INVALID_BOOK_TYPE', p_log_level_rec => g_log_level_rec);
225 raise adj_err;
226 END IF;
227
228 --Verify if impairment has happened in same period
229 if not FA_ASSET_VAL_PVT.validate_impairment_exists
230 (p_asset_id => px_asset_hdr_rec.asset_id,
231 p_book => px_asset_hdr_rec.book_type_code,
232 p_mrc_sob_type_code => l_reporting_flag,
233 p_set_of_books_id => px_asset_hdr_rec.set_of_books_id,
234 p_log_level_rec => g_log_level_rec) then
235 raise adj_err;
236 end if;
237 -- end initial MRC validation
238 /*phase5 This function will validate if current transaction is overlapping to any previously done impairment*/
239 /* if not FA_ASSET_VAL_PVT.check_overlapping_impairment(
240 p_trans_rec => px_trans_rec,
241 p_asset_hdr_rec => px_asset_hdr_rec ,
242 p_log_level_rec => g_log_level_rec) then
243
244 fa_srvr_msg.add_message
245 (name => 'FA_OVERLAPPING_IMP_NOT_ALLOWED',
246 calling_fn => 'FA_ASSET_VAL_PVT.check_overlapping_impairment'
247 ,p_log_level_rec => g_log_level_rec);
248 raise adj_err;
249 end if;
250 */
251
252 -- pop the structs for the non-fin information needed for trx
253
254 if not FA_UTIL_PVT.get_asset_desc_rec
255 (p_asset_hdr_rec => px_asset_hdr_rec,
256 px_asset_desc_rec => l_asset_desc_rec
257 , p_log_level_rec => g_log_level_rec) then
258 raise adj_err;
259 end if;
260
261 if not FA_UTIL_PVT.get_asset_cat_rec
262 (p_asset_hdr_rec => px_asset_hdr_rec,
263 px_asset_cat_rec => l_asset_cat_rec,
264 p_date_effective => null
265 , p_log_level_rec => g_log_level_rec) then
266 raise adj_err;
267 end if;
268
269 if not FA_UTIL_PVT.get_asset_type_rec
270 (p_asset_hdr_rec => px_asset_hdr_rec,
274 raise adj_err;
271 px_asset_type_rec => l_asset_type_rec,
272 p_date_effective => null
273 , p_log_level_rec => g_log_level_rec) then
275 end if;
276
277
278 -- don't see a reason to pop the dist info here since it's static
279 -- and should be needed by the calc engine
280
281 l_inv_count := px_inv_tbl.count;
282
283 /*
284 -- Bug:5930979:Japan Tax Reform Project (Start)
285 select deprn_method_code,
286 life_in_months
287 into l_deprn_method_code,
288 l_life_in_months
289 from fa_books
290 where book_type_code = px_asset_hdr_rec.book_type_code
291 and asset_id = px_asset_hdr_rec.asset_id
292 and transaction_header_id_out is null;
293
294 if not fa_cache_pkg.fazccmt (
295 X_method => l_deprn_method_code,
296 X_life => l_life_in_months, p_log_level_rec => g_log_level_rec) then
297 raise adj_err;
298 end if;
299
300
301 if (nvl(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag,'NO') = 'YES') and
302 nvl(l_asset_fin_rec_adj.group_asset_id,
303 FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM then
304 fa_srvr_msg.add_message
305 (calling_fn => l_calling_fn,
306 name => 'FA_GROUP_NOT_AVAILABLE', p_log_level_rec => g_log_level_rec);
307 raise adj_err;
308 end if;
309 -- Bug:5930979:Japan Tax Reform Project (End)
310 */
311 -- do not allow manual cost changes on cip assets in tax
312 -- except when api is called from the cip-in-tax gateway
313
314 if (fa_cache_pkg.fazcbc_record.book_class = 'TAX' and
315 l_asset_type_rec.asset_type = 'CIP' and
316 p_calling_fn NOT IN ('fa_ciptax_api_pkg.cip_adj','FA_RECLASS_PVT.do_redefault'))
317 then
318 fa_srvr_msg.add_message
319 (calling_fn => l_calling_fn,
320 name => 'FA_BOOK_NO_CIP_COST_CHANGE', p_log_level_rec => g_log_level_rec);
321 raise adj_err;
322 end if;
323
324
325 -- nor invoice related adjustments
326 if (l_asset_type_rec.asset_type = 'GROUP' and
327 px_inv_tbl.count <> 0) then
328 fa_srvr_msg.add_message
329 (calling_fn => l_calling_fn,
330 name => 'FA_BOOK_NO_GROUP_COST_CHANGE', p_log_level_rec => g_log_level_rec);
331 raise adj_err;
332 end if;
333
334
335
336 -- set the trx type to ADJUSTMENT or CIP ADJUSTMENT
337 -- is reset in the private api for period of addition
338
339 if (l_asset_type_rec.asset_type = 'CIP') then
340 px_trans_rec.transaction_type_code := 'CIP ADJUSTMENT';
341 elsif (l_asset_type_rec.asset_type = 'GROUP') then
342 px_trans_rec.transaction_type_code := 'GROUP ADJUSTMENT';
343 if (nvl(px_trans_rec.transaction_key, 'XX') <> 'SG') then
344 px_trans_rec.transaction_key := 'GJ';
345 end if;
346 else
347 px_trans_rec.transaction_type_code := 'ADJUSTMENT';
348 end if;
349
350 -- default the trx_subtype to EXPENSED if null (AMORTIZED for group)
351 if (l_asset_type_rec.asset_type = 'GROUP' and
352 px_trans_rec.transaction_subtype is null) then
353 px_trans_rec.transaction_subtype := 'AMORTIZED';
354 elsif (px_trans_rec.transaction_subtype is null) then
355 px_trans_rec.transaction_subtype := 'EXPENSED';
356 end if;
357
358 -- R12 logic
359 -- we need the thid first for inserting clearing into adjustments
360 -- SLA: do not populate when this is called from an invoice transfer
361 -- and the id was already populated
362 -- ER 14644811 / Bug 15877517 : Moved the code to do_all_books
363 /* if (nvl(px_inv_trans_rec.transaction_type, 'X') <> 'INVOICE TRANSFER') then
364 select fa_transaction_headers_s.nextval
365 into px_trans_rec.transaction_header_id
366 from dual;
367 end if; */
368
369 -- also check if this is the period of addition - use absolute mode for adjustments
370 -- we will only clear cost outside period of addition
371 if not FA_ASSET_VAL_PVT.validate_period_of_addition
372 (p_asset_id => px_asset_hdr_rec.asset_id,
373 p_book => px_asset_hdr_rec.book_type_code,
374 p_mode => 'ABSOLUTE',
375 px_period_of_addition => px_asset_hdr_rec.period_of_addition, p_log_level_rec => g_log_level_rec) then
376 raise adj_err;
377 end if;
378
379 -- Bug 12612333 : Moved the validation to FAVCALB.pls
380 -- Bug 8471701: Prevent reserve change if any 'B' row distribution is inactive
381 /* if (nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) <> 0) or (nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) <> 0) then
382 if not FA_ASSET_VAL_PVT.validate_ltd_deprn_change
383 (p_book_type_code => px_asset_hdr_rec.book_type_code,
384 p_asset_Id => px_asset_hdr_rec.asset_id,
385 p_calling_fn => l_calling_fn,
386 p_log_level_rec => g_log_level_rec) then
387 raise adj_err;
388 end if;
389 end if; */
390 -- End Bug 8471701
391
392 -- call the mrc wrapper for the transaction book
393
394 if not do_all_books
395 (px_trans_rec => px_trans_rec,
396 px_asset_hdr_rec => px_asset_hdr_rec ,
397 p_asset_desc_rec => l_asset_desc_rec ,
398 p_asset_type_rec => l_asset_type_rec ,
399 p_asset_cat_rec => l_asset_cat_rec ,
400 p_asset_fin_rec_adj => p_asset_fin_rec_adj,
401 px_inv_trans_rec => px_inv_trans_rec,
402 px_inv_tbl => px_inv_tbl,
403 p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
407 raise adj_err;
404 p_group_reclass_options_rec=> p_group_reclass_options_rec
405 ,p_log_level_rec => g_log_level_rec
406 )then
408 end if;
409
410 -- If book is a corporate book, process cip assets and autocopy
411
412 if (fa_cache_pkg.fazcbc_record.book_class = 'CORPORATE') then
413
414 -- BUG# 2792134
415 -- null out the fin_rec table as well as deprn
416 -- cost and mrc cost will be rederived using corp values
417
418 l_asset_fin_rec_adj := null;
419 l_asset_fin_mrc_tbl_adj.delete;
420
421 l_asset_fin_rec_adj.cost := G_cost;
422 -- excluding salvage changes for now
423 -- nothing else should apply to tax (method, etc, and remain the same)
424
425 -- do not continue if there are no changes to process
426
427 if (nvl(l_asset_fin_rec_adj.cost, 0) = 0) then
428 null;
429 else
430 -- null out the deprn_adj table as we do not want to autocopy
431 -- any deprn info to tax books
432
433 l_asset_deprn_rec_adj := null;
434
435 l_trans_rec := px_trans_rec;
436 l_asset_hdr_rec := px_asset_hdr_rec;
437 l_inv_trans_rec := null; /* Added for Bug 12380342 */
438
439 if not fa_cache_pkg.fazctbk
440 (x_corp_book => px_asset_hdr_rec.book_type_code,
441 x_asset_type => l_asset_type_rec.asset_type,
442 x_tax_book_tbl => l_tax_book_tbl, p_log_level_rec => g_log_level_rec) then
443 raise adj_err;
444 end if;
445
446 for l_tax_index in 1..l_tax_book_tbl.count loop
447
448 -- verify that the asset exists in the tax book
449 -- if not just bypass it
450
451 if not (FA_ASSET_VAL_PVT.validate_asset_book
452 (p_transaction_type_code => 'ADJUSTMENT',
453 p_book_type_code => l_tax_book_tbl(l_tax_index),
454 p_asset_id => px_asset_hdr_rec.asset_id,
455 p_calling_fn => l_calling_fn,
456 p_log_level_rec => g_log_level_rec)) then
457 null;
458 else
459
460 -- cache the book information for the tax book
461 if (NOT fa_cache_pkg.fazcbc(X_book => l_tax_book_tbl(l_tax_index),
462 p_log_level_rec => g_log_level_rec)) then
463 raise adj_err;
464 end if;
465
466 -- NOTE!!!!
467 -- May need to set the transaction date, trx_type, subtype here as well
468 -- based on the open period and settings for each tax book in the loop
469
470 l_asset_hdr_rec.book_type_code := l_tax_book_tbl(l_tax_index);
471 l_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
472 l_trans_rec.source_transaction_header_id := px_trans_rec.transaction_header_id;
473 l_trans_rec.transaction_header_id := null;
474 /* Added for Bug 12380342 Start */
475 l_trans_rec.trx_reference_id := null;
476 l_trans_rec.event_id := null;
477 if (l_trans_rec.transaction_key ='IT') then
478 l_trans_rec.transaction_key := null;
479 end if;
480 /* Added for Bug 12380342 End */
481
482 -- SLA: we need the thid or each tax book as well
483 -- note that we do it here rather than do_all
484 -- books because of invoice impacts in corp above
485 -- ER 14644811 / Bug 15877517 : Moved the code to do_all_books
486 /*select fa_transaction_headers_s.nextval
487 into l_trans_rec.transaction_header_id
488 from dual; */
489
490 if not do_all_books
491 (px_trans_rec => l_trans_rec, -- tax
492 px_asset_hdr_rec => l_asset_hdr_rec , -- tax
493 p_asset_desc_rec => l_asset_desc_rec ,
494 p_asset_type_rec => l_asset_type_rec ,
495 p_asset_cat_rec => l_asset_cat_rec ,
496 p_asset_fin_rec_adj => l_asset_fin_rec_adj,
497 px_inv_trans_rec => l_inv_trans_rec, /* Modified for Bug 12380342 */
498 px_inv_tbl => px_inv_tbl,
499 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
500 p_group_reclass_options_rec=> p_group_reclass_options_rec,
501 p_log_level_rec => g_log_level_rec
502 ) then
503 raise adj_err;
504 end if;
505
506 end if; -- exists in tax book
507
508 end loop; -- tax books
509
510 end if; -- cost change
511
512 end if; -- corporate book
513
514 -- commit if p_commit is TRUE.
515 if (fnd_api.to_boolean (p_commit)) then
516 COMMIT WORK;
517 end if;
518
519 x_return_status := FND_API.G_RET_STS_SUCCESS;
520
521
522 EXCEPTION
523
524 when adj_err then
525 ROLLBACK TO do_adjustment;
526
527 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => g_log_level_rec);
528
529 -- do not retrieve / clear messaging when this is being called
530 -- from reclass api - allow calling util to dump them
531 if (p_calling_fn <> 'FA_RECLASS_PVT.do_redefault' and
532 p_calling_fn <> 'fa_inv_xfr_pub.do_transfer') then
536 );
533 FND_MSG_PUB.count_and_get (
534 p_count => x_msg_count,
535 p_data => x_msg_data
537 end if;
538
539 x_return_status := FND_API.G_RET_STS_ERROR;
540
541 when others then
542 ROLLBACK TO do_adjustment;
543
544 fa_srvr_msg.add_sql_error(
545 calling_fn => l_calling_fn, p_log_level_rec => g_log_level_rec);
546
547 -- do not retrieve / clear messaging when this is being called
548 -- from reclass api - allow calling util to dump them
549 if (p_calling_fn <> 'FA_RECLASS_PVT.do_redefault' and
550 p_calling_fn <> 'fa_inv_xfr_pub.do_transfer') then
551 FND_MSG_PUB.count_and_get (
552 p_count => x_msg_count,
553 p_data => x_msg_data
554 );
555 end if;
556
557 x_return_status := FND_API.G_RET_STS_ERROR;
558
559 END do_adjustment;
560
561 -----------------------------------------------------------------------------
562
563 -- Books (MRC) Wrapper - called from public API above
564 --
565 -- For non mrc books, this just calls the private API with provided params
566 -- For MRC, it processes the primary and then loops through each reporting
567 -- book calling the private api for each.
568
569
570 FUNCTION do_all_books
571 (px_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
572 px_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
573 p_asset_desc_rec IN FA_API_TYPES.asset_desc_rec_type,
574 p_asset_type_rec IN FA_API_TYPES.asset_type_rec_type,
575 p_asset_cat_rec IN FA_API_TYPES.asset_cat_rec_type,
576 p_asset_fin_rec_adj IN FA_API_TYPES.asset_fin_rec_type,
577 px_inv_trans_rec IN OUT NOCOPY FA_API_TYPES.inv_trans_rec_type,
578 px_inv_tbl IN OUT NOCOPY FA_API_TYPES.inv_tbl_type,
579 p_asset_deprn_rec_adj IN FA_API_TYPES.asset_deprn_rec_type,
580 p_group_reclass_options_rec IN FA_API_TYPES.group_reclass_options_rec_type
581 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type
582 ) RETURN BOOLEAN IS
583
584 -- used for calling private api for reporting books
585 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
586 l_asset_fin_rec_adj FA_API_TYPES.asset_fin_rec_type;
587 l_asset_deprn_rec_adj FA_API_TYPES.asset_deprn_rec_type;
588 l_asset_fin_mrc_tbl_adj FA_API_TYPES.asset_fin_tbl_type;
589 l_asset_deprn_mrc_tbl_adj FA_API_TYPES.asset_deprn_tbl_type;
590
591 -- used to store the primary info for later use in mrc calcs
592 -- initially to store the incoming adj upon invoice engine call
593 l_asset_fin_rec_adj_init FA_API_TYPES.asset_fin_rec_type;
594 l_asset_deprn_rec_adj_init FA_API_TYPES.asset_deprn_rec_type;
595 l_group_rcl_options_rec_init FA_API_TYPES.group_reclass_options_rec_type;
596
597 -- used for retrieving "old" and "new" structs from private api calls
598 l_asset_fin_rec_old FA_API_TYPES.asset_fin_rec_type;
599 l_asset_fin_rec_new FA_API_TYPES.asset_fin_rec_type;
600 l_asset_deprn_rec_old FA_API_TYPES.asset_deprn_rec_type;
601 l_asset_deprn_rec_new FA_API_TYPES.asset_deprn_rec_type;
602
603 -- used for group reclass api call
604 l_group_rcl_trans_rec FA_API_TYPES.trans_rec_type;
605 l_group_rcl_options_rec FA_API_TYPES.group_reclass_options_rec_type;
606
607 l_reporting_flag varchar2(1);
608
609 l_period_rec FA_API_TYPES.period_rec_type;
610 l_sob_tbl FA_CACHE_PKG.fazcrsob_sob_tbl_type;
611
612 -- used for local runs
613 l_responsibility_id number;
614 l_application_id number;
615
616 -- used for get_rate
617 l_deprn_ratio number;
618 l_exchange_date date;
619 l_rate number;
620 l_result_code varchar2(15);
621
622 l_old_primary_cost number;
623 l_new_primary_cost number;
624
625 l_old_primary_deprn_reserve number; --bug 6619897
626 l_old_primary_ytd_deprn number; --Bug 13533180
627
628 l_complete varchar2(1);
629 l_result_code1 varchar2(15);
630
631 l_index_fin number;
632 l_index_dep number;
633
634 l_exchange_rate number;
635 l_avg_rate number;
636 l_avg_rate_bk number;
637 l_inv_rate_sum number := 0;
638 l_inv_rate_index number;
639 l_rate_count number := 0;
640 l_expense_amount number := 0;
641 l_transaction_date date;
642
643 adj_row FA_ADJUST_TYPE_PKG.fa_adj_row_struct;
644
645 -- used for new group stuff
646 l_src_trans_rec fa_api_types.trans_rec_type;
647 l_src_asset_hdr_rec fa_api_types.asset_hdr_rec_type;
648 l_src_asset_desc_rec fa_api_types.asset_desc_rec_type;
649 l_src_asset_type_rec fa_api_types.asset_type_rec_type;
650 l_src_asset_cat_rec fa_api_types.asset_cat_rec_type;
651 l_src_asset_fin_rec_old fa_api_types.asset_fin_rec_type;
652 l_src_asset_fin_rec_adj fa_api_types.asset_fin_rec_type;
653 l_src_asset_fin_rec_new fa_api_types.asset_fin_rec_type;
654 l_src_asset_deprn_rec_old fa_api_types.asset_deprn_rec_type;
655 l_src_asset_deprn_rec_adj fa_api_types.asset_deprn_rec_type;
656 l_src_asset_deprn_rec_new fa_api_types.asset_deprn_rec_type;
657
658 l_dest_trans_rec fa_api_types.trans_rec_type;
659 l_dest_asset_hdr_rec fa_api_types.asset_hdr_rec_type;
660 l_dest_asset_desc_rec fa_api_types.asset_desc_rec_type;
664 l_dest_asset_fin_rec_adj fa_api_types.asset_fin_rec_type;
661 l_dest_asset_type_rec fa_api_types.asset_type_rec_type;
662 l_dest_asset_cat_rec fa_api_types.asset_cat_rec_type;
663 l_dest_asset_fin_rec_old fa_api_types.asset_fin_rec_type;
665 l_dest_asset_fin_rec_new fa_api_types.asset_fin_rec_type;
666 l_dest_asset_deprn_rec_old fa_api_types.asset_deprn_rec_type;
667 l_dest_asset_deprn_rec_adj fa_api_types.asset_deprn_rec_type;
668 l_dest_asset_deprn_rec_new fa_api_types.asset_deprn_rec_type;
669
670 l_max_reclass_date DATE;
671 l_max_ret_date DATE;
672
673 /* Japan Tax Phase3 extended deprn flags */
674 l_extended_flag boolean := FALSE;
675 l_set_extend_flag boolean := FALSE;
676 l_reset_extend_flag boolean := FALSE;
677
678 /* Bug 6950629: For contract_id adjustment */
679 l_contract_change_flag boolean := FALSE;
680 l_validate_flag boolean := FALSE;
681
682 cursor c_get_max_reclass_date (p_asset_id number,
683 p_book_type_code varchar2) is
684 select dest_amortization_start_date
685 from fa_trx_references
686 where member_asset_id = p_asset_id
687 and book_type_code = p_book_type_code
688 order by dest_amortization_start_date desc;
689
690 cursor c_get_overlapping_ret (p_asset_id number,
691 p_book_type_code varchar2) is
692 select transaction_date_entered
693 from fa_transaction_headers
694 where asset_id = p_asset_id
695 and book_type_code = p_book_type_code
696 and transaction_type_code in
697 ('PARTIAL RETIREMENT','REINSTATEMENT')
698 order by transaction_date_entered desc;
699
700 -- Japan Tax phase3
701 -- Cursor to fetch original deprn info before last extended
702 -- Fetch only one row to get the latest one.
703 -- Bug 6614551 no need to change salvage value
704 CURSOR c_extend_get_original_deprn (p_asset_id number,
705 p_book_type_code varchar2) is
706 /* select NVL(bk_extnd.prior_deprn_method,bk_old.deprn_method_code) deprn_method_code,
707 NVL(bk_extnd.prior_life_in_months,bk_old.life_in_months) life_in_months,
708 --bk_old.salvage_value,
709 --bk_old.period_counter_fully_reserved,
710 --bk_old.period_counter_life_complete,
711 NVL(bk_extnd.prior_basic_rate, bk_old.basic_rate) basic_rate,
712 NVL(bk_extnd.prior_adjusted_rate, bk_old.adjusted_rate) adjusted_rate,
713 bk_old.allowed_deprn_limit,
714 bk_old.deprn_limit_type,
715 bk_old.allowed_deprn_limit_amount
716 from fa_books bk_old, fa_books bk_extnd
717 where bk_old.book_type_code = p_book_type_code and
718 bk_old.asset_id = p_asset_id and
719 bk_old.extended_depreciation_period is null and
720 bk_extnd.book_type_code = p_book_type_code and
721 bk_extnd.asset_id = p_asset_id and
722 bk_extnd.extended_depreciation_period is not null and
723 bk_extnd.transaction_header_id_in = bk_old.transaction_header_id_out
724 order by bk_extnd.transaction_header_id_in desc;*/
725
726 SELECT FB.deprn_method_code
727 , FB.life_in_months
728 , FB.basic_rate
729 , FB.adjusted_rate
730 , FB.allowed_deprn_limit
731 , FB.deprn_limit_type
732 , FB.allowed_deprn_limit_amount
733 FROM FA_BOOKS FB
734 , FA_TRANSACTION_HEADERS FT
735 WHERE FB.BOOK_TYPE_CODE = p_book_type_code
736 AND FB.ASSET_ID = p_asset_id
737 AND FB.BOOK_TYPE_CODE = FT.BOOK_TYPE_CODE
738 AND FB.ASSET_ID = FT.ASSET_ID
739 AND FB.TRANSACTION_HEADER_ID_OUT = FT.TRANSACTION_HEADER_ID
740 AND FT.TRANSACTION_KEY = 'ES'
741 UNION
742 SELECT FB.prior_deprn_method
743 , FB.prior_life_in_months
744 , FB.prior_basic_rate
745 , FB.prior_adjusted_rate
746 , FB.prior_deprn_limit
747 , FB.prior_deprn_limit_type
748 , FB.prior_deprn_limit_amount
749 FROM FA_BOOKS FB
750 WHERE FB.BOOK_TYPE_CODE = p_book_type_code
751 AND FB.ASSET_ID = p_asset_id
752 AND FB.date_ineffective IS NULL;
753
754
755 -- Bug# 7154793
756 /*---------------------------------------------------------
757 -- Below cursor is added to verify if retirement prorate
758 -- date is greater then current period close date. And
759 -- If this is true than donot allow any adjustment trans
760 -- on this asset. As this will corrupt the data
761 --
762 ----------------------------------------------------------*/
763 Cursor Check_retirement_prorate_date(
764 p_asset_id number,
765 p_book_type_code varchar2
766 ) is
767 Select 1
768 from
769 fa_transaction_headers fath
770 , fa_deprn_periods fadp
771 , fa_retirements faret
772 , fa_conventions facon
773 where fath.book_type_code = p_book_type_code
774 and fath.asset_id = p_asset_id
775 and fath.transaction_type_code in ('PARTIAL RETIREMENT','FULL RETIREMENT')
776 and fath.book_type_code = fadp.book_type_code
777 and fath.date_effective between fadp.period_open_date and nvl(fadp.period_close_date,sysdate)
778 and fadp.period_close_date is null
779 and fath.transaction_header_id = faret.TRANSACTION_HEADER_ID_IN
780 and faret.TRANSACTION_HEADER_ID_OUT is null
784 ;
781 and faret.retirement_prorate_convention = facon.prorate_convention_code
782 and faret.date_retired between facon.start_date and facon.end_date
783 and facon.prorate_date > fadp.CALENDAR_PERIOD_CLOSE_DATE
785
786
787
788 -- Japan Tax phase3 Bug 6614543
789 l_extend_calendar_pod date;
790 l_extend_calendar_pcd date;
791
792 --Bug# 7715678
793 cursor c_get_context_date(c_book_type_code varchar2) is
794 select greatest(calendar_period_open_date,
795 least(sysdate, calendar_period_close_date))
796 from fa_deprn_periods
797 where book_type_code = c_book_type_code
798 and period_close_date is null;
799
800 --Bug 8941132 MRC RECLASS
801 cursor get_trx_ref is
802 select TRX_REFERENCE_ID,
803 TRANSACTION_TYPE,
804 SRC_TRANSACTION_SUBTYPE,
805 DEST_TRANSACTION_SUBTYPE,
806 BOOK_TYPE_CODE,
807 SRC_ASSET_ID,
808 SRC_TRANSACTION_HEADER_ID,
809 DEST_ASSET_ID,
810 DEST_TRANSACTION_HEADER_ID,
811 MEMBER_ASSET_ID,
812 MEMBER_TRANSACTION_HEADER_ID,
813 SRC_AMORTIZATION_START_DATE,
814 DEST_AMORTIZATION_START_DATE,
815 RESERVE_TRANSFER_AMOUNT,
816 SRC_EXPENSE_AMOUNT,
817 DEST_EXPENSE_AMOUNT,
818 SRC_EOFY_RESERVE,
819 DEST_EOFY_RESERVE
820 from fa_trx_references
821 where TRX_REFERENCE_ID = px_trans_rec.trx_reference_id;
822
823 l_trx_ref_rec fa_api_types.trx_ref_rec_type; --Bug 8941132
824 l_group_reclass boolean := FALSE; --Bug 8941132
825
826 l_trx_date date;
827 --Bug# 7715678 end
828
829 --Bug7627286
830 l_deprn_amount NUMBER;
831
832 l_calling_fn varchar2(30) := 'fa_adjustment_pub.do_all_books';
833 adj_err EXCEPTION;
834 fol_month_trans number :=0;
835 l_trxs_exist varchar2(1);
836 l_amortization_start_date date;
837 l_life_in_months number;
838
839
840 BEGIN
841
842 --Bug7627286
843 --Call the function to check if deprn has been run for the period
844 -- and also to fetch the deprn amount
845 if not FA_UTIL_PVT.check_deprn_run
846 (X_book => px_asset_hdr_rec.book_type_code,
847 X_asset_id => px_asset_hdr_rec.asset_id,
848 X_deprn_amount => l_deprn_amount,
849 p_log_level_rec => p_log_level_rec) then
850 null;
851 end if;
852
853 -- ER 14644811 / Bug 15877517 : No need to call trx approval for inv txfr
854 -- It will be called in the inv txfr api itself
855 if (nvl(px_inv_trans_rec.transaction_type, 'X') <> 'INVOICE TRANSFER') then
856 -- BUG# 2247404 and 2230178 - call regardless if from a mass request
857 if not FA_TRX_APPROVAL_PKG.faxcat
858 (X_book => px_asset_hdr_rec.book_type_code,
859 X_asset_id => px_asset_hdr_rec.asset_id,
860 X_trx_type => px_trans_rec.transaction_type_code,
861 X_trx_date => px_trans_rec.transaction_date_entered,
862 X_init_message_flag => 'NO'
863 , p_log_level_rec => p_log_level_rec) then
864 raise adj_err;
865 end if;
866
867 -- Populate th_id and who_info after calling faxcat
868 select fa_transaction_headers_s.nextval
869 into px_trans_rec.transaction_header_id
870 from dual;
871
872 px_trans_rec.who_info.creation_date := sysdate;
873 px_trans_rec.who_info.last_update_date := sysdate;
874
875 end if;
876 -- ER 14644811 : End
877
878 -- Bug 7154793
879 open Check_retirement_prorate_date(p_asset_id => px_asset_hdr_rec.asset_id,
880 p_book_type_code => px_asset_hdr_rec.book_type_code);
881 FETCH Check_retirement_prorate_date
882 INTO fol_month_trans;
883 close Check_retirement_prorate_date;
884
885 if fol_month_trans = 1 then
886 fa_srvr_msg.add_message(
887 calling_fn => l_calling_fn,
888 name => 'FA_ADJ_PENDING_RET'
889 , p_log_level_rec => p_log_level_rec);
890 raise adj_err;
891 end if;
892
893
894 -- check if this is the period of addition - use absolute mode for adjustments
895
896 if not FA_ASSET_VAL_PVT.validate_period_of_addition
897 (p_asset_id => px_asset_hdr_rec.asset_id,
898 p_book => px_asset_hdr_rec.book_type_code,
899 p_mode => 'ABSOLUTE',
900 px_period_of_addition => px_asset_hdr_rec.period_of_addition, p_log_level_rec => p_log_level_rec) then
901 raise adj_err;
902 end if;
903
904 -- load the period struct for current period info
905 if not FA_UTIL_PVT.get_period_rec
906 (p_book => px_asset_hdr_rec.book_type_code,
907 p_effective_date => NULL,
908 x_period_rec => l_period_rec
909 , p_log_level_rec => p_log_level_rec) then
910 raise adj_err;
911 end if;
912 -- bug 12830413 coorected the parameters passed
913 -- bug 12363687 called this validation to check amortization date
914 if not FA_ASSET_VAL_PVT.validate_amort_start_date
915 (p_transaction_type_code => px_trans_rec.transaction_type_code,
919 p_conversion_date => l_asset_fin_rec_adj.date_placed_in_service,
916 p_asset_id => px_asset_hdr_rec.asset_id,
917 p_book_type_code => px_asset_hdr_rec.book_type_code,
918 p_date_placed_in_service => l_asset_fin_rec_adj.date_placed_in_service,
920 p_period_rec => l_period_rec,
921 p_amortization_start_date => px_trans_rec.amortization_start_date,
922 p_db_rule_name => fa_cache_pkg.fazcdrd_record.rule_name,
923 p_rate_source_rule => fa_cache_pkg.fazccmt_record.rate_source_rule,
924 p_transaction_key => px_trans_rec.transaction_key,
925 x_amortization_start_date => l_amortization_start_date,
926 x_trxs_exist => l_trxs_exist,
927 p_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec) then
928 raise adj_err;
929 end if;
930
931 -- moving subtype/date logic into the mrc loop after getting fin_rec_old
932
933 -- verify asset is not fully retired
934 if fa_asset_val_pvt.validate_fully_retired
935 (p_asset_id => px_asset_hdr_rec.asset_id,
936 p_book => px_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec) then
937 fa_srvr_msg.add_message
938 (name => 'FA_REC_RETIRED',
939 calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
940 raise adj_err;
941 end if;
942
943
944 -- call the sob cache to get the table of sob_ids
945 if not FA_CACHE_PKG.fazcrsob
946 (x_book_type_code => px_asset_hdr_rec.book_type_code,
947 x_sob_tbl => l_sob_tbl, p_log_level_rec => p_log_level_rec) then
948 raise adj_err;
949 end if;
950
951 -- set up the local asset_header and sob_id
952 l_asset_hdr_rec := px_asset_hdr_rec;
953
954 -- loop through each book starting with the primary and
955 -- call the private API for each
956 FOR l_sob_index in 0..l_sob_tbl.count LOOP
957
958 if (l_sob_index = 0) then
959 l_reporting_flag := 'P';
960 else
961 l_reporting_flag := 'R';
962 l_asset_hdr_rec.set_of_books_id := l_sob_tbl(l_sob_index);
963 end if;
964
965 -- call the cache to set the sob_id used for rounding and other lower
966 -- level code for each book.
967 if NOT fa_cache_pkg.fazcbcs(X_book => px_asset_hdr_rec.book_type_code,
968 X_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
969 p_log_level_rec => p_log_level_rec) then
970 raise adj_err;
971 end if;
972
973 -- load the old structs
974 if not FA_UTIL_PVT.get_asset_fin_rec
975 (p_asset_hdr_rec => l_asset_hdr_rec,
976 px_asset_fin_rec => l_asset_fin_rec_old,
977 p_transaction_header_id => NULL,
978 p_mrc_sob_type_code => l_reporting_flag
979 , p_log_level_rec => p_log_level_rec) then raise adj_err;
980 end if;
981
982 if (l_sob_index = 0) then
983 l_old_primary_cost := l_asset_fin_rec_old.cost;
984
985 l_asset_fin_rec_adj := p_asset_fin_rec_adj;
986 l_asset_deprn_rec_adj := p_asset_deprn_rec_adj;
987 l_group_rcl_options_rec := p_group_reclass_options_rec;
988
989 if (l_asset_fin_rec_adj.deprn_method_code is not null) then
990 l_life_in_months := l_asset_fin_rec_adj.life_in_months;
991 else
992 l_life_in_months := l_asset_fin_rec_old.life_in_months;
993 end if;
994
995 --New validation added for 10328635
996
997 if not fa_cache_pkg.fazccmt (
998 X_method => nvl(l_asset_fin_rec_adj.deprn_method_code,l_asset_fin_rec_old.deprn_method_code),/*bug#15897249 */
999 X_life => l_life_in_months, p_log_level_rec => p_log_level_rec) then
1000 raise adj_err;
1001 end if;
1002
1003
1004 if (nvl(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag,'NO') = 'YES') and
1005 nvl(l_asset_fin_rec_adj.group_asset_id, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM then
1006 fa_srvr_msg.add_message
1007 (calling_fn => l_calling_fn,
1008 name => 'FA_GROUP_NOT_AVAILABLE', p_log_level_rec => p_log_level_rec);
1009 raise adj_err;
1010 end if;
1011
1012 if not FA_ASSET_VAL_PVT.check_overlapping_impairment(
1013 p_trans_rec => px_trans_rec,
1014 p_asset_hdr_rec => px_asset_hdr_rec ,
1015 p_log_level_rec => p_log_level_rec) then
1016
1017 fa_srvr_msg.add_message
1018 (name => 'FA_OVERLAPPING_IMP_NOT_ALLOWED',
1019 calling_fn => 'FA_ASSET_VAL_PVT.check_overlapping_impairment'
1020 ,p_log_level_rec => p_log_level_rec);
1021 raise adj_err;
1022 end if;
1023
1024 --End of new validation added for 10328635
1025
1026 -- call the custom hook
1027 if not (fa_custom_trx_pkg.override_values
1028 (p_asset_hdr_rec => px_asset_hdr_rec,
1029 px_trans_rec => px_trans_rec,
1030 p_asset_desc_rec => p_asset_desc_rec,
1031 p_asset_type_rec => p_asset_type_rec,
1032 p_asset_cat_rec => p_asset_cat_rec,
1033 p_asset_fin_rec_old => l_asset_fin_rec_old,
1037 px_inv_tbl => px_inv_tbl,
1034 px_asset_fin_rec_adj => l_asset_fin_rec_adj,
1035 px_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
1036 p_inv_trans_rec => px_inv_trans_rec,
1038 px_group_reclass_options_rec => l_group_rcl_options_rec,
1039 p_calling_fn => l_calling_fn)) then
1040 raise adj_err;
1041 end if;
1042
1043 -- do not allow manual cost changes on cip assets in corp
1044 -- cost adjustments must be done via invoices
1045 if (fa_cache_pkg.fazcbc_record.book_class = 'CORPORATE' and
1046 p_asset_type_rec.asset_type = 'CIP' and
1047 nvl(l_asset_fin_rec_adj.cost, 0) <> 0) then
1048 fa_srvr_msg.add_message
1049 (calling_fn => l_calling_fn,
1050 name => 'FA_BOOK_NO_CIP_COST_CHANGE', p_log_level_rec => p_log_level_rec);
1051 raise adj_err;
1052 end if;
1053
1054
1055 -- do not allow cost adjustment on group assets
1056 if (p_asset_type_rec.asset_type = 'GROUP' and
1057 nvl(l_asset_fin_rec_adj.cost, 0) <> 0) then
1058 fa_srvr_msg.add_message
1059 (calling_fn => l_calling_fn,
1060 name => 'FA_BOOK_NO_GROUP_COST_CHANGE', p_log_level_rec => p_log_level_rec);
1061 raise adj_err;
1062 end if;
1063
1064 -- Validate disabled_flag
1065 if (p_asset_type_rec.asset_type = 'GROUP') then
1066
1067 if not FA_ASSET_VAL_PVT.validate_disabled_flag
1068 (p_group_asset_id => px_asset_hdr_rec.asset_id,
1069 p_book_type_code => px_asset_hdr_rec.book_type_code,
1070 p_old_flag => l_asset_fin_rec_old.disabled_flag,
1071 p_new_flag => l_asset_fin_rec_adj.disabled_flag
1072 , p_log_level_rec => p_log_level_rec) then
1073 raise adj_err;
1074 end if;
1075 /* Bug#8351285- Validate salvage_type or deprn_limit_type change of group */
1076 if not FA_ASSET_VAL_PVT.validate_sal_deprn_sum
1077 ( p_asset_hdr_rec => px_asset_hdr_rec,
1078 p_asset_fin_rec_old => l_asset_fin_rec_old,
1079 p_asset_fin_rec_adj => p_asset_fin_rec_adj ) then
1080
1081 raise adj_err;
1082 end if;
1083
1084 end if;
1085
1089 --set trx key.
1086 l_transaction_date := greatest(l_period_rec.calendar_period_open_date,
1087 least(sysdate,l_period_rec.calendar_period_close_date));
1088 --HH group ed.
1090 if px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' then
1091 if ((nvl(l_asset_fin_rec_adj.disabled_flag,'Y')='N') and
1092 (nvl(l_asset_fin_rec_old.disabled_flag, 'N')='Y')) then
1093 px_trans_rec.transaction_key :='GE';
1094 elsif ((nvl(l_asset_fin_rec_adj.disabled_flag,'N')='Y') and
1095 (nvl(l_asset_fin_rec_old.disabled_flag, 'N')='N')) then
1096 px_trans_rec.transaction_key :='GD';
1097 end if;
1098 end if; --end HH.
1099
1100 -- BUG# 3046621
1101 -- for group members (or previous members) force
1102 -- the amort start date to be populated
1103
1104 if (px_trans_rec.transaction_subtype = 'EXPENSED') then
1105 if (l_asset_fin_rec_old.group_asset_id is not null or
1106 nvl(l_asset_fin_rec_adj.group_asset_id,
1107 FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) then
1108 px_trans_rec.transaction_subtype := 'AMORTIZED';
1109 end if;
1110 end if;
1111
1112 /* Japan Tax Phase3 Set the extended deprn flags */
1113 -- Possible values of extended_deprn_flag are 'Y', 'N', 'D', null and FND_API.G_MISS_CHAR
1114 -- l_asset_fin_rec_adj.extended_deprn_flag = null means no change
1115 -- = FND_API.G_MISS_CHAR means make it null
1116 if (nvl(l_asset_fin_rec_old.extended_deprn_flag,'N') = 'Y') then
1117 l_extended_flag := TRUE;
1118 if (nvl(l_asset_fin_rec_adj.extended_deprn_flag,'X') in ('N','D',FND_API.G_MISS_CHAR)) then
1119 l_reset_extend_flag := TRUE;
1120 l_extended_flag := FALSE; -- Bug 6737486 don't need validations when resetting
1121 end if;
1122 elsif ((nvl(l_asset_fin_rec_adj.extended_deprn_flag,'N') = 'Y') and
1123 (nvl(l_asset_fin_rec_old.extended_deprn_flag,'D') in ('D','N'))) then
1124 l_set_extend_flag := TRUE;
1125 end if;
1126
1127 if (px_trans_rec.transaction_subtype = 'EXPENSED') then
1128
1129 /* Japan Tax Phase3 don't call validate_exp_after_amort for the
1130 extended transaction */
1131 /*--Bug# 6974541 - Added l_reset_extend_flag
1132 Don't call validate_exp_after_amort while reseting extended depreciation
1133 i.e. while setting extended_deprn_flag from Yes to No */
1134 if (not (l_set_extend_flag or l_reset_extend_flag)) then
1135 if not FA_ASSET_VAL_PVT.validate_exp_after_amort
1136 (p_asset_id => px_asset_hdr_rec.asset_id,
1137 p_book => px_asset_hdr_rec.book_type_code,
1138 p_extended_flag => l_extended_flag
1139 , p_log_level_rec => p_log_level_rec) then raise adj_err;
1140 end if;
1141 -- Japan Tax phase3 Bug 6614543
1142 -- trx_date_entered for the extended transaction should be
1143 -- corrresponding to extended_depreciation_period
1144 elsif (l_asset_fin_rec_adj.extended_depreciation_period is not null) then
1145 BEGIN
1146 -- Assuming that extended_deprn_period will always be first
1147 -- period of some fiscal year
1148 select cp.start_date,
1149 cp.end_date
1150 into l_extend_calendar_pod,
1151 l_extend_calendar_pcd
1152 from fa_book_controls bc,
1153 fa_fiscal_year fy,
1154 fa_calendar_types ct,
1155 fa_calendar_periods cp
1156 where bc.book_type_code = px_asset_hdr_rec.book_type_code and
1157 bc.deprn_calendar = ct.calendar_type and
1158 cp.calendar_type = ct.calendar_type and
1159 bc.fiscal_year_name = ct.fiscal_year_name and
1160 fy.fiscal_year_name = ct.fiscal_year_name and
1161 cp.period_num = 1 and
1162 fy.fiscal_year = round (
1163 (l_asset_fin_rec_adj.extended_depreciation_period -cp.period_num)/ct.number_per_fiscal_year) --bug 7719717
1164 and cp.start_date = fy.start_date;
1165
1166 EXCEPTION
1167 WHEN OTHERS THEN
1168 if (p_log_level_rec.statement_level) then
1169 fa_debug_pkg.add(l_calling_fn, 'Japan Tax:0 Exception in ', 'trx_date_entered', p_log_level_rec => p_log_level_rec);
1170 end if;
1171 raise adj_err;
1172 END;
1173
1174 l_transaction_date := greatest(l_extend_calendar_pod,
1175 least(sysdate,l_extend_calendar_pcd));
1176 if (p_log_level_rec.statement_level) then
1177 fa_debug_pkg.add(l_calling_fn, 'Japan Tax:0 l_transaction_date', l_transaction_date, p_log_level_rec => p_log_level_rec);
1178 end if;
1179 end if;
1180
1181 -- trx_date for all expensed transactions will be last date of open period
1182 px_trans_rec.transaction_date_entered := l_transaction_date;
1183 px_trans_rec.amortization_start_date := NULL;
1184
1185 else
1186
1187 -- might want to try to determine user intent here
1188 -- if they populate amort_start_date instead of trx_date
1189 -- BUG# 8342853 - reording to insure Energy supercedes
1193 --Bug# 7715678 to default amortization start date for energy if not provided.
1190 -- any provided value
1191 -- Bug# 7613544 to default amortization start date for energy if not provided.
1192
1194 if( fa_cache_pkg.fazccmt_record.rate_source_rule = 'PRODUCTION'
1195 AND fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE') then
1196 open c_get_context_date(px_asset_hdr_rec.book_type_code);
1197 fetch c_get_context_date into l_trx_date ;
1198 close c_get_context_date;
1199 px_trans_rec.amortization_start_date := px_trans_rec.transaction_date_entered;
1200 elsif (px_trans_rec.amortization_start_date is not null) then
1201 px_trans_rec.transaction_date_entered := px_trans_rec.amortization_start_date;
1202 end if;
1203
1204 px_trans_rec.amortization_start_date := px_trans_rec.transaction_date_entered;
1205
1206 --Bug# 7715678 end
1207
1208 if (px_trans_rec.amortization_start_date is null) then
1209 if (p_asset_type_rec.asset_type = 'GROUP') and
1210 (px_asset_hdr_rec.period_of_addition = 'Y') then
1211 px_trans_rec.transaction_date_entered :=
1212 nvl(l_asset_fin_rec_adj.date_placed_in_service,
1213 l_asset_fin_rec_old.date_placed_in_service);
1214 else
1215 px_trans_rec.transaction_date_entered := l_transaction_date;
1216 end if;
1217 end if;
1218
1219 px_trans_rec.amortization_start_date := px_trans_rec.transaction_date_entered;
1220
1221 -- adding this for group, cip-in-tax, and autocopy...
1222 -- basically if future date is passed, automatically set to
1223 -- the current period (this accomidates the cip-in-tax and autocopy loops)
1224
1225 if (px_trans_rec.transaction_date_entered > l_period_rec.calendar_period_close_date) then
1226 px_trans_rec.amortization_start_date := l_transaction_date;
1227 px_trans_rec.transaction_date_entered :=
1228 px_trans_rec.amortization_start_date;
1229 end if;
1230
1231 end if;
1232 /*bug#15897249 starts*/
1233 if( fa_cache_pkg.fazccmt_record.deprn_basis_rule = 'NBV'
1234 AND fa_cache_pkg.fazcdrd_record.rule_name = 'YEAR END BALANCE WITH POSITIVE REDUCTION AMOUNT'
1235 AND p_asset_type_rec.asset_type = 'GROUP'
1236 AND nvl(l_asset_fin_rec_adj.tracking_method,l_asset_fin_rec_old.tracking_method) = 'CALCULATE'
1237 AND nvl(l_asset_fin_rec_adj.member_rollup_flag,l_asset_fin_rec_old.member_rollup_flag) = 'Y'
1238 AND nvl(l_asset_fin_rec_adj.exclude_proceeds_from_basis,l_asset_fin_rec_old.exclude_proceeds_from_basis) is null
1239 ) then
1240 l_asset_fin_rec_adj.exclude_proceeds_from_basis := 'Y';
1241 end if;
1242 /*bug#15897249 ends */
1243
1244 -- BUG# 3549470
1245 -- remove time stamps from the dates
1246
1247 px_trans_rec.transaction_date_entered :=
1248 to_date(to_char(px_trans_rec.transaction_date_entered, 'DD/MM/YYYY'),'DD/MM/YYYY');
1249
1250 px_trans_rec.amortization_start_date :=
1251 to_date(to_char(px_trans_rec.amortization_start_date, 'DD/MM/YYYY'),'DD/MM/YYYY');
1252
1253
1254
1255 -- call the invoice api which will return a populated fin_rec_adj
1256 -- for the delta cost, etc. invoice engine will alter the gl sob
1257 -- and currency context from the above setting as it processes primary
1258 -- and reporting, but will reset them at temrination back to primary.
1259
1260 if (fa_cache_pkg.fazcbc_record.book_class = 'CORPORATE') then
1261
1262 if (px_inv_trans_rec.transaction_type is not null) then
1263
1264 l_asset_fin_rec_adj_init := p_asset_fin_rec_adj;
1265 l_asset_deprn_rec_adj_init := p_asset_deprn_rec_adj;
1266
1267 if not FA_INVOICE_PVT.invoice_engine
1268 (px_trans_rec => px_trans_rec,
1269 px_asset_hdr_rec => px_asset_hdr_rec,
1270 p_asset_desc_rec => p_asset_desc_rec,
1271 p_asset_type_rec => p_asset_type_rec,
1272 p_asset_cat_rec => p_asset_cat_rec,
1273 p_asset_fin_rec_adj => l_asset_fin_rec_adj_init,
1274 x_asset_fin_rec_new => l_asset_fin_rec_adj,
1275 x_asset_fin_mrc_tbl_new => l_asset_fin_mrc_tbl_adj,
1276 px_inv_trans_rec => px_inv_trans_rec,
1277 px_inv_tbl => px_inv_tbl,
1278 x_asset_deprn_rec_new => l_asset_deprn_rec_adj,
1279 x_asset_deprn_mrc_tbl_new => l_asset_deprn_mrc_tbl_adj,
1280 p_calling_fn => l_calling_fn,
1281 p_log_level_rec => p_log_level_rec) then
1282 raise adj_err;
1283 end if;
1284
1285 G_cip_cost := l_asset_fin_rec_adj.cip_cost;
1286 G_cost := l_asset_fin_rec_adj.cost;
1287
1288 else
1289
1290 G_cip_cost := 0;
1291 G_cost := 0;
1292
1293 end if; -- invoice based
1294
1295 else
1296
1297 -- this is not an invoice scenario and we need to set up the deprn
1298 -- amounts directly from the struct passed in
1299
1300 -- also insure delta_cip cost is null as this can only be changed
1301 -- via the specific invoice transactions
1302
1306 end if; -- corp
1303 l_asset_fin_rec_adj := l_asset_fin_rec_adj;
1304 l_asset_deprn_rec_adj := l_asset_deprn_rec_adj;
1305
1307
1308 if (p_asset_type_rec.asset_type <> 'CIP') then
1309 l_asset_fin_rec_adj.cip_cost := 0;
1310 elsif (nvl(fa_cache_pkg.fazcbc_record.allow_cip_dep_group_flag, 'N') = 'Y') then
1311 l_asset_fin_rec_adj.cip_cost := g_cip_cost;
1312 else
1313 l_asset_fin_rec_adj.cip_cost := l_asset_fin_rec_adj.cost;
1314 end if;
1315
1316 -- store the calculated values for future use in the mrc loop
1317 l_asset_fin_rec_adj_init := l_asset_fin_rec_adj;
1318 l_asset_deprn_rec_adj_init := l_asset_deprn_rec_adj;
1319 l_group_rcl_options_rec_init := l_group_rcl_options_rec;
1320
1321 /* Japan Tax phase3 -- Do not allow cost adjustment
1322 and method change for assets in extended depreciation */
1323 if (l_extended_flag) then
1324 if not FA_ASSET_VAL_PVT.validate_extended_asset
1325 (p_asset_hdr_rec => px_asset_hdr_rec,
1326 p_asset_fin_rec_old => l_asset_fin_rec_old,
1327 p_asset_fin_rec_adj => l_asset_fin_rec_adj
1328 , p_log_level_rec => p_log_level_rec) then raise adj_err;
1329 end if;
1330 end if;
1331
1332 -- Fix for Bug #6371789. Validate if Japan 250 DB asset.
1333 -- Passed deprn_method_code and life_in_months from l_asset_fin_rec_old
1334 -- to avoid "no data found" error
1335 if not FA_ASSET_VAL_PVT.validate_jp250db
1336 (p_transaction_type_code => 'ADJUSTMENT',
1337 p_book_type_code => px_asset_hdr_rec.book_type_code,
1338 p_asset_id => px_asset_hdr_rec.asset_id,
1339 p_method_code =>
1340 l_asset_fin_rec_old.deprn_method_code,
1341 p_life_in_months => l_asset_fin_rec_old.life_in_months,
1342 p_asset_type => p_asset_type_rec.asset_type,
1343 p_bonus_rule => l_asset_fin_rec_adj.bonus_rule,
1344 p_transaction_key => px_trans_rec.transaction_key,
1345 p_cash_generating_unit_id =>
1346 l_asset_fin_rec_adj.cash_generating_unit_id,
1347 p_deprn_override_flag => px_trans_rec.deprn_override_flag,
1348 p_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec) then
1349
1350 raise adj_err;
1351 end if;
1352
1353 end if;
1354
1355 --
1356 --Bug: 4698440 - Check certain adjs to extended life assets.
1357 --This presumably could have been added to validate_adjustment, but that skips
1358 --over invoice-related changes. So, putting here for now. It can be moved in future
1359 --if necessary.
1360 --
1361 IF ((l_asset_fin_rec_old.period_counter_life_complete is not null) AND
1362 (l_asset_fin_rec_old.period_Counter_fully_reserved is null)) THEN
1363 IF (nvl(l_asset_fin_rec_old.cost, 0)
1364 <> nvl(l_asset_fin_rec_adj.cost, 0) OR
1365 nvl(l_asset_fin_rec_old.salvage_value, 0)
1366 <> nvl(l_asset_fin_rec_adj.salvage_value,0) OR
1367 nvl(l_asset_fin_rec_old.ceiling_name,'NONE')
1368 <> nvl(l_asset_fin_rec_adj.ceiling_name,'NONE') OR
1369 nvl(l_asset_fin_rec_old.reval_ceiling,0)
1370 <> nvl(l_asset_fin_rec_adj.reval_ceiling,0) OR
1371 nvl(l_asset_fin_rec_old.deprn_method_code,'NONE')
1372 <> nvl(l_asset_fin_rec_adj.deprn_method_code,'NONE') OR
1373 nvl(l_asset_fin_rec_old.date_placed_in_service,'NONE')
1374 <> nvl(l_asset_fin_rec_adj.date_placed_in_service,'NONE') OR
1375 nvl(l_asset_fin_rec_old.prorate_convention_code, 'NONE')
1376 <> nvl(l_asset_fin_rec_adj.prorate_convention_code, 'NONE') OR
1377 nvl(l_asset_fin_rec_old.life_in_months,0)
1378 <> nvl(l_asset_fin_rec_adj.life_in_months ,0) OR
1379 nvl(l_asset_fin_rec_old.depreciate_flag,'NONE') <>
1380 nvl(l_asset_fin_rec_adj.depreciate_flag,'NONE') OR
1381 nvl(l_asset_fin_rec_old.bonus_rule,'NONE') <>
1382 nvl(l_asset_fin_rec_adj.bonus_rule,'NONE') OR
1383 nvl(l_asset_fin_rec_old.production_capacity,0) <>
1384 nvl(l_asset_fin_rec_adj.production_capacity,0)) THEN
1385
1386 fa_srvr_msg.add_message(calling_fn => 'fa_adjustment_pub.do_all_books',
1387 name =>'FA_NO_TRX_WHEN_LIFE_COMPLETE', p_log_level_rec => p_log_level_rec);
1388 raise adj_err;
1389 END IF;
1390 END IF;
1391
1392 if not FA_UTIL_PVT.get_asset_deprn_rec
1393 (p_asset_hdr_rec => l_asset_hdr_rec ,
1394 px_asset_deprn_rec => l_asset_deprn_rec_old,
1395 p_period_counter => NULL,
1396 p_mrc_sob_type_code => l_reporting_flag
1397 , p_log_level_rec => p_log_level_rec) then raise adj_err;
1398 end if;
1399
1400 -- bug 6619897 store old primary reserve for future use
1401 if (l_sob_index = 0) then
1402 l_old_primary_deprn_reserve := l_asset_deprn_rec_old.deprn_reserve;
1403 l_old_primary_ytd_deprn := l_asset_deprn_rec_old.ytd_deprn; -- Bug 13533180
1404 end if;
1405 /*bug#16426081 starts */
1406 if (p_asset_type_rec.asset_type = 'GROUP' and
1407 px_asset_hdr_rec.period_of_addition = 'Y' and
1411 )
1408 l_asset_fin_rec_adj.eofy_reserve is null and
1409 (nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) <> 0 or
1410 nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) <> 0
1412 ) then
1413 l_asset_fin_rec_adj.eofy_reserve := nvl(p_asset_deprn_rec_adj.deprn_reserve, 0)-nvl(p_asset_deprn_rec_adj.ytd_deprn, 0);
1414 end if;
1415 /*bug#16426081 ends */
1416
1417 -- Bug2887954: Following delete stmts are relocated from
1418 -- above (just before get_asset_fin_rec)
1419 --
1420 -- remove any previously calculated catchup expense for
1421 -- group assets when initial reserve adjustment is being
1422 -- performed
1423
1424 -- SLA uptake
1425 -- this needs rework - see DLD section on adj api
1426 -- we can't delete lines which are accounted for by extract
1427 -- need to either auto reverse them or restict
1428 --
1429 -- ***REVISIT***
1430
1431
1432 if (p_asset_type_rec.asset_type = 'GROUP' and
1433 px_asset_hdr_rec.period_of_addition = 'Y' and
1434 nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) <> 0) then
1435
1436 if (G_release = 11) then
1437 if (l_reporting_flag = 'R') then
1438 delete from fa_mc_adjustments
1439 where asset_id = px_asset_hdr_rec.asset_id
1440 and book_type_code = px_asset_hdr_rec.book_type_code
1441 and source_type_code = 'DEPRECIATION'
1442 and adjustment_type = 'EXPENSE'
1443 and set_of_books_id = l_asset_hdr_rec.set_of_books_id;
1444 else
1445 delete from fa_adjustments
1446 where asset_id = px_asset_hdr_rec.asset_id
1447 and book_type_code = px_asset_hdr_rec.book_type_code
1448 and source_type_code = 'DEPRECIATION'
1449 and adjustment_type = 'EXPENSE';
1450 end if;
1451 else
1452
1453 -- Added the below code to reverse the DEPRN EXPENSE
1454 -- when reserve is manually adjusted in period of addition
1455 -- bug 4439919
1456
1457 adj_row.account := fa_cache_pkg.fazccb_record.DEPRN_EXPENSE_ACCT;
1458 adj_row.account_type := 'DEPRN_EXPENSE_ACCT';
1459 adj_row.gen_ccid_flag := TRUE;
1460 adj_row.debit_credit_flag := 'CR';
1461 adj_row.selection_mode := fa_std_types.FA_AJ_ACTIVE;
1462 adj_row.last_update_date := sysdate;
1463 adj_row.period_counter_created := l_period_rec.period_counter;
1464 adj_row.asset_id := px_asset_hdr_rec.asset_id;
1465 adj_row.period_counter_adjusted := l_period_rec.period_counter;
1466 adj_row.book_type_code := px_asset_hdr_rec.book_type_code;
1467 adj_row.source_type_code := 'DEPRECIATION';
1468 adj_row.transaction_header_id := px_trans_rec.transaction_header_id;
1469 adj_row.adjustment_type := 'EXPENSE';
1470
1471 if (l_reporting_flag = 'R') then
1472 adj_row.mrc_sob_type_code := 0;
1473 begin
1474 select sum(decode(debit_credit_flag,'DR',adjustment_amount,-1*adjustment_amount))
1475 into l_expense_amount
1476 from fa_mc_adjustments
1477 where asset_id = px_asset_hdr_rec.asset_id
1478 and book_type_code = px_asset_hdr_rec.book_type_code
1479 and source_type_code = 'DEPRECIATION'
1480 and adjustment_type = 'EXPENSE'
1481 and set_of_books_id = l_asset_hdr_rec.set_of_books_id;
1482 exception
1483 when no_data_found then
1484 null;
1485 end;
1486 else
1487 adj_row.mrc_sob_type_code := 1;
1488 begin
1489 select sum(decode(debit_credit_flag,'DR',adjustment_amount,-1*adjustment_amount))
1490 into l_expense_amount
1491 from fa_adjustments
1492 where asset_id = px_asset_hdr_rec.asset_id
1493 and book_type_code = px_asset_hdr_rec.book_type_code
1494 and source_type_code = 'DEPRECIATION'
1495 and adjustment_type = 'EXPENSE';
1496 exception
1497 when no_data_found then
1498 null;
1499 end;
1500 end if; -- mrc
1501 end if; -- release
1502 end if; -- group
1503
1504 -- load the adj structs
1505 if (l_sob_index = 0) then
1506
1507 -- validate changes are being made and are valid
1508 l_validate_flag := fa_adjustment_pvt.validate_adjustment
1509 (p_inv_trans_rec => px_inv_trans_rec,
1510 p_trans_rec => px_trans_rec,
1511 p_asset_type_rec => p_asset_type_rec,
1512 p_asset_fin_rec_old => l_asset_fin_rec_old,
1513 p_asset_fin_rec_adj => l_asset_fin_rec_adj,
1514 p_asset_deprn_rec_old => l_asset_deprn_rec_old,
1515 p_asset_hdr_rec => px_asset_hdr_rec,
1516 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
1517 p_log_level_rec => p_log_level_rec
1518 );
1519
1520 -- Removing not before l_validate_flag inif condtion for bug 9168436
1521 if (nvl(l_asset_fin_rec_old.contract_id, FND_API.G_MISS_NUM) <>
1522 nvl(p_asset_fin_rec_adj.contract_id,
1523 nvl(l_asset_fin_rec_old.contract_id, FND_API.G_MISS_NUM)) ) and
1524 l_validate_flag then
1525
1526 l_contract_change_flag := TRUE;
1527 l_asset_fin_rec_adj.contract_change_flag := TRUE;
1528
1529 end if;
1533 end if;
1530
1531 if not l_contract_change_flag and not l_validate_flag then
1532 raise adj_err;
1534
1535 -- populate the trx_reference_id when group change occurs
1536 -- if (nvl(l_asset_fin_rec_old.group_asset_id, -99) <>
1537 -- nvl(l_asset_fin_rec_adj.group_asset_id, -99)) then
1538 if (l_asset_fin_rec_old.group_asset_id is null and
1539 nvl(l_asset_fin_rec_adj.group_asset_id, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) or
1540 (l_asset_fin_rec_old.group_asset_id <> l_asset_fin_rec_adj.group_asset_id) then
1541 select fa_trx_references_s.nextval
1542 into px_trans_rec.trx_reference_id
1543 from dual;
1544 end if;
1545
1546 -- BUG# 2877651
1547 -- if this is or was a amember asset, force amortized subtype
1548 if (px_trans_rec.transaction_subtype = 'EXPENSED' and
1549 (l_asset_fin_rec_old.group_asset_id is not null or
1550 nvl(l_asset_fin_rec_adj.group_asset_id, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)) then
1551 px_trans_rec.transaction_subtype := 'AMORTIZED';
1552 px_trans_rec.amortization_start_date := to_date(to_char(l_transaction_date,'DD/MM/YYYY'),'DD/MM/YYYY');
1553 px_trans_rec.transaction_date_entered := px_trans_rec.amortization_start_date;
1554 end if;
1555
1556 else
1557
1558 -- get the latest average rate (used conditionally in some cases below)
1559 if not fa_mc_util_pvt.get_latest_rate
1560 (p_asset_id => l_asset_hdr_rec.asset_id,
1561 p_book_type_code => l_asset_hdr_rec.book_type_code,
1562 p_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1563 px_rate => l_exchange_rate,
1564 px_avg_exchange_rate => l_avg_rate
1565 , p_log_level_rec => p_log_level_rec) then
1566 raise adj_err;
1567 end if;
1568
1569 -- process the reporting books by getting the rate and applying to the corp amount
1570 -- if the transaction was not originating from an invoice transaction. In such a
1571 -- a case, we must get the exchange rate and convert the amounts. If an invoice
1572 -- was involved, the amounts were already calculated and populated in the mrc
1573 -- pl/sql tables and we just need to copy them into the local variables.
1574
1575 if (px_inv_trans_rec.transaction_type is null or
1576 fa_cache_pkg.fazcbc_record.book_class = 'TAX') then
1577
1578 -- Get the associated rate for the adjustment when the invoice table is
1579 -- not populated. If this is a transaction being copied form corp to tax
1580 -- (masscp, cip-in-tax, autocopy), then we will always get the rate for
1581 -- the corp trx and use that - unless the corp is not mrc enabled
1582
1583 if ((px_trans_rec.source_transaction_header_id is not null) and
1584 (fa_cache_pkg.fazcbc_record.book_class = 'TAX')) then
1585
1586 --Take back up of avg_rate
1587 l_avg_rate_bk := l_avg_rate;
1588 -- get the exchange rate from the corporate transaction
1589 if not FA_MC_UTIL_PVT.get_existing_rate
1590 (p_set_of_books_id => l_sob_tbl(l_sob_index),
1591 p_transaction_header_id => px_trans_rec.source_transaction_header_id,
1592 px_rate => l_rate,
1593 px_avg_exchange_rate => l_avg_rate,
1594 p_log_level_rec => p_log_level_rec
1595 ) then
1596
1597 -- no rate found for corp - reporting option may not exist on corp
1598 -- get the current average rate for the adjustment
1599 l_exchange_date := px_trans_rec.transaction_date_entered;
1600
1601 if not FA_MC_UTIL_PVT.get_trx_rate
1602 (p_prim_set_of_books_id => fa_cache_pkg.fazcbc_record.set_of_books_id,
1603 p_reporting_set_of_books_id => l_sob_tbl(l_sob_index),
1604 px_exchange_date => l_exchange_date,
1605 p_book_type_code => px_asset_hdr_rec.book_type_code,
1606 px_rate => l_rate,
1607 p_log_level_rec => p_log_level_rec
1608 )then
1609 raise adj_err;
1610 end if;
1611 l_avg_rate := l_avg_rate_bk;
1612 end if;
1613
1614 elsif (px_asset_hdr_rec.period_of_addition <> 'Y') then
1615
1616 -- get the current average rate for the addition
1617 l_exchange_date := px_trans_rec.transaction_date_entered;
1618
1619 if not FA_MC_UTIL_PVT.get_trx_rate
1620 (p_prim_set_of_books_id => fa_cache_pkg.fazcbc_record.set_of_books_id,
1621 p_reporting_set_of_books_id => l_sob_tbl(l_sob_index),
1622 px_exchange_date => l_exchange_date,
1623 p_book_type_code => px_asset_hdr_rec.book_type_code,
1624 px_rate => l_rate,
1625 p_log_level_rec => p_log_level_rec
1626
1627 )then
1628 raise adj_err;
1629 end if;
1630 else -- period of addition, set to existing rate
1631 l_rate := l_exchange_rate;
1632
1633 end if; -- copied trx from corp
1634
1635 l_exchange_rate := l_rate;
1636
1637 if (p_log_level_rec.statement_level) then
1641
1638 fa_debug_pkg.add('do_all_books', 'l_exchange_rate', l_exchange_rate, p_log_level_rec => p_log_level_rec);
1639 fa_debug_pkg.add('do_all_books', 'l_asset_fin_rec_adj_init.cost', l_asset_fin_rec_adj_init.cost, p_log_level_rec => p_log_level_rec);
1640 end if;
1642 -- Set the initial mrc struct equal to the primary structs
1643 --
1644 -- Note: it may be better to actually modify our API's to return
1645 -- the new structs so that we can just due a direct copy and avoid
1646 -- most of the calculation logic for performance reasons.
1647
1648 l_asset_fin_rec_adj := l_asset_fin_rec_adj_init;
1649 l_asset_deprn_rec_adj := l_asset_deprn_rec_adj_init;
1650 l_group_rcl_options_rec := l_group_rcl_options_rec_init;
1651
1652 -- set the SOB info
1653 l_asset_fin_rec_adj.set_of_books_id := l_sob_tbl(l_sob_index);
1654 l_asset_deprn_rec_adj.set_of_books_id := l_sob_tbl(l_sob_index);
1655
1656 -- convert the non-derived financial amounts using the retrieved rate
1657 -- all other amounts will be handled by the calculation engines (rec cost, etc)
1658
1659 -- BUG# 2966849
1660 -- when a manual cost adjustment to 0 is done, ignore
1661 -- daily rates and enforce reporting cost to 0 as well
1662 if (l_asset_fin_rec_adj_init.cost = -l_old_primary_cost and
1663 l_old_primary_cost <> 0) then
1664 l_asset_fin_rec_adj.cost := -l_asset_fin_rec_old.cost;
1665 l_asset_fin_rec_adj.unrevalued_cost := -l_asset_fin_rec_old.unrevalued_cost;
1666 l_asset_fin_rec_adj.salvage_value := -l_asset_fin_rec_old.salvage_value;
1667 l_asset_fin_rec_adj.original_cost := l_asset_fin_rec_adj_init.original_cost * l_rate;
1668 l_asset_fin_rec_adj.cip_cost := l_asset_fin_rec_adj_init.cip_cost * l_rate;
1669 else
1670 l_asset_fin_rec_adj.cost := l_asset_fin_rec_adj_init.cost * l_rate;
1671 l_asset_fin_rec_adj.unrevalued_cost := l_asset_fin_rec_adj_init.unrevalued_cost * l_rate;
1672 l_asset_fin_rec_adj.salvage_value := l_asset_fin_rec_adj_init.salvage_value * l_rate;
1673 l_asset_fin_rec_adj.original_cost := l_asset_fin_rec_adj_init.original_cost * l_rate;
1674 l_asset_fin_rec_adj.cip_cost := l_asset_fin_rec_adj_init.cip_cost * l_rate;
1675 l_asset_fin_rec_adj.adjusted_cost := l_asset_fin_rec_adj_init.adjusted_cost * l_rate; --bug#16426081
1676 end if;
1677
1678 l_group_rcl_options_rec.reserve_amount := l_group_rcl_options_rec_init.reserve_amount * l_rate;
1679 l_group_rcl_options_rec.source_exp_amount := l_group_rcl_options_rec_init.source_exp_amount * l_rate;
1680 l_group_rcl_options_rec.destination_exp_amount := l_group_rcl_options_rec_init.destination_exp_amount * l_rate;
1681 l_group_rcl_options_rec.source_eofy_reserve := l_group_rcl_options_rec_init.source_eofy_reserve * l_rate;
1682 l_group_rcl_options_rec.destination_eofy_reserve := l_group_rcl_options_rec_init.destination_eofy_reserve * l_rate;
1683
1684 -- round the converted amounts using faxrnd
1685 -- note that precision here doesn't matter since the calculatation engine
1686 -- will take the finally amount and round with faxrnd (book and sob specific)
1687
1688 -- round the amounts
1689
1690 -- Bug 6619897 moving the rounding to the end
1691
1692 else -- invoice based trx, copy from the already populated mrc parameters
1693
1694 if (p_log_level_rec.statement_level) then
1695 fa_debug_pkg.add('do_all_books', 'in', 'mrc logic for invoice', p_log_level_rec => p_log_level_rec);
1696 end if;
1697
1698 -- find the indexes for the SOB_ID being processed in this loop
1699
1700 for i in 1..l_asset_fin_mrc_tbl_adj.count loop
1701 if (l_asset_fin_mrc_tbl_adj(i).set_of_books_id = l_sob_tbl(l_sob_index)) then
1702 l_index_fin := i;
1703 exit;
1704 end if;
1705 end loop;
1706
1707 if (l_asset_deprn_mrc_tbl_adj.exists(1)) then
1708
1709 if (p_log_level_rec.statement_level) then
1710 fa_debug_pkg.add('do_all_books', 'finding', 'mrc deprn rec', p_log_level_rec => p_log_level_rec);
1711 end if;
1712
1713 for i in 1..l_asset_deprn_mrc_tbl_adj.count loop
1714 if (l_asset_deprn_mrc_tbl_adj(i).set_of_books_id = l_sob_tbl(l_sob_index)) then
1715 l_index_dep := i;
1716 exit;
1717 end if;
1718 end loop;
1719
1720 end if;
1721
1722 if ((l_index_fin is null) or
1723 (l_asset_deprn_mrc_tbl_adj.exists(1) and l_index_dep is null)) then
1724 raise adj_err;
1725 end if;
1726
1727 l_asset_fin_rec_adj := l_asset_fin_mrc_tbl_adj(l_index_fin);
1728 if (l_asset_deprn_mrc_tbl_adj.exists(1)) then
1729 l_asset_deprn_rec_adj := l_asset_deprn_mrc_tbl_adj(l_index_dep);
1730 end if;
1731
1732 if (p_log_level_rec.statement_level) then
1733 fa_debug_pkg.add('do_all_books', 'l_asset_deprn_rec_adj.deprn_reserve for mrc', l_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec => p_log_level_rec);
1734 end if;
1735
1736 if (l_asset_fin_rec_adj_init.cost <> 0) then
1737 l_exchange_rate := l_asset_fin_rec_adj.cost /
1738 l_asset_fin_rec_adj_init.cost;
1739 else
1740
1744 -- px_inv_rate_tbl(i).exchange_rate;
1741 -- R12: replacing this with imbedded array
1742 -- for i in 1..px_inv_rate_tbl.count loop
1743 -- l_inv_rate_sum := l_inv_rate_sum +
1745 -- end loop;
1746
1747 l_rate_count := 0;
1748
1749 for i in 1..px_inv_tbl.count loop
1750 for l_inv_rate_index in 1..px_inv_tbl(i).inv_rate_tbl.count
1751 loop
1752 l_rate_count := l_rate_count + 1;
1753
1754 l_inv_rate_sum := l_inv_rate_sum +
1755 px_inv_tbl(i).inv_rate_tbl(l_inv_rate_index).exchange_rate;
1756 end loop;
1757 end loop;
1758
1759 -- Fix for Bug #2551273. To avoid divide by zero error
1760 -- only do this when the inv_rate_tbl has been populated,
1761 -- otherwise, it will default to the previous exchange_rate
1762 if (l_rate_count > 0) then
1763 l_exchange_rate := l_inv_rate_sum / l_rate_count;
1764 end if;
1765
1766 end if;
1767
1768 end if; --manual or invoice transaction
1769
1770 -- in period of addition, we need to insure the proportion
1771 -- of reserve to cost is equal between primary and reporting
1772 if (l_asset_fin_rec_adj_init.cost <> 0) then
1773 l_deprn_ratio := l_asset_fin_rec_adj.cost /
1774 l_asset_fin_rec_adj_init.cost;
1775 else
1776 l_deprn_ratio := l_exchange_rate;
1777 end if;
1778
1779 if (p_log_level_rec.statement_level) then
1780 fa_debug_pkg.add('do_all_books', 'l_deprn_ratio', l_deprn_ratio, p_log_level_rec => p_log_level_rec);
1781 fa_debug_pkg.add('do_all_books', 'l_asset_deprn_rec_adj_init.deprn_reserve', l_asset_deprn_rec_adj_init.deprn_reserve, p_log_level_rec => p_log_level_rec);
1782 end if;
1783
1784 l_asset_deprn_rec_adj.deprn_reserve := l_asset_deprn_rec_adj_init.deprn_reserve * l_deprn_ratio;
1785 l_asset_deprn_rec_adj.ytd_deprn := l_asset_deprn_rec_adj_init.ytd_deprn * l_deprn_ratio;
1786 l_asset_deprn_rec_adj.bonus_deprn_reserve := l_asset_deprn_rec_adj_init.bonus_deprn_reserve * l_deprn_ratio;
1787 l_asset_deprn_rec_adj.bonus_ytd_deprn := l_asset_deprn_rec_adj_init.bonus_ytd_deprn * l_deprn_ratio;
1788 l_asset_deprn_rec_adj.reval_deprn_reserve := l_asset_deprn_rec_adj_init.reval_deprn_reserve * l_deprn_ratio;
1789
1790 l_group_rcl_options_rec.reserve_amount := l_group_rcl_options_rec_init.reserve_amount * l_deprn_ratio;
1791 l_group_rcl_options_rec.source_exp_amount := l_group_rcl_options_rec_init.source_exp_amount * l_deprn_ratio;
1792 l_group_rcl_options_rec.destination_exp_amount := l_group_rcl_options_rec_init.destination_exp_amount * l_deprn_ratio;
1793 l_group_rcl_options_rec.source_eofy_reserve := l_group_rcl_options_rec_init.source_eofy_reserve * l_deprn_ratio;
1794 l_group_rcl_options_rec.destination_eofy_reserve := l_group_rcl_options_rec_init.destination_eofy_reserve * l_deprn_ratio;
1795
1796 -- Bug 13533180 Start
1797
1798 -- we need to make adj rec = -1 * old rec for all reporting books
1799 -- in case user has made YTD/LTD=0 in Period of Addition in Primary book
1800
1801 if (l_asset_deprn_rec_adj_init.ytd_deprn = -l_old_primary_ytd_deprn and
1802 l_old_primary_ytd_deprn <> 0 and px_asset_hdr_rec.period_of_addition = 'Y') then
1803 l_asset_deprn_rec_adj.ytd_deprn := -l_asset_deprn_rec_old.ytd_deprn;
1804
1805 end if;
1809
1806 if (l_asset_deprn_rec_adj_init.deprn_reserve = -l_old_primary_deprn_reserve and
1807 l_old_primary_deprn_reserve <> 0 and px_asset_hdr_rec.period_of_addition = 'Y') then
1808 l_asset_deprn_rec_adj.deprn_reserve := -l_asset_deprn_rec_old.deprn_reserve;
1810 end if;
1811 -- Bug 13533180 End
1812
1813 -- round the amounts
1814 --begin bug 6619897
1815 if not fa_utils_pkg.faxrnd
1816 (x_amount => l_asset_fin_rec_adj.cost,
1817 x_book => px_asset_hdr_rec.book_type_code,
1818 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1819 p_log_level_rec => p_log_level_rec) then raise adj_err;
1820 end if;
1821
1822 if not fa_utils_pkg.faxrnd
1823 (x_amount => l_asset_fin_rec_adj.unrevalued_cost,
1827 end if;
1824 x_book => px_asset_hdr_rec.book_type_code,
1825 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1826 p_log_level_rec => p_log_level_rec) then raise adj_err;
1828
1829 if not fa_utils_pkg.faxrnd
1830 (x_amount => l_asset_fin_rec_adj.salvage_value,
1831 x_book => px_asset_hdr_rec.book_type_code,
1832 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1833 p_log_level_rec => p_log_level_rec) then raise adj_err;
1834 end if;
1835
1836 if not fa_utils_pkg.faxrnd
1837 (x_amount => l_asset_fin_rec_adj.original_cost,
1838 x_book => px_asset_hdr_rec.book_type_code,
1839 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1840 p_log_level_rec => p_log_level_rec) then raise adj_err;
1841 end if;
1842
1843 if not fa_utils_pkg.faxrnd
1844 (x_amount => l_asset_fin_rec_adj.cip_cost,
1845 x_book => px_asset_hdr_rec.book_type_code,
1846 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1847 p_log_level_rec => p_log_level_rec) then raise adj_err;
1848 end if;
1849
1850
1851 if not fa_utils_pkg.faxrnd
1852 (x_amount => l_group_rcl_options_rec.reserve_amount,
1853 x_book => px_asset_hdr_rec.book_type_code,
1854 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1855 p_log_level_rec => p_log_level_rec) then raise adj_err;
1856 end if;
1857
1858 if not fa_utils_pkg.faxrnd
1859 (x_amount => l_group_rcl_options_rec.source_exp_amount,
1860 x_book => px_asset_hdr_rec.book_type_code,
1861 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1862 p_log_level_rec => p_log_level_rec) then raise adj_err;
1863 end if;
1864
1865 if not fa_utils_pkg.faxrnd
1866 (x_amount => l_group_rcl_options_rec.destination_exp_amount,
1867 x_book => px_asset_hdr_rec.book_type_code,
1868 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1869 p_log_level_rec => p_log_level_rec) then raise adj_err;
1870 end if;
1871
1872 if not fa_utils_pkg.faxrnd
1873 (x_amount => l_group_rcl_options_rec.source_eofy_reserve,
1874 x_book => px_asset_hdr_rec.book_type_code,
1875 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1876 p_log_level_rec => p_log_level_rec) then raise adj_err;
1877 end if;
1878
1879 if not fa_utils_pkg.faxrnd
1880 (x_amount => l_group_rcl_options_rec.destination_eofy_reserve,
1881 x_book => px_asset_hdr_rec.book_type_code,
1882 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1883 p_log_level_rec => p_log_level_rec) then raise adj_err;
1884 end if;
1885
1886 --end bug 6619897
1887
1888 if not fa_utils_pkg.faxrnd
1889 (x_amount => l_asset_deprn_rec_adj.deprn_reserve,
1890 x_book => px_asset_hdr_rec.book_type_code,
1891 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1892 p_log_level_rec => p_log_level_rec) then raise adj_err;
1893 end if;
1894
1895 if not fa_utils_pkg.faxrnd
1896 (x_amount => l_asset_deprn_rec_adj.ytd_deprn,
1897 x_book => px_asset_hdr_rec.book_type_code,
1898 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1899 p_log_level_rec => p_log_level_rec) then raise adj_err;
1900 end if;
1901
1902 if not fa_utils_pkg.faxrnd
1903 (x_amount => l_asset_deprn_rec_adj.bonus_deprn_reserve,
1904 x_book => px_asset_hdr_rec.book_type_code,
1905 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1906 p_log_level_rec => p_log_level_rec) then raise adj_err;
1907 end if;
1908
1909 if not fa_utils_pkg.faxrnd
1910 (x_amount => l_asset_deprn_rec_adj.bonus_ytd_deprn,
1911 x_book => px_asset_hdr_rec.book_type_code,
1912 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1913 p_log_level_rec => p_log_level_rec) then raise adj_err;
1914 end if;
1915
1916 if not fa_utils_pkg.faxrnd
1917 (x_amount => l_asset_deprn_rec_adj.reval_deprn_reserve,
1918 x_book => px_asset_hdr_rec.book_type_code,
1919 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1920 p_log_level_rec => p_log_level_rec) then raise adj_err;
1921 end if;
1922
1923 if not fa_utils_pkg.faxrnd
1924 (x_amount => l_group_rcl_options_rec.reserve_amount,
1925 x_book => px_asset_hdr_rec.book_type_code,
1926 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1927 p_log_level_rec => p_log_level_rec) then raise adj_err;
1928 end if;
1929
1930 if not fa_utils_pkg.faxrnd
1931 (x_amount => l_group_rcl_options_rec.source_exp_amount,
1932 x_book => px_asset_hdr_rec.book_type_code,
1936
1933 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1934 p_log_level_rec => p_log_level_rec) then raise adj_err;
1935 end if;
1937 if not fa_utils_pkg.faxrnd
1941 p_log_level_rec => p_log_level_rec) then raise adj_err;
1938 (x_amount => l_group_rcl_options_rec.destination_exp_amount,
1939 x_book => px_asset_hdr_rec.book_type_code,
1940 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1942 end if;
1943
1944 if not fa_utils_pkg.faxrnd
1945 (x_amount => l_group_rcl_options_rec.source_eofy_reserve,
1946 x_book => px_asset_hdr_rec.book_type_code,
1947 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1948 p_log_level_rec => p_log_level_rec) then raise adj_err;
1949 end if;
1950
1951 if not fa_utils_pkg.faxrnd
1952 (x_amount => l_group_rcl_options_rec.destination_eofy_reserve,
1953 x_book => px_asset_hdr_rec.book_type_code,
1954 x_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
1955 p_log_level_rec => p_log_level_rec) then raise adj_err;
1956 end if;
1957
1958 -- begin bug 6619897
1959 -- when a manual adjustment to fully reserve is done, ignore
1960 -- daily rates and enforce reporting reserve to fully reserve as well
1961 if (px_asset_hdr_rec.period_of_addition = 'Y') then /* Added for Bug 13030673 */
1962 if l_asset_fin_rec_adj_init.cost + l_old_primary_cost =
1963 l_asset_deprn_rec_adj_init.deprn_reserve + l_old_primary_deprn_reserve then
1964
1965 l_asset_deprn_rec_adj.deprn_reserve := l_asset_fin_rec_old.cost + l_asset_fin_rec_adj.cost
1966 - l_asset_deprn_rec_old.deprn_reserve;
1967
1968 if l_asset_deprn_rec_adj.ytd_deprn > l_asset_deprn_rec_adj.deprn_reserve then
1969 l_asset_deprn_rec_adj.ytd_deprn := l_asset_deprn_rec_adj.deprn_reserve;
1970 end if;
1971 end if;
1972 end if; /* Added for Bug 13030673 */
1973
1974 -- end bug 6619897
1975
1976 end if; -- primary of reporting
1977
1978 if nvl(l_asset_fin_rec_adj.group_asset_id,
1979 nvl(l_asset_fin_rec_old.group_asset_id,FND_API.G_MISS_NUM)) <> FND_API.G_MISS_NUM then
1980 l_asset_fin_rec_adj.group_asset_id := nvl(l_asset_fin_rec_adj.group_asset_id,l_asset_fin_rec_old.group_asset_id);
1981 if not FA_ASSET_VAL_PVT.validate_over_depreciation
1982 (p_asset_hdr_rec => l_asset_hdr_rec,
1983 p_asset_fin_rec => l_asset_fin_rec_adj,
1984 p_validation_type => 'ADJUSTMENT',
1985 p_cost_adj => l_asset_fin_rec_adj.cost,
1986 p_rsv_adj => 0,
1987 p_mrc_sob_type_code => l_reporting_flag,
1988 p_log_level_rec => g_log_level_rec) then
1989 raise adj_err;
1990 end if;
1991 end if;
1992
1993 -- Fix for Bug #3499223
1994 -- For Polish, we need additional changes here, so we know if the
1995 -- transaction is an adjustment if deprn catchup is needed.
1996 -- First find out if we have a polish mechanism here
1997 if (p_asset_type_rec.asset_type <> 'GROUP') and
1998 (nvl(l_asset_fin_rec_new.deprn_method_code,
1999 l_asset_fin_rec_adj.deprn_method_code) is not null) and
2000 (fa_cache_pkg.fazccmt (
2001 X_method => nvl(l_asset_fin_rec_new.deprn_method_code,
2002 l_asset_fin_rec_adj.deprn_method_code),
2003 X_life => nvl(l_asset_fin_rec_new.life_in_months,
2004 l_asset_fin_rec_adj.life_in_months),
2005 p_log_level_rec => p_log_level_rec
2006 )) then
2007 if (fa_cache_pkg.fazccmt_record.deprn_basis_rule_id is not null) then
2008 if (fa_cache_pkg.fazcdbr_record.polish_rule in (
2009 FA_STD_TYPES.FAD_DBR_POLISH_1,
2010 FA_STD_TYPES.FAD_DBR_POLISH_2,
2011 FA_STD_TYPES.FAD_DBR_POLISH_3,
2012 FA_STD_TYPES.FAD_DBR_POLISH_4,
2013 FA_STD_TYPES.FAD_DBR_POLISH_5)) then
2014
2015 fa_polish_pvt.calling_mode := 'ADJUSTMENT';
2016 fa_polish_pvt.amortization_start_date :=
2017 px_trans_rec.amortization_start_date;
2018 fa_polish_pvt.adjustment_amount := l_asset_fin_rec_adj.cost;
2019 end if;
2020 end if;
2021 end if;
2022
2023 --Bug8316273
2024 if ((p_asset_type_rec.asset_type = 'CIP')
2025 and (px_trans_rec.transaction_subtype = 'AMORTIZED' )) then
2026
2030
2027 px_trans_rec.transaction_subtype := 'EXPENSED';
2028 px_trans_rec.amortization_start_date := NULL;
2029 end if;
2031 -- Japan Tax phase3 Start
2032 if (l_set_extend_flag) then
2033
2034 if (p_log_level_rec.statement_level) then
2035 fa_debug_pkg.add(l_calling_fn, 'Japan Tax:1 Setting l_asset_fin_rec_adj values', 'TRUE...', p_log_level_rec => p_log_level_rec);
2036 end if;
2037
2038 l_asset_fin_rec_adj.deprn_method_code := 'JP-STL-EXTND'; -- New STL method with life 60 months
2039 l_asset_fin_rec_adj.life_in_months := 60;
2040 --l_asset_fin_rec_adj.period_counter_fully_reserved := null;
2041 --l_asset_fin_rec_adj.period_counter_life_complete := null;
2042 l_asset_fin_rec_adj.basic_rate := null;
2043 l_asset_fin_rec_adj.adjusted_rate := null;
2044 l_asset_fin_rec_adj.allowed_deprn_limit := null;
2045 l_asset_fin_rec_adj.deprn_limit_type := 'AMT';
2046 -- bug#6658280 l_asset_fin_rec_adj.allowed_deprn_limit_amount := 1; -- Memorandum price
2047
2048 /* Japan Tax phase3 Bug 6614551
2049 Salvage need not be changed to zero for extended asset
2050 if (l_asset_fin_rec_old.salvage_type = 'PCT') then
2051 l_asset_fin_rec_adj.percent_salvage_value := -1 * l_asset_fin_rec_old.percent_salvage_value;
2052 elsif (l_asset_fin_rec_old.salvage_type = 'AMT') then
2053 l_asset_fin_rec_adj.salvage_value := 0;
2054 end if; */
2055
2056 px_trans_rec.transaction_key := 'ES';
2057
2058 elsif (l_reset_extend_flag) then
2059
2060 if (p_log_level_rec.statement_level) then
2061 fa_debug_pkg.add(l_calling_fn, 'Japan Tax:2 Resetting l_asset_fin_rec_adj values', 'TRUE...', p_log_level_rec => p_log_level_rec);
2062 end if;
2063
2064 -- Japan Tax phase3 Bug 6614551 no need to change salvage value
2065 open c_extend_get_original_deprn(l_asset_hdr_rec.asset_id, l_asset_hdr_rec.book_type_code);
2066 FETCH c_extend_get_original_deprn
2067 INTO l_asset_fin_rec_adj.deprn_method_code,
2068 l_asset_fin_rec_adj.life_in_months,
2069 --l_asset_fin_rec_adj.salvage_value,
2070 --l_asset_fin_rec_adj.period_counter_fully_reserved,
2071 --l_asset_fin_rec_adj.period_counter_life_complete,
2072 l_asset_fin_rec_adj.basic_rate,
2073 l_asset_fin_rec_adj.adjusted_rate,
2074 l_asset_fin_rec_adj.allowed_deprn_limit,
2075 l_asset_fin_rec_adj.deprn_limit_type,
2076 l_asset_fin_rec_adj.allowed_deprn_limit_amount;
2077 close c_extend_get_original_deprn;
2078
2079 l_asset_fin_rec_adj.extended_depreciation_period := FND_API.G_MISS_NUM;
2080
2081 -- Added this condition for Bug#7297680
2082
2083 if (l_asset_fin_rec_adj.deprn_limit_type = l_asset_fin_rec_old.deprn_limit_type ) then
2084 l_asset_fin_rec_adj.allowed_deprn_limit := l_asset_fin_rec_adj.allowed_deprn_limit
2085 - l_asset_fin_rec_old.allowed_deprn_limit;
2086 l_asset_fin_rec_adj.allowed_deprn_limit_amount := l_asset_fin_rec_adj.allowed_deprn_limit_amount
2090 px_trans_rec.transaction_key := 'ER';
2087 -l_asset_fin_rec_old.allowed_deprn_limit_amount;
2088 end if;
2089
2091 end if;
2092 -- Japan Tax phase3 end
2093
2094 --Bug7627286
2095 --Add the rolled back deprn amount to the adj rec
2096 if ((px_asset_hdr_rec.period_of_addition = 'Y')
2097 and ((nvl(l_asset_deprn_rec_adj.deprn_reserve,0) <> 0)
2098 or (nvl(l_asset_deprn_rec_adj.ytd_deprn,0) <> 0))) then
2099 l_asset_deprn_rec_adj.deprn_reserve := l_asset_deprn_rec_adj.deprn_reserve + nvl(l_deprn_amount,0);
2100 l_asset_deprn_rec_adj.ytd_deprn := l_asset_deprn_rec_adj.ytd_deprn + nvl(l_deprn_amount,0);
2101 end if;
2102
2103
2104 -- call the private API for primary or reporting using the local variables for sob related info
2105 if (p_log_level_rec.statement_level) then
2106 fa_debug_pkg.add('do_all_books', 'l_asset_fin_rec_adj.cost', l_asset_fin_rec_adj.cost, p_log_level_rec => p_log_level_rec);
2107 end if;
2108
2109 if not FA_ADJUSTMENT_PVT.do_adjustment
2110 (px_trans_rec => px_trans_rec,
2111 px_asset_hdr_rec => l_asset_hdr_rec , -- mrc
2112 p_asset_desc_rec => p_asset_desc_rec ,
2113 p_asset_type_rec => p_asset_type_rec ,
2114 p_asset_cat_rec => p_asset_cat_rec ,
2115 p_asset_fin_rec_old => l_asset_fin_rec_old, -- mrc
2116 p_asset_fin_rec_adj => l_asset_fin_rec_adj, -- mrc
2117 x_asset_fin_rec_new => l_asset_fin_rec_new, -- mrc
2118 p_inv_trans_rec => px_inv_trans_rec,
2119 p_asset_deprn_rec_old => l_asset_deprn_rec_old, -- mrc
2120 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj, -- mrc
2121 x_asset_deprn_rec_new => l_asset_deprn_rec_new, -- mrc
2122 p_period_rec => l_period_rec,
2123 p_mrc_sob_type_code => l_reporting_flag,
2124 p_group_reclass_options_rec => l_group_rcl_options_rec,
2125 p_calling_fn => l_calling_fn
2126 , p_log_level_rec => p_log_level_rec)then
2127 raise adj_err;
2128 end if;
2129
2130 if (l_sob_index <> 0) then
2131 -- if there was a cost change rederive average rate, otherwise use the prior one
2132 -- which has been derived above
2133
2134 if (l_new_primary_cost <> 0) then
2135 l_avg_rate := l_asset_fin_rec_new.cost /
2136 l_new_primary_cost;
2137 end if;
2138
2139 -- insert the books_rates record
2140
2141 MC_FA_UTILITIES_PKG.insert_books_rates
2142 (p_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
2143 p_asset_id => l_asset_hdr_rec.asset_id,
2144 p_book_type_code => l_asset_hdr_rec.book_type_code,
2145 p_transaction_header_id => px_trans_rec.transaction_header_id,
2146 p_invoice_transaction_id => px_inv_trans_rec.invoice_transaction_id,
2147 p_exchange_date => px_trans_rec.transaction_date_entered,
2148 p_cost => l_asset_fin_rec_adj_init.cost,
2149 p_exchange_rate => l_exchange_rate,
2150 p_avg_exchange_rate => l_avg_rate,
2151 p_last_updated_by => px_trans_rec.who_info.last_updated_by,
2152 p_last_update_date => px_trans_rec.who_info.last_update_date,
2153 p_last_update_login => px_trans_rec.who_info.last_update_login,
2154 p_complete => 'Y',
2155 p_trigger => 'adj api',
2156 p_currency_code => l_asset_hdr_rec.set_of_books_id, p_log_level_rec => p_log_level_rec);
2157
2158 else
2159 l_new_primary_cost := l_asset_fin_rec_new.cost;
2160 end if;
2161
2162 if (p_log_level_rec.statement_level) then
2163 fa_debug_pkg.add('do_all_books', 'before', 'group logic', p_log_level_rec => p_log_level_rec);
2164 end if;
2165
2166
2167 -- call the group api
2168 if (l_asset_fin_rec_old.group_asset_id is not null or
2169 l_asset_fin_rec_new.group_asset_id is not null ) then
2170
2171 if (p_log_level_rec.statement_level) then
2172 fa_debug_pkg.add('do_all_books', 'entering', 'group logic', p_log_level_rec => p_log_level_rec);
2173 end if;
2174
2175 if (l_sob_index = 0) then
2176
2177 -- set up the group recs
2178
2179 l_src_asset_hdr_rec := l_asset_hdr_rec;
2180 l_dest_asset_hdr_rec := l_asset_hdr_rec;
2181
2182 l_src_asset_hdr_rec.asset_id := l_asset_fin_rec_old.group_asset_id;
2183 l_dest_asset_hdr_rec.asset_id := l_asset_fin_rec_new.group_asset_id;
2184
2185 -- get src info
2186 if (l_asset_fin_rec_old.group_asset_id is not null) then
2187
2188 if not FA_UTIL_PVT.get_asset_desc_rec
2189 (p_asset_hdr_rec => l_src_asset_hdr_rec,
2190 px_asset_desc_rec => l_src_asset_desc_rec
2191 , p_log_level_rec => p_log_level_rec) then
2192 raise adj_err;
2193 end if;
2194
2195 if not FA_UTIL_PVT.get_asset_cat_rec
2196 (p_asset_hdr_rec => l_src_asset_hdr_rec,
2197 px_asset_cat_rec => l_src_asset_cat_rec,
2201 end if;
2198 p_date_effective => null
2199 , p_log_level_rec => p_log_level_rec) then
2200 raise adj_err;
2202
2203 if not FA_UTIL_PVT.get_asset_type_rec
2204 (p_asset_hdr_rec => l_src_asset_hdr_rec,
2205 px_asset_type_rec => l_src_asset_type_rec,
2206 p_date_effective => null
2207 , p_log_level_rec => p_log_level_rec) then
2208 raise adj_err;
2209 end if;
2210
2211 if not FA_ASSET_VAL_PVT.validate_period_of_addition
2212 (p_asset_id => l_src_asset_hdr_rec.asset_id,
2213 p_book => l_src_asset_hdr_rec.book_type_code,
2214 p_mode => 'ABSOLUTE',
2215 px_period_of_addition => l_src_asset_hdr_rec.period_of_addition, p_log_level_rec => p_log_level_rec) then
2216 raise adj_err;
2217 end if;
2218
2219 -- call transaction approval for source asset (dest is done below)
2220 -- but not if destination invocation from inv xfr is on a member
2221 -- in the same group as the source
2222
2223 if (nvl(px_inv_trans_rec.transaction_type, 'X') <> 'INVOICE TRANSFER' OR
2224 nvl(g_last_group_asset_id, 0) <> nvl(l_src_asset_hdr_rec.asset_id, 0)) then
2225 if not FA_TRX_APPROVAL_PKG.faxcat
2226 (X_book => l_src_asset_hdr_rec.book_type_code,
2227 X_asset_id => l_src_asset_hdr_rec.asset_id,
2228 X_trx_type => 'ADJUSTMENT',
2229 X_trx_date => px_trans_rec.transaction_date_entered,
2230 X_init_message_flag => 'NO'
2231 , p_log_level_rec => p_log_level_rec) then
2232 raise adj_err;
2233 end if;
2234 end if;
2235 end if; -- old group asset id not null
2236
2237 if (l_asset_fin_rec_new.group_asset_id is not null and
2238 nvl(l_asset_fin_rec_old.group_asset_id, -99) <> l_asset_fin_rec_new.group_asset_id ) then
2239
2240 -- get dest info
2241 if not FA_UTIL_PVT.get_asset_desc_rec
2242 (p_asset_hdr_rec => l_dest_asset_hdr_rec,
2243 px_asset_desc_rec => l_dest_asset_desc_rec
2244 , p_log_level_rec => p_log_level_rec) then
2245 raise adj_err;
2246 end if;
2247
2248 if not FA_UTIL_PVT.get_asset_cat_rec
2249 (p_asset_hdr_rec => l_dest_asset_hdr_rec,
2250 px_asset_cat_rec => l_dest_asset_cat_rec,
2251 p_date_effective => null
2252 , p_log_level_rec => p_log_level_rec) then
2253 raise adj_err;
2254 end if;
2255
2256 if not FA_UTIL_PVT.get_asset_type_rec
2257 (p_asset_hdr_rec => l_dest_asset_hdr_rec,
2258 px_asset_type_rec => l_dest_asset_type_rec,
2259 p_date_effective => null
2260 , p_log_level_rec => p_log_level_rec) then
2261 raise adj_err;
2262 end if;
2263
2264 if not FA_ASSET_VAL_PVT.validate_period_of_addition
2265 (p_asset_id => l_dest_asset_hdr_rec.asset_id,
2266 p_book => l_dest_asset_hdr_rec.book_type_code,
2267 p_mode => 'ABSOLUTE',
2268 px_period_of_addition => l_dest_asset_hdr_rec.period_of_addition, p_log_level_rec => p_log_level_rec) then
2269 raise adj_err;
2270 end if;
2271
2272 end if; -- new group asset id not null
2273
2274 else
2275 l_src_asset_hdr_rec.set_of_books_id :=
2276 l_asset_hdr_rec.set_of_books_id;
2277 l_dest_asset_hdr_rec.set_of_books_id :=
2278 l_asset_hdr_rec.set_of_books_id;
2279
2280 end if; -- primary book
2281
2282
2283 if (nvl(l_asset_fin_rec_old.group_asset_id, -99) = nvl(l_asset_fin_rec_new.group_asset_id, -99)) then
2284 -- nvl(l_asset_fin_rec_new.member_rollup_flag,'N') <> 'Y' then
2285
2286 if (p_log_level_rec.statement_level) then
2287 fa_debug_pkg.add('do_all_books', 'entering', 'group adj logic', p_log_level_rec => p_log_level_rec);
2288 end if;
2289
2290 if (l_sob_index = 0) then
2291 l_src_trans_rec := px_trans_rec;
2292 l_src_trans_rec.transaction_type_code := 'GROUP ADJUSTMENT';
2293 l_src_trans_rec.member_transaction_header_id := px_trans_rec.transaction_header_id;
2294 l_src_trans_rec.transaction_subtype := 'AMORTIZED';
2295 if (nvl(px_inv_trans_rec.transaction_type, 'X') = 'INVOICE DEP') then
2296 l_src_trans_rec.transaction_key := 'MD';
2297 elsif (nvl(px_inv_trans_rec.transaction_type, 'X') = 'INVOICE NO DEP') then
2298 l_src_trans_rec.transaction_key := 'MN';
2299 else
2300 l_src_trans_rec.transaction_key := 'MJ';
2301 end if;
2302
2303 select fa_transaction_headers_s.nextval
2307 end if;
2304 into l_src_trans_rec.transaction_header_id
2305 from dual;
2306
2308
2309
2310 -- load the old structs
2311 if not FA_UTIL_PVT.get_asset_fin_rec
2312 (p_asset_hdr_rec => l_src_asset_hdr_rec,
2313 px_asset_fin_rec => l_src_asset_fin_rec_old,
2314 p_transaction_header_id => NULL,
2315 p_mrc_sob_type_code => l_reporting_flag
2316 , p_log_level_rec => p_log_level_rec) then raise adj_err;
2317 end if;
2318
2319 if not FA_UTIL_PVT.get_asset_deprn_rec
2320 (p_asset_hdr_rec => l_src_asset_hdr_rec ,
2321 px_asset_deprn_rec => l_src_asset_deprn_rec_old,
2322 p_period_counter => NULL,
2323 p_mrc_sob_type_code => l_reporting_flag
2324 , p_log_level_rec => p_log_level_rec) then raise adj_err;
2328 fa_debug_pkg.add('do_all_books', 'group adj: cip_cost', l_asset_fin_rec_adj.cip_cost, p_log_level_rec => p_log_level_rec);
2325 end if;
2326
2327 if (p_log_level_rec.statement_level) then
2329 fa_debug_pkg.add('do_all_books', 'group adj: cost', l_asset_fin_rec_adj.cost, p_log_level_rec => p_log_level_rec);
2330 end if;
2331
2332 -- copy the delta cost if any into the group's fin_rec
2333 if (p_asset_type_rec.asset_type = 'CIP') then
2334
2335 if (fa_cache_pkg.fazcbc_record.allow_cip_dep_group_flag = 'Y') then
2336 l_src_asset_fin_rec_adj.cip_cost := nvl(l_asset_fin_rec_adj.cip_cost, 0);
2337 l_src_asset_fin_rec_adj.cost := nvl(l_asset_fin_rec_adj.cost, 0) - nvl(l_asset_fin_rec_adj.cip_cost, 0);
2338 else
2339 l_src_asset_fin_rec_adj.cip_cost := nvl(l_asset_fin_rec_adj.cost, 0);
2340 end if;
2341 else
2342 l_src_asset_fin_rec_adj.cost := l_asset_fin_rec_adj.cost;
2343 l_src_asset_fin_rec_adj.salvage_value := nvl(l_asset_fin_rec_new.salvage_value, 0) -
2344 nvl(l_asset_fin_rec_old.salvage_value, 0);
2345 l_src_asset_fin_rec_adj.allowed_deprn_limit_amount :=
2346 nvl(l_asset_fin_rec_new.allowed_deprn_limit_amount, 0) -
2347 nvl(l_asset_fin_rec_old.allowed_deprn_limit_amount, 0);
2348 end if;
2349
2350 if not FA_ADJUSTMENT_PVT.do_adjustment
2351 (px_trans_rec => l_src_trans_rec,
2352 px_asset_hdr_rec => l_src_asset_hdr_rec,
2353 p_asset_desc_rec => l_src_asset_desc_rec,
2354 p_asset_type_rec => l_src_asset_type_rec,
2355 p_asset_cat_rec => l_src_asset_cat_rec,
2356 p_asset_fin_rec_old => l_src_asset_fin_rec_old,
2357 p_asset_fin_rec_adj => l_src_asset_fin_rec_adj,
2358 x_asset_fin_rec_new => l_src_asset_fin_rec_new,
2359 p_inv_trans_rec => px_inv_trans_rec,
2360 p_asset_deprn_rec_old => l_src_asset_deprn_rec_old,
2361 p_asset_deprn_rec_adj => l_src_asset_deprn_rec_adj,
2362 x_asset_deprn_rec_new => l_src_asset_deprn_rec_new,
2363 p_period_rec => l_period_rec,
2364 p_mrc_sob_type_code => l_reporting_flag,
2365 p_group_reclass_options_rec => l_group_rcl_options_rec,
2366 p_calling_fn => l_calling_fn
2367 , p_log_level_rec => p_log_level_rec)then
2368 raise adj_err;
2369 end if;
2370
2371 -- else -- group reclass is occuring
2372 elsif (nvl(l_asset_fin_rec_old.group_asset_id, -99) <> nvl(l_asset_fin_rec_new.group_asset_id, -99)) then
2373
2374 if (p_log_level_rec.statement_level) then
2375 fa_debug_pkg.add('do_all_books', 'entering', 'group reclass logic', p_log_level_rec => p_log_level_rec);
2376 end if;
2377
2378 /*Bug 8975022 - Group Reclass on revalued assets can not be done*/
2379 IF fa_asset_val_pvt.validate_reval_exists
2380 (p_book_type_code => px_asset_hdr_rec.book_type_code,
2381 p_asset_Id => px_asset_hdr_rec.asset_id,
2382 p_calling_fn => l_calling_fn,
2383 p_log_level_rec => p_log_level_rec) then
2384 fa_srvr_msg.add_message(
2385 calling_fn => l_calling_fn,
2386 name => 'FA_REVAL_TRX_EXIST', p_log_level_rec => p_log_level_rec);
2387 RAISE adj_err;
2388 END IF;
2389
2393 l_asset_fin_rec_new,
2390 --Added for 6990774
2391 IF NOT (fa_asset_val_pvt.validate_grp_track_method
2392 (l_asset_fin_rec_old,
2394 p_group_reclass_options_rec,
2395 p_log_level_rec)
2396 ) THEN
2397 RAISE adj_err;
2398 END IF;
2399 --End of 6990774
2400
2401 if (l_sob_index = 0) then
2402 -- call transaction approval for destination asset (src was done above)
2403 if not FA_TRX_APPROVAL_PKG.faxcat
2404 (X_book => l_dest_asset_hdr_rec.book_type_code,
2405 X_asset_id => l_dest_asset_hdr_rec.asset_id,
2406 X_trx_type => 'ADJUSTMENT',
2407 X_trx_date => px_trans_rec.transaction_date_entered,
2408 X_init_message_flag => 'NO'
2409 , p_log_level_rec => p_log_level_rec) then
2410 raise adj_err;
2411 end if;
2412
2413 -- BUG# 3188779
2414 -- moving reclass overlap logic here from val_amort_start code
2415 -- Checking Max Reclass Date and restrict
2416 -- any transaction beyond the date.
2417 OPEN c_get_max_reclass_date(p_asset_id => px_asset_hdr_rec.asset_id,
2418 p_book_type_code => px_asset_hdr_rec.book_type_code);
2419 FETCH c_get_max_reclass_date INTO l_max_reclass_date;
2420 CLOSE c_get_max_reclass_date;
2421
2422 if (l_max_reclass_date is not null and
2423 px_trans_rec.amortization_start_date < l_max_reclass_date) then
2424 fa_srvr_msg.add_message(
2425 calling_fn => l_calling_fn,
2426 name => 'FA_NO_TRX_BEFORE_RECLASS', p_log_level_rec => p_log_level_rec);
2427 raise adj_err;
2428 end if;
2429
2430 OPEN c_get_overlapping_ret (p_asset_id => px_asset_hdr_rec.asset_id,
2431 p_book_type_code => px_asset_hdr_rec.book_type_code);
2432 FETCH c_get_overlapping_ret INTO l_max_ret_date;
2433 CLOSE c_get_overlapping_ret;
2434
2435 if (l_max_ret_date is not null and
2436 px_trans_rec.amortization_start_date < l_max_ret_date) then
2437 fa_srvr_msg.add_message(
2438 calling_fn => l_calling_fn,
2439 name => 'FA_OTHER_TRX_FOLLOW', p_log_level_rec => p_log_level_rec);
2440 raise adj_err;
2441 end if;
2442
2443 -- default the trx_type if needed
2444 if (l_group_rcl_options_rec.group_reclass_type is null) then
2445 l_group_rcl_options_rec.group_reclass_type := 'CALC';
2446 end if;
2447
2448 l_src_trans_rec.trx_reference_id := px_trans_rec.trx_reference_id;
2452
2449 l_dest_trans_rec.trx_reference_id := px_trans_rec.trx_reference_id;
2450
2451 end if;
2453 if (p_log_level_rec.statement_level) then
2454 fa_debug_pkg.add('do_all_books', 'l_src_asset_cat',
2455 l_src_asset_cat_rec.category_id, p_log_level_rec => p_log_level_rec);
2456 fa_debug_pkg.add('do_all_books', 'l_dest_asset_cat',
2457 l_dest_asset_cat_rec.category_id, p_log_level_rec => p_log_level_rec);
2458 end if;
2459
2460 -- need to reclass, call the wrapper
2461 if not fa_group_reclass2_pvt.do_group_reclass
2462 (p_trans_rec => px_trans_rec,
2463 p_asset_hdr_rec => l_asset_hdr_rec,
2464 p_asset_desc_rec => p_asset_desc_rec,
2465 p_asset_type_rec => p_asset_type_rec,
2466 p_asset_cat_rec => p_asset_cat_rec,
2467 px_src_trans_rec => l_src_trans_rec,
2468 px_src_asset_hdr_rec => l_src_asset_hdr_rec,
2469 p_src_asset_desc_rec => l_src_asset_desc_rec,
2470 p_src_asset_type_rec => l_src_asset_type_rec,
2471 p_src_asset_cat_rec => l_src_asset_cat_rec,
2472 px_dest_trans_rec => l_dest_trans_rec,
2473 px_dest_asset_hdr_rec => l_dest_asset_hdr_rec,
2474 p_dest_asset_desc_rec => l_dest_asset_desc_rec,
2475 p_dest_asset_type_rec => l_dest_asset_type_rec,
2476 p_dest_asset_cat_rec => l_dest_asset_cat_rec,
2477 p_asset_fin_rec_old => l_asset_fin_rec_old,
2478 p_asset_fin_rec_adj => l_asset_fin_rec_adj,
2479 p_asset_fin_rec_new => l_asset_fin_rec_new,
2480 p_asset_deprn_rec_old => l_asset_deprn_rec_old,
2481 p_asset_deprn_rec_adj => l_asset_deprn_rec_adj,
2482 p_asset_deprn_rec_new => l_asset_deprn_rec_new,
2483 px_group_reclass_options_rec => l_group_rcl_options_rec,
2484 p_period_rec => l_period_rec,
2485 p_mrc_sob_type_code => l_reporting_flag,
2486 p_calling_fn => l_calling_fn
2487 , p_log_level_rec => p_log_level_rec)then
2488 raise adj_err;
2489 end if; -- do_adjustment
2490
2491 /*Bug 8941132: load the trx_ref rec - start*/
2492 If (px_trans_rec.calling_interface <> 'FAXASSET' and l_sob_index = 0
2493 and l_group_rcl_options_rec.group_reclass_type = 'CALC'
2494 /*bug#16426081 starts */
2495 and not (
2496 nvl(l_asset_fin_rec_new.tracking_method,'NONE') = 'CALCULATE'
2497 and nvl(l_asset_fin_rec_new.member_rollup_flag,'N') = 'Y'
2498 )
2499 /*bug#16426081 ends */
2500 ) then
2501 l_group_reclass := TRUE;
2502 l_trx_ref_rec.TRX_REFERENCE_ID := px_trans_rec.trx_reference_id;
2503 l_trx_ref_rec.TRANSACTION_TYPE := 'GROUP CHANGE';
2504 l_trx_ref_rec.SRC_TRANSACTION_SUBTYPE := l_src_trans_rec.transaction_subtype || ' ' || l_group_rcl_options_rec.group_reclass_type;
2505 l_trx_ref_rec.DEST_TRANSACTION_SUBTYPE := l_dest_trans_rec.transaction_subtype || ' ' || l_group_rcl_options_rec.group_reclass_type;
2506 l_trx_ref_rec.BOOK_TYPE_CODE := l_asset_hdr_rec.book_type_code;
2507 l_trx_ref_rec.SRC_ASSET_ID := l_src_asset_hdr_rec.asset_id;
2508 l_trx_ref_rec.SRC_TRANSACTION_HEADER_ID := l_src_trans_rec.transaction_header_id;
2509 l_trx_ref_rec.DEST_ASSET_ID := l_dest_asset_hdr_rec.asset_id;
2510 l_trx_ref_rec.DEST_TRANSACTION_HEADER_ID := l_dest_trans_rec.transaction_header_id;
2511 l_trx_ref_rec.MEMBER_ASSET_ID := l_asset_hdr_rec.asset_id;
2512 l_trx_ref_rec.MEMBER_TRANSACTION_HEADER_ID := px_trans_rec.transaction_header_id;
2513 l_trx_ref_rec.SRC_AMORTIZATION_START_DATE := l_src_trans_rec.amortization_start_date;
2514 l_trx_ref_rec.DEST_AMORTIZATION_START_DATE := l_dest_trans_rec.amortization_start_date;
2515 l_trx_ref_rec.RESERVE_TRANSFER_AMOUNT := l_group_rcl_options_rec.reserve_amount;
2516 l_trx_ref_rec.SRC_EXPENSE_AMOUNT := l_group_rcl_options_rec.source_exp_amount;
2517 l_trx_ref_rec.DEST_EXPENSE_AMOUNT := l_group_rcl_options_rec.destination_exp_amount;
2518 l_trx_ref_rec.SRC_EOFY_RESERVE := l_group_rcl_options_rec.source_eofy_reserve;
2519 l_trx_ref_rec.DEST_EOFY_RESERVE := l_group_rcl_options_rec.destination_eofy_reserve;
2520 end if;
2521 /*Bug 8941132: load the trx_ref rec - end*/
2522 end if; -- end adjustment or group reclass
2523 end if; -- group_asset_ids not null
2524
2525 if (l_sob_index = 0) then
2526
2527 -- set the primary structs
2528 -- no need anymore - using locals anyway
2529 -- Code hook for IAC
2530
2531 if (FA_IGI_EXT_PKG.IAC_Enabled) then
2532 if not FA_IGI_EXT_PKG.Do_Adjustment(
2533 p_trans_rec => px_trans_rec,
2534 p_asset_hdr_rec => px_asset_hdr_rec,
2535 p_asset_cat_rec => p_asset_cat_rec,
2536 p_asset_desc_rec => p_asset_desc_rec,
2537 p_asset_type_rec => p_asset_type_rec,
2538 p_asset_fin_rec => l_asset_fin_rec_new,
2542 end if;
2539 p_asset_deprn_rec => l_asset_deprn_rec_new,
2540 p_calling_function => l_calling_fn) then
2541 raise adj_err;
2543 end if; -- (FA_IGI_EXT_PKG.IAC_Enabled)
2544
2545 if fa_cse_callouts_pvt.is_oat_enabled then
2546 if not fa_cse_callouts_pvt.adjustment(
2547 p_trans_rec => px_trans_rec,
2548 p_asset_hdr_rec => px_asset_hdr_rec,
2549 p_asset_fin_rec_adj => l_asset_fin_rec_adj,
2550 p_inv_tbl => px_inv_tbl) then
2551 raise ADJ_ERR;
2552 end if;
2553 end if;
2554
2555
2556 end if; -- primary book
2557
2558 end loop; -- sob loop
2559
2560 --Bug 8941132: Calls FAPGADJB.do_group_reclass
2561 if (l_group_reclass) then
2562 if not FA_PROCESS_GROUPS_PKG.do_group_reclass(
2563 p_trx_ref_rec => l_trx_ref_rec,
2564 p_mrc_sob_type_code => 'P',
2565 p_set_of_books_id => l_asset_hdr_rec.set_of_books_id,
2566 p_log_level_rec => p_log_level_rec) then
2567 raise adj_err;
2568 end if;
2569 end if;
2570
2571 -- Depreciation Override
2572 -- Bug #2688789
2573 -- removed thid from where clause.
2574 fa_std_types.deprn_override_trigger_enabled:= FALSE;
2575 UPDATE FA_DEPRN_OVERRIDE
2576 SET status = 'POSTED'
2577 WHERE used_by = 'ADJUSTMENT'
2578 AND status = 'SELECTED';
2579 -- transaction_header_id = px_trans_rec.transaction_header_id ;
2580 fa_std_types.deprn_override_trigger_enabled:= TRUE;
2581 -- End of Depreciation Override
2582
2583 -- save the group processed in the case of locking case...
2584 if (nvl(px_inv_trans_rec.transaction_type, 'X') = 'INVOICE TRANSFER'
2585 and fa_cache_pkg.fazcbc_record.book_class = 'CORPORATE') then
2586 if (px_inv_trans_rec.invoice_transaction_id = g_last_invoice_thid) then
2587 g_last_group_asset_id := null;
2588 g_last_invoice_thid := null;
2589 else
2590 g_last_group_asset_id := l_asset_fin_rec_new.group_asset_id;
2591 g_last_invoice_thid := px_inv_trans_rec.invoice_transaction_id;
2592 end if;
2593 end if;
2594
2595 return true;
2596
2597 EXCEPTION
2598
2599 WHEN ADJ_ERR THEN
2600 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2601 return FALSE;
2602
2603 WHEN OTHERS THEN
2604 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2605 return FALSE;
2606
2607 END do_all_books;
2608
2609 -----------------------------------------------------------------------------
2610
2611 END FA_ADJUSTMENT_PUB;