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