[Home] [Help]
PACKAGE BODY: APPS.FA_INV_XFR_PUB
Source
1 PACKAGE BODY FA_INV_XFR_PUB as
2 /* $Header: FAPIXFRB.pls 120.30.12020000.3 2012/11/30 12:12:51 spooyath ship $ */
3
4 --*********************** Global constants ******************************--
5
6 G_PKG_NAME CONSTANT varchar2(30) := 'FA_UNPLANNED_PUB';
7 G_API_NAME CONSTANT varchar2(30) := 'Unplanned 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 procedures ******************************--
14
15 FUNCTION do_all_books
16 (p_src_trans_rec IN FA_API_TYPES.trans_rec_type,
17 p_src_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
18 p_dest_trans_rec IN FA_API_TYPES.trans_rec_type,
19 p_dest_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
20 p_period_counter IN NUMBER,
21 p_ccid IN NUMBER,
22 p_src_asset_type IN VARCHAR2,
23 p_dest_asset_type IN VARCHAR2,
24 p_src_current_units IN NUMBER,
25 p_dest_current_units IN NUMBER,
26 p_calling_fn IN varchar2
27 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) return boolean;
28
29 --*********************** Public procedures ******************************--
30
31 PROCEDURE do_transfer
32 (p_api_version IN NUMBER,
33 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
34 p_commit IN VARCHAR2 := FND_API.G_FALSE,
35 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
36 p_calling_fn IN VARCHAR2 := NULL,
37 x_return_status OUT NOCOPY VARCHAR2,
38 x_msg_count OUT NOCOPY NUMBER,
39 x_msg_data OUT NOCOPY VARCHAR2,
40 px_src_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
41 px_src_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
42 px_dest_trans_rec IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
43 px_dest_asset_hdr_rec IN OUT NOCOPY FA_API_TYPES.asset_hdr_rec_type,
44 p_inv_tbl IN FA_API_TYPES.inv_tbl_type) IS
45
46 -- used for sob cache
47 l_mrc_sob_type_code varchar2(1);
48
49 -- shared
50 l_inv_trans_rec FA_API_TYPES.inv_trans_rec_type;
51 l_return_status VARCHAR2(1);
52 l_return_status_bool boolean;
53 l_group_reclass_options_rec FA_API_TYPES.group_reclass_options_rec_type;
54
55 -- source
56 l_src_asset_fin_rec_adj FA_API_TYPES.asset_fin_rec_type;
57 l_src_asset_fin_rec_new FA_API_TYPES.asset_fin_rec_type;
58 l_src_asset_fin_mrc_tbl_new FA_API_TYPES.asset_fin_tbl_type;
59 l_src_inv_tbl FA_API_TYPES.inv_tbl_type;
60 l_src_asset_deprn_rec_adj FA_API_TYPES.asset_deprn_rec_type;
61 l_src_asset_deprn_rec_new FA_API_TYPES.asset_deprn_rec_type;
62 l_src_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
63
64 -- destination
65 l_dest_asset_fin_rec_adj FA_API_TYPES.asset_fin_rec_type;
66 l_dest_asset_fin_rec_new FA_API_TYPES.asset_fin_rec_type;
67 l_dest_asset_fin_mrc_tbl_new FA_API_TYPES.asset_fin_tbl_type;
68 l_dest_inv_tbl FA_API_TYPES.inv_tbl_type;
69 l_dest_asset_deprn_rec_adj FA_API_TYPES.asset_deprn_rec_type;
70 l_dest_asset_deprn_rec_new FA_API_TYPES.asset_deprn_rec_type;
71 l_dest_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
72
73 l_src_asset_type_rec FA_API_TYPES.asset_type_rec_type;
74 l_dest_asset_type_rec FA_API_TYPES.asset_type_rec_type;
75
76 l_from_asset_type varchar2(15);
77 l_to_asset_type varchar2(15);
78 l_from_current_units number;
79 l_to_current_units number;
80
81 l_period_rec FA_API_TYPES.period_rec_type;
82 l_transaction_date date;
83
84 l_clearing_ccid number;
85 l_interco_impact boolean;
86
87 l_rowid varchar2(40);
88
89 l_current_period_counter NUMBER;
90 l_calling_fn VARCHAR2(35) := 'fa_inv_xfr_pub.do_transfer';
91 inv_xfr_err EXCEPTION;
92
93 -- Bug 8862296 Changes start here
94 l_source_group_asset_id NUMBER;
95 l_dest_group_asset_id NUMBER;
96
97 --Secondary
98 l_secondary_sob_id number;
99 l_secondary_src_trans_rec FA_API_TYPES.trans_rec_type;
100 l_secondary_dest_trans_rec FA_API_TYPES.trans_rec_type;
101 l_secondary_src_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
102 l_secondary_dest_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
103
104 CURSOR C_GET_SOURCE_GROUP IS
105 SELECT BK.GROUP_ASSET_ID
106 FROM FA_BOOKS BK,FA_DEPRN_PERIODS DP
107 WHERE BK.ASSET_ID = PX_SRC_ASSET_HDR_REC.ASSET_ID
108 AND BK.BOOK_TYPE_CODE = PX_SRC_ASSET_HDR_REC.BOOK_TYPE_CODE
109 AND BK.DATE_INEFFECTIVE IS NULL
110 AND BK.GROUP_ASSET_ID IS NOT NULL
111 AND DP.BOOK_TYPE_CODE = BK.BOOK_TYPE_CODE
112 AND DP.PERIOD_CLOSE_DATE IS NULL
113 AND DP.CALENDAR_PERIOD_OPEN_DATE > PX_SRC_TRANS_REC.AMORTIZATION_START_DATE;
114
115 CURSOR C_GET_DEST_GROUP IS
116 SELECT BK.GROUP_ASSET_ID
117 FROM FA_BOOKS BK,FA_DEPRN_PERIODS DP
118 WHERE BK.ASSET_ID = PX_DEST_ASSET_HDR_REC.ASSET_ID
119 AND BK.BOOK_TYPE_CODE = PX_DEST_ASSET_HDR_REC.BOOK_TYPE_CODE
120 AND BK.DATE_INEFFECTIVE IS NULL
121 AND BK.GROUP_ASSET_ID IS NOT NULL
122 AND DP.BOOK_TYPE_CODE = BK.BOOK_TYPE_CODE
123 AND DP.PERIOD_CLOSE_DATE IS NULL
124 AND DP.CALENDAR_PERIOD_OPEN_DATE > PX_DEST_TRANS_REC.AMORTIZATION_START_DATE;
125 -- Bug 8862296 Changes end here
126
127 BEGIN
128
129 SAVEPOINT do_transfer;
130 if (not g_log_level_rec.initialized) then
131 if (NOT fa_util_pub.get_log_level_rec (
132 x_log_level_rec => g_log_level_rec
133 )) then
134 raise inv_xfr_err;
135 end if;
136 end if;
137
138 -- Initialize message list if p_init_msg_list is set to TRUE.
139 if (fnd_api.to_boolean(p_init_msg_list)) then
140 -- initialize error message stack.
141 fa_srvr_msg.init_server_message;
142
143 -- initialize debug message stack.
144 fa_debug_pkg.initialize;
145 end if;
146
147 -- Check version of the API
148 -- Standard call to check for API call compatibility.
149 if NOT fnd_api.compatible_api_call (
150 G_API_VERSION,
151 p_api_version,
152 G_API_NAME,
153 G_PKG_NAME
154 ) then
155 x_return_status := FND_API.G_RET_STS_ERROR;
156 raise inv_xfr_err;
157 end if;
158
159 -- get /validate the corporate books for each asset error on mismatch
160 -- do not allow transfer between books
161
162 -- set up sob/mrc info
163 -- call the cache for the primary transaction book
164 if (NOT fa_cache_pkg.fazcbc(X_book => px_src_asset_hdr_rec.book_type_code, p_log_level_rec => g_log_level_rec)) then
165 raise inv_xfr_err;
166 end if;
167
168 px_src_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
169 px_src_asset_hdr_rec.set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
170
171 -- reset the global here in case cache was not initialized at
172 -- time this package was instantiated
173 g_release := fa_cache_pkg.fazarel_release;
174
175 -- Account for transaction submitted from a responsibility
176 -- that is not tied to a SOB_ID by getting the value from
177 -- the book struct
178
179 -- Get the book type code P,R or N
180 if not fa_cache_pkg.fazcsob
181 (X_set_of_books_id => px_src_asset_hdr_rec.set_of_books_id,
182 X_mrc_sob_type_code => l_mrc_sob_type_code, p_log_level_rec => g_log_level_rec) then
183 raise inv_xfr_err;
184 end if;
185
186 -- Error out if the program is submitted from the Reporting Responsibility
187 -- No transaction permitted directly on reporting books.
188
189 IF l_mrc_sob_type_code = 'R' THEN
190 fa_srvr_msg.add_message
191 (NAME => 'MRC_OSP_INVALID_BOOK_TYPE',
192 CALLING_FN => l_calling_fn, p_log_level_rec => g_log_level_rec);
193 raise inv_xfr_err;
194 END IF;
195
196 -- end initial MRC validation
197
198
199 -- additional validation migrated from the external transfers program
200 -- do not allow transfers between books
201 if (px_src_asset_hdr_rec.book_type_code <>
202 px_dest_asset_hdr_rec.book_type_code) then
203 fa_srvr_msg.add_message(
204 calling_fn => l_calling_fn,
205 name => 'FA_TFRINV_NOT_BTWN_BOOKS',
206 token1 => 'BOOK',
207 value1 => px_dest_asset_hdr_rec.book_type_code, p_log_level_rec => g_log_level_rec);
208 raise inv_xfr_err;
209 end if;
210
211 -- From and To Asset Ids Identical
212 if (px_src_asset_hdr_rec.asset_id = px_dest_asset_hdr_rec.asset_id) then
213 fa_srvr_msg.add_message(
214 calling_fn => l_calling_fn,
215 name => 'FA_TFRINV_NOT_SAME_ASSET', p_log_level_rec => g_log_level_rec);
216 raise inv_xfr_err;
217 end if;
218
219 l_inv_trans_rec.transaction_type := 'INVOICE TRANSFER';
220
221
222 FA_INVOICE_TRANSACTIONS_PKG.Insert_Row
223 (X_Rowid => l_rowid,
224 X_Invoice_Transaction_Id => l_inv_trans_rec.invoice_transaction_id ,
225 X_Book_Type_Code => px_src_asset_hdr_rec.book_type_code,
226 X_Transaction_Type => l_inv_trans_rec.transaction_type,
227 X_Date_Effective => sysdate,
228 X_Calling_Fn => l_calling_fn
229 ,p_log_level_rec => g_log_level_rec);
230
231 -- if we wish to validate any info such as same subtype
232 -- on both assets we should do it here. Currently,
233 -- all trx/amort info will default from the adjustment api
234 -- for each asset and we will allow transfer between
235 -- different asset types as well as expensing one side
236 -- while amortizing the other
237
238
239 -- set up the invoice tables for the source and destination assets
240 -- initially src i sset the parameter, then we load the inv_indicator
241 -- for each row. Then we set the destination table to the same values
242 -- and subsequently null out source line id and flip the sign of fa cost
243 -- and repopulate the indicator which gets nulls our for some reason
244
245 l_src_inv_tbl := p_inv_tbl;
246
247 for l_inv_index in 1..l_src_inv_tbl.count loop
248
249 if not FA_UTIL_PVT.get_inv_rec
250 (px_inv_rec => l_src_inv_tbl(l_inv_index),
251 p_mrc_sob_type_code => 'P',
252 p_set_of_books_id => null,
253 p_log_level_rec => g_log_level_rec) then raise inv_xfr_err;
254 end if;
255
256 -- BUG#
257 -- handle payables cost here...
258 if (p_inv_tbl(l_inv_index).payables_cost is null) then
259 if (l_src_inv_tbl(l_inv_index).fixed_assets_cost <> 0) then
260 l_src_inv_tbl(l_inv_index).payables_cost := l_src_inv_tbl(l_inv_index).payables_cost *
261 (p_inv_tbl(l_inv_index).fixed_assets_cost/
262 l_src_inv_tbl(l_inv_index).fixed_assets_cost);
263 else
264 l_src_inv_tbl(l_inv_index).payables_cost := 0;
265 end if;
266 else
267 l_dest_inv_tbl(l_inv_index).payables_cost := p_inv_tbl(l_inv_index).payables_cost;
268 end if;
269
270 if (p_inv_tbl(l_inv_index).fixed_assets_cost is null) then
271 fa_srvr_msg.add_message(
272 calling_fn => l_calling_fn,
273 name => 'FA_TFRINV_NONE_TFR_COST', p_log_level_rec => g_log_level_rec);
274 end if;
275
276 l_src_inv_tbl(l_inv_index).fixed_assets_cost := p_inv_tbl(l_inv_index).fixed_assets_cost;
277
278 -- added for SLA
279 l_src_inv_tbl(l_inv_index).source_dest_code := 'SOURCE';
280
281 end loop;
282
283 if (g_log_level_rec.statement_level) then
284 fa_debug_pkg.add(l_calling_fn,
285 'l_src_inv_tbl.count',
286 l_src_inv_tbl.count, p_log_level_rec => g_log_level_rec);
287 fa_debug_pkg.add(l_calling_fn,
288 'inv_tbl(1).payables_cost',
289 p_inv_tbl(1).payables_cost);
290 end if;
291
292
293 l_dest_inv_tbl := l_src_inv_tbl;
294
295 for l_inv_index in 1..l_dest_inv_tbl.count loop
296
297 -- BUG#
298 -- handle the payables cost here too...
299 -- in previous releases, full transfers resulted in all payables cost
300 -- moving to the destination asset where as partial transfers resulted
301 -- in all payables cost remaining in the source. To get around the
302 -- discrepancies created by the large differences in the amounts going
303 -- to the different (flexbuil) accounts for this, a subsequent update
304 -- was done to insure accounts matched. However, now that we're allowing
305 -- this to occur between assets which are depreciated and those which aren't
306 -- this isn't sufficient.
307 --
308 -- new behavior will transfer an equal proportion of the payables cost
309 -- any descrepancies between the two will be spread based on the
310 -- fixed assets cost with the differences having same ratios
311 --
312
313 if (p_inv_tbl(l_inv_index).payables_cost is null) then
314 if (l_dest_inv_tbl(l_inv_index).fixed_assets_cost <> 0) then
315 l_dest_inv_tbl(l_inv_index).payables_cost := -l_src_inv_tbl(l_inv_index).payables_cost *
316 (l_src_inv_tbl(l_inv_index).fixed_assets_cost/
317 l_dest_inv_tbl(l_inv_index).fixed_assets_cost);
318 else
319 l_dest_inv_tbl(l_inv_index).payables_cost := 0;
320 end if;
321 else
322 l_dest_inv_tbl(l_inv_index).payables_cost := -p_inv_tbl(l_inv_index).payables_cost ;
323 end if;
324
325
326 l_dest_inv_tbl(l_inv_index).fixed_assets_cost := -l_src_inv_tbl(l_inv_index).fixed_assets_cost;
327 l_dest_inv_tbl(l_inv_index).prior_source_line_id := l_dest_inv_tbl(l_inv_index).source_line_id;
328 l_dest_inv_tbl(l_inv_index).source_line_id := null;
329
330
331 if (g_log_level_rec.statement_level) then
332 fa_debug_pkg.add(l_calling_fn,
333 'l_src_inv_tbl(' || to_char(l_inv_index) || ').source_line_id',
334 l_src_inv_tbl(l_inv_index).source_line_id);
335 fa_debug_pkg.add(l_calling_fn,
336 'l_src_inv_tbl(' || to_char(l_inv_index) || ').inv_indicator',
337 l_src_inv_tbl(l_inv_index).inv_indicator);
338 fa_debug_pkg.add(l_calling_fn,
339 'l_src_inv_tbl(' || to_char(l_inv_index) || ').fixed_assets_cost',
340 l_src_inv_tbl(l_inv_index).fixed_assets_cost);
341
342 fa_debug_pkg.add(l_calling_fn,
343 'l_dest_inv_tbl(' || to_char(l_inv_index) || ').source_line_id',
344 l_dest_inv_tbl(l_inv_index).source_line_id);
345 fa_debug_pkg.add(l_calling_fn,
346 'l_dest_inv_tbl(' || to_char(l_inv_index) || ').inv_indicator',
347 l_dest_inv_tbl(l_inv_index).inv_indicator);
348 fa_debug_pkg.add(l_calling_fn,
349 'l_dest_inv_tbl(' || to_char(l_inv_index) || ').fixed_assets_cost',
350 l_dest_inv_tbl(l_inv_index).fixed_assets_cost);
351 end if;
352
353
354 end loop;
355
356
357 -- SLA: for inter asset transfers of the same asset type,
358 -- we need to create the event here - since the THIDs are the unique
359 -- identifiers, we need to derive them first
360 --
361 -- CORRECTION: we will now roll non-like type transfer into cap event
362
363 select asset_type,
364 current_units
365 into l_from_asset_type,
366 l_from_current_units
367 from fa_additions_b
368 where asset_id = px_src_asset_hdr_rec.asset_id;
369
370 select asset_type,
371 current_units
372 into l_to_asset_type,
373 l_to_current_units
374 from fa_additions_b
375 where asset_id = px_dest_asset_hdr_rec.asset_id;
376
377
378 l_src_asset_type_rec.asset_type := l_from_asset_type;
379 l_dest_asset_type_rec.asset_type := l_to_asset_type;
380
381 -- Also need to load the date here to make it available to the event api
382 -- load the period struct for current period info
383 if not FA_UTIL_PVT.get_period_rec
384 (p_book => px_src_asset_hdr_rec.book_type_code,
385 p_effective_date => NULL,
386 x_period_rec => l_period_rec,
387 p_log_level_rec => g_log_level_rec) then
388 raise inv_xfr_err;
389 end if;
390
391
392 l_transaction_date := greatest(l_period_rec.calendar_period_open_date,
393 least(sysdate,l_period_rec.calendar_period_close_date));
394
395 if (px_src_trans_rec.transaction_subtype = 'AMORTIZED') then
396 px_src_trans_rec.transaction_date_entered :=
397 nvl(px_src_trans_rec.amortization_start_date, l_transaction_date);
398 else
399 px_src_trans_rec.transaction_date_entered := l_transaction_date;
400 end if;
401
402 if (px_dest_trans_rec.transaction_subtype = 'AMORTIZED') then
403 px_dest_trans_rec.transaction_date_entered :=
404 nvl(px_dest_trans_rec.amortization_start_date, l_transaction_date);
405 else
406 px_dest_trans_rec.transaction_date_entered := l_transaction_date;
407 end if;
408
409 px_src_trans_rec.transaction_date_entered :=
410 to_date(to_char(px_src_trans_rec.transaction_date_entered, 'DD/MM/YYYY'),'DD/MM/YYYY');
411
412 px_dest_trans_rec.transaction_date_entered :=
413 to_date(to_char(px_dest_trans_rec.transaction_date_entered, 'DD/MM/YYYY'),'DD/MM/YYYY');
414
415 -- fetch value for the trx_reference_id from sequence
416 -- insure we load the trx_ref_idinto dest th row too!!!
417
418 select fa_trx_references_s.nextval
419 into px_src_trans_rec.trx_reference_id
420 from dual;
421
422 px_dest_trans_rec.trx_reference_id :=
423 px_src_trans_rec.trx_reference_id;
424
425 px_src_trans_rec.transaction_key := 'IT';
426 px_dest_trans_rec.transaction_key := 'IT';
427
428 -- ER 14644811 : Call trx approval for both src and dest
429 if not FA_TRX_APPROVAL_PKG.faxcat
430 (X_book => px_src_asset_hdr_rec.book_type_code,
431 X_asset_id => px_src_asset_hdr_rec.asset_id,
432 X_trx_type => px_src_trans_rec.transaction_type_code,
433 X_trx_date => px_src_trans_rec.transaction_date_entered,
434 X_init_message_flag => 'NO'
435 , p_log_level_rec => g_log_level_rec) then
436 raise inv_xfr_err;
437 end if;
438
439 if not FA_TRX_APPROVAL_PKG.faxcat
440 (X_book => px_dest_asset_hdr_rec.book_type_code,
441 X_asset_id => px_dest_asset_hdr_rec.asset_id,
442 X_trx_type => px_dest_trans_rec.transaction_type_code,
443 X_trx_date => px_dest_trans_rec.transaction_date_entered,
444 X_init_message_flag => 'NO'
445 , p_log_level_rec => g_log_level_rec) then
446 raise inv_xfr_err;
447 end if;
448
449 -- Populate th_id and who_info after calling faxcat
450 select fa_transaction_headers_s.nextval
451 into px_src_trans_rec.transaction_header_id
452 from dual;
453
454 select fa_transaction_headers_s.nextval
455 into px_dest_trans_rec.transaction_header_id
456 from dual;
457
458 px_src_trans_rec.who_info.creation_date := sysdate;
459 px_src_trans_rec.who_info.last_update_date := sysdate;
460 -- ER 14644811 : End
461
462 if not FA_XLA_EVENTS_PVT.create_dual_transaction_event
463 (p_asset_hdr_rec_src => px_src_asset_hdr_rec,
464 p_asset_hdr_rec_dest => px_dest_asset_hdr_rec,
465 p_asset_type_rec_src => l_src_asset_type_rec,
466 p_asset_type_rec_dest => l_dest_asset_type_rec,
467 px_trans_rec_src => px_src_trans_rec,
468 px_trans_rec_dest => px_dest_trans_rec,
469 p_event_status => NULL,
470 p_calling_fn => l_calling_fn,
471 p_log_level_rec => g_log_level_rec) then
472 raise inv_xfr_err;
473 end if;
474 /*=================================================================
475 Secondary Changes Start
476 If primary and secondary sob_id is different then we need to
477 create/update/delete event for secondary ledger*/
478 l_secondary_sob_id := FA_XLA_EVENTS_PVT.get_secondary_sob_id(px_src_asset_hdr_rec.book_type_code);
479 if(l_secondary_sob_id > 0) then
480 l_secondary_src_asset_hdr_rec := px_src_asset_hdr_rec;
481 l_secondary_dest_asset_hdr_rec := px_dest_asset_hdr_rec;
482 l_secondary_src_trans_rec := px_src_trans_rec;
483 l_secondary_dest_trans_rec := px_dest_trans_rec;
484
485 l_secondary_src_asset_hdr_rec.set_of_books_id := l_secondary_sob_id;
486 l_secondary_dest_asset_hdr_rec.set_of_books_id := l_secondary_sob_id;
487
488 if not FA_XLA_EVENTS_PVT.create_dual_transaction_event
489 (p_asset_hdr_rec_src => l_secondary_src_asset_hdr_rec,
490 p_asset_hdr_rec_dest => l_secondary_dest_asset_hdr_rec,
491 p_asset_type_rec_src => l_src_asset_type_rec,
492 p_asset_type_rec_dest => l_dest_asset_type_rec,
493 px_trans_rec_src => l_secondary_src_trans_rec,
494 px_trans_rec_dest => l_secondary_dest_trans_rec,
495 p_event_status => NULL,
496 p_calling_fn => l_calling_fn,
497 p_log_level_rec => g_log_level_rec) then
498 raise inv_xfr_err;
499 end if;
500 end if;
501 /*Secondary Changes End
502 ==================================================================*/
503 -- insert the transaction link record
504 -- (sequence will be used in table handler)
505 -- note that not all values are 100% here as the adjustment
506 -- API could reset the subtype, etc
507
508 fa_trx_references_pkg.insert_row
509 (X_Rowid => l_rowid,
510 X_Trx_Reference_Id => px_src_trans_rec.trx_reference_id,
511 X_Book_Type_Code => px_src_asset_hdr_rec.book_type_code,
512 X_Src_Asset_Id => px_src_asset_hdr_rec.asset_id,
513 X_Src_Transaction_Header_Id => px_src_trans_rec.transaction_header_id,
514 X_Dest_Asset_Id => px_dest_asset_hdr_rec.asset_id,
515 X_Dest_Transaction_Header_Id => px_dest_trans_rec.transaction_header_id,
516 X_Member_Asset_Id => null,
517 X_Member_Transaction_Header_Id => null,
518 X_Transaction_Type => 'INVOICE TRANSFER',
519 X_Src_Transaction_Subtype => px_src_trans_rec.transaction_subtype,
520 X_Dest_Transaction_Subtype => px_dest_trans_rec.transaction_subtype,
521 X_Src_Amortization_Start_Date => px_src_trans_rec.amortization_start_date,
522 X_Dest_Amortization_Start_Date => px_dest_trans_rec.amortization_start_date,
523 X_Reserve_Transfer_Amount => null,
524 X_Src_Expense_Amount => null,
525 X_Dest_Expense_Amount => null,
526 X_Src_Eofy_Reserve => null,
527 X_Dest_Eofy_Reserve => null,
528 X_event_id => px_src_trans_rec.event_id,
529 X_Invoice_Transaction_Id => l_inv_trans_rec.invoice_transaction_id,
530 X_Creation_Date => px_src_trans_rec.who_info.creation_date,
531 X_Created_By => px_src_trans_rec.who_info.created_by,
532 X_Last_Update_Date => px_src_trans_rec.who_info.last_update_date,
533 X_Last_Updated_By => px_src_trans_rec.who_info.last_updated_by,
534 X_Last_Update_Login => px_src_trans_rec.who_info.last_update_login,
535 X_Return_Status => l_return_status_bool,
536 X_Calling_Fn => l_calling_fn,
537 p_log_level_rec => g_log_level_rec);
538
539 -- Bug 8862296 Changes start here.
540 OPEN C_GET_SOURCE_GROUP;
541 FETCH C_GET_SOURCE_GROUP into l_source_group_asset_id;
542 CLOSE C_GET_SOURCE_GROUP;
543
544 OPEN C_GET_DEST_GROUP;
545 FETCH C_GET_DEST_GROUP into l_dest_group_asset_id;
546 CLOSE C_GET_DEST_GROUP;
547 -- Bug 8862296 Changes end here
548
549 -- call the adjustment api's first for src
550 -- then for destination if successful
551 -- if either fails we rollback everything
552
553 FA_ADJUSTMENT_PUB.do_adjustment
554 (p_api_version => 1.0,
555 p_init_msg_list => FND_API.G_FALSE,
556 p_commit => FND_API.G_FALSE,
557 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
558 x_return_status => l_return_status,
559 x_msg_count => x_msg_count,
560 x_msg_data => x_msg_data,
561 p_calling_fn => l_calling_fn,
562 px_trans_rec => px_src_trans_rec,
563 px_asset_hdr_rec => px_src_asset_hdr_rec,
564 p_asset_fin_rec_adj => l_src_asset_fin_rec_adj,
565 x_asset_fin_rec_new => l_src_asset_fin_rec_new,
566 x_asset_fin_mrc_tbl_new => l_src_asset_fin_mrc_tbl_new,
567 px_inv_trans_rec => l_inv_trans_rec,
568 px_inv_tbl => l_src_inv_tbl,
569 p_asset_deprn_rec_adj => l_src_asset_deprn_rec_adj,
570 x_asset_deprn_rec_new => l_src_asset_deprn_rec_new,
571 x_asset_deprn_mrc_tbl_new => l_src_asset_deprn_mrc_tbl_new,
572 p_group_reclass_options_rec => l_group_reclass_options_rec
573 );
574
575 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
576 raise inv_xfr_err;
577 end if;
578
579 /* Bug 8862296: The following IF condition is to make sure that do_inv_sub_transfer
580 will be called from Process Group Adjustment if Source Group and Destination Group
581 are same, and calling interface is FAXASSET. Thus we are differing destination asset
582 adjustment till Process Group Adjustment for source is completed. If this is current
583 period amortization then cursors to fetch group assets will return null value and
584 following condition fails and we will process destination here itself.*/
585 if (l_source_group_asset_id = l_dest_group_asset_id and px_dest_trans_rec.calling_interface = 'FAXASSET') then
586 null;
587 else
588 -- copy in the invoice thid and copy the exchange rate info
589 -- was already populated from the invoice engine for src
590
591 -- R12: table is now nested so copy it in the rec
592 -- also note the outcoming values for cost in this array
593 -- will be for the delta amounts (new amounts for new line)
594
595 for i in 1..l_dest_inv_tbl.count loop
596 l_dest_inv_tbl(i).inv_rate_tbl := l_src_inv_tbl(i).inv_rate_tbl;
597 end loop;
598
599 -- ER 14644811 : Redefault who_info for the dest transaction
600 px_dest_trans_rec.who_info.creation_date := sysdate;
601 px_dest_trans_rec.who_info.last_update_date := sysdate;
602
603 if not do_inv_sub_transfer(p_src_trans_rec => px_src_trans_rec,
604 p_src_asset_hdr_rec => px_src_asset_hdr_rec,
605 p_dest_trans_rec => px_dest_trans_rec,
606 p_dest_asset_hdr_rec => px_dest_asset_hdr_rec,
607 p_inv_tbl => l_dest_inv_tbl,
608 p_inv_trans_rec => l_inv_trans_rec,
609 p_log_level_rec => g_log_level_rec) then
610 raise inv_xfr_err;
611 end if;
612 end if;
613
614 -- commit if p_commit is TRUE.
615 if (fnd_api.to_boolean (p_commit)) then
616 COMMIT WORK;
617 end if;
618
619 x_return_status := FND_API.G_RET_STS_SUCCESS;
620
621 EXCEPTION
622 -- no need to call dump_debug_messages since they are already
623 -- loaded from adjustment api
624 when No_Data_Found then
625
626 ROLLBACK to do_transfer;
627
628 fa_srvr_msg.add_message(
629 CALLING_FN => l_calling_fn,
630 NAME => 'FA_TFRINV_NO_COST_CLR', p_log_level_rec => g_log_level_rec);
631
632 FND_MSG_PUB.count_and_get (
633 p_count => x_msg_count,
634 p_data => x_msg_data
635 );
636
637 x_return_status := FND_API.G_RET_STS_ERROR;
638
639 when inv_xfr_err then
640 ROLLBACK to do_transfer;
641
642 fa_srvr_msg.add_message(
643 calling_fn => l_calling_fn, p_log_level_rec => g_log_level_rec);
644
645 FND_MSG_PUB.count_and_get (
646 p_count => x_msg_count,
647 p_data => x_msg_data
648 );
649
650 x_return_status := FND_API.G_RET_STS_ERROR;
651
652 when others then
653 ROLLBACK to do_transfer;
654
655 fa_srvr_msg.add_sql_error(
656 calling_fn => l_calling_fn, p_log_level_rec => g_log_level_rec);
657
658 FND_MSG_PUB.count_and_get (
659 p_count => x_msg_count,
660 p_data => x_msg_data
661 );
662
663 x_return_status := FND_API.G_RET_STS_ERROR;
664
665 END do_transfer;
666
667 ---------------------------------------------------------------------------
668
669 FUNCTION do_all_books
670 (p_src_trans_rec IN FA_API_TYPES.trans_rec_type,
671 p_src_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
672 p_dest_trans_rec IN FA_API_TYPES.trans_rec_type,
673 p_dest_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
674 p_period_counter IN NUMBER,
675 p_ccid IN NUMBER,
676 p_src_asset_type IN VARCHAR2,
677 p_dest_asset_type IN VARCHAR2,
678 p_src_current_units IN NUMBER,
679 p_dest_current_units IN NUMBER,
680 p_calling_fn IN varchar2
681 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type) return boolean is
682
683 l_src_interco_amount number;
684 l_src_cost_amount number;
685
686 l_interco_amount number;
687 l_cost_amount number;
688 l_delta_amount number;
689
690 l_reporting_flag varchar2(1);
691 l_sob_index number;
692 l_sob_tbl FA_CACHE_PKG.fazcrsob_sob_tbl_type;
693
694 l_adj fa_adjust_type_pkg.fa_adj_row_struct;
695 l_set_of_books_id number;
696
697 cursor c_total_amount
698 (p_asset_id number,
699 p_book_type_code varchar2,
700 p_period_counter number,
701 p_thid number,
702 p_adj_type varchar2) is
703 select sum(decode(adjustment_type,
704 'INTERCO AR', decode(debit_credit_flag,
705 'DR', adjustment_amount,
706 -adjustment_amount),
707 'INTERCO AP', decode(debit_credit_flag,
708 'CR', adjustment_amount,
709 -adjustment_amount),
710 decode(debit_credit_flag,
711 'CR', adjustment_amount,
712 -adjustment_amount)))
713 from fa_adjustments
714 where asset_id = p_asset_id
715 and book_type_code = p_book_type_code
716 and period_counter_created = p_period_counter
717 and transaction_header_id = p_thid
718 and adjustment_type like p_adj_type;
719
720 cursor c_total_amount_mrc
721 (p_asset_id number,
722 p_book_type_code varchar2,
723 p_period_counter number,
724 p_thid number,
725 p_adj_type varchar2) is
726 select sum(decode(adjustment_type,
727 'INTERCO AR', decode(debit_credit_flag,
728 'DR', adjustment_amount,
729 -adjustment_amount),
730 'INTERCO AP', decode(debit_credit_flag,
731 'CR', adjustment_amount,
732 -adjustment_amount),
733 decode(debit_credit_flag,
734 'CR', adjustment_amount,
735 -adjustment_amount)))
736 from fa_mc_adjustments
737 where asset_id = p_asset_id
738 and book_type_code = p_book_type_code
739 and period_counter_created = p_period_counter
740 and transaction_header_id = p_thid
741 and adjustment_type like p_adj_type
742 and set_of_books_id = l_set_of_books_id;
743
744 l_calling_fn VARCHAR2(35) := 'fa_inv_xfr_pub.do_all_books';
745 inv_xfr_err EXCEPTION;
746
747
748 begin
749
750 if (p_log_level_rec.statement_level) then
751 fa_debug_pkg.add(l_calling_fn,
752 'calling',
753 'fazcrsob', p_log_level_rec => p_log_level_rec);
754 end if;
755
756
757 -- call the sob cache to get the table of sob_ids
758 if not FA_CACHE_PKG.fazcrsob
759 (x_book_type_code => p_src_asset_hdr_rec.book_type_code,
760 x_sob_tbl => l_sob_tbl, p_log_level_rec => p_log_level_rec) then
761 raise inv_xfr_err;
762 end if;
763
764 if (p_log_level_rec.statement_level) then
765 fa_debug_pkg.add(l_calling_fn,
766 'looping through',
767 'set of books', p_log_level_rec => p_log_level_rec);
768 end if;
769
770 FOR l_sob_index in 0..l_sob_tbl.count LOOP
771
772 if (l_sob_index = 0) then
773 l_reporting_flag := 'P';
774 l_set_of_books_id := fa_cache_pkg.fazcbc_record.set_of_books_id;
775 else
776 l_reporting_flag := 'R';
777 l_set_of_books_id := l_sob_tbl(l_sob_index);
778 end if;
779
780 if (p_log_level_rec.statement_level) then
781 fa_debug_pkg.add(l_calling_fn,
782 'processing',
783 'cursor to get sum of amounts', p_log_level_rec => p_log_level_rec);
784 end if;
785
786 -- get the interco and cost totals
787 if (l_sob_index = 0) then
788 open c_total_amount
789 (p_asset_id => p_src_asset_hdr_rec.asset_id,
790 p_book_type_code => p_src_asset_hdr_rec.book_type_code,
791 p_period_counter => p_period_counter,
792 p_thid => p_src_trans_rec.transaction_header_id,
793 p_adj_type => '%INTERCO%');
794 fetch c_total_amount into l_interco_amount;
795 close c_total_amount;
796
797 open c_total_amount
798 (p_asset_id => p_src_asset_hdr_rec.asset_id,
799 p_book_type_code => p_src_asset_hdr_rec.book_type_code,
800 p_period_counter => p_period_counter,
801 p_thid => p_src_trans_rec.transaction_header_id,
802 p_adj_type => '%COST%');
803 fetch c_total_amount into l_cost_amount;
804 close c_total_amount;
805 else
806 open c_total_amount_mrc
807 (p_asset_id => p_src_asset_hdr_rec.asset_id,
808 p_book_type_code => p_src_asset_hdr_rec.book_type_code,
809 p_period_counter => p_period_counter,
810 p_thid => p_src_trans_rec.transaction_header_id,
811 p_adj_type => '%INTERCO%');
812 fetch c_total_amount_mrc into l_interco_amount;
813 close c_total_amount_mrc;
814
815 open c_total_amount_mrc
816 (p_asset_id => p_src_asset_hdr_rec.asset_id,
817 p_book_type_code => p_src_asset_hdr_rec.book_type_code,
818 p_period_counter => p_period_counter,
819 p_thid => p_src_trans_rec.transaction_header_id,
820 p_adj_type => '%COST%');
821 fetch c_total_amount_mrc into l_cost_amount;
822 close c_total_amount_mrc;
823 end if;
824
825 l_delta_amount := l_cost_amount - l_interco_amount;
826
827 if (p_log_level_rec.statement_level) then
828 fa_debug_pkg.add(l_calling_fn,
829 'src cost amount',
830 l_cost_amount, p_log_level_rec => p_log_level_rec);
831 fa_debug_pkg.add(l_calling_fn,
832 'src interco amount',
833 l_interco_amount, p_log_level_rec => p_log_level_rec);
834 fa_debug_pkg.add(l_calling_fn,
835 'l_delta_amount',
836 l_delta_amount, p_log_level_rec => p_log_level_rec);
837 end if;
838
839 if (l_delta_amount <> 0) then
840
841 -- insert the difference as clearing to the ccid found above
842 -- first the source
843
844 if (p_log_level_rec.statement_level) then
845 fa_debug_pkg.add(l_calling_fn,
846 'setting up',
847 'adj struct for src', p_log_level_rec => p_log_level_rec);
848 end if;
849
850
851 l_adj.transaction_header_id := p_src_trans_rec.transaction_header_id;
852 l_adj.asset_id := p_src_asset_hdr_rec.asset_id;
853 l_adj.book_type_code := p_src_asset_hdr_rec.book_type_code;
854 l_adj.period_counter_created := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
855 l_adj.period_counter_adjusted := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
856 l_adj.current_units := p_src_current_units;
857 l_adj.selection_mode := FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
858 l_adj.selection_thid := 0;
859 l_adj.selection_retid := 0;
860 l_adj.leveling_flag := TRUE;
861 l_adj.last_update_date := p_src_trans_rec.who_info.last_update_date;
862
863 l_adj.flush_adj_flag := FALSE;
864 l_adj.gen_ccid_flag := FALSE;
865 l_adj.annualized_adjustment := 0;
866 l_adj.asset_invoice_id := 0;
867 l_adj.code_combination_id := p_ccid;
868 l_adj.distribution_id := 0;
869
870 l_adj.deprn_override_flag := '';
871
872 if (p_src_asset_type = 'CIP') then
873 l_adj.source_type_code := 'CIP ADJUSTMENT';
874 else
875 l_adj.source_type_code := 'ADJUSTMENT';
876 end if;
877
878 l_adj.adjustment_type := 'COST CLEARING';
879
880 if l_delta_amount > 0 then
881 l_adj.debit_credit_flag := 'DR';
882 l_adj.adjustment_amount := l_delta_amount;
883 else
884 l_adj.debit_credit_flag := 'CR';
885 l_adj.adjustment_amount := -l_delta_amount;
886 end if;
887
888 l_adj.mrc_sob_type_code := l_reporting_flag ;
889 l_adj.set_of_books_id := l_set_of_books_id;
890
891 if not FA_INS_ADJUST_PKG.faxinaj
892 (l_adj,
893 p_src_trans_rec.who_info.last_update_date,
894 p_src_trans_rec.who_info.last_updated_by,
895 p_src_trans_rec.who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
896 raise inv_xfr_err;
897 end if;
898
899 -- then the destination
900 if (p_log_level_rec.statement_level) then
901 fa_debug_pkg.add(l_calling_fn,
902 'setting up',
903 'adj struct for dest', p_log_level_rec => p_log_level_rec);
904 end if;
905
906 l_adj.transaction_header_id := p_dest_trans_rec.transaction_header_id;
907 l_adj.asset_id := p_dest_asset_hdr_rec.asset_id;
908 l_adj.book_type_code := p_dest_asset_hdr_rec.book_type_code;
909 l_adj.period_counter_created := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
910 l_adj.period_counter_adjusted := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
911 l_adj.current_units := p_dest_current_units;
912 l_adj.selection_mode := FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
913 l_adj.selection_thid := 0;
914 l_adj.selection_retid := 0;
915 l_adj.leveling_flag := TRUE;
916 l_adj.last_update_date := p_dest_trans_rec.who_info.last_update_date;
917
918 l_adj.flush_adj_flag := TRUE;
919 l_adj.gen_ccid_flag := FALSE;
920 l_adj.annualized_adjustment := 0;
921 l_adj.asset_invoice_id := 0;
922 l_adj.code_combination_id := p_ccid;
923 l_adj.distribution_id := 0;
924
925 l_adj.deprn_override_flag := '';
926
927 if (p_dest_asset_type = 'CIP') then
928 l_adj.source_type_code := 'CIP ADJUSTMENT';
929 else
930 l_adj.source_type_code := 'ADJUSTMENT';
931 end if;
932
933 l_adj.adjustment_type := 'COST CLEARING';
934
935 if l_delta_amount > 0 then
936 l_adj.debit_credit_flag := 'CR';
937 l_adj.adjustment_amount := l_delta_amount;
938 else
939 l_adj.debit_credit_flag := 'DR';
940 l_adj.adjustment_amount := -l_delta_amount;
941 end if;
942
943 l_adj.mrc_sob_type_code := l_reporting_flag ;
944 l_adj.set_of_books_id := l_set_of_books_id;
945
946 if not FA_INS_ADJUST_PKG.faxinaj
947 (l_adj,
948 p_src_trans_rec.who_info.last_update_date,
949 p_src_trans_rec.who_info.last_updated_by,
950 p_src_trans_rec.who_info.last_update_login, p_log_level_rec => p_log_level_rec) then
951 raise inv_xfr_err;
952 end if;
953
954
955 end if;
956
957 END LOOP;
958
959 return true;
960
961 exception
962 when inv_xfr_err then
963 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
964 return false;
965
966 when others then
967 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
968 return false;
969
970 end do_all_books;
971
972 -- Bug 8862296 Changes start here.
973 FUNCTION do_inv_sub_transfer
974 (p_src_trans_rec IN FA_API_TYPES.trans_rec_type,
975 p_src_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
976 p_dest_trans_rec IN FA_API_TYPES.trans_rec_type,
977 p_dest_asset_hdr_rec IN FA_API_TYPES.asset_hdr_rec_type,
978 p_inv_tbl IN FA_API_TYPES.inv_tbl_type,
979 p_inv_trans_rec IN FA_API_TYPES.inv_trans_rec_type,
980 p_log_level_rec IN FA_API_TYPES.log_level_rec_type) return boolean IS
981
982 x_msg_count NUMBER;
983 x_msg_data VARCHAR2(1000);
984 l_calling_fn VARCHAR2(35) := 'fa_inv_xfr_pub.do_inv_sub_transfer';
985
986 l_src_trans_rec FA_API_TYPES.trans_rec_type := p_src_trans_rec;
987 l_src_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type := p_src_asset_hdr_rec;
988 l_dest_trans_rec FA_API_TYPES.trans_rec_type := p_dest_trans_rec;
989 l_dest_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type := p_dest_asset_hdr_rec;
990 l_inv_tbl FA_API_TYPES.inv_tbl_type := p_inv_tbl;
991 l_inv_trans_rec FA_API_TYPES.inv_trans_rec_type := p_inv_trans_rec;
992
993 l_dest_asset_fin_rec_adj FA_API_TYPES.asset_fin_rec_type;
994 l_dest_asset_fin_rec_new FA_API_TYPES.asset_fin_rec_type;
995 l_dest_asset_fin_mrc_tbl_new FA_API_TYPES.asset_fin_tbl_type;
996 l_dest_asset_deprn_rec_adj FA_API_TYPES.asset_deprn_rec_type;
997 l_dest_asset_deprn_rec_new FA_API_TYPES.asset_deprn_rec_type;
998 l_dest_asset_deprn_mrc_tbl_new FA_API_TYPES.asset_deprn_tbl_type;
999 l_group_reclass_options_rec FA_API_TYPES.group_reclass_options_rec_type;
1000
1001 l_from_asset_type varchar2(15);
1002 l_to_asset_type varchar2(15);
1003 l_from_current_units number;
1004 l_to_current_units number;
1005
1006 l_clearing_ccid number;
1007 l_interco_impact boolean;
1008
1009 l_current_period_counter NUMBER;
1010 l_return_status VARCHAR2(1);
1011
1012 inv_xfr_err EXCEPTION;
1013
1014 BEGIN
1015
1016 if (p_log_level_rec.statement_level) then
1017 fa_debug_pkg.add(l_calling_fn,'Before Calling Do_Adjustment for','DESTINATION', p_log_level_rec => p_log_level_rec);
1018 end if;
1019
1020 -- call do_adjustment for dest asset
1021 FA_ADJUSTMENT_PUB.do_adjustment
1022 (p_api_version => 1.0,
1023 p_init_msg_list => FND_API.G_FALSE,
1024 p_commit => FND_API.G_FALSE,
1025 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
1026 x_return_status => l_return_status,
1027 x_msg_count => x_msg_count,
1028 x_msg_data => x_msg_data,
1029 p_calling_fn => l_calling_fn,
1030 px_trans_rec => l_dest_trans_rec,
1031 px_asset_hdr_rec => l_dest_asset_hdr_rec,
1032 p_asset_fin_rec_adj => l_dest_asset_fin_rec_adj,
1033 x_asset_fin_rec_new => l_dest_asset_fin_rec_new,
1034 x_asset_fin_mrc_tbl_new => l_dest_asset_fin_mrc_tbl_new,
1035 px_inv_trans_rec => l_inv_trans_rec,
1036 px_inv_tbl => l_inv_tbl,
1037 p_asset_deprn_rec_adj => l_dest_asset_deprn_rec_adj,
1038 x_asset_deprn_rec_new => l_dest_asset_deprn_rec_new,
1039 x_asset_deprn_mrc_tbl_new => l_dest_asset_deprn_mrc_tbl_new,
1040 p_group_reclass_options_rec => l_group_reclass_options_rec
1041 );
1042
1043 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1044 raise inv_xfr_err;
1045 end if;
1046
1047 if not FA_ASSET_VAL_PVT.validate_period_of_addition
1048 (p_asset_id => l_src_asset_hdr_rec.asset_id,
1049 p_book => l_src_asset_hdr_rec.book_type_code,
1050 p_mode => 'ABSOLUTE',
1051 px_period_of_addition => l_src_asset_hdr_rec.period_of_addition,
1052 p_log_level_rec => p_log_level_rec) then
1053 raise inv_xfr_err;
1054 end if;
1055 if not FA_ASSET_VAL_PVT.validate_period_of_addition
1056 (p_asset_id => l_dest_asset_hdr_rec.asset_id,
1057 p_book => l_dest_asset_hdr_rec.book_type_code,
1058 p_mode => 'ABSOLUTE',
1059 px_period_of_addition => l_dest_asset_hdr_rec.period_of_addition,
1060 p_log_level_rec => p_log_level_rec) then
1061 raise inv_xfr_err;
1062 end if;
1063
1064 if (p_log_level_rec.statement_level) then
1065 fa_debug_pkg.add(l_calling_fn,'src.period_of_addition',l_src_asset_hdr_rec.period_of_addition, p_log_level_rec => p_log_level_rec);
1066 fa_debug_pkg.add(l_calling_fn,'dest.period_of_addition',l_dest_asset_hdr_rec.period_of_addition, p_log_level_rec => p_log_level_rec);
1067 fa_debug_pkg.add(l_calling_fn,'src.thid',l_src_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
1068 fa_debug_pkg.add(l_calling_fn,'dest.thid',l_dest_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
1069 end if;
1070
1071 -- only fire the intercompany logic for 11i
1072 if (g_release = 11 ) then
1073 if not FA_INTERCO_PVT.validate_inv_interco
1074 (p_src_asset_hdr_rec => l_src_asset_hdr_rec,
1075 p_src_trans_rec => l_src_trans_rec,
1076 p_dest_asset_hdr_rec => l_dest_asset_hdr_rec,
1077 p_dest_trans_rec => l_dest_trans_rec,
1078 p_calling_fn => l_calling_fn,
1079 x_interco_impact => l_interco_impact, p_log_level_rec => p_log_level_rec) then
1080 raise inv_xfr_err;
1081 end if;
1082 end if;
1083
1084 if (p_log_level_rec.statement_level) then
1085 if (l_interco_impact) then
1086 fa_debug_pkg.add(l_calling_fn,'intercompany impact','TRUE', p_log_level_rec => p_log_level_rec);
1087 else
1088 fa_debug_pkg.add(l_calling_fn,'intercompany impact','FALSE', p_log_level_rec => p_log_level_rec);
1089 end if;
1090 end if;
1091
1092 select asset_type,current_units
1093 into l_from_asset_type,l_from_current_units
1094 from fa_additions_b
1095 where asset_id = l_src_asset_hdr_rec.asset_id;
1096
1097 select asset_type,current_units
1098 into l_to_asset_type,l_to_current_units
1099 from fa_additions_b
1100 where asset_id = l_dest_asset_hdr_rec.asset_id;
1101
1102 if ((l_dest_asset_hdr_rec.period_of_addition = 'N' and
1103 l_src_asset_hdr_rec.period_of_addition = 'N' and
1104 l_from_asset_type = l_to_asset_type)
1105 or g_release <> 11) then
1106
1107 if not fa_cache_pkg.fazcbc(X_book => l_src_asset_hdr_rec.book_type_code,
1108 p_log_level_rec => p_log_level_rec) then
1109 raise inv_xfr_err;
1110 end if;
1111
1112 l_current_period_counter := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
1113
1114 delete from fa_adjustments
1115 where asset_id in (l_src_asset_hdr_rec.asset_id,l_dest_asset_hdr_rec.asset_id)
1116 and book_type_code = l_src_asset_hdr_rec.book_type_code
1117 and period_counter_created = l_current_period_counter
1118 and transaction_header_id in (l_dest_trans_rec.transaction_header_id,l_src_trans_rec.transaction_header_id)
1119 and adjustment_type = 'COST CLEARING';
1120
1121 delete from fa_mc_adjustments
1122 where asset_id in (l_src_asset_hdr_rec.asset_id,l_dest_asset_hdr_rec.asset_id)
1123 and book_type_code = l_src_asset_hdr_rec.book_type_code
1124 and period_counter_created = l_current_period_counter
1125 and transaction_header_id in (l_dest_trans_rec.transaction_header_id,l_src_trans_rec.transaction_header_id)
1126 and adjustment_type = 'COST CLEARING';
1127
1128 -- only fire the intercompany logic for pre-R12
1129 if (l_interco_impact and g_release = 11) then
1130 if not fa_interco_pvt.do_all_books(p_src_trans_rec => l_src_trans_rec,
1131 p_src_asset_hdr_rec => l_src_asset_hdr_rec,
1132 p_dest_trans_rec => l_dest_trans_rec,
1133 p_dest_asset_hdr_rec => l_dest_asset_hdr_rec,
1134 p_calling_fn => l_calling_fn,
1135 p_log_level_rec => p_log_level_rec) then
1136 raise inv_xfr_err;
1137 end if;
1138 end if;
1139
1140 elsif (l_dest_asset_hdr_rec.period_of_addition = 'N' and l_src_asset_hdr_rec.period_of_addition = 'N') then
1141
1142 SELECT CODE_COMBINATION_ID
1143 INTO l_clearing_ccid
1144 FROM FA_ADJUSTMENTS
1145 WHERE ASSET_ID = l_src_asset_hdr_rec.asset_id
1146 AND BOOK_TYPE_CODE = l_src_asset_hdr_rec.book_type_code
1147 AND TRANSACTION_HEADER_ID = l_src_trans_rec.transaction_header_id
1148 AND ADJUSTMENT_TYPE = 'COST CLEARING'
1149 AND ROWNUM < 2;
1150
1151 if (l_interco_impact) then
1152
1153 l_current_period_counter := fa_cache_pkg.fazcbc_record.last_period_counter + 1;
1154
1155 delete from fa_adjustments
1156 where asset_id in (l_src_asset_hdr_rec.asset_id,l_dest_asset_hdr_rec.asset_id)
1157 and book_type_code = l_src_asset_hdr_rec.book_type_code
1158 and period_counter_created = l_current_period_counter
1159 and transaction_header_id in (l_dest_trans_rec.transaction_header_id,l_src_trans_rec.transaction_header_id)
1160 and adjustment_type = 'COST CLEARING';
1161
1162 delete from fa_mc_adjustments
1163 where asset_id in (l_src_asset_hdr_rec.asset_id,l_dest_asset_hdr_rec.asset_id)
1164 and book_type_code = l_src_asset_hdr_rec.book_type_code
1165 and period_counter_created = l_current_period_counter
1166 and transaction_header_id in (l_dest_trans_rec.transaction_header_id,l_src_trans_rec.transaction_header_id)
1167 and adjustment_type = 'COST CLEARING';
1168
1169 if not fa_interco_pvt.do_all_books(p_src_trans_rec => l_src_trans_rec,
1170 p_src_asset_hdr_rec => l_src_asset_hdr_rec,
1171 p_dest_trans_rec => l_dest_trans_rec,
1172 p_dest_asset_hdr_rec => l_dest_asset_hdr_rec,
1173 p_calling_fn => l_calling_fn,
1174 p_log_level_rec => p_log_level_rec) then
1175 raise inv_xfr_err;
1176 end if;
1177
1178 if not do_all_books(p_src_trans_rec => l_src_trans_rec,
1179 p_src_asset_hdr_rec => l_src_asset_hdr_rec,
1180 p_dest_trans_rec => l_dest_trans_rec,
1181 p_dest_asset_hdr_rec => l_dest_asset_hdr_rec,
1182 p_period_counter => l_current_period_counter,
1183 p_ccid => l_clearing_ccid,
1184 p_src_asset_type => l_from_asset_type,
1185 p_dest_asset_type => l_to_asset_type,
1186 p_src_current_units => l_from_current_units,
1187 p_dest_current_units => l_to_current_units,
1188 p_calling_fn => l_calling_fn,
1189 p_log_level_rec => p_log_level_rec) then
1190 raise inv_xfr_err;
1191 end if;
1192
1193 else
1194
1195 UPDATE FA_ADJUSTMENTS
1196 SET CODE_COMBINATION_ID = l_clearing_ccid,
1197 DEBIT_CREDIT_FLAG = DECODE(DEBIT_CREDIT_FLAG, 'CR','DR','CR'),
1198 ADJUSTMENT_AMOUNT = -1 * ADJUSTMENT_AMOUNT
1199 WHERE ASSET_ID = l_src_asset_hdr_rec.asset_id
1200 AND BOOK_TYPE_CODE = l_src_asset_hdr_rec.book_type_code
1201 AND TRANSACTION_HEADER_ID = l_src_trans_rec.transaction_header_id
1202 AND ADJUSTMENT_TYPE = 'COST CLEARING';
1203
1204 UPDATE FA_MC_ADJUSTMENTS
1205 SET CODE_COMBINATION_ID = l_clearing_ccid,
1206 DEBIT_CREDIT_FLAG = DECODE(DEBIT_CREDIT_FLAG, 'CR','DR','CR'),
1207 ADJUSTMENT_AMOUNT = -1 * ADJUSTMENT_AMOUNT
1208 WHERE ASSET_ID = l_src_asset_hdr_rec.asset_id
1209 AND BOOK_TYPE_CODE = l_src_asset_hdr_rec.book_type_code
1210 AND TRANSACTION_HEADER_ID = l_src_trans_rec.transaction_header_id
1211 AND ADJUSTMENT_TYPE = 'COST CLEARING';
1212
1213 UPDATE FA_ADJUSTMENTS
1214 SET CODE_COMBINATION_ID = l_clearing_ccid,
1215 DEBIT_CREDIT_FLAG = DECODE(DEBIT_CREDIT_FLAG, 'CR','DR','CR'),
1216 ADJUSTMENT_AMOUNT = -1 * ADJUSTMENT_AMOUNT
1217 WHERE ASSET_ID = l_dest_asset_hdr_rec.asset_id
1218 AND BOOK_TYPE_CODE = l_dest_asset_hdr_rec.book_type_code
1219 AND TRANSACTION_HEADER_ID = l_dest_trans_rec.transaction_header_id
1220 AND ADJUSTMENT_TYPE = 'COST CLEARING';
1221
1222 UPDATE FA_MC_ADJUSTMENTS
1223 SET CODE_COMBINATION_ID = l_clearing_ccid,
1224 DEBIT_CREDIT_FLAG = DECODE(DEBIT_CREDIT_FLAG, 'CR','DR','CR'),
1225 ADJUSTMENT_AMOUNT = -1 * ADJUSTMENT_AMOUNT
1226 WHERE ASSET_ID = l_dest_asset_hdr_rec.asset_id
1227 AND BOOK_TYPE_CODE = l_dest_asset_hdr_rec.book_type_code
1228 AND TRANSACTION_HEADER_ID = l_dest_trans_rec.transaction_header_id
1229 AND ADJUSTMENT_TYPE = 'COST CLEARING';
1230
1231 end if; -- interco impact
1232 end if; -- asset type and period of addition
1233
1234 -- SLA: update the source_dest_code accordingly
1235 -- ideally would do this for cost in FAVIATB.pls but no good way to do so
1236 update fa_adjustments
1237 set source_dest_code = decode(transaction_header_Id,l_src_trans_rec.transaction_header_id, 'SOURCE','DEST')
1238 where transaction_header_id in (l_src_trans_rec.transaction_header_id,l_dest_trans_rec.transaction_header_id);
1239
1240 update fa_mc_adjustments
1241 set source_dest_code =decode(transaction_header_Id,l_src_trans_rec.transaction_header_id, 'SOURCE','DEST')
1242 where transaction_header_id in (l_src_trans_rec.transaction_header_id,l_dest_trans_rec.transaction_header_id);
1243
1244 -- Cannot Transfer Lines between expensed and Non Expensed Assets */
1245 if ((l_from_asset_type = 'EXPENSED' and l_to_asset_type <> 'EXPENSED') OR
1246 (l_from_asset_type <> 'EXPENSED' and l_to_asset_type = 'EXPENSED')) THEN
1247 fa_srvr_msg.add_message(calling_fn => l_calling_fn,
1248 name => 'FA_TFRINV_NO_EXP_NONEXP',
1249 p_log_level_rec => p_log_level_rec);
1250 raise inv_xfr_err;
1251 end if;
1252
1253 return true;
1254
1255 exception
1256 when inv_xfr_err then
1257
1258 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn,
1259 p_log_level_rec => p_log_level_rec);
1260
1261 FND_MSG_PUB.count_and_get (p_count => x_msg_count,
1262 p_data => x_msg_data);
1263
1264 return false;
1265
1266 when others then
1267
1268 fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn,
1269 p_log_level_rec => p_log_level_rec);
1270
1271 FND_MSG_PUB.count_and_get (p_count => x_msg_count,
1272 p_data => x_msg_data);
1273
1274 return false;
1275
1276 END do_inv_sub_transfer;
1277 -- Bug 8862296 Changes end here.
1278
1279 END FA_INV_XFR_PUB;