[Home] [Help]
PACKAGE BODY: APPS.CSE_FA_TXN_PKG
Source
1 PACKAGE BODY cse_fa_txn_pkg AS
2 /* $Header: CSEASTXB.pls 120.7 2006/06/28 22:56:10 brmanesh noship $ */
3
4
5 l_debug varchar2(1) := NVL(fnd_profile.value('cse_debug_option'),'N');
6
7 PROCEDURE debug( p_message IN varchar2) IS
8 BEGIN
9 IF l_debug = 'Y' THEN
10 cse_debug_pub.add(p_message);
11 IF nvl(fnd_global.conc_request_id, -1) <> -1 THEN
12 fnd_file.put_line(fnd_file.log, p_message);
13 END IF;
14 END IF;
15 EXCEPTION
16 WHEN others THEN
17 null;
18 END debug;
19
20 PROCEDURE create_inst_asset(
21 px_inst_asset_rec IN OUT nocopy csi_datastructures_pub.instance_asset_rec,
22 px_csi_txn_rec IN OUT nocopy csi_datastructures_pub.transaction_rec,
23 x_return_status OUT nocopy varchar2)
24 IS
25 l_lookup_tbl csi_asset_pvt.lookup_tbl;
26 l_asset_count_rec csi_asset_pvt.asset_count_rec;
27 l_asset_id_tbl csi_asset_pvt.asset_id_tbl;
28 l_asset_loc_tbl csi_asset_pvt.asset_loc_tbl;
29
30 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
31 l_msg_count number;
32 l_msg_data varchar2(2000);
33 BEGIN
34 x_return_status := fnd_api.g_ret_sts_success;
35
36 px_inst_asset_rec.fa_sync_flag := 'Y';
37
38 csi_asset_pvt.create_instance_asset(
39 p_api_version => 1.0 ,
40 p_commit => fnd_api.g_false,
41 p_init_msg_list => fnd_api.g_true,
42 p_validation_level => fnd_api.g_valid_level_full,
43 p_instance_asset_rec => px_inst_asset_rec,
44 p_txn_rec => px_csi_txn_rec,
45 x_return_status => l_return_status,
46 x_msg_count => l_msg_count,
47 x_msg_data => l_msg_data ,
48 p_lookup_tbl => l_lookup_tbl,
49 p_asset_count_rec => l_asset_count_rec,
50 p_asset_id_tbl => l_asset_id_tbl,
51 p_asset_loc_tbl => l_asset_loc_tbl);
52
53 IF l_return_status <> fnd_api.g_ret_sts_success THEN
54 RAISE fnd_api.g_exc_error;
55 END IF;
56
57 EXCEPTION
58 WHEN fnd_api.g_exc_error THEN
59 x_return_status := fnd_api.g_ret_sts_error;
60 END create_inst_asset;
61
62 PROCEDURE update_inst_asset(
63 px_inst_asset_rec IN OUT nocopy csi_datastructures_pub.instance_asset_rec,
64 px_csi_txn_rec IN OUT nocopy csi_datastructures_pub.transaction_rec,
65 x_return_status OUT nocopy varchar2)
66 IS
67
68 l_lookup_tbl csi_asset_pvt.lookup_tbl;
69 l_asset_count_rec csi_asset_pvt.asset_count_rec;
70 l_asset_id_tbl csi_asset_pvt.asset_id_tbl;
71 l_asset_loc_tbl csi_asset_pvt.asset_loc_tbl;
72
73 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
74 l_msg_count number;
75 l_msg_data varchar2(2000);
76 BEGIN
77
78 x_return_status := fnd_api.g_ret_sts_success;
79
80 IF nvl(px_inst_asset_rec.instance_asset_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
81
82 px_inst_asset_rec.fa_sync_flag := 'Y';
83
84 SELECT object_version_number
85 INTO px_inst_asset_rec.object_version_number
86 FROM csi_i_assets
87 WHERE instance_asset_id = px_inst_asset_rec.instance_asset_id;
88
89 csi_asset_pvt.update_instance_asset (
90 p_api_version => 1.0,
91 p_commit => fnd_api.g_false,
92 p_init_msg_list => fnd_api.g_true,
93 p_validation_level => fnd_api.g_valid_level_full,
94 p_instance_asset_rec => px_inst_asset_rec,
95 p_txn_rec => px_csi_txn_rec,
96 x_return_status => l_return_status,
97 x_msg_count => l_msg_count,
98 x_msg_data => l_msg_data,
99 p_lookup_tbl => l_lookup_tbl,
100 p_asset_count_rec => l_asset_count_rec,
101 p_asset_id_tbl => l_asset_id_tbl,
102 p_asset_loc_tbl => l_asset_loc_tbl);
103
104 IF l_return_status <> fnd_api.g_ret_sts_success THEN
105 RAISE fnd_api.g_exc_error;
106 END IF;
107
108 END IF;
109
110 EXCEPTION
111 WHEN fnd_api.g_exc_error THEN
112 x_return_status := fnd_api.g_ret_sts_error;
113 END update_inst_asset;
114
115
116 FUNCTION total_inst_asset_qty(
117 p_inst_asset_tbl IN csi_datastructures_pub.instance_asset_header_tbl)
118 RETURN number
119 IS
120 l_total_qty number := 0;
121 BEGIN
122 IF p_inst_asset_tbl.COUNT > 0 THEN
123 FOR l_ind IN p_inst_asset_tbl.FIRST .. p_inst_asset_tbl.LAST
124 LOOP
125 l_total_qty := l_total_qty + p_inst_asset_tbl(l_ind).asset_quantity;
126 END LOOP;
127 END IF;
128 RETURN l_total_qty;
129 END total_inst_asset_qty;
130
131
132 PROCEDURE reinstate_inst_asset(
133 p_inst_asset_rec IN csi_datastructures_pub.instance_asset_header_rec,
134 p_units IN number,
135 px_csi_txn_rec IN OUT nocopy csi_datastructures_pub.transaction_rec,
136 x_return_status OUT nocopy varchar2)
137 IS
138
139 l_inst_asset_qry_rec csi_datastructures_pub.instance_asset_query_rec;
140 l_inst_asset_tbl csi_datastructures_pub.instance_asset_header_tbl;
141 l_time_stamp date := null;
142
143 l_total_inst_asset_qty number := 0;
144 l_inst_asset_rec csi_datastructures_pub.instance_asset_rec;
145
146 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
147 l_msg_count number;
148 l_msg_data varchar2(2000);
149
150 BEGIN
151 x_return_status := fnd_api.g_ret_sts_success;
152
153 -- check if there is any instance asset record with in_service
154 l_inst_asset_qry_rec.fa_asset_id := p_inst_asset_rec.fa_asset_id;
155 l_inst_asset_qry_rec.fa_book_type_code := p_inst_asset_rec.fa_book_type_code;
156 l_inst_asset_qry_rec.fa_location_id := p_inst_asset_rec.fa_location_id;
157 l_inst_asset_qry_rec.update_status := 'IN_SERVICE';
158
159 csi_asset_pvt.get_instance_assets(
160 p_api_version => 1.0,
161 p_commit => fnd_api.g_false,
162 p_init_msg_list => fnd_api.g_true,
163 p_validation_level => fnd_api.g_valid_level_full,
164 p_instance_asset_query_rec => l_inst_asset_qry_rec,
165 p_resolve_id_columns => fnd_api.g_false,
166 p_time_stamp => l_time_stamp,
167 x_instance_asset_tbl => l_inst_asset_tbl,
168 x_return_status => l_return_status,
169 x_msg_count => l_msg_count,
170 x_msg_data => l_msg_data);
171
172 IF l_return_status <> fnd_api.g_ret_sts_success THEN
173 RAISE fnd_api.g_exc_error;
174 END IF;
175
176 IF l_inst_asset_tbl.COUNT > 0 THEN
177
178 IF l_inst_asset_tbl.COUNT = 1 THEN
179
180 l_inst_asset_rec.instance_asset_id := l_inst_asset_tbl(1).instance_asset_id;
181 l_inst_asset_rec.asset_quantity := l_inst_asset_tbl(1).asset_quantity + p_units;
182
183 update_inst_asset(
184 px_inst_asset_rec => l_inst_asset_rec,
185 px_csi_txn_rec => px_csi_txn_rec,
186 x_return_status => l_return_status);
187
188 IF l_return_status <> fnd_api.g_ret_sts_success THEN
189 RAISE fnd_api.g_exc_error;
190 END IF;
191
192 ELSE
193 null;
194 END IF;
195
196 ELSE
197
198 l_inst_asset_rec.instance_asset_id := p_inst_asset_rec.instance_asset_id;
199 l_inst_asset_rec.update_status := 'IN_SERVICE';
200 l_inst_asset_rec.asset_quantity := p_units;
201
202 update_inst_asset(
203 px_inst_asset_rec => l_inst_asset_rec,
204 px_csi_txn_rec => px_csi_txn_rec,
205 x_return_status => l_return_status);
206
207 IF l_return_status <> fnd_api.g_ret_sts_success THEN
208 RAISE fnd_api.g_exc_error;
209 END IF;
210
211 END IF;
212
213 EXCEPTION
214 WHEN fnd_api.g_exc_error THEN
215 x_return_status := fnd_api.g_ret_sts_error;
216 END reinstate_inst_asset;
217
218 PROCEDURE retire_inst_asset(
219 p_inst_asset_id IN number,
220 px_csi_txn_rec IN OUT nocopy csi_datastructures_pub.transaction_rec,
221 x_return_status OUT nocopy varchar2)
222 IS
223
224 l_inst_asset_rec csi_datastructures_pub.instance_asset_rec;
225 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
226
227 BEGIN
228 x_return_status := fnd_api.g_ret_sts_success;
229
230 l_inst_asset_rec.instance_asset_id := p_inst_asset_id;
231 l_inst_asset_rec.update_status := 'RETIRED';
232 l_inst_asset_rec.active_end_date := sysdate;
233 l_inst_asset_rec.check_for_instance_expiry := fnd_api.g_false;
234
235 update_inst_asset(
236 px_inst_asset_rec => l_inst_asset_rec,
237 px_csi_txn_rec => px_csi_txn_rec,
238 x_return_status => l_return_status);
239
240 IF l_return_status <> fnd_api.g_ret_sts_success THEN
241 RAISE fnd_api.g_exc_error;
242 END IF;
243
244 EXCEPTION
245 WHEN fnd_api.g_exc_error THEN
246 x_return_status := fnd_api.g_ret_sts_error;
247 END retire_inst_asset;
248
249 PROCEDURE split_inst_asset(
250 p_inst_asset_rec IN csi_datastructures_pub.instance_asset_header_rec,
251 p_quantity IN number,
252 px_csi_txn_rec IN OUT nocopy csi_datastructures_pub.transaction_rec,
253 x_new_inst_asset_id OUT nocopy number,
254 x_return_status OUT nocopy varchar2)
255 IS
256 l_old_asset_qty number;
257 l_inst_asset_rec csi_datastructures_pub.instance_asset_rec;
258 l_lookup_tbl csi_asset_pvt.lookup_tbl;
259 l_asset_count_rec csi_asset_pvt.asset_count_rec;
260 l_asset_id_tbl csi_asset_pvt.asset_id_tbl;
261 l_asset_loc_tbl csi_asset_pvt.asset_loc_tbl;
262
263 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
264 l_msg_count number;
265 l_msg_data varchar2(2000);
266 BEGIN
267
268 x_return_status := fnd_api.g_ret_sts_success;
269
270 l_old_asset_qty := p_inst_asset_rec.asset_quantity - p_quantity;
271
272 l_inst_asset_rec.instance_asset_id := p_inst_asset_rec.instance_asset_id;
273 l_inst_asset_rec.asset_quantity := l_old_asset_qty;
274
275 update_inst_asset(
276 px_inst_asset_rec => l_inst_asset_rec,
277 px_csi_txn_rec => px_csi_txn_rec,
278 x_return_status => l_return_status);
279
280 IF l_return_status <> fnd_api.g_ret_sts_success THEN
281 RAISE fnd_api.g_exc_error;
282 END IF;
283
284 l_inst_asset_rec := null;
285 l_inst_asset_rec.instance_asset_id := fnd_api.g_miss_num;
286 l_inst_asset_rec.instance_id := p_inst_asset_rec.instance_id;
287 l_inst_asset_rec.fa_asset_id := p_inst_asset_rec.fa_asset_id;
288 l_inst_asset_rec.fa_book_type_code := p_inst_asset_rec.fa_book_type_code;
289 l_inst_asset_rec.fa_location_id := p_inst_asset_rec.fa_location_id;
290 l_inst_asset_rec.asset_quantity := p_quantity;
291 l_inst_asset_rec.update_status := 'IN_SERVICE';
292 l_inst_asset_rec.fa_sync_flag := 'Y';
293
294 create_inst_asset(
295 px_inst_asset_rec => l_inst_asset_rec,
296 px_csi_txn_rec => px_csi_txn_rec,
297 x_return_status => l_return_status);
298
299 IF l_return_status <> fnd_api.g_ret_sts_success THEN
300 RAISE fnd_api.g_exc_error;
301 END IF;
302
303 EXCEPTION
304 WHEN fnd_api.g_exc_error THEN
305 x_return_status := fnd_api.g_ret_sts_error;
306 END split_inst_asset;
307
308 PROCEDURE asset_retirement(
309 p_instance_id IN NUMBER,
310 p_book_type_code IN VARCHAR2,
311 p_asset_id IN NUMBER,
312 p_units IN NUMBER,
313 p_trans_date IN DATE,
314 p_trans_by IN NUMBER,
315 px_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
316 x_return_status OUT NOCOPY VARCHAR2,
317 x_error_message OUT NOCOPY VARCHAR2)
318 IS
319
320 l_inst_asset_qry_rec csi_datastructures_pub.instance_asset_query_rec;
321 l_inst_asset_tbl csi_datastructures_pub.instance_asset_header_tbl;
322 l_time_stamp date := null;
323
324 l_new_inst_asset_id number;
325 l_total_inst_asset_qty number := 0;
326
327 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
328 l_msg_count number;
329 l_msg_data varchar2(2000);
330
331 BEGIN
332
333 x_return_status := fnd_api.g_ret_sts_success;
334
335 debug('inside api cse_fa_txn_pkg.asset_retirement');
336
337 l_inst_asset_qry_rec.instance_id := p_instance_id;
338 l_inst_asset_qry_rec.fa_asset_id := p_asset_id;
339 l_inst_asset_qry_rec.fa_book_type_code := p_book_type_code;
340 l_inst_asset_qry_rec.update_status := 'IN_SERVICE';
341
342 csi_asset_pvt.get_instance_assets(
343 p_api_version => 1.0,
344 p_commit => fnd_api.g_false,
345 p_init_msg_list => fnd_api.g_true,
346 p_validation_level => fnd_api.g_valid_level_full,
347 p_instance_asset_query_rec => l_inst_asset_qry_rec,
348 p_resolve_id_columns => fnd_api.g_false,
349 p_time_stamp => l_time_stamp,
350 x_instance_asset_tbl => l_inst_asset_tbl,
351 x_return_status => l_return_status,
352 x_msg_count => l_msg_count,
353 x_msg_data => l_msg_data);
354
355 IF l_return_status <> fnd_api.g_ret_sts_success THEN
356 RAISE fnd_api.g_exc_error;
357 END IF;
358
359 IF l_inst_asset_tbl.COUNT > 0 THEN
360
361 IF nvl(px_txn_rec.transaction_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
362 px_txn_rec.transaction_date := sysdate;
363 px_txn_rec.source_transaction_date := sysdate;
364 px_txn_rec.transaction_type_id := 104;
365 px_txn_rec.source_line_ref := 'ASSET_ID';
366 px_txn_rec.source_line_ref_id := p_asset_id;
367 px_txn_rec.source_group_ref_id := fnd_global.conc_request_id;
368 px_txn_rec.transaction_status_code := cse_datastructures_pub.g_complete;
369 px_txn_rec.transaction_quantity := p_units;
370 END IF;
371
372 IF l_inst_asset_tbl.COUNT = 1 THEN
373 IF l_inst_asset_tbl(1).asset_quantity > p_units THEN
374
375 split_inst_asset(
376 p_inst_asset_rec => l_inst_asset_tbl(1),
377 p_quantity => p_units,
378 px_csi_txn_rec => px_txn_rec,
379 x_new_inst_asset_id => l_new_inst_asset_id,
380 x_return_status => l_return_status);
381
382 IF l_return_status <> fnd_api.g_ret_sts_success THEN
383 RAISE fnd_api.g_exc_error;
384 END IF;
385
386 retire_inst_asset(
387 p_inst_asset_id => l_new_inst_asset_id,
388 px_csi_txn_rec => px_txn_rec,
389 x_return_status => l_return_status);
390
391 IF l_return_status <> fnd_api.g_ret_sts_success THEN
392 RAISE fnd_api.g_exc_error;
393 END IF;
394
395 ELSE
396
397 retire_inst_asset(
398 p_inst_asset_id => l_inst_asset_tbl(1).instance_asset_id,
399 px_csi_txn_rec => px_txn_rec,
400 x_return_status => l_return_status);
401
402 IF l_return_status <> fnd_api.g_ret_sts_success THEN
403 RAISE fnd_api.g_exc_error;
404 END IF;
405
406 END IF;
407
408 ELSE -- quantity > 1
409 -- try and see if the retirement units match with the total inst asset quantity
410 l_total_inst_asset_qty := total_inst_asset_qty(l_inst_asset_tbl);
411
412 IF l_total_inst_asset_qty <= p_units THEN
413 FOR l_ind IN l_inst_asset_tbl.FIRST .. l_inst_asset_tbl.LAST
414 LOOP
415
416 retire_inst_asset(
417 p_inst_asset_id => l_inst_asset_tbl(l_ind).instance_asset_id,
418 px_csi_txn_rec => px_txn_rec,
419 x_return_status => l_return_status);
420
421 IF l_return_status <> fnd_api.g_ret_sts_success THEN
422 RAISE fnd_api.g_exc_error;
423 END IF;
424
425 END LOOP;
426
427 ELSE
428 null;
429 -- could not figure out which one to retire.
430 END IF;
431
432 END IF;
433 END IF;
434
435 EXCEPTION
436 WHEN fnd_api.g_exc_error THEN
437 x_return_status := fnd_api.g_ret_sts_error;
438 END asset_retirement;
439
440 PROCEDURE asset_reinstatement(
441 p_retirement_id IN NUMBER,
442 p_book_type_code IN VARCHAR2,
443 p_asset_id IN NUMBER,
444 p_units IN NUMBER,
445 p_trans_date IN DATE,
446 p_trans_by IN NUMBER,
447 x_return_status OUT NOCOPY VARCHAR2,
448 x_error_message OUT NOCOPY VARCHAR2)
449 IS
450
451 l_inst_asset_qry_rec csi_datastructures_pub.instance_asset_query_rec;
452 l_inst_asset_tbl csi_datastructures_pub.instance_asset_header_tbl;
453 l_csi_txn_rec csi_datastructures_pub.transaction_rec;
454 l_time_stamp date := null;
455 l_new_inst_asset_id number;
456
457 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
458 l_msg_count number;
459 l_msg_data varchar2(2000);
460
461 CURSOR dist_cur(p_retirement_id IN number) IS
462 SELECT distribution_id,
463 units_assigned,
464 transaction_units,
465 location_id,
466 assigned_to
467 FROM fa_distribution_history
468 WHERE retirement_id = p_retirement_id;
469
470 BEGIN
471 x_return_status := fnd_api.g_ret_sts_success;
472
473 FOR dist_rec IN dist_cur(p_retirement_id)
474 LOOP
475
476 l_inst_asset_qry_rec.fa_asset_id := p_asset_id;
477 l_inst_asset_qry_rec.fa_book_type_code := p_book_type_code;
478 l_inst_asset_qry_rec.update_status := 'RETIRED';
479 l_inst_asset_qry_rec.fa_location_id := dist_rec.location_id;
480
481 csi_asset_pvt.get_instance_assets(
482 p_api_version => 1.0,
483 p_commit => fnd_api.g_false,
484 p_init_msg_list => fnd_api.g_true,
485 p_validation_level => fnd_api.g_valid_level_full,
486 p_instance_asset_query_rec => l_inst_asset_qry_rec,
487 p_resolve_id_columns => fnd_api.g_false,
488 p_time_stamp => l_time_stamp,
489 x_instance_asset_tbl => l_inst_asset_tbl,
490 x_return_status => l_return_status,
491 x_msg_count => l_msg_count,
492 x_msg_data => l_msg_data);
493
494 IF l_return_status <> fnd_api.g_ret_sts_success THEN
495 RAISE fnd_api.g_exc_error;
496 END IF;
497
498 IF l_inst_asset_tbl.COUNT > 0 THEN
499
500 l_csi_txn_rec.transaction_id := fnd_api.g_miss_num;
501 l_csi_txn_rec.transaction_date := sysdate;
502 l_csi_txn_rec.source_transaction_date := sysdate;
503 l_csi_txn_rec.transaction_type_id := 103;
504 l_csi_txn_rec.source_line_ref := 'ASSET_ID';
505 l_csi_txn_rec.source_line_ref_id := p_asset_id;
506 l_csi_txn_rec.transaction_status_code := cse_datastructures_pub.g_complete;
507 l_csi_txn_rec.transaction_quantity := p_units;
508
509 IF l_inst_asset_tbl.COUNT = 1 THEN
510
511 reinstate_inst_asset(
512 p_inst_asset_rec => l_inst_asset_tbl(1),
513 p_units => p_units,
514 px_csi_txn_rec => l_csi_txn_rec,
515 x_return_status => l_return_status);
516
517 IF l_return_status <> fnd_api.g_ret_sts_success THEN
518 RAISE fnd_api.g_exc_error;
519 END IF;
520
521 ELSE
522
523 -- just reinstate one of the retired instance asset
524 reinstate_inst_asset(
525 p_inst_asset_rec => l_inst_asset_tbl(1),
526 p_units => p_units,
527 px_csi_txn_rec => l_csi_txn_rec,
528 x_return_status => l_return_status);
529
530 IF l_return_status <> fnd_api.g_ret_sts_success THEN
531 RAISE fnd_api.g_exc_error;
532 END IF;
533
534 END IF;
535 END IF;
536
537 END LOOP;
538
539 EXCEPTION
540 WHEN fnd_api.g_exc_error THEN
541 x_return_status := fnd_api.g_ret_sts_error;
542 END asset_reinstatement;
543
544
545 PROCEDURE populate_retirement_interface(
546 p_csi_txn_id IN number,
547 p_asset_id IN number,
548 p_book_type_code IN varchar2,
549 p_fa_location_id IN number,
550 p_proceeds_of_sale IN number,
551 p_cost_of_removal IN number,
552 p_retirement_units IN number,
553 p_retirement_date IN date,
554 x_return_status OUT nocopy varchar2)
555 IS
556 l_ext_ret_rec fa_mass_ext_retirements%ROWTYPE;
557 l_batch_name varchar2(30);
558 l_mass_ext_retire_id number;
559 l_prorate_convention varchar2(20);
560
561 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
562 l_error_message varchar2(2000);
563
564 CURSOR prorate_conv_cur(p_asset_id number,p_book_type_code varchar2) IS
565 SELECT fcbd.retirement_prorate_convention
566 FROM fa_category_book_defaults fcbd,
567 fa_books fb,
568 fa_additions_b fab
569 WHERE fab.asset_id = p_asset_id
570 AND fb.asset_id = fab.asset_id
571 and fb.book_type_code = p_book_type_code
572 AND fb.date_ineffective is null
573 AND fcbd.book_type_code = fb.book_type_code
574 AND fcbd.category_id = fab.asset_category_id;
575
576 CURSOR fa_dist_cur(p_asset_id number,p_book_type_code varchar2, p_fa_location_id number) IS
577 SELECT distribution_id,
578 assigned_to,
579 units_assigned
580 FROM fa_distribution_history
581 WHERE asset_id = p_asset_id
582 AND book_type_code = p_book_type_code
583 AND location_id = p_fa_location_id
584 AND date_ineffective is null;
585
586 l_units_retired number;
587
588 BEGIN
589
590 x_return_status := fnd_api.g_ret_sts_success;
591
592 debug('inside api cse_asset_txn_pkg.populate_retirement_interface');
593
594 l_batch_name := 'CSE-'||p_csi_txn_id;
595
596 debug(' batch_name : '||l_batch_name);
597
598 FOR prorate_conv_rec IN prorate_conv_cur(p_asset_id, p_book_type_code)
599 LOOP
600 l_prorate_convention := prorate_conv_rec.retirement_prorate_convention;
601 END LOOP;
602
603 debug(' prorate_convention : '||l_prorate_convention);
604
605 l_units_retired := p_retirement_units;
606
607 FOR fa_dist_rec IN fa_dist_cur(p_asset_id, p_book_type_code, p_fa_location_id)
608 LOOP
609
610 l_units_retired := l_units_retired - fa_dist_rec.units_assigned;
611
612 SELECT fa_mass_ext_retirements_s.nextval
613 INTO l_mass_ext_retire_id
614 FROM sys.dual ;
615
616 debug(' fa_distribution_id : '||fa_dist_rec.distribution_id);
617 debug(' mass_ext_retire_id : '||l_mass_ext_retire_id);
618
619 l_ext_ret_rec.mass_external_retire_id := l_mass_ext_retire_id;
620 l_ext_ret_rec.retirement_prorate_convention := l_prorate_convention;
621 l_ext_ret_rec.batch_name := l_batch_name;
622 l_ext_ret_rec.book_type_code := p_book_type_code;
623 l_ext_ret_rec.review_status := 'POST';
624 l_ext_ret_rec.retirement_type_code := 'EXTRAORDINARY';
625 l_ext_ret_rec.asset_id := p_asset_id;
626 l_ext_ret_rec.date_retired := p_retirement_date;
627 l_ext_ret_rec.date_effective := p_retirement_date;
628 l_ext_ret_rec.units := fa_dist_rec.units_assigned;
629 l_ext_ret_rec.cost_of_removal := p_cost_of_removal;
630 l_ext_ret_rec.proceeds_of_sale := p_proceeds_of_sale;
631 l_ext_ret_rec.calc_gain_loss_flag := 'N';
632 l_ext_ret_rec.created_by := fnd_global.user_id;
633 l_ext_ret_rec.creation_date := sysdate;
634 l_ext_ret_rec.last_updated_by := fnd_global.user_id;
635 l_ext_ret_rec.last_update_date := sysdate;
636 l_ext_ret_rec.last_update_login := fnd_global.login_id;
637 l_ext_ret_rec.distribution_id := fa_dist_rec.distribution_id ;
638
639 cse_asset_adjust_pkg.insert_retirement(
640 p_ext_ret_rec => l_ext_ret_rec,
641 x_return_status => l_return_status,
642 x_error_msg => l_error_message);
643
644 IF l_return_status <> fnd_api.g_ret_sts_success THEN
645 RAISE fnd_api.g_exc_error;
646 END IF;
647
648 EXIT when l_units_retired <= 0;
649
650 END LOOP;
651
652 EXCEPTION
653 WHEN fnd_api.g_exc_error THEN
654 x_return_status := fnd_api.g_ret_sts_error;
655 END populate_retirement_interface;
656
657
658 END cse_fa_txn_pkg;