[Home] [Help]
PACKAGE BODY: APPS.CSI_INTERFACE_PKG
Source
1 PACKAGE BODY csi_interface_pkg AS
2 /* $Header: csipitxb.pls 120.29.12020000.3 2013/03/22 12:02:15 mvaradam ship $ */
3
4 PROCEDURE debug(
5 p_message IN varchar2)
6 IS
7 BEGIN
8 csi_t_gen_utility_pvt.add(p_message);
9 END debug;
10
11 PROCEDURE api_log(
12 p_api_name IN varchar2)
13 IS
14 BEGIN
15 csi_t_gen_utility_pvt.dump_api_info(
16 p_pkg_name => 'csi_interface_pkg',
17 p_api_name => p_api_name);
18 END api_log;
19
20 PROCEDURE record_time(
21 p_label IN varchar2)
22 IS
23 l_time varchar2(200);
24 BEGIN
25 l_time := p_label||' Time :'||to_char(sysdate,'HH:MI:SS');
26 debug(l_time);
27 END record_time;
28
29 PROCEDURE dump_instance_key(
30 p_instance_key IN csi_utility_grp.config_instance_key)
31 IS
32 l_rec csi_utility_grp.config_instance_key;
33 BEGIN
34 l_rec := p_instance_key;
35 debug('configurator instance key :');
36 debug(' inst_hdr_id :'||l_rec.inst_hdr_id);
37 debug(' inst_item_id :'||l_rec.inst_item_id);
38 debug(' inst_rev_num :'||l_rec.inst_rev_num);
39 debug(' inst_baseline_rev_num :'||l_rec.inst_baseline_rev_num);
40 END dump_instance_key;
41
42 PROCEDURE dump_instance_keys(
43 p_instance_keys IN csi_utility_grp.config_instance_keys)
44 IS
45 BEGIN
46 IF p_instance_keys.COUNT > 0 THEN
47 FOR l_ind IN p_instance_keys.FIRST .. p_instance_keys.LAST
48 LOOP
49 dump_instance_key(p_instance_keys(l_ind));
50 END LOOP;
51 END IF;
52 END dump_instance_keys;
53
54 PROCEDURE get_default_sub_type_id(
55 p_transaction_type_id IN number,
56 x_sub_type_id OUT NOCOPY number,
57 x_return_status OUT NOCOPY varchar2)
58 IS
59 BEGIN
60 x_return_status := fnd_api.g_ret_sts_success;
61 api_log('get_default_sub_type_id');
62
63 BEGIN
64 SELECT sub_type_id
65 INTO x_sub_type_id
66 FROM csi_txn_sub_types
67 WHERE transaction_type_id = p_transaction_type_id
68 AND default_flag = 'Y';
69 EXCEPTION
70 WHEN no_data_found THEN
71 fnd_message.set_name('CSI', 'CSI_DFLT_SUB_TYPE_MISSING');
72 fnd_message.set_token('TXN_TYPE_ID',p_transaction_type_id);
73 fnd_msg_pub.add;
74 RAISE fnd_api.g_exc_error;
75 WHEN too_many_rows THEN
76 fnd_message.set_name('CSI', 'CSI_MANY_DFLT_SUB_TYPES');
77 fnd_message.set_token('TXN_TYPE_ID',p_transaction_type_id);
78 fnd_msg_pub.add;
79 RAISE fnd_api.g_exc_error;
80 END;
81 EXCEPTION
82 WHEN fnd_api.g_exc_error THEN
83 x_return_status := fnd_api.g_ret_sts_error;
84 END get_default_sub_type_id;
85
86 /* this routine gets the first trackable parent (order line record) from the
87 sales order tree for the current processing order line */
88
89 PROCEDURE get_ib_trackable_parent(
90 p_source_line_rec IN source_line_rec,
91 x_parent_found OUT NOCOPY boolean,
92 x_parent_line_rec OUT NOCOPY source_line_rec,
93 x_return_status OUT NOCOPY varchar2)
94 IS
95
96 l_org_id number;
97 l_organization_id number;
98 l_parent_line_id number;
99 l_parent_hdr_rec source_header_rec;
100 l_next_parent_line_id number;
101 l_inventory_item_id number;
102 l_ib_trackable_flag varchar2(1) := 'N';
103
104 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
105
106 BEGIN
107
108 x_return_status := fnd_api.g_ret_sts_success;
109 api_log('get_ib_trackable_parent');
110
111 x_parent_found := FALSE;
112
113 l_parent_line_id := p_source_line_rec.link_to_line_id;
114
115 LOOP
116
117 SELECT inventory_item_id ,
118 link_to_line_id ,
119 org_id
120 INTO l_inventory_item_id ,
121 l_next_parent_line_id,
122 l_org_id
123 FROM oe_order_lines_all
124 WHERE line_id = l_parent_line_id;
125
126 l_organization_id := oe_sys_parameters.value(
127 param_name => 'MASTER_ORGANIZATION_ID',
128 p_org_id => l_org_id);
129
130 SELECT nvl(msi.comms_nl_trackable_flag, 'N')
131 INTO l_ib_trackable_flag
132 FROM mtl_system_items msi
133 WHERE msi.inventory_item_id = l_inventory_item_id
134 AND msi.organization_id = l_organization_id;
135
136 IF l_ib_trackable_flag = 'Y' THEN
137
138 get_order_line_source_info(
139 p_order_line_id => l_parent_line_id,
140 x_source_header_rec => l_parent_hdr_rec,
141 x_source_line_rec => x_parent_line_rec,
142 x_return_status => l_return_status);
143
144 IF l_return_status <> fnd_api.g_ret_sts_success THEN
145 RAISE fnd_api.g_exc_error;
146 END IF;
147
148 x_parent_found := TRUE;
149 exit;
150
151 ELSE
152 l_parent_line_id := l_next_parent_line_id;
153
154 IF l_parent_line_id IS NULL THEN
155 x_parent_found := FALSE;
156 exit;
157 END IF;
158
159 END IF;
160 END LOOP;
161 EXCEPTION
162 WHEN fnd_api.g_exc_error THEN
163 x_return_status := fnd_api.g_ret_sts_error;
164 END get_ib_trackable_parent;
165
166
167 /* this routine gets the first trackable parent (order line record) that has the
168 installation details from the sales order tree for the current processing
169 order line */
170
171 PROCEDURE get_parent_with_txn_detail(
172 p_source_line_rec IN source_line_rec,
173 x_parent_found OUT NOCOPY boolean,
174 x_parent_line_rec OUT NOCOPY source_line_rec,
175 x_return_status OUT NOCOPY varchar2)
176 IS
177 l_trackable_parent_found boolean := FALSE;
178 l_parent_line_rec source_line_rec;
179 l_current_line_rec source_line_rec;
180 l_txn_line_rec csi_t_datastructures_grp.txn_line_rec;
181 l_td_found boolean := FALSE;
182 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
183 BEGIN
184
185 x_return_status := fnd_api.g_ret_sts_success;
186
187 api_log('get_parent_with_txn_detail');
188
189 l_current_line_rec := p_source_line_rec;
190
191 LOOP
192
193 get_ib_trackable_parent(
194 p_source_line_rec => l_current_line_rec,
195 x_parent_found => l_trackable_parent_found,
196 x_parent_line_rec => l_parent_line_rec,
197 x_return_status => l_return_status);
198
199 IF l_return_status <> fnd_api.g_ret_sts_success THEN
200 RAISE fnd_api.g_exc_error;
201 END IF;
202
203 IF NOT(l_trackable_parent_found) THEN
204 x_parent_found := FALSE;
205 exit;
206 END IF;
207
208 debug(' Parent Line ID :'||l_parent_line_rec.source_line_id);
209
210 -- check for txn details
211 l_txn_line_rec.source_transaction_table := g_om_source_table;
212 l_txn_line_rec.source_transaction_id := l_parent_line_rec.source_line_id;
213
214 l_td_found := csi_t_txn_details_pvt.check_txn_details_exist(
215 p_txn_line_rec => l_txn_line_rec);
216
217 IF l_td_found THEN
218 x_parent_found := TRUE;
219 exit;
220 ELSE
221
222 l_current_line_rec := l_parent_line_rec;
223
224 IF l_current_line_rec.link_to_line_id is null THEN
225 x_parent_found := FALSE;
226 exit;
227 END IF;
228 END IF;
229
230 END LOOP;
231
232 x_parent_line_rec := l_parent_line_rec;
233
234 EXCEPTION
235 WHEN fnd_api.g_exc_error THEN
236 x_return_status := fnd_api.g_ret_sts_error;
237 END get_parent_with_txn_detail;
238
239 PROCEDURE query_immediate_children (
240 p_parent_line_id IN number,
241 x_line_tbl OUT NOCOPY source_line_tbl,
242 x_return_status OUT NOCOPY varchar2)
243 IS
244
245 l_hdr_rec source_header_rec;
246 l_line_rec source_line_rec;
247
248 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
249
250 CURSOR op_cur is
251 SELECT line_id
252 FROM oe_order_lines_all
253 WHERE link_to_line_id = p_parent_line_id
254 ORDER BY line_number, shipment_number;
255
256 BEGIN
257
258 x_return_status := fnd_api.g_ret_sts_success;
259 api_log('query_immediate_children');
260
261 debug(' Getting children for Line ID :'||p_parent_line_id);
262
263 FOR op_rec IN op_cur
264 LOOP
265
266 IF op_rec.line_id <> p_parent_line_id THEN
267
268 get_order_line_source_info(
269 p_order_line_id => op_rec.line_id,
270 x_source_header_rec => l_hdr_rec,
271 x_source_line_rec => l_line_rec,
272 x_return_status => l_return_status);
273
274 x_line_tbl(x_line_tbl.COUNT + 1) := l_line_rec;
275
276 END IF;
277
278 END LOOP;
279
280 debug(' Children count :'||x_line_tbl.COUNT);
281
282 EXCEPTION
283 WHEN fnd_api.g_exc_error THEN
284 x_return_status := fnd_api.g_ret_sts_error;
285 END query_immediate_children;
286
287 PROCEDURE get_ib_trackable_children(
288 p_current_line_id IN number,
289 x_trackable_line_tbl OUT NOCOPY source_line_tbl,
290 x_return_status OUT NOCOPY varchar2)
291 IS
292
293 l_organization_id number;
294 l_line_tbl source_line_tbl;
295 l_line_tbl_nxt_lvl source_line_tbl;
296 l_line_tbl_temp source_line_tbl;
297 l_line_tbl_final source_line_tbl;
298
299 l_config_line_rec source_line_rec;
300
301 l_nxt_ind binary_integer;
302 l_final_ind binary_integer;
303
304 l_ib_trackable_flag varchar2(1);
305 l_config_found boolean := FALSE;
306 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
307
308 BEGIN
309
310 api_log('get_ib_trackable_children');
311
312 x_return_status := fnd_api.g_ret_sts_success;
313
314 l_final_ind := 0;
315
316 query_immediate_children (
317 p_parent_line_id => p_current_line_id,
318 x_line_tbl => l_line_tbl,
319 x_return_status => l_return_status);
320
321 LOOP
322
323 l_line_tbl_nxt_lvl.delete;
324 l_nxt_ind := 0;
325
326 EXIT when l_line_tbl.count = 0;
327
328 FOR l_ind IN l_line_tbl.FIRST .. l_line_tbl.LAST
329 LOOP
330
331 l_organization_id := oe_sys_parameters.value(
332 param_name => 'MASTER_ORGANIZATION_ID',
333 p_org_id => l_line_tbl(l_ind).org_id);
334
335 SELECT nvl(msi.comms_nl_trackable_flag,'N')
336 INTO l_ib_trackable_flag
337 FROM mtl_system_items msi
338 WHERE msi.inventory_item_id = l_line_tbl(l_ind).inventory_item_id
339 AND msi.organization_id = l_organization_id;
340
341 /* if trackable populate it for the final out table */
342 IF l_ib_trackable_flag = 'Y' THEN
343
344 l_final_ind := l_final_ind + 1;
345 l_line_tbl_final(l_final_ind) := l_line_tbl(l_ind);
346
347 ELSE --[NOT Trackable]
348
349 /* get the next level using this line ID as the parent */
350
351 query_immediate_children (
352 p_parent_line_id => l_line_tbl(l_ind).source_line_id,
353 x_line_tbl => l_line_tbl_temp,
354 x_return_status => l_return_status);
355
356 IF l_line_tbl_temp.count > 0 THEN
357 FOR l_temp_ind IN l_line_tbl_temp.FIRST .. l_line_tbl_temp.LAST
358 LOOP
359
360 l_nxt_ind := l_nxt_ind + 1;
361 l_line_tbl_nxt_lvl (l_nxt_ind) := l_line_tbl_temp(l_temp_ind);
362
363 END LOOP;
364 END IF;
365
366 END IF;
367
368 END LOOP;
369
370 EXIT WHEN l_line_tbl_nxt_lvl.COUNT = 0;
371
372 l_line_tbl.DELETE;
373 l_line_tbl := l_line_tbl_nxt_lvl;
374
375 END LOOP;
376
377 l_config_found := FALSE;
378
379 IF l_line_tbl_final.count > 0 THEN
380 FOR l_ind IN l_line_tbl_final.FIRST .. l_line_tbl_final.LAST
381 LOOP
382 IF l_line_tbl_final(l_ind).item_type_code = 'CONFIG' THEN
383 l_config_found := TRUE;
384 l_config_line_rec := l_line_tbl_final(l_ind);
385 exit;
386 END IF;
387 END LOOP;
388 END IF;
389
390 IF l_config_found THEN
391 x_trackable_line_tbl(1) := l_config_line_rec;
392 ELSE
393 x_trackable_line_tbl := l_line_tbl_final;
394 END IF;
395 debug(' Trackable children count :'||x_trackable_line_tbl.count);
396
397 EXCEPTION
398 WHEN fnd_api.g_exc_error THEN
399 x_return_status := fnd_api.g_ret_sts_success;
400 END get_ib_trackable_children;
401
402 --
403 --
404 --
405 PROCEDURE cascade_txn_detail(
406 p_parent_line_rec IN source_line_rec,
407 p_child_line_rec IN source_line_rec,
408 x_txn_line_detail_tbl OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
409 x_txn_party_tbl OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
410 x_txn_party_acct_tbl OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
411 x_txn_org_assgn_tbl OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
412 x_return_status OUT NOCOPY varchar2)
413 IS
414
415 l_txn_line_query_rec csi_t_datastructures_grp.txn_line_query_rec;
416 l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
417
418 l_g_line_dtl_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
419 l_g_pty_dtl_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
420 l_g_pty_acct_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
421 l_g_ii_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
422 l_g_org_assgn_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
423 l_g_ext_attrib_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
424 l_g_csi_ea_tbl csi_t_datastructures_grp.csi_ext_attribs_tbl;
425 l_g_csi_eav_tbl csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
426 l_g_txn_systems_tbl csi_t_datastructures_grp.txn_systems_tbl;
427
428 l_c_td_ind binary_integer;
429 l_c_pt_ind binary_integer;
430 l_c_pa_ind binary_integer;
431 l_c_oa_ind binary_integer;
432 l_c_ea_ind binary_integer;
433
434 l_line_dtl_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
435 l_pty_dtl_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
436 l_pty_acct_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
437 l_org_assgn_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
438
439 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
440 l_msg_data varchar2(512);
441 l_msg_count number;
442
443 BEGIN
444
445 x_return_status := fnd_api.g_ret_sts_success;
446
447 api_log('cascade_txn_detail');
448
449 l_txn_line_query_rec.source_transaction_table := g_om_source_table;
450 l_txn_line_query_rec.source_transaction_id := p_parent_line_rec.source_line_id;
451
452 l_txn_line_detail_query_rec.source_transaction_flag := 'Y';
453
454 csi_t_txn_details_grp.get_transaction_details(
455 p_api_version => 1.0,
456 p_commit => fnd_api.g_false,
457 p_init_msg_list => fnd_api.g_true,
458 p_validation_level => fnd_api.g_valid_level_full,
459 p_txn_line_query_rec => l_txn_line_query_rec,
460 p_txn_line_detail_query_rec => l_txn_line_detail_query_rec,
461 x_txn_line_detail_tbl => l_g_line_dtl_tbl,
462 p_get_parties_flag => fnd_api.g_true,
463 x_txn_party_detail_tbl => l_g_pty_dtl_tbl,
464 p_get_pty_accts_flag => fnd_api.g_true,
465 x_txn_pty_acct_detail_tbl => l_g_pty_acct_tbl,
466 p_get_ii_rltns_flag => fnd_api.g_false,
467 x_txn_ii_rltns_tbl => l_g_ii_rltns_tbl,
468 p_get_org_assgns_flag => fnd_api.g_true,
469 x_txn_org_assgn_tbl => l_g_org_assgn_tbl,
470 p_get_ext_attrib_vals_flag => fnd_api.g_false,
471 x_txn_ext_attrib_vals_tbl => l_g_ext_attrib_tbl,
472 p_get_csi_attribs_flag => fnd_api.g_false,
473 x_csi_ext_attribs_tbl => l_g_csi_ea_tbl,
474 p_get_csi_iea_values_flag => fnd_api.g_false,
475 x_csi_iea_values_tbl => l_g_csi_eav_tbl,
476 p_get_txn_systems_flag => fnd_api.g_false,
477 x_txn_systems_tbl => l_g_txn_systems_tbl,
478 x_return_status => l_return_status,
479 x_msg_count => l_msg_count,
480 x_msg_data => l_msg_data);
481
482 IF l_return_status <> fnd_api.g_ret_sts_success THEN
483 RAISE fnd_api.g_exc_error;
484 END IF;
485
486 l_c_td_ind := 0;
487 l_c_pt_ind := 0;
488 l_c_pa_ind := 0;
489 l_c_oa_ind := 0;
490 l_c_ea_ind := 0;
491
492 IF l_g_line_dtl_tbl.COUNT > 0 THEN
493 FOR l_td_ind IN l_g_line_dtl_tbl.FIRST .. l_g_line_dtl_tbl.LAST
494 LOOP
495
496 FOR i in 1..l_g_line_dtl_tbl(l_td_ind).quantity
497 LOOP
498
499 l_c_td_ind := l_c_td_ind + 1;
500
501 l_line_dtl_tbl(l_c_td_ind) := l_g_line_dtl_tbl(l_td_ind);
502 l_line_dtl_tbl(l_c_td_ind).quantity := p_child_line_rec.source_quantity/
503 p_parent_line_rec.source_quantity;
504
505 l_line_dtl_tbl(l_c_td_ind).transaction_line_id := fnd_api.g_miss_num;
506 l_line_dtl_tbl(l_c_td_ind).txn_line_detail_id := fnd_api.g_miss_num;
507 l_line_dtl_tbl(l_c_td_ind).inventory_item_id := p_child_line_rec.inventory_item_id;
508 l_line_dtl_tbl(l_c_td_ind).unit_of_measure := p_child_line_rec.uom_code;
509 l_line_dtl_tbl(l_c_td_ind).inventory_revision := p_child_line_rec.item_revision;
510 l_line_dtl_tbl(l_c_td_ind).csi_transaction_id := fnd_api.g_miss_num;
511 l_line_dtl_tbl(l_c_td_ind).processing_status := 'SUBMIT';
512 l_line_dtl_tbl(l_c_td_ind).instance_exists_flag := 'N';
513 l_line_dtl_tbl(l_c_td_ind).instance_id := fnd_api.g_miss_num;
514 l_line_dtl_tbl(l_c_td_ind).source_txn_line_detail_id :=
515 l_g_line_dtl_tbl(l_td_ind).txn_line_detail_id;
516
517 -- derive the item related attributes here
518
519 IF l_g_pty_dtl_tbl.COUNT > 0 THEN
520 FOR l_pt_ind IN l_g_pty_dtl_tbl.FIRST .. l_g_pty_dtl_tbl.LAST
521 LOOP
522
523 IF l_g_pty_dtl_tbl(l_pt_ind).txn_line_detail_id =
524 l_g_line_dtl_tbl(l_td_ind).txn_line_detail_id THEN
525
526 l_c_pt_ind := l_c_pt_ind + 1;
527
528 l_pty_dtl_tbl(l_c_pt_ind) := l_g_pty_dtl_tbl(l_pt_ind);
529 l_pty_dtl_tbl(l_c_pt_ind).txn_line_detail_id := fnd_api.g_miss_num;
530 l_pty_dtl_tbl(l_c_pt_ind).txn_party_detail_id := fnd_api.g_miss_num;
531 l_pty_dtl_tbl(l_c_pt_ind).txn_line_details_index := l_c_td_ind;
532 l_pty_dtl_tbl(l_c_pt_ind).instance_party_id := fnd_api.g_miss_num;
533
534 IF l_g_pty_acct_tbl.COUNT > 0 THEN
535
536 FOR l_pa_ind IN l_g_pty_acct_tbl.FIRST .. l_g_pty_acct_tbl.LAST
537 LOOP
538 IF l_g_pty_acct_tbl(l_pa_ind).txn_party_detail_id =
539 l_g_pty_dtl_tbl(l_pt_ind).txn_party_detail_id THEN
540
541 l_c_pa_ind := l_c_pa_ind + 1;
542
543 l_pty_acct_tbl(l_c_pa_ind) := l_g_pty_acct_tbl(l_pa_ind);
544 l_pty_acct_tbl(l_c_pa_ind).txn_party_detail_id := fnd_api.g_miss_num;
545 l_pty_acct_tbl(l_c_pa_ind).txn_account_detail_id := fnd_api.g_miss_num;
546 l_pty_acct_tbl(l_c_pa_ind).txn_party_details_index := l_c_pt_ind;
547 l_pty_acct_tbl(l_c_pa_ind).ip_account_id := fnd_api.g_miss_num;
548
549 END IF; -- pty acct detail id chk
550
551 END LOOP; -- party acct table loop
552
553 END IF; -- party acct count chk
554
555 END IF; -- txn_line_detail_id check
556
557 END LOOP; -- party table loop
558
559 END IF; -- party count check
560
561 IF l_g_org_assgn_tbl.COUNT > 0 THEN
562 FOR l_oa_ind IN l_g_org_assgn_tbl.FIRST .. l_g_org_assgn_tbl.LAST
563 LOOP
564 IF l_g_org_assgn_tbl(l_oa_ind).txn_line_detail_id =
565 l_g_line_dtl_tbl(l_td_ind).txn_line_detail_id THEN
566
567 l_c_oa_ind := l_c_oa_ind + 1;
568 l_org_assgn_tbl(l_c_oa_ind) := l_g_org_assgn_tbl(l_oa_ind);
569 l_org_assgn_tbl(l_c_oa_ind).txn_line_detail_id := fnd_api.g_miss_num;
570 l_org_assgn_tbl(l_c_oa_ind).txn_operating_unit_id := fnd_api.g_miss_num;
571 l_org_assgn_tbl(l_c_oa_ind).txn_line_details_index := l_c_td_ind;
572 l_org_assgn_tbl(l_c_oa_ind).instance_ou_id := fnd_api.g_miss_num;
573
574 END IF;
575 END LOOP;
576 END IF;
577 END LOOP;
578 END LOOP; -- txn line details loop
579 END IF;
580
581 x_txn_line_detail_tbl := l_line_dtl_tbl;
582 x_txn_party_tbl := l_pty_dtl_tbl;
583 x_txn_party_acct_tbl := l_pty_acct_tbl;
584 x_txn_org_assgn_tbl := l_org_assgn_tbl;
585
586 EXCEPTION
587 WHEN fnd_api.g_exc_error THEN
588 x_return_status := fnd_api.g_ret_sts_error;
589 END cascade_txn_detail;
590
591 PROCEDURE get_item_attributes(
592 p_transaction_id IN number,-- Added for bug#14835893
593 p_inventory_item_id IN number,
594 p_organization_id IN number,
595 x_item_attrib_rec OUT NOCOPY item_attributes_rec,
596 x_return_status OUT NOCOPY varchar2)
597 IS
598 l_sql_stmt VARCHAR2(2000);
599 l_exists VARCHAR2(1) := 'N';
600 l_return BOOLEAN;
601 l_status VARCHAR2(1);
602 l_industry VARCHAR2(1);
603 l_oracle_schema VARCHAR2(30);
604 BEGIN
605 x_return_status := fnd_api.g_ret_sts_success;
606 api_log('get_item_attributes');
607
608 -- get item based attributes
609 SELECT serial_number_control_code,
610 -- lot_control_code,
611 nvl(csi_utl_pkg.get_lot_ctrl_code(p_transaction_id),lot_control_code) lot_control_code,-- Added for bug#14835893
612 location_control_code,
613 revision_qty_control_code,
614 comms_nl_trackable_flag,
615 shippable_item_flag,
616 inventory_item_flag,
617 stock_enabled_flag,
618 bom_item_type,
619 pick_components_flag,
620 base_item_id,
621 primary_uom_code
622 INTO x_item_attrib_rec.serial_control_code,
623 x_item_attrib_rec.lot_control_code,
624 x_item_attrib_rec.locator_control_code,
625 x_item_attrib_rec.revision_control_code,
626 x_item_attrib_rec.ib_trackable_flag,
627 x_item_attrib_rec.shippable_flag,
628 x_item_attrib_rec.inv_item_flag,
629 x_item_attrib_rec.stockable_flag,
630 x_item_attrib_rec.bom_item_type,
631 x_item_attrib_rec.pick_components_flag,
632 x_item_attrib_rec.model_item_id,
633 x_item_attrib_rec.primary_uom_code
634 FROM mtl_system_items
635 WHERE inventory_item_id = p_inventory_item_id
636 AND organization_id = p_organization_id;
637
638 -- get org attributes aswell
639 -- Ib_item_instance_class column may or may not exists in mtl_system_items_b.
640 -- Hence used a Dynamic sal based on the existance of this column in ALL_TAB_COLUMNS.
641
642 -- For Bug 3431768
643 l_return := FND_INSTALLATION.get_app_info('INV',l_status,l_industry,l_oracle_schema);
644
645 IF NOT l_return THEN
646 fnd_message.set_name('CSI','CSI_FND_INVALID_SCHEMA_ERROR');
647 fnd_msg_pub.add;
648 RAISE fnd_api.g_exc_error;
649 END IF;
650 -- End fix for Bug 3431768
651
652 Begin
653 /* Modified for bug 15896185 - Online patching compatible fix
654 select 'X'
655 into l_exists
656 from all_tab_columns
657 where table_name = 'MTL_SYSTEM_ITEMS_B'
658 and column_name = 'IB_ITEM_INSTANCE_CLASS'
659 and OWNER = l_oracle_schema
660 and rownum < 2;
661 Modified for bug 15896185 - Online patching compatible fix*/
662 select 'X'
663 into l_exists
664 from user_synonyms syn,
665 all_tab_columns col
666 where syn.synonym_name = 'MTL_SYSTEM_ITEMS_B'
667 and col.column_name = 'IB_ITEM_INSTANCE_CLASS'
668 and col.OWNER = l_oracle_schema
669 AND col.owner = syn.table_owner
670 AND col.table_name = syn.table_name
671 and rownum < 2;
672
673 Exception
674 when no_data_found then
675 l_exists := 'N';
676 End;
677 l_sql_stmt := 'select ib_item_instance_class from MTL_SYSTEM_ITEMS_B '||
678 'where inventory_item_id = :item_id '||
679 'and organization_id = :vld_org_id';
680 --
681 IF l_exists = 'X' THEN
682 BEGIN
683 EXECUTE IMMEDIATE l_sql_stmt INTO x_item_attrib_rec.ib_item_instance_class USING p_inventory_item_id,p_organization_id;
684 EXCEPTION
685 WHEN OTHERS THEN
686 x_item_attrib_rec.ib_item_instance_class := null;
687 END;
688 ELSE
689 x_item_attrib_rec.ib_item_instance_class := null;
690 END If;
691
692 l_exists := 'N';
693
694 -- for config_model_type
695 Begin
696 /* Modified for bug 15896185 - Online patching compatible fix
697 select 'X'
698 into l_exists
699 from all_tab_columns
700 where table_name = 'MTL_SYSTEM_ITEMS_B'
701 and column_name = 'CONFIG_MODEL_TYPE'
702 and OWNER = l_oracle_schema
703 and rownum < 2;
704 Modified for bug 15896185 - Online patching compatible fix*/
705 select 'X'
706 into l_exists
707 from user_synonyms syn,
708 all_tab_columns col
709 where syn.synonym_name = 'MTL_SYSTEM_ITEMS_B'
710 and col.column_name = 'CONFIG_MODEL_TYPE'
711 and col.OWNER = l_oracle_schema
712 AND col.owner = syn.table_owner
713 AND col.table_name = syn.table_name
714 and rownum < 2;
715
716 Exception
717 when no_data_found then
718 l_exists := 'N';
719 End;
720 l_sql_stmt := 'select config_model_type from MTL_SYSTEM_ITEMS_B '||
721 'where inventory_item_id = :item_id '||
722 'and organization_id = :vld_org_id';
723 --
724 IF l_exists = 'X' THEN
725 BEGIN
726 EXECUTE IMMEDIATE l_sql_stmt INTO x_item_attrib_rec.config_model_type USING p_inventory_item_id,p_organization_id;
727 EXCEPTION
728 WHEN OTHERS THEN
729 x_item_attrib_rec.config_model_type := null;
730 END;
731 ELSE
732 x_item_attrib_rec.config_model_type := null;
733 END If;
734
735
736 SELECT nvl(negative_inv_receipt_code,2)
737 INTO x_item_attrib_rec.negative_balances_code
738 FROM mtl_parameters
739 WHERE organization_id = p_organization_id;
740
741 debug(' serial_control_code : '||x_item_attrib_rec.serial_control_code);
742 debug(' lot_control_code : '||x_item_attrib_rec.lot_control_code);
743 debug(' locator_control_code : '||x_item_attrib_rec.locator_control_code);
744 debug(' revision_control_code : '||x_item_attrib_rec.revision_control_code);
745 debug(' shippable_flag : '||x_item_attrib_rec.shippable_flag);
746 debug(' primary_uom_code : '||x_item_attrib_rec.primary_uom_code);
747
748 EXCEPTION
749 WHEN fnd_api.g_exc_error THEN
750 x_return_status := fnd_api.g_ret_sts_error;
751 END get_item_attributes;
752
753
754 --
755 --
756 --
757 PROCEDURE get_pricing_attributes(
758 p_line_id IN number,
759 x_pricing_attribs_tbl OUT NOCOPY csi_datastructures_pub.pricing_attribs_tbl,
760 x_return_status OUT NOCOPY varchar2)
761 IS
762
763 l_pa_tbl csi_datastructures_pub.pricing_attribs_tbl;
764 l_ind binary_integer := 0;
765
766 CURSOR price_cur IS
767 SELECT pricing_context,
768 pricing_attribute1,
769 pricing_attribute2,
770 pricing_attribute3,
771 pricing_attribute4,
772 pricing_attribute5,
773 pricing_attribute6,
774 pricing_attribute7,
775 pricing_attribute8,
776 pricing_attribute9,
777 pricing_attribute10,
778 pricing_attribute11,
779 pricing_attribute12,
780 pricing_attribute13,
781 pricing_attribute14,
782 pricing_attribute15,
783 pricing_attribute16,
784 pricing_attribute17,
785 pricing_attribute18,
786 pricing_attribute19,
787 pricing_attribute20,
788 pricing_attribute21,
789 pricing_attribute22,
790 pricing_attribute23,
791 pricing_attribute24,
792 pricing_attribute25,
793 pricing_attribute26,
794 pricing_attribute27,
795 pricing_attribute28,
796 pricing_attribute29,
797 pricing_attribute30,
798 pricing_attribute31,
799 pricing_attribute32,
800 pricing_attribute33,
801 pricing_attribute34,
802 pricing_attribute35,
803 pricing_attribute36,
804 pricing_attribute37,
805 pricing_attribute38,
806 pricing_attribute39,
807 pricing_attribute40,
808 pricing_attribute41,
809 pricing_attribute42,
810 pricing_attribute43,
811 pricing_attribute44,
812 pricing_attribute45,
813 pricing_attribute46,
814 pricing_attribute47,
815 pricing_attribute48,
816 pricing_attribute49,
817 pricing_attribute50,
818 pricing_attribute51,
819 pricing_attribute52,
820 pricing_attribute53,
821 pricing_attribute54,
822 pricing_attribute55,
823 pricing_attribute56,
824 pricing_attribute57,
825 pricing_attribute58,
826 pricing_attribute59,
827 pricing_attribute60,
828 pricing_attribute61,
829 pricing_attribute62,
830 pricing_attribute63,
831 pricing_attribute64,
832 pricing_attribute65,
833 pricing_attribute66,
834 pricing_attribute67,
835 pricing_attribute68,
836 pricing_attribute69,
837 pricing_attribute70,
838 pricing_attribute71,
839 pricing_attribute72,
840 pricing_attribute73,
841 pricing_attribute74,
842 pricing_attribute75,
843 pricing_attribute76,
844 pricing_attribute77,
845 pricing_attribute78,
846 pricing_attribute79,
847 pricing_attribute80,
848 pricing_attribute81,
849 pricing_attribute82,
850 pricing_attribute83,
851 pricing_attribute84,
852 pricing_attribute85,
853 pricing_attribute86,
854 pricing_attribute87,
855 pricing_attribute88,
856 pricing_attribute89,
857 pricing_attribute90,
858 pricing_attribute91,
859 pricing_attribute92,
860 pricing_attribute93,
861 pricing_attribute94,
862 pricing_attribute95,
863 pricing_attribute96,
864 pricing_attribute97,
865 pricing_attribute98,
866 pricing_attribute99,
867 pricing_attribute100
868 FROM oe_order_price_attribs
869 WHERE line_id = p_line_id ;
870
871 BEGIN
872
873 x_return_status := fnd_api.g_ret_sts_success;
874
875 api_log('get_pricing_attributes');
876
877 -- Build the pricing attribute table
878 FOR price_rec IN price_cur
879 LOOP
880
881 l_ind := price_cur%rowcount;
882
883 l_pa_tbl(l_ind).pricing_context := price_rec.pricing_context ;
884 l_pa_tbl(l_ind).pricing_attribute1 := price_rec.pricing_attribute1;
885 l_pa_tbl(l_ind).pricing_attribute2 := price_rec.pricing_attribute2;
886 l_pa_tbl(l_ind).pricing_attribute3 := price_rec.pricing_attribute3;
887 l_pa_tbl(l_ind).pricing_attribute4 := price_rec.pricing_attribute4;
888 l_pa_tbl(l_ind).pricing_attribute5 := price_rec.pricing_attribute5;
889 l_pa_tbl(l_ind).pricing_attribute6 := price_rec.pricing_attribute6;
890 l_pa_tbl(l_ind).pricing_attribute7 := price_rec.pricing_attribute7;
891 l_pa_tbl(l_ind).pricing_attribute8 := price_rec.pricing_attribute8;
892 l_pa_tbl(l_ind).pricing_attribute9 := price_rec.pricing_attribute9;
893 l_pa_tbl(l_ind).pricing_attribute10 := price_rec.pricing_attribute10;
894 l_pa_tbl(l_ind).pricing_attribute11 := price_rec.pricing_attribute11;
895 l_pa_tbl(l_ind).pricing_attribute12 := price_rec.pricing_attribute12;
896 l_pa_tbl(l_ind).pricing_attribute13 := price_rec.pricing_attribute13;
897 l_pa_tbl(l_ind).pricing_attribute14 := price_rec.pricing_attribute14;
898 l_pa_tbl(l_ind).pricing_attribute15 := price_rec.pricing_attribute15;
899 l_pa_tbl(l_ind).pricing_attribute16 := price_rec.pricing_attribute16;
900 l_pa_tbl(l_ind).pricing_attribute17 := price_rec.pricing_attribute17;
901 l_pa_tbl(l_ind).pricing_attribute18 := price_rec.pricing_attribute18;
902 l_pa_tbl(l_ind).pricing_attribute19 := price_rec.pricing_attribute19;
903 l_pa_tbl(l_ind).pricing_attribute20 := price_rec.pricing_attribute20;
904 l_pa_tbl(l_ind).pricing_attribute21 := price_rec.pricing_attribute21;
905 l_pa_tbl(l_ind).pricing_attribute22 := price_rec.pricing_attribute22;
906 l_pa_tbl(l_ind).pricing_attribute23 := price_rec.pricing_attribute23;
907 l_pa_tbl(l_ind).pricing_attribute24 := price_rec.pricing_attribute24;
908 l_pa_tbl(l_ind).pricing_attribute25 := price_rec.pricing_attribute25;
909 l_pa_tbl(l_ind).pricing_attribute26 := price_rec.pricing_attribute26;
910 l_pa_tbl(l_ind).pricing_attribute27 := price_rec.pricing_attribute27;
911 l_pa_tbl(l_ind).pricing_attribute28 := price_rec.pricing_attribute28;
912 l_pa_tbl(l_ind).pricing_attribute29 := price_rec.pricing_attribute29;
913 l_pa_tbl(l_ind).pricing_attribute30 := price_rec.pricing_attribute30;
914 l_pa_tbl(l_ind).pricing_attribute31 := price_rec.pricing_attribute31;
915 l_pa_tbl(l_ind).pricing_attribute32 := price_rec.pricing_attribute32;
916 l_pa_tbl(l_ind).pricing_attribute33 := price_rec.pricing_attribute33;
917 l_pa_tbl(l_ind).pricing_attribute34 := price_rec.pricing_attribute34;
918 l_pa_tbl(l_ind).pricing_attribute35 := price_rec.pricing_attribute35;
919 l_pa_tbl(l_ind).pricing_attribute36 := price_rec.pricing_attribute36;
920 l_pa_tbl(l_ind).pricing_attribute37 := price_rec.pricing_attribute37;
921 l_pa_tbl(l_ind).pricing_attribute38 := price_rec.pricing_attribute38;
922 l_pa_tbl(l_ind).pricing_attribute39 := price_rec.pricing_attribute39;
923 l_pa_tbl(l_ind).pricing_attribute40 := price_rec.pricing_attribute40;
924 l_pa_tbl(l_ind).pricing_attribute41 := price_rec.pricing_attribute41;
925 l_pa_tbl(l_ind).pricing_attribute42 := price_rec.pricing_attribute42;
926 l_pa_tbl(l_ind).pricing_attribute43 := price_rec.pricing_attribute43;
927 l_pa_tbl(l_ind).pricing_attribute44 := price_rec.pricing_attribute44;
928 l_pa_tbl(l_ind).pricing_attribute45 := price_rec.pricing_attribute45;
929 l_pa_tbl(l_ind).pricing_attribute46 := price_rec.pricing_attribute46;
930 l_pa_tbl(l_ind).pricing_attribute47 := price_rec.pricing_attribute47;
931 l_pa_tbl(l_ind).pricing_attribute48 := price_rec.pricing_attribute48;
932 l_pa_tbl(l_ind).pricing_attribute49 := price_rec.pricing_attribute49;
933 l_pa_tbl(l_ind).pricing_attribute50 := price_rec.pricing_attribute50;
934 l_pa_tbl(l_ind).pricing_attribute51 := price_rec.pricing_attribute51;
935 l_pa_tbl(l_ind).pricing_attribute52 := price_rec.pricing_attribute52;
936 l_pa_tbl(l_ind).pricing_attribute53 := price_rec.pricing_attribute53;
937 l_pa_tbl(l_ind).pricing_attribute54 := price_rec.pricing_attribute54;
938 l_pa_tbl(l_ind).pricing_attribute55 := price_rec.pricing_attribute55;
939 l_pa_tbl(l_ind).pricing_attribute56 := price_rec.pricing_attribute56;
940 l_pa_tbl(l_ind).pricing_attribute57 := price_rec.pricing_attribute57;
941 l_pa_tbl(l_ind).pricing_attribute58 := price_rec.pricing_attribute58;
942 l_pa_tbl(l_ind).pricing_attribute59 := price_rec.pricing_attribute59;
943 l_pa_tbl(l_ind).pricing_attribute60 := price_rec.pricing_attribute60;
944 l_pa_tbl(l_ind).pricing_attribute61 := price_rec.pricing_attribute61;
945 l_pa_tbl(l_ind).pricing_attribute62 := price_rec.pricing_attribute62;
946 l_pa_tbl(l_ind).pricing_attribute63 := price_rec.pricing_attribute63;
947 l_pa_tbl(l_ind).pricing_attribute64 := price_rec.pricing_attribute64;
948 l_pa_tbl(l_ind).pricing_attribute65 := price_rec.pricing_attribute65;
949 l_pa_tbl(l_ind).pricing_attribute66 := price_rec.pricing_attribute66;
950 l_pa_tbl(l_ind).pricing_attribute67 := price_rec.pricing_attribute67;
951 l_pa_tbl(l_ind).pricing_attribute68 := price_rec.pricing_attribute68;
952 l_pa_tbl(l_ind).pricing_attribute69 := price_rec.pricing_attribute69;
953 l_pa_tbl(l_ind).pricing_attribute70 := price_rec.pricing_attribute70;
954 l_pa_tbl(l_ind).pricing_attribute71 := price_rec.pricing_attribute71;
955 l_pa_tbl(l_ind).pricing_attribute72 := price_rec.pricing_attribute72;
956 l_pa_tbl(l_ind).pricing_attribute73 := price_rec.pricing_attribute73;
957 l_pa_tbl(l_ind).pricing_attribute74 := price_rec.pricing_attribute74;
958 l_pa_tbl(l_ind).pricing_attribute75 := price_rec.pricing_attribute75;
959 l_pa_tbl(l_ind).pricing_attribute76 := price_rec.pricing_attribute76;
960 l_pa_tbl(l_ind).pricing_attribute77 := price_rec.pricing_attribute77;
961 l_pa_tbl(l_ind).pricing_attribute78 := price_rec.pricing_attribute78;
962 l_pa_tbl(l_ind).pricing_attribute79 := price_rec.pricing_attribute79;
963 l_pa_tbl(l_ind).pricing_attribute80 := price_rec.pricing_attribute80;
964 l_pa_tbl(l_ind).pricing_attribute81 := price_rec.pricing_attribute81;
965 l_pa_tbl(l_ind).pricing_attribute82 := price_rec.pricing_attribute82;
966 l_pa_tbl(l_ind).pricing_attribute83 := price_rec.pricing_attribute83;
967 l_pa_tbl(l_ind).pricing_attribute84 := price_rec.pricing_attribute84;
968 l_pa_tbl(l_ind).pricing_attribute85 := price_rec.pricing_attribute85;
969 l_pa_tbl(l_ind).pricing_attribute86 := price_rec.pricing_attribute86;
970 l_pa_tbl(l_ind).pricing_attribute87 := price_rec.pricing_attribute87;
971 l_pa_tbl(l_ind).pricing_attribute88 := price_rec.pricing_attribute88;
972 l_pa_tbl(l_ind).pricing_attribute89 := price_rec.pricing_attribute89;
973 l_pa_tbl(l_ind).pricing_attribute90 := price_rec.pricing_attribute90;
974 l_pa_tbl(l_ind).pricing_attribute91 := price_rec.pricing_attribute91;
975 l_pa_tbl(l_ind).pricing_attribute92 := price_rec.pricing_attribute92;
976 l_pa_tbl(l_ind).pricing_attribute93 := price_rec.pricing_attribute93;
977 l_pa_tbl(l_ind).pricing_attribute94 := price_rec.pricing_attribute94;
978 l_pa_tbl(l_ind).pricing_attribute95 := price_rec.pricing_attribute95;
979 l_pa_tbl(l_ind).pricing_attribute96 := price_rec.pricing_attribute96;
980 l_pa_tbl(l_ind).pricing_attribute97 := price_rec.pricing_attribute97;
981 l_pa_tbl(l_ind).pricing_attribute98 := price_rec.pricing_attribute98;
982 l_pa_tbl(l_ind).pricing_attribute99 := price_rec.pricing_attribute99;
983 l_pa_tbl(l_ind).pricing_attribute100 := price_rec.pricing_attribute100;
984
985 END LOOP;
986
987 x_pricing_attribs_tbl := l_pa_tbl;
988
989 EXCEPTION
990 WHEN fnd_api.g_exc_error THEN
991 x_return_status := fnd_api.g_ret_sts_error;
992 END get_pricing_attributes;
993
994
995 PROCEDURE build_td_from_source(
996 p_split_flag IN varchar2,
997 p_split_quantity IN number,
998 p_split_loop IN number,
999 p_transaction_type_id IN number,
1000 p_source_header_rec IN source_header_rec,
1001 p_source_line_rec IN source_line_rec,
1002 p_csi_txn_rec IN csi_datastructures_pub.transaction_rec,
1003 x_txn_line_rec OUT NOCOPY csi_t_datastructures_grp.txn_line_rec,
1004 x_txn_line_detail_tbl OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
1005 x_txn_party_tbl OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
1006 x_txn_party_acct_tbl OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
1007 x_txn_org_assgn_tbl OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
1008 x_pricing_attribs_tbl OUT NOCOPY csi_datastructures_pub.pricing_attribs_tbl,
1009 x_return_status OUT NOCOPY varchar2)
1010 IS
1011
1012 l_default_sub_type_id number;
1013 l_split_flag varchar2(1) := fnd_api.g_false;
1014 l_split_quantity number;
1015 l_split_loop number;
1016
1017 l_td_ind binary_integer := 0;
1018 l_pt_ind binary_integer := 0;
1019 l_pa_ind binary_integer := 0;
1020 l_oa_ind binary_integer := 0;
1021 l_ea_ind binary_integer := 0;
1022 l_owner_pt_ind binary_integer := 0;
1023
1024 -- for partner ordering Bug 3443175
1025 l_partner_rec oe_install_base_util.partner_order_rec;
1026
1027 l_item_attributes_rec item_attributes_rec;
1028 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
1029
1030 BEGIN
1031
1032 x_return_status := fnd_api.g_ret_sts_success;
1033
1034 api_log('build_td_from_source');
1035
1036 -- get the default sub_type_id
1037 get_default_sub_type_id(
1038 p_transaction_type_id => p_transaction_type_id,
1039 x_sub_type_id => l_default_sub_type_id,
1040 x_return_status => l_return_status);
1041
1042 x_txn_line_rec.source_transaction_type_id := p_transaction_type_id;
1043
1044 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1045 RAISE fnd_api.g_exc_error;
1046 END IF;
1047
1048 -- for partner ordering MRK
1049 -- Included the If condition for Bug 3893279, Don't call this for project Contracts
1050 IF p_transaction_type_id <> 326
1051 THEN
1052 OE_INSTALL_BASE_UTIL.get_partner_ord_rec(p_order_line_id => p_source_line_rec.source_LINE_ID,
1053 x_partner_order_rec => l_partner_rec);
1054 END IF;
1055
1056
1057 l_split_flag := p_split_flag;
1058
1059 IF l_split_flag = fnd_api.g_false THEN
1060
1061 get_item_attributes(
1062 p_transaction_id => p_csi_txn_rec.inv_material_transaction_id,--Added for bug# 14835893
1063 p_inventory_item_id => p_source_line_rec.inventory_item_id,
1064 p_organization_id => p_source_line_rec.organization_id,
1065 x_item_attrib_rec => l_item_attributes_rec,
1066 x_return_status => l_return_status);
1067
1068 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1069 RAISE fnd_api.g_exc_error;
1070 END IF;
1071
1072 IF l_item_attributes_rec.serial_control_code <> 1 then
1073 l_split_flag := fnd_api.g_true;
1074 l_split_quantity := 1;
1075 l_split_loop := p_source_line_rec.source_quantity;
1076 END IF;
1077
1078 IF l_split_flag = fnd_api.g_false THEN
1079 l_split_quantity := p_source_line_rec.source_quantity;
1080 l_split_loop := 1;
1081 END IF;
1082
1083 ELSE
1084 l_split_quantity := p_split_quantity;
1085 l_split_loop := p_split_loop;
1086 END IF;
1087
1088 --
1089 l_pt_ind := 0;
1090 l_pa_ind := 0;
1091 l_oa_ind := 0;
1092
1093 FOR i IN 1 .. l_split_loop
1094 LOOP
1095
1096 l_td_ind := i;
1097
1098 x_txn_line_detail_tbl(l_td_ind).transaction_line_id := fnd_api.g_miss_num;
1099 x_txn_line_detail_tbl(l_td_ind).txn_line_detail_id := fnd_api.g_miss_num;
1100 x_txn_line_detail_tbl(l_td_ind).sub_type_id := l_default_sub_type_id;
1101 x_txn_line_detail_tbl(l_td_ind).inventory_item_id := p_source_line_rec.inventory_item_id;
1102 x_txn_line_detail_tbl(l_td_ind).source_transaction_flag := 'Y';
1103 x_txn_line_detail_tbl(l_td_ind).inv_organization_id := p_source_line_rec.organization_id;
1104 x_txn_line_detail_tbl(l_td_ind).unit_of_measure := p_source_line_rec.uom_code;
1105 x_txn_line_detail_tbl(l_td_ind).inventory_revision := p_source_line_rec.item_revision;
1106 x_txn_line_detail_tbl(l_td_ind).quantity := l_split_quantity;
1107
1108 -- Added IF condition for Bug 4314464
1109 IF l_partner_rec.IB_CURRENT_LOCATION = 'INSTALL_BASE'
1110 THEN
1111 x_txn_line_detail_tbl(l_td_ind).location_type_code := fnd_api.g_miss_char;
1112 x_txn_line_detail_tbl(l_td_ind).location_id := fnd_api.g_miss_num;
1113 ELSE
1114 x_txn_line_detail_tbl(l_td_ind).location_type_code := 'HZ_PARTY_SITES';
1115 x_txn_line_detail_tbl(l_td_ind).location_id := p_source_line_rec.ship_to_party_site_id;
1116 END IF;
1117
1118 -- Added for partner ordering
1119 -- Added IF condition for Bug 4314464
1120 IF l_partner_rec.IB_INSTALLED_AT_LOCATION = 'INSTALL_BASE'
1121 THEN
1122 x_txn_line_detail_tbl(l_td_ind).install_location_type_code := fnd_api.g_miss_char;
1123 x_txn_line_detail_tbl(l_td_ind).install_location_id := fnd_api.g_miss_num;
1124 ELSE
1125 x_txn_line_detail_tbl(l_td_ind).install_location_type_code := 'HZ_PARTY_SITES';
1126 x_txn_line_detail_tbl(l_td_ind).install_location_id := p_source_line_rec.install_to_party_site_id;
1127 END IF;
1128 -- Added for partner ordering
1129
1130 x_txn_line_detail_tbl(l_td_ind).processing_status := 'SUBMIT';
1131 x_txn_line_detail_tbl(l_td_ind).instance_exists_flag := 'N';
1132 x_txn_line_detail_tbl(l_td_ind).object_version_number := 1.0;
1133
1134 -- build owner party record
1135 l_pt_ind := l_pt_ind + 1;
1136 l_owner_pt_ind := l_pt_ind;
1137
1138 x_txn_party_tbl(l_pt_ind).txn_line_detail_id := fnd_api.g_miss_num;
1139 x_txn_party_tbl(l_pt_ind).txn_party_detail_id := fnd_api.g_miss_num;
1140 x_txn_party_tbl(l_pt_ind).txn_line_details_index := l_td_ind;
1141 x_txn_party_tbl(l_pt_ind).party_source_table := 'HZ_PARTIES';
1142
1143 -- For Bug 3443175.
1144 IF l_partner_rec.IB_OWNER = 'INSTALL_BASE'
1145 THEN
1146 x_txn_party_tbl(l_pt_ind).party_source_id := fnd_api.g_miss_num;
1147 ELSE
1148 x_txn_party_tbl(l_pt_ind).party_source_id := p_source_line_rec.owner_party_id;
1149 END IF;
1150
1151 x_txn_party_tbl(l_pt_ind).relationship_type_code := 'OWNER';
1152 x_txn_party_tbl(l_pt_ind).contact_flag := 'N';
1153 x_txn_party_tbl(l_pt_ind).object_version_number := 1.0;
1154
1155 -- build owner party account record
1156 l_pa_ind := l_pa_ind + 1;
1157 x_txn_party_acct_tbl(l_pa_ind).txn_party_detail_id := fnd_api.g_miss_num;
1158 x_txn_party_acct_tbl(l_pa_ind).txn_account_detail_id := fnd_api.g_miss_num;
1159 x_txn_party_acct_tbl(l_pa_ind).txn_party_details_index := l_owner_pt_ind;
1160
1161 -- For Bug 3443175.
1162 IF l_partner_rec.IB_OWNER = 'INSTALL_BASE'
1163 THEN
1164 x_txn_party_acct_tbl(l_pa_ind).account_id := fnd_api.g_miss_num;
1165 ELSE
1166 x_txn_party_acct_tbl(l_pa_ind).account_id := p_source_line_rec.owner_party_account_id;
1167 END IF;
1168
1169 x_txn_party_acct_tbl(l_pa_ind).relationship_type_code := 'OWNER';
1170 IF p_source_line_rec.bill_to_address_id is not null THEN
1171 x_txn_party_acct_tbl(l_pa_ind).bill_to_address_id := p_source_line_rec.bill_to_address_id;
1172 END IF;
1173 IF p_source_line_rec.ship_to_address_id is not null THEN
1174 x_txn_party_acct_tbl(l_pa_ind).ship_to_address_id := p_source_line_rec.ship_to_address_id;
1175 END IF;
1176 x_txn_party_acct_tbl(l_pa_ind).object_version_number := 1.0;
1177
1178 -- build sold_to party
1179
1180 -- build ship_to contact
1181 IF p_source_line_rec.ship_to_contact_party_id is not null THEN
1182
1183 l_pt_ind := l_pt_ind + 1;
1184
1185 x_txn_party_tbl(l_pt_ind).txn_line_detail_id := fnd_api.g_miss_num;
1186 x_txn_party_tbl(l_pt_ind).txn_party_detail_id := fnd_api.g_miss_num;
1187 x_txn_party_tbl(l_pt_ind).txn_line_details_index := l_td_ind;
1188 x_txn_party_tbl(l_pt_ind).party_source_table := 'HZ_PARTIES';
1189 x_txn_party_tbl(l_pt_ind).party_source_id :=
1190 p_source_line_rec.ship_to_contact_party_id;
1191 x_txn_party_tbl(l_pt_ind).relationship_type_code := 'SHIP_TO';
1192 x_txn_party_tbl(l_pt_ind).contact_flag := 'Y';
1193 x_txn_party_tbl(l_pt_ind).contact_party_id := l_owner_pt_ind;
1194 x_txn_party_tbl(l_pt_ind).object_version_number := 1.0;
1195
1196 END IF;
1197
1198 -- build bill_to contact
1199 IF p_source_line_rec.bill_to_contact_party_id is not null THEN
1200
1201 l_pt_ind := l_pt_ind + 1;
1202
1203 x_txn_party_tbl(l_pt_ind).txn_line_detail_id := fnd_api.g_miss_num;
1204 x_txn_party_tbl(l_pt_ind).txn_party_detail_id := fnd_api.g_miss_num;
1205 x_txn_party_tbl(l_pt_ind).txn_line_details_index := l_td_ind;
1206 x_txn_party_tbl(l_pt_ind).party_source_table := 'HZ_PARTIES';
1207 x_txn_party_tbl(l_pt_ind).party_source_id :=
1208 p_source_line_rec.bill_to_contact_party_id;
1209 x_txn_party_tbl(l_pt_ind).relationship_type_code := 'BILL_TO';
1210 x_txn_party_tbl(l_pt_ind).contact_flag := 'Y';
1211 x_txn_party_tbl(l_pt_ind).contact_party_id := l_owner_pt_ind;
1212 x_txn_party_tbl(l_pt_ind).object_version_number := 1.0;
1213
1214 END IF;
1215
1216 -- build org units
1217 IF p_source_line_rec.sold_from_org_id is not null THEN
1218 l_oa_ind := l_oa_ind + 1;
1219 x_txn_org_assgn_tbl(l_oa_ind).txn_line_detail_id := fnd_api.g_miss_num;
1220 x_txn_org_assgn_tbl(l_oa_ind).txn_line_details_index := l_td_ind;
1221 x_txn_org_assgn_tbl(l_oa_ind).operating_unit_id :=
1222 p_source_line_rec.sold_from_org_id;
1223 x_txn_org_assgn_tbl(l_oa_ind).relationship_type_code := 'SOLD_FROM';
1224 x_txn_org_assgn_tbl(l_oa_ind).preserve_detail_flag := 'Y';
1225 x_txn_org_assgn_tbl(l_oa_ind).object_version_number := 1.0;
1226 x_txn_org_assgn_tbl(l_oa_ind).active_end_date := NULL; --fix for bug5511381
1227 END IF;
1228
1229 END LOOP;
1230
1231 END build_td_from_source;
1232 /* ------------------------------------------------------------------- */
1233 /* use the source information and build a default transaction detail */
1234 /* ------------------------------------------------------------------- */
1235
1236 -- this routine also splits the txn_line_detail based on the srl cntrl flag
1237 -- and also based on the parent/child ratio so that the instance are
1238 -- based on the number of txn line detail records
1239
1240 -- for shipping we might want to pass the mtl_txn_table based on which we should
1241 -- build the txn detail table
1242
1243 -- cascades the txn details from the first parent with txn detail.
1244
1245 PROCEDURE build_default_txn_detail(
1246 p_source_table IN varchar2,
1247 p_source_id IN number,
1248 p_source_header_rec IN source_header_rec,
1249 p_source_line_rec IN source_line_rec,
1250 p_csi_txn_rec IN csi_datastructures_pub.transaction_rec,
1251 px_txn_line_rec IN OUT NOCOPY csi_t_datastructures_grp.txn_line_rec, --bug 5194812, changed this param to IN OUT
1252 x_txn_line_detail_tbl OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
1253 x_txn_party_tbl OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
1254 x_txn_party_acct_tbl OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
1255 x_txn_org_assgn_tbl OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
1256 x_pricing_attribs_tbl OUT NOCOPY csi_datastructures_pub.pricing_attribs_tbl,
1257 x_return_status OUT NOCOPY varchar2)
1258 IS
1259
1260 l_default_sub_type_id number;
1261
1262 l_cascade_flag boolean := FALSE;
1263 l_cascade_string varchar2(2000);
1264
1265 l_parent_td_found boolean := FALSE;
1266 l_parent_td_line_rec source_line_rec;
1267 l_trackable_parent_found boolean := FALSE;
1268 l_parent_line_rec source_line_rec;
1269 l_child_order_line_tbl source_line_tbl;
1270
1271 l_txn_line_query_rec csi_t_datastructures_grp.txn_line_query_rec;
1272 l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
1273
1274 l_item_attributes_rec item_attributes_rec;
1275
1276 l_line_dtl_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
1277 l_pty_dtl_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
1278 l_pty_acct_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
1279 l_ii_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
1280 l_org_assgn_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
1281 l_ext_attrib_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
1282 l_csi_ea_tbl csi_t_datastructures_grp.csi_ext_attribs_tbl;
1283 l_csi_eav_tbl csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
1284 l_txn_systems_tbl csi_t_datastructures_grp.txn_systems_tbl;
1285
1286 l_split_flag varchar2(1) := fnd_api.g_false;
1287 l_split_quantity number := 1;
1288 l_split_loop number := 1;
1289
1290 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
1291 l_msg_count number;
1292 l_msg_data varchar2(2000);
1293 l_transaction_type_id number;
1294
1295 BEGIN
1296
1297 x_return_status := fnd_api.g_ret_sts_success;
1298
1299 api_log('build_default_txn_detail');
1300
1301 IF p_source_table = g_om_source_table THEN
1302
1303 px_txn_line_rec.source_transaction_id := p_source_line_rec.source_line_id;
1304 px_txn_line_rec.source_transaction_table := g_om_source_table;
1305
1306 --IF condition added for bug 5194812--
1307 IF nvl(px_txn_line_rec.source_transaction_type_id,fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
1308 px_txn_line_rec.source_transaction_type_id := g_om_txn_type_id;
1309 END IF;
1310
1311 px_txn_line_rec.processing_status := 'SUBMIT';
1312
1313 IF p_source_line_rec.link_to_line_id is not null THEN
1314
1315 /* the following code is to identify the first trackable parent having
1316 the installation detail. This is to cascade the installation detail
1317 */
1318 get_parent_with_txn_detail(
1319 p_source_line_rec => p_source_line_rec,
1320 x_parent_found => l_parent_td_found,
1321 x_parent_line_rec => l_parent_td_line_rec,
1322 x_return_status => l_return_status);
1323
1324 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1325 RAISE fnd_api.g_exc_error;
1326 END IF;
1327
1328 IF l_parent_td_found THEN
1329 debug(' Parent with transaction detail found. Line ID :'||l_parent_td_line_rec.source_line_id);
1330
1331 cascade_txn_detail(
1332 p_parent_line_rec => l_parent_td_line_rec,
1333 p_child_line_rec => p_source_line_rec,
1334 x_txn_line_detail_tbl => l_line_dtl_tbl,
1335 x_txn_party_tbl => l_pty_dtl_tbl,
1336 x_txn_party_acct_tbl => l_pty_acct_tbl,
1337 x_txn_org_assgn_tbl => l_org_assgn_tbl,
1338 x_return_status => l_return_status);
1339
1340 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1341 RAISE fnd_api.g_exc_error;
1342 END IF;
1343
1344 l_cascade_flag := TRUE;
1345
1346 END IF;
1347
1348 END IF;
1349
1350 IF l_cascade_flag THEN
1351
1352 x_txn_line_detail_tbl := l_line_dtl_tbl;
1353 x_txn_party_tbl := l_pty_dtl_tbl;
1354 x_txn_party_acct_tbl := l_pty_acct_tbl;
1355 x_txn_org_assgn_tbl := l_org_assgn_tbl;
1356
1357 -- rebuild_txn_details
1358 rebuild_txn_detail(
1359 p_source_table => p_source_table,
1360 p_source_id => p_source_id,
1361 p_source_header_rec => p_source_header_rec,
1362 p_source_line_rec => p_source_line_rec,
1363 p_csi_txn_rec => p_csi_txn_rec,
1364 px_txn_line_rec => px_txn_line_rec,
1365 px_txn_line_detail_tbl => x_txn_line_detail_tbl,
1366 px_txn_party_tbl => x_txn_party_tbl,
1367 px_txn_party_acct_tbl => x_txn_party_acct_tbl,
1368 px_txn_org_assgn_tbl => x_txn_org_assgn_tbl,
1369 x_pricing_attribs_tbl => x_pricing_attribs_tbl,
1370 x_return_status => l_return_status);
1371
1372 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1373 RAISE fnd_api.g_exc_error;
1374 END IF;
1375
1376 ELSE -- not(l_cascade_flag) not cascaded from the parent
1377
1378 /* this piece or code is to figure out if the order line is eligible for a
1379 split for building parent and child relationship
1380 */
1381 IF p_source_line_rec.link_to_line_id is not null THEN
1382
1383 get_ib_trackable_parent(
1384 p_source_line_rec => p_source_line_rec,
1385 x_parent_found => l_trackable_parent_found,
1386 x_parent_line_rec => l_parent_line_rec,
1387 x_return_status => l_return_status);
1388
1389 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1390 RAISE fnd_api.g_exc_error;
1391 END IF;
1392
1393 IF l_trackable_parent_found THEN
1394 l_split_flag := fnd_api.g_true;
1395 l_split_quantity := p_source_line_rec.source_quantity/l_parent_line_rec.source_quantity;
1396 l_split_loop := l_parent_line_rec.source_quantity;
1397 END IF;
1398
1399 END IF;
1400
1401 IF p_source_line_rec.source_quantity > 1 THEN
1402
1403 get_ib_trackable_children(
1404 p_current_line_id => p_source_line_rec.source_line_id,
1405 x_trackable_line_tbl => l_child_order_line_tbl,
1406 x_return_status => l_return_status);
1407
1408 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1409 RAISE fnd_api.g_exc_error;
1410 END IF;
1411
1412 IF l_child_order_line_tbl.COUNT > 0 THEN
1413 l_split_flag := fnd_api.g_true;
1414 l_split_quantity := 1;
1415 l_split_loop := p_source_line_rec.source_quantity;
1416 END IF;
1417
1418 END IF;
1419
1420 -- based on how it should be split while creating the default txn detail
1421 l_transaction_type_id := px_txn_line_rec.source_transaction_type_id;
1422
1423 build_td_from_source(
1424 p_split_flag => l_split_flag,
1425 p_split_quantity => l_split_quantity,
1426 p_split_loop => l_split_loop,
1427 p_transaction_type_id => l_transaction_type_id , --bug 5194812
1428 p_source_header_rec => p_source_header_rec,
1429 p_source_line_rec => p_source_line_rec,
1430 p_csi_txn_rec => p_csi_txn_rec,
1431 x_txn_line_rec => px_txn_line_rec,
1432 x_txn_line_detail_tbl => x_txn_line_detail_tbl,
1433 x_txn_party_tbl => x_txn_party_tbl,
1434 x_txn_party_acct_tbl => x_txn_party_acct_tbl,
1435 x_txn_org_assgn_tbl => x_txn_org_assgn_tbl,
1436 x_pricing_attribs_tbl => x_pricing_attribs_tbl,
1437 x_return_status => l_return_status);
1438
1439 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1440 RAISE fnd_api.g_exc_error;
1441 END IF;
1442
1443 END IF; -- cascade check
1444 --
1445 ELSIF p_source_table = g_oke_source_table THEN
1446
1447 l_split_flag := fnd_api.g_false;
1448 l_split_quantity := p_source_line_rec.source_quantity;
1449 l_split_loop := 1;
1450
1451 build_td_from_source(
1452 p_split_flag => l_split_flag,
1453 p_split_quantity => l_split_quantity,
1454 p_split_loop => l_split_loop,
1455 p_transaction_type_id => g_oke_txn_type_id,
1456 p_source_header_rec => p_source_header_rec,
1457 p_source_line_rec => p_source_line_rec,
1458 p_csi_txn_rec => p_csi_txn_rec,
1459 x_txn_line_rec => px_txn_line_rec,
1460 x_txn_line_detail_tbl => x_txn_line_detail_tbl,
1461 x_txn_party_tbl => x_txn_party_tbl,
1462 x_txn_party_acct_tbl => x_txn_party_acct_tbl,
1463 x_txn_org_assgn_tbl => x_txn_org_assgn_tbl,
1464 x_pricing_attribs_tbl => x_pricing_attribs_tbl,
1465 x_return_status => l_return_status);
1466
1467 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1468 RAISE fnd_api.g_exc_error;
1469 END IF;
1470
1471 END IF;
1472
1473 -- build pricing attribs
1474 get_pricing_attributes(
1475 p_line_id => p_source_line_rec.source_line_id,
1476 x_pricing_attribs_tbl => x_pricing_attribs_tbl,
1477 x_return_status => l_return_status);
1478
1479 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1480 RAISE fnd_api.g_exc_error;
1481 END IF;
1482
1483 EXCEPTION
1484 WHEN fnd_api.g_exc_error THEN
1485 x_return_status := fnd_api.g_ret_sts_error;
1486 END build_default_txn_detail;
1487
1488
1489 /* ------------------------------------------------------------------- */
1490 /* this routine is to rebuild the user entered transaction detail with */
1491 /* the addition of all the defaults like contacts, org assignments etc.*/
1492 /* ------------------------------------------------------------------- */
1493
1494 -- rebuild also splits the transaction detail bases on the serial control
1495 -- flag or the based on the parent/child ratios.
1496
1497 PROCEDURE rebuild_txn_detail(
1498 p_source_table IN varchar2,
1499 p_source_id IN number,
1500 p_source_header_rec IN source_header_rec,
1501 p_source_line_rec IN source_line_rec,
1502 p_csi_txn_rec IN csi_datastructures_pub.transaction_rec,
1503 px_txn_line_rec IN OUT NOCOPY csi_t_datastructures_grp.txn_line_rec,
1504 px_txn_line_detail_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
1505 px_txn_party_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
1506 px_txn_party_acct_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
1507 px_txn_org_assgn_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
1508 x_pricing_attribs_tbl OUT NOCOPY csi_datastructures_pub.pricing_attribs_tbl,
1509 x_return_status OUT NOCOPY varchar2)
1510 IS
1511 l_tld_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
1512 l_pty_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
1513 l_pa_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
1514 l_oa_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
1515 l_ii_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
1516 l_eav_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
1517 l_systems_tbl csi_t_datastructures_grp.txn_systems_tbl;
1518
1519 l_return_status varchar2(1);
1520 l_msg_count number;
1521 l_msg_data varchar2(2000);
1522
1523 l_owner_pty_index binary_integer := 0;
1524
1525 l_owner_found boolean := FALSE;
1526 l_ship_to_contact_found boolean := FALSE;
1527 l_bill_to_contact_found boolean := FALSE;
1528 l_org_assignment_found boolean := FALSE;
1529
1530 l_n_pt_ind binary_integer := 0;
1531 l_n_pa_ind binary_integer := 0;
1532 l_oa_n_ind binary_integer := 0;
1533
1534 BEGIN
1535 x_return_status := fnd_api.g_ret_sts_success;
1536 api_log('rebuild_txn_detail');
1537
1538 -- convert all the ids to indexes
1539
1540 l_tld_tbl := px_txn_line_detail_tbl;
1541 l_pty_tbl := px_txn_party_tbl;
1542 l_pa_tbl := px_txn_party_acct_tbl;
1543 l_oa_tbl := px_txn_org_assgn_tbl;
1544
1545 csi_t_utilities_pvt.convert_ids_to_index(
1546 px_line_dtl_tbl => l_tld_tbl,
1547 px_pty_dtl_tbl => l_pty_tbl,
1548 px_pty_acct_tbl => l_pa_tbl,
1549 px_ii_rltns_tbl => l_ii_rltns_tbl,
1550 px_org_assgn_tbl => l_oa_tbl,
1551 px_ext_attrib_tbl => l_eav_tbl,
1552 px_txn_systems_tbl => l_systems_tbl);
1553
1554 -- check if the tld needs to be split based on
1555 -- a. order line being a parent
1556 -- b. serialized item
1557 -- c. the split profile is turned on
1558 -- for ATandT qty is always one so not putting in the logic now.
1559
1560
1561 IF l_tld_tbl.count > 0 THEN
1562 FOR l_ind IN l_tld_tbl.FIRST .. l_tld_tbl.LAST
1563 LOOP
1564
1565 l_owner_found := FALSE;
1566 l_ship_to_contact_found := FALSE;
1567 l_bill_to_contact_found := FALSE;
1568 l_org_assignment_found := FALSE;
1569 l_owner_pty_index := null;
1570
1571 IF l_tld_tbl(l_ind).source_transaction_flag = 'Y' THEN
1572 -- check if every source tld has all the default contacts, org assign etc
1573 IF l_pty_tbl.COUNT > 0 THEN
1574 FOR l_pt_ind IN l_pty_tbl.FIRST .. l_pty_tbl.LAST
1575 LOOP
1576 IF l_pty_tbl(l_pt_ind).txn_line_details_index = l_ind THEN
1577 -- check if owner record is there /compare it with the om line customer
1578 -- check and default the contact party /ship to/ bill to
1579 -- also eliminate the owner account based on the owner change flag
1580 IF l_pty_tbl(l_pt_ind).relationship_type_code = 'OWNER' THEN
1581
1582 l_owner_found := TRUE;
1583 l_owner_pty_index := l_pt_ind;
1584
1585 END IF;
1586
1587 IF l_pty_tbl(l_pt_ind).relationship_type_code = 'SHIP_TO'
1588 AND
1589 l_pty_tbl(l_pt_ind).contact_flag = 'Y'
1590 AND
1591 l_pty_tbl(l_pt_ind).party_source_table = 'HZ_PARTIES'
1592 AND
1593 l_pty_tbl(l_pt_ind).party_source_id = p_source_line_rec.ship_to_contact_party_id
1594 THEN
1595 l_ship_to_contact_found := TRUE;
1596 END IF;
1597
1598 IF l_pty_tbl(l_pt_ind).relationship_type_code = 'BILL_TO'
1599 AND
1600 l_pty_tbl(l_pt_ind).contact_flag = 'Y'
1601 AND
1602 l_pty_tbl(l_pt_ind).party_source_table = 'HZ_PARTIES'
1603 AND
1604 l_pty_tbl(l_pt_ind).party_source_id = p_source_line_rec.bill_to_contact_party_id
1605 THEN
1606 l_bill_to_contact_found := TRUE;
1607 END IF;
1608
1609 IF l_pa_tbl.COUNT > 0 THEN
1610
1611 FOR l_pa_ind IN l_pa_tbl.FIRST .. l_pa_tbl.LAST
1612 LOOP
1613 IF l_pa_tbl(l_pa_ind).txn_party_details_index = l_pt_ind THEN
1614 -- check and default the owner account
1615 null;
1616 END IF;
1617 END LOOP;
1618 END IF;
1619 END IF; -- txn_line_details_index = l_ind
1620 END LOOP;
1621 END IF; -- pty_tbl.count > 0
1622
1623 IF l_oa_tbl.COUNT > 0 THEN
1624 FOR l_oa_ind IN l_oa_tbl.FIRST .. l_oa_tbl.LAST
1625 LOOP
1626 IF l_oa_tbl(l_oa_ind).txn_line_details_index = l_ind THEN
1627 -- check and default the org assignments
1628 null;
1629 IF l_oa_tbl(l_oa_ind).relationship_type_code = 'SOLD_FROM'
1630 AND
1631 l_oa_tbl(l_oa_ind).operating_unit_id = p_source_line_rec.sold_from_org_id
1632 THEN
1633 l_org_assignment_found := TRUE;
1634 END IF;
1635 END IF;
1636 END LOOP;
1637 END IF; -- l_oa_tbl.count > 0
1638
1639 IF l_owner_found THEN
1640
1641 IF NOT (l_ship_to_contact_found)
1642 AND
1643 p_source_line_rec.ship_to_contact_party_id is not null
1644 THEN
1645
1646 l_n_pt_ind := l_pty_tbl.count + 1;
1647
1648 l_pty_tbl(l_n_pt_ind).txn_line_detail_id := fnd_api.g_miss_num;
1649 l_pty_tbl(l_n_pt_ind).txn_party_detail_id := fnd_api.g_miss_num;
1650 l_pty_tbl(l_n_pt_ind).txn_line_details_index := l_ind;
1651 l_pty_tbl(l_n_pt_ind).party_source_table := 'HZ_PARTIES';
1652 l_pty_tbl(l_n_pt_ind).party_source_id := p_source_line_rec.ship_to_contact_party_id;
1653 l_pty_tbl(l_n_pt_ind).relationship_type_code := 'SHIP_TO';
1654 l_pty_tbl(l_n_pt_ind).contact_flag := 'Y';
1655 l_pty_tbl(l_n_pt_ind).contact_party_id := l_owner_pty_index;
1656 l_pty_tbl(l_n_pt_ind).object_version_number := 1.0;
1657 END IF;
1658
1659 IF NOT (l_bill_to_contact_found)
1660 AND
1661 p_source_line_rec.bill_to_contact_party_id is not null
1662 THEN
1663 l_pty_tbl(l_n_pt_ind).txn_line_detail_id := fnd_api.g_miss_num;
1664 l_pty_tbl(l_n_pt_ind).txn_party_detail_id := fnd_api.g_miss_num;
1665 l_pty_tbl(l_n_pt_ind).txn_line_details_index := l_ind;
1666 l_pty_tbl(l_n_pt_ind).party_source_table := 'HZ_PARTIES';
1667 l_pty_tbl(l_n_pt_ind).party_source_id := p_source_line_rec.bill_to_contact_party_id;
1668 l_pty_tbl(l_n_pt_ind).relationship_type_code := 'BILL_TO';
1669 l_pty_tbl(l_n_pt_ind).contact_flag := 'Y';
1670 l_pty_tbl(l_n_pt_ind).contact_party_id := l_owner_pty_index;
1671 l_pty_tbl(l_n_pt_ind).object_version_number := 1.0;
1672 END IF;
1673
1674 END IF;
1675
1676 IF NOT(l_org_assignment_found) THEN
1677
1678 l_oa_n_ind := l_oa_tbl.COUNT + 1;
1679
1680 l_oa_tbl(l_oa_n_ind).txn_line_detail_id := fnd_api.g_miss_num;
1681 l_oa_tbl(l_oa_n_ind).txn_line_details_index := l_ind;
1682 l_oa_tbl(l_oa_n_ind).operating_unit_id := p_source_line_rec.sold_from_org_id;
1683 l_oa_tbl(l_oa_n_ind).relationship_type_code := 'SOLD_FROM';
1684 l_oa_tbl(l_oa_n_ind).preserve_detail_flag := 'Y';
1685 l_oa_tbl(l_oa_n_ind).object_version_number := 1.0;
1686
1687 END IF;
1688
1689 END IF; -- source_transaction_flag = 'Y'
1690 END LOOP; -- l_tld_tbl loop
1691 END IF; -- l_tld_tbl.count > 0
1692
1693 px_txn_line_detail_tbl := l_tld_tbl;
1694 px_txn_party_tbl := l_pty_tbl;
1695 px_txn_party_acct_tbl := l_pa_tbl;
1696 px_txn_org_assgn_tbl := l_oa_tbl;
1697
1698 IF px_txn_line_rec.source_transaction_table = 'OE_ORDER_LINES_ALL' THEN
1699
1700 get_pricing_attributes(
1701 p_line_id => px_txn_line_rec.source_transaction_id,
1702 x_pricing_attribs_tbl => x_pricing_attribs_tbl,
1703 x_return_status => l_return_status);
1704
1705 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1706 RAISE fnd_api.g_exc_error;
1707 END IF;
1708
1709 END IF;
1710
1711
1712 EXCEPTION
1713 WHEN fnd_api.g_exc_error THEN
1714 x_return_status := fnd_api.g_ret_sts_error;
1715 END rebuild_txn_detail;
1716
1717 --
1718 --
1719 --
1720 PROCEDURE get_cz_txn_details(
1721 p_config_session_key IN csi_utility_grp.config_session_key,
1722 x_txn_line_rec OUT NOCOPY csi_t_datastructures_grp.txn_line_rec,
1723 x_txn_line_dtl_tbl OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
1724 x_txn_party_tbl OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
1725 x_txn_party_acct_tbl OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
1726 x_txn_org_assgn_tbl OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
1727 x_txn_ii_rltns_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
1728 x_txn_eav_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
1729 x_return_status OUT NOCOPY varchar2)
1730 IS
1731
1732 l_txn_line_query_rec csi_t_datastructures_grp.txn_line_query_rec;
1733 l_txn_line_detail_query_rec csi_t_datastructures_grp.txn_line_detail_query_rec;
1734
1735 l_g_line_dtl_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
1736 l_g_pty_dtl_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
1737 l_g_pty_acct_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
1738 l_g_ii_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
1739 l_g_org_assgn_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
1740 l_g_ext_attrib_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
1741 l_g_csi_ea_tbl csi_t_datastructures_grp.csi_ext_attribs_tbl;
1742 l_g_csi_eav_tbl csi_t_datastructures_grp.csi_ext_attrib_vals_tbl;
1743 l_g_txn_systems_tbl csi_t_datastructures_grp.txn_systems_tbl;
1744
1745 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
1746 l_msg_data varchar2(512);
1747 l_msg_count number;
1748
1749 BEGIN
1750
1751 x_return_status := fnd_api.g_ret_sts_success;
1752
1753 api_log('get_cz_txn_details');
1754
1755 --l_txn_line_query_rec.source_transaction_type_id := 401;
1756 l_txn_line_query_rec.source_transaction_table := 'CONFIGURATOR';
1757 l_txn_line_query_rec.config_session_hdr_id := p_config_session_key.session_hdr_id;
1758 l_txn_line_query_rec.config_session_item_id := p_config_session_key.session_item_id;
1759 l_txn_line_query_rec.config_session_rev_num := p_config_session_key.session_rev_num;
1760
1761 csi_t_txn_details_grp.get_transaction_details(
1762 p_api_version => 1.0,
1763 p_commit => fnd_api.g_false,
1764 p_init_msg_list => fnd_api.g_true,
1765 p_validation_level => fnd_api.g_valid_level_full,
1766 p_txn_line_query_rec => l_txn_line_query_rec,
1767 p_txn_line_detail_query_rec => l_txn_line_detail_query_rec,
1768 x_txn_line_detail_tbl => l_g_line_dtl_tbl,
1769 p_get_parties_flag => fnd_api.g_false,
1770 x_txn_party_detail_tbl => l_g_pty_dtl_tbl,
1771 p_get_pty_accts_flag => fnd_api.g_false,
1772 x_txn_pty_acct_detail_tbl => l_g_pty_acct_tbl,
1773 p_get_ii_rltns_flag => fnd_api.g_true,
1774 x_txn_ii_rltns_tbl => l_g_ii_rltns_tbl,
1775 p_get_org_assgns_flag => fnd_api.g_false,
1776 x_txn_org_assgn_tbl => l_g_org_assgn_tbl,
1777 p_get_ext_attrib_vals_flag => fnd_api.g_true,
1778 x_txn_ext_attrib_vals_tbl => l_g_ext_attrib_tbl,
1779 p_get_csi_attribs_flag => fnd_api.g_false,
1780 x_csi_ext_attribs_tbl => l_g_csi_ea_tbl,
1781 p_get_csi_iea_values_flag => fnd_api.g_false,
1782 x_csi_iea_values_tbl => l_g_csi_eav_tbl,
1783 p_get_txn_systems_flag => fnd_api.g_false,
1784 x_txn_systems_tbl => l_g_txn_systems_tbl,
1785 x_return_status => l_return_status,
1786 x_msg_count => l_msg_count,
1787 x_msg_data => l_msg_data);
1788
1789 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1790 RAISE fnd_api.g_exc_error;
1791 END IF;
1792
1793 IF l_g_line_dtl_tbl.COUNT > 0 THEN
1794
1795 BEGIN
1796 SELECT source_transaction_type_id,
1797 transaction_line_id,
1798 source_transaction_table,
1799 config_session_hdr_id,
1800 config_session_item_id,
1801 config_session_rev_num
1802 INTO x_txn_line_rec.source_transaction_type_id,
1803 x_txn_line_rec.transaction_line_id,
1804 x_txn_line_rec.source_transaction_table,
1805 x_txn_line_rec.config_session_hdr_id,
1806 x_txn_line_rec.config_session_item_id,
1807 x_txn_line_rec.config_session_rev_num
1808 FROM csi_t_transaction_lines
1809 WHERE transaction_line_id = l_g_line_dtl_tbl(1).transaction_line_id;
1810 EXCEPTION
1811 WHEN no_data_found THEN
1812 null;
1813 END;
1814
1815 END IF;
1816
1817 IF l_g_line_dtl_tbl.COUNT > 0 THEN
1818 FOR l_ind IN l_g_line_dtl_tbl.FIRST .. l_g_line_dtl_tbl.LAST
1819 LOOP
1820 l_g_line_dtl_tbl(l_ind).source_txn_line_detail_id :=
1821 l_g_line_dtl_tbl(l_ind).txn_line_detail_id;
1822 END LOOP;
1823 END IF;
1824
1825
1826 x_txn_line_dtl_tbl := l_g_line_dtl_tbl;
1827 x_txn_ii_rltns_tbl := l_g_ii_rltns_tbl;
1828 x_txn_eav_tbl := l_g_ext_attrib_tbl;
1829
1830 debug('txn details record count :-');
1831 debug(' txn_line_dtl_tbl :'||x_txn_line_dtl_tbl.COUNT);
1832 debug(' txn_ii_rltns_tbl :'||x_txn_ii_rltns_tbl.COUNT);
1833 debug(' txn_eav_tbl :'||x_txn_eav_tbl.COUNT);
1834
1835 EXCEPTION
1836 WHEN fnd_api.g_exc_error THEN
1837 x_return_status := fnd_api.g_ret_sts_error;
1838 END get_cz_txn_details;
1839
1840 --
1841 --
1842 --
1843 PROCEDURE get_config_keys_for_order(
1844 p_header_id IN number,
1845 x_config_session_keys OUT NOCOPY csi_utility_grp.config_session_keys,
1846 x_return_status OUT NOCOPY varchar2)
1847 IS
1848
1849 CURSOR keys_cur IS
1850 SELECT config_header_id config_session_hdr_id,
1851 config_rev_nbr config_session_rev_num,
1852 configuration_id config_session_item_id
1853 FROM oe_order_lines_all
1854 WHERE header_id = p_header_id;
1855
1856 l_ind binary_integer := 0;
1857
1858 l_return_status varchar2(1);
1859 l_msg_count number;
1860 l_msg_data varchar2(2000);
1861
1862 BEGIN
1863 x_return_status := fnd_api.g_ret_sts_success;
1864 api_log('get_config_keys_for_order');
1865
1866 FOR keys_rec IN keys_cur
1867 LOOP
1868
1869 l_ind := keys_cur%rowcount;
1870
1871 x_config_session_keys(l_ind).session_hdr_id := keys_rec.config_session_hdr_id;
1872 x_config_session_keys(l_ind).session_item_id := keys_rec.config_session_item_id;
1873 x_config_session_keys(l_ind).session_rev_num := keys_rec.config_session_rev_num;
1874
1875 END LOOP;
1876
1877 EXCEPTION
1878 WHEN fnd_api.g_exc_error THEN
1879 x_return_status := fnd_api.g_ret_sts_error;
1880 END get_config_keys_for_order;
1881
1882 --
1883 --
1884 --
1885 PROCEDURE get_all_txn_rltns_for_order(
1886 p_header_id IN number,
1887 x_txn_ii_rltns_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
1888 x_return_status OUT NOCOPY varchar2)
1889 IS
1890
1891 -- get_cz_txn_details variable
1892 l_txn_line_rec csi_t_datastructures_grp.txn_line_rec;
1893 l_txn_line_dtl_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
1894 l_txn_party_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
1895 l_txn_party_acct_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
1896 l_txn_org_assgn_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
1897 l_txn_ii_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
1898 l_txn_eav_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
1899
1900 l_order_session_keys csi_utility_grp.config_session_keys;
1901 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
1902
1903 x_ind binary_integer := 0;
1904
1905 BEGIN
1906
1907 x_return_status := fnd_api.g_ret_sts_success;
1908 api_log('get_all_txn_rltns_for_order');
1909
1910 -- get all the session keys for the order using the header_id
1911 get_config_keys_for_order(
1912 p_header_id => p_header_id,
1913 x_config_session_keys => l_order_session_keys,
1914 x_return_status => l_return_status);
1915
1916 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1917 RAISE fnd_api.g_exc_error;
1918 END IF;
1919
1920 IF l_order_session_keys.COUNT > 0 THEN
1921 FOR l_ind IN l_order_session_keys.FIRST .. l_order_session_keys.LAST
1922 LOOP
1923
1924 get_cz_txn_details(
1925 p_config_session_key => l_order_session_keys(l_ind),
1926 x_txn_line_rec => l_txn_line_rec,
1927 x_txn_line_dtl_tbl => l_txn_line_dtl_tbl,
1928 x_txn_party_tbl => l_txn_party_tbl,
1929 x_txn_party_acct_tbl => l_txn_party_acct_tbl,
1930 x_txn_org_assgn_tbl => l_txn_org_assgn_tbl,
1931 x_txn_ii_rltns_tbl => l_txn_ii_rltns_tbl,
1932 x_txn_eav_tbl => l_txn_eav_tbl,
1933 x_return_status => l_return_status);
1934
1935 IF l_return_status <> fnd_api.g_ret_sts_success THEN
1936 RAISE fnd_api.g_exc_error;
1937 END IF;
1938
1939 IF l_txn_ii_rltns_tbl.COUNT > 0 THEN
1940 FOR l_ii_ind IN l_txn_ii_rltns_tbl.FIRST .. l_txn_ii_rltns_tbl.LAST
1941 LOOP
1942
1943 x_ind := x_ind + 1;
1944 x_txn_ii_rltns_tbl(x_ind) := l_txn_ii_rltns_tbl(l_ii_ind);
1945
1946 END LOOP;
1947 END IF;
1948
1949 END LOOP;
1950 END IF;
1951
1952 EXCEPTION
1953 WHEN fnd_api.g_exc_error THEN
1954 x_return_status := fnd_api.g_ret_sts_error;
1955 END get_all_txn_rltns_for_order;
1956
1957 --
1958 --
1959 --
1960 PROCEDURE filter_relations(
1961 p_instance_key IN csi_utility_grp.config_instance_key,
1962 p_transaction_line_id IN number,
1963 px_txn_ii_rltns_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
1964 x_return_status OUT NOCOPY varchar2)
1965 IS
1966
1967 l_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
1968 l_new_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
1969 l_o_ind binary_integer := 0;
1970 l_n_ind binary_integer := 0;
1971 l_subject_object_flag varchar2(1);
1972 l_instance_found boolean := FALSE;
1973 l_already_processed boolean := FALSE;
1974 l_processing_status varchar2(30);
1975
1976 l_dummy varchar2(1);
1977 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
1978
1979 BEGIN
1980
1981 x_return_status := fnd_api.g_ret_sts_success;
1982 api_log('filter_relations');
1983
1984 l_rltns_tbl := px_txn_ii_rltns_tbl;
1985
1986 -- rebuild the relations for eliminating the already processed relations
1987 -- and the cannot process relations (subject or object not as instance)
1988
1989 IF l_rltns_tbl.count > 0 THEN
1990 FOR l_ind IN l_rltns_tbl.FIRST .. l_rltns_tbl.LAST
1991 LOOP
1992
1993 l_instance_found := FALSE;
1994
1995 IF ( l_rltns_tbl(l_ind).sub_config_inst_hdr_id = p_instance_key.inst_hdr_id
1996 AND
1997 l_rltns_tbl(l_ind).sub_config_inst_rev_num = p_instance_key.inst_rev_num
1998 AND
1999 l_rltns_tbl(l_ind).sub_config_inst_item_id = p_instance_key.inst_item_id
2000 )
2001 THEN
2002 l_subject_object_flag := 'O';
2003 ELSE
2004 null;
2005 END IF;
2006
2007 IF ( l_rltns_tbl(l_ind).obj_config_inst_hdr_id = p_instance_key.inst_hdr_id
2008 AND
2009 l_rltns_tbl(l_ind).obj_config_inst_rev_num = p_instance_key.inst_rev_num
2010 AND
2011 l_rltns_tbl(l_ind).obj_config_inst_item_id = p_instance_key.inst_item_id
2012 )
2013 THEN
2014 l_subject_object_flag := 'S';
2015 ELSE
2016 null;
2017 END IF;
2018
2019 -- check if it is existing as an instance in installed base
2020 -- if not then eliminate this relation
2021 debug('transaction_line_id :'||l_rltns_tbl(l_ind).transaction_line_id);
2022 debug('p_transaction_line_id :'||p_transaction_line_id);
2023
2024 l_processing_status := 'PROCESSED';
2025
2026 IF l_rltns_tbl(l_ind).transaction_line_id <> p_transaction_line_id THEN
2027 BEGIN
2028 SELECT processing_status
2029 INTO l_processing_status
2030 FROM csi_t_transaction_lines
2031 WHERE transaction_line_id = l_rltns_tbl(l_ind).transaction_line_id;
2032 END;
2033 END IF;
2034
2035 IF l_processing_status = 'PROCESSED' THEN
2036
2037 IF l_subject_object_flag = 'O' THEN
2038
2039 debug('This relation is OBJECT to the current processing line detail');
2040
2041 debug(' inst_hdr_id :'||l_rltns_tbl(l_ind).obj_config_inst_hdr_id);
2042 debug(' inst_rev_num :'||l_rltns_tbl(l_ind).obj_config_inst_rev_num);
2043 debug(' inst_item_id :'||l_rltns_tbl(l_ind).obj_config_inst_item_id);
2044 debug(' relationship :'||l_rltns_tbl(l_ind).relationship_type_code);
2045
2046 IF l_rltns_tbl(l_ind).object_type = 'I' THEN
2047 l_instance_found := TRUE;
2048 ELSE
2049 BEGIN
2050 SELECT 'Y' INTO l_dummy
2051 FROM csi_item_instances
2052 WHERE config_inst_hdr_id = l_rltns_tbl(l_ind).obj_config_inst_hdr_id
2053 --AND config_inst_rev_num = l_rltns_tbl(l_ind).obj_config_inst_rev_num
2054 AND config_inst_item_id = l_rltns_tbl(l_ind).obj_config_inst_item_id;
2055
2056 l_instance_found := TRUE;
2057 EXCEPTION
2058 WHEN NO_DATA_FOUND THEN
2059 BEGIN
2060 SELECT 'Y' INTO l_dummy
2061 FROM CSI_T_TXN_LINE_DETAILS
2062 WHERE txn_line_detail_id = l_rltns_tbl(l_ind).object_id
2063 AND instance_id IS NOT NULL;
2064
2065 l_instance_found := TRUE;
2066 EXCEPTION
2067 WHEN NO_DATA_FOUND THEN
2068 l_instance_found := FALSE;
2069 END;
2070 END;
2071 END IF;
2072
2073 ELSIF l_subject_object_flag = 'S' THEN
2074
2075 debug('This relation is SUBJECT to the current processing line detail');
2076
2077 debug(' inst_hdr_id :'||l_rltns_tbl(l_ind).sub_config_inst_hdr_id);
2078 debug(' inst_rev_num :'||l_rltns_tbl(l_ind).sub_config_inst_rev_num);
2079 debug(' inst_item_id :'||l_rltns_tbl(l_ind).sub_config_inst_item_id);
2080 debug(' relationship :'||l_rltns_tbl(l_ind).relationship_type_code);
2081
2082 IF l_rltns_tbl(l_ind).subject_type = 'I' THEN
2083 l_instance_found := TRUE;
2084 ELSE
2085 BEGIN
2086 SELECT 'Y' INTO l_dummy
2087 FROM csi_item_instances
2088 WHERE config_inst_hdr_id = l_rltns_tbl(l_ind).sub_config_inst_hdr_id
2089 --AND config_inst_rev_num = l_rltns_tbl(l_ind).sub_config_inst_rev_num
2090 AND config_inst_item_id = l_rltns_tbl(l_ind).sub_config_inst_item_id;
2091
2092 l_instance_found := TRUE;
2093 EXCEPTION
2094 WHEN NO_DATA_FOUND THEN
2095 BEGIN
2096 SELECT 'Y' INTO l_dummy
2097 FROM CSI_T_TXN_LINE_DETAILS
2098 WHERE txn_line_detail_id = l_rltns_tbl(l_ind).subject_id
2099 AND instance_id IS NOT NULL;
2100
2101 l_instance_found := TRUE;
2102 EXCEPTION
2103 WHEN NO_DATA_FOUND THEN
2104 l_instance_found := FALSE;
2105 END;
2106 END;
2107 END IF;
2108
2109 ELSE
2110 debug('neither subject nor object *');
2111
2112 l_instance_found := FALSE;
2113 END IF;
2114 ELSE
2115 l_instance_found := FALSE;
2116 END IF;
2117
2118 -- check if the relation is already processed into install base
2119
2120 IF l_instance_found THEN
2121 l_n_ind := l_new_rltns_tbl.COUNT + 1;
2122 l_new_rltns_tbl(l_n_ind) := l_rltns_tbl(l_ind);
2123 END IF;
2124
2125 END LOOP;
2126 END IF;
2127
2128 px_txn_ii_rltns_tbl := l_new_rltns_tbl;
2129 EXCEPTION
2130 WHEN fnd_api.g_exc_error THEN
2131 x_return_status := fnd_api.g_ret_sts_error;
2132 END filter_relations;
2133
2134 --
2135 --
2136 --
2137 PROCEDURE get_cz_relations(
2138 p_source_header_rec IN source_header_rec,
2139 p_source_line_rec IN source_line_rec,
2140 px_txn_line_rec IN OUT NOCOPY csi_t_datastructures_grp.txn_line_rec,
2141 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
2142 x_txn_ii_rltns_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
2143 x_txn_eav_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
2144 x_return_status OUT NOCOPY varchar2)
2145 IS
2146
2147 l_line_session_key csi_utility_grp.config_session_key;
2148
2149 l_src_instance_key csi_utility_grp.config_instance_key;
2150 l_src_tld_rec csi_t_datastructures_grp.txn_line_detail_rec;
2151 l_src_tld_index binary_integer := 0;
2152 l_source_identified boolean := FALSE;
2153
2154 l_tld_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
2155 l_n_td_ind binary_integer := 0;
2156
2157 l_filtered_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
2158
2159 -- get txn details variables
2160 l_txn_line_rec csi_t_datastructures_grp.txn_line_rec;
2161 l_txn_line_dtl_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
2162 l_txn_party_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
2163 l_txn_party_acct_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
2164 l_txn_org_assgn_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
2165 l_txn_ii_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
2166 l_txn_eav_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
2167
2168 l_ord_txn_ii_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
2169
2170 l_return_status varchar2(1);
2171 l_return_message varchar2(2000);
2172
2173 l_msg_count number;
2174 l_msg_data varchar2(2000);
2175
2176 BEGIN
2177
2178 x_return_status := fnd_api.g_ret_sts_success;
2179 api_log('get_cz_relations');
2180
2181 l_tld_tbl := px_txn_line_dtl_tbl;
2182
2183 -- get_cz_txn_detail for the current order line using the line session key
2184
2185 csi_utility_grp.get_config_key_for_om_line(
2186 p_line_id => p_source_line_rec.source_line_id,
2187 x_config_session_key => l_line_session_key,
2188 x_return_status => l_return_status,
2189 x_return_message => l_return_message);
2190
2191 IF l_return_status <> fnd_api.g_ret_sts_success THEN
2192 RAISE fnd_api.g_exc_error;
2193 END IF;
2194
2195 get_cz_txn_details(
2196 p_config_session_key => l_line_session_key,
2197 x_txn_line_rec => l_txn_line_rec,
2198 x_txn_line_dtl_tbl => l_txn_line_dtl_tbl,
2199 x_txn_party_tbl => l_txn_party_tbl,
2200 x_txn_party_acct_tbl => l_txn_party_acct_tbl,
2201 x_txn_org_assgn_tbl => l_txn_org_assgn_tbl,
2202 x_txn_ii_rltns_tbl => l_txn_ii_rltns_tbl,
2203 x_txn_eav_tbl => l_txn_eav_tbl,
2204 x_return_status => l_return_status);
2205
2206 IF l_return_status <> fnd_api.g_ret_sts_success THEN
2207 RAISE fnd_api.g_exc_error;
2208 END IF;
2209
2210 -- identify the txn line detail record that matches the current om line
2211 IF l_txn_line_dtl_tbl.COUNT > 0 THEN
2212 FOR l_ind IN l_txn_line_dtl_tbl.FIRST .. l_txn_line_dtl_tbl.LAST
2213 LOOP
2214 -- get the instance key for the source line detail record
2215 -- ## may have to change the condition here
2216 -- I should get only one record corresponding to the source being
2217 -- processed
2218
2219 IF l_txn_line_dtl_tbl(l_ind).source_transaction_flag = 'Y' THEN
2220
2221 l_src_instance_key.inst_hdr_id := l_txn_line_dtl_tbl(l_ind).config_inst_hdr_id;
2222 l_src_instance_key.inst_rev_num := l_txn_line_dtl_tbl(l_ind).config_inst_rev_num;
2223 l_src_instance_key.inst_item_id := l_txn_line_dtl_tbl(l_ind).config_inst_item_id;
2224 l_src_instance_key.inst_baseline_rev_num := l_txn_line_dtl_tbl(l_ind).config_inst_baseline_rev_num;
2225
2226 l_src_tld_rec := l_txn_line_dtl_tbl(l_ind);
2227 l_src_tld_index := l_ind;
2228 l_source_identified := TRUE;
2229 debug('dumping l_src_tld_rec..');
2230 csi_t_gen_utility_pvt.dump_line_detail_rec(l_src_tld_rec);
2231 ELSE
2232 l_n_td_ind := l_tld_tbl.COUNT + 1;
2233 l_tld_tbl(l_n_td_ind) := l_txn_line_dtl_tbl(l_ind);
2234
2235 /* as the td indexes are chenged also remap the ext attrib indexes */
2236 IF l_txn_eav_tbl.COUNT > 0 THEN
2237 FOR l_e_ind IN l_txn_eav_tbl.FIRST .. l_txn_eav_tbl.LAST
2238 LOOP
2239 IF l_txn_eav_tbl(l_e_ind).txn_line_details_index = l_ind THEN
2240 l_txn_eav_tbl(l_e_ind).txn_line_details_index := l_n_td_ind;
2241 END IF;
2242 END LOOP;
2243 END IF;
2244
2245 END IF;
2246
2247 END LOOP;
2248 END IF;
2249
2250 IF NOT(l_source_identified) THEN
2251 -- message source could not identified in the cz_txn_detail
2252 debug('source is not identified...');
2253 RAISE fnd_api.g_exc_error;
2254 END IF;
2255
2256 dump_instance_key(l_src_instance_key);
2257
2258 l_filtered_rltns_tbl := l_txn_ii_rltns_tbl;
2259
2260 -- filter it where the src istance key matches either in the subject or object
2261 filter_relations(
2262 p_instance_key => l_src_instance_key,
2263 p_transaction_line_id => l_txn_line_rec.transaction_line_id,
2264 px_txn_ii_rltns_tbl => l_filtered_rltns_tbl,
2265 x_return_status => l_return_status);
2266
2267 IF l_return_status <> fnd_api.g_ret_sts_success THEN
2268 RAISE fnd_api.g_exc_error;
2269 END IF;
2270
2271 -- return the filtered txn_ii_relation src_line detail and
2272
2273 /* overlap the config source tld on the build or user entered source tld */
2274 IF l_tld_tbl.COUNT > 0 THEN
2275 FOR l_ind IN l_tld_tbl.FIRST .. l_tld_tbl.LAST
2276 LOOP
2277 IF l_tld_tbl(l_ind).source_transaction_flag = 'Y' THEN
2278
2279 l_tld_tbl(l_ind).sub_type_id := l_src_tld_rec.sub_type_id;
2280 l_tld_tbl(l_ind).config_inst_hdr_id := l_src_tld_rec.config_inst_hdr_id;
2281 l_tld_tbl(l_ind).config_inst_rev_num := l_src_tld_rec.config_inst_rev_num;
2282 l_tld_tbl(l_ind).config_inst_item_id := l_src_tld_rec.config_inst_item_id;
2283 l_tld_tbl(l_ind).config_inst_baseline_rev_num := l_src_tld_rec.config_inst_baseline_rev_num;
2284 l_tld_tbl(l_ind).target_commitment_date := l_src_tld_rec.target_commitment_date;
2285 l_tld_tbl(l_ind).instance_description := l_src_tld_rec.instance_description;
2286
2287 l_tld_tbl(l_ind).active_start_date := l_src_tld_rec.active_start_date;
2288 l_tld_tbl(l_ind).active_end_date := l_src_tld_rec.active_end_date;
2289 --
2290 -- srramakr TSO with Equipment change.
2291 -- Since we started supporting Shippable items under MACD configuration and these items
2292 -- are serialized, there is a possiblity that Transaction detail record would have instance_id
2293 -- coming from build_shtd_tbl.
2294 -- Following instance_id assignment should be made based on instance_id value.
2295 --
2296 IF l_tld_tbl(l_ind).instance_id IS NULL OR
2297 l_tld_tbl(l_ind).instance_id = FND_API.G_MISS_NUM THEN
2298 IF l_src_tld_rec.instance_id IS NOT NULL
2299 AND
2300 l_src_tld_rec.instance_id <> FND_API.G_MISS_NUM
2301 THEN
2302 l_tld_tbl(l_ind).instance_id := l_src_tld_rec.instance_id;
2303 l_tld_tbl(l_ind).instance_exists_flag := 'Y';
2304 ELSE
2305 /* query install base to figure out the instance for the base line revision if TLD did not return*/
2306 BEGIN
2307 SELECT instance_id
2308 INTO l_tld_tbl(l_ind).instance_id
2309 FROM csi_item_instances
2310 WHERE config_inst_hdr_id = l_tld_tbl(l_ind).config_inst_hdr_id
2311 AND config_inst_item_id = l_tld_tbl(l_ind).config_inst_item_id;
2312 l_tld_tbl(l_ind).instance_exists_flag := 'Y';
2313 EXCEPTION
2314 WHEN no_data_found THEN
2315 l_tld_tbl(l_ind).instance_id := fnd_api.g_miss_num;
2316 l_tld_tbl(l_ind).instance_exists_flag := 'N';
2317 END;
2318 END IF;
2319 END IF;
2320
2321 -- Fixed for Bug 4381930, Moved the Instance_id Query to above
2322 -- and assign the cz values if instance_id is existing, re-configuration case
2323 -- else take the values build from order or user entered.
2324
2325 IF nvl(l_tld_tbl(l_ind).instance_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
2326
2327 l_tld_tbl(l_ind).location_type_code := l_src_tld_rec.location_type_code;
2328 l_tld_tbl(l_ind).location_id := l_src_tld_rec.location_id;
2329 -- Added for partner ordering
2330 l_tld_tbl(l_ind).install_location_type_code := l_src_tld_rec.install_location_type_code;
2331 l_tld_tbl(l_ind).install_location_id := l_src_tld_rec.install_location_id;
2332 --
2333 -- Bug 4633376 CZ always passes the location info for re-configuration. Hence, inorder to
2334 -- distinguish between first time configuration and re-configuration, we use the instance_id.
2335 --
2336 ELSE
2337 IF nvl(l_src_tld_rec.location_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num
2338 AND
2339 nvl(l_src_tld_rec.location_type_code,fnd_api.g_miss_char) <> fnd_api.g_miss_char
2340 THEN
2341 l_tld_tbl(l_ind).location_type_code := l_src_tld_rec.location_type_code;
2342 l_tld_tbl(l_ind).location_id := l_src_tld_rec.location_id;
2343 END IF;
2344 --
2345 IF nvl(l_src_tld_rec.install_location_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num
2346 AND
2347 nvl(l_src_tld_rec.install_location_type_code,fnd_api.g_miss_char) <> fnd_api.g_miss_char
2348 THEN
2349 l_tld_tbl(l_ind).install_location_type_code := l_src_tld_rec.install_location_type_code;
2350 l_tld_tbl(l_ind).install_location_id := l_src_tld_rec.install_location_id;
2351 END IF;
2352 END IF;
2353 --
2354 -- srramakr Bug 4665537 TSO with Equipment.
2355 -- Inventory Revision and organization_id could come from WSH which is what we need to take.
2356 --
2357 IF l_tld_tbl(l_ind).inventory_revision IS NOT NULL AND
2358 l_tld_tbl(l_ind).inventory_revision = fnd_api.g_miss_char THEN
2359 l_tld_tbl(l_ind).inventory_revision := l_src_tld_rec.inventory_revision;
2360 END IF;
2361 --
2362 IF nvl(l_tld_tbl(l_ind).inv_organization_id,fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
2363 l_tld_tbl(l_ind).inv_organization_id := l_src_tld_rec.inv_organization_id;
2364 END IF;
2365 --
2366 l_tld_tbl(l_ind).source_txn_line_detail_id := l_src_tld_rec.txn_line_detail_id;
2367
2368 IF l_txn_eav_tbl.COUNT > 0 THEN
2369 FOR l_eav_ind IN l_txn_eav_tbl.FIRST .. l_txn_eav_tbl.LAST
2370 LOOP
2371 IF l_txn_eav_tbl(l_eav_ind).txn_line_detail_id = l_src_tld_rec.txn_line_detail_id
2372 THEN
2373 l_txn_eav_tbl(l_eav_ind).txn_line_details_index := l_ind;
2374 l_txn_eav_tbl(l_eav_ind).txn_line_detail_id := fnd_api.g_miss_num;
2375 l_txn_eav_tbl(l_eav_ind).txn_attrib_detail_id := fnd_api.g_miss_num;
2376 END IF;
2377 END LOOP;
2378 END IF;
2379 /* Begin fix for Bug 3502896 */
2380 ELSE
2381 csi_t_gen_utility_pvt.add(' NON SOURCE LINE ');
2382 BEGIN
2383 SELECT instance_id
2384 INTO l_tld_tbl(l_ind).instance_id
2385 FROM csi_item_instances
2386 WHERE config_inst_hdr_id = l_tld_tbl(l_ind).config_inst_hdr_id
2387 AND config_inst_item_id = l_tld_tbl(l_ind).config_inst_item_id;
2388 l_tld_tbl(l_ind).instance_exists_flag := 'Y';
2389 EXCEPTION
2390 WHEN no_data_found THEN
2391 l_tld_tbl(l_ind).instance_id := fnd_api.g_miss_num;
2392 l_tld_tbl(l_ind).instance_exists_flag := 'N';
2393 fnd_message.set_name('CSI','CSI_TXN_CZ_INVALID_DATA');
2394 fnd_message.set_token('INST_HDR_ID',l_tld_tbl(l_ind).config_inst_hdr_id);
2395 fnd_message.set_token('INST_REV_NBR',l_tld_tbl(l_ind).config_inst_rev_num);
2396 fnd_message.set_token('CONFIG_ITEM_ID',l_tld_tbl(l_ind).config_inst_item_id);
2397 fnd_msg_pub.add;
2398 RAISE fnd_api.g_exc_error;
2399 END;
2400 /* End fix for Bug 3502896 */
2401 END IF;
2402 END LOOP;
2403 END IF;
2404
2405 px_txn_line_rec := l_txn_line_rec;
2406 px_txn_line_dtl_tbl := l_tld_tbl;
2407 x_txn_ii_rltns_tbl := l_filtered_rltns_tbl;
2408 x_txn_eav_tbl := l_txn_eav_tbl;
2409
2410 EXCEPTION
2411 WHEN fnd_api.g_exc_error THEN
2412 x_return_status := fnd_api.g_ret_sts_error;
2413 END get_cz_relations;
2414 --
2415 --
2416 --
2417 PROCEDURE get_instances_for_source(
2418 p_source_line_rec IN source_line_rec,
2419 x_instance_tbl OUT NOCOPY csi_datastructures_pub.instance_tbl,
2420 x_return_status OUT NOCOPY varchar2)
2421 IS
2422
2423 l_inst_query_rec csi_datastructures_pub.instance_query_rec;
2424 l_party_query_rec csi_datastructures_pub.party_query_rec;
2425 l_pty_acct_query_rec csi_datastructures_pub.party_account_query_rec;
2426
2427 l_instance_hdr_tbl csi_datastructures_pub.instance_header_tbl;
2428 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
2429 l_msg_count number;
2430 l_msg_data varchar2(2000);
2431
2432 BEGIN
2433
2434 x_return_status := fnd_api.g_ret_sts_success;
2435 api_log('get_instances_for_source');
2436
2437 l_inst_query_rec.inventory_item_id := p_source_line_rec.inventory_item_id;
2438 l_inst_query_rec.last_oe_order_line_id := p_source_line_rec.source_line_id;
2439
2440 csi_t_gen_utility_pvt.dump_instance_query_rec(
2441 p_instance_query_rec => l_inst_query_rec);
2442
2443 csi_t_gen_utility_pvt.dump_api_info(
2444 p_api_name => 'get_item_instances',
2445 p_pkg_name => 'csi_item_instance_pub');
2446
2447 csi_item_instance_pub.get_item_instances(
2448 p_api_version => 1.0,
2449 p_commit => fnd_api.g_false,
2450 p_init_msg_list => fnd_api.g_true,
2451 p_validation_level => fnd_api.g_valid_level_full,
2452 p_instance_query_rec => l_inst_query_rec,
2453 p_party_query_rec => l_party_query_rec,
2454 p_account_query_rec => l_pty_acct_query_rec,
2455 p_transaction_id => null,
2456 p_resolve_id_columns => fnd_api.g_false,
2457 p_active_instance_only => fnd_api.g_true,
2458 x_instance_header_tbl => l_instance_hdr_tbl,
2459 x_return_status => l_return_status,
2460 x_msg_count => l_msg_count,
2461 x_msg_data => l_msg_data);
2462
2463 IF l_return_status <> fnd_api.g_ret_sts_success THEN
2464 RAISE fnd_api.g_exc_error;
2465 END IF;
2466
2467 -- call get item instances here
2468 csi_utl_pkg.make_non_header_tbl(
2469 p_instance_header_tbl => l_instance_hdr_tbl,
2470 x_instance_tbl => x_instance_tbl,
2471 x_return_status => l_return_status);
2472
2473 IF l_return_status <> fnd_api.g_ret_sts_success THEN
2474 RAISE fnd_api.g_exc_error;
2475 END IF;
2476
2477 EXCEPTION
2478 WHEN fnd_api.g_exc_error THEN
2479 x_return_status := fnd_api.g_ret_sts_error;
2480 END get_instances_for_source;
2481
2482
2483 --
2484 --
2485 --
2486 PROCEDURE get_om_relations(
2487 p_source_line_rec IN source_line_rec,
2488 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
2489 x_txn_ii_rltns_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
2490 x_return_status OUT NOCOPY varchar2)
2491 IS
2492
2493 l_parent_found boolean := FALSE;
2494 l_parent_line_rec source_line_rec;
2495
2496 l_parent_instance_tbl csi_datastructures_pub.instance_tbl;
2497 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
2498
2499 BEGIN
2500
2501 x_return_status := fnd_api.g_ret_sts_success;
2502 api_log('get_om_relations');
2503
2504 -- get the ib trackable parent
2505 get_ib_trackable_parent(
2506 p_source_line_rec => p_source_line_rec,
2507 x_parent_found => l_parent_found,
2508 x_parent_line_rec => l_parent_line_rec,
2509 x_return_status => l_return_status);
2510
2511 IF l_return_status <> fnd_api.g_ret_sts_success THEN
2512 RAISE fnd_api.g_exc_error;
2513 END IF;
2514
2515 IF l_parent_found THEN
2516
2517 get_instances_for_source(
2518 p_source_line_rec => l_parent_line_rec,
2519 x_instance_tbl => l_parent_instance_tbl,
2520 x_return_status => l_return_status);
2521
2522 IF l_return_status <> fnd_api.g_ret_sts_success THEN
2523 RAISE fnd_api.g_exc_error;
2524 END IF;
2525
2526 IF l_parent_instance_tbl.count > 0 THEN
2527 null;
2528 --build_parent_relation
2529 END IF;
2530
2531 END IF;
2532
2533 -- get the ib trackable children
2534 -- for each of the child check if the om line has come as instances
2535 -- if yes put them as non source and try building a component-of relation
2536 -- take the appropriate ratios in consideration
2537
2538 --if not then do not worry about building relations
2539
2540
2541 EXCEPTION
2542 WHEN fnd_api.g_exc_error THEN
2543 x_return_status := fnd_api.g_ret_sts_error;
2544 END get_om_relations;
2545
2546
2547 /* this routine takes the source line info and the current entered source txn
2548 line detail info and builds the non source relation based on the source table
2549 information
2550
2551 . if it is for the config line then it would read the config txn detail to read
2552 the relationship and builds them to the corresponding source line detail
2553 entered in the order line level
2554
2555 . if it is for the fulfillment/shipment then it reads the parent and child
2556 information from the order line and builds the parent and the child relation
2557 for the current order line being processed
2558
2559 */
2560
2561 PROCEDURE get_relations(
2562 p_source_id IN number,
2563 p_source_table IN varchar2,
2564 p_source_header_rec IN source_header_rec,
2565 p_source_line_rec IN source_line_rec,
2566 px_txn_line_rec IN OUT NOCOPY csi_t_datastructures_grp.txn_line_rec,
2567 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
2568 x_txn_ii_rltns_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
2569 x_txn_eav_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
2570 x_return_status OUT NOCOPY varchar2)
2571 IS
2572
2573 l_txn_line_dtl_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
2574 l_txn_ii_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
2575
2576 l_return_status varchar2(1);
2577 l_msg_count number;
2578 l_msg_data varchar2(2000);
2579
2580 BEGIN
2581
2582 x_return_status := fnd_api.g_ret_sts_success;
2583 api_log('get_relations');
2584
2585 -- change to an appropriate condition
2586 IF p_source_line_rec.config_header_id is not null THEN
2587
2588 /* this routine gives the txn line details entered by the configurator
2589 1 source line is mandatory which will have the instance key corresponding to
2590 the processed order line.
2591 stamp the source instance key
2592 may have relations and extended attributes
2593 */
2594
2595 get_cz_relations(
2596 p_source_header_rec => p_source_header_rec,
2597 p_source_line_rec => p_source_line_rec,
2598 px_txn_line_rec => px_txn_line_rec,
2599 px_txn_line_dtl_tbl => px_txn_line_dtl_tbl,
2600 x_txn_ii_rltns_tbl => l_txn_ii_rltns_tbl,
2601 x_txn_eav_tbl => x_txn_eav_tbl,
2602 x_return_status => l_return_status);
2603
2604 IF l_return_status <> fnd_api.g_ret_sts_success THEN
2605 RAISE fnd_api.g_exc_error;
2606 END IF;
2607
2608 ELSE
2609
2610 get_om_relations(
2611 p_source_line_rec => p_source_line_rec,
2612 px_txn_line_dtl_tbl => px_txn_line_dtl_tbl,
2613 x_txn_ii_rltns_tbl => l_txn_ii_rltns_tbl,
2614 x_return_status => l_return_status);
2615
2616 IF l_return_status <> fnd_api.g_ret_sts_success THEN
2617 RAISE fnd_api.g_exc_error;
2618 END IF;
2619
2620 END IF;
2621
2622 x_txn_ii_rltns_tbl := l_txn_ii_rltns_tbl;
2623
2624 EXCEPTION
2625 WHEN fnd_api.g_exc_error THEN
2626 x_return_status := fnd_api.g_ret_sts_error;
2627 END get_relations;
2628
2629 PROCEDURE get_extended_attrib_values(
2630 p_source_id IN number,
2631 p_source_table IN varchar2,
2632 p_source_header_rec IN source_header_rec,
2633 p_source_line_rec IN source_line_rec,
2634 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
2635 x_txn_eav_tbl OUT NOCOPY csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
2636 x_return_status OUT NOCOPY varchar2)
2637 IS
2638 BEGIN
2639 x_return_status := fnd_api.g_ret_sts_success;
2640 api_log('get_extended_attrib_values');
2641 EXCEPTION
2642 WHEN fnd_api.g_exc_error THEN
2643 x_return_status := fnd_api.g_ret_sts_error;
2644 END get_extended_attrib_values;
2645
2646 PROCEDURE get_order_line_source_info(
2647 p_order_line_id IN number,
2648 x_source_header_rec OUT NOCOPY source_header_rec,
2649 x_source_line_rec OUT NOCOPY source_line_rec,
2650 x_return_status OUT NOCOPY varchar2)
2651 IS
2652
2653 l_line_rec oe_order_lines_all%rowtype;
2654 l_hdr_rec oe_order_headers_all%rowtype;
2655
2656 -- For partner prdering
2657 l_partner_rec oe_install_base_util.partner_order_rec;
2658 l_ib_owner VARCHAR2(60);
2659 l_end_customer_id NUMBER;
2660 l_partner_ib_owner VARCHAR2(60);
2661
2662 l_drop_ship_txn_type_id number := 30;
2663
2664
2665 BEGIN
2666 x_return_status := fnd_api.g_ret_sts_success;
2667 api_log('get_order_line_source_info');
2668
2669 BEGIN
2670 SELECT * INTO l_line_rec
2671 FROM oe_order_lines_all
2672 WHERE line_id = p_order_line_id;
2673
2674 SELECT * INTO l_hdr_rec
2675 FROM oe_order_headers_all
2676 WHERE header_id = l_line_rec.header_id;
2677
2678 -- assign values to the x_source_header_rec
2679 -- assign values to the x_source_line_rec
2680
2681 EXCEPTION
2682 WHEN no_data_found THEN
2683 -- stack error message
2684 RAISE fnd_api.g_exc_error;
2685 END;
2686
2687 x_source_header_rec.source_header_id := l_hdr_rec.header_id;
2688 x_source_header_rec.source_header_ref := l_hdr_rec.order_number;
2689 x_source_header_rec.org_id := l_hdr_rec.org_id;
2690 x_source_header_rec.sold_from_org_id := l_hdr_rec.sold_from_org_id;
2691 x_source_header_rec.owner_party_account_id := l_hdr_rec.sold_to_org_id;
2692 x_source_header_rec.sold_to_org_id := l_hdr_rec.sold_to_org_id;
2693 x_source_header_rec.agreement_id := l_hdr_rec.agreement_id;
2694 x_source_header_rec.ship_to_address_id := l_hdr_rec.ship_to_org_id;
2695 x_source_header_rec.bill_to_address_id := l_hdr_rec.invoice_to_org_id;
2696 x_source_header_rec.ship_to_contact_id := l_hdr_rec.ship_to_contact_id;
2697 x_source_header_rec.bill_to_contact_id := l_hdr_rec.invoice_to_contact_id;
2698 x_source_header_rec.cust_po_number := l_hdr_rec.cust_po_number;
2699 x_source_header_rec.deliver_to_org_id := l_hdr_rec.deliver_to_org_id;
2700
2701 x_source_line_rec.source_line_id := l_line_rec.line_id;
2702 x_source_line_rec.source_line_ref := l_line_rec.line_number||'.'||
2703 l_line_rec.shipment_number||'.'||
2704 l_line_rec.option_number;
2705
2706 x_source_line_rec.org_id := l_line_rec.org_id;
2707 x_source_line_rec.sold_from_org_id := nvl(l_line_rec.sold_from_org_id, l_hdr_rec.sold_from_org_id);
2708 x_source_line_rec.inventory_item_id := l_line_rec.inventory_item_id;
2709 x_source_line_rec.organization_id := nvl(l_line_rec.ship_from_org_id, l_hdr_rec.ship_from_org_id);
2710 x_source_line_rec.item_revision := l_line_rec.item_revision;
2711 x_source_line_rec.uom_code := l_line_rec.order_quantity_uom;
2712 x_source_line_rec.source_quantity := l_line_rec.ordered_quantity;
2713 x_source_line_rec.shipped_quantity := l_line_rec.shipped_quantity;
2714 x_source_line_rec.fulfilled_quantity := l_line_rec.fulfilled_quantity;
2715 x_source_line_rec.owner_party_account_id := nvl(l_line_rec.sold_to_org_id, l_hdr_rec.sold_to_org_id);
2716 x_source_line_rec.ship_to_address_id := nvl(l_line_rec.ship_to_org_id, l_hdr_rec.ship_to_org_id);
2717 x_source_line_rec.bill_to_address_id := nvl(l_line_rec.invoice_to_org_id, l_hdr_rec.invoice_to_org_id);
2718 x_source_line_rec.deliver_to_org_id := nvl(l_line_rec.deliver_to_org_id, l_hdr_rec.deliver_to_org_id);
2719 x_source_line_rec.sold_to_org_id := nvl(l_line_rec.sold_to_org_id, l_hdr_rec.sold_to_org_id);
2720 x_source_line_rec.agreement_id := nvl(l_line_rec.agreement_id, l_hdr_rec.agreement_id);
2721 x_source_line_rec.ship_to_contact_id := nvl(l_line_rec.ship_to_contact_id, l_hdr_rec.ship_to_contact_id);
2722 x_source_line_rec.bill_to_contact_id := nvl(l_line_rec.invoice_to_contact_id, l_hdr_rec.invoice_to_contact_id);
2723 x_source_line_rec.link_to_line_id := l_line_rec.link_to_line_id;
2724 x_source_line_rec.top_model_line_id := l_line_rec.top_model_line_id;
2725 x_source_line_rec.ato_line_id := l_line_rec.ato_line_id;
2726 x_source_line_rec.item_type_code := l_line_rec.item_type_code;
2727 x_source_line_rec.cust_po_number := nvl(l_line_rec.cust_po_number, l_hdr_rec.cust_po_number);
2728 IF l_line_rec.fulfillment_date is not null THEN
2729 x_source_line_rec.fulfilled_date := l_line_rec.fulfillment_date;
2730 ELSE
2731 -- bug 5256104 - for drop shipments of TSO equipment, shipment happen before the fulfill activity
2732 -- so fulfillment date remains as null. derive the transaction date of the logical shipment instead
2733 IF l_line_rec.source_type_code = 'EXTERNAL' THEN
2734 BEGIN
2735 SELECT transaction_date
2736 INTO x_source_line_rec.fulfilled_date
2737 FROM mtl_material_transactions
2738 WHERE transaction_type_id = l_drop_ship_txn_type_id
2739 AND trx_source_line_id = l_line_rec.line_id
2740 AND rownum = 1;
2741 EXCEPTION
2742 WHEN no_data_found THEN
2743 x_source_line_rec.fulfilled_date := sysdate;
2744 END;
2745 ELSE
2746 x_source_line_rec.fulfilled_date := sysdate;
2747 END IF;
2748 END IF;
2749 x_source_line_rec.shipped_date := l_line_rec.actual_shipment_date;
2750
2751 x_source_line_rec.config_header_id := l_line_rec.config_header_id;
2752 x_source_line_rec.config_rev_num := l_line_rec.config_rev_nbr;
2753 x_source_line_rec.config_item_id := l_line_rec.configuration_id;
2754
2755 -- for partner ordering
2756 oe_install_base_util.get_partner_ord_rec(
2757 p_order_line_id => p_order_line_id,
2758 x_partner_order_rec => l_partner_rec);
2759
2760 IF l_partner_rec.IB_OWNER = 'END_CUSTOMER' THEN
2761 IF l_partner_rec.END_CUSTOMER_ID is null Then
2762 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2763 fnd_msg_pub.add;
2764 raise fnd_api.g_exc_error;
2765 ELSE
2766 l_ib_owner := l_partner_rec.ib_owner;
2767 x_source_line_rec.owner_party_account_id := l_partner_rec.end_customer_id;
2768 END IF;
2769 ELSIF l_partner_rec.IB_OWNER = 'INSTALL_BASE'
2770 THEN
2771 l_ib_owner := l_partner_rec.ib_owner;
2772 x_source_line_rec.owner_party_account_id := fnd_api.g_miss_num;
2773 ELSE
2774 x_source_line_rec.owner_party_account_id := x_source_line_rec.owner_party_account_id;
2775 END IF;
2776
2777 IF l_partner_rec.IB_INSTALLED_AT_LOCATION is not null
2778 THEN
2779 x_source_line_rec.ib_install_loc := l_partner_rec.IB_INSTALLED_AT_LOCATION;
2780 IF x_source_line_rec.ib_install_loc = 'END_CUSTOMER'
2781 THEN
2782 IF l_partner_rec.end_customer_site_use_id is null
2783 THEN
2784 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2785 fnd_msg_pub.add;
2786 raise fnd_api.g_exc_error;
2787 ELSE
2788 x_source_line_rec.ib_install_loc_id := l_partner_rec.end_customer_site_use_id;
2789 END IF;
2790 ELSIF x_source_line_rec.ib_install_loc = 'SHIP_TO'
2791 THEN
2792 IF x_source_line_rec.ship_to_address_id is null
2793 THEN
2794 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2795 fnd_msg_pub.add;
2796 raise fnd_api.g_exc_error;
2797 ELSE
2798 x_source_line_rec.ib_install_loc_id := x_source_line_rec.ship_to_address_id;
2799 END IF;
2800 ELSIF x_source_line_rec.ib_install_loc = 'SOLD_TO'
2801 THEN
2802 IF l_partner_rec.SOLD_TO_SITE_USE_ID is null -- 3412544 x_source_line_rec.sold_to_org_id is null
2803 THEN
2804 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2805 fnd_msg_pub.add;
2806 raise fnd_api.g_exc_error;
2807 ELSE
2808 x_source_line_rec.ib_install_loc_id := l_partner_rec.SOLD_TO_SITE_USE_ID; -- 3412544 x_source_line_rec.sold_to_org_id;
2809 END IF;
2810 ELSIF x_source_line_rec.ib_install_loc = 'DELIVER_TO'
2811 THEN
2812 IF x_source_line_rec.deliver_to_org_id is null
2813 THEN
2814 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2815 fnd_msg_pub.add;
2816 raise fnd_api.g_exc_error;
2817 ELSE
2818 x_source_line_rec.ib_install_loc_id := x_source_line_rec.deliver_to_org_id;
2819 END IF;
2820 ELSIF x_source_line_rec.ib_install_loc = 'BILL_TO'
2821 THEN
2822 IF x_source_line_rec.bill_to_address_id is null
2823 THEN
2824 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2825 fnd_msg_pub.add;
2826 raise fnd_api.g_exc_error;
2827 ELSE
2828 x_source_line_rec.ib_install_loc_id := x_source_line_rec.bill_to_address_id;
2829 END IF;
2830 ELSIF x_source_line_rec.ib_install_loc = 'INSTALL_BASE'
2831 THEN
2832 x_source_line_rec.ib_install_loc_id := fnd_api.g_miss_num;
2833 END IF;
2834 ELSE
2835 x_source_line_rec.ib_install_loc_id := x_source_line_rec.ship_to_address_id;
2836 END IF;
2837
2838 IF l_partner_rec.IB_CURRENT_LOCATION is not null
2839 THEN
2840 x_source_line_rec.ib_current_loc := l_partner_rec.IB_CURRENT_LOCATION;
2841 IF x_source_line_rec.ib_current_loc = 'END_CUSTOMER'
2842 THEN
2843 IF l_partner_rec.end_customer_site_use_id is null
2844 THEN
2845 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2846 fnd_msg_pub.add;
2847 raise fnd_api.g_exc_error;
2848 ELSE
2849 x_source_line_rec.ib_current_loc_id := l_partner_rec.end_customer_site_use_id;
2850 END IF;
2851 ELSIF x_source_line_rec.ib_current_loc = 'SHIP_TO'
2852 THEN
2853 IF x_source_line_rec.ship_to_address_id is null
2854 THEN
2855 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2856 fnd_msg_pub.add;
2857 raise fnd_api.g_exc_error;
2858 ELSE
2859 x_source_line_rec.ib_current_loc_id := x_source_line_rec.ship_to_address_id;
2860 END IF;
2861 ELSIF x_source_line_rec.ib_current_loc = 'SOLD_TO'
2862 THEN
2863 IF l_partner_rec.SOLD_TO_SITE_USE_ID is null -- 3412544 x_source_line_rec.sold_to_org_id is null
2864 THEN
2865 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2866 fnd_msg_pub.add;
2867 raise fnd_api.g_exc_error;
2868 ELSE
2869 x_source_line_rec.ib_current_loc_id := l_partner_rec.SOLD_TO_SITE_USE_ID; -- 3412544 x_source_line_rec.sold_to_org_id;
2870 END IF;
2871 ELSIF x_source_line_rec.ib_current_loc = 'DELIVER_TO'
2872 THEN
2873 IF x_source_line_rec.deliver_to_org_id is null
2874 THEN
2875 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2876 fnd_msg_pub.add;
2877 raise fnd_api.g_exc_error;
2878 ELSE
2879 x_source_line_rec.ib_current_loc_id := x_source_line_rec.deliver_to_org_id;
2880 END IF;
2881 ELSIF x_source_line_rec.ib_current_loc = 'BILL_TO'
2882 THEN
2883 IF x_source_line_rec.bill_to_address_id is null
2884 THEN
2885 fnd_message.set_name('CSI','CSI_PARTNER_VAL_MISSING');
2886 fnd_msg_pub.add;
2887 raise fnd_api.g_exc_error;
2888 ELSE
2889 x_source_line_rec.ib_current_loc_id := x_source_line_rec.bill_to_address_id;
2890 END IF;
2891 ELSIF x_source_line_rec.ib_current_loc = 'INSTALL_BASE'
2892 THEN
2893 x_source_line_rec.ib_current_loc_id := fnd_api.g_miss_num;
2894 END IF;
2895 ELSE
2896 x_source_line_rec.ib_current_loc_id := x_source_line_rec.ship_to_address_id;
2897 END IF;
2898
2899 -- Added the AND condition for Bug 3443175.
2900 IF x_source_line_rec.owner_party_account_id is not null
2901 AND
2902 nvl(l_partner_rec.ib_owner,'!@#') <> 'INSTALL_BASE'
2903 THEN
2904 SELECT party_id
2905 INTO x_source_line_rec.owner_party_id
2906 FROM hz_cust_accounts
2907 WHERE cust_account_id = x_source_line_rec.owner_party_account_id;
2908 END IF;
2909
2910
2911 -- IF x_source_line_rec.ship_to_address_id is not null THEN
2912 -- Added the AND condition for Bug 3443175.
2913 IF x_source_line_rec.ib_current_loc_id is not null
2914 AND
2915 nvl(x_source_line_rec.ib_current_loc,'!@#') <> 'INSTALL_BASE'
2916 THEN
2917 SELECT hcas.party_site_id
2918 INTO x_source_line_rec.ship_to_party_site_id
2919 FROM hz_cust_site_uses_all hcsu,
2920 hz_cust_acct_sites_all hcas
2921 WHERE hcsu.site_use_id = x_source_line_rec.ib_current_loc_id -- ship_to_address_id
2922 AND hcas.cust_acct_site_id = hcsu.cust_acct_site_id;
2923 END IF;
2924
2925 -- Added the AND condition for Bug 3443175.
2926 IF x_source_line_rec.ib_install_loc_id is not null
2927 AND
2928 nvl(x_source_line_rec.ib_install_loc,'!@#') <> 'INSTALL_BASE'
2929 THEN
2930 SELECT hcas.party_site_id
2931 INTO x_source_line_rec.install_to_party_site_id
2932 FROM hz_cust_site_uses_all hcsu,
2933 hz_cust_acct_sites_all hcas
2934 WHERE hcsu.site_use_id = x_source_line_rec.ib_install_loc_id
2935 AND hcas.cust_acct_site_id = hcsu.cust_acct_site_id;
2936 END IF;
2937
2938 IF x_source_line_rec.ship_to_contact_id is not null THEN
2939 SELECT hzr.subject_id
2940 INTO x_source_line_rec.ship_to_contact_party_id
2941 FROM hz_relationships hzr,
2942 hz_cust_account_roles hzar
2943 WHERE hzar.cust_account_role_id = x_source_line_rec.ship_to_contact_id
2944 AND hzr.party_id = hzar.party_id
2945 AND hzr.subject_table_name = 'HZ_PARTIES'
2946 AND hzr.object_table_name = 'HZ_PARTIES'
2947 AND hzr.directional_flag = 'F';
2948 END IF;
2949
2950 IF x_source_line_rec.bill_to_contact_id is not null THEN
2951 SELECT hzr.subject_id
2952 INTO x_source_line_rec.bill_to_contact_party_id
2953 FROM hz_relationships hzr,
2954 hz_cust_account_roles hzar
2955 WHERE hzar.cust_account_role_id = x_source_line_rec.bill_to_contact_id
2956 AND hzr.party_id = hzar.party_id
2957 AND hzr.subject_table_name = 'HZ_PARTIES'
2958 AND hzr.object_table_name = 'HZ_PARTIES'
2959 AND hzr.directional_flag = 'F';
2960 END IF;
2961 EXCEPTION
2962 WHEN fnd_api.g_exc_error THEN
2963 x_return_status := fnd_api.g_ret_sts_error;
2964 END get_order_line_source_info;
2965
2966
2967 PROCEDURE get_wsh_source_info(
2968 p_source_line_id IN number,
2969 x_source_header_rec OUT NOCOPY source_header_rec,
2970 x_source_line_rec OUT NOCOPY source_line_rec,
2971 x_return_status OUT NOCOPY varchar2)
2972 IS
2973
2974 CURSOR oke_cur_tmp(p_dlv_id IN number) IS
2975 SELECT *
2976 FROM oke_k_deliverables_vl
2977 WHERE deliverable_id = p_dlv_id;
2978
2979 CURSOR wsh_cur(p_src_line_id IN number) IS
2980 SELECT source_header_id,
2981 source_line_id,
2982 source_line_number,
2983 org_id,
2984 organization_id,
2985 customer_id,
2986 ship_to_site_use_id,
2987 ship_to_contact_id,
2988 cust_po_number,
2989 inventory_item_id,
2990 revision,
2991 src_requested_quantity,
2992 src_requested_quantity_uom,
2993 date_scheduled,
2994 top_model_line_id,
2995 ato_line_id
2996 FROM wsh_delivery_details_ob_grp_v
2997 WHERE delivery_detail_id = p_src_line_id;
2998
2999 BEGIN
3000 x_return_status := fnd_api.g_ret_sts_success;
3001 api_log('get_wsh_source_info');
3002
3003 FOR wsh_rec IN wsh_cur (p_source_line_id)
3004 LOOP
3005
3006 IF wsh_cur%rowcount = 1 THEN
3007
3008 mo_global.set_policy_context('S', wsh_rec.org_id);
3009
3010 x_source_header_rec.source_header_id := wsh_rec.source_header_id;
3011
3012 SELECT contract_number
3013 INTO x_source_header_rec.source_header_ref
3014 FROM okc_k_headers_all_b --fix for bug5358612
3015 WHERE id = wsh_rec.source_header_id;
3016
3017 x_source_header_rec.owner_party_account_id := wsh_rec.customer_id;
3018 END IF;
3019
3020 -- assign line_rec
3021 x_source_line_rec.source_line_id := wsh_rec.source_line_id;
3022 x_source_line_rec.source_line_ref := wsh_rec.source_line_number;
3023 x_source_line_rec.org_id := wsh_rec.org_id;
3024 x_source_line_rec.sold_from_org_id := wsh_rec.org_id;
3025 x_source_line_rec.ship_to_address_id := wsh_rec.ship_to_site_use_id;
3026 x_source_line_rec.ship_to_contact_id := wsh_rec.ship_to_contact_id;
3027 x_source_line_rec.cust_po_number := wsh_rec.cust_po_number;
3028 x_source_line_rec.inventory_item_id := wsh_rec.inventory_item_id;
3029 x_source_line_rec.organization_id := wsh_rec.organization_id;
3030 x_source_line_rec.item_revision := wsh_rec.revision;
3031 x_source_line_rec.source_quantity := wsh_rec.src_requested_quantity;
3032 x_source_line_rec.uom_code := wsh_rec.src_requested_quantity_uom;
3033 x_source_line_rec.owner_party_account_id := wsh_rec.customer_id;
3034 x_source_line_rec.shipped_date := wsh_rec.date_scheduled;
3035
3036 IF x_source_line_rec.owner_party_account_id is not null THEN
3037 SELECT party_id
3038 INTO x_source_line_rec.owner_party_id
3039 FROM hz_cust_accounts
3040 WHERE cust_account_id = x_source_line_rec.owner_party_account_id;
3041 END IF;
3042
3043
3044 IF x_source_line_rec.ship_to_address_id is not null THEN
3045 SELECT hcas.party_site_id
3046 INTO x_source_line_rec.ship_to_party_site_id
3047 FROM hz_cust_site_uses_all hcsu,
3048 hz_cust_acct_sites_all hcas
3049 WHERE hcsu.site_use_id = x_source_line_rec.ship_to_address_id
3050 AND hcas.cust_acct_site_id = hcsu.cust_acct_site_id;
3051 END IF;
3052
3053 IF x_source_line_rec.ship_to_contact_id is not null THEN
3054 SELECT hzr.subject_id
3055 INTO x_source_line_rec.ship_to_contact_party_id
3056 FROM hz_relationships hzr,
3057 hz_cust_account_roles hzar
3058 WHERE hzar.cust_account_role_id = x_source_line_rec.ship_to_contact_id
3059 AND hzr.party_id = hzar.party_id
3060 AND hzr.subject_table_name = 'HZ_PARTIES'
3061 AND hzr.object_table_name = 'HZ_PARTIES'
3062 AND hzr.directional_flag = 'F';
3063 END IF;
3064
3065 END LOOP;
3066
3067 debug(' contract_number : '||x_source_header_rec.source_header_ref);
3068 debug(' contract_header_id : '||x_source_header_rec.source_header_id);
3069 debug(' source_line_number : '||x_source_line_rec.source_line_ref);
3070 debug(' source_line_id : '||x_source_line_rec.source_line_id);
3071 debug(' owner_account_id : '||x_source_line_rec.owner_party_account_id);
3072 debug(' owner_party_id : '||x_source_line_rec.owner_party_id);
3073
3074 EXCEPTION
3075 WHEN fnd_api.g_exc_error THEN
3076 x_return_status := fnd_api.g_ret_sts_error;
3077 END get_wsh_source_info;
3078
3079 --
3080 --
3081 --
3082 PROCEDURE get_source_info(
3083 p_source_table IN varchar2,
3084 p_source_id IN number,
3085 x_source_header_rec OUT NOCOPY source_header_rec,
3086 x_source_line_rec OUT NOCOPY source_line_rec,
3087 x_return_status OUT NOCOPY varchar)
3088 IS
3089
3090 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
3091 l_source_header_rec source_header_rec;
3092 l_source_line_rec source_line_rec;
3093
3094 BEGIN
3095
3096 x_return_status := fnd_api.g_ret_sts_success;
3097 api_log('get_source_info');
3098
3099 IF p_source_table = g_om_source_table THEN
3100
3101 get_order_line_source_info(
3102 p_order_line_id => p_source_id,
3103 x_source_header_rec => l_source_header_rec,
3104 x_source_line_rec => l_source_line_rec,
3105 x_return_status => l_return_status);
3106
3107 IF l_return_status <> fnd_api.g_ret_sts_success THEN
3108 RAISE fnd_api.g_exc_error;
3109 END IF;
3110
3111 l_source_line_rec.source_table := g_om_source_table;
3112
3113 ELSIF p_source_table = g_oke_source_table THEN -- project contracts
3114
3115 get_wsh_source_info(
3116 p_source_line_id => p_source_id,
3117 x_source_header_rec => l_source_header_rec,
3118 x_source_line_rec => l_source_line_rec,
3119 x_return_status => l_return_status);
3120
3121 IF l_return_status <> fnd_api.g_ret_sts_success THEN
3122 RAISE fnd_api.g_exc_error;
3123 END IF;
3124
3125 l_source_line_rec.source_table := g_oke_source_table;
3126
3127 END IF;
3128
3129 x_source_header_rec := l_source_header_rec;
3130 x_source_line_rec := l_source_line_rec;
3131
3132 EXCEPTION
3133 WHEN fnd_api.g_exc_error THEN
3134 x_return_status := fnd_api.g_ret_sts_error;
3135 END get_source_info;
3136
3137 /* This routine derives the location information for a NETWORK_LINK */
3138 /* A partner is identified from the connected to relationship info */
3139 /* and derive the location from the partner. Assuming that a network*/
3140 /* link is not connected to a network link */
3141
3142 PROCEDURE get_network_link_location(
3143 p_instance_key IN csi_utility_grp.config_instance_key,
3144 x_location_type_code OUT NOCOPY varchar2,
3145 x_location_id OUT NOCOPY number,
3146 x_return_status OUT NOCOPY varchar2)
3147 IS
3148 cursor partner_cur IS
3149 SELECT obj_config_inst_hdr_id inst_hdr_id,
3150 obj_config_inst_item_id inst_item_id,
3151 obj_config_inst_rev_num inst_rev_num
3152 FROM csi_t_ii_relationships
3153 WHERE sub_config_inst_hdr_id = p_instance_key.inst_hdr_id
3154 AND sub_config_inst_item_id = p_instance_key.inst_item_id
3155 AND sub_config_inst_rev_num = p_instance_key.inst_rev_num
3156 UNION
3157 SELECT sub_config_inst_hdr_id inst_hdr_id,
3158 sub_config_inst_item_id inst_item_id,
3159 sub_config_inst_rev_num inst_rev_num
3160 FROM csi_t_ii_relationships
3161 WHERE obj_config_inst_hdr_id = p_instance_key.inst_hdr_id
3162 AND obj_config_inst_item_id = p_instance_key.inst_item_id
3163 AND obj_config_inst_rev_num = p_instance_key.inst_rev_num;
3164
3165 l_partner_location_found boolean := FALSE;
3166 l_location_id number := null;
3167 l_location_type_code varchar2(30);
3168
3169 BEGIN
3170 x_return_status := fnd_api.g_ret_sts_success;
3171 api_log('get_network_link_location');
3172
3173 FOR partner_rec IN partner_cur
3174 LOOP
3175 BEGIN
3176
3177 SELECT location_id,
3178 location_type_code
3179 INTO l_location_id,
3180 l_location_type_code
3181 FROM csi_t_txn_line_details
3182 WHERE config_inst_hdr_id = partner_rec.inst_hdr_id
3183 AND config_inst_item_id = partner_rec.inst_item_id
3184 AND config_inst_rev_num = partner_rec.inst_rev_num;
3185
3186 l_partner_location_found := TRUE;
3187 exit;
3188 EXCEPTION
3189 WHEN no_data_found THEN
3190
3191 BEGIN
3192
3193 SELECT location_id ,
3194 location_type_code
3195 INTO l_location_id,
3196 l_location_type_code
3197 FROM csi_item_instances
3198 WHERE config_inst_hdr_id = partner_rec.inst_hdr_id
3199 AND config_inst_item_id = partner_rec.inst_item_id;
3200
3201 l_partner_location_found := TRUE;
3202 exit;
3203
3204 EXCEPTION
3205 WHEN no_data_found THEN
3206 l_partner_location_found := FALSE;
3207 END;
3208 END;
3209 END LOOP;
3210
3211 IF NOT(l_partner_location_found) THEN
3212 fnd_message.set_name('CSI', 'CSI_NETWORK_PARTNER_NOT_FOUND');
3213 fnd_message.set_token('INST_HDR_ID', p_instance_key.inst_hdr_id);
3214 fnd_message.set_token('INST_ITEM_ID', p_instance_key.inst_item_id);
3215 fnd_message.set_token('INST_REV_NUM', p_instance_key.inst_rev_num);
3216 fnd_msg_pub.add;
3217 RAISE fnd_api.g_exc_error;
3218 END IF;
3219
3220 debug(' location_type_code :'||l_location_type_code);
3221 debug(' location_id :'||l_location_id);
3222
3223 x_location_type_code := l_location_type_code;
3224 x_location_id := l_location_id;
3225
3226 EXCEPTION
3227 WHEN fnd_api.g_exc_error THEN
3228 x_return_status := fnd_api.g_ret_sts_error;
3229 END get_network_link_location;
3230
3231
3232 --
3233 -- based on the pl/sql index only
3234 --
3235 PROCEDURE build_instance_set(
3236 p_index IN binary_integer,
3237 p_source_line_rec IN csi_interface_pkg.source_line_rec,
3238 p_item_attrib_rec IN item_attributes_rec,
3239 p_csi_txn_rec IN csi_datastructures_pub.transaction_rec,
3240 p_txn_line_dtl_rec IN csi_t_datastructures_grp.txn_line_detail_rec,
3241 p_txn_party_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
3242 p_txn_party_acct_tbl IN csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
3243 p_txn_org_assgn_tbl IN csi_t_datastructures_grp.txn_org_assgn_tbl,
3244 p_txn_eav_tbl IN csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
3245 px_pricing_tbl IN OUT NOCOPY csi_datastructures_pub.pricing_attribs_tbl,
3246 x_instance_rec OUT NOCOPY csi_datastructures_pub.instance_rec,
3247 x_party_tbl OUT NOCOPY csi_datastructures_pub.party_tbl,
3248 x_party_acct_tbl OUT NOCOPY csi_datastructures_pub.party_account_tbl,
3249 x_eav_tbl OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl,
3250 x_org_units_tbl OUT NOCOPY csi_datastructures_pub.organization_units_tbl,
3251 x_return_status OUT NOCOPY varchar2)
3252 IS
3253 l_i_rec csi_datastructures_pub.instance_rec;
3254 l_p_tbl csi_datastructures_pub.party_tbl;
3255 l_pa_tbl csi_datastructures_pub.party_account_tbl;
3256 l_eav_tbl csi_datastructures_pub.extend_attrib_values_tbl;
3257 l_ou_tbl csi_datastructures_pub.organization_units_tbl;
3258
3259 l_instance_key csi_utility_grp.config_instance_key;
3260
3261 p_ind binary_integer := 0;
3262 pa_ind binary_integer := 0;
3263 eav_ind binary_integer := 0;
3264 ou_ind binary_integer := 0;
3265
3266 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
3267
3268 -- Added as part of fix for Bug 2960049
3269 l_instance_usage_code varchar2(30);
3270 l_vld_organization_id number;
3271 l_inv_master_organization_id number;
3272
3273 BEGIN
3274 api_log('build_instance_set');
3275
3276 x_return_status := fnd_api.g_ret_sts_success;
3277
3278 IF p_index is not null THEN
3279
3280 /*
3281 -- Added for bug 9900096 to set the vld_org_id correctly, instead of to g_miss_num by default (HYONLEE)
3282 BEGIN
3283 SELECT LAST_VLD_ORGANIZATION_ID
3284 INTO l_vld_organization_id
3285 FROM csi_item_instances
3286 WHERE instance_id = p_txn_line_dtl_rec.instance_id;
3287
3288 EXCEPTION
3289 WHEN no_data_found THEN
3290 l_vld_organization_id := fnd_api.g_miss_num;
3291 END;
3292 BEGIN
3293 SELECT inv_master_organization_id
3294 INTO l_inv_master_organization_id
3295 FROM csi_item_instances
3296 WHERE instance_id = p_txn_line_dtl_rec.instance_id;
3297
3298 EXCEPTION
3299 WHEN no_data_found THEN
3300 l_inv_master_organization_id := p_txn_line_dtl_rec.inv_organization_id;
3301 END;
3302 -- End bug fix for 9900096 (HYONLEE)
3303 */
3304
3305 -- Added the nvl, fnd_api g_miss values to the p_txn_line_dtl_rec for Bug 3783088
3306 l_i_rec.instance_id := p_txn_line_dtl_rec.instance_id;
3307 l_i_rec.instance_number := fnd_api.g_miss_char;
3308 l_i_rec.external_reference := nvl(p_txn_line_dtl_rec.external_reference,fnd_api.g_miss_char);
3309 l_i_rec.inventory_item_id := p_txn_line_dtl_rec.inventory_item_id;
3310 l_i_rec.inventory_revision := nvl(p_txn_line_dtl_rec.inventory_revision,fnd_api.g_miss_char);
3311 -- Bug 9900096
3312 -- Only for configuratior use inv_organization_id in l_i_rec.inv_master_organization_id parameter
3313 -- Other wise use pre existing code(before bug 8811152)
3314 IF ( p_csi_txn_rec.transaction_type_id=401 and p_csi_txn_rec.txn_sub_type_id=101 and p_source_line_rec.fulfilled_date is null) THEN
3315
3316 l_i_rec.vld_organization_id := fnd_api.g_miss_num; -- Bug 8811152-Inv org ID passed by Configurator is Master org ID
3317 l_i_rec.inv_master_organization_id := p_txn_line_dtl_rec.inv_organization_id; -- Bug 8811152-Inv org ID passed by Configurator is Master org ID
3318
3319 ELSE
3320
3321 l_i_rec.vld_organization_id := p_txn_line_dtl_rec.inv_organization_id; -- Bug 8811152-Inv org ID passed by Configurator is Master org ID; EDITED: Bug 9900096 (no longer set to g_miss_num)
3322 l_i_rec.inv_master_organization_id := fnd_api.g_miss_num; -- Bug 8811152-Inv org ID passed by Configurator is Master org ID; EDITED: Bug 9900096 (queries value)
3323
3324 END IF;
3325
3326 l_i_rec.serial_number := p_txn_line_dtl_rec.serial_number;
3327 l_i_rec.mfg_serial_number_flag := nvl(p_txn_line_dtl_rec.mfg_serial_number_flag,fnd_api.g_miss_char);
3328 l_i_rec.lot_number := nvl(p_txn_line_dtl_rec.lot_number,fnd_api.g_miss_char);
3329 l_i_rec.quantity := p_txn_line_dtl_rec.quantity;
3330 l_i_rec.unit_of_measure := p_txn_line_dtl_rec.unit_of_measure;
3331 l_i_rec.accounting_class_code := 'CUST_PROD';
3332 l_i_rec.instance_condition_id := nvl(p_txn_line_dtl_rec.item_condition_id,fnd_api.g_miss_num);
3333 l_i_rec.customer_view_flag := 'Y';
3334 l_i_rec.merchant_view_flag := 'Y';
3335 l_i_rec.sellable_flag := nvl(p_txn_line_dtl_rec.sellable_flag,fnd_api.g_miss_char);
3336 l_i_rec.system_id := nvl(p_txn_line_dtl_rec.csi_system_id,fnd_api.g_miss_num);
3337 l_i_rec.instance_type_code := nvl(p_txn_line_dtl_rec.instance_type_code,fnd_api.g_miss_char);
3338 l_i_rec.active_start_date := nvl(p_txn_line_dtl_rec.active_start_date,fnd_api.g_miss_date);
3339 l_i_rec.active_end_date := nvl(p_txn_line_dtl_rec.active_end_date,fnd_api.g_miss_date);
3340 --Start - added for bug 8586745 FP for 8490723
3341 IF(l_i_rec.active_start_date=fnd_api.g_miss_date AND l_i_rec.active_end_date<>fnd_api.g_miss_date) THEN
3342 IF(to_date(l_i_rec.active_end_date,'DD-MM-YY HH24:MI')<to_date(SYSDATE,'DD-MM-YY HH24:MI'))then
3343 l_i_rec.active_end_date:=SYSDATE;
3344 END IF;
3345 l_i_rec.active_start_date :=l_i_rec.active_end_date;
3346 end IF;
3347 --End - added for bug 8586745 FP for 8490723
3348 l_i_rec.location_type_code := nvl(p_txn_line_dtl_rec.location_type_code,fnd_api.g_miss_char);
3349 l_i_rec.location_id := nvl(p_txn_line_dtl_rec.location_id,fnd_api.g_miss_num);
3350 -- Added for partner ordering
3351 l_i_rec.install_location_type_code := nvl(p_txn_line_dtl_rec.install_location_type_code,fnd_api.g_miss_char);
3352 l_i_rec.install_location_id := nvl(p_txn_line_dtl_rec.install_location_id,fnd_api.g_miss_num);
3353
3354 IF p_source_line_rec.source_table = g_om_source_table THEN
3355 l_i_rec.last_oe_order_line_id := p_source_line_rec.source_line_id;
3356 ELSIF p_source_line_rec.source_table = 'CONFIGURATOR' THEN
3357 IF p_source_line_rec.batch_validate_flag = 'N' THEN
3358 l_i_rec.call_batch_validation := fnd_api.g_false;
3359 END IF;
3360
3361 END IF;
3362
3363 l_i_rec.last_txn_line_detail_id := p_txn_line_dtl_rec.txn_line_detail_id;
3364 l_i_rec.install_date := nvl(p_txn_line_dtl_rec.active_start_date,fnd_api.g_miss_date);
3365 l_i_rec.manually_created_flag := 'N';
3366 l_i_rec.return_by_date := nvl(p_txn_line_dtl_rec.return_by_date,fnd_api.g_miss_date);
3367 l_i_rec.creation_complete_flag := fnd_api.g_miss_char;
3368 l_i_rec.completeness_flag := fnd_api.g_miss_char;
3369 l_i_rec.instance_usage_code := 'OUT_OF_ENTERPRISE';
3370
3371 -- Begin Fix for Bug 2960049
3372 IF nvl(l_i_rec.instance_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
3373 BEGIN
3374 SELECT instance_usage_code
3375 INTO l_instance_usage_code
3376 FROM csi_item_instances
3377 WHERE instance_id = l_i_rec.instance_id;
3378
3379 EXCEPTION
3380 WHEN no_data_found THEN
3381 l_i_rec.instance_id := fnd_api.g_miss_num;
3382 END;
3383 IF l_instance_usage_code = 'IN_RELATIONSHIP' THEN
3384 l_i_rec.instance_usage_code := l_instance_usage_code;
3385 END IF;
3386 END IF;
3387 -- End Fix for Bug 2960049
3388
3389 l_i_rec.last_oe_agreement_id := p_source_line_rec.agreement_id;
3390 l_i_rec.config_inst_hdr_id := p_txn_line_dtl_rec.config_inst_hdr_id;
3391 l_i_rec.config_inst_rev_num := p_txn_line_dtl_rec.config_inst_rev_num;
3392 l_i_rec.config_inst_item_id := p_txn_line_dtl_rec.config_inst_item_id;
3393 l_i_rec.instance_description := nvl(p_txn_line_dtl_rec.instance_description,fnd_api.g_miss_char);
3394 l_i_rec.last_txn_line_detail_id := p_txn_line_dtl_rec.source_txn_line_detail_id;
3395
3396 IF p_item_attrib_rec.ib_item_instance_class = 'LINK' THEN
3397
3398 l_i_rec.install_location_type_code := null;
3399 l_i_rec.install_location_id := null;
3400
3401 l_instance_key.inst_hdr_id := l_i_rec.config_inst_hdr_id;
3402 l_instance_key.inst_item_id := l_i_rec.config_inst_item_id;
3403 l_instance_key.inst_rev_num := l_i_rec.config_inst_rev_num;
3404
3405 get_network_link_location(
3406 p_instance_key => l_instance_key,
3407 x_location_type_code => l_i_rec.location_type_code,
3408 x_location_id => l_i_rec.location_id,
3409 x_return_status => l_return_status);
3410
3411 -- Bug 9023449 if the instance is in relationship then Location change is not allowed
3412 IF nvl(l_i_rec.instance_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num
3413 AND NVL(l_i_rec.instance_usage_code, fnd_api.g_miss_char) = 'IN_RELATIONSHIP' THEN
3414 debug('instance_usage_code - ' || l_i_rec.instance_usage_code);
3415 l_i_rec.install_location_type_code := nvl(l_i_rec.install_location_type_code,fnd_api.g_miss_char);
3416 l_i_rec.install_location_id := nvl(l_i_rec.install_location_id,fnd_api.g_miss_num);
3417 l_i_rec.location_type_code := nvl(l_i_rec.location_type_code,fnd_api.g_miss_char);
3418 l_i_rec.location_id := nvl(l_i_rec.location_id,fnd_api.g_miss_num);
3419 END IF;
3420
3421 ELSE
3422 l_i_rec.install_location_type_code := nvl(p_txn_line_dtl_rec.location_type_code,fnd_api.g_miss_char);
3423 l_i_rec.install_location_id := nvl(p_txn_line_dtl_rec.location_id,fnd_api.g_miss_num);
3424 END IF;
3425
3426 -- contact switch parse
3427 IF p_txn_party_tbl.COUNT > 0 THEN
3428 FOR l_p_ind IN p_txn_party_tbl.FIRST .. p_txn_party_tbl.LAST
3429 LOOP
3430 IF p_txn_party_tbl(l_p_ind).txn_line_details_index = p_index THEN
3431
3432 p_ind := p_ind + 1;
3433
3434 /*
3435 if there is a party contact with l_p_ind as the contact_oparty id then
3436 switch that with p_ind
3437 */
3438 FOR l_pc_ind IN p_txn_party_tbl.FIRST .. p_txn_party_tbl.LAST
3439 LOOP
3440 IF p_txn_party_tbl(l_pc_ind).contact_flag = 'Y'
3441 AND
3442 p_txn_party_tbl(l_pc_ind).contact_party_id = l_p_ind
3443 THEN
3444 --p_txn_party_tbl(l_pc_ind).contact_party_id := p_ind;
3445 -- commented the above statement and added the below IF for bug 4945025
3446 IF nvl(l_i_rec.instance_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num Then
3447 BEGIN
3448 SELECT instance_party_id
3449 INTO p_txn_party_tbl(l_pc_ind).contact_party_id
3450 FROM csi_i_parties
3451 WHERE instance_id = l_i_rec.instance_id
3452 AND relationship_type_code = p_txn_party_tbl(l_p_ind).relationship_type_code
3453 AND ((active_end_date is null ) OR
3454 (active_end_date > sysdate));
3455 EXCEPTION
3456 WHEN no_data_found THEN
3457 fnd_message.set_name('CSI','CSI_INT_INV_INSTA_PTY_ID');
3458 fnd_message.set_token('INSTANCE_ID',l_i_rec.instance_id);
3459 fnd_message.set_token('RELATIONSHIP_TYPE_CODE',p_txn_party_tbl(l_p_ind).relationship_type_code);
3460 fnd_msg_pub.add;
3461 IF p_txn_party_tbl(l_p_ind).relationship_type_code = 'OWNER' THEN
3462 x_return_status := fnd_api.g_ret_sts_error;
3463 raise fnd_api.g_exc_error;
3464 ELSE
3465 p_txn_party_tbl(l_pc_ind).contact_party_id := p_ind;
3466 debug('relationship_type_code :'||p_txn_party_tbl(l_p_ind).relationship_type_code);
3467 END IF;
3468 WHEN too_many_rows THEN
3469 fnd_message.set_name('CSI','CSI_INT_MANY_INSTA_PTY_FOUND');
3470 fnd_message.set_token('INSTANCE_ID',l_i_rec.instance_id);
3471 fnd_message.set_token('RELATIONSHIP_TYPE_CODE',p_txn_party_tbl(l_p_ind).relationship_type_code);
3472 fnd_msg_pub.add;
3473 x_return_status := fnd_api.g_ret_sts_error;
3474 raise fnd_api.g_exc_error;
3475 END;
3476 ELSE
3477 p_txn_party_tbl(l_pc_ind).contact_party_id := p_ind;
3478 END IF;
3479 END IF;
3480 END LOOP;
3481 END IF;
3482 END LOOP;
3483 END IF;
3484
3485 p_ind := 0;
3486
3487 IF p_txn_party_tbl.COUNT > 0 THEN
3488 FOR l_p_ind IN p_txn_party_tbl.FIRST .. p_txn_party_tbl.LAST
3489 LOOP
3490 IF p_txn_party_tbl(l_p_ind).txn_line_details_index = p_index THEN
3491
3492 p_ind := p_ind + 1;
3493
3494 l_p_tbl(p_ind).instance_party_id := p_txn_party_tbl(l_p_ind).instance_party_id;
3495 l_p_tbl(p_ind).instance_id := l_i_rec.instance_id;
3496 l_p_tbl(p_ind).party_id := p_txn_party_tbl(l_p_ind).party_source_id;
3497 l_p_tbl(p_ind).party_source_table := p_txn_party_tbl(l_p_ind).party_source_table;
3498 l_p_tbl(p_ind).relationship_type_code:= p_txn_party_tbl(l_p_ind).relationship_type_code;
3499 l_p_tbl(p_ind).contact_flag := p_txn_party_tbl(l_p_ind).contact_flag;
3500
3501 IF p_txn_party_tbl(l_p_ind).contact_flag = 'Y' THEN
3502 --l_p_tbl(p_ind).contact_parent_tbl_index := p_txn_party_tbl(l_p_ind).contact_party_id;
3503 -- commented the above statement and added the below statement for bug 4945025
3504 l_p_tbl(p_ind).contact_ip_id := p_txn_party_tbl(l_p_ind).contact_party_id;
3505 END IF;
3506 --l_p_tbl(p_ind).contact_ip_id := p_txn_party_tbl(l_p_ind).contact_ip_id;
3507 l_p_tbl(p_ind).active_end_date := p_txn_party_tbl(l_p_ind).active_start_date;
3508
3509 /*
3510 l_p_tbl(p_ind).context :=
3511 l_p_tbl(p_ind).attribute1 :=
3512 l_p_tbl(p_ind).attribute2 :=
3513 l_p_tbl(p_ind).attribute3 :=
3514 l_p_tbl(p_ind).attribute4 :=
3515 l_p_tbl(p_ind).attribute5 :=
3516 l_p_tbl(p_ind).attribute6 :=
3517 l_p_tbl(p_ind).attribute7 :=
3518 l_p_tbl(p_ind).attribute8 :=
3519 l_p_tbl(p_ind).attribute9 :=
3520 l_p_tbl(p_ind).attribute10 :=
3521 l_p_tbl(p_ind).attribute11 :=
3522 l_p_tbl(p_ind).attribute12 :=
3523 l_p_tbl(p_ind).attribute13 :=
3524 l_p_tbl(p_ind).attribute14 :=
3525 l_p_tbl(p_ind).attribute15 :=
3526 */
3527
3528 IF p_txn_party_acct_tbl.COUNT > 0 THEN
3529 FOR l_pa_ind IN p_txn_party_acct_tbl.FIRST .. p_txn_party_acct_tbl.LAST
3530 LOOP
3531 IF p_txn_party_acct_tbl(l_pa_ind).txn_party_details_index = l_p_ind THEN
3532
3533 pa_ind := pa_ind + 1;
3534
3535 l_pa_tbl(pa_ind).parent_tbl_index := p_ind;
3536 l_pa_tbl(pa_ind).ip_account_id := p_txn_party_acct_tbl(l_pa_ind).ip_account_id;
3537 l_pa_tbl(pa_ind).party_account_id := p_txn_party_acct_tbl(l_pa_ind).account_id;
3538 l_pa_tbl(pa_ind).relationship_type_code := p_txn_party_acct_tbl(l_pa_ind).relationship_type_code;
3539 l_pa_tbl(pa_ind).bill_to_address := p_txn_party_acct_tbl(l_pa_ind).bill_to_address_id;
3540 l_pa_tbl(pa_ind).ship_to_address := p_txn_party_acct_tbl(l_pa_ind).ship_to_address_id;
3541 l_pa_tbl(pa_ind).instance_party_id := l_p_tbl(p_ind).instance_party_id;
3542 l_pa_tbl(pa_ind).active_start_date := p_txn_party_acct_tbl(l_pa_ind).active_start_date;
3543 /*
3544 l_pa_tbl(pa_ind).active_end_date :=
3545 l_pa_tbl(pa_ind).context :=
3546 l_pa_tbl(pa_ind).attribute1 :=
3547 l_pa_tbl(pa_ind).attribute2 :=
3548 l_pa_tbl(pa_ind).attribute3 :=
3549 l_pa_tbl(pa_ind).attribute4 :=
3550 l_pa_tbl(pa_ind).attribute5 :=
3551 l_pa_tbl(pa_ind).attribute6 :=
3552 l_pa_tbl(pa_ind).attribute7 :=
3553 l_pa_tbl(pa_ind).attribute8 :=
3554 l_pa_tbl(pa_ind).attribute9 :=
3555 l_pa_tbl(pa_ind).attribute10 :=
3556 l_pa_tbl(pa_ind).attribute11 :=
3557 l_pa_tbl(pa_ind).attribute12 :=
3558 l_pa_tbl(pa_ind).attribute13 :=
3559 l_pa_tbl(pa_ind).attribute14 :=
3560 l_pa_tbl(pa_ind).attribute15 :=
3561 l_pa_tbl(pa_ind).object_version_number :=
3562 */
3563 END IF;
3564 END LOOP; -- party account loop
3565 END IF; -- patry account count > 0
3566 END IF;
3567 END LOOP; -- party loop
3568 END IF; -- party table count > 0
3569
3570 -- org assignments
3571 IF p_txn_org_assgn_tbl.COUNT > 0 THEN
3572 FOR l_oa_ind IN p_txn_org_assgn_tbl.FIRST .. p_txn_org_assgn_tbl.LAST
3573 LOOP
3574 IF p_txn_org_assgn_tbl(l_oa_ind).txn_line_details_index = p_index THEN
3575
3576 ou_ind := ou_ind + 1;
3577
3578 l_ou_tbl(ou_ind).instance_ou_id := p_txn_org_assgn_tbl(l_oa_ind).instance_ou_id;
3579 l_ou_tbl(ou_ind).operating_unit_id := p_txn_org_assgn_tbl(l_oa_ind).operating_unit_id;
3580 l_ou_tbl(ou_ind).instance_id := l_i_rec.instance_id;
3581 l_ou_tbl(ou_ind).relationship_type_code := p_txn_org_assgn_tbl(l_oa_ind).relationship_type_code;
3582 l_ou_tbl(ou_ind).active_start_date := p_txn_org_assgn_tbl(l_oa_ind).active_start_date;
3583 l_ou_tbl(ou_ind).active_end_date := p_txn_org_assgn_tbl(l_oa_ind).active_end_date;
3584 l_ou_tbl(ou_ind).object_version_number := 1.0;
3585 /*
3586 l_ou_tbl(ou_ind).context :=
3587 l_ou_tbl(ou_ind).attribute1 :=
3588 l_ou_tbl(ou_ind).attribute2 :=
3589 l_ou_tbl(ou_ind).attribute3 :=
3590 l_ou_tbl(ou_ind).attribute4 :=
3591 l_ou_tbl(ou_ind).attribute5 :=
3592 l_ou_tbl(ou_ind).attribute6 :=
3593 l_ou_tbl(ou_ind).attribute7 :=
3594 l_ou_tbl(ou_ind).attribute8 :=
3595 l_ou_tbl(ou_ind).attribute9 :=
3596 l_ou_tbl(ou_ind).attribute10 :=
3597 l_ou_tbl(ou_ind).attribute11 :=
3598 l_ou_tbl(ou_ind).attribute12 :=
3599 l_ou_tbl(ou_ind).attribute13 :=
3600 l_ou_tbl(ou_ind).attribute14 :=
3601 l_ou_tbl(ou_ind).attribute15 :=
3602 */
3603
3604 END IF;
3605 END LOOP; -- org assignments loop
3606 END IF; -- org assignments count > 0
3607
3608 -- extended attribs
3609 IF p_txn_eav_tbl.COUNT > 0 THEN
3610 FOR l_eav_ind IN p_txn_eav_tbl.FIRST .. p_txn_eav_tbl.LAST
3611 LOOP
3612 IF p_txn_eav_tbl(l_eav_ind).txn_line_details_index = p_index THEN
3613
3614 -- csi_t_gen_utility_Pvt.dump_txn_eav_rec(p_txn_eav_tbl(l_eav_ind));
3615
3616 eav_ind := eav_ind + 1;
3617
3618 l_eav_tbl(eav_ind).instance_id := l_i_rec.instance_id;
3619 l_eav_tbl(eav_ind).attribute_value := p_txn_eav_tbl(l_eav_ind).attribute_value;
3620
3621 IF p_txn_eav_tbl(l_eav_ind).attrib_source_table = 'CSI_IEA_VALUES' THEN
3622 l_eav_tbl(eav_ind).attribute_value_id := p_txn_eav_tbl(l_eav_ind).attribute_source_id;
3623 ELSIF p_txn_eav_tbl(l_eav_ind).attrib_source_table = 'CSI_I_EXTENDED_ATTRIBS' THEN
3624 l_eav_tbl(eav_ind).attribute_id := p_txn_eav_tbl(l_eav_ind).attribute_source_id;
3625 IF l_i_rec.instance_id = fnd_api.g_miss_num THEN
3626 l_eav_tbl(eav_ind).attribute_value_id := fnd_api.g_miss_num;
3627 ELSE
3628 BEGIN
3629 SELECT attribute_value_id
3630 INTO l_eav_tbl(eav_ind).attribute_value_id
3631 FROM csi_iea_values
3632 WHERE attribute_id = p_txn_eav_tbl(l_eav_ind).attribute_source_id
3633 AND instance_id = l_i_rec.instance_id;
3634 EXCEPTION
3635 WHEN no_data_found THEN
3636 l_eav_tbl(eav_ind).attribute_value_id := fnd_api.g_miss_num;
3637 END;
3638 END IF;
3639 END IF;
3640
3641 --l_eav_tbl(eav_ind).active_start_date := p_txn_eav_tbl(l_eav_ind).active_start_date;
3642 --l_eav_tbl(eav_ind).active_end_date := p_txn_eav_tbl(l_eav_ind).active_end_date;
3643 l_eav_tbl(eav_ind).object_version_number := 1.0;
3644 /*
3645 l_eav_tbl(eav_ind).context :=
3646 l_eav_tbl(eav_ind).attribute1 :=
3647 l_eav_tbl(eav_ind).attribute2 :=
3648 l_eav_tbl(eav_ind).attribute3 :=
3649 l_eav_tbl(eav_ind).attribute4 :=
3650 l_eav_tbl(eav_ind).attribute5 :=
3651 l_eav_tbl(eav_ind).attribute6 :=
3652 l_eav_tbl(eav_ind).attribute7 :=
3653 l_eav_tbl(eav_ind).attribute8 :=
3654 l_eav_tbl(eav_ind).attribute9 :=
3655 l_eav_tbl(eav_ind).attribute10 :=
3656 l_eav_tbl(eav_ind).attribute11 :=
3657 l_eav_tbl(eav_ind).attribute12 :=
3658 l_eav_tbl(eav_ind).attribute13 :=
3659 l_eav_tbl(eav_ind).attribute14 :=
3660 l_eav_tbl(eav_ind).attribute15 :=
3661 */
3662 END IF;
3663 END LOOP; -- extended attribs loop
3664 END IF; -- extended attribs count > 0
3665
3666 -- pricing attribs
3667 IF px_pricing_tbl.COUNT > 0 THEN
3668 FOR l_pr_ind IN px_pricing_tbl.FIRST .. px_pricing_tbl.LAST
3669 LOOP
3670 IF px_pricing_tbl(l_pr_ind).parent_tbl_index = p_index
3671 AND px_pricing_tbl(l_pr_ind).instance_id = fnd_api.g_miss_num
3672 THEN
3673 px_pricing_tbl(l_pr_ind).instance_id := l_i_rec.instance_id; -- bug 5093707
3674 END IF;
3675 END LOOP; -- pricing attribs loop
3676 END IF; -- pricing attribs count > 0
3677
3678 x_instance_rec := l_i_rec;
3679 x_party_tbl := l_p_tbl;
3680 x_party_acct_tbl := l_pa_tbl;
3681 x_org_units_tbl := l_ou_tbl;
3682 x_eav_tbl := l_eav_tbl;
3683
3684 END IF; -- p_index is not null
3685
3686 EXCEPTION
3687 WHEN fnd_api.g_exc_error THEN
3688 x_return_status := fnd_api.g_ret_sts_error;
3689 END build_instance_set;
3690
3691 PROCEDURE sub_type_specific_vldns(
3692 p_source_flag IN varchar2,
3693 p_sub_type_rec IN csi_txn_sub_types%rowtype,
3694 p_instance_rec IN csi_datastructures_pub.instance_rec,
3695 p_party_tbl IN csi_datastructures_pub.party_tbl,
3696 p_party_acct_tbl IN csi_datastructures_pub.party_account_tbl,
3697 p_org_units_tbl IN csi_datastructures_pub.organization_units_tbl,
3698 p_eav_tbl IN csi_datastructures_pub.extend_attrib_values_tbl,
3699 p_pricing_tbl IN csi_datastructures_pub.pricing_attribs_tbl,
3700 x_return_status OUT NOCOPY varchar2)
3701 IS
3702 l_csi_param_rec csi_install_parameters%rowtype;
3703 BEGIN
3704
3705 x_return_status := fnd_api.g_ret_sts_success;
3706
3707 api_log('sub_type_specific_vldns');
3708 /* commenting this for bug 4028827 . since we do not seem to have any usage currently for this Query
3709 SELECT * INTO l_csi_param_rec
3710 FROM csi_install_parameters;
3711 */
3712 debug('Instance Status ID :'||p_instance_rec.instance_status_id);
3713
3714 -- check if an owner/account is passed if src_change_owner = 'E'
3715 -- and make sure that the owner party id is not the internal party
3716 -- if owner change is not set then clear the owner party passed.
3717 -- check for multiple owner error
3718 -- for non source check if an instance ref is specified
3719
3720 EXCEPTION
3721 WHEN fnd_api.g_exc_error THEN
3722 x_return_status := fnd_api.g_ret_sts_error;
3723 END sub_type_specific_vldns;
3724
3725
3726 --
3727 --
3728 --
3729 PROCEDURE validate_and_derive_ids(
3730 px_instance_rec IN OUT NOCOPY csi_datastructures_pub.instance_rec,
3731 px_party_tbl IN OUT NOCOPY csi_datastructures_pub.party_tbl,
3732 px_party_acct_tbl IN OUT NOCOPY csi_datastructures_pub.party_account_tbl,
3733 px_org_units_tbl IN OUT NOCOPY csi_datastructures_pub.organization_units_tbl,
3734 px_eav_tbl IN OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl,
3735 px_pricing_tbl IN OUT NOCOPY csi_datastructures_pub.pricing_attribs_tbl,
3736 x_return_status OUT NOCOPY varchar2)
3737 IS
3738 l_active_end_date date;
3739 BEGIN
3740 x_return_status := fnd_api.g_ret_sts_success;
3741 api_log('validate_and_derive_ids');
3742
3743 -- srramakr TSO with equipment. During DISCONNECT of Tangible item instance, we need to remove the config keys.
3744 -- In order to identify whether the item is tangible or not, we use the serial number of the item instance.
3745 -- Only tangible items can be shipped and possess a serial number. Non-tangible can only be fulfilled where
3746 -- there will not be any serial number.
3747 --
3748 SELECT object_version_number,
3749 serial_number ,
3750 active_end_date
3751 INTO px_instance_rec.object_version_number,
3752 px_instance_rec.serial_number,
3753 l_active_end_date
3754 FROM csi_item_instances
3755 WHERE instance_id = px_instance_rec.instance_id;
3756
3757 px_instance_rec.active_start_date := fnd_api.g_miss_date;
3758
3759 -- 4946227 okeship of srlsoi returned for good fails
3760 IF nvl(l_active_end_date, fnd_api.g_miss_date) <> fnd_api.g_miss_date THEN
3761 IF px_instance_rec.active_end_date = fnd_api.g_miss_date THEN
3762 px_instance_rec.active_end_date := null;
3763 END IF;
3764 END IF;
3765
3766 IF px_party_tbl.COUNT > 0 THEN
3767 FOR l_p_ind IN px_party_tbl.FIRST .. px_party_tbl.LAST
3768 LOOP
3769
3770 px_party_tbl(l_p_ind).instance_id := px_instance_rec.instance_id;
3771 px_party_tbl(l_p_ind).active_start_date := fnd_api.g_miss_date;
3772
3773 IF nvl(px_party_tbl(l_p_ind).instance_party_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
3774 BEGIN
3775 SELECT instance_party_id,
3776 object_version_number
3777 INTO px_party_tbl(l_p_ind).instance_party_id,
3778 px_party_tbl(l_p_ind).object_version_number
3779 FROM csi_i_parties
3780 WHERE instance_id = px_instance_rec.instance_id
3781 AND party_source_table = px_party_tbl(l_p_ind).party_source_table
3782 AND relationship_type_code = px_party_tbl(l_p_ind).relationship_type_code;
3783 EXCEPTION
3784 WHEN no_data_found THEN
3785 px_party_tbl(l_p_ind).instance_party_id := fnd_api.g_miss_num;
3786 px_party_tbl(l_p_ind).object_version_number := 1.0;
3787 WHEN too_many_rows THEN
3788 BEGIN
3789 SELECT instance_party_id,
3790 object_version_number
3791 INTO px_party_tbl(l_p_ind).instance_party_id,
3792 px_party_tbl(l_p_ind).object_version_number
3793 FROM csi_i_parties
3794 WHERE instance_id = px_instance_rec.instance_id
3795 AND party_id = px_party_tbl(l_p_ind).party_id
3796 AND party_source_table = px_party_tbl(l_p_ind).party_source_table
3797 AND relationship_type_code = px_party_tbl(l_p_ind).relationship_type_code;
3798 EXCEPTION
3799 WHEN no_data_found THEN
3800 px_party_tbl(l_p_ind).instance_party_id := fnd_api.g_miss_num;
3801 px_party_tbl(l_p_ind).object_version_number := 1.0;
3802 END;
3803 END;
3804
3805 -- party account
3806 IF px_party_acct_tbl.count > 0 THEN
3807 FOR l_pa_ind IN px_party_acct_tbl.FIRST .. px_party_acct_tbl.LAST
3808 LOOP
3809 IF px_party_acct_tbl(l_pa_ind).parent_tbl_index = l_p_ind THEN
3810 px_party_acct_tbl(l_pa_ind).instance_party_id := px_party_tbl(l_p_ind).instance_party_id;
3811 px_party_acct_tbl(l_pa_ind).active_start_date := fnd_api.g_miss_date;
3812
3813 IF nvl(px_party_acct_tbl(l_pa_ind).ip_account_id , fnd_api.g_miss_num) = fnd_api.g_miss_num
3814 THEN
3815 BEGIN
3816
3817 SELECT ip_account_id,
3818 object_version_number
3819 INTO px_party_acct_tbl(l_pa_ind).ip_account_id,
3820 px_party_acct_tbl(l_pa_ind).object_version_number
3821 FROM csi_ip_accounts
3822 WHERE instance_party_id = px_party_acct_tbl(l_pa_ind).instance_party_id
3823 AND relationship_type_code = px_party_acct_tbl(l_pa_ind).relationship_type_code;
3824
3825 EXCEPTION
3826 WHEN no_data_found THEN
3827 px_party_acct_tbl(l_pa_ind).ip_account_id := fnd_api.g_miss_num;
3828 px_party_acct_tbl(l_pa_ind).object_version_number := 1.0;
3829 WHEN too_many_rows THEN
3830 BEGIN
3831 SELECT ip_account_id,
3832 object_version_number
3833 INTO px_party_acct_tbl(l_pa_ind).ip_account_id,
3834 px_party_acct_tbl(l_pa_ind).object_version_number
3835 FROM csi_ip_accounts
3836 WHERE instance_party_id = px_party_acct_tbl(l_pa_ind).instance_party_id
3837 AND party_account_id = px_party_acct_tbl(l_pa_ind).party_account_id
3838 AND relationship_type_code = px_party_acct_tbl(l_pa_ind).relationship_type_code;
3839 EXCEPTION
3840 WHEN no_data_found THEN
3841 px_party_acct_tbl(l_pa_ind).ip_account_id := fnd_api.g_miss_num;
3842 px_party_acct_tbl(l_pa_ind).object_version_number := 1.0;
3843 END;
3844 END;
3845 ELSE
3846 SELECT object_version_number
3847 INTO px_party_acct_tbl(l_pa_ind).object_version_number
3848 FROM csi_ip_accounts
3849 WHERE ip_account_id = px_party_acct_tbl(l_pa_ind).ip_account_id;
3850 END IF;
3851 END IF;
3852 END LOOP;
3853 ELSE
3854 SELECT object_version_number
3855 INTO px_party_tbl(l_p_ind).object_version_number
3856 FROM csi_i_parties
3857 WHERE instance_party_id = px_party_tbl(l_p_ind).instance_party_id;
3858 END IF;
3859
3860 END IF;
3861 END LOOP;
3862 END IF;
3863
3864 -- org units
3865
3866 IF px_org_units_tbl.COUNT > 0 THEN
3867 FOR l_ind IN px_org_units_tbl.FIRST .. px_org_units_tbl.LAST
3868 LOOP
3869 px_org_units_tbl(l_ind).instance_id := px_instance_rec.instance_id;
3870 px_org_units_tbl(l_ind).active_start_date := fnd_api.g_miss_date;
3871 IF nvl(px_org_units_tbl(l_ind).instance_ou_id,fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
3872 BEGIN
3873 SELECT instance_ou_id,
3874 object_version_number
3875 INTO px_org_units_tbl(l_ind).instance_ou_id,
3876 px_org_units_tbl(l_ind).object_version_number
3877 FROM csi_i_org_assignments
3878 WHERE instance_id = px_org_units_tbl(l_ind).instance_id
3879 AND operating_unit_id = px_org_units_tbl(l_ind).operating_unit_id
3880 AND relationship_type_code = px_org_units_tbl(l_ind).relationship_type_code;
3881 EXCEPTION
3882 WHEN no_data_found THEN
3883 px_org_units_tbl(l_ind).instance_ou_id := fnd_api.g_miss_num;
3884 px_org_units_tbl(l_ind).object_version_number := 1.0;
3885 END;
3886 ELSE
3887 SELECT object_version_number
3888 INTO px_org_units_tbl(l_ind).instance_ou_id
3889 FROM csi_i_org_assignments
3890 WHERE instance_ou_id = px_org_units_tbl(l_ind).instance_ou_id;
3891 END IF;
3892 END LOOP;
3893 END IF;
3894
3895 -- extended attribs
3896 IF px_eav_tbl.COUNT > 0 THEN
3897 FOR l_ind IN px_eav_tbl.FIRST .. px_eav_tbl.LAST
3898 LOOP
3899 px_eav_tbl(l_ind).instance_id := px_instance_rec.instance_id;
3900 IF nvl(px_eav_tbl(l_ind).attribute_value_id,fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
3901 BEGIN
3902 null;
3903 EXCEPTION
3904 WHEN no_data_found THEN
3905 px_eav_tbl(l_ind).object_version_number := 1.0;
3906 END;
3907 ELSE
3908 SELECT object_version_number
3909 INTO px_eav_tbl(l_ind).object_version_number
3910 FROM csi_iea_values
3911 WHERE attribute_value_id = px_eav_tbl(l_ind).attribute_value_id;
3912 END IF;
3913 END LOOP;
3914 END IF;
3915
3916 -- pricing attribs
3917 -- Added for bug 5093707
3918 IF px_pricing_tbl.COUNT > 0 THEN
3919 FOR l_ind IN px_pricing_tbl.FIRST .. px_pricing_tbl.LAST
3920 LOOP
3921 px_pricing_tbl(l_ind).instance_id := px_instance_rec.instance_id;
3922 IF nvl(px_pricing_tbl(l_ind).pricing_attribute_id,fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
3923
3924 BEGIN
3925 SELECT pricing_attribute_id ,
3926 object_version_number
3927 INTO px_pricing_tbl(l_ind).pricing_attribute_id ,
3928 px_pricing_tbl(l_ind).object_version_number
3929 FROM csi_i_pricing_attribs
3930 WHERE instance_id = px_instance_rec.instance_id
3931 AND pricing_context = px_pricing_tbl(l_ind).pricing_context ;
3932
3933 EXCEPTION
3934 WHEN NO_DATA_FOUND THEN
3935 px_pricing_tbl(l_ind).object_version_number := 1.0;
3936 END;
3937
3938 ELSE
3939 SELECT object_version_number
3940 INTO px_pricing_tbl(l_ind).object_version_number
3941 FROM csi_i_pricing_attribs
3942 WHERE pricing_attribute_id = px_pricing_tbl(l_ind).pricing_attribute_id;
3943 END IF;
3944 END LOOP;
3945 END IF;
3946 -- End Added for bug 5093707
3947 -- end pricing attribs
3948
3949
3950 EXCEPTION
3951 WHEN fnd_api.g_exc_error THEN
3952 x_return_status := fnd_api.g_ret_sts_error;
3953 END validate_and_derive_ids;
3954
3955 PROCEDURE build_relationship_tbl(
3956 p_txn_ii_rltns_tbl IN csi_t_datastructures_grp.txn_ii_rltns_tbl,
3957 p_txn_line_dtl_tbl IN csi_t_datastructures_grp.txn_line_detail_tbl,
3958 x_c_ii_rltns_tbl OUT NOCOPY csi_datastructures_pub.ii_relationship_tbl,
3959 x_u_ii_rltns_tbl OUT NOCOPY csi_datastructures_pub.ii_relationship_tbl,
3960 x_return_status OUT NOCOPY varchar2)
3961 IS
3962
3963 l_r_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
3964 l_td_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
3965
3966 l_sub_instance_id number;
3967 l_obj_instance_id number;
3968 l_rel_end_date date;
3969
3970 --Fix for bug 5956280
3971 l_obj_end_date date;
3972 l_sub_end_date date;
3973
3974
3975 l_c_ind binary_integer := 0;
3976 l_u_ind binary_integer := 0;
3977
3978 skip_the_relation exception;
3979
3980 BEGIN
3981 x_return_status := fnd_api.g_ret_sts_success;
3982 api_log('build_relationship_tbl');
3983
3984 debug(' ii_rltns_tbl :'||p_txn_ii_rltns_tbl.count);
3985
3986 l_r_tbl := p_txn_ii_rltns_tbl;
3987 l_td_tbl := p_txn_line_dtl_tbl;
3988
3989 IF l_r_tbl.COUNT > 0 THEN
3990 FOR l_ii_ind IN l_r_tbl.FIRST .. l_r_tbl.LAST
3991 LOOP
3992 l_rel_end_date := NULL;
3993 l_obj_end_date := NULL;
3994 l_sub_end_date := NULL;
3995 BEGIN
3996
3997 debug(' sub_config_inst_hdr_id :'||l_r_tbl(l_ii_ind).sub_config_inst_hdr_id);
3998 debug(' sub_config_inst_rev_num :'||l_r_tbl(l_ii_ind).sub_config_inst_rev_num);
3999 debug(' sub_config_inst_item_id :'||l_r_tbl(l_ii_ind).sub_config_inst_item_id);
4000 debug(' ');
4001 debug(' obj_config_inst_hdr_id :'||l_r_tbl(l_ii_ind).obj_config_inst_hdr_id);
4002 debug(' obj_config_inst_rev_num :'||l_r_tbl(l_ii_ind).obj_config_inst_rev_num);
4003 debug(' obj_config_inst_item_id :'||l_r_tbl(l_ii_ind).obj_config_inst_item_id);
4004
4005 IF l_r_tbl(l_ii_ind).subject_type = 'I' THEN
4006 l_sub_instance_id := l_r_tbl(l_ii_ind).subject_id;
4007 ELSE
4008 BEGIN
4009 SELECT instance_id,active_end_date
4010 INTO l_sub_instance_id,l_sub_end_date --Fix for bug 5956280
4011 FROM csi_item_instances
4012 WHERE config_inst_hdr_id = l_r_tbl(l_ii_ind).sub_config_inst_hdr_id
4013 --AND config_inst_rev_num = l_r_tbl(l_ii_ind).sub_config_inst_rev_num
4014 AND config_inst_item_id = l_r_tbl(l_ii_ind).sub_config_inst_item_id;
4015 EXCEPTION
4016 WHEN no_data_found THEN
4017 BEGIN
4018 SELECT instance_id,active_end_date
4019 INTO l_sub_instance_id,l_sub_end_date --Fix for bug 5956280
4020 FROM CSI_T_TXN_LINE_DETAILS
4021 WHERE txn_line_detail_id = l_r_tbl(l_ii_ind).subject_id;
4022 EXCEPTION
4023 WHEN NO_DATA_FOUND THEN
4024 raise skip_the_relation;
4025 END;
4026 END;
4027 END IF;
4028
4029 IF l_r_tbl(l_ii_ind).object_type = 'I' THEN
4030 l_obj_instance_id := l_r_tbl(l_ii_ind).object_id;
4031 ELSE
4032 BEGIN
4033 SELECT instance_id,active_end_date
4034 INTO l_obj_instance_id,l_obj_end_date --Fix for bug 5956280
4035 FROM csi_item_instances
4036 WHERE config_inst_hdr_id = l_r_tbl(l_ii_ind).obj_config_inst_hdr_id
4037 --AND config_inst_rev_num = l_r_tbl(l_ii_ind).obj_config_inst_rev_num
4038 AND config_inst_item_id = l_r_tbl(l_ii_ind).obj_config_inst_item_id;
4039 EXCEPTION
4040 WHEN no_data_found THEN
4041 BEGIN
4042 SELECT instance_id,active_end_date
4043 INTO l_obj_instance_id,l_obj_end_date --Fix for bug 5956280
4044 FROM CSI_T_TXN_LINE_DETAILS
4045 WHERE txn_line_detail_id = l_r_tbl(l_ii_ind).object_id;
4046 EXCEPTION
4047 WHEN NO_DATA_FOUND THEN
4048 raise skip_the_relation;
4049 END;
4050 END;
4051 END IF;
4052
4053 BEGIN
4054 SELECT relationship_id,
4055 object_version_number,
4056 active_end_date
4057 INTO l_r_tbl(l_ii_ind).csi_inst_relationship_id,
4058 l_r_tbl(l_ii_ind).object_version_number,
4059 l_rel_end_date
4060 FROM csi_ii_relationships
4061 WHERE subject_id = l_sub_instance_id
4062 AND object_id = l_obj_instance_id;
4063 EXCEPTION
4064 WHEN no_data_found THEN
4065 l_r_tbl(l_ii_ind).csi_inst_relationship_id := fnd_api.g_miss_num;
4066 END;
4067
4068 IF nvl(l_r_tbl(l_ii_ind).csi_inst_relationship_id,fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
4069 IF l_r_tbl(l_ii_ind).active_end_date IS NULL AND l_obj_end_date IS NULL --Fix for bug 5956280
4070 AND l_sub_end_date IS NULL THEN
4071 l_c_ind := l_c_ind + 1;
4072 x_c_ii_rltns_tbl(l_c_ind).relationship_id := fnd_api.g_miss_num;
4073 x_c_ii_rltns_tbl(l_c_ind).subject_id := l_sub_instance_id;
4074 x_c_ii_rltns_tbl(l_c_ind).relationship_type_code := l_r_tbl(l_ii_ind).relationship_type_code;
4075 x_c_ii_rltns_tbl(l_c_ind).object_id := l_obj_instance_id;
4076 x_c_ii_rltns_tbl(l_c_ind).display_order := l_r_tbl(l_ii_ind).display_order;
4077 x_c_ii_rltns_tbl(l_c_ind).position_reference := l_r_tbl(l_ii_ind).position_reference;
4078 END IF;
4079 ELSE
4080
4081 /* if the relationship is not already end dated then take it for processing */
4082 -- IF l_rel_end_date is null THEN
4083 l_u_ind := l_u_ind + 1;
4084 x_u_ii_rltns_tbl(l_u_ind).relationship_id := l_r_tbl(l_ii_ind).csi_inst_relationship_id;
4085 x_u_ii_rltns_tbl(l_u_ind).subject_id := l_sub_instance_id;
4086 x_u_ii_rltns_tbl(l_u_ind).relationship_type_code := l_r_tbl(l_ii_ind).relationship_type_code;
4087 x_u_ii_rltns_tbl(l_u_ind).object_id := l_obj_instance_id;
4088 x_u_ii_rltns_tbl(l_u_ind).display_order := l_r_tbl(l_ii_ind).display_order;
4089 x_u_ii_rltns_tbl(l_u_ind).position_reference := l_r_tbl(l_ii_ind).position_reference;
4090 --Modified for bug5928619
4091 IF l_rel_end_date is null THEN
4092 x_u_ii_rltns_tbl(l_u_ind).active_end_date := l_r_tbl(l_ii_ind).active_end_date;
4093 debug('l_rel_end_date is null '||l_rel_end_date);
4094 ELSE
4095 x_u_ii_rltns_tbl(l_u_ind).active_end_date := null; --Added for bug5928619
4096 debug('l_rel_end_date is not null '||l_rel_end_date);
4097 END IF;
4098
4099 x_u_ii_rltns_tbl(l_u_ind).object_version_number := l_r_tbl(l_ii_ind).object_version_number;
4100 -- END IF;
4101
4102 END IF;
4103
4104 EXCEPTION
4105 WHEN skip_the_relation THEN
4106 null;
4107 END;
4108 END LOOP;
4109 END IF;
4110
4111 debug(' create_ii_rltns :'||x_c_ii_rltns_tbl.count);
4112 debug(' update_ii_rltns :'||x_u_ii_rltns_tbl.count);
4113
4114 EXCEPTION
4115 WHEN fnd_api.g_exc_error THEN
4116 x_return_status := fnd_api.g_ret_sts_success;
4117 END build_relationship_tbl;
4118
4119 PROCEDURE update_td_status(
4120 p_txn_line_rec IN csi_t_datastructures_grp.txn_line_rec,
4121 p_txn_line_dtl_tbl IN csi_t_datastructures_grp.txn_line_detail_tbl,
4122 p_processing_status IN varchar2,
4123 x_return_status OUT NOCOPY varchar2)
4124 IS
4125
4126 l_tl_rec csi_t_datastructures_grp.txn_line_rec;
4127 l_td_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
4128 l_pd_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
4129 l_pa_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
4130 l_oa_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
4131 l_ea_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
4132 l_ir_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
4133
4134 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
4135 l_msg_count number;
4136 l_msg_data varchar2(2000);
4137
4138 BEGIN
4139 x_return_status := fnd_api.g_ret_sts_success;
4140 api_log('update_td_status');
4141
4142 --l_tl_rec := p_txn_line_rec;
4143 IF nvl(p_txn_line_rec.transaction_line_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
4144 l_tl_rec.transaction_line_id := p_txn_line_rec.transaction_line_id;
4145 l_tl_rec.processing_status := p_processing_status;
4146 l_tl_rec.api_caller_identity := 'CONFIG';
4147
4148 IF p_txn_line_dtl_tbl.COUNT > 0 THEN
4149 FOR l_ind IN p_txn_line_dtl_tbl.FIRST .. p_txn_line_dtl_tbl.LAST
4150 LOOP
4151 l_td_tbl(l_ind).txn_line_detail_id := p_txn_line_dtl_tbl(l_ind).source_txn_line_detail_id;
4152 l_td_tbl(l_ind).processing_status := p_processing_status;
4153 l_td_tbl(l_ind).api_caller_identity := 'CONFIG';
4154
4155 IF p_processing_status = 'ERROR' THEN
4156 l_td_tbl(l_ind).error_explanation := p_txn_line_dtl_tbl(l_ind).error_explanation;
4157 END IF;
4158
4159 END LOOP;
4160 END IF;
4161
4162 csi_t_txn_details_grp.update_txn_line_dtls(
4163 p_api_version => 1.0,
4164 p_commit => fnd_api.g_false,
4165 p_init_msg_list => fnd_api.g_true,
4166 p_validation_level => fnd_api.g_valid_level_full,
4167 p_txn_line_rec => l_tl_rec,
4168 p_txn_line_detail_tbl => l_td_tbl,
4169 px_txn_party_detail_tbl => l_pd_tbl,
4170 px_txn_pty_acct_detail_tbl => l_pa_tbl,
4171 px_txn_org_assgn_tbl => l_oa_tbl,
4172 px_txn_ext_attrib_vals_tbl => l_ea_tbl,
4173 px_txn_ii_rltns_tbl => l_ir_tbl,
4174 x_return_status => l_return_status,
4175 x_msg_count => l_msg_count,
4176 x_msg_data => l_msg_data);
4177
4178 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4179 RAISE fnd_api.g_exc_error;
4180 END IF;
4181 END IF;
4182
4183 EXCEPTION
4184 WHEN fnd_api.g_exc_error THEN
4185 x_return_status := fnd_api.g_ret_sts_error;
4186 END update_td_status;
4187 --
4188 --
4189 --
4190 PROCEDURE interface_ib(
4191 p_source_header_rec IN csi_interface_pkg.source_header_rec,
4192 p_source_line_rec IN csi_interface_pkg.source_line_rec,
4193 px_csi_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
4194 px_txn_line_rec IN OUT NOCOPY csi_t_datastructures_grp.txn_line_rec,
4195 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
4196 px_txn_party_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
4197 px_txn_party_acct_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
4198 px_txn_org_assgn_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
4199 px_txn_eav_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
4200 px_txn_ii_rltns_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
4201 px_pricing_attribs_tbl IN OUT NOCOPY csi_datastructures_pub.pricing_attribs_tbl,
4202 x_return_status OUT NOCOPY varchar2,
4203 x_return_message OUT NOCOPY varchar2)
4204 IS
4205
4206 l_instance_rec csi_datastructures_pub.instance_rec;
4207 l_party_tbl csi_datastructures_pub.party_tbl;
4208 l_party_acct_tbl csi_datastructures_pub.party_account_tbl;
4209 l_eav_tbl csi_datastructures_pub.extend_attrib_values_tbl;
4210 l_pricing_tbl csi_datastructures_pub.pricing_attribs_tbl;
4211 l_org_units_tbl csi_datastructures_pub.organization_units_tbl;
4212
4213 l_sub_type_rec csi_txn_sub_types%rowtype;
4214 l_item_attrib_rec item_attributes_rec;
4215
4216 l_csi_txn_rec csi_datastructures_pub.transaction_rec;
4217
4218 l_c_instance_rec csi_datastructures_pub.instance_rec;
4219 l_c_party_tbl csi_datastructures_pub.party_tbl;
4220 l_c_party_acct_tbl csi_datastructures_pub.party_account_tbl;
4221 l_c_org_units_tbl csi_datastructures_pub.organization_units_tbl;
4222 l_c_eav_tbl csi_datastructures_pub.extend_attrib_values_tbl;
4223 l_c_pricing_tbl csi_datastructures_pub.pricing_attribs_tbl;
4224 l_c_inst_asset_tbl csi_datastructures_pub.instance_asset_tbl;
4225
4226 l_u_end_date date := null;
4227
4228 l_u_instance_rec csi_datastructures_pub.instance_rec;
4229 l_u_party_tbl csi_datastructures_pub.party_tbl;
4230 l_u_party_acct_tbl csi_datastructures_pub.party_account_tbl;
4231 l_u_org_units_tbl csi_datastructures_pub.organization_units_tbl;
4232 l_u_eav_tbl csi_datastructures_pub.extend_attrib_values_tbl;
4233 l_u_pricing_tbl csi_datastructures_pub.pricing_attribs_tbl;
4234 l_u_inst_asset_tbl csi_datastructures_pub.instance_asset_tbl;
4235 l_u_inst_id_tbl csi_datastructures_pub.id_tbl;
4236
4237 l_c_ii_rltns_tbl csi_datastructures_pub.ii_relationship_tbl;
4238 l_u_ii_rltns_tbl csi_datastructures_pub.ii_relationship_tbl;
4239
4240 l_txn_line_rec csi_t_datastructures_grp.txn_line_rec;
4241 l_txn_line_query_rec csi_t_datastructures_grp.txn_line_query_rec;
4242
4243 -- explode bom variables
4244 l_bom_std_item_rec csi_datastructures_pub.instance_rec;
4245 l_comp_instance_tbl csi_datastructures_pub.instance_tbl;
4246 l_comp_relation_tbl csi_datastructures_pub.ii_relationship_tbl;
4247 l_bom_explode_flag BOOLEAN := FALSE;
4248
4249 l_create_flag boolean := FALSE;
4250 l_call_contracts varchar2(1) := fnd_api.g_true;
4251
4252 --4327207
4253 l_fulfilled_date date := fnd_api.g_miss_date;
4254 l_rlt_active_end_date date := fnd_api.g_miss_date;
4255 l_parent_line_rec oe_order_pub.line_rec_type;
4256 om_vld_org_id NUMBER;
4257 l_csi_order_line_rec csi_order_ship_pub.order_line_rec;
4258 l_child_line_tbl oe_order_pub.line_tbl_type;
4259 l_inst_query_rec csi_datastructures_pub.instance_query_rec;
4260 l_party_query_rec csi_datastructures_pub.party_query_rec;
4261 l_pty_acct_query_rec csi_datastructures_pub.party_account_query_rec;
4262
4263 l_instance_hdr_tbl csi_datastructures_pub.instance_header_tbl;
4264 l_rel_ctr NUMBER;
4265
4266 l_active_end_date date := fnd_api.g_miss_date;
4267 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
4268 l_rel_type_code varchar2(30) := 'COMPONENT-OF';
4269 l_msg_count number;
4270 l_msg_data varchar2(2000);
4271
4272 -- Added for FP of bug 6755897 - Reconcilation changes
4273 l_item_instance_expired varchar2(1);
4274 BEGIN
4275
4276 api_log('interface_ib');
4277
4278 x_return_status := fnd_api.g_ret_sts_success;
4279
4280 debug(' input record count for interface_ib :-');
4281 debug(' txn_line_dtl_tbl :'||px_txn_line_dtl_tbl.count);
4282 debug(' txn_party_tbl :'||px_txn_party_tbl.count);
4283 debug(' txn_party_acct_tbl :'||px_txn_party_acct_tbl.count);
4284 debug(' txn_org_assgn_tbl :'||px_txn_org_assgn_tbl.count);
4285 debug(' txn_eav_tbl :'||px_txn_eav_tbl.count);
4286 debug(' txn_ii_rltns_tbl :'||px_txn_ii_rltns_tbl.count);
4287 debug(' pricing_attribs_tbl :'||px_pricing_attribs_tbl.count);
4288
4289 --4327207
4290 l_fulfilled_date := nvl(p_source_line_rec.fulfilled_date,fnd_api.g_miss_date);
4291
4292 -- get_item_attributes
4293 get_item_attributes(
4294 p_transaction_id => px_csi_txn_rec.inv_material_transaction_id, --Added for bug# 14835893
4295 p_inventory_item_id => p_source_line_rec.inventory_item_id,
4296 p_organization_id => p_source_line_rec.organization_id,
4297 x_item_attrib_rec => l_item_attrib_rec,
4298 x_return_status => l_return_status);
4299
4300 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4301 RAISE fnd_api.g_exc_error;
4302 END IF;
4303
4304 IF p_source_line_rec.org_id is not null THEN
4305 om_vld_org_id := oe_sys_parameters.value(
4306 param_name => 'MASTER_ORGANIZATION_ID',
4307 p_org_id => p_source_line_rec.org_id);
4308 END IF;
4309
4310
4311 IF px_txn_line_dtl_tbl.COUNT > 0 THEN
4312 FOR l_td_ind IN px_txn_line_dtl_tbl.FIRST .. px_txn_line_dtl_tbl.LAST
4313 LOOP
4314
4315 debug('Transaction Type ID:'||px_txn_line_rec.source_transaction_type_id);
4316 debug('Sub Type ID :'||px_txn_line_dtl_tbl(l_td_ind).sub_type_id);
4317 debug('Instance ID :'||px_txn_line_dtl_tbl(l_td_ind).instance_id);
4318
4319 --4327207
4320
4321 --Added code for bug 7517240
4322 l_pricing_tbl := px_pricing_attribs_tbl; --Added for bug 7239142
4323 IF l_pricing_tbl.COUNT > 0 THEN
4324 FOR l_pricing_index IN l_pricing_tbl.FIRST..l_pricing_tbl.LAST LOOP
4325 debug('Pricing Attributes Table Record # :'||l_pricing_index);
4326 debug('pricing_attribute_id :'||l_pricing_tbl(l_pricing_index).pricing_attribute_id);
4327 debug('instance_id :'||l_pricing_tbl(l_pricing_index).instance_id);
4328 debug('active_start_date :'||l_pricing_tbl(l_pricing_index).active_start_date);
4329 debug('active_end_date :'||l_pricing_tbl(l_pricing_index).active_end_date);
4330 debug('pricing_context :'||l_pricing_tbl(l_pricing_index).pricing_context);
4331 END LOOP;
4332 END IF;
4333 --End added code for bug 7517240
4334
4335 l_create_flag :=FALSE; --5702851
4336 IF px_txn_line_rec.source_transaction_type_id = 401
4337 AND
4338 px_txn_line_rec.config_session_hdr_id IS NOT NULL
4339 AND
4340 px_txn_line_dtl_tbl(l_td_ind).active_end_date IS NOT NULL
4341 THEN
4342 IF p_source_line_rec.link_to_line_id IS NOT NULL THEN
4343 BEGIN
4344 -- Begin fix for bug 6964595, FP of bug 6916021
4345 -- If there are multiple relationships where
4346 -- the same item instance is the subject, get the active_end_date
4347 -- for the last one
4348 SELECT active_end_date
4349 INTO l_rlt_active_end_date
4350 FROM csi_ii_relationships
4351 WHERE relationship_id=
4352 (SELECT max(relationship_id)
4353 FROM csi_ii_relationships
4354 WHERE subject_id = px_txn_line_dtl_tbl(l_td_ind).instance_id
4355 AND relationship_type_code = l_rel_type_code); -- srramakr added
4356 -- End fix for bug 6964595, FP of bug 6916021
4357 EXCEPTION
4358 WHEN no_data_found THEN
4359 debug('No relationship exists');
4360 END;
4361
4362 IF l_rlt_active_end_date IS NOT NULL THEN
4363 csi_order_fulfill_pub.get_ib_trackable_parent(
4364 p_current_line_id => p_source_line_rec.source_line_id,
4365 p_om_vld_org_id => om_vld_org_id,
4366 x_parent_line_rec => l_parent_line_rec,
4367 x_return_status => l_return_status);
4368
4369 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4370 RAISE fnd_api.g_exc_error;
4371 END IF;
4372
4373 IF l_parent_line_rec.fulfillment_date IS NOT NULL
4374 AND
4375 l_parent_line_rec.fulfillment_date > p_source_line_rec.fulfilled_date
4376 THEN
4377 l_fulfilled_date := l_parent_line_rec.fulfillment_date;
4378 END IF;
4379 debug('l_parent_fulfill_date_time..'||to_char(l_parent_line_rec.fulfillment_date,'dd-mon-yyyy hh:mi:ss'));
4380 debug('p_source_fulfill_date time..'||to_char(p_source_line_rec.fulfilled_date,'dd-mon-yyyy hh:mi:ss'));
4381
4382 END IF;
4383
4384 END IF;--end of link_to_line_id
4385 END IF;--end of disconnect fulfill date swap
4386 -- 4327207
4387
4388 -- get sub_type rec
4389 BEGIN
4390 SELECT *
4391 INTO l_sub_type_rec
4392 FROM csi_txn_sub_types
4393 WHERE transaction_type_id = px_txn_line_rec.source_transaction_type_id
4394 AND sub_type_id = px_txn_line_dtl_tbl(l_td_ind).sub_type_id;
4395 EXCEPTION
4396 WHEN no_data_found THEN
4397 fnd_message.set_name('CSI', 'CSI_INT_SUB_TYPE_REC_MISSING');
4398 fnd_message.set_token('SUB_TYPE_ID', px_txn_line_dtl_tbl(l_td_ind).sub_type_id);
4399 fnd_message.set_token('TRANSACTION_TYPE_ID',px_txn_line_rec.source_transaction_type_id);
4400 fnd_msg_pub.add;
4401 RAISE fnd_api.g_exc_error;
4402 END;
4403
4404 debug('src_status_id :'||l_sub_type_rec.src_status_id);
4405
4406 IF nvl(px_csi_txn_rec.transaction_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
4407 l_csi_txn_rec := px_csi_txn_rec;
4408 ELSE
4409 l_csi_txn_rec.transaction_id := fnd_api.g_miss_num;
4410 l_csi_txn_rec.transaction_type_id := px_txn_line_rec.source_transaction_type_id;
4411 l_csi_txn_rec.txn_sub_type_id := px_txn_line_dtl_tbl(l_td_ind).sub_type_id;
4412 l_csi_txn_rec.transaction_date := sysdate;
4413 l_csi_txn_rec.source_header_ref_id := p_source_header_rec.source_header_id;
4414 l_csi_txn_rec.source_header_ref := p_source_header_rec.source_header_ref;
4415 l_csi_txn_rec.source_line_ref_id := p_source_line_rec.source_line_id;
4416 l_csi_txn_rec.source_line_ref := p_source_line_rec.source_line_ref;
4417 l_csi_txn_rec.source_transaction_date := l_fulfilled_date;
4418 END IF;
4419
4420 debug('Txn line end date :'||px_txn_line_dtl_tbl(l_td_ind).active_end_date);
4421 debug('Top model line id :'||p_source_line_rec.top_model_line_id);
4422 debug('Link to line id :'||p_source_line_rec.link_to_line_id);
4423 debug('l_fulfilled_date :'||l_fulfilled_date);
4424 debug('Order fullfill date :'||p_source_line_rec.fulfilled_date);
4425 debug('Relationship end date :'||l_rlt_active_end_date);
4426
4427 -- adding this condition to make sure that the relationship processing
4428 -- happens once and only once within the interface_ib session
4429 IF l_td_ind = 1 THEN
4430
4431 /* moved this update_relationship set above to address the issue with
4432 expire the relationship first before processing the children. The
4433 core API while expiring the parent instance automatically end dates
4434 the child instances. We are stopping that by expiring the relationsip
4435 first thus by hiding the shildren from the API.
4436 */
4437
4438 IF px_txn_ii_rltns_tbl.COUNT > 0 THEN
4439
4440 build_relationship_tbl(
4441 p_txn_ii_rltns_tbl => px_txn_ii_rltns_tbl,
4442 p_txn_line_dtl_tbl => px_txn_line_dtl_tbl,
4443 x_c_ii_rltns_tbl => l_c_ii_rltns_tbl,
4444 x_u_ii_rltns_tbl => l_u_ii_rltns_tbl,
4445 x_return_status => l_return_status);
4446
4447 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4448 RAISE fnd_api.g_exc_error;
4449 END IF;
4450
4451 /* update the existing relationships */
4452 IF l_u_ii_rltns_tbl.COUNT > 0 THEN
4453
4454 /* to stamp the source transaction date as end date */
4455 FOR l_ind IN l_u_ii_rltns_tbl.FIRST .. l_u_ii_rltns_tbl.LAST
4456 LOOP
4457 debug(' Relationship_ID :'|| l_u_ii_rltns_tbl(l_ind).relationship_id);
4458 debug(' Relationship_End_Date:'|| l_u_ii_rltns_tbl(l_ind).active_end_date);
4459 IF nvl(l_u_ii_rltns_tbl(l_ind).active_end_date, fnd_api.g_miss_date) <> fnd_api.g_miss_date
4460 THEN
4461 l_u_ii_rltns_tbl(l_ind).active_end_date := l_csi_txn_rec.source_transaction_date;
4462 END IF;
4463 debug(' Source_txn_date :'|| l_u_ii_rltns_tbl(l_ind).active_end_date);
4464 END LOOP;
4465
4466 record_time('Start');
4467
4468 csi_t_gen_utility_pvt.dump_api_info(
4469 p_pkg_name => 'csi_ii_relationships_pub',
4470 p_api_name => 'update_relationship');
4471
4472 csi_ii_relationships_pub.update_relationship(
4473 p_api_version => 1.0,
4474 p_commit => fnd_api.g_false,
4475 p_init_msg_list => fnd_api.g_true,
4476 p_validation_level => fnd_api.g_valid_level_full,
4477 p_relationship_tbl => l_u_ii_rltns_tbl,
4478 p_txn_rec => l_csi_txn_rec,
4479 x_return_status => l_return_status,
4480 x_msg_count => l_msg_count,
4481 x_msg_data => l_msg_data);
4482
4483 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4484 RAISE fnd_api.g_exc_error;
4485 END IF;
4486
4487 record_time('End');
4488
4489 END IF;
4490 END IF;
4491 END IF;
4492
4493 -- build temporary instance set
4494 build_instance_set(
4495 p_index => l_td_ind,
4496 p_source_line_rec => p_source_line_rec,
4497 p_item_attrib_rec => l_item_attrib_rec,
4498 p_csi_txn_rec => l_csi_txn_rec,
4499 p_txn_line_dtl_rec => px_txn_line_dtl_tbl(l_td_ind),
4500 p_txn_party_tbl => px_txn_party_tbl,
4501 p_txn_party_acct_tbl => px_txn_party_acct_tbl,
4502 p_txn_org_assgn_tbl => px_txn_org_assgn_tbl,
4503 p_txn_eav_tbl => px_txn_eav_tbl,
4504 px_pricing_tbl => l_pricing_tbl,
4505 x_instance_rec => l_instance_rec,
4506 x_party_tbl => l_party_tbl,
4507 x_party_acct_tbl => l_party_acct_tbl,
4508 x_org_units_tbl => l_org_units_tbl,
4509 x_eav_tbl => l_eav_tbl,
4510 x_return_status => l_return_status);
4511
4512 IF x_return_status <> fnd_api.g_ret_sts_success THEN
4513 RAISE fnd_api.g_exc_error;
4514 END IF;
4515
4516 debug('source_transaction_flag :'||px_txn_line_dtl_tbl(l_td_ind).source_transaction_flag);
4517 IF px_txn_line_dtl_tbl(l_td_ind).source_transaction_flag = 'Y' THEN
4518 l_instance_rec.instance_status_id := nvl(l_sub_type_rec.src_status_id, fnd_api.g_miss_num);
4519 ELSE
4520 l_instance_rec.instance_status_id := nvl(l_sub_type_rec.non_src_status_id, fnd_api.g_miss_num);
4521 END IF;
4522
4523 debug(' processing record count for instance :-');
4524 debug(' instance_id :'||l_instance_rec.instance_id);
4525 debug(' party_tbl :'||l_party_tbl.count);
4526 debug(' party_acct_tbl :'||l_party_acct_tbl.count);
4527 debug(' org_units_tbl :'||l_org_units_tbl.count);
4528 debug(' eav_tbl :'||l_eav_tbl.count);
4529 debug(' pricing_tbl :'||l_pricing_tbl.count);
4530
4531
4532 -- do sub type specific validations
4533
4534 sub_type_specific_vldns(
4535 p_source_flag => px_txn_line_dtl_tbl(l_td_ind).source_transaction_flag,
4536 p_sub_type_rec => l_sub_type_rec,
4537 p_instance_rec => l_instance_rec,
4538 p_party_tbl => l_party_tbl,
4539 p_party_acct_tbl => l_party_acct_tbl,
4540 p_eav_tbl => l_eav_tbl,
4541 p_org_units_tbl => l_org_units_tbl,
4542 p_pricing_tbl => l_pricing_tbl,
4543 x_return_status => l_return_status);
4544
4545 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4546 RAISE fnd_api.g_exc_error;
4547 END IF;
4548
4549 IF nvl(l_instance_rec.instance_id, fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
4550 l_create_flag := TRUE;
4551 END IF;
4552
4553 IF l_create_flag THEN
4554 -- check if the instance created is in replacement for a non source ref
4555 -- then disable the new contracts call
4556 -- build create_instance
4557 l_c_instance_rec := l_instance_rec;
4558 l_c_party_tbl := l_party_tbl;
4559 l_c_party_acct_tbl := l_party_acct_tbl;
4560 l_c_org_units_tbl := l_org_units_tbl;
4561 l_c_eav_tbl := l_eav_tbl;
4562 l_c_pricing_tbl := l_pricing_tbl;
4563
4564 csi_t_gen_utility_pvt.dump_csi_instance_rec(l_c_instance_rec);
4565
4566 IF csi_t_gen_utility_pvt.g_debug_level >= 15 THEN
4567 csi_t_gen_utility_pvt.dump_csi_party_tbl(l_c_party_tbl);
4568 csi_t_gen_utility_pvt.dump_csi_account_tbl(l_c_party_acct_tbl);
4569 csi_t_gen_utility_pvt.dump_eav_tbl(l_c_eav_tbl);
4570 END IF;
4571
4572 record_time('Start');
4573
4574 csi_t_gen_utility_pvt.dump_api_info(
4575 p_pkg_name => 'csi_item_instance_pub',
4576 p_api_name => 'create_item_instance');
4577
4578 csi_item_instance_pub.create_item_instance(
4579 p_api_version => 1.0,
4580 p_commit => fnd_api.g_false,
4581 p_init_msg_list => fnd_api.g_true,
4582 p_validation_level => fnd_api.g_valid_level_full,
4583 p_txn_rec => l_csi_txn_rec,
4584 p_instance_rec => l_c_instance_rec,
4585 p_party_tbl => l_c_party_tbl,
4586 p_account_tbl => l_c_party_acct_tbl,
4587 p_org_assignments_tbl => l_c_org_units_tbl,
4588 p_ext_attrib_values_tbl => l_c_eav_tbl,
4589 p_pricing_attrib_tbl => l_c_pricing_tbl,
4590 p_asset_assignment_tbl => l_c_inst_asset_tbl,
4591 x_return_status => l_return_status,
4592 x_msg_count => l_msg_count,
4593 x_msg_data => l_msg_data );
4594
4595 -- For Bug 4057183
4596 -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
4597 IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
4598 raise fnd_api.g_exc_error;
4599 END IF;
4600
4601 record_time('End');
4602
4603 px_txn_line_dtl_tbl(l_td_ind).instance_id := l_c_instance_rec.instance_id;
4604
4605 debug('Customer Product ID : '||l_c_instance_rec.instance_id);
4606
4607 /* Setting values for Explode BOM in CREATE */
4608
4609 IF l_c_instance_rec.quantity = 1 THEN
4610 l_bom_std_item_rec.instance_id := l_c_instance_rec.instance_id ;
4611 l_bom_std_item_rec.inventory_item_id := px_txn_line_dtl_tbl(l_td_ind).inventory_item_id ;
4612 l_bom_std_item_rec.vld_organization_id := px_txn_line_dtl_tbl(l_td_ind).inv_organization_id ;
4613 l_bom_std_item_rec.quantity := 1;
4614 END IF;
4615
4616 -- check auto split profile and split
4617 ELSE -- instance id reference is specified
4618
4619 --validate and derive ids
4620
4621 validate_and_derive_ids(
4622 px_instance_rec => l_instance_rec,
4623 px_party_tbl => l_party_tbl,
4624 px_party_acct_tbl => l_party_acct_tbl,
4625 px_org_units_tbl => l_org_units_tbl,
4626 px_eav_tbl => l_eav_tbl,
4627 px_pricing_tbl => l_pricing_tbl,
4628 x_return_status => l_return_status);
4629
4630 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4631 RAISE fnd_api.g_exc_error;
4632 END IF;
4633
4634 -- validations based on the baseline rev num ##
4635
4636 -- TSO with equipment
4637 -- For Tangible item, since DISCONNECT is the only possible operation, we need to remove the config keys.
4638 -- Hence nullifying them.
4639 --
4640 IF l_instance_rec.serial_number IS NOT NULL AND
4641 l_instance_rec.serial_number <> FND_API.G_MISS_CHAR THEN
4642 l_instance_rec.config_inst_hdr_id := NULL;
4643 l_instance_rec.config_inst_rev_num := NULL;
4644 l_instance_rec.config_inst_item_id := NULL;
4645 END IF;
4646 l_u_instance_rec := l_instance_rec;
4647 l_u_party_tbl := l_party_tbl;
4648 l_u_party_acct_tbl := l_party_acct_tbl;
4649 l_u_org_units_tbl := l_org_units_tbl;
4650 l_u_eav_tbl := l_eav_tbl;
4651 l_u_pricing_tbl := l_pricing_tbl;
4652
4653 csi_t_gen_utility_pvt.dump_csi_instance_rec(l_u_instance_rec);
4654 csi_t_gen_utility_pvt.dump_csi_party_tbl(l_u_party_tbl);
4655 csi_t_gen_utility_pvt.dump_csi_account_tbl(l_u_party_acct_tbl);
4656 csi_t_gen_utility_pvt.dump_eav_tbl(l_u_eav_tbl);
4657
4658
4659 IF nvl(l_u_instance_rec.active_end_date, fnd_api.g_miss_date) <> fnd_api.g_miss_date
4660 THEN
4661 l_u_instance_rec.active_end_date := l_csi_txn_rec.source_transaction_date;
4662 END IF;
4663
4664 -- Start adding code for FP of bug 6755897 - Reconcilation changes
4665 BEGIN
4666 SELECT 'N'
4667 INTO l_item_instance_expired
4668 FROM csi_item_instances
4669 WHERE instance_id = l_u_instance_rec.instance_id
4670 AND ((active_end_date IS NULL) OR (active_end_date >= SYSDATE));
4671 EXCEPTION
4672 WHEN NO_DATA_FOUND THEN
4673 l_item_instance_expired := 'Y';
4674 END;
4675
4676 IF l_item_instance_expired = 'Y' AND
4677 (nvl(l_u_instance_rec.active_end_date, fnd_api.g_miss_date) <> fnd_api.g_miss_date) THEN
4678 debug('Item instance ('||l_u_instance_rec.instance_id||') already expired, no need to expire again.');
4679 ELSE
4680 -- End adding code for FP of bug 6755897 - Reconcilation changes
4681 record_time('Start');
4682
4683 csi_t_gen_utility_pvt.dump_api_info(
4684 p_pkg_name => 'csi_item_instance_pub',
4685 p_api_name => 'update_item_instance');
4686
4687 csi_item_instance_pub.update_item_instance(
4688 p_api_version => 1.0,
4689 p_commit => fnd_api.g_false,
4690 p_init_msg_list => fnd_api.g_true,
4691 p_validation_level => fnd_api.g_valid_level_full,
4692 p_txn_rec => l_csi_txn_rec,
4693 p_instance_rec => l_u_instance_rec,
4694 p_party_tbl => l_u_party_tbl,
4695 p_account_tbl => l_u_party_acct_tbl,
4696 p_org_assignments_tbl => l_u_org_units_tbl,
4697 p_ext_attrib_values_tbl => l_u_eav_tbl,
4698 p_pricing_attrib_tbl => l_u_pricing_tbl,
4699 p_asset_assignment_tbl => l_u_inst_asset_tbl,
4700 x_instance_id_lst => l_u_inst_id_tbl,
4701 x_return_status => l_return_status,
4702 x_msg_count => l_msg_count,
4703 x_msg_data => l_msg_data );
4704
4705 record_time('End');
4706
4707 -- For Bug 4057183
4708 -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
4709 IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
4710 RAISE fnd_api.g_exc_error;
4711 END IF;
4712 END IF; -- Added for FP of bug 6755897 - Reconcilation changes
4713
4714 px_txn_line_dtl_tbl(l_td_ind).instance_id := l_u_instance_rec.instance_id;
4715
4716 debug('Customer Product ID : '||l_u_instance_rec.instance_id);
4717
4718 /* Setting values for Explode BOM in UPDATE */
4719
4720 IF l_u_instance_rec.quantity = 1 THEN
4721 l_bom_std_item_rec.instance_id := l_u_instance_rec.instance_id ;
4722 l_bom_std_item_rec.inventory_item_id := px_txn_line_dtl_tbl(l_td_ind).inventory_item_id ;
4723 l_bom_std_item_rec.vld_organization_id := px_txn_line_dtl_tbl(l_td_ind).inv_organization_id ;
4724 l_bom_std_item_rec.quantity := 1;
4725 END IF;
4726
4727
4728 END IF;
4729
4730 /* Checking for BOM eligibility and Exploding */
4731 --
4732 -- srramakr check_standard_bom_pc will be called only for Project Contracts Shipments.
4733 -- For other transaction types we need to call Check_Standard_Bom routine.
4734 --
4735 IF l_csi_txn_rec.transaction_type_id = 326 THEN
4736
4737 l_bom_explode_flag := check_standard_bom_pc(
4738 p_instance_id => l_bom_std_item_rec.instance_id,
4739 p_std_item_rec => l_bom_std_item_rec,
4740 p_bom_item_type => l_item_attrib_rec.bom_item_type );
4741 ELSE
4742 l_bom_explode_flag := csi_item_instance_vld_pvt.Is_Config_Exploded
4743 (p_instance_id => l_bom_std_item_rec.instance_id,
4744 p_stack_err_msg => FALSE );
4745 --
4746 IF l_bom_explode_flag THEN -- Config Already Exploded. So set this to FALSE
4747 l_bom_explode_flag := FALSE;
4748 ELSE -- Not yet exploded. Check for eligibility
4749 l_csi_order_line_rec.header_id := p_source_header_rec.source_header_id;
4750 l_csi_order_line_rec.order_line_id := p_source_line_rec.source_line_id;
4751 l_csi_order_line_rec.inv_item_id := p_source_line_rec.inventory_item_id;
4752 l_csi_order_line_rec.inv_org_id := p_source_line_rec.organization_id;
4753 l_csi_order_line_rec.bom_item_type := l_item_attrib_rec.bom_item_type;
4754 l_csi_order_line_rec.item_type_code := p_source_line_rec.item_type_code;
4755 --
4756 l_bom_explode_flag := csi_utl_pkg.check_standard_bom
4757 (p_order_line_rec => l_csi_order_line_rec );
4758 END IF;
4759 END IF;
4760
4761 IF l_bom_explode_flag THEN
4762
4763 debug('This shipment from Project Contracts qualifies for BOM Explosion');
4764 debug(' instance_id :'||l_bom_std_item_rec.instance_id);
4765 debug(' inv_item_id :'||l_bom_std_item_rec.inventory_item_id);
4766 debug(' inv_org_id :'||l_bom_std_item_rec.vld_organization_id);
4767 debug(' quantity :'||l_bom_std_item_rec.quantity);
4768
4769 record_time('Start');
4770
4771 -- call the API for BOM Explosion
4772 csi_t_gen_utility_pvt.dump_api_info(
4773 p_pkg_name => 'csi_item_instance_pvt',
4774 p_api_name => 'explode_bom');
4775
4776 csi_item_instance_pvt.explode_bom(
4777 p_api_version => 1.0,
4778 p_commit => fnd_api.g_false,
4779 p_init_msg_list => fnd_api.g_true,
4780 p_validation_level => fnd_api.g_valid_level_full,
4781 p_source_instance_rec => l_bom_std_item_rec,
4782 p_explosion_level => fnd_api.g_miss_num,
4783 p_item_tbl => l_comp_instance_tbl,
4784 p_item_relation_tbl => l_comp_relation_tbl,
4785 p_create_instance => fnd_api.g_true,
4786 p_txn_rec => l_csi_txn_rec,
4787 x_return_status => l_return_status,
4788 x_msg_count => l_msg_count,
4789 x_msg_data => l_msg_data);
4790
4791 record_time('End');
4792
4793 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4794 debug('Failed csi_item_instance_pvt.explode_bom');
4795 RAISE fnd_api.g_exc_error;
4796 END IF;
4797
4798 debug(' Trackable components :'||l_comp_instance_tbl.count);
4799 debug(' Component-Of Relationships :'||l_comp_relation_tbl.count);
4800
4801 END IF; -- End BOM Explosion
4802
4803 END LOOP;
4804 END IF; -- px_txn_line_dtl_tbl.count > 0
4805
4806 IF px_txn_ii_rltns_tbl.COUNT > 0 THEN
4807
4808 build_relationship_tbl(
4809 p_txn_ii_rltns_tbl => px_txn_ii_rltns_tbl,
4810 p_txn_line_dtl_tbl => px_txn_line_dtl_tbl,
4811 x_c_ii_rltns_tbl => l_c_ii_rltns_tbl,
4812 x_u_ii_rltns_tbl => l_u_ii_rltns_tbl,
4813 x_return_status => l_return_status);
4814
4815 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4816 RAISE fnd_api.g_exc_error;
4817 END IF;
4818 END IF; -- px_txn_ii_rltns_tbl.COUNT check
4819 --
4820 -- srramakr TSO with Equipment
4821 -- As a part of MACD flow if we fulfill a KIT(having config keys)i
4822 -- and ship the included items (not having config keys).
4823 -- We need to build the relationship between KIT and its included items. Since CZ would not have
4824 -- written relationships for these, we use the traditional get_ib_trackable children using the
4825 -- order line and finally get the item instances.
4826 --
4827 IF p_source_line_rec.item_type_code = 'KIT' AND
4828 l_bom_std_item_rec.instance_id IS NOT NULL AND -- Ensure that KIT Qty = 1
4829 l_bom_std_item_rec.instance_id <> FND_API.G_MISS_NUM THEN
4830 csi_order_fulfill_pub.get_ib_trackable_children
4831 ( p_current_line_id => p_source_line_rec.source_line_id,
4832 p_om_vld_org_id => om_vld_org_id,
4833 x_trackable_line_tbl => l_child_line_tbl,
4834 x_return_status => l_return_status);
4835
4836 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4837 debug('Failed csi_order_fulfill_pub.get_ib_trackable_children');
4838 RAISE fnd_api.g_exc_error;
4839 END IF;
4840 END IF;
4841 --
4842 IF l_child_line_tbl.count > 0 THEN
4843 FOR l_ind in l_child_line_tbl.FIRST..l_child_line_tbl.LAST LOOP
4844 -- check if instance exists
4845 l_inst_query_rec.inventory_item_id := l_child_line_tbl(l_ind).inventory_item_id;
4846 l_inst_query_rec.last_oe_order_line_id := l_child_line_tbl(l_ind).line_id;
4847
4848 debug('query criteria for get_item_instances:');
4849 debug(' item id : '||l_inst_query_rec.inventory_item_id);
4850 debug(' line id : '||l_inst_query_rec.last_oe_order_line_id);
4851
4852 csi_t_gen_utility_pvt.dump_api_info(
4853 p_api_name => 'get_item_instances',
4854 p_pkg_name => 'csi_item_instance_pub');
4855
4856 csi_item_instance_pub.get_item_instances(
4857 p_api_version => 1.0,
4858 p_commit => fnd_api.g_false,
4859 p_init_msg_list => fnd_api.g_true,
4860 p_validation_level => fnd_api.g_valid_level_full,
4861 p_instance_query_rec => l_inst_query_rec,
4862 p_party_query_rec => l_party_query_rec,
4863 p_account_query_rec => l_pty_acct_query_rec,
4864 p_transaction_id => null,
4865 p_resolve_id_columns => fnd_api.g_false,
4866 /* Modified the next line for bug 4865052*/
4867 p_active_instance_only => fnd_api.g_false,
4868 x_instance_header_tbl => l_instance_hdr_tbl,
4869 x_return_status => l_return_status,
4870 x_msg_count => l_msg_count,
4871 x_msg_data => l_msg_data);
4872
4873 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4874 RAISE fnd_api.g_exc_error;
4875 END IF;
4876 --
4877 IF l_instance_hdr_tbl.count > 0 THEN
4878 FOR inst_hdr IN l_instance_hdr_tbl.FIRST .. l_instance_hdr_tbl.LAST LOOP
4879 IF l_instance_hdr_tbl.EXISTS(inst_hdr) THEN
4880 l_rel_ctr := l_c_ii_rltns_tbl.COUNT + 1;
4881 l_c_ii_rltns_tbl(l_rel_ctr).subject_id := l_instance_hdr_tbl(inst_hdr).instance_id;
4882 l_c_ii_rltns_tbl(l_rel_ctr).object_id := l_bom_std_item_rec.instance_id;
4883 l_c_ii_rltns_tbl(l_rel_ctr).relationship_type_code := 'COMPONENT-OF';
4884 END IF;
4885 END LOOP;
4886 END IF;
4887 END LOOP;
4888 END IF; -- l_child_line_tbl.count check
4889 --
4890 IF l_c_ii_rltns_tbl.COUNT > 0 THEN
4891
4892 record_time('Start');
4893 csi_t_gen_utility_pvt.dump_api_info(
4894 p_pkg_name => 'csi_ii_relationships_pub',
4895 p_api_name => 'create_relationship');
4896
4897 -- create relationship
4898 csi_ii_relationships_pub.create_relationship(
4899 p_api_version => 1.0,
4900 p_commit => fnd_api.g_false,
4901 p_init_msg_list => fnd_api.g_true,
4902 p_validation_level => fnd_api.g_valid_level_full,
4903 p_relationship_tbl => l_c_ii_rltns_tbl,
4904 p_txn_rec => l_csi_txn_rec,
4905 x_return_status => l_return_status,
4906 x_msg_count => l_msg_count,
4907 x_msg_data => l_msg_data);
4908
4909 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4910 RAISE fnd_api.g_exc_error;
4911 END IF;
4912 record_time('End');
4913
4914 FOR l_ind IN l_c_ii_rltns_tbl.FIRST .. l_c_ii_rltns_tbl.LAST
4915 LOOP
4916
4917 debug(' '||l_c_ii_rltns_tbl(l_ind).subject_id ||' '||
4918 l_c_ii_rltns_tbl(l_ind).relationship_type_code||' '||
4919 l_c_ii_rltns_tbl(l_ind).object_id);
4920
4921 IF l_c_ii_rltns_tbl(l_ind).relationship_type_code
4922 IN ('REPLACED-BY', 'REPLACEMENT-FOR', 'UPGRADED-FROM') THEN
4923 -- make call to swap the contracts
4924 null;
4925 END IF;
4926
4927 END LOOP;
4928 END IF; -- l_c_ii_rltns_tbl.count check
4929
4930 -- switch the processing status in transaction detail to PROCESSED
4931 update_td_status(
4932 p_txn_line_rec => px_txn_line_rec,
4933 p_txn_line_dtl_tbl => px_txn_line_dtl_tbl,
4934 p_processing_status => 'PROCESSED',
4935 x_return_status => l_return_status);
4936
4937 IF l_return_status <> fnd_api.g_ret_sts_success THEN
4938 RAISE fnd_api.g_exc_error;
4939 END IF;
4940
4941 debug('Transaction details interfaced to IB successfully.');
4942
4943 EXCEPTION
4944
4945 WHEN fnd_api.g_exc_error THEN
4946 x_return_status := fnd_api.g_ret_sts_error ;
4947 x_return_message := csi_t_gen_utility_pvt.dump_error_stack;
4948 debug('Error in Interface_IB: '||x_return_message);
4949 WHEN others THEN
4950
4951 fnd_message.set_name('FND', 'FND_GENERIC_MESSAGE');
4952 fnd_message.set_token('MESSAGE', substr(sqlerrm, 1, 240));
4953 fnd_msg_pub.add;
4954
4955 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4956 x_return_message := csi_t_gen_utility_pvt.dump_error_stack;
4957 debug('Error in Interface_IB: '||x_return_message);
4958
4959 END interface_ib;
4960
4961 --
4962 --
4963 --
4964 FUNCTION check_MACD_processing(
4965 p_config_session_key IN csi_utility_grp.config_session_key,
4966 x_return_status OUT NOCOPY varchar2)
4967 RETURN boolean
4968 IS
4969
4970 l_td_found varchar2(1) := 'N';
4971 l_configurator_enabled varchar2(80) := null;
4972 l_mdl_instantiation_type varchar2(1);
4973
4974 l_MACD_processing boolean := TRUE;
4975
4976 BEGIN
4977
4978 x_return_status := fnd_api.g_ret_sts_success;
4979
4980 IF p_config_session_key.session_hdr_id is not null
4981 AND
4982 p_config_session_key.session_rev_num is not null
4983 AND
4984 p_config_session_key.session_item_id is not null
4985 THEN
4986
4987 l_configurator_enabled := fnd_profile.value('CSI_CONFIGURATOR_ENABLED');
4988
4989 -- check for config txn details
4990 BEGIN
4991 SELECT 'Y' INTO l_td_found
4992 FROM csi_t_transaction_lines
4993 WHERE source_transaction_table = 'CONFIGURATOR'
4994 AND config_session_hdr_id = p_config_session_key.session_hdr_id
4995 AND config_session_rev_num = p_config_session_key.session_rev_num
4996 AND config_session_item_id = p_config_session_key.session_item_id;
4997 EXCEPTION
4998 WHEN no_data_found THEN
4999 l_td_found := 'N';
5000 END;
5001
5002
5003 IF l_td_found = 'Y' THEN
5004 -- check for the profile CSI_CONFIGURATOR_ENABLED
5005 IF l_configurator_enabled = 'NETWORK' THEN
5006
5007 -- make sure the item is network model otherwise do the
5008 SELECT model_instantiation_type
5009 INTO l_mdl_instantiation_type
5010 FROM cz_config_items_v
5011 WHERE config_hdr_id = p_config_session_key.session_hdr_id
5012 AND config_rev_nbr = p_config_session_key.session_rev_num
5013 AND config_item_id = p_config_session_key.session_item_id;
5014
5015 IF l_mdl_instantiation_type <> 'N' THEN
5016 -- regular processing
5017 l_MACD_processing := FALSE;
5018 END IF;
5019 ELSIF l_configurator_enabled = 'ALWAYS' THEN
5020 null;
5021 ELSIF nvl(l_configurator_enabled, 'NEVER') = 'NEVER' THEN
5022 l_MACD_processing := FALSE;
5023 END IF;
5024
5025 ELSE
5026 l_MACD_processing := FALSE;
5027 END IF;
5028
5029 ELSE
5030 l_MACD_processing := FALSE;
5031 END IF;
5032
5033 RETURN l_MACD_processing;
5034
5035 EXCEPTION
5036 WHEN fnd_api.g_exc_error THEN
5037 x_return_status := fnd_api.g_ret_sts_error;
5038 END check_MACD_processing;
5039
5040 --
5041 --
5042 --
5043 /* This function specifies whether the instance qualifies for BOM Explosion or not */
5044
5045 FUNCTION check_standard_bom_pc(
5046 p_instance_id IN NUMBER,
5047 p_std_item_rec IN csi_datastructures_pub.instance_rec,
5048 p_bom_item_type IN NUMBER)
5049 RETURN boolean
5050 IS
5051
5052 l_bom_found VARCHAR2(1);
5053 l_explode_flag VARCHAR2(1);
5054 l_found_child VARCHAR2(1);
5055 no_explosion EXCEPTION;
5056
5057 BEGIN
5058
5059 debug('check_standard_bom for Project Contracts');
5060
5061 /* look at the explode_yes_no profile AND go FROM there */
5062
5063 l_explode_flag := nvl(fnd_profile.value('CSI_EXPLODE_BOM'),'N');
5064 debug('Explode BOM Profile Option :'||l_explode_flag);
5065
5066 IF l_explode_flag <> 'Y' THEN
5067 debug('Explode BOM Profile option is not set. ');
5068 RAISE no_explosion;
5069 END IF;
5070
5071 /* check if this item is a standard item */
5072
5073 IF p_bom_item_type <> 4 THEN
5074 debug('This inventory item is not a STANDARD item, so no explosion');
5075 RAISE no_explosion;
5076 END IF;
5077
5078 /* check if BOM exists */
5079
5080 BEGIN
5081 SELECT 'Y'
5082 INTO l_bom_found
5083 FROM bom_bill_of_materials
5084 WHERE assembly_item_id = p_std_item_rec.inventory_item_id
5085 AND organization_id = p_std_item_rec.vld_organization_id
5086 AND alternate_bom_designator is NULL; -- added for bug 2443204. Checking only primary bom when multiple could have been defined.
5087
5088 EXCEPTION
5089 WHEN no_data_found THEN
5090 debug('BOM not found. So, no explosion');
5091 RAISE no_explosion;
5092 END;
5093
5094 /* logic to check if this instance already has any children */
5095
5096 BEGIN
5097 SELECT 'Y'
5098 INTO l_found_child
5099 FROM csi_ii_relationships
5100 WHERE object_id = p_instance_id
5101 AND relationship_type_code = 'COMPONENT-OF';
5102
5103 debug(' This instance already has a child with COMPONENT-OF relation.');
5104 RAISE no_explosion;
5105
5106 EXCEPTION
5107 WHEN no_data_found THEN
5108 l_found_child := 'N';
5109 WHEN others THEN
5110 debug(' This instance already has children with COMPONENT-OF relation.');
5111 RAISE no_explosion;
5112 END;
5113
5114 RETURN TRUE;
5115
5116 EXCEPTION
5117 WHEN no_explosion THEN
5118 RETURN FALSE;
5119 WHEN fnd_api.g_exc_error THEN
5120 RETURN FALSE;
5121
5122 END check_standard_bom_pc;
5123
5124
5125 PROCEDURE get_mtl_txn_tbl(
5126 p_mtl_txn_id IN number,
5127 x_mtl_txn_tbl OUT NOCOPY mtl_txn_tbl,
5128 x_return_status OUT NOCOPY varchar2)
5129 IS
5130
5131 l_mtl_rec mtl_txn_rec;
5132 l_mtl_tbl mtl_txn_tbl;
5133
5134 CURSOR mtl_txn_cur(p_txn_id IN NUMBER) IS
5135 SELECT mmt.trx_source_line_id trx_source_line_id,
5136 mmt.inventory_item_id inventory_item_id,
5137 mmt.organization_id organization_id,
5138 mmt.revision revision,
5139 mmt.subinventory_code subinventory_code,
5140 mmt.locator_id locator_id,
5141 null lot_number,
5142 mut.serial_number serial_number,
5143 abs(mmt.transaction_quantity) transaction_quantity,
5144 mmt.transaction_uom transaction_uom,
5145 mmt.transaction_date transaction_date,
5146 msi.lot_control_code lot_control_code,
5147 msi.serial_number_control_code serial_control_code,
5148 msi.primary_uom_code primary_uom,
5149 abs(mmt.primary_quantity) primary_quantity,
5150 mmt.transaction_type_id transaction_type_id,
5151 mmt.transaction_action_id transaction_action_id
5152 FROM mtl_system_items msi,
5153 mtl_unit_transactions mut,
5154 mtl_material_transactions mmt
5155 WHERE mmt.transaction_id = p_txn_id
5156 AND mmt.transaction_id = mut.transaction_id(+)
5157 AND msi.organization_id = mmt.organization_id
5158 AND msi.inventory_item_id = mmt.inventory_item_id
5159 AND msi.lot_control_code = 1 -- no lot case
5160 UNION
5161 SELECT mmt.trx_source_line_id trx_source_line_id,
5162 mmt.inventory_item_id inventory_item_id,
5163 mmt.organization_id organization_id,
5164 mmt.revision revision,
5165 mmt.subinventory_code subinventory_code,
5166 mmt.locator_id locator_id,
5167 mtln.lot_number lot_number,
5168 mut.serial_number serial_number,
5169 abs(mtln.transaction_quantity) transaction_quantity,
5170 mmt.transaction_uom transaction_uom,
5171 mmt.transaction_date transaction_date,
5172 msi.lot_control_code lot_control_code,
5173 msi.serial_number_control_code serial_control_code,
5174 msi.primary_uom_code primary_uom,
5175 abs(mtln.primary_quantity) primary_quantity,
5176 mmt.transaction_type_id transaction_type_id,
5177 mmt.transaction_action_id transaction_action_id
5178 FROM mtl_system_items msi,
5179 mtl_unit_transactions mut,
5180 mtl_transaction_lot_numbers mtln,
5181 mtl_material_transactions mmt
5182 WHERE mmt.transaction_id = p_txn_id
5183 AND mmt.transaction_id = mtln.transaction_id(+)
5184 AND mtln.serial_transaction_id = mut.transaction_id(+)
5185 AND msi.organization_id = mmt.organization_id
5186 AND msi.inventory_item_id = mmt.inventory_item_id
5187 AND msi.lot_control_code = 2; -- lot control case
5188 BEGIN
5189
5190 x_return_status := fnd_api.g_ret_sts_success;
5191
5192 FOR mtl_txn_rec IN mtl_txn_cur(p_mtl_txn_id)
5193 LOOP
5194
5195 l_mtl_rec.trx_source_line_id := mtl_txn_rec.trx_source_line_id;
5196 l_mtl_rec.inventory_item_id := mtl_txn_rec.inventory_item_id;
5197 l_mtl_rec.organization_id := mtl_txn_rec.organization_id;
5198 l_mtl_rec.revision := nvl(mtl_txn_rec.revision,fnd_api.g_miss_char);
5199 l_mtl_rec.subinventory_code := mtl_txn_rec.subinventory_code;
5200 l_mtl_rec.locator_id := mtl_txn_rec.locator_id;
5201 l_mtl_rec.lot_number := nvl(mtl_txn_rec.lot_number,fnd_api.g_miss_char);
5202 l_mtl_rec.serial_number := nvl(mtl_txn_rec.serial_number,fnd_api.g_miss_char);
5203 l_mtl_rec.transaction_quantity := mtl_txn_rec.transaction_quantity;
5204 l_mtl_rec.transaction_uom := mtl_txn_rec.transaction_uom;
5205 l_mtl_rec.transaction_date := mtl_txn_rec.transaction_date;
5206 l_mtl_rec.lot_control_code := mtl_txn_rec.lot_control_code;
5207 l_mtl_rec.serial_control_code := mtl_txn_rec.serial_control_code;
5208 l_mtl_rec.primary_uom := mtl_txn_rec.primary_uom;
5209 l_mtl_rec.primary_quantity := mtl_txn_rec.primary_quantity;
5210 l_mtl_rec.transaction_type_id := mtl_txn_rec.transaction_type_id;
5211 l_mtl_rec.transaction_action_id := mtl_txn_rec.transaction_action_id;
5212
5213 l_mtl_tbl(mtl_txn_cur%rowcount) := l_mtl_rec;
5214
5215 END LOOP;
5216
5217 x_mtl_txn_tbl := l_mtl_tbl;
5218
5219 EXCEPTION
5220 WHEN fnd_api.g_exc_error THEN
5221 x_return_status := fnd_api.g_ret_sts_error;
5222 END get_mtl_txn_tbl;
5223
5224 PROCEDURE get_inventory_instances(
5225 p_item_attrib_rec IN item_attributes_rec,
5226 px_mtl_txn_tbl IN OUT NOCOPY mtl_txn_tbl,
5227 x_return_status OUT NOCOPY varchar2)
5228 IS
5229
5230 l_mtl_tbl mtl_txn_tbl;
5231
5232 l_inst_query_rec csi_datastructures_pub.instance_query_rec;
5233 l_party_query_rec csi_datastructures_pub.party_query_rec;
5234 l_pty_acct_query_rec csi_datastructures_pub.party_account_query_rec;
5235 l_inst_hdr_tbl csi_datastructures_pub.instance_header_tbl;
5236
5237 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
5238 l_msg_count number;
5239 l_msg_data varchar2(2000);
5240
5241 BEGIN
5242
5243 x_return_status := fnd_api.g_ret_sts_success;
5244
5245 api_log('get_inventory_instances');
5246
5247 l_mtl_tbl := px_mtl_txn_tbl;
5248
5249 IF l_mtl_tbl.COUNT > 0 THEN
5250 FOR l_ind IN l_mtl_tbl.FIRST .. l_mtl_tbl.LAST
5251 LOOP
5252
5253 l_inst_query_rec.location_type_code := 'INVENTORY';
5254 l_inst_query_rec.instance_usage_code := 'IN_INVENTORY';
5255
5256 l_inst_query_rec.inventory_item_id := l_mtl_tbl(l_ind).inventory_item_id;
5257 l_inst_query_rec.inv_organization_id := l_mtl_tbl(l_ind).organization_id;
5258 l_inst_query_rec.inv_subinventory_name := l_mtl_tbl(l_ind).subinventory_code;
5259 l_inst_query_rec.inv_locator_id := l_mtl_tbl(l_ind).locator_id;
5260 l_inst_query_rec.serial_number := l_mtl_tbl(l_ind).serial_number;
5261 l_inst_query_rec.lot_number := l_mtl_tbl(l_ind).lot_number;
5262
5263 IF p_item_attrib_rec.serial_control_code = 6 THEN
5264
5265 l_inst_query_rec.serial_number := null;
5266
5267 IF l_ind > 1 THEN
5268
5269 l_mtl_tbl(l_ind).instance_id := l_mtl_tbl(1).instance_id;
5270 l_mtl_tbl(l_ind).object_version_num := l_mtl_tbl(1).object_version_num;
5271 l_mtl_tbl(l_ind).negative_instance_flag := l_mtl_tbl(1).negative_instance_flag;
5272
5273 goto skip_gii;
5274 END IF;
5275
5276 END IF;
5277
5278 csi_t_gen_utility_pvt.dump_instance_query_rec(
5279 p_instance_query_rec => l_inst_query_rec);
5280
5281 csi_t_gen_utility_pvt.dump_api_info(
5282 p_pkg_name => 'csi_item_instance_pub',
5283 p_api_name => 'get_item_instances');
5284
5285 csi_item_instance_pub.get_item_instances(
5286 p_api_version => 1.0,
5287 p_commit => fnd_api.g_false,
5288 p_init_msg_list => fnd_api.g_true,
5289 p_validation_level => fnd_api.g_valid_level_full,
5290 p_instance_query_rec => l_inst_query_rec,
5291 p_party_query_rec => l_party_query_rec,
5292 p_account_query_rec => l_pty_acct_query_rec,
5293 p_transaction_id => null,
5294 p_resolve_id_columns => fnd_api.g_false,
5295 p_active_instance_only => fnd_api.g_false,
5296 x_instance_header_tbl => l_inst_hdr_tbl,
5297 x_return_status => l_return_status,
5298 x_msg_count => l_msg_count,
5299 x_msg_data => l_msg_data);
5300
5301 IF l_return_status <> fnd_api.g_ret_sts_success THEN
5302 RAISE fnd_api.g_exc_error;
5303 END IF;
5304
5305 IF l_inst_hdr_tbl.count = 0 THEN
5306
5307 IF p_item_attrib_rec.serial_control_code IN (1, 6)
5308 AND
5309 p_item_attrib_rec.negative_balances_code = 1
5310 THEN
5311 debug('non serial and negative balances allowed.');
5312 l_mtl_tbl(l_ind).negative_instance_flag := 'Y';
5313 l_mtl_tbl(l_ind).instance_id := null;
5314 l_mtl_tbl(l_ind).object_version_num := null;
5315 ELSE
5316 fnd_message.set_name('CSI','CSI_INT_INV_INST_NOT_FOUND');
5317 fnd_message.set_token('INV_ITEM_ID',l_mtl_tbl(l_ind).inventory_item_id);
5318 fnd_message.set_token('INV_ORG_ID', l_mtl_tbl(l_ind).organization_id);
5319 fnd_message.set_token('SUBINV', l_mtl_tbl(l_ind).subinventory_code);
5320 fnd_message.set_token('LOCATOR', l_mtl_tbl(l_ind).locator_id);
5321 fnd_msg_pub.add;
5322 RAISE fnd_api.g_exc_error;
5323 END IF;
5324 ELSE
5325 IF l_inst_hdr_tbl.count = 1 THEN
5326 l_mtl_tbl(l_ind).instance_id := l_inst_hdr_tbl(1).instance_id;
5327 l_mtl_tbl(l_ind).object_version_num := l_inst_hdr_tbl(1).object_version_number;
5328 debug(' instance_id : '||l_mtl_tbl(l_ind).instance_id);
5329 debug(' instance_ovn : '||l_mtl_tbl(l_ind).object_version_num);
5330 ELSE
5331 fnd_message.set_name('CSI','CSI_TXN_MULT_INST_FOUND');
5332 fnd_message.set_token('INV_ITEM_ID',l_mtl_tbl(l_ind).inventory_item_id);
5333 fnd_message.set_token('INV_ORG_ID', l_mtl_tbl(l_ind).organization_id);
5334 fnd_message.set_token('SUBINV', l_mtl_tbl(l_ind).subinventory_code);
5335 fnd_message.set_token('LOCATOR', l_mtl_tbl(l_ind).locator_id);
5336 fnd_msg_pub.add;
5337 RAISE fnd_api.g_exc_error;
5338 END IF;
5339 END IF;
5340
5341 <<skip_gii>>
5342 null;
5343
5344 END LOOP;
5345 END IF;
5346
5347 px_mtl_txn_tbl := l_mtl_tbl;
5348
5349 EXCEPTION
5350 WHEN fnd_api.g_exc_error THEN
5351 x_return_status := fnd_api.g_ret_sts_error;
5352 END get_inventory_instances;
5353
5354 PROCEDURE pre_process_mtl_txn_tbl(
5355 p_item_attrib_rec IN item_attributes_rec,
5356 px_mtl_txn_tbl IN OUT NOCOPY mtl_txn_tbl,
5357 x_return_status OUT NOCOPY varchar2)
5358 IS
5359 l_src_serial_flag varchar2(1);
5360 l_dest_serial_flag varchar2(1);
5361 l_create_update_flag varchar2(1);
5362 BEGIN
5363
5364 x_return_status := fnd_api.g_ret_sts_success;
5365 api_log('pre_process_mtl_txn_tbl');
5366
5367 IF p_item_attrib_rec.serial_control_code in (2,5) THEN
5368 l_src_serial_flag := 'Y';
5369 l_dest_serial_flag := 'Y';
5370 ELSE
5371 l_src_serial_flag := 'N';
5372 IF p_item_attrib_rec.serial_control_code = 6 THEN
5373 l_dest_serial_flag := 'Y';
5374 ELSE
5375 l_dest_serial_flag := 'N';
5376 END IF;
5377 END IF;
5378
5379 IF l_src_serial_flag = 'Y' AND l_dest_serial_flag = 'Y' THEN
5380 l_create_update_flag := 'U';
5381 ELSE
5382 l_create_update_flag := 'C';
5383 END IF;
5384
5385 IF px_mtl_txn_tbl.count > 0 THEN
5386 FOR l_ind IN px_mtl_txn_tbl.FIRST .. px_mtl_txn_tbl.LAST
5387 LOOP
5388 px_mtl_txn_tbl(l_ind).src_serial_flag := l_src_serial_flag;
5389 px_mtl_txn_tbl(l_ind).dest_serial_flag := l_dest_serial_flag;
5390 px_mtl_txn_tbl(l_ind).create_update_flag := l_create_update_flag;
5391 END LOOP;
5392 END IF;
5393
5394 EXCEPTION
5395 WHEN fnd_api.g_exc_error THEN
5396 x_return_status := fnd_api.g_ret_sts_error;
5397 END pre_process_mtl_txn_tbl;
5398
5399
5400 PROCEDURE get_dflt_inv_location(
5401 p_subinventory_code IN varchar2,
5402 p_organization_id IN number,
5403 x_location_id OUT NOCOPY number,
5404 x_return_status OUT NOCOPY varchar2)
5405 IS
5406 l_location_id number;
5407 BEGIN
5408
5409 BEGIN
5410 SELECT location_id
5411 INTO l_location_id
5412 FROM mtl_secondary_inventories
5413 WHERE organization_id = p_organization_id
5414 AND secondary_inventory_name = p_subinventory_code;
5415 EXCEPTION
5416 WHEN no_data_found THEN
5417 fnd_message.set_name('CSI','CSI_INT_DEST_SUBINV_INVALID');
5418 fnd_message.set_token('INV_ORG_ID',p_organization_id);
5419 fnd_message.set_token('SUBINV_ID',p_subinventory_code);
5420 fnd_msg_pub.add;
5421 RAISE fnd_api.g_exc_error;
5422 END;
5423
5424 IF l_location_id is null THEN
5425 BEGIN
5426 SELECT location_id
5427 INTO l_location_id
5428 FROM hr_organization_units
5429 WHERE organization_id = p_organization_id;
5430 EXCEPTION
5431 WHEN no_data_found THEN
5432 fnd_message.set_name('CSI','CSI_INT_DEST_ORG_ID_INVALID');
5433 fnd_message.set_token('INV_ORG_ID',p_organization_id);
5434 fnd_msg_pub.add;
5435 RAISE fnd_api.g_exc_error;
5436 END;
5437 END IF;
5438
5439 x_location_id := l_location_id;
5440
5441 EXCEPTION
5442 WHEN fnd_api.g_exc_error THEN
5443 x_return_status := fnd_api.g_ret_sts_error;
5444 END get_dflt_inv_location;
5445
5446 PROCEDURE create_inv_negative_instance(
5447 px_mtl_txn_rec IN OUT NOCOPY mtl_txn_rec,
5448 p_quantity IN number,
5449 px_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
5450 x_return_status OUT NOCOPY varchar2)
5451 IS
5452 l_instance_rec csi_datastructures_pub.instance_rec;
5453 l_parties_tbl csi_datastructures_pub.party_tbl;
5454 l_pty_accts_tbl csi_datastructures_pub.party_account_tbl;
5455 l_org_units_tbl csi_datastructures_pub.organization_units_tbl;
5456 l_ea_values_tbl csi_datastructures_pub.extend_attrib_values_tbl;
5457 l_pricing_tbl csi_datastructures_pub.pricing_attribs_tbl;
5458 l_assets_tbl csi_datastructures_pub.instance_asset_tbl;
5459
5460 l_internal_party_id number;
5461
5462 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
5463 l_msg_count number;
5464 l_msg_data varchar2(2000);
5465
5466 BEGIN
5467
5468 x_return_status := fnd_api.g_ret_sts_success;
5469
5470 api_log('create_inv_negative_instance');
5471
5472 l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
5473
5474 l_instance_rec.inventory_item_id := px_mtl_txn_rec.inventory_item_id;
5475 l_instance_rec.inventory_revision := px_mtl_txn_rec.revision;
5476 l_instance_rec.inv_subinventory_name := px_mtl_txn_rec.subinventory_code;
5477 -- this is always a non serial instance
5478 l_instance_rec.serial_number := fnd_api.g_miss_char;
5479 l_instance_rec.lot_number := px_mtl_txn_rec.lot_number;
5480 l_instance_rec.quantity := p_quantity;
5481 l_instance_rec.active_start_date := sysdate;
5482 l_instance_rec.active_end_date := null;
5483 l_instance_rec.unit_of_measure := px_mtl_txn_rec.primary_uom;
5484 l_instance_rec.location_type_code := 'INVENTORY';
5485 get_dflt_inv_location(
5486 p_subinventory_code => px_mtl_txn_rec.subinventory_code,
5487 p_organization_id => px_mtl_txn_rec.organization_id,
5488 x_location_id => l_instance_rec.location_id,
5489 x_return_status => l_return_status);
5490 l_instance_rec.instance_usage_code := 'IN_INVENTORY';
5491 l_instance_rec.inv_organization_id := px_mtl_txn_rec.organization_id;
5492 l_instance_rec.vld_organization_id := px_mtl_txn_rec.organization_id;
5493 l_instance_rec.inv_locator_id := px_mtl_txn_rec.locator_id;
5494 l_instance_rec.customer_view_flag := 'N';
5495 l_instance_rec.merchant_view_flag := 'Y';
5496 l_instance_rec.object_version_number := 1;
5497
5498 l_parties_tbl(1).party_source_table := 'HZ_PARTIES';
5499 l_parties_tbl(1).party_id := l_internal_party_id;
5500 l_parties_tbl(1).relationship_type_code:= 'OWNER';
5501 l_parties_tbl(1).contact_flag := 'N';
5502
5503 csi_t_gen_utility_pvt.dump_csi_instance_rec(l_instance_rec);
5504
5505 csi_t_gen_utility_pvt.dump_api_info(
5506 p_pkg_name => 'csi_item_instance_pub',
5507 p_api_name => 'create_item_instance');
5508
5509 -- creation of negative quantity inventory instance
5510 csi_item_instance_pub.create_item_instance(
5511 p_api_version => 1.0,
5512 p_commit => fnd_api.g_false,
5513 p_init_msg_list => fnd_api.g_true,
5514 p_validation_level => fnd_api.g_valid_level_full,
5515 p_instance_rec => l_instance_rec,
5516 p_party_tbl => l_parties_tbl,
5517 p_account_tbl => l_pty_accts_tbl,
5518 p_org_assignments_tbl => l_org_units_tbl,
5519 p_ext_attrib_values_tbl => l_ea_values_tbl,
5520 p_pricing_attrib_tbl => l_pricing_tbl,
5521 p_asset_assignment_tbl => l_assets_tbl,
5522 p_txn_rec => px_txn_rec,
5523 x_return_status => l_return_status,
5524 x_msg_count => l_msg_count,
5525 x_msg_data => l_msg_data );
5526
5527 IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
5528 raise fnd_api.g_exc_error;
5529 END IF;
5530
5531 px_mtl_txn_rec.instance_id := l_instance_rec.instance_id;
5532 px_mtl_txn_rec.object_version_num := l_instance_rec.object_version_number;
5533
5534 EXCEPTION
5535 WHEN fnd_api.g_exc_error THEN
5536 x_return_status := fnd_api.g_ret_sts_error;
5537 END create_inv_negative_instance;
5538
5539
5540 PROCEDURE decrement_inventory_instnace(
5541 p_instance_id IN number,
5542 p_quantity IN number,
5543 px_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
5544 x_return_status OUT NOCOPY varchar2)
5545 IS
5546
5547 l_instance_rec csi_datastructures_pub.instance_rec;
5548 l_party_tbl csi_datastructures_pub.party_tbl;
5549 l_party_acct_tbl csi_datastructures_pub.party_account_tbl;
5550 l_inst_asset_tbl csi_datastructures_pub.instance_asset_tbl;
5551 l_ext_attrib_val_tbl csi_datastructures_pub.extend_attrib_values_tbl;
5552 l_pricing_attribs_tbl csi_datastructures_pub.pricing_attribs_tbl;
5553 l_org_units_tbl csi_datastructures_pub.organization_units_tbl;
5554 l_inst_id_lst csi_datastructures_pub.id_tbl;
5555
5556 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
5557 l_msg_count number;
5558 l_msg_data varchar2(2000);
5559
5560 BEGIN
5561
5562 x_return_status := fnd_api.g_ret_sts_success;
5563
5564 api_log('decrement_inventory_instnace');
5565
5566 l_instance_rec.instance_id := p_instance_id;
5567
5568 /*Code modified/added START for bug 4865052*/
5569
5570 SELECT object_version_number,
5571 quantity - p_quantity,
5572 active_end_date
5573 INTO l_instance_rec.object_version_number,
5574 l_instance_rec.quantity,
5575 l_instance_rec.active_end_date
5576 FROM csi_item_instances
5577 WHERE instance_id = l_instance_rec.instance_id;
5578
5579 IF l_instance_rec.active_end_date is not null THEN
5580 l_instance_rec.active_end_date := null;
5581 BEGIN
5582 SELECT instance_status_id
5583 INTO l_instance_rec.instance_status_id
5584 FROM csi_instance_statuses
5585 WHERE name = fnd_profile.value('csi_default_instance_status');
5586 EXCEPTION
5587 WHEN no_data_found THEN
5588 l_instance_rec.instance_status_id := 510;
5589 END;
5590 END IF;
5591 /*Code modified/added END for bug 4865052*/
5592
5593 csi_t_gen_utility_pvt.dump_csi_instance_rec(
5594 p_csi_instance_rec => l_instance_rec);
5595
5596 record_time('Start');
5597
5598 csi_t_gen_utility_pvt.dump_api_info(
5599 p_api_name => 'update_item_instance',
5600 p_pkg_name => 'csi_item_instance_pub');
5601
5602 /* decrement the inventory source instance */
5603 csi_item_instance_pub.update_item_instance(
5604 p_api_version => 1.0,
5605 p_commit => fnd_api.g_false,
5606 p_init_msg_list => fnd_api.g_true,
5607 p_validation_level => fnd_api.g_valid_level_full,
5608 p_instance_rec => l_instance_rec,
5609 p_ext_attrib_values_tbl => l_ext_attrib_val_tbl,
5610 p_party_tbl => l_party_tbl,
5611 p_account_tbl => l_party_acct_tbl,
5612 p_pricing_attrib_tbl => l_pricing_attribs_tbl,
5613 p_org_assignments_tbl => l_org_units_tbl,
5614 p_txn_rec => px_txn_rec,
5615 p_asset_assignment_tbl => l_inst_asset_tbl,
5616 x_instance_id_lst => l_inst_id_lst,
5617 x_return_status => l_return_status,
5618 x_msg_count => l_msg_count,
5619 x_msg_data => l_msg_data);
5620
5621 -- For Bug 4057183
5622 -- IF l_return_status <> fnd_api.g_ret_sts_success THEN
5623 IF l_return_status not in (fnd_api.g_ret_sts_success,'W') THEN
5624 raise fnd_api.g_exc_error;
5625 END IF;
5626
5627 record_time('End');
5628
5629 EXCEPTION
5630 WHEN fnd_api.g_exc_error THEN
5631 x_return_status := fnd_api.g_ret_sts_error;
5632 END decrement_inventory_instnace;
5633
5634 PROCEDURE decrement_inventory_instances(
5635 p_item_attrib_rec IN item_attributes_rec,
5636 p_mtl_txn_tbl IN OUT NOCOPY mtl_txn_tbl,
5637 px_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
5638 x_return_status OUT NOCOPY varchar2)
5639 IS
5640 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
5641 BEGIN
5642 x_return_status := fnd_api.g_ret_sts_success;
5643 api_log('decrement_inventory_instances');
5644
5645 IF p_mtl_txn_tbl.count > 0 THEN
5646
5647 IF p_item_attrib_rec.serial_control_code = 6 THEN
5648
5649 IF nvl(p_mtl_txn_tbl(1).instance_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
5650 decrement_inventory_instnace(
5651 p_instance_id => p_mtl_txn_tbl(1).instance_id,
5652 p_quantity => px_txn_rec.transaction_quantity,
5653 px_txn_rec => px_txn_rec,
5654 x_return_status => l_return_status);
5655 IF l_return_status <> fnd_api.g_ret_sts_success THEN
5656 raise fnd_api.g_exc_error;
5657 END IF;
5658 ELSE
5659 IF p_mtl_txn_tbl(1).negative_instance_flag = 'Y' THEN
5660
5661 create_inv_negative_instance(
5662 px_mtl_txn_rec => p_mtl_txn_tbl(1),
5663 p_quantity => (-1)*(px_txn_rec.transaction_quantity),
5664 px_txn_rec => px_txn_rec,
5665 x_return_status => l_return_status);
5666
5667 IF l_return_status <> fnd_api.g_ret_sts_success THEN
5668 RAISE fnd_api.g_exc_error;
5669 END IF;
5670
5671 END IF;
5672 END IF;
5673
5674 ELSE
5675 FOR l_ind IN p_mtl_txn_tbl.FIRST .. p_mtl_txn_tbl.LAST
5676 LOOP
5677 IF p_mtl_txn_tbl(l_ind).create_update_flag = 'C' THEN
5678
5679 IF nvl(p_mtl_txn_tbl(l_ind).instance_id, fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
5680 decrement_inventory_instnace(
5681 p_instance_id => p_mtl_txn_tbl(l_ind).instance_id,
5682 p_quantity => p_mtl_txn_tbl(l_ind).primary_quantity,
5683 px_txn_rec => px_txn_rec,
5684 x_return_status => l_return_status);
5685
5686 IF l_return_status <> fnd_api.g_ret_sts_success THEN
5687 RAISE fnd_api.g_exc_error;
5688 END IF;
5689 ELSE
5690 IF p_mtl_txn_tbl(1).negative_instance_flag = 'Y' THEN
5691
5692 create_inv_negative_instance(
5693 px_mtl_txn_rec => p_mtl_txn_tbl(l_ind),
5694 p_quantity => (-1)*(p_mtl_txn_tbl(l_ind).primary_quantity),
5695 px_txn_rec => px_txn_rec,
5696 x_return_status => l_return_status);
5697
5698 IF l_return_status <> fnd_api.g_ret_sts_success THEN
5699 RAISE fnd_api.g_exc_error;
5700 END IF;
5701
5702 END IF;
5703 END IF;
5704
5705 END IF;
5706 END LOOP;
5707 END IF;
5708 END IF;
5709
5710 EXCEPTION
5711 WHEN fnd_api.g_exc_error THEN
5712 x_return_status := fnd_api.g_ret_sts_error;
5713 END decrement_inventory_instances;
5714
5715 PROCEDURE initialize_txn_details(
5716 px_txn_line_rec IN OUT NOCOPY csi_t_datastructures_grp.txn_line_rec,
5717 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
5718 px_txn_party_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
5719 px_txn_party_acct_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
5720 px_txn_org_assgn_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
5721 px_txn_eav_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
5722 px_txn_ii_rltns_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl)
5723 IS
5724 l_txn_line_rec csi_t_datastructures_grp.txn_line_rec;
5725 l_txn_line_dtl_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
5726 l_txn_party_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
5727 l_txn_party_acct_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
5728 l_txn_org_assgn_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
5729 l_txn_eav_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
5730 l_txn_ii_rltns_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
5731 BEGIN
5732 api_log('initialize_txn_details');
5733 px_txn_line_rec := l_txn_line_rec;
5734 px_txn_line_dtl_tbl := l_txn_line_dtl_tbl;
5735 px_txn_party_tbl := l_txn_party_tbl;
5736 px_txn_party_acct_tbl := l_txn_party_acct_tbl;
5737 px_txn_org_assgn_tbl := l_txn_org_assgn_tbl;
5738 px_txn_eav_tbl := l_txn_eav_tbl;
5739 px_txn_ii_rltns_tbl := l_txn_ii_rltns_tbl;
5740 END initialize_txn_details;
5741
5742
5743 PROCEDURE pre_process_txn_line_dtl(
5744 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
5745 p_item_attrib_rec IN item_attributes_rec,
5746 x_return_status OUT NOCOPY varchar2)
5747 IS
5748 l_tld_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
5749 BEGIN
5750 x_return_status := fnd_api.g_ret_sts_success;
5751 api_log('pre_process_txn_line_dtl');
5752 l_tld_tbl := px_txn_line_dtl_tbl;
5753
5754 IF l_tld_tbl.COUNT > 0 THEN
5755 FOR l_ind IN l_tld_tbl.FIRST .. l_tld_tbl.LAST
5756 LOOP
5757 -- init error code with 'N' -- used as a matched_flag in this case
5758 l_tld_tbl(l_ind).error_code := 'N';
5759
5760 -- source_txn_line_details -- to match with the children
5761 l_tld_tbl(l_ind).source_txn_line_detail_id := l_ind;
5762
5763 IF nvl(l_tld_tbl(l_ind).instance_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num THEN
5764 -- derive all the information (serial, lot, locator, rev etc ).
5765 null;
5766 ELSE
5767 IF nvl(l_tld_tbl(l_ind).serial_number, fnd_api.g_miss_char) <> fnd_api.g_miss_char THEN
5768 -- get the instance_id for the item serial comb
5769 null;
5770 END IF;
5771 END IF;
5772 END LOOP;
5773 END IF;
5774
5775 px_txn_line_dtl_tbl := l_tld_tbl;
5776
5777 EXCEPTION
5778 WHEN fnd_api.g_exc_error THEN
5779 x_return_status := fnd_api.g_ret_sts_error;
5780 END pre_process_txn_line_dtl;
5781
5782 PROCEDURE split_tld_one_each(
5783 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
5784 px_txn_party_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
5785 px_txn_party_acct_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
5786 px_txn_org_assgn_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
5787 px_txn_eav_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
5788 px_txn_ii_rltns_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
5789 x_return_status OUT NOCOPY varchar2)
5790 IS
5791 l_tld_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
5792 l_pd_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
5793 l_pa_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
5794 l_oa_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
5795 l_eav_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
5796 l_iir_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
5797
5798 s_tld_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
5799 s_pd_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
5800 s_pa_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
5801 s_oa_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
5802 s_eav_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
5803 s_iir_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
5804
5805 l_tld_ind binary_integer := 0; -- new index
5806 l_pd_ind binary_integer := 0;
5807 l_pa_ind binary_integer := 0;
5808 l_oa_ind binary_integer := 0;
5809 l_eav_ind binary_integer := 0;
5810 l_iir_ind binary_integer := 0;
5811
5812 BEGIN
5813 x_return_status := fnd_api.g_ret_sts_success;
5814 api_log('split_tld_one_each');
5815
5816 l_tld_tbl := px_txn_line_dtl_tbl;
5817 l_pd_tbl := px_txn_party_dtl_tbl;
5818 l_pa_tbl := px_txn_party_acct_tbl;
5819 l_oa_tbl := px_txn_org_assgn_tbl;
5820 l_eav_tbl := px_txn_eav_tbl;
5821 l_iir_tbl := px_txn_ii_rltns_tbl;
5822
5823 IF l_tld_tbl.COUNT > 0 THEN
5824 FOR tld_ind IN l_tld_tbl.FIRST .. l_tld_tbl.LAST
5825 LOOP
5826 IF l_tld_tbl(tld_ind).quantity > 1 THEN
5827 FOR i IN 1..(l_tld_tbl(tld_ind).quantity - 1)
5828 LOOP
5829 -- create new tld record with qty
5830 l_tld_ind := l_tld_tbl.COUNT + 1;
5831 l_tld_tbl(l_tld_ind) := l_tld_tbl(tld_ind);
5832 l_tld_tbl(l_tld_ind).quantity := 1;
5833
5834 -- create party records
5835 IF l_pd_tbl.COUNT > 0 THEN
5836 FOR pd_ind IN l_pd_tbl.FIRST .. l_pd_tbl.LAST
5837 LOOP
5838 IF l_pd_tbl(pd_ind).txn_line_details_index = tld_ind THEN
5839 l_pd_ind := l_pd_tbl.COUNT + 1;
5840 l_pd_tbl(l_pd_ind) := l_pd_tbl(pd_ind);
5841 l_pd_tbl(pd_ind).txn_line_details_index := l_tld_ind;
5842
5843 -- create party account
5844 IF l_pa_tbl.COUNT > 0 THEN
5845 FOR pa_ind IN l_pa_tbl.FIRST .. l_pa_tbl.LAST
5846 LOOP
5847 IF l_pa_tbl(pa_ind).txn_party_details_index = pd_ind THEN
5848 l_pa_ind := l_pa_tbl.COUNT + 1;
5849 l_pa_tbl(l_pa_ind) := l_pa_tbl(pa_ind);
5850 l_pa_tbl(l_pa_ind).txn_party_details_index := l_pd_ind;
5851 END IF;
5852 END LOOP; -- pa_tbl loop
5853 END IF;
5854
5855 END IF;
5856 END LOOP; -- pd_tbl loop
5857 END IF;
5858 END LOOP; -- 1..(qty-1) loop
5859 l_tld_tbl(tld_ind).quantity := 1;
5860 END IF;
5861 END LOOP; -- tld_tbl loop
5862 END IF;
5863
5864 EXCEPTION
5865 WHEN fnd_api.g_exc_error THEN
5866 x_return_status := fnd_api.g_ret_sts_error;
5867 END split_tld_one_each;
5868
5869 PROCEDURE sync_serials(
5870 p_mtl_txn_tbl IN mtl_txn_tbl,
5871 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
5872 x_return_status OUT NOCOPY varchar2)
5873 IS
5874 l_mtl_tbl mtl_txn_tbl;
5875 l_tld_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
5876 l_m_tld_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
5877 l_m_ind binary_integer := 0;
5878 BEGIN
5879 x_return_status := fnd_api.g_ret_sts_success;
5880 api_log('sync_serials');
5881
5882 l_mtl_tbl := p_mtl_txn_tbl;
5883 l_tld_tbl := px_txn_line_dtl_tbl;
5884
5885 debug('Parse I - eliminate cases where serials match');
5886 IF l_tld_tbl.COUNT > 0 THEN
5887 FOR t_ind IN l_tld_tbl.FIRST .. l_tld_tbl.LAST
5888 LOOP
5889 IF l_tld_tbl(t_ind).error_code = 'N' THEN
5890 IF l_mtl_tbl.COUNT > 0 THEN
5891 FOR m_ind IN l_mtl_tbl.FIRST .. l_mtl_tbl.LAST
5892 LOOP
5893 debug(' TLD ID :'||l_tld_tbl(t_ind).source_txn_line_detail_id||
5894 ' Serial :'||l_mtl_tbl(m_ind).serial_number||
5895 ' Instance :'||l_mtl_tbl(m_ind).instance_id);
5896 IF l_mtl_tbl(m_ind).match_flag = 'N' THEN
5897 IF (l_tld_tbl(t_ind).serial_number = l_mtl_tbl(m_ind).serial_number)
5898 OR
5899 (l_tld_tbl(t_ind).instance_id = l_mtl_tbl(m_ind).instance_id)
5900 THEN
5901 /* using this error_code column as a marked flag */
5902 l_tld_tbl(t_ind).error_code := 'Y';
5903 l_mtl_tbl(m_ind).match_flag := 'Y';
5904
5905 l_tld_tbl(t_ind).serial_number := l_mtl_tbl(m_ind).serial_number;
5906 l_tld_tbl(t_ind).instance_id := l_mtl_tbl(m_ind).instance_id;
5907
5908 --
5909 debug(' Match');
5910 exit;
5911 ELSE
5912 debug(' NO Match');
5913 END IF;
5914 END IF;
5915 END LOOP;
5916 END IF;
5917 END IF; -- error_flag = 'N' -- unmatched tld
5918 END LOOP;
5919 END IF;
5920
5921 /* the following logic assumes that the tld table is in quantity each */
5922 debug('Parse II - match based on quantity');
5923 IF l_tld_tbl.COUNT > 0 THEN
5924 FOR t_ind IN l_tld_tbl.FIRST .. l_tld_tbl.LAST
5925 LOOP
5926 IF l_tld_tbl(t_ind).error_code = 'N' THEN
5927 IF l_mtl_tbl.COUNT > 0 THEN
5928 FOR m_ind IN l_mtl_tbl.FIRST .. l_mtl_tbl.LAST
5929 LOOP
5930
5931 debug(' TLD ID :'||l_tld_tbl(t_ind).source_txn_line_detail_id||
5932 ' Serial :'||l_mtl_tbl(m_ind).serial_number||
5933 ' Instance :'||l_mtl_tbl(m_ind).instance_id);
5934 IF l_mtl_tbl(m_ind).match_flag = 'N' THEN
5935 l_tld_tbl(t_ind).error_code := 'Y';
5936 l_mtl_tbl(m_ind).match_flag := 'Y';
5937
5938 l_tld_tbl(t_ind).mfg_serial_number_flag := 'Y';
5939 l_tld_tbl(t_ind).serial_number := l_mtl_tbl(m_ind).serial_number;
5940 l_tld_tbl(t_ind).instance_id := l_mtl_tbl(m_ind).instance_id;
5941 l_tld_tbl(t_ind).lot_number := l_mtl_tbl(m_ind).lot_number;
5942
5943 debug(' Match');
5944 exit;
5945 END IF;
5946
5947 END LOOP; -- mtl table loop
5948 END IF;
5949 END IF;
5950 END LOOP; -- tld loop
5951 END IF;
5952
5953 --rebuild the tld_tbl
5954 IF l_tld_tbl.COUNT > 0 THEN
5955 FOR l_ind IN l_tld_tbl.FIRST .. l_tld_tbl.LAST
5956 LOOP
5957 IF l_tld_tbl(l_ind).error_code = 'Y' THEN
5958
5959 l_m_ind := l_m_ind + 1;
5960 l_m_tld_tbl(l_m_ind) := l_tld_tbl(l_ind);
5961
5962 debug('Instance_ID :'||l_m_tld_tbl(l_m_ind).instance_id);
5963
5964 END IF;
5965 END LOOP;
5966 END IF;
5967
5968 px_txn_line_dtl_tbl := l_m_tld_tbl;
5969
5970 EXCEPTION
5971 WHEN fnd_api.g_exc_error THEN
5972 x_return_status := fnd_api.g_ret_sts_error;
5973 END sync_serials;
5974
5975 PROCEDURE sync_lots(
5976 p_mtl_txn_tbl IN mtl_txn_tbl,
5977 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
5978 x_return_status OUT NOCOPY varchar2)
5979 IS
5980 l_mtl_tbl mtl_txn_tbl;
5981 l_tld_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
5982 l_m_tld_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
5983 l_m_ind binary_integer := 0;
5984
5985 t_n_ind binary_integer := 0;
5986 l_remain_qty number := 0;
5987
5988 BEGIN
5989 x_return_status := fnd_api.g_ret_sts_success;
5990 api_log('sync_lots');
5991
5992 l_mtl_tbl := p_mtl_txn_tbl;
5993 l_tld_tbl := px_txn_line_dtl_tbl;
5994
5995 debug('Parse I - Match by the lot number.');
5996
5997 IF l_tld_tbl.COUNT > 0 THEN
5998 FOR t_ind IN l_tld_tbl.FIRST .. l_tld_tbl.LAST
5999 LOOP
6000 -- unmatched tld
6001 IF l_tld_tbl(t_ind).error_code = 'N' THEN
6002 IF l_mtl_tbl.COUNT > 0 THEN
6003 FOR m_ind IN l_mtl_tbl.FIRST .. l_mtl_tbl.LAST
6004 LOOP
6005 debug(' TLD ID :'||l_tld_tbl(t_ind).source_txn_line_detail_id||
6006 ' Lot :'||l_mtl_tbl(m_ind).lot_number||
6007 ' Instance :'||l_mtl_tbl(m_ind).instance_id);
6008 -- unmatched mtl
6009 IF l_mtl_tbl(m_ind).match_flag = 'N' THEN
6010 IF (l_tld_tbl(t_ind).lot_number = l_mtl_tbl(m_ind).lot_number)
6011 OR
6012 (l_tld_tbl(t_ind).instance_id = l_mtl_tbl(m_ind).instance_id)
6013 THEN
6014
6015 /* this functionality will be used when there is a user entered */
6016 /* txn detail for this source line */
6017 /* code needs to be expanded */
6018
6019 null;
6020 ELSE
6021 debug(' No Match');
6022 END IF;
6023 END IF;
6024 END LOOP; --mtl_tbl loop
6025 END IF;
6026 END IF;
6027 END LOOP; --tld_tbl loop;
6028 END IF;
6029
6030 debug('Parse II - Match by the lot quantity.');
6031 IF l_mtl_tbl.COUNT > 0 THEN
6032 FOR m_ind IN l_mtl_tbl.FIRST .. l_mtl_tbl.LAST
6033 LOOP
6034 -- unmatched mtl
6035 IF l_mtl_tbl(m_ind).match_flag = 'N' THEN
6036
6037 IF l_tld_tbl.COUNT > 0 THEN
6038 FOR t_ind IN l_tld_tbl.FIRST .. l_tld_tbl.LAST
6039 LOOP
6040 debug(' TLD ID :'||l_tld_tbl(t_ind).source_txn_line_detail_id||
6041 ' Lot :'||l_mtl_tbl(m_ind).lot_number||
6042 ' Instance :'||l_mtl_tbl(m_ind).instance_id);
6043
6044 -- unmatched tld
6045 IF l_tld_tbl(t_ind).error_code = 'N' THEN
6046
6047 IF (l_tld_tbl(t_ind).quantity = l_mtl_tbl(m_ind).primary_quantity)
6048 THEN
6049 debug(' Match');
6050
6051 l_tld_tbl(t_ind).error_code := 'Y';
6052 l_mtl_tbl(m_ind).match_flag := 'Y';
6053 l_tld_tbl(t_ind).lot_number := l_mtl_tbl(m_ind).lot_number;
6054 l_tld_tbl(t_ind).instance_id := fnd_api.g_miss_num;
6055 l_tld_tbl(t_ind).instance_exists_flag := 'N';
6056
6057 exit;
6058
6059 ELSE
6060 debug(' No Match');
6061 -- split it to primary_qty and the rest.
6062
6063 l_remain_qty := l_tld_tbl(t_ind).quantity - l_mtl_tbl(m_ind).primary_quantity;
6064
6065 -- create a new tld with the remain qty
6066 t_n_ind := l_tld_tbl.COUNT + 1;
6067
6068 l_tld_tbl(t_n_ind) := l_tld_tbl(t_ind);
6069 l_tld_tbl(t_ind).error_code := 'N';
6070 l_tld_tbl(t_n_ind).quantity := l_remain_qty;
6071 l_tld_tbl(t_n_ind).source_txn_line_detail_id := l_tld_tbl(t_ind).txn_line_detail_id;
6072
6073 -- mark the current tld as matched
6074 l_tld_tbl(t_ind).error_code := 'Y';
6075 l_mtl_tbl(m_ind).match_flag := 'Y';
6076 l_tld_tbl(t_ind).lot_number := l_mtl_tbl(m_ind).lot_number;
6077 l_tld_tbl(t_ind).quantity := l_mtl_tbl(m_ind).primary_quantity;
6078 l_tld_tbl(t_ind).instance_id := fnd_api.g_miss_num;
6079 l_tld_tbl(t_ind).instance_exists_flag := 'N';
6080
6081 exit;
6082
6083 END IF;
6084 END IF;
6085 END LOOP; --tld_tbl loop
6086 END IF;
6087 END IF;
6088 END LOOP; --mtl_tbl loop;
6089 END IF;
6090
6091 --rebuild the tld_tbl
6092 IF l_tld_tbl.COUNT > 0 THEN
6093 FOR l_ind IN l_tld_tbl.FIRST .. l_tld_tbl.LAST
6094 LOOP
6095 IF l_tld_tbl(l_ind).error_code = 'Y' THEN
6096
6097 l_m_ind := l_m_ind + 1;
6098 l_m_tld_tbl(l_m_ind) := l_tld_tbl(l_ind);
6099
6100 debug('Instance_ID :'||l_m_tld_tbl(l_m_ind).instance_id);
6101
6102 END IF;
6103 END LOOP;
6104 END IF;
6105
6106 px_txn_line_dtl_tbl := l_m_tld_tbl;
6107
6108
6109 EXCEPTION
6110 WHEN fnd_api.g_exc_error THEN
6111 x_return_status := fnd_api.g_ret_sts_error;
6112 END sync_lots;
6113
6114 PROCEDURE sync_txn_dtl_and_mtl_txn(
6115 p_mtl_txn_tbl IN mtl_txn_tbl,
6116 p_item_attrib_rec IN item_attributes_rec,
6117 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
6118 px_txn_party_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
6119 px_txn_party_acct_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
6120 px_txn_org_assgn_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_org_assgn_tbl,
6121 px_txn_eav_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ext_attrib_vals_tbl,
6122 px_txn_ii_rltns_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_ii_rltns_tbl,
6123 x_return_status OUT NOCOPY varchar2)
6124 IS
6125 l_tld_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
6126 l_pd_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
6127 l_pa_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
6128 l_oa_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
6129 l_eav_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
6130 l_iir_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
6131 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
6132 BEGIN
6133 x_return_status := fnd_api.g_ret_sts_success;
6134 api_log('sync_txn_dtl_and_mtl_txn');
6135
6136 l_tld_tbl := px_txn_line_dtl_tbl;
6137 l_pd_tbl := px_txn_party_dtl_tbl;
6138 l_pa_tbl := px_txn_party_acct_tbl;
6139 l_oa_tbl := px_txn_org_assgn_tbl;
6140 l_eav_tbl := px_txn_eav_tbl;
6141 l_iir_tbl := px_txn_ii_rltns_tbl;
6142
6143 pre_process_txn_line_dtl(
6144 px_txn_line_dtl_tbl => l_tld_tbl,
6145 p_item_attrib_rec => p_item_attrib_rec,
6146 x_return_status => l_return_status);
6147
6148 IF l_return_status <> fnd_api.g_ret_sts_success THEN
6149 RAISE fnd_api.g_exc_error;
6150 END IF;
6151
6152 IF p_mtl_txn_tbl.COUNT > 0 THEN
6153
6154 -- if serialized match by serial/inst combination
6155 IF p_item_attrib_rec.serial_control_code in (2, 5, 6) THEN
6156 -- we need to stamp the serial attribute in the instance creation
6157 -- sync serials
6158
6159 sync_serials(
6160 p_mtl_txn_tbl => p_mtl_txn_tbl,
6161 px_txn_line_dtl_tbl => l_tld_tbl,
6162 x_return_status => l_return_status);
6163
6164 ELSE
6165 IF p_item_attrib_rec.lot_control_code = 2 THEN
6166 -- we need to group and stamp the lot attribute in instnace creation
6167 -- sync_lots
6168
6169 sync_lots(
6170 p_mtl_txn_tbl => p_mtl_txn_tbl,
6171 px_txn_line_dtl_tbl => l_tld_tbl,
6172 x_return_status => l_return_status);
6173
6174 ELSE
6175 null;
6176 -- just verify that the quantity that is in sync with the mtl txn qty
6177 -- sync_quantity
6178 END IF;
6179 END IF;
6180
6181 -- if lot match by lot/inst
6182
6183 -- if locator match by locator
6184
6185 -- by qty
6186
6187 -- split tld to match the mtl tbl (most frequent case) make sure it works
6188 END IF;
6189
6190 px_txn_line_dtl_tbl := l_tld_tbl;
6191 px_txn_party_dtl_tbl := l_pd_tbl;
6192 px_txn_party_acct_tbl := l_pa_tbl;
6193 px_txn_org_assgn_tbl := l_oa_tbl;
6194 px_txn_eav_tbl := l_eav_tbl;
6195 px_txn_ii_rltns_tbl := l_iir_tbl;
6196
6197 EXCEPTION
6198 WHEN fnd_api.g_exc_error THEN
6199 x_return_status := fnd_api.g_ret_sts_error;
6200 END sync_txn_dtl_and_mtl_txn;
6201
6202
6203 PROCEDURE default_owner_pty_and_acct(
6204 p_instance_id IN number,
6205 px_txn_line_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_line_detail_tbl,
6206 px_txn_party_dtl_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_party_detail_tbl,
6207 px_txn_party_acct_tbl IN OUT NOCOPY csi_t_datastructures_grp.txn_pty_acct_detail_tbl,
6208 x_return_status OUT NOCOPY varchar2)
6209 IS
6210 l_owner_party_acct_id number;
6211 l_owner_party_id number;
6212 l_party_source_table varchar2(80);
6213
6214 l_pt_ind binary_integer := 0;
6215 l_pa_ind binary_integer := 0;
6216
6217 BEGIN
6218
6219 api_log('default_owner_pty_and_acct');
6220 x_return_status := fnd_api.g_ret_sts_success;
6221
6222 IF px_txn_line_dtl_tbl.COUNT > 0 THEN
6223
6224 SELECT owner_party_account_id,
6225 owner_party_id
6226 INTO l_owner_party_acct_id,
6227 l_owner_party_id
6228 FROM csi_item_instances
6229 WHERE instance_id = p_instance_id;
6230
6231
6232 IF l_owner_party_id is not null THEN
6233
6234 SELECT party_source_table
6235 INTO l_party_source_table
6236 FROM csi_i_parties
6237 WHERE instance_id = p_instance_id
6238 AND relationship_type_code = 'OWNER';
6239
6240 FOR l_ind IN px_txn_line_dtl_tbl.FIRST .. px_txn_line_dtl_tbl.LAST
6241 LOOP
6242
6243 -- check if owner is there
6244 l_pt_ind := px_txn_party_dtl_tbl.COUNT + 1;
6245
6246 px_txn_party_dtl_tbl(l_pt_ind).txn_party_detail_id := fnd_api.g_miss_num;
6247 px_txn_party_dtl_tbl(l_pt_ind).txn_line_detail_id := fnd_api.g_miss_num;
6248 px_txn_party_dtl_tbl(l_pt_ind).party_source_table := l_party_source_table;
6249 px_txn_party_dtl_tbl(l_pt_ind).party_source_id := l_owner_party_id;
6250 px_txn_party_dtl_tbl(l_pt_ind).relationship_type_code := 'OWNER';
6251 px_txn_party_dtl_tbl(l_pt_ind).contact_flag := 'N';
6252 px_txn_party_dtl_tbl(l_pt_ind).txn_line_details_index := l_ind;
6253
6254 IF l_owner_party_acct_id IS NOT null THEN
6255
6256 l_pa_ind := px_txn_party_acct_tbl.COUNT + 1;
6257
6258 px_txn_party_acct_tbl(l_pa_ind).txn_account_detail_id := fnd_api.g_miss_num;
6259 px_txn_party_acct_tbl(l_pa_ind).txn_party_detail_id := fnd_api.g_miss_num;
6260 px_txn_party_acct_tbl(l_pa_ind).account_id := l_owner_party_acct_id;
6261 px_txn_party_acct_tbl(l_pa_ind).relationship_type_code := 'OWNER';
6262 px_txn_party_acct_tbl(l_pa_ind).txn_party_details_index := l_pt_ind;
6263
6264 END IF;
6265
6266 END LOOP;
6267 END IF;
6268 END IF;
6269
6270 EXCEPTION
6271 WHEN fnd_api.g_exc_error THEN
6272 x_return_status := fnd_api.g_ret_sts_error;
6273 END default_owner_pty_and_acct;
6274
6275 --
6276 --
6277 --
6278 PROCEDURE process_cz_txn_details(
6279 p_config_session_keys IN csi_utility_grp.config_session_keys,
6280 p_instance_id IN number,
6281 x_instance_tbl OUT NOCOPY csi_datastructures_pub.instance_tbl,
6282 x_return_status OUT NOCOPY varchar2)
6283 IS
6284
6285 l_source_hdr_rec source_header_rec;
6286 l_source_line_rec source_line_rec;
6287 l_src_instance_key csi_utility_grp.config_instance_key;
6288
6289 l_csi_txn_rec csi_datastructures_pub.transaction_rec;
6290
6291 l_tl_rec csi_t_datastructures_grp.txn_line_rec;
6292 l_td_tbl csi_t_datastructures_grp.txn_line_detail_tbl;
6293 l_pd_tbl csi_t_datastructures_grp.txn_party_detail_tbl;
6294 l_pa_tbl csi_t_datastructures_grp.txn_pty_acct_detail_tbl;
6295 l_oa_tbl csi_t_datastructures_grp.txn_org_assgn_tbl;
6296 l_ea_tbl csi_t_datastructures_grp.txn_ext_attrib_vals_tbl;
6297 l_ir_tbl csi_t_datastructures_grp.txn_ii_rltns_tbl;
6298 l_pr_tbl csi_datastructures_pub.pricing_attribs_tbl;
6299 l_sy_tbl csi_t_datastructures_grp.txn_systems_tbl;
6300
6301 l_return_status varchar2(1) := fnd_api.g_ret_sts_success;
6302 l_return_message varchar2(2000);
6303
6304 BEGIN
6305 x_return_status := fnd_api.g_ret_sts_success;
6306
6307 api_log('process_cz_txn_details');
6308
6309 IF p_config_session_keys.COUNT > 0 THEN
6310 FOR l_ind IN p_config_session_keys.FIRST .. p_config_session_keys.LAST
6311 LOOP
6312
6313 -- initialize txn detail set
6314 initialize_txn_details(
6315 px_txn_line_rec => l_tl_rec,
6316 px_txn_line_dtl_tbl => l_td_tbl,
6317 px_txn_party_tbl => l_pd_tbl,
6318 px_txn_party_acct_tbl => l_pa_tbl,
6319 px_txn_org_assgn_tbl => l_oa_tbl,
6320 px_txn_eav_tbl => l_ea_tbl,
6321 px_txn_ii_rltns_tbl => l_ir_tbl);
6322
6323 get_cz_txn_details(
6324 p_config_session_key => p_config_session_keys(l_ind),
6325 x_txn_line_rec => l_tl_rec,
6326 x_txn_line_dtl_tbl => l_td_tbl,
6327 x_txn_party_tbl => l_pd_tbl,
6328 x_txn_party_acct_tbl => l_pa_tbl,
6329 x_txn_org_assgn_tbl => l_oa_tbl,
6330 x_txn_eav_tbl => l_ea_tbl,
6331 x_txn_ii_rltns_tbl => l_ir_tbl,
6332 x_return_status => l_return_status);
6333
6334 IF l_return_status <> fnd_api.g_ret_sts_success THEN
6335 RAISE fnd_api.g_exc_error;
6336 END IF;
6337
6338 IF l_td_tbl.COUNT > 0 THEN
6339
6340 -- get the source instance key
6341 FOR l_td_ind IN l_td_tbl.FIRST .. l_td_tbl.LAST
6342 LOOP
6343 IF l_td_tbl(l_td_ind).source_transaction_flag = 'Y' THEN
6344
6345 l_src_instance_key.inst_hdr_id := l_td_tbl(l_td_ind).config_inst_hdr_id;
6346 l_src_instance_key.inst_rev_num := l_td_tbl(l_td_ind).config_inst_rev_num;
6347 l_src_instance_key.inst_item_id := l_td_tbl(l_td_ind).config_inst_item_id;
6348 l_src_instance_key.inst_baseline_rev_num := l_td_tbl(l_td_ind).config_inst_baseline_rev_num;
6349
6350 -- to get the item attributes I need to pass this
6351 l_source_line_rec.inventory_item_id := l_td_tbl(l_td_ind).inventory_item_id;
6352 l_source_line_rec.organization_id := l_td_tbl(l_td_ind).inv_organization_id;
6353
6354 END IF;
6355
6356 /* Moved this code from IF clause above after all the assignments as part of
6357 fix for Bug 2730573 */
6358
6359 /* moved this code out from interface IB */
6360 BEGIN
6361 SELECT instance_id
6362 INTO l_td_tbl(l_td_ind).instance_id
6363 FROM csi_item_instances
6364 WHERE config_inst_hdr_id = l_td_tbl(l_td_ind).config_inst_hdr_id
6365 AND config_inst_item_id = l_td_tbl(l_td_ind).config_inst_item_id;
6366
6367 l_td_tbl(l_td_ind).instance_exists_flag := 'Y';
6368
6369 EXCEPTION
6370 WHEN no_data_found THEN
6371 l_td_tbl(l_td_ind).instance_id := fnd_api.g_miss_num;
6372 l_td_tbl(l_td_ind).instance_exists_flag := 'N';
6373 END;
6374 /* End of fix for Bug 2730573 */
6375
6376 END LOOP;
6377
6378 -- filter relations
6379
6380 filter_relations(
6381 p_instance_key => l_src_instance_key,
6382 p_transaction_line_id => l_tl_rec.transaction_line_id,
6383 px_txn_ii_rltns_tbl => l_ir_tbl,
6384 x_return_status => l_return_status);
6385
6386 IF l_return_status <> fnd_api.g_ret_sts_success THEN
6387 RAISE fnd_api.g_exc_error;
6388 END IF;
6389
6390 csi_t_utilities_pvt.convert_ids_to_index(
6391 px_line_dtl_tbl => l_td_tbl,
6392 px_pty_dtl_tbl => l_pd_tbl,
6393 px_pty_acct_tbl => l_pa_tbl,
6394 px_ii_rltns_tbl => l_ir_tbl,
6395 px_org_assgn_tbl => l_oa_tbl,
6396 px_ext_attrib_tbl => l_ea_tbl,
6397 px_txn_systems_tbl => l_sy_tbl);
6398
6399 --default owner party and account
6400 default_owner_pty_and_acct(
6401 p_instance_id => p_instance_id,
6402 px_txn_line_dtl_tbl => l_td_tbl,
6403 px_txn_party_dtl_tbl => l_pd_tbl,
6404 px_txn_party_acct_tbl => l_pa_tbl,
6405 x_return_status => l_return_status);
6406
6407 IF l_return_status <> fnd_api.g_ret_sts_success THEN
6408 RAISE fnd_api.g_exc_error;
6409 END IF;
6410
6411 l_source_line_rec.fulfilled_date := sysdate;
6412 l_source_hdr_rec.source_header_id := l_src_instance_key.inst_hdr_id;
6413 l_source_hdr_rec.source_header_ref := l_src_instance_key.inst_rev_num;
6414 l_source_line_rec.source_line_id := l_src_instance_key.inst_item_id;
6415 l_source_line_rec.source_line_ref := null;
6416 l_source_line_rec.source_table := 'CONFIGURATOR';
6417 l_source_line_rec.batch_validate_flag := 'N';
6418
6419 interface_ib(
6420 p_source_header_rec => l_source_hdr_rec,
6421 p_source_line_rec => l_source_line_rec,
6422 px_csi_txn_rec => l_csi_txn_rec,
6423 px_txn_line_rec => l_tl_rec,
6424 px_txn_line_dtl_tbl => l_td_tbl,
6425 px_txn_party_tbl => l_pd_tbl,
6426 px_txn_party_acct_tbl => l_pa_tbl,
6427 px_txn_org_assgn_tbl => l_oa_tbl,
6428 px_txn_eav_tbl => l_ea_tbl,
6429 px_txn_ii_rltns_tbl => l_ir_tbl,
6430 px_pricing_attribs_tbl => l_pr_tbl,
6431 x_return_status => l_return_status,
6432 x_return_message => l_return_message);
6433
6434 IF l_return_status <> fnd_api.g_ret_sts_success THEN
6435 RAISE fnd_api.g_exc_error;
6436 END IF;
6437
6438 END IF;
6439
6440 END LOOP;
6441 END IF;
6442
6443 EXCEPTION
6444 WHEN fnd_api.g_exc_error THEN
6445 x_return_status := fnd_api.g_ret_sts_error;
6446 END process_cz_txn_details;
6447 END csi_interface_pkg;