[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 ;