DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSI_T_TXN_LINE_DTLS_PVT

Source


1 PACKAGE BODY csi_t_txn_line_dtls_pvt AS
2 /* $Header: csivttdb.pls 120.10 2008/06/03 21:48:28 devijay ship $*/
3 
4   g_user_id          number := fnd_global.user_id;
5   g_login_id         number := fnd_global.login_id;
6 
7   /* local routine to wrap the gen utility debug stuff */
8 
9   PROCEDURE debug(
10     p_message IN varchar2)
11   IS
12   BEGIN
13     csi_t_gen_utility_pvt.add(p_message);
14   END debug;
15 
16   PROCEDURE api_log(
17     p_api_name IN varchar2)
18   IS
19   BEGIN
20     csi_t_gen_utility_pvt.dump_api_info(
21       p_pkg_name => 'csi_t_txn_line_dtls_pvt',
22       p_api_name => p_api_name);
23   END api_log;
24 
25   PROCEDURE create_txn_line_dtls(
26     p_api_version              IN     number,
27     p_commit                   IN     varchar2 := fnd_api.g_false,
28     p_init_msg_list            IN     varchar2 := fnd_api.g_false,
29     p_validation_level         IN     number   := fnd_api.g_valid_level_full,
30     p_txn_line_dtl_index       IN     number,
31     p_txn_line_dtl_rec         IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_rec,
32     px_txn_party_dtl_tbl       IN OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
33     px_txn_pty_acct_detail_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
34     px_txn_ii_rltns_tbl        IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
35     px_txn_org_assgn_tbl       IN OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
36     px_txn_ext_attrib_vals_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
37     x_return_status               OUT NOCOPY varchar2,
38     x_msg_count                   OUT NOCOPY number,
39     x_msg_data                    OUT NOCOPY varchar2)
40 
41   IS
42 
43     l_api_name       CONSTANT varchar2(30)  := 'create_txn_line_dtls';
44     l_api_version    CONSTANT number        := 1.0;
45     l_debug_level             number;
46     l_return_status           varchar2(1);
47     l_msg_count               number;
48     l_msg_data                varchar2(2000);
49 
50     l_txn_line_detail_id      number;
51     l_uom_code                mtl_units_of_measure.uom_code%TYPE;
52     l_quantity                number;
53     l_processing_status       varchar2(30);
54     l_preserve_detail_flag    varchar2(1);
55     l_valid                   boolean     := TRUE;
56     l_creation_flag           varchar2(1) := 'N';
57 
58     l_txn_party_rec           csi_t_datastructures_grp.txn_party_detail_rec;
59     l_txn_ii_rltns_rec        csi_t_datastructures_grp.txn_ii_rltns_rec;
60     l_txn_oa_rec              csi_t_datastructures_grp.txn_org_assgn_rec;
61     l_txn_ea_rec              csi_t_datastructures_grp.txn_ext_attrib_vals_rec;
62 
63     --contact party id variables
64     l_tmp_party_dtl_tbl      csi_t_datastructures_grp.txn_party_detail_tbl;
65     l_contact_party_id       number;
66     l_cascade_owner_flag     varchar2(1);-- bug 2972082
67     l_contact_party_index    varchar2(1) := 'N';
68 
69     l_src_transaction_type_id NUMBER; -- ER 6936037
70 
71   BEGIN
72 
73     -- Standard Start of API savepoint
74     SAVEPOINT create_txn_line_dtls;
75 
76     -- Initialize message list if p_init_msg_list is set to TRUE.
77     IF fnd_api.to_boolean( p_init_msg_list ) THEN
78       fnd_msg_pub.initialize;
79     END IF;
80 
81     --  Initialize API return status to success
82     x_return_status := fnd_api.g_ret_sts_success;
83 
84     -- Standard call to check for call compatibility.
85     IF NOT
86 
87        fnd_api.compatible_API_call (
88          p_current_version_number => l_api_version,
89          p_caller_version_number  => p_api_version,
90          p_api_name               => l_api_name,
91          p_pkg_name               => g_pkg_name) THEN
92 
93       RAISE fnd_api.g_exc_unexpected_error;
94 
95     END IF;
96 
97     -- debug messages
98     l_debug_level := csi_t_gen_utility_pvt.g_debug_level;
99 
100     csi_t_gen_utility_pvt.dump_api_info(
101       p_pkg_name => g_pkg_name,
102       p_api_name => l_api_name);
103 
104     debug(p_api_version||'-'||p_commit||'-'||p_validation_level||'-'||p_init_msg_list);
105 
106     IF l_debug_level > 1 then
107 
108       csi_t_gen_utility_pvt.dump_line_detail_rec(
109         p_line_detail_rec => p_txn_line_dtl_rec);
110 
111     END IF;
112 
113     -- Main API code
114 
115     -- check for required parameters
116 
117     csi_t_vldn_routines_pvt.check_reqd_param(
118       p_value       => p_txn_line_dtl_rec.sub_type_id,
119       p_param_name  => 'p_txn_line_dtl_rec.sub_type_id',
120       p_api_name    => l_api_name);
121 
122 /* Commenting/Removing this restriction and API will default value for this flag based on the value for instance id column - shegde*/
123 /*
124   IF p_txn_line_dtl_rec.instance_exists_flag = 'Y' THEN
125     csi_t_vldn_routines_pvt.check_reqd_param(
126       p_value       => p_txn_line_dtl_rec.instance_exists_flag,
127       p_param_name  => 'p_txn_line_dtl_rec.instance_exists_flag',
128       p_api_name    => l_api_name);
129   END IF;
130 */
131 
132     csi_t_vldn_routines_pvt.check_reqd_param(
133       p_value       => p_txn_line_dtl_rec.inventory_item_id,
134       p_param_name  => 'p_txn_line_dtl_rec.inventory_item_id',
135       p_api_name    => l_api_name);
136 
137     csi_t_vldn_routines_pvt.check_reqd_param(
138       p_value       => p_txn_line_dtl_rec.inv_organization_id,
139       p_param_name  => 'p_txn_line_dtl_rec.inv_organization_id',
140       p_api_name    => l_api_name);
141 
142     csi_t_vldn_routines_pvt.check_reqd_param(
143       p_value       => p_txn_line_dtl_rec.quantity,
144       p_param_name  => 'p_txn_line_dtl_rec.quantity',
145       p_api_name    => l_api_name);
146 
147     csi_t_vldn_routines_pvt.check_reqd_param(
148       p_value       => p_txn_line_dtl_rec.unit_of_measure,
149       p_param_name  => 'p_txn_line_dtl_rec.unit_of_measure',
150       p_api_name    => l_api_name);
151 
152     csi_t_vldn_routines_pvt.check_reqd_param(
153       p_value       => p_txn_line_dtl_rec.source_transaction_flag,
154       p_param_name  => 'p_txn_line_dtl_rec.source_transaction_flag',
155       p_api_name    => l_api_name);
156 
157     IF NVL(p_txn_line_dtl_rec.location_id, fnd_api.g_miss_num) <>
158        fnd_api.g_miss_num
159     THEN
160 
161       csi_t_vldn_routines_pvt.check_reqd_param(
162         p_value       => p_txn_line_dtl_rec.location_type_code,
163         p_param_name  => 'p_txn_line_dtl_rec.location_type_code',
164         p_api_name    => l_api_name);
165 
166     END IF;
167 /* no longer required. all serialized item instances have the serials numbers in INV now. 3593990
168     IF NVL(p_txn_line_dtl_rec.serial_number, fnd_api.g_miss_char) <>
169        fnd_api.g_miss_char
170     THEN
171 
172       csi_t_vldn_routines_pvt.check_reqd_param(
173         p_value       => p_txn_line_dtl_rec.mfg_serial_number_flag,
174         p_param_name  => 'p_txn_line_dtl_rec.mfg_serial_number_flag',
175         p_api_name    => l_api_name);
176 
177     END IF;
178 */
179 
180     debug('Dtls: End of required parameters check .');
181 
182     -- validate txn sub_type_id
183     IF nvl(p_txn_line_dtl_rec.sub_type_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
184 
185       --debug('Validate sub type id.');
186 
187       csi_t_vldn_routines_pvt.validate_sub_type_id(
188         p_transaction_line_id => p_txn_line_dtl_rec.transaction_line_id,
189         p_sub_type_id         => p_txn_line_dtl_rec.sub_type_id,
190         x_return_status       => l_return_status);
191 
192       IF l_return_status <> fnd_api.g_ret_sts_success THEN
193         debug('Validate sub type id failed.');
194 
195         fnd_message.set_name('CSI','CSI_TXN_SUB_TYPE_ID_INVALID');
196         fnd_message.set_token('SUB_TYPE_ID',p_txn_line_dtl_rec.sub_type_id);
197         fnd_msg_pub.add;
198         raise fnd_api.g_exc_error;
199 
200       END IF;
201 
202     END IF;
203 
204     -- validate instance type
205     IF NVL(p_txn_line_dtl_rec.instance_type_code, fnd_api.g_miss_char) <>
206        fnd_api.g_miss_char
207     THEN
208 
209       --debug('Validate instance type code.');
210 
211       IF NOT
212          csi_item_instance_vld_pvt.is_valid_instance_type(
213            p_instance_type_code => p_txn_line_dtl_rec.instance_type_code)
214       THEN
215         debug('Validate instance type code failed.');
216         RAISE fnd_api.g_exc_error;
217       END IF;
218 
219     END IF;
220 
221     -- validate item instance
222 --    IF p_txn_line_dtl_rec.instance_exists_flag = 'Y' THEN
223     IF nvl(p_txn_line_dtl_rec.instance_id, fnd_api.g_miss_num) <>
224        fnd_api.g_miss_num THEN
225 
226       --debug('Validate instance id .');
227       csi_t_vldn_routines_pvt.validate_instance_id(
228         p_instance_id    => p_txn_line_dtl_rec.instance_id,
229         x_return_status  => l_return_status);
230 
231       IF l_return_status <> fnd_api.g_ret_sts_success THEN
232 
233         debug('Validate instance id failed.');
234 
235         FND_MESSAGE.set_name('CSI','CSI_API_INVALID_INSTANCE_ID');
236         FND_MESSAGE.set_token('INSTANCE_ID',p_txn_line_dtl_rec.instance_id);
237         fnd_msg_pub.add;
238         RAISE fnd_api.g_exc_error;
239 
240       END IF;
241 
242     END IF;
243 
244     -- validate system id
245     IF NVL(p_txn_line_dtl_rec.csi_system_id, fnd_api.g_miss_num) <>
246        fnd_api.g_miss_num
247     THEN
248 
249       --debug('Validate csi system id .');
250       IF NOT
251          csi_item_instance_vld_pvt.is_valid_system_id(
252            p_system_id => p_txn_line_dtl_rec.csi_system_id) THEN
253 
254         debug('Validate csi system id failed.');
255         RAISE fnd_api.g_exc_error;
256       END IF;
257 
258     END IF;
259 
260     -- Start of Addition for ER 6936037
261     BEGIN
262     SELECT source_transaction_type_id
263            into l_src_transaction_type_id
264            from CSI_T_TRANSACTION_LINES
265            WHERE transaction_line_id = p_txn_line_dtl_rec.transaction_line_id;
266     EXCEPTION
267       WHEN OTHERS THEN
268         debug('No Transaction Type Id found for transaction_line_id - ' || p_txn_line_dtl_rec.transaction_line_id);
269         null;
270     END;
271     -- End of Addition for ER 6936037
272 
273     -- If the transaction is a mass update, IB trackable checking is skipped
274     -- as per ER 6936037
275     IF NVL(l_src_transaction_type_id, fnd_api.g_miss_num) <> 3 THEN
276 
277     -- is item trackable (inventory_item_id)
278     IF NVL(p_txn_line_dtl_rec.inventory_item_id, fnd_api.g_miss_num) <>
279        fnd_api.g_miss_num THEN
280 
281       --debug('Validate item id for trackabality .');
282       IF NOT
283          csi_item_instance_vld_pvt.is_trackable(
284            p_inv_item_id => p_txn_line_dtl_rec.inventory_item_id,
285            p_org_id      => p_txn_line_dtl_rec.inv_organization_id) THEN
286 
287         debug('Validate item id for trackabality failed.');
288         RAISE fnd_api.g_exc_error;
289       END IF;
290 
291     END IF;
292 
293     END IF; -- Checking for Mass Addition transaction
294 
295     -- item condition codes against the mtl_material_statuses
296     IF NVL(p_txn_line_dtl_rec.item_condition_id,fnd_api.g_miss_num) <>
297        fnd_api.g_miss_num
298     THEN
299 
300       --debug('Validate item condition id .');
301 
302       csi_item_instance_vld_pvt.is_valid_condition(
303         p_instance_condition_id  => p_txn_line_dtl_rec.item_condition_id,
304         p_creation_complete_flag => l_creation_flag,
305         l_return_value           => l_valid);
306 
307       IF not(l_valid) THEN
308         debug('Validate item condition id failed.');
309         RAISE fnd_api.g_exc_error;
310       END IF;
311 
312     END IF;
313 
314     -- item revision
315     IF nvl(p_txn_line_dtl_rec.inventory_revision, fnd_api.g_miss_char) <>
316        fnd_api.g_miss_char
317     THEN
318 
319       --debug('Validate item revision .');
320 
321       csi_item_instance_vld_pvt.validate_revision(
322         p_inv_item_id            => p_txn_line_dtl_rec.inventory_item_id,
323         p_inv_org_id             => p_txn_line_dtl_rec.inv_organization_id,
324         p_revision               => p_txn_line_dtl_rec.inventory_revision,
325         p_creation_complete_flag => l_creation_flag,
326         l_return_value           => l_valid);
327 
328       IF NOT(l_valid) THEN
329         debug('Validate item revision failed.');
330         RAISE fnd_api.g_exc_error;
331       END IF;
332 
333     END IF;
334 
335     l_uom_code := p_txn_line_dtl_rec.unit_of_measure;
336     l_quantity := p_txn_line_dtl_rec.quantity;
337 
338     -- validate quantity
339     IF nvl(l_quantity,0) <= 0 THEN
340       fnd_message.set_name('CSI','CSI_TXN_QTY_INVALID');
341       fnd_message.set_token('ITEM_ID',p_txn_line_dtl_rec.inventory_item_id);
342       fnd_message.set_token('QTY',l_quantity);
343       fnd_msg_pub.add;
344       raise fnd_api.g_exc_error;
345     END IF;
346 
347     --debug('Validate item uom .');
348     -- validate uom
349     csi_item_instance_vld_pvt.is_valid_uom(
350       p_inv_org_id             => p_txn_line_dtl_rec.inv_organization_id,
351       p_inv_item_id            => p_txn_line_dtl_rec.inventory_item_id,
352       p_uom_code               => l_uom_code,
353       p_quantity               => l_quantity,
354       p_creation_complete_flag => l_creation_flag,
355       l_return_value           => l_valid);
356 
357     IF not (l_valid)  then
358       debug('Validate item uom failed.');
359       RAISE fnd_api.g_exc_error;
360     END IF;
361 
362     -- serial number
363     IF nvl(p_txn_line_dtl_rec.serial_number, fnd_api.g_miss_char) <> fnd_api.g_miss_char
364        --AND
365        --nvl(p_txn_line_dtl_rec.mfg_serial_number_flag, fnd_api.g_miss_char) = 'Y' bug 3593990
366     THEN
367 
368       debug('Validating Serial Number.');
369 
370       csi_t_vldn_routines_pvt.validate_serial_number(
371         p_inventory_item_id => p_txn_line_dtl_rec.inventory_item_id,
372         p_organization_id   => p_txn_line_dtl_rec.inv_organization_id,
373         p_serial_number     => p_txn_line_dtl_rec.serial_number,
374         x_return_status     => l_return_status);
375 
376       IF l_return_status <> fnd_api.g_ret_sts_success THEN
377         debug('csi_t_vldn_routines_pvt.validate_serial_number Failed.');
378         RAISE fnd_api.g_exc_error;
379       END IF;
380 
381       /*
382       csi_item_instance_vld_pvt.validate_serial_number(
383         p_inv_org_id             => p_txn_line_dtl_rec.inv_organization_id,
384         p_inv_item_id            => p_txn_line_dtl_rec.inventory_item_id,
385         p_serial_number          => p_txn_line_dtl_rec.serial_number,
386         p_mfg_serial_number_flag => p_txn_line_dtl_rec.mfg_serial_number_flag,
387         p_creation_complete_flag => l_creation_flag,
388         l_return_value           => l_valid);
389 
390       IF NOT(l_valid) THEN
391         debug('Validate item serial number failed.');
392         RAISE fnd_api.g_exc_error;
393       END IF;
394       */
395 
396     END IF;
397 
398     -- lot number
399     IF nvl(p_txn_line_dtl_rec.lot_number, fnd_api.g_miss_char) <> fnd_api.g_miss_char
400     THEN
401 
402       debug('Validating line details lot number .');
403 
404       csi_t_vldn_routines_pvt.validate_lot_number(
405         p_inventory_item_id  => p_txn_line_dtl_rec.inventory_item_id,
406         p_organization_id    => p_txn_line_dtl_rec.inv_organization_id,
407         p_lot_number         => p_txn_line_dtl_rec.lot_number,
408         x_return_status      => l_return_status);
409 
410       IF l_return_status <> fnd_api.g_ret_sts_success THEN
411         debug('csi_t_vldn_routines_pvt.validate_lot_number Failed.');
412         RAISE fnd_api.g_exc_error;
413       END IF;
414 
415       /*
416       csi_item_instance_vld_pvt.validate_lot_number(
417         p_inv_org_id             => p_txn_line_dtl_rec.inv_organization_id,
418         p_inv_item_id            => p_txn_line_dtl_rec.inventory_item_id,
419         p_lot_number             => p_txn_line_dtl_rec.lot_number,
420         p_mfg_serial_number_flag => p_txn_line_dtl_rec.mfg_serial_number_flag,
421         p_creation_complete_flag => l_creation_flag,
422         l_return_value           => l_valid);
423 
424       IF NOT(l_valid) THEN
425         debug('Validate item lot number failed.');
426         RAISE fnd_api.g_exc_error;
427       END IF;
428       */
429 
430     END IF;
431 
432     --debug('Validate location type code .');
433 
434     -- location_type_code
435     IF NOT
436        csi_item_instance_vld_pvt.is_valid_location_source(
437          p_loc_source_table => p_txn_line_dtl_rec.location_type_code)
438     THEN
439       debug('Validate location type code failed.');
440       RAISE fnd_api.g_exc_error;
441     END IF;
442 
443     IF NVL(p_txn_line_dtl_rec.location_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num
444     THEN
445 
446       -- debug('Validate location id .');
447       l_valid := csi_item_instance_vld_pvt.is_valid_location_id(
448                    p_location_source_table => p_txn_line_dtl_rec.location_type_code,
449                    p_location_id           => p_txn_line_dtl_rec.location_id);
450 
451       IF NOT (l_valid) then
452          debug('Validate location id failed.');
453          RAISE fnd_api.g_exc_error;
454       END IF;
455 
456     END IF;
457 
458    /* SELECT decode(nvl(p_txn_line_dtl_rec.processing_status,fnd_api.g_miss_char),
459             fnd_api.g_miss_char, 'SUBMIT', p_txn_line_dtl_rec.processing_status)
460     INTO   l_processing_status
461     FROM   sys.dual;
462 
463     SELECT decode(nvl(p_txn_line_dtl_rec.preserve_detail_flag,fnd_api.g_miss_char),
464              fnd_api.g_miss_char, 'Y', p_txn_line_dtl_rec.preserve_detail_flag)
465     INTO   l_preserve_detail_flag
466     FROM   sys.dual;*/
467 
468      -- Start Removed decode from sys.dual for bug  5897107
469  	     IF  nvl(p_txn_line_dtl_rec.processing_status,fnd_api.g_miss_char) = fnd_api.g_miss_char then
470  	       l_processing_status :=  'SUBMIT';
471  	     ELSE
472  	       l_processing_status := p_txn_line_dtl_rec.processing_status;
473  	     END IF;
474 
475  	     IF nvl(p_txn_line_dtl_rec.preserve_detail_flag,fnd_api.g_miss_char) = fnd_api.g_miss_char then
476  	       l_preserve_detail_flag :=  'Y';
477  	     ELSE
478  	       l_preserve_detail_flag :=  p_txn_line_dtl_rec.preserve_detail_flag;
479  	     END IF;
480      -- End Removed decode from sys.dual for bug  5897107
481 
482     IF NVL(p_txn_line_dtl_rec.reference_source_line_id, fnd_api.g_miss_num) <>
483        fnd_api.g_miss_num -- RMA fulfillment 11.5.9 ER
484     THEN
485 
486       csi_t_vldn_routines_pvt.validate_txn_source_id(
487             p_txn_source_name  => 'ORDER_ENTRY',
488             p_txn_source_id    =>  p_txn_line_dtl_rec.reference_source_line_id,
489             x_return_status    => l_return_status);
490 
491       IF l_return_status <> fnd_api.g_ret_sts_success THEN
492         debug('csi_t_vldn_routines_pvt.validate_txn_source_id.');
493         RAISE fnd_api.g_exc_error;
494       END IF;
495 
496     END IF;
497 
498 /*
499 --commented for the M-M enhancement since txn_line_detail_id will now be passed as sort of an index identifier
500   in the ii relationships table (passed as a parameter)
501     IF nvl(p_txn_line_dtl_rec.txn_line_detail_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
502       l_txn_line_detail_id := p_txn_line_dtl_rec.txn_line_detail_id;
503     END IF;
504 */
505       l_txn_line_detail_id := fnd_api.g_miss_num;
506 
507 
508     IF nvl(p_txn_line_dtl_rec.cascade_owner_flag, fnd_api.g_miss_char) = fnd_api.g_miss_char THEN
509 
510      --commented SQL below to make changes for the bug 4028827
511       /*
512 	 Begin
513 	 Select nvl(ownership_cascade_at_txn, 'N')
514 	 Into l_cascade_owner_flag
515 	 From csi_install_parameters;
516 	 Exception when others then
517          l_cascade_owner_flag := 'N';
518           End;
519       */
520       l_cascade_owner_flag := NVL(csi_datastructures_pub.g_install_param_rec. ownership_cascade_at_txn,'N');
521     ELSE
522       l_cascade_owner_flag := p_txn_line_dtl_rec.cascade_owner_flag;
523     END IF;
524 
525     IF nvl(p_txn_line_dtl_rec.parent_instance_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
526       csi_t_vldn_routines_pvt.validate_instance_id(
527         p_instance_id    => p_txn_line_dtl_rec.parent_instance_id,
528         x_return_status  => l_return_status);
529 
530       IF l_return_status <> fnd_api.g_ret_sts_success THEN
531 
532         debug('Validate instance id failed.');
533 
534         FND_MESSAGE.set_name('CSI','CSI_API_INVALID_INSTANCE_ID');
535         FND_MESSAGE.set_token('INSTANCE_ID',p_txn_line_dtl_rec.parent_instance_id);
536         fnd_msg_pub.add;
537         RAISE fnd_api.g_exc_error;
538 
539       END IF;
540     END IF;
541     -- Added the below IF for the R12 TSO with Equipment MACD to handle removal
542     -- of CZ keys on Disconnect in the Core APIs by stamping instance_id in CSIT
543     -- upfront and later depending on it
544 
545     IF (NVL(p_txn_line_dtl_rec.config_inst_hdr_id , fnd_api.g_miss_num) <>  fnd_api.g_miss_num
546      AND NVL(p_txn_line_dtl_rec.config_inst_item_id , fnd_api.g_miss_num) <> fnd_api.g_miss_num
547      AND NVL(p_txn_line_dtl_rec.config_inst_baseline_rev_num , fnd_api.g_miss_num) <> fnd_api.g_miss_num)
548     THEN
549      -- with the baseline rev and config keys , get the associated instance id
550      -- if there is a baseline rev num then it is a existing item instance
551 	 Begin
552 	     Select serial_number, instance_id, lot_number
553 	     Into p_txn_line_dtl_rec.serial_number, p_txn_line_dtl_rec.instance_id,
554 		      p_txn_line_dtl_rec.lot_number
555            From csi_item_instances
556 	     Where config_inst_hdr_id = p_txn_line_dtl_rec.config_inst_hdr_id
557             AND config_inst_item_id = p_txn_line_dtl_rec.config_inst_item_id;
558             --AND config_inst_rev_num = p_txn_line_dtl_rec.config_inst_baseline_rev_num;
559        Exception when others then
560          null;  -- do nothing...
561        End;
562     END IF ;
563 
564     -- Added the below IF for bug 2563265
565     IF nvl(p_txn_line_dtl_rec.serial_number, fnd_api.g_miss_char) <> fnd_api.g_miss_char THEN
566      IF nvl(p_txn_line_dtl_rec.instance_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
567       Begin
568        Select serial_number, instance_id, lot_number
569        Into p_txn_line_dtl_rec.serial_number, p_txn_line_dtl_rec.instance_id,
570             p_txn_line_dtl_rec.lot_number
571        From csi_item_instances
572        Where inventory_item_id = p_txn_line_dtl_rec.inventory_item_id
573          and serial_number = p_txn_line_dtl_rec.serial_number;
574         Exception when others then
575          null;-- do nothing. This is just to sync instance data on the tld rec...
576         End;
577      END IF;
578     ELSIF nvl(p_txn_line_dtl_rec.instance_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
579       Begin
580        Select serial_number, instance_id, lot_number
581        Into p_txn_line_dtl_rec.serial_number, p_txn_line_dtl_rec.instance_id,
582            p_txn_line_dtl_rec.lot_number
583        From csi_item_instances
584        Where instance_id = p_txn_line_dtl_rec.instance_id;
585       Exception when others then
586          null;-- do nothing. This should not arise though.
587         End;
588     END IF;
589 
590     -- validate instance status id
591     IF NVL(p_txn_line_dtl_rec.instance_status_id, fnd_api.g_miss_num) <>
592        fnd_api.g_miss_num
593     THEN
594       --debug('Validate instance status id .');
595          csi_item_instance_vld_pvt.is_valid_status(
596            p_instance_status_id     => p_txn_line_dtl_rec.instance_status_id,
597            p_creation_complete_flag => l_creation_flag,
598            l_return_value           => l_valid);
599 
600       IF not(l_valid) THEN
601         debug('Validate instance status id failed.');
602         RAISE fnd_api.g_exc_error;
603       END IF;
604     END IF;
605 
606 
607     -- call table handler to insert in to table
608     begin
609 
610       csi_t_gen_utility_pvt.dump_api_info(
611         p_api_name => 'insert_row',
612         p_pkg_name => 'csi_t_txn_line_details_pkg');
613 
614       csi_t_txn_line_details_pkg.insert_row(
615         px_txn_line_detail_id     => l_txn_line_detail_id,
616         p_transaction_line_id     => p_txn_line_dtl_rec.transaction_line_id,
617         p_sub_type_id             => p_txn_line_dtl_rec.sub_type_id,
618         p_instance_exists_flag    => p_txn_line_dtl_rec.instance_exists_flag,
619         p_source_transaction_flag => p_txn_line_dtl_rec.source_transaction_flag,
620         p_instance_id             => p_txn_line_dtl_rec.instance_id,
621         p_csi_system_id           => p_txn_line_dtl_rec.csi_system_id,
622         p_inventory_item_id       => p_txn_line_dtl_rec.inventory_item_id,
623         p_inv_organization_id     => p_txn_line_dtl_rec.inv_organization_id,
624         p_inventory_revision      => p_txn_line_dtl_rec.inventory_revision,
625         p_instance_type_code      => p_txn_line_dtl_rec.instance_type_code,
626         p_item_condition_id       => p_txn_line_dtl_rec.item_condition_id,
627         p_quantity                => p_txn_line_dtl_rec.quantity,
628         p_unit_of_measure         => p_txn_line_dtl_rec.unit_of_measure,
629         p_qty_remaining           => p_txn_line_dtl_rec.qty_remaining,
630         p_serial_number           => p_txn_line_dtl_rec.serial_number,
631         p_lot_number              => p_txn_line_dtl_rec.lot_number,
632         p_mfg_serial_number_flag  => p_txn_line_dtl_rec.mfg_serial_number_flag,
633         p_location_type_code      => p_txn_line_dtl_rec.location_type_code,
634         p_location_id             => p_txn_line_dtl_rec.location_id,
635         p_installation_date       => p_txn_line_dtl_rec.installation_date,
636         p_in_service_date         => p_txn_line_dtl_rec.in_service_date,
637         p_external_reference      => p_txn_line_dtl_rec.external_reference,
638         p_version_label           => p_txn_line_dtl_rec.version_label,
639         p_transaction_system_id   => p_txn_line_dtl_rec.transaction_system_id,
640         p_sellable_flag           => p_txn_line_dtl_rec.sellable_flag,
641         p_return_by_date          => p_txn_line_dtl_rec.return_by_date,
642         p_active_start_date       => p_txn_line_dtl_rec.active_start_date,
643         p_active_end_date         => p_txn_line_dtl_rec.active_end_date,
644         p_preserve_detail_flag    => l_preserve_detail_flag,
645         p_changed_instance_id     => p_txn_line_dtl_rec.changed_instance_id,
646         p_reference_source_id     => p_txn_line_dtl_rec.reference_source_id,
647         p_reference_source_line_id => p_txn_line_dtl_rec.reference_source_line_id,
648         p_reference_source_date   => p_txn_line_dtl_rec.reference_source_date,
649         p_csi_transaction_id      => p_txn_line_dtl_rec.csi_transaction_id,
650         p_source_txn_line_detail_id => p_txn_line_dtl_rec.source_txn_line_detail_id,
651         p_inv_mtl_transaction_id  => p_txn_line_dtl_rec.inv_mtl_transaction_id,
652         p_processing_status       => l_processing_status,
653         p_error_code              => p_txn_line_dtl_rec.error_code,
654         p_error_explanation       => p_txn_line_dtl_rec.error_explanation,
655         -- Added for CZ Integration (Begin)
656         p_config_inst_hdr_id      => p_txn_line_dtl_rec.config_inst_hdr_id ,
657         p_config_inst_rev_num     => p_txn_line_dtl_rec.config_inst_rev_num ,
658         p_config_inst_item_id    => p_txn_line_dtl_rec.config_inst_item_id ,
659         p_config_inst_baseline_rev_num    => p_txn_line_dtl_rec.config_inst_baseline_rev_num ,
660         p_target_commitment_date    => p_txn_line_dtl_rec.target_commitment_date ,
661         p_instance_description    => p_txn_line_dtl_rec.instance_description ,
662         -- Added for CZ Integration (End)
663         -- Added for Partner Ordering (Begin)
664         p_install_location_type_code  => p_txn_line_dtl_rec.install_location_type_code,
665         p_install_location_id         => p_txn_line_dtl_rec.install_location_id,
666         -- Added for Partner Ordering (End)
667         p_cascade_owner_flag      => l_cascade_owner_flag, -- bug 2972082
668         p_attribute1              => p_txn_line_dtl_rec.attribute1,
669         p_attribute2              => p_txn_line_dtl_rec.attribute2,
670         p_attribute3              => p_txn_line_dtl_rec.attribute3,
671         p_attribute4              => p_txn_line_dtl_rec.attribute4,
672         p_attribute5              => p_txn_line_dtl_rec.attribute5,
673         p_attribute6              => p_txn_line_dtl_rec.attribute6,
674         p_attribute7              => p_txn_line_dtl_rec.attribute7,
675         p_attribute8              => p_txn_line_dtl_rec.attribute8,
676         p_attribute9              => p_txn_line_dtl_rec.attribute9,
677         p_attribute10             => p_txn_line_dtl_rec.attribute10,
678         p_attribute11             => p_txn_line_dtl_rec.attribute11,
679         p_attribute12             => p_txn_line_dtl_rec.attribute12,
680         p_attribute13             => p_txn_line_dtl_rec.attribute13,
681         p_attribute14             => p_txn_line_dtl_rec.attribute14,
682         p_attribute15             => p_txn_line_dtl_rec.attribute15,
683         p_created_by              => g_user_id,
684         p_creation_date           => sysdate,
685         p_last_updated_by         => g_user_id,
686         p_last_update_date        => sysdate,
687         p_last_update_login       => g_login_id,
688         p_object_version_number   => 1.0,
689         p_context                 => p_txn_line_dtl_rec.context,
690         p_parent_instance_id      => p_txn_line_dtl_rec.parent_instance_id,
691         p_assc_txn_line_detail_id => p_txn_line_dtl_rec.assc_txn_line_detail_id,
692         p_overriding_csi_txn_id   => p_txn_line_dtl_rec.overriding_csi_txn_id,
693         p_instance_status_id      => p_txn_line_dtl_rec.instance_status_id);
694     exception
695       when others then
696         fnd_message.set_name('FND', 'FND_GENERIC_MESSAGE');
697         fnd_message.set_token('MESSAGE',
698            'csi_t_txn_line_details_pkg.insert_row Failed. '||substr(sqlerrm,1,200));
699         fnd_msg_pub.add;
700         raise fnd_api.g_exc_error;
701     end;
702 
703     p_txn_line_dtl_rec.txn_line_detail_id := l_txn_line_detail_id;
704 
705     IF px_txn_party_dtl_tbl.COUNT > 0 THEN
706 
707       --loop thru party detail table
708       -- new attribute, R12 Mass Update API call, due to the API call from EO, UI is unable to correctly identify
709       -- and collect and pass the correct indexes.. need a additional attribute for update_transaction_dtls
710       -- first loop through and identify this new attribute is passed by caller or not...
711       l_contact_party_index := 'N';
712       FOR l_index IN px_txn_party_dtl_tbl.FIRST..px_txn_party_dtl_tbl.LAST
713       LOOP
714 
715         IF  l_contact_party_index = 'N' THEN
716          IF nvl(px_txn_party_dtl_tbl(l_index).txn_contact_party_index, fnd_api.g_miss_num) <>
717             fnd_api.g_miss_num
718          THEN
719              -- new attribute passed by caller, set the flag once
720              l_contact_party_index := 'Y';
721          END IF;
722         END IF;
723         --initialize row variable
724 
725         if px_txn_party_dtl_tbl(l_index).txn_line_details_index =
726           p_txn_line_dtl_index then
727 
728           l_txn_party_rec := px_txn_party_dtl_tbl(l_index);
729           l_txn_party_rec.txn_line_detail_id     := l_txn_line_detail_id;
730 
731           -- call api to create party detail records
732           csi_t_txn_parties_pvt.create_txn_party_dtls(
733             p_api_version          => p_api_version,
734             p_commit               => p_commit,
735             p_init_msg_list        => p_init_msg_list,
736             p_validation_level     => p_validation_level,
737             p_txn_party_dtl_index  => l_index,
738             p_txn_party_detail_rec => l_txn_party_rec,
739             px_txn_pty_acct_detail_tbl => px_txn_pty_acct_detail_tbl,
740             x_return_status        => l_return_status,
741             x_msg_count            => l_msg_count,
742             x_msg_data             => l_msg_data);
743 
744           IF l_return_status <> fnd_api.g_ret_sts_success THEN
745             RAISE fnd_api.g_exc_error;
746           END IF;
747 
748           px_txn_party_dtl_tbl(l_index).txn_line_detail_id :=
749                l_txn_party_rec.txn_line_detail_id;
750           px_txn_party_dtl_tbl(l_index).txn_party_detail_id :=
751                l_txn_party_rec.txn_party_detail_id;
752         END IF;
753 
754       END LOOP;
755 
756       l_tmp_party_dtl_tbl := px_txn_party_dtl_tbl;
757 
758       /* process the contact party id */
759       FOR cont_ind IN px_txn_party_dtl_tbl.FIRST .. px_txn_party_dtl_tbl.LAST
760       LOOP
761         IF nvl(px_txn_party_dtl_tbl(cont_ind).contact_party_id, fnd_api.g_miss_num) <>
762            fnd_api.g_miss_num AND nvl(px_txn_party_dtl_tbl(cont_ind).contact_flag, 'N') = 'Y'
763         THEN
764            IF nvl(l_contact_party_index, 'N') = 'Y' THEN
765              l_contact_party_id := null;
766              FOR p_ind IN l_tmp_party_dtl_tbl.FIRST .. l_tmp_party_dtl_tbl.LAST
767              LOOP
768                 IF ( l_tmp_party_dtl_tbl(p_ind).txn_contact_party_index is not null
769                    AND l_tmp_party_dtl_tbl(p_ind).txn_contact_party_index <>  fnd_api.g_miss_num )
770                 THEN
771                    IF l_tmp_party_dtl_tbl(p_ind).txn_contact_party_index = px_txn_party_dtl_tbl(cont_ind).contact_party_id
772                      AND ( nvl(l_tmp_party_dtl_tbl(p_ind).contact_flag,'N') = 'N' OR
773                         nvl(l_tmp_party_dtl_tbl(p_ind).contact_flag,fnd_api.g_miss_char) = fnd_api.g_miss_char)
774                    THEN
775                        l_contact_party_id := l_tmp_party_dtl_tbl(p_ind).txn_party_detail_id;
776                        exit;
777                    END IF;
778                 END IF;
779               END LOOP;
780            ELSE
781               l_contact_party_id := null;
782               FOR p_ind IN l_tmp_party_dtl_tbl.FIRST .. l_tmp_party_dtl_tbl.LAST
783               LOOP
784                 IF p_ind = px_txn_party_dtl_tbl(cont_ind).contact_party_id
785                   AND nvl(l_tmp_party_dtl_tbl(p_ind).contact_flag,'N') = 'N'
786                 THEN
787                    l_contact_party_id := l_tmp_party_dtl_tbl(p_ind).txn_party_detail_id;
788                    exit;
789                 END IF;
790               END LOOP;
791            END IF;
792 
793            IF l_contact_party_id is not null THEN
794                update csi_t_party_details
795                set    contact_party_id    = l_contact_party_id
796                where  txn_party_detail_id = px_txn_party_dtl_tbl(cont_ind).txn_party_detail_id;
797            END IF;
798         END IF;
799       END LOOP;
800     END IF;
801 
802     IF px_txn_org_assgn_tbl.COUNT > 0 THEN
803 
804       -- loop thru org assignments table
805       FOR l_index IN px_txn_org_assgn_tbl.FIRST..px_txn_org_assgn_tbl.LAST
806       LOOP
807 
808         if px_txn_org_assgn_tbl(l_index).txn_line_details_index =
809            p_txn_line_dtl_index THEN
810 
811           l_txn_oa_rec := px_txn_org_assgn_tbl(l_index);
812           l_txn_oa_rec.txn_line_detail_id     := l_txn_line_detail_id;
813 
814           -- call api to create organization assignment records
815           csi_t_txn_ous_pvt.create_txn_org_assgn_dtls(
816             p_api_version         => p_api_version,
817             p_commit              => p_commit,
818             p_init_msg_list       => p_init_msg_list,
819             p_validation_level    => p_validation_level,
820             p_txn_org_assgn_rec   => l_txn_oa_rec,
821             x_return_status       => l_return_status,
822             x_msg_count           => l_msg_count,
823             x_msg_data            => l_msg_data);
824 
825           IF l_return_status <> fnd_api.g_ret_sts_success THEN
826             raise fnd_api.g_exc_error;
827           END IF;
828 
829           px_txn_org_assgn_tbl(l_index).txn_line_detail_id :=
830              l_txn_oa_rec.txn_line_detail_id;
831 
832           px_txn_org_assgn_tbl(l_index).txn_operating_unit_id :=
833              l_txn_oa_rec.txn_operating_unit_id;
834 
835         END IF;
836 
837       END LOOP;
838 
839     END IF;
840 
841     IF px_txn_ext_attrib_vals_tbl.COUNT > 0 then
842 
843       -- loop thru ext attrib table
844       FOR l_index IN px_txn_ext_attrib_vals_tbl.FIRST..px_txn_ext_attrib_vals_tbl.LAST
845       LOOP
846 
847         IF px_txn_ext_attrib_vals_tbl(l_index).txn_line_details_index =
848            p_txn_line_dtl_index THEN
849 
850           l_txn_ea_rec := px_txn_ext_attrib_vals_tbl(l_index);
851           l_txn_ea_rec.txn_line_detail_id     := l_txn_line_detail_id;
852 
853           -- call api to create extended attribute
854           csi_t_txn_attribs_pvt.create_txn_ext_attrib_dtls(
855             p_api_version             => p_api_version,
856             p_commit                  => p_commit,
857             p_init_msg_list           => p_init_msg_list,
858             p_validation_level        => p_validation_level,
859             p_txn_ext_attrib_vals_rec => l_txn_ea_rec,
860             x_return_status           => l_return_status,
861             x_msg_count               => l_msg_count,
862             x_msg_data                => l_msg_data);
863 
864           IF l_return_status <> fnd_api.g_ret_sts_success THEN
865             debug('call to csi_t_txn_attribs_pvt.create_txn_ext_attrib_dtls failed ');
866             RAISE fnd_api.g_exc_error;
867           END IF;
868           px_txn_ext_attrib_vals_tbl(l_index).txn_line_detail_id :=
869              l_txn_ea_rec.txn_line_detail_id;
870           px_txn_ext_attrib_vals_tbl(l_index).txn_attrib_detail_id :=
871              l_txn_ea_rec.txn_attrib_detail_id;
872 
873         END IF;
874 
875       END LOOP;
876 
877     END IF;
878 
879     -- Standard check of p_commit.
880     IF fnd_api.To_Boolean( p_commit ) THEN
881       COMMIT WORK;
882     END IF;
883 
884     csi_t_gen_utility_pvt.set_debug_off;
885 
886     -- Standard call to get message count and if count is  get message info.
887     fnd_msg_pub.Count_And_Get(
888       p_count  =>  x_msg_count,
889       p_data   =>  x_msg_data);
890 
891   EXCEPTION
892     WHEN fnd_api.G_EXC_ERROR THEN
893 
894       ROLLBACK TO create_txn_line_dtls;
895       x_return_status := fnd_api.g_ret_sts_error ;
896       fnd_msg_pub.Count_And_Get (
897         p_count  => x_msg_count,
898         p_data   => x_msg_data);
899       csi_t_gen_utility_pvt.set_debug_off;
900 
901     WHEN fnd_api.g_exc_unexpected_error THEN
902 
903       ROLLBACK TO Create_Txn_Line_Dtls;
904       x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR ;
905 
906       fnd_msg_pub.Count_And_Get(
907         p_count  => x_msg_count,
908         p_data   => x_msg_data);
909       csi_t_gen_utility_pvt.set_debug_off;
910 
911     WHEN OTHERS THEN
912 
913       ROLLBACK TO Create_Txn_Line_Dtls;
914       x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR ;
915 
916       IF fnd_msg_pub.Check_Msg_Level(
917            p_message_level => fnd_msg_pub.G_MSG_LVL_UNEXP_ERROR) THEN
918 
919         fnd_msg_pub.Add_Exc_Msg(
920           p_pkg_name       => G_PKG_NAME,
921           p_procedure_name => l_api_name);
922 
923       END IF;
924 
925       fnd_msg_pub.Count_And_Get(
926         p_count  => x_msg_count,
927         p_data   => x_msg_data);
928       csi_t_gen_utility_pvt.set_debug_off;
929 
930   END create_txn_line_dtls;
931 
932   /* This procedure is used to update the transaction line details.  */
933   PROCEDURE update_txn_line_dtls (
934     p_api_version              IN     NUMBER,
935     p_commit                   IN     VARCHAR2 := fnd_api.g_false,
936     p_init_msg_list            IN     VARCHAR2 := fnd_api.g_false,
937     p_validation_level         IN     NUMBER   := fnd_api.g_valid_level_full,
938     p_txn_line_rec             IN     csi_t_datastructures_grp.txn_line_rec,
939     p_txn_line_detail_tbl      IN     csi_t_datastructures_grp.txn_line_detail_tbl,
940     px_txn_ii_rltns_tbl        IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
941     px_txn_party_detail_tbl    IN OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
942     px_txn_pty_acct_detail_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
943     px_txn_org_assgn_tbl       IN OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
944     px_txn_ext_attrib_vals_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
945     x_return_status               OUT NOCOPY VARCHAR2,
946     x_msg_count                   OUT NOCOPY NUMBER ,
947     x_msg_data                    OUT NOCOPY VARCHAR2)
948   IS
949 
950     l_api_name       CONSTANT VARCHAR2(30)  := 'update_txn_line_dtls';
951     l_api_version    CONSTANT NUMBER        := 1.0;
952     l_debug_level             NUMBER;
953 
954     l_return_status           VARCHAR2(1) := fnd_api.g_ret_sts_success;
955     l_msg_count               NUMBER;
956     l_msg_data                VARCHAR2(2000);
957 
958     l_td_rec                  csi_t_txn_line_details%ROWTYPE;
959     l_valid                   BOOLEAN;
960     l_creation_flag           VARCHAR2(1) := 'N';
961     l_preserve_detail_flag    varchar2(1);
962     l_found     	      VARCHAR2(1) ;
963     l_src_transaction_type_id NUMBER;
964 
965     CURSOR td_cur (p_line_dtl_id in number) IS
966       SELECT *
967       FROM   csi_t_txn_line_details
968       WHERE  txn_line_detail_id = p_line_dtl_id;
969 
970     l_instance_party_id       csi_i_parties.instance_party_id%TYPE;
971     l_pty_ids_tbl             csi_t_datastructures_grp.txn_party_ids_tbl;
972     l_pty_ind                 binary_integer;
973     l_pty_acct_ids_tbl        csi_t_datastructures_grp.txn_pty_acct_ids_tbl;
974     l_x_pty_acct_ids_tbl      csi_t_datastructures_grp.txn_pty_acct_ids_tbl;
975     l_pty_acc_ind             binary_integer;
976 
977     CURSOR pty_cur (p_line_dtl_id in number) IS
978       SELECT *
979       FROM   csi_t_party_details
980       WHERE  txn_line_detail_id = p_line_dtl_id;
981 
982     l_iir_ids_tbl             csi_t_datastructures_grp.txn_ii_rltns_ids_tbl;
983     l_oa_ids_tbl              csi_t_datastructures_grp.txn_org_assgn_ids_tbl;
984     l_oa_ind                  binary_integer;
985     l_instance_ou_id          csi_t_org_assignments.instance_ou_id%type;
986 
987     CURSOR oa_cur(p_line_dtl_id in number) IS
988       SELECT *
989       FROM   csi_t_org_assignments
990       WHERE  txn_line_detail_id = p_line_dtl_id;
991 
992     l_ea_ids_tbl              csi_t_datastructures_grp.txn_ext_attrib_ids_tbl;
993     l_ea_ind                  binary_integer;
994     l_attrib_source_id        csi_t_extend_attribs.attrib_source_id%type;
995 
996     CURSOR ea_cur(p_line_dtl_id in number) IS
997       SELECT *
998       FROM   csi_t_extend_attribs
999       WHERE  txn_line_detail_id = p_line_dtl_id;
1000 
1001     l_pty_tbl                 csi_t_datastructures_grp.txn_party_detail_tbl;
1002     l_pty_acc_tbl             csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
1003     l_pty_upd_ind             binary_integer;
1004 
1005     l_u_eav_tbl               csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
1006     l_u_ea_ind                binary_integer;
1007 
1008     l_c_pty_tbl               csi_t_datastructures_grp.txn_party_detail_tbl;
1009     l_u_pty_tbl               csi_t_datastructures_grp.txn_party_detail_tbl;
1010     l_c_pty_ind               binary_integer;
1011     l_u_pty_ind               binary_integer;
1012 
1013     l_c_pty_acct_tbl          csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
1014     l_u_pty_acct_tbl          csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
1015     l_c_pa_ind                binary_integer;
1016     l_u_pa_ind                binary_integer;
1017 
1018     l_c_oa_tbl                csi_t_datastructures_grp.txn_org_assgn_tbl;
1019     l_u_oa_tbl                csi_t_datastructures_grp.txn_org_assgn_tbl;
1020     l_c_oa_ind                binary_integer;
1021     l_u_oa_ind                binary_integer;
1022 
1023     l_c_ii_tbl                csi_t_datastructures_grp.txn_ii_rltns_tbl;
1024     l_u_ii_tbl                csi_t_datastructures_grp.txn_ii_rltns_tbl;
1025     l_c_ii_ind                binary_integer;
1026     l_u_ii_ind                binary_integer;
1027 
1028     l_tmp_party_dtl_tbl      csi_t_datastructures_grp.txn_party_detail_tbl;
1029     l_contact_party_id       number;
1030     l_contact_party_index    VARCHAR2(1) := 'N';
1031     l_tmp_party_detail_tbl   csi_t_datastructures_grp.txn_party_detail_tbl;
1032 
1033   BEGIN
1034 
1035     -- Standard Start of API savepoint
1036     SAVEPOINT update_txn_line_dtls;
1037 
1038     -- Initialize message list if p_init_msg_list is set to TRUE.
1039     IF fnd_api.to_Boolean( p_init_msg_list ) THEN
1040       fnd_msg_pub.initialize;
1041     END IF;
1042 
1043     --  Initialize API return status to success
1044     x_return_status := fnd_api.G_RET_STS_SUCCESS;
1045 
1046     -- Standard call to check for call compatibility.
1047     IF NOT
1048 
1049        fnd_api.Compatible_API_Call (
1050          p_current_version_number => l_api_version,
1051          p_caller_version_number  => p_api_version,
1052          p_api_name               => l_api_name,
1053          p_pkg_name               => G_PKG_NAME) THEN
1054 
1055       RAISE fnd_api.g_exc_unexpected_error;
1056 
1057     END IF;
1058 
1059     l_debug_level := csi_t_gen_utility_pvt.g_debug_level;
1060 
1061     csi_t_gen_utility_pvt.dump_api_info(
1062       p_pkg_name => g_pkg_name,
1063       p_api_name => l_api_name);
1064 
1065     IF l_debug_level > 1 THEN
1066       debug(p_api_version||'-'||p_commit||'-'||p_validation_level||'-'||p_init_msg_list);
1067     END IF;
1068 
1069     -- Main API code
1070 
1071     csi_t_txn_line_dtls_pvt.update_txn_line(
1072       p_txn_line_rec  => p_txn_line_rec,
1073       x_return_status => l_return_status);
1074 
1075     IF l_return_status <> fnd_api.g_ret_sts_success THEN
1076       debug('Update transaction lines failed.');
1077       RAISE fnd_api.g_exc_error;
1078     END IF;
1079 
1080     IF p_txn_line_detail_tbl.COUNT > 0 THEN
1081 
1082       FOR l_ind in p_txn_line_detail_tbl.FIRST..p_txn_line_detail_tbl.LAST
1083       LOOP
1084         IF l_debug_level > 1 THEN
1085           csi_t_gen_utility_pvt.dump_line_detail_rec(
1086             p_line_detail_rec => p_txn_line_detail_tbl(l_ind));
1087         END IF;
1088 
1089         l_td_rec.txn_line_detail_id := p_txn_line_detail_tbl(l_ind).txn_line_detail_id;
1090         l_td_rec.config_inst_hdr_id := p_txn_line_detail_tbl(l_ind).config_inst_hdr_id;
1091         l_td_rec.config_inst_rev_num := p_txn_line_detail_tbl(l_ind).config_inst_rev_num;
1092         l_td_rec.config_inst_item_id := p_txn_line_detail_tbl(l_ind).config_inst_item_id;
1093 
1094         csi_t_vldn_routines_pvt.check_reqd_param(
1095           p_value      => l_td_rec.txn_line_detail_id,
1096           p_param_name => 'l_td_rec.txn_line_detail_id',
1097           p_api_name   => l_api_name);
1098 
1099         csi_t_vldn_routines_pvt.validate_txn_line_detail_id(
1100           p_txn_line_detail_id => l_td_rec.txn_line_detail_id,
1101           x_return_status      => l_return_status);
1102 
1103         IF l_return_status <> fnd_api.g_ret_sts_success THEN
1104 
1105           FND_MESSAGE.set_name('CSI','CSI_TXN_LINE_DTL_ID_INVALID');
1106           FND_MESSAGE.set_token('LINE_DTL_ID',l_td_rec.txn_line_detail_id);
1107           fnd_msg_pub.add;
1108           RAISE fnd_api.g_exc_error;
1109 
1110         END IF;
1111 
1112         IF   ( nvl(l_td_rec.config_inst_hdr_id,fnd_api.g_miss_num ) <> fnd_api.g_miss_num
1113 	  OR   nvl(l_td_rec.config_inst_hdr_id,fnd_api.g_miss_num ) <> fnd_api.g_miss_num
1114 	  OR   nvl(l_td_rec.config_inst_hdr_id,fnd_api.g_miss_num ) <> fnd_api.g_miss_num )
1115 	THEN
1116 
1117             csi_t_gen_utility_pvt.add('Validating against CZ view ');
1118 	    Begin
1119 		SELECT 'Y'
1120 		into l_found
1121 		FROM   cz_config_items_v
1122 		WHERE  instance_hdr_id  =  l_td_rec.config_inst_hdr_id
1123 		AND    instance_rev_nbr =  l_td_rec.config_inst_rev_num
1124 		AND    config_item_id   =  l_td_rec.config_inst_item_id;
1125 	    Exception when no_data_found then
1126         		fnd_message.set_name('CSI','CSI_TXN_CZ_INVALID_INST_KEY');
1127         		fnd_message.set_token('INST_HDR_ID',l_td_rec.config_inst_hdr_id);
1128         		fnd_message.set_token('INST_REV_NBR',l_td_rec.config_inst_rev_num);
1129         		fnd_message.set_token('CONFIG_ITEM_ID',l_td_rec.config_inst_item_id);
1130         		fnd_msg_pub.add;
1131           	RAISE fnd_api.g_exc_error;
1132 	    when others then
1133               	fnd_message.set_name('FND', 'FND_GENERIC_MESSAGE');
1134               	fnd_message.set_token('MESSAGE',
1135                  'Error in getting Config Inst data Check Failed. '||substr(sqlerrm,1,200));
1136         	    	fnd_msg_pub.add;
1137               	RAISE fnd_api.g_exc_error;
1138 	    End;
1139 	END IF;
1140 
1141         -- fetch the old values using the cursor
1142         FOR l_td_cur_rec in td_cur(l_td_rec.txn_line_detail_id)
1143         LOOP
1144 
1145           l_td_rec.transaction_line_id := l_td_cur_rec.transaction_line_id;
1146           l_td_rec.sub_type_id         := p_txn_line_detail_tbl(l_ind).sub_type_id;
1147           l_td_rec.inv_organization_id := p_txn_line_detail_tbl(l_ind).inv_organization_id;
1148           l_td_rec.inventory_item_id   := p_txn_line_detail_tbl(l_ind).inventory_item_id;
1149 
1150           --validate sub_type_id
1151           IF l_td_rec.sub_type_id <> fnd_api.g_miss_num
1152           THEN
1153 
1154             csi_t_vldn_routines_pvt.check_reqd_param(
1155               p_value      => l_td_rec.sub_type_id,
1156               p_param_name => 'l_td_rec.sub_type_id',
1157               p_api_name   => l_api_name);
1158 
1159             --debug('To Validate subtype ID, We require more parameters.');
1160 
1161             csi_t_vldn_routines_pvt.check_reqd_param(
1162               p_value      => l_td_rec.transaction_line_id,
1163               p_param_name => 'l_td_rec.transaction_line_id',
1164               p_api_name   => l_api_name);
1165             /* not sure why the following are required for an update OR validating sub type - commenting
1166 
1167             csi_t_vldn_routines_pvt.check_reqd_param(
1168               p_value      => l_td_rec.inventory_item_id,
1169               p_param_name => 'l_td_rec.inventory_item_id',
1170               p_api_name   => l_api_name);
1171 
1172             csi_t_vldn_routines_pvt.check_reqd_param(
1173               p_value      => l_td_rec.inv_organization_id,
1174               p_param_name => 'l_td_rec.inv_organization_id',
1175               p_api_name   => l_api_name);
1176            */
1177 
1178             csi_t_vldn_routines_pvt.validate_sub_type_id(
1179               p_transaction_line_id => l_td_rec.transaction_line_id,
1180               p_sub_type_id         => l_td_rec.sub_type_id,
1181               x_return_status       => l_return_status);
1182 
1183             IF l_return_status <> fnd_api.g_ret_sts_success THEN
1184 
1185               debug('Validate sub type id failed.');
1186               fnd_message.set_name('CSI','CSI_TXN_SUB_TYPE_ID_INVALID');
1187               fnd_message.set_token('SUB_TYPE_ID',l_td_rec.sub_type_id);
1188               fnd_msg_pub.add;
1189               raise fnd_api.g_exc_error;
1190 
1191             END IF;
1192           END IF;
1193 
1194           l_td_rec.instance_exists_flag := p_txn_line_detail_tbl(l_ind).instance_exists_flag;
1195           l_td_rec.instance_id          := p_txn_line_detail_tbl(l_ind).instance_id;
1196 
1197          /* Added this IF piece so that API will derive value for this based on the value for                       instance id column - shegde
1198          */
1199 
1200          -- Commented and Added the following code as part of fix 2756727
1201         /*
1202           IF nvl(l_td_cur_rec.instance_exists_flag,fnd_api.g_miss_char)
1203             <> nvl(l_td_rec.instance_exists_flag,fnd_api.g_miss_char) THEN
1204 		IF ( l_td_rec.instance_exists_flag = fnd_api.g_miss_char
1205                    OR l_td_rec.instance_exists_flag is NULL ) THEN
1206                       IF  ( l_td_rec.instance_id <> fnd_api.g_miss_num
1207                          AND l_td_rec.instance_id is NOT NULL ) THEN
1208 			 l_td_rec.instance_exists_flag := 'Y';
1209 		      ELSE
1210 			 l_td_rec.instance_exists_flag := 'N';
1211 		      END IF;
1212 		END IF;
1213 	  END IF;
1214       */
1215 
1216       IF nvl(l_td_rec.instance_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num
1217       THEN
1218          l_td_rec.instance_exists_flag := 'Y';
1219       ELSE
1220          l_td_rec.instance_exists_flag := 'N';
1221       END IF;
1222 
1223      -- End code fix as part of fix for Bug 2756727.
1224 
1225           -- validate instance ID
1226      --     IF l_td_rec.instance_exists_flag = 'Y' THEN
1227           IF nvl(l_td_rec.instance_id, fnd_api.g_miss_num) <>
1228                fnd_api.g_miss_num THEN
1229      --            csi_t_vldn_routines_pvt.check_reqd_param(
1230      --              p_value      => l_td_rec.instance_id,
1231      --              p_param_name => 'l_td_rec.instance_id',
1232      --              p_api_name   => l_api_name);
1233 
1234             csi_t_vldn_routines_pvt.validate_instance_id(
1235               p_instance_id   => l_td_rec.instance_id,
1236               x_return_status => l_return_status);
1237 
1238             IF l_return_status <> fnd_api.g_ret_sts_success THEN
1239 
1240               FND_MESSAGE.set_name('CSI','CSI_API_INVALID_INSTANCE_ID');
1241               FND_MESSAGE.set_token('INSTANCE_ID',l_td_rec.instance_id);
1242               fnd_msg_pub.add;
1243               RAISE fnd_api.g_exc_error;
1244 
1245             END IF;
1246 
1247           END IF;
1248 
1249           l_td_rec.source_transaction_flag :=
1250             p_txn_line_detail_tbl(l_ind).source_transaction_flag;
1251           l_td_rec.quantity            := p_txn_line_detail_tbl(l_ind).quantity;
1252           l_td_rec.unit_of_measure     := p_txn_line_detail_tbl(l_ind).unit_of_measure;
1253 
1254           IF l_td_rec.source_transaction_flag = 'Y' THEN
1255 
1256             /* not sure why the following are required for an update OR the tld is sourced - commenting
1257                in any case, for validating serial, lot, revision etc WHEN CHANGED
1258                we are checking for the same again...
1259 
1260             -- mandate item , organization and quantity and uom
1261             csi_t_vldn_routines_pvt.check_reqd_param(
1262               p_value      => l_td_rec.inv_organization_id,
1263               p_param_name => 'l_td_rec.inv_organization_id',
1264               p_api_name   => l_api_name);
1265 
1266             csi_t_vldn_routines_pvt.check_reqd_param(
1267               p_value      => l_td_rec.inventory_item_id,
1268               p_param_name => 'l_td_rec.inventory_item_id',
1269               p_api_name   => l_api_name);
1270 
1271             csi_t_vldn_routines_pvt.check_reqd_param(
1272               p_value      => l_td_rec.quantity,
1273               p_param_name => 'l_td_rec.quantity',
1274               p_api_name   => l_api_name);
1275 
1276             csi_t_vldn_routines_pvt.check_reqd_param(
1277               p_value      => l_td_rec.unit_of_measure,
1278               p_param_name => 'l_td_rec.unit_of_measure',
1279               p_api_name   => l_api_name);
1280             */
1281            -- need to add code here to call validate_source_integrity cause we do not seem to be revalidating
1282            -- if the quantity OR UOM is being changed. right now making it null since a complete check
1283            -- for the current usage of this API needs to be done
1284             null;
1285           END IF;
1286 
1287           l_td_rec.csi_system_id := p_txn_line_detail_tbl(l_ind).csi_system_id;
1288 
1289           -- validate csi_system_id
1290           IF l_td_rec.csi_system_id <> fnd_api.g_miss_num
1291              AND
1292              l_td_rec.csi_system_id is not null
1293           THEN
1294 
1295             l_valid := csi_item_instance_vld_pvt.is_valid_system_id(
1296                          p_system_id => l_td_rec.csi_system_id);
1297 
1298             IF NOT (l_valid) THEN
1299               debug('Validate csi system id failed.');
1300               RAISE fnd_api.g_exc_error;
1301             END IF;
1302 
1303           END IF;
1304 
1305           -- ##validate organization_id
1306           IF l_td_rec.inv_organization_id <> fnd_api.g_miss_num THEN
1307             null;
1308           END IF;
1309 
1310           -- Start of Addition for ER 6936037
1311           BEGIN
1312           SELECT source_transaction_type_id
1313                  into l_src_transaction_type_id
1314                  from CSI_T_TRANSACTION_LINES
1315                  WHERE transaction_line_id = l_td_rec.transaction_line_id;
1316           EXCEPTION
1317             WHEN OTHERS THEN
1318               debug('No Transaction Type Id found for transaction_line_id - ' || l_td_rec.transaction_line_id);
1319               null;
1320           END;
1321           -- End of Addition for ER 6936037
1322 
1323           -- validate inventory_item_id
1324           IF l_td_rec.inventory_item_id <> fnd_api.g_miss_num THEN
1325 
1326             csi_t_vldn_routines_pvt.check_reqd_param(
1327               p_value      => l_td_rec.inventory_item_id,
1328               p_param_name => 'l_td_rec.inventory_item_id',
1329               p_api_name   => l_api_name);
1330 
1331               -- If the transaction is mass update, IB trackable checking is skipped
1332               -- as per ER 6936037
1333               IF NVL(l_src_transaction_type_id, fnd_api.g_miss_num) <> 3 THEN
1334                 l_valid := csi_item_instance_vld_pvt.is_trackable(
1335                   p_inv_item_id => l_td_rec.inventory_item_id,
1336                   p_org_id      => l_td_rec.inv_organization_id);
1337 
1338                 IF NOT (l_valid) THEN
1339                   debug('Validate item for trackabality failed.');
1340                   RAISE fnd_api.g_exc_error;
1341                 END IF;
1342               END IF; -- Checking for Mass Addition transaction
1343           END IF;
1344 
1345           l_td_rec.inventory_revision := p_txn_line_detail_tbl(l_ind).inventory_revision;
1346           -- ##validate item_revision
1347           IF l_td_rec.inventory_revision <> fnd_api.g_miss_char
1348              AND
1349              l_td_rec.inventory_revision is not null
1350           THEN
1351             null;
1352           END IF;
1353 
1354           l_td_rec.instance_type_code := p_txn_line_detail_tbl(l_ind).instance_type_code;
1355           -- validate instance_type_code
1356           IF l_td_rec.instance_type_code <> fnd_api.g_miss_char
1357              AND
1358              l_td_rec.instance_type_code is not null
1359           THEN
1360 
1361             l_valid :=
1362               csi_item_instance_vld_pvt.is_valid_instance_type(
1363                 p_instance_type_code => l_td_rec.instance_type_code);
1364 
1365             IF NOT (l_valid) THEN
1366               debug('Validate instance type code failed.');
1367               RAISE fnd_api.g_exc_error;
1368             END IF;
1369 
1370           END IF;
1371 
1372           l_td_rec.item_condition_id := p_txn_line_detail_tbl(l_ind).item_condition_id;
1373 
1374           --validate item_condition_id
1375           IF l_td_rec.item_condition_id <> fnd_api.g_miss_num
1376              AND
1377              l_td_rec.item_condition_id is not null
1378           THEN
1379 
1380             csi_item_instance_vld_pvt.is_valid_condition(
1381               p_instance_condition_id  => l_td_rec.item_condition_id,
1382               p_creation_complete_flag => l_creation_flag,
1383               l_return_value           => l_valid);
1384 
1385             IF not(l_valid) THEN
1386               debug('Validate item condition failed.');
1387               RAISE fnd_api.g_exc_error;
1388             END IF;
1389 
1390           END IF;
1391 
1392 
1393           -- ##validate uom_code
1394           IF l_td_rec.unit_of_measure <> fnd_api.g_miss_char
1395           THEN
1396             null;
1397           END IF;
1398 
1399           l_td_rec.qty_remaining   := p_txn_line_detail_tbl(l_ind).qty_remaining;
1400 
1401           l_td_rec.lot_number      := p_txn_line_detail_tbl(l_ind).lot_number;
1402           -- validate lot number
1403           IF l_td_rec.lot_number <> fnd_api.g_miss_char
1404              AND
1405              l_td_rec.lot_number is not null
1406           THEN
1407 
1408             csi_t_vldn_routines_pvt.check_reqd_param(
1409               p_value      => l_td_rec.inventory_item_id,
1410               p_param_name => 'l_td_rec.inventory_item_id',
1411               p_api_name   => l_api_name);
1412 
1413             csi_t_vldn_routines_pvt.check_reqd_param(
1414               p_value      => l_td_rec.inv_organization_id,
1415               p_param_name => 'l_td_rec.inv_organization_id',
1416               p_api_name   => l_api_name);
1417 
1418             debug('Validating line details lot number .');
1419 
1420             csi_t_vldn_routines_pvt.validate_lot_number(
1421               p_inventory_item_id  => l_td_rec.inventory_item_id,
1422               p_organization_id    => l_td_rec.inv_organization_id,
1423               p_lot_number         => l_td_rec.lot_number,
1424               x_return_status      => l_return_status);
1425 
1426             IF l_return_status <> fnd_api.g_ret_sts_success THEN
1427               debug('csi_t_vldn_routines_pvt.validate_lot_number Failed.');
1428               RAISE fnd_api.g_exc_error;
1429             END IF;
1430 
1431           END IF;
1432 
1433           l_td_rec.serial_number   := p_txn_line_detail_tbl(l_ind).serial_number;
1434           l_td_rec.mfg_serial_number_flag := p_txn_line_detail_tbl(l_ind).mfg_serial_number_flag;
1435 
1436           -- IF l_td_rec.mfg_serial_number_flag = 'Y'
1437           --    AND bug 3593990
1438           IF nvl(l_td_rec.serial_number, fnd_api.g_miss_char) <> fnd_api.g_miss_char THEN
1439 
1440             csi_t_vldn_routines_pvt.check_reqd_param(
1441               p_value      => l_td_rec.inventory_item_id,
1442               p_param_name => 'l_td_rec.inventory_item_id',
1443               p_api_name   => l_api_name);
1444 
1445             csi_t_vldn_routines_pvt.check_reqd_param(
1446               p_value      => l_td_rec.inv_organization_id,
1447               p_param_name => 'l_td_rec.inv_organization_id',
1448               p_api_name   => l_api_name);
1449 
1450             debug('Validating Serial Number.');
1451 
1452             csi_t_vldn_routines_pvt.validate_serial_number(
1453               p_inventory_item_id => l_td_rec.inventory_item_id,
1454               p_organization_id   => l_td_rec.inv_organization_id,
1455               p_serial_number     => l_td_rec.serial_number,
1456               x_return_status     => l_return_status);
1457 
1458             IF l_return_status <> fnd_api.g_ret_sts_success THEN
1459               debug('csi_t_vldn_routines_pvt.validate_serial_number Failed.');
1460               RAISE fnd_api.g_exc_error;
1461             END IF;
1462 
1463             /*
1464             --validate serial_number
1465             csi_item_instance_vld_pvt.validate_serial_number(
1466               p_inv_org_id             => l_td_rec.inv_organization_id,
1467               p_inv_item_id            => l_td_rec.inventory_item_id,
1468               p_serial_number          => l_td_rec.serial_number,
1469               p_mfg_serial_number_flag => l_td_rec.mfg_serial_number_flag,
1470               p_creation_complete_flag => l_creation_flag,
1471               l_return_value           => l_valid);
1472 
1473             IF NOT (l_valid) THEN
1474               debug('Validate serial number failed.');
1475               RAISE fnd_api.g_exc_error;
1476             END IF;
1477             */
1478 
1479           END IF;
1480 
1481           l_td_rec.location_type_code := p_txn_line_detail_tbl(l_ind).location_type_code;
1482 
1483           -- validate location_type_code
1484           IF l_td_rec.location_type_code <> fnd_api.g_miss_char
1485              AND
1486              l_td_rec.location_type_code is not null
1487           THEN
1488 
1489             l_valid :=
1490               csi_item_instance_vld_pvt.is_valid_location_source(
1491                 p_loc_source_table => l_td_rec.location_type_code);
1492 
1493             IF NOT (l_valid) THEN
1494               debug('Validate location type code failed.');
1495               RAISE fnd_api.g_exc_error;
1496             END IF;
1497 
1498           END IF;
1499 
1500           l_td_rec.location_id := p_txn_line_detail_tbl(l_ind).location_id;
1501 
1502           --validate location_id
1503           IF l_td_rec.location_id <> fnd_api.g_miss_num
1504              AND
1505              l_td_rec.location_id is not null
1506           THEN
1507 
1508             l_valid := csi_item_instance_vld_pvt.is_valid_location_id(
1509                          p_location_source_table => l_td_rec.location_type_code,
1510                          p_location_id           => l_td_rec.location_id);
1511 
1512             IF NOT (l_valid) then
1513               debug('Validate location id failed.');
1514               RAISE fnd_api.g_exc_error;
1515             END IF;
1516 
1517           END IF;
1518 
1519           /*  Begin FOR install Locationo_Id and Install_Location_Type_Code*/
1520 
1521           l_td_rec.install_location_type_code := p_txn_line_detail_tbl(l_ind).install_location_type_code;
1522 
1523           -- validate install_location_type_code
1524           IF l_td_rec.install_location_type_code <> fnd_api.g_miss_char
1525             AND
1526              l_td_rec.install_location_type_code is not null
1527           THEN
1528             l_valid := csi_item_instance_vld_pvt.is_valid_location_source(
1529                             p_loc_source_table => l_td_rec.install_location_type_code);
1530 
1531             IF NOT (l_valid) THEN
1532               debug('Validate Install location type code failed.');
1533               RAISE fnd_api.g_exc_error;
1534             END IF;
1535           END IF;
1536 
1537           l_td_rec.install_location_id := p_txn_line_detail_tbl(l_ind).install_location_id;
1538 
1539           -- validate install_location_id
1540           IF l_td_rec.install_location_id <> fnd_api.g_miss_num
1541             AND
1542              l_td_rec.install_location_id is not null
1543           THEN
1544             l_valid := csi_item_instance_vld_pvt.is_valid_location_id(
1545                          p_location_source_table => l_td_rec.install_location_type_code,
1546                          p_location_id           => l_td_rec.install_location_id);
1547 
1548             IF NOT (l_valid) then
1549               debug('Validate Install location id failed.');
1550               RAISE fnd_api.g_exc_error;
1551             END IF;
1552          END IF;
1553 
1554           /*  End FOR install Locationo_Id and Install_Location_Type_Code */
1555 
1556           IF NVL(l_td_rec.reference_source_line_id, fnd_api.g_miss_num)
1557              <> fnd_api.g_miss_num
1558           THEN
1559 
1560               csi_t_vldn_routines_pvt.validate_txn_source_id(
1561                 p_txn_source_name  => 'ORDER_ENTRY',
1562                 p_txn_source_id    =>  l_td_rec.reference_source_line_id,
1563                 x_return_status    => l_return_status);
1564 
1565             IF l_return_status <> fnd_api.g_ret_sts_success THEN
1566                 debug('csi_t_vldn_routines_pvt.validate_txn_source_id.');
1567                 RAISE fnd_api.g_exc_error;
1568               END IF;
1569 
1570           END IF;
1571 
1572           l_td_rec.instance_status_id            := p_txn_line_detail_tbl(l_ind).instance_status_id;
1573           l_td_rec.overriding_csi_txn_id         := p_txn_line_detail_tbl(l_ind).overriding_csi_txn_id;
1574     -- validate instance status id
1575           IF NVL(l_td_rec.instance_status_id, fnd_api.g_miss_num) <>
1576              fnd_api.g_miss_num
1577           THEN
1578             --debug('Validate instance status id .');
1579                csi_item_instance_vld_pvt.is_valid_status(
1580                  p_instance_status_id     => l_td_rec.instance_status_id,
1581                  p_creation_complete_flag => l_creation_flag,
1582                  l_return_value           => l_valid);
1583 
1584             IF not(l_valid) THEN
1585               debug('Validate instance status id failed.');
1586               RAISE fnd_api.g_exc_error;
1587             END IF;
1588           END IF;
1589 
1590           l_td_rec.installation_date := p_txn_line_detail_tbl(l_ind).installation_date;
1591           l_td_rec.in_service_date   := p_txn_line_detail_tbl(l_ind).in_service_date;
1592           l_td_rec.external_reference:= p_txn_line_detail_tbl(l_ind).external_reference;
1593           l_td_rec.version_label     := p_txn_line_detail_tbl(l_ind).version_label;
1594           l_td_rec.transaction_system_id := p_txn_line_detail_tbl(l_ind).transaction_system_id;
1595           l_td_rec.sellable_flag     := p_txn_line_detail_tbl(l_ind).sellable_flag;
1596           l_td_rec.return_by_date    := p_txn_line_detail_tbl(l_ind).return_by_date;
1597           l_td_rec.active_start_date := p_txn_line_detail_tbl(l_ind).active_start_date;
1598           l_td_rec.active_end_date   := p_txn_line_detail_tbl(l_ind).active_end_date;
1599           l_td_rec.preserve_detail_flag := p_txn_line_detail_tbl(l_ind).preserve_detail_flag;
1600           l_td_rec.changed_instance_id  := p_txn_line_detail_tbl(l_ind).changed_instance_id;
1601           l_td_rec.reference_source_id  := p_txn_line_detail_tbl(l_ind).reference_source_id;
1602           l_td_rec.reference_source_line_id  := p_txn_line_detail_tbl(l_ind).reference_source_line_id;
1603           l_td_rec.reference_source_date:= p_txn_line_detail_tbl(l_ind).reference_source_date;
1604           l_td_rec.csi_transaction_id:= p_txn_line_detail_tbl(l_ind).csi_transaction_id;
1605           l_td_rec.source_txn_line_detail_id := p_txn_line_detail_tbl(l_ind).source_txn_line_detail_id;
1606           l_td_rec.inv_mtl_transaction_id := p_txn_line_detail_tbl(l_ind).inv_mtl_transaction_id;
1607           l_td_rec.processing_status := p_txn_line_detail_tbl(l_ind).processing_status;
1608           l_td_rec.error_code        := p_txn_line_detail_tbl(l_ind).error_code;
1609           l_td_rec.error_explanation := p_txn_line_detail_tbl(l_ind).error_explanation;
1610           l_td_rec.config_inst_hdr_id := p_txn_line_detail_tbl(l_ind).config_inst_hdr_id;
1611           l_td_rec.config_inst_rev_num := p_txn_line_detail_tbl(l_ind).config_inst_rev_num;
1612           l_td_rec.config_inst_item_id := p_txn_line_detail_tbl(l_ind).config_inst_item_id;
1613           l_td_rec.config_inst_baseline_rev_num := p_txn_line_detail_tbl(l_ind).config_inst_baseline_rev_num;
1614           l_td_rec.target_commitment_date := p_txn_line_detail_tbl(l_ind).target_commitment_date;
1615           l_td_rec.instance_description := p_txn_line_detail_tbl(l_ind).instance_description;
1616           l_td_rec.cascade_owner_flag := p_txn_line_detail_tbl(l_ind).cascade_owner_flag;
1617           l_td_rec.attribute1        := p_txn_line_detail_tbl(l_ind).attribute1;
1618           l_td_rec.attribute2        := p_txn_line_detail_tbl(l_ind).attribute2;
1619           l_td_rec.attribute3        := p_txn_line_detail_tbl(l_ind).attribute3;
1620           l_td_rec.attribute4        := p_txn_line_detail_tbl(l_ind).attribute4;
1621           l_td_rec.attribute5        := p_txn_line_detail_tbl(l_ind).attribute5;
1622           l_td_rec.attribute6        := p_txn_line_detail_tbl(l_ind).attribute6;
1623           l_td_rec.attribute7        := p_txn_line_detail_tbl(l_ind).attribute7;
1624           l_td_rec.attribute8        := p_txn_line_detail_tbl(l_ind).attribute8;
1625           l_td_rec.attribute9        := p_txn_line_detail_tbl(l_ind).attribute9;
1626           l_td_rec.attribute10       := p_txn_line_detail_tbl(l_ind).attribute10;
1627           l_td_rec.attribute11       := p_txn_line_detail_tbl(l_ind).attribute11;
1628           l_td_rec.attribute12       := p_txn_line_detail_tbl(l_ind).attribute12;
1629           l_td_rec.attribute13       := p_txn_line_detail_tbl(l_ind).attribute13;
1630           l_td_rec.attribute14       := p_txn_line_detail_tbl(l_ind).attribute14;
1631           l_td_rec.attribute15       := p_txn_line_detail_tbl(l_ind).attribute15;
1632           l_td_rec.created_by        := l_td_cur_rec.created_by;
1633           l_td_rec.creation_date     := l_td_cur_rec.creation_date;
1634           l_td_rec.last_updated_by   := g_user_id;
1635           l_td_rec.last_update_date  := sysdate;
1636           l_td_rec.last_update_login := g_login_id;
1637           l_td_rec.object_version_number := p_txn_line_detail_tbl(l_ind).object_version_number;
1638           l_td_rec.context           := p_txn_line_detail_tbl(l_ind).context;
1639           l_td_rec.parent_instance_id:= p_txn_line_detail_tbl(l_ind).parent_instance_id;
1640           l_td_rec.assc_txn_line_detail_id := p_txn_line_detail_tbl(l_ind).assc_txn_line_detail_id;
1641 
1642           --logic for preserving children using the preserve detail flag
1643           l_pty_ind := 0;
1644           IF ( l_td_rec.instance_id <> fnd_api.g_miss_num
1645               AND nvl(l_td_rec.instance_id,-9999) <> nvl(l_td_cur_rec.instance_id,-9999) ) THEN
1646 
1647             debug('Entering code for preserve details.');
1648 
1649             /* I have to do this update statement here because all the child entities
1650                are processed before the txn line detail is updated */
1651 
1652             update csi_t_txn_line_details
1653             set    instance_id          = l_td_rec.instance_id,
1654                    instance_exists_flag = l_td_rec.instance_exists_flag
1655             where  txn_line_detail_id   = l_td_rec.txn_line_detail_id;
1656 
1657             IF l_td_rec.instance_id <> nvl(l_td_cur_rec.instance_id,fnd_api.g_miss_num) THEN
1658 
1659               debug('User is trying to switch the instance id.');
1660 
1661               l_pty_upd_ind := 0;
1662 
1663               FOR l_pty_cur_rec IN pty_cur(l_td_rec.txn_line_detail_id)
1664               LOOP
1665 
1666                 /* If the old instance id is null then preserve the children */
1667 
1668                 IF nvl(l_td_cur_rec.instance_id,fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
1669                   l_preserve_detail_flag := 'Y';
1670                 ELSE
1671                   l_preserve_detail_flag  := nvl(l_pty_cur_rec.preserve_detail_flag,'N');
1672                 END IF;
1673 
1674                 IF l_preserve_detail_flag = 'Y' OR
1675                    l_pty_cur_rec.relationship_type_code = 'OWNER' THEN
1676 
1677                   debug('Trying to presere the party record. txn_party_detail_id :'||
1678                          l_pty_cur_rec.txn_party_detail_id);
1679 
1680                   BEGIN
1681                      IF l_pty_cur_rec.Contact_party_id is NULL THEN
1682 
1683                     SELECT instance_party_id
1684                     INTO   l_instance_party_id
1685                     FROM   csi_i_parties
1686                     WHERE  instance_id = l_td_rec.instance_id -- new instance
1687                     AND    party_id    = l_pty_cur_rec.party_source_id -- old party
1688                     AND    party_source_table = l_pty_cur_rec.party_source_table
1689                     AND    relationship_type_code = l_pty_cur_rec.relationship_type_code
1690                     AND    nvl(contact_flag,'N') = nvl(l_pty_cur_rec.contact_flag,'N')
1691                     AND    sysdate between nvl(active_start_date, sysdate-1)
1692                                    and     nvl(active_end_date, sysdate+1);
1693 
1694 		   ELSE
1695 
1696 		/* NEW QUERY FOR CONTACT_PARTY_ID is not null ADDED for the bug 4251709 */
1697 
1698 			SELECT csiip.instance_party_id
1699 			INTO   l_instance_party_id
1700 			FROM
1701 			csi_i_parties csiip,
1702 			csi_i_parties csiipc,
1703 			csi_t_party_details csitpd,
1704 			csi_t_party_details csitpdc
1705 			WHERE csitpdc.party_SOURCE_id   = l_pty_cur_rec.party_source_id
1706 			AND   csiipc.instance_id=l_td_rec.instance_id
1707 			AND   csiip.contact_ip_id=csiipc.instance_party_id
1708 			AND   csitpdc.contact_party_id=csitpd.txn_party_detail_id
1709 			AND   csitpdc.party_source_table = csiip.party_source_table
1710 			AND   csitpdc.relationship_type_code =  csiip.relationship_type_code
1711 			AND   nvl(csitpdc.contact_flag,'N')=   nvl(csiip.contact_flag,'N')
1712 			AND   csitpdc.party_SOURCE_id=csiip.party_id
1713 			AND   csitpdc.party_source_table = l_pty_cur_rec.party_source_table
1714 			AND   csitpdc.relationship_type_code = l_pty_cur_rec.relationship_type_code
1715 			AND   csitpdc.txn_party_detail_id=  l_pty_cur_rec.txn_party_detail_id
1716 			AND   nvl(csitpdc.contact_flag,'N') =nvl(l_pty_cur_rec.contact_flag,'N')
1717 			AND   csitpd.party_source_id= csiipc.party_id
1718 			AND   csitpd.party_source_table= csiipc.party_source_table
1719 			AND   csitpd.relationship_type_code = csiipc.relationship_type_code
1720 			AND   csitpd.contact_flag = csiipc.contact_flag
1721 			AND    sysdate between nvl(csiip.active_start_date, sysdate-1)
1722 			AND    nvl(csiip.active_end_date, sysdate+1);
1723 
1724 			END IF;
1725 
1726                   EXCEPTION
1727                     WHEN no_data_found THEN
1728 
1729                       /* this query will return one and only one record */
1730                       /* to make sure multiple parents are not created */
1731                       IF l_pty_cur_rec.relationship_type_code = 'OWNER' THEN
1732 
1733                         SELECT instance_party_id
1734                         INTO   l_instance_party_id
1735                         FROM   csi_i_parties
1736                         WHERE  instance_id = l_td_rec.instance_id
1737                         AND    relationship_type_code = 'OWNER';
1738 
1739                       ELSE
1740 
1741                         l_instance_party_id := null;
1742 
1743                       END IF;
1744                   END;
1745 
1746                   -- populate the party table to update the foreign key (instance party id)
1747 
1748                   l_pty_upd_ind := l_pty_upd_ind + 1;
1749 
1750                   l_pty_tbl(l_pty_upd_ind).txn_party_detail_id :=
1751                                               l_pty_cur_rec.txn_party_detail_id;
1752                   l_pty_tbl(l_pty_upd_ind).txn_line_detail_id  :=
1753                             l_pty_cur_rec.txn_line_detail_id;
1754                   l_pty_tbl(l_pty_upd_ind).instance_party_id   :=
1755                             l_instance_party_id;
1756                   l_pty_tbl(l_pty_upd_ind).party_source_table  :=
1757                             l_pty_cur_rec.party_source_table;
1758                   l_pty_tbl(l_pty_upd_ind).party_source_id     :=
1759                             l_pty_cur_rec.party_source_id;
1760                   l_pty_tbl(l_pty_upd_ind).relationship_type_code :=
1761                             l_pty_cur_rec.relationship_type_code;
1762                   l_pty_tbl(l_pty_upd_ind).contact_flag        :=
1763                             l_pty_cur_rec.contact_flag;
1764                   l_pty_tbl(l_pty_upd_ind).contact_party_id    :=
1765                             l_pty_cur_rec.contact_party_id;
1766                   l_pty_tbl(l_pty_upd_ind).active_start_date   :=
1767                             l_pty_cur_rec.active_start_date;
1768                   l_pty_tbl(l_pty_upd_ind).active_end_date     :=
1769                             l_pty_cur_rec.active_end_date;
1770                   l_pty_tbl(l_pty_upd_ind).preserve_detail_flag :=
1771                             l_pty_cur_rec.preserve_detail_flag;
1772                   l_pty_tbl(l_pty_upd_ind).context    := l_pty_cur_rec.context;
1773                   l_pty_tbl(l_pty_upd_ind).attribute1 := l_pty_cur_rec.attribute1;
1774                   l_pty_tbl(l_pty_upd_ind).attribute2 := l_pty_cur_rec.attribute2;
1775                   l_pty_tbl(l_pty_upd_ind).attribute3 := l_pty_cur_rec.attribute3;
1776                   l_pty_tbl(l_pty_upd_ind).attribute4 := l_pty_cur_rec.attribute4;
1777                   l_pty_tbl(l_pty_upd_ind).attribute5 := l_pty_cur_rec.attribute5;
1778                   l_pty_tbl(l_pty_upd_ind).attribute6 := l_pty_cur_rec.attribute6;
1779                   l_pty_tbl(l_pty_upd_ind).attribute7 := l_pty_cur_rec.attribute7;
1780                   l_pty_tbl(l_pty_upd_ind).attribute8 := l_pty_cur_rec.attribute8;
1781                   l_pty_tbl(l_pty_upd_ind).attribute9 := l_pty_cur_rec.attribute9;
1782                   l_pty_tbl(l_pty_upd_ind).attribute10:= l_pty_cur_rec.attribute10;
1783                   l_pty_tbl(l_pty_upd_ind).attribute11:= l_pty_cur_rec.attribute11;
1784                   l_pty_tbl(l_pty_upd_ind).attribute12:= l_pty_cur_rec.attribute12;
1785                   l_pty_tbl(l_pty_upd_ind).attribute13:= l_pty_cur_rec.attribute13;
1786                   l_pty_tbl(l_pty_upd_ind).attribute14:= l_pty_cur_rec.attribute14;
1787                   l_pty_tbl(l_pty_upd_ind).attribute15:= l_pty_cur_rec.attribute15;
1788                   l_pty_tbl(l_pty_upd_ind).object_version_number  :=
1789                             l_pty_cur_rec.object_version_number;
1790                   l_pty_tbl(l_pty_upd_ind).primary_flag        :=
1791                             l_pty_cur_rec.primary_flag;
1792                   l_pty_tbl(l_pty_upd_ind).preferred_flag        :=
1793                             l_pty_cur_rec.preferred_flag;
1794 
1795                 ELSE
1796                   -- delete the non preserved children for parties
1797                   l_pty_ind := l_pty_ind + 1;
1798 
1799                   l_pty_acct_ids_tbl(l_pty_ind).txn_party_detail_id :=
1800                      l_pty_cur_rec.txn_party_detail_id;
1801                   l_pty_acct_ids_tbl(l_pty_ind).txn_account_detail_id :=
1802                      fnd_api.g_miss_num;
1803 
1804                   l_pty_ids_tbl(l_pty_ind).txn_line_detail_id :=
1805                      l_pty_cur_rec.txn_line_detail_id;
1806                   l_pty_ids_tbl(l_pty_ind).txn_party_detail_id :=
1807                      l_pty_cur_rec.txn_party_detail_id;
1808 
1809                 END IF;
1810 
1811               END LOOP;
1812 
1813               IF l_pty_tbl.count > 0 THEN
1814 
1815                 csi_t_txn_parties_grp.update_txn_party_dtls(
1816                   p_api_version              => p_api_version,
1817                   p_commit                   => p_commit,
1818                   p_init_msg_list            => p_init_msg_list,
1819                   p_validation_level         => p_validation_level,
1820                   p_txn_party_detail_tbl     => l_pty_tbl,
1821                   px_txn_pty_acct_detail_tbl => l_pty_acc_tbl,
1822                   x_return_status            => l_return_status,
1823                   x_msg_count                => l_msg_count,
1824                   x_msg_data                 => l_msg_data);
1825 
1826                 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1827                   RAISE fnd_api.g_exc_error;
1828                 END IF;
1829 
1830               END IF;
1831 
1832             END IF;
1833 
1834             -- ii_relationships
1835             IF (l_td_rec.instance_id <> nvl(l_td_cur_rec.instance_id, fnd_api.g_miss_num))
1836                OR
1837                (l_td_rec.inventory_item_id <> nvl(l_td_cur_rec.inventory_item_id, fnd_api.g_miss_num))
1838             THEN
1839 
1840               IF nvl(l_td_cur_rec.instance_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
1841                 l_iir_ids_tbl(1).transaction_line_id := l_td_rec.transaction_line_id;
1842                 l_iir_ids_tbl(1).txn_relationship_id := fnd_api.g_miss_num;
1843               END IF;
1844 
1845             END IF;
1846 
1847             -- org assignments
1848             l_oa_ind := 0;
1849 
1850             IF (l_td_rec.instance_id <> nvl(l_td_cur_rec.instance_id, fnd_api.g_miss_num))
1851             THEN
1852 
1853               FOR l_oa_cur_rec IN oa_cur(l_td_rec.txn_line_detail_id)
1854               LOOP
1855 
1856                 IF nvl(l_td_cur_rec.instance_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
1857                   l_preserve_detail_flag := 'Y';
1858                 ELSE
1859                   l_preserve_detail_flag := nvl(l_oa_cur_rec.preserve_detail_flag,'N');
1860                 END IF;
1861 
1862                 IF l_preserve_detail_flag = 'Y' THEN
1863                   IF nvl(l_oa_cur_rec.instance_ou_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num
1864                   THEN
1865                     BEGIN
1866 
1867                       SELECT instance_ou_id
1868                       INTO   l_instance_ou_id
1869                       FROM   csi_i_org_assignments
1870                       WHERE  instance_id = l_td_rec.instance_id
1871                       AND    operating_unit_id = l_oa_cur_rec.operating_unit_id;
1872 
1873                      EXCEPTION
1874                        WHEN no_data_found THEN
1875                          l_instance_ou_id := null;
1876                      END;
1877 
1878                      UPDATE csi_t_org_assignments
1879                      SET    instance_ou_id = l_instance_ou_id
1880                      WHERE  txn_operating_unit_id = l_oa_cur_rec.txn_operating_unit_id;
1881 
1882                   END IF;
1883                 ELSE
1884 
1885                   l_oa_ind := l_oa_ind + 1;
1886 
1887                   l_oa_ids_tbl(l_oa_ind).txn_line_detail_id :=
1888                     l_oa_cur_rec.txn_line_detail_id;
1889                   l_oa_ids_tbl(l_oa_ind).txn_operating_unit_id :=
1890                     l_oa_cur_rec.txn_operating_unit_id;
1891 
1892                 END IF;
1893 
1894               END LOOP;
1895 
1896             END IF;
1897 
1898             -- extended attributes
1899             l_ea_ind := 0;
1900 
1901             IF (l_td_rec.instance_id <> nvl(l_td_cur_rec.instance_id, fnd_api.g_miss_num))
1902             THEN
1903 
1904               FOR l_ea_cur_rec IN ea_cur(l_td_rec.txn_line_detail_id)
1905               LOOP
1906 
1907                 IF nvl(l_td_cur_rec.instance_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
1908                   l_preserve_detail_flag := 'Y';
1909                 ELSE
1910                   l_preserve_detail_flag := nvl(l_ea_cur_rec.preserve_detail_flag,'N');
1911                 END IF;
1912 
1913                 IF l_preserve_detail_flag = 'Y' THEN
1914 
1915                   IF l_ea_cur_rec.attrib_source_table = 'CSI_IEA_VALUES' THEN
1916 
1917                     BEGIN
1918 
1919                       SELECT attribute_value_id
1920                       INTO   l_attrib_source_id
1921                       FROM   csi_iea_values
1922                       WHERE  instance_id     = l_td_rec.instance_id
1923                       AND    attribute_value = l_ea_cur_rec.attribute_value;
1924 
1925                       UPDATE csi_t_extend_attribs
1926                       SET    attrib_source_id = l_attrib_source_id
1927                       WHERE  txn_attrib_detail_id =
1928                              l_ea_cur_rec.txn_attrib_detail_id;
1929 
1930                     EXCEPTION
1931                       WHEN no_data_found THEN
1932                         l_ea_ind := l_ea_ind + 1;
1933 
1934                         l_ea_ids_tbl(l_ea_ind).txn_line_detail_id :=
1935                           l_ea_cur_rec.txn_line_detail_id;
1936                         l_ea_ids_tbl(l_ea_ind).txn_attrib_detail_id :=
1937                           l_ea_cur_rec.txn_attrib_detail_id;
1938                     END;
1939 
1940                   END IF;
1941 
1942                 ELSE
1943                   l_ea_ind := l_ea_ind + 1;
1944 
1945                   l_ea_ids_tbl(l_ea_ind).txn_line_detail_id :=
1946                     l_ea_cur_rec.txn_line_detail_id;
1947                   l_ea_ids_tbl(l_ea_ind).txn_attrib_detail_id :=
1948                     l_ea_cur_rec.txn_attrib_detail_id;
1949                 END IF;
1950 
1951               END LOOP;
1952 
1953             END IF;
1954 
1955           END IF;
1956 
1957           IF l_pty_ids_tbl.COUNT > 0 THEN
1958 
1959             csi_t_txn_parties_pvt.delete_txn_party_dtls(
1960               p_api_version          => p_api_version,
1961               p_commit               => p_commit,
1962               p_init_msg_list        => p_init_msg_list,
1963               p_validation_level     => p_validation_level,
1964               p_txn_party_ids_tbl    => l_pty_ids_tbl,
1965               x_txn_pty_acct_ids_tbl => l_x_pty_acct_ids_tbl,
1966               x_return_status        => l_return_status,
1967               x_msg_count            => l_msg_count,
1968               x_msg_data             => l_msg_data);
1969 
1970             IF l_return_status <> fnd_api.g_ret_sts_success THEN
1971               raise fnd_api.g_exc_error;
1972             END IF;
1973 
1974           END IF;
1975 
1976           IF l_pty_acct_ids_tbl.COUNT > 0 THEN
1977 
1978             csi_t_txn_parties_pvt.delete_txn_pty_acct_dtls(
1979               p_api_version          => p_api_version,
1980               p_commit               => p_commit,
1981               p_init_msg_list        => p_init_msg_list,
1982               p_validation_level     => p_validation_level,
1983               p_txn_pty_acct_ids_tbl => l_pty_acct_ids_tbl,
1984               x_return_status        => l_return_status,
1985               x_msg_count            => l_msg_count,
1986               x_msg_data             => l_msg_data);
1987 
1988             IF l_return_status <> fnd_api.g_ret_sts_success THEN
1989               raise fnd_api.g_exc_error;
1990             END IF;
1991 
1992           END IF;
1993 
1994           IF l_iir_ids_tbl.COUNT > 0 THEN
1995 
1996             csi_t_txn_rltnshps_pvt.delete_txn_ii_rltns_dtls(
1997               p_api_version          => p_api_version,
1998               p_commit               => p_commit,
1999               p_init_msg_list        => p_init_msg_list,
2000               p_validation_level     => p_validation_level,
2001               p_txn_ii_rltns_ids_tbl => l_iir_ids_tbl,
2002               x_return_status        => l_return_status,
2003               x_msg_count            => l_msg_count,
2004               x_msg_data             => l_msg_data);
2005 
2006             IF l_return_status <> fnd_api.g_ret_sts_success THEN
2007               raise fnd_api.g_exc_error;
2008             END IF;
2009 
2010           END IF;
2011 
2012           IF l_oa_ids_tbl.COUNT > 0 THEN
2013 
2014             csi_t_txn_ous_pvt.delete_txn_org_assgn_dtls(
2015               p_api_version           => p_api_version,
2016               p_commit                => p_commit,
2017               p_init_msg_list         => p_init_msg_list,
2018               p_validation_level      => p_validation_level,
2019               p_txn_org_assgn_ids_tbl => l_oa_ids_tbl,
2020               x_return_status         => l_return_status,
2021               x_msg_count             => l_msg_count,
2022               x_msg_data              => l_msg_data);
2023 
2024             IF l_return_status <> fnd_api.g_ret_sts_success THEN
2025               raise fnd_api.g_exc_error;
2026             END IF;
2027 
2028           END IF;
2029 
2030           IF l_ea_ids_tbl.COUNT > 0 THEN
2031 
2032             csi_t_txn_attribs_pvt.delete_txn_ext_attrib_dtls(
2033               p_api_version            => p_api_version,
2034               p_commit                 => p_commit,
2035               p_init_msg_list          => p_init_msg_list,
2036               p_validation_level       => p_validation_level,
2037               p_txn_ext_attrib_ids_tbl => l_ea_ids_tbl,
2038               x_return_status          => l_return_status,
2039               x_msg_count              => l_msg_count,
2040               x_msg_data               => l_msg_data);
2041 
2042             IF l_return_status <> fnd_api.g_ret_sts_success THEN
2043               raise fnd_api.g_exc_error;
2044             END IF;
2045 
2046           END IF;
2047 
2048 
2049     -- Added the below IF for bug 2563265
2050           IF nvl(l_td_rec.serial_number, fnd_api.g_miss_char) <> fnd_api.g_miss_char THEN
2051            IF nvl(l_td_rec.instance_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
2052             Begin
2053 	       Select serial_number, instance_id, lot_number
2054 	       Into l_td_rec.serial_number, l_td_rec.instance_id,
2055 		       l_td_rec.lot_number
2056 	       From csi_item_instances
2057 	       Where inventory_item_id = l_td_rec.inventory_item_id
2058 	         and serial_number = l_td_rec.serial_number;
2059 	       Exception when others then
2060                null;-- do nothing. This is just to sync instance data on the tld rec...
2061             End;
2062 	   END IF;
2063 
2064           ELSIF nvl(l_td_rec.instance_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
2065 	    Begin
2066 	       Select serial_number, instance_id, lot_number
2067 	       Into l_td_rec.serial_number, l_td_rec.instance_id,
2068 		       l_td_rec.lot_number
2069 	       From csi_item_instances
2070 	       Where instance_id = l_td_rec.instance_id;
2071 	       Exception when others then
2072                null;-- do nothing. This should not arise though.
2073             End;
2074           END IF;
2075 
2076           begin
2077 
2078             csi_t_gen_utility_pvt.dump_api_info(
2079               p_api_name => 'update_row',
2080               p_pkg_name => 'csi_t_txn_line_details_pkg');
2081 
2082             csi_t_txn_line_details_pkg.update_row(
2083               p_txn_line_detail_id      => l_td_rec.txn_line_detail_id,
2084               p_transaction_line_id     => l_td_rec.transaction_line_id,
2085               p_sub_type_id             => l_td_rec.sub_type_id,
2086               p_instance_exists_flag    => l_td_rec.instance_exists_flag,
2087               p_source_transaction_flag => l_td_rec.source_transaction_flag,
2088               p_instance_id             => l_td_rec.instance_id,
2089               p_csi_system_id           => l_td_rec.csi_system_id,
2090               p_inventory_item_id       => l_td_rec.inventory_item_id,
2091               p_inv_organization_id     => l_td_rec.inv_organization_id,
2092               p_inventory_revision      => l_td_rec.inventory_revision,
2093               p_instance_type_code      => l_td_rec.instance_type_code,
2094               p_item_condition_id       => l_td_rec.item_condition_id,
2095               p_quantity                => l_td_rec.quantity,
2096               p_unit_of_measure         => l_td_rec.unit_of_measure,
2097               p_qty_remaining           => l_td_rec.qty_remaining,
2098               p_serial_number           => l_td_rec.serial_number,
2099               p_lot_number              => l_td_rec.lot_number,
2100               p_mfg_serial_number_flag  => l_td_rec.mfg_serial_number_flag,
2101               p_location_type_code      => l_td_rec.location_type_code,
2102               p_location_id             => l_td_rec.location_id,
2103               p_installation_date       => l_td_rec.installation_date,
2104               p_in_service_date         => l_td_rec.in_service_date,
2105               p_external_reference      => l_td_rec.external_reference,
2106               p_version_label           => l_td_rec.version_label,
2107               p_transaction_system_id   => l_td_rec.transaction_system_id,
2108               p_sellable_flag           => l_td_rec.sellable_flag,
2109               p_return_by_date          => l_td_rec.return_by_date,
2110               p_active_start_date       => l_td_rec.active_start_date,
2111               p_active_end_date         => l_td_rec.active_end_date,
2112               p_preserve_detail_flag    => l_td_rec.preserve_detail_flag,
2113               p_changed_instance_id     => l_td_rec.changed_instance_id,
2114               p_reference_source_id     => l_td_rec.reference_source_id,
2115               p_reference_source_line_id  => l_td_rec.reference_source_line_id,
2116               p_reference_source_date   => l_td_rec.reference_source_date,
2117               p_csi_transaction_id      => l_td_rec.csi_transaction_id,
2118               p_source_txn_line_detail_id => l_td_rec.source_txn_line_detail_id,
2119               p_inv_mtl_transaction_id  => l_td_rec.inv_mtl_transaction_id,
2120               p_processing_status       => l_td_rec.processing_status,
2121               p_error_code              => l_td_rec.error_code,
2122               p_error_explanation       => l_td_rec.error_explanation,
2123              -- Added for CZ Integration (Begin)
2124               p_config_inst_hdr_id      => l_td_rec.config_inst_hdr_id ,
2125               p_config_inst_rev_num     => l_td_rec.config_inst_rev_num ,
2126               p_config_inst_item_id    => l_td_rec.config_inst_item_id ,
2127               p_config_inst_baseline_rev_num    => l_td_rec.config_inst_baseline_rev_num ,
2128               p_target_commitment_date    => l_td_rec.target_commitment_date ,
2129               p_instance_description    => l_td_rec.instance_description ,
2130              -- Added for CZ Integration (End)
2131              -- Added for partner ordering
2132               p_install_location_type_code      => l_td_rec.install_location_type_code,
2133               p_install_location_id             => l_td_rec.install_location_id,
2134              -- Added for partner ordering
2135               p_cascade_owner_flag      => l_td_rec.cascade_owner_flag,
2136               p_attribute1              => l_td_rec.attribute1,
2137               p_attribute2              => l_td_rec.attribute2,
2138               p_attribute3              => l_td_rec.attribute3,
2139               p_attribute4              => l_td_rec.attribute4,
2140               p_attribute5              => l_td_rec.attribute5,
2141               p_attribute6              => l_td_rec.attribute6,
2142               p_attribute7              => l_td_rec.attribute7,
2143               p_attribute8              => l_td_rec.attribute8,
2144               p_attribute9              => l_td_rec.attribute9,
2145               p_attribute10             => l_td_rec.attribute10,
2146               p_attribute11             => l_td_rec.attribute11,
2147               p_attribute12             => l_td_rec.attribute12,
2148               p_attribute13             => l_td_rec.attribute13,
2149               p_attribute14             => l_td_rec.attribute14,
2150               p_attribute15             => l_td_rec.attribute15,
2151               p_created_by              => l_td_rec.created_by,
2152               p_creation_date           => l_td_rec.creation_date,
2153               p_last_updated_by         => l_td_rec.last_updated_by,
2154               p_last_update_date        => l_td_rec.last_update_date,
2155               p_last_update_login       => l_td_rec.last_update_login,
2156               p_object_version_number   => l_td_rec.object_version_number,
2157               p_context                 => l_td_rec.context,
2158               p_parent_instance_id      => l_td_rec.parent_instance_id,
2159               p_assc_txn_line_detail_id => l_td_rec.assc_txn_line_detail_id,
2160               p_overriding_csi_txn_id   => l_td_rec.overriding_csi_txn_id,
2161               p_instance_status_id      => l_td_rec.instance_status_id);
2162           exception
2163             when others then
2164               fnd_message.set_name('FND', 'FND_GENERIC_MESSAGE');
2165               fnd_message.set_token('MESSAGE',
2166                  'csi_t_txn_line_details_pkg.update_row Failed. '||substr(sqlerrm,1,200));
2167               fnd_msg_pub.add;
2168               raise fnd_api.g_exc_error;
2169           end;
2170 
2171         END LOOP;
2172 
2173       END LOOP;
2174 
2175       -- call grp api for parties
2176 
2177       IF px_txn_party_detail_tbl.COUNT > 0 THEN
2178 
2179         debug('Found party records for processing.'||px_txn_party_detail_tbl.COUNT);
2180 
2181         l_c_pty_ind := 0;
2182         l_u_pty_ind := 0;
2183        -- Added for self bug, Mass update , Acct tables are not build or passed below
2184         l_c_pa_ind  := 0;
2185         l_u_pa_ind  := 0;
2186 
2187         l_contact_party_index  := 'N' ;
2188         l_tmp_party_detail_tbl := px_txn_party_detail_tbl;
2189         FOR l_ind IN px_txn_party_detail_tbl.FIRST .. px_txn_party_detail_tbl.LAST
2190         LOOP
2191 
2192           IF nvl(px_txn_party_detail_tbl(l_ind).txn_party_detail_id, fnd_api.g_miss_num) =
2193              fnd_api.g_miss_num
2194           THEN
2195             -- new attribute added in R12
2196             IF nvl(px_txn_party_detail_tbl(l_ind).txn_contact_party_index, fnd_api.g_miss_num)
2197                   <> fnd_api.g_miss_num
2198             THEN
2199                 l_contact_party_index  := 'Y' ;
2200             END IF;
2201             IF px_txn_pty_acct_detail_tbl.count > 0 THEN
2202              FOR m_ind IN px_txn_pty_acct_detail_tbl.FIRST .. px_txn_pty_acct_detail_tbl.LAST
2203              LOOP
2204               IF ( (nvl(px_txn_pty_acct_detail_tbl(m_ind).txn_account_detail_id,fnd_api.g_miss_num)
2205                      = fnd_api.g_miss_num)  AND
2206                    (nvl(px_txn_pty_acct_detail_tbl(m_ind).txn_party_detail_id,fnd_api.g_miss_num)
2207                      = fnd_api.g_miss_num)  AND
2208                    ( px_txn_pty_acct_detail_tbl(m_ind).txn_party_details_index = l_ind )
2209                  )
2210               THEN
2211                 l_c_pty_acct_tbl(l_c_pa_ind ) := px_txn_pty_acct_detail_tbl(m_ind);
2212                 l_c_pty_acct_tbl(l_c_pa_ind).txn_party_details_index := l_c_pty_ind;
2213                 l_c_pa_ind  := l_c_pa_ind  + 1;
2214 
2215               END IF;
2216              END LOOP; -- acct tbl loop
2217             END IF; --acct tbl.count
2218             -- Resetting the Transaction Party Contacts table
2219             l_tmp_party_detail_tbl := px_txn_party_detail_tbl;
2220 
2221             FOR con_ind IN l_tmp_party_detail_tbl.FIRST .. l_tmp_party_detail_tbl.LAST
2222             LOOP
2223               IF nvl(l_tmp_party_detail_tbl(con_ind).txn_party_detail_id,fnd_api.g_miss_num) = fnd_api.g_miss_num
2224                AND nvl(l_tmp_party_detail_tbl(con_ind).contact_party_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num
2225                AND nvl(l_tmp_party_detail_tbl(con_ind).contact_flag, 'N') = 'Y' THEN
2226                 IF nvl(px_txn_party_detail_tbl(l_ind).txn_contact_party_index,fnd_api.g_miss_num) <> fnd_api.g_miss_num
2227                  AND ( nvl(px_txn_party_detail_tbl(l_ind).contact_flag,fnd_api.g_miss_char) = fnd_api.g_miss_char
2228                        OR nvl(px_txn_party_detail_tbl(l_ind).contact_flag,'N') = 'N') THEN
2229                   IF l_tmp_party_detail_tbl(con_ind).contact_party_id
2230                      = px_txn_party_detail_tbl(l_ind).txn_contact_party_index THEN
2231 
2232                      l_tmp_party_detail_tbl(con_ind).contact_party_id := l_c_pty_ind;
2233                   END IF;
2234                 END IF;
2235               END IF;
2236             END LOOP;
2237 
2238             px_txn_party_detail_tbl := l_tmp_party_detail_tbl;
2239 
2240             IF nvl(px_txn_party_detail_tbl(l_ind).txn_contact_party_index,fnd_api.g_miss_num) <> fnd_api.g_miss_num
2241               AND ( nvl(px_txn_party_detail_tbl(l_ind).contact_flag, fnd_api.g_miss_char) = fnd_api.g_miss_char
2242                 OR nvl(px_txn_party_detail_tbl(l_ind).contact_flag, 'N') = 'N')
2243             THEN
2244                 px_txn_party_detail_tbl(l_ind).txn_contact_party_index := l_c_pty_ind;
2245             END IF;
2246 
2247             l_tmp_party_detail_tbl := px_txn_party_detail_tbl;
2248             l_c_pty_tbl(l_c_pty_ind) := px_txn_party_detail_tbl(l_ind);
2249             l_c_pty_ind := l_c_pty_ind + 1;
2250           ELSE
2251             debug('PTY Record No.: '||l_ind||' marked for update.');
2252             l_u_pty_tbl(l_u_pty_ind) := px_txn_party_detail_tbl(l_ind);
2253             IF px_txn_pty_acct_detail_tbl.count > 0 THEN
2254               FOR n_ind IN px_txn_pty_acct_detail_tbl.FIRST .. px_txn_pty_acct_detail_tbl.LAST
2255               LOOP
2256                IF ( (nvl(px_txn_pty_acct_detail_tbl(n_ind).txn_party_detail_id,fnd_api.g_miss_num)
2257                      <> fnd_api.g_miss_num)
2258                               AND
2259                     ( px_txn_pty_acct_detail_tbl(n_ind).txn_party_detail_id
2260                           = l_u_pty_tbl(l_u_pty_ind).txn_party_detail_id )
2261                   ) THEN
2262 
2263                     l_u_pty_acct_tbl(l_u_pa_ind ) := px_txn_pty_acct_detail_tbl(n_ind);
2264                     l_u_pa_ind  := l_u_pa_ind  + 1;
2265                END IF;
2266               END LOOP; -- acct loop
2267             END IF; -- acct tbl.count
2268 
2269             l_u_pty_ind := l_u_pty_ind + 1;
2270 
2271           END IF; -- update/create pty
2272         END LOOP;
2273 
2274         IF l_c_pty_tbl.COUNT > 0 THEN
2275 
2276           csi_t_txn_parties_grp.create_txn_party_dtls(
2277             p_api_version              => p_api_version,
2278             p_commit                   => p_commit,
2279             p_init_msg_list            => p_init_msg_list,
2280             p_validation_level         => p_validation_level,
2281             px_txn_party_detail_tbl    => l_c_pty_tbl,
2282             px_txn_pty_acct_detail_tbl => l_c_pty_acct_tbl,
2283             x_return_status            => l_return_status,
2284             x_msg_count                => l_msg_count,
2285             x_msg_data                 => l_msg_data);
2286 
2287           IF l_return_status <> fnd_api.g_ret_sts_success THEN
2288             RAISE fnd_api.g_exc_error;
2289           END IF;
2290 
2291           -- we now need this code below for those cases where it is a new contact for an existing
2292           --txn pty detail , since for the rest of it, this is taken care of in the Party GRP
2293           -- need to assign the entire set of passed pty records
2294 
2295           l_tmp_party_dtl_tbl := l_tmp_party_detail_tbl;--px_txn_party_detail_tbl;
2296 
2297           --          process the contact party id
2298           FOR cont_ind IN l_c_pty_tbl.FIRST .. l_c_pty_tbl.LAST
2299           LOOP
2300             IF nvl(l_c_pty_tbl(cont_ind).contact_party_id, fnd_api.g_miss_num) <>
2301                fnd_api.g_miss_num AND l_c_pty_tbl(cont_ind).contact_flag = 'Y'
2302             THEN
2303               IF nvl(l_contact_party_index, 'N') = 'Y' THEN
2304                 l_contact_party_id := null;
2305                 FOR p_ind IN l_tmp_party_dtl_tbl.FIRST .. l_tmp_party_dtl_tbl.LAST
2306                 LOOP
2307                   IF ( l_tmp_party_dtl_tbl(p_ind).txn_contact_party_index is not null
2308                     AND l_tmp_party_dtl_tbl(p_ind).txn_contact_party_index <>  fnd_api.g_miss_num )
2309                   THEN
2310                        --do nothing 'cause the creates are already handled in the Party Grp
2311                        null;
2312                   ELSIF l_tmp_party_dtl_tbl(p_ind).txn_party_detail_id = l_c_pty_tbl(cont_ind).contact_party_id
2313                       AND ( nvl(l_tmp_party_dtl_tbl(p_ind).contact_flag,fnd_api.g_miss_char) = fnd_api.g_miss_char
2314                             OR nvl(l_tmp_party_dtl_tbl(p_ind).contact_flag,'N') = 'N')  THEN
2315                        l_contact_party_id := l_tmp_party_dtl_tbl(p_ind).txn_party_detail_id;
2316                        exit;
2317                   END IF;
2318                 END LOOP;
2319               ELSE
2320                  l_contact_party_id := null;
2321                  FOR p_ind IN l_tmp_party_dtl_tbl.FIRST .. l_tmp_party_dtl_tbl.LAST
2322                  LOOP
2323                    IF p_ind = l_c_pty_tbl(cont_ind).contact_party_id
2324                      AND ( nvl(l_tmp_party_dtl_tbl(p_ind).contact_flag,fnd_api.g_miss_char) = fnd_api.g_miss_char
2325                           OR nvl(l_tmp_party_dtl_tbl(p_ind).contact_flag,'N') = 'N' )
2326                    THEN
2327                      --do nothing 'cause the creates are already handled in the Party Grp
2328                        null;
2329                    ELSIF l_tmp_party_dtl_tbl(p_ind).txn_party_detail_id = l_c_pty_tbl(cont_ind).contact_party_id
2330                        AND ( nvl(l_tmp_party_dtl_tbl(p_ind).contact_flag,fnd_api.g_miss_char) = fnd_api.g_miss_char
2331                             OR nvl(l_tmp_party_dtl_tbl(p_ind).contact_flag,'N') = 'N' ) THEN
2332                       l_contact_party_id := l_tmp_party_dtl_tbl(p_ind).txn_party_detail_id;
2333                       exit;
2334                    END IF;
2335                  END LOOP;
2336               END IF;
2337 
2338               IF l_contact_party_id is not null THEN
2339                   update csi_t_party_details
2340                   set    contact_party_id    = l_contact_party_id
2341                   where  txn_party_detail_id = l_c_pty_tbl(cont_ind).txn_party_detail_id;
2342               END IF;
2343             END IF;
2344           END LOOP;
2345         END IF;
2346 
2347         IF l_u_pty_tbl.COUNT > 0 THEN
2348 
2349           csi_t_txn_parties_grp.update_txn_party_dtls(
2350             p_api_version              => p_api_version,
2351             p_commit                   => p_commit,
2352             p_init_msg_list            => p_init_msg_list,
2353             p_validation_level         => p_validation_level,
2354             p_txn_party_detail_tbl     => l_u_pty_tbl,
2355             px_txn_pty_acct_detail_tbl => l_u_pty_acct_tbl,
2356             x_return_status            => l_return_status,
2357             x_msg_count                => l_msg_count,
2358             x_msg_data                 => l_msg_data);
2359 
2360           IF l_return_status <> fnd_api.g_ret_sts_success THEN
2361             RAISE fnd_api.g_exc_error;
2362           END IF;
2363         END IF;
2364 
2365       END IF; -- pty tbl.count
2366 
2367       -- call grp api for ii_relationships
2368       IF px_txn_ii_rltns_tbl.COUNT > 0 THEN
2369 
2370         debug('Found ii relationships for processing.');
2371 
2372         l_c_ii_ind := 0;
2373         l_u_ii_ind := 0;
2374 
2375         FOR l_ind IN px_txn_ii_rltns_tbl.FIRST .. px_txn_ii_rltns_tbl.LAST
2376         LOOP
2377           IF nvl(px_txn_ii_rltns_tbl(l_ind).txn_relationship_id, fnd_api.g_miss_num) =
2378              fnd_api.g_miss_num
2379           THEN
2380             debug('RLTNS Record No.: '||l_ind||' marked for create.');
2381             l_c_ii_tbl(l_ind) := px_txn_ii_rltns_tbl(l_ind);
2382             l_c_ii_ind := l_c_ii_ind + 1;
2383 
2384           ELSE
2385             debug('RLTNS Record No.: '||l_ind||' marked for update.');
2386             l_u_ii_tbl(l_ind) := px_txn_ii_rltns_tbl(l_ind);
2387             l_u_ii_ind := l_u_ii_ind + 1;
2388           END IF;
2389 
2390         END LOOP;
2391 
2392         IF l_c_ii_tbl.COUNT > 0 THEN
2393 
2394           csi_t_txn_rltnshps_grp.create_txn_ii_rltns_dtls(
2395             p_api_version       => p_api_version,
2396             p_commit            => p_commit,
2397             p_init_msg_list     => p_init_msg_list,
2398             p_validation_level  => p_validation_level,
2399             px_txn_ii_rltns_tbl => l_c_ii_tbl,
2400             x_return_status     => l_return_status,
2401             x_msg_count         => l_msg_count,
2402             x_msg_data          => l_msg_data);
2403 
2404           IF l_return_status <> fnd_api.g_ret_sts_success THEN
2405             RAISE fnd_api.g_exc_error;
2406           END IF;
2407 
2408         END IF;
2409 
2410         IF l_u_ii_tbl.COUNT > 0 THEN
2411 
2412           csi_t_txn_rltnshps_grp.update_txn_ii_rltns_dtls (
2413             p_api_version      => p_api_version,
2414             p_commit           => p_commit,
2415             p_init_msg_list    => p_init_msg_list,
2416             p_validation_level => p_validation_level,
2417             p_txn_ii_rltns_tbl => l_u_ii_tbl,
2418             x_return_status    => l_return_status,
2419             x_msg_count        => l_msg_count,
2420             x_msg_data         => l_msg_data);
2421 
2422           IF l_return_status <> fnd_api.g_ret_sts_success THEN
2423             RAISE fnd_api.g_exc_error;
2424           END IF;
2425 
2426         END IF;
2427 
2428       END IF;
2429 
2430       -- call grp api for org_assignments
2431       IF px_txn_org_assgn_tbl.COUNT > 0 THEN
2432 
2433         debug('Found org assignments records for processing.');
2434         l_c_oa_ind := 0;
2435         l_u_oa_ind := 0;
2436 
2437         FOR l_ind IN px_txn_org_assgn_tbl.FIRST .. px_txn_org_assgn_tbl.LAST
2438         LOOP
2439 
2440           IF nvl(px_txn_org_assgn_tbl(l_ind).txn_operating_unit_id, fnd_api.g_miss_num) =
2441              fnd_api.g_miss_num
2442           THEN
2443             debug('ORG Record No.: '||l_ind||' marked for create.');
2444             l_c_oa_tbl(l_c_oa_ind) := px_txn_org_assgn_tbl(l_ind);
2445             l_c_oa_ind := l_c_oa_ind + 1;
2446 
2447           ELSE
2448             debug('ORG Record No.: '||l_ind||' marked for update.');
2449             l_u_oa_tbl(l_u_oa_ind) := px_txn_org_assgn_tbl(l_ind);
2450             l_u_oa_ind := l_u_oa_ind + 1;
2451           END IF;
2452 
2453         END LOOP;
2454 
2455         IF l_c_oa_tbl.COUNT > 0 THEN
2456 
2457           csi_t_txn_ous_grp.create_txn_org_assgn_dtls(
2458             p_api_version        => p_api_version,
2459             p_commit             => p_commit,
2460             p_init_msg_list      => p_init_msg_list,
2461             p_validation_level   => p_validation_level,
2462             px_txn_org_assgn_tbl => l_c_oa_tbl,
2463             x_return_status      => l_return_status,
2464             x_msg_count          => l_msg_count,
2465             x_msg_data           => l_msg_data);
2466 
2467           IF l_return_status <> fnd_api.g_ret_sts_success THEN
2468             RAISE fnd_api.g_exc_error;
2469           END IF;
2470 
2471         END IF;
2472 
2473         IF l_u_oa_tbl.COUNT > 0 THEN
2474 
2475           csi_t_txn_ous_grp.update_txn_org_assgn_dtls(
2476             p_api_version          => p_api_version,
2477             p_commit               => p_commit,
2478             p_init_msg_list        => p_init_msg_list,
2479             p_validation_level     => p_validation_level,
2480             p_txn_org_assgn_tbl    => l_u_oa_tbl,
2481             x_return_status        => l_return_status,
2482             x_msg_count            => l_msg_count,
2483             x_msg_data             => l_msg_data);
2484 
2485           IF l_return_status <> fnd_api.g_ret_sts_success THEN
2486             RAISE fnd_api.g_exc_error;
2487           END IF;
2488         END IF;
2489 
2490       END IF;
2491 
2492       -- call grp api for ext attribs
2493       IF px_txn_ext_attrib_vals_tbl.COUNT > 0 THEN
2494 
2495         debug('Found extended attributes to be processed.');
2496         l_u_ea_ind := 0;
2497 
2498         FOR l_ind IN px_txn_ext_attrib_vals_tbl.FIRST .. px_txn_ext_attrib_vals_tbl.LAST
2499         LOOP
2500 
2501           IF nvl(px_txn_ext_attrib_vals_tbl(l_ind).txn_attrib_detail_id,fnd_api.g_miss_num)
2502              = fnd_api.g_miss_num
2503           THEN
2504 
2505             debug('EAV Record No.: '||l_ind||' marked for create.');
2506 
2507             csi_t_txn_attribs_pvt.create_txn_ext_attrib_dtls(
2508               p_api_version             => p_api_version,
2509               p_commit                  => p_commit,
2510               p_init_msg_list           => p_init_msg_list,
2511               p_validation_level        => p_validation_level,
2512               p_txn_ext_attrib_vals_rec => px_txn_ext_attrib_vals_tbl(l_ind),
2513               x_return_status           => l_return_status,
2514               x_msg_count               => l_msg_count,
2515               x_msg_data                => l_msg_data);
2516 
2517             IF l_return_status <> fnd_api.g_ret_sts_success THEN
2518               RAISE fnd_api.g_exc_error;
2519             END IF;
2520           ELSE
2521 
2522             debug('EAV Record No.: '||l_ind||' marked for update.');
2523 
2524             l_u_eav_tbl(l_u_ea_ind) := px_txn_ext_attrib_vals_tbl(l_ind);
2525             l_u_ea_ind := l_u_ea_ind + 1;
2526 
2527           END IF;
2528 
2529         END LOOP;
2530 
2531         IF l_u_eav_tbl.COUNT > 0 THEN
2532 
2533           csi_t_txn_attribs_pvt.update_txn_ext_attrib_dtls(
2534             p_api_version             => p_api_version,
2535             p_commit                  => p_commit,
2536             p_init_msg_list           => p_init_msg_list,
2537             p_validation_level        => p_validation_level,
2538             p_txn_ext_attrib_vals_tbl => l_u_eav_tbl,
2539             x_return_status           => l_return_status,
2540             x_msg_count               => l_msg_count,
2541             x_msg_data                => l_msg_data);
2542 
2543           IF l_return_status <> fnd_api.g_ret_sts_success THEN
2544             RAISE fnd_api.g_exc_error;
2545           END IF;
2546 
2547         END IF;
2548 
2549       END IF;
2550 
2551     END IF;
2552 
2553     debug('Transaction details updated successfully.');
2554 
2555     -- Standard check of p_commit.
2556     IF fnd_api.To_Boolean( p_commit ) THEN
2557       COMMIT WORK;
2558     END IF;
2559 
2560     -- Standard call to get message count and if count is  get message info.
2561     fnd_msg_pub.Count_And_Get(
2562       p_count  =>  x_msg_count,
2563       p_data   =>  x_msg_data);
2564 
2565   EXCEPTION
2566     WHEN fnd_api.G_EXC_ERROR THEN
2567 
2568       ROLLBACK TO update_txn_line_dtls;
2569       x_return_status := fnd_api.g_ret_sts_error ;
2570       fnd_msg_pub.Count_And_Get (
2571         p_count  => x_msg_count,
2572         p_data   => x_msg_data);
2573 
2574     WHEN fnd_api.g_exc_unexpected_error THEN
2575 
2576       ROLLBACK TO update_txn_line_dtls;
2577       x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR ;
2578 
2579       fnd_msg_pub.count_and_get(
2580         p_count  => x_msg_count,
2581         p_data   => x_msg_data);
2582 
2583     WHEN OTHERS THEN
2584 
2585       ROLLBACK TO Update_Txn_Line_Dtls;
2586       x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR ;
2587 
2588       IF fnd_msg_pub.Check_Msg_Level(
2589            p_message_level => fnd_msg_pub.G_MSG_LVL_UNEXP_ERROR) THEN
2590 
2591         fnd_msg_pub.Add_Exc_Msg(
2592           p_pkg_name       => G_PKG_NAME,
2593           p_procedure_name => l_api_name);
2594 
2595       END IF;
2596 
2597       fnd_msg_pub.Count_And_Get(
2598         p_count  => x_msg_count,
2599         p_data   => x_msg_data);
2600 
2601   END update_txn_line_dtls;
2602 
2603   PROCEDURE bind_query_variables(
2604     p_dtl_qry_cur_id             in  integer,
2605     p_txn_line_query_rec         in  csi_t_datastructures_grp.txn_line_query_rec,
2606     p_txn_line_detail_query_rec  in  csi_t_datastructures_grp.txn_line_detail_query_rec,
2607     x_return_status              OUT NOCOPY varchar2)
2608   IS
2609   BEGIN
2610 
2611     api_log('bind_query_variables');
2612 
2613     x_return_status := fnd_api.g_ret_sts_success;
2614 
2615     -- transaction lines variables bind
2616     IF nvl(p_txn_line_query_rec.transaction_line_id,fnd_api.g_miss_num) <>
2617        fnd_api.g_miss_num THEN
2618       dbms_sql.bind_variable(p_dtl_qry_cur_id,'transaction_line_id',
2619                          p_txn_line_query_rec.transaction_line_id);
2620     END IF;
2621 
2622     IF nvl(p_txn_line_query_rec.source_txn_header_id,fnd_api.g_miss_num) <>
2623        fnd_api.g_miss_num THEN
2624       dbms_sql.bind_variable(p_dtl_qry_cur_id,'source_txn_header_id',
2625                          p_txn_line_query_rec.source_txn_header_id);
2626     END IF;
2627 
2628     IF nvl(p_txn_line_query_rec.source_transaction_id,fnd_api.g_miss_num) <>
2629        fnd_api.g_miss_num THEN
2630       dbms_sql.bind_variable(p_dtl_qry_cur_id,'source_transaction_id',
2631                          p_txn_line_query_rec.source_transaction_id);
2632     END IF;
2633 
2634     IF nvl(p_txn_line_query_rec.source_transaction_table,fnd_api.g_miss_char) <>
2635        fnd_api.g_miss_char THEN
2636       dbms_sql.bind_variable(p_dtl_qry_cur_id,'source_transaction_table',
2637                            p_txn_line_query_rec.source_transaction_table);
2638     END IF;
2639 
2640     IF nvl(p_txn_line_query_rec.error_code,fnd_api.g_miss_char) <>
2641        fnd_api.g_miss_char THEN
2642       dbms_sql.bind_variable(p_dtl_qry_cur_id,'error_code',
2643                            p_txn_line_query_rec.error_code);
2644     END IF;
2645 
2646     IF nvl(p_txn_line_query_rec.processing_status,fnd_api.g_miss_char) <>
2647        fnd_api.g_miss_char THEN
2648       dbms_sql.bind_variable(p_dtl_qry_cur_id,'processing_status',
2649                            p_txn_line_query_rec.processing_status);
2650     END IF;
2651 
2652     IF nvl(p_txn_line_query_rec.config_session_hdr_id,fnd_api.g_miss_num) <>
2653        fnd_api.g_miss_num THEN
2654       dbms_sql.bind_variable(p_dtl_qry_cur_id,'config_session_hdr_id',
2655                            p_txn_line_query_rec.config_session_hdr_id);
2656     END IF;
2657 
2658     IF nvl(p_txn_line_query_rec.config_session_rev_num,fnd_api.g_miss_num) <>
2659        fnd_api.g_miss_num THEN
2660       dbms_sql.bind_variable(p_dtl_qry_cur_id,'config_session_rev_num',
2661                            p_txn_line_query_rec.config_session_rev_num);
2662     END IF;
2663 
2664     IF nvl(p_txn_line_query_rec.config_session_item_id,fnd_api.g_miss_num) <>
2665        fnd_api.g_miss_num THEN
2666       dbms_sql.bind_variable(p_dtl_qry_cur_id,'config_session_item_id',
2667                            p_txn_line_query_rec.config_session_item_id);
2668     END IF;
2669 
2670     -- txn_line details variables bind
2671 
2672     IF nvl(p_txn_line_detail_query_rec.transaction_line_id, fnd_api.g_miss_num) <>
2673        fnd_api.g_miss_num
2674     THEN
2675        dbms_sql.bind_variable(p_dtl_qry_cur_id, 'dtl_transaction_line_id',
2676           p_txn_line_detail_query_rec.transaction_line_id);
2677     END IF;
2678 
2679     IF nvl(p_txn_line_detail_query_rec.txn_line_detail_id, fnd_api.g_miss_num) <>
2680        fnd_api.g_miss_num
2681     THEN
2682       dbms_sql.bind_variable(p_dtl_qry_cur_id,'txn_line_detail_id',
2683                          p_txn_line_detail_query_rec.txn_line_detail_id);
2684     END IF;
2685 
2686     IF nvl(p_txn_line_detail_query_rec.sub_type_id,fnd_api.g_miss_num) <>
2687        fnd_api.g_miss_num THEN
2688       dbms_sql.bind_variable(p_dtl_qry_cur_id,'sub_type_id',
2689                          p_txn_line_detail_query_rec.sub_type_id);
2690     END IF;
2691 
2692     IF nvl(p_txn_line_detail_query_rec.instance_exists_flag, fnd_api.g_miss_char) <>
2693        fnd_api.g_miss_char
2694     THEN
2695       dbms_sql.bind_variable(p_dtl_qry_cur_id,'instance_exists_flag',
2696                            p_txn_line_detail_query_rec.instance_exists_flag);
2697     END IF;
2698 
2699     IF nvl(p_txn_line_detail_query_rec.instance_id, fnd_api.g_miss_num) <>
2700        fnd_api.g_miss_num
2701     THEN
2702       dbms_sql.bind_variable(p_dtl_qry_cur_id,'instance_id',
2703                          p_txn_line_detail_query_rec.instance_id);
2704     END IF;
2705 
2706     IF nvl(p_txn_line_detail_query_rec.csi_transaction_id, fnd_api.g_miss_num) <>
2707        fnd_api.g_miss_num
2708     THEN
2709       dbms_sql.bind_variable(p_dtl_qry_cur_id,'csi_transaction_id',
2710                          p_txn_line_detail_query_rec.csi_transaction_id);
2711     END IF;
2712 
2713     IF nvl(p_txn_line_detail_query_rec.source_transaction_flag, fnd_api.g_miss_char) <>
2714        fnd_api.g_miss_char
2715     THEN
2716       dbms_sql.bind_variable(p_dtl_qry_cur_id,'source_transaction_flag',
2717                            p_txn_line_detail_query_rec.source_transaction_flag);
2718     END IF;
2719 
2720     IF nvl(p_txn_line_detail_query_rec.csi_system_id, fnd_api.g_miss_num) <>
2721        fnd_api.g_miss_num
2722     THEN
2723       dbms_sql.bind_variable(p_dtl_qry_cur_id,'csi_system_id',
2724                          p_txn_line_detail_query_rec.csi_system_id);
2725     END IF;
2726 
2727     IF nvl(p_txn_line_detail_query_rec.transaction_system_id, fnd_api.g_miss_num) <>
2728        fnd_api.g_miss_num
2729     THEN
2730       dbms_sql.bind_variable(p_dtl_qry_cur_id,'transaction_system_id',
2731                       p_txn_line_detail_query_rec.transaction_system_id);
2732     END IF;
2733 
2734     IF nvl(p_txn_line_detail_query_rec.inventory_item_id, fnd_api.g_miss_num) <>
2735        fnd_api.g_miss_num
2736     THEN
2737       dbms_sql.bind_variable(p_dtl_qry_cur_id,'inventory_item_id',
2738                       p_txn_line_detail_query_rec.inventory_item_id);
2739     END IF;
2740 
2741     IF nvl(p_txn_line_detail_query_rec.inventory_revision, fnd_api.g_miss_char) <>
2742        fnd_api.g_miss_char
2743     THEN
2744       dbms_sql.bind_variable(p_dtl_qry_cur_id,'inventory_revision',
2745                            p_txn_line_detail_query_rec.inventory_revision);
2746     END IF;
2747 
2748     IF nvl(p_txn_line_detail_query_rec.inv_organization_id, fnd_api.g_miss_num) <>
2749        fnd_api.g_miss_num
2750     THEN
2751       dbms_sql.bind_variable(p_dtl_qry_cur_id,'inv_organization_id',
2752                       p_txn_line_detail_query_rec.inv_organization_id);
2753     END IF;
2754 
2755     IF nvl(p_txn_line_detail_query_rec.serial_number, fnd_api.g_miss_char) <>
2756        fnd_api.g_miss_char
2757     THEN
2758       dbms_sql.bind_variable(p_dtl_qry_cur_id,'serial_number',
2759                            p_txn_line_detail_query_rec.serial_number);
2760     END IF;
2761 
2762     IF nvl(p_txn_line_detail_query_rec.mfg_serial_number_flag, fnd_api.g_miss_char) <>
2763        fnd_api.g_miss_char
2764     THEN
2765       dbms_sql.bind_variable(p_dtl_qry_cur_id,'mfg_serial_number_flag',
2766                            p_txn_line_detail_query_rec.mfg_serial_number_flag);
2767     END IF;
2768 
2769     IF nvl(p_txn_line_detail_query_rec.lot_number, fnd_api.g_miss_char) <>
2770        fnd_api.g_miss_char
2771     THEN
2772       dbms_sql.bind_variable(p_dtl_qry_cur_id,'lot_number',
2773                            p_txn_line_detail_query_rec.lot_number);
2774     END IF;
2775 
2776     IF nvl(p_txn_line_detail_query_rec.location_type_code, fnd_api.g_miss_char) <>
2777        fnd_api.g_miss_char
2778     THEN
2779       dbms_sql.bind_variable(p_dtl_qry_cur_id,'location_type_code',
2780                            p_txn_line_detail_query_rec.location_type_code);
2781     END IF;
2782 
2783     IF nvl(p_txn_line_detail_query_rec.external_reference, fnd_api.g_miss_char) <>
2784        fnd_api.g_miss_char
2785     THEN
2786       dbms_sql.bind_variable(p_dtl_qry_cur_id,'external_reference',
2787                            p_txn_line_detail_query_rec.external_reference);
2788     END IF;
2789 
2790     IF nvl(p_txn_line_detail_query_rec.error_code, fnd_api.g_miss_char) <>
2791        fnd_api.g_miss_char
2792     THEN
2793       dbms_sql.bind_variable(p_dtl_qry_cur_id,'dtl_error_code',
2794                            p_txn_line_detail_query_rec.error_code);
2795     END IF;
2796 
2797     IF nvl(p_txn_line_detail_query_rec.error_explanation, fnd_api.g_miss_char) <>
2798        fnd_api.g_miss_char
2799     THEN
2800       dbms_sql.bind_variable(p_dtl_qry_cur_id,'dtl_error_explanation',
2801                            p_txn_line_detail_query_rec.error_explanation);
2802     END IF;
2803 
2804     IF nvl(p_txn_line_detail_query_rec.return_by_date, fnd_api.g_miss_date) <>
2805        fnd_api.g_miss_date
2806     THEN
2807       dbms_sql.bind_variable(p_dtl_qry_cur_id,'return_by_date',
2808                            p_txn_line_detail_query_rec.return_by_date);
2809     END IF;
2810 
2811   EXCEPTION
2812     WHEN others THEN
2813       fnd_message.set_name('FND', 'FND_GENERIC_MESSAGE');
2814       fnd_message.set_token('MESSAGE',substr(sqlerrm, 1, 255));
2815       fnd_msg_pub.add;
2816       x_return_status := fnd_api.g_ret_sts_error;
2817 
2818   END bind_query_variables;
2819 
2820   PROCEDURE get_dtls_dynamic(
2821     p_txn_line_query_rec        IN  csi_t_datastructures_grp.txn_line_query_rec,
2822     p_txn_line_detail_query_rec IN  csi_t_datastructures_grp.txn_line_detail_query_rec,
2823     p_dtl_select_stmt           IN  varchar2,
2824     x_line_dtls_tbl             OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
2825     x_return_status             OUT NOCOPY varchar2)
2826   IS
2827 
2828     l_dtl_qry_cur_id    integer;
2829     l_dtl_qry_cur_rows  number;
2830     l_line_dtl_rec      csi_t_datastructures_grp.txn_line_detail_rec;
2831     l_processed_rows    number := 0;
2832     l_ind               binary_integer;
2833     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
2834 
2835   BEGIN
2836 
2837     api_log('get_dtls_dynamic');
2838 
2839     l_dtl_qry_cur_id := dbms_sql.open_cursor;
2840 
2841     dbms_sql.parse(l_dtl_qry_cur_id, p_dtl_select_stmt , dbms_sql.native);
2842 
2843     bind_query_variables(
2844       p_dtl_qry_cur_id            => l_dtl_qry_cur_id,
2845       p_txn_line_query_rec        => p_txn_line_query_rec,
2846       p_txn_line_detail_query_rec => p_txn_line_detail_query_rec,
2847       x_return_status             => l_return_status);
2848 
2849     IF x_return_status <> fnd_api.g_ret_sts_success THEN
2850       RAISE fnd_api.g_exc_error;
2851     END IF;
2852 
2853     dbms_sql.define_column(l_dtl_qry_cur_id, 1, l_line_dtl_rec.txn_line_detail_id);
2854     dbms_sql.define_column(l_dtl_qry_cur_id, 2, l_line_dtl_rec.transaction_line_id);
2855     dbms_sql.define_column(l_dtl_qry_cur_id, 3, l_line_dtl_rec.sub_type_id);
2856     dbms_sql.define_column(l_dtl_qry_cur_id, 4, l_line_dtl_rec.instance_exists_flag, 1);
2857     dbms_sql.define_column(l_dtl_qry_cur_id, 5, l_line_dtl_rec.source_transaction_flag,1);
2858     dbms_sql.define_column(l_dtl_qry_cur_id, 6, l_line_dtl_rec.instance_id);
2859     dbms_sql.define_column(l_dtl_qry_cur_id, 7, l_line_dtl_rec.changed_instance_id);
2860     dbms_sql.define_column(l_dtl_qry_cur_id, 8, l_line_dtl_rec.csi_system_id);
2861     dbms_sql.define_column(l_dtl_qry_cur_id, 9, l_line_dtl_rec.inventory_item_id);
2862     dbms_sql.define_column(l_dtl_qry_cur_id, 10, l_line_dtl_rec.inventory_revision,3);
2863     dbms_sql.define_column(l_dtl_qry_cur_id, 11, l_line_dtl_rec.inv_organization_id);
2864     dbms_sql.define_column(l_dtl_qry_cur_id, 12, l_line_dtl_rec.item_condition_id);
2865     dbms_sql.define_column(l_dtl_qry_cur_id, 13, l_line_dtl_rec.instance_type_code, 30);
2866     dbms_sql.define_column(l_dtl_qry_cur_id, 14, l_line_dtl_rec.quantity);
2867     dbms_sql.define_column(l_dtl_qry_cur_id, 15, l_line_dtl_rec.unit_of_measure,3);
2868     dbms_sql.define_column(l_dtl_qry_cur_id, 16, l_line_dtl_rec.qty_remaining);
2869     dbms_sql.define_column(l_dtl_qry_cur_id, 17, l_line_dtl_rec.serial_number,30);
2870     dbms_sql.define_column(l_dtl_qry_cur_id, 18, l_line_dtl_rec.mfg_serial_number_flag,1);
2871     dbms_sql.define_column(l_dtl_qry_cur_id, 19, l_line_dtl_rec.lot_number,80);
2872     dbms_sql.define_column(l_dtl_qry_cur_id, 20, l_line_dtl_rec.location_type_code,30);
2873     dbms_sql.define_column(l_dtl_qry_cur_id, 21, l_line_dtl_rec.location_id);
2874     dbms_sql.define_column(l_dtl_qry_cur_id, 22, l_line_dtl_rec.installation_date);
2875     dbms_sql.define_column(l_dtl_qry_cur_id, 23, l_line_dtl_rec.in_service_date);
2876     dbms_sql.define_column(l_dtl_qry_cur_id, 24, l_line_dtl_rec.external_reference,30);
2877     dbms_sql.define_column(l_dtl_qry_cur_id, 25, l_line_dtl_rec.transaction_system_id);
2878     dbms_sql.define_column(l_dtl_qry_cur_id, 26, l_line_dtl_rec.sellable_flag, 1);
2879     dbms_sql.define_column(l_dtl_qry_cur_id, 27, l_line_dtl_rec.version_label,240);
2880     dbms_sql.define_column(l_dtl_qry_cur_id, 28, l_line_dtl_rec.return_by_date);
2881     dbms_sql.define_column(l_dtl_qry_cur_id, 29, l_line_dtl_rec.active_start_date);
2882     dbms_sql.define_column(l_dtl_qry_cur_id, 30, l_line_dtl_rec.active_end_date);
2883     dbms_sql.define_column(l_dtl_qry_cur_id, 31, l_line_dtl_rec.preserve_detail_flag,1);
2884     dbms_sql.define_column(l_dtl_qry_cur_id, 32, l_line_dtl_rec.reference_source_id);
2885     dbms_sql.define_column(l_dtl_qry_cur_id, 33, l_line_dtl_rec.reference_source_date);
2886     dbms_sql.define_column(l_dtl_qry_cur_id, 34, l_line_dtl_rec.csi_transaction_id);
2887     dbms_sql.define_column(l_dtl_qry_cur_id, 35, l_line_dtl_rec.processing_status,30);
2888     dbms_sql.define_column(l_dtl_qry_cur_id, 36, l_line_dtl_rec.error_code,240);
2889     dbms_sql.define_column(l_dtl_qry_cur_id, 37, l_line_dtl_rec.error_explanation,240);
2890     dbms_sql.define_column(l_dtl_qry_cur_id, 38, l_line_dtl_rec.context,30);
2891     dbms_sql.define_column(l_dtl_qry_cur_id, 39, l_line_dtl_rec.attribute1, 150);
2892     dbms_sql.define_column(l_dtl_qry_cur_id, 40, l_line_dtl_rec.attribute2, 150);
2893     dbms_sql.define_column(l_dtl_qry_cur_id, 41, l_line_dtl_rec.attribute3, 150);
2894     dbms_sql.define_column(l_dtl_qry_cur_id, 42, l_line_dtl_rec.attribute4, 150);
2895     dbms_sql.define_column(l_dtl_qry_cur_id, 43, l_line_dtl_rec.attribute5, 150);
2896     dbms_sql.define_column(l_dtl_qry_cur_id, 44, l_line_dtl_rec.attribute6, 150);
2897     dbms_sql.define_column(l_dtl_qry_cur_id, 45, l_line_dtl_rec.attribute7, 150);
2898     dbms_sql.define_column(l_dtl_qry_cur_id, 46, l_line_dtl_rec.attribute8, 150);
2899     dbms_sql.define_column(l_dtl_qry_cur_id, 47, l_line_dtl_rec.attribute9, 150);
2900     dbms_sql.define_column(l_dtl_qry_cur_id, 48, l_line_dtl_rec.attribute10, 150);
2901     dbms_sql.define_column(l_dtl_qry_cur_id, 49, l_line_dtl_rec.attribute11, 150);
2902     dbms_sql.define_column(l_dtl_qry_cur_id, 50, l_line_dtl_rec.attribute12, 150);
2903     dbms_sql.define_column(l_dtl_qry_cur_id, 51, l_line_dtl_rec.attribute13, 150);
2904     dbms_sql.define_column(l_dtl_qry_cur_id, 52, l_line_dtl_rec.attribute14, 150);
2905     dbms_sql.define_column(l_dtl_qry_cur_id, 53, l_line_dtl_rec.attribute15, 150);
2906     dbms_sql.define_column(l_dtl_qry_cur_id, 54, l_line_dtl_rec.object_version_number);
2907     dbms_sql.define_column(l_dtl_qry_cur_id, 55, l_line_dtl_rec.source_txn_line_detail_id);
2908     dbms_sql.define_column(l_dtl_qry_cur_id, 56, l_line_dtl_rec.inv_mtl_transaction_id);
2909     dbms_sql.define_column(l_dtl_qry_cur_id, 57, l_line_dtl_rec.config_inst_hdr_id);
2910     dbms_sql.define_column(l_dtl_qry_cur_id, 58, l_line_dtl_rec.config_inst_rev_num);
2911     dbms_sql.define_column(l_dtl_qry_cur_id, 59, l_line_dtl_rec.config_inst_item_id);
2912     dbms_sql.define_column(l_dtl_qry_cur_id, 60, l_line_dtl_rec.target_commitment_date);
2913     dbms_sql.define_column(l_dtl_qry_cur_id, 61 , l_line_dtl_rec.instance_description,240);
2914     dbms_sql.define_column(l_dtl_qry_cur_id, 62 , l_line_dtl_rec.config_inst_baseline_rev_num);
2915     dbms_sql.define_column(l_dtl_qry_cur_id, 63, l_line_dtl_rec.reference_source_line_id);
2916     dbms_sql.define_column(l_dtl_qry_cur_id, 64, l_line_dtl_rec.install_location_type_code,60);
2917     dbms_sql.define_column(l_dtl_qry_cur_id, 65, l_line_dtl_rec.install_location_id);
2918     dbms_sql.define_column(l_dtl_qry_cur_id, 66, l_line_dtl_rec.cascade_owner_flag,1);
2919     dbms_sql.define_column(l_dtl_qry_cur_id, 67, l_line_dtl_rec.parent_instance_id);
2920     dbms_sql.define_column(l_dtl_qry_cur_id, 68, l_line_dtl_rec.assc_txn_line_detail_id);
2921     dbms_sql.define_column(l_dtl_qry_cur_id, 69, l_line_dtl_rec.overriding_csi_txn_id);
2922     dbms_sql.define_column(l_dtl_qry_cur_id, 70, l_line_dtl_rec.instance_status_id);
2923 
2924     l_ind := 0;
2925 
2926     l_processed_rows := dbms_sql.execute(l_dtl_qry_cur_id);
2927     LOOP
2928       exit when dbms_sql.fetch_rows(l_dtl_qry_cur_id) = 0;
2929 
2930       l_ind := l_ind + 1;
2931 
2932       dbms_sql.column_value(l_dtl_qry_cur_id, 1, x_line_dtls_tbl(l_ind).txn_line_detail_id);
2933       dbms_sql.column_value(l_dtl_qry_cur_id, 2, x_line_dtls_tbl(l_ind).transaction_line_id);
2934       dbms_sql.column_value(l_dtl_qry_cur_id, 3, x_line_dtls_tbl(l_ind).sub_type_id);
2935       dbms_sql.column_value(l_dtl_qry_cur_id, 4, x_line_dtls_tbl(l_ind).instance_exists_flag);
2936       dbms_sql.column_value(l_dtl_qry_cur_id, 5, x_line_dtls_tbl(l_ind).source_transaction_flag);
2937       dbms_sql.column_value(l_dtl_qry_cur_id, 6, x_line_dtls_tbl(l_ind).instance_id);
2938       dbms_sql.column_value(l_dtl_qry_cur_id, 7, x_line_dtls_tbl(l_ind).changed_instance_id);
2939       dbms_sql.column_value(l_dtl_qry_cur_id, 8, x_line_dtls_tbl(l_ind).csi_system_id);
2940       dbms_sql.column_value(l_dtl_qry_cur_id, 9, x_line_dtls_tbl(l_ind).inventory_item_id);
2941       dbms_sql.column_value(l_dtl_qry_cur_id, 10, x_line_dtls_tbl(l_ind).inventory_revision);
2942       dbms_sql.column_value(l_dtl_qry_cur_id, 11, x_line_dtls_tbl(l_ind).inv_organization_id);
2943       dbms_sql.column_value(l_dtl_qry_cur_id, 12, x_line_dtls_tbl(l_ind).item_condition_id);
2944       dbms_sql.column_value(l_dtl_qry_cur_id, 13, x_line_dtls_tbl(l_ind).instance_type_code);
2945       dbms_sql.column_value(l_dtl_qry_cur_id, 14, x_line_dtls_tbl(l_ind).quantity);
2946       dbms_sql.column_value(l_dtl_qry_cur_id, 15, x_line_dtls_tbl(l_ind).unit_of_measure);
2947       dbms_sql.column_value(l_dtl_qry_cur_id, 16, x_line_dtls_tbl(l_ind).qty_remaining);
2948       dbms_sql.column_value(l_dtl_qry_cur_id, 17, x_line_dtls_tbl(l_ind).serial_number);
2949       dbms_sql.column_value(l_dtl_qry_cur_id, 18, x_line_dtls_tbl(l_ind).mfg_serial_number_flag);
2950       dbms_sql.column_value(l_dtl_qry_cur_id, 19, x_line_dtls_tbl(l_ind).lot_number);
2951       dbms_sql.column_value(l_dtl_qry_cur_id, 20, x_line_dtls_tbl(l_ind).location_type_code);
2952       dbms_sql.column_value(l_dtl_qry_cur_id, 21, x_line_dtls_tbl(l_ind).location_id);
2953       dbms_sql.column_value(l_dtl_qry_cur_id, 22, x_line_dtls_tbl(l_ind).installation_date);
2954       dbms_sql.column_value(l_dtl_qry_cur_id, 23, x_line_dtls_tbl(l_ind).in_service_date);
2955       dbms_sql.column_value(l_dtl_qry_cur_id, 24, x_line_dtls_tbl(l_ind).external_reference);
2956       dbms_sql.column_value(l_dtl_qry_cur_id, 25, x_line_dtls_tbl(l_ind).transaction_system_id);
2957       dbms_sql.column_value(l_dtl_qry_cur_id, 26, x_line_dtls_tbl(l_ind).sellable_flag);
2958       dbms_sql.column_value(l_dtl_qry_cur_id, 27, x_line_dtls_tbl(l_ind).version_label);
2959       dbms_sql.column_value(l_dtl_qry_cur_id, 28, x_line_dtls_tbl(l_ind).return_by_date);
2960       dbms_sql.column_value(l_dtl_qry_cur_id, 29, x_line_dtls_tbl(l_ind).active_start_date);
2961       dbms_sql.column_value(l_dtl_qry_cur_id, 30, x_line_dtls_tbl(l_ind).active_end_date);
2962       dbms_sql.column_value(l_dtl_qry_cur_id, 31, x_line_dtls_tbl(l_ind).preserve_detail_flag);
2963       dbms_sql.column_value(l_dtl_qry_cur_id, 32, x_line_dtls_tbl(l_ind).reference_source_id);
2964       dbms_sql.column_value(l_dtl_qry_cur_id, 33, x_line_dtls_tbl(l_ind).reference_source_date);
2965       dbms_sql.column_value(l_dtl_qry_cur_id, 34, x_line_dtls_tbl(l_ind).csi_transaction_id);
2966       dbms_sql.column_value(l_dtl_qry_cur_id, 35, x_line_dtls_tbl(l_ind).processing_status);
2967       dbms_sql.column_value(l_dtl_qry_cur_id, 36, x_line_dtls_tbl(l_ind).error_code);
2968       dbms_sql.column_value(l_dtl_qry_cur_id, 37, x_line_dtls_tbl(l_ind).error_explanation);
2969       dbms_sql.column_value(l_dtl_qry_cur_id, 38, x_line_dtls_tbl(l_ind).context);
2970       dbms_sql.column_value(l_dtl_qry_cur_id, 39, x_line_dtls_tbl(l_ind).attribute1);
2971       dbms_sql.column_value(l_dtl_qry_cur_id, 40, x_line_dtls_tbl(l_ind).attribute2);
2972       dbms_sql.column_value(l_dtl_qry_cur_id, 41, x_line_dtls_tbl(l_ind).attribute3);
2973       dbms_sql.column_value(l_dtl_qry_cur_id, 42, x_line_dtls_tbl(l_ind).attribute4);
2974       dbms_sql.column_value(l_dtl_qry_cur_id, 43, x_line_dtls_tbl(l_ind).attribute5);
2975       dbms_sql.column_value(l_dtl_qry_cur_id, 44, x_line_dtls_tbl(l_ind).attribute6);
2976       dbms_sql.column_value(l_dtl_qry_cur_id, 45, x_line_dtls_tbl(l_ind).attribute7);
2977       dbms_sql.column_value(l_dtl_qry_cur_id, 46, x_line_dtls_tbl(l_ind).attribute8);
2978       dbms_sql.column_value(l_dtl_qry_cur_id, 47, x_line_dtls_tbl(l_ind).attribute9);
2979       dbms_sql.column_value(l_dtl_qry_cur_id, 48, x_line_dtls_tbl(l_ind).attribute10);
2980       dbms_sql.column_value(l_dtl_qry_cur_id, 49, x_line_dtls_tbl(l_ind).attribute11);
2981       dbms_sql.column_value(l_dtl_qry_cur_id, 50, x_line_dtls_tbl(l_ind).attribute12);
2982       dbms_sql.column_value(l_dtl_qry_cur_id, 51, x_line_dtls_tbl(l_ind).attribute13);
2983       dbms_sql.column_value(l_dtl_qry_cur_id, 52, x_line_dtls_tbl(l_ind).attribute14);
2984       dbms_sql.column_value(l_dtl_qry_cur_id, 53, x_line_dtls_tbl(l_ind).attribute15);
2985       dbms_sql.column_value(l_dtl_qry_cur_id, 54, x_line_dtls_tbl(l_ind).object_version_number);
2986       dbms_sql.column_value(l_dtl_qry_cur_id, 55, x_line_dtls_tbl(l_ind).source_txn_line_detail_id);
2987       dbms_sql.column_value(l_dtl_qry_cur_id, 56, x_line_dtls_tbl(l_ind).inv_mtl_transaction_id);
2988       dbms_sql.column_value(l_dtl_qry_cur_id, 57, x_line_dtls_tbl(l_ind).config_inst_hdr_id);
2989       dbms_sql.column_value(l_dtl_qry_cur_id, 58, x_line_dtls_tbl(l_ind).config_inst_rev_num);
2990       dbms_sql.column_value(l_dtl_qry_cur_id, 59, x_line_dtls_tbl(l_ind).config_inst_item_id);
2991       dbms_sql.column_value(l_dtl_qry_cur_id, 60, x_line_dtls_tbl(l_ind).target_commitment_date);
2992       dbms_sql.column_value(l_dtl_qry_cur_id, 61, x_line_dtls_tbl(l_ind).instance_description);
2993       dbms_sql.column_value(l_dtl_qry_cur_id, 62 , l_line_dtl_rec.config_inst_baseline_rev_num);
2994       dbms_sql.column_value(l_dtl_qry_cur_id, 63, x_line_dtls_tbl(l_ind).reference_source_line_id);
2995       dbms_sql.column_value(l_dtl_qry_cur_id, 64, x_line_dtls_tbl(l_ind).install_location_type_code);
2996       dbms_sql.column_value(l_dtl_qry_cur_id, 65, x_line_dtls_tbl(l_ind).install_location_id);
2997       dbms_sql.column_value(l_dtl_qry_cur_id, 66, x_line_dtls_tbl(l_ind).cascade_owner_flag);
2998       dbms_sql.column_value(l_dtl_qry_cur_id, 67, x_line_dtls_tbl(l_ind).parent_instance_id);
2999       dbms_sql.column_value(l_dtl_qry_cur_id, 68, x_line_dtls_tbl(l_ind).assc_txn_line_detail_id);
3000       dbms_sql.column_value(l_dtl_qry_cur_id, 69, x_line_dtls_tbl(l_ind).overriding_csi_txn_id);
3001       dbms_sql.column_value(l_dtl_qry_cur_id, 70, x_line_dtls_tbl(l_ind).instance_status_id);
3002     END LOOP;
3003 
3004     dbms_sql.close_cursor(l_dtl_qry_cur_id);
3005 
3006   EXCEPTION
3007 
3008     WHEN fnd_api.g_exc_error THEN
3009 
3010       IF dbms_sql.is_open(l_dtl_qry_cur_id) THEN
3011         dbms_sql.close_cursor(l_dtl_qry_cur_id);
3012       END IF;
3013 
3014       x_return_status := fnd_api.g_ret_sts_error;
3015 
3016     WHEN others THEN
3017 
3018       IF dbms_sql.is_open(l_dtl_qry_cur_id) THEN
3019         dbms_sql.close_cursor(l_dtl_qry_cur_id);
3020       END IF;
3021 
3022       debug('Error : '|| SQLERRM);
3023       x_return_status := fnd_api.g_ret_sts_unexp_error;
3024 
3025   END get_dtls_dynamic;
3026 
3027   PROCEDURE build_line_dtls_select(
3028     p_txn_line_detail_query_rec     in  csi_t_datastructures_grp.txn_line_detail_query_rec,
3029     x_dtl_select_stmt   OUT NOCOPY varchar2,
3030     x_dtl_where_clause  OUT NOCOPY varchar2,
3031     x_return_status     OUT NOCOPY varchar2)
3032   IS
3033 
3034    l_select_stmt  varchar2(32767);
3035    l_where_clause varchar2(32767);
3036 
3037   BEGIN
3038 
3039     api_log('build_line_dtls_select');
3040 
3041     x_return_status := fnd_api.g_ret_sts_success;
3042 
3043     l_select_stmt :=
3044      'select txn_line_detail_id, transaction_line_id, sub_type_id, instance_exists_flag, '||
3045      '  source_transaction_flag, instance_id, changed_instance_id, '||
3046      '  csi_system_id, inventory_item_id, inventory_revision, '||
3047      '  inv_organization_id, item_condition_id, instance_type_code, '||
3048      '  quantity, unit_of_measure, qty_remaining, serial_number, '||
3049      '  mfg_serial_number_flag, lot_number, location_type_code, location_id, '||
3050      '  installation_date, in_service_date, external_reference, '||
3051      '  transaction_system_id, sellable_flag, version_label, return_by_date, '||
3052      '  active_start_date, active_end_date, preserve_detail_flag, reference_source_id, '||
3053      '  reference_source_date, csi_transaction_id, processing_status, error_code, '||
3054      '  error_explanation, context, attribute1, attribute2, attribute3, attribute4, '||
3055      '  attribute5, attribute6, attribute7, attribute8, attribute9, attribute10, '||
3056      '  attribute11, attribute12, attribute13, attribute14, attribute15, '||
3057      '  object_version_number, source_txn_line_detail_id, inv_mtl_transaction_id  '||
3058      '  , config_inst_hdr_id, config_inst_rev_num , config_inst_item_id , target_commitment_date, '||
3059      '  instance_description , config_inst_baseline_rev_num , reference_source_line_id, '||
3060      '  install_location_type_code,install_location_id, '|| '  cascade_owner_flag,   '||
3061      '  parent_instance_id, assc_txn_line_detail_id, '||
3062      '  overriding_csi_txn_id, instance_status_id '||
3063      ' from  csi_t_txn_line_details ';
3064 
3065     l_where_clause := null;
3066 
3067     IF nvl(p_txn_line_detail_query_rec.transaction_line_id, fnd_api.g_miss_num) <>
3068        fnd_api.g_miss_num
3069     THEN
3070       l_where_clause := l_where_clause||' transaction_line_id = :dtl_transaction_line_id and ';
3071     END IF;
3072 
3073     IF nvl(p_txn_line_detail_query_rec.txn_line_detail_id, fnd_api.g_miss_num) <>
3074        fnd_api.g_miss_num
3075     THEN
3076       l_where_clause := l_where_clause||' txn_line_detail_id = :txn_line_detail_id and ';
3077     END IF;
3078 
3079     IF nvl(p_txn_line_detail_query_rec.sub_type_id,fnd_api.g_miss_num) <>
3080        fnd_api.g_miss_num
3081     THEN
3082       l_where_clause := l_where_clause||' sub_type_id = :sub_type_id and ';
3083     END IF;
3084 
3085     IF nvl(p_txn_line_detail_query_rec.instance_exists_flag, Fnd_api.g_miss_char) <>
3086        fnd_api.g_miss_char
3087     THEN
3088       l_where_clause := l_where_clause||' instance_exists_flag = :instance_exists_flag and ';
3089     END IF;
3090 
3091     IF nvl(p_txn_line_detail_query_rec.instance_id, fnd_api.g_miss_num) <>
3092        fnd_api.g_miss_num
3093     THEN
3094       l_where_clause := l_where_clause||' instance_id = :instance_id and ';
3095     END IF;
3096 
3097     IF nvl(p_txn_line_detail_query_rec.csi_transaction_id, fnd_api.g_miss_num) <>
3098        fnd_api.g_miss_num
3099     THEN
3100       l_where_clause := l_where_clause||' csi_transaction_id = :csi_transaction_id and ';
3101     END IF;
3102 
3103     IF nvl(p_txn_line_detail_query_rec.source_transaction_flag, fnd_api.g_miss_char) <>
3104        fnd_api.g_miss_char
3105     THEN
3106       l_where_clause := l_where_clause||' source_transaction_flag = :source_transaction_flag and ';
3107     END IF;
3108 
3109     IF nvl(p_txn_line_detail_query_rec.csi_system_id, fnd_api.g_miss_num) <>
3110        fnd_api.g_miss_num
3111     THEN
3112       l_where_clause := l_where_clause||' csi_system_id = :csi_system_id and ';
3113     END IF;
3114 
3115     IF nvl(p_txn_line_detail_query_rec.transaction_system_id, fnd_api.g_miss_num) <>
3116        fnd_api.g_miss_num
3117     THEN
3118       l_where_clause := l_where_clause||' transaction_system_id = :transaction_system_id and ';
3119     END IF;
3120 
3121     IF nvl(p_txn_line_detail_query_rec.inventory_item_id, fnd_api.g_miss_num) <>
3122        fnd_api.g_miss_num
3123     THEN
3124       l_where_clause := l_where_clause||' inventory_item_id = :inventory_item_id and ';
3125     END IF;
3126 
3127     IF nvl(p_txn_line_detail_query_rec.inventory_revision, fnd_api.g_miss_char) <>
3128        fnd_api.g_miss_char
3129     THEN
3130       l_where_clause := l_where_clause||' inventory_revision = :inventory_revision and ';
3131     END IF;
3132 
3133     IF nvl(p_txn_line_detail_query_rec.inv_organization_id, fnd_api.g_miss_num) <>
3134        fnd_api.g_miss_num
3135     THEN
3136       l_where_clause := l_where_clause||' inv_organization_id = :inv_organization_id and ';
3137     END IF;
3138 
3139     IF nvl(p_txn_line_detail_query_rec.serial_number, fnd_api.g_miss_char) <>
3140        fnd_api.g_miss_char
3141     THEN
3142       l_where_clause := l_where_clause||' serial_number = :serial_number and ';
3143     END IF;
3144 
3145     IF nvl(p_txn_line_detail_query_rec.mfg_serial_number_flag, fnd_api.g_miss_char) <>
3146        fnd_api.g_miss_char
3147     THEN
3148       l_where_clause := l_where_clause||' mfg_serial_number_flag = :mfg_serial_number_flag and ';
3149     END IF;
3150 
3151     IF nvl(p_txn_line_detail_query_rec.lot_number, fnd_api.g_miss_char) <>
3152        fnd_api.g_miss_char
3153     THEN
3154       l_where_clause := l_where_clause||' lot_number = :lot_number and ';
3155     END IF;
3156 
3157     IF nvl(p_txn_line_detail_query_rec.location_type_code, fnd_api.g_miss_char) <>
3158        fnd_api.g_miss_char
3159     THEN
3160       l_where_clause := l_where_clause||' location_type_code = :location_type_code and ';
3161     END IF;
3162 
3163     IF nvl(p_txn_line_detail_query_rec.external_reference, fnd_api.g_miss_char) <>
3164        fnd_api.g_miss_char
3165     THEN
3166       l_where_clause := l_where_clause||' external_reference = :external_reference and ';
3167     END IF;
3168 
3169     IF nvl(p_txn_line_detail_query_rec.processing_status, fnd_api.g_miss_char) <>
3170        fnd_api.g_miss_char
3171     THEN
3172       IF p_txn_line_detail_query_rec.processing_status = 'UNPROCESSED' THEN
3173 
3174         l_where_clause := l_where_clause||
3175                  ' nvl(processing_status,''SUBMIT'') <> ''PROCESSED'' and ';
3176 
3177       ELSE
3178         l_where_clause := l_where_clause||' processing_status = '''||
3179                 nvl(p_txn_line_detail_query_rec.processing_status,'SUBMIT')||''' and ';
3180       END IF;
3181     END IF;
3182 
3183     IF nvl(p_txn_line_detail_query_rec.error_code, fnd_api.g_miss_char) <>
3184        fnd_api.g_miss_char
3185     THEN
3186       l_where_clause := l_where_clause||' error_code = :dtl_error_code and ';
3187     END IF;
3188 
3189     IF nvl(p_txn_line_detail_query_rec.error_explanation, fnd_api.g_miss_char) <>
3190        fnd_api.g_miss_char
3191     THEN
3192       l_where_clause := l_where_clause||' error_explanation = :dtl_error_explanation and ';
3193     END IF;
3194 
3195     IF nvl(p_txn_line_detail_query_rec.return_by_date, fnd_api.g_miss_date) <>
3196        fnd_api.g_miss_date
3197     THEN
3198       l_where_clause := l_where_clause||' return_by_date = '''||
3199                            p_txn_line_detail_query_rec.return_by_date||''' and ';
3200     END IF;
3201 
3202     l_where_clause := substr(l_where_clause,1,(instr(l_where_clause, ' and', -1)-1));
3203 
3204     x_dtl_select_stmt  := l_select_stmt;
3205     x_dtl_where_clause := l_where_clause;
3206 
3207     debug(l_where_clause);
3208 
3209   END build_line_dtls_select;
3210 
3211   PROCEDURE build_txn_lines_select(
3212     p_txn_line_query_rec IN  csi_t_datastructures_grp.txn_line_query_rec,
3213     x_lines_select_stmt  OUT NOCOPY varchar2,
3214     x_lines_restrict     OUT NOCOPY varchar2,
3215     x_return_status      OUT NOCOPY varchar2)
3216   IS
3217 
3218    l_select_stmt  varchar2(32767);
3219    l_where_clause varchar2(32767);
3220 
3221   BEGIN
3222 
3223     x_return_status := fnd_api.g_ret_sts_success;
3224 
3225     api_log('build_txn_lines_select');
3226 
3227     x_lines_restrict := 'N';
3228 
3229     l_select_stmt :=
3230      ' transaction_line_id in (select transaction_line_id from  csi_t_transaction_lines ';
3231 
3232     l_where_clause := null;
3233 
3234     IF nvl(p_txn_line_query_rec.transaction_line_id,fnd_api.g_miss_num) <>
3235        fnd_api.g_miss_num THEN
3236       l_where_clause := l_where_clause||' transaction_line_id = :transaction_line_id and ';
3237     END IF;
3238 
3239     IF nvl(p_txn_line_query_rec.source_txn_header_id,fnd_api.g_miss_num) <>
3240        fnd_api.g_miss_num THEN
3241       l_where_clause := l_where_clause||' source_txn_header_id = :source_txn_header_id and ';
3242     END IF;
3243 
3244 
3245     IF nvl(p_txn_line_query_rec.source_transaction_id,fnd_api.g_miss_num) <>
3246        fnd_api.g_miss_num THEN
3247       l_where_clause := l_where_clause||' source_transaction_id = :source_transaction_id and ';
3248     END IF;
3249 
3250     IF nvl(p_txn_line_query_rec.source_transaction_table,fnd_api.g_miss_char) <>
3251        fnd_api.g_miss_char THEN
3252       l_where_clause := l_where_clause||' source_transaction_table = :source_transaction_table and ';
3253     END IF;
3254 
3255     IF nvl(p_txn_line_query_rec.error_code,fnd_api.g_miss_char) <>
3256        fnd_api.g_miss_char THEN
3257       l_where_clause := l_where_clause||' error_code = :error_code and ';
3258     END IF;
3259 
3260     IF nvl(p_txn_line_query_rec.processing_status,fnd_api.g_miss_char) <>
3261        fnd_api.g_miss_char THEN
3262       l_where_clause := l_where_clause||' processing_status = :processing_status and ';
3263     END IF;
3264 
3265     IF nvl(p_txn_line_query_rec.config_session_hdr_id,fnd_api.g_miss_num) <>
3266        fnd_api.g_miss_num THEN
3267       l_where_clause := l_where_clause||' config_session_hdr_id = :config_session_hdr_id and ';
3268     END IF;
3269 
3270     IF nvl(p_txn_line_query_rec.config_session_rev_num,fnd_api.g_miss_num) <>
3271        fnd_api.g_miss_num THEN
3272       l_where_clause := l_where_clause||' config_session_rev_num = :config_session_rev_num and ';
3273     END IF;
3274 
3275     IF nvl(p_txn_line_query_rec.config_session_item_id,fnd_api.g_miss_num) <>
3276        fnd_api.g_miss_num THEN
3277       l_where_clause := l_where_clause||' config_session_item_id = :config_session_item_id and ';
3278     END IF;
3279 
3280     IF l_where_clause is not null then
3281       x_lines_restrict := 'Y';
3282 
3283     END IF;
3284 
3285     l_where_clause := ' where '||substr(l_where_clause,1,(instr(l_where_clause,' and',-1) -1));
3286     debug(l_where_clause);
3287 
3288     l_select_stmt := l_select_stmt||l_where_clause||')';
3289 
3290     x_lines_select_stmt := l_select_stmt;
3291 
3292   END build_txn_lines_select;
3293 
3294 
3295   PROCEDURE get_txn_line_dtls(
3296     p_txn_line_query_rec        IN  csi_t_datastructures_grp.txn_line_query_rec,
3297     p_txn_line_detail_query_rec IN  csi_t_datastructures_grp.txn_line_detail_query_rec,
3298     x_txn_line_dtl_tbl          OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
3299     x_return_status             OUT NOCOPY varchar2)
3300   IS
3301 
3302    l_dtl_select_stmt       varchar2(32767);
3303    l_dtl_where_clause      varchar2(32767);
3304    l_lines_restrict_clause varchar2(32767);
3305    l_lines_restrict        varchar2(1);
3306    l_return_status         varchar2(1) := fnd_api.g_ret_sts_success;
3307 
3308   BEGIN
3309 
3310     x_return_status := fnd_api.g_ret_sts_success;
3311 
3312     api_log('get_txn_line_dtls');
3313 
3314     -- apply txn_line_detail filter first and then the txn_ line_ filter
3315 
3316     build_line_dtls_select(
3317       p_txn_line_detail_query_rec => p_txn_line_detail_query_rec,
3318       x_dtl_select_stmt           => l_dtl_select_stmt,
3319       x_dtl_where_clause          => l_dtl_where_clause,
3320       x_return_status             => l_return_status);
3321 
3322     build_txn_lines_select(
3323       p_txn_line_query_rec => p_txn_line_query_rec,
3324       x_lines_select_stmt  => l_lines_restrict_clause,
3325       x_lines_restrict     => l_lines_restrict,
3326       x_return_status      => l_return_status);
3327 
3328 
3329     IF l_dtl_where_clause is not null then
3330 
3331       l_dtl_select_stmt := l_dtl_select_stmt||' where '||l_dtl_where_clause;
3332 
3333       IF l_lines_restrict = 'Y' THEN
3334         l_dtl_select_stmt := l_dtl_select_stmt||' and '||l_lines_restrict_clause;
3335       END IF;
3336 
3337     ELSE
3338       IF l_lines_restrict = 'Y' THEN
3339         l_dtl_select_stmt := l_dtl_select_stmt||' where '||l_lines_restrict_clause;
3340       END IF;
3341     END IF;
3342 
3343     get_dtls_dynamic(
3344       p_txn_line_query_rec        => p_txn_line_query_rec,
3345       p_txn_line_detail_query_rec => p_txn_line_detail_query_rec,
3346       p_dtl_select_stmt           => l_dtl_select_stmt,
3347       x_line_dtls_tbl             => x_txn_line_dtl_tbl,
3348       x_return_status             => l_return_status);
3349 
3350     IF l_return_status <> fnd_api.g_ret_sts_success THEN
3351       raise fnd_api.g_exc_error;
3352     END IF;
3353 
3354     debug('get_txn_line_dtls successful.');
3355 
3356   EXCEPTION
3357     WHEN fnd_api.g_exc_error THEN
3358       x_return_status := fnd_api.g_ret_sts_error;
3359   END get_txn_line_dtls;
3360 
3361   PROCEDURE delete_txn_line_dtls(
3362     p_api_version             IN  NUMBER,
3363     p_commit                  IN  VARCHAR2 := fnd_api.g_false,
3364     p_init_msg_list           IN  VARCHAR2 := fnd_api.g_false,
3365     p_validation_level        IN  NUMBER   := fnd_api.g_valid_level_full,
3366     p_txn_line_detail_ids_tbl IN  csi_t_datastructures_grp.txn_line_detail_ids_tbl,
3367     x_return_status           OUT NOCOPY VARCHAR2,
3368     x_msg_count               OUT NOCOPY NUMBER,
3369     x_msg_data                OUT NOCOPY VARCHAR2)
3370   IS
3371 
3372     l_api_name       CONSTANT VARCHAR2(30)  := 'delete_txn_line_dtls';
3373     l_api_version    CONSTANT NUMBER        := 1.0;
3374     l_debug_level             NUMBER;
3375 
3376 
3377   BEGIN
3378 
3379     -- Standard Start of API savepoint
3380     SAVEPOINT delete_txn_line_dtls;
3381 
3382     -- Initialize message list if p_init_msg_list is set to TRUE.
3383     IF fnd_api.to_Boolean( p_init_msg_list ) THEN
3384       fnd_msg_pub.initialize;
3385     END IF;
3386 
3387     --  Initialize API return status to success
3388     x_return_status := fnd_api.G_RET_STS_SUCCESS;
3389 
3390     -- Standard call to check for call compatibility.
3391     IF NOT
3392 
3393        fnd_api.Compatible_API_Call (
3394          p_current_version_number => l_api_version,
3395          p_caller_version_number  => p_api_version,
3396          p_api_name               => l_api_name,
3397          p_pkg_name               => G_PKG_NAME) THEN
3398 
3399       RAISE fnd_api.g_exc_unexpected_error;
3400 
3401     END IF;
3402 
3403     -- debug messages
3404     l_debug_level := csi_t_gen_utility_pvt.g_debug_level;
3405 
3406     csi_t_gen_utility_pvt.dump_api_info(
3407       p_pkg_name => g_pkg_name,
3408       p_api_name => l_api_name);
3409 
3410     debug(p_api_version||'-'||p_commit||'-'||p_validation_level||'-'||p_init_msg_list);
3411 
3412     -- Main API code
3413     IF p_txn_line_detail_ids_tbl.COUNT > 0 THEN
3414       FOR l_ind in p_txn_line_detail_ids_tbl.FIRST..
3415                    p_txn_line_detail_ids_tbl.LAST
3416       LOOP
3417 
3418         csi_t_txn_line_details_pkg.delete_row(
3419           p_txn_line_detail_id  => p_txn_line_detail_ids_tbl(l_ind).
3420                                      txn_line_detail_id);
3421 
3422       END LOOP;
3423 
3424     END IF;
3425 
3426 
3427     -- Standard check of p_commit.
3428     IF fnd_api.To_Boolean( p_commit ) THEN
3429       COMMIT WORK;
3430     END IF;
3431 
3432     -- Standard call to get message count and if count is  get message info.
3433     fnd_msg_pub.Count_And_Get(
3434       p_count  =>  x_msg_count,
3435       p_data   =>  x_msg_data);
3436 
3437   EXCEPTION
3438     WHEN fnd_api.G_EXC_ERROR THEN
3439 
3440       ROLLBACK TO delete_txn_line_dtls;
3441       x_return_status := fnd_api.g_ret_sts_error ;
3442       fnd_msg_pub.Count_And_Get (
3443         p_count  => x_msg_count,
3444         p_data   => x_msg_data);
3445 
3446     WHEN fnd_api.g_exc_unexpected_error THEN
3447 
3448       ROLLBACK TO delete_txn_line_dtls;
3449       x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR ;
3450 
3451       fnd_msg_pub.Count_And_Get(
3452         p_count  => x_msg_count,
3453         p_data   => x_msg_data);
3454 
3455     WHEN others THEN
3456 
3457       rollback to delete_txn_line_dtls;
3458       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3459 
3460       IF fnd_msg_pub.check_msg_level(
3461            p_message_level => fnd_msg_pub.g_msg_lvl_unexp_error) THEN
3462 
3463         fnd_msg_pub.add_exc_msg(
3464           p_pkg_name       => g_pkg_name,
3465           p_procedure_name => l_api_name);
3466 
3467       END IF;
3468 
3469       fnd_msg_pub.Count_And_Get(
3470         p_count  => x_msg_count,
3471         p_data   => x_msg_data);
3472 
3473   END delete_txn_line_dtls;
3474 
3475   PROCEDURE update_txn_line(
3476     p_txn_line_rec     IN  csi_t_datastructures_grp.txn_line_rec,
3477     x_return_status    OUT NOCOPY varchar2)
3478   IS
3479 
3480 
3481     CURSOR txn_line_cur (p_txn_line_id in number)is
3482       SELECT *
3483       FROM   csi_t_transaction_lines
3484       WHERE  transaction_line_id = p_txn_line_id;
3485 
3486     l_txn_line_rec  csi_t_datastructures_grp.txn_line_rec;
3487     l_transaction_line_rec  csi_t_datastructures_grp.txn_line_rec;
3488     l_return_status varchar2(1)  := fnd_api.g_ret_sts_success;
3489     l_api_name      varchar2(30) := 'update_txn_line';
3490     l_debug_level   number;
3491 
3492   BEGIN
3493 
3494     x_return_status := fnd_api.g_ret_sts_success;
3495 
3496     l_debug_level := csi_t_gen_utility_pvt.g_debug_level;
3497 
3498     csi_t_gen_utility_pvt.dump_api_info(
3499       p_api_name => l_api_name,
3500       p_pkg_name => g_pkg_name);
3501 
3502     IF l_debug_level > 1 then
3503       csi_t_gen_utility_pvt.dump_txn_line_rec(
3504         p_txn_line_rec => p_txn_line_rec);
3505     END IF;
3506 
3507     -- adding this for transparency of transaction line id to callers.
3508 
3509     l_txn_line_rec.transaction_line_id := p_txn_line_rec.transaction_line_id;
3510 
3511     IF nvl(l_txn_line_rec.transaction_line_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
3512 
3513       IF nvl(p_txn_line_rec.source_transaction_table, fnd_api.g_miss_char) = fnd_api.g_miss_char
3514          OR
3515          nvl(p_txn_line_rec.source_transaction_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
3516 
3517         fnd_message.set_name('CSI','CSI_TXN_SRC_INFO_MISSING');
3518         fnd_message.set_token('SRC_NAME',p_txn_line_rec.source_transaction_table);
3519         fnd_message.set_token('SRC_ID',p_txn_line_rec.source_transaction_id);
3520         fnd_msg_pub.add;
3521         RAISE fnd_api.g_exc_error;
3522 
3523       ELSE
3524 
3525         BEGIN
3526 
3527           SELECT transaction_line_id
3528           INTO   l_txn_line_rec.transaction_line_id
3529           FROM   csi_t_transaction_lines
3530           WHERE  source_transaction_table = p_txn_line_rec.source_transaction_table
3531           AND    source_transaction_id    = p_txn_line_rec.source_transaction_id;
3532 
3533         EXCEPTION
3534           WHEN no_data_found THEN
3535 
3536             fnd_message.set_name('CSI','CSI_TXN_SOURCE_ID_INVALID');
3537             fnd_message.set_token('SRC_LINE_ID',p_txn_line_rec.source_transaction_id);
3538             fnd_message.set_token('SRC_NAME',p_txn_line_rec.source_transaction_table);
3539             fnd_msg_pub.add;
3540             RAISE fnd_api.g_exc_error;
3541         END;
3542 
3543       END IF;
3544 
3545     END IF;
3546 
3547     csi_t_vldn_routines_pvt.check_reqd_param(
3548       p_value      => l_txn_line_rec.transaction_line_id,
3549       p_param_name => 'p_txn_line_rec.transaction_line_id',
3550       p_api_name   => 'update_txn_line_dtls');
3551 
3552     -- validate txn_line_id
3553     csi_t_vldn_routines_pvt.validate_transaction_line_id(
3554       p_transaction_line_id    => l_txn_line_rec.transaction_line_id,
3555       x_transaction_line_rec   => l_transaction_line_rec, -- changed for Mass Update R12
3556       x_return_status          => l_return_status);
3557 
3558     IF l_return_status <> fnd_api.g_ret_sts_success THEN
3559       fnd_message.set_name('CSI','CSI_TXN_LINE_ID_INVALID');
3560       fnd_message.set_token('TXN_LINE_ID', l_txn_line_rec.transaction_line_id);
3561       fnd_msg_pub.add;
3562       raise fnd_api.g_exc_error;
3563     END IF;
3564 
3565     IF ( nvl(p_txn_line_rec.config_session_hdr_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num
3566       OR nvl(p_txn_line_rec.config_session_rev_num, fnd_api.g_miss_num) <> fnd_api.g_miss_num
3567       OR nvl(p_txn_line_rec.config_session_item_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num )
3568     THEN
3569 
3570        csi_t_gen_utility_pvt.add('Validating against CZ view ');
3571 
3572        csi_t_vldn_routines_pvt.check_cz_session_keys
3573                  (p_config_session_hdr_id => p_txn_line_rec.config_session_hdr_id,
3574                  p_config_session_rev_num => p_txn_line_rec.config_session_rev_num,
3575                  p_config_session_item_id => p_txn_line_rec.config_session_item_id,
3576                  x_return_status => l_return_status);
3577 
3578        IF l_return_status <> fnd_api.g_ret_sts_success
3579        THEN
3580          RAISE FND_API.g_exc_error;
3581        END IF;
3582 
3583     END IF;
3584 
3585     FOR l_cur_rec in txn_line_cur (l_txn_line_rec.transaction_line_id)
3586     LOOP
3587 
3588       l_txn_line_rec.transaction_line_id      := l_cur_rec.transaction_line_id;
3589 
3590       l_txn_line_rec.source_transaction_type_id := l_cur_rec.source_transaction_type_id;
3591       l_txn_line_rec.source_transaction_table := l_cur_rec.source_transaction_table;
3592       l_txn_line_rec.source_txn_header_id     := l_cur_rec.source_txn_header_id;
3593       l_txn_line_rec.source_transaction_id    := l_cur_rec.source_transaction_id;
3594       l_txn_line_rec.config_session_hdr_id    := l_cur_rec.config_session_hdr_id;
3595       l_txn_line_rec.config_session_rev_num    := l_cur_rec.config_session_rev_num;
3596       l_txn_line_rec.config_session_item_id    := l_cur_rec.config_session_item_id;
3597       l_txn_line_rec.config_valid_status      := l_cur_rec.config_valid_status;
3598       l_txn_line_rec.source_transaction_status      := l_cur_rec.source_transaction_status;
3599       l_txn_line_rec.error_code               := p_txn_line_rec.error_code;
3600       l_txn_line_rec.error_explanation        := p_txn_line_rec.error_explanation;
3601       l_txn_line_rec.processing_status        := p_txn_line_rec.processing_status;
3602       l_txn_line_rec.context                  := p_txn_line_rec.context;
3603       l_txn_line_rec.attribute1               := p_txn_line_rec.attribute1;
3604       l_txn_line_rec.attribute2               := p_txn_line_rec.attribute2;
3605       l_txn_line_rec.attribute3               := p_txn_line_rec.attribute3;
3606       l_txn_line_rec.attribute4               := p_txn_line_rec.attribute4;
3607       l_txn_line_rec.attribute5               := p_txn_line_rec.attribute5;
3608       l_txn_line_rec.attribute6               := p_txn_line_rec.attribute6;
3609       l_txn_line_rec.attribute7               := p_txn_line_rec.attribute7;
3610       l_txn_line_rec.attribute8               := p_txn_line_rec.attribute8;
3611       l_txn_line_rec.attribute9               := p_txn_line_rec.attribute9;
3612       l_txn_line_rec.attribute10              := p_txn_line_rec.attribute10;
3613       l_txn_line_rec.attribute11              := p_txn_line_rec.attribute11;
3614       l_txn_line_rec.attribute12              := p_txn_line_rec.attribute12;
3615       l_txn_line_rec.attribute13              := p_txn_line_rec.attribute13;
3616       l_txn_line_rec.attribute14              := p_txn_line_rec.attribute14;
3617       l_txn_line_rec.attribute15              := p_txn_line_rec.attribute15;
3618       l_txn_line_rec.object_version_number    := p_txn_line_rec.object_version_number;
3619 
3620       csi_t_gen_utility_pvt.dump_api_info(
3621         p_api_name => 'update_row',
3622         p_pkg_name => 'csi_t_transaction_lines_pkg');
3623 
3624       csi_t_transaction_lines_pkg.update_row(
3625         p_transaction_line_id      => l_txn_line_rec.transaction_line_id,
3626         p_source_transaction_type_id => l_txn_line_rec.source_transaction_type_id,
3627         p_source_transaction_table => l_txn_line_rec.source_transaction_table,
3628         p_source_txn_header_id     => l_txn_line_rec.source_txn_header_id,
3629         p_source_transaction_id    => l_txn_line_rec.source_transaction_id,
3630         p_error_code               => l_txn_line_rec.error_code,
3631         p_error_explanation        => l_txn_line_rec.error_explanation,
3632         -- Added for CZ Integration (Begin)
3633         p_config_session_hdr_id      => l_txn_line_rec.config_session_hdr_id ,
3634         p_config_session_rev_num     => l_txn_line_rec.config_session_rev_num ,
3635         p_config_session_item_id    => l_txn_line_rec.config_session_item_id ,
3636         p_config_valid_status    => l_txn_line_rec.config_valid_status ,
3637         p_source_transaction_status    => l_txn_line_rec.source_transaction_status ,
3638         -- Added for CZ Integration (End)
3639         p_processing_status        => l_txn_line_rec.processing_status,
3640         p_attribute1               => l_txn_line_rec.attribute1,
3641         p_attribute2               => l_txn_line_rec.attribute2,
3642         p_attribute3               => l_txn_line_rec.attribute3,
3643         p_attribute4               => l_txn_line_rec.attribute4,
3644         p_attribute5               => l_txn_line_rec.attribute5,
3645         p_attribute6               => l_txn_line_rec.attribute6,
3646         p_attribute7               => l_txn_line_rec.attribute7,
3647         p_attribute8               => l_txn_line_rec.attribute8,
3648         p_attribute9               => l_txn_line_rec.attribute9,
3649         p_attribute10              => l_txn_line_rec.attribute10,
3650         p_attribute11              => l_txn_line_rec.attribute11,
3651         p_attribute12              => l_txn_line_rec.attribute12,
3652         p_attribute13              => l_txn_line_rec.attribute13,
3653         p_attribute14              => l_txn_line_rec.attribute14,
3654         p_attribute15              => l_txn_line_rec.attribute15,
3655         p_created_by               => l_cur_rec.created_by,
3656         p_creation_date            => l_cur_rec.creation_date,
3657         p_last_updated_by          => fnd_global.user_id,
3658         p_last_update_date         => sysdate,
3659         p_last_update_login        => fnd_global.login_id,
3660         p_object_version_number    => l_txn_line_rec.object_version_number,
3661         p_context                  => l_txn_line_rec.context);
3662 
3663     END LOOP;
3664 
3665   EXCEPTION
3666     WHEN fnd_api.g_exc_error THEN
3667       x_return_status := fnd_api.g_ret_sts_error;
3668   END update_txn_line;
3669 
3670 END csi_t_txn_line_dtls_pvt;