DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSE_FA_INTEGRATION_GRP

Source


1 PACKAGE BODY cse_fa_integration_grp AS
2 /* $Header: CSEGFAIB.pls 120.21 2012/03/08 08:41:50 dsingire ship $ */
3 
4   l_debug    varchar2(1) := NVL(FND_PROFILE.VALUE('CSE_DEBUG_OPTION'),'N');
5 
6   FUNCTION is_oat_enabled RETURN BOOLEAN
7   IS
8     l_enabled_flag    char := 'N';
9     l_enabled         boolean := FALSE;
10     l_dummy           varchar2(40);
11     l_fnd_ret         boolean;
12 
13     CURSOR ib_param_cur IS
14       SELECT 'Y'
15       FROM   csi_install_parameters
16       WHERE  freeze_flag = 'Y';
17   BEGIN
18 
19     OPEN ib_param_cur;
20     FETCH ib_param_cur INTO l_enabled_flag;
21     CLOSE ib_param_cur;
22 
23     IF l_enabled_flag = 'Y' THEN
24       l_fnd_ret := fnd_installation.get_app_info('CSE',l_enabled_flag, l_dummy, l_dummy);
25       IF l_enabled_flag = 'I' THEN
26         l_enabled := TRUE;
27       END IF;
28     END IF;
29 
30     RETURN l_enabled;
31 
32   END is_oat_enabled;
33 
34   PROCEDURE debug(
35     p_message IN varchar2)
36   IS
37   BEGIN
38     IF l_debug = 'Y' THEN
39       cse_debug_pub.add(p_message);
40       IF nvl(fnd_global.conc_request_id, -1) <> -1 THEN
41         fnd_file.put_line(fnd_file.log,p_message);
42       END IF;
43     END IF;
47   END debug;
44   EXCEPTION
45     WHEN others THEN
46       null;
48 
49   FUNCTION get_tieback_csi_txn_id(
50     p_mass_addition_id       IN number,
51     p_asset_id              IN number,
52     p_instance_asset_id     IN number)
53   RETURN number IS
54     CURSOR ma_txn_cur IS
55       SELECT transaction_id
56       FROM   csi_transactions
57       WHERE  transaction_type_id = 123
58       AND    source_line_ref     = 'MASS_ADD_ID'
59       AND    source_line_ref_id  = p_mass_addition_id
60       ORDER by source_transaction_date desc;
61     l_csi_txn_id number := fnd_api.g_miss_num;
62   BEGIN
63     IF p_mass_addition_id is not null THEN
64       FOR ma_txn_rec IN ma_txn_cur
65       LOOP
66         l_csi_txn_id := ma_txn_rec.transaction_id;
67         exit;
68       END LOOP;
69     END IF;
70     RETURN l_csi_txn_id;
71   END get_tieback_csi_txn_id;
72 
73   PROCEDURE create_inst_asset(
74     px_csi_txn_rec      IN OUT nocopy csi_datastructures_pub.transaction_rec,
75     px_inst_asset_rec   IN OUT nocopy csi_datastructures_pub.instance_asset_rec,
76     x_return_status        OUT nocopy varchar2)
77   IS
78     l_lookup_tbl           csi_asset_pvt.lookup_tbl;
79     l_asset_count_rec      csi_asset_pvt.asset_count_rec;
80     l_asset_id_tbl         csi_asset_pvt.asset_id_tbl;
81     l_asset_loc_tbl        csi_asset_pvt.asset_loc_tbl;
82 
83     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
84     l_msg_count            number;
85     l_msg_data             varchar2(2000);
86   BEGIN
87 
88     x_return_status := fnd_api.g_ret_sts_success;
89 
90     px_inst_asset_rec.fa_sync_flag := 'Y';
91 
92     csi_asset_pvt.create_instance_asset(
93       p_api_version        => 1.0 ,
94       p_commit             => fnd_api.g_false,
95       p_init_msg_list      => fnd_api.g_true,
96       p_validation_level   => fnd_api.g_valid_level_full,
97       p_instance_asset_rec => px_inst_asset_rec,
98       p_txn_rec            => px_csi_txn_rec,
99       x_return_status      => l_return_status,
100       x_msg_count          => l_msg_count,
101       x_msg_data           => l_msg_data ,
102       p_lookup_tbl         => l_lookup_tbl,
103       p_asset_count_rec    => l_asset_count_rec,
104       p_asset_id_tbl       => l_asset_id_tbl,
105       p_asset_loc_tbl      => l_asset_loc_tbl);
106 
107     IF l_return_status <> fnd_api.g_ret_sts_success THEN
108       RAISE fnd_api.g_exc_error;
109     END IF;
110 
111   EXCEPTION
112     WHEN fnd_api.g_exc_error THEN
113       x_return_status := fnd_api.g_ret_sts_error;
114   END create_inst_asset;
115 
116 
117   PROCEDURE update_inst_asset(
118     px_csi_txn_rec      IN OUT nocopy csi_datastructures_pub.transaction_rec,
119     px_inst_asset_rec   IN OUT nocopy csi_datastructures_pub.instance_asset_rec,
120     x_return_status        OUT nocopy varchar2)
121   IS
122 
123     l_lookup_tbl           csi_asset_pvt.lookup_tbl;
124     l_asset_count_rec      csi_asset_pvt.asset_count_rec;
125     l_asset_id_tbl         csi_asset_pvt.asset_id_tbl;
126     l_asset_loc_tbl        csi_asset_pvt.asset_loc_tbl;
127 
128     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
129     l_msg_count            number;
130     l_msg_data             varchar2(2000);
131   BEGIN
132 
133     x_return_status := fnd_api.g_ret_sts_success;
134 
135     px_inst_asset_rec.fa_sync_flag := 'Y';
136     px_inst_asset_rec.check_for_instance_expiry := fnd_api.g_false;
137 
138     csi_asset_pvt.update_instance_asset (
139       p_api_version         => 1.0,
140       p_commit              => fnd_api.g_false,
141       p_init_msg_list       => fnd_api.g_true,
142       p_validation_level    => fnd_api.g_valid_level_full,
143       p_instance_asset_rec  => px_inst_asset_rec,
144       p_txn_rec             => px_csi_txn_rec,
145       x_return_status       => l_return_status,
146       x_msg_count           => l_msg_count,
147       x_msg_data            => l_msg_data,
148       p_lookup_tbl          => l_lookup_tbl,
149       p_asset_count_rec     => l_asset_count_rec,
150       p_asset_id_tbl        => l_asset_id_tbl,
151       p_asset_loc_tbl       => l_asset_loc_tbl);
152 
153     IF l_return_status <> fnd_api.g_ret_sts_success THEN
154       RAISE fnd_api.g_exc_error;
155     END IF;
156 
157   EXCEPTION
158     WHEN fnd_api.g_exc_error THEN
159       x_return_status := fnd_api.g_ret_sts_error;
160   END update_inst_asset;
161 
162   FUNCTION addition(
163     p_trans_rec         IN     fa_api_types.trans_rec_type,
164     p_asset_hdr_rec     IN     fa_api_types.asset_hdr_rec_type,
165     p_asset_desc_rec    IN     fa_api_types.asset_desc_rec_type,
166     p_asset_fin_rec     IN     fa_api_types.asset_fin_rec_type,
167     p_asset_dist_tbl    IN     fa_api_types.asset_dist_tbl_type,
168     p_inv_tbl           IN     fa_api_types.inv_tbl_type)
169   RETURN boolean
170   IS
171 
172     l_csi_txn_rec          csi_datastructures_pub.transaction_rec;
173     l_inst_asset_rec       csi_datastructures_pub.instance_asset_rec;
174 
175     l_instance_id          number;
176     l_inst_asset_query_rec csi_datastructures_pub.instance_asset_query_rec;
177     l_inst_asset_tbl       csi_datastructures_pub.instance_asset_header_tbl;
178     l_time_stamp           date := null;
179 
180     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
181     l_msg_count            number;
182     l_msg_data             varchar2(2000);
183 
184     CURSOR cia_cur(p_mass_addition_id IN number) IS
185       SELECT cia.instance_asset_id,
186              cia.asset_quantity,
187              cia.instance_id,
191       FROM   csi_i_assets cia,
188              cia.object_version_number,
189              cii.inventory_item_id,
190              cii.serial_number
192              csi_item_instances cii
193       WHERE  cia.fa_mass_addition_id = p_mass_addition_id
194       AND    cii.instance_id         = cia.instance_id;
195 
196     CURSOR proj_cur(p_project_asset_line_id IN number) IS
197       SELECT pei.expenditure_item_id,
198              pei.orig_transaction_reference txn_ref
199       FROM   pa_expenditure_items_all      pei,
200              pa_project_asset_line_details ppald,
201              pa_project_asset_lines_all    ppal
202       WHERE  ppal.project_asset_line_id         = p_project_asset_line_id
203       AND    ppald.project_asset_line_detail_id = ppal.project_asset_line_detail_id
204       AND    pei.expenditure_item_id            = ppald.expenditure_item_id
205       AND    pei.transaction_source             IN ('CSE_PO_RECEIPT','CSE_INV_ISSUE')
206       AND    pei.net_zero_adjustment_flag         = 'N'
207       AND   (pei.attribute8 is not null and pei.attribute9 is not null);
208 
209   BEGIN
210 
211     savepoint cse_addition;
212 
213     IF is_oat_enabled THEN
214 
215       cse_util_pkg.set_debug;
216 
217       debug('Inside API cse_fa_integration_grp.addition');
218       debug('  p_inv_tbl.count        : '||p_inv_tbl.count);
219       debug('  p_asset_dist_tbl.count : '||p_asset_dist_tbl.count);
220 
221       -- invoke oat routines
222       IF p_inv_tbl.COUNT > 0 THEN
223 
224         l_csi_txn_rec.transaction_type_id     := 123;
225         l_csi_txn_rec.source_transaction_date := sysdate;
226         l_csi_txn_rec.transaction_date        := sysdate;
227 
228         FOR p_ind IN p_inv_tbl.FIRST .. p_inv_tbl.LAST
229         LOOP
230 
231           debug('  feeder_system_name  : '||p_inv_tbl(p_ind).feeder_system_name);
232 
233           IF p_inv_tbl(p_ind).feeder_system_name IN ( 'ORACLE ENTERPRISE INSTALL BASE', 'ORACLE PROJECTS') THEN
234 
235             IF p_inv_tbl(p_ind).feeder_system_name = 'ORACLE ENTERPRISE INSTALL BASE' THEN
236 
237               IF p_inv_tbl(p_ind).parent_mass_addition_id is not null THEN
238 
239                 FOR cia_rec IN cia_cur (p_inv_tbl(p_ind).parent_mass_addition_id)
240                 LOOP
241 
242                   debug('  inst_asset_id  : '||cia_rec.instance_asset_id);
243 
244                   l_inst_asset_rec.instance_asset_id     := cia_rec.instance_asset_id;
245                   l_inst_asset_rec.fa_asset_id           := p_asset_hdr_rec.asset_id;
246                   l_inst_asset_rec.fa_book_type_code     := p_asset_hdr_rec.book_type_code;
247                   -- assuming that there is only one distribution per addition
248                   l_inst_asset_rec.fa_location_id        := p_asset_dist_tbl(1).location_ccid;
249                   l_inst_asset_rec.object_version_number := cia_rec.object_version_number;
250 
251                   l_csi_txn_rec.transaction_id := get_tieback_csi_txn_id(
252                     p_mass_addition_id   => p_inv_tbl(p_ind).parent_mass_addition_id,
253                     p_asset_id           => p_asset_hdr_rec.asset_id,
254                     p_instance_asset_id  => cia_rec.instance_asset_id);
255 
256                   update_inst_asset (
257                     px_csi_txn_rec     => l_csi_txn_rec,
258                     px_inst_asset_rec  => l_inst_asset_rec,
259                     x_return_status    => l_return_status);
260 
261                   IF l_return_status <> fnd_api.g_ret_sts_success THEN
262                     RAISE fnd_api.g_exc_error;
263                   END IF;
264 
265                 END LOOP;
266 
267               END IF;
268             ELSIF  p_inv_tbl(p_ind).feeder_system_name = 'ORACLE PROJECTS' THEN
269 
270               IF p_inv_tbl(p_ind).parent_mass_addition_id is not null THEN
271                 FOR proj_rec IN proj_cur(p_inv_tbl(p_ind).project_asset_line_id)
272                 LOOP
273                   debug('  expenditure_item_id : '||proj_rec.expenditure_item_id);
274                   BEGIN
275                     l_instance_id:=to_number(substr(proj_rec.txn_ref,1,(instr(proj_rec.txn_ref,'-')-1)));
276                   EXCEPTION
277                     WHEN others THEN
278                       l_instance_id := null;
279                   END;
280                   exit;
281                 END LOOP;
282 
283                 debug('  instance_id    : '||l_instance_id);
284 
285                 IF l_instance_id is not null THEN
286 
287                   l_inst_asset_query_rec.instance_id := l_instance_id;
288 
289                   csi_asset_pvt.get_instance_assets(
290                     p_api_version              => 1.0,
291                     p_commit                   => fnd_api.g_false,
292                     p_init_msg_list            => fnd_api.g_true,
293                     p_validation_level         => fnd_api.g_valid_level_full,
294                     p_instance_asset_query_rec => l_inst_asset_query_rec,
295                     p_resolve_id_columns       => fnd_api.g_false,
296                     p_time_stamp               => l_time_stamp,
297                     x_instance_asset_tbl       => l_inst_asset_tbl,
298                     x_return_status            => l_return_status,
299                     x_msg_count                => l_msg_count,
300                     x_msg_data                 => l_msg_data);
301 
302                   IF l_return_status <> fnd_api.g_ret_sts_success THEN
303                     RAISE fnd_api.g_exc_error;
304                   END IF;
305 
306                   IF l_inst_asset_tbl.COUNT = 0 THEN
307 
308                     l_inst_asset_rec.instance_asset_id := fnd_api.g_miss_num; -- Bug 12687801
309                     l_inst_asset_rec.fa_asset_id       := p_asset_hdr_rec.asset_id;
313                     l_inst_asset_rec.instance_id       := l_instance_Id;
310                     l_inst_asset_rec.fa_book_type_code := p_asset_hdr_rec.book_type_code;
311                     l_inst_asset_rec.asset_quantity    := p_asset_dist_tbl(1).units_assigned;
312                     l_inst_asset_rec.fa_location_id    := p_asset_dist_tbl(1).location_ccid;
314                     l_inst_asset_rec.update_status     := cse_datastructures_pub.g_in_service;
315                     l_inst_asset_rec.check_for_instance_expiry:= fnd_api.g_false;
316 
317                     create_inst_asset(
318                       px_csi_txn_rec    => l_csi_txn_rec,
319                       px_inst_asset_rec => l_inst_asset_rec,
320                       x_return_status   => l_return_status);
321 
322                     IF l_return_status <> fnd_api.g_ret_sts_success THEN
323                       RAISE fnd_api.g_exc_error;
324                     END IF;
325 
326                   ELSE
327 
328                     IF l_inst_asset_tbl.COUNT = 1 THEN
329 
330                       l_inst_asset_rec.instance_asset_id := l_inst_asset_tbl(1).instance_asset_id;
331                       l_inst_asset_rec.fa_asset_id       := p_asset_hdr_rec.asset_id;
332                       l_inst_asset_rec.fa_book_type_code := p_asset_hdr_rec.book_type_code;
333                       -- assuming that there is only one distribution per addition
334                       l_inst_asset_rec.fa_location_id    := p_asset_dist_tbl(1).location_ccid;
335                       l_inst_asset_rec.asset_quantity    := l_inst_asset_tbl(1).asset_quantity +
336                                                             p_asset_dist_tbl(1).transaction_units;
337                       -- Bug 8901283 Assigning object version queried
338                       -- This will fix both R12 and 12.1.1 issues
339                       l_inst_asset_rec.object_version_number := l_inst_asset_tbl(1).object_version_number;
340 
341                       update_inst_asset (
342                         px_csi_txn_rec    => l_csi_txn_rec,
343                         px_inst_asset_rec => l_inst_asset_rec,
344                         x_return_status   => l_return_status);
345 
346                       IF l_return_status <> fnd_api.g_ret_sts_success THEN
347                         RAISE fnd_api.g_exc_error;
348                       END IF;
349                     ELSE
350                       null;
351                     END IF;
352                   END IF;
353 
354                 ELSE
355 
356                   -- dump in to the staging table
357                   cse_fa_stage_pkg.stage_addition(
358                     p_trans_rec         => p_trans_rec,
359                     p_asset_hdr_rec     => p_asset_hdr_rec,
360                     p_asset_desc_rec    => p_asset_desc_rec,
361                     p_asset_fin_rec     => p_asset_fin_rec,
362                     p_asset_dist_tbl    => p_asset_dist_tbl,
363                     p_inv_tbl           => p_inv_tbl);
364 
365                 END IF; -- instance is is not null
366               END IF;
367 
368             ELSE
369 
370               -- dump in to the staging table
371               cse_fa_stage_pkg.stage_addition(
372                 p_trans_rec         => p_trans_rec,
373                 p_asset_hdr_rec     => p_asset_hdr_rec,
374                 p_asset_desc_rec    => p_asset_desc_rec,
375                 p_asset_fin_rec     => p_asset_fin_rec,
376                 p_asset_dist_tbl    => p_asset_dist_tbl,
377                 p_inv_tbl           => p_inv_tbl);
378 
379             END IF; -- proj or oat identifies chk
380 
381           ELSE
382 
383             -- dump in to the staging table
384             cse_fa_stage_pkg.stage_addition(
385               p_trans_rec         => p_trans_rec,
386               p_asset_hdr_rec     => p_asset_hdr_rec,
387               p_asset_desc_rec    => p_asset_desc_rec,
388               p_asset_fin_rec     => p_asset_fin_rec,
389               p_asset_dist_tbl    => p_asset_dist_tbl,
390               p_inv_tbl           => p_inv_tbl);
391 
392           END IF;
393         END LOOP;
394       ELSE
395 
396         -- dump in to the staging table
397         cse_fa_stage_pkg.stage_addition(
398           p_trans_rec         => p_trans_rec,
399           p_asset_hdr_rec     => p_asset_hdr_rec,
400           p_asset_desc_rec    => p_asset_desc_rec,
401           p_asset_fin_rec     => p_asset_fin_rec,
402           p_asset_dist_tbl    => p_asset_dist_tbl,
403           p_inv_tbl           => p_inv_tbl);
404 
405       END IF;
406 
407     END IF;
408     RETURN TRUE;
409   EXCEPTION
410     WHEN fnd_api.g_exc_error THEN
411       rollback to cse_addition;
412       RETURN FALSE;
413     WHEN others THEN
414       rollback to cse_addition;
415       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
416       fnd_message.set_token('API_NAME','csi_fa_integration_grp.addition');
417       fnd_message.set_token('SQL_ERROR',sqlerrm);
418       fnd_msg_pub.add;
419       RETURN FALSE;
420   END addition;
421 
422   FUNCTION unit_adjustment(
423     p_trans_rec         IN     fa_api_types.trans_rec_type,
424     p_asset_hdr_rec     IN     fa_api_types.asset_hdr_rec_type,
425     p_asset_dist_tbl    IN     fa_api_types.asset_dist_tbl_type)
426   RETURN boolean
427   IS
428   BEGIN
429     IF is_oat_enabled THEN
430       -- invoke oat routines
431       null;
432     END IF;
433     RETURN TRUE;
434   EXCEPTION
435     WHEN fnd_api.g_exc_error THEN
436       RETURN FALSE;
437     WHEN others THEN
438       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
439       fnd_message.set_token('API_NAME','csi_fa_integration_grp.unit_adjustment');
440       fnd_message.set_token('SQL_ERROR',sqlerrm);
444 
441       fnd_msg_pub.add;
442       RETURN FALSE;
443   END unit_adjustment;
445   FUNCTION adjustment(
446     p_trans_rec         IN     fa_api_types.trans_rec_type,
447     p_asset_hdr_rec     IN     fa_api_types.asset_hdr_rec_type,
448     p_asset_fin_rec_adj IN     fa_api_types.asset_fin_rec_type,
449     p_inv_tbl           IN     fa_api_types.inv_tbl_type)
450   RETURN boolean IS
451 
452     l_asset_id               number;
453     l_book_type_code         varchar2(30);
454     l_units                  number;
455     l_current_units          number;
456     l_location_id            number;
457     l_expense_ccid           number;
458     l_employee_id            number;
459     l_new_dist_id            number;
460     l_instance_id            number;
461     l_exp_item_id            number;
462 
463     l_txn_error_id           number;
464     l_txn_error_rec          csi_datastructures_pub.transaction_error_rec;
465 
466     l_xml_string             varchar2(2000);
467     l_error_message          varchar2(4000);
468     l_msg_count              number;
469     l_msg_data               varchar2(4000);
470     l_return_status          varchar2(1) := fnd_api.g_ret_sts_success;
471 
472     CURSOR exp_inst_cur(p_project_asset_line_id IN number) IS
473       SELECT pei.expenditure_item_id,
474              pei.orig_transaction_reference txn_ref,
475              pei.attribute6 item,
476              pei.attribute7 serial_number,
477              pei.attribute8 location,
478              pei.attribute9 asset_category,
479              pei.attribute10 product_class,
480              ppa.location_id,
481              ppa.depreciation_expense_ccid expense_ccid,
482              ppa.assigned_to_person_id     employee_id
483       FROM   pa_expenditure_items_all      pei,
484              pa_project_asset_line_details ppald,
485              pa_project_asset_lines_all    ppal,
486              pa_project_assets_all         ppa
487       WHERE  ppal.project_asset_line_id         = p_project_asset_line_id
488       AND    ppa.project_asset_id               = ppal.project_asset_id
489       AND    ppald.project_asset_line_detail_id = ppal.project_asset_line_detail_id
490       AND    pei.expenditure_item_id            = ppald.expenditure_item_id
491       AND    pei.transaction_source             IN ('CSE_PO_RECEIPT','CSE_INV_ISSUE')
492       AND    pei.net_zero_adjustment_flag       = 'N'
493       AND   (pei.attribute8 is not null and pei.attribute9 is not null);
494 
495   BEGIN
496     IF is_oat_enabled THEN
497       debug('inside cse_fa_integration_grp.cost_adjustment');
498       -- cost adjustment only for now
499       IF nvl(p_asset_fin_rec_adj.cost, 0) <> 0 THEN
500         -- invoke oat routines
501         IF p_inv_tbl.COUNT > 0 THEN
502           FOR p_ind IN p_inv_tbl.FIRST .. p_inv_tbl.LAST
503           LOOP
504 
505             debug('  feeder_system_name         : '||p_inv_tbl(p_ind).feeder_system_name);
506 
507             IF p_inv_tbl(p_ind).feeder_system_name = 'ORACLE PROJECTS' THEN
508 
509               l_asset_id           := p_asset_hdr_rec.asset_id;
510               l_book_type_code     := p_asset_hdr_rec.book_type_code;
511 
512               debug('  asset_id                   : '||l_asset_id);
513               debug('  book_type_code             : '||l_book_type_code);
514               debug('  project_id                 : '||p_inv_tbl(p_ind).project_id);
515               debug('  task_id                    : '||p_inv_tbl(p_ind).task_id);
516               debug('  project_asset_line_id      : '||p_inv_tbl(p_ind).project_asset_line_id);
517               debug('  transaction_type_code      : '||p_trans_rec.transaction_type_code);
518               debug('  transaction_subtype        : '||p_trans_rec.transaction_subtype);
519               debug('  payables_units             : '||p_inv_tbl(p_ind).payables_units);
520 
521               SELECT current_units
522               INTO   l_current_units
523               FROM   fa_additions
524               WHERE  asset_id = l_asset_id;
525 
526               debug('  current_units              : '||l_current_units);
527 
528               l_units := p_inv_tbl(p_ind).payables_units - l_current_units;
529 
530               debug('  units_adjusted             : '||l_units);
531 
532               FOR exp_inst_rec IN exp_inst_cur(p_inv_tbl(p_ind).project_asset_line_id)
533               LOOP
534 
535                 l_location_id   := exp_inst_rec.location_id;
536                 l_expense_ccid  := exp_inst_rec.expense_ccid;
537                 l_employee_id   := exp_inst_rec.employee_id;
538                 l_exp_item_id   := exp_inst_rec.expenditure_item_id;
539 
540                 BEGIN
541                   l_instance_id:=to_number(substr(exp_inst_rec.txn_ref,1,(instr(exp_inst_rec.txn_ref,'-')-1)));
542                 EXCEPTION
543                   WHEN others THEN
544                     l_instance_id := null;
545                 END;
546 
547                 debug('  expenditure_item_id        : '||exp_inst_rec.expenditure_item_id);
548                 debug('  txn_ref                    : '||exp_inst_rec.txn_ref);
549                 debug('  instance_id                : '||l_instance_id);
550                 debug('  location_id                : '||l_location_id);
551                 debug('  depreciation_expense_ccid  : '||l_expense_ccid);
552 
553                 IF l_instance_id is not null THEN
554                   EXIT;
555                 END IF;
556 
557               END LOOP;
558 
559               IF l_instance_id is not null AND l_units <> 0 THEN
560 
561                 cse_util_pkg.build_error_string(l_xml_string,'ASSET_ID',l_asset_id);
562                 cse_util_pkg.build_error_string(l_xml_string,'BOOK_TYPE_CODE',l_book_type_code);
563                 cse_util_pkg.build_error_string(l_xml_string,'UNITS',l_units);
567                 cse_util_pkg.build_error_string(l_xml_string,'INSTANCE_ID',l_instance_id);
564                 cse_util_pkg.build_error_string(l_xml_string,'LOCATION_ID',l_location_id);
565                 cse_util_pkg.build_error_string(l_xml_string,'EMPLOYEE_ID',l_employee_id);
566                 cse_util_pkg.build_error_string(l_xml_string,'DEPRN_EXPENSE_CCID',l_expense_ccid);
568                 cse_util_pkg.build_error_string(l_xml_string,'PA_ASSET_LINE_ID',p_inv_tbl(p_ind).project_asset_line_id);
569                 cse_util_pkg.build_error_string(l_xml_string,'EXP_ITEM_ID', l_exp_item_id);
570 
571                 l_txn_error_rec.source_id            := p_inv_tbl(p_ind).project_asset_line_id;
572                 l_txn_error_rec.source_type          := 'FA_UNIT_ADJUSTMENT_NORMAL';
573                 l_txn_error_rec.source_header_ref    := 'ASSET_ID';
574                 l_txn_error_rec.source_header_ref_id := l_asset_id;
575                 l_txn_error_rec.source_line_ref      := 'EXP_ITEM_ID';
576                 l_txn_error_rec.source_line_ref_id   := l_exp_item_id;
577                 l_txn_error_rec.processed_flag       := cse_datastructures_pub.g_bypass_flag;
578                 l_txn_error_rec.error_text           := l_error_message;
579                 l_txn_error_rec.error_stage          := cse_datastructures_pub.g_fa_update;
580                 l_txn_error_rec.message_string       := l_xml_string;
581 
582                 debug('calling csi_transactions_pvt.create_txn_error to create unit adjustment entry');
583 
584                 csi_transactions_pvt.create_txn_error(
585                   p_api_version          => 1.0,
586                   p_init_msg_list        => fnd_api.g_true,
587                   p_commit               => fnd_api.g_false,
588                   p_validation_level     => fnd_api.g_valid_level_full,
589                   p_txn_error_rec        => l_txn_error_rec,
590                   x_return_status        => l_return_status,
591                   x_msg_count            => l_msg_count,
592                   x_msg_data             => l_msg_data,
593                   x_transaction_error_id => l_txn_error_id);
594 
595               END IF;
596 
597             END IF; -- feeder_system_name = 'ORACLE PROJECTS'
598           END LOOP;
599         END IF; -- p_inv_tbl.count > 0
600       END IF;
601     END IF;
602 
603     RETURN TRUE;
604 
605   EXCEPTION
606     WHEN fnd_api.g_exc_error THEN
607       RETURN FALSE;
608     WHEN others THEN
609       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
610       fnd_message.set_token('API_NAME','csi_fa_integration_grp.adjustment');
611       fnd_message.set_token('SQL_ERROR',sqlerrm);
612       fnd_msg_pub.add;
613       RETURN FALSE;
614   END adjustment;
615 
616   FUNCTION transfer(
617     p_trans_rec         IN     fa_api_types.trans_rec_type,
618     p_asset_hdr_rec     IN     fa_api_types.asset_hdr_rec_type,
619     p_asset_dist_tbl    IN     fa_api_types.asset_dist_tbl_type)
620   RETURN boolean
621   IS
622   BEGIN
623     IF is_oat_enabled THEN
624       -- invoke oat routines
625       null;
626     END IF;
627     RETURN TRUE;
628   EXCEPTION
629     WHEN fnd_api.g_exc_error THEN
630       RETURN FALSE;
631     WHEN others THEN
632       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
633       fnd_message.set_token('API_NAME','csi_fa_integration_grp.transfer');
634       fnd_message.set_token('SQL_ERROR',sqlerrm);
635       fnd_msg_pub.add;
636       RETURN FALSE;
637   END transfer;
638 
639   FUNCTION retire(
640     p_asset_id          IN     number,
641     p_book_type_code    IN     varchar2,
642     p_retirement_id     IN     number,
643     p_retirement_date   IN     date,
644     p_retirement_units  IN     number)
645   RETURN boolean
646   IS
647     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
648     l_error_message     varchar2(2000);
649   BEGIN
650     IF is_oat_enabled THEN
651       null;
652     END IF;
653     RETURN TRUE;
654   EXCEPTION
655     WHEN fnd_api.g_exc_error THEN
656       RETURN FALSE;
657     WHEN others THEN
658       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
659       fnd_message.set_token('API_NAME','csi_fa_integration_grp.retire');
660       fnd_message.set_token('SQL_ERROR',sqlerrm);
661       fnd_msg_pub.add;
662       RETURN FALSE;
663   END retire;
664 
665   FUNCTION reinstate(
666     p_asset_id            IN   number,
667     p_book_type_code      IN   varchar2,
668     p_retirement_id       IN   number,
669     p_reinstatement_date  IN   date,
670     p_reinstatement_units IN   number)
671   RETURN boolean
672   IS
673     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
674     l_error_message     varchar2(2000);
675   BEGIN
676     IF is_oat_enabled THEN
677       -- invoke oat routines
678       cse_fa_txn_pkg.asset_reinstatement(
679         p_retirement_id   => p_retirement_id,
680         p_book_type_code  => p_book_type_code,
681         p_asset_id        => p_asset_id,
682         p_units           => p_reinstatement_units,
683         p_trans_date      => p_reinstatement_date,
684         p_trans_by        => fnd_global.user_id,
685         x_return_status   => l_return_status,
686         x_error_message   => l_error_message);
687 
688       IF l_return_status <> fnd_api.g_ret_sts_success THEN
689         RAISE fnd_api.g_exc_error;
690       END IF;
691 
692     END IF;
693     RETURN TRUE;
694   EXCEPTION
695     WHEN fnd_api.g_exc_error THEN
696       RETURN FALSE;
697     WHEN others THEN
698       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
699       fnd_message.set_token('API_NAME','csi_fa_integration_grp.reinstate');
703   END reinstate;
700       fnd_message.set_token('SQL_ERROR',sqlerrm);
701       fnd_msg_pub.add;
702       RETURN FALSE;
704 
705 END cse_fa_integration_grp;