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