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