DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSI_UTL_PKG

Source


1 PACKAGE BODY csi_utl_pkg as
2 /* $Header: csiutlb.pls 120.27.12020000.8 2012/11/09 07:20:52 mvaradam ship $ */
3 
4   /*----------------------------------------------------------*/
5   /* Package Name  : csi_utl_pkg                              */
6   /* Description   : used by the order shipment interface     */
7   /*                 to do the validations                    */
8   /*----------------------------------------------------------*/
9 
10   G_PKG_NAME  CONSTANT VARCHAR2(30) := 'csi_utl_pkg';
11   G_FILE_NAME CONSTANT VARCHAR2(12) := 'csiutlb.pls';
12 
13   PROCEDURE debug(
14     p_message     IN VARCHAR2)
15   IS
16   BEGIN
17     csi_t_gen_utility_pvt.add(p_message);
18   END debug;
19 
20   PROCEDURE api_log(
21     p_api_name    IN VARCHAR2)
22   IS
23   BEGIN
24 
25     csi_order_ship_pub.g_api_name := 'csi_utl_pkg.'||p_api_name;
26 
27     csi_t_gen_utility_pvt.dump_api_info(
28       p_pkg_name => 'csi_utl_pkg',
29       p_api_name => p_api_name);
30 
31   END api_log;
32 
33   PROCEDURE dump_txn_ps_tbl(
34     p_txn_ps_tbl in txn_ps_tbl)
35   IS
36     l_ps_line varchar2(255);
37   BEGIN
38 
39     csi_t_gen_utility_pvt.add('TxnLnId     QRatio      RemQty      Status');
40     csi_t_gen_utility_pvt.add('----------  ----------  ----------  -------');
41 
42     IF p_txn_ps_tbl.COUNT > 0 THEN
43       FOR l_ind in p_txn_ps_tbl.FIRST .. p_txn_ps_tbl.LAST
44       LOOP
45         l_ps_line := rpad(to_char(p_txn_ps_tbl(l_ind).txn_line_detail_id), 12, ' ')||
46                      rpad(to_char(p_txn_ps_tbl(l_ind).quantity_ratio), 12, ' ')||
47                      rpad(to_char(p_txn_ps_tbl(l_ind).quantity_remaining), 12, ' ')||
48                      rpad(p_txn_ps_tbl(l_ind).processed_flag, 9, ' ');
49         csi_t_gen_utility_pvt.add(l_ps_line);
50 
51       END LOOP;
52     END IF;
53 
54   END dump_txn_ps_tbl;
55 
56   FUNCTION get_curr_party(
57     p_instance_id   IN NUMBER,
58     p_rel_type_code IN VARCHAR2)
59   RETURN NUMBER
60   IS
61     l_inst_pty_id NUMBER;
62   BEGIN
63 
64     api_log('get_curr_party');
65 
66     SELECT party_id
67     INTO   l_inst_pty_id
68     FROM   csi_i_parties
69     WHERE  instance_id = p_instance_id
70     AND    relationship_type_code = p_rel_type_code
71     AND    ((active_end_date is null ) OR (active_end_date > sysdate));
72 
73     RETURN l_inst_pty_id;
74 
75   EXCEPTION
76     WHEN no_data_found THEN
77       fnd_message.set_name('CSI','CSI_INT_INV_INST_PARTY_ID');
78       fnd_message.set_token('INSTANCE_ID',p_instance_id);
79       fnd_message.set_token('RELATIONSHIP_TYPE_CODE',p_rel_type_code );
80       fnd_msg_pub.add;
81       l_inst_pty_id := -1;
82       RETURN l_inst_pty_id;
83     WHEN others THEN
84       fnd_message.set_name('CSI','CSI_INT_INV_INST_PARTY_ID');
85       fnd_message.set_token('INSTANCE_ID',p_instance_id);
86       fnd_message.set_token('RELATIONSHIP_TYPE_CODE',p_rel_type_code );
87       fnd_msg_pub.add;
88       l_inst_pty_id := -1;
89       RETURN l_inst_pty_id;
90   END get_curr_party;
91 
92   FUNCTION get_org_obj_ver_num(
93     p_instance_ou_id IN NUMBER)
94   RETURN NUMBER
95   IS
96    l_obj_ver_num NUMBER;
97   BEGIN
98 
99     api_log('get_org_obj_ver_num');
100 
101     SELECT object_version_number
102     INTO   l_obj_ver_num
103     FROM   csi_i_org_assignments
104     WHERE  instance_ou_id  = p_instance_ou_id;
105     RETURN l_obj_ver_num;
106   EXCEPTION
107     WHEN no_data_found THEN
108       fnd_message.set_name('CSI','CSI_INT_INV_INST_OU_ID');
109       fnd_message.set_token('INSTANCE_OU_ID',p_instance_ou_id);
110       fnd_msg_pub.add;
111       l_obj_ver_num := -1;
112       RETURN l_obj_ver_num;
113     WHEN others THEN
114       fnd_message.set_name('CSI','CSI_INT_INV_INST_OU_ID');
115       fnd_message.set_token('INSTANCE_OU_ID',p_instance_ou_id);
116       fnd_msg_pub.add;
117       l_obj_ver_num := -1;
118       RETURN l_obj_ver_num;
119   END get_org_obj_ver_num;
120 
121   FUNCTION get_ii_obj_ver_num(
122     p_relationship_id IN NUMBER)
123   RETURN NUMBER
124   IS
125     l_obj_ver_num NUMBER;
126   BEGIN
127 
128     api_log('get_ii_obj_ver_num');
129 
130     SELECT object_version_number
131     INTO   l_obj_ver_num
132     FROM   csi_ii_relationships
133     WHERE  relationship_id  = p_relationship_id
134     AND  ((active_end_date is null ) OR
135           (active_end_date > sysdate));
136 
137     RETURN l_obj_ver_num;
138 
139   EXCEPTION
140     WHEN no_data_found THEN
141       fnd_message.set_name('CSI','CSI_INT_INV_II_REL_ID');
142       fnd_message.set_token('RELATIONSHIP_ID',p_relationship_id);
143       fnd_msg_pub.add;
144       l_obj_ver_num := -1;
145       RETURN l_obj_ver_num;
146     WHEN others THEN
147       fnd_message.set_name('CSI','CSI_INT_INV_II_REL_ID');
148       fnd_message.set_token('RELATIONSHIP_ID',p_relationship_id);
149       fnd_msg_pub.add;
150       l_obj_ver_num := -1;
151       RETURN l_obj_ver_num;
152    END get_ii_obj_ver_num;
153 
154   PROCEDURE get_ext_attribs(
155     p_instance_id        IN  NUMBER,
156     p_attribute_id       IN  NUMBER,
157     x_attribute_value_id OUT NOCOPY NUMBER,
158     x_obj_version_number OUT NOCOPY NUMBER,
159     x_return_status      OUT NOCOPY VARCHAR2)
160   IS
161   BEGIN
162     x_return_status := fnd_api.g_ret_sts_success;
163 
164     api_log('get_ext_attribs');
165 
166     SELECT object_version_number,
167            attribute_value_id
168     INTO   x_obj_version_number,
169            x_attribute_value_id
170     FROM   csi_iea_values
171     WHERE  instance_id = p_instance_id
172     AND    attribute_id = p_attribute_id
173     AND   ((active_end_date is null ) OR
174            (active_end_date > sysdate));
175 
176   EXCEPTION
177     WHEN no_data_found THEN
178       fnd_message.set_name('CSI','CSI_INT_INV_EXT_ATTR_ID');
179       fnd_message.set_token('INSTANCE_ID',p_instance_id);
180       fnd_message.set_token('ATTRIBUTE_ID',p_attribute_id );
181       fnd_msg_pub.add;
182       x_return_status := fnd_api.g_ret_sts_error;
183     WHEN too_many_rows THEN
184       fnd_message.set_name('CSI','CSI_INT_MANY_ATTR_FOUND');
185       fnd_message.set_token('INSTANCE_ID',p_instance_id);
186       fnd_message.set_token('ATTRIBUTE_ID',p_attribute_id );
187       fnd_msg_pub.add;
188       x_return_status := fnd_api.g_ret_sts_error;
189   END get_ext_attribs;
190 
191   PROCEDURE get_org_assign(
192     p_instance_id        IN  NUMBER,
193     p_operating_unit_id  IN  NUMBER,
194     p_rel_type_code      IN  VARCHAR2,
195     x_instance_ou_id     OUT NOCOPY NUMBER,
196     x_obj_version_number OUT NOCOPY NUMBER,
197     x_return_status      OUT NOCOPY VARCHAR2)
198   IS
199   BEGIN
200     x_return_status := fnd_api.g_ret_sts_success;
201     api_log('get_org_assign');
202 
203     SELECT object_version_number,
204            instance_ou_id
205     INTO   x_obj_version_number,
206            x_instance_ou_id
207     FROM   csi_i_org_assignments
208     WHERE  instance_id = p_instance_id
209     AND    operating_unit_id = p_operating_unit_id
210     AND    relationship_type_code = p_rel_type_code
211     AND   ((active_end_date is null ) OR
212            (active_end_date > sysdate));
213   EXCEPTION
214     WHEN no_data_found THEN
215       fnd_message.set_name('CSI','CSI_INT_INV_OU_ID');
216       fnd_message.set_token('INSTANCE_ID',p_instance_id);
217       fnd_message.set_token('OPERATING_UNIT_ID',p_operating_unit_id);
218       fnd_message.set_token('RELATIONSHIP_TYPE_CODE',p_rel_type_code);
219       fnd_msg_pub.add;
220       x_return_status := fnd_api.g_ret_sts_error;
221     WHEN too_many_rows THEN
222       fnd_message.set_name('CSI','CSI_INT_MANY_OU_FOUND');
223       fnd_message.set_token('INSTANCE_PARTY_ID',p_instance_id);
224       fnd_message.set_token('OPERATING_UNIT_ID',p_operating_unit_id);
225       fnd_message.set_token('RELATIONSHIP_TYPE_CODE',p_rel_type_code);
226       fnd_msg_pub.add;
227       x_return_status := fnd_api.g_ret_sts_error;
228   END get_org_assign;
229 
230   PROCEDURE get_party_account(
231     p_instance_pty_id    IN  NUMBER ,
232     p_rel_type_code      IN  VARCHAR2,
233     x_ip_account_id      OUT NOCOPY NUMBER,
234     x_obj_version_number OUT NOCOPY NUMBER,
235     x_return_status      OUT NOCOPY VARCHAR2)
236   IS
237   BEGIN
238 
239     x_return_status := fnd_api.g_ret_sts_success;
240     api_log('get_party_account');
241 
242     SELECT object_version_number,
243            ip_account_id
244     INTO   x_obj_version_number,
245            x_ip_account_id
246     FROM   csi_ip_accounts
247     WHERE  instance_party_id = p_instance_pty_id
248     AND    relationship_type_code = p_rel_type_code
249     AND   ((active_end_date is null ) OR
250            (active_end_date > sysdate));
251 
252   EXCEPTION
253     WHEN no_data_found THEN
254       fnd_message.set_name('CSI','CSI_INT_INV_ACCT_ID');
255       fnd_message.set_token('INSTANCE_PARTY_ID',p_instance_pty_id);
256       fnd_message.set_token('RELATIONSHIP_TYPE_CODE',p_rel_type_code);
257       fnd_msg_pub.add;
258       x_return_status := fnd_api.g_ret_sts_error;
259     WHEN too_many_rows THEN
260       fnd_message.set_name('CSI','CSI_INT_MANY_ACCT_FOUND');
261       fnd_message.set_token('INSTANCE_PARTY_ID',p_instance_pty_id);
262       fnd_message.set_token('RELATIONSHIP_TYPE_CODE',p_rel_type_code);
263       fnd_msg_pub.add;
264       x_return_status := fnd_api.g_ret_sts_error;
265   END get_party_account;
266 
267   PROCEDURE get_instance_party(
268     p_instance_id        IN  NUMBER ,
269     p_rel_type_code      IN  VARCHAR2,
270     x_inst_pty_qty       OUT NOCOPY NUMBER,
271     x_obj_version_number OUT NOCOPY NUMBER,
272     x_return_status      OUT NOCOPY VARCHAR2)
273   IS
274   BEGIN
275 
276     api_log('get_instance_party');
277 
278     x_return_status := fnd_api.g_ret_sts_success;
279 
280     SELECT object_version_number,
281            instance_party_id
282     INTO   x_obj_version_number,
283            x_inst_pty_qty
284     FROM   csi_i_parties
285     WHERE  instance_id = p_instance_id
286     AND    relationship_type_code = p_rel_type_code
287     AND   ((active_end_date is null ) OR
288            (active_end_date > sysdate));
289 
290 
291   EXCEPTION
292     WHEN no_data_found THEN
293       fnd_message.set_name('CSI','CSI_INT_INV_INSTA_PTY_ID');
294       fnd_message.set_token('INSTANCE_ID',p_instance_id);
295       fnd_message.set_token('RELATIONSHIP_TYPE_CODE',p_rel_type_code);
296       fnd_msg_pub.add;
297       x_return_status := fnd_api.g_ret_sts_error;
298     WHEN too_many_rows THEN
299       fnd_message.set_name('CSI','CSI_INT_MANY_INSTA_PTY_FOUND');
300       fnd_message.set_token('INSTANCE_ID',p_instance_id);
301       fnd_message.set_token('RELATIONSHIP_TYPE_CODE',p_rel_type_code);
302       fnd_msg_pub.add;
303       x_return_status := fnd_api.g_ret_sts_error;
304 
305   END get_instance_party;
306 
307   PROCEDURE get_instance(
308     p_instance_id        IN  NUMBER ,
309     x_obj_version_number OUT NOCOPY NUMBER,
310     x_inst_qty           OUT NOCOPY NUMBER,
311     x_return_status      OUT NOCOPY VARCHAR2)
312   IS
313   BEGIN
314 
315     x_return_status := fnd_api.g_ret_sts_success;
316 
317     api_log('get_instance');
318 
319     SELECT object_version_number,
320            quantity
321     INTO   x_obj_version_number,
322            x_inst_qty
323     FROM   csi_item_instances
324     WHERE  instance_id = p_instance_id;
325     -- Commented these predicates as part of fix for Bug 2985193
326     -- Because the get_item_instance is opened for expired instances also.
327     -- AND   ((active_end_date is null ) OR
328     --       (active_end_date > sysdate));
329 
330   EXCEPTION
331     WHEN no_data_found THEN
332       fnd_message.set_name('CSI','CSI_INT_INV_INST_ID');
333       fnd_message.set_token('INSTANCE_ID',p_instance_id);
334       fnd_msg_pub.add;
335       x_return_status := fnd_api.g_ret_sts_error;
336   END get_instance;
337 
338   FUNCTION get_ext_obj_ver_num(
339     p_attrib_value_id IN NUMBER)
340   RETURN NUMBER
341   IS
342     l_obj_ver_num NUMBER;
343   BEGIN
344 
345     api_log('get_ext_obj_ver_num');
346 
347     SELECT object_version_number
348     INTO   l_obj_ver_num
349     FROM   csi_iea_values
350     WHERE  attribute_value_id  = p_attrib_value_id
351     AND   ((active_end_date is null ) OR
352            (active_end_date > sysdate));
353     RETURN l_obj_ver_num;
354   EXCEPTION
355     WHEN no_data_found THEN
356       fnd_message.set_name('CSI','CSI_INT_INV_ATTR_VALUE_ID');
357       fnd_message.set_token('ATTRIBUTE_VALUE_ID',p_attrib_value_id);
358       fnd_msg_pub.add;
359       l_obj_ver_num := -1;
360       RETURN l_obj_ver_num;
361   END get_ext_obj_ver_num;
362 
363   FUNCTION get_pty_obj_ver_num(
364     p_inst_pty_id  IN NUMBER)
365   RETURN NUMBER
366   IS
367     l_obj_ver_num NUMBER;
368   BEGIN
369 
370     api_log('get_pty_obj_ver_num');
371 
372     SELECT object_version_number
373     INTO   l_obj_ver_num
374     FROM   csi_i_parties
375     WHERE  instance_party_id = p_inst_pty_id
376     AND   ((active_end_date is null ) OR
377            (active_end_date > sysdate));
378     RETURN l_obj_ver_num;
379   EXCEPTION
380     WHEN no_data_found THEN
381       fnd_message.set_name('CSI','CSI_INT_INST_PTY_MISSING');
382       fnd_message.set_token('INSTANCE_PARTY_ID',p_inst_pty_id);
383       fnd_msg_pub.add;
384       l_obj_ver_num := -1;
385       RETURN l_obj_ver_num;
386   END get_pty_obj_ver_num;
387 
388   FUNCTION get_acct_obj_ver_num(
389     p_ip_acct_id  IN NUMBER)
390   RETURN NUMBER
391   IS
392     l_obj_ver_num NUMBER;
393   BEGIN
394     api_log('get_acct_obj_ver_num');
395 
396     SELECT object_version_number
397     INTO   l_obj_ver_num
398     FROM   csi_ip_accounts
399     WHERE  ip_account_id  = p_ip_acct_id
400     AND   ((active_end_date is null ) OR
401            (active_end_date > sysdate));
402     RETURN l_obj_ver_num;
403   EXCEPTION
404     WHEN no_data_found THEN
405       fnd_message.set_name('CSI','CSI_INT_INV_IP_ACCT_ID');
406       fnd_message.set_token('IP_ACCOUNT_ID',p_ip_acct_id);
407       fnd_msg_pub.add;
408       l_obj_ver_num := -1;
409       RETURN l_obj_ver_num;
410     WHEN others THEN
411       fnd_message.set_name('CSI','CSI_INT_INV_IP_ACCT_ID');
412       fnd_message.set_token('IP_ACCOUNT_ID',p_ip_acct_id);
413       fnd_msg_pub.add;
414       l_obj_ver_num := -1;
415       RETURN l_obj_ver_num;
416   END get_acct_obj_ver_num;
417 
418   PROCEDURE get_dflt_sub_type_id(
419     p_transaction_type_id  IN         number,
420     x_sub_type_id          OUT NOCOPY number,
421     x_return_status        OUT NOCOPY varchar2)
422   IS
423   BEGIN
424 
425     api_log('get_dflt_sub_type_id');
426 
427     x_return_status := fnd_api.g_ret_sts_success;
428 
429     SELECT sub_type_id
430     INTO   x_sub_type_id
431     FROM   csi_source_ib_types
432     WHERE  transaction_type_id    = p_transaction_type_id
433     AND    nvl(default_flag, 'N') = 'Y';
434 
435     debug('  default sub type id : '||x_sub_type_id);
436 
437   EXCEPTION
438 
439     WHEN no_data_found THEN
440       fnd_message.set_name('CSI', 'CSI_DFLT_SUB_TYPE_MISSING');
441       fnd_message.set_token('TXN_TYPE_ID', p_transaction_type_id);
442       fnd_msg_pub.add;
443       x_return_status := fnd_api.g_ret_sts_error;
444     WHEN too_many_rows THEN
445       fnd_message.set_name('CSI', 'CSI_MANY_DFLT_SUB_TYPES');
446       fnd_message.set_token('TXN_TYPE_ID', p_transaction_type_id);
447       fnd_msg_pub.add;
448       x_return_status := fnd_api.g_ret_sts_error;
449   END get_dflt_sub_type_id;
450 
451   PROCEDURE get_dflt_inst_status_id(
452     x_instance_status_id  OUT NOCOPY number,
453     x_return_status       OUT NOCOPY varchar2)
454   IS
455     l_status_name         varchar2(80);
456   BEGIN
457 
458     x_return_status := fnd_api.g_ret_sts_success;
459 
460     l_status_name := fnd_profile.value('CSI_DEFAULT_INSTANCE_STATUS');
461 
462     SELECT instance_status_id
463     INTO   x_instance_status_id
464     FROM   csi_instance_statuses
465     WHERE  name = l_status_name;
466 
467   EXCEPTION
468     WHEN no_data_found THEN
469       fnd_message.set_name('CSI','CSI_API_INVALID_STATUS_ID');
470       fnd_message.set_token('INSTANCE_STATUS', l_status_name);
471       fnd_msg_pub.add;
472       x_return_status := fnd_api.g_ret_sts_error;
473     WHEN too_many_rows THEN
474       fnd_message.set_name('CSI','CSI_API_INVALID_STATUS_ID');
475       fnd_message.set_token('INSTANCE_STATUS', l_status_name);
476       fnd_msg_pub.add;
477       x_return_status := fnd_api.g_ret_sts_error;
478   END get_dflt_inst_status_id;
479 
480   FUNCTION get_primay_uom(
481     p_inv_item_id IN NUMBER,
482     p_inv_org_id  IN NUMBER)
483   RETURN VARCHAR2
484   IS
485     l_uom_code VARCHAR2(30);
486   BEGIN
487 
488     api_log('get_primay_uom');
489 
490     SELECT primary_uom_code
491     INTO   l_uom_code
492     FROM   mtl_system_items
493     WHERE  inventory_item_id = p_inv_item_id
494     AND    organization_id   = p_inv_org_id;
495 
496     RETURN l_uom_code;
497 
498   EXCEPTION
499     WHEN no_data_found THEN
500       fnd_message.set_name('CSI','CSI_INT_INV_ITEM_ID');
501       fnd_message.set_token('INVENTORY_ITEM_ID',p_inv_item_id);
502       fnd_message.set_token('INV_ORGANIZATION_ID',p_inv_org_id);
503       fnd_msg_pub.add;
504       l_uom_code := '';
505       RETURN l_uom_code;
506   END get_primay_uom;
507 
508   FUNCTION Check_relation_exists(
509     p_txn_ii_rltns_tbl   IN csi_t_datastructures_grp.txn_ii_rltns_tbl,
510     p_txn_line_detail_id IN NUMBER)
511   RETURN BOOLEAN
512   IS
513     l_ret_flag BOOLEAN := FALSE;
514   BEGIN
515 
516     api_log('check_relation_exists');
517 
518     IF p_txn_ii_rltns_tbl.count > 0 THEN
519       FOR i in p_txn_ii_rltns_tbl.first..p_txn_ii_rltns_tbl.last loop
520 
521         debug('Object ID : '||p_txn_ii_rltns_tbl(i).object_id);
522         debug('Subject ID: '||p_txn_ii_rltns_tbl(i).subject_id);
523         debug('Rltns Code: '||p_txn_ii_rltns_tbl(i).relationship_type_code);
524 
525 
526         IF ((p_txn_ii_rltns_tbl(i).subject_type = 'T'
527 		AND p_txn_ii_rltns_tbl(i).subject_id = p_txn_line_detail_id )
528              OR
529             (p_txn_ii_rltns_tbl(i).object_type = 'T'
530 		AND p_txn_ii_rltns_tbl(i).object_id = p_txn_line_detail_id ))
531             AND
532             (p_txn_ii_rltns_tbl(i).relationship_type_code in
533                      ('COMPONENT-OF', 'REPLACED-BY', 'REPLACEMENT-FOR', 'UPGRADED-FROM') )
534         THEN
535           l_ret_flag := TRUE;
536           exit;
537         END IF;
538       END LOOP;
539     END IF;
540 
541     RETURN l_ret_flag;
542 
543   END Check_relation_exists;
544 
545   PROCEDURE Get_pricing_attribs(
546     p_line_id               IN NUMBER,
547     x_pricing_attb_tbl      IN OUT NOCOPY     csi_datastructures_pub.pricing_attribs_tbl,
548     x_return_status         OUT NOCOPY VARCHAR2)
549   IS
550     l_index  NUMBER := 1;
551     CURSOR Pric_attrib IS
552       SELECT PRICING_CONTEXT,
553              PRICING_ATTRIBUTE1,
554              PRICING_ATTRIBUTE2,
555              PRICING_ATTRIBUTE3,
556              PRICING_ATTRIBUTE4,
557              PRICING_ATTRIBUTE5,
558              PRICING_ATTRIBUTE6,
559              PRICING_ATTRIBUTE7,
560              PRICING_ATTRIBUTE8,
561              PRICING_ATTRIBUTE9,
562              PRICING_ATTRIBUTE10,
563              PRICING_ATTRIBUTE11,
564              PRICING_ATTRIBUTE12,
565              PRICING_ATTRIBUTE13,
566              PRICING_ATTRIBUTE14,
567              PRICING_ATTRIBUTE15,
568              PRICING_ATTRIBUTE16,
569              PRICING_ATTRIBUTE17,
570              PRICING_ATTRIBUTE18,
571              PRICING_ATTRIBUTE19,
572              PRICING_ATTRIBUTE20,
573              PRICING_ATTRIBUTE21,
574              PRICING_ATTRIBUTE22,
575              PRICING_ATTRIBUTE23,
576              PRICING_ATTRIBUTE24,
577              PRICING_ATTRIBUTE25,
578              PRICING_ATTRIBUTE26,
579              PRICING_ATTRIBUTE27,
580              PRICING_ATTRIBUTE28,
581              PRICING_ATTRIBUTE29,
582              PRICING_ATTRIBUTE30,
583              PRICING_ATTRIBUTE31,
584              PRICING_ATTRIBUTE32,
585              PRICING_ATTRIBUTE33,
586              PRICING_ATTRIBUTE34,
587              PRICING_ATTRIBUTE35,
588              PRICING_ATTRIBUTE36,
589              PRICING_ATTRIBUTE37,
590              PRICING_ATTRIBUTE38,
591              PRICING_ATTRIBUTE39,
592              PRICING_ATTRIBUTE40,
593              PRICING_ATTRIBUTE41,
594              PRICING_ATTRIBUTE42,
595              PRICING_ATTRIBUTE43,
596              PRICING_ATTRIBUTE44,
597              PRICING_ATTRIBUTE45,
598              PRICING_ATTRIBUTE46,
599              PRICING_ATTRIBUTE47,
600              PRICING_ATTRIBUTE48,
601              PRICING_ATTRIBUTE49,
602              PRICING_ATTRIBUTE50,
603              PRICING_ATTRIBUTE51,
604              PRICING_ATTRIBUTE52,
605              PRICING_ATTRIBUTE53,
606              PRICING_ATTRIBUTE54,
607              PRICING_ATTRIBUTE55,
608              PRICING_ATTRIBUTE56,
609              PRICING_ATTRIBUTE57,
610              PRICING_ATTRIBUTE58,
611              PRICING_ATTRIBUTE59,
612              PRICING_ATTRIBUTE60,
613              PRICING_ATTRIBUTE61,
614              PRICING_ATTRIBUTE62,
615              PRICING_ATTRIBUTE63,
616              PRICING_ATTRIBUTE64,
617              PRICING_ATTRIBUTE65,
618              PRICING_ATTRIBUTE66,
619              PRICING_ATTRIBUTE67,
620              PRICING_ATTRIBUTE68,
621              PRICING_ATTRIBUTE69,
622              PRICING_ATTRIBUTE70,
623              PRICING_ATTRIBUTE71,
624              PRICING_ATTRIBUTE72,
625              PRICING_ATTRIBUTE73,
626              PRICING_ATTRIBUTE74,
627              PRICING_ATTRIBUTE75,
628              PRICING_ATTRIBUTE76,
629              PRICING_ATTRIBUTE77,
630              PRICING_ATTRIBUTE78,
631              PRICING_ATTRIBUTE79,
632              PRICING_ATTRIBUTE80,
633              PRICING_ATTRIBUTE81,
634              PRICING_ATTRIBUTE82,
635              PRICING_ATTRIBUTE83,
636              PRICING_ATTRIBUTE84,
637              PRICING_ATTRIBUTE85,
638              PRICING_ATTRIBUTE86,
639              PRICING_ATTRIBUTE87,
640              PRICING_ATTRIBUTE88,
641              PRICING_ATTRIBUTE89,
642              PRICING_ATTRIBUTE90,
643              PRICING_ATTRIBUTE91,
644              PRICING_ATTRIBUTE92,
645              PRICING_ATTRIBUTE93,
646              PRICING_ATTRIBUTE94,
647              PRICING_ATTRIBUTE95,
648              PRICING_ATTRIBUTE96,
649              PRICING_ATTRIBUTE97,
650              PRICING_ATTRIBUTE98,
651              PRICING_ATTRIBUTE99,
652              PRICING_ATTRIBUTE100
653       FROM   OE_ORDER_PRICE_ATTRIBS
654       WHERE  LINE_ID = p_line_id
655       AND    FLEX_TITLE='QP_ATTR_DEFNS_PRICING'; -- Fix for bug 4151459
656 
657   BEGIN
658 
659     api_log('get_pricing_attribs');
660     -- delate the pricing attribute table
661     x_pricing_attb_tbl.delete;
662 
663     -- Build the  pricing attribute table
664     FOR C1 IN Pric_attrib LOOP
665       x_pricing_attb_tbl(l_index).PRICING_CONTEXT    := C1.PRICING_CONTEXT ;
666       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE1 := C1.PRICING_ATTRIBUTE1;
667       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE2 := C1.PRICING_ATTRIBUTE2;
668       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE3 := C1.PRICING_ATTRIBUTE3;
669       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE4 := C1.PRICING_ATTRIBUTE4;
670       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE5 := C1.PRICING_ATTRIBUTE5;
671       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE6 := C1.PRICING_ATTRIBUTE6;
672       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE7 := C1.PRICING_ATTRIBUTE7;
673       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE8 := C1.PRICING_ATTRIBUTE8;
674       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE9 := C1.PRICING_ATTRIBUTE9;
675       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE10 := C1.PRICING_ATTRIBUTE10;
676       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE11 := C1.PRICING_ATTRIBUTE11;
677       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE12 := C1.PRICING_ATTRIBUTE12;
678       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE13 := C1.PRICING_ATTRIBUTE13;
679       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE14 := C1.PRICING_ATTRIBUTE14;
680       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE15 := C1.PRICING_ATTRIBUTE15;
681       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE16 := C1.PRICING_ATTRIBUTE16;
682       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE17 := C1.PRICING_ATTRIBUTE17;
683       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE18 := C1.PRICING_ATTRIBUTE18;
684       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE19 := C1.PRICING_ATTRIBUTE19;
685       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE20 := C1.PRICING_ATTRIBUTE20;
686       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE21 := C1.PRICING_ATTRIBUTE21;
687       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE22 := C1.PRICING_ATTRIBUTE22;
688       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE23 := C1.PRICING_ATTRIBUTE23;
689       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE24 := C1.PRICING_ATTRIBUTE24;
690       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE25 := C1.PRICING_ATTRIBUTE25;
691       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE26 := C1.PRICING_ATTRIBUTE26;
692       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE27 := C1.PRICING_ATTRIBUTE27;
693       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE28 := C1.PRICING_ATTRIBUTE28;
694       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE29 := C1.PRICING_ATTRIBUTE29;
695       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE30 := C1.PRICING_ATTRIBUTE30;
696       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE31 := C1.PRICING_ATTRIBUTE31;
697       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE32 := C1.PRICING_ATTRIBUTE32;
698       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE33 := C1.PRICING_ATTRIBUTE33;
699       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE34 := C1.PRICING_ATTRIBUTE34;
700       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE35 := C1.PRICING_ATTRIBUTE35;
701       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE36 := C1.PRICING_ATTRIBUTE36;
702       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE37 := C1.PRICING_ATTRIBUTE37;
703       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE38 := C1.PRICING_ATTRIBUTE38;
704       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE39 := C1.PRICING_ATTRIBUTE39;
705       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE40 := C1.PRICING_ATTRIBUTE40;
706       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE41 := C1.PRICING_ATTRIBUTE41;
707       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE42 := C1.PRICING_ATTRIBUTE42;
708       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE43 := C1.PRICING_ATTRIBUTE43;
709       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE44 := C1.PRICING_ATTRIBUTE44;
710       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE45 := C1.PRICING_ATTRIBUTE45;
711       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE46 := C1.PRICING_ATTRIBUTE46;
712       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE47 := C1.PRICING_ATTRIBUTE47;
713       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE48 := C1.PRICING_ATTRIBUTE48;
714       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE49 := C1.PRICING_ATTRIBUTE49;
715       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE50 := C1.PRICING_ATTRIBUTE50;
716       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE51 := C1.PRICING_ATTRIBUTE51;
717       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE52 := C1.PRICING_ATTRIBUTE52;
718       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE53 := C1.PRICING_ATTRIBUTE53;
719       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE54 := C1.PRICING_ATTRIBUTE54;
720       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE55 := C1.PRICING_ATTRIBUTE55;
721       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE56 := C1.PRICING_ATTRIBUTE56;
722       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE57 := C1.PRICING_ATTRIBUTE57;
723       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE58 := C1.PRICING_ATTRIBUTE58;
724       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE59 := C1.PRICING_ATTRIBUTE59;
725       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE60 := C1.PRICING_ATTRIBUTE60;
726       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE61 := C1.PRICING_ATTRIBUTE61;
727       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE62 := C1.PRICING_ATTRIBUTE62;
728       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE63 := C1.PRICING_ATTRIBUTE63;
729       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE64 := C1.PRICING_ATTRIBUTE64;
730       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE65 := C1.PRICING_ATTRIBUTE65;
731       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE66 := C1.PRICING_ATTRIBUTE66;
732       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE67 := C1.PRICING_ATTRIBUTE67;
733       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE68 := C1.PRICING_ATTRIBUTE68;
734       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE69 := C1.PRICING_ATTRIBUTE69;
735       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE70 := C1.PRICING_ATTRIBUTE70;
736       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE71 := C1.PRICING_ATTRIBUTE71;
737       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE72 := C1.PRICING_ATTRIBUTE72;
738       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE73 := C1.PRICING_ATTRIBUTE73;
739       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE74 := C1.PRICING_ATTRIBUTE74;
740       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE75 := C1.PRICING_ATTRIBUTE75;
741       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE76 := C1.PRICING_ATTRIBUTE76;
742       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE77 := C1.PRICING_ATTRIBUTE77;
743       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE78 := C1.PRICING_ATTRIBUTE78;
744       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE79 := C1.PRICING_ATTRIBUTE79;
745       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE80 := C1.PRICING_ATTRIBUTE80;
746       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE81 := C1.PRICING_ATTRIBUTE81;
747       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE82 := C1.PRICING_ATTRIBUTE82;
748       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE83 := C1.PRICING_ATTRIBUTE83;
749       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE84 := C1.PRICING_ATTRIBUTE84;
750       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE85 := C1.PRICING_ATTRIBUTE85;
751       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE86 := C1.PRICING_ATTRIBUTE86;
752       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE87 := C1.PRICING_ATTRIBUTE87;
753       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE88 := C1.PRICING_ATTRIBUTE88;
754       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE89 := C1.PRICING_ATTRIBUTE89;
755       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE90 := C1.PRICING_ATTRIBUTE90;
756       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE91 := C1.PRICING_ATTRIBUTE91;
757       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE92 := C1.PRICING_ATTRIBUTE92;
758       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE93 := C1.PRICING_ATTRIBUTE93;
759       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE94 := C1.PRICING_ATTRIBUTE94;
760       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE95 := C1.PRICING_ATTRIBUTE95;
761       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE96 := C1.PRICING_ATTRIBUTE96;
762       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE97 := C1.PRICING_ATTRIBUTE97;
763       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE98 := C1.PRICING_ATTRIBUTE98;
764       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE99 := C1.PRICING_ATTRIBUTE99;
765       x_pricing_attb_tbl(l_index).PRICING_ATTRIBUTE100 := C1.PRICING_ATTRIBUTE100;
766 
767       l_index := l_index +1;
768     END LOOP;
769 
770   EXCEPTION
771     WHEN no_data_found THEN
772       NULL;
773   END get_pricing_attribs;
774 
775   PROCEDURE split_ship_rec(
776     x_upd_txn_line_dtl_tbl    IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
777     x_txn_line_detail_tbl     IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
778     x_txn_line_detail_rec     IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_rec,
779     p_txn_sub_type_rec        IN csi_order_ship_pub.txn_sub_type_rec,
780     p_order_shipment_rec      IN csi_order_ship_pub.order_shipment_rec,
781     p_order_line_rec          IN csi_order_ship_pub.order_line_rec,
782     p_proc_qty                IN NUMBER,
783     x_return_status           OUT NOCOPY VARCHAR2)
784   IS
785 
786     l_index         NUMBER := 0;
787     l_ip_account_id NUMBER;
788     l_instance_id   NUMBER;
789     l_inst_party_id NUMBER;
790     l_rem_qty_to_proc  NUMBER;
791     l_upd_index     binary_integer;
792     l_party_site_id NUMBER;
793     x_msg_count     NUMBER;
794     x_msg_data      VARCHAR2(2000);
795 
796     x_txn_line_dtl_rec            csi_t_datastructures_grp.txn_line_detail_rec;
797     x_txn_party_dtl_tbl           csi_t_datastructures_grp.txn_party_detail_tbl ;
798     x_txn_pty_acct_dtl_tbl        csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
799     x_txn_org_assgn_tbl           csi_t_datastructures_grp.txn_org_assgn_tbl;
800     x_txn_ext_attrib_vals_tbl     csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
801     x_txn_ii_rltns_tbl            csi_t_datastructures_grp.txn_ii_rltns_tbl;
802 
803     l_install_party_site_id  NUMBER;
804   BEGIN
805 
806     x_return_status := fnd_api.g_ret_sts_success;
807 
808     api_log('split_ship_rec');
809 
810     l_rem_qty_to_proc  := p_proc_qty;
811     l_upd_index    := x_upd_txn_line_dtl_tbl.count +1;
812 
813     debug('p_order_shipment_rec.instance_id ='||p_order_shipment_rec.instance_id);
814 
815     IF x_txn_line_detail_tbl.count > 0 THEN
816       FOR j in x_txn_line_detail_tbl.first..x_txn_line_detail_tbl.last Loop
817         IF x_txn_line_detail_tbl(j).processing_status = 'INST_MATCH' AND
818            x_txn_line_detail_tbl(j).instance_id = p_order_shipment_rec.instance_id AND
819            l_rem_qty_to_proc > 0
820         THEN
821 
822           x_upd_txn_line_dtl_tbl(l_upd_index).txn_line_detail_id := x_txn_line_detail_tbl(j).txn_line_detail_id;
823           x_upd_txn_line_dtl_tbl(l_upd_index).preserve_detail_flag := 'Y' ;
824           x_upd_txn_line_dtl_tbl(l_upd_index).processing_status := 'IN_PROCESS';
825           x_upd_txn_line_dtl_tbl(l_upd_index).serial_number     := x_txn_line_detail_tbl(j).serial_number;
826           x_upd_txn_line_dtl_tbl(l_upd_index).inv_organization_id  := p_order_shipment_rec.organization_id;
827 
828           debug('Txn_line_detail_id ='||x_upd_txn_line_dtl_tbl(l_upd_index).txn_line_detail_id);
829           debug('Txn instance_id    ='||x_txn_line_detail_tbl(j).instance_id);
830           l_rem_qty_to_proc := l_rem_qty_to_proc- x_txn_line_detail_tbl(j).quantity;
831           l_upd_index := l_upd_index +1;
832 
833         END IF;
834       END LOOP;
835     END IF;
836 
837     IF l_rem_qty_to_proc > 0  THEN
838 
839       l_index  := l_index +1 ;
840 
841       debug('For the remaining qty, Creating transaction details. ');
842 
843       l_instance_id := p_order_shipment_rec.instance_id;
844 
845       x_txn_line_dtl_rec := x_txn_line_detail_rec ;
846 
847       /* assign values for the columns in Txn_line_details_tbl */
848       x_txn_line_dtl_rec.txn_line_detail_id      := FND_API.G_MISS_NUM;
849       x_txn_line_dtl_rec.instance_id             := l_instance_id;
850       x_txn_line_dtl_rec.instance_exists_flag    := 'Y';
851       x_txn_line_dtl_rec.source_transaction_flag := 'Y';
852       x_txn_line_dtl_rec.inventory_item_id       := p_order_shipment_rec.inventory_item_id  ;
853       x_txn_line_dtl_rec.inv_organization_id     := p_order_shipment_rec.organization_id  ;
854       x_txn_line_dtl_rec.inventory_revision      := p_order_shipment_rec.revision  ;
855       x_txn_line_dtl_rec.item_condition_id       := fnd_api.g_miss_num;
856       x_txn_line_dtl_rec.instance_type_code      := fnd_api.g_miss_char;
857       x_txn_line_dtl_rec.quantity                := l_rem_qty_to_proc;
858       x_txn_line_dtl_rec.unit_of_measure         := p_order_shipment_rec.transaction_uom ;
859       x_txn_line_dtl_rec.serial_number           := p_order_shipment_rec.serial_number;
860       x_txn_line_dtl_rec.processing_status       := 'IN_PROCESS';
861 
862       IF p_order_line_rec.serial_code <> 1   Then
863         x_txn_line_dtl_rec.mfg_serial_number_flag  := 'Y';
864       ELSE
865         x_txn_line_dtl_rec.mfg_serial_number_flag  := 'N';
866       END IF;
867 
868       BEGIN
869         SELECT party_site_id
870         INTO   l_party_site_id
871         FROM   hz_cust_acct_sites_all c,
872                hz_cust_site_uses_all u
873         WHERE  c.cust_acct_site_id = u.cust_acct_site_id
874         AND    u.site_use_id = p_order_shipment_rec.ib_current_loc_id; -- ship_to_org_id;
875       EXCEPTION
876         WHEN no_data_found THEN
877           fnd_message.set_name('CSI','CSI_INT_PTY_SITE_MISSING');
878           fnd_message.set_token('LOCATION_ID', p_order_shipment_rec.ib_current_loc_id); -- ship_to_org_id);
879           fnd_msg_pub.add;
880           RAISE fnd_api.g_exc_error;
881         WHEN too_many_rows THEN
882           fnd_message.set_name('CSI','CSI_INT_MANY_PTY_SITE_FOUND');
883           fnd_message.set_token('LOCATION_ID', p_order_shipment_rec.ib_current_loc_id); -- ship_to_org_id);
884           fnd_msg_pub.add;
885           RAISE fnd_api.g_exc_error;
886       END ;
887 
888       IF p_order_shipment_rec.ib_install_loc is not null
889         AND
890          p_order_shipment_rec.ib_install_loc_id is not null
891         AND
892          p_order_shipment_rec.ib_install_loc_id <> fnd_api.g_miss_num
893       Then
894        BEGIN
895          SELECT party_site_id
896          INTO   l_install_party_site_id
897          FROM   hz_cust_acct_sites_all c,
898                 hz_cust_site_uses_all u
899          WHERE  c.cust_acct_site_id = u.cust_acct_site_id
900          AND    u.site_use_id = p_order_shipment_rec.ib_install_loc_id; -- ship_to_org_id;
901        Exception
902          When no_data_found then
903            fnd_message.set_name('CSI','CSI_INT_PTY_SITE_MISSING');
904            fnd_message.set_token('LOCATION_ID', p_order_shipment_rec.ib_install_loc_id); -- ship_to_org_id);
905            fnd_msg_pub.add;
906            debug('Party_site_id not found');
907            raise fnd_api.g_exc_error;
908          when too_many_rows then
909            fnd_message.set_name('CSI','CSI_INT_MANY_PTY_SITE_FOUND');
910            fnd_message.set_token('LOCATION_ID', p_order_shipment_rec.ib_install_loc_id); -- ship_to_org_id);
911            fnd_msg_pub.add;
912            debug('Party_site_id not found');
913            raise fnd_api.g_exc_error;
914         end ;
915        END IF;
916 
917       x_txn_line_dtl_rec.lot_number              := p_order_shipment_rec.lot_number;
918       x_txn_line_dtl_rec.location_type_code      := 'HZ_PARTY_SITES';
919       x_txn_line_dtl_rec.location_id             := l_party_site_id;
920       -- Added for partner ordering
921       x_txn_line_dtl_rec.install_location_type_code := x_txn_line_dtl_rec.location_type_code;
922       x_txn_line_dtl_rec.install_location_id   := l_install_party_site_id;
923       -- End for Partner Ordering
924       x_txn_line_dtl_rec.sellable_flag           := 'Y';
925       x_txn_line_dtl_rec.active_start_date       := sysdate;
926       x_txn_line_dtl_rec.object_version_number   := 1  ;
927       x_txn_line_dtl_rec.preserve_detail_flag    := 'Y';
928 
929       l_inst_party_id := csi_utl_pkg.get_instance_party_id(l_instance_id);
930       IF l_inst_party_id = -1 THEN
931         debug('get_instance_party_id failed');
932         RAISE fnd_api.g_exc_error;
933       END IF;
934 
935       -- assign values for the columns in x_txn_party_dtl_tbl
936       x_txn_party_dtl_tbl(l_index).instance_party_id      := l_inst_party_id;
937       x_txn_party_dtl_tbl(l_index).party_source_id        := p_order_shipment_rec.party_id;
938       x_txn_party_dtl_tbl(l_index).party_source_table     := 'HZ_PARTIES';
939       x_txn_party_dtl_tbl(l_index).relationship_type_code := 'OWNER';
940       x_txn_party_dtl_tbl(l_index).contact_flag           := 'N';
941       x_txn_party_dtl_tbl(l_index).active_start_date      := sysdate;
942       x_txn_party_dtl_tbl(l_index).preserve_detail_flag   := 'Y';
943       x_txn_party_dtl_tbl(l_index).object_version_number  := 1;
944       x_txn_party_dtl_tbl(l_index).txn_line_details_index := l_index;
945 
946       /* get ip_account_id only if inst_party_id does not exist */
947 
948       IF l_inst_party_id is not null THEN
949         l_ip_account_id := csi_utl_pkg.get_ip_account_id(l_inst_party_id);
950         IF l_ip_account_id = -1 THEN
951           l_ip_account_id := NULL;
952           debug('Party account not found for instance ');
953         END IF;
954       END IF;
955 
956       -- assign values for the columns in txn_pty_acct_dtl_tbl
957       x_txn_pty_acct_dtl_tbl(l_index).ip_account_id          := l_ip_account_id;
958       x_txn_pty_acct_dtl_tbl(l_index).account_id             := p_order_shipment_rec.party_account_id;
959       x_txn_pty_acct_dtl_tbl(l_index).bill_to_address_id     := p_order_shipment_rec.invoice_to_org_id;
960       x_txn_pty_acct_dtl_tbl(l_index).ship_to_address_id     := p_order_shipment_rec.ship_to_org_id;
961       x_txn_pty_acct_dtl_tbl(l_index).relationship_type_code := 'OWNER';
962       x_txn_pty_acct_dtl_tbl(l_index).active_start_date      := sysdate;
963       x_txn_pty_acct_dtl_tbl(l_index).preserve_detail_flag   := 'Y';
964       x_txn_pty_acct_dtl_tbl(l_index).object_version_number  := 1;
965       x_txn_pty_acct_dtl_tbl(l_index).txn_party_details_index := l_index;
966 
967       -- assign values for the columns in x_txn_org_assgn_tbl
968       IF nvl(p_order_shipment_rec.sold_from_org_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
969         x_txn_org_assgn_tbl(l_index).txn_operating_unit_id  := fnd_api.g_miss_num;
970         x_txn_org_assgn_tbl(l_index).txn_line_detail_id     := fnd_api.g_miss_num;
971         x_txn_org_assgn_tbl(l_index).instance_ou_id         := fnd_api.g_miss_num;
972         x_txn_org_assgn_tbl(l_index).operating_unit_id      := p_order_shipment_rec.sold_from_org_id;
973         x_txn_org_assgn_tbl(l_index).relationship_type_code := 'SOLD_FROM';
974         x_txn_org_assgn_tbl(l_index).active_start_date      := sysdate;
975         x_txn_org_assgn_tbl(l_index).preserve_detail_flag   := 'Y';
976         x_txn_org_assgn_tbl(l_index).txn_line_details_index := l_index;
977         x_txn_org_assgn_tbl(l_index).object_version_number  := 1;
978       END IF;
979 
980       -- call api to create the transaction line details
981       csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
982         p_api_version               => 1.0 ,
983         p_commit                    => fnd_api.g_false,
984         p_init_msg_list             => fnd_api.g_true,
985         p_validation_level          => fnd_api.g_valid_level_none,
986         p_txn_line_dtl_index        => l_index,
987         p_txn_line_dtl_rec          => x_txn_line_dtl_rec,
988         px_txn_party_dtl_tbl        => x_txn_party_dtl_tbl,
989         px_txn_pty_acct_detail_tbl  => x_txn_pty_acct_dtl_tbl,
990         px_txn_ii_rltns_tbl         => x_txn_ii_rltns_tbl,
991         px_txn_org_assgn_tbl        => x_txn_org_assgn_tbl,
992         px_txn_ext_attrib_vals_tbl  => x_txn_ext_attrib_vals_tbl,
993         x_return_status             => x_return_status,
994         x_msg_count                 => x_msg_count,
995         x_msg_data                  => x_msg_data);
996 
997       IF x_return_status <> fnd_api.g_ret_sts_success THEN
998         raise fnd_api.g_exc_error;
999       END IF;
1000 
1001     END IF;
1002   EXCEPTION
1003     WHEN fnd_api.g_exc_error THEN
1004       x_return_status := fnd_api.g_ret_sts_error ;
1005     WHEN fnd_api.g_exc_unexpected_error THEN
1006       x_return_status := fnd_api.g_ret_sts_unexp_error ;
1007   END split_ship_rec;
1008 
1009   PROCEDURE create_txn_details(
1010     x_txn_line_dtl_rec        IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_rec,
1011     p_txn_sub_type_rec        IN csi_order_ship_pub.txn_sub_type_rec,
1012     p_order_shipment_rec      IN csi_order_ship_pub.order_shipment_rec,
1013     p_order_line_rec          IN csi_order_ship_pub.order_line_rec,
1014     x_return_status           OUT NOCOPY VARCHAR2)
1015   IS
1016     l_index         NUMBER := 0;
1017     l_ip_account_id NUMBER;
1018     l_instance_id   NUMBER;
1019     l_inst_party_id NUMBER;
1020     l_ind_pty       NUMBER;
1021     l_ind_acct      NUMBER;
1022     l_ind_org       NUMBER;
1023     l_party_site_id NUMBER;
1024     x_msg_data      VARCHAR2(2000);
1025     x_msg_count     NUMBER;
1026 
1027     x_txn_party_dtl_tbl           csi_t_datastructures_grp.txn_party_detail_tbl ;
1028     x_txn_pty_acct_dtl_tbl        csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
1029     x_txn_org_assgn_tbl           csi_t_datastructures_grp.txn_org_assgn_tbl;
1030     x_txn_ext_attrib_vals_tbl     csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
1031     x_txn_ii_rltns_tbl            csi_t_datastructures_grp.txn_ii_rltns_tbl;
1032 
1033   BEGIN
1034 
1035     x_return_status := fnd_api.g_ret_sts_success;
1036 
1037     api_log('create_txn_details');
1038 
1039     x_txn_line_dtl_rec := x_txn_line_dtl_rec;
1040 
1041     l_index := l_index + 1;
1042 
1043     l_instance_id := p_order_shipment_rec.instance_id;
1044 
1045     /* assign values for the columns in Txn_line_details_tbl */
1046     x_txn_line_dtl_rec.txn_line_detail_id      := FND_API.G_MISS_NUM;
1047     x_txn_line_dtl_rec.instance_id             := l_instance_id;
1048     x_txn_line_dtl_rec.instance_exists_flag    := 'Y';
1049     x_txn_line_dtl_rec.source_transaction_flag := 'Y';
1050     x_txn_line_dtl_rec.sub_type_id             := p_txn_sub_type_rec.sub_type_id;
1051     x_txn_line_dtl_rec.inventory_item_id       := p_order_shipment_rec.inventory_item_id  ;
1052     x_txn_line_dtl_rec.inv_organization_id     := p_order_shipment_rec.organization_id  ;
1053     x_txn_line_dtl_rec.inventory_revision      := p_order_shipment_rec.revision  ;
1054     x_txn_line_dtl_rec.item_condition_id       := fnd_api.g_miss_num;
1055     x_txn_line_dtl_rec.instance_type_code      := fnd_api.g_miss_char;
1056     x_txn_line_dtl_rec.quantity                := p_order_shipment_rec.shipped_quantity  ;
1057     x_txn_line_dtl_rec.unit_of_measure         := p_order_shipment_rec.transaction_uom ;
1058     x_txn_line_dtl_rec.serial_number           := p_order_shipment_rec.serial_number;
1059     x_txn_line_dtl_rec.processing_status       := 'IN_PROCESS';
1060 
1061     IF p_order_line_rec.serial_code <> 1   Then
1062       x_txn_line_dtl_rec.mfg_serial_number_flag  := 'Y';
1063     ELSE
1064       x_txn_line_dtl_rec.mfg_serial_number_flag  := 'N';
1065     END IF;
1066 
1067     BEGIN
1068       SELECT party_site_id
1069       INTO   l_party_site_id
1070       FROM   hz_cust_acct_sites_all c,
1071              hz_cust_site_uses_all u
1072       WHERE  c.cust_acct_site_id = u.cust_acct_site_id
1073       AND    u.site_use_id = p_order_shipment_rec.ship_to_org_id;
1074     EXCEPTION
1075       WHEN no_data_found then
1076         fnd_message.set_name('CSI','CSI_INT_PTY_SITE_MISSING');
1077         fnd_message.set_token('LOCATION_ID', p_order_shipment_rec.ship_to_org_id);
1078         fnd_msg_pub.add;
1079         RAISE fnd_api.g_exc_error;
1080       WHEN too_many_rows then
1081         fnd_message.set_name('CSI','CSI_INT_MANY_PTY_SITE_FOUND');
1082         fnd_message.set_token('LOCATION_ID', p_order_shipment_rec.ship_to_org_id);
1083         fnd_msg_pub.add;
1084         RAISE fnd_api.g_exc_error;
1085     END;
1086 
1087     x_txn_line_dtl_rec.lot_number              := p_order_shipment_rec.lot_number;
1088     x_txn_line_dtl_rec.location_type_code      := 'HZ_PARTY_SITES';
1089     x_txn_line_dtl_rec.location_id             := l_party_site_id;
1090     x_txn_line_dtl_rec.sellable_flag           := 'Y';
1091     x_txn_line_dtl_rec.active_start_date       := sysdate;
1092     x_txn_line_dtl_rec.object_version_number   := 1  ;
1093     x_txn_line_dtl_rec.preserve_detail_flag    := 'Y';
1094 
1095     l_inst_party_id := csi_utl_pkg.get_instance_party_id(l_instance_id);
1096 
1097     IF l_inst_party_id = -1 THEN
1098       debug('get_instance_party_id failed');
1099       RAISE fnd_api.g_exc_error;
1100     END IF;
1101 
1102     -- assign values for the columns in txn_party_detail_tbl
1103     x_txn_party_dtl_tbl(l_index).instance_party_id      := l_inst_party_id;
1104     x_txn_party_dtl_tbl(l_index).party_source_id        := p_order_shipment_rec.party_id;
1105     x_txn_party_dtl_tbl(l_index).party_source_table     := 'HZ_PARTIES';
1106     x_txn_party_dtl_tbl(l_index).relationship_type_code := 'OWNER';
1107     x_txn_party_dtl_tbl(l_index).contact_flag           := 'N';
1108     x_txn_party_dtl_tbl(l_index).active_start_date      := sysdate;
1109     x_txn_party_dtl_tbl(l_index).preserve_detail_flag   := 'Y';
1110     x_txn_party_dtl_tbl(l_index).object_version_number  := 1;
1111     x_txn_party_dtl_tbl(l_index).txn_line_details_index := l_index;
1112 
1113     /* get ip_account_id only if inst_party_id does not exist */
1114 
1115     IF l_inst_party_id is not null THEN
1116       l_ip_account_id := csi_utl_pkg.get_ip_account_id(l_inst_party_id);
1117 
1118       /* If ip_account_id is -1 then account does not exist in IB */
1119 
1120       IF l_ip_account_id = -1 THEN
1121         l_ip_account_id := NULL;
1122         debug('Party account not found for instance ');
1123       END IF;
1124     END IF;
1125 
1126     -- assign values for the columns in txn_pty_acct_dtl_tbl
1127     x_txn_pty_acct_dtl_tbl(l_index).ip_account_id          := l_ip_account_id;
1128     x_txn_pty_acct_dtl_tbl(l_index).account_id             := p_order_shipment_rec.party_account_id;
1129     x_txn_pty_acct_dtl_tbl(l_index).bill_to_address_id     := p_order_shipment_rec.invoice_to_org_id;
1130     x_txn_pty_acct_dtl_tbl(l_index).ship_to_address_id     := p_order_shipment_rec.ship_to_org_id;
1131     x_txn_pty_acct_dtl_tbl(l_index).relationship_type_code := 'OWNER';
1132     x_txn_pty_acct_dtl_tbl(l_index).active_start_date      := sysdate;
1133     x_txn_pty_acct_dtl_tbl(l_index).preserve_detail_flag   := 'Y';
1134     x_txn_pty_acct_dtl_tbl(l_index).object_version_number  := 1;
1135     x_txn_pty_acct_dtl_tbl(l_index).txn_party_details_index := l_index;
1136 
1137     IF nvl(p_order_shipment_rec.sold_from_org_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
1138       x_txn_org_assgn_tbl(l_index).txn_operating_unit_id  := fnd_api.g_miss_num;
1139       x_txn_org_assgn_tbl(l_index).txn_line_detail_id     := fnd_api.g_miss_num;
1140       x_txn_org_assgn_tbl(l_index).instance_ou_id         := fnd_api.g_miss_num;
1141       x_txn_org_assgn_tbl(l_index).operating_unit_id      := p_order_shipment_rec.sold_from_org_id;
1142       x_txn_org_assgn_tbl(l_index).relationship_type_code := 'SOLD_FROM';
1143       x_txn_org_assgn_tbl(l_index).active_start_date      := sysdate;
1144       x_txn_org_assgn_tbl(l_index).txn_line_details_index := l_index;
1145       x_txn_org_assgn_tbl(l_index).preserve_detail_flag   := 'Y';
1146       x_txn_org_assgn_tbl(l_index).object_version_number  := 1;
1147     END IF;
1148 
1149     -- call api to create the transaction line details
1150     csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
1151       p_api_version               => 1.0 ,
1152       p_commit                    => fnd_api.g_false,
1153       p_init_msg_list             => fnd_api.g_true,
1154       p_validation_level          => fnd_api.g_valid_level_none,
1155       p_txn_line_dtl_index        => l_index,
1156       p_txn_line_dtl_rec          => x_txn_line_dtl_rec,
1157       px_txn_party_dtl_tbl        => x_txn_party_dtl_tbl,
1158       px_txn_pty_acct_detail_tbl  => x_txn_pty_acct_dtl_tbl,
1159       px_txn_ii_rltns_tbl         => x_txn_ii_rltns_tbl,
1160       px_txn_org_assgn_tbl        => x_txn_org_assgn_tbl,
1161       px_txn_ext_attrib_vals_tbl  => x_txn_ext_attrib_vals_tbl,
1162       x_return_status             => x_return_status,
1163       x_msg_count                 => x_msg_count,
1164       x_msg_data                  => x_msg_data);
1165 
1166     IF x_return_status <> fnd_api.g_ret_sts_success THEN
1167       raise fnd_api.g_exc_error;
1168     END IF;
1169 
1170   EXCEPTION
1171     WHEN fnd_api.g_exc_error THEN
1172       x_return_status := fnd_api.g_ret_sts_error ;
1173     WHEN fnd_api.g_exc_unexpected_error THEN
1174       x_return_status := fnd_api.g_ret_sts_unexp_error ;
1175   END create_txn_details;
1176 
1177 
1178   FUNCTION Check_config_exists(
1179     p_txn_ii_rltns_tbl  IN csi_t_datastructures_grp.txn_ii_rltns_tbl,
1180     p_txn_detail_id     IN NUMBER)
1181   RETURN BOOLEAN IS
1182     l_flag BOOLEAN := FALSE;
1183   BEGIN
1184 
1185     api_log('check_config_exists');
1186 
1187     IF p_txn_ii_rltns_tbl.count > 0 THEN
1188       FOR i in p_txn_ii_rltns_tbl.first..p_txn_ii_rltns_tbl.last LOOP
1189         IF p_txn_ii_rltns_tbl(i).object_id = p_txn_detail_id THEN
1190           l_flag := TRUE;
1191         END IF;
1192       END LOOP;
1193     END IF;
1194     RETURN l_flag;
1195 
1196   END Check_config_exists;
1197 
1198   PROCEDURE get_party_id(
1199     p_cust_acct_id  IN  number,
1200     x_party_id      OUT NOCOPY number,
1201     x_return_status OUT NOCOPY varchar2)
1202   IS
1203     l_party_id        number;
1204     l_account_status  hz_cust_accounts.status%type;
1205   BEGIN
1206 
1207     api_log('get_party_id');
1208 
1209     x_return_status := fnd_api.g_ret_sts_success;
1210 
1211     BEGIN
1212       SELECT party_id,
1213              status
1214       INTO   l_party_id,
1215              l_account_status
1216       FROM   hz_cust_accounts
1217       WHERE  cust_account_id = p_cust_acct_id;
1218 
1219       x_party_id := l_party_id;
1220 
1221       IF l_account_status <> 'A' THEN
1222         debug('This cust account '||p_cust_acct_id||' has status '||l_account_status);
1223       END IF;
1224 
1225     EXCEPTION
1226       WHEN no_data_found THEN
1227         fnd_message.set_name('CSI','CSI_INT_INV_CUST_ACCT_ID');
1228         fnd_message.set_token('CUST_ACCOUNT_ID', p_cust_acct_id);
1229         fnd_msg_pub.add;
1230         RAISE fnd_api.g_exc_error;
1231     END;
1232 
1233   EXCEPTION
1234     WHEN fnd_api.g_exc_error THEN
1235       x_return_status := fnd_api.g_ret_sts_error;
1236   END get_party_id;
1237 
1238 
1239   FUNCTION validate_inst_party(
1240     p_instance_id   IN NUMBER,
1241     p_inst_party_id IN NUMBER,
1242     p_pty_rel_code  IN VARCHAR2)
1243   RETURN BOOLEAN IS
1244     l_ret_status BOOLEAN := FALSE;
1245     l_dummy      VARCHAR2(1);
1246   BEGIN
1247 
1248     api_log('validate_inst_party');
1249 
1250     SELECT 'x'
1251     INTO   l_dummy
1252     FROM   csi_i_parties
1253     WHERE  instance_id  = p_instance_id
1254     AND    instance_party_id = p_inst_party_id
1255     AND    relationship_type_code = p_pty_rel_code
1256     AND   ((active_end_date is null ) OR
1257            (active_end_date > sysdate));
1258 
1259     l_ret_status := TRUE;
1260     RETURN l_ret_status;
1261 
1262   EXCEPTION
1263     WHEN others THEN
1264       fnd_message.set_name('CSI','CSI_INT_INV_INST_PTY_ID');
1265       fnd_message.set_token('INSTANCE_ID', p_instance_id);
1266       fnd_message.set_token('INSTANCE_PARTY_ID', p_inst_party_id);
1267       fnd_message.set_token('RELATIONSHIP_TYPE_CODE', p_inst_party_id);
1268       fnd_msg_pub.add;
1269       RETURN l_ret_status;
1270   END validate_inst_party;
1271 
1272   FUNCTION get_instance(
1273     p_order_line_id IN NUMBER)
1274   RETURN NUMBER IS
1275     l_inst_id NUMBER;
1276   BEGIN
1277 
1278     api_log('get_instance');
1279 
1280     SELECT instance_id
1281     INTO l_inst_id
1282     FROM csi_item_instances
1283     WHERE last_oe_order_line_id = p_order_line_id;
1284 
1285     RETURN l_inst_id;
1286   EXCEPTION
1287     WHEN no_data_found THEN
1288       fnd_message.set_name('CSI','CSI_INT_INV_ORD_LINE_ID');
1289       fnd_message.set_token('ORDER_LINE_ID', p_order_line_id);
1290       fnd_msg_pub.add;
1291       l_inst_id := -1;
1292       RETURN l_inst_id;
1293     WHEN others THEN
1294       fnd_message.set_name('CSI','CSI_INT_INV_ORD_LINE_ID');
1295       fnd_message.set_token('ORDER_LINE_ID', p_order_line_id);
1296       fnd_msg_pub.add;
1297       l_inst_id := -1;
1298       RETURN l_inst_id;
1299   END get_instance;
1300 
1301   FUNCTION check_relation_exist(
1302     p_model_line_id IN NUMBER ,
1303     p_line_id       IN NUMBER)
1304   RETURN BOOLEAN IS
1305     l_dummy VARCHAR2(1);
1306   BEGIN
1307 
1308     api_log('check_relation_exist');
1309 
1310     SELECT 'x'
1311     INTO   l_dummy
1312     FROM   csi_ii_relationships
1313     WHERE  object_id  =  p_model_line_id
1314     AND    subject_id =  p_line_id
1315     AND  ((active_end_date is null ) OR
1316           (active_end_date > sysdate));
1317 
1318     RETURN TRUE;
1319   EXCEPTION
1320     WHEN others THEN
1321       RETURN FALSE;
1322   END check_relation_exist;
1323 
1324   FUNCTION get_instance_party_id(
1325     p_instance_id   IN NUMBER )
1326   RETURN NUMBER
1327   IS
1328     l_inst_party_id NUMBER;
1329   BEGIN
1330     api_log('get_instance_party_id');
1331 
1332     SELECT instance_party_id
1333     INTO   l_inst_party_id
1334     FROM   csi_i_parties
1335     WHERE  instance_id = p_instance_id
1336     AND    relationship_type_code = 'OWNER'
1337     AND    ((active_end_date is null)
1338              OR
1339             (active_end_date >= sysdate));
1340 
1341     debug('  Instance Party ID :'||l_inst_party_id);
1342     RETURN l_inst_party_id;
1343 
1344   EXCEPTION
1345     WHEN no_data_found THEN
1346       fnd_message.set_name('CSI','CSI_INT_INST_OWNER_MISSING');
1347       fnd_message.set_token('INSTANCE_ID',p_instance_id);
1348       fnd_msg_pub.add;
1349       l_inst_party_id := -1;
1350       RETURN l_inst_party_id;
1351     -- Added for 3185043
1352     WHEN too_many_rows THEN
1353       fnd_message.set_name('CSI','CSI_MANY_INST_OWNER_FOUND');
1354       fnd_message.set_token('INSTANCE_ID',p_instance_id);
1355       fnd_msg_pub.add;
1356       l_inst_party_id := -1;
1357       RETURN l_inst_party_id;
1358     WHEN others THEN
1359       -- fnd_message.set_name('CSI','CSI_INT_INST_OWNER_MISSING');
1360       -- fnd_message.set_token('INSTANCE_ID',p_instance_id);
1361       fnd_message.set_name('CSI','CSI_INT_UNEXP_SQL_ERROR');
1362       fnd_message.set_token('SQL_ERROR',SQLERRM);
1363       fnd_msg_pub.add;
1364       l_inst_party_id := -1;
1365       RETURN l_inst_party_id;
1366   END get_instance_party_id;
1367 
1368 FUNCTION Get_trx_type_id
1369       (p_trx_line_id IN NUMBER
1370        ) RETURN NUMBER IS
1371 
1372  l_trx_type_id  NUMBER;
1373 
1374 BEGIN
1375 
1376   api_log('Get_trx_type_id');
1377 
1378 SELECT source_transaction_type_id
1379 INTO l_trx_type_id
1380 FROM csi_t_transaction_lines
1381 WHERE transaction_line_id = p_trx_line_id;
1382 RETURN l_trx_type_id;
1383 
1384 exception
1385   when others then
1386         fnd_message.set_name('CSI','CSI_INT_INV_TRX_LINE_ID');
1387     fnd_message.set_token('TRX_LINE_ID',p_trx_line_id);
1388     fnd_msg_pub.add;
1389     l_trx_type_id := -1;
1390     RETURN l_trx_type_id;
1391 
1392 END Get_trx_type_id;
1393 
1394 FUNCTION Get_trx_line_id
1395       (p_src_trx_id IN NUMBER,
1396        p_src_table_name IN VARCHAR2
1397        ) RETURN NUMBER IS
1398 
1399  l_trx_line_id  NUMBER;
1400 
1401 BEGIN
1402 
1403   api_log('Get_trx_line_id');
1404 
1405 SELECT transaction_line_id
1406 INTO  l_trx_line_id
1407 FROM csi_t_transaction_lines
1408 WHERE source_transaction_id = p_src_trx_id
1409  AND  source_transaction_table = p_src_table_name;
1410 RETURN l_trx_line_id;
1411 exception
1412  when others then
1413         fnd_message.set_name('CSI','CSI_INT_INV_SRC_TRX_ID');
1414     fnd_message.set_token('SOURCE_TRANSACTION_ID',p_src_trx_id);
1415     fnd_message.set_token('SOURCE_TRANSACTION_TABLE',p_src_table_name);
1416     fnd_msg_pub.add;
1417     l_trx_line_id := -1;
1418     RETURN l_trx_line_id;
1419 END Get_trx_line_id;
1420 
1421 FUNCTION get_ip_account_id
1422  ( p_instance_party_id   IN NUMBER
1423    )RETURN NUMBER
1424   IS
1425 
1426 l_ip_acct_id  NUMBER;
1427 
1428 BEGIN
1429   api_log('get_ip_account_id');
1430 
1431  SELECT
1432       ip_account_id
1433  INTO l_ip_acct_id
1434  FROM csi_ip_accounts
1435  WHERE instance_party_id = p_instance_party_id
1436    AND relationship_type_code = 'OWNER'
1437    AND ((active_end_date is null)
1438      OR (active_end_date >= sysdate));
1439 RETURN l_ip_acct_id;
1440 exception
1441   when others then
1442         fnd_message.set_name('CSI','CSI_INT_OWNER_ACCT_MISSING');
1443     fnd_message.set_token('INSTANCE_PARTY_ID',p_instance_party_id);
1444         fnd_msg_pub.add;
1445     l_ip_acct_id := -1;
1446     RETURN l_ip_acct_id;
1447 END get_ip_account_id;
1448 
1449   PROCEDURE get_master_organization
1450   (p_organization_id          IN  NUMBER,
1451    p_master_organization_id   OUT NOCOPY NUMBER,
1452    x_return_status            OUT NOCOPY VARCHAR2
1453    ) IS
1454 
1455 l_fnd_success       VARCHAR2(1) := fnd_api.g_ret_sts_success;
1456 l_fnd_error         VARCHAR2(1) := fnd_api.g_ret_sts_error;
1457 l_fnd_unexpected    VARCHAR2(1) := fnd_api.g_ret_sts_unexp_error;
1458 l_master_org_id     NUMBER;
1459 
1460 BEGIN
1461 
1462   api_log('get_master_organization');
1463 
1464   x_return_status := l_fnd_success;
1465 
1466   SELECT master_organization_id
1467   INTO  p_master_organization_id
1468   FROM   mtl_parameters
1469   WHERE  organization_id = p_organization_id;
1470 
1471 EXCEPTION
1472   WHEN no_data_found THEN
1473      fnd_message.set_name('CSI','CSI_INT_MSTR_ORG_MISSING');
1474      fnd_message.set_token('ORGANIZATION_ID',p_organization_id);
1475      fnd_msg_pub.add;
1476      x_return_status := l_fnd_error;
1477   WHEN others THEN
1478      fnd_message.set_name('CSI','CSI_INT_UNEXP_SQL_ERROR');
1479      fnd_message.set_token('SQL_ERROR',SQLERRM);
1480      fnd_msg_pub.add;
1481      x_return_status := l_fnd_unexpected;
1482 END get_master_organization;
1483 
1484 PROCEDURE get_int_party
1485  ( x_int_party_id  OUT NOCOPY NUMBER,
1486    x_return_status OUT NOCOPY VARCHAR2
1487    )  is
1488 
1489 BEGIN
1490   api_log('get_int_party');
1491 
1492  x_return_status := fnd_api.g_ret_sts_success;
1493 
1494 --commented SQL below to make changes for the bug 4028827
1495 /*
1496  SELECT internal_party_id
1497  INTO   x_int_party_id
1498  FROM   csi_install_parameters;
1499 */
1500  x_int_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
1501 
1502  IF x_int_party_id IS NULL THEN
1503     fnd_message.set_name('CSI','CSI_INT_INT_PTY_ID_MISSING');
1504     fnd_msg_pub.add;
1505     x_return_status  := fnd_api.g_ret_sts_error;
1506  ELSE
1507     x_return_status  := fnd_api.g_ret_sts_success;
1508  END IF;
1509 
1510 exception
1511  when others then
1512    fnd_message.set_name('CSI','CSI_INT_INT_PTY_ID_MISSING');
1513    fnd_msg_pub.add;
1514    x_return_status := fnd_api.g_ret_sts_error;
1515 END get_int_party;
1516 
1517 FUNCTION get_serial_contl_code
1518  ( p_inv_item_id IN NUMBER,
1519    p_inv_org_id  IN NUMBER)
1520 RETURN NUMBER IS
1521 
1522  l_serial_code       NUMBER;
1523 
1524 BEGIN
1525 
1526   api_log('get_serial_contl_code');
1527 
1528  /*----------------------------------------------------------*/
1529  /* serial number control code                               */
1530  /* '1' stands for - No serial number control                */
1531  /* '2' stands for - Predefined serial numbers               */
1532  /* '5' stands for - Dynamic entry at inventory receipt      */
1533  /* '6' stands for - Dynamic entry at sales order issue      */
1534  /*----------------------------------------------------------*/
1535 
1536   SELECT serial_number_control_code
1537    INTO  l_serial_code
1538    FROM  mtl_system_items
1539   WHERE  inventory_item_id = p_inv_item_id
1540    AND   organization_id = p_inv_org_id;
1541 
1542    RETURN l_serial_code;
1543 exception
1544   when others then
1545         fnd_message.set_name('CSI','CSI_INT_ITEM_ID_MISSING');
1546     fnd_message.set_token('INVENTORY_ITEM_ID',p_inv_item_id);
1547     fnd_message.set_token('INV_ORGANIZATION_ID',p_inv_org_id);
1548         fnd_msg_pub.add;
1549     l_serial_code := -1;
1550     RETURN  l_serial_code;
1551 END get_serial_contl_code;
1552 
1553   PROCEDURE get_order_line_dtls(
1554      p_mtl_transaction_id IN NUMBER,
1555      x_order_line_rec     OUT NOCOPY  csi_order_ship_pub.order_line_rec,
1556      x_return_status      OUT NOCOPY VARCHAR2)
1557   IS
1558 
1559     -- Partner Ordering
1560     l_partner_rec             oe_install_base_util.partner_order_rec;
1561     l_partner_owner_id        NUMBER;
1562     l_partner_owner_acct_id   NUMBER;
1563     l_order_line_rec          csi_order_ship_pub.order_line_rec;
1564 
1565     -- sumathur Added for TSO With Equipment bug 5459427
1566     l_om_session_key            csi_utility_grp.config_session_key;
1567     l_macd_processing           BOOLEAN     := FALSE;
1568 
1569   BEGIN
1570     api_log('get_order_line_dtls');
1571 
1572     x_return_status  := fnd_api.g_ret_sts_success;
1573 
1574     SELECT b.header_id,
1575            b.line_id,
1576            mmt.inventory_item_id,
1577            mmt.organization_id,
1578            mmt.transaction_date,
1579            b.ordered_quantity,
1580            b.shipped_quantity,
1581            b.top_model_line_id,
1582            b.ato_line_id,
1583            b.link_to_line_id,
1584            NVL(b.invoice_to_org_id,c.invoice_to_org_id) invoice_to_org_id,
1585            NVL(b.ship_to_org_id,c.ship_to_org_id) ship_to_org_id,
1586            NVL(b.sold_from_org_id,c.sold_from_org_id) sold_from_org_id ,
1587            NVL(b.sold_to_org_id,c.sold_to_org_id) sold_to_org_id,
1588            NVL(b.sold_to_org_id,c.sold_to_org_id) customer_id,
1589            NVL(b.ship_to_contact_id,c.ship_to_contact_id) ship_to_contact_id,
1590            NVL(b.invoice_to_contact_id,c.invoice_to_contact_id) invoice_to_contact_id ,
1591            b.order_quantity_uom  order_quantity_uom,
1592            b.item_type_code,
1593            NVL(b.agreement_id, c.agreement_id) agreement_id,
1594            c.order_number,
1595            b.line_number||'.'||b.shipment_number||'.'||option_number,
1596            b.actual_shipment_date actual_shipment_date,
1597            b.fulfillment_date fulfillment_date,
1598            b.org_id,
1599            NVL(b.deliver_to_org_id,c.deliver_to_org_id) deliver_to_org_id,
1600            b.ordered_item,
1601            b.config_header_id,
1602            b.config_rev_nbr,
1603            b.configuration_id,
1604            mmt.transaction_action_id,
1605            mmt.transaction_source_type_id,
1606            b.unit_selling_price,
1607            c.transactional_curr_code,
1608 	   NVL(b.model_remnant_flag,'N'),  --4344316
1609            decode(c.order_source_Id, 28, 'SIEBEL',29,'SIEBEL',null) source_code
1610     INTO   l_order_line_rec.header_id,
1611            l_order_line_rec.order_line_id ,
1612            l_order_line_rec.inv_item_id,
1613            l_order_line_rec.inv_org_id,
1614            l_order_line_rec.transaction_date ,
1615            l_order_line_rec.ordered_quantity,
1616            l_order_line_rec.shipped_quantity ,
1617            l_order_line_rec.top_model_line_id,
1618            l_order_line_rec.ato_line_id,
1619            l_order_line_rec.link_to_line_id ,
1620            l_order_line_rec.invoice_to_org_id ,
1621            l_order_line_rec.ship_to_org_id ,
1622            l_order_line_rec.sold_from_org_id,
1623            l_order_line_rec.sold_to_org_id,
1624            l_order_line_rec.customer_id ,
1625            l_order_line_rec.ship_to_contact_id ,
1626            l_order_line_rec.invoice_to_contact_id ,
1627            l_order_line_rec.order_quantity_uom ,
1628            l_order_line_rec.item_type_code,
1629            l_order_line_rec.agreement_id,
1630            l_order_line_rec.order_number,
1631            l_order_line_rec.line_number,
1632            l_order_line_rec.actual_shipment_date,
1633            l_order_line_rec.fulfillment_date,
1634            l_order_line_rec.org_id,
1635            l_order_line_rec.deliver_to_org_id,
1636            l_order_line_rec.ordered_item,
1637            l_order_line_rec.config_header_id,
1638            l_order_line_rec.config_rev_nbr,
1639            l_order_line_rec.configuration_id,
1640            l_order_line_rec.mtl_action_id,
1641            l_order_line_rec.mtl_src_type_id,
1642            l_order_line_rec.unit_price,
1643            l_order_line_rec.currency_code,
1644 	   l_order_line_rec.model_remnant_flag, --4344316
1645            l_order_line_rec.source_code
1646     FROM   mtl_material_transactions mmt,
1647            oe_order_lines_all b,
1648            oe_order_headers_all c
1649     WHERE  mmt.trx_source_line_id = b.line_id
1650     AND    b.header_id  = c.header_id
1651     AND    mmt.transaction_id = p_mtl_transaction_id;
1652 
1653     l_order_line_rec.om_vld_org_id := oe_sys_parameters.value(
1654                                         param_name => 'MASTER_ORGANIZATION_ID',
1655                                         p_org_id   => l_order_line_rec.org_id);
1656     BEGIN
1657       SELECT party_site_id
1658       INTO   l_order_line_rec.ship_to_party_site_id
1659       FROM   hz_cust_acct_sites_all hzcas,
1660              hz_cust_site_uses_all  hzcsu
1661       WHERE  hzcsu.site_use_id = l_order_line_rec.ship_to_org_id
1662       AND    hzcas.cust_acct_site_id = hzcsu.cust_acct_site_id;
1663     EXCEPTION
1664       WHEN no_data_found THEN
1665         fnd_message.set_name('CSI','CSI_INT_PTY_SITE_MISSING');
1666         fnd_message.set_token('LOCATION_ID', l_order_line_rec.ship_to_org_id);
1667         fnd_msg_pub.add;
1668         RAISE fnd_api.g_exc_error;
1669       WHEN too_many_rows THEN
1670         fnd_message.set_name('CSI','CSI_INT_MANY_PTY_SITE_FOUND');
1671         fnd_message.set_token('LOCATION_ID', l_order_line_rec.ship_to_org_id);
1672         fnd_msg_pub.add;
1673         RAISE fnd_api.g_exc_error;
1674     END;
1675 
1676     debug('  order_number       : '||l_order_line_rec.order_number);
1677     debug('  header_id          : '||l_order_line_rec.header_id);
1678     debug('  line_number        : '||l_order_line_rec.line_number);
1679     debug('  item_type_code     : '||l_order_line_rec.item_type_code);
1680     debug('  line_id            : '||l_order_line_rec.order_line_id);
1681     debug('  inventory_item_id  : '||l_order_line_rec.inv_item_id);
1682     debug('  ordered_item       : '||l_order_line_rec.ordered_item);
1683     debug('  shipped_quantity   : '||l_order_line_rec.shipped_quantity);
1684     debug('  ship_from_org_id   : '||l_order_line_rec.inv_org_id);
1685     debug('  party_site_id      : '||l_order_line_rec.ship_to_party_site_id);
1686     debug('  source_code        : '||l_order_line_rec.source_code);
1687 
1688     -- for partner ordering
1689     oe_install_base_util.get_partner_ord_rec(
1690       p_order_line_id      => l_order_line_rec.order_line_id,
1691       x_partner_order_rec  => l_partner_rec);
1692 
1693     IF l_partner_rec.IB_OWNER = 'END_CUSTOMER'
1694     THEN
1695       l_order_line_rec.ib_owner := 'END_CUSTOMER';
1696       IF l_partner_rec.END_CUSTOMER_ID is null Then
1697          fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1698          fnd_msg_pub.add;
1699          raise fnd_api.g_exc_error;
1700       ELSE
1701          l_order_line_rec.end_customer_id := l_partner_rec.end_customer_id;
1702       END IF;
1703     ELSIF l_partner_rec.IB_OWNER = 'INSTALL_BASE'
1704     THEN
1705       l_order_line_rec.ib_owner         :=  l_partner_rec.IB_OWNER;
1706       l_order_line_rec.end_customer_id  :=  fnd_api.g_miss_num;
1707     ELSE
1708       l_order_line_rec.end_customer_id := l_order_line_rec.sold_to_org_id;
1709     END IF;
1710 
1711     IF l_partner_rec.IB_INSTALLED_AT_LOCATION is not null
1712     THEN
1713       l_order_line_rec.ib_install_loc   := l_partner_rec.IB_INSTALLED_AT_LOCATION;
1714       IF l_order_line_rec.ib_install_loc = 'END_CUSTOMER'
1715       THEN
1716         IF l_partner_rec.end_customer_site_use_id is null
1717         THEN
1718           fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1719           fnd_msg_pub.add;
1720           raise fnd_api.g_exc_error;
1721         ELSE
1722           l_order_line_rec.ib_install_loc_id :=  l_partner_rec.end_customer_site_use_id;
1723         END IF;
1724       ELSIF l_order_line_rec.ib_install_loc = 'SHIP_TO'
1725       THEN
1726         IF  l_order_line_rec.ship_to_org_id is null
1727         THEN
1728           fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1729           fnd_msg_pub.add;
1730           raise fnd_api.g_exc_error;
1731         ELSE
1732           l_order_line_rec.ib_install_loc_id := l_order_line_rec.ship_to_org_id;
1733         END IF;
1734       ELSIF  l_order_line_rec.ib_install_loc = 'SOLD_TO'
1735       THEN
1736         IF l_partner_rec.SOLD_TO_SITE_USE_ID is null -- 3412544 l_order_line_rec.sold_to_org_id is null
1737         THEN
1738           fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1739           fnd_msg_pub.add;
1740           raise fnd_api.g_exc_error;
1741         ELSE
1742           l_order_line_rec.ib_install_loc_id := l_partner_rec.SOLD_TO_SITE_USE_ID; -- 3412544 l_order_line_rec.sold_to_org_id;
1743         END IF;
1744       ELSIF l_order_line_rec.ib_install_loc = 'DELIVER_TO'
1745       THEN
1746         IF  l_order_line_rec.deliver_to_org_id is null
1747         THEN
1748           fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1749           fnd_msg_pub.add;
1750           raise fnd_api.g_exc_error;
1751         ELSE
1752           l_order_line_rec.ib_install_loc_id := l_order_line_rec.deliver_to_org_id;
1753          END IF;
1754        ELSIF l_order_line_rec.ib_install_loc = 'BILL_TO'
1755        THEN
1756          IF l_order_line_rec.invoice_to_org_id is null
1757          THEN
1758            fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1759            fnd_msg_pub.add;
1760            raise fnd_api.g_exc_error;
1761          ELSE
1762            l_order_line_rec.ib_install_loc_id := l_order_line_rec.invoice_to_org_id;
1763          END IF;
1764        ELSIF l_order_line_rec.ib_install_loc = 'INSTALL_BASE'
1765        THEN
1766            l_order_line_rec.ib_install_loc_id := fnd_api.g_miss_num;
1767        END IF;
1768      ELSE
1769         l_order_line_rec.ib_install_loc_id := l_order_line_rec.ship_to_org_id;
1770      END IF;
1771 
1772     IF l_partner_rec.IB_CURRENT_LOCATION is not null
1773     THEN
1774        l_order_line_rec.ib_current_loc   := l_partner_rec.IB_CURRENT_LOCATION;
1775        IF l_order_line_rec.ib_current_loc = 'END_CUSTOMER'
1776        THEN
1777          IF  l_partner_rec.end_customer_site_use_id is null
1778          THEN
1779            fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1780            fnd_msg_pub.add;
1781            raise fnd_api.g_exc_error;
1782          ELSE
1783            l_order_line_rec.ib_current_loc_id :=  l_partner_rec.end_customer_site_use_id;
1784          END IF;
1785        ELSIF l_order_line_rec.ib_current_loc = 'SHIP_TO'
1786        THEN
1787          IF l_order_line_rec.ship_to_org_id is null
1788          THEN
1789            fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1790            fnd_msg_pub.add;
1791            raise fnd_api.g_exc_error;
1792          ELSE
1793            l_order_line_rec.ib_current_loc_id := l_order_line_rec.ship_to_org_id;
1794          END IF;
1795        ELSIF l_order_line_rec.ib_current_loc = 'SOLD_TO'
1796        THEN
1797          IF l_partner_rec.SOLD_TO_SITE_USE_ID is null -- 3412544 l_order_line_rec.sold_to_org_id is null
1798          THEN
1799            fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1800            fnd_msg_pub.add;
1801            raise fnd_api.g_exc_error;
1802          ELSE
1803            l_order_line_rec.ib_current_loc_id := l_partner_rec.SOLD_TO_SITE_USE_ID; -- 3412544 l_order_line_rec.sold_to_org_id;
1804          END IF;
1805        ELSIF l_order_line_rec.ib_current_loc = 'DELIVER_TO'
1806        THEN
1807          IF l_order_line_rec.deliver_to_org_id is null
1808          THEN
1809            fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1810            fnd_msg_pub.add;
1811            raise fnd_api.g_exc_error;
1812          ELSE
1813           l_order_line_rec.ib_current_loc_id := l_order_line_rec.deliver_to_org_id;
1814          END IF;
1815        ELSIF l_order_line_rec.ib_current_loc = 'BILL_TO'
1816        THEN
1817          IF l_order_line_rec.invoice_to_org_id is null
1818          THEN
1819            fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
1820            fnd_msg_pub.add;
1821            raise fnd_api.g_exc_error;
1822          ELSE
1823           l_order_line_rec.ib_current_loc_id := l_order_line_rec.invoice_to_org_id;
1824          END IF;
1825        ELSIF l_order_line_rec.ib_current_loc = 'INSTALL_BASE'
1826        THEN
1827             l_order_line_rec.ib_current_loc_id := fnd_api.g_miss_num;
1828        END IF;
1829      ELSE
1830        l_order_line_rec.ib_current_loc_id := l_order_line_rec.ship_to_org_id;
1831      END IF;
1832 
1833      IF  NVL(l_order_line_rec.config_header_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num
1834         AND NVL(l_order_line_rec.config_rev_nbr,fnd_api.g_miss_num) <> fnd_api.g_miss_num
1835 	AND NVL(l_order_line_rec.configuration_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num
1836      THEN
1837 
1838       l_om_session_key.session_hdr_id  := l_order_line_rec.config_header_id;
1839       l_om_session_key.session_rev_num := l_order_line_rec.config_rev_nbr;
1840       l_om_session_key.session_item_id := l_order_line_rec.configuration_id;
1841       --
1842       l_macd_processing := csi_interface_pkg.check_macd_processing
1843                                ( p_config_session_key => l_om_session_key,
1844                                  x_return_status      => x_return_status
1845                                );
1846       --
1847       IF x_return_status <> fnd_api.g_ret_sts_success THEN
1848          RAISE fnd_api.g_exc_error;
1849       END IF;
1850 
1851       IF NOT l_macd_processing THEN
1852          l_order_line_rec.macd_order_line := fnd_api.g_false ;
1853       ELSE
1854          l_order_line_rec.macd_order_line := fnd_api.g_true ;
1855       END IF;
1856 
1857      END IF;
1858      x_order_line_rec := l_order_line_rec;
1859 
1860   EXCEPTION
1861     WHEN fnd_api.g_exc_error THEN
1862       x_return_status := fnd_api.g_ret_sts_error;
1863     WHEN others THEN
1864       fnd_message.set_name('CSI','CSI_INT_ORD_LINE_MISSING');
1865       fnd_message.set_token('MTL_TRANSACTION_ID',p_mtl_transaction_id);
1866       fnd_msg_pub.add;
1867       x_return_status := fnd_api.g_ret_sts_error;
1868 
1869   END get_order_line_dtls;
1870 
1871   /* Added p_order_header_id as part of fix for Bug : 2897324 */
1872 
1873   PROCEDURE get_split_order_line(
1874     p_order_line_id     IN  NUMBER,
1875     p_order_header_id   IN  NUMBER,
1876     x_split_ord_line_id OUT NOCOPY NUMBER,
1877     x_return_status     OUT NOCOPY VARCHAR2)
1878   IS
1879   BEGIN
1880     api_log('get_split_order_line');
1881     x_return_status  := fnd_api.g_ret_sts_success;
1882 
1883     /* Added p_order_header_id as part of fix for Bug : 2897324 */
1884 
1885     SELECT line_id
1886     INTO   x_split_ord_line_id
1887     FROM   oe_order_lines_all
1888     WHERE  split_from_line_id = p_order_line_id
1889     AND    header_id          = p_order_header_id;
1890 
1891   EXCEPTION
1892     WHEN no_data_found THEN
1893       x_return_status  := fnd_api.g_ret_sts_success;
1894     WHEN too_many_rows THEN
1895       x_return_status  := fnd_api.g_ret_sts_success;
1896     WHEN others THEN
1897       fnd_message.set_name('CSI','CSI_INT_SPL_ORD_LINE_MISSING');
1898       fnd_message.set_token('ORDER_LINE_ID', p_order_line_id);
1899       fnd_msg_pub.add;
1900       x_return_status :=  fnd_api.g_ret_sts_error;
1901   END get_split_order_line;
1902 
1903   PROCEDURE get_sub_type_rec(
1904     p_sub_type_id      IN NUMBER,
1905     p_trx_type_id      IN NUMBER,
1906     x_trx_sub_type_rec OUT NOCOPY csi_order_ship_pub.txn_sub_type_rec,
1907     x_return_status    OUT NOCOPY VARCHAR2)
1908   IS
1909   BEGIN
1910     api_log('get_sub_type_rec');
1911     x_return_status  := fnd_api.g_ret_sts_success;
1912     SELECT sub_type_id   ,
1913            src_change_owner_to_code,
1914            src_status_id,
1915            nvl(src_change_owner,'N'),
1916            transaction_type_id,
1917            non_src_change_owner_to_code,
1918            non_src_status_id,
1919            nvl(non_src_change_owner,'N'),
1920            nvl(src_reference_reqd,'N'),
1921            nvl(non_src_reference_reqd,'N'),
1922            nvl(src_return_reqd,'N'),
1923            non_src_return_reqd
1924     INTO   x_trx_sub_type_rec.sub_type_id,
1925            x_trx_sub_type_rec.src_chg_owner_code,
1926            x_trx_sub_type_rec.src_status_id,
1927            x_trx_sub_type_rec.src_change_owner,
1928            x_trx_sub_type_rec.trx_type_id,
1929            x_trx_sub_type_rec.nsrc_chg_owner_code,
1930            x_trx_sub_type_rec.nsrc_status_id,
1931            x_trx_sub_type_rec.nsrc_change_owner,
1932            x_trx_sub_type_rec.src_reference_reqd,
1933            x_trx_sub_type_rec.nsrc_reference_reqd,
1934            x_trx_sub_type_rec.src_return_reqd,
1935            x_trx_sub_type_rec.nsrc_return_reqd
1936     FROM   csi_txn_sub_types
1937     WHERE  sub_type_id = p_sub_type_id
1938     AND    transaction_type_id = p_trx_type_id;
1939 
1940   EXCEPTION
1941     WHEN others THEN
1942       fnd_message.set_name('CSI','CSI_INT_SUB_TYPE_REC_MISSING');
1943       fnd_message.set_token('SUB_TYPE_ID', p_sub_type_id);
1944       fnd_message.set_token('TRANSACTION_TYPE_ID', p_trx_type_id);
1945       fnd_msg_pub.add;
1946       x_return_status := fnd_api.g_ret_sts_error;
1947   END get_sub_type_rec;
1948 
1949 PROCEDURE get_inst_relation
1950  (  p_ii_relationship_id IN NUMBER,
1951     x_object_id          OUT NOCOPY NUMBER ,
1952     x_subject_id         OUT NOCOPY NUMBER ,
1953     x_return_status      OUT NOCOPY VARCHAR2
1954    )  IS
1955 
1956 BEGIN
1957 
1958   api_log('get_inst_relation');
1959 
1960 x_return_status  := fnd_api.g_ret_sts_success;
1961 
1962 SELECT
1963       object_id,
1964       subject_id
1965 INTO  x_object_id,
1966       x_subject_id
1967 FROM   csi_ii_relationships
1968 WHERE  relationship_id = p_ii_relationship_id
1969  AND   ((active_end_date is null) OR
1970         (active_end_date > sysdate));
1971 
1972 exception
1973  when others then
1974         fnd_message.set_name('CSI','CSI_INT_INV_II_REL_ID');
1975         fnd_message.set_token('RELATIONSHIP_ID', p_ii_relationship_id);
1976         fnd_msg_pub.add;
1977     x_return_status := fnd_api.g_ret_sts_error;
1978 END get_inst_relation;
1979 
1980   PROCEDURE get_model_inst_lst(
1981     p_parent_line_id  IN  number,
1982     x_model_inst_tbl  OUT NOCOPY csi_order_ship_pub.model_inst_tbl,
1983     x_return_status   OUT NOCOPY varchar2)
1984   IS
1985 
1986     l_ind binary_integer := 0;
1987 
1988     CURSOR parent_inst_cur IS
1989       SELECT cii.instance_id,
1990              'N' process_flag
1991       FROM   csi_item_instances cii,
1992              oe_order_lines_all oel
1993       WHERE  oel.line_id               = p_parent_line_id
1994       AND    cii.inventory_item_id     = oel.inventory_item_id
1995       AND    cii.last_oe_order_line_id = oel.line_id;
1996 
1997   BEGIN
1998 
1999     api_log('get_model_inst_lst');
2000 
2001     FOR parent_inst_rec in parent_inst_cur
2002     LOOP
2003       l_ind := l_ind +1;
2004       x_model_inst_tbl(l_ind).parent_line_id := p_parent_line_id;
2005       x_model_inst_tbl(l_ind).instance_id    := parent_inst_rec.instance_id;
2006       x_model_inst_tbl(l_ind).process_flag   := parent_inst_rec.process_flag;
2007     END LOOP;
2008 
2009   END get_model_inst_lst;
2010 
2011 --fix for 5096435
2012 PROCEDURE get_qty_ratio
2013  ( p_order_line_qty   IN NUMBER,
2014    p_order_item_id    IN NUMBER,
2015    p_model_remnant_flag IN VARCHAR2,
2016    p_link_to_line_id  IN NUMBER,
2017    x_qty_ratio        OUT NOCOPY NUMBER,
2018    x_return_status    OUT NOCOPY VARCHAR2
2019    ) IS
2020 
2021  l_ordered_quantity   NUMBER;
2022  l_parent_line_id     NUMBER;
2023  l_ib_trackable_flag  VARCHAR2(1);
2024  l_order_line_qty     NUMBER;
2025 
2026 BEGIN
2027 
2028   api_log('get_qty_ratio');
2029 
2030 
2031   /* Initialize API return status to success */
2032   x_return_status := fnd_api.g_ret_sts_success;
2033 
2034  IF nvl(p_model_remnant_flag,'N') = 'Y' THEN
2035    BEGIN
2036 	select sum(ordered_quantity)
2037 	into l_order_line_qty
2038 	from oe_order_lines_all
2039 	where link_to_line_id = p_link_to_line_id
2040 	and inventory_item_id = p_order_item_id
2041 	and model_remnant_flag = 'Y';
2042   EXCEPTION
2043     WHEN no_data_found THEN
2044         fnd_message.set_name('CSI','CSI_INT_MOD_INST_MISSING');
2045         fnd_message.set_token('LINE_ID',p_link_to_line_id);
2046         fnd_msg_pub.add;
2047         l_ordered_quantity := 0;
2048     WHEN others THEN
2049         fnd_message.set_name('CSI','CSI_INT_MOD_INST_MISSING');
2050         fnd_message.set_token('LINE_ID',p_link_to_line_id);
2051         fnd_msg_pub.add;
2052         l_ordered_quantity := 0;
2053    END ;
2054   ELSE
2055    l_order_line_qty := p_order_line_qty;
2056  END IF;
2057 
2058 
2059   BEGIN
2060     SELECT ordered_quantity
2061      INTO  l_ordered_quantity
2062     FROM  oe_order_lines_all
2063     WHERE line_id  = p_link_to_line_id;
2064 
2065   EXCEPTION
2066     WHEN no_data_found THEN
2067         fnd_message.set_name('CSI','CSI_INT_MOD_INST_MISSING');
2068         fnd_message.set_token('LINE_ID',p_link_to_line_id);
2069         fnd_msg_pub.add;
2070         l_ordered_quantity := 0;
2071     WHEN others THEN
2072         fnd_message.set_name('CSI','CSI_INT_MOD_INST_MISSING');
2073         fnd_message.set_token('LINE_ID',p_link_to_line_id);
2074         fnd_msg_pub.add;
2075         l_ordered_quantity := 0;
2076   END ;
2077 
2078   -- Begin Fix for Bug 3419252
2079   Begin
2080     SELECT  a.link_to_line_id,
2081             nvl(msi.comms_nl_trackable_flag,'N')
2082     INTO    l_parent_line_id,
2083             l_ib_trackable_flag
2084     FROM    oe_order_lines_all a,
2085             mtl_system_items msi,
2086             oe_system_parameters_all osp
2087     WHERE   a.line_id = p_link_to_line_id
2088     AND     osp.org_id = a.org_id
2089     AND     msi.inventory_item_id = a.inventory_item_id
2090     AND     msi.organization_id   = osp.master_organization_id;
2091 
2092     debug('Parent Line ID '||l_parent_line_id);
2093     debug('IB Trackable   '||l_ib_trackable_flag);
2094 
2095   Exception
2096     WHEN no_data_found THEN
2097         fnd_message.set_name('CSI','CSI_INT_MOD_INST_MISSING');
2098         fnd_message.set_token('LINE_ID',p_link_to_line_id);
2099         fnd_msg_pub.add;
2100         l_ordered_quantity := 0;
2101   End;
2102 
2103   IF l_parent_line_id is null
2104     AND
2105      l_ib_trackable_flag <> 'Y'
2106   THEN
2107     l_ordered_quantity := 1;
2108   END IF;
2109   -- End fix for Bug 3419252
2110 
2111   debug('p_order_line_qty   = '||p_order_line_qty);
2112   debug('l_ordered_quantity = '||l_ordered_quantity);
2113 
2114   x_qty_ratio := l_order_line_qty/l_ordered_quantity;
2115 
2116   debug('Qty Ratio ='||x_qty_ratio);
2117 
2118 END get_qty_ratio;
2119 
2120 PROCEDURE get_link_to_line_id
2121  ( x_link_to_line_id  IN OUT NOCOPY NUMBER,
2122    x_return_status    OUT NOCOPY    VARCHAR2
2123   ) IS
2124 
2125 l_dummy           VARCHAR2(1);
2126 l_found           BOOLEAN := FALSE;
2127 l_line_id	  NUMBER;
2128 
2129 BEGIN
2130 
2131   api_log('get_link_to_line_id');
2132 
2133   /* Initialize API return status to success */
2134   x_return_status := fnd_api.g_ret_sts_success;
2135 
2136  WHILE NOT(l_found) LOOP
2137 
2138   BEGIN
2139     SELECT 'x'
2140      INTO  l_dummy
2141     FROM mtl_system_items msi,
2142          oe_order_lines_all orl,
2143          oe_order_headers_all orh
2144     WHERE msi.inventory_item_id = orl.inventory_item_id
2145      AND  msi.organization_id   = NVL(orl.ship_from_org_id,orh.ship_from_org_id)
2146      AND  orl.header_id         = orh.header_id
2147      AND  msi.comms_nl_trackable_flag = 'Y'
2148      AND  orl.line_id           = x_link_to_line_id;
2149 
2150     l_found := TRUE;
2151   EXCEPTION
2152     WHEN no_data_found THEN
2153 
2154 
2155         Begin
2156           SELECT link_to_line_id , line_id
2157            INTO  x_link_to_line_id, l_line_id
2158            FROM  oe_order_lines_all
2159           WHERE  line_id = x_link_to_line_id;
2160 
2161           IF x_link_to_line_id IS NULL THEN
2162             l_found := TRUE;
2163             x_link_to_line_id := l_line_id ; -- Bug 2401138 to set the link to line id correctly when the Top Model is identified in the loop
2164           END IF;
2165 
2166         exception
2167         when no_data_found then --fix for bug5045398--
2168           debug('Passed link_to_line_id '||x_link_to_line_id||' does not exists in oe order lines');
2169           fnd_message.set_name('CSI','CSI_OE_LINK_TO_LINE_ID_INVALID');
2170           fnd_message.set_token('OE_LINK_TO_LINE_ID', x_link_to_line_id);
2171           fnd_msg_pub.add;
2172           x_return_status := fnd_api.g_ret_sts_error;
2173           l_found := TRUE;
2174         --end of fix--
2175         end;
2176     WHEN others THEN
2177         fnd_message.set_name('CSI','CSI_INT_MOD_INST_MISSING');
2178         fnd_message.set_token('LINE_ID',x_link_to_line_id);
2179         fnd_msg_pub.add;
2180   END ;
2181 
2182  END LOOP; --end of while loop
2183 
2184 END get_link_to_line_id;
2185 
2186 
2187 PROCEDURE build_inst_ii_tbl
2188     ( p_orig_inst_id     IN NUMBER,
2189       p_txn_ii_rltns_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
2190       p_new_instance_tbl IN csi_datastructures_pub.instance_tbl,
2191       x_return_status    OUT NOCOPY VARCHAR2
2192      ) IS
2193 
2194   l_temp_txn_ii_rltns_rec csi_t_datastructures_grp.txn_ii_rltns_rec;
2195   l_start                 NUMBER;
2196   l_ind                   BINARY_INTEGER;
2197 
2198 BEGIN
2199 
2200   api_log('build_inst_ii_tbl');
2201 
2202  x_return_status := fnd_api.g_ret_sts_success;
2203 
2204  IF p_txn_ii_rltns_tbl.count > 0 THEN
2205    FOR i in p_txn_ii_rltns_tbl.first..p_txn_ii_rltns_tbl.last LOOP
2206      IF p_txn_ii_rltns_tbl(i).subject_id = p_orig_inst_id THEN
2207         p_txn_ii_rltns_tbl(i).subject_id :=  p_new_instance_tbl(1).instance_id ;
2208         l_temp_txn_ii_rltns_rec := p_txn_ii_rltns_tbl(i);
2209         exit;
2210      END IF;
2211    END LOOP;
2212  END IF;
2213 
2214  l_start := p_new_instance_tbl.first + 1 ;
2215  l_ind   := p_txn_ii_rltns_tbl.count + 1;
2216 
2217  IF p_new_instance_tbl.count > 0 THEN
2218    FOR i in l_start..p_new_instance_tbl.last LOOP
2219        p_txn_ii_rltns_tbl(l_ind) := l_temp_txn_ii_rltns_rec;
2220        p_txn_ii_rltns_tbl(l_ind).subject_id := p_new_instance_tbl(i).instance_id;
2221    END LOOP;
2222  END IF;
2223 
2224 END build_inst_ii_tbl;
2225 
2226   PROCEDURE update_txn_line_dtl(
2227     p_source_trx_id    IN NUMBER,
2228     p_source_trx_table IN VARCHAR2,
2229     p_api_name         IN VARCHAR2,
2230     p_error_message    IN VARCHAR2)
2231   IS
2232     l_literal1   VARCHAR2(30) := 'PROCESSED';
2233   BEGIN
2234 
2235     UPDATE csi_t_txn_line_details a
2236     SET    error_code = p_api_name,
2237            error_explanation = substr(p_error_message,1,240),
2238            processing_status = 'ERROR'
2239     WHERE  a.processing_status <> l_literal1
2240     AND    a.source_transaction_flag = 'Y'
2241     AND    a.transaction_line_id =  (SELECT b.transaction_line_id -- changes for the bug 2851485
2242                     FROM csi_t_transaction_lines b
2243                     WHERE -- a.transaction_line_id = b.transaction_line_id AND -- Commented for Perf Bug 4311676
2244                     b.source_transaction_id    = p_source_trx_id
2245                     AND  b.source_transaction_table = p_source_trx_table);
2246 
2247     debug('No of rows updated= '||sql%rowcount);
2248 
2249   END update_txn_line_dtl;
2250 
2251   /* logic to check if wip has created some relations */
2252   FUNCTION wip_config_exists(
2253     p_instance_id      IN  NUMBER)
2254   RETURN boolean
2255   IS
2256 
2257     l_config_exists        BOOLEAN := FALSE;
2258     l_wip_job_id           NUMBER;
2259     l_location_type_code   VARCHAR2(30);
2260     l_instance_usage_code  VARCHAR2(30);
2261 
2262     CURSOR rltns_cur(pc_instance_id IN number) IS
2263       SELECT subject_id
2264       FROM   csi_ii_relationships
2265       WHERE  object_id              = pc_instance_id  -- parent instance id
2266       AND    relationship_type_code = 'COMPONENT-OF'
2267       AND    sysdate BETWEEN nvl(active_start_date, sysdate-1)
2268                      AND     nvl(active_end_date  , sysdate+1);
2269   BEGIN
2270 
2271     FOR rltns_rec IN rltns_cur(p_instance_id)
2272     LOOP
2273 
2274       SELECT last_wip_job_id,
2275              location_type_code,
2276              instance_usage_code
2277       INTO   l_wip_job_id,
2278              l_location_type_code,
2279              l_instance_usage_code
2280       FROM   csi_item_instances
2281       WHERE  instance_id = rltns_rec.subject_id;
2282 
2283       IF l_instance_usage_code = 'IN_RELATIONSHIP' THEN
2284         debug('  configuration found. no explosion.');
2285         l_config_exists := TRUE;
2286         exit;
2287       END IF;
2288     END LOOP;
2289 
2290     RETURN l_config_exists;
2291 
2292   END wip_config_exists;
2293 
2294   FUNCTION check_standard_bom(
2295     p_order_line_rec       IN csi_order_ship_pub.order_line_rec)
2296   RETURN BOOLEAN
2297   IS
2298 
2299     l_bom_item_type        mtl_system_items.bom_item_type%TYPE;
2300     l_bom_found            varchar2(1);
2301     l_return_status        varchar2(1) := fnd_api.g_ret_sts_success;
2302     l_explosion_level      number;
2303     l_explode_flag         varchar2(3);
2304     l_leaf_node            varchar2(100);
2305     l_item_type_code       varchar2(30);
2306     no_explosion           exception;
2307 
2308   BEGIN
2309 
2310     api_log('check_standard_bom');
2311 
2312     l_explode_flag := nvl(fnd_profile.value('CSI_EXPLODE_BOM'),'N');
2313     debug('  profile_explode_bom     : '||l_explode_flag);
2314     debug('  inv_item_id             : '||p_order_line_rec.inv_item_id);
2315     debug('  vld_org_id              : '||p_order_line_rec.inv_org_id);
2316 
2317     IF nvl(l_explode_flag,'N') <> 'Y' THEN
2318       debug('  explode bom profile option is not set. no explosion');
2319       raise no_explosion;
2320     END IF;
2321 
2322     IF p_order_line_rec.bom_item_type <> 4  THEN
2323       debug('  bom item type in item master is not standard. no explosion');
2324       RAISE no_explosion;
2325     END IF;
2326 
2327 
2328     /* check if this item is at the leaf node */
2329     BEGIN
2330       SELECT 'Y'
2331       INTO   l_leaf_node
2332       FROM   sys.dual
2333       WHERE  exists (SELECT 'X' FROM oe_order_lines_all
2334                      WHERE  header_id       = p_order_line_rec.header_id
2335                      AND    link_to_line_id = p_order_line_rec.order_line_id);
2336 
2337       debug('  order line is not the leaf node in oe configuration. no explosion');
2338       RAISE no_explosion;
2339     EXCEPTION
2340       WHEN no_data_found THEN
2341         null;
2342     END;
2343 
2344     BEGIN
2345       SELECT 'Y'
2346       INTO   l_bom_found
2347       FROM   bom_bill_of_materials
2348       WHERE  assembly_item_id = p_order_line_rec.inv_item_id
2349       AND    organization_id  = p_order_line_rec.inv_org_id
2350       AND    alternate_bom_designator is NULL;
2351 
2352     EXCEPTION
2353       when no_data_found THEN
2354         debug('  primary bill of material not found. no explosion');
2355         RAISE no_explosion;
2356     END;
2357 
2358     /* 2457414 -- added this block */
2359     /* check if the item is completed by a wip job (config items) */
2360     /* config items need to be eliminated in the bom explosion    */
2361     DECLARE
2362       l_wip_job_id  number;
2363     BEGIN
2364 
2365       SELECT wip_entity_id
2366       INTO   l_wip_job_id
2367       FROM   wip_discrete_jobs
2368       WHERE  primary_item_id = p_order_line_rec.inv_item_id
2369       AND    organization_id = p_order_line_rec.inv_org_id
2370       AND    source_line_id  = p_order_line_rec.order_line_id
2371       AND    status_type     <> 7; -- exclude the cancelled job
2372 
2373       debug('  wip job exists and configuration will be build there. no explosion.');
2374       raise no_explosion;
2375 
2376     EXCEPTION
2377       WHEN no_data_found THEN
2378         null;
2379       WHEN too_many_rows THEN
2380         debug('  wip job exists and configuration will be build there. no explosion.');
2381         raise no_explosion;
2382     END;
2383 
2384     IF p_order_line_rec.item_type_code = 'CONFIG' THEN
2385       debug('  config item shipment. no explosion');
2386       RAISE no_explosion;
2387     END IF;
2388 
2389     debug('  check_standard_bom      : TRUE');
2390     RETURN TRUE;
2391 
2392   EXCEPTION
2393     WHEN no_explosion THEN
2394       debug('  check_standard_bom      : FALSE');
2395       RETURN FALSE;
2396     WHEN fnd_api.g_exc_error THEN
2397       RETURN FALSE;
2398   END check_standard_bom;
2399 
2400 PROCEDURE get_parties_and_accounts(
2401     p_instance_id      IN     number,
2402     p_tld_rec          IN     csi_t_datastructures_grp.txn_line_detail_rec,
2403     p_t_pty_tbl        IN     csi_t_datastructures_grp.txn_party_detail_tbl,
2404     p_t_pty_acct_tbl   IN     csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
2405     p_owner_pty_rec    IN     csi_datastructures_pub.party_rec,
2406     p_owner_acct_rec   IN     csi_datastructures_pub.party_account_rec,
2407     p_order_line_rec   IN     csi_order_ship_pub.order_line_rec,
2408     x_i_pty_tbl           OUT nocopy csi_datastructures_pub.party_tbl,
2409     x_i_pty_acct_tbl      OUT nocopy csi_datastructures_pub.party_account_tbl,
2410     x_return_status       OUT nocopy varchar2)
2411   IS
2412 
2413     l_ship_to_con_entered     boolean := FALSE;
2414     l_bill_to_con_entered     boolean := FALSE;
2415 
2416     l_owner_inst_pty_id       number;
2417     l_owner_txn_pty_dtl_id    number;
2418 
2419     l_contact_party_id        number;
2420     l_con_parent_tbl_index    number;
2421 	l_con_owner_tbl_index     number;
2422 
2423     l_init_pty_rec            csi_datastructures_pub.party_rec;
2424 
2425     l_pty_ind                 binary_integer := 0;
2426     l_pa_ind                  binary_integer := 0;
2427 
2428     l_pty_rec                 csi_datastructures_pub.party_rec;
2429     l_pty_tbl                 csi_datastructures_pub.party_tbl;
2430 
2431 	l_own_con_tbl             csi_datastructures_pub.party_tbl;
2432     l_con_pty_tbl             csi_datastructures_pub.party_tbl;
2433 
2434     l_pa_rec                  csi_datastructures_pub.party_account_rec;
2435     l_pa_tbl                  csi_datastructures_pub.party_account_tbl;
2436 
2437     l_return_status           varchar2(1) := fnd_api.g_ret_sts_success;
2438     l_msg_count               number;
2439     l_msg_data                varchar2(2000);
2440 
2441     PROCEDURE convert_tpty_to_ipty(
2442       p_instance_id       IN  number,
2443       p_t_party_rec       IN  csi_t_datastructures_grp.txn_party_detail_rec,
2444       x_i_party_rec       OUT nocopy  csi_datastructures_pub.party_rec)
2445     IS
2446       l_insance_party_id  number;
2447       l_ovn               number;
2448     BEGIN
2449       x_i_party_rec.instance_party_id      := p_t_party_rec.instance_party_id;
2450       x_i_party_rec.instance_id            := p_instance_id;
2451       x_i_party_rec.party_id               := p_t_party_rec.party_source_id;
2452       x_i_party_rec.party_source_table     := p_t_party_rec.party_source_table;
2453       x_i_party_rec.relationship_type_code := p_t_party_rec.relationship_type_code;
2454       x_i_party_rec.contact_flag           := p_t_party_rec.contact_flag;
2455       x_i_party_rec.active_start_date      := fnd_api.g_miss_date;
2456       x_i_party_rec.active_end_date        := p_t_party_rec.active_end_date;
2457       x_i_party_rec.context                := p_t_party_rec.context;
2458       x_i_party_rec.attribute1             := p_t_party_rec.attribute1;
2459       x_i_party_rec.attribute2             := p_t_party_rec.attribute2;
2460       x_i_party_rec.attribute3             := p_t_party_rec.attribute3;
2461       x_i_party_rec.attribute4             := p_t_party_rec.attribute4;
2462       x_i_party_rec.attribute5             := p_t_party_rec.attribute5;
2463       x_i_party_rec.attribute6             := p_t_party_rec.attribute6;
2464       x_i_party_rec.attribute7             := p_t_party_rec.attribute7;
2465       x_i_party_rec.attribute8             := p_t_party_rec.attribute8;
2466       x_i_party_rec.attribute9             := p_t_party_rec.attribute9;
2467       x_i_party_rec.attribute10            := p_t_party_rec.attribute10;
2468       x_i_party_rec.attribute11            := p_t_party_rec.attribute11;
2469       x_i_party_rec.attribute12            := p_t_party_rec.attribute12;
2470       x_i_party_rec.attribute13            := p_t_party_rec.attribute13;
2471       x_i_party_rec.attribute14            := p_t_party_rec.attribute14;
2472       x_i_party_rec.attribute15            := p_t_party_rec.attribute15;
2473 
2474       IF nvl(p_t_party_rec.instance_party_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
2475         BEGIN
2476           SELECT instance_party_id,
2477                  object_version_number
2478           INTO   x_i_party_rec.instance_party_id,
2479                  x_i_party_rec.object_version_number
2480           FROM   csi_i_parties
2481           WHERE  instance_id            = p_instance_id
2482           AND    party_id               = x_i_party_rec.party_id
2483           AND    relationship_type_code = x_i_party_rec.relationship_type_code
2484           AND    contact_flag           = x_i_party_rec.contact_flag;
2485         EXCEPTION
2486           WHEN no_data_found THEN
2487             x_i_party_rec.object_version_number  := fnd_api.g_miss_num;
2488         END;
2489       /*null check added-bug 6455823*/
2490       ELSIF Nvl(p_t_party_rec.instance_party_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
2491         SELECT object_version_number
2492         INTO   x_i_party_rec.object_version_number
2493         FROM   csi_i_parties
2494         WHERE  instance_party_id = p_t_party_rec.instance_party_id;
2495       END IF;
2496     END convert_tpty_to_ipty;
2497 
2498     PROCEDURE convert_tpa_to_ipa(
2499       p_instance_party_id   IN  number,
2500       p_parent_tbl_index    IN  number,
2501       p_order_line_rec      IN  csi_order_ship_pub.order_line_rec,
2502       p_t_pa_rec            IN  csi_t_datastructures_grp.txn_pty_acct_detail_rec,
2503       x_i_pa_rec            OUT nocopy csi_datastructures_pub.party_account_rec)
2504     IS
2505     BEGIN
2506       x_i_pa_rec.parent_tbl_index       := p_parent_tbl_index;
2507       x_i_pa_rec.ip_account_id          := p_t_pa_rec.ip_account_id;
2508       x_i_pa_rec.instance_party_id      := p_instance_party_id;
2509       x_i_pa_rec.party_account_id       := p_t_pa_rec.account_id;
2510       x_i_pa_rec.relationship_type_code := p_t_pa_rec.relationship_type_code;
2511       x_i_pa_rec.bill_to_address        := p_t_pa_rec.bill_to_address_id ;
2512       x_i_pa_rec.ship_to_address        := p_t_pa_rec.ship_to_address_id;
2513       x_i_pa_rec.active_end_date        := p_t_pa_rec.active_end_date;
2514       x_i_pa_rec.active_end_date        := p_t_pa_rec.active_end_date;
2515       x_i_pa_rec.context                := p_t_pa_rec.context;
2516       x_i_pa_rec.attribute1             := p_t_pa_rec.attribute1;
2517       x_i_pa_rec.attribute2             := p_t_pa_rec.attribute2;
2518       x_i_pa_rec.attribute3             := p_t_pa_rec.attribute3;
2519       x_i_pa_rec.attribute4             := p_t_pa_rec.attribute4;
2520       x_i_pa_rec.attribute5             := p_t_pa_rec.attribute5;
2521       x_i_pa_rec.attribute6             := p_t_pa_rec.attribute6;
2522       x_i_pa_rec.attribute7             := p_t_pa_rec.attribute7;
2523       x_i_pa_rec.attribute8             := p_t_pa_rec.attribute8;
2524       x_i_pa_rec.attribute9             := p_t_pa_rec.attribute9;
2525       x_i_pa_rec.attribute10            := p_t_pa_rec.attribute10;
2526       x_i_pa_rec.attribute11            := p_t_pa_rec.attribute11;
2527       x_i_pa_rec.attribute12            := p_t_pa_rec.attribute12;
2528       x_i_pa_rec.attribute13            := p_t_pa_rec.attribute13;
2529       x_i_pa_rec.attribute14            := p_t_pa_rec.attribute14;
2530       x_i_pa_rec.attribute15            := p_t_pa_rec.attribute15;
2531 
2532       IF nvl(p_t_pa_rec.ip_account_id, fnd_api.g_miss_num) = fnd_api.g_miss_num
2533          AND
2534          nvl(p_instance_party_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num
2535       THEN
2536         BEGIN
2537           SELECT ip_account_id,
2538                  object_version_number
2539           INTO   x_i_pa_rec.ip_account_id,
2540                  x_i_pa_rec.object_version_number
2541           FROM   csi_ip_accounts
2542           WHERE  instance_party_id      = p_instance_party_id
2543           AND    party_account_id       = x_i_pa_rec.party_account_id
2544           AND    relationship_type_code = x_i_pa_rec.relationship_type_code;
2545         EXCEPTION
2546           WHEN no_data_found THEN
2547             x_i_pa_rec.object_version_number := 1;
2548         END;
2549       END IF;
2550 
2551       IF nvl(x_i_pa_rec.bill_to_address, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
2552         x_i_pa_rec.bill_to_address := p_order_line_rec.invoice_to_org_id;
2553       END IF;
2554 
2555       IF nvl(x_i_pa_rec.ship_to_address, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
2556         x_i_pa_rec.ship_to_address := p_order_line_rec.ship_to_org_id;
2557       END IF;
2558 
2559     END convert_tpa_to_ipa;
2560 
2561     PROCEDURE get_contact_parties(
2562       p_instance_id       IN  number,
2563       p_t_party_dtl_id    IN  number,
2564       p_t_pty_tbl       IN  csi_t_datastructures_grp.txn_party_detail_tbl,
2565       x_i_pty_tbl       OUT nocopy  csi_datastructures_pub.party_tbl)
2566     IS
2567       x_ind               binary_integer := 0;
2568       l_i_pty_rec         csi_datastructures_pub.party_rec;
2569     BEGIN
2570       IF p_t_pty_tbl.COUNT > 0 THEN
2571         FOR l_ind IN p_t_pty_tbl.FIRST .. p_t_pty_tbl.LAST
2572         LOOP
2573           IF p_t_pty_tbl(l_ind).contact_party_id = p_t_party_dtl_id THEN
2574             convert_tpty_to_ipty(
2575               p_instance_id  => p_instance_id,
2576               p_t_party_rec  => p_t_pty_tbl(l_ind),
2577               x_i_party_rec  => l_i_pty_rec);
2578             x_ind := x_ind + 1;
2579             x_i_pty_tbl(x_ind) := l_i_pty_rec;
2580           END IF;
2581         END LOOP;
2582       END IF;
2583     END get_contact_parties;
2584 
2585   BEGIN
2586 
2587     x_return_status := fnd_api.g_ret_sts_success;
2588 
2589     api_log('get_parties_and_accounts');
2590 
2591     BEGIN
2592       SELECT instance_party_id
2593       INTO   l_owner_inst_pty_id
2594       FROM   csi_i_parties
2595       WHERE  instance_id = p_instance_id
2596       AND    relationship_type_code = 'OWNER';
2597     EXCEPTION
2598       WHEN no_data_found THEN
2599         l_owner_inst_pty_id := null;
2600     END;
2601 
2602     /* loop to find out the owner txn party detail id */
2603     IF p_t_pty_tbl.count > 0 THEN
2604       FOR ind in p_t_pty_tbl.FIRST..p_t_pty_tbl.LAST LOOP
2605         IF p_t_pty_tbl(ind).relationship_type_code = 'OWNER' THEN
2606           l_owner_txn_pty_dtl_id  := p_t_pty_tbl(ind).txn_party_detail_id;
2607         END IF;
2608       END LOOP;
2609     END IF;
2610 
2611     IF nvl(p_owner_pty_rec.party_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
2612       l_pty_ind := l_pty_ind + 1;
2613       l_pty_tbl(l_pty_ind) := p_owner_pty_rec;
2614 
2615       IF nvl(p_owner_acct_rec.party_account_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
2616         l_pa_ind := l_pa_ind + 1;
2617         l_pa_tbl(l_pa_ind) := p_owner_acct_rec;
2618         l_pa_tbl(l_pa_ind).parent_tbl_index := l_pty_ind;
2619       END IF;
2620 
2621 	  -- To get contact for OWNER  --Bug 14507913 : Start
2622 	  get_contact_parties(
2623 		p_instance_id     => p_instance_id,
2624 		p_t_party_dtl_id  => l_owner_txn_pty_dtl_id,
2625 		p_t_pty_tbl     => p_t_pty_tbl,
2626 		x_i_pty_tbl     => l_own_con_tbl);
2627 
2628 		l_con_owner_tbl_index := l_pty_ind;
2629 
2630 		IF l_own_con_tbl.COUNT > 0 THEN
2631 
2632 			FOR con_index IN l_own_con_tbl.FIRST .. l_own_con_tbl.LAST
2633 			LOOP
2634 				l_pty_ind := l_pty_ind + 1;
2635 				l_pty_tbl(l_pty_ind) := l_own_con_tbl(con_index);
2636 				l_pty_tbl(l_pty_ind).contact_parent_tbl_index := l_con_owner_tbl_index;
2637 				l_pty_tbl(l_pty_ind).contact_ip_id := l_owner_inst_pty_id; -- Added for bug 14836908
2638 				debug(' contact_ip_id :'||l_pty_tbl(l_pty_ind).contact_ip_id);
2639 			/*	IF l_own_con_tbl(con_index).relationship_type_code = 'SHIP_TO'
2640 				AND l_own_con_tbl(con_index).contact_flag = 'Y' THEN
2641 					l_ship_to_con_entered := TRUE;
2642 				END IF;
2643 				IF l_own_con_tbl(con_index).relationship_type_code = 'BILL_TO'
2644 				AND l_own_con_tbl(con_index).contact_flag = 'Y' THEN
2645 					l_bill_to_con_entered := TRUE;
2646 				END IF;
2647 			*/
2648 			END LOOP;
2649 		END IF;
2650 		--Bug 14507913 : End
2651 	END IF;
2652 
2653     IF p_t_pty_tbl.count > 0 THEN
2654 
2655       FOR pty_ind in p_t_pty_tbl.FIRST..p_t_pty_tbl.LAST
2656       LOOP
2657 
2658         IF p_t_pty_tbl(pty_ind).relationship_type_code <> 'OWNER'
2659            AND
2660            p_t_pty_tbl(pty_ind).contact_flag = 'N'
2661         THEN
2662 
2663           convert_tpty_to_ipty(
2664             p_instance_id       => p_instance_id,
2665             p_t_party_rec       => p_t_pty_tbl(pty_ind),
2666             x_i_party_rec       => l_pty_rec);
2667 
2668           l_pty_ind := l_pty_ind + 1;
2669           l_pty_tbl(l_pty_ind) := l_pty_rec;
2670 
2671 		  /* Bug 14507913 : Commented below code and added above for checking Owner's Bill To and Ship To
2672          IF l_pty_rec.relationship_type_code = 'SHIP_TO'
2673              AND
2674              l_pty_rec.contact_flag = 'Y'
2675              AND
2676              p_t_pty_tbl(pty_ind).contact_party_id = l_owner_txn_pty_dtl_id
2677           THEN
2678             l_ship_to_con_entered := TRUE;
2679           END IF;
2680 
2681           IF l_pty_rec.relationship_type_code = 'BILL_TO'
2682              AND
2683              l_pty_rec.contact_flag = 'Y'
2684              AND
2685              p_t_pty_tbl(pty_ind).contact_party_id = l_owner_txn_pty_dtl_id
2686           THEN
2687             l_bill_to_con_entered := TRUE;
2688           END IF;
2689 */
2690 
2691           /*  Build party account table for create/update */
2692           IF p_t_pty_acct_tbl.count > 0 THEN
2693 
2694             FOR k in p_t_pty_acct_tbl.FIRST..p_t_pty_acct_tbl.LAST
2695             LOOP
2696 
2697               IF p_t_pty_acct_tbl(k).txn_party_detail_id = p_t_pty_tbl(pty_ind).txn_party_detail_id
2698               THEN
2699 
2700                 convert_tpa_to_ipa(
2701                   p_instance_party_id => l_pty_rec.instance_party_id,
2702                   p_parent_tbl_index  => l_pty_ind,
2703                   p_order_line_rec    => p_order_line_rec,
2704                   p_t_pa_rec          => p_t_pty_acct_tbl(k),
2705                   x_i_pa_rec          => l_pa_rec);
2706 
2707                 l_pa_ind := l_pa_ind + 1;
2708                 l_pa_tbl(l_pa_ind) := l_pa_rec;
2709 
2710               END IF; -- end if for pty.txn_party_detail_id = acct.txn_party_detail_id
2711             END LOOP; -- end of party acct table loop
2712           END IF; -- party account count > 0
2713 
2714           get_contact_parties(
2715             p_instance_id     => p_instance_id,
2716             p_t_party_dtl_id  => p_t_pty_tbl(pty_ind).txn_party_detail_id,
2717             p_t_pty_tbl     => p_t_pty_tbl,
2718             x_i_pty_tbl     => l_con_pty_tbl);
2719 
2720           IF l_con_pty_tbl.COUNT > 0 THEN
2721 
2722             l_con_parent_tbl_index := l_pty_ind;
2723 
2724             FOR con_ind IN l_con_pty_tbl.FIRST .. l_con_pty_tbl.LAST
2725             LOOP
2726               l_pty_ind := l_pty_ind + 1;
2727               l_pty_tbl(l_pty_ind) := l_con_pty_tbl(con_ind);
2728               l_pty_tbl(l_pty_ind).contact_parent_tbl_index := l_con_parent_tbl_index;
2729             END LOOP;
2730           END IF;
2731 
2732 
2733         END IF; -- <> 'OWNER'
2734 
2735       END LOOP;
2736 
2737     END IF; -- party table count > 0
2738 
2739     /* Build BILL_TO and SHIP_TO from OM line if the TD does not have it */
2740 	-- commenting below code
2741 	-- below code is for creating 'Bill To'/'Ship To' (contacts) for 'OWNER'  by default, even if user does not provide Installation detail at sales order.
2742 	-- but this functinality was not working in R12, It was fixed along with the bug 14507913. As customer do not want this so commenting it.
2743 	-- Bug 14507913
2744 	/*
2745     IF NOT(l_ship_to_con_entered)
2746        AND
2747        nvl(p_order_line_rec.ship_to_contact_id, fnd_api.g_miss_num ) <> fnd_api.g_miss_num
2748     THEN
2749 
2750       csi_utl_pkg.derive_party_id(
2751         p_cust_acct_role_id  => p_order_line_rec.ship_to_contact_id,
2752         x_party_id           => l_contact_party_id,
2753         x_return_status      => x_return_status );
2754 
2755       IF x_return_status <> fnd_api.g_ret_sts_success THEN
2756         RAISE fnd_api.g_exc_error;
2757       END IF;
2758 
2759       debug('  ship_to_contact_id       :'||p_order_line_rec.ship_to_contact_id);
2760       debug('  ship_to_contact_party_id :'||l_contact_party_id);
2761 
2762       l_pty_rec := l_init_pty_rec;
2763       l_pty_rec.instance_party_id      := fnd_api.g_miss_num;
2764       l_pty_rec.instance_id            := p_instance_id;
2765       l_pty_rec.party_id               := l_contact_party_id;
2766       l_pty_rec.party_source_table     := 'HZ_PARTIES';
2767       l_pty_rec.relationship_type_code := 'SHIP_TO';
2768       l_pty_rec.contact_flag           := 'Y';
2769       l_pty_rec.contact_ip_id          := l_owner_inst_pty_id;
2770       l_pty_rec.active_start_date      := fnd_api.g_miss_date;
2771       l_pty_rec.object_version_number  := fnd_api.g_miss_num;
2772 
2773       BEGIN
2774         SELECT instance_party_id,
2775                object_version_number
2776         INTO   l_pty_rec.instance_party_id,
2777                l_pty_rec.object_version_number
2778         FROM   csi_i_parties
2779         WHERE  instance_id            = p_instance_id
2780         AND    party_id               = l_pty_rec.party_id
2781         AND    relationship_type_code = l_pty_rec.relationship_type_code
2782         AND    contact_flag           = 'Y';
2783         l_pty_rec.active_end_date := null;
2784       EXCEPTION
2785         WHEN no_data_found THEN
2786           l_pty_rec.instance_party_id := null;
2787           l_pty_rec.object_version_number := 1.0;
2788       END;
2789 
2790       l_pty_ind := l_pty_ind + 1;
2791       l_pty_tbl(l_pty_ind) := l_pty_rec;
2792 	  l_pty_tbl(l_pty_ind).contact_parent_tbl_index := l_con_owner_tbl_index; --Bug 14507913
2793 
2794     END IF;
2795 
2796     IF NOT(l_bill_to_con_entered)
2797        AND
2798        nvl(p_order_line_rec.invoice_to_contact_id, fnd_api.g_miss_num ) <> fnd_api.g_miss_num
2799     THEN
2800 
2801       csi_utl_pkg.derive_party_id(
2802         p_cust_acct_role_id  => p_order_line_rec.invoice_to_contact_id,
2803         x_party_id           => l_contact_party_id,
2804         x_return_status      => x_return_status );
2805 
2806       IF x_return_status <> fnd_api.g_ret_sts_success THEN
2807         RAISE fnd_api.g_exc_error;
2808       END IF;
2809 
2810       debug('  bill_to_contact_id       :'||p_order_line_rec.invoice_to_contact_id);
2811       debug('  bill_to_contact_party_id :'||l_contact_party_id);
2812 
2813       l_pty_rec := l_init_pty_rec;
2814 
2815       l_pty_rec.instance_party_id      := fnd_api.g_miss_num;
2816       l_pty_rec.instance_id            := p_instance_id;
2817       l_pty_rec.party_id               := l_contact_party_id;
2818       l_pty_rec.party_source_table     := 'HZ_PARTIES';
2819       l_pty_rec.relationship_type_code := 'BILL_TO';
2820       l_pty_rec.contact_flag           := 'Y';
2821       l_pty_rec.contact_ip_id          := l_owner_inst_pty_id;
2822       l_pty_rec.active_start_date      := fnd_api.g_miss_date;
2823       l_pty_rec.object_version_number  := fnd_api.g_miss_num;
2824 
2825       BEGIN
2826         SELECT instance_party_id,
2827                object_version_number
2828         INTO   l_pty_rec.instance_party_id,
2829                l_pty_rec.object_version_number
2830         FROM   csi_i_parties
2831         WHERE  instance_id            = p_instance_id
2832         AND    party_id               = l_pty_rec.party_id
2833         AND    relationship_type_code = l_pty_rec.relationship_type_code
2834         AND    contact_flag           = 'Y';
2835         l_pty_rec.active_end_date := null;
2836       EXCEPTION
2837         WHEN no_data_found THEN
2838           l_pty_rec.instance_party_id     := null;
2839           l_pty_rec.object_version_number := 1.0;
2840       END;
2841 
2842       l_pty_ind := l_pty_ind + 1;
2843       l_pty_tbl(l_pty_ind) := l_pty_rec;
2844 	  l_pty_tbl(l_pty_ind).contact_parent_tbl_index := l_con_owner_tbl_index; --Bug 14507913
2845 
2846     END IF; -- l_bill_to_contact
2847 */
2848     x_i_pty_tbl     := l_pty_tbl;
2849     x_i_pty_acct_tbl  := l_pa_tbl;
2850 
2851   EXCEPTION
2852     WHEN fnd_api.g_exc_error THEN
2853       x_return_status := fnd_api.g_ret_sts_error ;
2854     WHEN fnd_api.g_exc_unexpected_error THEN
2855       x_return_status := fnd_api.g_ret_sts_unexp_error ;
2856   END get_parties_and_accounts;
2857 
2858   PROCEDURE create_txn_dtls(
2859     p_source_trx_id    IN         number,
2860     p_source_trx_table IN         varchar2,
2861     x_return_status    OUT NOCOPY varchar2)
2862   IS
2863 
2864     l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
2865     l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
2866 
2867     o_line_dtl_tbl      csi_t_datastructures_grp.txn_line_detail_tbl;
2868     o_pty_dtl_tbl       csi_t_datastructures_grp.txn_party_detail_tbl;
2869     o_pty_acct_tbl      csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
2870     o_ii_rltns_tbl      csi_t_datastructures_grp.txn_ii_rltns_tbl;
2871     o_org_assgn_tbl     csi_t_datastructures_grp.txn_org_assgn_tbl;
2872     o_ext_attrib_tbl    csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
2873     o_csi_ea_tbl        csi_t_datastructures_grp.csi_ext_attribs_tbl;
2874     o_csi_eav_tbl       csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
2875     o_txn_systems_tbl   csi_t_datastructures_grp.txn_systems_tbl;
2876 
2877     l_line_dtl_rec      csi_t_datastructures_grp.txn_line_detail_rec;
2878 
2879     l_line_dtl_tbl      csi_t_datastructures_grp.txn_line_detail_tbl;
2880     l_pty_dtl_tbl       csi_t_datastructures_grp.txn_party_detail_tbl;
2881     l_pty_acct_tbl      csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
2882     l_ii_rltns_tbl      csi_t_datastructures_grp.txn_ii_rltns_tbl;
2883     l_org_assgn_tbl     csi_t_datastructures_grp.txn_org_assgn_tbl;
2884     l_ext_attrib_tbl    csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
2885     l_csi_ea_tbl        csi_t_datastructures_grp.csi_ext_attribs_tbl;
2886     l_csi_eav_tbl       csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
2887     l_txn_systems_tbl   csi_t_datastructures_grp.txn_systems_tbl;
2888 
2889     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
2890     l_msg_count         number;
2891     l_msg_data          varchar2(2000);
2892 
2893     CURSOR tld_cur(
2894       p_src_txn_id    IN NUMBER,
2895       p_src_txn_table IN VARCHAR2)
2896     IS
2897       SELECT ctld.txn_line_detail_id,
2898              ctld.quantity,
2899              ctld.transaction_line_id,
2900              ctld.transaction_system_id,
2901              ctld.csi_system_id
2902       FROM   csi_t_txn_line_details  ctld,
2903              csi_t_transaction_lines ctl
2904       WHERE  ctl.source_transaction_id    = p_src_txn_id
2905       AND    ctl.source_transaction_table = p_src_txn_table
2906       AND    ctld.transaction_line_id     = ctl.transaction_line_id
2907       AND    ctld.quantity                > 1;
2908 
2909   BEGIN
2910 
2911     x_return_status := fnd_api.g_ret_sts_success;
2912 
2913     api_log('create_txn_dtls');
2914 
2915     FOR tld_rec IN tld_cur( p_source_trx_id, p_source_trx_table )
2916     LOOP
2917 
2918       l_txn_line_detail_query_rec.txn_line_detail_id := tld_rec.txn_line_detail_id;
2919 
2920       csi_t_txn_details_grp.get_transaction_details(
2921         p_api_version                => 1.0,
2922         p_commit                     => fnd_api.g_false,
2923         p_init_msg_list              => fnd_api.g_true,
2924         p_validation_level           => fnd_api.g_valid_level_full,
2925         p_txn_line_query_rec         => l_txn_line_query_rec,
2926         p_txn_line_detail_query_rec  => l_txn_line_detail_query_rec,
2927         x_txn_line_detail_tbl        => o_line_dtl_tbl,
2928         p_get_parties_flag           => fnd_api.g_true,
2929         x_txn_party_detail_tbl       => o_pty_dtl_tbl,
2930         p_get_pty_accts_flag         => fnd_api.g_true,
2931         x_txn_pty_acct_detail_tbl    => o_pty_acct_tbl,
2932         p_get_ii_rltns_flag          => fnd_api.g_true,
2933         x_txn_ii_rltns_tbl           => o_ii_rltns_tbl,
2934         p_get_org_assgns_flag        => fnd_api.g_true,
2935         x_txn_org_assgn_tbl          => o_org_assgn_tbl,
2936         p_get_ext_attrib_vals_flag   => fnd_api.g_true,
2937         x_txn_ext_attrib_vals_tbl    => o_ext_attrib_tbl,
2938         p_get_csi_attribs_flag       => fnd_api.g_false,
2939         x_csi_ext_attribs_tbl        => o_csi_ea_tbl,
2940         p_get_csi_iea_values_flag    => fnd_api.g_false,
2941         x_csi_iea_values_tbl         => o_csi_eav_tbl,
2942         p_get_txn_systems_flag       => fnd_api.g_false,
2943         x_txn_systems_tbl            => o_txn_systems_tbl,
2944         x_return_status              => l_return_status,
2945         x_msg_count                  => l_msg_count,
2946         x_msg_data                   => l_msg_data);
2947 
2948       IF l_return_status <> fnd_api.g_ret_sts_success THEN
2949         RAISE fnd_api.g_exc_error;
2950       END IF;
2951 
2952 
2953       debug('after csi_t_txn_details_grp.get_transaction_details for splitting  ');
2954       debug('  line_dtl_tbl.count   :'||o_line_dtl_tbl.count);
2955       debug('  pty_dtl_tbl.count    :'||o_pty_dtl_tbl.count);
2956       debug('  pty_acct_tbl.count   :'||o_pty_acct_tbl.count);
2957       debug('  org_assgn_tbl.count  :'||o_org_assgn_tbl.count);
2958       debug('  ext_attrib_tbl.count :'||o_ext_attrib_tbl.count);
2959       debug('  ii_rltns_tbl.count   :'||o_ii_rltns_tbl.count);
2960 
2961       IF o_line_dtl_tbl.COUNT > 0 THEN
2962 
2963         UPDATE csi_t_txn_line_details
2964         SET    quantity = 1
2965         WHERE  txn_line_detail_id = o_line_dtl_tbl(1).txn_line_detail_id;
2966 
2967 
2968         FOR l_index in 1..o_line_dtl_tbl(1).quantity - 1
2969         LOOP
2970 
2971           l_line_dtl_tbl      := o_line_dtl_tbl;
2972           l_pty_dtl_tbl       := o_pty_dtl_tbl;
2973           l_pty_acct_tbl      := o_pty_acct_tbl;
2974           l_ii_rltns_tbl      := o_ii_rltns_tbl;
2975           l_org_assgn_tbl     := o_org_assgn_tbl;
2976           l_ext_attrib_tbl    := o_ext_attrib_tbl;
2977           l_txn_systems_tbl   := o_txn_systems_tbl;
2978 
2979           csi_t_utilities_pvt.convert_ids_to_index(
2980             px_line_dtl_tbl    => l_line_dtl_tbl,
2981             px_pty_dtl_tbl     => l_pty_dtl_tbl,
2982             px_pty_acct_tbl    => l_pty_acct_tbl,
2983             px_ii_rltns_tbl    => l_ii_rltns_tbl,
2984             px_org_assgn_tbl   => l_org_assgn_tbl,
2985             px_ext_attrib_tbl  => l_ext_attrib_tbl,
2986             px_txn_systems_tbl => l_txn_systems_tbl);
2987 
2988           l_line_dtl_rec      := l_line_dtl_tbl(1);
2989 
2990           --l_line_dtl_rec.source_txn_line_detail_id := tld_rec.source_txn_line_detail_id;
2991           l_line_dtl_rec.txn_line_detail_id        := fnd_api.g_miss_num;
2992           l_line_dtl_rec.transaction_system_id     := tld_rec.transaction_system_id;
2993           l_line_dtl_rec.csi_system_id             := tld_rec.csi_system_id;
2994           l_line_dtl_rec.quantity                  := 1 ;
2995           l_line_dtl_rec.transaction_line_id       := tld_rec.transaction_line_id ;
2996 
2997           csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
2998             p_api_version              => 1.0,
2999             p_commit                   => fnd_api.g_false,
3000             p_init_msg_list            => fnd_api.g_true,
3001             p_validation_level         => fnd_api.g_valid_level_full,
3002             p_txn_line_dtl_index       => 1,
3003             p_txn_line_dtl_rec         => l_line_dtl_rec,
3004             px_txn_party_dtl_tbl       => l_pty_dtl_tbl,
3005             px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
3006             px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
3007             px_txn_org_assgn_tbl       => l_org_assgn_tbl,
3008             px_txn_ext_attrib_vals_tbl => l_ext_attrib_tbl,
3009             x_return_status            => l_return_status,
3010             x_msg_count                => l_msg_count,
3011             x_msg_data                 => l_msg_data);
3012 
3013           IF l_return_status <> fnd_api.g_ret_sts_success THEN
3014             RAISE fnd_api.g_exc_error;
3015           END IF;
3016 
3017         END LOOP;
3018       END IF; -- count chk
3019     END LOOP;
3020 
3021   EXCEPTION
3022     WHEN fnd_api.g_exc_error THEN
3023       x_return_status := fnd_api.g_ret_sts_error ;
3024     WHEN fnd_api.g_exc_unexpected_error THEN
3025       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3026   END create_txn_dtls;
3027 
3028   PROCEDURE conv_to_prim_uom(
3029     p_inv_organization_id IN NUMBER,
3030     p_inventory_item_id   IN NUMBER,
3031     p_uom                 IN VARCHAR2,
3032     x_txn_line_dtl_tbl    IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
3033     x_return_status       OUT NOCOPY VARCHAR2)
3034   IS
3035     l_primary_uom  varchar2(100);
3036     l_uom_rate     NUMBER;
3037   BEGIN
3038 
3039     api_log('conv_to_prim_uom');
3040 
3041     /* Initialize API return status to success */
3042     x_return_status := fnd_api.g_ret_sts_success;
3043 
3044     l_primary_uom := csi_utl_pkg.get_primay_uom(
3045        p_inv_item_id => p_inventory_item_id,
3046        p_inv_org_id  => p_inv_organization_id);
3047 
3048     debug('Primary UOM :'||l_primary_uom);
3049 
3050     /* Convert the shipped qty to UOM as in OM */
3051     inv_convert.inv_um_conversion (
3052       from_unit  => p_uom,
3053       to_unit    => l_primary_uom,
3054       item_id    => p_inventory_item_id,
3055       uom_rate   => l_uom_rate );
3056 
3057     debug('UOM Rate    :'||l_uom_rate);
3058 
3059     IF l_uom_rate = -99999 THEN
3060       debug('inv_convert.inv_um_conversion failed ');
3061       RAISE fnd_api.g_exc_error;
3062     END IF;
3063 
3064     IF x_txn_line_dtl_tbl.count > 0 THEN
3065       FOR i in x_txn_line_dtl_tbl.first..x_txn_line_dtl_tbl.last
3066       LOOP
3067         x_txn_line_dtl_tbl(i).quantity := x_txn_line_dtl_tbl(i).quantity * l_uom_rate;
3068       END LOOP;
3069     END IF;
3070 
3071   EXCEPTION
3072     WHEN fnd_api.g_exc_error THEN
3073       x_return_status := fnd_api.g_ret_sts_error ;
3074     WHEN fnd_api.g_exc_unexpected_error THEN
3075       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3076   END conv_to_prim_uom;
3077 
3078   PROCEDURE build_non_source_rec(
3079     p_transaction_line_id   IN number,
3080     p_parent_line_id        IN number,
3081     p_instance_id           IN number,
3082     x_txn_line_dtl_id       OUT NOCOPY number,
3083     x_return_status         OUT NOCOPY varchar2)
3084   IS
3085 
3086     l_instance_rec          csi_datastructures_pub.instance_rec;
3087     l_g_instance_rec        csi_datastructures_pub.instance_header_rec;
3088     l_g_ph_tbl              csi_datastructures_pub.party_header_tbl;
3089     l_g_pah_tbl             csi_datastructures_pub.party_account_header_tbl;
3090     l_g_ouh_tbl             csi_datastructures_pub.org_units_header_tbl;
3091     l_g_pa_tbl              csi_datastructures_pub.pricing_attribs_tbl;
3092     l_g_eav_tbl             csi_datastructures_pub.extend_attrib_values_tbl;
3093     l_g_ea_tbl              csi_datastructures_pub.extend_attrib_tbl;
3094     l_g_iah_tbl             csi_datastructures_pub.instance_asset_header_tbl;
3095     l_g_time_stamp          date;
3096 
3097     -- create_txn_line_dtls variables
3098     l_n_line_dtl_rec        csi_t_datastructures_grp.txn_line_detail_rec;
3099     l_n_pty_dtl_tbl         csi_t_datastructures_grp.txn_party_detail_tbl;
3100     l_n_pty_acct_tbl        csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
3101     l_n_org_assgn_tbl       csi_t_datastructures_grp.txn_org_assgn_tbl;
3102     l_n_ext_attrib_tbl      csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
3103     l_n_ii_rltns_tbl        csi_t_datastructures_grp.txn_ii_rltns_tbl;
3104 
3105     l_return_status         varchar2(1) := fnd_api.g_ret_sts_success;
3106     l_msg_count             number;
3107     l_msg_data              varchar2(4000);
3108 
3109   BEGIN
3110 
3111     x_return_status := fnd_api.g_ret_sts_success;
3112 
3113     api_log('build_non_source_rec');
3114 
3115     l_g_instance_rec.instance_id := p_instance_id;
3116 
3117     csi_t_gen_utility_pvt.dump_api_info(
3118       p_pkg_name => 'csi_item_instance_pub',
3119       p_api_name => 'get_item_instance_details');
3120 
3121     -- get the instance party and party account info
3122     csi_item_instance_pub.get_item_instance_details(
3123       p_api_version           => 1.0,
3124       p_commit                => fnd_api.g_false,
3125       p_init_msg_list         => fnd_api.g_true,
3126       p_validation_level      => fnd_api.g_valid_level_full,
3127       p_instance_rec          => l_g_instance_rec,
3128       p_get_parties           => fnd_api.g_false,
3129       p_party_header_tbl      => l_g_ph_tbl,
3130       p_get_accounts          => fnd_api.g_false,
3131       p_account_header_tbl    => l_g_pah_tbl,
3132       p_get_org_assignments   => fnd_api.g_false,
3133       p_org_header_tbl        => l_g_ouh_tbl,
3134       p_get_pricing_attribs   => fnd_api.g_false,
3135       p_pricing_attrib_tbl    => l_g_pa_tbl,
3136       p_get_ext_attribs       => fnd_api.g_false,
3137       p_ext_attrib_tbl        => l_g_eav_tbl,
3138       p_ext_attrib_def_tbl    => l_g_ea_tbl,
3139       p_get_asset_assignments => fnd_api.g_false,
3140       p_asset_header_tbl      => l_g_iah_tbl,
3141       p_time_stamp            => l_g_time_stamp,
3142       x_return_status         => l_return_status,
3143       x_msg_count             => l_msg_count,
3144       x_msg_data              => l_msg_data);
3145 
3146     IF l_return_status <> fnd_api.g_ret_sts_success THEN
3147       RAISE fnd_api.g_exc_error;
3148     END IF;
3149 
3150     l_n_line_dtl_rec.txn_line_detail_id      := fnd_api.g_miss_num;
3151     l_n_line_dtl_rec.transaction_line_id     := p_transaction_line_id;
3152     l_n_line_dtl_rec.sub_type_id             := csi_order_ship_pub.g_dflt_sub_type_id;
3153     l_n_line_dtl_rec.processing_status       := 'IN_PROCESS';
3154     l_n_line_dtl_rec.source_transaction_flag := 'N';
3155     l_n_line_dtl_rec.inventory_item_id       := l_g_instance_rec.inventory_item_id;
3156     l_n_line_dtl_rec.inventory_revision      := l_g_instance_rec.inventory_revision;
3157     /* fix for bug 4941832 */
3158     l_n_line_dtl_rec.inv_organization_id     := l_g_instance_rec.vld_organization_id;
3159     l_n_line_dtl_rec.quantity                := l_g_instance_rec.quantity;
3160     l_n_line_dtl_rec.unit_of_measure         := l_g_instance_rec.unit_of_measure;
3161     l_n_line_dtl_rec.installation_date       := sysdate;
3162     l_n_line_dtl_rec.external_reference      := 'INTERFACE';
3163     l_n_line_dtl_rec.location_type_code      := l_g_instance_rec.location_type_code;
3164     l_n_line_dtl_rec.location_id             := l_g_instance_rec.location_id;
3165     l_n_line_dtl_rec.active_start_date       := sysdate;
3166     l_n_line_dtl_rec.preserve_detail_flag    := 'Y';
3167     l_n_line_dtl_rec.instance_exists_flag    := 'Y';
3168     l_n_line_dtl_rec.instance_id             := l_g_instance_rec.instance_id;
3169     l_n_line_dtl_rec.serial_number           := l_g_instance_rec.serial_number;
3170     l_n_line_dtl_rec.mfg_serial_number_flag  := l_g_instance_rec.mfg_serial_number_flag;
3171     l_n_line_dtl_rec.lot_number              := l_g_instance_rec.lot_number;
3172     l_n_line_dtl_rec.object_version_number   := 1.0;
3173 
3174     csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
3175       p_api_version              => 1.0,
3176       p_commit                   => fnd_api.g_false,
3177       p_init_msg_list            => fnd_api.g_true,
3178       p_validation_level         => fnd_api.g_valid_level_full,
3179       p_txn_line_dtl_index       => 1,
3180       p_txn_line_dtl_rec         => l_n_line_dtl_rec,
3181       px_txn_party_dtl_tbl       => l_n_pty_dtl_tbl,
3182       px_txn_pty_acct_detail_tbl => l_n_pty_acct_tbl,
3183       px_txn_ii_rltns_tbl        => l_n_ii_rltns_tbl,
3184       px_txn_org_assgn_tbl       => l_n_org_assgn_tbl,
3185       px_txn_ext_attrib_vals_tbl => l_n_ext_attrib_tbl,
3186       x_return_status            => l_return_status,
3187       x_msg_count                => l_msg_count,
3188       x_msg_data                 => l_msg_data);
3189 
3190     IF l_return_status <> fnd_api.g_ret_sts_success THEN
3191       RAISE fnd_api.g_exc_error;
3192     END IF;
3193 
3194     debug('Non Source Txn Line Detail ID :'||l_n_line_dtl_rec.txn_line_detail_id);
3195     x_txn_line_dtl_id := l_n_line_dtl_rec.txn_line_detail_id;
3196 
3197   EXCEPTION
3198     WHEN fnd_api.g_exc_error THEN
3199       x_return_status := fnd_api.g_ret_sts_error;
3200   END build_non_source_rec;
3201 
3202   PROCEDURE build_parent_relation(
3203     p_order_line_rec    IN csi_order_ship_pub.order_line_rec,
3204     x_model_inst_tbl    IN OUT NOCOPY csi_order_ship_pub.model_inst_tbl,
3205     x_txn_line_dtl_tbl  IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
3206     x_txn_ii_rltns_tbl  IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
3207     x_return_status     OUT NOCOPY VARCHAR2)
3208   IS
3209     l_txn_ii                number := 0;
3210     l_nsrc_line_dtl_id      number;
3211     x_txn_line_dtls_lst     txn_line_dtl_tbl;
3212     l_txn_processed         varchar2(1);
3213     l_return_status         varchar2(1) := fnd_api.g_ret_sts_success;
3214 
3215     PROCEDURE filter_model_instances( --modified for bug5096435
3216      p_child_item_id    IN            number,
3217      px_model_inst_tbl  IN OUT NOCOPY csi_order_ship_pub.model_inst_tbl)
3218     IS
3219       CURSOR iir_cur(p_object_id in number, p_item_id in number) IS
3220         SELECT cii.quantity alloc_quantity
3221         FROM   csi_ii_relationships ciir,
3222                csi_item_instances   cii
3223         WHERE  ciir.object_id        = p_object_id
3224         AND    cii.instance_id       = ciir.subject_id
3225         AND    cii.inventory_item_id = p_item_id
3226         AND    sysdate BETWEEN nvl(ciir.active_start_date, sysdate - 1)
3227                        AND     nvl(ciir.active_end_date, sysdate + 1);
3228     BEGIN
3229       IF px_model_inst_tbl.COUNT > 0 THEN
3230         FOR l_ind IN px_model_inst_tbl.FIRST .. px_model_inst_tbl.LAST
3231         LOOP
3232           FOR iir_rec IN iir_cur(px_model_inst_tbl(l_ind).instance_id, p_child_item_id)
3233           LOOP
3234 	       x_model_inst_tbl(l_ind).rem_qty := x_model_inst_tbl(l_ind).rem_qty - iir_rec.alloc_quantity;
3235           END LOOP;
3236           IF x_model_inst_tbl(l_ind).rem_qty <= 0  THEN
3237             px_model_inst_tbl(l_ind).process_flag := 'Y';
3238           END IF;
3239         END LOOP;
3240       END IF;
3241     END filter_model_instances;
3242 
3243   BEGIN
3244 
3245     api_log('build_parent_relation');
3246 
3247     /* Initialize API return status to success */
3248     x_return_status := fnd_api.g_ret_sts_success;
3249 
3250     x_txn_ii_rltns_tbl.delete;
3251 
3252     filter_model_instances(
3253       p_child_item_id    => p_order_line_rec.inv_item_id,
3254       px_model_inst_tbl  => x_model_inst_tbl);
3255 
3256     /*
3257     IF x_model_inst_tbl.count > 0 THEN
3258       FOR l_mod in x_model_inst_tbl.first..x_model_inst_tbl.last
3259       LOOP
3260 
3261         build_non_source_rec(
3262           p_transaction_line_id  => p_trx_line_id,
3263           p_parent_line_id       => x_model_inst_tbl(l_mod).parent_line_id,
3264           p_instance_id          => x_model_inst_tbl(l_mod).instance_id,
3265           x_txn_line_dtl_id      => l_nsrc_line_dtl_id,
3266           x_return_status        => l_return_status);
3267 
3268         IF l_return_status <> fnd_api.g_ret_sts_success THEN
3269           RAISE fnd_api.g_exc_error;
3270         END IF;
3271 
3272         x_model_inst_tbl(l_mod).txn_line_detail_id := l_nsrc_line_dtl_id;
3273       END LOOP;
3274     END IF;
3275     */
3276 
3277     IF x_model_inst_tbl.count = 1 THEN
3278 
3279       IF x_txn_line_dtl_tbl.count > 0 THEN
3280         FOR l_ind in x_txn_line_dtl_tbl.first..x_txn_line_dtl_tbl.last
3281         LOOP
3282 
3283           build_non_source_rec(
3284             p_transaction_line_id  => p_order_line_rec.trx_line_id,
3285             p_parent_line_id       => x_model_inst_tbl(1).parent_line_id,
3286             p_instance_id          => x_model_inst_tbl(1).instance_id,
3287             x_txn_line_dtl_id      => l_nsrc_line_dtl_id,
3288             x_return_status        => l_return_status);
3289 
3290           IF l_return_status <> fnd_api.g_ret_sts_success THEN
3291             RAISE fnd_api.g_exc_error;
3292           END IF;
3293 
3294           x_model_inst_tbl(1).txn_line_detail_id := l_nsrc_line_dtl_id;
3295 
3296           l_txn_ii := l_txn_ii + 1;
3297 
3298           --Build the table for creating the new instance relationships
3299 
3300           x_txn_ii_rltns_tbl(l_txn_ii).transaction_line_id := x_txn_line_dtl_tbl(l_ind).transaction_line_id;
3301           x_txn_ii_rltns_tbl(l_txn_ii).relationship_type_code := 'COMPONENT-OF';
3302           x_txn_ii_rltns_tbl(l_txn_ii).object_id  := x_model_inst_tbl(1).txn_line_detail_id;
3303           x_txn_ii_rltns_tbl(l_txn_ii).subject_id := x_txn_line_dtl_tbl(l_ind).txn_line_detail_id ;
3304           x_txn_ii_rltns_tbl(l_txn_ii).active_start_date := sysdate;--FND_API.G_MISS_DATE;
3305 
3306           -- mark the model instance that it is processed
3307           x_model_inst_tbl(1).process_flag := 'Y';
3308 
3309           ---Added (Start) for m-to-m enhancements
3310           x_txn_ii_rltns_tbl(l_txn_ii).subject_type  := 'T';
3311           x_txn_ii_rltns_tbl(l_txn_ii).object_type   :=  'T' ;
3312           ---Added (End) for m-to-m enhancements
3313 
3314         END LOOP;
3315       END IF;
3316 
3317     ELSIF x_model_inst_tbl.count > 1 THEN
3318       IF p_order_line_rec.item_type_code = 'CONFIG' THEN
3319         IF x_txn_line_dtl_tbl.count > 0 THEN
3320           FOR l_ind in x_txn_line_dtl_tbl.first..x_txn_line_dtl_tbl.last
3321           LOOP
3322 
3323             IF x_model_inst_tbl.count  > 0 THEN
3324               FOR k in x_model_inst_tbl.first..x_model_inst_tbl.last
3325               LOOP
3326 
3327                 IF x_model_inst_tbl(k).process_flag <> 'Y' THEN
3328 
3329                   build_non_source_rec(
3330                     p_transaction_line_id  => p_order_line_rec.trx_line_id,
3331                     p_parent_line_id       => x_model_inst_tbl(k).parent_line_id,
3332                     p_instance_id          => x_model_inst_tbl(k).instance_id,
3333                     x_txn_line_dtl_id      => l_nsrc_line_dtl_id,
3334                     x_return_status        => l_return_status);
3335 
3336                   IF l_return_status <> fnd_api.g_ret_sts_success THEN
3337                     RAISE fnd_api.g_exc_error;
3338                   END IF;
3339 
3340                   x_model_inst_tbl(k).txn_line_detail_id := l_nsrc_line_dtl_id;
3341 
3342                   /*Build the table for creating the new instance relationships */
3343                   l_txn_ii := l_txn_ii + 1;
3344 
3345                   x_txn_ii_rltns_tbl(l_txn_ii).transaction_line_id := x_txn_line_dtl_tbl(l_ind).transaction_line_id;
3346                   x_txn_ii_rltns_tbl(l_txn_ii).relationship_type_code := 'COMPONENT-OF';
3347                   x_txn_ii_rltns_tbl(l_txn_ii).object_id  := x_model_inst_tbl(k).txn_line_detail_id;
3348                   x_txn_ii_rltns_tbl(l_txn_ii).subject_id := x_txn_line_dtl_tbl(l_ind).txn_line_detail_id ;
3349                   x_txn_ii_rltns_tbl(l_txn_ii).active_start_date := sysdate;--FND_API.G_MISS_DATE;
3350 
3351                   -- mark the model instance that it is processed
3352                   x_model_inst_tbl(k).process_flag := 'Y';
3353 
3354                   ---Added (Start) for m-to-m enhancements
3355                   --- 04/24
3356                   x_txn_ii_rltns_tbl(l_txn_ii).subject_type  := 'T';
3357                   x_txn_ii_rltns_tbl(l_txn_ii).object_type   :=  'T' ;
3358                   ---Added (End) for m-to-m enhancements
3359 
3360                   EXIT;
3361                 END IF;
3362               END LOOP;
3363             END IF; --x_model_inst_tbl.count  > 0
3364           END LOOP;
3365         END IF; -- x_txn_line_dtl_tbl.count > 0
3366       ELSE -- Item_type_code other than CONFIG
3367         IF x_txn_line_dtl_tbl.count > 0 THEN
3368           FOR l_ind in x_txn_line_dtl_tbl.first..x_txn_line_dtl_tbl.last
3369           LOOP
3370             l_txn_processed := 'N';
3371 
3372             IF x_model_inst_tbl.count > 0 THEN
3373               FOR j in x_model_inst_tbl.first..x_model_inst_tbl.last
3374               LOOP
3375 
3376                 IF (x_model_inst_tbl(j).process_flag = 'N')
3377                    AND
3378                    (x_model_inst_tbl(j).rem_qty >= x_txn_line_dtl_tbl(l_ind).quantity) THEN
3379 
3380                   build_non_source_rec(
3381                     p_transaction_line_id  => p_order_line_rec.trx_line_id,
3382                     p_parent_line_id       => x_model_inst_tbl(j).parent_line_id,
3383                     p_instance_id          => x_model_inst_tbl(j).instance_id,
3384                     x_txn_line_dtl_id      => l_nsrc_line_dtl_id,
3385                     x_return_status        => l_return_status);
3386 
3387                   IF l_return_status <> fnd_api.g_ret_sts_success THEN
3388                     RAISE fnd_api.g_exc_error;
3389                   END IF;
3390 
3391                   x_model_inst_tbl(j).txn_line_detail_id := l_nsrc_line_dtl_id;
3392 
3393                   l_txn_ii := l_txn_ii + 1;
3394 
3395                   /*Build the table for creating the new instance relationships */
3396 
3397                   x_txn_ii_rltns_tbl(l_txn_ii).transaction_line_id := x_txn_line_dtl_tbl(l_ind).transaction_line_id;
3398                   x_txn_ii_rltns_tbl(l_txn_ii).relationship_type_code := 'COMPONENT-OF';
3399                   x_txn_ii_rltns_tbl(l_txn_ii).subject_id :=  x_txn_line_dtl_tbl(l_ind).txn_line_detail_id;
3400                   x_txn_ii_rltns_tbl(l_txn_ii).object_id  :=  x_model_inst_tbl(j).txn_line_detail_id;
3401                   x_txn_ii_rltns_tbl(l_txn_ii).active_start_date := sysdate;--FND_API.G_MISS_DATE;
3402 
3403                   x_model_inst_tbl(j).rem_qty := x_model_inst_tbl(j).rem_qty - x_txn_line_dtl_tbl(l_ind).quantity;
3404 
3405                   l_txn_processed := 'Y';
3406 
3407                   IF x_model_inst_tbl(j).rem_qty = 0 THEN
3408                     x_model_inst_tbl(j).process_flag := 'Y';
3409                   END IF;
3410 
3411                   ---Added (Start) for m-to-m enhancements
3412                   ---04/24
3413                   x_txn_ii_rltns_tbl(l_txn_ii).subject_type  := 'T';
3414                   x_txn_ii_rltns_tbl(l_txn_ii).object_type   :=  'T' ;
3415                   ---Added (End) for m-to-m enhancements
3416 
3417                   EXIT;
3418                 END IF;
3419 
3420               END LOOP;
3421             END IF; -- x_model_inst_tbl.count > 0
3422 
3423             IF l_txn_processed = 'N' THEN
3424 
3425               IF x_txn_line_dtl_tbl(l_ind).quantity > 1 THEN
3426 
3427                 x_txn_line_dtls_lst.delete;
3428 
3429                 split_txn_dtls(
3430                   split_txn_dtl_id      => x_txn_line_dtl_tbl(l_ind).txn_line_detail_id,
3431                   x_txn_line_dtls_lst   => x_txn_line_dtls_lst,
3432                   x_return_status       => l_return_status  );
3433 
3434                 IF l_return_status <> fnd_api.g_ret_sts_success THEN
3435                   debug('split_txn_dtls failed ');
3436                   RAISE fnd_api.g_exc_error;
3437                 END IF;
3438               END IF;
3439 
3440               debug('x_txn_line_dtls_lst.count ='||x_txn_line_dtls_lst.count);
3441 
3442               IF x_txn_line_dtls_lst.count > 0 THEN
3443                 FOR x_txn in x_txn_line_dtls_lst.first..x_txn_line_dtls_lst.last
3444                 LOOP
3445 
3446                   IF x_model_inst_tbl.count > 0 THEN
3447                     FOR j in x_model_inst_tbl.first..x_model_inst_tbl.last
3448                     LOOP
3449 
3450                       IF (x_model_inst_tbl(j).process_flag = 'N') THEN
3451 
3452                         build_non_source_rec(
3453                           p_transaction_line_id  => p_order_line_rec.trx_line_id,
3454                           p_parent_line_id       => x_model_inst_tbl(j).parent_line_id,
3455                           p_instance_id          => x_model_inst_tbl(j).instance_id,
3456                           x_txn_line_dtl_id      => l_nsrc_line_dtl_id,
3457                           x_return_status        => l_return_status);
3458 
3459                         IF l_return_status <> fnd_api.g_ret_sts_success THEN
3460                           RAISE fnd_api.g_exc_error;
3461                         END IF;
3462 
3463                         x_model_inst_tbl(j).txn_line_detail_id := l_nsrc_line_dtl_id;
3464 
3465                         l_txn_ii := l_txn_ii + 1;
3466 
3467                         /*Build the table for creating the new instance relationships */
3468 
3469                         x_txn_ii_rltns_tbl(l_txn_ii).transaction_line_id := x_txn_line_dtl_tbl(l_ind).transaction_line_id;
3470                         x_txn_ii_rltns_tbl(l_txn_ii).relationship_type_code := 'COMPONENT-OF';
3471                         x_txn_ii_rltns_tbl(l_txn_ii).subject_id :=  x_txn_line_dtls_lst(x_txn).txn_line_detail_id;
3472                         x_txn_ii_rltns_tbl(l_txn_ii).object_id  :=  x_model_inst_tbl(j).txn_line_detail_id;
3473                         x_txn_ii_rltns_tbl(l_txn_ii).active_start_date := sysdate;--FND_API.G_MISS_DATE;
3474 
3475                         x_model_inst_tbl(j).rem_qty := x_model_inst_tbl(j).rem_qty - 1;
3476 
3477                         ---Added (Start) for m-to-m enhancements
3478                         x_txn_ii_rltns_tbl(l_txn_ii).subject_type  := 'T';
3479                         x_txn_ii_rltns_tbl(l_txn_ii).object_type   :=  'T' ;
3480                         ---Added (End) for m-to-m enhancements
3481 
3482                         debug('Relation Num   :'||l_txn_ii);
3483                         debug('Txn Object ID  :'||x_txn_ii_rltns_tbl(l_txn_ii).object_id);
3484                         debug('Txn Subject ID :'||x_txn_ii_rltns_tbl(l_txn_ii).subject_id);
3485                         debug('Remaining Qty  :'||x_model_inst_tbl(j).rem_qty);
3486 
3487                         IF x_model_inst_tbl(j).rem_qty = 0 THEN
3488                           x_model_inst_tbl(j).process_flag := 'Y';
3489                         END IF;
3490 
3491                         EXIT;
3492                       END IF; --(x_model_inst_tbl(j).process_flag = 'N')
3493 
3494                     END LOOP;
3495                   END IF; --x_txn_line_dtls_lst.count > 0
3496 
3497                   l_txn_processed := 'Y';
3498 
3499                 END LOOP;
3500               END IF; --x_txn_line_dtls_lst.count > 0
3501             END IF; -- l_txn_processed = 'N
3502           END LOOP;
3503         END IF; --x_txn_line_dtl_tbl.count > 0
3504       END IF;
3505     END IF;
3506 
3507    debug('x_txn_ii_rltns_tbl.count ='||x_txn_ii_rltns_tbl.count );
3508 
3509   EXCEPTION
3510     WHEN fnd_api.g_exc_error THEN
3511       x_return_status := fnd_api.g_ret_sts_error ;
3512     WHEN fnd_api.g_exc_unexpected_error THEN
3513       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3514   END build_parent_relation;
3515 
3516 
3517   PROCEDURE get_source_trx_dtls(
3518     p_mtl_transaction_id IN NUMBER,
3519     x_mtl_txn_rec        OUT NOCOPY csi_order_ship_pub.MTL_TXN_REC,
3520     x_error_message      OUT NOCOPY VARCHAR2,
3521     x_return_status      OUT NOCOPY VARCHAR2)
3522   IS
3523   BEGIN
3524 
3525     api_log('get_source_trx_dtls');
3526 
3527     SELECT mmt.transaction_id ,
3528            oel.line_id,
3529            oeh.header_id,
3530            oeh.order_number,
3531            oel.line_id,
3532            oel.line_number||'.'||oel.shipment_number,
3533            mmt.transaction_date,
3534            mmt.transaction_id
3535     INTO   x_mtl_txn_rec.mtl_transaction_id,
3536            x_mtl_txn_rec.source_line_id,
3537            x_mtl_txn_rec.source_header_ref_id,
3538            x_mtl_txn_rec.source_header_ref,
3539            x_mtl_txn_rec.source_line_ref_id,
3540            x_mtl_txn_rec.source_line_ref,
3541            x_mtl_txn_rec.source_transaction_date,
3542            x_mtl_txn_rec.inv_material_transaction_id
3543     FROM   oe_order_headers_all oeh,
3544            oe_order_lines_all oel,
3545            mtl_material_transactions mmt
3546     WHERE  mmt.transaction_id = p_mtl_transaction_id
3547     AND    oel.line_id        = mmt.trx_source_line_id
3548     AND    oeh.header_id      = oel.header_id;
3549 
3550     debug('  Order Number :'||x_mtl_txn_rec.source_header_ref);
3551     debug('  Line Number  :'||x_mtl_txn_rec.source_line_ref);
3552 
3553     x_return_status := fnd_api.g_ret_sts_success;
3554 
3555   EXCEPTION
3556     WHEN no_data_found THEN
3557       x_return_status := fnd_api.g_ret_sts_error;
3558       fnd_message.set_name('CSI','CSI_INT_ORD_LINE_MISSING');
3559       fnd_message.set_token('MTL_TRANSACTION_ID',p_mtl_transaction_id);
3560       fnd_msg_pub.add;
3561   END get_source_trx_dtls;
3562 
3563  PROCEDURE split_txn_dtls_with_qty( --Included the API for bug 4354267
3564     split_txn_dtl_id            IN  NUMBER,
3565     p_split_qty			IN NUMBER,
3566     x_return_status             OUT NOCOPY varchar2)
3567    IS
3568     l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
3569     l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
3570 
3571     l_line_dtl_rec      csi_t_datastructures_grp.txn_line_detail_rec;
3572     l_line_dtl_tbl      csi_t_datastructures_grp.txn_line_detail_tbl;
3573     l_pty_dtl_tbl       csi_t_datastructures_grp.txn_party_detail_tbl;
3574     l_pty_acct_tbl      csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
3575     l_ii_rltns_tbl      csi_t_datastructures_grp.txn_ii_rltns_tbl;
3576     l_org_assgn_tbl     csi_t_datastructures_grp.txn_org_assgn_tbl;
3577     l_ext_attrib_tbl    csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
3578     l_csi_ea_tbl        csi_t_datastructures_grp.csi_ext_attribs_tbl;
3579     l_csi_eav_tbl       csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
3580     l_txn_systems_tbl   csi_t_datastructures_grp.txn_systems_tbl;
3581     l_transaction_line_id number;
3582 
3583     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
3584     l_msg_count         number;
3585     l_msg_data          varchar2(2000);
3586 
3587   BEGIN
3588 
3589     api_log('split_txn_dtls_with_qty');
3590 
3591     x_return_status := fnd_api.g_ret_sts_success;
3592 
3593 
3594     l_txn_line_detail_query_rec.txn_line_detail_id := split_txn_dtl_id;
3595 
3596     csi_t_txn_details_grp.get_transaction_details(
3597       p_api_version                => 1.0,
3598       p_commit                     => fnd_api.g_false,
3599       p_init_msg_list              => fnd_api.g_true,
3600       p_validation_level           => fnd_api.g_valid_level_full,
3601       p_txn_line_query_rec         => l_txn_line_query_rec,
3602       p_txn_line_detail_query_rec  => l_txn_line_detail_query_rec,
3603       x_txn_line_detail_tbl        => l_line_dtl_tbl,
3604       p_get_parties_flag           => fnd_api.g_true,
3605       x_txn_party_detail_tbl       => l_pty_dtl_tbl,
3606       p_get_pty_accts_flag         => fnd_api.g_true,
3607       x_txn_pty_acct_detail_tbl    => l_pty_acct_tbl,
3608       p_get_ii_rltns_flag          => fnd_api.g_false,
3609       x_txn_ii_rltns_tbl           => l_ii_rltns_tbl,
3610       p_get_org_assgns_flag        => fnd_api.g_true,
3611       x_txn_org_assgn_tbl          => l_org_assgn_tbl,
3612       p_get_ext_attrib_vals_flag   => fnd_api.g_true,
3613       x_txn_ext_attrib_vals_tbl    => l_ext_attrib_tbl,
3614       p_get_csi_attribs_flag       => fnd_api.g_false,
3615       x_csi_ext_attribs_tbl        => l_csi_ea_tbl,
3616       p_get_csi_iea_values_flag    => fnd_api.g_false,
3617       x_csi_iea_values_tbl         => l_csi_eav_tbl,
3618       p_get_txn_systems_flag       => fnd_api.g_false,
3619       x_txn_systems_tbl            => l_txn_systems_tbl,
3620       x_return_status              => l_return_status,
3621       x_msg_count                  => l_msg_count,
3622       x_msg_data                   => l_msg_data);
3623 
3624     IF l_return_status <> fnd_api.g_ret_sts_success THEN
3625       debug('Get_transaction_details  failed ');
3626       RAISE fnd_api.g_exc_error;
3627     END IF;
3628 
3629     l_transaction_line_id := l_line_dtl_tbl(1).transaction_line_id;
3630 
3631     csi_t_utilities_pvt.convert_ids_to_index(
3632       px_line_dtl_tbl            => l_line_dtl_tbl,
3633       px_pty_dtl_tbl             => l_pty_dtl_tbl,
3634       px_pty_acct_tbl            => l_pty_acct_tbl,
3635       px_ii_rltns_tbl            => l_ii_rltns_tbl,
3636       px_org_assgn_tbl           => l_org_assgn_tbl,
3637       px_ext_attrib_tbl          => l_ext_attrib_tbl,
3638       px_txn_systems_tbl         => l_txn_systems_tbl);
3639 
3640     l_line_dtl_rec                     := l_line_dtl_tbl(1);
3641     l_line_dtl_rec.txn_line_detail_id  := FND_API.G_MISS_NUM;
3642     l_line_dtl_rec.transaction_line_id := l_transaction_line_id;
3643     l_line_dtl_rec.quantity            := p_split_qty ;
3644     l_line_dtl_rec.processing_status   := 'SUBMIT';
3645 
3646     debug('Splitting the txn_line_dtls INTO qty of '||p_split_qty);
3647 
3648 
3649 
3650       csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
3651         p_api_version              => 1.0,
3652         p_commit                   => fnd_api.g_false,
3653         p_init_msg_list            => fnd_api.g_true,
3654         p_validation_level         => fnd_api.g_valid_level_full,
3655         p_txn_line_dtl_index       => 1,
3656         p_txn_line_dtl_rec         => l_line_dtl_rec,
3657         px_txn_party_dtl_tbl       => l_pty_dtl_tbl,
3658         px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
3659         px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
3660         px_txn_org_assgn_tbl       => l_org_assgn_tbl,
3661         px_txn_ext_attrib_vals_tbl => l_ext_attrib_tbl,
3662         x_return_status            => l_return_status,
3663         x_msg_count                => l_msg_count,
3664         x_msg_data                 => l_msg_data);
3665 
3666       IF l_return_status <> fnd_api.g_ret_sts_success THEN
3667         debug('Error Splitting txn line detail ');
3668         RAISE fnd_api.g_exc_error;
3669       END IF;
3670   EXCEPTION
3671     WHEN fnd_api.g_exc_error THEN
3672       x_return_status := fnd_api.g_ret_sts_error ;
3673     WHEN fnd_api.g_exc_unexpected_error THEN
3674       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3675   END split_txn_dtls_with_qty;
3676 
3677 
3678   PROCEDURE split_txn_dtls(
3679     split_txn_dtl_id            IN  NUMBER,
3680     x_txn_line_dtls_lst         OUT NOCOPY txn_line_dtl_tbl,
3681     x_return_status             OUT NOCOPY varchar2)
3682   IS
3683 
3684     l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
3685     l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
3686 
3687     l_line_dtl_rec      csi_t_datastructures_grp.txn_line_detail_rec;
3688     l_line_dtl_tbl      csi_t_datastructures_grp.txn_line_detail_tbl;
3689     l_pty_dtl_tbl       csi_t_datastructures_grp.txn_party_detail_tbl;
3690     l_pty_acct_tbl      csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
3691     l_ii_rltns_tbl      csi_t_datastructures_grp.txn_ii_rltns_tbl;
3692     l_org_assgn_tbl     csi_t_datastructures_grp.txn_org_assgn_tbl;
3693     l_ext_attrib_tbl    csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
3694     l_csi_ea_tbl        csi_t_datastructures_grp.csi_ext_attribs_tbl;
3695     l_csi_eav_tbl       csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
3696     l_txn_systems_tbl   csi_t_datastructures_grp.txn_systems_tbl;
3697 
3698     x_msg_count         number;
3699     x_msg_data          varchar2(2000);
3700     l_transaction_line_id number;
3701 
3702   BEGIN
3703 
3704     api_log('split_txn_dtls');
3705 
3706     x_return_status := fnd_api.g_ret_sts_success;
3707 
3708     x_txn_line_dtls_lst.delete;
3709 
3710     l_txn_line_detail_query_rec.txn_line_detail_id := split_txn_dtl_id;
3711 
3712     csi_t_txn_details_grp.get_transaction_details(
3713       p_api_version                => 1.0,
3714       p_commit                     => fnd_api.g_false,
3715       p_init_msg_list              => fnd_api.g_true,
3716       p_validation_level           => fnd_api.g_valid_level_full,
3717       p_txn_line_query_rec         => l_txn_line_query_rec,
3718       p_txn_line_detail_query_rec  => l_txn_line_detail_query_rec,
3719       x_txn_line_detail_tbl        => l_line_dtl_tbl,
3720       p_get_parties_flag           => fnd_api.g_true,
3721       x_txn_party_detail_tbl       => l_pty_dtl_tbl,
3722       p_get_pty_accts_flag         => fnd_api.g_true,
3723       x_txn_pty_acct_detail_tbl    => l_pty_acct_tbl,
3724       p_get_ii_rltns_flag          => fnd_api.g_false,
3725       x_txn_ii_rltns_tbl           => l_ii_rltns_tbl,
3726       p_get_org_assgns_flag        => fnd_api.g_true,
3727       x_txn_org_assgn_tbl          => l_org_assgn_tbl,
3728       p_get_ext_attrib_vals_flag   => fnd_api.g_true,
3729       x_txn_ext_attrib_vals_tbl    => l_ext_attrib_tbl,
3730       p_get_csi_attribs_flag       => fnd_api.g_false,
3731       x_csi_ext_attribs_tbl        => l_csi_ea_tbl,
3732       p_get_csi_iea_values_flag    => fnd_api.g_false,
3733       x_csi_iea_values_tbl         => l_csi_eav_tbl,
3734       p_get_txn_systems_flag       => fnd_api.g_false,
3735       x_txn_systems_tbl            => l_txn_systems_tbl,
3736       x_return_status              => x_return_status,
3737       x_msg_count                  => x_msg_count,
3738       x_msg_data                   => x_msg_data);
3739 
3740     IF x_return_status <> fnd_api.g_ret_sts_success THEN
3741       debug('Get_transaction_details  failed ');
3742       RAISE fnd_api.g_exc_error;
3743     END IF;
3744 
3745     l_transaction_line_id := l_line_dtl_tbl(1).transaction_line_id;
3746 
3747     csi_t_utilities_pvt.convert_ids_to_index(
3748       px_line_dtl_tbl            => l_line_dtl_tbl,
3749       px_pty_dtl_tbl             => l_pty_dtl_tbl,
3750       px_pty_acct_tbl            => l_pty_acct_tbl,
3751       px_ii_rltns_tbl            => l_ii_rltns_tbl,
3752       px_org_assgn_tbl           => l_org_assgn_tbl,
3753       px_ext_attrib_tbl          => l_ext_attrib_tbl,
3754       px_txn_systems_tbl         => l_txn_systems_tbl);
3755 
3756     l_line_dtl_rec                     := l_line_dtl_tbl(1);
3757     l_line_dtl_rec.txn_line_detail_id  := FND_API.G_MISS_NUM;
3758     l_line_dtl_rec.transaction_line_id := l_transaction_line_id;
3759     l_line_dtl_rec.quantity            := 1 ;
3760     l_line_dtl_rec.processing_status   := 'IN_PROCESS';
3761 
3762     debug('Splitting the txn_line_dtls INTO qty of one');
3763 
3764     update csi_t_txn_line_details
3765     set quantity = 1
3766     WHERE txn_line_detail_id = split_txn_dtl_id;
3767 
3768     x_txn_line_dtls_lst(x_txn_line_dtls_lst.count+1).txn_line_detail_id := split_txn_dtl_id;
3769 
3770     FOR l_index in 1..(l_line_dtl_tbl(1).quantity -1 )
3771     LOOP
3772 
3773       csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
3774         p_api_version              => 1.0,
3775         p_commit                   => fnd_api.g_false,
3776         p_init_msg_list            => fnd_api.g_true,
3777         p_validation_level         => fnd_api.g_valid_level_full,
3778         p_txn_line_dtl_index       => 1,
3779         p_txn_line_dtl_rec         => l_line_dtl_rec,
3780         px_txn_party_dtl_tbl       => l_pty_dtl_tbl,
3781         px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
3782         px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
3783         px_txn_org_assgn_tbl       => l_org_assgn_tbl,
3784         px_txn_ext_attrib_vals_tbl => l_ext_attrib_tbl,
3785         x_return_status            => x_return_status,
3786         x_msg_count                => x_msg_count,
3787         x_msg_data                 => x_msg_data);
3788 
3789       IF x_return_status <> fnd_api.g_ret_sts_success THEN
3790         debug('Error Splitting txn line detail ');
3791         RAISE fnd_api.g_exc_error;
3792       END IF;
3793 
3794       x_txn_line_dtls_lst(x_txn_line_dtls_lst.count+1).txn_line_detail_id :=
3795       l_line_dtl_rec.txn_line_detail_id;
3796 
3797       l_line_dtl_tbl(1) := l_line_dtl_rec;
3798 
3799       csi_t_utilities_pvt.convert_ids_to_index(
3800         px_line_dtl_tbl            => l_line_dtl_tbl,
3801         px_pty_dtl_tbl             => l_pty_dtl_tbl,
3802         px_pty_acct_tbl            => l_pty_acct_tbl,
3803         px_ii_rltns_tbl            => l_ii_rltns_tbl,
3804         px_org_assgn_tbl           => l_org_assgn_tbl,
3805         px_ext_attrib_tbl          => l_ext_attrib_tbl,
3806         px_txn_systems_tbl         => l_txn_systems_tbl);
3807 
3808       l_line_dtl_rec                     := l_line_dtl_tbl(1);
3809       l_line_dtl_rec.txn_line_detail_id  := FND_API.G_MISS_NUM;
3810       l_line_dtl_rec.transaction_line_id := l_transaction_line_id;
3811       l_line_dtl_rec.quantity            := 1 ;
3812       l_line_dtl_rec.processing_status   := 'IN_PROCESS';
3813 
3814 
3815     END LOOP;
3816 
3817     debug('No of txn line detail ='||x_txn_line_dtls_lst.count);
3818     debug('Txn line detail for Non Source created Successfully');
3819 
3820   EXCEPTION
3821     WHEN fnd_api.g_exc_error THEN
3822       x_return_status := fnd_api.g_ret_sts_error ;
3823     WHEN fnd_api.g_exc_unexpected_error THEN
3824       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3825   END split_txn_dtls;
3826 
3827   PROCEDURE get_system_tbl(
3828     p_txn_systems_rec            IN  csi_t_datastructures_grp.txn_system_rec,
3829     x_cre_systems_rec            OUT NOCOPY csi_datastructures_pub.system_rec)
3830   IS
3831   BEGIN
3832 
3833     api_log('get_system_tbl');
3834 
3835     x_cre_systems_rec.name                  := p_txn_systems_rec.system_name;
3836     x_cre_systems_rec.description           := p_txn_systems_rec.description;
3837     x_cre_systems_rec.system_type_code      := p_txn_systems_rec.system_type_code;
3838     x_cre_systems_rec.system_number         := p_txn_systems_rec.system_number;
3839     x_cre_systems_rec.customer_id           := p_txn_systems_rec.customer_id;
3840     x_cre_systems_rec.ship_to_contact_id    := p_txn_systems_rec.ship_to_contact_id;
3841     x_cre_systems_rec.bill_to_contact_id    := p_txn_systems_rec.bill_to_contact_id;
3842     x_cre_systems_rec.technical_contact_id  := p_txn_systems_rec.technical_contact_id;
3843     x_cre_systems_rec.service_admin_contact_id := p_txn_systems_rec.service_admin_contact_id;
3844     x_cre_systems_rec.ship_to_site_use_id   := p_txn_systems_rec.ship_to_site_use_id;
3845     x_cre_systems_rec.bill_to_site_use_id   := p_txn_systems_rec.bill_to_site_use_id;
3846     x_cre_systems_rec.install_site_use_id   := p_txn_systems_rec.install_site_use_id;
3847     x_cre_systems_rec.coterminate_day_month := p_txn_systems_rec.coterminate_day_month;
3848     x_cre_systems_rec.config_system_type    := p_txn_systems_rec.config_system_type;
3849     x_cre_systems_rec.start_date_active     := p_txn_systems_rec.start_date_active;
3850     x_cre_systems_rec.end_date_active       := p_txn_systems_rec.end_date_active ;
3851     x_cre_systems_rec.context               := p_txn_systems_rec.context;
3852     x_cre_systems_rec.attribute1            := p_txn_systems_rec.attribute1;
3853     x_cre_systems_rec.attribute2            := p_txn_systems_rec.attribute2;
3854     x_cre_systems_rec.attribute3            := p_txn_systems_rec.attribute3;
3855     x_cre_systems_rec.attribute4            := p_txn_systems_rec.attribute4;
3856     x_cre_systems_rec.attribute5            := p_txn_systems_rec.attribute5;
3857     x_cre_systems_rec.attribute6            := p_txn_systems_rec.attribute6;
3858     x_cre_systems_rec.attribute7            := p_txn_systems_rec.attribute7;
3859     x_cre_systems_rec.attribute8            := p_txn_systems_rec.attribute8;
3860     x_cre_systems_rec.attribute9            := p_txn_systems_rec.attribute9;
3861     x_cre_systems_rec.attribute10           := p_txn_systems_rec.attribute10;
3862     x_cre_systems_rec.attribute11           := p_txn_systems_rec.attribute11;
3863     x_cre_systems_rec.attribute12           := p_txn_systems_rec.attribute12;
3864     x_cre_systems_rec.attribute13           := p_txn_systems_rec.attribute13;
3865     x_cre_systems_rec.attribute14           := p_txn_systems_rec.attribute14;
3866     x_cre_systems_rec.attribute15           := p_txn_systems_rec.attribute15;
3867     x_cre_systems_rec.object_version_numbeR := fnd_api.g_miss_num;
3868 
3869   END get_system_tbl;
3870 
3871 
3872   PROCEDURE get_org_assignment_tbl(
3873     p_txn_line_detail_rec        IN  csi_t_datastructures_grp.txn_line_detail_rec,
3874     p_txn_org_assgn_tbl          IN  csi_t_datastructures_grp.txn_org_assgn_tbl,
3875     x_cre_org_units_tbl          OUT NOCOPY csi_datastructures_pub.organization_units_tbl,
3876     x_upd_org_units_tbl          OUT NOCOPY csi_datastructures_pub.organization_units_tbl,
3877     x_return_status              OUT NOCOPY VARCHAR2)
3878   IS
3879     l_upd_org                  NUMBER := 1;
3880     l_cre_org                  NUMBER := 1;
3881     l_date                     DATE := TO_DATE('01/01/4712', 'MM/DD/YYYY');
3882     l_obj_ver_num              NUMBER;
3883 
3884     l_instance_ou_id           number;
3885 
3886   BEGIN
3887 
3888     api_log('get_org_assignment_tbl');
3889 
3890     x_return_status := fnd_api.g_ret_sts_success;
3891 
3892     /* Build org_assignment table for create/update */
3893     IF p_txn_org_assgn_tbl.count > 0 THEN
3894       FOR j in p_txn_org_assgn_tbl.FIRST..p_txn_org_assgn_tbl.LAST LOOP
3895 
3896         IF (p_txn_org_assgn_tbl(j).txn_line_detail_id = p_txn_line_detail_rec.txn_line_detail_id) AND
3897            (( NVL(p_txn_org_assgn_tbl(j).active_end_date,l_date) > sysdate ) OR
3898             (p_txn_org_assgn_tbl(j).active_end_date = FND_API.G_MISS_DATE )) THEN
3899 
3900 
3901           l_instance_ou_id := p_txn_org_assgn_tbl(j).instance_ou_id;
3902 
3903           IF NVL(p_txn_org_assgn_tbl(j).instance_ou_id ,FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM then
3904 
3905             /* there should be only one org assign rec for the alternate primary key
3906                this is a rectriction from the api
3907             */
3908             BEGIN
3909               SELECT instance_ou_id
3910               INTO   l_instance_ou_id
3911               FROM   csi_i_org_assignments
3912               WHERE  instance_id            = p_txn_line_detail_rec.instance_id
3913               AND    relationship_type_code = p_txn_org_assgn_tbl(j).relationship_type_code;
3914              -- AND    operating_unit_id      = p_txn_org_assgn_tbl(j).operating_unit_id; for 4293740
3915             EXCEPTION
3916               WHEN no_data_found THEN
3917                 l_instance_ou_id := null;
3918               WHEN too_many_rows THEN
3919                 /* in case many found taking the active one */
3920 
3921                 BEGIN
3922                   SELECT instance_ou_id
3923                   INTO   l_instance_ou_id
3924                   FROM   csi_i_org_assignments
3925                   WHERE  instance_id            = p_txn_line_detail_rec.instance_id
3926                   AND    relationship_type_code = p_txn_org_assgn_tbl(j).relationship_type_code
3927                   AND    operating_unit_id      = p_txn_org_assgn_tbl(j).operating_unit_id
3928                   AND    (sysdate > nvl(active_start_date, sysdate-1)
3929                           AND
3930                           sysdate < nvl(active_end_date, sysdate + 1));
3931                 EXCEPTION
3932                   WHEN others THEN
3933                     l_instance_ou_id := null;
3934                 END;
3935             END;
3936           END IF;
3937 
3938           IF NVL(l_instance_ou_id,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM then
3939 
3940             /* if the instance_ou_id does not exist then update for org_units  */
3941             l_obj_ver_num := csi_utl_pkg.get_org_obj_ver_num(
3942                                l_instance_ou_id);
3943 
3944             IF l_obj_ver_num = -1  THEN
3945               debug('csi_utl_pkg.get_org_obj_ver_num failed ');
3946               RAISE fnd_api.g_exc_error;
3947             END IF;
3948 
3949             x_upd_org_units_tbl(l_upd_org).instance_ou_id    := l_instance_ou_id;
3950             x_upd_org_units_tbl(l_upd_org).instance_id       := p_txn_line_detail_rec.instance_id;
3951             x_upd_org_units_tbl(l_upd_org).operating_unit_id := p_txn_org_assgn_tbl(j).operating_unit_id;
3952             x_upd_org_units_tbl(l_upd_org).relationship_type_code := p_txn_org_assgn_tbl(j).relationship_type_code;
3953             x_upd_org_units_tbl(l_upd_org).active_end_date  := null;
3954             x_upd_org_units_tbl(l_upd_org).context          := p_txn_org_assgn_tbl(j).context    ;
3955             x_upd_org_units_tbl(l_upd_org).attribute1       := p_txn_org_assgn_tbl(j).attribute1 ;
3956             x_upd_org_units_tbl(l_upd_org).attribute2       := p_txn_org_assgn_tbl(j).attribute2 ;
3957             x_upd_org_units_tbl(l_upd_org).attribute3       := p_txn_org_assgn_tbl(j).attribute3 ;
3958             x_upd_org_units_tbl(l_upd_org).attribute4       := p_txn_org_assgn_tbl(j).attribute4 ;
3959             x_upd_org_units_tbl(l_upd_org).attribute5       := p_txn_org_assgn_tbl(j).attribute5 ;
3960             x_upd_org_units_tbl(l_upd_org).attribute6       := p_txn_org_assgn_tbl(j).attribute6 ;
3961             x_upd_org_units_tbl(l_upd_org).attribute7       := p_txn_org_assgn_tbl(j).attribute7 ;
3962             x_upd_org_units_tbl(l_upd_org).attribute8       := p_txn_org_assgn_tbl(j).attribute8 ;
3963             x_upd_org_units_tbl(l_upd_org).attribute9       := p_txn_org_assgn_tbl(j).attribute9 ;
3964             x_upd_org_units_tbl(l_upd_org).attribute10      := p_txn_org_assgn_tbl(j).attribute10;
3965             x_upd_org_units_tbl(l_upd_org).attribute11      := p_txn_org_assgn_tbl(j).attribute11;
3966             x_upd_org_units_tbl(l_upd_org).attribute12      := p_txn_org_assgn_tbl(j).attribute12;
3967             x_upd_org_units_tbl(l_upd_org).attribute13      := p_txn_org_assgn_tbl(j).attribute13;
3968             x_upd_org_units_tbl(l_upd_org).attribute14      := p_txn_org_assgn_tbl(j).attribute14;
3969             x_upd_org_units_tbl(l_upd_org).attribute15      := p_txn_org_assgn_tbl(j).attribute15 ;
3970             x_upd_org_units_tbl(l_upd_org).object_version_number := l_obj_ver_num;
3971 
3972             l_upd_org := l_upd_org + 1;
3973           ELSE
3974 
3975             /* if instance_ou_id does  exist then create for org assignment  */
3976 
3977             x_cre_org_units_tbl(l_cre_org).instance_ou_id    := FND_API.G_MISS_NUM;
3978             x_cre_org_units_tbl(l_cre_org).operating_unit_id := p_txn_org_assgn_tbl(j).operating_unit_id;
3979             x_cre_org_units_tbl(l_cre_org).instance_id       := p_txn_line_detail_rec.instance_id;
3980             x_cre_org_units_tbl(l_cre_org).relationship_type_code := p_txn_org_assgn_tbl(j).relationship_type_code;
3981             x_cre_org_units_tbl(l_cre_org).active_start_date := FND_API.G_MISS_DATE ;
3982             x_cre_org_units_tbl(l_cre_org).active_end_date   := p_txn_org_assgn_tbl(j).active_end_date;
3983             x_cre_org_units_tbl(l_cre_org).context          := p_txn_org_assgn_tbl(j).context    ;
3984             x_cre_org_units_tbl(l_cre_org).attribute1       := p_txn_org_assgn_tbl(j).attribute1 ;
3985             x_cre_org_units_tbl(l_cre_org).attribute2       := p_txn_org_assgn_tbl(j).attribute2 ;
3986             x_cre_org_units_tbl(l_cre_org).attribute3       := p_txn_org_assgn_tbl(j).attribute3 ;
3987             x_cre_org_units_tbl(l_cre_org).attribute4       := p_txn_org_assgn_tbl(j).attribute4 ;
3988             x_cre_org_units_tbl(l_cre_org).attribute5       := p_txn_org_assgn_tbl(j).attribute5 ;
3989             x_cre_org_units_tbl(l_cre_org).attribute6       := p_txn_org_assgn_tbl(j).attribute6 ;
3990             x_cre_org_units_tbl(l_cre_org).attribute7       := p_txn_org_assgn_tbl(j).attribute7 ;
3991             x_cre_org_units_tbl(l_cre_org).attribute8       := p_txn_org_assgn_tbl(j).attribute8 ;
3992             x_cre_org_units_tbl(l_cre_org).attribute9       := p_txn_org_assgn_tbl(j).attribute9 ;
3993             x_cre_org_units_tbl(l_cre_org).attribute10      := p_txn_org_assgn_tbl(j).attribute10;
3994             x_cre_org_units_tbl(l_cre_org).attribute11      := p_txn_org_assgn_tbl(j).attribute11;
3995             x_cre_org_units_tbl(l_cre_org).attribute12      := p_txn_org_assgn_tbl(j).attribute12;
3996             x_cre_org_units_tbl(l_cre_org).attribute13      := p_txn_org_assgn_tbl(j).attribute13;
3997             x_cre_org_units_tbl(l_cre_org).attribute14      := p_txn_org_assgn_tbl(j).attribute14;
3998             x_cre_org_units_tbl(l_cre_org).attribute15      := p_txn_org_assgn_tbl(j).attribute15 ;
3999             x_cre_org_units_tbl(l_cre_org).object_version_number := FND_API.G_MISS_NUM;
4000 
4001             l_cre_org := l_cre_org + 1;
4002           END IF; -- end if for instance_ou_id is not null
4003 
4004         END IF; -- end if for txn.txn_line_detail_id = org.txn_line_detail_id
4005 
4006       END LOOP; -- end of org assignment table loop
4007     END IF;-- end of org assignment table count > 0
4008 
4009   EXCEPTION
4010     WHEN fnd_api.g_exc_error THEN
4011       x_return_status := fnd_api.g_ret_sts_error ;
4012     WHEN fnd_api.g_exc_unexpected_error THEN
4013       x_return_status := fnd_api.g_ret_sts_unexp_error ;
4014   END get_org_assignment_tbl;
4015 
4016   PROCEDURE get_ext_attribs_tbl(
4017     p_txn_line_detail_rec        IN  csi_t_datastructures_grp.txn_line_detail_rec,
4018     p_txn_ext_attrib_vals_tbl    IN  csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
4019     x_cre_ext_attrib_val_tbl     OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl,
4020     x_upd_ext_attrib_val_tbl     OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl,
4021     x_return_status              OUT NOCOPY VARCHAR2)
4022   IS
4023 
4024     l_cre_ext                  NUMBER := 1;
4025     l_upd_ext                  NUMBER := 1;
4026     l_date                     DATE   := TO_DATE('01/01/4712', 'MM/DD/YYYY');
4027     l_obj_ver_num              NUMBER;
4028 
4029   BEGIN
4030 
4031     api_log('get_ext_attribs_tbl');
4032 
4033     x_return_status := fnd_api.g_ret_sts_success;
4034 
4035     /* Build ext attribs table for create/update */
4036     IF p_txn_ext_attrib_vals_tbl.count > 0 THEN
4037       FOR j in p_txn_ext_attrib_vals_tbl.FIRST..p_txn_ext_attrib_vals_tbl.LAST LOOP
4038 
4039         IF (p_txn_ext_attrib_vals_tbl(j).txn_line_detail_id = p_txn_line_detail_rec.txn_line_detail_id ) AND
4040            ((NVL(p_txn_ext_attrib_vals_tbl(j).active_end_date,l_date) > sysdate ) OR
4041             (p_txn_ext_attrib_vals_tbl(j).active_end_date = FND_API.G_MISS_DATE )) AND
4042            (p_txn_ext_attrib_vals_tbl(j).PROCESS_FLAG = 'Y') THEN
4043 
4044           debug('attrib_source_table  ='||p_txn_ext_attrib_vals_tbl(j).attrib_source_table);
4045 
4046           IF (p_txn_ext_attrib_vals_tbl(j).attrib_source_table = 'CSI_I_EXTENDED_ATTRIBS') THEN
4047 
4048             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute_id     := p_txn_ext_attrib_vals_tbl(j).attribute_source_id;
4049             x_cre_ext_attrib_val_tbl(l_cre_ext).instance_id      := p_txn_line_detail_rec.instance_id;
4050             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute_value  := p_txn_ext_attrib_vals_tbl(j).attribute_value;
4051             x_cre_ext_attrib_val_tbl(l_cre_ext).active_start_date := FND_API.G_MISS_DATE ;
4052             x_cre_ext_attrib_val_tbl(l_cre_ext).active_end_date  := p_txn_ext_attrib_vals_tbl(j).active_end_date;
4053             x_cre_ext_attrib_val_tbl(l_cre_ext).context          := p_txn_ext_attrib_vals_tbl(j).context    ;
4054             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute1       := p_txn_ext_attrib_vals_tbl(j).attribute1 ;
4055             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute2       := p_txn_ext_attrib_vals_tbl(j).attribute2 ;
4056             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute3       := p_txn_ext_attrib_vals_tbl(j).attribute3 ;
4057             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute4       := p_txn_ext_attrib_vals_tbl(j).attribute4 ;
4058             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute5       := p_txn_ext_attrib_vals_tbl(j).attribute5 ;
4059             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute6       := p_txn_ext_attrib_vals_tbl(j).attribute6 ;
4060             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute7       := p_txn_ext_attrib_vals_tbl(j).attribute7 ;
4061             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute8       := p_txn_ext_attrib_vals_tbl(j).attribute8 ;
4062             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute9       := p_txn_ext_attrib_vals_tbl(j).attribute9 ;
4063             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute10      := p_txn_ext_attrib_vals_tbl(j).attribute10;
4064             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute11      := p_txn_ext_attrib_vals_tbl(j).attribute11;
4065             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute12      := p_txn_ext_attrib_vals_tbl(j).attribute12;
4066             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute13      := p_txn_ext_attrib_vals_tbl(j).attribute13;
4067             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute14      := p_txn_ext_attrib_vals_tbl(j).attribute14;
4068             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute15      := p_txn_ext_attrib_vals_tbl(j).attribute15 ;
4069             x_cre_ext_attrib_val_tbl(l_cre_ext).object_version_number  := FND_API.G_MISS_NUM;
4070 
4071             l_cre_ext := l_cre_ext + 1;
4072           ELSIF (p_txn_ext_attrib_vals_tbl(j).attrib_source_table = 'CSI_IEA_VALUES') THEN
4073 
4074             l_obj_ver_num := csi_utl_pkg.get_ext_obj_ver_num(
4075                                p_txn_ext_attrib_vals_tbl(j).attribute_source_id);
4076 
4077             IF l_obj_ver_num = -1  THEN
4078               debug('csi_utl_pkg.get_ext_obj_ver_num failed ');
4079               RAISE fnd_api.g_exc_error;
4080             END IF;
4081 
4082             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute_value_id := p_txn_ext_attrib_vals_tbl(j).attribute_source_id;
4083             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute_value  := p_txn_ext_attrib_vals_tbl(j).attribute_value;
4084             x_upd_ext_attrib_val_tbl(l_upd_ext).instance_id      := p_txn_line_detail_rec.instance_id;
4085             x_upd_ext_attrib_val_tbl(l_upd_ext).active_end_date  := p_txn_ext_attrib_vals_tbl(j).active_end_date;
4086             x_upd_ext_attrib_val_tbl(l_upd_ext).context          := p_txn_ext_attrib_vals_tbl(j).context    ;
4087             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute1       := p_txn_ext_attrib_vals_tbl(j).attribute1 ;
4088             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute2       := p_txn_ext_attrib_vals_tbl(j).attribute2 ;
4089             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute3       := p_txn_ext_attrib_vals_tbl(j).attribute3 ;
4090             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute4       := p_txn_ext_attrib_vals_tbl(j).attribute4 ;
4091             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute5       := p_txn_ext_attrib_vals_tbl(j).attribute5 ;
4092             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute6       := p_txn_ext_attrib_vals_tbl(j).attribute6 ;
4093             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute7       := p_txn_ext_attrib_vals_tbl(j).attribute7 ;
4094             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute8       := p_txn_ext_attrib_vals_tbl(j).attribute8 ;
4095             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute9       := p_txn_ext_attrib_vals_tbl(j).attribute9 ;
4096             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute10      := p_txn_ext_attrib_vals_tbl(j).attribute10;
4097             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute11      := p_txn_ext_attrib_vals_tbl(j).attribute11;
4098             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute12      := p_txn_ext_attrib_vals_tbl(j).attribute12;
4099             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute13      := p_txn_ext_attrib_vals_tbl(j).attribute13;
4100             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute14      := p_txn_ext_attrib_vals_tbl(j).attribute14;
4101             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute15      := p_txn_ext_attrib_vals_tbl(j).attribute15 ;
4102             x_upd_ext_attrib_val_tbl(l_upd_ext).object_version_number := l_obj_ver_num;
4103 
4104             l_upd_ext := l_upd_ext + 1;
4105           END IF; -- end if for ATTRIB_SOURCE_TABLE comparison
4106 
4107         END IF; -- end if for ext.txn_line_detail_id = txn.txn_line_detail_id
4108 
4109       END LOOP; -- end of ext attributes table loop
4110     END IF;-- end of ext attributes count > 0
4111 
4112   EXCEPTION
4113     WHEN fnd_api.g_exc_error THEN
4114       x_return_status := fnd_api.g_ret_sts_error ;
4115     WHEN fnd_api.g_exc_unexpected_error THEN
4116       x_return_status := fnd_api.g_ret_sts_unexp_error ;
4117   END get_ext_attribs_tbl;
4118 
4119     /*  Added p_trx_rec for ER 2581101 */
4120 
4121   PROCEDURE amend_contracts(
4122     p_relationship_type_code in  varchar2,
4123     p_object_instance_id     in  number,
4124     p_subject_instance_id    in  number,
4125     p_trx_rec                in  csi_datastructures_pub.transaction_rec,
4126     x_return_status          OUT NOCOPY varchar2)
4127   IS
4128     l_return_status  varchar2(1) := fnd_api.g_ret_sts_success;
4129     l_msg_count      number;
4130     l_msg_data       varchar2(2000);
4131 
4132     l_old_instance_id  number := null;
4133     l_new_instance_id  number := null;
4134     l_process_flag     boolean := TRUE;
4135 
4136    /*  Fix for ER 2581101  */
4137 
4138     l_upd_instance_rec           csi_datastructures_pub.instance_rec;
4139     l_upd_party_tbl              csi_datastructures_pub.party_tbl;
4140     l_upd_party_acct_tbl         csi_datastructures_pub.party_account_tbl;
4141     l_upd_pricing_attribs_tbl    csi_datastructures_pub.pricing_attribs_tbl;
4142     l_upd_ext_attrib_val_tbl     csi_datastructures_pub.extend_attrib_values_tbl;
4143     l_upd_org_units_tbl          csi_datastructures_pub.organization_units_tbl;
4144     l_upd_inst_asset_tbl         csi_datastructures_pub.instance_asset_tbl;
4145     l_upd_inst_id_lst            csi_datastructures_pub.id_tbl;
4146     l_upd_txn_rec                csi_datastructures_pub.transaction_rec;
4147     l_non_source_change_owner    VARCHAR2(1);
4148     l_non_src_change_owner_code  VARCHAR2(1);
4149     l_location_code              VARCHAR2(30);
4150     l_object_version_number      NUMBER;
4151     px_oks_txn_inst_tbl          oks_ibint_pub.txn_instance_tbl;
4152 
4153    /* End of  Fix for ER 2581101  */
4154 
4155   BEGIN
4156 
4157     x_return_status := fnd_api.g_ret_sts_success;
4158     l_upd_txn_rec   := p_trx_rec;
4159 
4160     api_log('amend_contracts');
4161 
4162     l_process_flag := TRUE;
4163 
4164     /* bug 2355589 the relationship should be read from subject to object */
4165     IF p_relationship_type_code    = 'REPLACED-BY' THEN
4166 
4167       -- SUBJECT replaced by OBJECT
4168       -- OLD replaced by NEW
4169       --
4170       l_old_instance_id := p_subject_instance_id;
4171       l_new_instance_id := p_object_instance_id;
4172 
4173     ELSIF p_relationship_type_code = 'REPLACEMENT-FOR' THEN
4174 
4175       -- SUBJECT replacement for OBJECT
4176       -- NEW replacement for OLD
4177       --
4178       l_new_instance_id := p_subject_instance_id;
4179       l_old_instance_id := p_object_instance_id;
4180 
4181     ELSIF p_relationship_type_code = 'UPGRADED-FROM' THEN
4182 
4183       -- SUBJECT upgraded from OBJECT
4184       -- NEW upgraded from OLD
4185       --
4186       l_new_instance_id := p_subject_instance_id;
4187       l_old_instance_id := p_object_instance_id;
4188 
4189     ELSE
4190       l_process_flag := FALSE;
4191       debug('  Not a valid relationship to process contracts.');
4192     END IF;
4193 
4194     -- additional check to see if both the source and non source points to the same instance
4195     IF l_process_flag THEN
4196       debug(' old_instance_id :'||l_old_instance_id);
4197       debug(' new_instance_id :'||l_new_instance_id);
4198 
4199       -- do nothing if both are same
4200       IF l_old_instance_id = l_new_instance_id THEN
4201         l_process_flag := FALSE;
4202       END IF;
4203 
4204     END IF;
4205 
4206     IF l_process_flag THEN
4207 
4208       csi_t_gen_utility_pvt.dump_api_info(
4209         p_pkg_name => 'csi_item_instance_pvt',
4210         p_api_name => 'call_to_contracts');
4211 
4212       csi_item_instance_pvt.call_to_contracts(
4213         p_transaction_type   => 'RPL',
4214         p_instance_id        => l_old_instance_id,
4215         p_new_instance_id    => l_new_instance_id,
4216         p_vld_org_id         => null,
4217         p_quantity           => null,
4218         p_party_account_id1  => null,
4219         p_party_account_id2  => null,
4220         p_transaction_date   => p_trx_rec.transaction_date, -- null for Bug # 3483763
4221         p_source_transaction_date   => p_trx_rec.source_transaction_date,
4222         p_oks_txn_inst_tbl   => px_oks_txn_inst_tbl,
4223         x_return_status      => l_return_status,
4224         x_msg_count          => l_msg_count,
4225         x_msg_data           => l_msg_data);
4226 
4227       IF l_return_status <> fnd_api.g_ret_sts_success THEN
4228         raise fnd_api.g_exc_error;
4229       END IF;
4230       --
4231       IF px_oks_txn_inst_tbl.count > 0 THEN
4232 	 csi_gen_utility_pvt.dump_oks_txn_inst_tbl(px_oks_txn_inst_tbl);
4233 	 csi_gen_utility_pvt.put_line('Calling OKS Core API...');
4234 	 --
4235          UPDATE CSI_TRANSACTIONS
4236          set contracts_invoked = 'Y'
4237          where transaction_id = p_trx_rec.transaction_id;
4238          --
4239 	 OKS_IBINT_PUB.IB_interface
4240 	    (
4241 	      P_Api_Version           =>  1.0,
4242 	      P_init_msg_list         =>  fnd_api.g_true,
4243 	      P_single_txn_date_flag  =>  'Y',
4244 	      P_Batch_type            =>  NULL,
4245 	      P_Batch_ID              =>  NULL,
4246 	      P_OKS_Txn_Inst_tbl      =>  px_oks_txn_inst_tbl,
4247 	      x_return_status         =>  l_return_status,
4248 	      x_msg_count             =>  l_msg_count,
4249 	      x_msg_data              =>  l_msg_data
4250 	   );
4251 	 --
4252 	 IF NOT(l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4253 	    RAISE FND_API.G_EXC_ERROR;
4254 	 END IF;
4255       END IF;
4256 
4257       /*  Code fix for ER 2581101 */
4258 
4259       debug('Inside amend contracts sub type id :'|| p_trx_rec.txn_sub_type_id);
4260 
4261         BEGIN
4262           SELECT  non_src_change_owner,
4263                   non_src_change_owner_to_code
4264           INTO    l_non_source_change_owner,
4265                   l_non_src_change_owner_code
4266           FROM    csi_txn_sub_types
4267           WHERE   transaction_type_id = csi_order_ship_pub.g_txn_type_id
4268           AND     sub_type_id = p_trx_rec.txn_sub_type_id;
4269 
4270         EXCEPTION
4271           WHEN no_data_found THEN
4272               null;
4273         END;
4274 
4275         BEGIN
4276           SELECT object_version_number,
4277                  location_type_code
4278           INTO   l_object_version_number,
4279                  l_location_code
4280           FROM   csi_item_instances
4281           WHERE  instance_id = l_old_instance_id;
4282 
4283         EXCEPTION
4284           WHEN no_data_found THEN
4285               null;
4286         END;
4287 
4288       debug('  Instance ID     :'||l_old_instance_id);
4289       debug('  location Code   :'||l_location_code);
4290       DEBUG(' l_non_src_change_owner_code : '||l_non_src_change_owner_code);
4291       DEBUG(' l_non_source_change_owner   : '||l_non_source_change_owner);
4292 
4293       IF l_location_code = 'INVENTORY'
4294         AND
4295          l_non_source_change_owner = 'Y'
4296         AND
4297          l_non_src_change_owner_code = 'I'
4298       THEN
4299         debug(' Building Party Table');
4300 
4301         l_upd_party_tbl(1).instance_id            :=  l_old_instance_id;
4302         l_upd_party_tbl(1).party_source_table     :=  'HZ_PARTIES';
4303         l_upd_party_tbl(1).relationship_type_code :=  'OWNER';
4304         l_upd_party_tbl(1).contact_flag           :=  'N';
4305 
4306         BEGIN
4307           Select instance_party_id,
4308                  object_version_number
4309           Into   l_upd_party_tbl(1).instance_party_id,
4310                  l_upd_party_tbl(1).object_version_number
4311          From   csi_i_parties
4312          Where  instance_id = l_old_instance_id
4313          And    relationship_Type_code = 'OWNER';
4314 
4315         EXCEPTION
4316           When No_Data_Found Then
4317                NULL;
4318          END;
4319 
4320 --commented SQL below to make changes for the bug 4028827
4321 /*
4322          BEGIN
4323            Select internal_party_id
4324            Into   l_upd_party_tbl(1).party_id
4325            From   csi_install_parameters;
4326 
4327          EXCEPTION
4328            When NO_Data_Found Then
4329                 NULL;
4330          END;
4331 */
4332         l_upd_party_tbl(1).party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
4333 
4334         debug('Updating the Instance in Non Source Detail to Internal Party..');
4335         debug('Party Tbl count : '||l_upd_party_tbl.count);
4336 
4337         csi_t_gen_utility_pvt.dump_api_info(
4338            p_pkg_name => 'csi_item_instance_pub',
4339            p_api_name => 'update_item_instance');
4340 
4341           csi_item_instance_pub.update_item_instance(
4342             p_api_version           => 1.0,
4343             p_commit                => fnd_api.g_false,
4344             p_init_msg_list         => fnd_api.g_true,
4345             p_validation_level      => fnd_api.g_valid_level_full,
4346             p_instance_rec          => l_upd_instance_rec,
4347             p_ext_attrib_values_tbl => l_upd_ext_attrib_val_tbl,
4348             p_party_tbl             => l_upd_party_tbl,
4349             p_account_tbl           => l_upd_party_acct_tbl,
4350             p_pricing_attrib_tbl    => l_upd_pricing_attribs_tbl,
4351             p_org_assignments_tbl   => l_upd_org_units_tbl,
4352             p_txn_rec               => l_upd_txn_rec,
4353             p_asset_assignment_tbl  => l_upd_inst_asset_tbl,
4354             x_instance_id_lst       => l_upd_inst_id_lst,
4355             x_return_status         => l_return_status,
4356             x_msg_count             => l_msg_count,
4357             x_msg_data              => l_msg_data );
4358 
4359          -- For Bug 4057183
4360          -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
4361          IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
4362             RAISE fnd_api.g_exc_error;
4363          END IF;
4364 
4365       END IF;
4366 
4367       /*  End Of fix for ER 2581101 */
4368 
4369     END IF;
4370 
4371   EXCEPTION
4372     WHEN fnd_api.g_exc_error THEN
4373       x_return_status := fnd_api.g_ret_sts_error;
4374   END amend_contracts;
4375 
4376  /*  Added p_trx_rec for ER 2581101 */
4377   PROCEDURE get_ii_relation_tbl(
4378     p_txn_line_detail_tbl     IN csi_t_datastructures_grp.txn_line_detail_tbl,
4379     p_txn_ii_rltns_tbl        IN csi_t_datastructures_grp.txn_ii_rltns_tbl,
4380     p_trx_rec                 IN csi_datastructures_pub.transaction_rec,
4381     p_order_line_rec          IN csi_order_ship_pub.order_line_rec,
4382     x_cre_ii_rltns_tbl        OUT NOCOPY csi_datastructures_pub.ii_relationship_tbl,
4383     x_upd_ii_rltns_tbl        OUT NOCOPY csi_datastructures_pub.ii_relationship_tbl,
4384     x_return_status           OUT NOCOPY VARCHAR2)
4385   IS
4386     l_cre_ii             NUMBER := 1;
4387     l_upd_ii             NUMBER := 1;
4388     l_date               DATE := TO_DATE('01/01/4712', 'MM/DD/YYYY');
4389     l_object_inst_id     NUMBER;
4390     l_trx_type_id        NUMBER;
4391     l_subject_inst_id    NUMBER;
4392     l_obj_ver_num        NUMBER;
4393     l_return_status      varchar2(1) := fnd_api.g_ret_sts_success;
4394 
4395     /*  Added p_trx_rec for ER 2581101 */
4396     l_nsrc_sub_type_id   NUMBER;
4397     l_trx_rec            csi_datastructures_pub.transaction_rec;
4398 
4399     --l_srl_code           number := null;
4400     l_source_txn_header_id  NUMBER ;
4401     l_txn_line_query_rec    csi_t_datastructures_grp.txn_line_query_rec ;
4402     l_txn_line_detail_query_rec  csi_t_datastructures_grp.txn_line_detail_query_rec ;
4403     l_txn_line_detail_tbl  csi_t_datastructures_grp.txn_line_detail_tbl ;
4404     x_txn_party_detail_tbl csi_t_datastructures_grp.txn_party_detail_tbl ;
4405     x_txn_pty_acct_detail_tbl  csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
4406     x_txn_ii_rltns_tbl     csi_t_datastructures_grp.txn_ii_rltns_tbl ;
4407     x_txn_org_assgn_tbl    csi_t_datastructures_grp.txn_org_assgn_tbl ;
4408     x_txn_ext_attrib_vals_tbl  csi_t_datastructures_grp.txn_ext_attrib_vals_tbl ;
4409     x_csi_ext_attribs_tbl  csi_t_datastructures_grp.csi_ext_attribs_tbl;
4410     x_csi_iea_values_tbl   csi_t_datastructures_grp.csi_ext_attrib_vals_tbl ;
4411     x_txn_systems_tbl      csi_t_datastructures_grp.txn_systems_tbl ;
4412     x_msg_count            NUMBER ;
4413     x_msg_data             VARCHAR2(2000);
4414     x_xface_to_IB_flag     VARCHAR2(1);
4415     l_index                NUMBER ;
4416     l_txn_dtl_line_found   BOOLEAN ;
4417     l_relation_exists      BOOLEAN ;
4418     l_tmp_txn_line_detail_tbl  csi_t_datastructures_grp.txn_line_detail_tbl ;
4419     x_tmp_txn_ii_rltns_tbl     csi_t_datastructures_grp.txn_ii_rltns_tbl ;
4420     l_exp_ii_relationship_rec  csi_datastructures_pub.ii_relationship_rec;
4421     l_exp_instance_id_tbl      csi_datastructures_pub.id_tbl;
4422     g_api_name                 varchar2(80);
4423     l_old_instance_id          NUMBER;
4424     l_new_instance_id          NUMBER;
4425     l_relationship_id          NUMBER;
4426     l_ii_rel_obj_ver_num       NUMBER;
4427     l_expire_object_id         NUMBER;
4428     l_object_version_number    NUMBER;
4429     l_object_id                NUMBER;
4430     l_relationship_type_code   VARCHAR2(30);
4431     l_valid_instance_no        NUMBER;
4432     l_transfer_components_flag VARCHAR2(1);
4433     l_config_instance          VARCHAR2(1);
4434     l_item_status              VARCHAR2(10);
4435     l_location_type_code       VARCHAR2(30);
4436     l_allow_object_replacement VARCHAR2(1);
4437     l_parent_instance_id       NUMBER;
4438     l_t_ii_count               NUMBER;
4439     l_found                    VARCHAR2(1);
4440     l_active_end_date          DATE;
4441     l_line_tbl                 oe_order_pub.line_tbl_type;
4442     /* Added for Bug 2972082 */
4443     l_cascade_owner_flag varchar2(1);
4444 
4445     CURSOR new_transfer_comp(p_instance_id IN NUMBER) IS
4446     SELECT relationship_id, object_version_number,
4447            subject_id, object_id, relationship_type_code
4448     FROM   csi_ii_relationships
4449     WHERE  object_id = p_instance_id
4450     AND    relationship_type_code = 'COMPONENT-OF'
4451     AND    (active_end_date is null OR active_end_date >= sysdate);
4452 
4453     CURSOR check_instance_status(p_instance_id IN NUMBER) IS
4454     SELECT distinct instance_number
4455     FROM   CSI_ITEM_INSTANCES cii, CSI_II_RELATIONSHIPS cir
4456     WHERE  owner_party_id NOT IN (SELECT internal_party_id
4457                                   FROM   csi_install_parameters)
4458     AND (cii.instance_id = cir.object_id or cii.instance_id = cir.subject_id)
4459     AND  cir.relationship_type_code = 'COMPONENT-OF'
4460     AND (cii.active_end_date is null or cii.active_end_date > sysdate)
4461     AND (cir.active_end_date is null or cir.active_end_date > sysdate)
4462     AND  cii.instance_id = p_instance_id;
4463 
4464     CURSOR check_instance_history(p_instance_id IN NUMBER) IS
4465     SELECT instance_history_id, new_location_type_code,
4466            new_instance_status_id
4467     FROM   csi_item_instances_h
4468     WHERE  instance_id = p_instance_id
4469     ORDER  BY instance_history_id desc;
4470 
4471     CURSOR rmarp_transfer_comp(p_instance_id IN NUMBER) IS
4472     SELECT relationship_id, object_version_number,
4473            subject_id, object_id, relationship_type_code
4474     FROM   csi_ii_relationships
4475     WHERE  object_id = p_instance_id
4476     AND    relationship_type_code = 'COMPONENT-OF';
4477 
4478     CURSOR check_item_status_validity(p_instance_id IN NUMBER) IS
4479     SELECT 'RMA' item_status
4480     FROM   csi_ii_relationships
4481     WHERE  subject_id = p_instance_id
4482     AND    relationship_type_code = 'COMPONENT-OF'
4483     AND    (active_end_date IS NOT NULL OR active_end_date <= sysdate)
4484     ORDER  BY RELATIONSHIP_ID DESC;
4485 
4486     CURSOR check_csi_t_ii_rel(p_instance_id IN NUMBER) IS
4487     SELECT txn_relationship_id, object_id, relationship_type_code
4488     FROM   csi_t_ii_relationships
4489     WHERE  object_id = p_instance_id
4490     AND    relationship_type_code = 'COMPONENT-OF'
4491     AND    active_end_date IS NULL;
4492 
4493     CURSOR chk_item_config(p_instance_id IN NUMBER) IS
4494     SELECT 'Y' config_instance, active_end_date
4495     FROM   csi_ii_relationships
4496     WHERE  subject_id = p_instance_id
4497     AND    relationship_type_code = 'COMPONENT-OF'
4498     ORDER  BY relationship_id DESC;
4499 BEGIN
4500 
4501     api_log('get_ii_relation_tbl');
4502 
4503     x_return_status := fnd_api.g_ret_sts_success;
4504 
4505     l_trx_rec       := p_trx_rec;
4506 
4507    ---Get the relations(partners only) associated with the p_txn_line_detail_tbl
4508 
4509     FOR k IN p_txn_line_detail_tbl.FIRST ..  p_txn_line_detail_tbl.LAST
4510     LOOP
4511        ---get partner TLD and its details.
4512        get_partner_rltns
4513           (p_txn_line_detail_rec  => p_txn_line_detail_tbl(k) ,
4514           x_txn_ii_rltns_tbl => x_tmp_txn_ii_rltns_tbl ,
4515           x_txn_line_detail_tbl  => l_tmp_txn_line_detail_tbl,
4516           x_return_status => x_return_status );
4517 
4518            IF x_return_status <> fnd_api.g_ret_sts_success
4519            THEN
4520              raise fnd_api.g_exc_error;
4521            END IF;
4522 
4523       ---APpend the relations to main tbl
4524 
4525      IF x_tmp_txn_ii_rltns_tbl.COUNT > 0
4526      THEN
4527       FOR i IN x_tmp_txn_ii_rltns_tbl.FIRST .. x_tmp_txn_ii_rltns_tbl.LAST
4528       LOOP
4529         debug ('x_tmp_txn_ii_rltns_tbl(i).txn_relationship_id : '||
4530                   x_tmp_txn_ii_rltns_tbl(i).txn_relationship_id);
4531         l_relation_exists := FALSE ;
4532 
4533        IF x_txn_ii_rltns_tbl.COUNT > 0
4534        THEN
4535         FOR j IN x_txn_ii_rltns_tbl.FIRST .. x_txn_ii_rltns_tbl.LAST
4536         LOOP
4537            IF x_tmp_txn_ii_rltns_tbl(i).txn_relationship_id = x_txn_ii_rltns_tbl(j).txn_relationship_id
4538            THEN
4539               l_relation_exists := TRUE;
4540               EXIT ;
4541            END IF ;
4542         END LOOP ;
4543        END IF ;
4544         IF NOT l_relation_exists AND x_tmp_txn_ii_rltns_tbl.COUNT > 0
4545         THEN
4546            l_index := NVL(x_txn_ii_rltns_tbl.LAST,0)+1 ;
4547            x_txn_ii_rltns_tbl(l_index) := x_tmp_txn_ii_rltns_tbl(i) ;
4548         END IF ;
4549       END LOOP ;
4550      END IF ;
4551 
4552       ---APpend the txn line dtls to main tbl
4553      IF l_tmp_txn_line_detail_tbl.COUNT > 0
4554      THEN
4555       FOR i IN l_tmp_txn_line_detail_tbl.FIRST .. l_tmp_txn_line_detail_tbl.LAST
4556       LOOP
4557         l_txn_dtl_line_found := FALSE ;
4558        IF l_txn_line_detail_tbl.COUNT > 0
4559        THEN
4560         FOR j IN l_txn_line_detail_tbl.FIRST .. l_txn_line_detail_tbl.LAST
4561         LOOP
4562            IF l_tmp_txn_line_detail_tbl(i).txn_line_detail_id = l_txn_line_detail_tbl(j).txn_line_detail_id
4563            THEN
4564               l_txn_dtl_line_found := TRUE;
4565               EXIT ;
4566            END IF ;
4567         END LOOP ;
4568        END IF ;
4569         IF NOT l_txn_dtl_line_found AND l_tmp_txn_line_detail_tbl.COUNT > 0
4570         THEN
4571            l_txn_line_detail_tbl(NVL(l_txn_line_detail_tbl.LAST,0)+1) := l_tmp_txn_line_detail_tbl(i) ;
4572         END IF ;
4573       END LOOP ;
4574      END IF ;
4575     END LOOP ; ---p_txn_line_detail_tbl
4576 
4577 
4578        ---Append these partner tlds with the other tld
4579        FOR i IN p_txn_line_detail_tbl.FIRST .. p_txn_line_detail_tbl.LAST
4580        LOOP
4581 	 l_txn_dtl_line_found := FALSE ;
4582         IF l_txn_line_detail_tbl.COUNT > 0
4583         THEN
4584 	 FOR j IN l_txn_line_detail_tbl.FIRST .. l_txn_line_detail_tbl.LAST
4585 	 LOOP
4586 	   IF l_txn_line_detail_tbl(j).txn_line_detail_id = p_txn_line_detail_tbl(i).txn_line_detail_id
4587 	   THEN
4588 	      ---This txn line already exists in p_txn_line_detail_tbl
4589 	      ---so copy it from p_txn_line_detail_tbl
4590               l_txn_line_detail_tbl(j) := p_txn_line_detail_tbl(i) ;
4591 	      l_txn_dtl_line_found := TRUE ;
4592 	      EXIT ;
4593            END IF ;
4594 	 END LOOP ;
4595         END IF ;
4596 	 IF NOT l_txn_dtl_line_found
4597 	 THEN
4598 	   ---apend at the end of the table
4599            l_index := NVL(l_txn_line_detail_tbl.LAST,0) + 1 ;
4600            l_txn_line_detail_tbl(l_index) := p_txn_line_detail_tbl(i) ;
4601          END IF ;
4602        END LOOP ;
4603 
4604     /* Process the instance_relationship */
4605     IF x_txn_ii_rltns_tbl.count > 0
4606     THEN
4607       FOR j in x_txn_ii_rltns_tbl.FIRST..x_txn_ii_rltns_tbl.LAST LOOP
4608 
4609 
4610         ---Added (Start) for m-to-m enhancements
4611         --04/24 added 'CONNECTED-TO' and did changes for
4612         --subject_type and object_type.
4613         -- process only these relations at this time
4614 
4615         rltns_xfaced_to_IB(x_txn_ii_rltns_tbl(j),
4616                           x_xface_to_IB_flag,x_return_status) ;
4617 
4618            IF x_return_status <> fnd_api.g_ret_sts_success
4619            THEN
4620              raise fnd_api.g_exc_error;
4621            END IF;
4622 
4623 
4624         ---Added (End) for m-to-m enhancements
4625 
4626         IF x_txn_ii_rltns_tbl(j).relationship_type_code
4627            IN ('COMPONENT-OF', 'REPLACED-BY', 'REPLACEMENT-FOR', 'UPGRADED-FROM','CONNECTED-TO')
4628         THEN
4629 
4630          IF x_txn_ii_rltns_tbl(j).object_type='T'
4631          THEN
4632          IF x_xface_to_IB_flag = 'N'
4633          THEN
4634             --Does this relations already interfaced to IB?
4635             ---If yes igonre
4636           /* derive object instance_id  */
4637           IF l_txn_line_detail_tbl.count > 0 THEN
4638             FOR i IN l_txn_line_detail_tbl.FIRST..l_txn_line_detail_tbl.LAST
4639             LOOP
4640               IF l_txn_line_detail_tbl(i).txn_line_detail_id = x_txn_ii_rltns_tbl(j).object_id
4641               THEN
4642                 IF l_txn_line_detail_tbl(i).source_transaction_flag = 'Y' THEN
4643                   l_object_inst_id := l_txn_line_detail_tbl(i).changed_instance_id;
4644                 ELSE
4645                   l_parent_instance_id := l_txn_line_detail_tbl(i).parent_instance_id;
4646                   l_object_inst_id := l_txn_line_detail_tbl(i).instance_id;
4647                       /*  Added p_trx_rec for ER 2581101 */
4648                   l_nsrc_sub_type_id := p_txn_line_detail_tbl(i).sub_type_id;
4649                 END IF;
4650                 EXIT;
4651               END IF;
4652             END LOOP;
4653           END IF; ---x_xface_to_IB_flag = 'N'
4654           END IF ;
4655          ELSE
4656            l_object_inst_id := x_txn_ii_rltns_tbl(j).object_id ;
4657          END IF ; ---x_txn_ii_rltns_tbl(j).object_type='T'
4658 
4659          IF x_txn_ii_rltns_tbl(j).subject_type='T'
4660          THEN
4661          IF x_xface_to_IB_flag = 'N'
4662          THEN
4663           /* derive subject instance_id */
4664           IF l_txn_line_detail_tbl.count > 0
4665           THEN
4666             FOR i IN l_txn_line_detail_tbl.FIRST..l_txn_line_detail_tbl.LAST LOOP
4667               IF l_txn_line_detail_tbl(i).txn_line_detail_id = x_txn_ii_rltns_tbl(j).subject_id
4668               THEN
4669 
4670                 -- Begin Fix for Bug 2972082
4671                 debug('txn_line_detail_id  = '||to_char(p_txn_line_detail_tbl(i).txn_line_detail_id));
4672                 l_cascade_owner_flag := nvl(p_txn_line_detail_tbl(i).cascade_owner_flag,'N');
4673                 -- End fix for Bug 2972082
4674 
4675                 IF l_txn_line_detail_tbl(i).source_transaction_flag = 'Y' THEN
4676                   l_subject_inst_id := l_txn_line_detail_tbl(i).changed_instance_id;
4677                 ELSE
4678                   l_subject_inst_id    := l_txn_line_detail_tbl(i).instance_id;
4679                   l_parent_instance_id := l_txn_line_detail_tbl(i).parent_instance_id;
4680                       /*  Added p_trx_rec for ER 2581101 */
4681                   l_nsrc_sub_type_id := p_txn_line_detail_tbl(i).sub_type_id;
4682                 END IF;
4683                 EXIT;
4684               END IF;
4685             END LOOP;
4686           END IF;
4687          END IF ; --x_xface_to_IB_flag
4688        ELSE
4689            l_subject_inst_id := x_txn_ii_rltns_tbl(j).subject_id ;
4690        END IF ;
4691 
4692          debug('  Parent Instance ID  :'||l_parent_instance_id );
4693          debug('  Object Instance ID  :'||l_object_inst_id );
4694          debug('  Subject Instance ID :'||l_subject_inst_id );
4695          debug('  Relationship Code   :'||x_txn_ii_rltns_tbl(j).relationship_type_code);
4696          debug('  II Relationship ID  :'||x_txn_ii_rltns_tbl(j).csi_inst_relationship_id );
4697 
4698        ---Added (Start) for m-to-m enhancements
4699        ---05/13
4700 
4701        debug('  Parent Instance Id : '||l_parent_instance_id);
4702 
4703        IF l_subject_inst_id IS NOT NULL
4704        AND l_object_inst_id IS NOT NULL
4705        THEN
4706        ---Added (End) for m-to-m enhancements
4707          IF x_txn_ii_rltns_tbl(j).relationship_type_code IN ('COMPONENT-OF',
4708             'CONNECTED-TO')
4709          THEN
4710 
4711            IF NVL(x_txn_ii_rltns_tbl(j).csi_inst_relationship_id,fnd_api.g_miss_num ) <>
4712               fnd_api.g_miss_num
4713               AND
4714               (NVL(x_txn_ii_rltns_tbl(j).active_end_date,l_date ) > sysdate)
4715            THEN
4716 
4717              /* Build the table for updating the instance relationship */
4718 
4719              l_obj_ver_num := csi_utl_pkg.get_ii_obj_ver_num(
4720                             x_txn_ii_rltns_tbl(j).csi_inst_relationship_id);
4721 
4722              IF l_obj_ver_num = -1  THEN
4723                  RAISE fnd_api.g_exc_error;
4724              END IF;
4725 
4726              x_upd_ii_rltns_tbl(l_upd_ii).relationship_id    := x_txn_ii_rltns_tbl(j).csi_inst_relationship_id;
4727              x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := x_txn_ii_rltns_tbl(j).relationship_type_code;
4728              x_upd_ii_rltns_tbl(l_upd_ii).object_id := l_object_inst_id;
4729              x_upd_ii_rltns_tbl(l_upd_ii).subject_id := l_subject_inst_id;
4730              x_upd_ii_rltns_tbl(l_upd_ii).position_reference := x_txn_ii_rltns_tbl(j).position_reference;
4731              x_upd_ii_rltns_tbl(l_upd_ii).active_end_date := x_txn_ii_rltns_tbl(j).active_end_date;
4732              x_upd_ii_rltns_tbl(l_upd_ii).display_order := x_txn_ii_rltns_tbl(j).display_order;
4733              x_upd_ii_rltns_tbl(l_upd_ii).mandatory_flag := x_txn_ii_rltns_tbl(j).mandatory_flag;
4734              x_upd_ii_rltns_tbl(l_upd_ii).context := x_txn_ii_rltns_tbl(j).context;
4735              x_upd_ii_rltns_tbl(l_upd_ii).attribute1 := x_txn_ii_rltns_tbl(j).attribute1;
4736              x_upd_ii_rltns_tbl(l_upd_ii).attribute2 := x_txn_ii_rltns_tbl(j).attribute2;
4737              x_upd_ii_rltns_tbl(l_upd_ii).attribute3 := x_txn_ii_rltns_tbl(j).attribute3;
4738              x_upd_ii_rltns_tbl(l_upd_ii).attribute4 := x_txn_ii_rltns_tbl(j).attribute4;
4739              x_upd_ii_rltns_tbl(l_upd_ii).attribute5 := x_txn_ii_rltns_tbl(j).attribute5;
4740              x_upd_ii_rltns_tbl(l_upd_ii).attribute6 := x_txn_ii_rltns_tbl(j).attribute6;
4741              x_upd_ii_rltns_tbl(l_upd_ii).attribute7 := x_txn_ii_rltns_tbl(j).attribute7;
4742              x_upd_ii_rltns_tbl(l_upd_ii).attribute8 := x_txn_ii_rltns_tbl(j).attribute8;
4743              x_upd_ii_rltns_tbl(l_upd_ii).attribute9 := x_txn_ii_rltns_tbl(j).attribute9;
4744              x_upd_ii_rltns_tbl(l_upd_ii).attribute10 := x_txn_ii_rltns_tbl(j).attribute10;
4745              x_upd_ii_rltns_tbl(l_upd_ii).attribute11 := x_txn_ii_rltns_tbl(j).attribute11;
4746              x_upd_ii_rltns_tbl(l_upd_ii).attribute12 := x_txn_ii_rltns_tbl(j).attribute12;
4747              x_upd_ii_rltns_tbl(l_upd_ii).attribute13 := x_txn_ii_rltns_tbl(j).attribute13;
4748              x_upd_ii_rltns_tbl(l_upd_ii).attribute14 := x_txn_ii_rltns_tbl(j).attribute14;
4749              x_upd_ii_rltns_tbl(l_upd_ii).attribute15 := x_txn_ii_rltns_tbl(j).attribute15;
4750 
4751              -- Begin fix for Bug 2972082
4752              x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
4753              -- End fix for Bug 2972082
4754 
4755              x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := l_obj_ver_num;
4756 
4757              l_upd_ii := l_upd_ii + 1;
4758            ELSE
4759              /* Build the table for creating the new instance relationships */
4760 
4761              x_cre_ii_rltns_tbl(l_cre_ii).relationship_type_code := x_txn_ii_rltns_tbl(j).relationship_type_code;
4762              x_cre_ii_rltns_tbl(l_cre_ii).object_id  := l_object_inst_id ;
4763              x_cre_ii_rltns_tbl(l_cre_ii).subject_id := l_subject_inst_id;
4764              x_cre_ii_rltns_tbl(l_cre_ii).position_reference := x_txn_ii_rltns_tbl(j).position_reference;
4765              x_cre_ii_rltns_tbl(l_cre_ii).display_order := x_txn_ii_rltns_tbl(j).display_order ;
4766              x_cre_ii_rltns_tbl(l_cre_ii).mandatory_flag := x_txn_ii_rltns_tbl(j).mandatory_flag;
4767              x_cre_ii_rltns_tbl(l_cre_ii).active_start_date  := NVL(x_txn_ii_rltns_tbl(l_cre_ii).active_start_date, SYSDATE );
4768              x_cre_ii_rltns_tbl(l_cre_ii).active_end_date := NULL ;
4769              x_cre_ii_rltns_tbl(l_cre_ii).context     := x_txn_ii_rltns_tbl(j).context;
4770              x_cre_ii_rltns_tbl(l_cre_ii).attribute1  := x_txn_ii_rltns_tbl(j).attribute1;
4771              x_cre_ii_rltns_tbl(l_cre_ii).attribute2  := x_txn_ii_rltns_tbl(j).attribute2;
4772              x_cre_ii_rltns_tbl(l_cre_ii).attribute3  := x_txn_ii_rltns_tbl(j).attribute3;
4773              x_cre_ii_rltns_tbl(l_cre_ii).attribute4  := x_txn_ii_rltns_tbl(j).attribute4;
4774              x_cre_ii_rltns_tbl(l_cre_ii).attribute5  := x_txn_ii_rltns_tbl(j).attribute5;
4775              x_cre_ii_rltns_tbl(l_cre_ii).attribute6  := x_txn_ii_rltns_tbl(j).attribute6;
4776              x_cre_ii_rltns_tbl(l_cre_ii).attribute7  := x_txn_ii_rltns_tbl(j).attribute7;
4777              x_cre_ii_rltns_tbl(l_cre_ii).attribute8  := x_txn_ii_rltns_tbl(j).attribute8;
4778              x_cre_ii_rltns_tbl(l_cre_ii).attribute9  := x_txn_ii_rltns_tbl(j).attribute9;
4779              x_cre_ii_rltns_tbl(l_cre_ii).attribute10 := x_txn_ii_rltns_tbl(j).attribute10;
4780              x_cre_ii_rltns_tbl(l_cre_ii).attribute11 := x_txn_ii_rltns_tbl(j).attribute11;
4781              x_cre_ii_rltns_tbl(l_cre_ii).attribute12 := x_txn_ii_rltns_tbl(j).attribute12;
4782              x_cre_ii_rltns_tbl(l_cre_ii).attribute13 := x_txn_ii_rltns_tbl(j).attribute13;
4783              x_cre_ii_rltns_tbl(l_cre_ii).attribute14 := x_txn_ii_rltns_tbl(j).attribute14;
4784              x_cre_ii_rltns_tbl(l_cre_ii).attribute15 := x_txn_ii_rltns_tbl(j).attribute15;
4785 
4786              -- Begin fix for Bug 2972082
4787              x_cre_ii_rltns_tbl(l_cre_ii).cascade_ownership_flag := l_cascade_owner_flag;
4788              -- End fix for Bug 2972082
4789 
4790              x_cre_ii_rltns_tbl(l_cre_ii).object_version_number := fnd_api.g_miss_num;
4791 
4792              l_cre_ii := l_cre_ii + 1;
4793            END IF;
4794 
4795          ELSE
4796 
4797            /*  Added p_trx_rec for ER 2581101 */
4798            l_trx_rec.txn_sub_type_id := l_nsrc_sub_type_id;
4799 
4800           /*  Added p_trx_rec for ER 2581101 */
4801 
4802            amend_contracts(
4803              p_relationship_type_code => x_txn_ii_rltns_tbl(j).relationship_type_code,
4804              p_object_instance_id     => l_object_inst_id,
4805              p_subject_instance_id    => l_subject_inst_id,
4806              p_trx_rec                => l_trx_rec,
4807              x_return_status          => l_return_status);
4808 
4809            IF l_return_status <> fnd_api.g_ret_sts_success THEN
4810              raise fnd_api.g_exc_error;
4811            END IF;
4812 
4813            IF x_txn_ii_rltns_tbl(j).relationship_type_code = 'REPLACED-BY' THEN
4814               -- SUBJECT replaced by OBJECT
4815               -- OLD replaced by NEW
4816               --
4817               l_old_instance_id := l_subject_inst_id;
4818               l_new_instance_id := l_object_inst_id;
4819            ELSIF x_txn_ii_rltns_tbl(j).relationship_type_code = 'REPLACEMENT-FOR' THEN
4820               -- SUBJECT replacement for OBJECT
4821               -- NEW replacement for OLD
4822               --
4823               l_new_instance_id := l_subject_inst_id;
4824               l_old_instance_id := l_object_inst_id;
4825            ELSIF x_txn_ii_rltns_tbl(j).relationship_type_code = 'UPGRADED-FROM' THEN
4826               -- SUBJECT upgraded from OBJECT
4827               -- NEW upgraded from OLD
4828               --
4829               l_new_instance_id := l_subject_inst_id;
4830               l_old_instance_id := l_object_inst_id;
4831            ELSE
4832               debug(' Unable to re-assign subject/object instance id.');
4833            END IF;
4834            -----
4835            /* Replacement Enhancement for 11.5.10 */
4836            IF x_txn_ii_rltns_tbl(j).relationship_type_code IN ('REPLACED-BY', 'REPLACEMENT-FOR', 'UPGRADED-FROM')  THEN
4837 
4838               /* Check if item is in a configuration */
4839               FOR itm_cfg_rec in chk_item_config(l_old_instance_id) LOOP
4840                   l_config_instance := itm_cfg_rec.config_instance;
4841                   l_active_end_date := itm_cfg_rec.active_end_date;
4842                   EXIT;
4843               END LOOP;
4844 
4845               IF l_config_instance IS NULL THEN
4846                  l_config_instance := 'N';
4847               END IF;
4848 
4849               IF l_config_instance = 'Y' THEN
4850                  IF  l_parent_instance_id IS NULL THEN --Changed for Bug 10271626 --Removed l_active_end_date for bug 14569208
4851                     l_config_instance := 'N';
4852                  END IF;
4853               END IF;
4854 
4855               debug('l_config_instance = '||l_config_instance);
4856               IF l_config_instance = 'Y' THEN
4857                  /* Check if item being replaced is in the same configuration */
4858                  BEGIN
4859                     SELECT 'x'
4860                     INTO   l_found
4861                     FROM   csi_ii_relationships
4862                     WHERE  subject_id = l_old_instance_id
4863                     AND    object_id  = l_parent_instance_id;
4864                  EXCEPTION
4865                     WHEN NO_DATA_FOUND THEN
4866                        fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
4867                        fnd_message.set_token('INSTANCE_ID',l_subject_inst_id);
4868                        fnd_msg_pub.add;
4869                        debug('Item being replaced belongs to a different configuration.');
4870                        RAISE fnd_api.g_exc_error;
4871                     WHEN OTHERS THEN
4872                        fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
4873                        fnd_message.set_token('INSTANCE_ID',l_subject_inst_id);
4874                        fnd_msg_pub.add;
4875                        debug('Item being replaced belongs to a different configuration.');
4876                        RAISE fnd_api.g_exc_error;
4877                  END;
4878 
4879                  /* Check item location */
4880                  BEGIN
4881                     SELECT location_type_code
4882                     INTO   l_location_type_code
4883                     FROM   csi_item_instances
4884                     WHERE  instance_id = l_old_instance_id;
4885                  EXCEPTION
4886                     WHEN OTHERS THEN
4887                        fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
4888                        fnd_message.set_token('INSTANCE_ID',l_subject_inst_id);
4889                        fnd_msg_pub.add;
4890                        debug('Item being replaced belongs to a different configuration.');
4891                        RAISE fnd_api.g_exc_error;
4892                  END;
4893                  debug('Item location_type_code = '||l_location_type_code);
4894 
4895                  IF l_location_type_code NOT IN ('HZ_PARTY_SITES','HZ_LOCATIONS') THEN
4896                     /* Check item history */
4897                     l_item_status := null;
4898 
4899                     FOR instance_rec in check_instance_history(l_old_instance_id)
4900                     LOOP
4901                        debug('instance_rec.location_type_code = '||instance_rec.new_location_type_code);
4902 
4903                        /* Check if item is an RMA or a REPAIR */
4904                        IF instance_rec.new_location_type_code = 'INVENTORY' THEN
4905                           FOR inst_rec in check_item_status_validity(l_old_instance_id)
4906                           LOOP
4907                              l_item_status := inst_rec.item_status;
4908                              EXIT;
4909                           END LOOP;
4910 
4911                           debug('l_item_status = '||l_item_status);
4912                           IF l_item_status is null THEN
4913                              fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
4914                              fnd_message.set_token('INSTANCE_ID',l_subject_inst_id);
4915                              fnd_msg_pub.add;
4916                              debug('Item is in INVENTORY and relationship is Active');
4917                              RAISE fnd_api.g_exc_error;
4918                           ELSE
4919                              /* Check if it is a repair */
4920                              IF l_old_instance_id = l_new_instance_id THEN
4921                                 l_item_status := 'REPAIR';
4922                              END IF;
4923                           END IF;
4924                           EXIT;
4925                        END IF;
4926                     END LOOP;
4927 
4928                     IF l_item_status IS NULL THEN
4929                        /* Check if it is a repair */
4930                        IF l_old_instance_id = l_new_instance_id THEN
4931                           l_item_status := 'REPAIR';
4932                        ELSE
4933                           l_item_status := 'NEW';
4934                        END IF;
4935                     END IF;
4936                  ELSE
4937                     /* Check if it is a repair */
4938                     IF l_old_instance_id = l_new_instance_id THEN
4939                        l_item_status := 'REPAIR';
4940                     ELSE
4941                        l_item_status := 'NEW';
4942                     END IF;
4943                  END IF;
4944                  l_transfer_components_flag :=  nvl(x_txn_ii_rltns_tbl(j).transfer_components_flag,'N');
4945                  debug('Transfer Component is '||l_transfer_components_flag);
4946                  debug('item status is '||l_item_status);
4947 
4948                  /* If tranfer component flag is 'Y' then do more checking*/
4949                  IF l_transfer_components_flag = 'Y' THEN
4950                     /* Check for csi_t_ii_relationships for BOM expl */
4951                     l_t_ii_count := 0;
4952                     FOR i in check_csi_t_ii_rel(l_new_instance_id)
4953                     LOOP
4954                        l_t_ii_count := l_t_ii_count + 1;
4955                     END LOOP;
4956 
4957                     IF l_t_ii_count > 0 THEN
4958                        l_transfer_components_flag := 'N';
4959                     END IF;
4960                  END IF;
4961 
4962                  debug('Trf Comp After BOM Check = '||l_transfer_components_flag);
4963                  IF l_transfer_components_flag = 'Y' THEN
4964                  debug('New Instance Id = '||to_char(l_new_instance_id));
4965                     /* Check for csi_ii_relationships(item being shipped) */
4966                     BEGIN
4967                        SELECT 'N'
4968                        INTO   l_transfer_components_flag
4969                        FROM   csi_ii_relationships
4970                        WHERE  object_id = l_new_instance_id
4971                        AND    relationship_type_code = 'COMPONENT-OF'
4972                        AND    active_end_date IS NULL;
4973                     EXCEPTION
4974                        WHEN NO_DATA_FOUND THEN
4975                           null;
4976                        WHEN TOO_MANY_ROWS THEN
4977                           l_transfer_components_flag := 'N';
4978                     END;
4979                  END IF;
4980                  debug('Trf Comp After CSI_II Check = '||l_transfer_components_flag);
4981 
4982                  IF l_transfer_components_flag = 'Y' THEN
4983                     /* Check for get_ib_trackable_children */
4984                     get_ib_trackable_children(
4985                        p_order_line_rec     => p_order_line_rec,
4986                        x_trackable_line_tbl => l_line_tbl,
4987                        x_return_status      => l_return_status);
4988 
4989                        IF l_return_status <> fnd_api.g_ret_sts_success THEN
4990                           RAISE fnd_api.g_exc_error;
4991                        END IF;
4992 
4993                        debug('IB Trackable Children Count :'||l_line_tbl.COUNT);
4994 
4995                        IF l_line_tbl.COUNT > 0 THEN
4996                           l_transfer_components_flag := 'N';
4997                        END IF;
4998                  END IF;
4999                  /* End of transfer component flag checking */
5000                  debug('Trf Comp After IB track Check = '||l_transfer_components_flag);
5001 
5002                  IF l_item_status = 'NEW' THEN
5003                     debug('Item is NEW');
5004                     /* Check if it is valid for replacement */
5005                     OPEN check_instance_status(l_old_instance_id);
5006                     FETCH check_instance_status into l_valid_instance_no;
5007 
5008                     IF check_instance_status%notfound THEN
5009                        close check_instance_status;
5010                        fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
5011                        fnd_message.set_token('INSTANCE_ID',l_old_instance_id);
5012                        fnd_msg_pub.add;
5013                        debug('Check instance status - The item being replaced is no longer valid.');
5014                        RAISE fnd_api.g_exc_error;
5015                     ELSE
5016                        close check_instance_status;
5017                     END IF;
5018 
5019                     BEGIN
5020 					   SELECT relationship_id, object_version_number,
5021                               object_id, relationship_type_code
5022                        INTO   l_relationship_id, l_ii_rel_obj_ver_num,
5023                               l_expire_object_id, l_relationship_type_code
5024                        FROM   csi_ii_relationships
5025                        WHERE  subject_id = l_old_instance_id
5026                        AND    relationship_type_code = 'COMPONENT-OF'
5027 					   AND    object_id = l_parent_instance_id; -- Added for bug 14163453
5028 					   --AND    (active_end_date is null OR active_end_date > sysdate); -- commented for bug 14163453
5029 
5030                        x_upd_ii_rltns_tbl(l_upd_ii).relationship_id    :=  l_relationship_id;
5031                        x_upd_ii_rltns_tbl(l_upd_ii).subject_id := l_new_instance_id;
5032                        x_upd_ii_rltns_tbl(l_upd_ii).object_id := l_expire_object_id;
5033 					   x_upd_ii_rltns_tbl(l_upd_ii).active_end_date := null; -- Added for bug 14163453
5034                        x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := l_relationship_type_code;
5035                        x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := l_ii_rel_obj_ver_num;
5036                        x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
5037 
5038                        l_upd_ii := l_upd_ii + 1;
5039                     EXCEPTION
5040                        WHEN NO_DATA_FOUND THEN
5041                           fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
5042                           fnd_message.set_token('INSTANCE_ID',l_old_instance_id);
5043                           fnd_msg_pub.add;
5044                           debug('No data found - Item being replaced is no longer valid.');
5045                           RAISE fnd_api.g_exc_error;
5046                        WHEN OTHERS THEN
5047                           fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
5048                           fnd_message.set_token('INSTANCE_ID',l_old_instance_id);
5049                           fnd_msg_pub.add;
5050                           debug('Others - Item being replaced is no longer valid');
5051                           RAISE fnd_api.g_exc_error;
5052                     END;
5053 
5054                     /* Transfer the child components */
5055                     IF nvl(l_transfer_components_flag,'N') = 'Y' THEN
5056                        FOR i in new_transfer_comp(l_old_instance_id)
5057                        LOOP
5058                           IF i.relationship_id IS NOT NULL THEN
5059                              x_upd_ii_rltns_tbl(l_upd_ii).relationship_id    := i.relationship_id;
5060                              x_upd_ii_rltns_tbl(l_upd_ii).object_id := i.object_id;
5061                              x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := i.relationship_type_code;
5062                              x_upd_ii_rltns_tbl(l_upd_ii).subject_id := i.subject_id;
5063                              x_upd_ii_rltns_tbl(l_upd_ii).active_end_date := sysdate;
5064                              x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := i.object_version_number;
5065                              x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
5066                              l_upd_ii := l_upd_ii + 1;
5067 
5068                              x_cre_ii_rltns_tbl(l_cre_ii).relationship_type_code := 'COMPONENT-OF';
5069                              x_cre_ii_rltns_tbl(l_cre_ii).object_id  := l_new_instance_id;
5070                              x_cre_ii_rltns_tbl(l_cre_ii).subject_id := i.subject_id;
5071                              x_cre_ii_rltns_tbl(l_cre_ii).object_version_number := 1;
5072                              x_cre_ii_rltns_tbl(l_cre_ii).cascade_ownership_flag  := l_cascade_owner_flag;
5073                              l_cre_ii := l_cre_ii + 1;
5074                           END IF;
5075                        END LOOP;
5076                     END IF;
5077                  ELSE
5078                     debug('Item is in REPAIR/RMA');
5079                     /* Repair or RMA item */
5080                     BEGIN
5081                        SELECT relationship_id, object_version_number,
5082                               object_id, relationship_type_code
5083                        INTO   l_relationship_id, l_object_version_number,
5084                               l_object_id, l_relationship_type_code
5085                        FROM   csi_ii_relationships
5086                        WHERE  subject_id = l_old_instance_id
5087                        AND    object_id  = l_parent_instance_id
5088                        AND    relationship_type_code = 'COMPONENT-OF'
5089                        AND    (active_end_date IS NOT NULL OR active_end_date <= sysdate);
5090 
5091                        x_upd_ii_rltns_tbl(l_upd_ii).relationship_id    :=  l_relationship_id;
5092                        x_upd_ii_rltns_tbl(l_upd_ii).subject_id := l_new_instance_id;
5093                        x_upd_ii_rltns_tbl(l_upd_ii).object_id := l_object_id;
5094                        x_upd_ii_rltns_tbl(l_upd_ii).active_end_date := null;
5095                        x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := l_relationship_type_code;
5096                        x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := l_object_version_number;
5097                        x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
5098                        l_upd_ii := l_upd_ii + 1;
5099 
5100                        IF nvl(l_transfer_components_flag,'N') = 'Y' THEN
5101                           FOR i in rmarp_transfer_comp(l_old_instance_id)
5102                           LOOP
5103                              IF i.relationship_id IS NOT NULL THEN
5104                                 x_upd_ii_rltns_tbl(l_upd_ii).relationship_id    := i.relationship_id;
5105                                 x_upd_ii_rltns_tbl(l_upd_ii).object_id := i.object_id;
5106                                 x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := i.relationship_type_code;
5107                                 x_upd_ii_rltns_tbl(l_upd_ii).subject_id := i.subject_id;
5108                                 x_upd_ii_rltns_tbl(l_upd_ii).active_end_date := sysdate;
5109                                 x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := i.object_version_number;
5110                                 x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
5111                                 l_upd_ii := l_upd_ii + 1;
5112 
5113                                 x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := 'COMPONENT-OF';
5114                                 x_upd_ii_rltns_tbl(l_upd_ii).object_id  := l_new_instance_id;
5115                                 x_upd_ii_rltns_tbl(l_upd_ii).subject_id := i.subject_id;
5116                                 x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := 1;
5117                                 x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
5118                                 l_upd_ii := l_upd_ii + 1;
5119 
5120                                 -- x_cre_ii_rltns_tbl(l_cre_ii).relationship_type_code := 'COMPONENT-OF';
5121                                 -- x_cre_ii_rltns_tbl(l_cre_ii).object_id  := l_new_instance_id;
5122                                 -- x_cre_ii_rltns_tbl(l_cre_ii).subject_id := i.subject_id;
5123                                 -- x_cre_ii_rltns_tbl(l_cre_ii).object_version_number := 1;
5124                                 -- l_cre_ii := l_cre_ii + 1;
5125                              END IF;
5126                           END LOOP;
5127                        END IF;
5128                     EXCEPTION
5129                        WHEN NO_DATA_FOUND THEN
5130                           fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
5131                           fnd_message.set_token('INSTANCE_ID',l_old_instance_id);
5132                           fnd_msg_pub.add;
5133                           debug('No data found - Item being replaced is no longer valid.');
5134                           RAISE fnd_api.g_exc_error;
5135                        WHEN OTHERS THEN
5136                           fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
5137                           fnd_message.set_token('INSTANCE_ID',l_old_instance_id);
5138                           fnd_msg_pub.add;
5139                           debug('Others - Item being replaced is no longer valid');
5140                           RAISE fnd_api.g_exc_error;
5141                     END;
5142                  END IF;
5143               END IF;
5144               debug('End of transfer components check');
5145            END IF; --  End of replacement enhancement
5146          END IF; -- component-of
5147        END IF ;----l_subject_id , object_id is NOT NULL
5148      END IF; -- component of, replaced by, replacement for, upgraded from relation
5149     END LOOP; -- end of inst relationship table loop
5150    END IF;-- end of inst relationship table count > 0
5151 
5152   EXCEPTION
5153      WHEN fnd_api.g_exc_error THEN
5154           x_return_status := fnd_api.g_ret_sts_error ;
5155      WHEN fnd_api.g_exc_unexpected_error THEN
5156           x_return_status := fnd_api.g_ret_sts_unexp_error ;
5157   END get_ii_relation_tbl;
5158 
5159 
5160   PROCEDURE rebuild_tbls(
5161     p_new_instance_id         IN NUMBER,
5162     x_upd_party_tbl           IN OUT NOCOPY csi_datastructures_pub.party_tbl,
5163     x_upd_party_acct_tbl      IN OUT NOCOPY csi_datastructures_pub.party_account_tbl,
5164     x_upd_org_units_tbl       IN OUT NOCOPY csi_datastructures_pub.organization_units_tbl,
5165     x_upd_ext_attrib_val_tbl  IN OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl,
5166     x_cre_org_units_tbl       IN OUT NOCOPY csi_datastructures_pub.organization_units_tbl,
5167     x_cre_ext_attrib_val_tbl  IN OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl,
5168     x_txn_ii_rltns_tbl        IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
5169     x_txn_line_detail_rec     IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_rec,
5170     x_return_status           OUT NOCOPY VARCHAR2)
5171   IS
5172 
5173     l_instance_party_id    NUMBER;
5174     l_instance_id          NUMBER;
5175     l_inst_pty_obj_ver_num NUMBER;
5176     l_ip_account_id        NUMBER;
5177     l_pty_acct_obj_ver_num NUMBER;
5178     l_instance_ou_id       NUMBER;
5179 	l_instance_ou_id_check NUMBER; -- added for 8309196
5180     l_ou_obj_ver_num       NUMBER;
5181     l_attrib_value_id      NUMBER;
5182     l_av_obj_ver_num       NUMBER;
5183     l_inst_pty_id          NUMBER;
5184 
5185 	l_update_ou_found  boolean; 	-- added for 8309196
5186     l_ou_found         boolean;
5187     l_cou_ind          binary_integer := 0;
5188     l_uou_ind          binary_integer := 0;
5189     l_upd_ou_tbl       csi_datastructures_pub.organization_units_tbl;
5190     l_cre_ou_tbl       csi_datastructures_pub.organization_units_tbl;
5191 
5192     l_return_status    varchar2(1) := fnd_api.g_ret_sts_success;
5193 
5194   BEGIN
5195 
5196     api_log('rebuild_tbls');
5197 
5198     x_return_status := fnd_api.g_ret_sts_success;
5199 
5200     l_instance_id := p_new_instance_id;
5201 
5202     IF x_upd_party_tbl.count > 0 THEN
5203       FOR i in x_upd_party_tbl.first..x_upd_party_tbl.last
5204       LOOP
5205 
5206         IF x_upd_party_tbl(i).relationship_type_code = 'OWNER'
5207         THEN
5208 
5209           BEGIN
5210             SELECT instance_id,
5211                    instance_party_id,
5212                    object_version_number
5213             INTO   x_upd_party_tbl(i).instance_id,
5214                    x_upd_party_tbl(i).instance_party_id,
5215                    x_upd_party_tbl(i).object_version_number
5216             FROM   csi_i_parties
5217             WHERE  instance_id = l_instance_id
5218             AND    relationship_type_code = 'OWNER'
5219             AND   (sysdate > nvl(active_start_date, sysdate -1)
5220                    OR
5221                    sysdate < nvl(active_end_date, sysdate +1) );
5222           EXCEPTION
5223             WHEN no_data_found THEN
5224               fnd_message.set_name('CSI','CSI_INT_INST_OWNER_MISSING');
5225               fnd_message.set_token('INSTANCE_ID',l_instance_id);
5226               fnd_msg_pub.add;
5227               raise fnd_api.g_exc_error;
5228           END;
5229 
5230           IF x_upd_party_acct_tbl.count > 0 THEN
5231             FOR j IN x_upd_party_acct_tbl.first..x_upd_party_acct_tbl.last
5232             LOOP
5233               -- Commented thecondition for 11.5.9 porting bug 3625218
5234               -- IF x_upd_party_acct_tbl(j).relationship_type_code = 'OWNER' THEN
5235                 x_upd_party_acct_tbl(j).instance_party_id := x_upd_party_tbl(i).instance_party_id;
5236               -- END IF;
5237             END LOOP;
5238           END IF;
5239 
5240         END IF;
5241 
5242       END LOOP;
5243     END IF;
5244 
5245     -- Rebuilding the Organization assignments
5246     IF x_upd_org_units_tbl.count > 0 THEN
5247       FOR l_upd_org in x_upd_org_units_tbl.first..x_upd_org_units_tbl.last
5248       LOOP
5249 
5250 		-- Code Addition for the bug  8309196
5251 		l_update_ou_found := FALSE;
5252 
5253         BEGIN
5254           SELECT instance_ou_id
5255           INTO   l_instance_ou_id_check
5256           FROM   csi_i_org_assignments
5257           WHERE  instance_id            = l_instance_id
5258           AND    relationship_type_code = x_upd_org_units_tbl(l_upd_org).relationship_type_code
5259 		  AND   ((active_end_date is null ) OR (active_end_date > sysdate));                     -- Added for the bug 7333901
5260 
5261           l_update_ou_found := TRUE;
5262 
5263         EXCEPTION
5264           WHEN no_data_found THEN
5265             null;
5266           WHEN too_many_rows THEN
5267             null;
5268         END;
5269 
5270 		IF l_update_ou_found THEN
5271 			l_uou_ind := l_upd_ou_tbl.count + 1;
5272 		-- If the instance_ou_id is found, update the org assignment
5273 		-- End of Code Addition for the bug 8309196
5274 
5275 			l_upd_ou_tbl(l_uou_ind) := x_upd_org_units_tbl(l_upd_org); -- Modified for the bug  8309196
5276 
5277 			csi_utl_pkg.get_org_assign(
5278 			  p_instance_id        => l_instance_id ,
5279 			  p_operating_unit_id  => x_upd_org_units_tbl(l_upd_org).operating_unit_id,
5280 			  p_rel_type_code      => x_upd_org_units_tbl(l_upd_org).relationship_type_code,
5281 			  x_instance_ou_id     => l_instance_ou_id,
5282 			  x_obj_version_number => l_ou_obj_ver_num,
5283 			  x_return_status      => x_return_status);
5284 
5285 			IF NOT(x_return_status = fnd_api.g_ret_sts_success) THEN
5286 			  RAISE fnd_api.g_exc_error;
5287 			END IF;
5288 
5289 			l_upd_ou_tbl(l_uou_ind).instance_ou_id        := l_instance_ou_id; -- Modified for the bug  8309196
5290 			l_upd_ou_tbl(l_uou_ind).instance_id           := l_instance_id; -- Modified for the bug  8309196
5291 			l_upd_ou_tbl(l_uou_ind).object_version_number := l_ou_obj_ver_num; -- Modified for the bug  8309196
5292 
5293 		-- Code Addition for the bug  8309196
5294         ELSE
5295 			-- If the instance_ou_id is not found, assign the update record to create
5296 			x_upd_org_units_tbl(l_upd_org).instance_ou_id    := FND_API.G_MISS_NUM;
5297 			x_cre_org_units_tbl(x_cre_org_units_tbl.count + 1) := x_upd_org_units_tbl(l_upd_org);
5298         END IF;
5299 		-- End of Code Addition for the bug 8309196
5300 
5301       END LOOP;
5302     END IF; -- l_upd_org_units_tbl.count > 0
5303 
5304     -- Rebuilding the extended attributes
5305     IF x_upd_ext_attrib_val_tbl.count > 0 THEN
5306       FOR l_upd_ext in x_upd_ext_attrib_val_tbl.first..x_upd_ext_attrib_val_tbl.last
5307       LOOP
5308 
5309         csi_utl_pkg.get_ext_attribs(
5310           p_instance_id        => l_instance_id ,
5311           p_attribute_id       => x_upd_ext_attrib_val_tbl(l_upd_ext).attribute_id,
5312           x_attribute_value_id => l_attrib_value_id,
5313           x_obj_version_number => l_av_obj_ver_num,
5314           x_return_status      => x_return_status);
5315 
5316         IF NOT(x_return_status = fnd_api.g_ret_sts_success) THEN
5317           RAISE fnd_api.g_exc_error;
5318         END IF;
5319 
5320         x_upd_ext_attrib_val_tbl(l_upd_ext).attribute_value_id    := l_attrib_value_id;
5321         x_upd_ext_attrib_val_tbl(l_upd_ext).instance_id           := l_instance_id;
5322         x_upd_ext_attrib_val_tbl(l_upd_ext).object_version_number := l_av_obj_ver_num;
5323 
5324       END LOOP;
5325     END IF; --x_upd_ext_attrib_val_tbl.count > 0
5326 
5327     -- Rebuilding the Create org assignment table
5328     IF x_cre_org_units_tbl.count > 0 THEN
5329       FOR l_cre_org in x_cre_org_units_tbl.first..x_cre_org_units_tbl.last
5330       LOOP
5331 
5332         l_ou_found := FALSE;
5333 
5334         x_cre_org_units_tbl(l_cre_org).instance_id := l_instance_id;
5335 
5336         BEGIN
5337           SELECT instance_ou_id ,
5338                  object_version_number
5339           INTO   x_cre_org_units_tbl(l_cre_org).instance_ou_id,
5340                  x_cre_org_units_tbl(l_cre_org).object_version_number
5341           FROM   csi_i_org_assignments
5342           WHERE  instance_id            = l_instance_id
5343           AND    relationship_type_code = x_cre_org_units_tbl(l_cre_org).relationship_type_code;
5344          -- and    operating_unit_id      = x_cre_org_units_tbl(l_cre_org).operating_unit_id; for 4293740
5345 
5346           l_ou_found := TRUE;
5347         EXCEPTION
5348           WHEN no_data_found THEN
5349             null;
5350           WHEN too_many_rows THEN
5351             null;
5352         END;
5353 
5354         IF l_ou_found THEN
5355           l_uou_ind := l_upd_ou_tbl.count + 1;
5356           l_upd_ou_tbl(l_uou_ind) := x_cre_org_units_tbl(l_cre_org);
5357         ELSE
5358           l_cou_ind := l_cre_ou_tbl.count + 1;
5359           l_cre_ou_tbl(l_cou_ind) := x_cre_org_units_tbl(l_cre_org);
5360         END IF;
5361 
5362       END LOOP;
5363     END IF; --l_cre_org_units_tbl.count > 0
5364 
5365     -- Rebuilding the Create extend arribs table
5366     IF x_cre_ext_attrib_val_tbl.count > 0 THEN
5367       FOR l_cre_ext in x_cre_ext_attrib_val_tbl.first..x_cre_ext_attrib_val_tbl.last
5368       LOOP
5369         x_cre_ext_attrib_val_tbl(l_cre_ext).instance_id  := l_instance_id;
5370       END LOOP;
5371     END IF; --l_cre_ext_attrib_val_tbl.count > 0
5372 
5373     -- Rebuilding the txn ii relationship table
5374     IF x_txn_ii_rltns_tbl.count > 0 THEN
5375       FOR l_txn_ii in x_txn_ii_rltns_tbl.first..x_txn_ii_rltns_tbl.last
5376       LOOP
5377         IF  ( x_txn_ii_rltns_tbl(l_txn_ii).subject_type = 'T' AND
5378 	      x_txn_ii_rltns_tbl(l_txn_ii).subject_id = x_txn_line_detail_rec.txn_line_detail_id)
5379 	THEN
5380           x_txn_line_detail_rec.instance_id := l_instance_id;
5381         ELSIF  ( x_txn_ii_rltns_tbl(l_txn_ii).object_type = 'T' AND
5382 	      x_txn_ii_rltns_tbl(l_txn_ii).object_id = x_txn_line_detail_rec.txn_line_detail_id)
5383 	THEN
5384           x_txn_line_detail_rec.instance_id := l_instance_id;
5385         END IF;
5386       END LOOP;
5387     END IF;
5388 
5389     x_cre_org_units_tbl := l_cre_ou_tbl;
5390     x_upd_org_units_tbl := l_upd_ou_tbl;
5391 
5392   EXCEPTION
5393     WHEN fnd_api.g_exc_error THEN
5394       x_return_status := fnd_api.g_ret_sts_error ;
5395     WHEN fnd_api.g_exc_unexpected_error THEN
5396       x_return_status := fnd_api.g_ret_sts_unexp_error ;
5397   END rebuild_tbls ;
5398 
5399 PROCEDURE cascade_txn_dtls
5400    (p_source_trx_id    IN  NUMBER,
5401     p_source_trx_table IN  VARCHAR2,
5402     p_ratio            IN  NUMBER,
5403     x_return_status    OUT NOCOPY VARCHAR2
5404     ) IS
5405 
5406   l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
5407   l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
5408 
5409   l_line_dtl_rec      csi_t_datastructures_grp.txn_line_detail_rec;
5410   l_line_dtl_tbl      csi_t_datastructures_grp.txn_line_detail_tbl;
5411   l_pty_dtl_tbl       csi_t_datastructures_grp.txn_party_detail_tbl;
5412   l_pty_acct_tbl      csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
5413   l_ii_rltns_tbl      csi_t_datastructures_grp.txn_ii_rltns_tbl;
5414   l_org_assgn_tbl     csi_t_datastructures_grp.txn_org_assgn_tbl;
5415   l_ext_attrib_tbl    csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
5416   l_csi_ea_tbl        csi_t_datastructures_grp.csi_ext_attribs_tbl;
5417   l_csi_eav_tbl       csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
5418   l_txn_systems_tbl   csi_t_datastructures_grp.txn_systems_tbl;
5419 
5420   x_msg_count         number;
5421   x_msg_data          varchar2(2000);
5422   l_end               integer;
5423   l_mod_value         NUMBER;
5424 
5425 CURSOR get_txn_dtls(p_src_trx_id    IN NUMBER,
5426                     p_src_trx_table IN VARCHAR2) IS
5427 SELECT a.txn_line_detail_id,
5428        a.quantity,
5429        a.transaction_line_id,
5430        a.transaction_system_id,
5431        a.csi_system_id
5432 FROM csi_t_txn_line_details a,
5433      csi_t_transaction_lines b
5434 WHERE a.transaction_line_id   = b.transaction_line_id
5435  AND  b.source_transaction_id = p_src_trx_id
5436  AND  b.source_transaction_table = p_src_trx_table
5437  AND  a.source_transaction_flag  = 'Y'
5438  AND  a.quantity > p_ratio;
5439 
5440 BEGIN
5441 
5442    api_log('cascade_txn_dtls');
5443 
5444      x_return_status := fnd_api.g_ret_sts_success;
5445 
5446     FOR C1 IN get_txn_dtls( p_source_trx_id,p_source_trx_table )LOOP
5447 
5448       l_txn_line_detail_query_rec.txn_line_detail_id := C1.txn_line_detail_id;
5449 
5450       csi_t_txn_details_grp.get_transaction_details(
5451             p_api_version                => 1.0,
5452             p_commit                     => fnd_api.g_false,
5453             p_init_msg_list              => fnd_api.g_true,
5454             p_validation_level           => fnd_api.g_valid_level_full,
5455             p_txn_line_query_rec         => l_txn_line_query_rec,
5456             p_txn_line_detail_query_rec  => l_txn_line_detail_query_rec,
5457             x_txn_line_detail_tbl        => l_line_dtl_tbl,
5458             p_get_parties_flag           => fnd_api.g_true,
5459             x_txn_party_detail_tbl       => l_pty_dtl_tbl,
5460             p_get_pty_accts_flag         => fnd_api.g_true,
5461             x_txn_pty_acct_detail_tbl    => l_pty_acct_tbl,
5462             p_get_ii_rltns_flag          => fnd_api.g_false,
5463             x_txn_ii_rltns_tbl           => l_ii_rltns_tbl,
5464             p_get_org_assgns_flag        => fnd_api.g_true,
5465             x_txn_org_assgn_tbl          => l_org_assgn_tbl,
5466             p_get_ext_attrib_vals_flag   => fnd_api.g_true,
5467             x_txn_ext_attrib_vals_tbl    => l_ext_attrib_tbl,
5468             p_get_csi_attribs_flag       => fnd_api.g_false,
5469             x_csi_ext_attribs_tbl        => l_csi_ea_tbl,
5470             p_get_csi_iea_values_flag    => fnd_api.g_false,
5471             x_csi_iea_values_tbl         => l_csi_eav_tbl,
5472             p_get_txn_systems_flag       => fnd_api.g_false,
5473             x_txn_systems_tbl            => l_txn_systems_tbl,
5474             x_return_status              => x_return_status,
5475             x_msg_count                  => x_msg_count,
5476             x_msg_data                   => x_msg_data);
5477 
5478           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5479             debug('Get_transaction_details  failed ');
5480             RAISE fnd_api.g_exc_error;
5481           END IF;
5482 
5483       debug('After getting txn details ');
5484       debug('l_line_dtl_tbl.count   = '||l_line_dtl_tbl.count);
5485       debug('l_pty_dtl_tbl.count    = '||l_pty_dtl_tbl.count);
5486       debug('l_pty_acct_tbl.count   = '||l_pty_acct_tbl.count);
5487       debug('l_ii_rltns_tbl.count   = '||l_ii_rltns_tbl.count);
5488       debug('l_org_assgn_tbl.count  = '||l_org_assgn_tbl.count);
5489       debug('l_ext_attrib_tbl.count = '||l_ext_attrib_tbl.count);
5490 
5491       l_end := l_line_dtl_tbl(1).quantity/p_ratio ;
5492 
5493       debug('l_end  ='||l_end );
5494 
5495       SELECT mod(l_line_dtl_tbl(1).quantity,p_ratio)
5496       INTO l_mod_value
5497       FROM dual;
5498 
5499       debug('l_line_dtl_tbl(1).quantity ='||l_line_dtl_tbl(1).quantity);
5500 
5501       debug('l_mod_value ='||l_mod_value);
5502       debug('p_ratio     ='||p_ratio);
5503 
5504           update csi_t_txn_line_details
5505           set quantity = p_ratio
5506           WHERE txn_line_detail_id = C1.txn_line_detail_id;
5507 
5508           debug('Converting the ids to index ');
5509 
5510             csi_t_utilities_pvt.convert_ids_to_index(
5511               px_line_dtl_tbl            => l_line_dtl_tbl,
5512               px_pty_dtl_tbl             => l_pty_dtl_tbl,
5513               px_pty_acct_tbl            => l_pty_acct_tbl,
5514               px_ii_rltns_tbl            => l_ii_rltns_tbl,
5515               px_org_assgn_tbl           => l_org_assgn_tbl,
5516               px_ext_attrib_tbl          => l_ext_attrib_tbl,
5517               px_txn_systems_tbl         => l_txn_systems_tbl);
5518 
5519       debug('l_line_dtl_rec.quantity ='||l_line_dtl_rec.quantity);
5520 
5521             l_line_dtl_rec                     := l_line_dtl_tbl(1);
5522             l_line_dtl_rec.txn_line_detail_id  := FND_API.G_MISS_NUM;
5523             l_line_dtl_rec.transaction_system_id := C1.transaction_system_id;
5524             l_line_dtl_rec.csi_system_id       := C1.csi_system_id;
5525             l_line_dtl_rec.quantity            := p_ratio ;
5526             l_line_dtl_rec.transaction_line_id := C1.transaction_line_id ;
5527 
5528       debug('Splitting the txn_line_dtls ');
5529 
5530 
5531       FOR l_index in 1..l_end-1
5532       LOOP
5533 
5534           debug('  line_dtl_tbl.count   = '||l_line_dtl_tbl.count);
5535           debug('  pty_dtl_tbl.count    = '||l_pty_dtl_tbl.count);
5536           debug('  pty_acct_tbl.count   = '||l_pty_acct_tbl.count);
5537           debug('  ii_rltns_tbl.count   = '||l_ii_rltns_tbl.count);
5538           debug('  org_assgn_tbl.count  = '||l_org_assgn_tbl.count);
5539           debug('  ext_attrib_tbl.count = '||l_ext_attrib_tbl.count);
5540 
5541             csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
5542               p_api_version              => 1.0,
5543               p_commit                   => fnd_api.g_false,
5544               p_init_msg_list            => fnd_api.g_true,
5545               p_validation_level         => fnd_api.g_valid_level_full,
5546               p_txn_line_dtl_index       => 1,
5547               p_txn_line_dtl_rec         => l_line_dtl_rec,
5548               px_txn_party_dtl_tbl       => l_pty_dtl_tbl,
5549               px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
5550               px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
5551               px_txn_org_assgn_tbl       => l_org_assgn_tbl,
5552               px_txn_ext_attrib_vals_tbl => l_ext_attrib_tbl,
5553               x_return_status            => x_return_status,
5554               x_msg_count                => x_msg_count,
5555               x_msg_data                 => x_msg_data);
5556 
5557             IF x_return_status <> fnd_api.g_ret_sts_success THEN
5558               debug('Error Splitting txn line detail ');
5559               RAISE fnd_api.g_exc_error;
5560             END IF;
5561 
5562           debug('Converting the ids to index ');
5563 
5564           l_line_dtl_tbl(1) := l_line_dtl_rec;
5565 
5566             csi_t_utilities_pvt.convert_ids_to_index(
5567               px_line_dtl_tbl            => l_line_dtl_tbl,
5568               px_pty_dtl_tbl             => l_pty_dtl_tbl,
5569               px_pty_acct_tbl            => l_pty_acct_tbl,
5570               px_ii_rltns_tbl            => l_ii_rltns_tbl,
5571               px_org_assgn_tbl           => l_org_assgn_tbl,
5572               px_ext_attrib_tbl          => l_ext_attrib_tbl,
5573               px_txn_systems_tbl         => l_txn_systems_tbl);
5574 
5575             l_line_dtl_rec                     := l_line_dtl_tbl(1);
5576             l_line_dtl_rec.txn_line_detail_id  := FND_API.G_MISS_NUM;
5577             l_line_dtl_rec.quantity            := p_ratio;
5578             l_line_dtl_rec.transaction_system_id := C1.transaction_system_id;
5579             l_line_dtl_rec.csi_system_id       := C1.csi_system_id;
5580             l_line_dtl_rec.transaction_line_id := C1.transaction_line_id ;
5581 
5582            debug('Txn line detail for splitted INTO qty of one Successfully');
5583 
5584       END LOOP;
5585 
5586     END LOOP;
5587 
5588 EXCEPTION
5589      WHEN fnd_api.g_exc_error THEN
5590           x_return_status := fnd_api.g_ret_sts_error ;
5591      WHEN fnd_api.g_exc_unexpected_error THEN
5592           x_return_status := fnd_api.g_ret_sts_unexp_error ;
5593 
5594 END cascade_txn_dtls;
5595 
5596   PROCEDURE derive_party_id(
5597     p_cust_acct_role_id IN  NUMBER,
5598     x_party_id          OUT NOCOPY NUMBER,
5599     x_return_status     OUT NOCOPY VARCHAR2)
5600   IS
5601   BEGIN
5602 
5603     api_log('derive_party_id');
5604 
5605     x_return_status := fnd_api.g_ret_sts_success;
5606 
5607     SELECT ship_rel.subject_id
5608     INTO   x_party_id
5609     FROM   hz_relationships       ship_rel,
5610            hz_cust_account_roles  ship_roles
5611     WHERE  ship_roles.cust_account_role_id = p_cust_acct_role_id
5612     AND    ship_rel.party_id               = ship_roles.party_id
5613     AND   subject_table_name               = 'HZ_PARTIES'
5614     AND   object_table_name                = 'HZ_PARTIES'
5615     AND   directional_flag                 = 'F';
5616 
5617   EXCEPTION
5618     WHEN no_data_found THEN
5619       fnd_message.set_name('CSI','CSI_INT_CUST_ROLEID_MISSING');
5620       fnd_message.set_token('CUST_ACCOUNT_ROLE_ID',p_cust_acct_role_id);
5621       fnd_msg_pub.add;
5622       x_return_status := fnd_api.g_ret_sts_error ;
5623   END derive_party_id;
5624 
5625   PROCEDURE get_party_owner(
5626     p_txn_line_detail_rec        IN  csi_t_datastructures_grp.txn_line_detail_rec,
5627     p_txn_party_detail_tbl       IN  csi_t_datastructures_grp.txn_party_detail_tbl,
5628     p_txn_pty_acct_dtl_tbl       IN  csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
5629     x_trx_sub_type_rec           IN  csi_order_ship_pub.txn_sub_type_rec,
5630     p_order_line_rec             IN  csi_order_ship_pub.order_line_rec,
5631     x_upd_party_tbl              OUT NOCOPY csi_datastructures_pub.party_tbl ,
5632     x_upd_party_acct_tbl         OUT NOCOPY csi_datastructures_pub.party_account_tbl,
5633     x_cre_party_tbl              OUT NOCOPY csi_datastructures_pub.party_tbl ,
5634     x_cre_party_acct_tbl         OUT NOCOPY csi_datastructures_pub.party_account_tbl,
5635     x_return_status              OUT NOCOPY VARCHAR2)
5636   IS
5637 
5638     l_debug_level              NUMBER;
5639     l_date                     DATE := TO_DATE('01/01/4712', 'MM/DD/YYYY');
5640     l_upd_pty                  NUMBER := 1;
5641     l_cre_pty                  NUMBER := 1;
5642     l_upd_pty_acct             NUMBER := 1;
5643     l_cre_pty_acct             NUMBER := 1;
5644     l_obj_ver_num              NUMBER;
5645     l_owner_pty_id             NUMBER;
5646     l_party_id                 NUMBER;
5647 
5648   BEGIN
5649 
5650     api_log('get_party_owner');
5651 
5652     x_return_status := fnd_api.g_ret_sts_success;
5653 
5654     /* get the debug level FROM the profile */
5655     l_debug_level := csi_t_gen_utility_pvt.g_debug_level;
5656 
5657    IF p_txn_party_detail_tbl.count > 0 THEN
5658       FOR j in p_txn_party_detail_tbl.FIRST..p_txn_party_detail_tbl.LAST LOOP
5659 
5660        IF (p_txn_line_detail_rec.txn_line_detail_id = p_txn_party_detail_tbl(j).txn_line_detail_id) AND
5661           (p_txn_party_detail_tbl(j).relationship_type_code = 'OWNER' )  AND
5662           ((NVL(p_txn_party_detail_tbl(j).active_end_date,l_date ) > sysdate) OR
5663           (p_txn_party_detail_tbl(j).active_end_date = FND_API.G_MISS_DATE ))
5664        THEN
5665 
5666          x_cre_party_tbl.delete;
5667          x_upd_party_tbl.delete;
5668          x_cre_party_acct_tbl.delete;
5669          x_upd_party_acct_tbl.delete;
5670 
5671          IF (NVL(p_txn_party_detail_tbl(j).instance_party_id, FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM) THEN
5672 
5673            x_cre_party_tbl(l_cre_pty).instance_party_id := FND_API.G_MISS_NUM;
5674            x_cre_party_tbl(l_cre_pty).instance_id := FND_API.G_MISS_NUM;
5675            x_cre_party_tbl(l_cre_pty).party_id    := p_txn_party_detail_tbl(j).party_source_id;
5676            x_cre_party_tbl(l_cre_pty).party_source_table := p_txn_party_detail_tbl(j).party_source_table;
5677            x_cre_party_tbl(l_cre_pty).relationship_type_code := p_txn_party_detail_tbl(j).relationship_type_code;
5678            x_cre_party_tbl(l_cre_pty).contact_flag    := p_txn_party_detail_tbl(j).contact_flag;
5679            x_cre_party_tbl(l_cre_pty).contact_ip_id   := p_txn_party_detail_tbl(j).contact_party_id;
5680            x_cre_party_tbl(l_cre_pty).active_end_date := p_txn_party_detail_tbl(j).active_end_date;
5681            x_cre_party_tbl(l_cre_pty).context     := p_txn_party_detail_tbl(j).context;
5682            x_cre_party_tbl(l_cre_pty).attribute1  := p_txn_party_detail_tbl(j).attribute1;
5683            x_cre_party_tbl(l_cre_pty).attribute2  := p_txn_party_detail_tbl(j).attribute2;
5684            x_cre_party_tbl(l_cre_pty).attribute3  := p_txn_party_detail_tbl(j).attribute3;
5685            x_cre_party_tbl(l_cre_pty).attribute4  := p_txn_party_detail_tbl(j).attribute4;
5686            x_cre_party_tbl(l_cre_pty).attribute5  := p_txn_party_detail_tbl(j).attribute5;
5687            x_cre_party_tbl(l_cre_pty).attribute6  := p_txn_party_detail_tbl(j).attribute6;
5688            x_cre_party_tbl(l_cre_pty).attribute7  := p_txn_party_detail_tbl(j).attribute7;
5689            x_cre_party_tbl(l_cre_pty).attribute8  := p_txn_party_detail_tbl(j).attribute8;
5690            x_cre_party_tbl(l_cre_pty).attribute9  := p_txn_party_detail_tbl(j).attribute9;
5691            x_cre_party_tbl(l_cre_pty).attribute10 := p_txn_party_detail_tbl(j).attribute10;
5692            x_cre_party_tbl(l_cre_pty).attribute11 := p_txn_party_detail_tbl(j).attribute11;
5693            x_cre_party_tbl(l_cre_pty).attribute12 := p_txn_party_detail_tbl(j).attribute12;
5694            x_cre_party_tbl(l_cre_pty).attribute13 := p_txn_party_detail_tbl(j).attribute13;
5695            x_cre_party_tbl(l_cre_pty).attribute14 := p_txn_party_detail_tbl(j).attribute14;
5696            x_cre_party_tbl(l_cre_pty).attribute15 := p_txn_party_detail_tbl(j).attribute15;
5697            x_cre_party_tbl(l_cre_pty).object_version_number :=  FND_API.G_MISS_NUM;
5698 
5699            l_cre_pty := l_cre_pty + 1;
5700 
5701          ELSE
5702 
5703            l_obj_ver_num := csi_utl_pkg.get_pty_obj_ver_num(
5704                               p_txn_party_detail_tbl(j).instance_party_id);
5705 
5706            IF l_obj_ver_num = -1 THEN
5707              RAISE fnd_api.g_exc_error;
5708            END IF;
5709 
5710            x_upd_party_tbl(l_upd_pty).instance_party_id := p_txn_party_detail_tbl(j).instance_party_id;
5711            x_upd_party_tbl(l_upd_pty).instance_id :=  p_txn_line_detail_rec.instance_id ;
5712            x_upd_party_tbl(l_upd_pty).party_id    :=  p_txn_party_detail_tbl(j).party_source_id;
5713            x_upd_party_tbl(l_upd_pty).party_source_table := p_txn_party_detail_tbl(j).party_source_table;
5714            x_upd_party_tbl(l_upd_pty).relationship_type_code := p_txn_party_detail_tbl(j).relationship_type_code;
5715            x_upd_party_tbl(l_upd_pty).contact_flag    := p_txn_party_detail_tbl(j).contact_flag;
5716            x_upd_party_tbl(l_upd_pty).contact_ip_id   := p_txn_party_detail_tbl(j).contact_party_id;
5717            x_upd_party_tbl(l_upd_pty).active_end_date := p_txn_party_detail_tbl(j).active_end_date;
5718            x_upd_party_tbl(l_upd_pty).context     := p_txn_party_detail_tbl(j).context;
5719            x_upd_party_tbl(l_upd_pty).attribute1  := p_txn_party_detail_tbl(j).attribute1;
5720            x_upd_party_tbl(l_upd_pty).attribute2  := p_txn_party_detail_tbl(j).attribute2;
5721            x_upd_party_tbl(l_upd_pty).attribute3  := p_txn_party_detail_tbl(j).attribute3;
5722            x_upd_party_tbl(l_upd_pty).attribute4  := p_txn_party_detail_tbl(j).attribute4;
5723            x_upd_party_tbl(l_upd_pty).attribute5  := p_txn_party_detail_tbl(j).attribute5;
5724            x_upd_party_tbl(l_upd_pty).attribute6  := p_txn_party_detail_tbl(j).attribute6;
5725            x_upd_party_tbl(l_upd_pty).attribute7  := p_txn_party_detail_tbl(j).attribute7;
5726            x_upd_party_tbl(l_upd_pty).attribute8  := p_txn_party_detail_tbl(j).attribute8;
5727            x_upd_party_tbl(l_upd_pty).attribute9  := p_txn_party_detail_tbl(j).attribute9;
5728            x_upd_party_tbl(l_upd_pty).attribute10 := p_txn_party_detail_tbl(j).attribute10;
5729            x_upd_party_tbl(l_upd_pty).attribute11 := p_txn_party_detail_tbl(j).attribute11;
5730            x_upd_party_tbl(l_upd_pty).attribute12 := p_txn_party_detail_tbl(j).attribute12;
5731            x_upd_party_tbl(l_upd_pty).attribute13 := p_txn_party_detail_tbl(j).attribute13;
5732            x_upd_party_tbl(l_upd_pty).attribute14 := p_txn_party_detail_tbl(j).attribute14;
5733            x_upd_party_tbl(l_upd_pty).attribute15 := p_txn_party_detail_tbl(j).attribute15;
5734            x_upd_party_tbl(l_upd_pty).object_version_number := l_obj_ver_num;
5735 
5736            l_upd_pty := l_upd_pty + 1;
5737 
5738          END IF; -- end if for instance_party_id is null
5739 
5740          IF p_txn_pty_acct_dtl_tbl.count > 0 THEN
5741            FOR k in p_txn_pty_acct_dtl_tbl.FIRST..p_txn_pty_acct_dtl_tbl.LAST LOOP
5742 
5743              IF (p_txn_pty_acct_dtl_tbl(k).txn_party_detail_id = p_txn_party_detail_tbl(j).txn_party_detail_id) AND
5744                 -- Commenting this condition (Porting fix for Bug 3625218)
5745                 -- (p_txn_pty_acct_dtl_tbl(k).relationship_type_code = 'OWNER') AND
5746                 ((NVL(p_txn_pty_acct_dtl_tbl(k).active_end_date, l_date ) > sysdate ) OR
5747                 (p_txn_pty_acct_dtl_tbl(k).active_end_date = FND_API.G_MISS_DATE))
5748              THEN
5749                IF NVL(p_txn_pty_acct_dtl_tbl(k).ip_account_id,FND_API.G_MISS_NUM)= FND_API.G_MISS_NUM THEN
5750                  x_cre_party_acct_tbl(l_cre_pty_acct).ip_account_id := FND_API.G_MISS_NUM;
5751                  x_cre_party_acct_tbl(l_cre_pty_acct).party_account_id := p_txn_pty_acct_dtl_tbl(k).account_id;
5752                  x_cre_party_acct_tbl(l_cre_pty_acct).relationship_type_code := p_txn_pty_acct_dtl_tbl(k).relationship_type_code;
5753                  x_cre_party_acct_tbl(l_cre_pty_acct).bill_to_address := p_txn_pty_acct_dtl_tbl(k).bill_to_address_id ;
5754                  x_cre_party_acct_tbl(l_cre_pty_acct).ship_to_address := p_txn_pty_acct_dtl_tbl(k).ship_to_address_id;
5755                  x_cre_party_acct_tbl(l_cre_pty_acct).instance_party_id := p_txn_party_detail_tbl(j).instance_party_id;
5756                  x_cre_party_acct_tbl(l_cre_pty_acct).active_start_date := FND_API.G_MISS_DATE ;
5757                  x_cre_party_acct_tbl(l_cre_pty_acct).active_end_date := p_txn_pty_acct_dtl_tbl(k).active_end_date;
5758                  x_cre_party_acct_tbl(l_cre_pty_acct).context    := p_txn_pty_acct_dtl_tbl(k).context        ;
5759                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute1 := p_txn_pty_acct_dtl_tbl(k).attribute1     ;
5760                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute2 := p_txn_pty_acct_dtl_tbl(k).attribute2     ;
5761                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute3 := p_txn_pty_acct_dtl_tbl(k).attribute3     ;
5762                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute4 := p_txn_pty_acct_dtl_tbl(k).attribute4     ;
5763                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute5 := p_txn_pty_acct_dtl_tbl(k).attribute5     ;
5764                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute6 := p_txn_pty_acct_dtl_tbl(k).attribute6     ;
5765                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute7 := p_txn_pty_acct_dtl_tbl(k).attribute7     ;
5766                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute8 := p_txn_pty_acct_dtl_tbl(k).attribute8     ;
5767                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute9 := p_txn_pty_acct_dtl_tbl(k).attribute9     ;
5768                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute10 := p_txn_pty_acct_dtl_tbl(k).attribute10    ;
5769                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute11 := p_txn_pty_acct_dtl_tbl(k).attribute11    ;
5770                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute12 := p_txn_pty_acct_dtl_tbl(k).attribute12    ;
5771                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute13 := p_txn_pty_acct_dtl_tbl(k).attribute13    ;
5772                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute14 := p_txn_pty_acct_dtl_tbl(k).attribute14    ;
5773                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute15 := p_txn_pty_acct_dtl_tbl(k).attribute15    ;
5774                  x_cre_party_acct_tbl(l_cre_pty_acct).object_version_number := l_obj_ver_num;
5775                  x_cre_party_acct_tbl(l_cre_pty_acct).parent_tbl_index   := 1;
5776                  l_cre_pty_acct := l_cre_pty_acct + 1;
5777                ELSE
5778                  x_upd_party_acct_tbl(l_upd_pty_acct).ip_account_id := FND_API.G_MISS_NUM;
5779                  x_upd_party_acct_tbl(l_upd_pty_acct).party_account_id := p_txn_pty_acct_dtl_tbl(k).account_id;
5780                  x_upd_party_acct_tbl(l_upd_pty_acct).relationship_type_code := p_txn_pty_acct_dtl_tbl(k).relationship_type_code;
5781                  x_upd_party_acct_tbl(l_upd_pty_acct).bill_to_address := p_txn_pty_acct_dtl_tbl(k).bill_to_address_id ;
5782                  x_upd_party_acct_tbl(l_upd_pty_acct).ship_to_address := p_txn_pty_acct_dtl_tbl(k).ship_to_address_id;
5783                  x_upd_party_acct_tbl(l_upd_pty_acct).instance_party_id := p_txn_party_detail_tbl(j).instance_party_id;
5784                  x_upd_party_acct_tbl(l_upd_pty_acct).active_start_date := FND_API.G_MISS_DATE ;
5785                  x_upd_party_acct_tbl(l_upd_pty_acct).active_end_date := p_txn_pty_acct_dtl_tbl(k).active_end_date;
5786                  x_upd_party_acct_tbl(l_upd_pty_acct).context := p_txn_pty_acct_dtl_tbl(k).context        ;
5787                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute1 := p_txn_pty_acct_dtl_tbl(k).attribute1     ;
5788                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute2 := p_txn_pty_acct_dtl_tbl(k).attribute2     ;
5789                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute3 := p_txn_pty_acct_dtl_tbl(k).attribute3     ;
5790                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute4 := p_txn_pty_acct_dtl_tbl(k).attribute4     ;
5791                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute5 := p_txn_pty_acct_dtl_tbl(k).attribute5     ;
5792                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute6 := p_txn_pty_acct_dtl_tbl(k).attribute6     ;
5793                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute7 := p_txn_pty_acct_dtl_tbl(k).attribute7     ;
5794                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute8 := p_txn_pty_acct_dtl_tbl(k).attribute8     ;
5795                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute9 := p_txn_pty_acct_dtl_tbl(k).attribute9     ;
5796                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute10 := p_txn_pty_acct_dtl_tbl(k).attribute10    ;
5797                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute11 := p_txn_pty_acct_dtl_tbl(k).attribute11    ;
5798                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute12 := p_txn_pty_acct_dtl_tbl(k).attribute12    ;
5799                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute13 := p_txn_pty_acct_dtl_tbl(k).attribute13    ;
5800                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute14 := p_txn_pty_acct_dtl_tbl(k).attribute14    ;
5801                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute15 := p_txn_pty_acct_dtl_tbl(k).attribute15    ;
5802                  x_upd_party_acct_tbl(l_upd_pty_acct).object_version_number := l_obj_ver_num;
5803                  x_upd_party_acct_tbl(l_upd_pty_acct).parent_tbl_index   := 1;
5804                  l_upd_pty_acct := l_upd_pty_acct + 1;
5805                END IF;
5806              END IF;
5807            END LOOP;
5808          END IF;
5809        END IF;
5810      END LOOP;
5811    END IF;
5812 
5813   EXCEPTION
5814     WHEN fnd_api.g_exc_error THEN
5815       x_return_status := fnd_api.g_ret_sts_error ;
5816     WHEN fnd_api.g_exc_unexpected_error THEN
5817       x_return_status := fnd_api.g_ret_sts_unexp_error ;
5818   END get_party_owner;
5819 
5820 
5821   /* -------------------------------------------------------------------- */
5822   /* This routine converts the instance header table to instance table .  */
5823   /* We need to do this because the get_item_instances returns the header */
5824   /* table AND we operate on the instance table.                          */
5825   /* -------------------------------------------------------------------- */
5826 
5827   PROCEDURE make_non_header_tbl(
5828     p_instance_header_tbl IN  csi_datastructures_pub.instance_header_tbl,
5829     x_instance_tbl        OUT NOCOPY csi_datastructures_pub.instance_tbl,
5830     x_return_status       OUT NOCOPY varchar2)
5831   IS
5832     l_inst_tbl            csi_datastructures_pub.instance_tbl;
5833     l_inst_hdr_tbl        csi_datastructures_pub.instance_header_tbl;
5834   BEGIN
5835 
5836     x_return_status := fnd_api.g_ret_sts_success;
5837 
5838     api_log('make_non_header_tbl');
5839 
5840     l_inst_hdr_tbl := p_instance_header_tbl;
5841 
5842     IF l_inst_hdr_tbl.COUNT > 0 THEN
5843 
5844       FOR l_ind IN l_inst_hdr_tbl.FIRST .. l_inst_hdr_tbl.LAST
5845       LOOP
5846 
5847        l_inst_tbl(l_ind).instance_id           := l_inst_hdr_tbl(l_ind).instance_id;
5848        l_inst_tbl(l_ind).instance_number       := l_inst_hdr_tbl(l_ind).instance_number;
5849        l_inst_tbl(l_ind).external_reference    := l_inst_hdr_tbl(l_ind).external_reference;
5850        l_inst_tbl(l_ind).inventory_item_id     := l_inst_hdr_tbl(l_ind).inventory_item_id;
5851        l_inst_tbl(l_ind).inventory_revision    := l_inst_hdr_tbl(l_ind).inventory_revision;
5852        l_inst_tbl(l_ind).inv_master_organization_id := l_inst_hdr_tbl(l_ind).inv_master_organization_id;
5853        l_inst_tbl(l_ind).serial_number         := l_inst_hdr_tbl(l_ind).serial_number;
5854        l_inst_tbl(l_ind).mfg_serial_number_flag:= l_inst_hdr_tbl(l_ind).mfg_serial_number_flag;
5855        l_inst_tbl(l_ind).lot_number            := l_inst_hdr_tbl(l_ind).lot_number;
5856        l_inst_tbl(l_ind).quantity              := l_inst_hdr_tbl(l_ind).quantity;
5857        l_inst_tbl(l_ind).unit_of_measure       := l_inst_hdr_tbl(l_ind).unit_of_measure;
5858        l_inst_tbl(l_ind).accounting_class_code := l_inst_hdr_tbl(l_ind).accounting_class_code;
5859        l_inst_tbl(l_ind).instance_condition_id := l_inst_hdr_tbl(l_ind).instance_condition_id;
5860        l_inst_tbl(l_ind).instance_status_id    := l_inst_hdr_tbl(l_ind).instance_status_id;
5861        l_inst_tbl(l_ind).customer_view_flag    := l_inst_hdr_tbl(l_ind).customer_view_flag;
5862        l_inst_tbl(l_ind).merchant_view_flag    := l_inst_hdr_tbl(l_ind).merchant_view_flag;
5863        l_inst_tbl(l_ind).sellable_flag         := l_inst_hdr_tbl(l_ind).sellable_flag;
5864        l_inst_tbl(l_ind).system_id             := l_inst_hdr_tbl(l_ind).system_id;
5865        l_inst_tbl(l_ind).instance_type_code    := l_inst_hdr_tbl(l_ind).instance_type_code;
5866        l_inst_tbl(l_ind).active_start_date     := l_inst_hdr_tbl(l_ind).active_start_date;
5867        l_inst_tbl(l_ind).active_end_date       := l_inst_hdr_tbl(l_ind).active_end_date;
5868        l_inst_tbl(l_ind).location_type_code    := l_inst_hdr_tbl(l_ind).location_type_code;
5869        l_inst_tbl(l_ind).location_id           := l_inst_hdr_tbl(l_ind).location_id;
5870        l_inst_tbl(l_ind).inv_organization_id   := l_inst_hdr_tbl(l_ind).inv_organization_id;
5871        l_inst_tbl(l_ind).inv_subinventory_name := l_inst_hdr_tbl(l_ind).inv_subinventory_name;
5872        l_inst_tbl(l_ind).inv_locator_id        := l_inst_hdr_tbl(l_ind).inv_locator_id;
5873        l_inst_tbl(l_ind).pa_project_id         := l_inst_hdr_tbl(l_ind).pa_project_id;
5874        l_inst_tbl(l_ind).pa_project_task_id    := l_inst_hdr_tbl(l_ind).pa_project_task_id;
5875        l_inst_tbl(l_ind).in_transit_order_line_id := l_inst_hdr_tbl(l_ind).in_transit_order_line_id;
5876        l_inst_tbl(l_ind).wip_job_id            := l_inst_hdr_tbl(l_ind).wip_job_id;
5877        l_inst_tbl(l_ind).po_order_line_id      := l_inst_hdr_tbl(l_ind).po_order_line_id;
5878        l_inst_tbl(l_ind).last_oe_order_line_id := l_inst_hdr_tbl(l_ind).last_oe_order_line_id;
5879        l_inst_tbl(l_ind).last_oe_rma_line_id   := l_inst_hdr_tbl(l_ind).last_oe_rma_line_id;
5880        l_inst_tbl(l_ind).last_po_po_line_id    := l_inst_hdr_tbl(l_ind).last_po_po_line_id;
5881        l_inst_tbl(l_ind).last_oe_po_number     := l_inst_hdr_tbl(l_ind).last_oe_po_number;
5882        l_inst_tbl(l_ind).last_wip_job_id       := l_inst_hdr_tbl(l_ind).last_wip_job_id;
5883        l_inst_tbl(l_ind).last_pa_project_id    := l_inst_hdr_tbl(l_ind).last_pa_project_id;
5884        l_inst_tbl(l_ind).last_pa_task_id       := l_inst_hdr_tbl(l_ind).last_pa_task_id;
5885        l_inst_tbl(l_ind).last_oe_agreement_id  := l_inst_hdr_tbl(l_ind).last_oe_agreement_id;
5886        l_inst_tbl(l_ind).install_date          := l_inst_hdr_tbl(l_ind).install_date;
5887        l_inst_tbl(l_ind).manually_created_flag := l_inst_hdr_tbl(l_ind).manually_created_flag;
5888        l_inst_tbl(l_ind).return_by_date        := l_inst_hdr_tbl(l_ind).return_by_date;
5889        l_inst_tbl(l_ind).actual_return_date    := l_inst_hdr_tbl(l_ind).actual_return_date;
5890        l_inst_tbl(l_ind).creation_complete_flag:= l_inst_hdr_tbl(l_ind).creation_complete_flag;
5891        l_inst_tbl(l_ind).completeness_flag     := l_inst_hdr_tbl(l_ind).completeness_flag;
5892        l_inst_tbl(l_ind).context               := l_inst_hdr_tbl(l_ind).context;
5893        l_inst_tbl(l_ind).attribute1            := l_inst_hdr_tbl(l_ind).attribute1;
5894        l_inst_tbl(l_ind).attribute2            := l_inst_hdr_tbl(l_ind).attribute2;
5895        l_inst_tbl(l_ind).attribute3            := l_inst_hdr_tbl(l_ind).attribute3;
5896        l_inst_tbl(l_ind).attribute4            := l_inst_hdr_tbl(l_ind).attribute4;
5897        l_inst_tbl(l_ind).attribute5            := l_inst_hdr_tbl(l_ind).attribute5;
5898        l_inst_tbl(l_ind).attribute6            := l_inst_hdr_tbl(l_ind).attribute6;
5899        l_inst_tbl(l_ind).attribute7            := l_inst_hdr_tbl(l_ind).attribute7;
5900        l_inst_tbl(l_ind).attribute8            := l_inst_hdr_tbl(l_ind).attribute8;
5901        l_inst_tbl(l_ind).attribute9            := l_inst_hdr_tbl(l_ind).attribute9;
5902        l_inst_tbl(l_ind).attribute10           := l_inst_hdr_tbl(l_ind).attribute10;
5903        l_inst_tbl(l_ind).attribute11           := l_inst_hdr_tbl(l_ind).attribute11;
5904        l_inst_tbl(l_ind).attribute12           := l_inst_hdr_tbl(l_ind).attribute12;
5905        l_inst_tbl(l_ind).attribute13           := l_inst_hdr_tbl(l_ind).attribute13;
5906        l_inst_tbl(l_ind).attribute14           := l_inst_hdr_tbl(l_ind).attribute14;
5907        l_inst_tbl(l_ind).attribute15           := l_inst_hdr_tbl(l_ind).attribute15;
5908        l_inst_tbl(l_ind).object_version_number := l_inst_hdr_tbl(l_ind).object_version_number;
5909        l_inst_tbl(l_ind).instance_usage_code   := l_inst_hdr_tbl(l_ind).instance_usage_code;
5910        l_inst_tbl(l_ind).vld_organization_id   := l_inst_hdr_tbl(l_ind).vld_organization_id;
5911 
5912       END LOOP;
5913     END IF;
5914     x_instance_tbl := l_inst_tbl;
5915   END make_non_header_tbl;
5916 
5917   /* Adding this reoutine to make the decision whether to call the contracts or not
5918      if the source instance is a replacement component.
5919   */
5920   PROCEDURE call_contracts_chk(
5921     p_txn_line_detail_id   in  number,
5922     p_txn_ii_rltns_tbl     in  csi_t_datastructures_grp.txn_ii_rltns_tbl,
5923     x_call_contracts       OUT NOCOPY varchar2,
5924     x_return_status        OUT NOCOPY varchar2)
5925   IS
5926   BEGIN
5927 
5928     x_return_status  := fnd_api.g_ret_sts_success;
5929     x_call_contracts := fnd_api.g_true;
5930 
5931     api_log('call_contracts_chk');
5932 
5933     IF p_txn_ii_rltns_tbl.count > 0 THEN
5934       FOR l_ind IN p_txn_ii_rltns_tbl.FIRST .. p_txn_ii_rltns_tbl.LAST
5935       LOOP
5936         IF ((p_txn_ii_rltns_tbl(l_ind).subject_type = 'T'
5937 		AND p_txn_ii_rltns_tbl(l_ind).subject_id = p_txn_line_detail_id )
5938              OR
5939             (p_txn_ii_rltns_tbl(l_ind).object_type = 'T'
5940 		AND p_txn_ii_rltns_tbl(l_ind).object_id = p_txn_line_detail_id ))
5941         THEN
5942           IF p_txn_ii_rltns_tbl(l_ind).relationship_type_code IN
5943             ('REPLACED-BY','REPLACEMENT-FOR', 'UPGRADED-FROM') THEN
5944             x_call_contracts := fnd_api.g_false;
5945           END IF;
5946         END IF;
5947       END LOOP;
5948     END IF;
5949 
5950     debug('  l_contracts_flag :'||x_call_contracts);
5951 
5952   EXCEPTION
5953     WHEN fnd_api.g_exc_error THEN
5954       x_return_status := fnd_api.g_ret_sts_error;
5955   END call_contracts_chk;
5956 
5957 
5958   /* local debug dump routines */
5959   PROCEDURE dump_item_control_rec(
5960     p_item_control_rec IN csi_order_ship_pub.item_control_rec)
5961   IS
5962     l_rec              csi_order_ship_pub.item_control_rec;
5963   BEGIN
5964 
5965     l_rec := p_item_control_rec;
5966 
5967     debug('  inventory_item_id  : '||l_rec.inventory_item_id);
5968     debug('  organization_id    : '||l_rec.organization_id);
5969     debug('  primary_uom_code   : '||l_rec.primary_uom_code);
5970     debug('  serial_control_code: '||l_rec.serial_control_code);
5971     debug('  lot_control_code   : '||l_rec.lot_control_code);
5972     debug('  rev_control_code   : '||l_rec.revision_control_code);
5973     debug('  bom_item_type      : '||l_rec.bom_item_type);
5974     debug('  shippable_flag     : '||l_rec.shippable_flag);
5975     debug('  transactable_flag  : '||l_rec.transactable_flag);
5976     debug('  reservable_type    : '||l_rec.reservable_type);
5977     debug('  negative_bal_code  : '||l_rec.negative_balances_code);
5978 
5979   END dump_item_control_rec;
5980 
5981   PROCEDURE get_item_control_rec(
5982     p_mtl_txn_id        IN  number,
5983     x_item_control_rec  OUT NOCOPY csi_order_ship_pub.item_control_rec,
5984     x_return_status     OUT NOCOPY varchar2)
5985   IS
5986 
5987     l_item_control_rec  csi_order_ship_pub.item_control_rec;
5988 
5989   BEGIN
5990 
5991     api_log('get_item_control_rec');
5992 
5993     x_return_status := fnd_api.g_ret_sts_success;
5994 
5995     BEGIN
5996 
5997       SELECT inventory_item_id,
5998              organization_id
5999       INTO   l_item_control_rec.inventory_item_id,
6000              l_item_control_rec.organization_id
6001       FROM   mtl_material_transactions
6002       WHERE  transaction_id = p_mtl_txn_id;
6003 
6004     EXCEPTION
6005       WHEN no_data_found THEN
6006         fnd_message.set_name('CSI','CSI_NO_INVENTORY_RECORDS');
6007         fnd_message.set_token('MTL_TRANSACTION_ID',p_mtl_txn_id);
6008         fnd_msg_pub.add;
6009         RAISE fnd_api.g_exc_error;
6010 
6011     END;
6012 
6013     BEGIN
6014 
6015       SELECT serial_number_control_code,
6016              lot_control_code,
6017              revision_qty_control_code,
6018              location_control_code,
6019              bom_item_type,
6020              primary_uom_code,
6021              base_item_id,
6022              pick_components_flag,
6023              comms_nl_trackable_flag,
6024              reservable_type,
6025              shippable_item_flag,
6026              mtl_transactions_enabled_flag
6027       INTO   l_item_control_rec.serial_control_code,
6028              l_item_control_rec.lot_control_code,
6029              l_item_control_rec.revision_control_code,
6030              l_item_control_rec.locator_control_code,
6031              l_item_control_rec.bom_item_type,
6032              l_item_control_rec.primary_uom_code,
6033              l_item_control_rec.model_item_id,
6034              l_item_control_rec.pick_components_flag,
6035              l_item_control_rec.ib_trackable_flag,
6036              l_item_control_rec.reservable_type,
6037              l_item_control_rec.shippable_flag,
6038              l_item_control_rec.transactable_flag
6039       FROM   mtl_system_items
6040       WHERE  inventory_item_id = l_item_control_rec.inventory_item_id
6041       AND    organization_id   = l_item_control_rec.organization_id;
6042 
6043     EXCEPTION
6044       WHEN no_data_found THEN
6045         fnd_message.set_name('CSI', 'CSI_INT_ITEM_ID_MISSING');
6046         fnd_message.set_token('INVENTORY_ITEM_ID', l_item_control_rec.inventory_item_id);
6047         fnd_message.set_token('INV_ORGANZATION_ID', l_item_control_rec.organization_id);
6048         fnd_msg_pub.add;
6049         RAISE fnd_api.g_exc_error;
6050     END;
6051 
6052     BEGIN
6053       SELECT nvl(negative_inv_receipt_code,1)
6054       INTO   l_item_control_rec.negative_balances_code
6055       FROM   mtl_parameters
6056       WHERE  organization_id = l_item_control_rec.organization_id;
6057     END;
6058 
6059     dump_item_control_rec(
6060       p_item_control_rec => l_item_control_rec);
6061 
6062     x_item_control_rec := l_item_control_rec;
6063 
6064   EXCEPTION
6065     WHEN fnd_api.g_exc_error THEN
6066       x_return_status := fnd_api.g_ret_sts_error;
6067 
6068   END get_item_control_rec;
6069 
6070 
6071 ---Added (Start) for m-to-m enhancements
6072 -----------------------------------------------------------------------
6073 --- 05/16 added procedure to check whether the TXN relations
6074 ---are already interfaced to IB
6075 -----------------------------------------------------------------------
6076 
6077 PROCEDURE rltns_xfaced_to_IB (p_xtn_ii_rltns_rec IN csi_t_datastructures_grp.txn_ii_rltns_rec,
6078                               x_xface_to_IB_flag OUT NOCOPY VARCHAR2,
6079                               x_return_status OUT NOCOPY VARCHAR2)
6080 IS
6081 CURSOR get_instance_id (c_txn_line_detail_id IN NUMBER)
6082 IS
6083 SELECT instance_id
6084 FROM   csi_t_txn_line_details
6085 WHERE  txn_line_detail_id = c_txn_line_detail_id ;
6086 
6087 l_subject_instance_id NUMBER ;
6088 l_object_instance_id NUMBER ;
6089 l_relationship_query_rec  csi_datastructures_pub.relationship_query_rec ;
6090 l_ii_relationship_tbl csi_datastructures_pub.ii_relationship_tbl ;
6091 x_msg_count NUMBER ;
6092 x_msg_data  VARCHAR2 (2000);
6093 
6094 
6095 BEGIN
6096    x_xface_to_IB_flag := 'N' ;
6097    --get the isntances associated with the subject and object TLD's
6098    OPEN get_instance_id (p_xtn_ii_rltns_rec.subject_id) ;
6099    FETCH get_instance_id INTO l_subject_instance_id ;
6100    CLOSE get_instance_id ;
6101 
6102    OPEN get_instance_id (p_xtn_ii_rltns_rec.object_id) ;
6103    FETCH get_instance_id INTO l_object_instance_id ;
6104    CLOSE get_instance_id ;
6105 
6106    IF l_subject_instance_id IS NOT NULL
6107    AND l_object_instance_id IS NOT NULL
6108    THEN
6109 
6110       ---For connected-to only subject or object needs to be passed.
6111       IF p_xtn_ii_rltns_rec.relationship_type_code = 'CONNECTED-TO'
6112       THEN
6113          l_relationship_query_rec.object_id := l_object_instance_id ;
6114          l_relationship_query_rec.relationship_type_code := p_xtn_ii_rltns_rec.relationship_type_code ;
6115       ELSE
6116          l_relationship_query_rec.object_id := l_object_instance_id ;
6117          l_relationship_query_rec.subject_id := l_subject_instance_id ;
6118          l_relationship_query_rec.relationship_type_code := p_xtn_ii_rltns_rec.relationship_type_code ;
6119       END IF ;
6120 
6121       debug('l_relationship_query_rec.object_id :'|| l_relationship_query_rec.object_id);
6122       debug('l_relationship_query_rec.subject_id :'|| l_relationship_query_rec.subject_id);
6123       debug('l_relationship_query_rec.relationship_type_code :'|| l_relationship_query_rec.relationship_type_code);
6124 
6125     csi_ii_relationships_pub.get_relationships (
6126      p_api_version             => 1.0 ,
6127      p_commit                    => fnd_api.g_false,
6128      p_init_msg_list             => fnd_api.g_false,
6129      p_validation_level          => fnd_api.g_valid_level_full,
6130      p_relationship_query_rec    => l_relationship_query_rec,
6131      p_depth                     => NULL,
6132      p_time_stamp                => NULL ,
6133      p_active_relationship_only  => fnd_api.g_true,
6134      x_relationship_tbl          => l_ii_relationship_tbl,
6135      x_return_status             => x_return_status,
6136      x_msg_count                 => x_msg_count ,
6137      x_msg_data                  => x_msg_data) ;
6138 
6139      IF NOT(x_return_status = fnd_api.g_ret_sts_success)
6140      THEN
6141         debug('csi_ii_relationships_pub.get_relationships call failed :'||
6142 x_msg_data);
6143        RAISE fnd_api.g_exc_error;
6144      END IF;
6145      IF l_ii_relationship_tbl.count > 0
6146      THEN
6147         debug('Relations are already interfaced to IB');
6148         x_xface_to_IB_flag := 'Y' ;
6149      ELSE
6150       x_xface_to_IB_flag := 'N' ;
6151      END IF ;
6152 
6153    ELSE
6154       x_xface_to_IB_flag := 'N' ;
6155    END IF ;
6156 
6157 EXCEPTION
6158     WHEN FND_API.G_EXC_ERROR THEN
6159       x_return_status := FND_API.G_RET_STS_ERROR ;
6160        debug ('Unexpected error in  rltns_xfaced_to_IB '||SQLERRM);
6161     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6162        debug ('Unexpected error in  rltns_xfaced_to_IB '||SQLERRM);
6163       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6164 END rltns_xfaced_to_IB ;
6165 
6166 ---Added (End) for m-to-m enhancements
6167 
6168 ---Added (Start) for m-to-m enhancements
6169 -----------------------------------------------------------------------
6170 ---05/20 procedure builds the relations after copying/splitting
6171 ---between TLD's based on the user entered TLD relations
6172 -----------------------------------------------------------------------
6173 
6174 PROCEDURE build_txn_relations (
6175     p_txn_line_detail_tbl IN csi_t_datastructures_grp.txn_line_detail_tbl ,
6176     x_txn_ii_rltns_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
6177     x_return_status OUT NOCOPY VARCHAR2)
6178 IS
6179 l_orig_oe_tld NUMBER ;
6180 l_partner_oe_tld NUMBER ;
6181 l_relations_exists BOOLEAN := FALSE ;
6182 l_oe_txn_ii_rltns_tbl  csi_t_datastructures_grp.txn_ii_rltns_tbl;
6183 l_partner_tld VARCHAR2(10) ;
6184 l_ii_indx NUMBER ;
6185 l_index NUMBER ;
6186 l_src_txn_table VARCHAR2(100);
6187 l_orig_oe_src_txn_id NUMBER ;
6188 l_src_txn_id NUMBER ;
6189 l_src_txn_line_dtl_id NUMBER ;
6190 
6191 
6192 CURSOR source_txn_table_cur (c_txn_line_detail_id IN NUMBER)
6193 IS
6194 SELECT source_transaction_table, source_transaction_id
6195 FROM csi_t_txn_line_details a ,
6196      csi_t_transaction_lines b
6197 WHERE a.transaction_line_id = b.transaction_line_id
6198 AND   a.txn_line_detail_id = c_txn_line_detail_id ;
6199 
6200 
6201 CURSOR oe_tld_relns_cur (c_orig_oe_tld IN NUMBER)
6202 IS
6203 SELECT *
6204 FROM csi_t_ii_relationships
6205 WHERE (( subject_type = 'T' AND subject_id = c_orig_oe_tld)
6206        OR ( object_type = 'T' AND object_id = c_orig_oe_tld))
6207 AND NVL(active_end_date ,SYSDATE) >= SYSDATE ;
6208 
6209 CURSOR wsh_partner_tld_cur (c_partner_oe_tld IN NUMBER)
6210 IS
6211 ---For Shippable and Non-shippable Items--
6212 SELECT a.*
6213 FROM csi_t_txn_line_details a ,
6214      csi_t_transaction_lines b ,
6215      mtl_system_items_b c
6216 WHERE a.transaction_line_id = b.transaction_line_id
6217 AND   ((b.source_transaction_table = 'WSH_DELIVERY_DETAILS' AND c.shippable_item_flag = 'Y')
6218 OR     (b.source_transaction_table = 'OE_ORDER_LINES_ALL' AND c.shippable_item_flag = 'N'))
6219 AND   a.instance_id IS NOT NULL ---meaning it is already processed. or it is Non Source
6220 AND   a.source_txn_line_detail_id = c_partner_oe_tld
6221 AND   a.inventory_item_id = c.inventory_item_id
6222 AND   a.inv_organization_id = c.organization_id;
6223 
6224 BEGIN
6225    debug ('Begin : build_txn_relations');
6226 
6227    IF p_txn_line_detail_tbl.COUNT > 0 THEN
6228 
6229    FOR i IN p_txn_line_detail_tbl.FIRST .. p_txn_line_detail_tbl.LAST
6230    LOOP
6231 
6232    OPEN source_txn_table_cur(p_txn_line_detail_tbl(i).txn_line_detail_id) ;
6233    FETCH source_txn_table_cur  INTO l_src_txn_table , l_src_txn_id ;
6234    CLOSE source_txn_table_cur ;
6235 
6236    debug ('process status '|| p_txn_line_detail_tbl(i).processing_status);
6237 
6238    IF l_src_txn_table IN('WSH_DELIVERY_DETAILS' ,
6239                          'OE_ORDER_LINES_ALL')
6240    AND p_txn_line_detail_tbl(i).processing_status NOT IN
6241          ('UNPROCESSED','ERROR','SUBMIT','PROCESSED')
6242    THEN
6243      ---In Case of Non-Shippable Items Txn Detail Line may NOT
6244      ---have source_txn_line_detail_id at all
6245 -- This IF is introduced for bug 2814779 . The source TLD ID was g_miss_num for Models 'cause it wasn't getting properly earlier ..
6246 
6247      IF p_txn_line_detail_tbl(i).source_txn_line_detail_id = fnd_api.g_miss_num THEN
6248          l_src_txn_line_dtl_id := NULL;
6249      ELSIF p_txn_line_detail_tbl(i).source_txn_line_detail_id <> NULL THEN
6250          l_src_txn_line_dtl_id := p_txn_line_detail_tbl(i).source_txn_line_detail_id;
6251      END IF;
6252 
6253      l_orig_oe_tld := NVL(l_src_txn_line_dtl_id ,
6254                           p_txn_line_detail_tbl(i).txn_line_detail_id);
6255      debug ('TLD ID : '||p_txn_line_detail_tbl(i).txn_line_detail_id || ' User created TLD is '|| l_orig_oe_tld);
6256      l_index := 0 ;
6257 
6258      Begin
6259         Select source_transaction_id
6260         Into l_orig_oe_src_txn_id
6261         From csi_t_transaction_lines tl, csi_t_txn_line_details tld
6262         Where tld.transaction_line_id = tl.transaction_line_id
6263         And tld.txn_line_detail_id = l_orig_oe_tld;
6264      Exception when others Then
6265           fnd_message.set_name('FND', 'FND_GENERIC_MESSAGE');
6266           fnd_message.set_token('MESSAGE', substr(sqlerrm, 1, 240));
6267           fnd_msg_pub.add;
6268           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6269           raise FND_API.G_EXC_UNEXPECTED_ERROR ;
6270      End;
6271 
6272      IF l_src_txn_id <> l_orig_oe_src_txn_id THEN  --added this for bug 2795136
6273       FOR oe_tld_relns_rec IN oe_tld_relns_cur (l_orig_oe_tld)
6274       LOOP
6275         l_index := l_index + 1 ;
6276         IF oe_tld_relns_rec.subject_id = l_orig_oe_tld
6277         THEN
6278            l_partner_oe_tld :=  oe_tld_relns_rec.object_id ;
6279            l_partner_tld := 'OBJECT';
6280         ELSE
6281            l_partner_oe_tld :=  oe_tld_relns_rec.subject_id ;
6282            l_partner_tld := 'SUBJECT';
6283         END IF ; ---oe_tld_relns_rec.subject_id = l_orig_oe_tld
6284 
6285         debug ('Partner OE TLD ID : ' || l_partner_oe_tld);
6286 
6287         l_oe_txn_ii_rltns_tbl(l_index).txn_relationship_id := oe_tld_relns_rec.txn_relationship_id  ;
6288        l_oe_txn_ii_rltns_tbl(l_index).transaction_line_id := oe_tld_relns_rec.transaction_line_id;
6289        l_oe_txn_ii_rltns_tbl(l_index).csi_inst_relationship_id := oe_tld_relns_rec.csi_inst_relationship_id;
6290        l_oe_txn_ii_rltns_tbl(l_index).subject_id := oe_tld_relns_rec.subject_id ;
6291        l_oe_txn_ii_rltns_tbl(l_index).subject_type := oe_tld_relns_rec.subject_type ;
6292        l_oe_txn_ii_rltns_tbl(l_index).object_id := oe_tld_relns_rec.object_id ;
6293        l_oe_txn_ii_rltns_tbl(l_index).object_type := oe_tld_relns_rec.object_type ;
6294        l_oe_txn_ii_rltns_tbl(l_index).relationship_type_code := oe_tld_relns_rec.relationship_type_code ;
6295        l_oe_txn_ii_rltns_tbl(l_index).display_order := oe_tld_relns_rec.display_order ;
6296        l_oe_txn_ii_rltns_tbl(l_index).position_reference := oe_tld_relns_rec.position_reference  ;
6297        l_oe_txn_ii_rltns_tbl(l_index).mandatory_flag := oe_tld_relns_rec.mandatory_flag ;
6298        l_oe_txn_ii_rltns_tbl(l_index).active_start_date := oe_tld_relns_rec.active_start_date  ;
6299        l_oe_txn_ii_rltns_tbl(l_index).active_end_date := oe_tld_relns_rec.active_end_date ;
6300        l_oe_txn_ii_rltns_tbl(l_index).context := oe_tld_relns_rec.context  ;
6301        l_oe_txn_ii_rltns_tbl(l_index).attribute1 := oe_tld_relns_rec.attribute1  ;
6302        l_oe_txn_ii_rltns_tbl(l_index).attribute2 := oe_tld_relns_rec.attribute2  ;
6303        l_oe_txn_ii_rltns_tbl(l_index).attribute3 := oe_tld_relns_rec.attribute3  ;
6304        l_oe_txn_ii_rltns_tbl(l_index).attribute4 := oe_tld_relns_rec.attribute4  ;
6305        l_oe_txn_ii_rltns_tbl(l_index).attribute5 := oe_tld_relns_rec.attribute5  ;
6306        l_oe_txn_ii_rltns_tbl(l_index).attribute6 := oe_tld_relns_rec.attribute6  ;
6307        l_oe_txn_ii_rltns_tbl(l_index).attribute7 := oe_tld_relns_rec.attribute7  ;
6308        l_oe_txn_ii_rltns_tbl(l_index).attribute8 := oe_tld_relns_rec.attribute8  ;
6309        l_oe_txn_ii_rltns_tbl(l_index).attribute9 := oe_tld_relns_rec.attribute9  ;
6310        l_oe_txn_ii_rltns_tbl(l_index).attribute10 := oe_tld_relns_rec.attribute10  ;
6311        l_oe_txn_ii_rltns_tbl(l_index).attribute11 := oe_tld_relns_rec.attribute11 ;
6312        l_oe_txn_ii_rltns_tbl(l_index).attribute12 := oe_tld_relns_rec.attribute12  ;
6313        l_oe_txn_ii_rltns_tbl(l_index).attribute13 := oe_tld_relns_rec.attribute13  ;
6314        l_oe_txn_ii_rltns_tbl(l_index).attribute14 := oe_tld_relns_rec.attribute14  ;
6315        l_oe_txn_ii_rltns_tbl(l_index).attribute15 := oe_tld_relns_rec.attribute15  ;
6316        l_oe_txn_ii_rltns_tbl(l_index).object_version_number  := oe_tld_relns_rec.object_version_number   ;
6317        l_oe_txn_ii_rltns_tbl(l_index).transfer_components_flag  := oe_tld_relns_rec.transfer_components_flag;
6318 
6319         FOR wsh_partner_tld_rec IN wsh_partner_tld_cur (l_partner_oe_tld)
6320         LOOP
6321           debug ('Inside wsh_partner_tld_cur');
6322          ---Copy from the relations from the original relations
6323          ---and then overwrite subject/object
6324          l_ii_indx := NVL(x_txn_ii_rltns_tbl.LAST,0)+ 1 ;
6325          x_txn_ii_rltns_tbl(l_ii_indx) := l_oe_txn_ii_rltns_tbl(1);
6326 
6327          IF l_partner_tld = 'SUBJECT'
6328          THEN
6329            x_txn_ii_rltns_tbl(l_ii_indx).subject_id := wsh_partner_tld_rec.txn_line_detail_id ;
6330            x_txn_ii_rltns_tbl(l_ii_indx).object_id := p_txn_line_detail_tbl(i).txn_line_detail_id ;
6331          ELSE
6332            x_txn_ii_rltns_tbl(l_ii_indx).object_id := wsh_partner_tld_rec.txn_line_detail_id ;
6333            x_txn_ii_rltns_tbl(l_ii_indx).subject_id := p_txn_line_detail_tbl(i).txn_line_detail_id ;
6334          END IF ; ---l_partner_tld = SUBJECT
6335            x_txn_ii_rltns_tbl(l_ii_indx).txn_relationship_id := fnd_api.g_miss_num ;
6336            x_txn_ii_rltns_tbl(l_ii_indx).object_version_number := 1;
6337         END LOOP ; --wsh_partner_tld_cur
6338 
6339           debug ('x_txn_ii_rltns_tbl.count :'|| x_txn_ii_rltns_tbl.count);
6340       END LOOP ; -- oe_tld_relns_cur
6341      END IF; -- src_txn_id check
6342    END IF ; --p_txn_line_detail_tbl(i).source_transaction_table
6343    END LOOP ; ---p_txn_line_detail_tbl.FIRST
6344    END IF;
6345 
6346    debug ('End : build_txn_relations');
6347 
6348 EXCEPTION
6349     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6350       debug (' Unexpected error in build_txn_relations '||SQLERRM);
6351       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6352     WHEN OTHERS
6353     THEN
6354       debug (' build_txn_relations failed '||SQLERRM);
6355       x_return_status := FND_API.G_RET_STS_ERROR ;
6356 END build_txn_relations ;
6357 ---Added (End) for m-to-m enhancements
6358 
6359 
6360 ---Added (Start) for m-to-m enhancements
6361 -------------------------------------------------------------------------------
6362 -- For the given TLD , this procedure gets all the immediate relations
6363 --associated with it. It also gets the details of the partner TLD's
6364 -------------------------------------------------------------------------------
6365 
6366 
6367 PROCEDURE get_partner_rltns (p_txn_line_detail_rec  IN csi_t_datastructures_grp.txn_line_detail_rec ,
6368     x_txn_ii_rltns_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
6369     x_txn_line_detail_tbl OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
6370     x_return_status OUT NOCOPY VARCHAR2)
6371 IS
6372 CURSOR txn_ii_relns_cur (c_txn_line_detail_id IN NUMBER)
6373 IS
6374 SELECT *
6375 FROM csi_t_ii_relationships
6376 WHERE (( subject_type = 'T' AND subject_id = c_txn_line_detail_id )
6377        OR (object_type = 'T' AND object_id = c_txn_line_detail_id ))
6378 AND NVL(active_end_date ,SYSDATE) >= SYSDATE ;
6379 
6380 l_txn_line_detail_query_rec  csi_t_datastructures_grp.txn_line_detail_query_rec ;
6381 l_txn_line_detail_tbl  csi_t_datastructures_grp.txn_line_detail_tbl ;
6382 x_txn_party_detail_tbl csi_t_datastructures_grp.txn_party_detail_tbl ;
6383 x_txn_pty_acct_detail_tbl  csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
6384 x_txn_org_assgn_tbl    csi_t_datastructures_grp.txn_org_assgn_tbl ;
6385 x_txn_ext_attrib_vals_tbl  csi_t_datastructures_grp.txn_ext_attrib_vals_tbl ;
6386 x_csi_ext_attribs_tbl  csi_t_datastructures_grp.csi_ext_attribs_tbl;
6387 x_csi_iea_values_tbl   csi_t_datastructures_grp.csi_ext_attrib_vals_tbl ;
6388 x_txn_systems_tbl      csi_t_datastructures_grp.txn_systems_tbl ;
6389 x_msg_count            NUMBER ;
6390 x_msg_data             VARCHAR2(2000);
6391 l_index                NUMBER := 0 ;
6392 l_indx                 NUMBER := 0;
6393 l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
6394 l_temp_txn_ii_rltns_tbl  csi_t_datastructures_grp.txn_ii_rltns_tbl ;
6395 
6396 BEGIN
6397    debug('Begin get_partner_rltns'|| p_txn_line_detail_rec.txn_line_detail_id );
6398    FOR txn_ii_relns_rec IN txn_ii_relns_cur(p_txn_line_detail_rec.txn_line_detail_id)
6399    LOOP
6400       l_txn_line_detail_query_rec.txn_line_detail_id := fnd_api.g_miss_num ;
6401       debug('Subject id : '|| txn_ii_relns_rec.subject_id);
6402       debug('object id : '|| txn_ii_relns_rec.object_id);
6403       l_index := l_index+1 ;
6404       debug('l_index :'|| l_index);
6405       x_txn_ii_rltns_tbl(l_index).txn_relationship_id := txn_ii_relns_rec.txn_relationship_id  ;
6406       x_txn_ii_rltns_tbl(l_index).transaction_line_id := txn_ii_relns_rec.transaction_line_id;
6407       x_txn_ii_rltns_tbl(l_index).csi_inst_relationship_id := txn_ii_relns_rec.csi_inst_relationship_id;
6408       x_txn_ii_rltns_tbl(l_index).subject_id := txn_ii_relns_rec.subject_id ;
6409       x_txn_ii_rltns_tbl(l_index).subject_type := txn_ii_relns_rec.subject_type ;
6410       x_txn_ii_rltns_tbl(l_index).object_id := txn_ii_relns_rec.object_id ;
6411       x_txn_ii_rltns_tbl(l_index).object_type := txn_ii_relns_rec.object_type ;
6412       x_txn_ii_rltns_tbl(l_index).relationship_type_code := txn_ii_relns_rec.relationship_type_code ;
6413       x_txn_ii_rltns_tbl(l_index).display_order := txn_ii_relns_rec.display_order ;
6414       x_txn_ii_rltns_tbl(l_index).position_reference := txn_ii_relns_rec.position_reference  ;
6415       x_txn_ii_rltns_tbl(l_index).mandatory_flag := txn_ii_relns_rec.mandatory_flag ;
6416       x_txn_ii_rltns_tbl(l_index).active_start_date := txn_ii_relns_rec.active_start_date  ;
6417       x_txn_ii_rltns_tbl(l_index).active_end_date := txn_ii_relns_rec.active_end_date ;
6418       x_txn_ii_rltns_tbl(l_index).context := txn_ii_relns_rec.context  ;
6419       x_txn_ii_rltns_tbl(l_index).attribute1 := txn_ii_relns_rec.attribute1  ;
6420       x_txn_ii_rltns_tbl(l_index).attribute2 := txn_ii_relns_rec.attribute2  ;
6421       x_txn_ii_rltns_tbl(l_index).attribute3 := txn_ii_relns_rec.attribute3  ;
6422       x_txn_ii_rltns_tbl(l_index).attribute4 := txn_ii_relns_rec.attribute4  ;
6423       x_txn_ii_rltns_tbl(l_index).attribute5 := txn_ii_relns_rec.attribute5  ;
6424       x_txn_ii_rltns_tbl(l_index).attribute6 := txn_ii_relns_rec.attribute6  ;
6425       x_txn_ii_rltns_tbl(l_index).attribute7 := txn_ii_relns_rec.attribute7  ;
6426       x_txn_ii_rltns_tbl(l_index).attribute8 := txn_ii_relns_rec.attribute8  ;
6427       x_txn_ii_rltns_tbl(l_index).attribute9 := txn_ii_relns_rec.attribute9  ;
6428       x_txn_ii_rltns_tbl(l_index).attribute10 := txn_ii_relns_rec.attribute10  ;
6429       x_txn_ii_rltns_tbl(l_index).attribute11 := txn_ii_relns_rec.attribute11 ;
6430       x_txn_ii_rltns_tbl(l_index).attribute12 := txn_ii_relns_rec.attribute12  ;
6431       x_txn_ii_rltns_tbl(l_index).attribute13 := txn_ii_relns_rec.attribute13  ;
6432       x_txn_ii_rltns_tbl(l_index).attribute14 := txn_ii_relns_rec.attribute14  ;
6433       x_txn_ii_rltns_tbl(l_index).attribute15 := txn_ii_relns_rec.attribute15  ;
6434       x_txn_ii_rltns_tbl(l_index).object_version_number  := txn_ii_relns_rec.object_version_number   ;
6435       x_txn_ii_rltns_tbl(l_index).transfer_components_flag := nvl(txn_ii_relns_rec.transfer_components_flag,'N');
6436 
6437       IF txn_ii_relns_rec.object_id = p_txn_line_detail_rec.txn_line_detail_id
6438       AND txn_ii_relns_rec.object_type = 'T'
6439       AND txn_ii_relns_rec.subject_type = 'T'
6440       THEN
6441          debug('p_txn_line_detail_rec.txn_line_detail_id is the Object ID :'||
6442              p_txn_line_detail_rec.txn_line_detail_id);
6443          l_txn_line_detail_query_rec.txn_line_detail_id := txn_ii_relns_rec.subject_id ;
6444       ELSIF txn_ii_relns_rec.subject_id = p_txn_line_detail_rec.txn_line_detail_id
6445       AND txn_ii_relns_rec.object_type = 'T'
6446       AND txn_ii_relns_rec.subject_type = 'T'
6447       THEN
6448          debug('p_txn_line_detail_rec.txn_line_detail_id is the Subject ID :'||
6449              p_txn_line_detail_rec.txn_line_detail_id);
6450          l_txn_line_detail_query_rec.txn_line_detail_id := txn_ii_relns_rec.object_id ;
6451       END IF ;
6452 
6453       ---get the txn line details
6454     csi_t_txn_details_grp.get_transaction_details(
6455      p_api_version          => 1.0,
6456     p_commit               => fnd_api.g_false,
6457     p_init_msg_list        => fnd_api.g_false,
6458     p_validation_level     => fnd_api.g_valid_level_full,
6459     p_txn_line_query_rec   => l_txn_line_query_rec ,
6460     p_txn_line_detail_query_rec   => l_txn_line_detail_query_rec,
6461     x_txn_line_detail_tbl  => l_txn_line_detail_tbl ,
6462     p_get_parties_flag     => fnd_api.g_false,
6463     x_txn_party_detail_tbl => x_txn_party_detail_tbl ,
6464     p_get_pty_accts_flag   => fnd_api.g_false,
6465     x_txn_pty_acct_detail_tbl  => x_txn_pty_acct_detail_tbl,
6466     p_get_ii_rltns_flag    => fnd_api.g_false,
6467     x_txn_ii_rltns_tbl     => l_temp_txn_ii_rltns_tbl,
6468     p_get_org_assgns_flag  => fnd_api.g_false,
6469     x_txn_org_assgn_tbl    => x_txn_org_assgn_tbl,
6470     p_get_ext_attrib_vals_flag  => fnd_api.g_false,
6471     x_txn_ext_attrib_vals_tbl => x_txn_ext_attrib_vals_tbl,
6472     p_get_csi_attribs_flag => fnd_api.g_false,
6473     x_csi_ext_attribs_tbl  => x_csi_ext_attribs_tbl,
6474     p_get_csi_iea_values_flag => fnd_api.g_false,
6475     x_csi_iea_values_tbl  => x_csi_iea_values_tbl ,
6476     p_get_txn_systems_flag => fnd_api.g_false ,
6477     x_txn_systems_tbl      => x_txn_systems_tbl ,
6478     x_return_status        => x_return_status,
6479     x_msg_count            => x_msg_count,
6480     x_msg_data             => x_msg_data);
6481 
6482     IF x_return_status <> fnd_api.g_ret_sts_success
6483     THEN
6484         RAISE fnd_api.g_exc_error;
6485     END IF;
6486 
6487     IF l_txn_line_detail_tbl.COUNT > 0 THEN
6488     FOR i IN l_txn_line_detail_tbl.FIRST .. l_txn_line_detail_tbl.LAST
6489     LOOP
6490       l_indx := NVL(x_txn_line_detail_tbl.LAST,0)+1 ;
6491       x_txn_line_detail_tbl(l_indx) := l_txn_line_detail_tbl(i) ;
6492     END LOOP ;
6493     END IF;
6494 
6495    END LOOP ; --txn_ii_relns_cur
6496       debug('End get_partner_relations');
6497 EXCEPTION
6498 WHEN OTHERS
6499 THEN
6500 x_return_status :=  FND_API.G_RET_STS_ERROR ;
6501 debug ('Error in get_partner_relations : '|| sqlerrm);
6502 END get_partner_rltns ;
6503 ---Added (End) for m-to-m enhancements
6504 
6505 
6506   /* -------------------------------------------------------------------- */
6507   /* This routine takes in a table of instances and split them in to each */
6508   /* The output is a splitted instance table. This is done to match the   */
6509   /* transaction details quantities to the instances                      */
6510   /* -------------------------------------------------------------------- */
6511 
6512   PROCEDURE split_instances(
6513     px_instance_tbl  IN OUT NOCOPY csi_datastructures_pub.instance_tbl,
6514     px_csi_txn_rec   IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
6515     x_return_status     OUT NOCOPY varchar2)
6516   IS
6517 
6518     l_n_instance_tbl    csi_datastructures_pub.instance_tbl;
6519     l_instance_tbl      csi_datastructures_pub.instance_tbl;
6520     l_o_instance_tbl    csi_datastructures_pub.instance_tbl;
6521     l_o_ind             binary_integer;
6522 
6523     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
6524     l_msg_data          varchar2(512);
6525     l_msg_count         number;
6526 
6527   BEGIN
6528 
6529     x_return_status := fnd_api.g_ret_sts_success;
6530     api_log('split_instances');
6531 
6532     l_instance_tbl := px_instance_tbl;
6533     l_o_ind := 0;
6534 
6535     IF l_instance_tbl.count > 0 THEN
6536       FOR l_ind in l_instance_tbl.FIRST..l_instance_tbl.LAST
6537       LOOP
6538       --Added IF ELSE condition loop for bug5956694--
6539       IF l_instance_tbl(1).quantity > 1 and l_instance_tbl(1).serial_number is null THEN
6540         csi_t_gen_utility_pvt.dump_api_info(
6541           p_api_name => 'split_item_instance_lines',
6542           p_pkg_name => 'csi_item_instance_pvt');
6543 
6544         csi_item_instance_pvt.split_item_instance_lines(
6545           p_api_version            => 1.0,
6546           p_commit                 => fnd_api.g_false,
6547           p_init_msg_list          => fnd_api.g_true,
6548           p_validation_level       => fnd_api.g_valid_level_full,
6549           p_source_instance_rec    => l_instance_tbl(1),
6550           p_copy_ext_attribs       => fnd_api.g_true,
6551           p_copy_org_assignments   => fnd_api.g_true,
6552           p_copy_parties           => fnd_api.g_true,
6553           p_copy_accounts          => fnd_api.g_true,
6554           p_copy_asset_assignments => fnd_api.g_true,
6555           p_copy_pricing_attribs   => fnd_api.g_true,
6556           p_txn_rec                => px_csi_txn_rec,
6557           x_new_instance_tbl       => l_n_instance_tbl,
6558           x_return_status          => l_return_status,
6559           x_msg_count              => l_msg_count,
6560           x_msg_data               => l_msg_data);
6561 
6562         IF l_return_status <> fnd_api.g_ret_sts_success THEN
6563           debug('Error splitting the item instances for distribution.');
6564           RAISE fnd_api.g_exc_error;
6565         END IF;
6566       ELSE
6567         l_n_instance_tbl := l_instance_tbl;
6568       END IF;
6569       --End of fix for bug5956694--
6570 
6571         IF l_n_instance_tbl.COUNT > 0 THEN
6572           FOR l_ind IN l_n_instance_tbl.FIRST..l_n_instance_tbl.LAST
6573           LOOP
6574             l_o_ind := l_o_ind + 1;
6575             l_o_instance_tbl(l_o_ind) := l_n_instance_tbl(l_ind);
6576           END LOOP;
6577         END IF;
6578 
6579       END LOOP;
6580     END IF;
6581 
6582     px_instance_tbl := l_o_instance_tbl;
6583 
6584   EXCEPTION
6585     WHEN fnd_api.g_exc_error THEN
6586       x_return_status := fnd_api.g_ret_sts_error;
6587 
6588   END split_instances;
6589 
6590 
6591   /* ------------------------------------------------------------------- */
6592   /* This routine distributes the CHILD instances to the PARENT instance */
6593   /* in the model to component ratio determined from the oe line order   */
6594   /* quantities. This is to build the realtion between the model and its */
6595   /* children in the appropriate ratio                                   */
6596   /* ------------------------------------------------------------------- */
6597 
6598   PROCEDURE distribute_instances(
6599     p_quantity_ratio       IN     number,
6600     p_model_txn_line_rec   IN     csi_t_datastructures_grp.txn_line_rec,
6601     p_split_flag           IN     varchar2,--bug 14534435
6602     px_instance_tbl        IN OUT NOCOPY csi_datastructures_pub.instance_tbl,
6603     px_txn_ps_tbl          IN OUT NOCOPY csi_utl_pkg.txn_ps_tbl,
6604     x_return_status           OUT NOCOPY varchar2)
6605   IS
6606 
6607     l_txn_type_id           number := csi_order_ship_pub.g_txn_type_id;
6608 
6609     l_instance_tbl          csi_datastructures_pub.instance_tbl;
6610 
6611     l_line_dtl_rec          csi_t_datastructures_grp.txn_line_detail_rec;
6612     l_pty_dtl_tbl           csi_t_datastructures_grp.txn_party_detail_tbl;
6613     l_pty_acct_tbl          csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
6614     l_ii_rltns_tbl          csi_t_datastructures_grp.txn_ii_rltns_tbl;
6615     l_org_assgn_tbl         csi_t_datastructures_grp.txn_org_assgn_tbl;
6616     l_ext_attrib_tbl        csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
6617     l_txn_systems_tbl       csi_t_datastructures_grp.txn_systems_tbl;
6618 
6619     l_object_id             number;
6620     l_inst_ind              binary_integer;
6621 
6622     l_debug_level           NUMBER;
6623     l_return_status         varchar2(1) := fnd_api.g_ret_sts_success;
6624     l_msg_data              varchar2(512);
6625     l_msg_count             number;
6626     l_skip_instance         varchar2(1) := 'N';
6627   BEGIN
6628 
6629     x_return_status := fnd_api.g_ret_sts_success;
6630 
6631     api_log('distribute_instances');
6632 
6633     l_instance_tbl := px_instance_tbl;
6634 
6635     IF l_instance_tbl.COUNT > 0 THEN
6636       FOR l_ind in l_instance_tbl.FIRST..l_instance_tbl.LAST
6637       LOOP
6638 
6639       l_skip_instance := 'N';--Bug 14471544
6640         /* do a quick check to see if the shipping has not violated the
6641            quantity raito while splitting the instance */
6642         IF l_instance_tbl(l_ind).quantity  > p_quantity_ratio THEN
6643 		   IF p_split_flag = 'Y' THEN -- Bug 14471544
6644           fnd_message.set_name('CSI','CSI_INT_CHILD_RATIO_INVALID');
6645           fnd_message.set_token('CHILD_QTY',l_instance_tbl(l_ind).quantity);
6646           fnd_message.set_token('RATIO', p_quantity_ratio);
6647           fnd_msg_pub.add;
6648           debug ('The instance qty generated by the shipment interface '||
6649              l_instance_tbl(l_ind).quantity||' is greater than the MODEL/CHILD ratio '||
6650              p_quantity_ratio);
6651 
6652           RAISE fnd_api.g_exc_error;
6653            ELSE
6654 		     -- Bug 14471544 If the distribute instance is called for the first time,
6655 			 -- Skip processing as it would get called again after splitting the instance
6656 		     l_skip_instance := 'Y';
6657         END IF;
6658         END IF;
6659         debug('l_skip_instance : '|| l_skip_instance);
6660 		debug('px_txn_ps_tbl.COUNT : '|| px_txn_ps_tbl.COUNT);
6661         l_object_id := null;
6662 
6663         IF px_txn_ps_tbl.COUNT > 0 and l_skip_instance = 'N' THEN -- Bug 14471544
6664           FOR l_ps_ind IN px_txn_ps_tbl.FIRST ..px_txn_ps_tbl.LAST
6665           LOOP
6666             IF px_txn_ps_tbl(l_ps_ind).processed_flag = 'N' THEN
6667               IF l_instance_tbl(l_ind).quantity <= px_txn_ps_tbl(l_ps_ind).quantity_remaining
6668               THEN
6669 
6670                 px_txn_ps_tbl(l_ps_ind).quantity_remaining :=
6671                   px_txn_ps_tbl(l_ps_ind).quantity_remaining - l_instance_tbl(l_ind).quantity;
6672 
6673                 l_instance_tbl(l_ind).attribute15 := 'Y'; -- marking the redord as pricessed
6674 
6675                 IF px_txn_ps_tbl(l_ps_ind).quantity_remaining = 0 THEN
6676                   px_txn_ps_tbl(l_ps_ind).processed_flag := 'Y';
6677                 END IF;
6678 
6679                 l_object_id := px_txn_ps_tbl(l_ps_ind).txn_line_detail_id;
6680 
6681                 EXIT;
6682 
6683               END IF;
6684             END IF;
6685           END LOOP;
6686         END IF;
6687 
6688         IF l_object_id is not null THEN
6689 
6690           l_line_dtl_rec.txn_line_detail_id      := fnd_api.g_miss_num;
6691           l_line_dtl_rec.transaction_line_id     := p_model_txn_line_rec.transaction_line_id;
6692           l_line_dtl_rec.sub_type_id             := csi_order_ship_pub.g_dflt_sub_type_id;
6693           l_line_dtl_rec.processing_status       := 'IN_PROCESS';
6694           l_line_dtl_rec.source_transaction_flag := 'N';
6695           l_line_dtl_rec.inventory_item_id       := l_instance_tbl(l_ind).inventory_item_id;
6696           l_line_dtl_rec.inventory_revision      := l_instance_tbl(l_ind).inventory_revision;
6697 	  /* fix for bug 4941832 */
6698           l_line_dtl_rec.inv_organization_id     := l_instance_tbl(l_ind).vld_organization_id;
6699           l_line_dtl_rec.quantity                := l_instance_tbl(l_ind).quantity;
6700           l_line_dtl_rec.unit_of_measure         := l_instance_tbl(l_ind).unit_of_measure;
6701           l_line_dtl_rec.installation_date       := sysdate;
6702           l_line_dtl_rec.external_reference      := 'INTERFACE';
6703           l_line_dtl_rec.location_type_code      := l_instance_tbl(l_ind).location_type_code;
6704           l_line_dtl_rec.location_id             := l_instance_tbl(l_ind).location_id;
6705           l_line_dtl_rec.active_start_date       := sysdate;
6706           l_line_dtl_rec.preserve_detail_flag    := 'Y';
6707           l_line_dtl_rec.instance_exists_flag    := 'Y';
6708           l_line_dtl_rec.instance_id             := l_instance_tbl(l_ind).instance_id;
6709           l_line_dtl_rec.serial_number           := l_instance_tbl(l_ind).serial_number;
6710           l_line_dtl_rec.mfg_serial_number_flag  := l_instance_tbl(l_ind).mfg_serial_number_flag;
6711           l_line_dtl_rec.lot_number              := l_instance_tbl(l_ind).lot_number;
6712           l_line_dtl_rec.object_version_number   := 1.0;
6713 
6714           csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
6715             p_api_version              => 1.0,
6716             p_commit                   => fnd_api.g_false,
6717             p_init_msg_list            => fnd_api.g_true,
6718             p_validation_level         => fnd_api.g_valid_level_full,
6719             p_txn_line_dtl_index       => 1,
6720             p_txn_line_dtl_rec         => l_line_dtl_rec,
6721             px_txn_party_dtl_tbl       => l_pty_dtl_tbl,
6722             px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
6723             px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
6724             px_txn_org_assgn_tbl       => l_org_assgn_tbl,
6725             px_txn_ext_attrib_vals_tbl => l_ext_attrib_tbl,
6726             x_return_status            => l_return_status,
6727             x_msg_count                => l_msg_count,
6728             x_msg_data                 => l_msg_data);
6729 
6730           IF l_return_status <> fnd_api.g_ret_sts_success THEN
6731             raise fnd_api.g_exc_error;
6732           END IF;
6733 
6734           -- build ii_rltns table
6735           l_ii_rltns_tbl(1).txn_relationship_id    :=  fnd_api.g_miss_num;
6736           l_ii_rltns_tbl(1).transaction_line_id    :=  p_model_txn_line_rec.transaction_line_id;
6737           l_ii_rltns_tbl(1).subject_id             :=  l_line_dtl_rec.txn_line_detail_id;
6738           l_ii_rltns_tbl(1).object_id              :=  l_object_id;
6739           l_ii_rltns_tbl(1).relationship_type_code :=  'COMPONENT-OF';
6740           l_ii_rltns_tbl(1).active_start_date      :=  sysdate;
6741 
6742           csi_t_txn_rltnshps_grp.create_txn_ii_rltns_dtls(
6743             p_api_version       => 1.0,
6744             p_commit            => fnd_api.g_false,
6745             p_init_msg_list     => fnd_api.g_true,
6746             p_validation_level  => fnd_api.g_valid_level_full,
6747             px_txn_ii_rltns_tbl => l_ii_rltns_tbl,
6748             x_return_status     => l_return_status,
6749             x_msg_count         => l_msg_count,
6750             x_msg_data          => l_msg_data);
6751 
6752           IF l_return_status <> fnd_api.g_ret_sts_success THEN
6753             debug('Error creating txn ii relation for the ATO/PTO Child');
6754             raise fnd_api.g_exc_error;
6755           END IF;
6756 
6757         END IF;
6758 
6759       END LOOP;
6760 
6761       /* loop thru the table to split the instance as needed for distribution*/
6762       l_inst_ind := 0;
6763       px_instance_tbl.DELETE;
6764       FOR l_ind in l_instance_tbl.FIRST..l_instance_tbl.LAST
6765       LOOP
6766 
6767         IF l_instance_tbl(l_ind).attribute15 <> 'Y' THEN
6768           l_inst_ind := l_inst_ind + 1;
6769           px_instance_tbl(l_inst_ind) := l_instance_tbl(l_ind);
6770         END IF;
6771 
6772       END LOOP;
6773 
6774     END IF;
6775 
6776   EXCEPTION
6777     WHEN fnd_api.g_exc_error THEN
6778       x_return_status := fnd_api.g_ret_sts_error;
6779   END distribute_instances;
6780 
6781   PROCEDURE query_immediate_children (
6782     p_header_id          IN  number,
6783     p_parent_line_id     IN  number,
6784     x_line_tbl           OUT NOCOPY oe_order_pub.line_tbl_type)
6785   IS
6786 
6787     l_line_rec  oe_order_pub.line_rec_type := oe_order_pub.g_miss_line_rec;
6788 
6789     CURSOR op_cur is
6790       SELECT line_id
6791       FROM   oe_order_lines_all
6792       WHERE  header_id       = p_header_id
6793       AND    link_to_line_id = p_parent_line_id
6794       ORDER BY line_number, shipment_number;
6795 
6796   BEGIN
6797 
6798     debug('Getting next level children for Line ID :'||p_parent_line_id);
6799 
6800     FOR op_rec IN op_cur
6801     LOOP
6802 
6803       IF op_rec.line_id <> p_parent_line_id THEN
6804 
6805         oe_line_util.query_row(
6806           p_line_id  => op_rec.line_id,
6807           x_line_rec => l_line_rec );
6808 
6809         x_line_tbl(x_line_tbl.COUNT + 1) := l_line_rec;
6810 
6811       END IF;
6812 
6813     END LOOP;
6814 
6815     debug('  Children count :'||x_line_tbl.COUNT);
6816 
6817   END query_immediate_children;
6818 
6819 
6820   /* --------------------------------------------------------------------- */
6821   /* This routine gets the next level trackable order line details for the */
6822   /* currently processed order line id(MODEL, CLASS, KIT)                  */
6823   /*                                                                       */
6824   /* Here is an example:                                                   */
6825   /*                           A (MODEL)                                   */
6826   /*                          / \                                          */
6827   /*            Non Trk (OC) B   C (OC) Trk                                */
6828   /*                        / \   \                                        */
6829   /*                       D   E   F                                       */
6830   /*  Both D and E are  trackable option items. In this example while      */
6831   /*  processing the Model (A) the relationship will be build between      */
6832   /*  A => C, A => D, A = E. Option class B will be ignored                */
6833   /* --------------------------------------------------------------------- */
6834 
6835   PROCEDURE get_config_children(
6836     p_header_id          IN  number,
6837     p_current_line_id    IN  number,
6838     p_om_vld_org_id      IN  number,
6839     x_trackable_line_tbl OUT NOCOPY oe_order_pub.line_tbl_type,
6840     x_return_status      OUT NOCOPY varchar2)
6841   IS
6842 
6843     l_line_tbl           oe_order_pub.line_tbl_type;
6844     l_line_tbl_nxt_lvl   oe_order_pub.line_tbl_type;
6845     l_line_tbl_temp      oe_order_pub.line_tbl_type;
6846     l_line_tbl_final     oe_order_pub.line_tbl_type;
6847 
6848     l_nxt_ind            binary_integer;
6849     l_final_ind          binary_integer;
6850 
6851     l_ib_trackable_flag  varchar2(1);
6852 
6853   BEGIN
6854 
6855     x_return_status := fnd_api.g_ret_sts_success;
6856     api_log('get_config_children');
6857 
6858     l_final_ind := 0;
6859 
6860     query_immediate_children (
6861       p_header_id       => p_header_id,
6862       p_parent_line_id  => p_current_line_id,
6863       x_line_tbl        => l_line_tbl);
6864 
6865     <<Next_Level>>
6866 
6867     l_line_tbl_nxt_lvl.delete;
6868     l_nxt_ind := 0;
6869 
6870     IF l_line_tbl.count > 0 THEN
6871 
6872       FOR l_ind IN l_line_tbl.FIRST .. l_line_tbl.LAST
6873       LOOP
6874 
6875         IF l_line_tbl(l_ind).item_type_code <> 'CONFIG' THEN
6876 
6877           SELECT nvl(msi.comms_nl_trackable_flag,'N')
6878           INTO   l_ib_trackable_flag
6879           FROM   mtl_system_items msi
6880           WHERE  msi.inventory_item_id = l_line_tbl(l_ind).inventory_item_id
6881           AND    msi.organization_id   = p_om_vld_org_id;
6882 
6883           /* if trackable populate it for the final out table */
6884           IF l_ib_trackable_flag = 'Y' THEN
6885 
6886             l_final_ind := l_final_ind + 1;
6887             l_line_tbl_final(l_final_ind) := l_line_tbl(l_ind);
6888 
6889           ELSE --[NOT Trackable]
6890 
6891             /* get the next level using this line ID as the parent */
6892 
6893             query_immediate_children (
6894               p_header_id       => l_line_tbl(l_ind).header_id,
6895               p_parent_line_id  => l_line_tbl(l_ind).line_id,
6896               x_line_tbl        => l_line_tbl_temp);
6897 
6898             IF l_line_tbl_temp.count > 0 THEN
6899               FOR l_temp_ind IN l_line_tbl_temp.FIRST .. l_line_tbl_temp.LAST
6900               LOOP
6901 
6902                 l_nxt_ind := l_nxt_ind + 1;
6903                 l_line_tbl_nxt_lvl (l_nxt_ind) := l_line_tbl_temp(l_temp_ind);
6904 
6905               END LOOP;
6906             END IF;
6907           END IF;
6908         END IF; -- <> CONFIG
6909       END LOOP;
6910 
6911       IF l_line_tbl_nxt_lvl.COUNT > 0 THEN
6912         l_line_tbl.DELETE;
6913         l_line_tbl := l_line_tbl_nxt_lvl;
6914         goto Next_Level;
6915       END IF;
6916 
6917     END IF;
6918 
6919     x_trackable_line_tbl := l_line_tbl_final;
6920 
6921   END get_config_children;
6922 
6923   PROCEDURE get_ib_trackable_children(
6924     p_order_line_rec     IN csi_order_ship_pub.order_line_rec,
6925     x_trackable_line_tbl OUT NOCOPY oe_order_pub.line_tbl_type,
6926     x_return_status      OUT NOCOPY varchar2)
6927   IS
6928     l_line_tbl           oe_order_pub.line_tbl_type;
6929     l_return_status      varchar2(1) := fnd_api.g_ret_sts_success;
6930   BEGIN
6931     x_return_status := fnd_api.g_ret_sts_success;
6932     api_log('get_ib_trackable_children');
6933     IF p_order_line_rec.item_type_code = 'CONFIG' THEN
6934       get_config_children(
6935         p_header_id          => p_order_line_rec.header_id,
6936         p_current_line_id    => p_order_line_rec.ato_line_id,
6937         p_om_vld_org_id      => p_order_line_rec.om_vld_org_id,
6938         x_trackable_line_tbl => l_line_tbl,
6939         x_return_status      => l_return_status);
6940       IF l_return_status <> fnd_api.g_ret_sts_success THEN
6941         RAISE fnd_api.g_exc_error;
6942       END IF;
6943     ELSE
6944       csi_order_fulfill_pub.get_ib_trackable_children(
6945         p_current_line_id    => p_order_line_rec.order_line_id,
6946         p_om_vld_org_id      => p_order_line_rec.om_vld_org_id,
6947         x_trackable_line_tbl => l_line_tbl,
6948         x_return_status      => l_return_status);
6949 
6950       IF l_return_status <> fnd_api.g_ret_sts_success THEN
6951         RAISE fnd_api.g_exc_error;
6952       END IF;
6953     END IF;
6954     x_trackable_line_tbl := l_line_tbl;
6955   EXCEPTION
6956     WHEN fnd_api.g_exc_error THEN
6957       x_return_status := fnd_api.g_ret_sts_error;
6958   END get_ib_trackable_children;
6959 
6960 
6961   PROCEDURE filter_processed_instances(
6962     p_order_line_id      IN     number,
6963     px_instance_tbl      IN OUT NOCOPY csi_datastructures_pub.instance_tbl,
6964     x_return_status         OUT NOCOPY varchar2)
6965   IS
6966     l_instance_tbl       csi_datastructures_pub.instance_tbl;
6967     l_i_ind              binary_integer := 0;
6968     l_processed          boolean        := FALSE;
6969 
6970     CURSOR tld_cur (p_ord_line_id IN number, p_instance_id IN number) IS
6971       SELECT 'X'
6972       FROM   csi_t_transaction_lines ctl,
6973              csi_t_txn_line_details  ctld
6974       WHERE  ctl.source_transaction_id    = p_ord_line_id
6975       AND    ctl.source_transaction_table = 'WSH_DELIVERY_DETAILS'
6976       AND    ctld.transaction_line_id     = ctl.transaction_line_id
6977       AND    nvl(ctld.source_transaction_flag,'N') = 'N'
6978       AND    ctld.instance_id             = p_instance_id
6979       AND    ctld.processing_status       = 'PROCESSED';
6980 
6981    --fix for bug4607042
6982     CURSOR rel_build_cur(p_instance_id IN NUMBER) IS
6983      SELECT 'X'
6984      FROM csi_ii_relationships
6985      WHERE subject_id = p_instance_id
6986      AND relationship_type_code = 'COMPONENT-OF'
6987      AND active_end_date IS NULL;
6988     --end of fix bug4607042
6989 
6990 
6991   BEGIN
6992     x_return_status := fnd_api.g_ret_sts_success;
6993     api_log('filter_processed_instances');
6994 
6995     debug('    instance_tbl count :'||px_instance_tbl.COUNT);
6996 
6997     IF px_instance_tbl.COUNT > 0 THEN
6998       FOR l_ind IN px_instance_tbl.FIRST .. px_instance_tbl.LAST
6999       LOOP
7000         l_processed := FALSE;
7001         FOR tld_rec IN tld_cur(p_order_line_id, px_instance_tbl(l_ind).instance_id)
7002         LOOP
7003           l_processed := TRUE;
7004           exit;
7005         END LOOP;
7006      --fix for bug4607042
7007         IF NOT (l_processed) THEN
7008         FOR rel_build_rec IN rel_build_cur(px_instance_tbl(l_ind).instance_id)
7009         LOOP
7010             l_processed := TRUE;
7011            exit;
7012         END LOOP;
7013         END IF;
7014     --end of fix bug4607042
7015         IF NOT(l_processed) THEN
7016           l_i_ind := l_i_ind + 1;
7017           l_instance_tbl(l_i_ind) := px_instance_tbl(l_ind);
7018         END IF;
7019       END LOOP;
7020       px_instance_tbl := l_instance_tbl;
7021       debug('    filtered instance_tbl count :'||px_instance_tbl.COUNT);
7022     END IF;
7023 
7024   END filter_processed_instances;
7025 
7026   PROCEDURE build_child_relation(
7027     p_order_line_rec     IN csi_order_ship_pub.order_line_rec,
7028     p_model_txn_line_rec IN csi_t_datastructures_grp.txn_line_rec,
7029     px_csi_txn_rec       IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
7030     x_return_status         OUT NOCOPY varchar2)
7031   IS
7032 
7033     l_inst_query_rec        csi_datastructures_pub.instance_query_rec;
7034     l_party_query_rec       csi_datastructures_pub.party_query_rec;
7035     l_pty_acct_query_rec    csi_datastructures_pub.party_account_query_rec;
7036 
7037     l_instance_hdr_tbl      csi_datastructures_pub.instance_header_tbl;
7038     l_instance_tbl          csi_datastructures_pub.instance_tbl;
7039 
7040     l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
7041     l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
7042 
7043     l_line_dtl_rec          csi_t_datastructures_grp.txn_line_detail_rec;
7044     l_line_dtl_tbl          csi_t_datastructures_grp.txn_line_detail_tbl;
7045     l_pty_dtl_tbl           csi_t_datastructures_grp.txn_party_detail_tbl;
7046     l_pty_acct_tbl          csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
7047     l_ii_rltns_tbl          csi_t_datastructures_grp.txn_ii_rltns_tbl;
7048     l_org_assgn_tbl         csi_t_datastructures_grp.txn_org_assgn_tbl;
7049     l_ext_attrib_tbl        csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
7050     l_csi_ea_tbl            csi_t_datastructures_grp.csi_ext_attribs_tbl;
7051     l_csi_eav_tbl           csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
7052     l_txn_systems_tbl       csi_t_datastructures_grp.txn_systems_tbl;
7053 
7054     l_line_tbl              oe_order_pub.line_tbl_type;
7055     l_quantity_ratio        number;
7056 
7057     l_model_order_qty       number;
7058 
7059     l_instance_found        boolean;
7060     l_instance_created      boolean;
7061 
7062     l_object_id             number;
7063     l_debug_level           number;
7064 
7065     l_return_status         varchar2(1) := fnd_api.g_ret_sts_success;
7066     l_msg_data              varchar2(512);
7067     l_msg_count             number;
7068 
7069     l_txn_ps_tbl           csi_utl_pkg.txn_ps_tbl;
7070 
7071     --fix for bug5096435
7072     l_order_line_qty        number;
7073     l_temp_line_rec         oe_order_pub.Line_Rec_Type;
7074     l_next_item_id          number := 0;
7075     l_temp_idx              number := 0;
7076     l_temp_instance_hdr_tbl csi_datastructures_pub.instance_header_tbl;
7077     l_temp_index            number := 0;
7078 
7079 
7080   BEGIN
7081 
7082     x_return_status := fnd_api.g_ret_sts_success;
7083     api_log('build_child_relation');
7084 
7085     get_ib_trackable_children(
7086       p_order_line_rec     => p_order_line_rec,
7087       x_trackable_line_tbl => l_line_tbl,
7088       x_return_status      => l_return_status);
7089 
7090     IF l_return_status <> fnd_api.g_ret_sts_success THEN
7091       RAISE fnd_api.g_exc_error;
7092     END IF;
7093 
7094     debug('IB Trackable Children Count :'||l_line_tbl.COUNT);
7095 
7096     IF l_line_tbl.COUNT > 0 THEN
7097         --fix for bug5096435
7098         --Here child_line_tbl is sorted and rearranged to ensure that
7099 	--two/more different remnant lines of same inventory item are put together
7100 	--in the plsql table.
7101         IF nvl(p_order_line_rec.model_remnant_flag,'N') = 'Y' THEN
7102         FOR i IN 1..l_line_tbl.COUNT
7103         LOOP
7104             IF l_line_tbl(i).model_remnant_flag = 'Y' THEN
7105                 l_temp_index := i+1;
7106                 FOR j IN l_temp_index..l_line_tbl.COUNT
7107                 LOOP
7108                     IF l_line_tbl(j).inventory_item_id = l_line_tbl(i).inventory_item_id
7109                     AND j <> l_temp_index THEN
7110                         l_temp_line_rec := l_line_tbl(l_temp_index);
7111                         l_line_tbl(l_temp_index) := l_line_tbl(j);
7112                         l_line_tbl(j)   := l_temp_line_rec;
7113                         EXIT;
7114                     END IF;
7115                 END LOOP;
7116             END IF;
7117         END LOOP;
7118         END IF;
7119         --end of fix for bug5096435
7120 
7121       debug('Getting Transaction Details for Building Relation.');
7122 
7123       l_txn_line_query_rec.source_transaction_table        := 'WSH_DELIVERY_DETAILS';
7124       l_txn_line_query_rec.source_transaction_id           := p_order_line_rec.order_line_id;
7125       l_txn_line_detail_query_rec.source_transaction_flag  := 'Y';
7126       l_txn_line_detail_query_rec.processing_status        := 'IN_PROCESS';
7127 
7128       csi_t_txn_details_grp.get_transaction_details(
7129         p_api_version               => 1,
7130         p_commit                    => fnd_api.g_false,
7131         p_init_msg_list             => fnd_api.g_true,
7132         p_validation_level          => fnd_api.g_valid_level_full,
7133         p_txn_line_query_rec        => l_txn_line_query_rec,
7134         p_txn_line_detail_query_rec => l_txn_line_detail_query_rec,
7135         x_txn_line_detail_tbl       => l_line_dtl_tbl,
7136         p_get_parties_flag          => fnd_api.g_false,
7137         x_txn_party_detail_tbl      => l_pty_dtl_tbl,
7138         p_get_pty_accts_flag        => fnd_api.g_false,
7139         x_txn_pty_acct_detail_tbl   => l_pty_acct_tbl,
7140         p_get_ii_rltns_flag         => fnd_api.g_false,
7141         x_txn_ii_rltns_tbl          => l_ii_rltns_tbl,
7142         p_get_org_assgns_flag       => fnd_api.g_false,
7143         x_txn_org_assgn_tbl         => l_org_assgn_tbl,
7144         p_get_ext_attrib_vals_flag  => fnd_api.g_false,
7145         x_txn_ext_attrib_vals_tbl   => l_ext_attrib_tbl,
7146         p_get_csi_attribs_flag      => fnd_api.g_false,
7147         x_csi_ext_attribs_tbl       => l_csi_ea_tbl,
7148         p_get_csi_iea_values_flag   => fnd_api.g_false,
7149         x_csi_iea_values_tbl        => l_csi_eav_tbl,
7150         p_get_txn_systems_flag      => fnd_api.g_false,
7151         x_txn_systems_tbl           => l_txn_systems_tbl,
7152         x_return_status             => l_return_status,
7153         x_msg_count                 => l_msg_count,
7154         x_msg_data                  => l_msg_data);
7155 
7156       IF l_return_status <> fnd_api.g_ret_sts_success THEN
7157         raise fnd_api.g_exc_error;
7158       END IF;
7159       debug('  Source Txn Line Detail COUNT :'||l_line_dtl_tbl.COUNT);
7160 
7161       FOR l_ol_ind in l_line_tbl.FIRST..l_line_tbl.LAST
7162       LOOP
7163         --fix for 5096435
7164         --This check ensures that we figure out quantity ratio by summing
7165         --order quantity,incase if remnant lines of same item are put
7166         --unpreportionate quantity.
7167          IF nvl(p_order_line_rec.model_remnant_flag,'N') = 'Y' THEN
7168            IF l_ol_ind <> l_line_tbl.LAST THEN
7169                 l_next_item_id := l_line_tbl(l_ol_ind+1).inventory_item_id;
7170            ELSE
7171 		l_next_item_id := -99;
7172            END IF;
7173            IF l_line_tbl(l_ol_ind).inventory_item_id <> l_next_item_id THEN
7174              BEGIN
7175             	select sum(ordered_quantity)
7176             	into l_order_line_qty
7177             	from oe_order_lines_all
7178             	where link_to_line_id = l_line_tbl(l_ol_ind).link_to_line_id
7179             	and inventory_item_id = l_line_tbl(l_ol_ind).inventory_item_id
7180             	and model_remnant_flag = 'Y';
7181              EXCEPTION
7182              WHEN others THEN
7183                 NULL;
7184              END;
7185               l_quantity_ratio := l_order_line_qty / p_order_line_rec.ordered_quantity;
7186            ELSE
7187               l_quantity_ratio := -99;
7188 	      debug('Remnant order line splitted across inproper qty,so qty_ratio calculated with adding ordered quantity');
7189            END IF;
7190          ELSE
7191            l_quantity_ratio := l_line_tbl(l_ol_ind).ordered_quantity/p_order_line_rec.ordered_quantity;
7192          END IF;
7193           debug('l_quantity_ratio : ' || l_quantity_ratio);
7194          --end of fix for bug 5096435
7195         l_inst_query_rec.inventory_item_id     := l_line_tbl(l_ol_ind).inventory_item_id;
7196         l_inst_query_rec.last_oe_order_line_id := l_line_tbl(l_ol_ind).line_id;
7197 	l_instance_found := FALSE;
7198 
7199         debug('  query criteria for get_item_instances - '||l_line_tbl(l_ol_ind).item_type_code);
7200         debug('  inventory_item_id     : '||l_inst_query_rec.inventory_item_id);
7201         debug('  last_oe_order_line_id : '||l_inst_query_rec.last_oe_order_line_id);
7202 
7203         debug('Child item type :'||l_line_tbl(l_ol_ind).item_type_code);
7204 
7205         csi_t_gen_utility_pvt.dump_api_info(
7206           p_api_name => 'get_item_instances',
7207           p_pkg_name => 'csi_item_instance_pub');
7208 
7209         csi_item_instance_pub.get_item_instances(
7210           p_api_version          => 1.0,
7211           p_commit               => fnd_api.g_false,
7212           p_init_msg_list        => fnd_api.g_true,
7213           p_validation_level     => fnd_api.g_valid_level_full,
7214           p_instance_query_rec   => l_inst_query_rec,
7215           p_party_query_rec      => l_party_query_rec,
7216           p_account_query_rec    => l_pty_acct_query_rec,
7217           p_transaction_id       => null,
7218           p_resolve_id_columns   => fnd_api.g_false,
7219           p_active_instance_only => fnd_api.g_true,
7220           x_instance_header_tbl  => l_instance_hdr_tbl,
7221           x_return_status        => l_return_status,
7222           x_msg_count            => l_msg_count,
7223           x_msg_data             => l_msg_data  );
7224 
7225         IF l_return_status <> fnd_api.g_ret_sts_success THEN
7226           raise fnd_api.g_exc_error;
7227         END IF;
7228         --fix for bug5096435
7229 	IF l_instance_hdr_tbl.COUNT > 0 THEN
7230               debug('instances found for the child order line : '||l_instance_hdr_tbl.COUNT);
7231 	      l_instance_found := TRUE;
7232         ELSE
7233               debug('instances not found for the child order line');
7234 	      l_instance_found := FALSE;
7235         END IF;
7236 	IF l_instance_found THEN
7237   	 IF nvl(p_order_line_rec.model_remnant_flag,'N') = 'Y' THEN
7238 	      FOR i IN l_instance_hdr_tbl.FIRST..l_instance_hdr_tbl.LAST
7239               LOOP
7240                l_temp_idx := l_temp_idx + 1;
7241                l_temp_instance_hdr_tbl(l_temp_idx) := l_instance_hdr_tbl(i);
7242               END LOOP;
7243 	    IF l_quantity_ratio <> -99 THEN
7244                 l_temp_idx := 0;
7245             END IF;
7246          ELSE
7247            l_temp_instance_hdr_tbl := l_instance_hdr_tbl;
7248          END IF;
7249 	END IF;
7250       --end of fix for bug5096435
7251       --Here we ensure that we go for building non-source rec only after accumulating
7252       --all the instances created among two/more remnant lines belonging to same inv item.
7253        IF nvl(p_order_line_rec.model_remnant_flag,'N') <> 'Y' OR --fix for bug5096435
7254          (nvl(p_order_line_rec.model_remnant_flag,'N') = 'Y' AND l_quantity_ratio <> -99) THEN
7255 
7256         IF l_temp_instance_hdr_tbl.COUNT > 0 THEN
7257           make_non_header_tbl(
7258             p_instance_header_tbl => l_temp_instance_hdr_tbl, --fix for bug5096435
7259             x_instance_tbl        => l_instance_tbl,
7260             x_return_status       => l_return_status);
7261 
7262 	  IF l_return_status <> fnd_api.g_ret_sts_success THEN
7263             RAISE fnd_api.g_exc_error;
7264           END IF;
7265 
7266           l_temp_instance_hdr_tbl.DELETE;
7267 
7268           filter_processed_instances(
7269             p_order_line_id  => p_order_line_rec.order_line_id,
7270             px_instance_tbl  => l_instance_tbl,
7271             x_return_status  => l_return_status);
7272 
7273 	  IF l_return_status <> fnd_api.g_ret_sts_success THEN
7274              RAISE fnd_api.g_exc_error;
7275           END IF;
7276 
7277           IF l_instance_tbl.count > 0 THEN
7278 
7279 	   l_txn_ps_tbl.DELETE;
7280 
7281            /* initialize  txn_ps_tbl */
7282 
7283           IF l_line_dtl_tbl.COUNT > 0 THEN
7284 
7285             FOR l_ind IN l_line_dtl_tbl.FIRST..l_line_dtl_tbl.LAST
7286             LOOP
7287 
7288               l_txn_ps_tbl(l_ind).txn_line_detail_id := l_line_dtl_tbl(l_ind).txn_line_detail_id;
7289               l_txn_ps_tbl(l_ind).quantity           := l_line_dtl_tbl(l_ind).quantity;
7290               l_txn_ps_tbl(l_ind).processed_flag     := 'N';
7291               l_txn_ps_tbl(l_ind).quantity_ratio     := l_quantity_ratio;
7292               l_txn_ps_tbl(l_ind).quantity_remaining := l_quantity_ratio;
7293 
7294             END LOOP;
7295 
7296             dump_txn_ps_tbl(
7297               p_txn_ps_tbl => l_txn_ps_tbl);
7298 
7299           END IF;
7300 
7301           -- call distribute instances
7302           distribute_instances(
7303             p_quantity_ratio       => l_quantity_ratio,
7304             p_model_txn_line_rec   => p_model_txn_line_rec,
7305 	    p_split_flag           => 'N',  -- Bug 14534435
7306             px_instance_tbl        => l_instance_tbl,
7307             px_txn_ps_tbl          => l_txn_ps_tbl,
7308             x_return_status        => l_return_status);
7309 
7310           IF l_return_status <> fnd_api.g_ret_sts_success THEN
7311             RAISE fnd_api.g_exc_error;
7312           END IF;
7313 
7314           IF l_instance_tbl.COUNT > 0 THEN
7315             debug('There exist unresolved instances. So splitting instances.');
7316 
7317             split_instances(
7318               px_csi_txn_rec   => px_csi_txn_rec,
7319               px_instance_tbl  => l_instance_tbl,
7320               x_return_status  => l_return_status);
7321 
7322             IF l_return_status <> fnd_api.g_ret_sts_success THEN
7323               RAISE fnd_api.g_exc_error;
7324             END IF;
7325 
7326             debug('Re-distributing after the split.');
7327 
7328             distribute_instances(
7329               p_quantity_ratio       => l_quantity_ratio,
7330               p_model_txn_line_rec   => p_model_txn_line_rec,
7331 	      p_split_flag           => 'Y',  -- Bug 14534435
7332               px_instance_tbl        => l_instance_tbl,
7333               px_txn_ps_tbl          => l_txn_ps_tbl,
7334               x_return_status        => l_return_status);
7335 
7336             IF l_return_status <> fnd_api.g_ret_sts_success THEN
7337               RAISE fnd_api.g_exc_error;
7338             END IF;
7339           END IF; --<<end if l_instance_tbl.count > 0>>
7340           END IF; --<<end if l_instance_tbl.COUNT > 0>>
7341 	END IF; --<<end if l_instance_hdr_tbl.COUNT > 0>>
7342         END IF; --remnant check cond for bug 5096435
7343       END LOOP; -- child order lines loop
7344     END IF; --<<end if l_line_tbl.COUNT > 0>>
7345 
7346   EXCEPTION
7347     WHEN fnd_api.g_exc_error THEN
7348       x_return_status := fnd_api.g_ret_sts_error;
7349   END build_child_relation;
7350 
7351   PROCEDURE get_unit_price_in_primary_uom(
7352     p_unit_price                IN     number,
7353     p_unit_price_uom            IN     varchar2,
7354     px_item_control_rec         IN OUT nocopy csi_order_ship_pub.item_control_rec,
7355     x_unit_price_in_primary_uom    OUT nocopy number,
7356     x_return_status                OUT nocopy varchar2)
7357   IS
7358     l_uom_conv_rate             number;
7359   BEGIN
7360 
7361     api_log('get_unit_price_in_primary_uom');
7362 
7363     x_return_status := fnd_api.g_ret_sts_success;
7364 
7365     IF nvl(px_item_control_rec.primary_uom_code, fnd_api.g_miss_char) = fnd_api.g_miss_char THEN
7366 
7367       px_item_control_rec.primary_uom_code := csi_utl_pkg.get_primay_uom(
7368         p_inv_item_id => px_item_control_rec.inventory_item_id,
7369         p_inv_org_id  => px_item_control_rec.organization_id);
7370 
7371     END IF;
7372 
7373     inv_convert.inv_um_conversion (
7374       from_unit  => p_unit_price_uom,
7375       to_unit    => px_item_control_rec.primary_uom_code,
7376       item_id    => px_item_control_rec.inventory_item_id,
7377       uom_rate   => l_uom_conv_rate);
7378 
7379     debug('  uom conv rate             : '||l_uom_conv_rate);
7380 
7381     IF l_uom_conv_rate = -99999 THEN
7382       debug('  inv_convert.inv_um_conversion failed ');
7383       RAISE fnd_api.g_exc_error;
7384     END IF;
7385 
7386     x_unit_price_in_primary_uom := p_unit_price/l_uom_conv_rate;
7387 
7388     debug('  unit price in primary uom : '||x_unit_price_in_primary_uom);
7389 
7390   EXCEPTION
7391     WHEN fnd_api.g_exc_error THEN
7392       x_return_status := fnd_api.g_ret_sts_error;
7393   END get_unit_price_in_primary_uom;
7394 
7395 FUNCTION EntitledContracts (p_instance_id IN number)
7396     RETURN  varchar2
7397     IS
7398     l_concat_contract        VARCHAR2(3000);
7399     l_contract_dtls          VARCHAR2(200);
7400 
7401     CURSOR Entitle_Contracts(p_instance_id IN NUMBER)
7402     IS
7403     Select (kh.contract_number || Decode(kh.Contract_Number_Modifier,null,null,'-' ||kh.Contract_number_modifier)) Contract_Number,
7404           tl.line_number||'.'||sl.line_number line_number,
7405           oks_ib_util_pvt.get_covlvl_name(sli.jtot_object1_code,
7406                                           sli.object1_id1,
7407                                           sli.object1_id2
7408                                           ) cov_level_name,
7409           tlst.name service_type,
7410           sysitems.concatenated_segments service_name,
7411           sts.meaning status
7412         from okc_k_headers_all_b kh,
7413         okc_k_lines_b sl,
7414         okc_k_lines_b tl,
7415         okc_statuses_v sts,
7416         okc_k_items sli,
7417         okc_k_items li,
7418         mtl_system_items_b1_kfv sysitems,
7419         okc_line_styles_v tlst
7420       where sl.id = sli.cle_id
7421       and sl.sts_code=sts.code
7422       and tl.lse_id  = tlst.id
7423       and sl.id = sli.cle_id
7424       AND kh.id=tl.chr_id
7425       and tl.id = sl.cle_id
7426       AND sli.object1_id1 = to_char(p_instance_id) --Changed for bug 9930628
7427       AND sli.jtot_object1_code='OKX_CUSTPROD'
7428       AND li.cle_id=tl.id
7429       AND li.object1_id1=sysitems.inventory_item_id
7430       AND li.object1_id2=sysitems.organization_id;
7431 
7432     BEGIN
7433             l_concat_contract := NULL;
7434 
7435 	    IF(nvl(fnd_profile.value('CSI_CONTRACTS_ENABLED'), 'N') = 'Y') THEN
7436 		FOR Entitle_Contracts_Rec IN Entitle_Contracts(p_instance_id)
7437 		LOOP
7438 
7439 		    l_contract_dtls := Entitle_Contracts_Rec.Contract_Number||'-'||
7440 					Entitle_Contracts_Rec.line_number||'-'||
7441 					Entitle_Contracts_Rec.cov_level_name||'-'||
7442 					Entitle_Contracts_Rec.service_type||'-'||
7443 					Entitle_Contracts_Rec.service_name||'-'||
7444 					Entitle_Contracts_Rec.status;
7445 
7446 		  IF l_concat_contract IS NULL THEN
7447 		      l_concat_contract :=  l_contract_dtls;
7448 		    ELSE
7449 		      l_concat_contract := l_concat_contract||','||l_contract_dtls;
7450 		    END IF;
7451 
7452 		END LOOP;
7453 	    END IF;
7454 
7455         RETURN l_concat_contract;
7456 END Entitledcontracts;
7457 
7458 
7459 --Added for Bug#14835893
7460  FUNCTION get_lot_ctrl_code (
7461     p_transaction_id   IN NUMBER)RETURN NUMBER
7462   IS
7463     l_lot_ctrl_code NUMBER;
7464   BEGIN
7465 
7466      api_log('get_lot_ctrl_code');
7467       -- if not lot controlled
7468      IF p_transaction_id IS NOT NULL THEN
7469       BEGIN
7470 
7471       SELECT 1 INTO l_lot_ctrl_code FROM dual WHERE (--condition
7472               EXISTS
7473               (SELECT * FROM
7474               mtl_material_transactions mmt,mtl_unit_transactions mut
7475               where mut.transaction_id(+) = mmt.transaction_id
7476               AND mmt.transaction_id =  p_transaction_id
7477              )
7478              AND
7479              NOT EXISTS
7480              (
7481 
7482              SELECT * FROM
7483               mtl_material_transactions mmt, mtl_transaction_lot_numbers
7484               mtln,mtl_unit_transactions mut where
7485               mut.transaction_id(+) = mtln.serial_transaction_id
7486               and
7487               mtln.transaction_id = mmt.transaction_id
7488               AND mmt.transaction_id =  p_transaction_id
7489 
7490 
7491              )
7492     )--condition
7493     ;
7494 
7495     EXCEPTION
7496 
7497     WHEN No_Data_Found THEN
7498 
7499     DEBUG('LOT CONTROL CODE IS NOT 1');
7500 
7501 
7502     END;
7503 
7504     --full lot controlled
7505     BEGIN
7506 
7507     SELECT 2 INTO l_lot_ctrl_code FROM dual WHERE EXISTS
7508     (--condition
7509 
7510     SELECT * FROM
7511               mtl_material_transactions mmt, mtl_transaction_lot_numbers
7512               mtln,mtl_unit_transactions mut where
7513               mut.transaction_id(+) = mtln.serial_transaction_id
7514               and
7515               mtln.transaction_id = mmt.transaction_id
7516               AND mmt.transaction_id = p_transaction_id
7517 
7518        )--condition
7519        ;
7520 
7521     EXCEPTION
7522 
7523     WHEN No_Data_Found THEN
7524 
7525     DEBUG('LOT CONTROL CODE IS NOT 2');
7526 
7527     END;
7528    END IF;
7529 
7530     DEBUG('LOT CONTROL CODE:'|| l_lot_ctrl_code);
7531     DEBUG('TRANSACTION ID:' || p_transaction_id);
7532 
7533     RETURN l_lot_ctrl_code;
7534 
7535   END get_lot_ctrl_code;
7536 --Added for Bug#14835893
7537 
7538 
7539 END csi_utl_pkg ;