DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSI_UTL_PKG

Source


1 PACKAGE BODY csi_utl_pkg as
2 /* $Header: csiutlb.pls 120.21 2007/10/20 01:20:15 fli 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 
2422     l_init_pty_rec            csi_datastructures_pub.party_rec;
2423 
2424     l_pty_ind                 binary_integer := 0;
2425     l_pa_ind                  binary_integer := 0;
2426 
2427     l_pty_rec                 csi_datastructures_pub.party_rec;
2428     l_pty_tbl                 csi_datastructures_pub.party_tbl;
2429 
2430     l_con_pty_tbl             csi_datastructures_pub.party_tbl;
2431 
2432     l_pa_rec                  csi_datastructures_pub.party_account_rec;
2433     l_pa_tbl                  csi_datastructures_pub.party_account_tbl;
2434 
2435     l_return_status           varchar2(1) := fnd_api.g_ret_sts_success;
2436     l_msg_count               number;
2437     l_msg_data                varchar2(2000);
2438 
2439     PROCEDURE convert_tpty_to_ipty(
2440       p_instance_id       IN  number,
2441       p_t_party_rec       IN  csi_t_datastructures_grp.txn_party_detail_rec,
2442       x_i_party_rec       OUT nocopy  csi_datastructures_pub.party_rec)
2443     IS
2444       l_insance_party_id  number;
2445       l_ovn               number;
2446     BEGIN
2447       x_i_party_rec.instance_party_id      := p_t_party_rec.instance_party_id;
2448       x_i_party_rec.instance_id            := p_instance_id;
2449       x_i_party_rec.party_id               := p_t_party_rec.party_source_id;
2450       x_i_party_rec.party_source_table     := p_t_party_rec.party_source_table;
2451       x_i_party_rec.relationship_type_code := p_t_party_rec.relationship_type_code;
2452       x_i_party_rec.contact_flag           := p_t_party_rec.contact_flag;
2453       x_i_party_rec.active_start_date      := fnd_api.g_miss_date;
2454       x_i_party_rec.active_end_date        := p_t_party_rec.active_end_date;
2455       x_i_party_rec.context                := p_t_party_rec.context;
2456       x_i_party_rec.attribute1             := p_t_party_rec.attribute1;
2457       x_i_party_rec.attribute2             := p_t_party_rec.attribute2;
2458       x_i_party_rec.attribute3             := p_t_party_rec.attribute3;
2459       x_i_party_rec.attribute4             := p_t_party_rec.attribute4;
2460       x_i_party_rec.attribute5             := p_t_party_rec.attribute5;
2461       x_i_party_rec.attribute6             := p_t_party_rec.attribute6;
2462       x_i_party_rec.attribute7             := p_t_party_rec.attribute7;
2463       x_i_party_rec.attribute8             := p_t_party_rec.attribute8;
2464       x_i_party_rec.attribute9             := p_t_party_rec.attribute9;
2465       x_i_party_rec.attribute10            := p_t_party_rec.attribute10;
2466       x_i_party_rec.attribute11            := p_t_party_rec.attribute11;
2467       x_i_party_rec.attribute12            := p_t_party_rec.attribute12;
2468       x_i_party_rec.attribute13            := p_t_party_rec.attribute13;
2469       x_i_party_rec.attribute14            := p_t_party_rec.attribute14;
2470       x_i_party_rec.attribute15            := p_t_party_rec.attribute15;
2471 
2472       IF nvl(p_t_party_rec.instance_party_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
2473         BEGIN
2474           SELECT instance_party_id,
2475                  object_version_number
2476           INTO   x_i_party_rec.instance_party_id,
2477                  x_i_party_rec.object_version_number
2478           FROM   csi_i_parties
2479           WHERE  instance_id            = p_instance_id
2480           AND    party_id               = x_i_party_rec.party_id
2481           AND    relationship_type_code = x_i_party_rec.relationship_type_code
2482           AND    contact_flag           = x_i_party_rec.contact_flag;
2483         EXCEPTION
2484           WHEN no_data_found THEN
2485             x_i_party_rec.object_version_number  := fnd_api.g_miss_num;
2486         END;
2487       /*null check added-bug 6455823*/
2488       ELSIF Nvl(p_t_party_rec.instance_party_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
2489         SELECT object_version_number
2490         INTO   x_i_party_rec.object_version_number
2491         FROM   csi_i_parties
2492         WHERE  instance_party_id = p_t_party_rec.instance_party_id;
2493       END IF;
2494     END convert_tpty_to_ipty;
2495 
2496     PROCEDURE convert_tpa_to_ipa(
2497       p_instance_party_id   IN  number,
2498       p_parent_tbl_index    IN  number,
2499       p_order_line_rec      IN  csi_order_ship_pub.order_line_rec,
2500       p_t_pa_rec            IN  csi_t_datastructures_grp.txn_pty_acct_detail_rec,
2501       x_i_pa_rec            OUT nocopy csi_datastructures_pub.party_account_rec)
2502     IS
2503     BEGIN
2504       x_i_pa_rec.parent_tbl_index       := p_parent_tbl_index;
2505       x_i_pa_rec.ip_account_id          := p_t_pa_rec.ip_account_id;
2506       x_i_pa_rec.instance_party_id      := p_instance_party_id;
2507       x_i_pa_rec.party_account_id       := p_t_pa_rec.account_id;
2508       x_i_pa_rec.relationship_type_code := p_t_pa_rec.relationship_type_code;
2509       x_i_pa_rec.bill_to_address        := p_t_pa_rec.bill_to_address_id ;
2510       x_i_pa_rec.ship_to_address        := p_t_pa_rec.ship_to_address_id;
2511       x_i_pa_rec.active_end_date        := p_t_pa_rec.active_end_date;
2512       x_i_pa_rec.active_end_date        := p_t_pa_rec.active_end_date;
2513       x_i_pa_rec.context                := p_t_pa_rec.context;
2514       x_i_pa_rec.attribute1             := p_t_pa_rec.attribute1;
2515       x_i_pa_rec.attribute2             := p_t_pa_rec.attribute2;
2516       x_i_pa_rec.attribute3             := p_t_pa_rec.attribute3;
2517       x_i_pa_rec.attribute4             := p_t_pa_rec.attribute4;
2518       x_i_pa_rec.attribute5             := p_t_pa_rec.attribute5;
2519       x_i_pa_rec.attribute6             := p_t_pa_rec.attribute6;
2520       x_i_pa_rec.attribute7             := p_t_pa_rec.attribute7;
2521       x_i_pa_rec.attribute8             := p_t_pa_rec.attribute8;
2522       x_i_pa_rec.attribute9             := p_t_pa_rec.attribute9;
2523       x_i_pa_rec.attribute10            := p_t_pa_rec.attribute10;
2524       x_i_pa_rec.attribute11            := p_t_pa_rec.attribute11;
2525       x_i_pa_rec.attribute12            := p_t_pa_rec.attribute12;
2526       x_i_pa_rec.attribute13            := p_t_pa_rec.attribute13;
2527       x_i_pa_rec.attribute14            := p_t_pa_rec.attribute14;
2528       x_i_pa_rec.attribute15            := p_t_pa_rec.attribute15;
2529 
2530       IF nvl(p_t_pa_rec.ip_account_id, fnd_api.g_miss_num) = fnd_api.g_miss_num
2531          AND
2532          nvl(p_instance_party_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num
2533       THEN
2534         BEGIN
2535           SELECT ip_account_id,
2536                  object_version_number
2537           INTO   x_i_pa_rec.ip_account_id,
2538                  x_i_pa_rec.object_version_number
2539           FROM   csi_ip_accounts
2540           WHERE  instance_party_id      = p_instance_party_id
2541           AND    party_account_id       = x_i_pa_rec.party_account_id
2542           AND    relationship_type_code = x_i_pa_rec.relationship_type_code;
2543         EXCEPTION
2544           WHEN no_data_found THEN
2545             x_i_pa_rec.object_version_number := 1;
2546         END;
2547       END IF;
2548 
2549       IF nvl(x_i_pa_rec.bill_to_address, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
2550         x_i_pa_rec.bill_to_address := p_order_line_rec.invoice_to_org_id;
2551       END IF;
2552 
2553       IF nvl(x_i_pa_rec.ship_to_address, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
2554         x_i_pa_rec.ship_to_address := p_order_line_rec.ship_to_org_id;
2555       END IF;
2556 
2557     END convert_tpa_to_ipa;
2558 
2559     PROCEDURE get_contact_parties(
2560       p_instance_id       IN  number,
2561       p_t_party_dtl_id    IN  number,
2562       p_t_pty_tbl       IN  csi_t_datastructures_grp.txn_party_detail_tbl,
2563       x_i_pty_tbl       OUT nocopy  csi_datastructures_pub.party_tbl)
2564     IS
2565       x_ind               binary_integer := 0;
2566       l_i_pty_rec         csi_datastructures_pub.party_rec;
2567     BEGIN
2568       IF p_t_pty_tbl.COUNT > 0 THEN
2569         FOR l_ind IN p_t_pty_tbl.FIRST .. p_t_pty_tbl.LAST
2570         LOOP
2571           IF p_t_pty_tbl(l_ind).contact_party_id = p_t_party_dtl_id THEN
2572             convert_tpty_to_ipty(
2573               p_instance_id  => p_instance_id,
2574               p_t_party_rec  => p_t_pty_tbl(l_ind),
2575               x_i_party_rec  => l_i_pty_rec);
2576             x_ind := x_ind + 1;
2577             x_i_pty_tbl(x_ind) := l_i_pty_rec;
2578           END IF;
2579         END LOOP;
2580       END IF;
2581     END get_contact_parties;
2582 
2583   BEGIN
2584 
2585     x_return_status := fnd_api.g_ret_sts_success;
2586 
2587     api_log('get_parties_and_accounts');
2588 
2589     BEGIN
2590       SELECT instance_party_id
2591       INTO   l_owner_inst_pty_id
2592       FROM   csi_i_parties
2593       WHERE  instance_id = p_instance_id
2594       AND    relationship_type_code = 'OWNER';
2595     EXCEPTION
2596       WHEN no_data_found THEN
2597         l_owner_inst_pty_id := null;
2598     END;
2599 
2600     /* loop to find out the owner txn party detail id */
2601     IF p_t_pty_tbl.count > 0 THEN
2602       FOR ind in p_t_pty_tbl.FIRST..p_t_pty_tbl.LAST LOOP
2603         IF p_t_pty_tbl(ind).relationship_type_code = 'OWNER' THEN
2604           l_owner_txn_pty_dtl_id  := p_t_pty_tbl(ind).txn_party_detail_id;
2605         END IF;
2606       END LOOP;
2607     END IF;
2608 
2609     IF nvl(p_owner_pty_rec.party_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
2610       l_pty_ind := l_pty_ind + 1;
2611       l_pty_tbl(l_pty_ind) := p_owner_pty_rec;
2612 
2613       IF nvl(p_owner_acct_rec.party_account_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
2614         l_pa_ind := l_pa_ind + 1;
2615         l_pa_tbl(l_pa_ind) := p_owner_acct_rec;
2616         l_pa_tbl(l_pa_ind).parent_tbl_index := l_pty_ind;
2617       END IF;
2618     END IF;
2619 
2620     IF p_t_pty_tbl.count > 0 THEN
2621 
2622       FOR pty_ind in p_t_pty_tbl.FIRST..p_t_pty_tbl.LAST
2623       LOOP
2624 
2625         IF p_t_pty_tbl(pty_ind).relationship_type_code <> 'OWNER'
2626            AND
2627            p_t_pty_tbl(pty_ind).contact_flag = 'N'
2628         THEN
2629 
2630           convert_tpty_to_ipty(
2631             p_instance_id       => p_instance_id,
2632             p_t_party_rec       => p_t_pty_tbl(pty_ind),
2633             x_i_party_rec       => l_pty_rec);
2634 
2635           l_pty_ind := l_pty_ind + 1;
2636           l_pty_tbl(l_pty_ind) := l_pty_rec;
2637 
2638           IF l_pty_rec.relationship_type_code = 'SHIP_TO'
2639              AND
2640              l_pty_rec.contact_flag = 'Y'
2641              AND
2642              p_t_pty_tbl(pty_ind).contact_party_id = l_owner_txn_pty_dtl_id
2643           THEN
2644             l_ship_to_con_entered := TRUE;
2645           END IF;
2646 
2647           IF l_pty_rec.relationship_type_code = 'BILL_TO'
2648              AND
2649              l_pty_rec.contact_flag = 'Y'
2650              AND
2651              p_t_pty_tbl(pty_ind).contact_party_id = l_owner_txn_pty_dtl_id
2652           THEN
2653             l_bill_to_con_entered := TRUE;
2654           END IF;
2655 
2656           /*  Build party account table for create/update */
2657           IF p_t_pty_acct_tbl.count > 0 THEN
2658 
2659             FOR k in p_t_pty_acct_tbl.FIRST..p_t_pty_acct_tbl.LAST
2660             LOOP
2661 
2662               IF p_t_pty_acct_tbl(k).txn_party_detail_id = p_t_pty_tbl(pty_ind).txn_party_detail_id
2663               THEN
2664 
2665                 convert_tpa_to_ipa(
2666                   p_instance_party_id => l_pty_rec.instance_party_id,
2667                   p_parent_tbl_index  => l_pty_ind,
2668                   p_order_line_rec    => p_order_line_rec,
2669                   p_t_pa_rec          => p_t_pty_acct_tbl(k),
2670                   x_i_pa_rec          => l_pa_rec);
2671 
2672                 l_pa_ind := l_pa_ind + 1;
2673                 l_pa_tbl(l_pa_ind) := l_pa_rec;
2674 
2675               END IF; -- end if for pty.txn_party_detail_id = acct.txn_party_detail_id
2676             END LOOP; -- end of party acct table loop
2677           END IF; -- party account count > 0
2678 
2679           get_contact_parties(
2680             p_instance_id     => p_instance_id,
2681             p_t_party_dtl_id  => p_t_pty_tbl(pty_ind).txn_party_detail_id,
2682             p_t_pty_tbl     => p_t_pty_tbl,
2683             x_i_pty_tbl     => l_con_pty_tbl);
2684 
2685           IF l_con_pty_tbl.COUNT > 0 THEN
2686 
2687             l_con_parent_tbl_index := l_pty_ind;
2688 
2689             FOR con_ind IN l_con_pty_tbl.FIRST .. l_con_pty_tbl.LAST
2690             LOOP
2691               l_pty_ind := l_pty_ind + 1;
2692               l_pty_tbl(l_pty_ind) := l_con_pty_tbl(con_ind);
2693               l_pty_tbl(l_pty_ind).contact_parent_tbl_index := l_con_parent_tbl_index;
2694             END LOOP;
2695           END IF;
2696 
2697 
2698         END IF; -- <> 'OWNER'
2699 
2700       END LOOP;
2701 
2702     END IF; -- party table count > 0
2703 
2704     /* Build BILL_TO and SHIP_TO from OM line if the TD does not have it */
2705     IF NOT(l_ship_to_con_entered)
2706        AND
2707        nvl(p_order_line_rec.ship_to_contact_id, fnd_api.g_miss_num ) <> fnd_api.g_miss_num
2708     THEN
2709 
2710       csi_utl_pkg.derive_party_id(
2711         p_cust_acct_role_id  => p_order_line_rec.ship_to_contact_id,
2712         x_party_id           => l_contact_party_id,
2713         x_return_status      => x_return_status );
2714 
2715       IF x_return_status <> fnd_api.g_ret_sts_success THEN
2716         RAISE fnd_api.g_exc_error;
2717       END IF;
2718 
2719       debug('  ship_to_contact_id       :'||p_order_line_rec.ship_to_contact_id);
2720       debug('  ship_to_contact_party_id :'||l_contact_party_id);
2721 
2722       l_pty_rec := l_init_pty_rec;
2723       l_pty_rec.instance_party_id      := fnd_api.g_miss_num;
2724       l_pty_rec.instance_id            := p_instance_id;
2725       l_pty_rec.party_id               := l_contact_party_id;
2726       l_pty_rec.party_source_table     := 'HZ_PARTIES';
2727       l_pty_rec.relationship_type_code := 'SHIP_TO';
2728       l_pty_rec.contact_flag           := 'Y';
2729       l_pty_rec.contact_ip_id          := l_owner_inst_pty_id;
2730       l_pty_rec.active_start_date      := fnd_api.g_miss_date;
2731       l_pty_rec.object_version_number  := fnd_api.g_miss_num;
2732 
2733       BEGIN
2734         SELECT instance_party_id,
2735                object_version_number
2736         INTO   l_pty_rec.instance_party_id,
2737                l_pty_rec.object_version_number
2738         FROM   csi_i_parties
2739         WHERE  instance_id            = p_instance_id
2740         AND    party_id               = l_pty_rec.party_id
2741         AND    relationship_type_code = l_pty_rec.relationship_type_code
2742         AND    contact_flag           = 'Y';
2743         l_pty_rec.active_end_date := null;
2744       EXCEPTION
2745         WHEN no_data_found THEN
2746           l_pty_rec.instance_party_id := null;
2747           l_pty_rec.object_version_number := 1.0;
2748       END;
2749 
2750       l_pty_ind := l_pty_ind + 1;
2751       l_pty_tbl(l_pty_ind) := l_pty_rec;
2752 
2753     END IF;
2754 
2755     IF NOT(l_bill_to_con_entered)
2756        AND
2757        nvl(p_order_line_rec.invoice_to_contact_id, fnd_api.g_miss_num ) <> fnd_api.g_miss_num
2758     THEN
2759 
2760       csi_utl_pkg.derive_party_id(
2761         p_cust_acct_role_id  => p_order_line_rec.invoice_to_contact_id,
2762         x_party_id           => l_contact_party_id,
2763         x_return_status      => x_return_status );
2764 
2765       IF x_return_status <> fnd_api.g_ret_sts_success THEN
2766         RAISE fnd_api.g_exc_error;
2767       END IF;
2768 
2769       debug('  bill_to_contact_id       :'||p_order_line_rec.invoice_to_contact_id);
2770       debug('  bill_to_contact_party_id :'||l_contact_party_id);
2771 
2772       l_pty_rec := l_init_pty_rec;
2773 
2774       l_pty_rec.instance_party_id      := fnd_api.g_miss_num;
2775       l_pty_rec.instance_id            := p_instance_id;
2776       l_pty_rec.party_id               := l_contact_party_id;
2777       l_pty_rec.party_source_table     := 'HZ_PARTIES';
2778       l_pty_rec.relationship_type_code := 'BILL_TO';
2779       l_pty_rec.contact_flag           := 'Y';
2780       l_pty_rec.contact_ip_id          := l_owner_inst_pty_id;
2781       l_pty_rec.active_start_date      := fnd_api.g_miss_date;
2782       l_pty_rec.object_version_number  := fnd_api.g_miss_num;
2783 
2784       BEGIN
2785         SELECT instance_party_id,
2786                object_version_number
2787         INTO   l_pty_rec.instance_party_id,
2788                l_pty_rec.object_version_number
2789         FROM   csi_i_parties
2790         WHERE  instance_id            = p_instance_id
2791         AND    party_id               = l_pty_rec.party_id
2792         AND    relationship_type_code = l_pty_rec.relationship_type_code
2793         AND    contact_flag           = 'Y';
2794         l_pty_rec.active_end_date := null;
2795       EXCEPTION
2796         WHEN no_data_found THEN
2797           l_pty_rec.instance_party_id     := null;
2798           l_pty_rec.object_version_number := 1.0;
2799       END;
2800 
2801       l_pty_ind := l_pty_ind + 1;
2802       l_pty_tbl(l_pty_ind) := l_pty_rec;
2803 
2804     END IF; -- l_bill_to_contact
2805 
2806     x_i_pty_tbl     := l_pty_tbl;
2807     x_i_pty_acct_tbl  := l_pa_tbl;
2808 
2809   EXCEPTION
2810     WHEN fnd_api.g_exc_error THEN
2811       x_return_status := fnd_api.g_ret_sts_error ;
2812     WHEN fnd_api.g_exc_unexpected_error THEN
2813       x_return_status := fnd_api.g_ret_sts_unexp_error ;
2814   END get_parties_and_accounts;
2815 
2816   PROCEDURE create_txn_dtls(
2817     p_source_trx_id    IN         number,
2818     p_source_trx_table IN         varchar2,
2819     x_return_status    OUT NOCOPY varchar2)
2820   IS
2821 
2822     l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
2823     l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
2824 
2825     o_line_dtl_tbl      csi_t_datastructures_grp.txn_line_detail_tbl;
2826     o_pty_dtl_tbl       csi_t_datastructures_grp.txn_party_detail_tbl;
2827     o_pty_acct_tbl      csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
2828     o_ii_rltns_tbl      csi_t_datastructures_grp.txn_ii_rltns_tbl;
2829     o_org_assgn_tbl     csi_t_datastructures_grp.txn_org_assgn_tbl;
2830     o_ext_attrib_tbl    csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
2831     o_csi_ea_tbl        csi_t_datastructures_grp.csi_ext_attribs_tbl;
2832     o_csi_eav_tbl       csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
2833     o_txn_systems_tbl   csi_t_datastructures_grp.txn_systems_tbl;
2834 
2835     l_line_dtl_rec      csi_t_datastructures_grp.txn_line_detail_rec;
2836 
2837     l_line_dtl_tbl      csi_t_datastructures_grp.txn_line_detail_tbl;
2838     l_pty_dtl_tbl       csi_t_datastructures_grp.txn_party_detail_tbl;
2839     l_pty_acct_tbl      csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
2840     l_ii_rltns_tbl      csi_t_datastructures_grp.txn_ii_rltns_tbl;
2841     l_org_assgn_tbl     csi_t_datastructures_grp.txn_org_assgn_tbl;
2842     l_ext_attrib_tbl    csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
2843     l_csi_ea_tbl        csi_t_datastructures_grp.csi_ext_attribs_tbl;
2844     l_csi_eav_tbl       csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
2845     l_txn_systems_tbl   csi_t_datastructures_grp.txn_systems_tbl;
2846 
2847     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
2848     l_msg_count         number;
2849     l_msg_data          varchar2(2000);
2850 
2851     CURSOR tld_cur(
2852       p_src_txn_id    IN NUMBER,
2853       p_src_txn_table IN VARCHAR2)
2854     IS
2855       SELECT ctld.txn_line_detail_id,
2856              ctld.quantity,
2857              ctld.transaction_line_id,
2858              ctld.transaction_system_id,
2859              ctld.csi_system_id
2860       FROM   csi_t_txn_line_details  ctld,
2861              csi_t_transaction_lines ctl
2862       WHERE  ctl.source_transaction_id    = p_src_txn_id
2863       AND    ctl.source_transaction_table = p_src_txn_table
2864       AND    ctld.transaction_line_id     = ctl.transaction_line_id
2865       AND    ctld.quantity                > 1;
2866 
2867   BEGIN
2868 
2869     x_return_status := fnd_api.g_ret_sts_success;
2870 
2871     api_log('create_txn_dtls');
2872 
2873     FOR tld_rec IN tld_cur( p_source_trx_id, p_source_trx_table )
2874     LOOP
2875 
2876       l_txn_line_detail_query_rec.txn_line_detail_id := tld_rec.txn_line_detail_id;
2877 
2878       csi_t_txn_details_grp.get_transaction_details(
2879         p_api_version                => 1.0,
2880         p_commit                     => fnd_api.g_false,
2881         p_init_msg_list              => fnd_api.g_true,
2882         p_validation_level           => fnd_api.g_valid_level_full,
2883         p_txn_line_query_rec         => l_txn_line_query_rec,
2884         p_txn_line_detail_query_rec  => l_txn_line_detail_query_rec,
2885         x_txn_line_detail_tbl        => o_line_dtl_tbl,
2886         p_get_parties_flag           => fnd_api.g_true,
2887         x_txn_party_detail_tbl       => o_pty_dtl_tbl,
2888         p_get_pty_accts_flag         => fnd_api.g_true,
2889         x_txn_pty_acct_detail_tbl    => o_pty_acct_tbl,
2890         p_get_ii_rltns_flag          => fnd_api.g_true,
2891         x_txn_ii_rltns_tbl           => o_ii_rltns_tbl,
2892         p_get_org_assgns_flag        => fnd_api.g_true,
2893         x_txn_org_assgn_tbl          => o_org_assgn_tbl,
2894         p_get_ext_attrib_vals_flag   => fnd_api.g_true,
2895         x_txn_ext_attrib_vals_tbl    => o_ext_attrib_tbl,
2896         p_get_csi_attribs_flag       => fnd_api.g_false,
2897         x_csi_ext_attribs_tbl        => o_csi_ea_tbl,
2898         p_get_csi_iea_values_flag    => fnd_api.g_false,
2899         x_csi_iea_values_tbl         => o_csi_eav_tbl,
2900         p_get_txn_systems_flag       => fnd_api.g_false,
2901         x_txn_systems_tbl            => o_txn_systems_tbl,
2902         x_return_status              => l_return_status,
2903         x_msg_count                  => l_msg_count,
2904         x_msg_data                   => l_msg_data);
2905 
2906       IF l_return_status <> fnd_api.g_ret_sts_success THEN
2907         RAISE fnd_api.g_exc_error;
2908       END IF;
2909 
2910 
2911       debug('after csi_t_txn_details_grp.get_transaction_details for splitting  ');
2912       debug('  line_dtl_tbl.count   :'||o_line_dtl_tbl.count);
2913       debug('  pty_dtl_tbl.count    :'||o_pty_dtl_tbl.count);
2914       debug('  pty_acct_tbl.count   :'||o_pty_acct_tbl.count);
2915       debug('  org_assgn_tbl.count  :'||o_org_assgn_tbl.count);
2916       debug('  ext_attrib_tbl.count :'||o_ext_attrib_tbl.count);
2917       debug('  ii_rltns_tbl.count   :'||o_ii_rltns_tbl.count);
2918 
2919       IF o_line_dtl_tbl.COUNT > 0 THEN
2920 
2921         UPDATE csi_t_txn_line_details
2922         SET    quantity = 1
2923         WHERE  txn_line_detail_id = o_line_dtl_tbl(1).txn_line_detail_id;
2924 
2925 
2926         FOR l_index in 1..o_line_dtl_tbl(1).quantity - 1
2927         LOOP
2928 
2929           l_line_dtl_tbl      := o_line_dtl_tbl;
2930           l_pty_dtl_tbl       := o_pty_dtl_tbl;
2931           l_pty_acct_tbl      := o_pty_acct_tbl;
2932           l_ii_rltns_tbl      := o_ii_rltns_tbl;
2933           l_org_assgn_tbl     := o_org_assgn_tbl;
2934           l_ext_attrib_tbl    := o_ext_attrib_tbl;
2935           l_txn_systems_tbl   := o_txn_systems_tbl;
2936 
2937           csi_t_utilities_pvt.convert_ids_to_index(
2938             px_line_dtl_tbl    => l_line_dtl_tbl,
2939             px_pty_dtl_tbl     => l_pty_dtl_tbl,
2940             px_pty_acct_tbl    => l_pty_acct_tbl,
2941             px_ii_rltns_tbl    => l_ii_rltns_tbl,
2942             px_org_assgn_tbl   => l_org_assgn_tbl,
2943             px_ext_attrib_tbl  => l_ext_attrib_tbl,
2944             px_txn_systems_tbl => l_txn_systems_tbl);
2945 
2946           l_line_dtl_rec      := l_line_dtl_tbl(1);
2947 
2948           --l_line_dtl_rec.source_txn_line_detail_id := tld_rec.source_txn_line_detail_id;
2949           l_line_dtl_rec.txn_line_detail_id        := fnd_api.g_miss_num;
2950           l_line_dtl_rec.transaction_system_id     := tld_rec.transaction_system_id;
2951           l_line_dtl_rec.csi_system_id             := tld_rec.csi_system_id;
2952           l_line_dtl_rec.quantity                  := 1 ;
2953           l_line_dtl_rec.transaction_line_id       := tld_rec.transaction_line_id ;
2954 
2955           csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
2956             p_api_version              => 1.0,
2957             p_commit                   => fnd_api.g_false,
2958             p_init_msg_list            => fnd_api.g_true,
2959             p_validation_level         => fnd_api.g_valid_level_full,
2960             p_txn_line_dtl_index       => 1,
2961             p_txn_line_dtl_rec         => l_line_dtl_rec,
2962             px_txn_party_dtl_tbl       => l_pty_dtl_tbl,
2963             px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
2964             px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
2965             px_txn_org_assgn_tbl       => l_org_assgn_tbl,
2966             px_txn_ext_attrib_vals_tbl => l_ext_attrib_tbl,
2967             x_return_status            => l_return_status,
2968             x_msg_count                => l_msg_count,
2969             x_msg_data                 => l_msg_data);
2970 
2971           IF l_return_status <> fnd_api.g_ret_sts_success THEN
2972             RAISE fnd_api.g_exc_error;
2973           END IF;
2974 
2975         END LOOP;
2976       END IF; -- count chk
2977     END LOOP;
2978 
2979   EXCEPTION
2980     WHEN fnd_api.g_exc_error THEN
2981       x_return_status := fnd_api.g_ret_sts_error ;
2982     WHEN fnd_api.g_exc_unexpected_error THEN
2983       x_return_status := fnd_api.g_ret_sts_unexp_error ;
2984   END create_txn_dtls;
2985 
2986   PROCEDURE conv_to_prim_uom(
2987     p_inv_organization_id IN NUMBER,
2988     p_inventory_item_id   IN NUMBER,
2989     p_uom                 IN VARCHAR2,
2990     x_txn_line_dtl_tbl    IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
2991     x_return_status       OUT NOCOPY VARCHAR2)
2992   IS
2993     l_primary_uom  varchar2(100);
2994     l_uom_rate     NUMBER;
2995   BEGIN
2996 
2997     api_log('conv_to_prim_uom');
2998 
2999     /* Initialize API return status to success */
3000     x_return_status := fnd_api.g_ret_sts_success;
3001 
3002     l_primary_uom := csi_utl_pkg.get_primay_uom(
3003        p_inv_item_id => p_inventory_item_id,
3004        p_inv_org_id  => p_inv_organization_id);
3005 
3006     debug('Primary UOM :'||l_primary_uom);
3007 
3008     /* Convert the shipped qty to UOM as in OM */
3009     inv_convert.inv_um_conversion (
3010       from_unit  => p_uom,
3011       to_unit    => l_primary_uom,
3012       item_id    => p_inventory_item_id,
3013       uom_rate   => l_uom_rate );
3014 
3015     debug('UOM Rate    :'||l_uom_rate);
3016 
3017     IF l_uom_rate = -99999 THEN
3018       debug('inv_convert.inv_um_conversion failed ');
3019       RAISE fnd_api.g_exc_error;
3020     END IF;
3021 
3022     IF x_txn_line_dtl_tbl.count > 0 THEN
3023       FOR i in x_txn_line_dtl_tbl.first..x_txn_line_dtl_tbl.last
3024       LOOP
3025         x_txn_line_dtl_tbl(i).quantity := x_txn_line_dtl_tbl(i).quantity * l_uom_rate;
3026       END LOOP;
3027     END IF;
3028 
3029   EXCEPTION
3030     WHEN fnd_api.g_exc_error THEN
3031       x_return_status := fnd_api.g_ret_sts_error ;
3032     WHEN fnd_api.g_exc_unexpected_error THEN
3033       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3034   END conv_to_prim_uom;
3035 
3036   PROCEDURE build_non_source_rec(
3037     p_transaction_line_id   IN number,
3038     p_parent_line_id        IN number,
3039     p_instance_id           IN number,
3040     x_txn_line_dtl_id       OUT NOCOPY number,
3041     x_return_status         OUT NOCOPY varchar2)
3042   IS
3043 
3044     l_instance_rec          csi_datastructures_pub.instance_rec;
3045     l_g_instance_rec        csi_datastructures_pub.instance_header_rec;
3046     l_g_ph_tbl              csi_datastructures_pub.party_header_tbl;
3047     l_g_pah_tbl             csi_datastructures_pub.party_account_header_tbl;
3048     l_g_ouh_tbl             csi_datastructures_pub.org_units_header_tbl;
3049     l_g_pa_tbl              csi_datastructures_pub.pricing_attribs_tbl;
3050     l_g_eav_tbl             csi_datastructures_pub.extend_attrib_values_tbl;
3051     l_g_ea_tbl              csi_datastructures_pub.extend_attrib_tbl;
3052     l_g_iah_tbl             csi_datastructures_pub.instance_asset_header_tbl;
3053     l_g_time_stamp          date;
3054 
3055     -- create_txn_line_dtls variables
3056     l_n_line_dtl_rec        csi_t_datastructures_grp.txn_line_detail_rec;
3057     l_n_pty_dtl_tbl         csi_t_datastructures_grp.txn_party_detail_tbl;
3058     l_n_pty_acct_tbl        csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
3059     l_n_org_assgn_tbl       csi_t_datastructures_grp.txn_org_assgn_tbl;
3060     l_n_ext_attrib_tbl      csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
3061     l_n_ii_rltns_tbl        csi_t_datastructures_grp.txn_ii_rltns_tbl;
3062 
3063     l_return_status         varchar2(1) := fnd_api.g_ret_sts_success;
3064     l_msg_count             number;
3065     l_msg_data              varchar2(4000);
3066 
3067   BEGIN
3068 
3069     x_return_status := fnd_api.g_ret_sts_success;
3070 
3071     api_log('build_non_source_rec');
3072 
3073     l_g_instance_rec.instance_id := p_instance_id;
3074 
3075     csi_t_gen_utility_pvt.dump_api_info(
3076       p_pkg_name => 'csi_item_instance_pub',
3077       p_api_name => 'get_item_instance_details');
3078 
3079     -- get the instance party and party account info
3080     csi_item_instance_pub.get_item_instance_details(
3081       p_api_version           => 1.0,
3082       p_commit                => fnd_api.g_false,
3083       p_init_msg_list         => fnd_api.g_true,
3084       p_validation_level      => fnd_api.g_valid_level_full,
3085       p_instance_rec          => l_g_instance_rec,
3086       p_get_parties           => fnd_api.g_false,
3087       p_party_header_tbl      => l_g_ph_tbl,
3088       p_get_accounts          => fnd_api.g_false,
3089       p_account_header_tbl    => l_g_pah_tbl,
3090       p_get_org_assignments   => fnd_api.g_false,
3091       p_org_header_tbl        => l_g_ouh_tbl,
3092       p_get_pricing_attribs   => fnd_api.g_false,
3093       p_pricing_attrib_tbl    => l_g_pa_tbl,
3094       p_get_ext_attribs       => fnd_api.g_false,
3095       p_ext_attrib_tbl        => l_g_eav_tbl,
3096       p_ext_attrib_def_tbl    => l_g_ea_tbl,
3097       p_get_asset_assignments => fnd_api.g_false,
3098       p_asset_header_tbl      => l_g_iah_tbl,
3099       p_time_stamp            => l_g_time_stamp,
3100       x_return_status         => l_return_status,
3101       x_msg_count             => l_msg_count,
3102       x_msg_data              => l_msg_data);
3103 
3104     IF l_return_status <> fnd_api.g_ret_sts_success THEN
3105       RAISE fnd_api.g_exc_error;
3106     END IF;
3107 
3108     l_n_line_dtl_rec.txn_line_detail_id      := fnd_api.g_miss_num;
3109     l_n_line_dtl_rec.transaction_line_id     := p_transaction_line_id;
3110     l_n_line_dtl_rec.sub_type_id             := csi_order_ship_pub.g_dflt_sub_type_id;
3111     l_n_line_dtl_rec.processing_status       := 'IN_PROCESS';
3112     l_n_line_dtl_rec.source_transaction_flag := 'N';
3113     l_n_line_dtl_rec.inventory_item_id       := l_g_instance_rec.inventory_item_id;
3114     l_n_line_dtl_rec.inventory_revision      := l_g_instance_rec.inventory_revision;
3115     /* fix for bug 4941832 */
3116     l_n_line_dtl_rec.inv_organization_id     := l_g_instance_rec.vld_organization_id;
3117     l_n_line_dtl_rec.quantity                := l_g_instance_rec.quantity;
3118     l_n_line_dtl_rec.unit_of_measure         := l_g_instance_rec.unit_of_measure;
3119     l_n_line_dtl_rec.installation_date       := sysdate;
3120     l_n_line_dtl_rec.external_reference      := 'INTERFACE';
3121     l_n_line_dtl_rec.location_type_code      := l_g_instance_rec.location_type_code;
3122     l_n_line_dtl_rec.location_id             := l_g_instance_rec.location_id;
3123     l_n_line_dtl_rec.active_start_date       := sysdate;
3124     l_n_line_dtl_rec.preserve_detail_flag    := 'Y';
3125     l_n_line_dtl_rec.instance_exists_flag    := 'Y';
3126     l_n_line_dtl_rec.instance_id             := l_g_instance_rec.instance_id;
3127     l_n_line_dtl_rec.serial_number           := l_g_instance_rec.serial_number;
3128     l_n_line_dtl_rec.mfg_serial_number_flag  := l_g_instance_rec.mfg_serial_number_flag;
3129     l_n_line_dtl_rec.lot_number              := l_g_instance_rec.lot_number;
3130     l_n_line_dtl_rec.object_version_number   := 1.0;
3131 
3132     csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
3133       p_api_version              => 1.0,
3134       p_commit                   => fnd_api.g_false,
3135       p_init_msg_list            => fnd_api.g_true,
3136       p_validation_level         => fnd_api.g_valid_level_full,
3137       p_txn_line_dtl_index       => 1,
3138       p_txn_line_dtl_rec         => l_n_line_dtl_rec,
3139       px_txn_party_dtl_tbl       => l_n_pty_dtl_tbl,
3140       px_txn_pty_acct_detail_tbl => l_n_pty_acct_tbl,
3141       px_txn_ii_rltns_tbl        => l_n_ii_rltns_tbl,
3142       px_txn_org_assgn_tbl       => l_n_org_assgn_tbl,
3143       px_txn_ext_attrib_vals_tbl => l_n_ext_attrib_tbl,
3144       x_return_status            => l_return_status,
3145       x_msg_count                => l_msg_count,
3146       x_msg_data                 => l_msg_data);
3147 
3148     IF l_return_status <> fnd_api.g_ret_sts_success THEN
3149       RAISE fnd_api.g_exc_error;
3150     END IF;
3151 
3152     debug('Non Source Txn Line Detail ID :'||l_n_line_dtl_rec.txn_line_detail_id);
3153     x_txn_line_dtl_id := l_n_line_dtl_rec.txn_line_detail_id;
3154 
3155   EXCEPTION
3156     WHEN fnd_api.g_exc_error THEN
3157       x_return_status := fnd_api.g_ret_sts_error;
3158   END build_non_source_rec;
3159 
3160   PROCEDURE build_parent_relation(
3161     p_order_line_rec    IN csi_order_ship_pub.order_line_rec,
3162     x_model_inst_tbl    IN OUT NOCOPY csi_order_ship_pub.model_inst_tbl,
3163     x_txn_line_dtl_tbl  IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
3164     x_txn_ii_rltns_tbl  IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
3165     x_return_status     OUT NOCOPY VARCHAR2)
3166   IS
3167     l_txn_ii                number := 0;
3168     l_nsrc_line_dtl_id      number;
3169     x_txn_line_dtls_lst     txn_line_dtl_tbl;
3170     l_txn_processed         varchar2(1);
3171     l_return_status         varchar2(1) := fnd_api.g_ret_sts_success;
3172 
3173     PROCEDURE filter_model_instances( --modified for bug5096435
3174      p_child_item_id    IN            number,
3175      px_model_inst_tbl  IN OUT NOCOPY csi_order_ship_pub.model_inst_tbl)
3176     IS
3177       CURSOR iir_cur(p_object_id in number, p_item_id in number) IS
3178         SELECT cii.quantity alloc_quantity
3179         FROM   csi_ii_relationships ciir,
3180                csi_item_instances   cii
3181         WHERE  ciir.object_id        = p_object_id
3182         AND    cii.instance_id       = ciir.subject_id
3183         AND    cii.inventory_item_id = p_item_id
3184         AND    sysdate BETWEEN nvl(ciir.active_start_date, sysdate - 1)
3185                        AND     nvl(ciir.active_end_date, sysdate + 1);
3186     BEGIN
3187       IF px_model_inst_tbl.COUNT > 0 THEN
3188         FOR l_ind IN px_model_inst_tbl.FIRST .. px_model_inst_tbl.LAST
3189         LOOP
3190           FOR iir_rec IN iir_cur(px_model_inst_tbl(l_ind).instance_id, p_child_item_id)
3191           LOOP
3192 	       x_model_inst_tbl(l_ind).rem_qty := x_model_inst_tbl(l_ind).rem_qty - iir_rec.alloc_quantity;
3193           END LOOP;
3194           IF x_model_inst_tbl(l_ind).rem_qty <= 0  THEN
3195             px_model_inst_tbl(l_ind).process_flag := 'Y';
3196           END IF;
3197         END LOOP;
3198       END IF;
3199     END filter_model_instances;
3200 
3201   BEGIN
3202 
3203     api_log('build_parent_relation');
3204 
3205     /* Initialize API return status to success */
3206     x_return_status := fnd_api.g_ret_sts_success;
3207 
3208     x_txn_ii_rltns_tbl.delete;
3209 
3210     filter_model_instances(
3211       p_child_item_id    => p_order_line_rec.inv_item_id,
3212       px_model_inst_tbl  => x_model_inst_tbl);
3213 
3214     /*
3215     IF x_model_inst_tbl.count > 0 THEN
3216       FOR l_mod in x_model_inst_tbl.first..x_model_inst_tbl.last
3217       LOOP
3218 
3219         build_non_source_rec(
3220           p_transaction_line_id  => p_trx_line_id,
3221           p_parent_line_id       => x_model_inst_tbl(l_mod).parent_line_id,
3222           p_instance_id          => x_model_inst_tbl(l_mod).instance_id,
3223           x_txn_line_dtl_id      => l_nsrc_line_dtl_id,
3224           x_return_status        => l_return_status);
3225 
3226         IF l_return_status <> fnd_api.g_ret_sts_success THEN
3227           RAISE fnd_api.g_exc_error;
3228         END IF;
3229 
3230         x_model_inst_tbl(l_mod).txn_line_detail_id := l_nsrc_line_dtl_id;
3231       END LOOP;
3232     END IF;
3233     */
3234 
3235     IF x_model_inst_tbl.count = 1 THEN
3236 
3237       IF x_txn_line_dtl_tbl.count > 0 THEN
3238         FOR l_ind in x_txn_line_dtl_tbl.first..x_txn_line_dtl_tbl.last
3239         LOOP
3240 
3241           build_non_source_rec(
3242             p_transaction_line_id  => p_order_line_rec.trx_line_id,
3243             p_parent_line_id       => x_model_inst_tbl(1).parent_line_id,
3244             p_instance_id          => x_model_inst_tbl(1).instance_id,
3245             x_txn_line_dtl_id      => l_nsrc_line_dtl_id,
3246             x_return_status        => l_return_status);
3247 
3248           IF l_return_status <> fnd_api.g_ret_sts_success THEN
3249             RAISE fnd_api.g_exc_error;
3250           END IF;
3251 
3252           x_model_inst_tbl(1).txn_line_detail_id := l_nsrc_line_dtl_id;
3253 
3254           l_txn_ii := l_txn_ii + 1;
3255 
3256           --Build the table for creating the new instance relationships
3257 
3258           x_txn_ii_rltns_tbl(l_txn_ii).transaction_line_id := x_txn_line_dtl_tbl(l_ind).transaction_line_id;
3259           x_txn_ii_rltns_tbl(l_txn_ii).relationship_type_code := 'COMPONENT-OF';
3260           x_txn_ii_rltns_tbl(l_txn_ii).object_id  := x_model_inst_tbl(1).txn_line_detail_id;
3261           x_txn_ii_rltns_tbl(l_txn_ii).subject_id := x_txn_line_dtl_tbl(l_ind).txn_line_detail_id ;
3262           x_txn_ii_rltns_tbl(l_txn_ii).active_start_date := sysdate;--FND_API.G_MISS_DATE;
3263 
3264           -- mark the model instance that it is processed
3265           x_model_inst_tbl(1).process_flag := 'Y';
3266 
3267           ---Added (Start) for m-to-m enhancements
3268           x_txn_ii_rltns_tbl(l_txn_ii).subject_type  := 'T';
3269           x_txn_ii_rltns_tbl(l_txn_ii).object_type   :=  'T' ;
3270           ---Added (End) for m-to-m enhancements
3271 
3272         END LOOP;
3273       END IF;
3274 
3275     ELSIF x_model_inst_tbl.count > 1 THEN
3276       IF p_order_line_rec.item_type_code = 'CONFIG' THEN
3277         IF x_txn_line_dtl_tbl.count > 0 THEN
3278           FOR l_ind in x_txn_line_dtl_tbl.first..x_txn_line_dtl_tbl.last
3279           LOOP
3280 
3281             IF x_model_inst_tbl.count  > 0 THEN
3282               FOR k in x_model_inst_tbl.first..x_model_inst_tbl.last
3283               LOOP
3284 
3285                 IF x_model_inst_tbl(k).process_flag <> 'Y' THEN
3286 
3287                   build_non_source_rec(
3288                     p_transaction_line_id  => p_order_line_rec.trx_line_id,
3289                     p_parent_line_id       => x_model_inst_tbl(k).parent_line_id,
3290                     p_instance_id          => x_model_inst_tbl(k).instance_id,
3291                     x_txn_line_dtl_id      => l_nsrc_line_dtl_id,
3292                     x_return_status        => l_return_status);
3293 
3294                   IF l_return_status <> fnd_api.g_ret_sts_success THEN
3295                     RAISE fnd_api.g_exc_error;
3296                   END IF;
3297 
3298                   x_model_inst_tbl(k).txn_line_detail_id := l_nsrc_line_dtl_id;
3299 
3300                   /*Build the table for creating the new instance relationships */
3301                   l_txn_ii := l_txn_ii + 1;
3302 
3303                   x_txn_ii_rltns_tbl(l_txn_ii).transaction_line_id := x_txn_line_dtl_tbl(l_ind).transaction_line_id;
3304                   x_txn_ii_rltns_tbl(l_txn_ii).relationship_type_code := 'COMPONENT-OF';
3305                   x_txn_ii_rltns_tbl(l_txn_ii).object_id  := x_model_inst_tbl(k).txn_line_detail_id;
3306                   x_txn_ii_rltns_tbl(l_txn_ii).subject_id := x_txn_line_dtl_tbl(l_ind).txn_line_detail_id ;
3307                   x_txn_ii_rltns_tbl(l_txn_ii).active_start_date := sysdate;--FND_API.G_MISS_DATE;
3308 
3309                   -- mark the model instance that it is processed
3310                   x_model_inst_tbl(k).process_flag := 'Y';
3311 
3312                   ---Added (Start) for m-to-m enhancements
3313                   --- 04/24
3314                   x_txn_ii_rltns_tbl(l_txn_ii).subject_type  := 'T';
3315                   x_txn_ii_rltns_tbl(l_txn_ii).object_type   :=  'T' ;
3316                   ---Added (End) for m-to-m enhancements
3317 
3318                   EXIT;
3319                 END IF;
3320               END LOOP;
3321             END IF; --x_model_inst_tbl.count  > 0
3322           END LOOP;
3323         END IF; -- x_txn_line_dtl_tbl.count > 0
3324       ELSE -- Item_type_code other than CONFIG
3325         IF x_txn_line_dtl_tbl.count > 0 THEN
3326           FOR l_ind in x_txn_line_dtl_tbl.first..x_txn_line_dtl_tbl.last
3327           LOOP
3328             l_txn_processed := 'N';
3329 
3330             IF x_model_inst_tbl.count > 0 THEN
3331               FOR j in x_model_inst_tbl.first..x_model_inst_tbl.last
3332               LOOP
3333 
3334                 IF (x_model_inst_tbl(j).process_flag = 'N')
3335                    AND
3336                    (x_model_inst_tbl(j).rem_qty >= x_txn_line_dtl_tbl(l_ind).quantity) THEN
3337 
3338                   build_non_source_rec(
3339                     p_transaction_line_id  => p_order_line_rec.trx_line_id,
3340                     p_parent_line_id       => x_model_inst_tbl(j).parent_line_id,
3341                     p_instance_id          => x_model_inst_tbl(j).instance_id,
3342                     x_txn_line_dtl_id      => l_nsrc_line_dtl_id,
3343                     x_return_status        => l_return_status);
3344 
3345                   IF l_return_status <> fnd_api.g_ret_sts_success THEN
3346                     RAISE fnd_api.g_exc_error;
3347                   END IF;
3348 
3349                   x_model_inst_tbl(j).txn_line_detail_id := l_nsrc_line_dtl_id;
3350 
3351                   l_txn_ii := l_txn_ii + 1;
3352 
3353                   /*Build the table for creating the new instance relationships */
3354 
3355                   x_txn_ii_rltns_tbl(l_txn_ii).transaction_line_id := x_txn_line_dtl_tbl(l_ind).transaction_line_id;
3356                   x_txn_ii_rltns_tbl(l_txn_ii).relationship_type_code := 'COMPONENT-OF';
3357                   x_txn_ii_rltns_tbl(l_txn_ii).subject_id :=  x_txn_line_dtl_tbl(l_ind).txn_line_detail_id;
3358                   x_txn_ii_rltns_tbl(l_txn_ii).object_id  :=  x_model_inst_tbl(j).txn_line_detail_id;
3359                   x_txn_ii_rltns_tbl(l_txn_ii).active_start_date := sysdate;--FND_API.G_MISS_DATE;
3360 
3361                   x_model_inst_tbl(j).rem_qty := x_model_inst_tbl(j).rem_qty - x_txn_line_dtl_tbl(l_ind).quantity;
3362 
3363                   l_txn_processed := 'Y';
3364 
3365                   IF x_model_inst_tbl(j).rem_qty = 0 THEN
3366                     x_model_inst_tbl(j).process_flag := 'Y';
3367                   END IF;
3368 
3369                   ---Added (Start) for m-to-m enhancements
3370                   ---04/24
3371                   x_txn_ii_rltns_tbl(l_txn_ii).subject_type  := 'T';
3372                   x_txn_ii_rltns_tbl(l_txn_ii).object_type   :=  'T' ;
3373                   ---Added (End) for m-to-m enhancements
3374 
3375                   EXIT;
3376                 END IF;
3377 
3378               END LOOP;
3379             END IF; -- x_model_inst_tbl.count > 0
3380 
3381             IF l_txn_processed = 'N' THEN
3382 
3383               IF x_txn_line_dtl_tbl(l_ind).quantity > 1 THEN
3384 
3385                 x_txn_line_dtls_lst.delete;
3386 
3387                 split_txn_dtls(
3388                   split_txn_dtl_id      => x_txn_line_dtl_tbl(l_ind).txn_line_detail_id,
3389                   x_txn_line_dtls_lst   => x_txn_line_dtls_lst,
3390                   x_return_status       => l_return_status  );
3391 
3392                 IF l_return_status <> fnd_api.g_ret_sts_success THEN
3393                   debug('split_txn_dtls failed ');
3394                   RAISE fnd_api.g_exc_error;
3395                 END IF;
3396               END IF;
3397 
3398               debug('x_txn_line_dtls_lst.count ='||x_txn_line_dtls_lst.count);
3399 
3400               IF x_txn_line_dtls_lst.count > 0 THEN
3401                 FOR x_txn in x_txn_line_dtls_lst.first..x_txn_line_dtls_lst.last
3402                 LOOP
3403 
3404                   IF x_model_inst_tbl.count > 0 THEN
3405                     FOR j in x_model_inst_tbl.first..x_model_inst_tbl.last
3406                     LOOP
3407 
3408                       IF (x_model_inst_tbl(j).process_flag = 'N') THEN
3409 
3410                         build_non_source_rec(
3411                           p_transaction_line_id  => p_order_line_rec.trx_line_id,
3412                           p_parent_line_id       => x_model_inst_tbl(j).parent_line_id,
3413                           p_instance_id          => x_model_inst_tbl(j).instance_id,
3414                           x_txn_line_dtl_id      => l_nsrc_line_dtl_id,
3415                           x_return_status        => l_return_status);
3416 
3417                         IF l_return_status <> fnd_api.g_ret_sts_success THEN
3418                           RAISE fnd_api.g_exc_error;
3419                         END IF;
3420 
3421                         x_model_inst_tbl(j).txn_line_detail_id := l_nsrc_line_dtl_id;
3422 
3423                         l_txn_ii := l_txn_ii + 1;
3424 
3425                         /*Build the table for creating the new instance relationships */
3426 
3427                         x_txn_ii_rltns_tbl(l_txn_ii).transaction_line_id := x_txn_line_dtl_tbl(l_ind).transaction_line_id;
3428                         x_txn_ii_rltns_tbl(l_txn_ii).relationship_type_code := 'COMPONENT-OF';
3429                         x_txn_ii_rltns_tbl(l_txn_ii).subject_id :=  x_txn_line_dtls_lst(x_txn).txn_line_detail_id;
3430                         x_txn_ii_rltns_tbl(l_txn_ii).object_id  :=  x_model_inst_tbl(j).txn_line_detail_id;
3431                         x_txn_ii_rltns_tbl(l_txn_ii).active_start_date := sysdate;--FND_API.G_MISS_DATE;
3432 
3433                         x_model_inst_tbl(j).rem_qty := x_model_inst_tbl(j).rem_qty - 1;
3434 
3435                         ---Added (Start) for m-to-m enhancements
3436                         x_txn_ii_rltns_tbl(l_txn_ii).subject_type  := 'T';
3437                         x_txn_ii_rltns_tbl(l_txn_ii).object_type   :=  'T' ;
3438                         ---Added (End) for m-to-m enhancements
3439 
3440                         debug('Relation Num   :'||l_txn_ii);
3441                         debug('Txn Object ID  :'||x_txn_ii_rltns_tbl(l_txn_ii).object_id);
3442                         debug('Txn Subject ID :'||x_txn_ii_rltns_tbl(l_txn_ii).subject_id);
3443                         debug('Remaining Qty  :'||x_model_inst_tbl(j).rem_qty);
3444 
3445                         IF x_model_inst_tbl(j).rem_qty = 0 THEN
3446                           x_model_inst_tbl(j).process_flag := 'Y';
3447                         END IF;
3448 
3449                         EXIT;
3450                       END IF; --(x_model_inst_tbl(j).process_flag = 'N')
3451 
3452                     END LOOP;
3453                   END IF; --x_txn_line_dtls_lst.count > 0
3454 
3455                   l_txn_processed := 'Y';
3456 
3457                 END LOOP;
3458               END IF; --x_txn_line_dtls_lst.count > 0
3459             END IF; -- l_txn_processed = 'N
3460           END LOOP;
3461         END IF; --x_txn_line_dtl_tbl.count > 0
3462       END IF;
3463     END IF;
3464 
3465    debug('x_txn_ii_rltns_tbl.count ='||x_txn_ii_rltns_tbl.count );
3466 
3467   EXCEPTION
3468     WHEN fnd_api.g_exc_error THEN
3469       x_return_status := fnd_api.g_ret_sts_error ;
3470     WHEN fnd_api.g_exc_unexpected_error THEN
3471       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3472   END build_parent_relation;
3473 
3474 
3475   PROCEDURE get_source_trx_dtls(
3476     p_mtl_transaction_id IN NUMBER,
3477     x_mtl_txn_rec        OUT NOCOPY csi_order_ship_pub.MTL_TXN_REC,
3478     x_error_message      OUT NOCOPY VARCHAR2,
3479     x_return_status      OUT NOCOPY VARCHAR2)
3480   IS
3481   BEGIN
3482 
3483     api_log('get_source_trx_dtls');
3484 
3485     SELECT mmt.transaction_id ,
3486            oel.line_id,
3487            oeh.header_id,
3488            oeh.order_number,
3489            oel.line_id,
3490            oel.line_number||'.'||oel.shipment_number,
3491            mmt.transaction_date,
3492            mmt.transaction_id
3493     INTO   x_mtl_txn_rec.mtl_transaction_id,
3494            x_mtl_txn_rec.source_line_id,
3495            x_mtl_txn_rec.source_header_ref_id,
3496            x_mtl_txn_rec.source_header_ref,
3497            x_mtl_txn_rec.source_line_ref_id,
3498            x_mtl_txn_rec.source_line_ref,
3499            x_mtl_txn_rec.source_transaction_date,
3500            x_mtl_txn_rec.inv_material_transaction_id
3501     FROM   oe_order_headers_all oeh,
3502            oe_order_lines_all oel,
3503            mtl_material_transactions mmt
3504     WHERE  mmt.transaction_id = p_mtl_transaction_id
3505     AND    oel.line_id        = mmt.trx_source_line_id
3506     AND    oeh.header_id      = oel.header_id;
3507 
3508     debug('  Order Number :'||x_mtl_txn_rec.source_header_ref);
3509     debug('  Line Number  :'||x_mtl_txn_rec.source_line_ref);
3510 
3511     x_return_status := fnd_api.g_ret_sts_success;
3512 
3513   EXCEPTION
3514     WHEN no_data_found THEN
3515       x_return_status := fnd_api.g_ret_sts_error;
3516       fnd_message.set_name('CSI','CSI_INT_ORD_LINE_MISSING');
3517       fnd_message.set_token('MTL_TRANSACTION_ID',p_mtl_transaction_id);
3518       fnd_msg_pub.add;
3519   END get_source_trx_dtls;
3520 
3521  PROCEDURE split_txn_dtls_with_qty( --Included the API for bug 4354267
3522     split_txn_dtl_id            IN  NUMBER,
3523     p_split_qty			IN NUMBER,
3524     x_return_status             OUT NOCOPY varchar2)
3525    IS
3526     l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
3527     l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
3528 
3529     l_line_dtl_rec      csi_t_datastructures_grp.txn_line_detail_rec;
3530     l_line_dtl_tbl      csi_t_datastructures_grp.txn_line_detail_tbl;
3531     l_pty_dtl_tbl       csi_t_datastructures_grp.txn_party_detail_tbl;
3532     l_pty_acct_tbl      csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
3533     l_ii_rltns_tbl      csi_t_datastructures_grp.txn_ii_rltns_tbl;
3534     l_org_assgn_tbl     csi_t_datastructures_grp.txn_org_assgn_tbl;
3535     l_ext_attrib_tbl    csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
3536     l_csi_ea_tbl        csi_t_datastructures_grp.csi_ext_attribs_tbl;
3537     l_csi_eav_tbl       csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
3538     l_txn_systems_tbl   csi_t_datastructures_grp.txn_systems_tbl;
3539     l_transaction_line_id number;
3540 
3541     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
3542     l_msg_count         number;
3543     l_msg_data          varchar2(2000);
3544 
3545   BEGIN
3546 
3547     api_log('split_txn_dtls_with_qty');
3548 
3549     x_return_status := fnd_api.g_ret_sts_success;
3550 
3551 
3552     l_txn_line_detail_query_rec.txn_line_detail_id := split_txn_dtl_id;
3553 
3554     csi_t_txn_details_grp.get_transaction_details(
3555       p_api_version                => 1.0,
3556       p_commit                     => fnd_api.g_false,
3557       p_init_msg_list              => fnd_api.g_true,
3558       p_validation_level           => fnd_api.g_valid_level_full,
3559       p_txn_line_query_rec         => l_txn_line_query_rec,
3560       p_txn_line_detail_query_rec  => l_txn_line_detail_query_rec,
3561       x_txn_line_detail_tbl        => l_line_dtl_tbl,
3562       p_get_parties_flag           => fnd_api.g_true,
3563       x_txn_party_detail_tbl       => l_pty_dtl_tbl,
3564       p_get_pty_accts_flag         => fnd_api.g_true,
3565       x_txn_pty_acct_detail_tbl    => l_pty_acct_tbl,
3566       p_get_ii_rltns_flag          => fnd_api.g_false,
3567       x_txn_ii_rltns_tbl           => l_ii_rltns_tbl,
3568       p_get_org_assgns_flag        => fnd_api.g_true,
3569       x_txn_org_assgn_tbl          => l_org_assgn_tbl,
3570       p_get_ext_attrib_vals_flag   => fnd_api.g_true,
3571       x_txn_ext_attrib_vals_tbl    => l_ext_attrib_tbl,
3572       p_get_csi_attribs_flag       => fnd_api.g_false,
3573       x_csi_ext_attribs_tbl        => l_csi_ea_tbl,
3574       p_get_csi_iea_values_flag    => fnd_api.g_false,
3575       x_csi_iea_values_tbl         => l_csi_eav_tbl,
3576       p_get_txn_systems_flag       => fnd_api.g_false,
3577       x_txn_systems_tbl            => l_txn_systems_tbl,
3578       x_return_status              => l_return_status,
3579       x_msg_count                  => l_msg_count,
3580       x_msg_data                   => l_msg_data);
3581 
3582     IF l_return_status <> fnd_api.g_ret_sts_success THEN
3583       debug('Get_transaction_details  failed ');
3584       RAISE fnd_api.g_exc_error;
3585     END IF;
3586 
3587     l_transaction_line_id := l_line_dtl_tbl(1).transaction_line_id;
3588 
3589     csi_t_utilities_pvt.convert_ids_to_index(
3590       px_line_dtl_tbl            => l_line_dtl_tbl,
3591       px_pty_dtl_tbl             => l_pty_dtl_tbl,
3592       px_pty_acct_tbl            => l_pty_acct_tbl,
3593       px_ii_rltns_tbl            => l_ii_rltns_tbl,
3594       px_org_assgn_tbl           => l_org_assgn_tbl,
3595       px_ext_attrib_tbl          => l_ext_attrib_tbl,
3596       px_txn_systems_tbl         => l_txn_systems_tbl);
3597 
3598     l_line_dtl_rec                     := l_line_dtl_tbl(1);
3599     l_line_dtl_rec.txn_line_detail_id  := FND_API.G_MISS_NUM;
3600     l_line_dtl_rec.transaction_line_id := l_transaction_line_id;
3601     l_line_dtl_rec.quantity            := p_split_qty ;
3602     l_line_dtl_rec.processing_status   := 'SUBMIT';
3603 
3604     debug('Splitting the txn_line_dtls INTO qty of '||p_split_qty);
3605 
3606 
3607 
3608       csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
3609         p_api_version              => 1.0,
3610         p_commit                   => fnd_api.g_false,
3611         p_init_msg_list            => fnd_api.g_true,
3612         p_validation_level         => fnd_api.g_valid_level_full,
3613         p_txn_line_dtl_index       => 1,
3614         p_txn_line_dtl_rec         => l_line_dtl_rec,
3615         px_txn_party_dtl_tbl       => l_pty_dtl_tbl,
3616         px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
3617         px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
3618         px_txn_org_assgn_tbl       => l_org_assgn_tbl,
3619         px_txn_ext_attrib_vals_tbl => l_ext_attrib_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('Error Splitting txn line detail ');
3626         RAISE fnd_api.g_exc_error;
3627       END IF;
3628   EXCEPTION
3629     WHEN fnd_api.g_exc_error THEN
3630       x_return_status := fnd_api.g_ret_sts_error ;
3631     WHEN fnd_api.g_exc_unexpected_error THEN
3632       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3633   END split_txn_dtls_with_qty;
3634 
3635 
3636   PROCEDURE split_txn_dtls(
3637     split_txn_dtl_id            IN  NUMBER,
3638     x_txn_line_dtls_lst         OUT NOCOPY txn_line_dtl_tbl,
3639     x_return_status             OUT NOCOPY varchar2)
3640   IS
3641 
3642     l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
3643     l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
3644 
3645     l_line_dtl_rec      csi_t_datastructures_grp.txn_line_detail_rec;
3646     l_line_dtl_tbl      csi_t_datastructures_grp.txn_line_detail_tbl;
3647     l_pty_dtl_tbl       csi_t_datastructures_grp.txn_party_detail_tbl;
3648     l_pty_acct_tbl      csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
3649     l_ii_rltns_tbl      csi_t_datastructures_grp.txn_ii_rltns_tbl;
3650     l_org_assgn_tbl     csi_t_datastructures_grp.txn_org_assgn_tbl;
3651     l_ext_attrib_tbl    csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
3652     l_csi_ea_tbl        csi_t_datastructures_grp.csi_ext_attribs_tbl;
3653     l_csi_eav_tbl       csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
3654     l_txn_systems_tbl   csi_t_datastructures_grp.txn_systems_tbl;
3655 
3656     x_msg_count         number;
3657     x_msg_data          varchar2(2000);
3658     l_transaction_line_id number;
3659 
3660   BEGIN
3661 
3662     api_log('split_txn_dtls');
3663 
3664     x_return_status := fnd_api.g_ret_sts_success;
3665 
3666     x_txn_line_dtls_lst.delete;
3667 
3668     l_txn_line_detail_query_rec.txn_line_detail_id := split_txn_dtl_id;
3669 
3670     csi_t_txn_details_grp.get_transaction_details(
3671       p_api_version                => 1.0,
3672       p_commit                     => fnd_api.g_false,
3673       p_init_msg_list              => fnd_api.g_true,
3674       p_validation_level           => fnd_api.g_valid_level_full,
3675       p_txn_line_query_rec         => l_txn_line_query_rec,
3676       p_txn_line_detail_query_rec  => l_txn_line_detail_query_rec,
3677       x_txn_line_detail_tbl        => l_line_dtl_tbl,
3678       p_get_parties_flag           => fnd_api.g_true,
3679       x_txn_party_detail_tbl       => l_pty_dtl_tbl,
3680       p_get_pty_accts_flag         => fnd_api.g_true,
3681       x_txn_pty_acct_detail_tbl    => l_pty_acct_tbl,
3682       p_get_ii_rltns_flag          => fnd_api.g_false,
3683       x_txn_ii_rltns_tbl           => l_ii_rltns_tbl,
3684       p_get_org_assgns_flag        => fnd_api.g_true,
3685       x_txn_org_assgn_tbl          => l_org_assgn_tbl,
3686       p_get_ext_attrib_vals_flag   => fnd_api.g_true,
3687       x_txn_ext_attrib_vals_tbl    => l_ext_attrib_tbl,
3688       p_get_csi_attribs_flag       => fnd_api.g_false,
3689       x_csi_ext_attribs_tbl        => l_csi_ea_tbl,
3690       p_get_csi_iea_values_flag    => fnd_api.g_false,
3691       x_csi_iea_values_tbl         => l_csi_eav_tbl,
3692       p_get_txn_systems_flag       => fnd_api.g_false,
3693       x_txn_systems_tbl            => l_txn_systems_tbl,
3694       x_return_status              => x_return_status,
3695       x_msg_count                  => x_msg_count,
3696       x_msg_data                   => x_msg_data);
3697 
3698     IF x_return_status <> fnd_api.g_ret_sts_success THEN
3699       debug('Get_transaction_details  failed ');
3700       RAISE fnd_api.g_exc_error;
3701     END IF;
3702 
3703     l_transaction_line_id := l_line_dtl_tbl(1).transaction_line_id;
3704 
3705     csi_t_utilities_pvt.convert_ids_to_index(
3706       px_line_dtl_tbl            => l_line_dtl_tbl,
3707       px_pty_dtl_tbl             => l_pty_dtl_tbl,
3708       px_pty_acct_tbl            => l_pty_acct_tbl,
3709       px_ii_rltns_tbl            => l_ii_rltns_tbl,
3710       px_org_assgn_tbl           => l_org_assgn_tbl,
3711       px_ext_attrib_tbl          => l_ext_attrib_tbl,
3712       px_txn_systems_tbl         => l_txn_systems_tbl);
3713 
3714     l_line_dtl_rec                     := l_line_dtl_tbl(1);
3715     l_line_dtl_rec.txn_line_detail_id  := FND_API.G_MISS_NUM;
3716     l_line_dtl_rec.transaction_line_id := l_transaction_line_id;
3717     l_line_dtl_rec.quantity            := 1 ;
3718     l_line_dtl_rec.processing_status   := 'IN_PROCESS';
3719 
3720     debug('Splitting the txn_line_dtls INTO qty of one');
3721 
3722     update csi_t_txn_line_details
3723     set quantity = 1
3724     WHERE txn_line_detail_id = split_txn_dtl_id;
3725 
3726     x_txn_line_dtls_lst(x_txn_line_dtls_lst.count+1).txn_line_detail_id := split_txn_dtl_id;
3727 
3728     FOR l_index in 1..(l_line_dtl_tbl(1).quantity -1 )
3729     LOOP
3730 
3731       csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
3732         p_api_version              => 1.0,
3733         p_commit                   => fnd_api.g_false,
3734         p_init_msg_list            => fnd_api.g_true,
3735         p_validation_level         => fnd_api.g_valid_level_full,
3736         p_txn_line_dtl_index       => 1,
3737         p_txn_line_dtl_rec         => l_line_dtl_rec,
3738         px_txn_party_dtl_tbl       => l_pty_dtl_tbl,
3739         px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
3740         px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
3741         px_txn_org_assgn_tbl       => l_org_assgn_tbl,
3742         px_txn_ext_attrib_vals_tbl => l_ext_attrib_tbl,
3743         x_return_status            => x_return_status,
3744         x_msg_count                => x_msg_count,
3745         x_msg_data                 => x_msg_data);
3746 
3747       IF x_return_status <> fnd_api.g_ret_sts_success THEN
3748         debug('Error Splitting txn line detail ');
3749         RAISE fnd_api.g_exc_error;
3750       END IF;
3751 
3752       x_txn_line_dtls_lst(x_txn_line_dtls_lst.count+1).txn_line_detail_id :=
3753       l_line_dtl_rec.txn_line_detail_id;
3754 
3755       l_line_dtl_tbl(1) := l_line_dtl_rec;
3756 
3757       csi_t_utilities_pvt.convert_ids_to_index(
3758         px_line_dtl_tbl            => l_line_dtl_tbl,
3759         px_pty_dtl_tbl             => l_pty_dtl_tbl,
3760         px_pty_acct_tbl            => l_pty_acct_tbl,
3761         px_ii_rltns_tbl            => l_ii_rltns_tbl,
3762         px_org_assgn_tbl           => l_org_assgn_tbl,
3763         px_ext_attrib_tbl          => l_ext_attrib_tbl,
3764         px_txn_systems_tbl         => l_txn_systems_tbl);
3765 
3766       l_line_dtl_rec                     := l_line_dtl_tbl(1);
3767       l_line_dtl_rec.txn_line_detail_id  := FND_API.G_MISS_NUM;
3768       l_line_dtl_rec.transaction_line_id := l_transaction_line_id;
3769       l_line_dtl_rec.quantity            := 1 ;
3770       l_line_dtl_rec.processing_status   := 'IN_PROCESS';
3771 
3772 
3773     END LOOP;
3774 
3775     debug('No of txn line detail ='||x_txn_line_dtls_lst.count);
3776     debug('Txn line detail for Non Source created Successfully');
3777 
3778   EXCEPTION
3779     WHEN fnd_api.g_exc_error THEN
3780       x_return_status := fnd_api.g_ret_sts_error ;
3781     WHEN fnd_api.g_exc_unexpected_error THEN
3782       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3783   END split_txn_dtls;
3784 
3785   PROCEDURE get_system_tbl(
3786     p_txn_systems_rec            IN  csi_t_datastructures_grp.txn_system_rec,
3787     x_cre_systems_rec            OUT NOCOPY csi_datastructures_pub.system_rec)
3788   IS
3789   BEGIN
3790 
3791     api_log('get_system_tbl');
3792 
3793     x_cre_systems_rec.name                  := p_txn_systems_rec.system_name;
3794     x_cre_systems_rec.description           := p_txn_systems_rec.description;
3795     x_cre_systems_rec.system_type_code      := p_txn_systems_rec.system_type_code;
3796     x_cre_systems_rec.system_number         := p_txn_systems_rec.system_number;
3797     x_cre_systems_rec.customer_id           := p_txn_systems_rec.customer_id;
3798     x_cre_systems_rec.ship_to_contact_id    := p_txn_systems_rec.ship_to_contact_id;
3799     x_cre_systems_rec.bill_to_contact_id    := p_txn_systems_rec.bill_to_contact_id;
3800     x_cre_systems_rec.technical_contact_id  := p_txn_systems_rec.technical_contact_id;
3801     x_cre_systems_rec.service_admin_contact_id := p_txn_systems_rec.service_admin_contact_id;
3802     x_cre_systems_rec.ship_to_site_use_id   := p_txn_systems_rec.ship_to_site_use_id;
3803     x_cre_systems_rec.bill_to_site_use_id   := p_txn_systems_rec.bill_to_site_use_id;
3804     x_cre_systems_rec.install_site_use_id   := p_txn_systems_rec.install_site_use_id;
3805     x_cre_systems_rec.coterminate_day_month := p_txn_systems_rec.coterminate_day_month;
3806     x_cre_systems_rec.config_system_type    := p_txn_systems_rec.config_system_type;
3807     x_cre_systems_rec.start_date_active     := p_txn_systems_rec.start_date_active;
3808     x_cre_systems_rec.end_date_active       := p_txn_systems_rec.end_date_active ;
3809     x_cre_systems_rec.context               := p_txn_systems_rec.context;
3810     x_cre_systems_rec.attribute1            := p_txn_systems_rec.attribute1;
3811     x_cre_systems_rec.attribute2            := p_txn_systems_rec.attribute2;
3812     x_cre_systems_rec.attribute3            := p_txn_systems_rec.attribute3;
3813     x_cre_systems_rec.attribute4            := p_txn_systems_rec.attribute4;
3814     x_cre_systems_rec.attribute5            := p_txn_systems_rec.attribute5;
3815     x_cre_systems_rec.attribute6            := p_txn_systems_rec.attribute6;
3816     x_cre_systems_rec.attribute7            := p_txn_systems_rec.attribute7;
3817     x_cre_systems_rec.attribute8            := p_txn_systems_rec.attribute8;
3818     x_cre_systems_rec.attribute9            := p_txn_systems_rec.attribute9;
3819     x_cre_systems_rec.attribute10           := p_txn_systems_rec.attribute10;
3820     x_cre_systems_rec.attribute11           := p_txn_systems_rec.attribute11;
3821     x_cre_systems_rec.attribute12           := p_txn_systems_rec.attribute12;
3822     x_cre_systems_rec.attribute13           := p_txn_systems_rec.attribute13;
3823     x_cre_systems_rec.attribute14           := p_txn_systems_rec.attribute14;
3824     x_cre_systems_rec.attribute15           := p_txn_systems_rec.attribute15;
3825     x_cre_systems_rec.object_version_numbeR := fnd_api.g_miss_num;
3826 
3827   END get_system_tbl;
3828 
3829 
3830   PROCEDURE get_org_assignment_tbl(
3831     p_txn_line_detail_rec        IN  csi_t_datastructures_grp.txn_line_detail_rec,
3832     p_txn_org_assgn_tbl          IN  csi_t_datastructures_grp.txn_org_assgn_tbl,
3833     x_cre_org_units_tbl          OUT NOCOPY csi_datastructures_pub.organization_units_tbl,
3834     x_upd_org_units_tbl          OUT NOCOPY csi_datastructures_pub.organization_units_tbl,
3835     x_return_status              OUT NOCOPY VARCHAR2)
3836   IS
3837     l_upd_org                  NUMBER := 1;
3838     l_cre_org                  NUMBER := 1;
3839     l_date                     DATE := TO_DATE('01/01/4712', 'MM/DD/YYYY');
3840     l_obj_ver_num              NUMBER;
3841 
3842     l_instance_ou_id           number;
3843 
3844   BEGIN
3845 
3846     api_log('get_org_assignment_tbl');
3847 
3848     x_return_status := fnd_api.g_ret_sts_success;
3849 
3850     /* Build org_assignment table for create/update */
3851     IF p_txn_org_assgn_tbl.count > 0 THEN
3852       FOR j in p_txn_org_assgn_tbl.FIRST..p_txn_org_assgn_tbl.LAST LOOP
3853 
3854         IF (p_txn_org_assgn_tbl(j).txn_line_detail_id = p_txn_line_detail_rec.txn_line_detail_id) AND
3855            (( NVL(p_txn_org_assgn_tbl(j).active_end_date,l_date) > sysdate ) OR
3856             (p_txn_org_assgn_tbl(j).active_end_date = FND_API.G_MISS_DATE )) THEN
3857 
3858 
3859           l_instance_ou_id := p_txn_org_assgn_tbl(j).instance_ou_id;
3860 
3861           IF NVL(p_txn_org_assgn_tbl(j).instance_ou_id ,FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM then
3862 
3863             /* there should be only one org assign rec for the alternate primary key
3864                this is a rectriction from the api
3865             */
3866             BEGIN
3867               SELECT instance_ou_id
3868               INTO   l_instance_ou_id
3869               FROM   csi_i_org_assignments
3870               WHERE  instance_id            = p_txn_line_detail_rec.instance_id
3871               AND    relationship_type_code = p_txn_org_assgn_tbl(j).relationship_type_code;
3872              -- AND    operating_unit_id      = p_txn_org_assgn_tbl(j).operating_unit_id; for 4293740
3873             EXCEPTION
3874               WHEN no_data_found THEN
3875                 l_instance_ou_id := null;
3876               WHEN too_many_rows THEN
3877                 /* in case many found taking the active one */
3878 
3879                 BEGIN
3880                   SELECT instance_ou_id
3881                   INTO   l_instance_ou_id
3882                   FROM   csi_i_org_assignments
3883                   WHERE  instance_id            = p_txn_line_detail_rec.instance_id
3884                   AND    relationship_type_code = p_txn_org_assgn_tbl(j).relationship_type_code
3885                   AND    operating_unit_id      = p_txn_org_assgn_tbl(j).operating_unit_id
3886                   AND    (sysdate > nvl(active_start_date, sysdate-1)
3887                           AND
3888                           sysdate < nvl(active_end_date, sysdate + 1));
3889                 EXCEPTION
3890                   WHEN others THEN
3891                     l_instance_ou_id := null;
3892                 END;
3893             END;
3894           END IF;
3895 
3896           IF NVL(l_instance_ou_id,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM then
3897 
3898             /* if the instance_ou_id does not exist then update for org_units  */
3899             l_obj_ver_num := csi_utl_pkg.get_org_obj_ver_num(
3900                                l_instance_ou_id);
3901 
3902             IF l_obj_ver_num = -1  THEN
3903               debug('csi_utl_pkg.get_org_obj_ver_num failed ');
3904               RAISE fnd_api.g_exc_error;
3905             END IF;
3906 
3907             x_upd_org_units_tbl(l_upd_org).instance_ou_id    := l_instance_ou_id;
3908             x_upd_org_units_tbl(l_upd_org).instance_id       := p_txn_line_detail_rec.instance_id;
3909             x_upd_org_units_tbl(l_upd_org).operating_unit_id := p_txn_org_assgn_tbl(j).operating_unit_id;
3910             x_upd_org_units_tbl(l_upd_org).relationship_type_code := p_txn_org_assgn_tbl(j).relationship_type_code;
3911             x_upd_org_units_tbl(l_upd_org).active_end_date  := null;
3912             x_upd_org_units_tbl(l_upd_org).context          := p_txn_org_assgn_tbl(j).context    ;
3913             x_upd_org_units_tbl(l_upd_org).attribute1       := p_txn_org_assgn_tbl(j).attribute1 ;
3914             x_upd_org_units_tbl(l_upd_org).attribute2       := p_txn_org_assgn_tbl(j).attribute2 ;
3915             x_upd_org_units_tbl(l_upd_org).attribute3       := p_txn_org_assgn_tbl(j).attribute3 ;
3916             x_upd_org_units_tbl(l_upd_org).attribute4       := p_txn_org_assgn_tbl(j).attribute4 ;
3917             x_upd_org_units_tbl(l_upd_org).attribute5       := p_txn_org_assgn_tbl(j).attribute5 ;
3918             x_upd_org_units_tbl(l_upd_org).attribute6       := p_txn_org_assgn_tbl(j).attribute6 ;
3919             x_upd_org_units_tbl(l_upd_org).attribute7       := p_txn_org_assgn_tbl(j).attribute7 ;
3920             x_upd_org_units_tbl(l_upd_org).attribute8       := p_txn_org_assgn_tbl(j).attribute8 ;
3921             x_upd_org_units_tbl(l_upd_org).attribute9       := p_txn_org_assgn_tbl(j).attribute9 ;
3922             x_upd_org_units_tbl(l_upd_org).attribute10      := p_txn_org_assgn_tbl(j).attribute10;
3923             x_upd_org_units_tbl(l_upd_org).attribute11      := p_txn_org_assgn_tbl(j).attribute11;
3924             x_upd_org_units_tbl(l_upd_org).attribute12      := p_txn_org_assgn_tbl(j).attribute12;
3925             x_upd_org_units_tbl(l_upd_org).attribute13      := p_txn_org_assgn_tbl(j).attribute13;
3926             x_upd_org_units_tbl(l_upd_org).attribute14      := p_txn_org_assgn_tbl(j).attribute14;
3927             x_upd_org_units_tbl(l_upd_org).attribute15      := p_txn_org_assgn_tbl(j).attribute15 ;
3928             x_upd_org_units_tbl(l_upd_org).object_version_number := l_obj_ver_num;
3929 
3930             l_upd_org := l_upd_org + 1;
3931           ELSE
3932 
3933             /* if instance_ou_id does  exist then create for org assignment  */
3934 
3935             x_cre_org_units_tbl(l_cre_org).instance_ou_id    := FND_API.G_MISS_NUM;
3936             x_cre_org_units_tbl(l_cre_org).operating_unit_id := p_txn_org_assgn_tbl(j).operating_unit_id;
3937             x_cre_org_units_tbl(l_cre_org).instance_id       := p_txn_line_detail_rec.instance_id;
3938             x_cre_org_units_tbl(l_cre_org).relationship_type_code := p_txn_org_assgn_tbl(j).relationship_type_code;
3939             x_cre_org_units_tbl(l_cre_org).active_start_date := FND_API.G_MISS_DATE ;
3940             x_cre_org_units_tbl(l_cre_org).active_end_date   := p_txn_org_assgn_tbl(j).active_end_date;
3941             x_cre_org_units_tbl(l_cre_org).context          := p_txn_org_assgn_tbl(j).context    ;
3942             x_cre_org_units_tbl(l_cre_org).attribute1       := p_txn_org_assgn_tbl(j).attribute1 ;
3943             x_cre_org_units_tbl(l_cre_org).attribute2       := p_txn_org_assgn_tbl(j).attribute2 ;
3944             x_cre_org_units_tbl(l_cre_org).attribute3       := p_txn_org_assgn_tbl(j).attribute3 ;
3945             x_cre_org_units_tbl(l_cre_org).attribute4       := p_txn_org_assgn_tbl(j).attribute4 ;
3946             x_cre_org_units_tbl(l_cre_org).attribute5       := p_txn_org_assgn_tbl(j).attribute5 ;
3947             x_cre_org_units_tbl(l_cre_org).attribute6       := p_txn_org_assgn_tbl(j).attribute6 ;
3948             x_cre_org_units_tbl(l_cre_org).attribute7       := p_txn_org_assgn_tbl(j).attribute7 ;
3949             x_cre_org_units_tbl(l_cre_org).attribute8       := p_txn_org_assgn_tbl(j).attribute8 ;
3950             x_cre_org_units_tbl(l_cre_org).attribute9       := p_txn_org_assgn_tbl(j).attribute9 ;
3951             x_cre_org_units_tbl(l_cre_org).attribute10      := p_txn_org_assgn_tbl(j).attribute10;
3952             x_cre_org_units_tbl(l_cre_org).attribute11      := p_txn_org_assgn_tbl(j).attribute11;
3953             x_cre_org_units_tbl(l_cre_org).attribute12      := p_txn_org_assgn_tbl(j).attribute12;
3954             x_cre_org_units_tbl(l_cre_org).attribute13      := p_txn_org_assgn_tbl(j).attribute13;
3955             x_cre_org_units_tbl(l_cre_org).attribute14      := p_txn_org_assgn_tbl(j).attribute14;
3956             x_cre_org_units_tbl(l_cre_org).attribute15      := p_txn_org_assgn_tbl(j).attribute15 ;
3957             x_cre_org_units_tbl(l_cre_org).object_version_number := FND_API.G_MISS_NUM;
3958 
3959             l_cre_org := l_cre_org + 1;
3960           END IF; -- end if for instance_ou_id is not null
3961 
3962         END IF; -- end if for txn.txn_line_detail_id = org.txn_line_detail_id
3963 
3964       END LOOP; -- end of org assignment table loop
3965     END IF;-- end of org assignment table count > 0
3966 
3967   EXCEPTION
3968     WHEN fnd_api.g_exc_error THEN
3969       x_return_status := fnd_api.g_ret_sts_error ;
3970     WHEN fnd_api.g_exc_unexpected_error THEN
3971       x_return_status := fnd_api.g_ret_sts_unexp_error ;
3972   END get_org_assignment_tbl;
3973 
3974   PROCEDURE get_ext_attribs_tbl(
3975     p_txn_line_detail_rec        IN  csi_t_datastructures_grp.txn_line_detail_rec,
3976     p_txn_ext_attrib_vals_tbl    IN  csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
3977     x_cre_ext_attrib_val_tbl     OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl,
3978     x_upd_ext_attrib_val_tbl     OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl,
3979     x_return_status              OUT NOCOPY VARCHAR2)
3980   IS
3981 
3982     l_cre_ext                  NUMBER := 1;
3983     l_upd_ext                  NUMBER := 1;
3984     l_date                     DATE   := TO_DATE('01/01/4712', 'MM/DD/YYYY');
3985     l_obj_ver_num              NUMBER;
3986 
3987   BEGIN
3988 
3989     api_log('get_ext_attribs_tbl');
3990 
3991     x_return_status := fnd_api.g_ret_sts_success;
3992 
3993     /* Build ext attribs table for create/update */
3994     IF p_txn_ext_attrib_vals_tbl.count > 0 THEN
3995       FOR j in p_txn_ext_attrib_vals_tbl.FIRST..p_txn_ext_attrib_vals_tbl.LAST LOOP
3996 
3997         IF (p_txn_ext_attrib_vals_tbl(j).txn_line_detail_id = p_txn_line_detail_rec.txn_line_detail_id ) AND
3998            ((NVL(p_txn_ext_attrib_vals_tbl(j).active_end_date,l_date) > sysdate ) OR
3999             (p_txn_ext_attrib_vals_tbl(j).active_end_date = FND_API.G_MISS_DATE )) AND
4000            (p_txn_ext_attrib_vals_tbl(j).PROCESS_FLAG = 'Y') THEN
4001 
4002           debug('attrib_source_table  ='||p_txn_ext_attrib_vals_tbl(j).attrib_source_table);
4003 
4004           IF (p_txn_ext_attrib_vals_tbl(j).attrib_source_table = 'CSI_I_EXTENDED_ATTRIBS') THEN
4005 
4006             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute_id     := p_txn_ext_attrib_vals_tbl(j).attribute_source_id;
4007             x_cre_ext_attrib_val_tbl(l_cre_ext).instance_id      := p_txn_line_detail_rec.instance_id;
4008             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute_value  := p_txn_ext_attrib_vals_tbl(j).attribute_value;
4009             x_cre_ext_attrib_val_tbl(l_cre_ext).active_start_date := FND_API.G_MISS_DATE ;
4010             x_cre_ext_attrib_val_tbl(l_cre_ext).active_end_date  := p_txn_ext_attrib_vals_tbl(j).active_end_date;
4011             x_cre_ext_attrib_val_tbl(l_cre_ext).context          := p_txn_ext_attrib_vals_tbl(j).context    ;
4012             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute1       := p_txn_ext_attrib_vals_tbl(j).attribute1 ;
4013             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute2       := p_txn_ext_attrib_vals_tbl(j).attribute2 ;
4014             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute3       := p_txn_ext_attrib_vals_tbl(j).attribute3 ;
4015             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute4       := p_txn_ext_attrib_vals_tbl(j).attribute4 ;
4016             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute5       := p_txn_ext_attrib_vals_tbl(j).attribute5 ;
4017             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute6       := p_txn_ext_attrib_vals_tbl(j).attribute6 ;
4018             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute7       := p_txn_ext_attrib_vals_tbl(j).attribute7 ;
4019             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute8       := p_txn_ext_attrib_vals_tbl(j).attribute8 ;
4020             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute9       := p_txn_ext_attrib_vals_tbl(j).attribute9 ;
4021             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute10      := p_txn_ext_attrib_vals_tbl(j).attribute10;
4022             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute11      := p_txn_ext_attrib_vals_tbl(j).attribute11;
4023             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute12      := p_txn_ext_attrib_vals_tbl(j).attribute12;
4024             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute13      := p_txn_ext_attrib_vals_tbl(j).attribute13;
4025             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute14      := p_txn_ext_attrib_vals_tbl(j).attribute14;
4026             x_cre_ext_attrib_val_tbl(l_cre_ext).attribute15      := p_txn_ext_attrib_vals_tbl(j).attribute15 ;
4027             x_cre_ext_attrib_val_tbl(l_cre_ext).object_version_number  := FND_API.G_MISS_NUM;
4028 
4029             l_cre_ext := l_cre_ext + 1;
4030           ELSIF (p_txn_ext_attrib_vals_tbl(j).attrib_source_table = 'CSI_IEA_VALUES') THEN
4031 
4032             l_obj_ver_num := csi_utl_pkg.get_ext_obj_ver_num(
4033                                p_txn_ext_attrib_vals_tbl(j).attribute_source_id);
4034 
4035             IF l_obj_ver_num = -1  THEN
4036               debug('csi_utl_pkg.get_ext_obj_ver_num failed ');
4037               RAISE fnd_api.g_exc_error;
4038             END IF;
4039 
4040             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute_value_id := p_txn_ext_attrib_vals_tbl(j).attribute_source_id;
4041             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute_value  := p_txn_ext_attrib_vals_tbl(j).attribute_value;
4042             x_upd_ext_attrib_val_tbl(l_upd_ext).instance_id      := p_txn_line_detail_rec.instance_id;
4043             x_upd_ext_attrib_val_tbl(l_upd_ext).active_end_date  := p_txn_ext_attrib_vals_tbl(j).active_end_date;
4044             x_upd_ext_attrib_val_tbl(l_upd_ext).context          := p_txn_ext_attrib_vals_tbl(j).context    ;
4045             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute1       := p_txn_ext_attrib_vals_tbl(j).attribute1 ;
4046             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute2       := p_txn_ext_attrib_vals_tbl(j).attribute2 ;
4047             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute3       := p_txn_ext_attrib_vals_tbl(j).attribute3 ;
4048             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute4       := p_txn_ext_attrib_vals_tbl(j).attribute4 ;
4049             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute5       := p_txn_ext_attrib_vals_tbl(j).attribute5 ;
4050             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute6       := p_txn_ext_attrib_vals_tbl(j).attribute6 ;
4051             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute7       := p_txn_ext_attrib_vals_tbl(j).attribute7 ;
4052             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute8       := p_txn_ext_attrib_vals_tbl(j).attribute8 ;
4053             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute9       := p_txn_ext_attrib_vals_tbl(j).attribute9 ;
4054             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute10      := p_txn_ext_attrib_vals_tbl(j).attribute10;
4055             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute11      := p_txn_ext_attrib_vals_tbl(j).attribute11;
4056             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute12      := p_txn_ext_attrib_vals_tbl(j).attribute12;
4057             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute13      := p_txn_ext_attrib_vals_tbl(j).attribute13;
4058             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute14      := p_txn_ext_attrib_vals_tbl(j).attribute14;
4059             x_upd_ext_attrib_val_tbl(l_upd_ext).attribute15      := p_txn_ext_attrib_vals_tbl(j).attribute15 ;
4060             x_upd_ext_attrib_val_tbl(l_upd_ext).object_version_number := l_obj_ver_num;
4061 
4062             l_upd_ext := l_upd_ext + 1;
4063           END IF; -- end if for ATTRIB_SOURCE_TABLE comparison
4064 
4065         END IF; -- end if for ext.txn_line_detail_id = txn.txn_line_detail_id
4066 
4067       END LOOP; -- end of ext attributes table loop
4068     END IF;-- end of ext attributes count > 0
4069 
4070   EXCEPTION
4071     WHEN fnd_api.g_exc_error THEN
4072       x_return_status := fnd_api.g_ret_sts_error ;
4073     WHEN fnd_api.g_exc_unexpected_error THEN
4074       x_return_status := fnd_api.g_ret_sts_unexp_error ;
4075   END get_ext_attribs_tbl;
4076 
4077     /*  Added p_trx_rec for ER 2581101 */
4078 
4079   PROCEDURE amend_contracts(
4080     p_relationship_type_code in  varchar2,
4081     p_object_instance_id     in  number,
4082     p_subject_instance_id    in  number,
4083     p_trx_rec                in  csi_datastructures_pub.transaction_rec,
4084     x_return_status          OUT NOCOPY varchar2)
4085   IS
4086     l_return_status  varchar2(1) := fnd_api.g_ret_sts_success;
4087     l_msg_count      number;
4088     l_msg_data       varchar2(2000);
4089 
4090     l_old_instance_id  number := null;
4091     l_new_instance_id  number := null;
4092     l_process_flag     boolean := TRUE;
4093 
4094    /*  Fix for ER 2581101  */
4095 
4096     l_upd_instance_rec           csi_datastructures_pub.instance_rec;
4097     l_upd_party_tbl              csi_datastructures_pub.party_tbl;
4098     l_upd_party_acct_tbl         csi_datastructures_pub.party_account_tbl;
4099     l_upd_pricing_attribs_tbl    csi_datastructures_pub.pricing_attribs_tbl;
4100     l_upd_ext_attrib_val_tbl     csi_datastructures_pub.extend_attrib_values_tbl;
4101     l_upd_org_units_tbl          csi_datastructures_pub.organization_units_tbl;
4102     l_upd_inst_asset_tbl         csi_datastructures_pub.instance_asset_tbl;
4103     l_upd_inst_id_lst            csi_datastructures_pub.id_tbl;
4104     l_upd_txn_rec                csi_datastructures_pub.transaction_rec;
4105     l_non_source_change_owner    VARCHAR2(1);
4106     l_non_src_change_owner_code  VARCHAR2(1);
4107     l_location_code              VARCHAR2(30);
4108     l_object_version_number      NUMBER;
4109     px_oks_txn_inst_tbl          oks_ibint_pub.txn_instance_tbl;
4110 
4111    /* End of  Fix for ER 2581101  */
4112 
4113   BEGIN
4114 
4115     x_return_status := fnd_api.g_ret_sts_success;
4116     l_upd_txn_rec   := p_trx_rec;
4117 
4118     api_log('amend_contracts');
4119 
4120     l_process_flag := TRUE;
4121 
4122     /* bug 2355589 the relationship should be read from subject to object */
4123     IF p_relationship_type_code    = 'REPLACED-BY' THEN
4124 
4125       -- SUBJECT replaced by OBJECT
4126       -- OLD replaced by NEW
4127       --
4128       l_old_instance_id := p_subject_instance_id;
4129       l_new_instance_id := p_object_instance_id;
4130 
4131     ELSIF p_relationship_type_code = 'REPLACEMENT-FOR' THEN
4132 
4133       -- SUBJECT replacement for OBJECT
4134       -- NEW replacement for OLD
4135       --
4136       l_new_instance_id := p_subject_instance_id;
4137       l_old_instance_id := p_object_instance_id;
4138 
4139     ELSIF p_relationship_type_code = 'UPGRADED-FROM' THEN
4140 
4141       -- SUBJECT upgraded from OBJECT
4142       -- NEW upgraded from OLD
4143       --
4144       l_new_instance_id := p_subject_instance_id;
4145       l_old_instance_id := p_object_instance_id;
4146 
4147     ELSE
4148       l_process_flag := FALSE;
4149       debug('  Not a valid relationship to process contracts.');
4150     END IF;
4151 
4152     -- additional check to see if both the source and non source points to the same instance
4153     IF l_process_flag THEN
4154       debug(' old_instance_id :'||l_old_instance_id);
4155       debug(' new_instance_id :'||l_new_instance_id);
4156 
4157       -- do nothing if both are same
4158       IF l_old_instance_id = l_new_instance_id THEN
4159         l_process_flag := FALSE;
4160       END IF;
4161 
4162     END IF;
4163 
4164     IF l_process_flag THEN
4165 
4166       csi_t_gen_utility_pvt.dump_api_info(
4167         p_pkg_name => 'csi_item_instance_pvt',
4168         p_api_name => 'call_to_contracts');
4169 
4170       csi_item_instance_pvt.call_to_contracts(
4171         p_transaction_type   => 'RPL',
4172         p_instance_id        => l_old_instance_id,
4173         p_new_instance_id    => l_new_instance_id,
4174         p_vld_org_id         => null,
4175         p_quantity           => null,
4176         p_party_account_id1  => null,
4177         p_party_account_id2  => null,
4178         p_transaction_date   => p_trx_rec.transaction_date, -- null for Bug # 3483763
4179         p_source_transaction_date   => p_trx_rec.source_transaction_date,
4180         p_oks_txn_inst_tbl   => px_oks_txn_inst_tbl,
4181         x_return_status      => l_return_status,
4182         x_msg_count          => l_msg_count,
4183         x_msg_data           => l_msg_data);
4184 
4185       IF l_return_status <> fnd_api.g_ret_sts_success THEN
4186         raise fnd_api.g_exc_error;
4187       END IF;
4188       --
4189       IF px_oks_txn_inst_tbl.count > 0 THEN
4190 	 csi_gen_utility_pvt.dump_oks_txn_inst_tbl(px_oks_txn_inst_tbl);
4191 	 csi_gen_utility_pvt.put_line('Calling OKS Core API...');
4192 	 --
4193          UPDATE CSI_TRANSACTIONS
4194          set contracts_invoked = 'Y'
4195          where transaction_id = p_trx_rec.transaction_id;
4196          --
4197 	 OKS_IBINT_PUB.IB_interface
4198 	    (
4199 	      P_Api_Version           =>  1.0,
4200 	      P_init_msg_list         =>  fnd_api.g_true,
4201 	      P_single_txn_date_flag  =>  'Y',
4202 	      P_Batch_type            =>  NULL,
4203 	      P_Batch_ID              =>  NULL,
4204 	      P_OKS_Txn_Inst_tbl      =>  px_oks_txn_inst_tbl,
4205 	      x_return_status         =>  l_return_status,
4206 	      x_msg_count             =>  l_msg_count,
4207 	      x_msg_data              =>  l_msg_data
4208 	   );
4209 	 --
4210 	 IF NOT(l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4211 	    RAISE FND_API.G_EXC_ERROR;
4212 	 END IF;
4213       END IF;
4214 
4215       /*  Code fix for ER 2581101 */
4216 
4217       debug('Inside amend contracts sub type id :'|| p_trx_rec.txn_sub_type_id);
4218 
4219         BEGIN
4220           SELECT  non_src_change_owner,
4221                   non_src_change_owner_to_code
4222           INTO    l_non_source_change_owner,
4223                   l_non_src_change_owner_code
4224           FROM    csi_txn_sub_types
4225           WHERE   transaction_type_id = csi_order_ship_pub.g_txn_type_id
4226           AND     sub_type_id = p_trx_rec.txn_sub_type_id;
4227 
4228         EXCEPTION
4229           WHEN no_data_found THEN
4230               null;
4231         END;
4232 
4233         BEGIN
4234           SELECT object_version_number,
4235                  location_type_code
4236           INTO   l_object_version_number,
4237                  l_location_code
4238           FROM   csi_item_instances
4239           WHERE  instance_id = l_old_instance_id;
4240 
4241         EXCEPTION
4242           WHEN no_data_found THEN
4243               null;
4244         END;
4245 
4246       debug('  Instance ID     :'||l_old_instance_id);
4247       debug('  location Code   :'||l_location_code);
4248       DEBUG(' l_non_src_change_owner_code : '||l_non_src_change_owner_code);
4249       DEBUG(' l_non_source_change_owner   : '||l_non_source_change_owner);
4250 
4251       IF l_location_code = 'INVENTORY'
4252         AND
4253          l_non_source_change_owner = 'Y'
4254         AND
4255          l_non_src_change_owner_code = 'I'
4256       THEN
4257         debug(' Building Party Table');
4258 
4259         l_upd_party_tbl(1).instance_id            :=  l_old_instance_id;
4260         l_upd_party_tbl(1).party_source_table     :=  'HZ_PARTIES';
4261         l_upd_party_tbl(1).relationship_type_code :=  'OWNER';
4262         l_upd_party_tbl(1).contact_flag           :=  'N';
4263 
4264         BEGIN
4265           Select instance_party_id,
4266                  object_version_number
4267           Into   l_upd_party_tbl(1).instance_party_id,
4268                  l_upd_party_tbl(1).object_version_number
4269          From   csi_i_parties
4270          Where  instance_id = l_old_instance_id
4271          And    relationship_Type_code = 'OWNER';
4272 
4273         EXCEPTION
4274           When No_Data_Found Then
4275                NULL;
4276          END;
4277 
4278 --commented SQL below to make changes for the bug 4028827
4279 /*
4280          BEGIN
4281            Select internal_party_id
4282            Into   l_upd_party_tbl(1).party_id
4283            From   csi_install_parameters;
4284 
4285          EXCEPTION
4286            When NO_Data_Found Then
4287                 NULL;
4288          END;
4289 */
4290         l_upd_party_tbl(1).party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
4291 
4292         debug('Updating the Instance in Non Source Detail to Internal Party..');
4293         debug('Party Tbl count : '||l_upd_party_tbl.count);
4294 
4295         csi_t_gen_utility_pvt.dump_api_info(
4296            p_pkg_name => 'csi_item_instance_pub',
4297            p_api_name => 'update_item_instance');
4298 
4299           csi_item_instance_pub.update_item_instance(
4300             p_api_version           => 1.0,
4301             p_commit                => fnd_api.g_false,
4302             p_init_msg_list         => fnd_api.g_true,
4303             p_validation_level      => fnd_api.g_valid_level_full,
4304             p_instance_rec          => l_upd_instance_rec,
4305             p_ext_attrib_values_tbl => l_upd_ext_attrib_val_tbl,
4306             p_party_tbl             => l_upd_party_tbl,
4307             p_account_tbl           => l_upd_party_acct_tbl,
4308             p_pricing_attrib_tbl    => l_upd_pricing_attribs_tbl,
4309             p_org_assignments_tbl   => l_upd_org_units_tbl,
4310             p_txn_rec               => l_upd_txn_rec,
4311             p_asset_assignment_tbl  => l_upd_inst_asset_tbl,
4312             x_instance_id_lst       => l_upd_inst_id_lst,
4313             x_return_status         => l_return_status,
4314             x_msg_count             => l_msg_count,
4315             x_msg_data              => l_msg_data );
4316 
4317          -- For Bug 4057183
4318          -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
4319          IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
4320             RAISE fnd_api.g_exc_error;
4321          END IF;
4322 
4323       END IF;
4324 
4325       /*  End Of fix for ER 2581101 */
4326 
4327     END IF;
4328 
4329   EXCEPTION
4330     WHEN fnd_api.g_exc_error THEN
4331       x_return_status := fnd_api.g_ret_sts_error;
4332   END amend_contracts;
4333 
4334  /*  Added p_trx_rec for ER 2581101 */
4335   PROCEDURE get_ii_relation_tbl(
4336     p_txn_line_detail_tbl     IN csi_t_datastructures_grp.txn_line_detail_tbl,
4337     p_txn_ii_rltns_tbl        IN csi_t_datastructures_grp.txn_ii_rltns_tbl,
4338     p_trx_rec                 IN csi_datastructures_pub.transaction_rec,
4339     p_order_line_rec          IN csi_order_ship_pub.order_line_rec,
4340     x_cre_ii_rltns_tbl        OUT NOCOPY csi_datastructures_pub.ii_relationship_tbl,
4341     x_upd_ii_rltns_tbl        OUT NOCOPY csi_datastructures_pub.ii_relationship_tbl,
4342     x_return_status           OUT NOCOPY VARCHAR2)
4343   IS
4344     l_cre_ii             NUMBER := 1;
4345     l_upd_ii             NUMBER := 1;
4346     l_date               DATE := TO_DATE('01/01/4712', 'MM/DD/YYYY');
4347     l_object_inst_id     NUMBER;
4348     l_trx_type_id        NUMBER;
4349     l_subject_inst_id    NUMBER;
4350     l_obj_ver_num        NUMBER;
4351     l_return_status      varchar2(1) := fnd_api.g_ret_sts_success;
4352 
4353     /*  Added p_trx_rec for ER 2581101 */
4354     l_nsrc_sub_type_id   NUMBER;
4355     l_trx_rec            csi_datastructures_pub.transaction_rec;
4356 
4357     --l_srl_code           number := null;
4358     l_source_txn_header_id  NUMBER ;
4359     l_txn_line_query_rec    csi_t_datastructures_grp.txn_line_query_rec ;
4360     l_txn_line_detail_query_rec  csi_t_datastructures_grp.txn_line_detail_query_rec ;
4361     l_txn_line_detail_tbl  csi_t_datastructures_grp.txn_line_detail_tbl ;
4362     x_txn_party_detail_tbl csi_t_datastructures_grp.txn_party_detail_tbl ;
4363     x_txn_pty_acct_detail_tbl  csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
4364     x_txn_ii_rltns_tbl     csi_t_datastructures_grp.txn_ii_rltns_tbl ;
4365     x_txn_org_assgn_tbl    csi_t_datastructures_grp.txn_org_assgn_tbl ;
4366     x_txn_ext_attrib_vals_tbl  csi_t_datastructures_grp.txn_ext_attrib_vals_tbl ;
4367     x_csi_ext_attribs_tbl  csi_t_datastructures_grp.csi_ext_attribs_tbl;
4368     x_csi_iea_values_tbl   csi_t_datastructures_grp.csi_ext_attrib_vals_tbl ;
4369     x_txn_systems_tbl      csi_t_datastructures_grp.txn_systems_tbl ;
4370     x_msg_count            NUMBER ;
4371     x_msg_data             VARCHAR2(2000);
4372     x_xface_to_IB_flag     VARCHAR2(1);
4373     l_index                NUMBER ;
4374     l_txn_dtl_line_found   BOOLEAN ;
4375     l_relation_exists      BOOLEAN ;
4376     l_tmp_txn_line_detail_tbl  csi_t_datastructures_grp.txn_line_detail_tbl ;
4377     x_tmp_txn_ii_rltns_tbl     csi_t_datastructures_grp.txn_ii_rltns_tbl ;
4378     l_exp_ii_relationship_rec  csi_datastructures_pub.ii_relationship_rec;
4379     l_exp_instance_id_tbl      csi_datastructures_pub.id_tbl;
4380     g_api_name                 varchar2(80);
4381     l_old_instance_id          NUMBER;
4382     l_new_instance_id          NUMBER;
4383     l_relationship_id          NUMBER;
4384     l_ii_rel_obj_ver_num       NUMBER;
4385     l_expire_object_id         NUMBER;
4386     l_object_version_number    NUMBER;
4387     l_object_id                NUMBER;
4388     l_relationship_type_code   VARCHAR2(30);
4389     l_valid_instance_no        NUMBER;
4390     l_transfer_components_flag VARCHAR2(1);
4391     l_config_instance          VARCHAR2(1);
4392     l_item_status              VARCHAR2(10);
4393     l_location_type_code       VARCHAR2(30);
4394     l_allow_object_replacement VARCHAR2(1);
4395     l_parent_instance_id       NUMBER;
4396     l_t_ii_count               NUMBER;
4397     l_found                    VARCHAR2(1);
4398     l_active_end_date          DATE;
4399     l_line_tbl                 oe_order_pub.line_tbl_type;
4400     /* Added for Bug 2972082 */
4401     l_cascade_owner_flag varchar2(1);
4402 
4403     CURSOR new_transfer_comp(p_instance_id IN NUMBER) IS
4404     SELECT relationship_id, object_version_number,
4405            subject_id, object_id, relationship_type_code
4406     FROM   csi_ii_relationships
4407     WHERE  object_id = p_instance_id
4408     AND    relationship_type_code = 'COMPONENT-OF'
4409     AND    (active_end_date is null OR active_end_date >= sysdate);
4410 
4411     CURSOR check_instance_status(p_instance_id IN NUMBER) IS
4412     SELECT distinct instance_number
4413     FROM   CSI_ITEM_INSTANCES cii, CSI_II_RELATIONSHIPS cir
4414     WHERE  owner_party_id NOT IN (SELECT internal_party_id
4415                                   FROM   csi_install_parameters)
4416     AND (cii.instance_id = cir.object_id or cii.instance_id = cir.subject_id)
4417     AND  cir.relationship_type_code = 'COMPONENT-OF'
4418     AND (cii.active_end_date is null or cii.active_end_date > sysdate)
4419     AND (cir.active_end_date is null or cir.active_end_date > sysdate)
4420     AND  cii.instance_id = p_instance_id;
4421 
4422     CURSOR check_instance_history(p_instance_id IN NUMBER) IS
4423     SELECT instance_history_id, new_location_type_code,
4424            new_instance_status_id
4425     FROM   csi_item_instances_h
4426     WHERE  instance_id = p_instance_id
4427     ORDER  BY instance_history_id desc;
4428 
4429     CURSOR rmarp_transfer_comp(p_instance_id IN NUMBER) IS
4430     SELECT relationship_id, object_version_number,
4431            subject_id, object_id, relationship_type_code
4432     FROM   csi_ii_relationships
4433     WHERE  object_id = p_instance_id
4434     AND    relationship_type_code = 'COMPONENT-OF';
4435 
4436     CURSOR check_item_status_validity(p_instance_id IN NUMBER) IS
4437     SELECT 'RMA' item_status
4438     FROM   csi_ii_relationships
4439     WHERE  subject_id = p_instance_id
4440     AND    relationship_type_code = 'COMPONENT-OF'
4441     AND    (active_end_date IS NOT NULL OR active_end_date <= sysdate)
4442     ORDER  BY RELATIONSHIP_ID DESC;
4443 
4444     CURSOR check_csi_t_ii_rel(p_instance_id IN NUMBER) IS
4445     SELECT txn_relationship_id, object_id, relationship_type_code
4446     FROM   csi_t_ii_relationships
4447     WHERE  object_id = p_instance_id
4448     AND    relationship_type_code = 'COMPONENT-OF'
4449     AND    active_end_date IS NULL;
4450 
4451     CURSOR chk_item_config(p_instance_id IN NUMBER) IS
4452     SELECT 'Y' config_instance, active_end_date
4453     FROM   csi_ii_relationships
4454     WHERE  subject_id = p_instance_id
4455     AND    relationship_type_code = 'COMPONENT-OF'
4456     ORDER  BY relationship_id DESC;
4457 BEGIN
4458 
4459     api_log('get_ii_relation_tbl');
4460 
4461     x_return_status := fnd_api.g_ret_sts_success;
4462 
4463     l_trx_rec       := p_trx_rec;
4464 
4465    ---Get the relations(partners only) associated with the p_txn_line_detail_tbl
4466 
4467     FOR k IN p_txn_line_detail_tbl.FIRST ..  p_txn_line_detail_tbl.LAST
4468     LOOP
4469        ---get partner TLD and its details.
4470        get_partner_rltns
4471           (p_txn_line_detail_rec  => p_txn_line_detail_tbl(k) ,
4472           x_txn_ii_rltns_tbl => x_tmp_txn_ii_rltns_tbl ,
4473           x_txn_line_detail_tbl  => l_tmp_txn_line_detail_tbl,
4474           x_return_status => x_return_status );
4475 
4476            IF x_return_status <> fnd_api.g_ret_sts_success
4477            THEN
4478              raise fnd_api.g_exc_error;
4479            END IF;
4480 
4481       ---APpend the relations to main tbl
4482 
4483      IF x_tmp_txn_ii_rltns_tbl.COUNT > 0
4484      THEN
4485       FOR i IN x_tmp_txn_ii_rltns_tbl.FIRST .. x_tmp_txn_ii_rltns_tbl.LAST
4486       LOOP
4487         debug ('x_tmp_txn_ii_rltns_tbl(i).txn_relationship_id : '||
4488                   x_tmp_txn_ii_rltns_tbl(i).txn_relationship_id);
4489         l_relation_exists := FALSE ;
4490 
4491        IF x_txn_ii_rltns_tbl.COUNT > 0
4492        THEN
4493         FOR j IN x_txn_ii_rltns_tbl.FIRST .. x_txn_ii_rltns_tbl.LAST
4494         LOOP
4495            IF x_tmp_txn_ii_rltns_tbl(i).txn_relationship_id = x_txn_ii_rltns_tbl(j).txn_relationship_id
4496            THEN
4497               l_relation_exists := TRUE;
4498               EXIT ;
4499            END IF ;
4500         END LOOP ;
4501        END IF ;
4502         IF NOT l_relation_exists AND x_tmp_txn_ii_rltns_tbl.COUNT > 0
4503         THEN
4504            l_index := NVL(x_txn_ii_rltns_tbl.LAST,0)+1 ;
4505            x_txn_ii_rltns_tbl(l_index) := x_tmp_txn_ii_rltns_tbl(i) ;
4506         END IF ;
4507       END LOOP ;
4508      END IF ;
4509 
4510       ---APpend the txn line dtls to main tbl
4511      IF l_tmp_txn_line_detail_tbl.COUNT > 0
4512      THEN
4513       FOR i IN l_tmp_txn_line_detail_tbl.FIRST .. l_tmp_txn_line_detail_tbl.LAST
4514       LOOP
4515         l_txn_dtl_line_found := FALSE ;
4516        IF l_txn_line_detail_tbl.COUNT > 0
4517        THEN
4518         FOR j IN l_txn_line_detail_tbl.FIRST .. l_txn_line_detail_tbl.LAST
4519         LOOP
4520            IF l_tmp_txn_line_detail_tbl(i).txn_line_detail_id = l_txn_line_detail_tbl(j).txn_line_detail_id
4521            THEN
4522               l_txn_dtl_line_found := TRUE;
4523               EXIT ;
4524            END IF ;
4525         END LOOP ;
4526        END IF ;
4527         IF NOT l_txn_dtl_line_found AND l_tmp_txn_line_detail_tbl.COUNT > 0
4528         THEN
4529            l_txn_line_detail_tbl(NVL(l_txn_line_detail_tbl.LAST,0)+1) := l_tmp_txn_line_detail_tbl(i) ;
4530         END IF ;
4531       END LOOP ;
4532      END IF ;
4533     END LOOP ; ---p_txn_line_detail_tbl
4534 
4535 
4536        ---Append these partner tlds with the other tld
4537        FOR i IN p_txn_line_detail_tbl.FIRST .. p_txn_line_detail_tbl.LAST
4538        LOOP
4539 	 l_txn_dtl_line_found := FALSE ;
4540         IF l_txn_line_detail_tbl.COUNT > 0
4541         THEN
4542 	 FOR j IN l_txn_line_detail_tbl.FIRST .. l_txn_line_detail_tbl.LAST
4543 	 LOOP
4544 	   IF l_txn_line_detail_tbl(j).txn_line_detail_id = p_txn_line_detail_tbl(i).txn_line_detail_id
4545 	   THEN
4546 	      ---This txn line already exists in p_txn_line_detail_tbl
4547 	      ---so copy it from p_txn_line_detail_tbl
4548               l_txn_line_detail_tbl(j) := p_txn_line_detail_tbl(i) ;
4549 	      l_txn_dtl_line_found := TRUE ;
4550 	      EXIT ;
4551            END IF ;
4552 	 END LOOP ;
4553         END IF ;
4554 	 IF NOT l_txn_dtl_line_found
4555 	 THEN
4556 	   ---apend at the end of the table
4557            l_index := NVL(l_txn_line_detail_tbl.LAST,0) + 1 ;
4558            l_txn_line_detail_tbl(l_index) := p_txn_line_detail_tbl(i) ;
4559          END IF ;
4560        END LOOP ;
4561 
4562     /* Process the instance_relationship */
4563     IF x_txn_ii_rltns_tbl.count > 0
4564     THEN
4565       FOR j in x_txn_ii_rltns_tbl.FIRST..x_txn_ii_rltns_tbl.LAST LOOP
4566 
4567 
4568         ---Added (Start) for m-to-m enhancements
4569         --04/24 added 'CONNECTED-TO' and did changes for
4570         --subject_type and object_type.
4571         -- process only these relations at this time
4572 
4573         rltns_xfaced_to_IB(x_txn_ii_rltns_tbl(j),
4574                           x_xface_to_IB_flag,x_return_status) ;
4575 
4576            IF x_return_status <> fnd_api.g_ret_sts_success
4577            THEN
4578              raise fnd_api.g_exc_error;
4579            END IF;
4580 
4581 
4582         ---Added (End) for m-to-m enhancements
4583 
4584         IF x_txn_ii_rltns_tbl(j).relationship_type_code
4585            IN ('COMPONENT-OF', 'REPLACED-BY', 'REPLACEMENT-FOR', 'UPGRADED-FROM','CONNECTED-TO')
4586         THEN
4587 
4588          IF x_txn_ii_rltns_tbl(j).object_type='T'
4589          THEN
4590          IF x_xface_to_IB_flag = 'N'
4591          THEN
4592             --Does this relations already interfaced to IB?
4593             ---If yes igonre
4594           /* derive object instance_id  */
4595           IF l_txn_line_detail_tbl.count > 0 THEN
4596             FOR i IN l_txn_line_detail_tbl.FIRST..l_txn_line_detail_tbl.LAST
4597             LOOP
4598               IF l_txn_line_detail_tbl(i).txn_line_detail_id = x_txn_ii_rltns_tbl(j).object_id
4599               THEN
4600                 IF l_txn_line_detail_tbl(i).source_transaction_flag = 'Y' THEN
4601                   l_object_inst_id := l_txn_line_detail_tbl(i).changed_instance_id;
4602                 ELSE
4603                   l_parent_instance_id := l_txn_line_detail_tbl(i).parent_instance_id;
4604                   l_object_inst_id := l_txn_line_detail_tbl(i).instance_id;
4605                       /*  Added p_trx_rec for ER 2581101 */
4606                   l_nsrc_sub_type_id := p_txn_line_detail_tbl(i).sub_type_id;
4607                 END IF;
4608                 EXIT;
4609               END IF;
4610             END LOOP;
4611           END IF; ---x_xface_to_IB_flag = 'N'
4612           END IF ;
4613          ELSE
4614            l_object_inst_id := x_txn_ii_rltns_tbl(j).object_id ;
4615          END IF ; ---x_txn_ii_rltns_tbl(j).object_type='T'
4616 
4617          IF x_txn_ii_rltns_tbl(j).subject_type='T'
4618          THEN
4619          IF x_xface_to_IB_flag = 'N'
4620          THEN
4621           /* derive subject instance_id */
4622           IF l_txn_line_detail_tbl.count > 0
4623           THEN
4624             FOR i IN l_txn_line_detail_tbl.FIRST..l_txn_line_detail_tbl.LAST LOOP
4625               IF l_txn_line_detail_tbl(i).txn_line_detail_id = x_txn_ii_rltns_tbl(j).subject_id
4626               THEN
4627 
4628                 -- Begin Fix for Bug 2972082
4629                 debug('txn_line_detail_id  = '||to_char(p_txn_line_detail_tbl(i).txn_line_detail_id));
4630                 l_cascade_owner_flag := nvl(p_txn_line_detail_tbl(i).cascade_owner_flag,'N');
4631                 -- End fix for Bug 2972082
4632 
4633                 IF l_txn_line_detail_tbl(i).source_transaction_flag = 'Y' THEN
4634                   l_subject_inst_id := l_txn_line_detail_tbl(i).changed_instance_id;
4635                 ELSE
4636                   l_subject_inst_id    := l_txn_line_detail_tbl(i).instance_id;
4637                   l_parent_instance_id := l_txn_line_detail_tbl(i).parent_instance_id;
4638                       /*  Added p_trx_rec for ER 2581101 */
4639                   l_nsrc_sub_type_id := p_txn_line_detail_tbl(i).sub_type_id;
4640                 END IF;
4641                 EXIT;
4642               END IF;
4643             END LOOP;
4644           END IF;
4645          END IF ; --x_xface_to_IB_flag
4646        ELSE
4647            l_subject_inst_id := x_txn_ii_rltns_tbl(j).subject_id ;
4648        END IF ;
4649 
4650          debug('  Parent Instance ID  :'||l_parent_instance_id );
4651          debug('  Object Instance ID  :'||l_object_inst_id );
4652          debug('  Subject Instance ID :'||l_subject_inst_id );
4653          debug('  Relationship Code   :'||x_txn_ii_rltns_tbl(j).relationship_type_code);
4654          debug('  II Relationship ID  :'||x_txn_ii_rltns_tbl(j).csi_inst_relationship_id );
4655 
4656        ---Added (Start) for m-to-m enhancements
4657        ---05/13
4658 
4659        debug('  Parent Instance Id : '||l_parent_instance_id);
4660 
4661        IF l_subject_inst_id IS NOT NULL
4662        AND l_object_inst_id IS NOT NULL
4663        THEN
4664        ---Added (End) for m-to-m enhancements
4665          IF x_txn_ii_rltns_tbl(j).relationship_type_code IN ('COMPONENT-OF',
4666             'CONNECTED-TO')
4667          THEN
4668 
4669            IF NVL(x_txn_ii_rltns_tbl(j).csi_inst_relationship_id,fnd_api.g_miss_num ) <>
4670               fnd_api.g_miss_num
4671               AND
4672               (NVL(x_txn_ii_rltns_tbl(j).active_end_date,l_date ) > sysdate)
4673            THEN
4674 
4675              /* Build the table for updating the instance relationship */
4676 
4677              l_obj_ver_num := csi_utl_pkg.get_ii_obj_ver_num(
4678                             x_txn_ii_rltns_tbl(j).csi_inst_relationship_id);
4679 
4680              IF l_obj_ver_num = -1  THEN
4681                  RAISE fnd_api.g_exc_error;
4682              END IF;
4683 
4684              x_upd_ii_rltns_tbl(l_upd_ii).relationship_id    := x_txn_ii_rltns_tbl(j).csi_inst_relationship_id;
4685              x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := x_txn_ii_rltns_tbl(j).relationship_type_code;
4686              x_upd_ii_rltns_tbl(l_upd_ii).object_id := l_object_inst_id;
4687              x_upd_ii_rltns_tbl(l_upd_ii).subject_id := l_subject_inst_id;
4688              x_upd_ii_rltns_tbl(l_upd_ii).position_reference := x_txn_ii_rltns_tbl(j).position_reference;
4689              x_upd_ii_rltns_tbl(l_upd_ii).active_end_date := x_txn_ii_rltns_tbl(j).active_end_date;
4690              x_upd_ii_rltns_tbl(l_upd_ii).display_order := x_txn_ii_rltns_tbl(j).display_order;
4691              x_upd_ii_rltns_tbl(l_upd_ii).mandatory_flag := x_txn_ii_rltns_tbl(j).mandatory_flag;
4692              x_upd_ii_rltns_tbl(l_upd_ii).context := x_txn_ii_rltns_tbl(j).context;
4693              x_upd_ii_rltns_tbl(l_upd_ii).attribute1 := x_txn_ii_rltns_tbl(j).attribute1;
4694              x_upd_ii_rltns_tbl(l_upd_ii).attribute2 := x_txn_ii_rltns_tbl(j).attribute2;
4695              x_upd_ii_rltns_tbl(l_upd_ii).attribute3 := x_txn_ii_rltns_tbl(j).attribute3;
4696              x_upd_ii_rltns_tbl(l_upd_ii).attribute4 := x_txn_ii_rltns_tbl(j).attribute4;
4697              x_upd_ii_rltns_tbl(l_upd_ii).attribute5 := x_txn_ii_rltns_tbl(j).attribute5;
4698              x_upd_ii_rltns_tbl(l_upd_ii).attribute6 := x_txn_ii_rltns_tbl(j).attribute6;
4699              x_upd_ii_rltns_tbl(l_upd_ii).attribute7 := x_txn_ii_rltns_tbl(j).attribute7;
4700              x_upd_ii_rltns_tbl(l_upd_ii).attribute8 := x_txn_ii_rltns_tbl(j).attribute8;
4701              x_upd_ii_rltns_tbl(l_upd_ii).attribute9 := x_txn_ii_rltns_tbl(j).attribute9;
4702              x_upd_ii_rltns_tbl(l_upd_ii).attribute10 := x_txn_ii_rltns_tbl(j).attribute10;
4703              x_upd_ii_rltns_tbl(l_upd_ii).attribute11 := x_txn_ii_rltns_tbl(j).attribute11;
4704              x_upd_ii_rltns_tbl(l_upd_ii).attribute12 := x_txn_ii_rltns_tbl(j).attribute12;
4705              x_upd_ii_rltns_tbl(l_upd_ii).attribute13 := x_txn_ii_rltns_tbl(j).attribute13;
4706              x_upd_ii_rltns_tbl(l_upd_ii).attribute14 := x_txn_ii_rltns_tbl(j).attribute14;
4707              x_upd_ii_rltns_tbl(l_upd_ii).attribute15 := x_txn_ii_rltns_tbl(j).attribute15;
4708 
4709              -- Begin fix for Bug 2972082
4710              x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
4711              -- End fix for Bug 2972082
4712 
4713              x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := l_obj_ver_num;
4714 
4715              l_upd_ii := l_upd_ii + 1;
4716            ELSE
4717              /* Build the table for creating the new instance relationships */
4718 
4719              x_cre_ii_rltns_tbl(l_cre_ii).relationship_type_code := x_txn_ii_rltns_tbl(j).relationship_type_code;
4720              x_cre_ii_rltns_tbl(l_cre_ii).object_id  := l_object_inst_id ;
4721              x_cre_ii_rltns_tbl(l_cre_ii).subject_id := l_subject_inst_id;
4722              x_cre_ii_rltns_tbl(l_cre_ii).position_reference := x_txn_ii_rltns_tbl(j).position_reference;
4723              x_cre_ii_rltns_tbl(l_cre_ii).display_order := x_txn_ii_rltns_tbl(j).display_order ;
4724              x_cre_ii_rltns_tbl(l_cre_ii).mandatory_flag := x_txn_ii_rltns_tbl(j).mandatory_flag;
4725              x_cre_ii_rltns_tbl(l_cre_ii).active_start_date  := NVL(x_txn_ii_rltns_tbl(l_cre_ii).active_start_date, SYSDATE );
4726              x_cre_ii_rltns_tbl(l_cre_ii).active_end_date := NULL ;
4727              x_cre_ii_rltns_tbl(l_cre_ii).context     := x_txn_ii_rltns_tbl(j).context;
4728              x_cre_ii_rltns_tbl(l_cre_ii).attribute1  := x_txn_ii_rltns_tbl(j).attribute1;
4729              x_cre_ii_rltns_tbl(l_cre_ii).attribute2  := x_txn_ii_rltns_tbl(j).attribute2;
4730              x_cre_ii_rltns_tbl(l_cre_ii).attribute3  := x_txn_ii_rltns_tbl(j).attribute3;
4731              x_cre_ii_rltns_tbl(l_cre_ii).attribute4  := x_txn_ii_rltns_tbl(j).attribute4;
4732              x_cre_ii_rltns_tbl(l_cre_ii).attribute5  := x_txn_ii_rltns_tbl(j).attribute5;
4733              x_cre_ii_rltns_tbl(l_cre_ii).attribute6  := x_txn_ii_rltns_tbl(j).attribute6;
4734              x_cre_ii_rltns_tbl(l_cre_ii).attribute7  := x_txn_ii_rltns_tbl(j).attribute7;
4735              x_cre_ii_rltns_tbl(l_cre_ii).attribute8  := x_txn_ii_rltns_tbl(j).attribute8;
4736              x_cre_ii_rltns_tbl(l_cre_ii).attribute9  := x_txn_ii_rltns_tbl(j).attribute9;
4737              x_cre_ii_rltns_tbl(l_cre_ii).attribute10 := x_txn_ii_rltns_tbl(j).attribute10;
4738              x_cre_ii_rltns_tbl(l_cre_ii).attribute11 := x_txn_ii_rltns_tbl(j).attribute11;
4739              x_cre_ii_rltns_tbl(l_cre_ii).attribute12 := x_txn_ii_rltns_tbl(j).attribute12;
4740              x_cre_ii_rltns_tbl(l_cre_ii).attribute13 := x_txn_ii_rltns_tbl(j).attribute13;
4741              x_cre_ii_rltns_tbl(l_cre_ii).attribute14 := x_txn_ii_rltns_tbl(j).attribute14;
4742              x_cre_ii_rltns_tbl(l_cre_ii).attribute15 := x_txn_ii_rltns_tbl(j).attribute15;
4743 
4744              -- Begin fix for Bug 2972082
4745              x_cre_ii_rltns_tbl(l_cre_ii).cascade_ownership_flag := l_cascade_owner_flag;
4746              -- End fix for Bug 2972082
4747 
4748              x_cre_ii_rltns_tbl(l_cre_ii).object_version_number := fnd_api.g_miss_num;
4749 
4750              l_cre_ii := l_cre_ii + 1;
4751            END IF;
4752 
4753          ELSE
4754 
4755            /*  Added p_trx_rec for ER 2581101 */
4756            l_trx_rec.txn_sub_type_id := l_nsrc_sub_type_id;
4757 
4758           /*  Added p_trx_rec for ER 2581101 */
4759 
4760            amend_contracts(
4761              p_relationship_type_code => x_txn_ii_rltns_tbl(j).relationship_type_code,
4762              p_object_instance_id     => l_object_inst_id,
4763              p_subject_instance_id    => l_subject_inst_id,
4764              p_trx_rec                => l_trx_rec,
4765              x_return_status          => l_return_status);
4766 
4767            IF l_return_status <> fnd_api.g_ret_sts_success THEN
4768              raise fnd_api.g_exc_error;
4769            END IF;
4770 
4771            IF x_txn_ii_rltns_tbl(j).relationship_type_code = 'REPLACED-BY' THEN
4772               -- SUBJECT replaced by OBJECT
4773               -- OLD replaced by NEW
4774               --
4775               l_old_instance_id := l_subject_inst_id;
4776               l_new_instance_id := l_object_inst_id;
4777            ELSIF x_txn_ii_rltns_tbl(j).relationship_type_code = 'REPLACEMENT-FOR' THEN
4778               -- SUBJECT replacement for OBJECT
4779               -- NEW replacement for OLD
4780               --
4781               l_new_instance_id := l_subject_inst_id;
4782               l_old_instance_id := l_object_inst_id;
4783            ELSIF x_txn_ii_rltns_tbl(j).relationship_type_code = 'UPGRADED-FROM' THEN
4784               -- SUBJECT upgraded from OBJECT
4785               -- NEW upgraded from OLD
4786               --
4787               l_new_instance_id := l_subject_inst_id;
4788               l_old_instance_id := l_object_inst_id;
4789            ELSE
4790               debug(' Unable to re-assign subject/object instance id.');
4791            END IF;
4792            -----
4793            /* Replacement Enhancement for 11.5.10 */
4794            IF x_txn_ii_rltns_tbl(j).relationship_type_code IN ('REPLACED-BY', 'REPLACEMENT-FOR', 'UPGRADED-FROM')  THEN
4795 
4796               /* Check if item is in a configuration */
4797               FOR itm_cfg_rec in chk_item_config(l_old_instance_id) LOOP
4798                   l_config_instance := itm_cfg_rec.config_instance;
4799                   l_active_end_date := itm_cfg_rec.active_end_date;
4800                   EXIT;
4801               END LOOP;
4802 
4803               IF l_config_instance IS NULL THEN
4804                  l_config_instance := 'N';
4805               END IF;
4806 
4807               IF l_config_instance = 'Y' THEN
4808                  IF l_active_end_date is NOT NULL and l_parent_instance_id IS NULL THEN
4809                     l_config_instance := 'N';
4810                  END IF;
4811               END IF;
4812 
4813               debug('l_config_instance = '||l_config_instance);
4814               IF l_config_instance = 'Y' THEN
4815                  /* Check if item being replaced is in the same configuration */
4816                  BEGIN
4817                     SELECT 'x'
4818                     INTO   l_found
4819                     FROM   csi_ii_relationships
4820                     WHERE  subject_id = l_old_instance_id
4821                     AND    object_id  = l_parent_instance_id;
4822                  EXCEPTION
4823                     WHEN NO_DATA_FOUND THEN
4824                        fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
4825                        fnd_message.set_token('INSTANCE_ID',l_subject_inst_id);
4826                        fnd_msg_pub.add;
4827                        debug('Item being replaced belongs to a different configuration.');
4828                        RAISE fnd_api.g_exc_error;
4829                     WHEN OTHERS THEN
4830                        fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
4831                        fnd_message.set_token('INSTANCE_ID',l_subject_inst_id);
4832                        fnd_msg_pub.add;
4833                        debug('Item being replaced belongs to a different configuration.');
4834                        RAISE fnd_api.g_exc_error;
4835                  END;
4836 
4837                  /* Check item location */
4838                  BEGIN
4839                     SELECT location_type_code
4840                     INTO   l_location_type_code
4841                     FROM   csi_item_instances
4842                     WHERE  instance_id = l_old_instance_id;
4843                  EXCEPTION
4844                     WHEN OTHERS THEN
4845                        fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
4846                        fnd_message.set_token('INSTANCE_ID',l_subject_inst_id);
4847                        fnd_msg_pub.add;
4848                        debug('Item being replaced belongs to a different configuration.');
4849                        RAISE fnd_api.g_exc_error;
4850                  END;
4851                  debug('Item location_type_code = '||l_location_type_code);
4852 
4853                  IF l_location_type_code NOT IN ('HZ_PARTY_SITES','HZ_LOCATIONS') THEN
4854                     /* Check item history */
4855                     l_item_status := null;
4856 
4857                     FOR instance_rec in check_instance_history(l_old_instance_id)
4858                     LOOP
4859                        debug('instance_rec.location_type_code = '||instance_rec.new_location_type_code);
4860 
4861                        /* Check if item is an RMA or a REPAIR */
4862                        IF instance_rec.new_location_type_code = 'INVENTORY' THEN
4863                           FOR inst_rec in check_item_status_validity(l_old_instance_id)
4864                           LOOP
4865                              l_item_status := inst_rec.item_status;
4866                              EXIT;
4867                           END LOOP;
4868 
4869                           debug('l_item_status = '||l_item_status);
4870                           IF l_item_status is null THEN
4871                              fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
4872                              fnd_message.set_token('INSTANCE_ID',l_subject_inst_id);
4873                              fnd_msg_pub.add;
4874                              debug('Item is in INVENTORY and relationship is Active');
4875                              RAISE fnd_api.g_exc_error;
4876                           ELSE
4877                              /* Check if it is a repair */
4878                              IF l_old_instance_id = l_new_instance_id THEN
4879                                 l_item_status := 'REPAIR';
4880                              END IF;
4881                           END IF;
4882                           EXIT;
4883                        END IF;
4884                     END LOOP;
4885 
4886                     IF l_item_status IS NULL THEN
4887                        /* Check if it is a repair */
4888                        IF l_old_instance_id = l_new_instance_id THEN
4889                           l_item_status := 'REPAIR';
4890                        ELSE
4891                           l_item_status := 'NEW';
4892                        END IF;
4893                     END IF;
4894                  ELSE
4895                     /* Check if it is a repair */
4896                     IF l_old_instance_id = l_new_instance_id THEN
4897                        l_item_status := 'REPAIR';
4898                     ELSE
4899                        l_item_status := 'NEW';
4900                     END IF;
4901                  END IF;
4902                  l_transfer_components_flag :=  nvl(x_txn_ii_rltns_tbl(j).transfer_components_flag,'N');
4903                  debug('Transfer Component is '||l_transfer_components_flag);
4904                  debug('item status is '||l_item_status);
4905 
4906                  /* If tranfer component flag is 'Y' then do more checking*/
4907                  IF l_transfer_components_flag = 'Y' THEN
4908                     /* Check for csi_t_ii_relationships for BOM expl */
4909                     l_t_ii_count := 0;
4910                     FOR i in check_csi_t_ii_rel(l_new_instance_id)
4911                     LOOP
4912                        l_t_ii_count := l_t_ii_count + 1;
4913                     END LOOP;
4914 
4915                     IF l_t_ii_count > 0 THEN
4916                        l_transfer_components_flag := 'N';
4917                     END IF;
4918                  END IF;
4919 
4920                  debug('Trf Comp After BOM Check = '||l_transfer_components_flag);
4921                  IF l_transfer_components_flag = 'Y' THEN
4922                  debug('New Instance Id = '||to_char(l_new_instance_id));
4923                     /* Check for csi_ii_relationships(item being shipped) */
4924                     BEGIN
4925                        SELECT 'N'
4926                        INTO   l_transfer_components_flag
4927                        FROM   csi_ii_relationships
4928                        WHERE  object_id = l_new_instance_id
4929                        AND    relationship_type_code = 'COMPONENT-OF'
4930                        AND    active_end_date IS NULL;
4931                     EXCEPTION
4932                        WHEN NO_DATA_FOUND THEN
4933                           null;
4934                        WHEN TOO_MANY_ROWS THEN
4935                           l_transfer_components_flag := 'N';
4936                     END;
4937                  END IF;
4938                  debug('Trf Comp After CSI_II Check = '||l_transfer_components_flag);
4939 
4940                  IF l_transfer_components_flag = 'Y' THEN
4941                     /* Check for get_ib_trackable_children */
4942                     get_ib_trackable_children(
4943                        p_order_line_rec     => p_order_line_rec,
4944                        x_trackable_line_tbl => l_line_tbl,
4945                        x_return_status      => l_return_status);
4946 
4947                        IF l_return_status <> fnd_api.g_ret_sts_success THEN
4948                           RAISE fnd_api.g_exc_error;
4949                        END IF;
4950 
4951                        debug('IB Trackable Children Count :'||l_line_tbl.COUNT);
4952 
4953                        IF l_line_tbl.COUNT > 0 THEN
4954                           l_transfer_components_flag := 'N';
4955                        END IF;
4956                  END IF;
4957                  /* End of transfer component flag checking */
4958                  debug('Trf Comp After IB track Check = '||l_transfer_components_flag);
4959 
4960                  IF l_item_status = 'NEW' THEN
4961                     debug('Item is NEW');
4962                     /* Check if it is valid for replacement */
4963                     OPEN check_instance_status(l_old_instance_id);
4964                     FETCH check_instance_status into l_valid_instance_no;
4965 
4966                     IF check_instance_status%notfound THEN
4967                        close check_instance_status;
4968                        fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
4969                        fnd_message.set_token('INSTANCE_ID',l_old_instance_id);
4970                        fnd_msg_pub.add;
4971                        debug('Check instance status - The item being replaced is no longer valid.');
4972                        RAISE fnd_api.g_exc_error;
4973                     ELSE
4974                        close check_instance_status;
4975                     END IF;
4976 
4977                     BEGIN
4978                        SELECT relationship_id, object_version_number,
4979                               object_id, relationship_type_code
4980                        INTO   l_relationship_id, l_ii_rel_obj_ver_num,
4981                               l_expire_object_id, l_relationship_type_code
4982                        FROM   csi_ii_relationships
4983                        WHERE  subject_id = l_old_instance_id
4984                        AND    relationship_type_code = 'COMPONENT-OF'
4985                        AND    (active_end_date is null OR active_end_date > sysdate);
4986 
4987                        x_upd_ii_rltns_tbl(l_upd_ii).relationship_id    :=  l_relationship_id;
4988                        x_upd_ii_rltns_tbl(l_upd_ii).subject_id := l_new_instance_id;
4989                        x_upd_ii_rltns_tbl(l_upd_ii).object_id := l_expire_object_id;
4990                        x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := l_relationship_type_code;
4991                        x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := l_ii_rel_obj_ver_num;
4992                        x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
4993 
4994                        l_upd_ii := l_upd_ii + 1;
4995                     EXCEPTION
4996                        WHEN NO_DATA_FOUND THEN
4997                           fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
4998                           fnd_message.set_token('INSTANCE_ID',l_old_instance_id);
4999                           fnd_msg_pub.add;
5000                           debug('No data found - Item being replaced is no longer valid.');
5001                           RAISE fnd_api.g_exc_error;
5002                        WHEN OTHERS THEN
5003                           fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
5004                           fnd_message.set_token('INSTANCE_ID',l_old_instance_id);
5005                           fnd_msg_pub.add;
5006                           debug('Others - Item being replaced is no longer valid');
5007                           RAISE fnd_api.g_exc_error;
5008                     END;
5009 
5010                     /* Transfer the child components */
5011                     IF nvl(l_transfer_components_flag,'N') = 'Y' THEN
5012                        FOR i in new_transfer_comp(l_old_instance_id)
5013                        LOOP
5014                           IF i.relationship_id IS NOT NULL THEN
5015                              x_upd_ii_rltns_tbl(l_upd_ii).relationship_id    := i.relationship_id;
5016                              x_upd_ii_rltns_tbl(l_upd_ii).object_id := i.object_id;
5017                              x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := i.relationship_type_code;
5018                              x_upd_ii_rltns_tbl(l_upd_ii).subject_id := i.subject_id;
5019                              x_upd_ii_rltns_tbl(l_upd_ii).active_end_date := sysdate;
5020                              x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := i.object_version_number;
5021                              x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
5022                              l_upd_ii := l_upd_ii + 1;
5023 
5024                              x_cre_ii_rltns_tbl(l_cre_ii).relationship_type_code := 'COMPONENT-OF';
5025                              x_cre_ii_rltns_tbl(l_cre_ii).object_id  := l_new_instance_id;
5026                              x_cre_ii_rltns_tbl(l_cre_ii).subject_id := i.subject_id;
5027                              x_cre_ii_rltns_tbl(l_cre_ii).object_version_number := 1;
5028                              x_cre_ii_rltns_tbl(l_cre_ii).cascade_ownership_flag  := l_cascade_owner_flag;
5029                              l_cre_ii := l_cre_ii + 1;
5030                           END IF;
5031                        END LOOP;
5032                     END IF;
5033                  ELSE
5034                     debug('Item is in REPAIR/RMA');
5035                     /* Repair or RMA item */
5036                     BEGIN
5037                        SELECT relationship_id, object_version_number,
5038                               object_id, relationship_type_code
5039                        INTO   l_relationship_id, l_object_version_number,
5040                               l_object_id, l_relationship_type_code
5041                        FROM   csi_ii_relationships
5042                        WHERE  subject_id = l_old_instance_id
5043                        AND    object_id  = l_parent_instance_id
5044                        AND    relationship_type_code = 'COMPONENT-OF'
5045                        AND    (active_end_date IS NOT NULL OR active_end_date <= sysdate);
5046 
5047                        x_upd_ii_rltns_tbl(l_upd_ii).relationship_id    :=  l_relationship_id;
5048                        x_upd_ii_rltns_tbl(l_upd_ii).subject_id := l_new_instance_id;
5049                        x_upd_ii_rltns_tbl(l_upd_ii).object_id := l_object_id;
5050                        x_upd_ii_rltns_tbl(l_upd_ii).active_end_date := null;
5051                        x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := l_relationship_type_code;
5052                        x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := l_object_version_number;
5053                        x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
5054                        l_upd_ii := l_upd_ii + 1;
5055 
5056                        IF nvl(l_transfer_components_flag,'N') = 'Y' THEN
5057                           FOR i in rmarp_transfer_comp(l_old_instance_id)
5058                           LOOP
5059                              IF i.relationship_id IS NOT NULL THEN
5060                                 x_upd_ii_rltns_tbl(l_upd_ii).relationship_id    := i.relationship_id;
5061                                 x_upd_ii_rltns_tbl(l_upd_ii).object_id := i.object_id;
5062                                 x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := i.relationship_type_code;
5063                                 x_upd_ii_rltns_tbl(l_upd_ii).subject_id := i.subject_id;
5064                                 x_upd_ii_rltns_tbl(l_upd_ii).active_end_date := sysdate;
5065                                 x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := i.object_version_number;
5066                                 x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
5067                                 l_upd_ii := l_upd_ii + 1;
5068 
5069                                 x_upd_ii_rltns_tbl(l_upd_ii).relationship_type_code := 'COMPONENT-OF';
5070                                 x_upd_ii_rltns_tbl(l_upd_ii).object_id  := l_new_instance_id;
5071                                 x_upd_ii_rltns_tbl(l_upd_ii).subject_id := i.subject_id;
5072                                 x_upd_ii_rltns_tbl(l_upd_ii).object_version_number := 1;
5073                                 x_upd_ii_rltns_tbl(l_upd_ii).cascade_ownership_flag := l_cascade_owner_flag;
5074                                 l_upd_ii := l_upd_ii + 1;
5075 
5076                                 -- x_cre_ii_rltns_tbl(l_cre_ii).relationship_type_code := 'COMPONENT-OF';
5077                                 -- x_cre_ii_rltns_tbl(l_cre_ii).object_id  := l_new_instance_id;
5078                                 -- x_cre_ii_rltns_tbl(l_cre_ii).subject_id := i.subject_id;
5079                                 -- x_cre_ii_rltns_tbl(l_cre_ii).object_version_number := 1;
5080                                 -- l_cre_ii := l_cre_ii + 1;
5081                              END IF;
5082                           END LOOP;
5083                        END IF;
5084                     EXCEPTION
5085                        WHEN NO_DATA_FOUND THEN
5086                           fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
5087                           fnd_message.set_token('INSTANCE_ID',l_old_instance_id);
5088                           fnd_msg_pub.add;
5089                           debug('No data found - Item being replaced is no longer valid.');
5090                           RAISE fnd_api.g_exc_error;
5091                        WHEN OTHERS THEN
5092                           fnd_message.set_name('CSI','CSI_REPLACEMENT_TXN_INVALID');
5093                           fnd_message.set_token('INSTANCE_ID',l_old_instance_id);
5094                           fnd_msg_pub.add;
5095                           debug('Others - Item being replaced is no longer valid');
5096                           RAISE fnd_api.g_exc_error;
5097                     END;
5098                  END IF;
5099               END IF;
5100               debug('End of transfer components check');
5101            END IF; --  End of replacement enhancement
5102          END IF; -- component-of
5103        END IF ;----l_subject_id , object_id is NOT NULL
5104      END IF; -- component of, replaced by, replacement for, upgraded from relation
5105     END LOOP; -- end of inst relationship table loop
5106    END IF;-- end of inst relationship table count > 0
5107 
5108   EXCEPTION
5109      WHEN fnd_api.g_exc_error THEN
5110           x_return_status := fnd_api.g_ret_sts_error ;
5111      WHEN fnd_api.g_exc_unexpected_error THEN
5112           x_return_status := fnd_api.g_ret_sts_unexp_error ;
5113   END get_ii_relation_tbl;
5114 
5115 
5116   PROCEDURE rebuild_tbls(
5117     p_new_instance_id         IN NUMBER,
5118     x_upd_party_tbl           IN OUT NOCOPY csi_datastructures_pub.party_tbl,
5119     x_upd_party_acct_tbl      IN OUT NOCOPY csi_datastructures_pub.party_account_tbl,
5120     x_upd_org_units_tbl       IN OUT NOCOPY csi_datastructures_pub.organization_units_tbl,
5121     x_upd_ext_attrib_val_tbl  IN OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl,
5122     x_cre_org_units_tbl       IN OUT NOCOPY csi_datastructures_pub.organization_units_tbl,
5123     x_cre_ext_attrib_val_tbl  IN OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl,
5124     x_txn_ii_rltns_tbl        IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
5125     x_txn_line_detail_rec     IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_rec,
5126     x_return_status           OUT NOCOPY VARCHAR2)
5127   IS
5128 
5129    l_instance_party_id    NUMBER;
5130     l_instance_id          NUMBER;
5131     l_inst_pty_obj_ver_num NUMBER;
5132     l_ip_account_id        NUMBER;
5133     l_pty_acct_obj_ver_num NUMBER;
5134     l_instance_ou_id       NUMBER;
5135     l_ou_obj_ver_num       NUMBER;
5136     l_attrib_value_id      NUMBER;
5137     l_av_obj_ver_num       NUMBER;
5138     l_inst_pty_id          NUMBER;
5139 
5140     l_ou_found         boolean;
5141     l_cou_ind          binary_integer := 0;
5142     l_uou_ind          binary_integer := 0;
5143     l_upd_ou_tbl       csi_datastructures_pub.organization_units_tbl;
5144     l_cre_ou_tbl       csi_datastructures_pub.organization_units_tbl;
5145 
5146     l_return_status    varchar2(1) := fnd_api.g_ret_sts_success;
5147 
5148   BEGIN
5149 
5150     api_log('rebuild_tbls');
5151 
5152     x_return_status := fnd_api.g_ret_sts_success;
5153 
5154     l_instance_id := p_new_instance_id;
5155 
5156     IF x_upd_party_tbl.count > 0 THEN
5157       FOR i in x_upd_party_tbl.first..x_upd_party_tbl.last
5158       LOOP
5159 
5160         IF x_upd_party_tbl(i).relationship_type_code = 'OWNER'
5161         THEN
5162 
5163           BEGIN
5164             SELECT instance_id,
5165                    instance_party_id,
5166                    object_version_number
5167             INTO   x_upd_party_tbl(i).instance_id,
5168                    x_upd_party_tbl(i).instance_party_id,
5169                    x_upd_party_tbl(i).object_version_number
5170             FROM   csi_i_parties
5171             WHERE  instance_id = l_instance_id
5172             AND    relationship_type_code = 'OWNER'
5173             AND   (sysdate > nvl(active_start_date, sysdate -1)
5174                    OR
5175                    sysdate < nvl(active_end_date, sysdate +1) );
5176           EXCEPTION
5177             WHEN no_data_found THEN
5178               fnd_message.set_name('CSI','CSI_INT_INST_OWNER_MISSING');
5179               fnd_message.set_token('INSTANCE_ID',l_instance_id);
5180               fnd_msg_pub.add;
5181               raise fnd_api.g_exc_error;
5182           END;
5183 
5184           IF x_upd_party_acct_tbl.count > 0 THEN
5185             FOR j IN x_upd_party_acct_tbl.first..x_upd_party_acct_tbl.last
5186             LOOP
5187               -- Commented thecondition for 11.5.9 porting bug 3625218
5188               -- IF x_upd_party_acct_tbl(j).relationship_type_code = 'OWNER' THEN
5189                 x_upd_party_acct_tbl(j).instance_party_id := x_upd_party_tbl(i).instance_party_id;
5190               -- END IF;
5191             END LOOP;
5192           END IF;
5193 
5194         END IF;
5195 
5196       END LOOP;
5197     END IF;
5198 
5199     -- Rebuilding the Organization assignments
5200     IF x_upd_org_units_tbl.count > 0 THEN
5201       FOR l_upd_org in x_upd_org_units_tbl.first..x_upd_org_units_tbl.last
5202       LOOP
5203 
5204         l_upd_ou_tbl(l_upd_org) := x_upd_org_units_tbl(l_upd_org);
5205 
5206         csi_utl_pkg.get_org_assign(
5207           p_instance_id        => l_instance_id ,
5208           p_operating_unit_id  => x_upd_org_units_tbl(l_upd_org).operating_unit_id,
5209           p_rel_type_code      => x_upd_org_units_tbl(l_upd_org).relationship_type_code,
5210           x_instance_ou_id     => l_instance_ou_id,
5211           x_obj_version_number => l_ou_obj_ver_num,
5212           x_return_status      => x_return_status);
5213 
5214         IF NOT(x_return_status = fnd_api.g_ret_sts_success) THEN
5215           RAISE fnd_api.g_exc_error;
5216         END IF;
5217 
5218         l_upd_ou_tbl(l_upd_org).instance_ou_id        := l_instance_ou_id;
5219         l_upd_ou_tbl(l_upd_org).instance_id           := l_instance_id;
5220         l_upd_ou_tbl(l_upd_org).object_version_number := l_ou_obj_ver_num;
5221 
5222       END LOOP;
5223     END IF; -- l_upd_org_units_tbl.count > 0
5224 
5225     -- Rebuilding the extended attributes
5226     IF x_upd_ext_attrib_val_tbl.count > 0 THEN
5227       FOR l_upd_ext in x_upd_ext_attrib_val_tbl.first..x_upd_ext_attrib_val_tbl.last
5228       LOOP
5229 
5230         csi_utl_pkg.get_ext_attribs(
5231           p_instance_id        => l_instance_id ,
5232           p_attribute_id       => x_upd_ext_attrib_val_tbl(l_upd_ext).attribute_id,
5233           x_attribute_value_id => l_attrib_value_id,
5234           x_obj_version_number => l_av_obj_ver_num,
5235           x_return_status      => x_return_status);
5236 
5237         IF NOT(x_return_status = fnd_api.g_ret_sts_success) THEN
5238           RAISE fnd_api.g_exc_error;
5239         END IF;
5240 
5241         x_upd_ext_attrib_val_tbl(l_upd_ext).attribute_value_id    := l_attrib_value_id;
5242         x_upd_ext_attrib_val_tbl(l_upd_ext).instance_id           := l_instance_id;
5243         x_upd_ext_attrib_val_tbl(l_upd_ext).object_version_number := l_av_obj_ver_num;
5244 
5245       END LOOP;
5246     END IF; --x_upd_ext_attrib_val_tbl.count > 0
5247 
5248     -- Rebuilding the Create org assignment table
5249     IF x_cre_org_units_tbl.count > 0 THEN
5250       FOR l_cre_org in x_cre_org_units_tbl.first..x_cre_org_units_tbl.last
5251       LOOP
5252 
5253         l_ou_found := FALSE;
5254 
5255         x_cre_org_units_tbl(l_cre_org).instance_id := l_instance_id;
5256 
5257         BEGIN
5258           SELECT instance_ou_id ,
5259                  object_version_number
5260           INTO   x_cre_org_units_tbl(l_cre_org).instance_ou_id,
5261                  x_cre_org_units_tbl(l_cre_org).object_version_number
5262           FROM   csi_i_org_assignments
5263           WHERE  instance_id            = l_instance_id
5264           AND    relationship_type_code = x_cre_org_units_tbl(l_cre_org).relationship_type_code;
5265          -- and    operating_unit_id      = x_cre_org_units_tbl(l_cre_org).operating_unit_id; for 4293740
5266 
5267           l_ou_found := TRUE;
5268         EXCEPTION
5269           WHEN no_data_found THEN
5270             null;
5271           WHEN too_many_rows THEN
5272             null;
5273         END;
5274 
5275         IF l_ou_found THEN
5276           l_uou_ind := l_upd_ou_tbl.count + 1;
5277           l_upd_ou_tbl(l_uou_ind) := x_cre_org_units_tbl(l_cre_org);
5278         ELSE
5279           l_cou_ind := l_cre_ou_tbl.count + 1;
5280           l_cre_ou_tbl(l_cou_ind) := x_cre_org_units_tbl(l_cre_org);
5281         END IF;
5282 
5283       END LOOP;
5284     END IF; --l_cre_org_units_tbl.count > 0
5285 
5286     -- Rebuilding the Create extend arribs table
5287     IF x_cre_ext_attrib_val_tbl.count > 0 THEN
5288       FOR l_cre_ext in x_cre_ext_attrib_val_tbl.first..x_cre_ext_attrib_val_tbl.last
5289       LOOP
5290         x_cre_ext_attrib_val_tbl(l_cre_ext).instance_id  := l_instance_id;
5291       END LOOP;
5292     END IF; --l_cre_ext_attrib_val_tbl.count > 0
5293 
5294     -- Rebuilding the txn ii relationship table
5295     IF x_txn_ii_rltns_tbl.count > 0 THEN
5296       FOR l_txn_ii in x_txn_ii_rltns_tbl.first..x_txn_ii_rltns_tbl.last
5297       LOOP
5298         IF  ( x_txn_ii_rltns_tbl(l_txn_ii).subject_type = 'T' AND
5299 	      x_txn_ii_rltns_tbl(l_txn_ii).subject_id = x_txn_line_detail_rec.txn_line_detail_id)
5300 	THEN
5301           x_txn_line_detail_rec.instance_id := l_instance_id;
5302         ELSIF  ( x_txn_ii_rltns_tbl(l_txn_ii).object_type = 'T' AND
5303 	      x_txn_ii_rltns_tbl(l_txn_ii).object_id = x_txn_line_detail_rec.txn_line_detail_id)
5304 	THEN
5305           x_txn_line_detail_rec.instance_id := l_instance_id;
5306         END IF;
5307       END LOOP;
5308     END IF;
5309 
5310     x_cre_org_units_tbl := l_cre_ou_tbl;
5311     x_upd_org_units_tbl := l_upd_ou_tbl;
5312 
5313   EXCEPTION
5314     WHEN fnd_api.g_exc_error THEN
5315       x_return_status := fnd_api.g_ret_sts_error ;
5316     WHEN fnd_api.g_exc_unexpected_error THEN
5317       x_return_status := fnd_api.g_ret_sts_unexp_error ;
5318   END rebuild_tbls ;
5319 
5320 PROCEDURE cascade_txn_dtls
5321    (p_source_trx_id    IN  NUMBER,
5322     p_source_trx_table IN  VARCHAR2,
5323     p_ratio            IN  NUMBER,
5324     x_return_status    OUT NOCOPY VARCHAR2
5325     ) IS
5326 
5327   l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
5328   l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
5329 
5330   l_line_dtl_rec      csi_t_datastructures_grp.txn_line_detail_rec;
5331   l_line_dtl_tbl      csi_t_datastructures_grp.txn_line_detail_tbl;
5332   l_pty_dtl_tbl       csi_t_datastructures_grp.txn_party_detail_tbl;
5333   l_pty_acct_tbl      csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
5334   l_ii_rltns_tbl      csi_t_datastructures_grp.txn_ii_rltns_tbl;
5335   l_org_assgn_tbl     csi_t_datastructures_grp.txn_org_assgn_tbl;
5336   l_ext_attrib_tbl    csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
5337   l_csi_ea_tbl        csi_t_datastructures_grp.csi_ext_attribs_tbl;
5338   l_csi_eav_tbl       csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
5339   l_txn_systems_tbl   csi_t_datastructures_grp.txn_systems_tbl;
5340 
5341   x_msg_count         number;
5342   x_msg_data          varchar2(2000);
5343   l_end               integer;
5344   l_mod_value         NUMBER;
5345 
5346 CURSOR get_txn_dtls(p_src_trx_id    IN NUMBER,
5347                     p_src_trx_table IN VARCHAR2) IS
5348 SELECT a.txn_line_detail_id,
5349        a.quantity,
5350        a.transaction_line_id,
5351        a.transaction_system_id,
5352        a.csi_system_id
5353 FROM csi_t_txn_line_details a,
5354      csi_t_transaction_lines b
5355 WHERE a.transaction_line_id   = b.transaction_line_id
5356  AND  b.source_transaction_id = p_src_trx_id
5357  AND  b.source_transaction_table = p_src_trx_table
5358  AND  a.source_transaction_flag  = 'Y'
5359  AND  a.quantity > p_ratio;
5360 
5361 BEGIN
5362 
5363    api_log('cascade_txn_dtls');
5364 
5365      x_return_status := fnd_api.g_ret_sts_success;
5366 
5367     FOR C1 IN get_txn_dtls( p_source_trx_id,p_source_trx_table )LOOP
5368 
5369       l_txn_line_detail_query_rec.txn_line_detail_id := C1.txn_line_detail_id;
5370 
5371       csi_t_txn_details_grp.get_transaction_details(
5372             p_api_version                => 1.0,
5373             p_commit                     => fnd_api.g_false,
5374             p_init_msg_list              => fnd_api.g_true,
5375             p_validation_level           => fnd_api.g_valid_level_full,
5376             p_txn_line_query_rec         => l_txn_line_query_rec,
5377             p_txn_line_detail_query_rec  => l_txn_line_detail_query_rec,
5378             x_txn_line_detail_tbl        => l_line_dtl_tbl,
5379             p_get_parties_flag           => fnd_api.g_true,
5380             x_txn_party_detail_tbl       => l_pty_dtl_tbl,
5381             p_get_pty_accts_flag         => fnd_api.g_true,
5382             x_txn_pty_acct_detail_tbl    => l_pty_acct_tbl,
5383             p_get_ii_rltns_flag          => fnd_api.g_false,
5384             x_txn_ii_rltns_tbl           => l_ii_rltns_tbl,
5385             p_get_org_assgns_flag        => fnd_api.g_true,
5386             x_txn_org_assgn_tbl          => l_org_assgn_tbl,
5387             p_get_ext_attrib_vals_flag   => fnd_api.g_true,
5388             x_txn_ext_attrib_vals_tbl    => l_ext_attrib_tbl,
5389             p_get_csi_attribs_flag       => fnd_api.g_false,
5390             x_csi_ext_attribs_tbl        => l_csi_ea_tbl,
5391             p_get_csi_iea_values_flag    => fnd_api.g_false,
5392             x_csi_iea_values_tbl         => l_csi_eav_tbl,
5393             p_get_txn_systems_flag       => fnd_api.g_false,
5394             x_txn_systems_tbl            => l_txn_systems_tbl,
5395             x_return_status              => x_return_status,
5396             x_msg_count                  => x_msg_count,
5397             x_msg_data                   => x_msg_data);
5398 
5399           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5400             debug('Get_transaction_details  failed ');
5401             RAISE fnd_api.g_exc_error;
5402           END IF;
5403 
5404       debug('After getting txn details ');
5405       debug('l_line_dtl_tbl.count   = '||l_line_dtl_tbl.count);
5406       debug('l_pty_dtl_tbl.count    = '||l_pty_dtl_tbl.count);
5407       debug('l_pty_acct_tbl.count   = '||l_pty_acct_tbl.count);
5408       debug('l_ii_rltns_tbl.count   = '||l_ii_rltns_tbl.count);
5409       debug('l_org_assgn_tbl.count  = '||l_org_assgn_tbl.count);
5410       debug('l_ext_attrib_tbl.count = '||l_ext_attrib_tbl.count);
5411 
5412       l_end := l_line_dtl_tbl(1).quantity/p_ratio ;
5413 
5414       debug('l_end  ='||l_end );
5415 
5416       SELECT mod(l_line_dtl_tbl(1).quantity,p_ratio)
5417       INTO l_mod_value
5418       FROM dual;
5419 
5420       debug('l_line_dtl_tbl(1).quantity ='||l_line_dtl_tbl(1).quantity);
5421 
5422       debug('l_mod_value ='||l_mod_value);
5423       debug('p_ratio     ='||p_ratio);
5424 
5425           update csi_t_txn_line_details
5426           set quantity = p_ratio
5427           WHERE txn_line_detail_id = C1.txn_line_detail_id;
5428 
5429           debug('Converting the ids to index ');
5430 
5431             csi_t_utilities_pvt.convert_ids_to_index(
5432               px_line_dtl_tbl            => l_line_dtl_tbl,
5433               px_pty_dtl_tbl             => l_pty_dtl_tbl,
5434               px_pty_acct_tbl            => l_pty_acct_tbl,
5435               px_ii_rltns_tbl            => l_ii_rltns_tbl,
5436               px_org_assgn_tbl           => l_org_assgn_tbl,
5437               px_ext_attrib_tbl          => l_ext_attrib_tbl,
5438               px_txn_systems_tbl         => l_txn_systems_tbl);
5439 
5440       debug('l_line_dtl_rec.quantity ='||l_line_dtl_rec.quantity);
5441 
5442             l_line_dtl_rec                     := l_line_dtl_tbl(1);
5443             l_line_dtl_rec.txn_line_detail_id  := FND_API.G_MISS_NUM;
5444             l_line_dtl_rec.transaction_system_id := C1.transaction_system_id;
5445             l_line_dtl_rec.csi_system_id       := C1.csi_system_id;
5446             l_line_dtl_rec.quantity            := p_ratio ;
5447             l_line_dtl_rec.transaction_line_id := C1.transaction_line_id ;
5448 
5449       debug('Splitting the txn_line_dtls ');
5450 
5451 
5452       FOR l_index in 1..l_end-1
5453       LOOP
5454 
5455           debug('  line_dtl_tbl.count   = '||l_line_dtl_tbl.count);
5456           debug('  pty_dtl_tbl.count    = '||l_pty_dtl_tbl.count);
5457           debug('  pty_acct_tbl.count   = '||l_pty_acct_tbl.count);
5458           debug('  ii_rltns_tbl.count   = '||l_ii_rltns_tbl.count);
5459           debug('  org_assgn_tbl.count  = '||l_org_assgn_tbl.count);
5460           debug('  ext_attrib_tbl.count = '||l_ext_attrib_tbl.count);
5461 
5462             csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
5463               p_api_version              => 1.0,
5464               p_commit                   => fnd_api.g_false,
5465               p_init_msg_list            => fnd_api.g_true,
5466               p_validation_level         => fnd_api.g_valid_level_full,
5467               p_txn_line_dtl_index       => 1,
5468               p_txn_line_dtl_rec         => l_line_dtl_rec,
5469               px_txn_party_dtl_tbl       => l_pty_dtl_tbl,
5470               px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
5471               px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
5472               px_txn_org_assgn_tbl       => l_org_assgn_tbl,
5473               px_txn_ext_attrib_vals_tbl => l_ext_attrib_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('Error Splitting txn line detail ');
5480               RAISE fnd_api.g_exc_error;
5481             END IF;
5482 
5483           debug('Converting the ids to index ');
5484 
5485           l_line_dtl_tbl(1) := l_line_dtl_rec;
5486 
5487             csi_t_utilities_pvt.convert_ids_to_index(
5488               px_line_dtl_tbl            => l_line_dtl_tbl,
5489               px_pty_dtl_tbl             => l_pty_dtl_tbl,
5490               px_pty_acct_tbl            => l_pty_acct_tbl,
5491               px_ii_rltns_tbl            => l_ii_rltns_tbl,
5492               px_org_assgn_tbl           => l_org_assgn_tbl,
5493               px_ext_attrib_tbl          => l_ext_attrib_tbl,
5494               px_txn_systems_tbl         => l_txn_systems_tbl);
5495 
5496             l_line_dtl_rec                     := l_line_dtl_tbl(1);
5497             l_line_dtl_rec.txn_line_detail_id  := FND_API.G_MISS_NUM;
5498             l_line_dtl_rec.quantity            := p_ratio;
5499             l_line_dtl_rec.transaction_system_id := C1.transaction_system_id;
5500             l_line_dtl_rec.csi_system_id       := C1.csi_system_id;
5501             l_line_dtl_rec.transaction_line_id := C1.transaction_line_id ;
5502 
5503            debug('Txn line detail for splitted INTO qty of one Successfully');
5504 
5505       END LOOP;
5506 
5507     END LOOP;
5508 
5509 EXCEPTION
5510      WHEN fnd_api.g_exc_error THEN
5511           x_return_status := fnd_api.g_ret_sts_error ;
5512      WHEN fnd_api.g_exc_unexpected_error THEN
5513           x_return_status := fnd_api.g_ret_sts_unexp_error ;
5514 
5515 END cascade_txn_dtls;
5516 
5517   PROCEDURE derive_party_id(
5518     p_cust_acct_role_id IN  NUMBER,
5519     x_party_id          OUT NOCOPY NUMBER,
5520     x_return_status     OUT NOCOPY VARCHAR2)
5521   IS
5522   BEGIN
5523 
5524     api_log('derive_party_id');
5525 
5526     x_return_status := fnd_api.g_ret_sts_success;
5527 
5528     SELECT ship_rel.subject_id
5529     INTO   x_party_id
5530     FROM   hz_relationships       ship_rel,
5531            hz_cust_account_roles  ship_roles
5532     WHERE  ship_roles.cust_account_role_id = p_cust_acct_role_id
5533     AND    ship_rel.party_id               = ship_roles.party_id
5534     AND   subject_table_name               = 'HZ_PARTIES'
5535     AND   object_table_name                = 'HZ_PARTIES'
5536     AND   directional_flag                 = 'F';
5537 
5538   EXCEPTION
5539     WHEN no_data_found THEN
5540       fnd_message.set_name('CSI','CSI_INT_CUST_ROLEID_MISSING');
5541       fnd_message.set_token('CUST_ACCOUNT_ROLE_ID',p_cust_acct_role_id);
5542       fnd_msg_pub.add;
5543       x_return_status := fnd_api.g_ret_sts_error ;
5544   END derive_party_id;
5545 
5546   PROCEDURE get_party_owner(
5547     p_txn_line_detail_rec        IN  csi_t_datastructures_grp.txn_line_detail_rec,
5548     p_txn_party_detail_tbl       IN  csi_t_datastructures_grp.txn_party_detail_tbl,
5549     p_txn_pty_acct_dtl_tbl       IN  csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
5550     x_trx_sub_type_rec           IN  csi_order_ship_pub.txn_sub_type_rec,
5551     p_order_line_rec             IN  csi_order_ship_pub.order_line_rec,
5552     x_upd_party_tbl              OUT NOCOPY csi_datastructures_pub.party_tbl ,
5553     x_upd_party_acct_tbl         OUT NOCOPY csi_datastructures_pub.party_account_tbl,
5554     x_cre_party_tbl              OUT NOCOPY csi_datastructures_pub.party_tbl ,
5555     x_cre_party_acct_tbl         OUT NOCOPY csi_datastructures_pub.party_account_tbl,
5556     x_return_status              OUT NOCOPY VARCHAR2)
5557   IS
5558 
5559     l_debug_level              NUMBER;
5560     l_date                     DATE := TO_DATE('01/01/4712', 'MM/DD/YYYY');
5561     l_upd_pty                  NUMBER := 1;
5562     l_cre_pty                  NUMBER := 1;
5563     l_upd_pty_acct             NUMBER := 1;
5564     l_cre_pty_acct             NUMBER := 1;
5565     l_obj_ver_num              NUMBER;
5566     l_owner_pty_id             NUMBER;
5567     l_party_id                 NUMBER;
5568 
5569   BEGIN
5570 
5571     api_log('get_party_owner');
5572 
5573     x_return_status := fnd_api.g_ret_sts_success;
5574 
5575     /* get the debug level FROM the profile */
5576     l_debug_level := csi_t_gen_utility_pvt.g_debug_level;
5577 
5578    IF p_txn_party_detail_tbl.count > 0 THEN
5579       FOR j in p_txn_party_detail_tbl.FIRST..p_txn_party_detail_tbl.LAST LOOP
5580 
5581        IF (p_txn_line_detail_rec.txn_line_detail_id = p_txn_party_detail_tbl(j).txn_line_detail_id) AND
5582           (p_txn_party_detail_tbl(j).relationship_type_code = 'OWNER' )  AND
5583           ((NVL(p_txn_party_detail_tbl(j).active_end_date,l_date ) > sysdate) OR
5584           (p_txn_party_detail_tbl(j).active_end_date = FND_API.G_MISS_DATE ))
5585        THEN
5586 
5587          x_cre_party_tbl.delete;
5588          x_upd_party_tbl.delete;
5589          x_cre_party_acct_tbl.delete;
5590          x_upd_party_acct_tbl.delete;
5591 
5592          IF (NVL(p_txn_party_detail_tbl(j).instance_party_id, FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM) THEN
5593 
5594            x_cre_party_tbl(l_cre_pty).instance_party_id := FND_API.G_MISS_NUM;
5595            x_cre_party_tbl(l_cre_pty).instance_id := FND_API.G_MISS_NUM;
5596            x_cre_party_tbl(l_cre_pty).party_id    := p_txn_party_detail_tbl(j).party_source_id;
5597            x_cre_party_tbl(l_cre_pty).party_source_table := p_txn_party_detail_tbl(j).party_source_table;
5598            x_cre_party_tbl(l_cre_pty).relationship_type_code := p_txn_party_detail_tbl(j).relationship_type_code;
5599            x_cre_party_tbl(l_cre_pty).contact_flag    := p_txn_party_detail_tbl(j).contact_flag;
5600            x_cre_party_tbl(l_cre_pty).contact_ip_id   := p_txn_party_detail_tbl(j).contact_party_id;
5601            x_cre_party_tbl(l_cre_pty).active_end_date := p_txn_party_detail_tbl(j).active_end_date;
5602            x_cre_party_tbl(l_cre_pty).context     := p_txn_party_detail_tbl(j).context;
5603            x_cre_party_tbl(l_cre_pty).attribute1  := p_txn_party_detail_tbl(j).attribute1;
5604            x_cre_party_tbl(l_cre_pty).attribute2  := p_txn_party_detail_tbl(j).attribute2;
5605            x_cre_party_tbl(l_cre_pty).attribute3  := p_txn_party_detail_tbl(j).attribute3;
5606            x_cre_party_tbl(l_cre_pty).attribute4  := p_txn_party_detail_tbl(j).attribute4;
5607            x_cre_party_tbl(l_cre_pty).attribute5  := p_txn_party_detail_tbl(j).attribute5;
5608            x_cre_party_tbl(l_cre_pty).attribute6  := p_txn_party_detail_tbl(j).attribute6;
5609            x_cre_party_tbl(l_cre_pty).attribute7  := p_txn_party_detail_tbl(j).attribute7;
5610            x_cre_party_tbl(l_cre_pty).attribute8  := p_txn_party_detail_tbl(j).attribute8;
5611            x_cre_party_tbl(l_cre_pty).attribute9  := p_txn_party_detail_tbl(j).attribute9;
5612            x_cre_party_tbl(l_cre_pty).attribute10 := p_txn_party_detail_tbl(j).attribute10;
5613            x_cre_party_tbl(l_cre_pty).attribute11 := p_txn_party_detail_tbl(j).attribute11;
5614            x_cre_party_tbl(l_cre_pty).attribute12 := p_txn_party_detail_tbl(j).attribute12;
5615            x_cre_party_tbl(l_cre_pty).attribute13 := p_txn_party_detail_tbl(j).attribute13;
5616            x_cre_party_tbl(l_cre_pty).attribute14 := p_txn_party_detail_tbl(j).attribute14;
5617            x_cre_party_tbl(l_cre_pty).attribute15 := p_txn_party_detail_tbl(j).attribute15;
5618            x_cre_party_tbl(l_cre_pty).object_version_number :=  FND_API.G_MISS_NUM;
5619 
5620            l_cre_pty := l_cre_pty + 1;
5621 
5622          ELSE
5623 
5624            l_obj_ver_num := csi_utl_pkg.get_pty_obj_ver_num(
5625                               p_txn_party_detail_tbl(j).instance_party_id);
5626 
5627            IF l_obj_ver_num = -1 THEN
5628              RAISE fnd_api.g_exc_error;
5629            END IF;
5630 
5631            x_upd_party_tbl(l_upd_pty).instance_party_id := p_txn_party_detail_tbl(j).instance_party_id;
5632            x_upd_party_tbl(l_upd_pty).instance_id :=  p_txn_line_detail_rec.instance_id ;
5633            x_upd_party_tbl(l_upd_pty).party_id    :=  p_txn_party_detail_tbl(j).party_source_id;
5634            x_upd_party_tbl(l_upd_pty).party_source_table := p_txn_party_detail_tbl(j).party_source_table;
5635            x_upd_party_tbl(l_upd_pty).relationship_type_code := p_txn_party_detail_tbl(j).relationship_type_code;
5636            x_upd_party_tbl(l_upd_pty).contact_flag    := p_txn_party_detail_tbl(j).contact_flag;
5637            x_upd_party_tbl(l_upd_pty).contact_ip_id   := p_txn_party_detail_tbl(j).contact_party_id;
5638            x_upd_party_tbl(l_upd_pty).active_end_date := p_txn_party_detail_tbl(j).active_end_date;
5639            x_upd_party_tbl(l_upd_pty).context     := p_txn_party_detail_tbl(j).context;
5640            x_upd_party_tbl(l_upd_pty).attribute1  := p_txn_party_detail_tbl(j).attribute1;
5641            x_upd_party_tbl(l_upd_pty).attribute2  := p_txn_party_detail_tbl(j).attribute2;
5642            x_upd_party_tbl(l_upd_pty).attribute3  := p_txn_party_detail_tbl(j).attribute3;
5643            x_upd_party_tbl(l_upd_pty).attribute4  := p_txn_party_detail_tbl(j).attribute4;
5644            x_upd_party_tbl(l_upd_pty).attribute5  := p_txn_party_detail_tbl(j).attribute5;
5645            x_upd_party_tbl(l_upd_pty).attribute6  := p_txn_party_detail_tbl(j).attribute6;
5646            x_upd_party_tbl(l_upd_pty).attribute7  := p_txn_party_detail_tbl(j).attribute7;
5647            x_upd_party_tbl(l_upd_pty).attribute8  := p_txn_party_detail_tbl(j).attribute8;
5648            x_upd_party_tbl(l_upd_pty).attribute9  := p_txn_party_detail_tbl(j).attribute9;
5649            x_upd_party_tbl(l_upd_pty).attribute10 := p_txn_party_detail_tbl(j).attribute10;
5650            x_upd_party_tbl(l_upd_pty).attribute11 := p_txn_party_detail_tbl(j).attribute11;
5651            x_upd_party_tbl(l_upd_pty).attribute12 := p_txn_party_detail_tbl(j).attribute12;
5652            x_upd_party_tbl(l_upd_pty).attribute13 := p_txn_party_detail_tbl(j).attribute13;
5653            x_upd_party_tbl(l_upd_pty).attribute14 := p_txn_party_detail_tbl(j).attribute14;
5654            x_upd_party_tbl(l_upd_pty).attribute15 := p_txn_party_detail_tbl(j).attribute15;
5655            x_upd_party_tbl(l_upd_pty).object_version_number := l_obj_ver_num;
5656 
5657            l_upd_pty := l_upd_pty + 1;
5658 
5659          END IF; -- end if for instance_party_id is null
5660 
5661          IF p_txn_pty_acct_dtl_tbl.count > 0 THEN
5662            FOR k in p_txn_pty_acct_dtl_tbl.FIRST..p_txn_pty_acct_dtl_tbl.LAST LOOP
5663 
5664              IF (p_txn_pty_acct_dtl_tbl(k).txn_party_detail_id = p_txn_party_detail_tbl(j).txn_party_detail_id) AND
5665                 -- Commenting this condition (Porting fix for Bug 3625218)
5666                 -- (p_txn_pty_acct_dtl_tbl(k).relationship_type_code = 'OWNER') AND
5667                 ((NVL(p_txn_pty_acct_dtl_tbl(k).active_end_date, l_date ) > sysdate ) OR
5668                 (p_txn_pty_acct_dtl_tbl(k).active_end_date = FND_API.G_MISS_DATE))
5669              THEN
5670                IF NVL(p_txn_pty_acct_dtl_tbl(k).ip_account_id,FND_API.G_MISS_NUM)= FND_API.G_MISS_NUM THEN
5671                  x_cre_party_acct_tbl(l_cre_pty_acct).ip_account_id := FND_API.G_MISS_NUM;
5672                  x_cre_party_acct_tbl(l_cre_pty_acct).party_account_id := p_txn_pty_acct_dtl_tbl(k).account_id;
5673                  x_cre_party_acct_tbl(l_cre_pty_acct).relationship_type_code := p_txn_pty_acct_dtl_tbl(k).relationship_type_code;
5674                  x_cre_party_acct_tbl(l_cre_pty_acct).bill_to_address := p_txn_pty_acct_dtl_tbl(k).bill_to_address_id ;
5675                  x_cre_party_acct_tbl(l_cre_pty_acct).ship_to_address := p_txn_pty_acct_dtl_tbl(k).ship_to_address_id;
5676                  x_cre_party_acct_tbl(l_cre_pty_acct).instance_party_id := p_txn_party_detail_tbl(j).instance_party_id;
5677                  x_cre_party_acct_tbl(l_cre_pty_acct).active_start_date := FND_API.G_MISS_DATE ;
5678                  x_cre_party_acct_tbl(l_cre_pty_acct).active_end_date := p_txn_pty_acct_dtl_tbl(k).active_end_date;
5679                  x_cre_party_acct_tbl(l_cre_pty_acct).context    := p_txn_pty_acct_dtl_tbl(k).context        ;
5680                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute1 := p_txn_pty_acct_dtl_tbl(k).attribute1     ;
5681                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute2 := p_txn_pty_acct_dtl_tbl(k).attribute2     ;
5682                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute3 := p_txn_pty_acct_dtl_tbl(k).attribute3     ;
5683                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute4 := p_txn_pty_acct_dtl_tbl(k).attribute4     ;
5684                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute5 := p_txn_pty_acct_dtl_tbl(k).attribute5     ;
5685                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute6 := p_txn_pty_acct_dtl_tbl(k).attribute6     ;
5686                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute7 := p_txn_pty_acct_dtl_tbl(k).attribute7     ;
5687                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute8 := p_txn_pty_acct_dtl_tbl(k).attribute8     ;
5688                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute9 := p_txn_pty_acct_dtl_tbl(k).attribute9     ;
5689                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute10 := p_txn_pty_acct_dtl_tbl(k).attribute10    ;
5690                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute11 := p_txn_pty_acct_dtl_tbl(k).attribute11    ;
5691                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute12 := p_txn_pty_acct_dtl_tbl(k).attribute12    ;
5692                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute13 := p_txn_pty_acct_dtl_tbl(k).attribute13    ;
5693                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute14 := p_txn_pty_acct_dtl_tbl(k).attribute14    ;
5694                  x_cre_party_acct_tbl(l_cre_pty_acct).attribute15 := p_txn_pty_acct_dtl_tbl(k).attribute15    ;
5695                  x_cre_party_acct_tbl(l_cre_pty_acct).object_version_number := l_obj_ver_num;
5696                  x_cre_party_acct_tbl(l_cre_pty_acct).parent_tbl_index   := 1;
5697                  l_cre_pty_acct := l_cre_pty_acct + 1;
5698                ELSE
5699                  x_upd_party_acct_tbl(l_upd_pty_acct).ip_account_id := FND_API.G_MISS_NUM;
5700                  x_upd_party_acct_tbl(l_upd_pty_acct).party_account_id := p_txn_pty_acct_dtl_tbl(k).account_id;
5701                  x_upd_party_acct_tbl(l_upd_pty_acct).relationship_type_code := p_txn_pty_acct_dtl_tbl(k).relationship_type_code;
5702                  x_upd_party_acct_tbl(l_upd_pty_acct).bill_to_address := p_txn_pty_acct_dtl_tbl(k).bill_to_address_id ;
5703                  x_upd_party_acct_tbl(l_upd_pty_acct).ship_to_address := p_txn_pty_acct_dtl_tbl(k).ship_to_address_id;
5704                  x_upd_party_acct_tbl(l_upd_pty_acct).instance_party_id := p_txn_party_detail_tbl(j).instance_party_id;
5705                  x_upd_party_acct_tbl(l_upd_pty_acct).active_start_date := FND_API.G_MISS_DATE ;
5706                  x_upd_party_acct_tbl(l_upd_pty_acct).active_end_date := p_txn_pty_acct_dtl_tbl(k).active_end_date;
5707                  x_upd_party_acct_tbl(l_upd_pty_acct).context := p_txn_pty_acct_dtl_tbl(k).context        ;
5708                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute1 := p_txn_pty_acct_dtl_tbl(k).attribute1     ;
5709                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute2 := p_txn_pty_acct_dtl_tbl(k).attribute2     ;
5710                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute3 := p_txn_pty_acct_dtl_tbl(k).attribute3     ;
5711                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute4 := p_txn_pty_acct_dtl_tbl(k).attribute4     ;
5712                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute5 := p_txn_pty_acct_dtl_tbl(k).attribute5     ;
5713                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute6 := p_txn_pty_acct_dtl_tbl(k).attribute6     ;
5714                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute7 := p_txn_pty_acct_dtl_tbl(k).attribute7     ;
5715                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute8 := p_txn_pty_acct_dtl_tbl(k).attribute8     ;
5716                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute9 := p_txn_pty_acct_dtl_tbl(k).attribute9     ;
5717                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute10 := p_txn_pty_acct_dtl_tbl(k).attribute10    ;
5718                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute11 := p_txn_pty_acct_dtl_tbl(k).attribute11    ;
5719                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute12 := p_txn_pty_acct_dtl_tbl(k).attribute12    ;
5720                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute13 := p_txn_pty_acct_dtl_tbl(k).attribute13    ;
5721                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute14 := p_txn_pty_acct_dtl_tbl(k).attribute14    ;
5722                  x_upd_party_acct_tbl(l_upd_pty_acct).attribute15 := p_txn_pty_acct_dtl_tbl(k).attribute15    ;
5723                  x_upd_party_acct_tbl(l_upd_pty_acct).object_version_number := l_obj_ver_num;
5724                  x_upd_party_acct_tbl(l_upd_pty_acct).parent_tbl_index   := 1;
5725                  l_upd_pty_acct := l_upd_pty_acct + 1;
5726                END IF;
5727              END IF;
5728            END LOOP;
5729          END IF;
5730        END IF;
5731      END LOOP;
5732    END IF;
5733 
5734   EXCEPTION
5735     WHEN fnd_api.g_exc_error THEN
5736       x_return_status := fnd_api.g_ret_sts_error ;
5737     WHEN fnd_api.g_exc_unexpected_error THEN
5738       x_return_status := fnd_api.g_ret_sts_unexp_error ;
5739   END get_party_owner;
5740 
5741 
5742   /* -------------------------------------------------------------------- */
5743   /* This routine converts the instance header table to instance table .  */
5744   /* We need to do this because the get_item_instances returns the header */
5745   /* table AND we operate on the instance table.                          */
5746   /* -------------------------------------------------------------------- */
5747 
5748   PROCEDURE make_non_header_tbl(
5749     p_instance_header_tbl IN  csi_datastructures_pub.instance_header_tbl,
5750     x_instance_tbl        OUT NOCOPY csi_datastructures_pub.instance_tbl,
5751     x_return_status       OUT NOCOPY varchar2)
5752   IS
5753     l_inst_tbl            csi_datastructures_pub.instance_tbl;
5754     l_inst_hdr_tbl        csi_datastructures_pub.instance_header_tbl;
5755   BEGIN
5756 
5757     x_return_status := fnd_api.g_ret_sts_success;
5758 
5759     api_log('make_non_header_tbl');
5760 
5761     l_inst_hdr_tbl := p_instance_header_tbl;
5762 
5763     IF l_inst_hdr_tbl.COUNT > 0 THEN
5764 
5765       FOR l_ind IN l_inst_hdr_tbl.FIRST .. l_inst_hdr_tbl.LAST
5766       LOOP
5767 
5768        l_inst_tbl(l_ind).instance_id           := l_inst_hdr_tbl(l_ind).instance_id;
5769        l_inst_tbl(l_ind).instance_number       := l_inst_hdr_tbl(l_ind).instance_number;
5770        l_inst_tbl(l_ind).external_reference    := l_inst_hdr_tbl(l_ind).external_reference;
5771        l_inst_tbl(l_ind).inventory_item_id     := l_inst_hdr_tbl(l_ind).inventory_item_id;
5772        l_inst_tbl(l_ind).inventory_revision    := l_inst_hdr_tbl(l_ind).inventory_revision;
5773        l_inst_tbl(l_ind).inv_master_organization_id := l_inst_hdr_tbl(l_ind).inv_master_organization_id;
5774        l_inst_tbl(l_ind).serial_number         := l_inst_hdr_tbl(l_ind).serial_number;
5775        l_inst_tbl(l_ind).mfg_serial_number_flag:= l_inst_hdr_tbl(l_ind).mfg_serial_number_flag;
5776        l_inst_tbl(l_ind).lot_number            := l_inst_hdr_tbl(l_ind).lot_number;
5777        l_inst_tbl(l_ind).quantity              := l_inst_hdr_tbl(l_ind).quantity;
5778        l_inst_tbl(l_ind).unit_of_measure       := l_inst_hdr_tbl(l_ind).unit_of_measure;
5779        l_inst_tbl(l_ind).accounting_class_code := l_inst_hdr_tbl(l_ind).accounting_class_code;
5780        l_inst_tbl(l_ind).instance_condition_id := l_inst_hdr_tbl(l_ind).instance_condition_id;
5781        l_inst_tbl(l_ind).instance_status_id    := l_inst_hdr_tbl(l_ind).instance_status_id;
5782        l_inst_tbl(l_ind).customer_view_flag    := l_inst_hdr_tbl(l_ind).customer_view_flag;
5783        l_inst_tbl(l_ind).merchant_view_flag    := l_inst_hdr_tbl(l_ind).merchant_view_flag;
5784        l_inst_tbl(l_ind).sellable_flag         := l_inst_hdr_tbl(l_ind).sellable_flag;
5785        l_inst_tbl(l_ind).system_id             := l_inst_hdr_tbl(l_ind).system_id;
5786        l_inst_tbl(l_ind).instance_type_code    := l_inst_hdr_tbl(l_ind).instance_type_code;
5787        l_inst_tbl(l_ind).active_start_date     := l_inst_hdr_tbl(l_ind).active_start_date;
5788        l_inst_tbl(l_ind).active_end_date       := l_inst_hdr_tbl(l_ind).active_end_date;
5789        l_inst_tbl(l_ind).location_type_code    := l_inst_hdr_tbl(l_ind).location_type_code;
5790        l_inst_tbl(l_ind).location_id           := l_inst_hdr_tbl(l_ind).location_id;
5791        l_inst_tbl(l_ind).inv_organization_id   := l_inst_hdr_tbl(l_ind).inv_organization_id;
5792        l_inst_tbl(l_ind).inv_subinventory_name := l_inst_hdr_tbl(l_ind).inv_subinventory_name;
5793        l_inst_tbl(l_ind).inv_locator_id        := l_inst_hdr_tbl(l_ind).inv_locator_id;
5794        l_inst_tbl(l_ind).pa_project_id         := l_inst_hdr_tbl(l_ind).pa_project_id;
5795        l_inst_tbl(l_ind).pa_project_task_id    := l_inst_hdr_tbl(l_ind).pa_project_task_id;
5796        l_inst_tbl(l_ind).in_transit_order_line_id := l_inst_hdr_tbl(l_ind).in_transit_order_line_id;
5797        l_inst_tbl(l_ind).wip_job_id            := l_inst_hdr_tbl(l_ind).wip_job_id;
5798        l_inst_tbl(l_ind).po_order_line_id      := l_inst_hdr_tbl(l_ind).po_order_line_id;
5799        l_inst_tbl(l_ind).last_oe_order_line_id := l_inst_hdr_tbl(l_ind).last_oe_order_line_id;
5800        l_inst_tbl(l_ind).last_oe_rma_line_id   := l_inst_hdr_tbl(l_ind).last_oe_rma_line_id;
5801        l_inst_tbl(l_ind).last_po_po_line_id    := l_inst_hdr_tbl(l_ind).last_po_po_line_id;
5802        l_inst_tbl(l_ind).last_oe_po_number     := l_inst_hdr_tbl(l_ind).last_oe_po_number;
5803        l_inst_tbl(l_ind).last_wip_job_id       := l_inst_hdr_tbl(l_ind).last_wip_job_id;
5804        l_inst_tbl(l_ind).last_pa_project_id    := l_inst_hdr_tbl(l_ind).last_pa_project_id;
5805        l_inst_tbl(l_ind).last_pa_task_id       := l_inst_hdr_tbl(l_ind).last_pa_task_id;
5806        l_inst_tbl(l_ind).last_oe_agreement_id  := l_inst_hdr_tbl(l_ind).last_oe_agreement_id;
5807        l_inst_tbl(l_ind).install_date          := l_inst_hdr_tbl(l_ind).install_date;
5808        l_inst_tbl(l_ind).manually_created_flag := l_inst_hdr_tbl(l_ind).manually_created_flag;
5809        l_inst_tbl(l_ind).return_by_date        := l_inst_hdr_tbl(l_ind).return_by_date;
5810        l_inst_tbl(l_ind).actual_return_date    := l_inst_hdr_tbl(l_ind).actual_return_date;
5811        l_inst_tbl(l_ind).creation_complete_flag:= l_inst_hdr_tbl(l_ind).creation_complete_flag;
5812        l_inst_tbl(l_ind).completeness_flag     := l_inst_hdr_tbl(l_ind).completeness_flag;
5813        l_inst_tbl(l_ind).context               := l_inst_hdr_tbl(l_ind).context;
5814        l_inst_tbl(l_ind).attribute1            := l_inst_hdr_tbl(l_ind).attribute1;
5815        l_inst_tbl(l_ind).attribute2            := l_inst_hdr_tbl(l_ind).attribute2;
5816        l_inst_tbl(l_ind).attribute3            := l_inst_hdr_tbl(l_ind).attribute3;
5817        l_inst_tbl(l_ind).attribute4            := l_inst_hdr_tbl(l_ind).attribute4;
5818        l_inst_tbl(l_ind).attribute5            := l_inst_hdr_tbl(l_ind).attribute5;
5819        l_inst_tbl(l_ind).attribute6            := l_inst_hdr_tbl(l_ind).attribute6;
5820        l_inst_tbl(l_ind).attribute7            := l_inst_hdr_tbl(l_ind).attribute7;
5821        l_inst_tbl(l_ind).attribute8            := l_inst_hdr_tbl(l_ind).attribute8;
5822        l_inst_tbl(l_ind).attribute9            := l_inst_hdr_tbl(l_ind).attribute9;
5823        l_inst_tbl(l_ind).attribute10           := l_inst_hdr_tbl(l_ind).attribute10;
5824        l_inst_tbl(l_ind).attribute11           := l_inst_hdr_tbl(l_ind).attribute11;
5825        l_inst_tbl(l_ind).attribute12           := l_inst_hdr_tbl(l_ind).attribute12;
5826        l_inst_tbl(l_ind).attribute13           := l_inst_hdr_tbl(l_ind).attribute13;
5827        l_inst_tbl(l_ind).attribute14           := l_inst_hdr_tbl(l_ind).attribute14;
5828        l_inst_tbl(l_ind).attribute15           := l_inst_hdr_tbl(l_ind).attribute15;
5829        l_inst_tbl(l_ind).object_version_number := l_inst_hdr_tbl(l_ind).object_version_number;
5830        l_inst_tbl(l_ind).instance_usage_code   := l_inst_hdr_tbl(l_ind).instance_usage_code;
5831        l_inst_tbl(l_ind).vld_organization_id   := l_inst_hdr_tbl(l_ind).vld_organization_id;
5832 
5833       END LOOP;
5834     END IF;
5835     x_instance_tbl := l_inst_tbl;
5836   END make_non_header_tbl;
5837 
5838   /* Adding this reoutine to make the decision whether to call the contracts or not
5839      if the source instance is a replacement component.
5840   */
5841   PROCEDURE call_contracts_chk(
5842     p_txn_line_detail_id   in  number,
5843     p_txn_ii_rltns_tbl     in  csi_t_datastructures_grp.txn_ii_rltns_tbl,
5844     x_call_contracts       OUT NOCOPY varchar2,
5845     x_return_status        OUT NOCOPY varchar2)
5846   IS
5847   BEGIN
5848 
5849     x_return_status  := fnd_api.g_ret_sts_success;
5850     x_call_contracts := fnd_api.g_true;
5851 
5852     api_log('call_contracts_chk');
5853 
5854     IF p_txn_ii_rltns_tbl.count > 0 THEN
5855       FOR l_ind IN p_txn_ii_rltns_tbl.FIRST .. p_txn_ii_rltns_tbl.LAST
5856       LOOP
5857         IF ((p_txn_ii_rltns_tbl(l_ind).subject_type = 'T'
5858 		AND p_txn_ii_rltns_tbl(l_ind).subject_id = p_txn_line_detail_id )
5859              OR
5860             (p_txn_ii_rltns_tbl(l_ind).object_type = 'T'
5861 		AND p_txn_ii_rltns_tbl(l_ind).object_id = p_txn_line_detail_id ))
5862         THEN
5863           IF p_txn_ii_rltns_tbl(l_ind).relationship_type_code IN
5864             ('REPLACED-BY','REPLACEMENT-FOR', 'UPGRADED-FROM') THEN
5865             x_call_contracts := fnd_api.g_false;
5866           END IF;
5867         END IF;
5868       END LOOP;
5869     END IF;
5870 
5871     debug('  l_contracts_flag :'||x_call_contracts);
5872 
5873   EXCEPTION
5874     WHEN fnd_api.g_exc_error THEN
5875       x_return_status := fnd_api.g_ret_sts_error;
5876   END call_contracts_chk;
5877 
5878 
5879   /* local debug dump routines */
5880   PROCEDURE dump_item_control_rec(
5881     p_item_control_rec IN csi_order_ship_pub.item_control_rec)
5882   IS
5883     l_rec              csi_order_ship_pub.item_control_rec;
5884   BEGIN
5885 
5886     l_rec := p_item_control_rec;
5887 
5888     debug('  inventory_item_id  : '||l_rec.inventory_item_id);
5889     debug('  organization_id    : '||l_rec.organization_id);
5890     debug('  primary_uom_code   : '||l_rec.primary_uom_code);
5891     debug('  serial_control_code: '||l_rec.serial_control_code);
5892     debug('  lot_control_code   : '||l_rec.lot_control_code);
5893     debug('  rev_control_code   : '||l_rec.revision_control_code);
5894     debug('  bom_item_type      : '||l_rec.bom_item_type);
5895     debug('  shippable_flag     : '||l_rec.shippable_flag);
5896     debug('  transactable_flag  : '||l_rec.transactable_flag);
5897     debug('  reservable_type    : '||l_rec.reservable_type);
5898     debug('  negative_bal_code  : '||l_rec.negative_balances_code);
5899 
5900   END dump_item_control_rec;
5901 
5902   PROCEDURE get_item_control_rec(
5903     p_mtl_txn_id        IN  number,
5904     x_item_control_rec  OUT NOCOPY csi_order_ship_pub.item_control_rec,
5905     x_return_status     OUT NOCOPY varchar2)
5906   IS
5907 
5908     l_item_control_rec  csi_order_ship_pub.item_control_rec;
5909 
5910   BEGIN
5911 
5912     api_log('get_item_control_rec');
5913 
5914     x_return_status := fnd_api.g_ret_sts_success;
5915 
5916     BEGIN
5917 
5918       SELECT inventory_item_id,
5919              organization_id
5920       INTO   l_item_control_rec.inventory_item_id,
5921              l_item_control_rec.organization_id
5922       FROM   mtl_material_transactions
5923       WHERE  transaction_id = p_mtl_txn_id;
5924 
5925     EXCEPTION
5926       WHEN no_data_found THEN
5927         fnd_message.set_name('CSI','CSI_NO_INVENTORY_RECORDS');
5928         fnd_message.set_token('MTL_TRANSACTION_ID',p_mtl_txn_id);
5929         fnd_msg_pub.add;
5930         RAISE fnd_api.g_exc_error;
5931 
5932     END;
5933 
5934     BEGIN
5935 
5936       SELECT serial_number_control_code,
5937              lot_control_code,
5938              revision_qty_control_code,
5939              location_control_code,
5940              bom_item_type,
5941              primary_uom_code,
5942              base_item_id,
5943              pick_components_flag,
5944              comms_nl_trackable_flag,
5945              reservable_type,
5946              shippable_item_flag,
5947              mtl_transactions_enabled_flag
5948       INTO   l_item_control_rec.serial_control_code,
5949              l_item_control_rec.lot_control_code,
5950              l_item_control_rec.revision_control_code,
5951              l_item_control_rec.locator_control_code,
5952              l_item_control_rec.bom_item_type,
5953              l_item_control_rec.primary_uom_code,
5954              l_item_control_rec.model_item_id,
5955              l_item_control_rec.pick_components_flag,
5956              l_item_control_rec.ib_trackable_flag,
5957              l_item_control_rec.reservable_type,
5958              l_item_control_rec.shippable_flag,
5959              l_item_control_rec.transactable_flag
5960       FROM   mtl_system_items
5961       WHERE  inventory_item_id = l_item_control_rec.inventory_item_id
5962       AND    organization_id   = l_item_control_rec.organization_id;
5963 
5964     EXCEPTION
5965       WHEN no_data_found THEN
5966         fnd_message.set_name('CSI', 'CSI_INT_ITEM_ID_MISSING');
5967         fnd_message.set_token('INVENTORY_ITEM_ID', l_item_control_rec.inventory_item_id);
5968         fnd_message.set_token('INV_ORGANZATION_ID', l_item_control_rec.organization_id);
5969         fnd_msg_pub.add;
5970         RAISE fnd_api.g_exc_error;
5971     END;
5972 
5973     BEGIN
5974       SELECT nvl(negative_inv_receipt_code,1)
5975       INTO   l_item_control_rec.negative_balances_code
5976       FROM   mtl_parameters
5977       WHERE  organization_id = l_item_control_rec.organization_id;
5978     END;
5979 
5980     dump_item_control_rec(
5981       p_item_control_rec => l_item_control_rec);
5982 
5983     x_item_control_rec := l_item_control_rec;
5984 
5985   EXCEPTION
5986     WHEN fnd_api.g_exc_error THEN
5987       x_return_status := fnd_api.g_ret_sts_error;
5988 
5989   END get_item_control_rec;
5990 
5991 
5992 ---Added (Start) for m-to-m enhancements
5993 -----------------------------------------------------------------------
5994 --- 05/16 added procedure to check whether the TXN relations
5995 ---are already interfaced to IB
5996 -----------------------------------------------------------------------
5997 
5998 PROCEDURE rltns_xfaced_to_IB (p_xtn_ii_rltns_rec IN csi_t_datastructures_grp.txn_ii_rltns_rec,
5999                               x_xface_to_IB_flag OUT NOCOPY VARCHAR2,
6000                               x_return_status OUT NOCOPY VARCHAR2)
6001 IS
6002 CURSOR get_instance_id (c_txn_line_detail_id IN NUMBER)
6003 IS
6004 SELECT instance_id
6005 FROM   csi_t_txn_line_details
6006 WHERE  txn_line_detail_id = c_txn_line_detail_id ;
6007 
6008 l_subject_instance_id NUMBER ;
6009 l_object_instance_id NUMBER ;
6010 l_relationship_query_rec  csi_datastructures_pub.relationship_query_rec ;
6011 l_ii_relationship_tbl csi_datastructures_pub.ii_relationship_tbl ;
6012 x_msg_count NUMBER ;
6013 x_msg_data  VARCHAR2 (2000);
6014 
6015 
6016 BEGIN
6017    x_xface_to_IB_flag := 'N' ;
6018    --get the isntances associated with the subject and object TLD's
6019    OPEN get_instance_id (p_xtn_ii_rltns_rec.subject_id) ;
6020    FETCH get_instance_id INTO l_subject_instance_id ;
6021    CLOSE get_instance_id ;
6022 
6023    OPEN get_instance_id (p_xtn_ii_rltns_rec.object_id) ;
6024    FETCH get_instance_id INTO l_object_instance_id ;
6025    CLOSE get_instance_id ;
6026 
6027    IF l_subject_instance_id IS NOT NULL
6028    AND l_object_instance_id IS NOT NULL
6029    THEN
6030 
6031       ---For connected-to only subject or object needs to be passed.
6032       IF p_xtn_ii_rltns_rec.relationship_type_code = 'CONNECTED-TO'
6033       THEN
6034          l_relationship_query_rec.object_id := l_object_instance_id ;
6035          l_relationship_query_rec.relationship_type_code := p_xtn_ii_rltns_rec.relationship_type_code ;
6036       ELSE
6037          l_relationship_query_rec.object_id := l_object_instance_id ;
6038          l_relationship_query_rec.subject_id := l_subject_instance_id ;
6039          l_relationship_query_rec.relationship_type_code := p_xtn_ii_rltns_rec.relationship_type_code ;
6040       END IF ;
6041 
6042       debug('l_relationship_query_rec.object_id :'|| l_relationship_query_rec.object_id);
6043       debug('l_relationship_query_rec.subject_id :'|| l_relationship_query_rec.subject_id);
6044       debug('l_relationship_query_rec.relationship_type_code :'|| l_relationship_query_rec.relationship_type_code);
6045 
6046     csi_ii_relationships_pub.get_relationships (
6047      p_api_version             => 1.0 ,
6048      p_commit                    => fnd_api.g_false,
6049      p_init_msg_list             => fnd_api.g_false,
6050      p_validation_level          => fnd_api.g_valid_level_full,
6051      p_relationship_query_rec    => l_relationship_query_rec,
6052      p_depth                     => NULL,
6053      p_time_stamp                => NULL ,
6054      p_active_relationship_only  => fnd_api.g_true,
6055      x_relationship_tbl          => l_ii_relationship_tbl,
6056      x_return_status             => x_return_status,
6057      x_msg_count                 => x_msg_count ,
6058      x_msg_data                  => x_msg_data) ;
6059 
6060      IF NOT(x_return_status = fnd_api.g_ret_sts_success)
6061      THEN
6062         debug('csi_ii_relationships_pub.get_relationships call failed :'||
6063 x_msg_data);
6064        RAISE fnd_api.g_exc_error;
6065      END IF;
6066      IF l_ii_relationship_tbl.count > 0
6067      THEN
6068         debug('Relations are already interfaced to IB');
6069         x_xface_to_IB_flag := 'Y' ;
6070      ELSE
6071       x_xface_to_IB_flag := 'N' ;
6072      END IF ;
6073 
6074    ELSE
6075       x_xface_to_IB_flag := 'N' ;
6076    END IF ;
6077 
6078 EXCEPTION
6079     WHEN FND_API.G_EXC_ERROR THEN
6080       x_return_status := FND_API.G_RET_STS_ERROR ;
6081        debug ('Unexpected error in  rltns_xfaced_to_IB '||SQLERRM);
6082     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6083        debug ('Unexpected error in  rltns_xfaced_to_IB '||SQLERRM);
6084       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6085 END rltns_xfaced_to_IB ;
6086 
6087 ---Added (End) for m-to-m enhancements
6088 
6089 ---Added (Start) for m-to-m enhancements
6090 -----------------------------------------------------------------------
6091 ---05/20 procedure builds the relations after copying/splitting
6092 ---between TLD's based on the user entered TLD relations
6093 -----------------------------------------------------------------------
6094 
6095 PROCEDURE build_txn_relations (
6096     p_txn_line_detail_tbl IN csi_t_datastructures_grp.txn_line_detail_tbl ,
6097     x_txn_ii_rltns_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
6098     x_return_status OUT NOCOPY VARCHAR2)
6099 IS
6100 l_orig_oe_tld NUMBER ;
6101 l_partner_oe_tld NUMBER ;
6102 l_relations_exists BOOLEAN := FALSE ;
6103 l_oe_txn_ii_rltns_tbl  csi_t_datastructures_grp.txn_ii_rltns_tbl;
6104 l_partner_tld VARCHAR2(10) ;
6105 l_ii_indx NUMBER ;
6106 l_index NUMBER ;
6107 l_src_txn_table VARCHAR2(100);
6108 l_orig_oe_src_txn_id NUMBER ;
6109 l_src_txn_id NUMBER ;
6110 l_src_txn_line_dtl_id NUMBER ;
6111 
6112 
6113 CURSOR source_txn_table_cur (c_txn_line_detail_id IN NUMBER)
6114 IS
6115 SELECT source_transaction_table, source_transaction_id
6116 FROM csi_t_txn_line_details a ,
6117      csi_t_transaction_lines b
6118 WHERE a.transaction_line_id = b.transaction_line_id
6119 AND   a.txn_line_detail_id = c_txn_line_detail_id ;
6120 
6121 
6122 CURSOR oe_tld_relns_cur (c_orig_oe_tld IN NUMBER)
6123 IS
6124 SELECT *
6125 FROM csi_t_ii_relationships
6126 WHERE (( subject_type = 'T' AND subject_id = c_orig_oe_tld)
6127        OR ( object_type = 'T' AND object_id = c_orig_oe_tld))
6128 AND NVL(active_end_date ,SYSDATE) >= SYSDATE ;
6129 
6130 CURSOR wsh_partner_tld_cur (c_partner_oe_tld IN NUMBER)
6131 IS
6132 ---For Shippable and Non-shippable Items--
6133 SELECT a.*
6134 FROM csi_t_txn_line_details a ,
6135      csi_t_transaction_lines b ,
6136      mtl_system_items_b c
6137 WHERE a.transaction_line_id = b.transaction_line_id
6138 AND   ((b.source_transaction_table = 'WSH_DELIVERY_DETAILS' AND c.shippable_item_flag = 'Y')
6139 OR     (b.source_transaction_table = 'OE_ORDER_LINES_ALL' AND c.shippable_item_flag = 'N'))
6140 AND   a.instance_id IS NOT NULL ---meaning it is already processed. or it is Non Source
6141 AND   a.source_txn_line_detail_id = c_partner_oe_tld
6142 AND   a.inventory_item_id = c.inventory_item_id
6143 AND   a.inv_organization_id = c.organization_id;
6144 
6145 BEGIN
6146    debug ('Begin : build_txn_relations');
6147 
6148    IF p_txn_line_detail_tbl.COUNT > 0 THEN
6149 
6150    FOR i IN p_txn_line_detail_tbl.FIRST .. p_txn_line_detail_tbl.LAST
6151    LOOP
6152 
6153    OPEN source_txn_table_cur(p_txn_line_detail_tbl(i).txn_line_detail_id) ;
6154    FETCH source_txn_table_cur  INTO l_src_txn_table , l_src_txn_id ;
6155    CLOSE source_txn_table_cur ;
6156 
6157    debug ('process status '|| p_txn_line_detail_tbl(i).processing_status);
6158 
6159    IF l_src_txn_table IN('WSH_DELIVERY_DETAILS' ,
6160                          'OE_ORDER_LINES_ALL')
6161    AND p_txn_line_detail_tbl(i).processing_status NOT IN
6162          ('UNPROCESSED','ERROR','SUBMIT','PROCESSED')
6163    THEN
6164      ---In Case of Non-Shippable Items Txn Detail Line may NOT
6165      ---have source_txn_line_detail_id at all
6166 -- This IF is introduced for bug 2814779 . The source TLD ID was g_miss_num for Models 'cause it wasn't getting properly earlier ..
6167 
6168      IF p_txn_line_detail_tbl(i).source_txn_line_detail_id = fnd_api.g_miss_num THEN
6169          l_src_txn_line_dtl_id := NULL;
6170      ELSIF p_txn_line_detail_tbl(i).source_txn_line_detail_id <> NULL THEN
6171          l_src_txn_line_dtl_id := p_txn_line_detail_tbl(i).source_txn_line_detail_id;
6172      END IF;
6173 
6174      l_orig_oe_tld := NVL(l_src_txn_line_dtl_id ,
6175                           p_txn_line_detail_tbl(i).txn_line_detail_id);
6176      debug ('TLD ID : '||p_txn_line_detail_tbl(i).txn_line_detail_id || ' User created TLD is '|| l_orig_oe_tld);
6177      l_index := 0 ;
6178 
6179      Begin
6180         Select source_transaction_id
6181         Into l_orig_oe_src_txn_id
6182         From csi_t_transaction_lines tl, csi_t_txn_line_details tld
6183         Where tld.transaction_line_id = tl.transaction_line_id
6184         And tld.txn_line_detail_id = l_orig_oe_tld;
6185      Exception when others Then
6186           fnd_message.set_name('FND', 'FND_GENERIC_MESSAGE');
6187           fnd_message.set_token('MESSAGE', substr(sqlerrm, 1, 240));
6188           fnd_msg_pub.add;
6189           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6190           raise FND_API.G_EXC_UNEXPECTED_ERROR ;
6191      End;
6192 
6193      IF l_src_txn_id <> l_orig_oe_src_txn_id THEN  --added this for bug 2795136
6194       FOR oe_tld_relns_rec IN oe_tld_relns_cur (l_orig_oe_tld)
6195       LOOP
6196         l_index := l_index + 1 ;
6197         IF oe_tld_relns_rec.subject_id = l_orig_oe_tld
6198         THEN
6199            l_partner_oe_tld :=  oe_tld_relns_rec.object_id ;
6200            l_partner_tld := 'OBJECT';
6201         ELSE
6202            l_partner_oe_tld :=  oe_tld_relns_rec.subject_id ;
6203            l_partner_tld := 'SUBJECT';
6204         END IF ; ---oe_tld_relns_rec.subject_id = l_orig_oe_tld
6205 
6206         debug ('Partner OE TLD ID : ' || l_partner_oe_tld);
6207 
6208         l_oe_txn_ii_rltns_tbl(l_index).txn_relationship_id := oe_tld_relns_rec.txn_relationship_id  ;
6209        l_oe_txn_ii_rltns_tbl(l_index).transaction_line_id := oe_tld_relns_rec.transaction_line_id;
6210        l_oe_txn_ii_rltns_tbl(l_index).csi_inst_relationship_id := oe_tld_relns_rec.csi_inst_relationship_id;
6211        l_oe_txn_ii_rltns_tbl(l_index).subject_id := oe_tld_relns_rec.subject_id ;
6212        l_oe_txn_ii_rltns_tbl(l_index).subject_type := oe_tld_relns_rec.subject_type ;
6213        l_oe_txn_ii_rltns_tbl(l_index).object_id := oe_tld_relns_rec.object_id ;
6214        l_oe_txn_ii_rltns_tbl(l_index).object_type := oe_tld_relns_rec.object_type ;
6215        l_oe_txn_ii_rltns_tbl(l_index).relationship_type_code := oe_tld_relns_rec.relationship_type_code ;
6216        l_oe_txn_ii_rltns_tbl(l_index).display_order := oe_tld_relns_rec.display_order ;
6217        l_oe_txn_ii_rltns_tbl(l_index).position_reference := oe_tld_relns_rec.position_reference  ;
6218        l_oe_txn_ii_rltns_tbl(l_index).mandatory_flag := oe_tld_relns_rec.mandatory_flag ;
6219        l_oe_txn_ii_rltns_tbl(l_index).active_start_date := oe_tld_relns_rec.active_start_date  ;
6220        l_oe_txn_ii_rltns_tbl(l_index).active_end_date := oe_tld_relns_rec.active_end_date ;
6221        l_oe_txn_ii_rltns_tbl(l_index).context := oe_tld_relns_rec.context  ;
6222        l_oe_txn_ii_rltns_tbl(l_index).attribute1 := oe_tld_relns_rec.attribute1  ;
6223        l_oe_txn_ii_rltns_tbl(l_index).attribute2 := oe_tld_relns_rec.attribute2  ;
6224        l_oe_txn_ii_rltns_tbl(l_index).attribute3 := oe_tld_relns_rec.attribute3  ;
6225        l_oe_txn_ii_rltns_tbl(l_index).attribute4 := oe_tld_relns_rec.attribute4  ;
6226        l_oe_txn_ii_rltns_tbl(l_index).attribute5 := oe_tld_relns_rec.attribute5  ;
6227        l_oe_txn_ii_rltns_tbl(l_index).attribute6 := oe_tld_relns_rec.attribute6  ;
6228        l_oe_txn_ii_rltns_tbl(l_index).attribute7 := oe_tld_relns_rec.attribute7  ;
6229        l_oe_txn_ii_rltns_tbl(l_index).attribute8 := oe_tld_relns_rec.attribute8  ;
6230        l_oe_txn_ii_rltns_tbl(l_index).attribute9 := oe_tld_relns_rec.attribute9  ;
6231        l_oe_txn_ii_rltns_tbl(l_index).attribute10 := oe_tld_relns_rec.attribute10  ;
6232        l_oe_txn_ii_rltns_tbl(l_index).attribute11 := oe_tld_relns_rec.attribute11 ;
6233        l_oe_txn_ii_rltns_tbl(l_index).attribute12 := oe_tld_relns_rec.attribute12  ;
6234        l_oe_txn_ii_rltns_tbl(l_index).attribute13 := oe_tld_relns_rec.attribute13  ;
6235        l_oe_txn_ii_rltns_tbl(l_index).attribute14 := oe_tld_relns_rec.attribute14  ;
6236        l_oe_txn_ii_rltns_tbl(l_index).attribute15 := oe_tld_relns_rec.attribute15  ;
6237        l_oe_txn_ii_rltns_tbl(l_index).object_version_number  := oe_tld_relns_rec.object_version_number   ;
6238        l_oe_txn_ii_rltns_tbl(l_index).transfer_components_flag  := oe_tld_relns_rec.transfer_components_flag;
6239 
6240         FOR wsh_partner_tld_rec IN wsh_partner_tld_cur (l_partner_oe_tld)
6241         LOOP
6242           debug ('Inside wsh_partner_tld_cur');
6243          ---Copy from the relations from the original relations
6244          ---and then overwrite subject/object
6245          l_ii_indx := NVL(x_txn_ii_rltns_tbl.LAST,0)+ 1 ;
6246          x_txn_ii_rltns_tbl(l_ii_indx) := l_oe_txn_ii_rltns_tbl(1);
6247 
6248          IF l_partner_tld = 'SUBJECT'
6249          THEN
6250            x_txn_ii_rltns_tbl(l_ii_indx).subject_id := wsh_partner_tld_rec.txn_line_detail_id ;
6251            x_txn_ii_rltns_tbl(l_ii_indx).object_id := p_txn_line_detail_tbl(i).txn_line_detail_id ;
6252          ELSE
6253            x_txn_ii_rltns_tbl(l_ii_indx).object_id := wsh_partner_tld_rec.txn_line_detail_id ;
6254            x_txn_ii_rltns_tbl(l_ii_indx).subject_id := p_txn_line_detail_tbl(i).txn_line_detail_id ;
6255          END IF ; ---l_partner_tld = SUBJECT
6256            x_txn_ii_rltns_tbl(l_ii_indx).txn_relationship_id := fnd_api.g_miss_num ;
6257            x_txn_ii_rltns_tbl(l_ii_indx).object_version_number := 1;
6258         END LOOP ; --wsh_partner_tld_cur
6259 
6260           debug ('x_txn_ii_rltns_tbl.count :'|| x_txn_ii_rltns_tbl.count);
6261       END LOOP ; -- oe_tld_relns_cur
6262      END IF; -- src_txn_id check
6263    END IF ; --p_txn_line_detail_tbl(i).source_transaction_table
6264    END LOOP ; ---p_txn_line_detail_tbl.FIRST
6265    END IF;
6266 
6267    debug ('End : build_txn_relations');
6268 
6269 EXCEPTION
6270     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6271       debug (' Unexpected error in build_txn_relations '||SQLERRM);
6272       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6273     WHEN OTHERS
6274     THEN
6275       debug (' build_txn_relations failed '||SQLERRM);
6276       x_return_status := FND_API.G_RET_STS_ERROR ;
6277 END build_txn_relations ;
6278 ---Added (End) for m-to-m enhancements
6279 
6280 
6281 ---Added (Start) for m-to-m enhancements
6282 -------------------------------------------------------------------------------
6283 -- For the given TLD , this procedure gets all the immediate relations
6284 --associated with it. It also gets the details of the partner TLD's
6285 -------------------------------------------------------------------------------
6286 
6287 
6288 PROCEDURE get_partner_rltns (p_txn_line_detail_rec  IN csi_t_datastructures_grp.txn_line_detail_rec ,
6289     x_txn_ii_rltns_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
6290     x_txn_line_detail_tbl OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
6291     x_return_status OUT NOCOPY VARCHAR2)
6292 IS
6293 CURSOR txn_ii_relns_cur (c_txn_line_detail_id IN NUMBER)
6294 IS
6295 SELECT *
6296 FROM csi_t_ii_relationships
6297 WHERE (( subject_type = 'T' AND subject_id = c_txn_line_detail_id )
6298        OR (object_type = 'T' AND object_id = c_txn_line_detail_id ))
6299 AND NVL(active_end_date ,SYSDATE) >= SYSDATE ;
6300 
6301 l_txn_line_detail_query_rec  csi_t_datastructures_grp.txn_line_detail_query_rec ;
6302 l_txn_line_detail_tbl  csi_t_datastructures_grp.txn_line_detail_tbl ;
6303 x_txn_party_detail_tbl csi_t_datastructures_grp.txn_party_detail_tbl ;
6304 x_txn_pty_acct_detail_tbl  csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
6305 x_txn_org_assgn_tbl    csi_t_datastructures_grp.txn_org_assgn_tbl ;
6306 x_txn_ext_attrib_vals_tbl  csi_t_datastructures_grp.txn_ext_attrib_vals_tbl ;
6307 x_csi_ext_attribs_tbl  csi_t_datastructures_grp.csi_ext_attribs_tbl;
6308 x_csi_iea_values_tbl   csi_t_datastructures_grp.csi_ext_attrib_vals_tbl ;
6309 x_txn_systems_tbl      csi_t_datastructures_grp.txn_systems_tbl ;
6310 x_msg_count            NUMBER ;
6311 x_msg_data             VARCHAR2(2000);
6312 l_index                NUMBER := 0 ;
6313 l_indx                 NUMBER := 0;
6314 l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
6315 l_temp_txn_ii_rltns_tbl  csi_t_datastructures_grp.txn_ii_rltns_tbl ;
6316 
6317 BEGIN
6318    debug('Begin get_partner_rltns'|| p_txn_line_detail_rec.txn_line_detail_id );
6319    FOR txn_ii_relns_rec IN txn_ii_relns_cur(p_txn_line_detail_rec.txn_line_detail_id)
6320    LOOP
6321       l_txn_line_detail_query_rec.txn_line_detail_id := fnd_api.g_miss_num ;
6322       debug('Subject id : '|| txn_ii_relns_rec.subject_id);
6323       debug('object id : '|| txn_ii_relns_rec.object_id);
6324       l_index := l_index+1 ;
6325       debug('l_index :'|| l_index);
6326       x_txn_ii_rltns_tbl(l_index).txn_relationship_id := txn_ii_relns_rec.txn_relationship_id  ;
6327       x_txn_ii_rltns_tbl(l_index).transaction_line_id := txn_ii_relns_rec.transaction_line_id;
6328       x_txn_ii_rltns_tbl(l_index).csi_inst_relationship_id := txn_ii_relns_rec.csi_inst_relationship_id;
6329       x_txn_ii_rltns_tbl(l_index).subject_id := txn_ii_relns_rec.subject_id ;
6330       x_txn_ii_rltns_tbl(l_index).subject_type := txn_ii_relns_rec.subject_type ;
6331       x_txn_ii_rltns_tbl(l_index).object_id := txn_ii_relns_rec.object_id ;
6332       x_txn_ii_rltns_tbl(l_index).object_type := txn_ii_relns_rec.object_type ;
6333       x_txn_ii_rltns_tbl(l_index).relationship_type_code := txn_ii_relns_rec.relationship_type_code ;
6334       x_txn_ii_rltns_tbl(l_index).display_order := txn_ii_relns_rec.display_order ;
6335       x_txn_ii_rltns_tbl(l_index).position_reference := txn_ii_relns_rec.position_reference  ;
6336       x_txn_ii_rltns_tbl(l_index).mandatory_flag := txn_ii_relns_rec.mandatory_flag ;
6337       x_txn_ii_rltns_tbl(l_index).active_start_date := txn_ii_relns_rec.active_start_date  ;
6338       x_txn_ii_rltns_tbl(l_index).active_end_date := txn_ii_relns_rec.active_end_date ;
6339       x_txn_ii_rltns_tbl(l_index).context := txn_ii_relns_rec.context  ;
6340       x_txn_ii_rltns_tbl(l_index).attribute1 := txn_ii_relns_rec.attribute1  ;
6341       x_txn_ii_rltns_tbl(l_index).attribute2 := txn_ii_relns_rec.attribute2  ;
6342       x_txn_ii_rltns_tbl(l_index).attribute3 := txn_ii_relns_rec.attribute3  ;
6343       x_txn_ii_rltns_tbl(l_index).attribute4 := txn_ii_relns_rec.attribute4  ;
6344       x_txn_ii_rltns_tbl(l_index).attribute5 := txn_ii_relns_rec.attribute5  ;
6345       x_txn_ii_rltns_tbl(l_index).attribute6 := txn_ii_relns_rec.attribute6  ;
6346       x_txn_ii_rltns_tbl(l_index).attribute7 := txn_ii_relns_rec.attribute7  ;
6347       x_txn_ii_rltns_tbl(l_index).attribute8 := txn_ii_relns_rec.attribute8  ;
6348       x_txn_ii_rltns_tbl(l_index).attribute9 := txn_ii_relns_rec.attribute9  ;
6349       x_txn_ii_rltns_tbl(l_index).attribute10 := txn_ii_relns_rec.attribute10  ;
6350       x_txn_ii_rltns_tbl(l_index).attribute11 := txn_ii_relns_rec.attribute11 ;
6351       x_txn_ii_rltns_tbl(l_index).attribute12 := txn_ii_relns_rec.attribute12  ;
6352       x_txn_ii_rltns_tbl(l_index).attribute13 := txn_ii_relns_rec.attribute13  ;
6353       x_txn_ii_rltns_tbl(l_index).attribute14 := txn_ii_relns_rec.attribute14  ;
6354       x_txn_ii_rltns_tbl(l_index).attribute15 := txn_ii_relns_rec.attribute15  ;
6355       x_txn_ii_rltns_tbl(l_index).object_version_number  := txn_ii_relns_rec.object_version_number   ;
6356       x_txn_ii_rltns_tbl(l_index).transfer_components_flag := nvl(txn_ii_relns_rec.transfer_components_flag,'N');
6357 
6358       IF txn_ii_relns_rec.object_id = p_txn_line_detail_rec.txn_line_detail_id
6359       AND txn_ii_relns_rec.object_type = 'T'
6360       AND txn_ii_relns_rec.subject_type = 'T'
6361       THEN
6362          debug('p_txn_line_detail_rec.txn_line_detail_id is the Object ID :'||
6363              p_txn_line_detail_rec.txn_line_detail_id);
6364          l_txn_line_detail_query_rec.txn_line_detail_id := txn_ii_relns_rec.subject_id ;
6365       ELSIF txn_ii_relns_rec.subject_id = p_txn_line_detail_rec.txn_line_detail_id
6366       AND txn_ii_relns_rec.object_type = 'T'
6367       AND txn_ii_relns_rec.subject_type = 'T'
6368       THEN
6369          debug('p_txn_line_detail_rec.txn_line_detail_id is the Subject ID :'||
6370              p_txn_line_detail_rec.txn_line_detail_id);
6371          l_txn_line_detail_query_rec.txn_line_detail_id := txn_ii_relns_rec.object_id ;
6372       END IF ;
6373 
6374       ---get the txn line details
6375     csi_t_txn_details_grp.get_transaction_details(
6376      p_api_version          => 1.0,
6377     p_commit               => fnd_api.g_false,
6378     p_init_msg_list        => fnd_api.g_false,
6379     p_validation_level     => fnd_api.g_valid_level_full,
6380     p_txn_line_query_rec   => l_txn_line_query_rec ,
6381     p_txn_line_detail_query_rec   => l_txn_line_detail_query_rec,
6382     x_txn_line_detail_tbl  => l_txn_line_detail_tbl ,
6383     p_get_parties_flag     => fnd_api.g_false,
6384     x_txn_party_detail_tbl => x_txn_party_detail_tbl ,
6385     p_get_pty_accts_flag   => fnd_api.g_false,
6386     x_txn_pty_acct_detail_tbl  => x_txn_pty_acct_detail_tbl,
6387     p_get_ii_rltns_flag    => fnd_api.g_false,
6388     x_txn_ii_rltns_tbl     => l_temp_txn_ii_rltns_tbl,
6389     p_get_org_assgns_flag  => fnd_api.g_false,
6390     x_txn_org_assgn_tbl    => x_txn_org_assgn_tbl,
6391     p_get_ext_attrib_vals_flag  => fnd_api.g_false,
6392     x_txn_ext_attrib_vals_tbl => x_txn_ext_attrib_vals_tbl,
6393     p_get_csi_attribs_flag => fnd_api.g_false,
6394     x_csi_ext_attribs_tbl  => x_csi_ext_attribs_tbl,
6395     p_get_csi_iea_values_flag => fnd_api.g_false,
6396     x_csi_iea_values_tbl  => x_csi_iea_values_tbl ,
6397     p_get_txn_systems_flag => fnd_api.g_false ,
6398     x_txn_systems_tbl      => x_txn_systems_tbl ,
6399     x_return_status        => x_return_status,
6400     x_msg_count            => x_msg_count,
6401     x_msg_data             => x_msg_data);
6402 
6403     IF x_return_status <> fnd_api.g_ret_sts_success
6404     THEN
6405         RAISE fnd_api.g_exc_error;
6406     END IF;
6407 
6408     IF l_txn_line_detail_tbl.COUNT > 0 THEN
6409     FOR i IN l_txn_line_detail_tbl.FIRST .. l_txn_line_detail_tbl.LAST
6410     LOOP
6411       l_indx := NVL(x_txn_line_detail_tbl.LAST,0)+1 ;
6412       x_txn_line_detail_tbl(l_indx) := l_txn_line_detail_tbl(i) ;
6413     END LOOP ;
6414     END IF;
6415 
6416    END LOOP ; --txn_ii_relns_cur
6417       debug('End get_partner_relations');
6418 EXCEPTION
6419 WHEN OTHERS
6420 THEN
6421 x_return_status :=  FND_API.G_RET_STS_ERROR ;
6422 debug ('Error in get_partner_relations : '|| sqlerrm);
6423 END get_partner_rltns ;
6424 ---Added (End) for m-to-m enhancements
6425 
6426 
6427   /* -------------------------------------------------------------------- */
6428   /* This routine takes in a table of instances and split them in to each */
6429   /* The output is a splitted instance table. This is done to match the   */
6430   /* transaction details quantities to the instances                      */
6431   /* -------------------------------------------------------------------- */
6432 
6433   PROCEDURE split_instances(
6434     px_instance_tbl  IN OUT NOCOPY csi_datastructures_pub.instance_tbl,
6435     px_csi_txn_rec   IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
6436     x_return_status     OUT NOCOPY varchar2)
6437   IS
6438 
6439     l_n_instance_tbl    csi_datastructures_pub.instance_tbl;
6440     l_instance_tbl      csi_datastructures_pub.instance_tbl;
6441     l_o_instance_tbl    csi_datastructures_pub.instance_tbl;
6442     l_o_ind             binary_integer;
6443 
6444     l_return_status     varchar2(1) := fnd_api.g_ret_sts_success;
6445     l_msg_data          varchar2(512);
6446     l_msg_count         number;
6447 
6448   BEGIN
6449 
6450     x_return_status := fnd_api.g_ret_sts_success;
6451     api_log('split_instances');
6452 
6453     l_instance_tbl := px_instance_tbl;
6454     l_o_ind := 0;
6455 
6456     IF l_instance_tbl.count > 0 THEN
6457       FOR l_ind in l_instance_tbl.FIRST..l_instance_tbl.LAST
6458       LOOP
6459       --Added IF ELSE condition loop for bug5956694--
6460       IF l_instance_tbl(1).quantity > 1 and l_instance_tbl(1).serial_number is null THEN
6461         csi_t_gen_utility_pvt.dump_api_info(
6462           p_api_name => 'split_item_instance_lines',
6463           p_pkg_name => 'csi_item_instance_pvt');
6464 
6465         csi_item_instance_pvt.split_item_instance_lines(
6466           p_api_version            => 1.0,
6467           p_commit                 => fnd_api.g_false,
6468           p_init_msg_list          => fnd_api.g_true,
6469           p_validation_level       => fnd_api.g_valid_level_full,
6470           p_source_instance_rec    => l_instance_tbl(1),
6471           p_copy_ext_attribs       => fnd_api.g_true,
6472           p_copy_org_assignments   => fnd_api.g_true,
6473           p_copy_parties           => fnd_api.g_true,
6474           p_copy_accounts          => fnd_api.g_true,
6475           p_copy_asset_assignments => fnd_api.g_true,
6476           p_copy_pricing_attribs   => fnd_api.g_true,
6477           p_txn_rec                => px_csi_txn_rec,
6478           x_new_instance_tbl       => l_n_instance_tbl,
6479           x_return_status          => l_return_status,
6480           x_msg_count              => l_msg_count,
6481           x_msg_data               => l_msg_data);
6482 
6483         IF l_return_status <> fnd_api.g_ret_sts_success THEN
6484           debug('Error splitting the item instances for distribution.');
6485           RAISE fnd_api.g_exc_error;
6486         END IF;
6487       ELSE
6488         l_n_instance_tbl := l_instance_tbl;
6489       END IF;
6490       --End of fix for bug5956694--
6491 
6492         IF l_n_instance_tbl.COUNT > 0 THEN
6493           FOR l_ind IN l_n_instance_tbl.FIRST..l_n_instance_tbl.LAST
6494           LOOP
6495             l_o_ind := l_o_ind + 1;
6496             l_o_instance_tbl(l_o_ind) := l_n_instance_tbl(l_ind);
6497           END LOOP;
6498         END IF;
6499 
6500       END LOOP;
6501     END IF;
6502 
6503     px_instance_tbl := l_o_instance_tbl;
6504 
6505   EXCEPTION
6506     WHEN fnd_api.g_exc_error THEN
6507       x_return_status := fnd_api.g_ret_sts_error;
6508 
6509   END split_instances;
6510 
6511 
6512   /* ------------------------------------------------------------------- */
6513   /* This routine distributes the CHILD instances to the PARENT instance */
6514   /* in the model to component ratio determined from the oe line order   */
6515   /* quantities. This is to build the realtion between the model and its */
6516   /* children in the appropriate ratio                                   */
6517   /* ------------------------------------------------------------------- */
6518 
6519   PROCEDURE distribute_instances(
6520     p_quantity_ratio       IN     number,
6521     p_model_txn_line_rec   IN     csi_t_datastructures_grp.txn_line_rec,
6522     px_instance_tbl        IN OUT NOCOPY csi_datastructures_pub.instance_tbl,
6523     px_txn_ps_tbl          IN OUT NOCOPY csi_utl_pkg.txn_ps_tbl,
6524     x_return_status           OUT NOCOPY varchar2)
6525   IS
6526 
6527     l_txn_type_id           number := csi_order_ship_pub.g_txn_type_id;
6528 
6529     l_instance_tbl          csi_datastructures_pub.instance_tbl;
6530 
6531     l_line_dtl_rec          csi_t_datastructures_grp.txn_line_detail_rec;
6532     l_pty_dtl_tbl           csi_t_datastructures_grp.txn_party_detail_tbl;
6533     l_pty_acct_tbl          csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
6534     l_ii_rltns_tbl          csi_t_datastructures_grp.txn_ii_rltns_tbl;
6535     l_org_assgn_tbl         csi_t_datastructures_grp.txn_org_assgn_tbl;
6536     l_ext_attrib_tbl        csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
6537     l_txn_systems_tbl       csi_t_datastructures_grp.txn_systems_tbl;
6538 
6539     l_object_id             number;
6540     l_inst_ind              binary_integer;
6541 
6542     l_debug_level           NUMBER;
6543     l_return_status         varchar2(1) := fnd_api.g_ret_sts_success;
6544     l_msg_data              varchar2(512);
6545     l_msg_count             number;
6546 
6547   BEGIN
6548 
6549     x_return_status := fnd_api.g_ret_sts_success;
6550 
6551     api_log('distribute_instances');
6552 
6553     l_instance_tbl := px_instance_tbl;
6554 
6555     IF l_instance_tbl.COUNT > 0 THEN
6556       FOR l_ind in l_instance_tbl.FIRST..l_instance_tbl.LAST
6557       LOOP
6558 
6559         /* do a quick check to see if the shipping has not violated the
6560            quantity raito while splitting the instance */
6561         IF l_instance_tbl(l_ind).quantity  > p_quantity_ratio THEN
6562           fnd_message.set_name('CSI','CSI_INT_CHILD_RATIO_INVALID');
6563           fnd_message.set_token('CHILD_QTY',l_instance_tbl(l_ind).quantity);
6564           fnd_message.set_token('RATIO', p_quantity_ratio);
6565           fnd_msg_pub.add;
6566           debug ('The instance qty generated by the shipment interface '||
6567              l_instance_tbl(l_ind).quantity||' is greater than the MODEL/CHILD ratio '||
6568              p_quantity_ratio);
6569 
6570           RAISE fnd_api.g_exc_error;
6571         END IF;
6572 
6573         l_object_id := null;
6574 
6575         IF px_txn_ps_tbl.COUNT > 0 THEN
6576           FOR l_ps_ind IN px_txn_ps_tbl.FIRST ..px_txn_ps_tbl.LAST
6577           LOOP
6578             IF px_txn_ps_tbl(l_ps_ind).processed_flag = 'N' THEN
6579               IF l_instance_tbl(l_ind).quantity <= px_txn_ps_tbl(l_ps_ind).quantity_remaining
6580               THEN
6581 
6582                 px_txn_ps_tbl(l_ps_ind).quantity_remaining :=
6583                   px_txn_ps_tbl(l_ps_ind).quantity_remaining - l_instance_tbl(l_ind).quantity;
6584 
6585                 l_instance_tbl(l_ind).attribute15 := 'Y'; -- marking the redord as pricessed
6586 
6587                 IF px_txn_ps_tbl(l_ps_ind).quantity_remaining = 0 THEN
6588                   px_txn_ps_tbl(l_ps_ind).processed_flag := 'Y';
6589                 END IF;
6590 
6591                 l_object_id := px_txn_ps_tbl(l_ps_ind).txn_line_detail_id;
6592 
6593                 EXIT;
6594 
6595               END IF;
6596             END IF;
6597           END LOOP;
6598         END IF;
6599 
6600         IF l_object_id is not null THEN
6601 
6602           l_line_dtl_rec.txn_line_detail_id      := fnd_api.g_miss_num;
6603           l_line_dtl_rec.transaction_line_id     := p_model_txn_line_rec.transaction_line_id;
6604           l_line_dtl_rec.sub_type_id             := csi_order_ship_pub.g_dflt_sub_type_id;
6605           l_line_dtl_rec.processing_status       := 'IN_PROCESS';
6606           l_line_dtl_rec.source_transaction_flag := 'N';
6607           l_line_dtl_rec.inventory_item_id       := l_instance_tbl(l_ind).inventory_item_id;
6608           l_line_dtl_rec.inventory_revision      := l_instance_tbl(l_ind).inventory_revision;
6609 	  /* fix for bug 4941832 */
6610           l_line_dtl_rec.inv_organization_id     := l_instance_tbl(l_ind).vld_organization_id;
6611           l_line_dtl_rec.quantity                := l_instance_tbl(l_ind).quantity;
6612           l_line_dtl_rec.unit_of_measure         := l_instance_tbl(l_ind).unit_of_measure;
6613           l_line_dtl_rec.installation_date       := sysdate;
6614           l_line_dtl_rec.external_reference      := 'INTERFACE';
6615           l_line_dtl_rec.location_type_code      := l_instance_tbl(l_ind).location_type_code;
6616           l_line_dtl_rec.location_id             := l_instance_tbl(l_ind).location_id;
6617           l_line_dtl_rec.active_start_date       := sysdate;
6618           l_line_dtl_rec.preserve_detail_flag    := 'Y';
6619           l_line_dtl_rec.instance_exists_flag    := 'Y';
6620           l_line_dtl_rec.instance_id             := l_instance_tbl(l_ind).instance_id;
6621           l_line_dtl_rec.serial_number           := l_instance_tbl(l_ind).serial_number;
6622           l_line_dtl_rec.mfg_serial_number_flag  := l_instance_tbl(l_ind).mfg_serial_number_flag;
6623           l_line_dtl_rec.lot_number              := l_instance_tbl(l_ind).lot_number;
6624           l_line_dtl_rec.object_version_number   := 1.0;
6625 
6626           csi_t_txn_line_dtls_pvt.create_txn_line_dtls(
6627             p_api_version              => 1.0,
6628             p_commit                   => fnd_api.g_false,
6629             p_init_msg_list            => fnd_api.g_true,
6630             p_validation_level         => fnd_api.g_valid_level_full,
6631             p_txn_line_dtl_index       => 1,
6632             p_txn_line_dtl_rec         => l_line_dtl_rec,
6633             px_txn_party_dtl_tbl       => l_pty_dtl_tbl,
6634             px_txn_pty_acct_detail_tbl => l_pty_acct_tbl,
6635             px_txn_ii_rltns_tbl        => l_ii_rltns_tbl,
6636             px_txn_org_assgn_tbl       => l_org_assgn_tbl,
6637             px_txn_ext_attrib_vals_tbl => l_ext_attrib_tbl,
6638             x_return_status            => l_return_status,
6639             x_msg_count                => l_msg_count,
6640             x_msg_data                 => l_msg_data);
6641 
6642           IF l_return_status <> fnd_api.g_ret_sts_success THEN
6643             raise fnd_api.g_exc_error;
6644           END IF;
6645 
6646           -- build ii_rltns table
6647           l_ii_rltns_tbl(1).txn_relationship_id    :=  fnd_api.g_miss_num;
6648           l_ii_rltns_tbl(1).transaction_line_id    :=  p_model_txn_line_rec.transaction_line_id;
6649           l_ii_rltns_tbl(1).subject_id             :=  l_line_dtl_rec.txn_line_detail_id;
6650           l_ii_rltns_tbl(1).object_id              :=  l_object_id;
6651           l_ii_rltns_tbl(1).relationship_type_code :=  'COMPONENT-OF';
6652           l_ii_rltns_tbl(1).active_start_date      :=  sysdate;
6653 
6654           csi_t_txn_rltnshps_grp.create_txn_ii_rltns_dtls(
6655             p_api_version       => 1.0,
6656             p_commit            => fnd_api.g_false,
6657             p_init_msg_list     => fnd_api.g_true,
6658             p_validation_level  => fnd_api.g_valid_level_full,
6659             px_txn_ii_rltns_tbl => l_ii_rltns_tbl,
6660             x_return_status     => l_return_status,
6661             x_msg_count         => l_msg_count,
6662             x_msg_data          => l_msg_data);
6663 
6664           IF l_return_status <> fnd_api.g_ret_sts_success THEN
6665             debug('Error creating txn ii relation for the ATO/PTO Child');
6666             raise fnd_api.g_exc_error;
6667           END IF;
6668 
6669         END IF;
6670 
6671       END LOOP;
6672 
6673       /* loop thru the table to split the instance as needed for distribution*/
6674       l_inst_ind := 0;
6675       px_instance_tbl.DELETE;
6676       FOR l_ind in l_instance_tbl.FIRST..l_instance_tbl.LAST
6677       LOOP
6678 
6679         IF l_instance_tbl(l_ind).attribute15 <> 'Y' THEN
6680           l_inst_ind := l_inst_ind + 1;
6681           px_instance_tbl(l_inst_ind) := l_instance_tbl(l_ind);
6682         END IF;
6683 
6684       END LOOP;
6685 
6686     END IF;
6687 
6688   EXCEPTION
6689     WHEN fnd_api.g_exc_error THEN
6690       x_return_status := fnd_api.g_ret_sts_error;
6691   END distribute_instances;
6692 
6693   PROCEDURE query_immediate_children (
6694     p_header_id          IN  number,
6695     p_parent_line_id     IN  number,
6696     x_line_tbl           OUT NOCOPY oe_order_pub.line_tbl_type)
6697   IS
6698 
6699     l_line_rec  oe_order_pub.line_rec_type := oe_order_pub.g_miss_line_rec;
6700 
6701     CURSOR op_cur is
6702       SELECT line_id
6703       FROM   oe_order_lines_all
6704       WHERE  header_id       = p_header_id
6705       AND    link_to_line_id = p_parent_line_id
6706       ORDER BY line_number, shipment_number;
6707 
6708   BEGIN
6709 
6710     debug('Getting next level children for Line ID :'||p_parent_line_id);
6711 
6712     FOR op_rec IN op_cur
6713     LOOP
6714 
6715       IF op_rec.line_id <> p_parent_line_id THEN
6716 
6717         oe_line_util.query_row(
6718           p_line_id  => op_rec.line_id,
6719           x_line_rec => l_line_rec );
6720 
6721         x_line_tbl(x_line_tbl.COUNT + 1) := l_line_rec;
6722 
6723       END IF;
6724 
6725     END LOOP;
6726 
6727     debug('  Children count :'||x_line_tbl.COUNT);
6728 
6729   END query_immediate_children;
6730 
6731 
6732   /* --------------------------------------------------------------------- */
6733   /* This routine gets the next level trackable order line details for the */
6734   /* currently processed order line id(MODEL, CLASS, KIT)                  */
6735   /*                                                                       */
6736   /* Here is an example:                                                   */
6737   /*                           A (MODEL)                                   */
6738   /*                          / \                                          */
6739   /*            Non Trk (OC) B   C (OC) Trk                                */
6740   /*                        / \   \                                        */
6741   /*                       D   E   F                                       */
6742   /*  Both D and E are  trackable option items. In this example while      */
6743   /*  processing the Model (A) the relationship will be build between      */
6744   /*  A => C, A => D, A = E. Option class B will be ignored                */
6745   /* --------------------------------------------------------------------- */
6746 
6747   PROCEDURE get_config_children(
6748     p_header_id          IN  number,
6749     p_current_line_id    IN  number,
6750     p_om_vld_org_id      IN  number,
6751     x_trackable_line_tbl OUT NOCOPY oe_order_pub.line_tbl_type,
6752     x_return_status      OUT NOCOPY varchar2)
6753   IS
6754 
6755     l_line_tbl           oe_order_pub.line_tbl_type;
6756     l_line_tbl_nxt_lvl   oe_order_pub.line_tbl_type;
6757     l_line_tbl_temp      oe_order_pub.line_tbl_type;
6758     l_line_tbl_final     oe_order_pub.line_tbl_type;
6759 
6760     l_nxt_ind            binary_integer;
6761     l_final_ind          binary_integer;
6762 
6763     l_ib_trackable_flag  varchar2(1);
6764 
6765   BEGIN
6766 
6767     x_return_status := fnd_api.g_ret_sts_success;
6768     api_log('get_config_children');
6769 
6770     l_final_ind := 0;
6771 
6772     query_immediate_children (
6773       p_header_id       => p_header_id,
6774       p_parent_line_id  => p_current_line_id,
6775       x_line_tbl        => l_line_tbl);
6776 
6777     <<Next_Level>>
6778 
6779     l_line_tbl_nxt_lvl.delete;
6780     l_nxt_ind := 0;
6781 
6782     IF l_line_tbl.count > 0 THEN
6783 
6784       FOR l_ind IN l_line_tbl.FIRST .. l_line_tbl.LAST
6785       LOOP
6786 
6787         IF l_line_tbl(l_ind).item_type_code <> 'CONFIG' THEN
6788 
6789           SELECT nvl(msi.comms_nl_trackable_flag,'N')
6790           INTO   l_ib_trackable_flag
6791           FROM   mtl_system_items msi
6792           WHERE  msi.inventory_item_id = l_line_tbl(l_ind).inventory_item_id
6793           AND    msi.organization_id   = p_om_vld_org_id;
6794 
6795           /* if trackable populate it for the final out table */
6796           IF l_ib_trackable_flag = 'Y' THEN
6797 
6798             l_final_ind := l_final_ind + 1;
6799             l_line_tbl_final(l_final_ind) := l_line_tbl(l_ind);
6800 
6801           ELSE --[NOT Trackable]
6802 
6803             /* get the next level using this line ID as the parent */
6804 
6805             query_immediate_children (
6806               p_header_id       => l_line_tbl(l_ind).header_id,
6807               p_parent_line_id  => l_line_tbl(l_ind).line_id,
6808               x_line_tbl        => l_line_tbl_temp);
6809 
6810             IF l_line_tbl_temp.count > 0 THEN
6811               FOR l_temp_ind IN l_line_tbl_temp.FIRST .. l_line_tbl_temp.LAST
6812               LOOP
6813 
6814                 l_nxt_ind := l_nxt_ind + 1;
6815                 l_line_tbl_nxt_lvl (l_nxt_ind) := l_line_tbl_temp(l_temp_ind);
6816 
6817               END LOOP;
6818             END IF;
6819           END IF;
6820         END IF; -- <> CONFIG
6821       END LOOP;
6822 
6823       IF l_line_tbl_nxt_lvl.COUNT > 0 THEN
6824         l_line_tbl.DELETE;
6825         l_line_tbl := l_line_tbl_nxt_lvl;
6826         goto Next_Level;
6827       END IF;
6828 
6829     END IF;
6830 
6831     x_trackable_line_tbl := l_line_tbl_final;
6832 
6833   END get_config_children;
6834 
6835   PROCEDURE get_ib_trackable_children(
6836     p_order_line_rec     IN csi_order_ship_pub.order_line_rec,
6837     x_trackable_line_tbl OUT NOCOPY oe_order_pub.line_tbl_type,
6838     x_return_status      OUT NOCOPY varchar2)
6839   IS
6840     l_line_tbl           oe_order_pub.line_tbl_type;
6841     l_return_status      varchar2(1) := fnd_api.g_ret_sts_success;
6842   BEGIN
6843     x_return_status := fnd_api.g_ret_sts_success;
6844     api_log('get_ib_trackable_children');
6845     IF p_order_line_rec.item_type_code = 'CONFIG' THEN
6846       get_config_children(
6847         p_header_id          => p_order_line_rec.header_id,
6848         p_current_line_id    => p_order_line_rec.ato_line_id,
6849         p_om_vld_org_id      => p_order_line_rec.om_vld_org_id,
6850         x_trackable_line_tbl => l_line_tbl,
6851         x_return_status      => l_return_status);
6852       IF l_return_status <> fnd_api.g_ret_sts_success THEN
6853         RAISE fnd_api.g_exc_error;
6854       END IF;
6855     ELSE
6856       csi_order_fulfill_pub.get_ib_trackable_children(
6857         p_current_line_id    => p_order_line_rec.order_line_id,
6858         p_om_vld_org_id      => p_order_line_rec.om_vld_org_id,
6859         x_trackable_line_tbl => l_line_tbl,
6860         x_return_status      => l_return_status);
6861 
6862       IF l_return_status <> fnd_api.g_ret_sts_success THEN
6863         RAISE fnd_api.g_exc_error;
6864       END IF;
6865     END IF;
6866     x_trackable_line_tbl := l_line_tbl;
6867   EXCEPTION
6868     WHEN fnd_api.g_exc_error THEN
6869       x_return_status := fnd_api.g_ret_sts_error;
6870   END get_ib_trackable_children;
6871 
6872 
6873   PROCEDURE filter_processed_instances(
6874     p_order_line_id      IN     number,
6875     px_instance_tbl      IN OUT NOCOPY csi_datastructures_pub.instance_tbl,
6876     x_return_status         OUT NOCOPY varchar2)
6877   IS
6878     l_instance_tbl       csi_datastructures_pub.instance_tbl;
6879     l_i_ind              binary_integer := 0;
6880     l_processed          boolean        := FALSE;
6881 
6882     CURSOR tld_cur (p_ord_line_id IN number, p_instance_id IN number) IS
6883       SELECT 'X'
6884       FROM   csi_t_transaction_lines ctl,
6885              csi_t_txn_line_details  ctld
6886       WHERE  ctl.source_transaction_id    = p_ord_line_id
6887       AND    ctl.source_transaction_table = 'WSH_DELIVERY_DETAILS'
6888       AND    ctld.transaction_line_id     = ctl.transaction_line_id
6889       AND    nvl(ctld.source_transaction_flag,'N') = 'N'
6890       AND    ctld.instance_id             = p_instance_id
6891       AND    ctld.processing_status       = 'PROCESSED';
6892 
6893    --fix for bug4607042
6894     CURSOR rel_build_cur(p_instance_id IN NUMBER) IS
6895      SELECT 'X'
6896      FROM csi_ii_relationships
6897      WHERE subject_id = p_instance_id
6898      AND relationship_type_code = 'COMPONENT-OF'
6899      AND active_end_date IS NULL;
6900     --end of fix bug4607042
6901 
6902 
6903   BEGIN
6904     x_return_status := fnd_api.g_ret_sts_success;
6905     api_log('filter_processed_instances');
6906 
6907     debug('    instance_tbl count :'||px_instance_tbl.COUNT);
6908 
6909     IF px_instance_tbl.COUNT > 0 THEN
6910       FOR l_ind IN px_instance_tbl.FIRST .. px_instance_tbl.LAST
6911       LOOP
6912         l_processed := FALSE;
6913         FOR tld_rec IN tld_cur(p_order_line_id, px_instance_tbl(l_ind).instance_id)
6914         LOOP
6915           l_processed := TRUE;
6916           exit;
6917         END LOOP;
6918      --fix for bug4607042
6919         IF NOT (l_processed) THEN
6920         FOR rel_build_rec IN rel_build_cur(px_instance_tbl(l_ind).instance_id)
6921         LOOP
6922             l_processed := TRUE;
6923            exit;
6924         END LOOP;
6925         END IF;
6926     --end of fix bug4607042
6927         IF NOT(l_processed) THEN
6928           l_i_ind := l_i_ind + 1;
6929           l_instance_tbl(l_i_ind) := px_instance_tbl(l_ind);
6930         END IF;
6931       END LOOP;
6932       px_instance_tbl := l_instance_tbl;
6933       debug('    filtered instance_tbl count :'||px_instance_tbl.COUNT);
6934     END IF;
6935 
6936   END filter_processed_instances;
6937 
6938   PROCEDURE build_child_relation(
6939     p_order_line_rec     IN csi_order_ship_pub.order_line_rec,
6940     p_model_txn_line_rec IN csi_t_datastructures_grp.txn_line_rec,
6941     px_csi_txn_rec       IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
6942     x_return_status         OUT NOCOPY varchar2)
6943   IS
6944 
6945     l_inst_query_rec        csi_datastructures_pub.instance_query_rec;
6946     l_party_query_rec       csi_datastructures_pub.party_query_rec;
6947     l_pty_acct_query_rec    csi_datastructures_pub.party_account_query_rec;
6948 
6949     l_instance_hdr_tbl      csi_datastructures_pub.instance_header_tbl;
6950     l_instance_tbl          csi_datastructures_pub.instance_tbl;
6951 
6952     l_txn_line_query_rec        csi_t_datastructures_grp.txn_line_query_rec;
6953     l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
6954 
6955     l_line_dtl_rec          csi_t_datastructures_grp.txn_line_detail_rec;
6956     l_line_dtl_tbl          csi_t_datastructures_grp.txn_line_detail_tbl;
6957     l_pty_dtl_tbl           csi_t_datastructures_grp.txn_party_detail_tbl;
6958     l_pty_acct_tbl          csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
6959     l_ii_rltns_tbl          csi_t_datastructures_grp.txn_ii_rltns_tbl;
6960     l_org_assgn_tbl         csi_t_datastructures_grp.txn_org_assgn_tbl;
6961     l_ext_attrib_tbl        csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
6962     l_csi_ea_tbl            csi_t_datastructures_grp.csi_ext_attribs_tbl;
6963     l_csi_eav_tbl           csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
6964     l_txn_systems_tbl       csi_t_datastructures_grp.txn_systems_tbl;
6965 
6966     l_line_tbl              oe_order_pub.line_tbl_type;
6967     l_quantity_ratio        number;
6968 
6969     l_model_order_qty       number;
6970 
6971     l_instance_found        boolean;
6972     l_instance_created      boolean;
6973 
6974     l_object_id             number;
6975     l_debug_level           number;
6976 
6977     l_return_status         varchar2(1) := fnd_api.g_ret_sts_success;
6978     l_msg_data              varchar2(512);
6979     l_msg_count             number;
6980 
6981     l_txn_ps_tbl           csi_utl_pkg.txn_ps_tbl;
6982 
6983     --fix for bug5096435
6984     l_order_line_qty        number;
6985     l_temp_line_rec         oe_order_pub.Line_Rec_Type;
6986     l_next_item_id          number := 0;
6987     l_temp_idx              number := 0;
6988     l_temp_instance_hdr_tbl csi_datastructures_pub.instance_header_tbl;
6989     l_temp_index            number := 0;
6990 
6991 
6992   BEGIN
6993 
6994     x_return_status := fnd_api.g_ret_sts_success;
6995     api_log('build_child_relation');
6996 
6997     get_ib_trackable_children(
6998       p_order_line_rec     => p_order_line_rec,
6999       x_trackable_line_tbl => l_line_tbl,
7000       x_return_status      => l_return_status);
7001 
7002     IF l_return_status <> fnd_api.g_ret_sts_success THEN
7003       RAISE fnd_api.g_exc_error;
7004     END IF;
7005 
7006     debug('IB Trackable Children Count :'||l_line_tbl.COUNT);
7007 
7008     IF l_line_tbl.COUNT > 0 THEN
7009         --fix for bug5096435
7010         --Here child_line_tbl is sorted and rearranged to ensure that
7011 	--two/more different remnant lines of same inventory item are put together
7012 	--in the plsql table.
7013         IF nvl(p_order_line_rec.model_remnant_flag,'N') = 'Y' THEN
7014         FOR i IN 1..l_line_tbl.COUNT
7015         LOOP
7016             IF l_line_tbl(i).model_remnant_flag = 'Y' THEN
7017                 l_temp_index := i+1;
7018                 FOR j IN l_temp_index..l_line_tbl.COUNT
7019                 LOOP
7020                     IF l_line_tbl(j).inventory_item_id = l_line_tbl(i).inventory_item_id
7021                     AND j <> l_temp_index THEN
7022                         l_temp_line_rec := l_line_tbl(l_temp_index);
7023                         l_line_tbl(l_temp_index) := l_line_tbl(j);
7024                         l_line_tbl(j)   := l_temp_line_rec;
7025                         EXIT;
7026                     END IF;
7027                 END LOOP;
7028             END IF;
7029         END LOOP;
7030         END IF;
7031         --end of fix for bug5096435
7032 
7033       debug('Getting Transaction Details for Building Relation.');
7034 
7035       l_txn_line_query_rec.source_transaction_table        := 'WSH_DELIVERY_DETAILS';
7036       l_txn_line_query_rec.source_transaction_id           := p_order_line_rec.order_line_id;
7037       l_txn_line_detail_query_rec.source_transaction_flag  := 'Y';
7038       l_txn_line_detail_query_rec.processing_status        := 'IN_PROCESS';
7039 
7040       csi_t_txn_details_grp.get_transaction_details(
7041         p_api_version               => 1,
7042         p_commit                    => fnd_api.g_false,
7043         p_init_msg_list             => fnd_api.g_true,
7044         p_validation_level          => fnd_api.g_valid_level_full,
7045         p_txn_line_query_rec        => l_txn_line_query_rec,
7046         p_txn_line_detail_query_rec => l_txn_line_detail_query_rec,
7047         x_txn_line_detail_tbl       => l_line_dtl_tbl,
7048         p_get_parties_flag          => fnd_api.g_false,
7049         x_txn_party_detail_tbl      => l_pty_dtl_tbl,
7050         p_get_pty_accts_flag        => fnd_api.g_false,
7051         x_txn_pty_acct_detail_tbl   => l_pty_acct_tbl,
7052         p_get_ii_rltns_flag         => fnd_api.g_false,
7053         x_txn_ii_rltns_tbl          => l_ii_rltns_tbl,
7054         p_get_org_assgns_flag       => fnd_api.g_false,
7055         x_txn_org_assgn_tbl         => l_org_assgn_tbl,
7056         p_get_ext_attrib_vals_flag  => fnd_api.g_false,
7057         x_txn_ext_attrib_vals_tbl   => l_ext_attrib_tbl,
7058         p_get_csi_attribs_flag      => fnd_api.g_false,
7059         x_csi_ext_attribs_tbl       => l_csi_ea_tbl,
7060         p_get_csi_iea_values_flag   => fnd_api.g_false,
7061         x_csi_iea_values_tbl        => l_csi_eav_tbl,
7062         p_get_txn_systems_flag      => fnd_api.g_false,
7063         x_txn_systems_tbl           => l_txn_systems_tbl,
7064         x_return_status             => l_return_status,
7065         x_msg_count                 => l_msg_count,
7066         x_msg_data                  => l_msg_data);
7067 
7068       IF l_return_status <> fnd_api.g_ret_sts_success THEN
7069         raise fnd_api.g_exc_error;
7070       END IF;
7071       debug('  Source Txn Line Detail COUNT :'||l_line_dtl_tbl.COUNT);
7072 
7073       FOR l_ol_ind in l_line_tbl.FIRST..l_line_tbl.LAST
7074       LOOP
7075         --fix for 5096435
7076         --This check ensures that we figure out quantity ratio by summing
7077         --order quantity,incase if remnant lines of same item are put
7078         --unpreportionate quantity.
7079          IF nvl(p_order_line_rec.model_remnant_flag,'N') = 'Y' THEN
7080            IF l_ol_ind <> l_line_tbl.LAST THEN
7081                 l_next_item_id := l_line_tbl(l_ol_ind+1).inventory_item_id;
7082            ELSE
7083 		l_next_item_id := -99;
7084            END IF;
7085            IF l_line_tbl(l_ol_ind).inventory_item_id <> l_next_item_id THEN
7086              BEGIN
7087             	select sum(ordered_quantity)
7088             	into l_order_line_qty
7089             	from oe_order_lines_all
7090             	where link_to_line_id = l_line_tbl(l_ol_ind).link_to_line_id
7091             	and inventory_item_id = l_line_tbl(l_ol_ind).inventory_item_id
7092             	and model_remnant_flag = 'Y';
7093              EXCEPTION
7094              WHEN others THEN
7095                 NULL;
7096              END;
7097               l_quantity_ratio := l_order_line_qty / p_order_line_rec.ordered_quantity;
7098            ELSE
7099               l_quantity_ratio := -99;
7100 	      debug('Remnant order line splitted across inproper qty,so qty_ratio calculated with adding ordered quantity');
7101            END IF;
7102          ELSE
7103            l_quantity_ratio := l_line_tbl(l_ol_ind).ordered_quantity/p_order_line_rec.ordered_quantity;
7104          END IF;
7105           debug('l_quantity_ratio : ' || l_quantity_ratio);
7106          --end of fix for bug 5096435
7107         l_inst_query_rec.inventory_item_id     := l_line_tbl(l_ol_ind).inventory_item_id;
7108         l_inst_query_rec.last_oe_order_line_id := l_line_tbl(l_ol_ind).line_id;
7109 	l_instance_found := FALSE;
7110 
7111         debug('  query criteria for get_item_instances - '||l_line_tbl(l_ol_ind).item_type_code);
7112         debug('  inventory_item_id     : '||l_inst_query_rec.inventory_item_id);
7113         debug('  last_oe_order_line_id : '||l_inst_query_rec.last_oe_order_line_id);
7114 
7115         debug('Child item type :'||l_line_tbl(l_ol_ind).item_type_code);
7116 
7117         csi_t_gen_utility_pvt.dump_api_info(
7118           p_api_name => 'get_item_instances',
7119           p_pkg_name => 'csi_item_instance_pub');
7120 
7121         csi_item_instance_pub.get_item_instances(
7122           p_api_version          => 1.0,
7123           p_commit               => fnd_api.g_false,
7124           p_init_msg_list        => fnd_api.g_true,
7125           p_validation_level     => fnd_api.g_valid_level_full,
7126           p_instance_query_rec   => l_inst_query_rec,
7127           p_party_query_rec      => l_party_query_rec,
7128           p_account_query_rec    => l_pty_acct_query_rec,
7129           p_transaction_id       => null,
7130           p_resolve_id_columns   => fnd_api.g_false,
7131           p_active_instance_only => fnd_api.g_true,
7132           x_instance_header_tbl  => l_instance_hdr_tbl,
7133           x_return_status        => l_return_status,
7134           x_msg_count            => l_msg_count,
7135           x_msg_data             => l_msg_data  );
7136 
7137         IF l_return_status <> fnd_api.g_ret_sts_success THEN
7138           raise fnd_api.g_exc_error;
7139         END IF;
7140         --fix for bug5096435
7141 	IF l_instance_hdr_tbl.COUNT > 0 THEN
7142               debug('instances found for the child order line : '||l_instance_hdr_tbl.COUNT);
7143 	      l_instance_found := TRUE;
7144         ELSE
7145               debug('instances not found for the child order line');
7146 	      l_instance_found := FALSE;
7147         END IF;
7148 	IF l_instance_found THEN
7149   	 IF nvl(p_order_line_rec.model_remnant_flag,'N') = 'Y' THEN
7150 	      FOR i IN l_instance_hdr_tbl.FIRST..l_instance_hdr_tbl.LAST
7151               LOOP
7152                l_temp_idx := l_temp_idx + 1;
7153                l_temp_instance_hdr_tbl(l_temp_idx) := l_instance_hdr_tbl(i);
7154               END LOOP;
7155 	    IF l_quantity_ratio <> -99 THEN
7156                 l_temp_idx := 0;
7157             END IF;
7158          ELSE
7159            l_temp_instance_hdr_tbl := l_instance_hdr_tbl;
7160          END IF;
7161 	END IF;
7162       --end of fix for bug5096435
7163       --Here we ensure that we go for building non-source rec only after accumulating
7164       --all the instances created among two/more remnant lines belonging to same inv item.
7165        IF nvl(p_order_line_rec.model_remnant_flag,'N') <> 'Y' OR --fix for bug5096435
7166          (nvl(p_order_line_rec.model_remnant_flag,'N') = 'Y' AND l_quantity_ratio <> -99) THEN
7167 
7168         IF l_temp_instance_hdr_tbl.COUNT > 0 THEN
7169           make_non_header_tbl(
7170             p_instance_header_tbl => l_temp_instance_hdr_tbl, --fix for bug5096435
7171             x_instance_tbl        => l_instance_tbl,
7172             x_return_status       => l_return_status);
7173 
7174 	  IF l_return_status <> fnd_api.g_ret_sts_success THEN
7175             RAISE fnd_api.g_exc_error;
7176           END IF;
7177 
7178           l_temp_instance_hdr_tbl.DELETE;
7179 
7180           filter_processed_instances(
7181             p_order_line_id  => p_order_line_rec.order_line_id,
7182             px_instance_tbl  => l_instance_tbl,
7183             x_return_status  => l_return_status);
7184 
7185 	  IF l_return_status <> fnd_api.g_ret_sts_success THEN
7186              RAISE fnd_api.g_exc_error;
7187           END IF;
7188 
7189           IF l_instance_tbl.count > 0 THEN
7190 
7191 	   l_txn_ps_tbl.DELETE;
7192 
7193            /* initialize  txn_ps_tbl */
7194 
7195           IF l_line_dtl_tbl.COUNT > 0 THEN
7196 
7197             FOR l_ind IN l_line_dtl_tbl.FIRST..l_line_dtl_tbl.LAST
7198             LOOP
7199 
7200               l_txn_ps_tbl(l_ind).txn_line_detail_id := l_line_dtl_tbl(l_ind).txn_line_detail_id;
7201               l_txn_ps_tbl(l_ind).quantity           := l_line_dtl_tbl(l_ind).quantity;
7202               l_txn_ps_tbl(l_ind).processed_flag     := 'N';
7203               l_txn_ps_tbl(l_ind).quantity_ratio     := l_quantity_ratio;
7204               l_txn_ps_tbl(l_ind).quantity_remaining := l_quantity_ratio;
7205 
7206             END LOOP;
7207 
7208             dump_txn_ps_tbl(
7209               p_txn_ps_tbl => l_txn_ps_tbl);
7210 
7211           END IF;
7212 
7213           -- call distribute instances
7214           distribute_instances(
7215             p_quantity_ratio       => l_quantity_ratio,
7216             p_model_txn_line_rec   => p_model_txn_line_rec,
7217             px_instance_tbl        => l_instance_tbl,
7218             px_txn_ps_tbl          => l_txn_ps_tbl,
7219             x_return_status        => l_return_status);
7220 
7221           IF l_return_status <> fnd_api.g_ret_sts_success THEN
7222             RAISE fnd_api.g_exc_error;
7223           END IF;
7224 
7225           IF l_instance_tbl.COUNT > 0 THEN
7226             debug('There exist unresolved instances. So splitting instances.');
7227 
7228             split_instances(
7229               px_csi_txn_rec   => px_csi_txn_rec,
7230               px_instance_tbl  => l_instance_tbl,
7231               x_return_status  => l_return_status);
7232 
7233             IF l_return_status <> fnd_api.g_ret_sts_success THEN
7234               RAISE fnd_api.g_exc_error;
7235             END IF;
7236 
7237             debug('Re-distributing after the split.');
7238 
7239             distribute_instances(
7240               p_quantity_ratio       => l_quantity_ratio,
7241               p_model_txn_line_rec   => p_model_txn_line_rec,
7242               px_instance_tbl        => l_instance_tbl,
7243               px_txn_ps_tbl          => l_txn_ps_tbl,
7244               x_return_status        => l_return_status);
7245 
7246             IF l_return_status <> fnd_api.g_ret_sts_success THEN
7247               RAISE fnd_api.g_exc_error;
7248             END IF;
7249           END IF; --<<end if l_instance_tbl.count > 0>>
7250           END IF; --<<end if l_instance_tbl.COUNT > 0>>
7251 	END IF; --<<end if l_instance_hdr_tbl.COUNT > 0>>
7252         END IF; --remnant check cond for bug 5096435
7253       END LOOP; -- child order lines loop
7254     END IF; --<<end if l_line_tbl.COUNT > 0>>
7255 
7256   EXCEPTION
7257     WHEN fnd_api.g_exc_error THEN
7258       x_return_status := fnd_api.g_ret_sts_error;
7259   END build_child_relation;
7260 
7261   PROCEDURE get_unit_price_in_primary_uom(
7262     p_unit_price                IN     number,
7263     p_unit_price_uom            IN     varchar2,
7264     px_item_control_rec         IN OUT nocopy csi_order_ship_pub.item_control_rec,
7265     x_unit_price_in_primary_uom    OUT nocopy number,
7266     x_return_status                OUT nocopy varchar2)
7267   IS
7268     l_uom_conv_rate             number;
7269   BEGIN
7270 
7271     api_log('get_unit_price_in_primary_uom');
7272 
7273     x_return_status := fnd_api.g_ret_sts_success;
7274 
7275     IF nvl(px_item_control_rec.primary_uom_code, fnd_api.g_miss_char) = fnd_api.g_miss_char THEN
7276 
7277       px_item_control_rec.primary_uom_code := csi_utl_pkg.get_primay_uom(
7278         p_inv_item_id => px_item_control_rec.inventory_item_id,
7279         p_inv_org_id  => px_item_control_rec.organization_id);
7280 
7281     END IF;
7282 
7283     inv_convert.inv_um_conversion (
7284       from_unit  => p_unit_price_uom,
7285       to_unit    => px_item_control_rec.primary_uom_code,
7286       item_id    => px_item_control_rec.inventory_item_id,
7287       uom_rate   => l_uom_conv_rate);
7288 
7289     debug('  uom conv rate             : '||l_uom_conv_rate);
7290 
7291     IF l_uom_conv_rate = -99999 THEN
7292       debug('  inv_convert.inv_um_conversion failed ');
7293       RAISE fnd_api.g_exc_error;
7294     END IF;
7295 
7296     x_unit_price_in_primary_uom := p_unit_price/l_uom_conv_rate;
7297 
7298     debug('  unit price in primary uom : '||x_unit_price_in_primary_uom);
7299 
7300   EXCEPTION
7301     WHEN fnd_api.g_exc_error THEN
7302       x_return_status := fnd_api.g_ret_sts_error;
7303   END get_unit_price_in_primary_uom;
7304 
7305 END csi_utl_pkg ;