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.16 2006/11/09 06:43:02 brmanesh noship $ */
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;
44   EXCEPTION
45     WHEN others THEN
46       null;
47   END debug;
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,
188              cia.object_version_number,
189              cii.inventory_item_id,
190              cii.serial_number
191       FROM   csi_i_assets cia,
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.fa_asset_id       := p_asset_hdr_rec.asset_id;
309                     l_inst_asset_rec.fa_book_type_code := p_asset_hdr_rec.book_type_code;
310                     l_inst_asset_rec.asset_quantity    := p_asset_dist_tbl(1).units_assigned;
311                     l_inst_asset_rec.fa_location_id    := p_asset_dist_tbl(1).location_ccid;
312                     l_inst_asset_rec.instance_id       := l_instance_Id;
313                     l_inst_asset_rec.update_status     := cse_datastructures_pub.g_in_service;
314                     l_inst_asset_rec.check_for_instance_expiry:= fnd_api.g_false;
315 
316                     create_inst_asset(
317                       px_csi_txn_rec    => l_csi_txn_rec,
318                       px_inst_asset_rec => l_inst_asset_rec,
319                       x_return_status   => l_return_status);
320 
321                     IF l_return_status <> fnd_api.g_ret_sts_success THEN
322                       RAISE fnd_api.g_exc_error;
323                     END IF;
324 
325                   ELSE
326 
327                     IF l_inst_asset_tbl.COUNT = 1 THEN
328 
329                       l_inst_asset_rec.instance_asset_id := l_inst_asset_tbl(1).instance_asset_id;
330                       l_inst_asset_rec.fa_asset_id       := p_asset_hdr_rec.asset_id;
331                       l_inst_asset_rec.fa_book_type_code := p_asset_hdr_rec.book_type_code;
332                       -- assuming that there is only one distribution per addition
333                       l_inst_asset_rec.fa_location_id    := p_asset_dist_tbl(1).location_ccid;
334                       l_inst_asset_rec.asset_quantity    := l_inst_asset_tbl(1).asset_quantity +
335                                                             p_asset_dist_tbl(1).transaction_units;
336                       update_inst_asset (
337                         px_csi_txn_rec    => l_csi_txn_rec,
338                         px_inst_asset_rec => l_inst_asset_rec,
339                         x_return_status   => l_return_status);
340 
341                       IF l_return_status <> fnd_api.g_ret_sts_success THEN
342                         RAISE fnd_api.g_exc_error;
343                       END IF;
344                     ELSE
345                       null;
346                     END IF;
347                   END IF;
348 
349                 ELSE
350 
351                   -- dump in to the staging table
352                   cse_fa_stage_pkg.stage_addition(
353                     p_trans_rec         => p_trans_rec,
354                     p_asset_hdr_rec     => p_asset_hdr_rec,
355                     p_asset_desc_rec    => p_asset_desc_rec,
356                     p_asset_fin_rec     => p_asset_fin_rec,
357                     p_asset_dist_tbl    => p_asset_dist_tbl,
358                     p_inv_tbl           => p_inv_tbl);
359 
360                 END IF; -- instance is is not null
361               END IF;
362 
363             ELSE
364 
365               -- dump in to the staging table
366               cse_fa_stage_pkg.stage_addition(
367                 p_trans_rec         => p_trans_rec,
368                 p_asset_hdr_rec     => p_asset_hdr_rec,
369                 p_asset_desc_rec    => p_asset_desc_rec,
370                 p_asset_fin_rec     => p_asset_fin_rec,
371                 p_asset_dist_tbl    => p_asset_dist_tbl,
372                 p_inv_tbl           => p_inv_tbl);
373 
374             END IF; -- proj or oat identifies chk
375 
376           ELSE
377 
378             -- dump in to the staging table
379             cse_fa_stage_pkg.stage_addition(
380               p_trans_rec         => p_trans_rec,
381               p_asset_hdr_rec     => p_asset_hdr_rec,
382               p_asset_desc_rec    => p_asset_desc_rec,
383               p_asset_fin_rec     => p_asset_fin_rec,
384               p_asset_dist_tbl    => p_asset_dist_tbl,
385               p_inv_tbl           => p_inv_tbl);
386 
387           END IF;
388         END LOOP;
389       ELSE
390 
391         -- dump in to the staging table
392         cse_fa_stage_pkg.stage_addition(
393           p_trans_rec         => p_trans_rec,
394           p_asset_hdr_rec     => p_asset_hdr_rec,
395           p_asset_desc_rec    => p_asset_desc_rec,
396           p_asset_fin_rec     => p_asset_fin_rec,
397           p_asset_dist_tbl    => p_asset_dist_tbl,
398           p_inv_tbl           => p_inv_tbl);
399 
400       END IF;
401 
402     END IF;
403     RETURN TRUE;
404   EXCEPTION
405     WHEN fnd_api.g_exc_error THEN
406       rollback to cse_addition;
407       RETURN FALSE;
408     WHEN others THEN
409       rollback to cse_addition;
410       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
411       fnd_message.set_token('API_NAME','csi_fa_integration_grp.addition');
412       fnd_message.set_token('SQL_ERROR',sqlerrm);
413       fnd_msg_pub.add;
414       RETURN FALSE;
415   END addition;
416 
417   FUNCTION unit_adjustment(
418     p_trans_rec         IN     fa_api_types.trans_rec_type,
419     p_asset_hdr_rec     IN     fa_api_types.asset_hdr_rec_type,
420     p_asset_dist_tbl    IN     fa_api_types.asset_dist_tbl_type)
421   RETURN boolean
422   IS
423   BEGIN
424     IF is_oat_enabled THEN
425       -- invoke oat routines
426       null;
427     END IF;
428     RETURN TRUE;
429   EXCEPTION
430     WHEN fnd_api.g_exc_error THEN
431       RETURN FALSE;
432     WHEN others THEN
433       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
434       fnd_message.set_token('API_NAME','csi_fa_integration_grp.unit_adjustment');
435       fnd_message.set_token('SQL_ERROR',sqlerrm);
436       fnd_msg_pub.add;
437       RETURN FALSE;
438   END unit_adjustment;
439 
440   FUNCTION adjustment(
441     p_trans_rec         IN     fa_api_types.trans_rec_type,
442     p_asset_hdr_rec     IN     fa_api_types.asset_hdr_rec_type,
443     p_asset_fin_rec_adj IN     fa_api_types.asset_fin_rec_type,
444     p_inv_tbl           IN     fa_api_types.inv_tbl_type)
445   RETURN boolean IS
446 
447     l_asset_id               number;
448     l_book_type_code         varchar2(30);
449     l_units                  number;
450     l_current_units          number;
451     l_location_id            number;
452     l_expense_ccid           number;
453     l_employee_id            number;
454     l_new_dist_id            number;
455     l_instance_id            number;
456     l_exp_item_id            number;
457 
458     l_txn_error_id           number;
459     l_txn_error_rec          csi_datastructures_pub.transaction_error_rec;
460 
461     l_xml_string             varchar2(2000);
462     l_error_message          varchar2(4000);
463     l_msg_count              number;
464     l_msg_data               varchar2(4000);
465     l_return_status          varchar2(1) := fnd_api.g_ret_sts_success;
466 
467     CURSOR exp_inst_cur(p_project_asset_line_id IN number) IS
468       SELECT pei.expenditure_item_id,
469              pei.orig_transaction_reference txn_ref,
470              pei.attribute6 item,
471              pei.attribute7 serial_number,
472              pei.attribute8 location,
473              pei.attribute9 asset_category,
474              pei.attribute10 product_class,
475              ppa.location_id,
476              ppa.depreciation_expense_ccid expense_ccid,
477              ppa.assigned_to_person_id     employee_id
478       FROM   pa_expenditure_items_all      pei,
479              pa_project_asset_line_details ppald,
480              pa_project_asset_lines_all    ppal,
481              pa_project_assets_all         ppa
482       WHERE  ppal.project_asset_line_id         = p_project_asset_line_id
483       AND    ppa.project_asset_id               = ppal.project_asset_id
484       AND    ppald.project_asset_line_detail_id = ppal.project_asset_line_detail_id
485       AND    pei.expenditure_item_id            = ppald.expenditure_item_id
486       AND    pei.transaction_source             IN ('CSE_PO_RECEIPT','CSE_INV_ISSUE')
487       AND    pei.net_zero_adjustment_flag       = 'N'
488       AND   (pei.attribute8 is not null and pei.attribute9 is not null);
489 
490   BEGIN
491     IF is_oat_enabled THEN
492       debug('inside cse_fa_integration_grp.cost_adjustment');
493       -- cost adjustment only for now
494       IF nvl(p_asset_fin_rec_adj.cost, 0) <> 0 THEN
495         -- invoke oat routines
496         IF p_inv_tbl.COUNT > 0 THEN
497           FOR p_ind IN p_inv_tbl.FIRST .. p_inv_tbl.LAST
498           LOOP
499 
500             debug('  feeder_system_name         : '||p_inv_tbl(p_ind).feeder_system_name);
501 
502             IF p_inv_tbl(p_ind).feeder_system_name = 'ORACLE PROJECTS' THEN
503 
504               l_asset_id           := p_asset_hdr_rec.asset_id;
505               l_book_type_code     := p_asset_hdr_rec.book_type_code;
506 
507               debug('  asset_id                   : '||l_asset_id);
508               debug('  book_type_code             : '||l_book_type_code);
509               debug('  project_id                 : '||p_inv_tbl(p_ind).project_id);
510               debug('  task_id                    : '||p_inv_tbl(p_ind).task_id);
511               debug('  project_asset_line_id      : '||p_inv_tbl(p_ind).project_asset_line_id);
512               debug('  transaction_type_code      : '||p_trans_rec.transaction_type_code);
513               debug('  transaction_subtype        : '||p_trans_rec.transaction_subtype);
514               debug('  payables_units             : '||p_inv_tbl(p_ind).payables_units);
515 
516               SELECT current_units
517               INTO   l_current_units
518               FROM   fa_additions
519               WHERE  asset_id = l_asset_id;
520 
521               debug('  current_units              : '||l_current_units);
522 
523               l_units := p_inv_tbl(p_ind).payables_units - l_current_units;
524 
525               debug('  units_adjusted             : '||l_units);
526 
527               FOR exp_inst_rec IN exp_inst_cur(p_inv_tbl(p_ind).project_asset_line_id)
528               LOOP
529 
530                 l_location_id   := exp_inst_rec.location_id;
531                 l_expense_ccid  := exp_inst_rec.expense_ccid;
532                 l_employee_id   := exp_inst_rec.employee_id;
533                 l_exp_item_id   := exp_inst_rec.expenditure_item_id;
534 
535                 BEGIN
536                   l_instance_id:=to_number(substr(exp_inst_rec.txn_ref,1,(instr(exp_inst_rec.txn_ref,'-')-1)));
537                 EXCEPTION
538                   WHEN others THEN
539                     l_instance_id := null;
540                 END;
541 
542                 debug('  expenditure_item_id        : '||exp_inst_rec.expenditure_item_id);
543                 debug('  txn_ref                    : '||exp_inst_rec.txn_ref);
544                 debug('  instance_id                : '||l_instance_id);
545                 debug('  location_id                : '||l_location_id);
546                 debug('  depreciation_expense_ccid  : '||l_expense_ccid);
547 
548                 IF l_instance_id is not null THEN
549                   EXIT;
550                 END IF;
551 
552               END LOOP;
553 
554               IF l_instance_id is not null AND l_units <> 0 THEN
555 
556                 cse_util_pkg.build_error_string(l_xml_string,'ASSET_ID',l_asset_id);
557                 cse_util_pkg.build_error_string(l_xml_string,'BOOK_TYPE_CODE',l_book_type_code);
558                 cse_util_pkg.build_error_string(l_xml_string,'UNITS',l_units);
559                 cse_util_pkg.build_error_string(l_xml_string,'LOCATION_ID',l_location_id);
560                 cse_util_pkg.build_error_string(l_xml_string,'EMPLOYEE_ID',l_employee_id);
561                 cse_util_pkg.build_error_string(l_xml_string,'DEPRN_EXPENSE_CCID',l_expense_ccid);
562                 cse_util_pkg.build_error_string(l_xml_string,'INSTANCE_ID',l_instance_id);
563                 cse_util_pkg.build_error_string(l_xml_string,'PA_ASSET_LINE_ID',p_inv_tbl(p_ind).project_asset_line_id);
564                 cse_util_pkg.build_error_string(l_xml_string,'EXP_ITEM_ID', l_exp_item_id);
565 
566                 l_txn_error_rec.source_id            := p_inv_tbl(p_ind).project_asset_line_id;
567                 l_txn_error_rec.source_type          := 'FA_UNIT_ADJUSTMENT_NORMAL';
568                 l_txn_error_rec.source_header_ref    := 'ASSET_ID';
569                 l_txn_error_rec.source_header_ref_id := l_asset_id;
570                 l_txn_error_rec.source_line_ref      := 'EXP_ITEM_ID';
571                 l_txn_error_rec.source_line_ref_id   := l_exp_item_id;
572                 l_txn_error_rec.processed_flag       := cse_datastructures_pub.g_bypass_flag;
573                 l_txn_error_rec.error_text           := l_error_message;
574                 l_txn_error_rec.error_stage          := cse_datastructures_pub.g_fa_update;
575                 l_txn_error_rec.message_string       := l_xml_string;
576 
577                 debug('calling csi_transactions_pvt.create_txn_error to create unit adjustment entry');
578 
579                 csi_transactions_pvt.create_txn_error(
580                   p_api_version          => 1.0,
581                   p_init_msg_list        => fnd_api.g_true,
582                   p_commit               => fnd_api.g_false,
583                   p_validation_level     => fnd_api.g_valid_level_full,
584                   p_txn_error_rec        => l_txn_error_rec,
585                   x_return_status        => l_return_status,
586                   x_msg_count            => l_msg_count,
587                   x_msg_data             => l_msg_data,
588                   x_transaction_error_id => l_txn_error_id);
589 
590               END IF;
591 
592             END IF; -- feeder_system_name = 'ORACLE PROJECTS'
593           END LOOP;
594         END IF; -- p_inv_tbl.count > 0
595       END IF;
596     END IF;
597 
598     RETURN TRUE;
599 
600   EXCEPTION
601     WHEN fnd_api.g_exc_error THEN
602       RETURN FALSE;
603     WHEN others THEN
604       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
605       fnd_message.set_token('API_NAME','csi_fa_integration_grp.adjustment');
606       fnd_message.set_token('SQL_ERROR',sqlerrm);
607       fnd_msg_pub.add;
608       RETURN FALSE;
609   END adjustment;
610 
611   FUNCTION transfer(
612     p_trans_rec         IN     fa_api_types.trans_rec_type,
613     p_asset_hdr_rec     IN     fa_api_types.asset_hdr_rec_type,
614     p_asset_dist_tbl    IN     fa_api_types.asset_dist_tbl_type)
615   RETURN boolean
616   IS
617   BEGIN
618     IF is_oat_enabled THEN
619       -- invoke oat routines
620       null;
621     END IF;
622     RETURN TRUE;
623   EXCEPTION
624     WHEN fnd_api.g_exc_error THEN
625       RETURN FALSE;
626     WHEN others THEN
627       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
628       fnd_message.set_token('API_NAME','csi_fa_integration_grp.transfer');
629       fnd_message.set_token('SQL_ERROR',sqlerrm);
630       fnd_msg_pub.add;
631       RETURN FALSE;
632   END transfer;
633 
634   FUNCTION retire(
635     p_asset_id          IN     number,
636     p_book_type_code    IN     varchar2,
637     p_retirement_id     IN     number,
638     p_retirement_date   IN     date,
639     p_retirement_units  IN     number)
640   RETURN boolean
641   IS
642     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
643     l_error_message     varchar2(2000);
644   BEGIN
645     IF is_oat_enabled THEN
646       null;
647     END IF;
648     RETURN TRUE;
649   EXCEPTION
650     WHEN fnd_api.g_exc_error THEN
651       RETURN FALSE;
652     WHEN others THEN
653       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
654       fnd_message.set_token('API_NAME','csi_fa_integration_grp.retire');
655       fnd_message.set_token('SQL_ERROR',sqlerrm);
656       fnd_msg_pub.add;
657       RETURN FALSE;
658   END retire;
659 
660   FUNCTION reinstate(
661     p_asset_id            IN   number,
662     p_book_type_code      IN   varchar2,
663     p_retirement_id       IN   number,
664     p_reinstatement_date  IN   date,
665     p_reinstatement_units IN   number)
666   RETURN boolean
667   IS
668     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
669     l_error_message     varchar2(2000);
670   BEGIN
671     IF is_oat_enabled THEN
672       -- invoke oat routines
673       cse_fa_txn_pkg.asset_reinstatement(
674         p_retirement_id   => p_retirement_id,
675         p_book_type_code  => p_book_type_code,
676         p_asset_id        => p_asset_id,
677         p_units           => p_reinstatement_units,
678         p_trans_date      => p_reinstatement_date,
679         p_trans_by        => fnd_global.user_id,
680         x_return_status   => l_return_status,
681         x_error_message   => l_error_message);
682 
683       IF l_return_status <> fnd_api.g_ret_sts_success THEN
684         RAISE fnd_api.g_exc_error;
685       END IF;
686 
687     END IF;
688     RETURN TRUE;
689   EXCEPTION
690     WHEN fnd_api.g_exc_error THEN
691       RETURN FALSE;
692     WHEN others THEN
693       fnd_message.set_name('CSI','CSI_UNEXP_SQL_ERROR');
694       fnd_message.set_token('API_NAME','csi_fa_integration_grp.reinstate');
695       fnd_message.set_token('SQL_ERROR',sqlerrm);
696       fnd_msg_pub.add;
697       RETURN FALSE;
698   END reinstate;
699 
700 END cse_fa_integration_grp;