1 PACKAGE BODY EGO_IMPORT_PVT AS
2 /* $Header: EGOVIMPB.pls 120.184.12020000.5 2013/02/26 18:02:20 gnookala ship $ */
3
4 G_DEFAULT_ATTR_GROUP_TYPE CONSTANT VARCHAR2(30) := 'EGO_ITEMMGMT_GROUP';
5 -- G_IOI_STAMP_REQUEST_ID_FLAG CONSTANT NUMBER := -1;
6
7 G_TRANS_TYPE_CREATE CONSTANT VARCHAR2(10) := 'CREATE';
8 G_TRANS_TYPE_UPDATE CONSTANT VARCHAR2(10) := 'UPDATE';
9 G_TRANS_TYPE_DELETE CONSTANT VARCHAR2(10) := 'DELETE';
10 G_TRANS_TYPE_SYNC CONSTANT VARCHAR2(10) := 'SYNC';
11
12 TYPE UROWID_TABLE IS TABLE OF UROWID;
13 G_MSII_REIMPORT_ROWS UROWID_TABLE;
14
15 G_NEEDS_REQUEST_ID_STAMP CONSTANT NUMBER := -1;
16 G_NEED_TO_LOG_ERROR CONSTANT NUMBER := -3;
17
18 SUBTYPE MSII_ROW IS MTL_SYSTEM_ITEMS_INTERFACE%ROWTYPE;
19 TYPE COLUMN_NAMES IS TABLE OF ALL_TAB_COLUMNS.COLUMN_NAME%TYPE;
20 SUBTYPE EIUAI_ROW IS EGO_ITM_USR_ATTR_INTRFC%ROWTYPE;
21 TYPE EIUAI_ROWS IS TABLE OF EIUAI_ROW INDEX BY BINARY_INTEGER;
22 SUBTYPE IAssocs_Row IS EGO_ITEM_ASSOCIATIONS_INTF%ROWTYPE;
23 TYPE IAssocs_Rows IS TABLE OF IAssocs_Row INDEX BY BINARY_INTEGER;
24
25 G_PARTY_NAME VARCHAR2(100);
26
27 G_LOG_TIMESTAMP_FORMAT CONSTANT VARCHAR2( 30 ) := 'dd-mon-yyyy hh:mi:ss.ff';
28
29 G_EXCEL_MISS_DATE_VAL CONSTANT DATE := to_date( '9999-12-31', 'YYYY-MM-DD' );
30 G_EXCEL_MISS_DATE_STR CONSTANT VARCHAR2(50) := 'to_date(''9999-12-31'', ''YYYY-MM-DD'') ';
31
32 G_EXCEL_MISS_NUM_STR CONSTANT VARCHAR2(20) := EGO_USER_ATTRS_BULK_PVT.G_NULL_NUM_VAL;
33 G_EXCEL_MISS_CHAR_VAL CONSTANT VARCHAR2(30) := EGO_USER_ATTRS_BULK_PVT.G_NULL_CHAR_VAL;
34
35 G_EXCEL_MISS_VS_VAL CONSTANT VARCHAR2(30) := ''''||G_EXCEL_MISS_CHAR_VAL||'''';
36
37 -- Confirm Status Constants Available in package spec
38 G_DATE_TIME_DATA_TYPE CONSTANT FLAG := 'Y';
39
40 /*
41 * This method writes into concurrent program log
42 */
43 PROCEDURE Debug_Conc_Log( p_message IN VARCHAR2
44 , p_add_timestamp IN BOOLEAN DEFAULT TRUE )
45 IS
46 l_inv_debug_level NUMBER := INVPUTLI.get_debug_level; --Bug: 4667452
47 BEGIN
48 IF l_inv_debug_level IN(101, 102) THEN
49 INVPUTLI.info( ( CASE
50 WHEN p_add_timestamp THEN to_char( systimestamp, G_LOG_TIMESTAMP_FORMAT ) || ': '
51 ELSE ''
52 END )
53 || p_message );
54 END IF;
55 END Debug_Conc_Log;
56
57 /*
58 * Private method to return current party name string associated with current user
59 */
60 FUNCTION Get_Current_Party_Name RETURN VARCHAR2
61 IS
62 l_party_id NUMBER;
63 BEGIN
64 IF G_PARTY_NAME IS NULL THEN
65 BEGIN
66 SELECT PARTY_ID INTO l_party_id
67 FROM ego_user_v
68 WHERE USER_ID = FND_GLOBAL.USER_ID;
69 EXCEPTION WHEN OTHERS THEN
70 RETURN NULL;
71 END;
72
73 G_PARTY_NAME := 'HZ_PARTY:' || TO_CHAR(l_party_id);
74 RETURN G_PARTY_NAME;
75 ELSE
76 RETURN G_PARTY_NAME;
77 END IF;
78 END Get_Current_Party_Name;
79
80 /*This method errors out all those rows in interface tables which have
81 *NULL source System reference or have invalid source system id.
82 *
83 *For handling the case when user insert data through BackEnd and tries to import
84 *data using Import WorkBench.
85 *
86 *Done for Bug 5352143
87 */
88 PROCEDURE Err_null_ssxref_ssid( p_data_set_id IN NUMBER )
89 IS
90 l_msg_text VARCHAR2(4000);
91 l_err_text VARCHAR2(4000);
92 l_user_id NUMBER := FND_GLOBAL.USER_ID;
93 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
94 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
95 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
96 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
97 dumm_status VARCHAR2(100);
98
99 CURSOR c_ssxref_null_msii IS
100 SELECT
101 ORGANIZATION_ID,
102 TRANSACTION_ID,
103 PROCESS_FLAG
104 FROM MTL_SYSTEM_ITEMS_INTERFACE
105 WHERE SET_PROCESS_ID = p_data_set_id
106 AND PROCESS_FLAG IN (33379, 33389);
107
108 CURSOR c_ssxref_null_miri IS
109 SELECT
110 ORGANIZATION_ID,
111 TRANSACTION_ID,
112 PROCESS_FLAG
113 FROM MTL_ITEM_REVISIONS_INTERFACE
114 WHERE SET_PROCESS_ID = p_data_set_id
115 AND PROCESS_FLAG IN (33379, 33389);
116
117 CURSOR c_ssxref_null_mici IS
118 SELECT
119 ORGANIZATION_ID,
120 TRANSACTION_ID,
121 PROCESS_FLAG
122 FROM MTL_ITEM_CATEGORIES_INTERFACE
123 WHERE SET_PROCESS_ID = p_data_set_id
124 AND PROCESS_FLAG IN (33379, 33389);
125
126 CURSOR c_ssxref_null_eiuai IS
127 SELECT
128 ORGANIZATION_ID,
129 TRANSACTION_ID,
130 PROCESS_STATUS
131 FROM EGO_ITM_USR_ATTR_INTRFC
132 WHERE DATA_SET_ID = p_data_set_id
133 AND PROCESS_STATUS IN (33379, 33389);
134
135 CURSOR c_ssxref_null_eipi IS
136 SELECT
137 ORGANIZATION_ID,
138 TRANSACTION_ID,
139 PROCESS_STATUS
140 FROM EGO_ITEM_PEOPLE_INTF
141 WHERE DATA_SET_ID = p_data_set_id
142 AND PROCESS_STATUS IN (33379, 33389);
143
144 CURSOR c_ssxref_null_eai IS
145 SELECT
146 ORGANIZATION_ID,
147 TRANSACTION_ID,
148 PROCESS_FLAG
149 FROM EGO_AML_INTF
150 WHERE DATA_SET_ID = p_data_set_id
151 AND PROCESS_FLAG IN (33379, 33389);
152 --R12C:BEGIN
153 CURSOR c_ssxref_null_assocs IS
154 SELECT
155 ORGANIZATION_ID,
156 TRANSACTION_ID,
157 PROCESS_FLAG
158 FROM EGO_ITEM_ASSOCIATIONS_INTF
159 WHERE BATCH_ID = p_data_set_id
160 AND PROCESS_FLAG IN (33379, 33389);
161 --R12C:BEGIN
162 BEGIN
163 Debug_Conc_Log( 'Err_null_ssxref_ssid - Begin' );
164 -- MSII
165 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
166 SET PROCESS_FLAG = (CASE WHEN MSII.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
167 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
168 PROGRAM_APPLICATION_ID = l_prog_appid,
169 PROGRAM_ID = l_prog_id,
170 REQUEST_ID = l_request_id
171 WHERE SET_PROCESS_ID = p_data_set_id
172 AND PROCESS_FLAG = 0
173 AND (MSII.SOURCE_SYSTEM_REFERENCE IS NULL
174 OR MSII.SOURCE_SYSTEM_ID <>
175 (SELECT SOURCE_SYSTEM_ID
176 FROM EGO_IMPORT_BATCHES_B
177 WHERE BATCH_ID = MSII.SET_PROCESS_ID
178 )
179 );
180
181 -- MIRI
182 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
183 SET PROCESS_FLAG = (CASE WHEN MIRI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
184 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
185 PROGRAM_APPLICATION_ID = l_prog_appid,
186 PROGRAM_ID = l_prog_id,
187 REQUEST_ID = l_request_id
188 WHERE SET_PROCESS_ID = p_data_set_id
189 AND PROCESS_FLAG = 0
190 AND ( MIRI.SOURCE_SYSTEM_REFERENCE IS NULL
191 OR MIRI.SOURCE_SYSTEM_ID <>
192 (SELECT SOURCE_SYSTEM_ID
193 FROM EGO_IMPORT_BATCHES_B
194 WHERE BATCH_ID = MIRI.SET_PROCESS_ID
195 )
196 );
197
198 -- MICI
199 UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
200 SET PROCESS_FLAG = (CASE WHEN MICI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
201 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
202 PROGRAM_APPLICATION_ID = l_prog_appid,
203 PROGRAM_ID = l_prog_id,
204 REQUEST_ID = l_request_id
205 WHERE SET_PROCESS_ID = p_data_set_id
206 AND PROCESS_FLAG = 0
207 AND (MICI.SOURCE_SYSTEM_REFERENCE IS NULL
208 OR MICI.SOURCE_SYSTEM_ID <>
209 (SELECT SOURCE_SYSTEM_ID
210 FROM EGO_IMPORT_BATCHES_B
211 WHERE BATCH_ID = MICI.SET_PROCESS_ID
212 )
213 );
214
215 -- EIUAI
216 UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
217 SET PROCESS_STATUS = (CASE WHEN EIUAI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
218 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
219 PROGRAM_APPLICATION_ID = l_prog_appid,
220 PROGRAM_ID = l_prog_id,
221 REQUEST_ID = l_request_id
222 WHERE DATA_SET_ID = p_data_set_id
223 AND PROCESS_STATUS = 0
224 AND (EIUAI.SOURCE_SYSTEM_REFERENCE IS NULL
225 OR EIUAI.SOURCE_SYSTEM_ID <>
226 (SELECT SOURCE_SYSTEM_ID
227 FROM EGO_IMPORT_BATCHES_B
228 WHERE BATCH_ID = EIUAI.DATA_SET_ID
229 )
230 );
231
232 -- EIPI
233 UPDATE EGO_ITEM_PEOPLE_INTF EIPI
234 SET PROCESS_STATUS = (CASE WHEN EIPI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
235 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
236 PROGRAM_APPLICATION_ID = l_prog_appid,
237 PROGRAM_ID = l_prog_id,
238 REQUEST_ID = l_request_id
239 WHERE DATA_SET_ID = p_data_set_id
240 AND PROCESS_STATUS = 0
241 AND (EIPI.SOURCE_SYSTEM_REFERENCE IS NULL
242 OR EIPI.SOURCE_SYSTEM_ID <>
243 (SELECT SOURCE_SYSTEM_ID
244 FROM EGO_IMPORT_BATCHES_B
245 WHERE BATCH_ID = EIPI.DATA_SET_ID
246 )
247 );
248
249 -- EAI
250 UPDATE EGO_AML_INTF EAI
251 SET PROCESS_FLAG = (CASE WHEN EAI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
252 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
253 PROGRAM_APPLICATION_ID = l_prog_appid,
254 PROGRAM_ID = l_prog_id,
255 REQUEST_ID = l_request_id
256 WHERE DATA_SET_ID = p_data_set_id
257 AND PROCESS_FLAG = 0
258 AND (EAI.SOURCE_SYSTEM_REFERENCE IS NULL
259 OR EAI.SOURCE_SYSTEM_ID <>
260 (SELECT SOURCE_SYSTEM_ID
261 FROM EGO_IMPORT_BATCHES_B
262 WHERE BATCH_ID = EAI.DATA_SET_ID
263 )
264 );
265
266 -- R12C:BEGIN ASSOCSINTF
267 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
268 SET PROCESS_FLAG = (CASE WHEN EIAI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
269 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
270 PROGRAM_APPLICATION_ID = l_prog_appid,
271 PROGRAM_ID = l_prog_id,
272 REQUEST_ID = l_request_id
273 WHERE BATCH_ID = p_data_set_id
274 AND PROCESS_FLAG = 0
275 AND (EIAI.SOURCE_SYSTEM_REFERENCE IS NULL
276 OR EIAI.SOURCE_SYSTEM_ID <>
277 (SELECT SOURCE_SYSTEM_ID
278 FROM EGO_IMPORT_BATCHES_B
279 WHERE BATCH_ID = EIAI.BATCH_ID
280 )
281 );
282 -- R12C:END ASSOCSINTF
283 Debug_Conc_Log( 'Err_null_ssxref_ssid - Completed updating rows having null SSxRef or invalid SSid' );
284 Debug_Conc_Log( 'Err_null_ssxref_ssid - Started inserting Errors' );
285 -- MSII
286 FOR i IN c_ssxref_null_msii LOOP
287 IF i.PROCESS_FLAG = 33379 THEN
288 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
289 l_msg_text := FND_MESSAGE.GET;
290 dumm_status := INVPUOPI.mtl_log_interface_err(
291 i.ORGANIZATION_ID
292 ,l_user_id
293 ,l_login_id
294 ,l_prog_appid
295 ,l_prog_id
296 ,l_request_id
297 ,i.TRANSACTION_ID
298 ,l_msg_text
299 ,'SOURCE_SYSTEM_REFERENCE'
300 ,'MTL_SYSTEM_ITEMS_INTERFACE'
301 ,'INV_IOI_ERR_SSXREF_IS_NULL_01' --bug 11894684, replace INV_IOI_ERR
302 ,l_err_text);
303
304 ELSIF i.PROCESS_FLAG = 33389 THEN
305 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
306 l_msg_text := FND_MESSAGE.GET;
307 dumm_status := INVPUOPI.mtl_log_interface_err(
308 i.ORGANIZATION_ID
309 ,l_user_id
310 ,l_login_id
311 ,l_prog_appid
312 ,l_prog_id
313 ,l_request_id
314 ,i.TRANSACTION_ID
315 ,l_msg_text
316 ,'SOURCE_SYSTEM_ID'
317 ,'MTL_SYSTEM_ITEMS_INTERFACE'
318 ,'INV_IOI_ERR_SSXID_INVALID_01'--bug 11894684, replace INV_IOI_ERR
319 ,l_err_text);
320 END IF;
321 END LOOP;
322
323 -- MIRI
324 FOR i IN c_ssxref_null_miri LOOP
325 IF i.PROCESS_FLAG = 33379 THEN
326 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
327 l_msg_text := FND_MESSAGE.GET;
328 dumm_status := INVPUOPI.mtl_log_interface_err(
329 i.ORGANIZATION_ID
330 ,l_user_id
331 ,l_login_id
332 ,l_prog_appid
333 ,l_prog_id
334 ,l_request_id
335 ,i.TRANSACTION_ID
336 ,l_msg_text
337 ,'SOURCE_SYSTEM_REFERENCE'
338 ,'MTL_ITEM_REVISIONS_INTERFACE'
339 ,'INV_IOI_ERR_SSXREF_IS_NULL_02'--bug 11894684, replace INV_IOI_ERR
340 ,l_err_text);
341 ELSIF i.PROCESS_FLAG = 33389 THEN
342 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
343 l_msg_text := FND_MESSAGE.GET;
344 dumm_status := INVPUOPI.mtl_log_interface_err(
345 i.ORGANIZATION_ID
346 ,l_user_id
347 ,l_login_id
348 ,l_prog_appid
349 ,l_prog_id
350 ,l_request_id
351 ,i.TRANSACTION_ID
352 ,l_msg_text
353 ,'SOURCE_SYSTEM_ID'
354 ,'MTL_ITEM_REVISIONS_INTERFACE'
355 ,'INV_IOI_ERR_SSXID_INVALID_02'--bug 11894684, replace INV_IOI_ERR
356 ,l_err_text);
357 END IF;
358 END LOOP;
359
360 -- MICI
361 FOR i IN c_ssxref_null_mici LOOP
362 IF i.PROCESS_FLAG = 33379 THEN
363 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
364 l_msg_text := FND_MESSAGE.GET;
365 dumm_status := INVPUOPI.mtl_log_interface_err(
366 i.ORGANIZATION_ID
367 ,l_user_id
368 ,l_login_id
369 ,l_prog_appid
370 ,l_prog_id
371 ,l_request_id
372 ,i.TRANSACTION_ID
373 ,l_msg_text
374 ,'SOURCE_SYSTEM_REFERENCE'
375 ,'MTL_ITEM_CATEGORIES_INTERFACE'
376 ,'INV_IOI_ERR_SSXREF_IS_NULL_03'--bug 11894684, replace INV_IOI_ERR
377 ,l_err_text);
378 ELSIF i.PROCESS_FLAG = 33389 THEN
379 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
380 l_msg_text := FND_MESSAGE.GET;
381 dumm_status := INVPUOPI.mtl_log_interface_err(
382 i.ORGANIZATION_ID
383 ,l_user_id
384 ,l_login_id
385 ,l_prog_appid
386 ,l_prog_id
387 ,l_request_id
388 ,i.TRANSACTION_ID
389 ,l_msg_text
390 ,'SOURCE_SYSTEM_ID'
391 ,'MTL_ITEM_CATEGORIES_INTERFACE'
392 ,'INV_IOI_ERR_SSXID_INVALID_03'--bug 11894684, replace INV_IOI_ERR
393 ,l_err_text);
394 END IF;
395 END LOOP;
396
397 -- EIUAI
398 FOR i IN c_ssxref_null_eiuai LOOP
399 IF i.PROCESS_STATUS = 33379 THEN
400 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
401 l_msg_text := FND_MESSAGE.GET;
402 dumm_status := INVPUOPI.mtl_log_interface_err(
403 i.ORGANIZATION_ID
404 ,l_user_id
405 ,l_login_id
406 ,l_prog_appid
407 ,l_prog_id
408 ,l_request_id
409 ,i.TRANSACTION_ID
410 ,l_msg_text
411 ,'SOURCE_SYSTEM_REFERENCE'
412 ,'EGO_ITM_USR_ATTR_INTRFC'
413 ,'INV_IOI_ERR_SSXREF_IS_NULL_04'--bug 11894684, replace INV_IOI_ERR
414 ,l_err_text);
415 ELSIF i.PROCESS_STATUS = 33389 THEN
416 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
417 l_msg_text := FND_MESSAGE.GET;
418 dumm_status := INVPUOPI.mtl_log_interface_err(
419 i.ORGANIZATION_ID
420 ,l_user_id
421 ,l_login_id
422 ,l_prog_appid
423 ,l_prog_id
424 ,l_request_id
425 ,i.TRANSACTION_ID
426 ,l_msg_text
427 ,'SOURCE_SYSTEM_ID'
428 ,'EGO_ITM_USR_ATTR_INTRFC'
429 ,'INV_IOI_ERR_SSXID_INVALID_04'--bug 11894684, replace INV_IOI_ERR
430 ,l_err_text);
431 END IF;
432 END LOOP;
433
434 -- EIPI
435 FOR i IN c_ssxref_null_eipi LOOP
436 IF i.PROCESS_STATUS = 33379 THEN
437 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
438 l_msg_text := FND_MESSAGE.GET;
439 dumm_status := INVPUOPI.mtl_log_interface_err(
440 i.ORGANIZATION_ID
441 ,l_user_id
442 ,l_login_id
443 ,l_prog_appid
444 ,l_prog_id
445 ,l_request_id
446 ,i.TRANSACTION_ID
447 ,l_msg_text
448 ,'SOURCE_SYSTEM_REFERENCE'
449 ,'EGO_ITEM_PEOPLE_INTF'
450 ,'INV_IOI_ERR_SSXREF_IS_NULL_05'--bug 11894684, replace INV_IOI_ERR
451 ,l_err_text);
452 ELSIF i.PROCESS_STATUS = 33389 THEN
453 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
454 l_msg_text := FND_MESSAGE.GET;
455 dumm_status := INVPUOPI.mtl_log_interface_err(
456 i.ORGANIZATION_ID
457 ,l_user_id
458 ,l_login_id
459 ,l_prog_appid
460 ,l_prog_id
461 ,l_request_id
462 ,i.TRANSACTION_ID
463 ,l_msg_text
464 ,'SOURCE_SYSTEM_ID'
465 ,'EGO_ITEM_PEOPLE_INTF'
466 ,'INV_IOI_ERR_SSXID_INVALID_05'--bug 11894684, replace INV_IOI_ERR
467 ,l_err_text);
468 END IF;
469 END LOOP;
470
471 -- EAI
472 FOR i IN c_ssxref_null_eai LOOP
473 IF i.PROCESS_FLAG = 33379 THEN
474 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
475 l_msg_text := FND_MESSAGE.GET;
476 dumm_status := INVPUOPI.mtl_log_interface_err(
477 i.ORGANIZATION_ID
478 ,l_user_id
479 ,l_login_id
480 ,l_prog_appid
481 ,l_prog_id
482 ,l_request_id
483 ,i.TRANSACTION_ID
484 ,l_msg_text
485 ,'SOURCE_SYSTEM_REFERENCE'
486 ,'EGO_AML_INTF'
487 ,'INV_IOI_ERR_SSXREF_IS_NULL_06'--bug 11894684, replace INV_IOI_ERR
488 ,l_err_text);
489 ELSIF i.PROCESS_FLAG = 33389 THEN
490 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
491 l_msg_text := FND_MESSAGE.GET;
492 dumm_status := INVPUOPI.mtl_log_interface_err(
493 i.ORGANIZATION_ID
494 ,l_user_id
495 ,l_login_id
496 ,l_prog_appid
497 ,l_prog_id
498 ,l_request_id
499 ,i.TRANSACTION_ID
500 ,l_msg_text
501 ,'SOURCE_SYSTEM_ID'
502 ,'EGO_AML_INTF'
503 ,'INV_IOI_ERR_SSXID_INVALID_06'--bug 11894684, replace INV_IOI_ERR
504 ,l_err_text);
505 END IF;
506 END LOOP;
507
508 -- R12C:BEGIN
509 FOR i IN c_ssxref_null_assocs LOOP
510 IF i.PROCESS_FLAG = 33379 THEN
511 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
512 l_msg_text := FND_MESSAGE.GET;
513 dumm_status := INVPUOPI.mtl_log_interface_err(
514 i.ORGANIZATION_ID
515 ,l_user_id
516 ,l_login_id
517 ,l_prog_appid
518 ,l_prog_id
519 ,l_request_id
520 ,i.TRANSACTION_ID
521 ,l_msg_text
522 ,'SOURCE_SYSTEM_REFERENCE'
523 ,'EGO_ITEM_ASSOCIATIONS_INTF'
524 ,'INV_IOI_ERR_SSXREF_IS_NULL_07'--bug 11894684, replace INV_IOI_ERR
525 ,l_err_text);
526 ELSIF i.PROCESS_FLAG = 33389 THEN
527 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
528 l_msg_text := FND_MESSAGE.GET;
529 dumm_status := INVPUOPI.mtl_log_interface_err(
530 i.ORGANIZATION_ID
531 ,l_user_id
532 ,l_login_id
533 ,l_prog_appid
534 ,l_prog_id
535 ,l_request_id
536 ,i.TRANSACTION_ID
537 ,l_msg_text
538 ,'SOURCE_SYSTEM_ID'
539 ,'EGO_ITEM_ASSOCIATIONS_INTF'
540 ,'INV_IOI_ERR_SSXID_INVALID_07'--bug 11894684, replace INV_IOI_ERR
541 ,l_err_text);
542 END IF;
543 END LOOP;
544 --R12C: END
545
546 Debug_Conc_Log( 'Err_null_ssxref_ssid - Finished inserting Errors' );
547
548 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
549 SET PROCESS_FLAG =3
550 WHERE PROCESS_FLAG IN (33379, 33389)
551 AND SET_PROCESS_ID = p_data_set_id;
552
553 UPDATE MTL_ITEM_REVISIONS_INTERFACE
554 SET PROCESS_FLAG =3
555 WHERE PROCESS_FLAG IN (33379, 33389)
556 AND SET_PROCESS_ID = p_data_set_id;
557
558 UPDATE MTL_ITEM_CATEGORIES_INTERFACE
559 SET PROCESS_FLAG =3
560 WHERE PROCESS_FLAG IN (33379, 33389)
561 AND SET_PROCESS_ID = p_data_set_id;
562
563 UPDATE EGO_ITM_USR_ATTR_INTRFC
564 SET PROCESS_STATUS =3
565 WHERE PROCESS_STATUS IN (33379, 33389)
566 AND DATA_SET_ID = p_data_set_id;
567
568 UPDATE EGO_ITEM_PEOPLE_INTF
569 SET PROCESS_STATUS =3
570 WHERE PROCESS_STATUS IN (33379, 33389)
571 AND DATA_SET_ID = p_data_set_id;
572
573 UPDATE EGO_AML_INTF
574 SET PROCESS_FLAG =3
575 WHERE PROCESS_FLAG IN (33379, 33389)
576 AND DATA_SET_ID = p_data_set_id;
577 --R12C: BEGIN
578 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
579 SET PROCESS_FLAG =3
580 WHERE PROCESS_FLAG IN (33379, 33389)
581 AND BATCH_ID = p_data_set_id;
582 --R12C:END
583 END Err_null_ssxref_ssid;
584
585 /*
586 * Method to get next item number for a sequence generated item
587 * This method is only for use in Resolve_Child_Entities
588 */
589 FUNCTION GET_NEXT_ITEM_NUMBER(p_catalog_group_id NUMBER) RETURN VARCHAR2 AS
590 l_seq_name MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_SEQ_NAME%TYPE;
591 l_prefix MTL_ITEM_CATALOG_GROUPS_B.PREFIX%TYPE;
592 l_suffix MTL_ITEM_CATALOG_GROUPS_B.SUFFIX%TYPE;
593 l_gen_method MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
594 l_item_number VARCHAR2(2000);
595 l_sql VARCHAR2(2000);
596 BEGIN
597 SELECT ITEM_NUM_SEQ_NAME, PREFIX, SUFFIX, ITEM_NUM_GEN_METHOD
598 INTO l_seq_name, l_prefix, l_suffix, l_gen_method
599 FROM
600 (
601 SELECT ICC.ITEM_NUM_SEQ_NAME, ICC.PREFIX, ICC.SUFFIX, ICC.ITEM_NUM_GEN_METHOD
602 FROM MTL_ITEM_CATALOG_GROUPS_B ICC
603 WHERE ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
604 AND ICC.ITEM_NUM_GEN_METHOD <> 'I'
605 CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
606 START WITH ICC.ITEM_CATALOG_GROUP_ID = p_catalog_group_id
607 ORDER BY LEVEL ASC
608 )
609 WHERE ROWNUM = 1;
610
611 IF 'S' <> l_gen_method THEN
612 Debug_Conc_Log( 'GET_NEXT_ITEM_NUMBER for category-'||p_catalog_group_id||': Generation Method was ' || l_gen_method ||', not S.' );
613 RETURN NULL;
614 END IF;
615
616 l_sql := 'SELECT '''||l_prefix||'''||'||l_seq_name||'.NEXTVAL||'''||l_suffix||''' FROM DUAL';
617 EXECUTE IMMEDIATE l_sql INTO l_item_number;
618
619 RETURN l_item_number;
620 EXCEPTION WHEN OTHERS THEN
621 Debug_Conc_Log( 'Error in - GET_NEXT_ITEM_NUMBER for category-'||p_catalog_group_id||': '||SQLCODE||'-'|| SQLERRM );
622 RETURN NULL;
623 END GET_NEXT_ITEM_NUMBER;
624
625 /*
626 * This method gathers statistics on interface tables, if required
627 */
628 PROCEDURE Gather_Stats_For_Intf_Tables(p_data_set_id IN NUMBER) AS
629 l_records NUMBER;
630 l_status VARCHAR2(1000);
631 l_industry VARCHAR2(1000);
632 l_schema VARCHAR2(1000);
633 l_inv_installed BOOLEAN;
634 l_ego_installed BOOLEAN;
635 --6602290 : Stats gather through profile
636 l_stats_profile NUMBER := NVL(FND_PROFILE.VALUE('EGO_GATHER_STATS'),100);
637 BEGIN
638 Debug_Conc_Log('Starting Gather_Stats_For_Intf_Tables');
639 l_inv_installed := FND_INSTALLATION.GET_APP_INFO('INV', l_status, l_industry, l_schema);
640
641 /* Bug 12669090 : Commenting the Gather Stats.
642 As mentioned in the note 1208945.1 and suggested by performance team,
643 for any performance issues we need to gather stats manualy so no need to gather stats in the code.
644 */
645 /*
646
647 -- checking whether stats needs to be collected on MTL_SYSTEM_ITEMS_INTERFACE
648 SELECT COUNT(1) INTO l_records
649 FROM MTL_SYSTEM_ITEMS_INTERFACE
650 WHERE SET_PROCESS_ID = p_data_set_id;
651
652 l_inv_installed := FND_INSTALLATION.GET_APP_INFO('INV', l_status, l_industry, l_schema);
653 IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
654 FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_SYSTEM_ITEMS_INTERFACE');
655 Debug_Conc_Log('Collected Statistics on MTL_SYSTEM_ITEMS_INTERFACE');
656 END IF;
657
658 -- checking whether stats needs to be collected on MTL_ITEM_REVISIONS_INTERFACE
659 SELECT COUNT(1) INTO l_records
660 FROM MTL_ITEM_REVISIONS_INTERFACE
661 WHERE SET_PROCESS_ID = p_data_set_id;
662
663 IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
664 FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_ITEM_REVISIONS_INTERFACE');
665 Debug_Conc_Log('Collected Statistics on MTL_ITEM_REVISIONS_INTERFACE');
666 END IF;
667 */
668 -- Bug 12669090 : End
669
670 -- checking whether stats needs to be collected on MTL_ITEM_CATEGORIES_INTERFACE
671 SELECT COUNT(1) INTO l_records
672 FROM MTL_ITEM_CATEGORIES_INTERFACE
673 WHERE SET_PROCESS_ID = p_data_set_id;
674
675 IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
676 FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_ITEM_CATEGORIES_INTERFACE');
677 Debug_Conc_Log('Collected Statistics on MTL_ITEM_CATEGORIES_INTERFACE');
678 END IF;
679
680 l_ego_installed := FND_INSTALLATION.GET_APP_INFO('EGO', l_status, l_industry, l_schema);
681 -- checking whether stats needs to be collected on EGO_ITEM_PEOPLE_INTF
682 SELECT COUNT(1) INTO l_records
683 FROM EGO_ITEM_PEOPLE_INTF
684 WHERE DATA_SET_ID = p_data_set_id;
685
686 IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
687 FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITEM_PEOPLE_INTF');
688 Debug_Conc_Log('Collected Statistics on EGO_ITEM_PEOPLE_INTF');
689 END IF;
690
691 -- checking whether stats needs to be collected on EGO_AML_INTF
692 SELECT COUNT(1) INTO l_records
693 FROM EGO_AML_INTF
694 WHERE DATA_SET_ID = p_data_set_id;
695
696 IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
697 FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_AML_INTF');
698 Debug_Conc_Log('Collected Statistics on EGO_AML_INTF');
699 END IF;
700 /* Bug 12669090 : Commenting the Gather Stats.
701 As mentioned in the note 1208945.1 and suggested by performance team,
702 for any performance issues we need to gather stats manualy so no need to gather stats in the code.
703 */
704 /*
705 -- checking whether stats needs to be collected on EGO_ITM_USR_ATTR_INTRFC
706 SELECT COUNT(1) INTO l_records
707 FROM EGO_ITM_USR_ATTR_INTRFC
708 WHERE DATA_SET_ID = p_data_set_id;
709
710 IF (l_records > (l_stats_profile*25)) AND l_ego_installed AND l_schema IS NOT NULL THEN
711 FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITM_USR_ATTR_INTRFC');
712 Debug_Conc_Log('Collected Statistics on EGO_ITM_USR_ATTR_INTRFC');
713 END IF;
714 */
715 -- Bug 12669090 : End
716 -- R12C: BEGIN
717 -- checking whether stats needs to be collected on EGO_ITEM_ASSOCIATIONS_INTF
718
719 SELECT COUNT(1) INTO l_records
720 FROM EGO_ITEM_ASSOCIATIONS_INTF
721 WHERE BATCH_ID = p_data_set_id;
722
723 IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
724 FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITEM_ASSOCIATIONS_INTF');
725 Debug_Conc_Log('Collected Statistics on EGO_ITEM_ASSOCIATIONS_INTF');
726 END IF;
727
728 --R12C: END
729 Debug_Conc_Log('Done Gather_Stats_For_Intf_Tables');
730 EXCEPTION WHEN OTHERS THEN
731 Debug_Conc_Log('Error in Gather_Stats_For_Intf_Tables-'||SQLERRM);
732 END Gather_Stats_For_Intf_Tables;
733
734 --=================================================================================================================--
735 --------------------------------------- Start of Merging Section ----------------------------------------------------
736 --=================================================================================================================--
737 /*
738 * The procedures in this section, both public and private, relate to the task of identifying the rows in various
739 * item interface tables that have the same keys and need to be merged - i.e. collapsed into one row. The result of
740 * the merging operation on a subset of the table should be that there is at most one row for any set of keys.
741 *
742 *
743 * All the MERGE_* procedures take the following arguments:
744 * p_batch_id IN NUMBER =>
745 * The batch identifier (MANDATORY).
746 * p_is_pdh_batch IN FLAG DEFAULT NULL =>
747 * Used to determine the set of keys to use for merging.
748 * - Pass FND_API.G_TRUE to indicate that the batch is a PIMDH batch
749 * - Pass FND_API.G_FALSE to indicate that the batch is a non-PIMDH batch
750 * - If not passed, the batch header will be used to determine whether or not
751 * the batch is a PIMDH batch (absence of a header implies that it is).
752 * p_master_org_id IN NUMBER DEFAULT NULL =>
753 * The ID of the default batch organization, to be used for rows for which neither
754 * ORGANIZATION_ID nor ORGANIZATION_CODE are provided.
755 * If not passed, the ORGANIZATION_ID in the batch header will be used.
756 *
757 * p_commit IN FLAG DEFAULT FND_API.G_FALSE =>
758 * Pass FND_API.G_TRUE to have a COMMIT issued at the end of the procedure.
759 */
760
761 PROCEDURE merge_params_from_batch_header( p_batch_id IN NUMBER
762 , x_is_pdh_batch OUT NOCOPY FLAG
763 , x_master_org_id OUT NOCOPY NUMBER
764 , x_ss_id OUT NOCOPY NUMBER
765 )
766 IS
767 l_org_id NUMBER := NULL;
768 l_ss_id EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE := NULL;
769 BEGIN
770 Debug_Conc_Log( 'Attempting to resolve merge parameters from batch header for batch_id='
771 || to_char( p_batch_id ) );
772 BEGIN
773 SELECT MP.ORGANIZATION_ID,
774 BA.SOURCE_SYSTEM_ID
775 INTO l_org_id
776 , l_ss_id
777 FROM MTL_PARAMETERS MP
778 , EGO_IMPORT_BATCHES_B ba
779 WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID
780 AND BA.BATCH_ID = p_batch_id;
781 EXCEPTION
782 WHEN NO_DATA_FOUND THEN
783 Debug_Conc_Log( 'Batch header not found!' );
784 NULL;
785 END;
786
787 x_ss_id := l_ss_id;
788 Debug_Conc_Log( 'SS ID:' || x_ss_id );
789 x_is_pdh_batch := CASE l_ss_id
790 WHEN NULL THEN FND_API.G_TRUE
791 WHEN get_pdh_source_system_id THEN FND_API.G_TRUE
792 ELSE FND_API.G_FALSE
793 END;
794 Debug_Conc_Log( 'Is PDH Batch:' || x_is_pdh_batch );
795 x_master_org_id := l_org_id;
796 Debug_Conc_Log( 'Master Org ID:' || x_master_org_id );
797
798 Debug_Conc_Log( 'Done resolving merge parameters from batch header' );
799 END merge_params_from_batch_header;
800
801
802 PROCEDURE merge_rev_attrs ( p_batch_id IN NUMBER
803 , p_is_pdh_batch IN FLAG DEFAULT NULL
804 , p_ss_id IN NUMBER DEFAULT NULL
805 , p_master_org_id IN NUMBER DEFAULT NULL
806 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
807 )
808 IS
809 --6468564:Perf issue replacing EGO_ATTRS_V
810 CURSOR c_pdh_target_rev_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE, cp_rev_dl_id NUMBER ) IS
811 SELECT sub.*
812 ,EXT.DATA_TYPE DATA_TYPE_CODE
813 FROM
814 ( SELECT
815 EIUAI.ROWID rid
816 , COUNT( * ) OVER ( PARTITION BY
817 ITEM_NUMBER
818 , ATTR_GROUP_INT_NAME
819 , ATTR_INT_NAME
820 , COALESCE( EIUAI.ORGANIZATION_ID,
821 ( SELECT ORGANIZATION_ID
822 FROM MTL_PARAMETERS P
823 WHERE P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
824 ),
825 ( SELECT ORGANIZATION_ID
826 FROM MTL_ITEM_REVISIONS_B R
827 WHERE R.REVISION_ID = EIUAI.REVISION_ID
828 ),
829 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
830 )
831 , NVL( eiuai.REVISION,
832 ( SELECT r.REVISION
833 FROM MTL_ITEM_REVISIONS_B r
834 WHERE r.REVISION_ID = eiuai.REVISION_ID
835 )
836 )
837 , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
838 )
839 cnt
840 , RANK() OVER ( ORDER BY
841 ITEM_NUMBER
842 , ATTR_GROUP_INT_NAME
843 , ATTR_INT_NAME
844 , COALESCE( EIUAI.ORGANIZATION_ID,
845 ( SELECT ORGANIZATION_ID
846 FROM MTL_PARAMETERS P
847 WHERE P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
848 ),
849 ( SELECT ORGANIZATION_ID
850 FROM MTL_ITEM_REVISIONS_B R
851 WHERE R.REVISION_ID = EIUAI.REVISION_ID
852 ),
853 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
854 )
855 , NVL( eiuai.REVISION,
856 ( SELECT r.REVISION
857 FROM MTL_ITEM_REVISIONS_B r
858 WHERE r.REVISION_ID = eiuai.REVISION_ID
859 )
860 )
861 , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
862 )
863 rnk
864 , eiuai.*
865 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
866 WHERE DATA_SET_ID = p_batch_id
867 AND PROCESS_STATUS = 1
868 AND ITEM_NUMBER IS NOT NULL
869 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
870 AND FL_CTX_EXT.APPLICATION_ID = 431
871 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
872 AND FL_CTX_EXT.MULTI_ROW = 'N'
873 AND EXISTS( SELECT NULL
874 FROM EGO_ATTR_GROUP_DL A
875 WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
876 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
877 )
878 ) sub
879 ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
880 ,EGO_FND_DF_COL_USGS_EXT EXT
881 WHERE sub.CNT > 1
882 AND FL_COL.APPLICATION_ID = 431
883 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
884 AND FL_COL.END_USER_COLUMN_NAME = sub.ATTR_INT_NAME
885 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = SUB.ATTR_GROUP_TYPE
886 AND EXT.APPLICATION_ID = FL_COL.APPLICATION_ID
887 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
888 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
889 AND EXT.APPLICATION_COLUMN_NAME = FL_COL.APPLICATION_COLUMN_NAME
890 ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
891
892 --6468564:Perf issue replacing EGO_ATTRS_V
893 CURSOR c_ss_target_rev_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE, cp_rev_dl_id NUMBER ) IS
894 SELECT sub.*
895 ,EXT.DATA_TYPE DATA_TYPE_CODE
896 FROM
897 ( SELECT
898 EIUAI.ROWID rid
899 , COUNT( * ) OVER ( PARTITION BY
900 SOURCE_SYSTEM_ID
901 , SOURCE_SYSTEM_REFERENCE
902 , ATTR_GROUP_INT_NAME
903 , ATTR_INT_NAME
904 , COALESCE( EIUAI.ORGANIZATION_ID,
905 ( SELECT ORGANIZATION_ID
906 FROM MTL_PARAMETERS P
907 WHERE P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
908 ),
909 ( SELECT ORGANIZATION_ID
910 FROM MTL_ITEM_REVISIONS_B R
911 WHERE R.REVISION_ID = EIUAI.REVISION_ID
912 ),
913 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
914 )
915 , NVL( eiuai.REVISION,
916 ( SELECT r.REVISION
917 FROM MTL_ITEM_REVISIONS_B r
918 WHERE r.REVISION_ID = eiuai.REVISION_ID
919 )
920 )
921 , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
922 )
923 cnt
924 , RANK() OVER ( ORDER BY
925 SOURCE_SYSTEM_ID
926 , SOURCE_SYSTEM_REFERENCE
927 , ATTR_GROUP_INT_NAME
928 , ATTR_INT_NAME
929 , COALESCE( EIUAI.ORGANIZATION_ID,
930 ( SELECT ORGANIZATION_ID
931 FROM MTL_PARAMETERS P
932 WHERE P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
933 ),
934 ( SELECT ORGANIZATION_ID
935 FROM MTL_ITEM_REVISIONS_B R
936 WHERE R.REVISION_ID = EIUAI.REVISION_ID
937 ),
938 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
939 )
940 , NVL( eiuai.REVISION,
941 ( SELECT r.REVISION
942 FROM MTL_ITEM_REVISIONS_B r
943 WHERE r.REVISION_ID = eiuai.REVISION_ID
944 )
945 )
946 , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
947 )
948 rnk
949 , eiuai.*
950 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
951 WHERE DATA_SET_ID = p_batch_id
952 AND PROCESS_STATUS = 0
953 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
954 AND FL_CTX_EXT.APPLICATION_ID = 431
955 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
956 AND FL_CTX_EXT.MULTI_ROW = 'N'
957 AND EXISTS( SELECT NULL
958 FROM EGO_ATTR_GROUP_DL A
959 WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
960 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
961 )
962 ) sub
963 ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
964 ,EGO_FND_DF_COL_USGS_EXT EXT
965 WHERE sub.CNT > 1
966 AND FL_COL.APPLICATION_ID = 431
967 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
968 AND FL_COL.END_USER_COLUMN_NAME = sub.ATTR_INT_NAME
969 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = SUB.ATTR_GROUP_TYPE
970 AND EXT.APPLICATION_ID = FL_COL.APPLICATION_ID
971 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
972 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
973 AND EXT.APPLICATION_COLUMN_NAME = FL_COL.APPLICATION_COLUMN_NAME
974 ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
975
976 TYPE TARGET_ROWS IS TABLE OF c_pdh_target_rev_attrs%ROWTYPE;
977
978 l_merged_rows EIUAI_ROWS;
979 l_merge_base EIUAI_ROW;
980 l_old_rows TARGET_ROWS;
981 l_old_rowids UROWID_TABLE;
982
983 l_ss_id EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
984 l_ssr EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE;
985 l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
986
987 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
988 l_mrow_ix PLS_INTEGER := 0;
989 l_is_pdh_batch BOOLEAN;
990
991 l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
992
993 l_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE := p_master_org_id;
994 l_pdh_batch_flag FLAG := p_is_pdh_batch;
995 l_rev_dl_id NUMBER;
996
997 l_proc_log_prefix CONSTANT VARCHAR2(30) := ' merge_rev_attrs - ';
998 BEGIN
999 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
1000 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
1001 BEGIN
1002 SELECT DATA_LEVEL_ID INTO l_rev_dl_id
1003 FROM EGO_DATA_LEVEL_B
1004 WHERE ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
1005 AND APPLICATION_ID = 431
1006 AND DATA_LEVEL_NAME = 'ITEM_REVISION_LEVEL';
1007 EXCEPTION WHEN NO_DATA_FOUND THEN
1008 RETURN;
1009 END;
1010 Debug_Conc_Log( l_proc_log_prefix || 'l_rev_dl_id: ' || l_rev_dl_id );
1011 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
1012 merge_params_from_batch_header( p_batch_id => p_batch_id
1013 , x_is_pdh_batch => l_pdh_batch_flag
1014 , x_ss_id => l_ss_id
1015 , x_master_org_id => l_org_id
1016 );
1017 END IF;
1018 Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: '|| l_org_id );
1019 Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
1020 Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: '|| l_pdh_batch_flag );
1021
1022 l_is_pdh_batch := ( l_pdh_batch_flag = FND_API.G_TRUE );
1023 IF l_is_pdh_batch THEN
1024 -- DBMS_OUTPUT.PUT_LINE( 'PDH Batch' );
1025 OPEN c_pdh_target_rev_attrs( l_org_id, l_rev_dl_id );
1026 FETCH c_pdh_target_rev_attrs BULK COLLECT INTO l_old_rows;
1027 CLOSE c_pdh_target_rev_attrs;
1028 ELSE
1029 -- DBMS_OUTPUT.PUT_LINE( 'SS Batch' );
1030 OPEN c_ss_target_rev_attrs( l_org_id, l_rev_dl_id );
1031 FETCH c_ss_target_rev_attrs BULK COLLECT INTO l_old_rows;
1032 CLOSE c_ss_target_rev_attrs;
1033 END IF;
1034
1035 Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
1036 IF 0 <> l_old_rows.COUNT THEN
1037 -- attributes common to every merged row
1038 l_merge_base.DATA_SET_ID := p_batch_id;
1039 l_merge_base.PROCESS_STATUS := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1040
1041 l_old_rowids := UROWID_TABLE( );
1042 l_old_rowids.EXTEND( l_old_rows.COUNT );
1043
1044 -- process the item-level attrs
1045 FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
1046 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
1047
1048 IF( l_old_rows( orow_ix ).RNK <> l_cur_rank ) THEN
1049 l_cur_rank := l_old_rows( orow_ix ).RNK;
1050 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
1051 l_mrow_ix := l_mrow_ix + 1;
1052 l_merged_rows( l_mrow_ix ) := l_merge_base;
1053 IF NOT l_is_pdh_batch THEN
1054 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
1055 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
1056 Debug_Conc_Log( l_proc_log_prefix || ' Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1057 END IF;
1058
1059 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_old_rows( orow_ix ).ATTR_GROUP_INT_NAME;
1060 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_old_rows( orow_ix ).ATTR_INT_NAME;
1061 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_old_rows( orow_ix ).DATA_LEVEL_ID;
1062 l_data_type_code := l_old_rows( orow_ix ).DATA_TYPE_CODE;
1063 Debug_Conc_Log( l_proc_log_prefix || ' AttrGroup = ' || l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME
1064 || ', Attr = ' || l_merged_rows( l_mrow_ix ).ATTR_INT_NAME
1065 || ', AttrDataTypeCode = ' || l_data_type_code
1066 );
1067 ELSE
1068 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
1069 END IF;
1070
1071 -- Special Cases:
1072 -- Transaction type
1073 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
1074
1075 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1076 OR l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
1077 THEN
1078 -- CREATE > SYNC > UPDATE : order of case expression matters
1079 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1080 CASE
1081 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1082 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
1083 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1084 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
1085 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1086 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
1087 ELSE NULL -- INVALID transaction types encountered so far ...
1088 END;
1089 END IF;
1090
1091
1092 -- The following columns need to be treated as atomic groups
1093 -- 1. Item Identifier
1094 IF l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID IS NULL
1095 AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER IS NULL
1096 THEN
1097 l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
1098 l_merged_rows( l_mrow_ix ).ITEM_NUMBER := l_old_rows( orow_ix ).ITEM_NUMBER;
1099 END IF;
1100
1101 -- 2. Organization
1102 IF l_merged_rows( l_mrow_ix ).ORGANIZATION_ID IS NULL
1103 AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE IS NULL
1104 THEN
1105 l_merged_rows( l_mrow_ix ).ORGANIZATION_ID := l_old_rows( orow_ix ).ORGANIZATION_ID ;
1106 l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE := l_old_rows( orow_ix ).ORGANIZATION_CODE ;
1107 END IF;
1108
1109 -- 3. Revision
1110
1111 -- 4. The attribute value
1112 IF l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE IS NULL
1113 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR IS NULL
1114 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE IS NULL
1115 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM IS NULL
1116 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM IS NULL
1117 AND l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE IS NULL
1118 THEN
1119 CASE
1120 WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN -- String Attribute
1121 IF l_old_rows( orow_ix ).ATTR_VALUE_STR IS NOT NULL
1122 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1123 THEN
1124 l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR := l_old_rows( orow_ix ).ATTR_VALUE_STR;
1125 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1126 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1127 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1128 END IF;
1129 WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN -- Date Attribute
1130 IF l_old_rows( orow_ix ).ATTR_VALUE_DATE IS NOT NULL
1131 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1132 THEN
1133 l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE := l_old_rows( orow_ix ).ATTR_VALUE_DATE;
1134 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1135 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1136 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1137 END IF;
1138 WHEN l_data_type_code = 'N' THEN -- Num Attribute
1139 IF l_old_rows( orow_ix ).ATTR_VALUE_NUM IS NOT NULL
1140 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1141 THEN
1142 l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM := l_old_rows( orow_ix ).ATTR_VALUE_NUM;
1143 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1144 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1145 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1146 END IF;
1147 END CASE;
1148 END IF;
1149
1150 -- Non-special cased
1151 -- Start Generated Code
1152 /* Generated using:
1153 SET LINESIZE 200
1154 SELECT 'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := l_old_rows( orow_ix ).' || column_name || '; end if; '
1155 FROM ALL_TAB_COLUMNS
1156 WHERE TABLE_NAME = 'EGO_ITM_USR_ATTR_INTRFC'
1157 AND COLUMN_NAME NOT IN
1158 ( -- special cases (for merge)
1159 'INVENTORY_ITEM_ID'
1160 , 'ITEM_NUMBER'
1161 , 'ORGANIZATION_ID'
1162 , 'ORGANIZATION_CODE'
1163 , 'TRANSACTION_TYPE'
1164 , 'ATTR_INT_NAME'
1165 , 'ATTR_GROUP_INT_NAME'
1166 , 'ATTR_DISP_VALUE'
1167 , 'ATTR_VALUE_STR'
1168 , 'ATTR_VALUE_DATE'
1169 , 'ATTR_VALUE_NUM'
1170 , 'ATTR_VALUE_UOM'
1171 , 'ATTR_UOM_DISP_VALUE'
1172 , 'ATTR_GROUP_ID' -- ignore; assume will be filled during processing
1173 -- special columns
1174 , 'DATA_SET_ID'
1175 , 'PROCESS_STATUS'
1176 , 'SOURCE_SYSTEM_ID'
1177 , 'SOURCE_SYSTEM_REFERENCE'
1178 , 'INTERFACE_TABLE_UNIQUE_ID' -- should be handled by INSERT trigger
1179 -- who columns
1180 , 'LAST_UPDATE_DATE'
1181 , 'CREATION_DATE'
1182 , 'CREATED_BY'
1183 , 'LAST_UPDATED_BY'
1184 , 'LAST_UPDATE_LOGIN'
1185 -- XXX: exclude concurrent processing columns?
1186 )
1187 ORDER BY COLUMN_NAME ASC
1188 */
1189 if l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE is null then l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE := l_old_rows( orow_ix ).ATTR_GROUP_TYPE; end if;
1190 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := l_old_rows( orow_ix ).CHANGE_ID; end if;
1191 if l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID := l_old_rows( orow_ix ).CHANGE_LINE_ID; end if;
1192 if l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID is null then l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID := l_old_rows( orow_ix ).ITEM_CATALOG_GROUP_ID; end if;
1193 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := l_old_rows( orow_ix ).PROGRAM_APPLICATION_ID; end if;
1194 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := l_old_rows( orow_ix ).PROGRAM_ID; end if;
1195 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := l_old_rows( orow_ix ).PROGRAM_UPDATE_DATE; end if;
1196 if l_merged_rows( l_mrow_ix ).REVISION is null then l_merged_rows( l_mrow_ix ).REVISION := l_old_rows( orow_ix ).REVISION; end if;
1197 if l_merged_rows( l_mrow_ix ).REVISION_ID is null then l_merged_rows( l_mrow_ix ).REVISION_ID := l_old_rows( orow_ix ).REVISION_ID; end if;
1198 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := l_old_rows( orow_ix ).REQUEST_ID; end if;
1199 if l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER is null then l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_old_rows( orow_ix ).ROW_IDENTIFIER; end if;
1200 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := l_old_rows( orow_ix ).TRANSACTION_ID; end if;
1201 -- End Generated Code
1202 END LOOP; -- loop over old rows
1203
1204 /*
1205 -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
1206 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
1207 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
1208 END IF;
1209 */
1210 IF l_merged_rows IS NOT NULL THEN
1211 -- delete
1212 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
1213 FORALL rid_ix IN INDICES OF l_old_rowids
1214 DELETE FROM EGO_ITM_USR_ATTR_INTRFC
1215 WHERE ROWID = l_old_rowids( rid_ix );
1216 -- insert
1217 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
1218 FORALL row_index IN INDICES OF l_merged_rows
1219 INSERT INTO EGO_ITM_USR_ATTR_INTRFC
1220 VALUES l_merged_rows( row_index );
1221 END IF;
1222 END IF; -- ENDS IF l_old_rows.count <> 0
1223
1224 IF p_commit = FND_API.G_TRUE THEN
1225 Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
1226 COMMIT;
1227 END IF;
1228 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
1229 END merge_rev_attrs;
1230
1231 PROCEDURE merge_item_attrs ( p_batch_id IN NUMBER
1232 , p_is_pdh_batch IN FLAG DEFAULT NULL
1233 , p_ss_id IN NUMBER DEFAULT NULL
1234 , p_master_org_id IN NUMBER DEFAULT NULL
1235 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
1236 )
1237 IS
1238
1239 --6468564:Perf issue replacing EGO_ATTRS_V
1240 CURSOR c_pdh_target_item_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE ) IS
1241 SELECT sub.*
1242 ,EXT.DATA_TYPE DATA_TYPE_CODE
1243 FROM
1244 ( SELECT
1245 eiuai.ROWID rid
1246 , COUNT( * ) OVER ( PARTITION BY
1247 ITEM_NUMBER
1248 , ATTR_GROUP_INT_NAME
1249 , ATTR_INT_NAME
1250 , DATA_LEVEL_ID
1251 , PK1_VALUE
1252 , PK2_VALUE
1253 , PK3_VALUE
1254 , PK4_VALUE
1255 , PK5_VALUE
1256 , COALESCE ( eiuai.ORGANIZATION_ID
1257 , ( SELECT ORGANIZATION_ID
1258 FROM MTL_PARAMETERS p
1259 WHERE p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1260 )
1261 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1262 )
1263 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1264 )
1265 cnt
1266 , RANK() OVER ( ORDER BY
1267 ITEM_NUMBER
1268 , ATTR_GROUP_INT_NAME
1269 , ATTR_INT_NAME
1270 , DATA_LEVEL_ID
1271 , PK1_VALUE
1272 , PK2_VALUE
1273 , PK3_VALUE
1274 , PK4_VALUE
1275 , PK5_VALUE
1276 , COALESCE ( eiuai.ORGANIZATION_ID
1277 , ( SELECT ORGANIZATION_ID
1278 FROM MTL_PARAMETERS p
1279 WHERE p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1280 )
1281 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1282 )
1283 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1284 )
1285 rnk
1286 , eiuai.*
1287 FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
1288 WHERE DATA_SET_ID = p_batch_id
1289 AND PROCESS_STATUS = 1
1290 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1291 AND FL_CTX_EXT.APPLICATION_ID = 431
1292 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
1293 AND FL_CTX_EXT.MULTI_ROW = 'N'
1294 AND EXISTS( SELECT NULL
1295 FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
1296 WHERE DL.APPLICATION_ID = 431
1297 AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
1298 AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
1299 /* Bug:11887867
1300 AND DL.DATA_LEVEL_ID = DL.DATA_LEVEL_ID
1301 */
1302 AND A.DATA_LEVEL_ID = DL.DATA_LEVEL_ID
1303 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
1304 )
1305 ) sub
1306 ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
1307 ,EGO_FND_DF_COL_USGS_EXT EXT
1308 WHERE sub.CNT > 1
1309 AND FL_COL.APPLICATION_ID = 431
1310 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
1311 AND FL_COL.END_USER_COLUMN_NAME = sub.ATTR_INT_NAME
1312 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = SUB.ATTR_GROUP_TYPE
1313 AND EXT.APPLICATION_ID = FL_COL.APPLICATION_ID
1314 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
1315 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
1316 AND EXT.APPLICATION_COLUMN_NAME = FL_COL.APPLICATION_COLUMN_NAME
1317 ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
1318
1319 --6468564 : Perf issue replacing EGO_ATTRS_V
1320 CURSOR c_ss_target_item_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE ) IS
1321 SELECT sub.*
1322 ,EXT.DATA_TYPE DATA_TYPE_CODE
1323 FROM
1324 ( SELECT
1325 EIUAI.ROWID rid
1326 , COUNT( * ) OVER ( PARTITION BY
1327 SOURCE_SYSTEM_ID
1328 , SOURCE_SYSTEM_REFERENCE
1329 , ATTR_GROUP_INT_NAME
1330 , ATTR_INT_NAME
1331 , DATA_LEVEL_ID
1332 , PK1_VALUE
1333 , PK2_VALUE
1334 , PK3_VALUE
1335 , PK4_VALUE
1336 , PK5_VALUE
1337 , COALESCE ( eiuai.ORGANIZATION_ID
1338 , ( SELECT ORGANIZATION_ID
1339 FROM MTL_PARAMETERS p
1340 WHERE p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1341 )
1342 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1343 )
1344 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1345 )
1346 cnt
1347 , RANK() OVER ( ORDER BY
1348 SOURCE_SYSTEM_ID
1349 , SOURCE_SYSTEM_REFERENCE
1350 , ATTR_GROUP_INT_NAME
1351 , ATTR_INT_NAME
1352 , DATA_LEVEL_ID
1353 , PK1_VALUE
1354 , PK2_VALUE
1355 , PK3_VALUE
1356 , PK4_VALUE
1357 , PK5_VALUE
1358 , COALESCE ( eiuai.ORGANIZATION_ID
1359 , ( SELECT ORGANIZATION_ID
1360 FROM MTL_PARAMETERS p
1361 WHERE p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1362 )
1363 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1364 )
1365 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1366 )
1367 rnk
1368 , eiuai.*
1369 FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
1370 WHERE DATA_SET_ID = p_batch_id
1371 AND PROCESS_STATUS = 0
1372 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1373 AND FL_CTX_EXT.APPLICATION_ID = 431
1374 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
1375 AND FL_CTX_EXT.MULTI_ROW = 'N'
1376 AND EXISTS( SELECT NULL
1377 FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
1378 WHERE DL.APPLICATION_ID = 431
1379 AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
1380 AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
1381 /* Bug:11887867
1382 AND DL.DATA_LEVEL_ID = DL.DATA_LEVEL_ID
1383 */
1384 AND A.DATA_LEVEL_ID = DL.DATA_LEVEL_ID
1385 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
1386 )
1387 ) sub
1388 ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
1389 ,EGO_FND_DF_COL_USGS_EXT EXT
1390 WHERE sub.CNT > 1
1391 AND FL_COL.APPLICATION_ID = 431
1392 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
1393 AND FL_COL.END_USER_COLUMN_NAME = sub.ATTR_INT_NAME
1394 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = SUB.ATTR_GROUP_TYPE
1395 AND EXT.APPLICATION_ID = FL_COL.APPLICATION_ID
1396 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
1397 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
1398 AND EXT.APPLICATION_COLUMN_NAME = FL_COL.APPLICATION_COLUMN_NAME
1399 ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
1400
1401 TYPE TARGET_ROWS IS TABLE OF c_ss_target_item_attrs%ROWTYPE;
1402
1403 l_merged_rows EIUAI_ROWS;
1404 l_merge_base EIUAI_ROW;
1405 l_old_rows TARGET_ROWS;
1406 l_old_rowids UROWID_TABLE;
1407
1408 l_ss_id EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
1409 l_ssr EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE;
1410 l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
1411
1412 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
1413 l_mrow_ix PLS_INTEGER := 0;
1414 l_is_pdh_batch BOOLEAN;
1415
1416 l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
1417 l_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE := p_master_org_id;
1418 l_pdh_batch_flag FLAG := p_is_pdh_batch;
1419
1420 l_proc_log_prefix CONSTANT VARCHAR2(30) := ' merge_item_attrs - ';
1421 BEGIN
1422 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
1423 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
1424 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
1425 merge_params_from_batch_header( p_batch_id => p_batch_id
1426 , x_is_pdh_batch => l_pdh_batch_flag
1427 , x_master_org_id => l_org_id
1428 , x_ss_id => l_ss_id
1429 );
1430 END IF;
1431 Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
1432 Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
1433 Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
1434
1435 l_is_pdh_batch := ( l_pdh_batch_flag = FND_API.G_TRUE );
1436 IF l_is_pdh_batch THEN
1437 -- DBMS_OUTPUT.PUT_LINE( 'PDH Batch' );
1438 OPEN c_pdh_target_item_attrs( l_org_id );
1439 FETCH c_pdh_target_item_attrs BULK COLLECT INTO l_old_rows;
1440 CLOSE c_pdh_target_item_attrs;
1441 ELSE
1442 -- DBMS_OUTPUT.PUT_LINE( 'SS Batch' );
1443 OPEN c_ss_target_item_attrs( l_org_id );
1444 FETCH c_ss_target_item_attrs BULK COLLECT INTO l_old_rows;
1445 CLOSE c_ss_target_item_attrs;
1446 END IF;
1447
1448 Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
1449 IF 0 <> l_old_rows.COUNT THEN
1450 -- attributes common to every merged row
1451 l_merge_base.DATA_SET_ID := p_batch_id;
1452 l_merge_base.PROCESS_STATUS := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1453
1454 l_old_rowids := UROWID_TABLE( );
1455 l_old_rowids.EXTEND( l_old_rows.COUNT );
1456
1457 -- process the item-level attrs
1458 FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
1459 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
1460
1461 IF( l_old_rows( orow_ix ).RNK <> l_cur_rank ) THEN
1462 l_cur_rank := l_old_rows( orow_ix ).RNK;
1463 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
1464 l_mrow_ix := l_mrow_ix + 1;
1465 l_merged_rows( l_mrow_ix ) := l_merge_base;
1466 IF NOT l_is_pdh_batch THEN
1467 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
1468 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
1469 Debug_Conc_Log( l_proc_log_prefix || ' Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1470 END IF;
1471
1472 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_old_rows( orow_ix ).ATTR_GROUP_INT_NAME;
1473 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_old_rows( orow_ix ).ATTR_INT_NAME;
1474 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_old_rows( orow_ix ).DATA_LEVEL_ID;
1475 l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME := l_old_rows( orow_ix ).DATA_LEVEL_NAME;
1476 l_merged_rows( l_mrow_ix ).PK1_VALUE := l_old_rows( orow_ix ).PK1_VALUE;
1477 l_merged_rows( l_mrow_ix ).PK2_VALUE := l_old_rows( orow_ix ).PK2_VALUE;
1478 l_merged_rows( l_mrow_ix ).PK3_VALUE := l_old_rows( orow_ix ).PK3_VALUE;
1479 l_merged_rows( l_mrow_ix ).PK4_VALUE := l_old_rows( orow_ix ).PK4_VALUE;
1480 l_merged_rows( l_mrow_ix ).PK5_VALUE := l_old_rows( orow_ix ).PK5_VALUE;
1481 l_data_type_code := l_old_rows( orow_ix ).DATA_TYPE_CODE;
1482 Debug_Conc_Log( l_proc_log_prefix || ' AttrGroup = ' || l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME
1483 || ', Attr = ' || l_merged_rows( l_mrow_ix ).ATTR_INT_NAME
1484 || ', AttrDataTypeCode = ' || l_data_type_code
1485 );
1486 ELSE
1487 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
1488 END IF;
1489
1490 -- Special Cases:
1491 -- Transaction type
1492 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
1493
1494 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1495 OR l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
1496 THEN
1497 -- CREATE > SYNC > UPDATE : order of case expression matters
1498 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1499 CASE
1500 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1501 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
1502 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1503 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
1504 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1505 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
1506 ELSE NULL -- INVALID transaction types encountered so far ...
1507 END;
1508 END IF;
1509
1510
1511 -- The following columns need to be treated as atomic groups
1512 -- 1. Item Identifier
1513 IF l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID IS NULL
1514 AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER IS NULL
1515 THEN
1516 l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
1517 l_merged_rows( l_mrow_ix ).ITEM_NUMBER := l_old_rows( orow_ix ).ITEM_NUMBER;
1518 END IF;
1519
1520 -- 2. Organization
1521 IF l_merged_rows( l_mrow_ix ).ORGANIZATION_ID IS NULL
1522 AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE IS NULL
1523 THEN
1524 l_merged_rows( l_mrow_ix ).ORGANIZATION_ID := l_old_rows( orow_ix ).ORGANIZATION_ID ;
1525 l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE := l_old_rows( orow_ix ).ORGANIZATION_CODE ;
1526 END IF;
1527
1528 -- 3. The attribute value
1529 IF l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE IS NULL
1530 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR IS NULL
1531 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE IS NULL
1532 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM IS NULL
1533 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM IS NULL
1534 AND l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE IS NULL
1535 THEN
1536 CASE
1537 WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN -- String Attribute
1538 IF l_old_rows( orow_ix ).ATTR_VALUE_STR IS NOT NULL
1539 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1540 THEN
1541 l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR := l_old_rows( orow_ix ).ATTR_VALUE_STR;
1542 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1543 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1544 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1545 END IF;
1546 WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN -- Date Attribute
1547 IF l_old_rows( orow_ix ).ATTR_VALUE_DATE IS NOT NULL
1548 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1549 THEN
1550 l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE := l_old_rows( orow_ix ).ATTR_VALUE_DATE;
1551 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1552 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1553 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1554 END IF;
1555 WHEN l_data_type_code = 'N' THEN -- Num Attribute
1556 IF l_old_rows( orow_ix ).ATTR_VALUE_NUM IS NOT NULL
1557 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1558 THEN
1559 l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM := l_old_rows( orow_ix ).ATTR_VALUE_NUM;
1560 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1561 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1562 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1563 END IF;
1564 END CASE;
1565 END IF;
1566
1567 -- Non-special cased
1568 -- Start Generated Code
1569 /* Generated using:
1570 SET LINESIZE 200
1571 SELECT 'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := l_old_rows( orow_ix ).' || column_name || '; end if; '
1572 FROM ALL_TAB_COLUMNS
1573 WHERE TABLE_NAME = 'EGO_ITM_USR_ATTR_INTRFC'
1574 AND COLUMN_NAME NOT IN
1575 ( -- special cases (for merge)
1576 'INVENTORY_ITEM_ID'
1577 , 'ITEM_NUMBER'
1578 , 'ORGANIZATION_ID'
1579 , 'ORGANIZATION_CODE'
1580 , 'TRANSACTION_TYPE'
1581 , 'REVISION_ID' -- ignore for item-level attrs
1582 , 'REVISION' -- ignore for item-level attrs
1583 , 'ATTR_INT_NAME'
1584 , 'ATTR_GROUP_INT_NAME'
1585 , 'ATTR_DISP_VALUE'
1586 , 'ATTR_VALUE_STR'
1587 , 'ATTR_VALUE_DATE'
1588 , 'ATTR_VALUE_NUM'
1589 , 'ATTR_VALUE_UOM'
1590 , 'ATTR_UOM_DISP_VALUE'
1591 , 'ATTR_GROUP_ID' -- ignore; assume will be filled during processing
1592 -- special columns
1593 , 'DATA_SET_ID'
1594 , 'PROCESS_STATUS'
1595 , 'SOURCE_SYSTEM_ID'
1596 , 'SOURCE_SYSTEM_REFERENCE'
1597 , 'INTERFACE_TABLE_UNIQUE_ID' -- should be handled by INSERT trigger
1598 -- who columns
1599 , 'LAST_UPDATE_DATE'
1600 , 'CREATION_DATE'
1601 , 'CREATED_BY'
1602 , 'LAST_UPDATED_BY'
1603 , 'LAST_UPDATE_LOGIN'
1604 -- XXX: exclude concurrent processing columns?
1605 )
1606 ORDER BY COLUMN_NAME ASC
1607 */
1608 if l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE is null then l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE := l_old_rows( orow_ix ).ATTR_GROUP_TYPE; end if;
1609 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := l_old_rows( orow_ix ).CHANGE_ID; end if;
1610 if l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID := l_old_rows( orow_ix ).CHANGE_LINE_ID; end if;
1611 if l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID is null then l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID := l_old_rows( orow_ix ).ITEM_CATALOG_GROUP_ID; end if;
1612 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := l_old_rows( orow_ix ).PROGRAM_APPLICATION_ID; end if;
1613 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := l_old_rows( orow_ix ).PROGRAM_ID; end if;
1614 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := l_old_rows( orow_ix ).PROGRAM_UPDATE_DATE; end if;
1615 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := l_old_rows( orow_ix ).REQUEST_ID; end if;
1616 if l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER is null then l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_old_rows( orow_ix ).ROW_IDENTIFIER; end if;
1617 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := l_old_rows( orow_ix ).TRANSACTION_ID; end if;
1618 -- End Generated Code
1619 END LOOP; -- loop over old rows
1620
1621 /*
1622 -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
1623 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
1624 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
1625 END IF;
1626 */
1627 IF l_merged_rows IS NOT NULL THEN
1628 -- delete
1629 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
1630 FORALL rid_ix IN INDICES OF l_old_rowids
1631 DELETE FROM EGO_ITM_USR_ATTR_INTRFC
1632 WHERE ROWID = l_old_rowids( rid_ix );
1633 -- insert
1634 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
1635 FORALL row_index IN INDICES OF l_merged_rows
1636 INSERT INTO EGO_ITM_USR_ATTR_INTRFC
1637 VALUES l_merged_rows( row_index );
1638 END IF;
1639 END IF; -- ENDS IF l_old_rows.count <> 0
1640
1641 IF p_commit = FND_API.G_TRUE THEN
1642 Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
1643 COMMIT;
1644 END IF;
1645 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
1646 END merge_item_attrs;
1647
1648 PROCEDURE merge_items( p_batch_id IN NUMBER
1649 , p_is_pdh_batch IN FLAG
1650 , p_ss_id IN NUMBER DEFAULT NULL
1651 , p_master_org_id IN NUMBER DEFAULT NULL
1652 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
1653 )
1654 IS
1655 TYPE MSII_ROWS IS TABLE OF MSII_ROW INDEX BY BINARY_INTEGER;
1656
1657 /*
1658 * This cursor is never executed.
1659 * It's only used for type definition.
1660 */
1661 CURSOR c_target_rec_type IS
1662 SELECT ROWID rid
1663 , 0 cnt
1664 , 0 rnk
1665 , 'N' excluded_flag
1666 , msii.*
1667 FROM MTL_SYSTEM_ITEMS_INTERFACE msii;
1668
1669 /*
1670 * Types for fetching the rows to merged.
1671 */
1672 TYPE MSII_CURSOR IS REF CURSOR;
1673 c_target_rows MSII_CURSOR;
1674 old_row c_target_rec_type%ROWTYPE;
1675
1676 l_merged_rows MSII_ROWS;
1677 l_merge_base MSII_ROW;
1678 l_old_rowids UROWID_TABLE;
1679
1680 l_ss_id MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
1681 l_ssr MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
1682 l_candidate_trans MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_TYPE%TYPE;
1683
1684 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
1685 l_mrow_ix PLS_INTEGER := 0;
1686 l_is_pdh_batch BOOLEAN;
1687 l_excluded_flag VARCHAR2(1);
1688
1689 l_org_id MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
1690 l_pdh_batch_flag FLAG := p_is_pdh_batch;
1691 l_proc_log_prefix CONSTANT VARCHAR2( 30 ) := 'merge_items - ';
1692
1693 --bug 14347548 add for compilation error start
1694 l_msg_text VARCHAR2(4000);
1695 dumm_status VARCHAR2(100);
1696 l_user_id NUMBER := FND_GLOBAL.USER_ID;
1697 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
1698 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
1699 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
1700 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
1701 l_err_text VARCHAR2(4000);
1702 --bug 14347548 add for compilation error end
1703
1704
1705 BEGIN
1706 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
1707 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
1708 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
1709 merge_params_from_batch_header( p_batch_id => p_batch_id
1710 , x_is_pdh_batch => l_pdh_batch_flag
1711 , x_master_org_id => l_org_id
1712 , x_ss_id => l_ss_id
1713 );
1714 END IF;
1715 Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
1716 Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
1717 Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
1718
1719 l_is_pdh_batch := ( l_pdh_batch_flag = FND_API.G_TRUE );
1720 IF l_is_pdh_batch THEN
1721 OPEN c_target_rows FOR
1722 SELECT *
1723 FROM
1724 ( SELECT
1725 ROWID rid,
1726 COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER
1727 , ORGANIZATION_ID
1728 )
1729 cnt
1730 , RANK() OVER ( ORDER BY ITEM_NUMBER
1731 , ORGANIZATION_ID
1732 )
1733 rnk
1734 , null EXCLUDED_FLAG
1735 , msii.*
1736 FROM MTL_SYSTEM_ITEMS_INTERFACE msii
1737 WHERE PROCESS_FLAG = 1
1738 AND SET_PROCESS_ID = p_batch_id
1739 AND ( SOURCE_SYSTEM_ID IS NULL
1740 OR SOURCE_SYSTEM_ID = G_PDH_SOURCE_SYSTEM_ID
1741 )
1742 AND ITEM_NUMBER IS NOT NULL
1743 AND ORGANIZATION_ID IS NOT NULL
1744 AND EXISTS ( SELECT NULL
1745 FROM MTL_PARAMETERS mp
1746 WHERE mp.ORGANIZATION_ID = msii.ORGANIZATION_ID
1747 AND mp.MASTER_ORGANIZATION_ID = l_org_id
1748 )
1749 )
1750 sub
1751 WHERE sub.cnt > 1
1752 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
1753 ELSE
1754 OPEN c_target_rows FOR
1755 SELECT *
1756 FROM
1757 ( SELECT
1758 ROWID rid,
1759 COUNT( * ) OVER ( PARTITION BY SOURCE_SYSTEM_ID
1760 , SOURCE_SYSTEM_REFERENCE
1761 , ORGANIZATION_ID
1762 )
1763 cnt
1764 , RANK() OVER ( ORDER BY SOURCE_SYSTEM_ID
1765 , SOURCE_SYSTEM_REFERENCE
1766 , ORGANIZATION_ID
1767 )
1768 rnk
1769 , ( SELECT 'Y' FROM DUAL
1770 WHERE EXISTS (
1771 SELECT NULL FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
1772 WHERE SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
1773 AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
1774 )
1775 )
1776 EXCLUDED_FLAG
1777 , msii.*
1778 FROM MTL_SYSTEM_ITEMS_INTERFACE msii
1779 WHERE PROCESS_FLAG = 0
1780 AND SET_PROCESS_ID = p_batch_id
1781 AND SOURCE_SYSTEM_ID = l_ss_id
1782 AND SOURCE_SYSTEM_REFERENCE IS NOT NULL
1783 AND ORGANIZATION_ID IS NOT NULL
1784 AND EXISTS ( SELECT NULL
1785 FROM MTL_PARAMETERS mp
1786 WHERE mp.ORGANIZATION_ID = msii.ORGANIZATION_ID
1787 AND mp.MASTER_ORGANIZATION_ID = l_org_id
1788 )
1789 )
1790 sub
1791 WHERE sub.cnt > 1
1792 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
1793 END IF;
1794
1795 -- attributes common to every merged row
1796 l_merge_base.SET_PROCESS_ID := p_batch_id;
1797 l_merge_base.PROCESS_FLAG := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1798
1799 l_old_rowids := UROWID_TABLE( );
1800 LOOP
1801 FETCH c_target_rows INTO old_row;
1802 EXIT WHEN c_target_rows%NOTFOUND;
1803
1804 l_old_rowids.EXTEND;
1805 l_old_rowids( l_old_rowids.LAST ) := old_row.RID;
1806
1807 IF( old_row.RNK <> l_cur_rank ) THEN
1808 IF( l_cur_rank <> 0 AND NOT l_is_pdh_batch) THEN
1809 IF( l_merged_rows(l_mrow_ix).CONFIRM_STATUS NOT IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH )
1810 AND l_merged_rows(l_mrow_ix).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE )
1811 THEN
1812 l_merged_rows(l_mrow_ix).CONFIRM_STATUS := G_CONF_NEW;
1813 END IF;
1814 IF( l_excluded_flag IS NOT NULL ) THEN
1815 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
1816 END IF;
1817 END IF; --IF( l_cur_rank <> 0 AND NOT l_is_pdh_batch)
1818
1819 l_cur_rank := old_row.RNK;
1820 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
1821 l_mrow_ix := l_mrow_ix + 1;
1822 l_merged_rows( l_mrow_ix ) := l_merge_base;
1823 IF NOT l_is_pdh_batch THEN
1824 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := old_row.SOURCE_SYSTEM_ID;
1825 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := old_row.SOURCE_SYSTEM_REFERENCE;
1826 Debug_Conc_Log( l_proc_log_prefix || ' Source System Reference: ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1827 ELSE
1828 /* Bug 7662239. Updating SOURCE_SYSTEM_ID if the batch is a PDH batch */
1829 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := old_row.SOURCE_SYSTEM_ID;
1830 END IF;
1831 ELSE
1832 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
1833 END IF;
1834
1835 -- Special Cases:
1836 -- Transaction type
1837 l_candidate_trans := UPPER( old_row.TRANSACTION_TYPE );
1838 l_excluded_flag := old_row.EXCLUDED_FLAG;
1839
1840 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1841 OR l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
1842 THEN
1843 -- CREATE > SYNC > UPDATE : order of case expression matters
1844 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1845 CASE
1846 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1847 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
1848 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1849 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
1850 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1851 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
1852 ELSE NULL -- INVALID transaction types encountered so far ...
1853 END;
1854 END IF;
1855 Debug_Conc_Log('The Old - item columns are - ' || old_row.INVENTORY_ITEM_ID || ' -- ' || old_row.CONFIRM_STATUS );
1856
1857 -- The following columns need to be treated as atomic groups
1858 -- 1. Item Identifier
1859 IF l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID IS NULL
1860 AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER IS NULL
1861 AND l_merged_rows( l_mrow_ix ).SEGMENT1 IS NULL
1862 AND l_merged_rows( l_mrow_ix ).SEGMENT2 IS NULL
1863 AND l_merged_rows( l_mrow_ix ).SEGMENT3 IS NULL
1864 AND l_merged_rows( l_mrow_ix ).SEGMENT4 IS NULL
1865 AND l_merged_rows( l_mrow_ix ).SEGMENT5 IS NULL
1866 AND l_merged_rows( l_mrow_ix ).SEGMENT6 IS NULL
1867 AND l_merged_rows( l_mrow_ix ).SEGMENT7 IS NULL
1868 AND l_merged_rows( l_mrow_ix ).SEGMENT8 IS NULL
1869 AND l_merged_rows( l_mrow_ix ).SEGMENT9 IS NULL
1870 AND l_merged_rows( l_mrow_ix ).SEGMENT10 IS NULL
1871 AND l_merged_rows( l_mrow_ix ).SEGMENT11 IS NULL
1872 AND l_merged_rows( l_mrow_ix ).SEGMENT12 IS NULL
1873 AND l_merged_rows( l_mrow_ix ).SEGMENT13 IS NULL
1874 AND l_merged_rows( l_mrow_ix ).SEGMENT14 IS NULL
1875 AND l_merged_rows( l_mrow_ix ).SEGMENT15 IS NULL
1876 AND l_merged_rows( l_mrow_ix ).SEGMENT16 IS NULL
1877 AND l_merged_rows( l_mrow_ix ).SEGMENT17 IS NULL
1878 AND l_merged_rows( l_mrow_ix ).SEGMENT18 IS NULL
1879 AND l_merged_rows( l_mrow_ix ).SEGMENT19 IS NULL
1880 AND l_merged_rows( l_mrow_ix ).SEGMENT20 IS NULL
1881 THEN
1882 l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID := old_row.INVENTORY_ITEM_ID;
1883 l_merged_rows( l_mrow_ix ).ITEM_NUMBER := old_row.ITEM_NUMBER;
1884 l_merged_rows( l_mrow_ix ).SEGMENT1 := old_row.SEGMENT1;
1885 l_merged_rows( l_mrow_ix ).SEGMENT2 := old_row.SEGMENT2;
1886 l_merged_rows( l_mrow_ix ).SEGMENT3 := old_row.SEGMENT3;
1887 l_merged_rows( l_mrow_ix ).SEGMENT4 := old_row.SEGMENT4;
1888 l_merged_rows( l_mrow_ix ).SEGMENT5 := old_row.SEGMENT5;
1889 l_merged_rows( l_mrow_ix ).SEGMENT6 := old_row.SEGMENT6;
1890 l_merged_rows( l_mrow_ix ).SEGMENT7 := old_row.SEGMENT7;
1891 l_merged_rows( l_mrow_ix ).SEGMENT8 := old_row.SEGMENT8;
1892 l_merged_rows( l_mrow_ix ).SEGMENT9 := old_row.SEGMENT9;
1893 l_merged_rows( l_mrow_ix ).SEGMENT10 := old_row.SEGMENT10;
1894 l_merged_rows( l_mrow_ix ).SEGMENT11 := old_row.SEGMENT11;
1895 l_merged_rows( l_mrow_ix ).SEGMENT12 := old_row.SEGMENT12;
1896 l_merged_rows( l_mrow_ix ).SEGMENT13 := old_row.SEGMENT13;
1897 l_merged_rows( l_mrow_ix ).SEGMENT14 := old_row.SEGMENT14;
1898 l_merged_rows( l_mrow_ix ).SEGMENT15 := old_row.SEGMENT15;
1899 l_merged_rows( l_mrow_ix ).SEGMENT16 := old_row.SEGMENT16;
1900 l_merged_rows( l_mrow_ix ).SEGMENT17 := old_row.SEGMENT17;
1901 l_merged_rows( l_mrow_ix ).SEGMENT18 := old_row.SEGMENT18;
1902 l_merged_rows( l_mrow_ix ).SEGMENT19 := old_row.SEGMENT19;
1903 l_merged_rows( l_mrow_ix ).SEGMENT20 := old_row.SEGMENT20;
1904 -- Copying Confirm Status
1905 -- If confirm_Status is fake make it real else copy the old confirm_status.
1906 IF( old_row.CONFIRM_STATUS = G_CONF_XREF_FAKE ) THEN
1907 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_XREF;
1908 ELSIF ( old_row.CONFIRM_STATUS = G_CONF_MATCH_FAKE ) THEN
1909 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_MATCH;
1910 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_MATCH_READY ) THEN
1911 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_MATCH_READY;
1912 ELSIF ( old_row.CONFIRM_STATUS = G_UNCONF_SINGLE_MATCH_FAKE ) THEN
1913 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_UNCONF_SIGL_MATCH;
1914 ELSIF ( old_row.CONFIRM_STATUS = G_UNCONF_MULTI_MATCH_FAKE ) THEN
1915 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_UNCONF_MULT_MATCH;
1916 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_EXCLUDED ) THEN
1917 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
1918 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG ) THEN
1919 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := NULL;
1920 ELSE
1921 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := old_row.CONFIRM_STATUS;
1922 END IF;
1923 END IF;
1924
1925 Debug_Conc_Log('The merged - item columns are - ' || l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID || ' -- ' || l_merged_rows( l_mrow_ix ).CONFIRM_STATUS );
1926
1927 -- 2. Template Identifier
1928 IF l_merged_rows( l_mrow_ix ).TEMPLATE_ID IS NULL
1929 AND l_merged_rows( l_mrow_ix ).TEMPLATE_NAME IS NULL
1930 THEN
1931 l_merged_rows( l_mrow_ix ).TEMPLATE_ID := old_row.TEMPLATE_ID ;
1932 l_merged_rows( l_mrow_ix ).TEMPLATE_NAME := old_row.TEMPLATE_NAME ;
1933 END IF;
1934
1935 -- 3. Item Catalog Category
1936 IF l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID IS NULL
1937 AND l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_NAME IS NULL
1938 THEN
1939 l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID := old_row.ITEM_CATALOG_GROUP_ID ;
1940 l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_NAME := old_row.ITEM_CATALOG_GROUP_NAME ;
1941 END IF;
1942
1943 -- 4. Primary UOM
1944 IF l_merged_rows( l_mrow_ix ).PRIMARY_UOM_CODE IS NULL
1945 AND l_merged_rows( l_mrow_ix ).PRIMARY_UNIT_OF_MEASURE IS NULL
1946 THEN
1947 l_merged_rows( l_mrow_ix ).PRIMARY_UOM_CODE := old_row.PRIMARY_UOM_CODE ;
1948 l_merged_rows( l_mrow_ix ).PRIMARY_UNIT_OF_MEASURE := old_row.PRIMARY_UNIT_OF_MEASURE ;
1949 END IF;
1950
1951 -- 5. Organization
1952 IF l_merged_rows( l_mrow_ix ).ORGANIZATION_ID IS NULL
1953 AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE IS NULL
1954 THEN
1955 l_merged_rows( l_mrow_ix ).ORGANIZATION_ID := old_row.ORGANIZATION_ID ;
1956 l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE := old_row.ORGANIZATION_CODE ;
1957 END IF;
1958
1959 -- 6. Copy Organization
1960 IF l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_ID IS NULL
1961 AND l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_CODE IS NULL
1962 THEN
1963 l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_ID := old_row.COPY_ORGANIZATION_ID ;
1964 l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_CODE := old_row.COPY_ORGANIZATION_CODE ;
1965 END IF;
1966
1967 -- 7. Merging StyleItemNumber and SytleItemFlag
1968 IF l_merged_rows( l_mrow_ix ).STYLE_ITEM_NUMBER IS NULL
1969 AND l_merged_rows( l_mrow_ix ).STYLE_ITEM_FLAG IS NULL
1970 THEN
1971 l_merged_rows( l_mrow_ix ).STYLE_ITEM_NUMBER := old_row.STYLE_ITEM_NUMBER;
1972 l_merged_rows( l_mrow_ix ).STYLE_ITEM_FLAG := old_row.STYLE_ITEM_FLAG;
1973 END IF;
1974
1975 /* ELETUCHY: commented out due to the regressions this code would introduce
1976 --Bug.5336962 Begin (Nisar) -> Copy Confirm Status
1977 -- If old row that is to be merged is fake, we don't copy the ConfirmStatus or we make confirm status null
1978 -- If old row already have non fake ConfirmStatus we copy it as it is.
1979 IF l_merged_rows( l_mrow_ix ).CONFIRM_STATUS IS NULL
1980 AND old_row.CONFIRM_STATUS NOT IN ('CFC', 'CFM', 'FMR', 'UFS', 'UFM', 'FK', 'FEX')
1981 THEN
1982 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := old_row.CONFIRM_STATUS;
1983 END IF;
1984 --Bug.5336962 End
1985 */
1986
1987 -- Non-special-cased
1988 -- Starting generated code
1989 /* generate using the following script:
1990 SET LINESIZE 200
1991 SELECT 'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := old_row.' || column_name || '; end if; '
1992 FROM ALL_TAB_COLUMNS
1993 WHERE TABLE_NAME = 'MTL_SYSTEM_ITEMS_INTERFACE'
1994 AND COLUMN_NAME NOT IN
1995 ( -- special cases (for merge)
1996 'INVENTORY_ITEM_ID'
1997 , 'ITEM_NUMBER'
1998 , 'SEGMENT1'
1999 , 'SEGMENT2'
2000 , 'SEGMENT3'
2001 , 'SEGMENT4'
2002 , 'SEGMENT5'
2003 , 'SEGMENT6'
2004 , 'SEGMENT7'
2005 , 'SEGMENT8'
2006 , 'SEGMENT9'
2007 , 'SEGMENT10'
2008 , 'SEGMENT11'
2009 , 'SEGMENT12'
2010 , 'SEGMENT13'
2011 , 'SEGMENT14'
2012 , 'SEGMENT15'
2013 , 'SEGMENT16'
2014 , 'SEGMENT17'
2015 , 'SEGMENT18'
2016 , 'SEGMENT19'
2017 , 'SEGMENT20'
2018 , 'TRANSACTION_TYPE'
2019 , 'TEMPLATE_ID'
2020 , 'TEMPLATE_NAME'
2021 , 'ITEM_CATALOG_GROUP_ID'
2022 , 'ITEM_CATALOG_GROUP_NAME'
2023 , 'PRIMARY_UOM_CODE'
2024 , 'PRIMARY_UNIT_OF_MEASURE'
2025 , 'ORGANIZATION_ID'
2026 , 'ORGANIZATION_CODE'
2027 , 'COPY_ORGANIZATION_ID'
2028 , 'COPY_ORGANIZATION_CODE'
2029 -- special columns
2030 , 'SET_PROCESS_ID'
2031 , 'PROCESS_FLAG'
2032 , 'SOURCE_SYSTEM_ID'
2033 , 'SOURCE_SYSTEM_REFERENCE'
2034 , 'INTERFACE_TABLE_UNIQUE_ID' -- handled by INSERT trigger
2035 , 'CONFIRM_STATUS' -- should always be left null after a MERGE is performed
2036 -- who columns
2037 , 'LAST_UPDATE_DATE'
2038 , 'CREATION_DATE'
2039 , 'CREATED_BY'
2040 , 'LAST_UPDATED_BY'
2041 , 'LAST_UPDATE_LOGIN'
2042 -- XXX: exclude concurrent processing columns?
2043 )
2044 order by column_name asc;
2045 */
2046 /* Bug 7662239. Added TRADE_ITEM_DESCRIPTOR to consider it while merging the two rows */
2047 if l_merged_rows( l_mrow_ix ).TRADE_ITEM_DESCRIPTOR is null then l_merged_rows( l_mrow_ix ).TRADE_ITEM_DESCRIPTOR := old_row.TRADE_ITEM_DESCRIPTOR; end if;
2048 if l_merged_rows( l_mrow_ix ).ACCEPTABLE_EARLY_DAYS is null then l_merged_rows( l_mrow_ix ).ACCEPTABLE_EARLY_DAYS := old_row.ACCEPTABLE_EARLY_DAYS; end if;
2049 if l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_DECREASE is null then l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_DECREASE := old_row.ACCEPTABLE_RATE_DECREASE; end if;
2050 if l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_INCREASE is null then l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_INCREASE := old_row.ACCEPTABLE_RATE_INCREASE; end if;
2051 if l_merged_rows( l_mrow_ix ).ACCOUNTING_RULE_ID is null then l_merged_rows( l_mrow_ix ).ACCOUNTING_RULE_ID := old_row.ACCOUNTING_RULE_ID; end if;
2052 if l_merged_rows( l_mrow_ix ).ALLOWED_UNITS_LOOKUP_CODE is null then l_merged_rows( l_mrow_ix ).ALLOWED_UNITS_LOOKUP_CODE := old_row.ALLOWED_UNITS_LOOKUP_CODE; end if;
2053 if l_merged_rows( l_mrow_ix ).ALLOW_EXPRESS_DELIVERY_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_EXPRESS_DELIVERY_FLAG := old_row.ALLOW_EXPRESS_DELIVERY_FLAG; end if;
2054 if l_merged_rows( l_mrow_ix ).ALLOW_ITEM_DESC_UPDATE_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_ITEM_DESC_UPDATE_FLAG := old_row.ALLOW_ITEM_DESC_UPDATE_FLAG; end if;
2055 if l_merged_rows( l_mrow_ix ).ALLOW_SUBSTITUTE_RECEIPTS_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_SUBSTITUTE_RECEIPTS_FLAG := old_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG; end if;
2056 if l_merged_rows( l_mrow_ix ).ALLOW_UNORDERED_RECEIPTS_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_UNORDERED_RECEIPTS_FLAG := old_row.ALLOW_UNORDERED_RECEIPTS_FLAG; end if;
2057 if l_merged_rows( l_mrow_ix ).ASN_AUTOEXPIRE_FLAG is null then l_merged_rows( l_mrow_ix ).ASN_AUTOEXPIRE_FLAG := old_row.ASN_AUTOEXPIRE_FLAG; end if;
2058 if l_merged_rows( l_mrow_ix ).ASSET_CATEGORY_ID is null then l_merged_rows( l_mrow_ix ).ASSET_CATEGORY_ID := old_row.ASSET_CATEGORY_ID; end if;
2059 if l_merged_rows( l_mrow_ix ).ASSET_CREATION_CODE is null then l_merged_rows( l_mrow_ix ).ASSET_CREATION_CODE := old_row.ASSET_CREATION_CODE; end if;
2060 if l_merged_rows( l_mrow_ix ).ATO_FORECAST_CONTROL is null then l_merged_rows( l_mrow_ix ).ATO_FORECAST_CONTROL := old_row.ATO_FORECAST_CONTROL; end if;
2061 if l_merged_rows( l_mrow_ix ).ATP_COMPONENTS_FLAG is null then l_merged_rows( l_mrow_ix ).ATP_COMPONENTS_FLAG := old_row.ATP_COMPONENTS_FLAG; end if;
2062 if l_merged_rows( l_mrow_ix ).ATP_FLAG is null then l_merged_rows( l_mrow_ix ).ATP_FLAG := old_row.ATP_FLAG; end if;
2063 if l_merged_rows( l_mrow_ix ).ATP_RULE_ID is null then l_merged_rows( l_mrow_ix ).ATP_RULE_ID := old_row.ATP_RULE_ID; end if;
2064 if l_merged_rows( l_mrow_ix ).ATTRIBUTE1 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE1 := old_row.ATTRIBUTE1; end if;
2065 if l_merged_rows( l_mrow_ix ).ATTRIBUTE10 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE10 := old_row.ATTRIBUTE10; end if;
2066 if l_merged_rows( l_mrow_ix ).ATTRIBUTE11 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE11 := old_row.ATTRIBUTE11; end if;
2067 if l_merged_rows( l_mrow_ix ).ATTRIBUTE12 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE12 := old_row.ATTRIBUTE12; end if;
2068 if l_merged_rows( l_mrow_ix ).ATTRIBUTE13 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE13 := old_row.ATTRIBUTE13; end if;
2069 if l_merged_rows( l_mrow_ix ).ATTRIBUTE14 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE14 := old_row.ATTRIBUTE14; end if;
2070 if l_merged_rows( l_mrow_ix ).ATTRIBUTE15 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE15 := old_row.ATTRIBUTE15; end if;
2071 if l_merged_rows( l_mrow_ix ).ATTRIBUTE16 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE16 := old_row.ATTRIBUTE16; end if;
2072 if l_merged_rows( l_mrow_ix ).ATTRIBUTE17 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE17 := old_row.ATTRIBUTE17; end if;
2073 if l_merged_rows( l_mrow_ix ).ATTRIBUTE18 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE18 := old_row.ATTRIBUTE18; end if;
2074 if l_merged_rows( l_mrow_ix ).ATTRIBUTE19 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE19 := old_row.ATTRIBUTE19; end if;
2075 if l_merged_rows( l_mrow_ix ).ATTRIBUTE2 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE2 := old_row.ATTRIBUTE2; end if;
2076 if l_merged_rows( l_mrow_ix ).ATTRIBUTE20 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE20 := old_row.ATTRIBUTE20; end if;
2077 if l_merged_rows( l_mrow_ix ).ATTRIBUTE21 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE21 := old_row.ATTRIBUTE21; end if;
2078 if l_merged_rows( l_mrow_ix ).ATTRIBUTE22 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE22 := old_row.ATTRIBUTE22; end if;
2079 if l_merged_rows( l_mrow_ix ).ATTRIBUTE23 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE23 := old_row.ATTRIBUTE23; end if;
2080 if l_merged_rows( l_mrow_ix ).ATTRIBUTE24 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE24 := old_row.ATTRIBUTE24; end if;
2081 if l_merged_rows( l_mrow_ix ).ATTRIBUTE25 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE25 := old_row.ATTRIBUTE25; end if;
2082 if l_merged_rows( l_mrow_ix ).ATTRIBUTE26 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE26 := old_row.ATTRIBUTE26; end if;
2083 if l_merged_rows( l_mrow_ix ).ATTRIBUTE27 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE27 := old_row.ATTRIBUTE27; end if;
2084 if l_merged_rows( l_mrow_ix ).ATTRIBUTE28 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE28 := old_row.ATTRIBUTE28; end if;
2085 if l_merged_rows( l_mrow_ix ).ATTRIBUTE29 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE29 := old_row.ATTRIBUTE29; end if;
2086 if l_merged_rows( l_mrow_ix ).ATTRIBUTE3 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE3 := old_row.ATTRIBUTE3; end if;
2087 if l_merged_rows( l_mrow_ix ).ATTRIBUTE30 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE30 := old_row.ATTRIBUTE30; end if;
2088 if l_merged_rows( l_mrow_ix ).ATTRIBUTE4 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE4 := old_row.ATTRIBUTE4; end if;
2089 if l_merged_rows( l_mrow_ix ).ATTRIBUTE5 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE5 := old_row.ATTRIBUTE5; end if;
2090 if l_merged_rows( l_mrow_ix ).ATTRIBUTE6 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE6 := old_row.ATTRIBUTE6; end if;
2091 if l_merged_rows( l_mrow_ix ).ATTRIBUTE7 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE7 := old_row.ATTRIBUTE7; end if;
2092 if l_merged_rows( l_mrow_ix ).ATTRIBUTE8 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE8 := old_row.ATTRIBUTE8; end if;
2093 if l_merged_rows( l_mrow_ix ).ATTRIBUTE9 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE9 := old_row.ATTRIBUTE9; end if;
2094 if l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY := old_row.ATTRIBUTE_CATEGORY; end if;
2095 if l_merged_rows( l_mrow_ix ).AUTO_CREATED_CONFIG_FLAG is null then l_merged_rows( l_mrow_ix ).AUTO_CREATED_CONFIG_FLAG := old_row.AUTO_CREATED_CONFIG_FLAG; end if;
2096 if l_merged_rows( l_mrow_ix ).AUTO_LOT_ALPHA_PREFIX is null then l_merged_rows( l_mrow_ix ).AUTO_LOT_ALPHA_PREFIX := old_row.AUTO_LOT_ALPHA_PREFIX; end if;
2097 if l_merged_rows( l_mrow_ix ).AUTO_REDUCE_MPS is null then l_merged_rows( l_mrow_ix ).AUTO_REDUCE_MPS := old_row.AUTO_REDUCE_MPS; end if;
2098 if l_merged_rows( l_mrow_ix ).AUTO_SERIAL_ALPHA_PREFIX is null then l_merged_rows( l_mrow_ix ).AUTO_SERIAL_ALPHA_PREFIX := old_row.AUTO_SERIAL_ALPHA_PREFIX; end if;
2099 if l_merged_rows( l_mrow_ix ).BACK_ORDERABLE_FLAG is null then l_merged_rows( l_mrow_ix ).BACK_ORDERABLE_FLAG := old_row.BACK_ORDERABLE_FLAG; end if;
2100 if l_merged_rows( l_mrow_ix ).BASE_ITEM_ID is null then l_merged_rows( l_mrow_ix ).BASE_ITEM_ID := old_row.BASE_ITEM_ID; end if;
2101 if l_merged_rows( l_mrow_ix ).BASE_WARRANTY_SERVICE_ID is null then l_merged_rows( l_mrow_ix ).BASE_WARRANTY_SERVICE_ID := old_row.BASE_WARRANTY_SERVICE_ID; end if;
2102 if l_merged_rows( l_mrow_ix ).BOM_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).BOM_ENABLED_FLAG := old_row.BOM_ENABLED_FLAG; end if;
2103 if l_merged_rows( l_mrow_ix ).BOM_ITEM_TYPE is null then l_merged_rows( l_mrow_ix ).BOM_ITEM_TYPE := old_row.BOM_ITEM_TYPE; end if;
2104 if l_merged_rows( l_mrow_ix ).BUILD_IN_WIP_FLAG is null then l_merged_rows( l_mrow_ix ).BUILD_IN_WIP_FLAG := old_row.BUILD_IN_WIP_FLAG; end if;
2105 if l_merged_rows( l_mrow_ix ).BULK_PICKED_FLAG is null then l_merged_rows( l_mrow_ix ).BULK_PICKED_FLAG := old_row.BULK_PICKED_FLAG; end if;
2106 if l_merged_rows( l_mrow_ix ).BUYER_ID is null then l_merged_rows( l_mrow_ix ).BUYER_ID := old_row.BUYER_ID; end if;
2107 if l_merged_rows( l_mrow_ix ).CARRYING_COST is null then l_merged_rows( l_mrow_ix ).CARRYING_COST := old_row.CARRYING_COST; end if;
2108 if l_merged_rows( l_mrow_ix ).CAS_NUMBER is null then l_merged_rows( l_mrow_ix ).CAS_NUMBER := old_row.CAS_NUMBER; end if;
2109 if l_merged_rows( l_mrow_ix ).CATALOG_STATUS_FLAG is null then l_merged_rows( l_mrow_ix ).CATALOG_STATUS_FLAG := old_row.CATALOG_STATUS_FLAG; end if;
2110 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := old_row.CHANGE_ID; end if;
2111 if l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID := old_row.CHANGE_LINE_ID; end if;
2112 if l_merged_rows( l_mrow_ix ).CHARGE_PERIODICITY_CODE is null then l_merged_rows( l_mrow_ix ).CHARGE_PERIODICITY_CODE := old_row.CHARGE_PERIODICITY_CODE; end if;
2113 if l_merged_rows( l_mrow_ix ).CHECK_SHORTAGES_FLAG is null then l_merged_rows( l_mrow_ix ).CHECK_SHORTAGES_FLAG := old_row.CHECK_SHORTAGES_FLAG; end if;
2114 if l_merged_rows( l_mrow_ix ).CHILD_LOT_FLAG is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_FLAG := old_row.CHILD_LOT_FLAG; end if;
2115 if l_merged_rows( l_mrow_ix ).CHILD_LOT_PREFIX is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_PREFIX := old_row.CHILD_LOT_PREFIX; end if;
2116 if l_merged_rows( l_mrow_ix ).CHILD_LOT_STARTING_NUMBER is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_STARTING_NUMBER := old_row.CHILD_LOT_STARTING_NUMBER; end if;
2117 if l_merged_rows( l_mrow_ix ).CHILD_LOT_VALIDATION_FLAG is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_VALIDATION_FLAG := old_row.CHILD_LOT_VALIDATION_FLAG; end if;
2118 if l_merged_rows( l_mrow_ix ).COLLATERAL_FLAG is null then l_merged_rows( l_mrow_ix ).COLLATERAL_FLAG := old_row.COLLATERAL_FLAG; end if;
2119 if l_merged_rows( l_mrow_ix ).COMMS_ACTIVATION_REQD_FLAG is null then l_merged_rows( l_mrow_ix ).COMMS_ACTIVATION_REQD_FLAG := old_row.COMMS_ACTIVATION_REQD_FLAG; end if;
2120 if l_merged_rows( l_mrow_ix ).COMMS_NL_TRACKABLE_FLAG is null then l_merged_rows( l_mrow_ix ).COMMS_NL_TRACKABLE_FLAG := old_row.COMMS_NL_TRACKABLE_FLAG; end if;
2121 if l_merged_rows( l_mrow_ix ).CONFIG_MATCH is null then l_merged_rows( l_mrow_ix ).CONFIG_MATCH := old_row.CONFIG_MATCH; end if;
2122 if l_merged_rows( l_mrow_ix ).CONFIG_MODEL_TYPE is null then l_merged_rows( l_mrow_ix ).CONFIG_MODEL_TYPE := old_row.CONFIG_MODEL_TYPE; end if;
2123 if l_merged_rows( l_mrow_ix ).CONFIG_ORGS is null then l_merged_rows( l_mrow_ix ).CONFIG_ORGS := old_row.CONFIG_ORGS; end if;
2124 if l_merged_rows( l_mrow_ix ).CONSIGNED_FLAG is null then l_merged_rows( l_mrow_ix ).CONSIGNED_FLAG := old_row.CONSIGNED_FLAG; end if;
2125 if l_merged_rows( l_mrow_ix ).CONTAINER_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).CONTAINER_ITEM_FLAG := old_row.CONTAINER_ITEM_FLAG; end if;
2126 if l_merged_rows( l_mrow_ix ).CONTAINER_TYPE_CODE is null then l_merged_rows( l_mrow_ix ).CONTAINER_TYPE_CODE := old_row.CONTAINER_TYPE_CODE; end if;
2127 if l_merged_rows( l_mrow_ix ).CONTINOUS_TRANSFER is null then l_merged_rows( l_mrow_ix ).CONTINOUS_TRANSFER := old_row.CONTINOUS_TRANSFER; end if;
2128 if l_merged_rows( l_mrow_ix ).CONTRACT_ITEM_TYPE_CODE is null then l_merged_rows( l_mrow_ix ).CONTRACT_ITEM_TYPE_CODE := old_row.CONTRACT_ITEM_TYPE_CODE; end if;
2129 if l_merged_rows( l_mrow_ix ).CONVERGENCE is null then l_merged_rows( l_mrow_ix ).CONVERGENCE := old_row.CONVERGENCE; end if;
2130 if l_merged_rows( l_mrow_ix ).COPY_ITEM_ID is null then l_merged_rows( l_mrow_ix ).COPY_ITEM_ID := old_row.COPY_ITEM_ID; end if;
2131 if l_merged_rows( l_mrow_ix ).COPY_ITEM_NUMBER is null then l_merged_rows( l_mrow_ix ).COPY_ITEM_NUMBER := old_row.COPY_ITEM_NUMBER; end if;
2132 if l_merged_rows( l_mrow_ix ).COPY_LOT_ATTRIBUTE_FLAG is null then l_merged_rows( l_mrow_ix ).COPY_LOT_ATTRIBUTE_FLAG := old_row.COPY_LOT_ATTRIBUTE_FLAG; end if;
2133 if l_merged_rows( l_mrow_ix ).COSTING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).COSTING_ENABLED_FLAG := old_row.COSTING_ENABLED_FLAG; end if;
2134 if l_merged_rows( l_mrow_ix ).COST_OF_SALES_ACCOUNT is null then l_merged_rows( l_mrow_ix ).COST_OF_SALES_ACCOUNT := old_row.COST_OF_SALES_ACCOUNT; end if;
2135 if l_merged_rows( l_mrow_ix ).COUPON_EXEMPT_FLAG is null then l_merged_rows( l_mrow_ix ).COUPON_EXEMPT_FLAG := old_row.COUPON_EXEMPT_FLAG; end if;
2136 if l_merged_rows( l_mrow_ix ).COVERAGE_SCHEDULE_ID is null then l_merged_rows( l_mrow_ix ).COVERAGE_SCHEDULE_ID := old_row.COVERAGE_SCHEDULE_ID; end if;
2137 if l_merged_rows( l_mrow_ix ).CREATE_SUPPLY_FLAG is null then l_merged_rows( l_mrow_ix ).CREATE_SUPPLY_FLAG := old_row.CREATE_SUPPLY_FLAG; end if;
2138 if l_merged_rows( l_mrow_ix ).CRITICAL_COMPONENT_FLAG is null then l_merged_rows( l_mrow_ix ).CRITICAL_COMPONENT_FLAG := old_row.CRITICAL_COMPONENT_FLAG; end if;
2139 if l_merged_rows( l_mrow_ix ).CUMULATIVE_TOTAL_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).CUMULATIVE_TOTAL_LEAD_TIME := old_row.CUMULATIVE_TOTAL_LEAD_TIME; end if;
2140 if l_merged_rows( l_mrow_ix ).CUM_MANUFACTURING_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).CUM_MANUFACTURING_LEAD_TIME := old_row.CUM_MANUFACTURING_LEAD_TIME; end if;
2141 if l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID is null then l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID := old_row.CURRENT_PHASE_ID; end if;
2142 if l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_ENABLED_FLAG := old_row.CUSTOMER_ORDER_ENABLED_FLAG; end if;
2143 if l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_FLAG is null then l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_FLAG := old_row.CUSTOMER_ORDER_FLAG; end if;
2144 if l_merged_rows( l_mrow_ix ).CYCLE_COUNT_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).CYCLE_COUNT_ENABLED_FLAG := old_row.CYCLE_COUNT_ENABLED_FLAG; end if;
2145 if l_merged_rows( l_mrow_ix ).DAYS_EARLY_RECEIPT_ALLOWED is null then l_merged_rows( l_mrow_ix ).DAYS_EARLY_RECEIPT_ALLOWED := old_row.DAYS_EARLY_RECEIPT_ALLOWED; end if;
2146 if l_merged_rows( l_mrow_ix ).DAYS_LATE_RECEIPT_ALLOWED is null then l_merged_rows( l_mrow_ix ).DAYS_LATE_RECEIPT_ALLOWED := old_row.DAYS_LATE_RECEIPT_ALLOWED; end if;
2147 if l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_SUPPLY is null then l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_SUPPLY := old_row.DAYS_MAX_INV_SUPPLY; end if;
2148 if l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_WINDOW is null then l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_WINDOW := old_row.DAYS_MAX_INV_WINDOW; end if;
2149 if l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_SUPPLY is null then l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_SUPPLY := old_row.DAYS_TGT_INV_SUPPLY; end if;
2150 if l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_WINDOW is null then l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_WINDOW := old_row.DAYS_TGT_INV_WINDOW; end if;
2151 if l_merged_rows( l_mrow_ix ).DEFAULT_GRADE is null then l_merged_rows( l_mrow_ix ).DEFAULT_GRADE := old_row.DEFAULT_GRADE; end if;
2152 if l_merged_rows( l_mrow_ix ).DEFAULT_INCLUDE_IN_ROLLUP_FLAG is null then l_merged_rows( l_mrow_ix ).DEFAULT_INCLUDE_IN_ROLLUP_FLAG := old_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG; end if;
2153 if l_merged_rows( l_mrow_ix ).DEFAULT_LOT_STATUS_ID is null then l_merged_rows( l_mrow_ix ).DEFAULT_LOT_STATUS_ID := old_row.DEFAULT_LOT_STATUS_ID; end if;
2154 if l_merged_rows( l_mrow_ix ).DEFAULT_SERIAL_STATUS_ID is null then l_merged_rows( l_mrow_ix ).DEFAULT_SERIAL_STATUS_ID := old_row.DEFAULT_SERIAL_STATUS_ID; end if;
2155 if l_merged_rows( l_mrow_ix ).DEFAULT_SHIPPING_ORG is null then l_merged_rows( l_mrow_ix ).DEFAULT_SHIPPING_ORG := old_row.DEFAULT_SHIPPING_ORG; end if;
2156 if l_merged_rows( l_mrow_ix ).DEFAULT_SO_SOURCE_TYPE is null then l_merged_rows( l_mrow_ix ).DEFAULT_SO_SOURCE_TYPE := old_row.DEFAULT_SO_SOURCE_TYPE; end if;
2157 if l_merged_rows( l_mrow_ix ).DEFECT_TRACKING_ON_FLAG is null then l_merged_rows( l_mrow_ix ).DEFECT_TRACKING_ON_FLAG := old_row.DEFECT_TRACKING_ON_FLAG; end if;
2158 if l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_HEADER_ID is null then l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_HEADER_ID := old_row.DEMAND_SOURCE_HEADER_ID; end if;
2159 if l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_LINE is null then l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_LINE := old_row.DEMAND_SOURCE_LINE; end if;
2160 if l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_TYPE is null then l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_TYPE := old_row.DEMAND_SOURCE_TYPE; end if;
2161 if l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_CODE is null then l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_CODE := old_row.DEMAND_TIME_FENCE_CODE; end if;
2162 if l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_DAYS is null then l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_DAYS := old_row.DEMAND_TIME_FENCE_DAYS; end if;
2163 if l_merged_rows( l_mrow_ix ).DESCRIPTION is null then l_merged_rows( l_mrow_ix ).DESCRIPTION := old_row.DESCRIPTION; end if;
2164 if l_merged_rows( l_mrow_ix ).DIMENSION_UOM_CODE is null then l_merged_rows( l_mrow_ix ).DIMENSION_UOM_CODE := old_row.DIMENSION_UOM_CODE; end if;
2165 if l_merged_rows( l_mrow_ix ).DIVERGENCE is null then l_merged_rows( l_mrow_ix ).DIVERGENCE := old_row.DIVERGENCE; end if;
2166 if l_merged_rows( l_mrow_ix ).DOWNLOADABLE_FLAG is null then l_merged_rows( l_mrow_ix ).DOWNLOADABLE_FLAG := old_row.DOWNLOADABLE_FLAG; end if;
2167 if l_merged_rows( l_mrow_ix ).DRP_PLANNED_FLAG is null then l_merged_rows( l_mrow_ix ).DRP_PLANNED_FLAG := old_row.DRP_PLANNED_FLAG; end if;
2168 if l_merged_rows( l_mrow_ix ).DUAL_UOM_CONTROL is null then l_merged_rows( l_mrow_ix ).DUAL_UOM_CONTROL := old_row.DUAL_UOM_CONTROL; end if;
2169 if l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_HIGH is null then l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_HIGH := old_row.DUAL_UOM_DEVIATION_HIGH; end if;
2170 if l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_LOW is null then l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_LOW := old_row.DUAL_UOM_DEVIATION_LOW; end if;
2171 if l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_CAUSE_CODE is null then l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_CAUSE_CODE := old_row.EAM_ACTIVITY_CAUSE_CODE; end if;
2172 if l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_SOURCE_CODE is null then l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_SOURCE_CODE := old_row.EAM_ACTIVITY_SOURCE_CODE; end if;
2173 if l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_TYPE_CODE is null then l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_TYPE_CODE := old_row.EAM_ACTIVITY_TYPE_CODE; end if;
2174 if l_merged_rows( l_mrow_ix ).EAM_ACT_NOTIFICATION_FLAG is null then l_merged_rows( l_mrow_ix ).EAM_ACT_NOTIFICATION_FLAG := old_row.EAM_ACT_NOTIFICATION_FLAG; end if;
2175 if l_merged_rows( l_mrow_ix ).EAM_ACT_SHUTDOWN_STATUS is null then l_merged_rows( l_mrow_ix ).EAM_ACT_SHUTDOWN_STATUS := old_row.EAM_ACT_SHUTDOWN_STATUS; end if;
2176 if l_merged_rows( l_mrow_ix ).EAM_ITEM_TYPE is null then l_merged_rows( l_mrow_ix ).EAM_ITEM_TYPE := old_row.EAM_ITEM_TYPE; end if;
2177 if l_merged_rows( l_mrow_ix ).EFFECTIVITY_CONTROL is null then l_merged_rows( l_mrow_ix ).EFFECTIVITY_CONTROL := old_row.EFFECTIVITY_CONTROL; end if;
2178 if l_merged_rows( l_mrow_ix ).ELECTRONIC_FLAG is null then l_merged_rows( l_mrow_ix ).ELECTRONIC_FLAG := old_row.ELECTRONIC_FLAG; end if;
2179 if l_merged_rows( l_mrow_ix ).ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).ENABLED_FLAG := old_row.ENABLED_FLAG; end if;
2180 if l_merged_rows( l_mrow_ix ).ENCUMBRANCE_ACCOUNT is null then l_merged_rows( l_mrow_ix ).ENCUMBRANCE_ACCOUNT := old_row.ENCUMBRANCE_ACCOUNT; end if;
2181 if l_merged_rows( l_mrow_ix ).END_ASSEMBLY_PEGGING_FLAG is null then l_merged_rows( l_mrow_ix ).END_ASSEMBLY_PEGGING_FLAG := old_row.END_ASSEMBLY_PEGGING_FLAG; end if;
2182 if l_merged_rows( l_mrow_ix ).END_DATE_ACTIVE is null then l_merged_rows( l_mrow_ix ).END_DATE_ACTIVE := old_row.END_DATE_ACTIVE; end if;
2183 if l_merged_rows( l_mrow_ix ).ENFORCE_SHIP_TO_LOCATION_CODE is null then l_merged_rows( l_mrow_ix ).ENFORCE_SHIP_TO_LOCATION_CODE := old_row.ENFORCE_SHIP_TO_LOCATION_CODE; end if;
2184 if l_merged_rows( l_mrow_ix ).ENGINEERING_DATE is null then l_merged_rows( l_mrow_ix ).ENGINEERING_DATE := old_row.ENGINEERING_DATE; end if;
2185 if l_merged_rows( l_mrow_ix ).ENGINEERING_ECN_CODE is null then l_merged_rows( l_mrow_ix ).ENGINEERING_ECN_CODE := old_row.ENGINEERING_ECN_CODE; end if;
2186 if l_merged_rows( l_mrow_ix ).ENGINEERING_ITEM_ID is null then l_merged_rows( l_mrow_ix ).ENGINEERING_ITEM_ID := old_row.ENGINEERING_ITEM_ID; end if;
2187 if l_merged_rows( l_mrow_ix ).ENG_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).ENG_ITEM_FLAG := old_row.ENG_ITEM_FLAG; end if;
2188 if l_merged_rows( l_mrow_ix ).EQUIPMENT_TYPE is null then l_merged_rows( l_mrow_ix ).EQUIPMENT_TYPE := old_row.EQUIPMENT_TYPE; end if;
2189 if l_merged_rows( l_mrow_ix ).EVENT_FLAG is null then l_merged_rows( l_mrow_ix ).EVENT_FLAG := old_row.EVENT_FLAG; end if;
2190 if l_merged_rows( l_mrow_ix ).EXCLUDE_FROM_BUDGET_FLAG is null then l_merged_rows( l_mrow_ix ).EXCLUDE_FROM_BUDGET_FLAG := old_row.EXCLUDE_FROM_BUDGET_FLAG; end if;
2191 if l_merged_rows( l_mrow_ix ).EXPENSE_ACCOUNT is null then l_merged_rows( l_mrow_ix ).EXPENSE_ACCOUNT := old_row.EXPENSE_ACCOUNT; end if;
2192 if l_merged_rows( l_mrow_ix ).EXPENSE_BILLABLE_FLAG is null then l_merged_rows( l_mrow_ix ).EXPENSE_BILLABLE_FLAG := old_row.EXPENSE_BILLABLE_FLAG; end if;
2193 if l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_CODE is null then l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_CODE := old_row.EXPIRATION_ACTION_CODE; end if;
2194 if l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_INTERVAL is null then l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_INTERVAL := old_row.EXPIRATION_ACTION_INTERVAL; end if;
2195 if l_merged_rows( l_mrow_ix ).FINANCING_ALLOWED_FLAG is null then l_merged_rows( l_mrow_ix ).FINANCING_ALLOWED_FLAG := old_row.FINANCING_ALLOWED_FLAG; end if;
2196 if l_merged_rows( l_mrow_ix ).FIXED_DAYS_SUPPLY is null then l_merged_rows( l_mrow_ix ).FIXED_DAYS_SUPPLY := old_row.FIXED_DAYS_SUPPLY; end if;
2197 if l_merged_rows( l_mrow_ix ).FIXED_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).FIXED_LEAD_TIME := old_row.FIXED_LEAD_TIME; end if;
2198 if l_merged_rows( l_mrow_ix ).FIXED_LOT_MULTIPLIER is null then l_merged_rows( l_mrow_ix ).FIXED_LOT_MULTIPLIER := old_row.FIXED_LOT_MULTIPLIER; end if;
2199 if l_merged_rows( l_mrow_ix ).FIXED_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).FIXED_ORDER_QUANTITY := old_row.FIXED_ORDER_QUANTITY; end if;
2200 if l_merged_rows( l_mrow_ix ).FORECAST_HORIZON is null then l_merged_rows( l_mrow_ix ).FORECAST_HORIZON := old_row.FORECAST_HORIZON; end if;
2201 if l_merged_rows( l_mrow_ix ).FULL_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).FULL_LEAD_TIME := old_row.FULL_LEAD_TIME; end if;
2202 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE1 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE1 := old_row.GLOBAL_ATTRIBUTE1; end if;
2203 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE10 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE10 := old_row.GLOBAL_ATTRIBUTE10; end if;
2204 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE2 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE2 := old_row.GLOBAL_ATTRIBUTE2; end if;
2205 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE3 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE3 := old_row.GLOBAL_ATTRIBUTE3; end if;
2206 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE4 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE4 := old_row.GLOBAL_ATTRIBUTE4; end if;
2207 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE5 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE5 := old_row.GLOBAL_ATTRIBUTE5; end if;
2208 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE6 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE6 := old_row.GLOBAL_ATTRIBUTE6; end if;
2209 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE7 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE7 := old_row.GLOBAL_ATTRIBUTE7; end if;
2210 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE8 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE8 := old_row.GLOBAL_ATTRIBUTE8; end if;
2211 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE9 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE9 := old_row.GLOBAL_ATTRIBUTE9; end if;
2212 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE_CATEGORY is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE_CATEGORY := old_row.GLOBAL_ATTRIBUTE_CATEGORY; end if;
2213 if l_merged_rows( l_mrow_ix ).GLOBAL_TRADE_ITEM_NUMBER is null then l_merged_rows( l_mrow_ix ).GLOBAL_TRADE_ITEM_NUMBER := old_row.GLOBAL_TRADE_ITEM_NUMBER; end if;
2214 if l_merged_rows( l_mrow_ix ).GRADE_CONTROL_FLAG is null then l_merged_rows( l_mrow_ix ).GRADE_CONTROL_FLAG := old_row.GRADE_CONTROL_FLAG; end if;
2215 if l_merged_rows( l_mrow_ix ).GTIN_DESCRIPTION is null then l_merged_rows( l_mrow_ix ).GTIN_DESCRIPTION := old_row.GTIN_DESCRIPTION; end if;
2216 if l_merged_rows( l_mrow_ix ).HAZARDOUS_MATERIAL_FLAG is null then l_merged_rows( l_mrow_ix ).HAZARDOUS_MATERIAL_FLAG := old_row.HAZARDOUS_MATERIAL_FLAG; end if;
2217 if l_merged_rows( l_mrow_ix ).HAZARD_CLASS_ID is null then l_merged_rows( l_mrow_ix ).HAZARD_CLASS_ID := old_row.HAZARD_CLASS_ID; end if;
2218 if l_merged_rows( l_mrow_ix ).HOLD_DAYS is null then l_merged_rows( l_mrow_ix ).HOLD_DAYS := old_row.HOLD_DAYS; end if;
2219 if l_merged_rows( l_mrow_ix ).IB_ITEM_INSTANCE_CLASS is null then l_merged_rows( l_mrow_ix ).IB_ITEM_INSTANCE_CLASS := old_row.IB_ITEM_INSTANCE_CLASS; end if;
2220 if l_merged_rows( l_mrow_ix ).INDIVISIBLE_FLAG is null then l_merged_rows( l_mrow_ix ).INDIVISIBLE_FLAG := old_row.INDIVISIBLE_FLAG; end if;
2221 if l_merged_rows( l_mrow_ix ).INSPECTION_REQUIRED_FLAG is null then l_merged_rows( l_mrow_ix ).INSPECTION_REQUIRED_FLAG := old_row.INSPECTION_REQUIRED_FLAG; end if;
2222 if l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_ENABLED_FLAG := old_row.INTERNAL_ORDER_ENABLED_FLAG; end if;
2223 if l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_FLAG is null then l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_FLAG := old_row.INTERNAL_ORDER_FLAG; end if;
2224 if l_merged_rows( l_mrow_ix ).INTERNAL_VOLUME is null then l_merged_rows( l_mrow_ix ).INTERNAL_VOLUME := old_row.INTERNAL_VOLUME; end if;
2225 if l_merged_rows( l_mrow_ix ).INVENTORY_ASSET_FLAG is null then l_merged_rows( l_mrow_ix ).INVENTORY_ASSET_FLAG := old_row.INVENTORY_ASSET_FLAG; end if;
2226 if l_merged_rows( l_mrow_ix ).INVENTORY_CARRY_PENALTY is null then l_merged_rows( l_mrow_ix ).INVENTORY_CARRY_PENALTY := old_row.INVENTORY_CARRY_PENALTY; end if;
2227 if l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_FLAG := old_row.INVENTORY_ITEM_FLAG; end if;
2228 if l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_STATUS_CODE is null then l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_STATUS_CODE := old_row.INVENTORY_ITEM_STATUS_CODE; end if;
2229 if l_merged_rows( l_mrow_ix ).INVENTORY_PLANNING_CODE is null then l_merged_rows( l_mrow_ix ).INVENTORY_PLANNING_CODE := old_row.INVENTORY_PLANNING_CODE; end if;
2230 if l_merged_rows( l_mrow_ix ).INVOICEABLE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).INVOICEABLE_ITEM_FLAG := old_row.INVOICEABLE_ITEM_FLAG; end if;
2231 if l_merged_rows( l_mrow_ix ).INVOICE_CLOSE_TOLERANCE is null then l_merged_rows( l_mrow_ix ).INVOICE_CLOSE_TOLERANCE := old_row.INVOICE_CLOSE_TOLERANCE; end if;
2232 if l_merged_rows( l_mrow_ix ).INVOICE_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).INVOICE_ENABLED_FLAG := old_row.INVOICE_ENABLED_FLAG; end if;
2233 if l_merged_rows( l_mrow_ix ).INVOICING_RULE_ID is null then l_merged_rows( l_mrow_ix ).INVOICING_RULE_ID := old_row.INVOICING_RULE_ID; end if;
2234 if l_merged_rows( l_mrow_ix ).ITEM_TYPE is null then l_merged_rows( l_mrow_ix ).ITEM_TYPE := old_row.ITEM_TYPE; end if;
2235 if l_merged_rows( l_mrow_ix ).LEAD_TIME_LOT_SIZE is null then l_merged_rows( l_mrow_ix ).LEAD_TIME_LOT_SIZE := old_row.LEAD_TIME_LOT_SIZE; end if;
2236 if l_merged_rows( l_mrow_ix ).LIFECYCLE_ID is null then l_merged_rows( l_mrow_ix ).LIFECYCLE_ID := old_row.LIFECYCLE_ID; end if;
2237 if l_merged_rows( l_mrow_ix ).LIST_PRICE_PER_UNIT is null then l_merged_rows( l_mrow_ix ).LIST_PRICE_PER_UNIT := old_row.LIST_PRICE_PER_UNIT; end if;
2238 if l_merged_rows( l_mrow_ix ).LOCATION_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).LOCATION_CONTROL_CODE := old_row.LOCATION_CONTROL_CODE; end if;
2239 if l_merged_rows( l_mrow_ix ).LONG_DESCRIPTION is null then l_merged_rows( l_mrow_ix ).LONG_DESCRIPTION := old_row.LONG_DESCRIPTION; end if;
2240 if l_merged_rows( l_mrow_ix ).LOT_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).LOT_CONTROL_CODE := old_row.LOT_CONTROL_CODE; end if;
2241 if l_merged_rows( l_mrow_ix ).LOT_DIVISIBLE_FLAG is null then l_merged_rows( l_mrow_ix ).LOT_DIVISIBLE_FLAG := old_row.LOT_DIVISIBLE_FLAG; end if;
2242 if l_merged_rows( l_mrow_ix ).LOT_MERGE_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_MERGE_ENABLED := old_row.LOT_MERGE_ENABLED; end if;
2243 if l_merged_rows( l_mrow_ix ).LOT_SPLIT_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_SPLIT_ENABLED := old_row.LOT_SPLIT_ENABLED; end if;
2244 if l_merged_rows( l_mrow_ix ).LOT_STATUS_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_STATUS_ENABLED := old_row.LOT_STATUS_ENABLED; end if;
2245 if l_merged_rows( l_mrow_ix ).LOT_SUBSTITUTION_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_SUBSTITUTION_ENABLED := old_row.LOT_SUBSTITUTION_ENABLED; end if;
2246 if l_merged_rows( l_mrow_ix ).LOT_TRANSLATE_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_TRANSLATE_ENABLED := old_row.LOT_TRANSLATE_ENABLED; end if;
2247 if l_merged_rows( l_mrow_ix ).MARKET_PRICE is null then l_merged_rows( l_mrow_ix ).MARKET_PRICE := old_row.MARKET_PRICE; end if;
2248 if l_merged_rows( l_mrow_ix ).MATERIAL_BILLABLE_FLAG is null then l_merged_rows( l_mrow_ix ).MATERIAL_BILLABLE_FLAG := old_row.MATERIAL_BILLABLE_FLAG; end if;
2249 if l_merged_rows( l_mrow_ix ).MATERIAL_COST is null then l_merged_rows( l_mrow_ix ).MATERIAL_COST := old_row.MATERIAL_COST; end if;
2250 if l_merged_rows( l_mrow_ix ).MATERIAL_OH_RATE is null then l_merged_rows( l_mrow_ix ).MATERIAL_OH_RATE := old_row.MATERIAL_OH_RATE; end if;
2251 if l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM is null then l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM := old_row.MATERIAL_OH_SUB_ELEM; end if;
2252 if l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM_ID is null then l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM_ID := old_row.MATERIAL_OH_SUB_ELEM_ID; end if;
2253 if l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM is null then l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM := old_row.MATERIAL_SUB_ELEM; end if;
2254 if l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM_ID is null then l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM_ID := old_row.MATERIAL_SUB_ELEM_ID; end if;
2255 if l_merged_rows( l_mrow_ix ).MATURITY_DAYS is null then l_merged_rows( l_mrow_ix ).MATURITY_DAYS := old_row.MATURITY_DAYS; end if;
2256 if l_merged_rows( l_mrow_ix ).MAXIMUM_LOAD_WEIGHT is null then l_merged_rows( l_mrow_ix ).MAXIMUM_LOAD_WEIGHT := old_row.MAXIMUM_LOAD_WEIGHT; end if;
2257 if l_merged_rows( l_mrow_ix ).MAXIMUM_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).MAXIMUM_ORDER_QUANTITY := old_row.MAXIMUM_ORDER_QUANTITY; end if;
2258 if l_merged_rows( l_mrow_ix ).MAX_MINMAX_QUANTITY is null then l_merged_rows( l_mrow_ix ).MAX_MINMAX_QUANTITY := old_row.MAX_MINMAX_QUANTITY; end if;
2259 if l_merged_rows( l_mrow_ix ).MAX_WARRANTY_AMOUNT is null then l_merged_rows( l_mrow_ix ).MAX_WARRANTY_AMOUNT := old_row.MAX_WARRANTY_AMOUNT; end if;
2260 if l_merged_rows( l_mrow_ix ).MINIMUM_FILL_PERCENT is null then l_merged_rows( l_mrow_ix ).MINIMUM_FILL_PERCENT := old_row.MINIMUM_FILL_PERCENT; end if;
2261 if l_merged_rows( l_mrow_ix ).MINIMUM_LICENSE_QUANTITY is null then l_merged_rows( l_mrow_ix ).MINIMUM_LICENSE_QUANTITY := old_row.MINIMUM_LICENSE_QUANTITY; end if;
2262 if l_merged_rows( l_mrow_ix ).MINIMUM_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).MINIMUM_ORDER_QUANTITY := old_row.MINIMUM_ORDER_QUANTITY; end if;
2263 if l_merged_rows( l_mrow_ix ).MIN_MINMAX_QUANTITY is null then l_merged_rows( l_mrow_ix ).MIN_MINMAX_QUANTITY := old_row.MIN_MINMAX_QUANTITY; end if;
2264 if l_merged_rows( l_mrow_ix ).MODEL_CONFIG_CLAUSE_NAME is null then l_merged_rows( l_mrow_ix ).MODEL_CONFIG_CLAUSE_NAME := old_row.MODEL_CONFIG_CLAUSE_NAME; end if;
2265 if l_merged_rows( l_mrow_ix ).MRP_CALCULATE_ATP_FLAG is null then l_merged_rows( l_mrow_ix ).MRP_CALCULATE_ATP_FLAG := old_row.MRP_CALCULATE_ATP_FLAG; end if;
2266 if l_merged_rows( l_mrow_ix ).MRP_PLANNING_CODE is null then l_merged_rows( l_mrow_ix ).MRP_PLANNING_CODE := old_row.MRP_PLANNING_CODE; end if;
2267 if l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_CODE is null then l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_CODE := old_row.MRP_SAFETY_STOCK_CODE; end if;
2268 if l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_PERCENT is null then l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_PERCENT := old_row.MRP_SAFETY_STOCK_PERCENT; end if;
2269 if l_merged_rows( l_mrow_ix ).MTL_TRANSACTIONS_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).MTL_TRANSACTIONS_ENABLED_FLAG := old_row.MTL_TRANSACTIONS_ENABLED_FLAG; end if;
2270 if l_merged_rows( l_mrow_ix ).MUST_USE_APPROVED_VENDOR_FLAG is null then l_merged_rows( l_mrow_ix ).MUST_USE_APPROVED_VENDOR_FLAG := old_row.MUST_USE_APPROVED_VENDOR_FLAG; end if;
2271 if l_merged_rows( l_mrow_ix ).NEGATIVE_MEASUREMENT_ERROR is null then l_merged_rows( l_mrow_ix ).NEGATIVE_MEASUREMENT_ERROR := old_row.NEGATIVE_MEASUREMENT_ERROR; end if;
2272 if l_merged_rows( l_mrow_ix ).NEW_REVISION_CODE is null then l_merged_rows( l_mrow_ix ).NEW_REVISION_CODE := old_row.NEW_REVISION_CODE; end if;
2273 if l_merged_rows( l_mrow_ix ).ONT_PRICING_QTY_SOURCE is null then l_merged_rows( l_mrow_ix ).ONT_PRICING_QTY_SOURCE := old_row.ONT_PRICING_QTY_SOURCE; end if;
2274 if l_merged_rows( l_mrow_ix ).OPERATION_SLACK_PENALTY is null then l_merged_rows( l_mrow_ix ).OPERATION_SLACK_PENALTY := old_row.OPERATION_SLACK_PENALTY; end if;
2275 if l_merged_rows( l_mrow_ix ).ORDERABLE_ON_WEB_FLAG is null then l_merged_rows( l_mrow_ix ).ORDERABLE_ON_WEB_FLAG := old_row.ORDERABLE_ON_WEB_FLAG; end if;
2276 if l_merged_rows( l_mrow_ix ).ORDER_COST is null then l_merged_rows( l_mrow_ix ).ORDER_COST := old_row.ORDER_COST; end if;
2277 if l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_FLAG is null then l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_FLAG := old_row.OUTSIDE_OPERATION_FLAG; end if;
2278 if l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_UOM_TYPE is null then l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_UOM_TYPE := old_row.OUTSIDE_OPERATION_UOM_TYPE; end if;
2279 if l_merged_rows( l_mrow_ix ).OUTSOURCED_ASSEMBLY is null then l_merged_rows( l_mrow_ix ).OUTSOURCED_ASSEMBLY := old_row.OUTSOURCED_ASSEMBLY; end if;
2280 if l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_TYPE is null then l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_TYPE := old_row.OVERCOMPLETION_TOLERANCE_TYPE; end if;
2281 if l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_VALUE is null then l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_VALUE := old_row.OVERCOMPLETION_TOLERANCE_VALUE; end if;
2282 if l_merged_rows( l_mrow_ix ).OVERRUN_PERCENTAGE is null then l_merged_rows( l_mrow_ix ).OVERRUN_PERCENTAGE := old_row.OVERRUN_PERCENTAGE; end if;
2283 if l_merged_rows( l_mrow_ix ).OVER_RETURN_TOLERANCE is null then l_merged_rows( l_mrow_ix ).OVER_RETURN_TOLERANCE := old_row.OVER_RETURN_TOLERANCE; end if;
2284 if l_merged_rows( l_mrow_ix ).OVER_SHIPMENT_TOLERANCE is null then l_merged_rows( l_mrow_ix ).OVER_SHIPMENT_TOLERANCE := old_row.OVER_SHIPMENT_TOLERANCE; end if;
2285 if l_merged_rows( l_mrow_ix ).PARENT_CHILD_GENERATION_FLAG is null then l_merged_rows( l_mrow_ix ).PARENT_CHILD_GENERATION_FLAG := old_row.PARENT_CHILD_GENERATION_FLAG; end if;
2286 if l_merged_rows( l_mrow_ix ).PAYMENT_TERMS_ID is null then l_merged_rows( l_mrow_ix ).PAYMENT_TERMS_ID := old_row.PAYMENT_TERMS_ID; end if;
2287 if l_merged_rows( l_mrow_ix ).PICKING_RULE_ID is null then l_merged_rows( l_mrow_ix ).PICKING_RULE_ID := old_row.PICKING_RULE_ID; end if;
2288 if l_merged_rows( l_mrow_ix ).PICK_COMPONENTS_FLAG is null then l_merged_rows( l_mrow_ix ).PICK_COMPONENTS_FLAG := old_row.PICK_COMPONENTS_FLAG; end if;
2289 if l_merged_rows( l_mrow_ix ).PLANNED_INV_POINT_FLAG is null then l_merged_rows( l_mrow_ix ).PLANNED_INV_POINT_FLAG := old_row.PLANNED_INV_POINT_FLAG; end if;
2290 if l_merged_rows( l_mrow_ix ).PLANNER_CODE is null then l_merged_rows( l_mrow_ix ).PLANNER_CODE := old_row.PLANNER_CODE; end if;
2291 if l_merged_rows( l_mrow_ix ).PLANNING_EXCEPTION_SET is null then l_merged_rows( l_mrow_ix ).PLANNING_EXCEPTION_SET := old_row.PLANNING_EXCEPTION_SET; end if;
2292 if l_merged_rows( l_mrow_ix ).PLANNING_MAKE_BUY_CODE is null then l_merged_rows( l_mrow_ix ).PLANNING_MAKE_BUY_CODE := old_row.PLANNING_MAKE_BUY_CODE; end if;
2293 if l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_CODE is null then l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_CODE := old_row.PLANNING_TIME_FENCE_CODE; end if;
2294 if l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_DAYS is null then l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_DAYS := old_row.PLANNING_TIME_FENCE_DAYS; end if;
2295 if l_merged_rows( l_mrow_ix ).POSITIVE_MEASUREMENT_ERROR is null then l_merged_rows( l_mrow_ix ).POSITIVE_MEASUREMENT_ERROR := old_row.POSITIVE_MEASUREMENT_ERROR; end if;
2296 if l_merged_rows( l_mrow_ix ).POSTPROCESSING_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).POSTPROCESSING_LEAD_TIME := old_row.POSTPROCESSING_LEAD_TIME; end if;
2297 if l_merged_rows( l_mrow_ix ).PREPOSITION_POINT is null then l_merged_rows( l_mrow_ix ).PREPOSITION_POINT := old_row.PREPOSITION_POINT; end if;
2298 if l_merged_rows( l_mrow_ix ).PREPROCESSING_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).PREPROCESSING_LEAD_TIME := old_row.PREPROCESSING_LEAD_TIME; end if;
2299 if l_merged_rows( l_mrow_ix ).PREVENTIVE_MAINTENANCE_FLAG is null then l_merged_rows( l_mrow_ix ).PREVENTIVE_MAINTENANCE_FLAG := old_row.PREVENTIVE_MAINTENANCE_FLAG; end if;
2300 if l_merged_rows( l_mrow_ix ).PRICE_TOLERANCE_PERCENT is null then l_merged_rows( l_mrow_ix ).PRICE_TOLERANCE_PERCENT := old_row.PRICE_TOLERANCE_PERCENT; end if;
2301 if l_merged_rows( l_mrow_ix ).PRIMARY_SPECIALIST_ID is null then l_merged_rows( l_mrow_ix ).PRIMARY_SPECIALIST_ID := old_row.PRIMARY_SPECIALIST_ID; end if;
2302 if l_merged_rows( l_mrow_ix ).PROCESS_COSTING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PROCESS_COSTING_ENABLED_FLAG := old_row.PROCESS_COSTING_ENABLED_FLAG; end if;
2303 if l_merged_rows( l_mrow_ix ).PROCESS_EXECUTION_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PROCESS_EXECUTION_ENABLED_FLAG := old_row.PROCESS_EXECUTION_ENABLED_FLAG; end if;
2304 if l_merged_rows( l_mrow_ix ).PROCESS_QUALITY_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PROCESS_QUALITY_ENABLED_FLAG := old_row.PROCESS_QUALITY_ENABLED_FLAG; end if;
2305 if l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_LOCATOR_ID is null then l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_LOCATOR_ID := old_row.PROCESS_SUPPLY_LOCATOR_ID; end if;
2306 if l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_SUBINVENTORY := old_row.PROCESS_SUPPLY_SUBINVENTORY; end if;
2307 if l_merged_rows( l_mrow_ix ).PROCESS_YIELD_LOCATOR_ID is null then l_merged_rows( l_mrow_ix ).PROCESS_YIELD_LOCATOR_ID := old_row.PROCESS_YIELD_LOCATOR_ID; end if;
2308 if l_merged_rows( l_mrow_ix ).PROCESS_YIELD_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).PROCESS_YIELD_SUBINVENTORY := old_row.PROCESS_YIELD_SUBINVENTORY; end if;
2309 if l_merged_rows( l_mrow_ix ).PRODUCT_FAMILY_ITEM_ID is null then l_merged_rows( l_mrow_ix ).PRODUCT_FAMILY_ITEM_ID := old_row.PRODUCT_FAMILY_ITEM_ID; end if;
2310 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := old_row.PROGRAM_APPLICATION_ID; end if;
2311 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := old_row.PROGRAM_ID; end if;
2312 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := old_row.PROGRAM_UPDATE_DATE; end if;
2313 if l_merged_rows( l_mrow_ix ).PRORATE_SERVICE_FLAG is null then l_merged_rows( l_mrow_ix ).PRORATE_SERVICE_FLAG := old_row.PRORATE_SERVICE_FLAG; end if;
2314 if l_merged_rows( l_mrow_ix ).PURCHASING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PURCHASING_ENABLED_FLAG := old_row.PURCHASING_ENABLED_FLAG; end if;
2315 if l_merged_rows( l_mrow_ix ).PURCHASING_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).PURCHASING_ITEM_FLAG := old_row.PURCHASING_ITEM_FLAG; end if;
2316 if l_merged_rows( l_mrow_ix ).PURCHASING_TAX_CODE is null then l_merged_rows( l_mrow_ix ).PURCHASING_TAX_CODE := old_row.PURCHASING_TAX_CODE; end if;
2317 if l_merged_rows( l_mrow_ix ).QTY_RCV_EXCEPTION_CODE is null then l_merged_rows( l_mrow_ix ).QTY_RCV_EXCEPTION_CODE := old_row.QTY_RCV_EXCEPTION_CODE; end if;
2318 if l_merged_rows( l_mrow_ix ).QTY_RCV_TOLERANCE is null then l_merged_rows( l_mrow_ix ).QTY_RCV_TOLERANCE := old_row.QTY_RCV_TOLERANCE; end if;
2319 if l_merged_rows( l_mrow_ix ).RECEIPT_DAYS_EXCEPTION_CODE is null then l_merged_rows( l_mrow_ix ).RECEIPT_DAYS_EXCEPTION_CODE := old_row.RECEIPT_DAYS_EXCEPTION_CODE; end if;
2320 if l_merged_rows( l_mrow_ix ).RECEIPT_REQUIRED_FLAG is null then l_merged_rows( l_mrow_ix ).RECEIPT_REQUIRED_FLAG := old_row.RECEIPT_REQUIRED_FLAG; end if;
2321 if l_merged_rows( l_mrow_ix ).RECEIVE_CLOSE_TOLERANCE is null then l_merged_rows( l_mrow_ix ).RECEIVE_CLOSE_TOLERANCE := old_row.RECEIVE_CLOSE_TOLERANCE; end if;
2322 if l_merged_rows( l_mrow_ix ).RECEIVING_ROUTING_ID is null then l_merged_rows( l_mrow_ix ).RECEIVING_ROUTING_ID := old_row.RECEIVING_ROUTING_ID; end if;
2323 if l_merged_rows( l_mrow_ix ).RECIPE_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).RECIPE_ENABLED_FLAG := old_row.RECIPE_ENABLED_FLAG; end if;
2324 if l_merged_rows( l_mrow_ix ).RECOVERED_PART_DISP_CODE is null then l_merged_rows( l_mrow_ix ).RECOVERED_PART_DISP_CODE := old_row.RECOVERED_PART_DISP_CODE; end if;
2325 if l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_CODE is null then l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_CODE := old_row.RELEASE_TIME_FENCE_CODE; end if;
2326 if l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_DAYS is null then l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_DAYS := old_row.RELEASE_TIME_FENCE_DAYS; end if;
2327 if l_merged_rows( l_mrow_ix ).REPAIR_LEADTIME is null then l_merged_rows( l_mrow_ix ).REPAIR_LEADTIME := old_row.REPAIR_LEADTIME; end if;
2328 if l_merged_rows( l_mrow_ix ).REPAIR_PROGRAM is null then l_merged_rows( l_mrow_ix ).REPAIR_PROGRAM := old_row.REPAIR_PROGRAM; end if;
2329 if l_merged_rows( l_mrow_ix ).REPAIR_YIELD is null then l_merged_rows( l_mrow_ix ).REPAIR_YIELD := old_row.REPAIR_YIELD; end if;
2330 if l_merged_rows( l_mrow_ix ).REPETITIVE_PLANNING_FLAG is null then l_merged_rows( l_mrow_ix ).REPETITIVE_PLANNING_FLAG := old_row.REPETITIVE_PLANNING_FLAG; end if;
2331 if l_merged_rows( l_mrow_ix ).REPLENISH_TO_ORDER_FLAG is null then l_merged_rows( l_mrow_ix ).REPLENISH_TO_ORDER_FLAG := old_row.REPLENISH_TO_ORDER_FLAG; end if;
2332 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := old_row.REQUEST_ID; end if;
2333 if l_merged_rows( l_mrow_ix ).RESERVABLE_TYPE is null then l_merged_rows( l_mrow_ix ).RESERVABLE_TYPE := old_row.RESERVABLE_TYPE; end if;
2334 if l_merged_rows( l_mrow_ix ).RESPONSE_TIME_PERIOD_CODE is null then l_merged_rows( l_mrow_ix ).RESPONSE_TIME_PERIOD_CODE := old_row.RESPONSE_TIME_PERIOD_CODE; end if;
2335 if l_merged_rows( l_mrow_ix ).RESPONSE_TIME_VALUE is null then l_merged_rows( l_mrow_ix ).RESPONSE_TIME_VALUE := old_row.RESPONSE_TIME_VALUE; end if;
2336 if l_merged_rows( l_mrow_ix ).RESTRICT_LOCATORS_CODE is null then l_merged_rows( l_mrow_ix ).RESTRICT_LOCATORS_CODE := old_row.RESTRICT_LOCATORS_CODE; end if;
2337 if l_merged_rows( l_mrow_ix ).RESTRICT_SUBINVENTORIES_CODE is null then l_merged_rows( l_mrow_ix ).RESTRICT_SUBINVENTORIES_CODE := old_row.RESTRICT_SUBINVENTORIES_CODE; end if;
2338 if l_merged_rows( l_mrow_ix ).RETEST_INTERVAL is null then l_merged_rows( l_mrow_ix ).RETEST_INTERVAL := old_row.RETEST_INTERVAL; end if;
2339 if l_merged_rows( l_mrow_ix ).RETURNABLE_FLAG is null then l_merged_rows( l_mrow_ix ).RETURNABLE_FLAG := old_row.RETURNABLE_FLAG; end if;
2340 if l_merged_rows( l_mrow_ix ).RETURN_INSPECTION_REQUIREMENT is null then l_merged_rows( l_mrow_ix ).RETURN_INSPECTION_REQUIREMENT := old_row.RETURN_INSPECTION_REQUIREMENT; end if;
2341 if l_merged_rows( l_mrow_ix ).REVISION is null then l_merged_rows( l_mrow_ix ).REVISION := old_row.REVISION; end if;
2342 if l_merged_rows( l_mrow_ix ).REVISION_IMPORT_POLICY is null then l_merged_rows( l_mrow_ix ).REVISION_IMPORT_POLICY := old_row.REVISION_IMPORT_POLICY; end if;
2343 if l_merged_rows( l_mrow_ix ).REVISION_QTY_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).REVISION_QTY_CONTROL_CODE := old_row.REVISION_QTY_CONTROL_CODE; end if;
2344 if l_merged_rows( l_mrow_ix ).RFQ_REQUIRED_FLAG is null then l_merged_rows( l_mrow_ix ).RFQ_REQUIRED_FLAG := old_row.RFQ_REQUIRED_FLAG; end if;
2345 if l_merged_rows( l_mrow_ix ).ROUNDING_CONTROL_TYPE is null then l_merged_rows( l_mrow_ix ).ROUNDING_CONTROL_TYPE := old_row.ROUNDING_CONTROL_TYPE; end if;
2346 if l_merged_rows( l_mrow_ix ).ROUNDING_FACTOR is null then l_merged_rows( l_mrow_ix ).ROUNDING_FACTOR := old_row.ROUNDING_FACTOR; end if;
2347 if l_merged_rows( l_mrow_ix ).SAFETY_STOCK_BUCKET_DAYS is null then l_merged_rows( l_mrow_ix ).SAFETY_STOCK_BUCKET_DAYS := old_row.SAFETY_STOCK_BUCKET_DAYS; end if;
2348 if l_merged_rows( l_mrow_ix ).SALES_ACCOUNT is null then l_merged_rows( l_mrow_ix ).SALES_ACCOUNT := old_row.SALES_ACCOUNT; end if;
2349 if l_merged_rows( l_mrow_ix ).SECONDARY_DEFAULT_IND is null then l_merged_rows( l_mrow_ix ).SECONDARY_DEFAULT_IND := old_row.SECONDARY_DEFAULT_IND; end if;
2350 if l_merged_rows( l_mrow_ix ).SECONDARY_SPECIALIST_ID is null then l_merged_rows( l_mrow_ix ).SECONDARY_SPECIALIST_ID := old_row.SECONDARY_SPECIALIST_ID; end if;
2351 if l_merged_rows( l_mrow_ix ).SECONDARY_UOM_CODE is null then l_merged_rows( l_mrow_ix ).SECONDARY_UOM_CODE := old_row.SECONDARY_UOM_CODE; end if;
2352 if l_merged_rows( l_mrow_ix ).SERIAL_NUMBER_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).SERIAL_NUMBER_CONTROL_CODE := old_row.SERIAL_NUMBER_CONTROL_CODE; end if;
2353 if l_merged_rows( l_mrow_ix ).SERIAL_STATUS_ENABLED is null then l_merged_rows( l_mrow_ix ).SERIAL_STATUS_ENABLED := old_row.SERIAL_STATUS_ENABLED; end if;
2354 if l_merged_rows( l_mrow_ix ).SERVICEABLE_COMPONENT_FLAG is null then l_merged_rows( l_mrow_ix ).SERVICEABLE_COMPONENT_FLAG := old_row.SERVICEABLE_COMPONENT_FLAG; end if;
2355 if l_merged_rows( l_mrow_ix ).SERVICEABLE_ITEM_CLASS_ID is null then l_merged_rows( l_mrow_ix ).SERVICEABLE_ITEM_CLASS_ID := old_row.SERVICEABLE_ITEM_CLASS_ID; end if;
2356 if l_merged_rows( l_mrow_ix ).SERVICEABLE_PRODUCT_FLAG is null then l_merged_rows( l_mrow_ix ).SERVICEABLE_PRODUCT_FLAG := old_row.SERVICEABLE_PRODUCT_FLAG; end if;
2357 if l_merged_rows( l_mrow_ix ).SERVICE_DURATION is null then l_merged_rows( l_mrow_ix ).SERVICE_DURATION := old_row.SERVICE_DURATION; end if;
2358 if l_merged_rows( l_mrow_ix ).SERVICE_DURATION_PERIOD_CODE is null then l_merged_rows( l_mrow_ix ).SERVICE_DURATION_PERIOD_CODE := old_row.SERVICE_DURATION_PERIOD_CODE; end if;
2359 if l_merged_rows( l_mrow_ix ).SERVICE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).SERVICE_ITEM_FLAG := old_row.SERVICE_ITEM_FLAG; end if;
2360 if l_merged_rows( l_mrow_ix ).SERVICE_STARTING_DELAY is null then l_merged_rows( l_mrow_ix ).SERVICE_STARTING_DELAY := old_row.SERVICE_STARTING_DELAY; end if;
2361 if l_merged_rows( l_mrow_ix ).SERV_BILLING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).SERV_BILLING_ENABLED_FLAG := old_row.SERV_BILLING_ENABLED_FLAG; end if;
2362 if l_merged_rows( l_mrow_ix ).SERV_IMPORTANCE_LEVEL is null then l_merged_rows( l_mrow_ix ).SERV_IMPORTANCE_LEVEL := old_row.SERV_IMPORTANCE_LEVEL; end if;
2363 if l_merged_rows( l_mrow_ix ).SERV_REQ_ENABLED_CODE is null then l_merged_rows( l_mrow_ix ).SERV_REQ_ENABLED_CODE := old_row.SERV_REQ_ENABLED_CODE; end if;
2364 if l_merged_rows( l_mrow_ix ).SET_ID is null then l_merged_rows( l_mrow_ix ).SET_ID := old_row.SET_ID; end if;
2365 if l_merged_rows( l_mrow_ix ).SHELF_LIFE_CODE is null then l_merged_rows( l_mrow_ix ).SHELF_LIFE_CODE := old_row.SHELF_LIFE_CODE; end if;
2366 if l_merged_rows( l_mrow_ix ).SHELF_LIFE_DAYS is null then l_merged_rows( l_mrow_ix ).SHELF_LIFE_DAYS := old_row.SHELF_LIFE_DAYS; end if;
2367 if l_merged_rows( l_mrow_ix ).SHIPPABLE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).SHIPPABLE_ITEM_FLAG := old_row.SHIPPABLE_ITEM_FLAG; end if;
2368 if l_merged_rows( l_mrow_ix ).SHIP_MODEL_COMPLETE_FLAG is null then l_merged_rows( l_mrow_ix ).SHIP_MODEL_COMPLETE_FLAG := old_row.SHIP_MODEL_COMPLETE_FLAG; end if;
2369 if l_merged_rows( l_mrow_ix ).SHRINKAGE_RATE is null then l_merged_rows( l_mrow_ix ).SHRINKAGE_RATE := old_row.SHRINKAGE_RATE; end if;
2370 if l_merged_rows( l_mrow_ix ).SOURCE_ORGANIZATION_ID is null then l_merged_rows( l_mrow_ix ).SOURCE_ORGANIZATION_ID := old_row.SOURCE_ORGANIZATION_ID; end if;
2371 if l_merged_rows( l_mrow_ix ).SOURCE_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).SOURCE_SUBINVENTORY := old_row.SOURCE_SUBINVENTORY; end if;
2372 if l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC is null then l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := old_row.SOURCE_SYSTEM_REFERENCE_DESC; end if;
2373 if l_merged_rows( l_mrow_ix ).SOURCE_TYPE is null then l_merged_rows( l_mrow_ix ).SOURCE_TYPE := old_row.SOURCE_TYPE; end if;
2374 if l_merged_rows( l_mrow_ix ).SO_AUTHORIZATION_FLAG is null then l_merged_rows( l_mrow_ix ).SO_AUTHORIZATION_FLAG := old_row.SO_AUTHORIZATION_FLAG; end if;
2375 if l_merged_rows( l_mrow_ix ).SO_TRANSACTIONS_FLAG is null then l_merged_rows( l_mrow_ix ).SO_TRANSACTIONS_FLAG := old_row.SO_TRANSACTIONS_FLAG; end if;
2376 if l_merged_rows( l_mrow_ix ).START_AUTO_LOT_NUMBER is null then l_merged_rows( l_mrow_ix ).START_AUTO_LOT_NUMBER := old_row.START_AUTO_LOT_NUMBER; end if;
2377 if l_merged_rows( l_mrow_ix ).START_AUTO_SERIAL_NUMBER is null then l_merged_rows( l_mrow_ix ).START_AUTO_SERIAL_NUMBER := old_row.START_AUTO_SERIAL_NUMBER; end if;
2378 if l_merged_rows( l_mrow_ix ).START_DATE_ACTIVE is null then l_merged_rows( l_mrow_ix ).START_DATE_ACTIVE := old_row.START_DATE_ACTIVE; end if;
2379 if l_merged_rows( l_mrow_ix ).STD_LOT_SIZE is null then l_merged_rows( l_mrow_ix ).STD_LOT_SIZE := old_row.STD_LOT_SIZE; end if;
2380 if l_merged_rows( l_mrow_ix ).STOCK_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).STOCK_ENABLED_FLAG := old_row.STOCK_ENABLED_FLAG; end if;
2381 if l_merged_rows( l_mrow_ix ).SUBCONTRACTING_COMPONENT is null then l_merged_rows( l_mrow_ix ).SUBCONTRACTING_COMPONENT := old_row.SUBCONTRACTING_COMPONENT; end if;
2382 if l_merged_rows( l_mrow_ix ).SUBSCRIPTION_DEPEND_FLAG is null then l_merged_rows( l_mrow_ix ).SUBSCRIPTION_DEPEND_FLAG := old_row.SUBSCRIPTION_DEPEND_FLAG; end if;
2383 if l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_CODE is null then l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_CODE := old_row.SUBSTITUTION_WINDOW_CODE; end if;
2384 if l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_DAYS is null then l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_DAYS := old_row.SUBSTITUTION_WINDOW_DAYS; end if;
2385 if l_merged_rows( l_mrow_ix ).SUMMARY_FLAG is null then l_merged_rows( l_mrow_ix ).SUMMARY_FLAG := old_row.SUMMARY_FLAG; end if;
2386 if l_merged_rows( l_mrow_ix ).TAXABLE_FLAG is null then l_merged_rows( l_mrow_ix ).TAXABLE_FLAG := old_row.TAXABLE_FLAG; end if;
2387 if l_merged_rows( l_mrow_ix ).TAX_CODE is null then l_merged_rows( l_mrow_ix ).TAX_CODE := old_row.TAX_CODE; end if;
2388 if l_merged_rows( l_mrow_ix ).TIME_BILLABLE_FLAG is null then l_merged_rows( l_mrow_ix ).TIME_BILLABLE_FLAG := old_row.TIME_BILLABLE_FLAG; end if;
2389 if l_merged_rows( l_mrow_ix ).TRACKING_QUANTITY_IND is null then l_merged_rows( l_mrow_ix ).TRACKING_QUANTITY_IND := old_row.TRACKING_QUANTITY_IND; end if;
2390 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := old_row.TRANSACTION_ID; end if;
2391 if l_merged_rows( l_mrow_ix ).UNDER_RETURN_TOLERANCE is null then l_merged_rows( l_mrow_ix ).UNDER_RETURN_TOLERANCE := old_row.UNDER_RETURN_TOLERANCE; end if;
2392 if l_merged_rows( l_mrow_ix ).UNDER_SHIPMENT_TOLERANCE is null then l_merged_rows( l_mrow_ix ).UNDER_SHIPMENT_TOLERANCE := old_row.UNDER_SHIPMENT_TOLERANCE; end if;
2393 if l_merged_rows( l_mrow_ix ).UNIT_HEIGHT is null then l_merged_rows( l_mrow_ix ).UNIT_HEIGHT := old_row.UNIT_HEIGHT; end if;
2394 if l_merged_rows( l_mrow_ix ).UNIT_LENGTH is null then l_merged_rows( l_mrow_ix ).UNIT_LENGTH := old_row.UNIT_LENGTH; end if;
2395 if l_merged_rows( l_mrow_ix ).UNIT_OF_ISSUE is null then l_merged_rows( l_mrow_ix ).UNIT_OF_ISSUE := old_row.UNIT_OF_ISSUE; end if;
2396 if l_merged_rows( l_mrow_ix ).UNIT_VOLUME is null then l_merged_rows( l_mrow_ix ).UNIT_VOLUME := old_row.UNIT_VOLUME; end if;
2397 if l_merged_rows( l_mrow_ix ).UNIT_WEIGHT is null then l_merged_rows( l_mrow_ix ).UNIT_WEIGHT := old_row.UNIT_WEIGHT; end if;
2398 if l_merged_rows( l_mrow_ix ).UNIT_WIDTH is null then l_merged_rows( l_mrow_ix ).UNIT_WIDTH := old_row.UNIT_WIDTH; end if;
2399 if l_merged_rows( l_mrow_ix ).UN_NUMBER_ID is null then l_merged_rows( l_mrow_ix ).UN_NUMBER_ID := old_row.UN_NUMBER_ID; end if;
2400 if l_merged_rows( l_mrow_ix ).USAGE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).USAGE_ITEM_FLAG := old_row.USAGE_ITEM_FLAG; end if;
2401 if l_merged_rows( l_mrow_ix ).VARIABLE_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).VARIABLE_LEAD_TIME := old_row.VARIABLE_LEAD_TIME; end if;
2402 if l_merged_rows( l_mrow_ix ).VEHICLE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).VEHICLE_ITEM_FLAG := old_row.VEHICLE_ITEM_FLAG; end if;
2403 if l_merged_rows( l_mrow_ix ).VENDOR_WARRANTY_FLAG is null then l_merged_rows( l_mrow_ix ).VENDOR_WARRANTY_FLAG := old_row.VENDOR_WARRANTY_FLAG; end if;
2404 if l_merged_rows( l_mrow_ix ).VMI_FIXED_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).VMI_FIXED_ORDER_QUANTITY := old_row.VMI_FIXED_ORDER_QUANTITY; end if;
2405 if l_merged_rows( l_mrow_ix ).VMI_FORECAST_TYPE is null then l_merged_rows( l_mrow_ix ).VMI_FORECAST_TYPE := old_row.VMI_FORECAST_TYPE; end if;
2406 if l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_DAYS is null then l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_DAYS := old_row.VMI_MAXIMUM_DAYS; end if;
2407 if l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_UNITS is null then l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_UNITS := old_row.VMI_MAXIMUM_UNITS; end if;
2408 if l_merged_rows( l_mrow_ix ).VMI_MINIMUM_DAYS is null then l_merged_rows( l_mrow_ix ).VMI_MINIMUM_DAYS := old_row.VMI_MINIMUM_DAYS; end if;
2409 if l_merged_rows( l_mrow_ix ).VMI_MINIMUM_UNITS is null then l_merged_rows( l_mrow_ix ).VMI_MINIMUM_UNITS := old_row.VMI_MINIMUM_UNITS; end if;
2410 if l_merged_rows( l_mrow_ix ).VOLUME_UOM_CODE is null then l_merged_rows( l_mrow_ix ).VOLUME_UOM_CODE := old_row.VOLUME_UOM_CODE; end if;
2411 if l_merged_rows( l_mrow_ix ).VOL_DISCOUNT_EXEMPT_FLAG is null then l_merged_rows( l_mrow_ix ).VOL_DISCOUNT_EXEMPT_FLAG := old_row.VOL_DISCOUNT_EXEMPT_FLAG; end if;
2412 if l_merged_rows( l_mrow_ix ).WARRANTY_VENDOR_ID is null then l_merged_rows( l_mrow_ix ).WARRANTY_VENDOR_ID := old_row.WARRANTY_VENDOR_ID; end if;
2413 if l_merged_rows( l_mrow_ix ).WEB_STATUS is null then l_merged_rows( l_mrow_ix ).WEB_STATUS := old_row.WEB_STATUS; end if;
2414 if l_merged_rows( l_mrow_ix ).WEIGHT_UOM_CODE is null then l_merged_rows( l_mrow_ix ).WEIGHT_UOM_CODE := old_row.WEIGHT_UOM_CODE; end if;
2415 if l_merged_rows( l_mrow_ix ).WH_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).WH_UPDATE_DATE := old_row.WH_UPDATE_DATE; end if;
2416 if l_merged_rows( l_mrow_ix ).WIP_SUPPLY_LOCATOR_ID is null then l_merged_rows( l_mrow_ix ).WIP_SUPPLY_LOCATOR_ID := old_row.WIP_SUPPLY_LOCATOR_ID; end if;
2417 if l_merged_rows( l_mrow_ix ).WIP_SUPPLY_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).WIP_SUPPLY_SUBINVENTORY := old_row.WIP_SUPPLY_SUBINVENTORY; end if;
2418 if l_merged_rows( l_mrow_ix ).WIP_SUPPLY_TYPE is null then l_merged_rows( l_mrow_ix ).WIP_SUPPLY_TYPE := old_row.WIP_SUPPLY_TYPE; end if;
2419 -- end generated code
2420 END LOOP; -- over old rows
2421 /*
2422 -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
2423 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
2424 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
2425 END IF;
2426 */
2427 --Changing the confirm status for the last group of merged items.
2428 IF( l_cur_rank > 0 AND NOT l_is_pdh_batch) THEN
2429 IF( l_merged_rows(l_mrow_ix).CONFIRM_STATUS NOT IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH )
2430 AND l_merged_rows(l_mrow_ix).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE )
2431 THEN
2432 l_merged_rows(l_mrow_ix).CONFIRM_STATUS := G_CONF_NEW;
2433 END IF;
2434 IF( l_excluded_flag IS NOT NULL) THEN
2435 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
2436 END IF;
2437 END IF; --IF( l_cur_rank > 0 AND NOT l_is_pdh_batch)
2438
2439 Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || c_target_rows%ROWCOUNT );
2440 IF c_target_rows%ISOPEN THEN
2441 CLOSE c_target_rows;
2442 END IF;
2443
2444 IF l_merged_rows IS NOT NULL THEN
2445 -- delete
2446 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
2447 FORALL rid_ix IN INDICES OF l_old_rowids
2448 DELETE FROM MTL_SYSTEM_ITEMS_INTERFACE
2449 WHERE ROWID = l_old_rowids( rid_ix );
2450 -- insert
2451 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
2452 FORALL row_index IN INDICES OF l_merged_rows
2453 INSERT INTO MTL_SYSTEM_ITEMS_INTERFACE
2454 VALUES l_merged_rows( row_index );
2455
2456 --Bug 13505630
2457 For i in 1..l_merged_rows.COUNT loop
2458 FND_MESSAGE.Set_Name('EGO', 'EGO_IMPORT_DUPLICATE_ITEMS');
2459 FND_MESSAGE.Set_Token('ITEM_NUMBER', l_merged_rows(i).ITEM_NUMBER);
2460 FND_MESSAGE.Set_Token('ORG_ID', l_merged_rows(i).ORGANIZATION_ID);
2461 l_msg_text := FND_MESSAGE.GET;
2462 dumm_status := INVPUOPI.mtl_log_interface_err(
2463 l_merged_rows(i).ORGANIZATION_ID
2464 ,l_user_id
2465 ,l_login_id
2466 ,l_prog_appid
2467 ,l_prog_id
2468 ,l_request_id
2469 ,l_merged_rows(i).TRANSACTION_ID
2470 ,l_msg_text
2471 ,' '
2472 ,'MTL_SYSTEM_ITEMS_INTERFACE'
2473 ,'INV_IOI_ERR_IMPT_DPLC_ITMS'--bug 11894684, replace INV_IOI_ERR
2474 ,l_err_text);
2475 End loop;
2476 END IF;
2477
2478 IF p_commit = FND_API.G_TRUE THEN
2479 Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
2480 COMMIT;
2481 END IF;
2482 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
2483 END merge_items;
2484
2485 PROCEDURE merge_revs( p_batch_id IN NUMBER
2486 , p_is_pdh_batch IN FLAG
2487 , p_ss_id IN NUMBER DEFAULT NULL
2488 , p_master_org_id IN NUMBER DEFAULT NULL
2489 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
2490 )
2491 IS
2492 SUBTYPE MIRI_ROW IS MTL_ITEM_REVISIONS_INTERFACE%ROWTYPE;
2493 TYPE MIRI_ROWS IS TABLE OF MIRI_ROW INDEX BY BINARY_INTEGER;
2494
2495 /*
2496 * Note that the organization_id column is filled in from the organization_code and batch organization_id
2497 * as part of resolve_ssxref_on_data_load
2498 * revision column is filled in from the revision_id before this cursor is fetched.
2499 */
2500 CURSOR c_ss_target_revs( cp_ss_id MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
2501 , cp_master_org_id MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE ) IS
2502 SELECT
2503 rowid rid
2504 , FIRST_VALUE( ROWID ) OVER ( PARTITION BY
2505 source_system_id
2506 , source_system_reference
2507 , organization_id
2508 , revision
2509 ORDER BY
2510 last_update_date desc nulls last
2511 , interface_table_unique_id desc nulls last
2512 ) master_rid
2513 , RANK( ) OVER ( PARTITION BY
2514 source_system_id
2515 , source_system_reference
2516 , organization_id
2517 , revision
2518 ORDER BY
2519 last_update_date desc nulls last
2520 , interface_table_unique_id desc nulls last
2521 ) local_rank
2522 , sub.*
2523 FROM
2524 ( SELECT
2525 COUNT( * ) OVER ( PARTITION BY
2526 source_system_id
2527 , source_system_reference
2528 , organization_id
2529 , revision
2530 )
2531 cnt
2532 , miri.*
2533 FROM mtl_item_revisions_interface miri
2534 WHERE PROCESS_FLAG = 0
2535 and SET_PROCESS_ID = p_batch_id
2536 and SOURCE_SYSTEM_ID = cp_ss_id
2537 and SOURCE_SYSTEM_REFERENCE IS NOT NULL
2538 AND ORGANIZATION_ID IS NOT NULL
2539 and EXISTS ( SELECT null
2540 FROM mtl_parameters mp
2541 WHERE mp.ORGANIZATION_ID = miri.ORGANIZATION_ID
2542 and mp.MASTER_ORGANIZATION_ID = cp_master_org_id
2543 )
2544 )
2545 sub
2546 WHERE sub.cnt > 1
2547 ORDER BY master_rid, local_rank;
2548
2549 CURSOR c_pdh_target_revs( cp_master_org_id MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE ) IS
2550 SELECT
2551 rowid rid
2552 , first_value( rowid ) over ( PARTITION BY
2553 item_number
2554 , organization_id
2555 , revision
2556 ORDER BY
2557 last_update_date desc nulls last
2558 , interface_table_unique_id desc nulls last
2559 ) master_rid
2560 , rank( ) over ( PARTITION BY
2561 item_number
2562 , organization_id
2563 , revision
2564 ORDER BY
2565 last_update_date desc nulls last
2566 , interface_table_unique_id desc nulls last
2567 ) local_rank
2568 , sub.*
2569 FROM
2570 ( select
2571 count( * ) over ( PARTITION BY
2572 item_number
2573 , organization_id
2574 , revision
2575 )
2576 cnt
2577 , miri.*
2578 FROM MTL_ITEM_REVISIONS_INTERFACE miri
2579 WHERE PROCESS_FLAG = 1
2580 AND SET_PROCESS_ID = p_batch_id
2581 AND ITEM_NUMBER IS NOT NULL
2582 AND ORGANIZATION_ID IS NOT NULL
2583 AND ( SOURCE_SYSTEM_ID IS NULL
2584 OR SOURCE_SYSTEM_ID = G_PDH_SOURCE_SYSTEM_ID
2585 )
2586 AND EXISTS ( SELECT null
2587 FROM mtl_parameters mp
2588 WHERE mp.organization_id = miri.organization_id
2589 AND mp.master_organization_id = cp_master_org_id
2590 )
2591 )
2592 sub
2593 WHERE sub.cnt > 1
2594 ORDER BY master_rid, local_rank;
2595
2596 TYPE TARGET_ROWS IS TABLE OF c_ss_target_revs%ROWTYPE;
2597
2598 l_merged_rows MIRI_ROWS;
2599 l_merge_base MIRI_ROW;
2600 l_old_rows TARGET_ROWS;
2601 l_old_rowids UROWID_TABLE;
2602
2603 l_ss_id MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
2604 l_ssr MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
2605 l_candidate_trans MTL_ITEM_REVISIONS_INTERFACE.TRANSACTION_TYPE%TYPE;
2606
2607 l_cur_master_rid UROWID := NULL;
2608 l_mrow_ix PLS_INTEGER := 0;
2609 l_is_pdh_batch BOOLEAN;
2610
2611 l_org_id MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
2612 l_pdh_batch_flag FLAG := p_is_pdh_batch;
2613
2614 l_proc_log_prefix CONSTANT VARCHAR2(30) := 'merge_revs - ';
2615 BEGIN
2616 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
2617 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
2618 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
2619 merge_params_from_batch_header( p_batch_id => p_batch_id
2620 , x_is_pdh_batch => l_pdh_batch_flag
2621 , x_master_org_id => l_org_id
2622 , x_ss_id => l_ss_id
2623 );
2624 END IF;
2625 Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
2626 Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
2627 Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
2628
2629 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
2630 SET REVISION = NVL( ( SELECT r.REVISION
2631 FROM MTL_ITEM_REVISIONS_B r
2632 WHERE r.REVISION_ID = miri.REVISION_ID
2633 AND r.ORGANIZATION_ID = miri.ORGANIZATION_ID
2634 )
2635 , REVISION
2636 )
2637 WHERE REVISION_ID IS NOT NULL
2638 AND SET_PROCESS_ID = p_batch_id
2639 AND REVISION IS NULL;
2640
2641 l_is_pdh_batch := ( l_pdh_batch_flag = FND_API.G_TRUE );
2642 IF l_is_pdh_batch THEN
2643 OPEN c_pdh_target_revs( l_org_id );
2644 FETCH c_pdh_target_revs BULK COLLECT INTO l_old_rows;
2645 CLOSE c_pdh_target_revs;
2646 ELSE
2647 OPEN c_ss_target_revs( l_ss_id, l_org_id );
2648 FETCH c_ss_target_revs BULK COLLECT INTO l_old_rows;
2649 CLOSE c_ss_target_revs;
2650 END IF;
2651
2652 Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
2653 IF 0 <> l_old_rows.COUNT THEN
2654 -- attributes common to every merged row
2655 l_merge_base.SET_PROCESS_ID := p_batch_id;
2656 l_merge_base.PROCESS_FLAG := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
2657
2658 l_old_rowids := UROWID_TABLE( );
2659 l_old_rowids.EXTEND( l_old_rows.COUNT );
2660
2661 FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
2662 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
2663
2664 IF( l_cur_master_rid IS NULL
2665 OR l_old_rows( orow_ix ).master_rid <> l_cur_master_rid )
2666 THEN
2667 l_cur_master_rid := l_old_rows( orow_ix ).master_rid;
2668 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; ROWID = '|| l_cur_master_rid );
2669 l_mrow_ix := l_mrow_ix + 1;
2670 l_merged_rows( l_mrow_ix ) := l_merge_base;
2671 IF NOT l_is_pdh_batch THEN
2672 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
2673 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
2674 Debug_Conc_Log( l_proc_log_prefix || ' Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
2675 END IF;
2676 ELSE
2677 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; ROWID = '
2678 || l_old_rows( orow_ix ).rid || '; master ROWID = '|| l_cur_master_rid );
2679 END IF;
2680
2681 -- Special Cases:
2682 -- Transaction type
2683 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
2684
2685 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
2686 OR l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
2687 THEN
2688 -- CREATE > SYNC > UPDATE : order of case expression matters
2689 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
2690 CASE
2691 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
2692 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
2693 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
2694 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
2695 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
2696 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
2697 ELSE NULL -- INVALID transaction types encountered ...
2698 END;
2699 END IF;
2700
2701 -- The following columns need to be treated as atomic groups
2702 -- 1. Item Identifier
2703 IF l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID IS NULL
2704 AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER IS NULL
2705 THEN
2706 l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
2707 l_merged_rows( l_mrow_ix ).ITEM_NUMBER := l_old_rows( orow_ix ).ITEM_NUMBER;
2708 END IF;
2709
2710 -- 2. Organization
2711 IF l_merged_rows( l_mrow_ix ).ORGANIZATION_ID IS NULL
2712 AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE IS NULL
2713 THEN
2714 l_merged_rows( l_mrow_ix ).ORGANIZATION_ID := l_old_rows( orow_ix ).ORGANIZATION_ID;
2715 l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE := l_old_rows( orow_ix ).ORGANIZATION_CODE;
2716 END IF;
2717
2718 -- Non-special cased
2719 -- Start Generated Code
2720 /* Generated using:
2721 SET LINESIZE 200
2722 SELECT 'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := l_old_rows( orow_ix ).' || column_name || '; end if; '
2723 FROM ALL_TAB_COLUMNS
2724 WHERE TABLE_NAME = 'MTL_ITEM_REVISIONS_INTERFACE'
2725 AND COLUMN_NAME NOT IN
2726 ( -- special cases (for merge)
2727 'INVENTORY_ITEM_ID'
2728 , 'ITEM_NUMBER'
2729 , 'ORGANIZATION_ID'
2730 , 'ORGANIZATION_CODE'
2731 , 'TRANSACTION_TYPE'
2732 -- special columns
2733 , 'SET_PROCESS_ID'
2734 , 'PROCESS_FLAG'
2735 , 'SOURCE_SYSTEM_ID'
2736 , 'SOURCE_SYSTEM_REFERENCE'
2737 , 'INTERFACE_TABLE_UNIQUE_ID'
2738 -- who columns
2739 , 'LAST_UPDATE_DATE'
2740 , 'CREATION_DATE'
2741 , 'CREATED_BY'
2742 , 'LAST_UPDATED_BY'
2743 , 'LAST_UPDATE_LOGIN'
2744 -- XXX: exclude concurrent processing columns?
2745 )
2746 ORDER BY COLUMN_NAME ASC
2747 */
2748 if l_merged_rows( l_mrow_ix ).ATTRIBUTE1 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE1 := l_old_rows( orow_ix ).ATTRIBUTE1; end if;
2749 if l_merged_rows( l_mrow_ix ).ATTRIBUTE10 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE10 := l_old_rows( orow_ix ).ATTRIBUTE10; end if;
2750 if l_merged_rows( l_mrow_ix ).ATTRIBUTE11 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE11 := l_old_rows( orow_ix ).ATTRIBUTE11; end if;
2751 if l_merged_rows( l_mrow_ix ).ATTRIBUTE12 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE12 := l_old_rows( orow_ix ).ATTRIBUTE12; end if;
2752 if l_merged_rows( l_mrow_ix ).ATTRIBUTE13 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE13 := l_old_rows( orow_ix ).ATTRIBUTE13; end if;
2753 if l_merged_rows( l_mrow_ix ).ATTRIBUTE14 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE14 := l_old_rows( orow_ix ).ATTRIBUTE14; end if;
2754 if l_merged_rows( l_mrow_ix ).ATTRIBUTE15 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE15 := l_old_rows( orow_ix ).ATTRIBUTE15; end if;
2755 if l_merged_rows( l_mrow_ix ).ATTRIBUTE2 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE2 := l_old_rows( orow_ix ).ATTRIBUTE2; end if;
2756 if l_merged_rows( l_mrow_ix ).ATTRIBUTE3 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE3 := l_old_rows( orow_ix ).ATTRIBUTE3; end if;
2757 if l_merged_rows( l_mrow_ix ).ATTRIBUTE4 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE4 := l_old_rows( orow_ix ).ATTRIBUTE4; end if;
2758 if l_merged_rows( l_mrow_ix ).ATTRIBUTE5 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE5 := l_old_rows( orow_ix ).ATTRIBUTE5; end if;
2759 if l_merged_rows( l_mrow_ix ).ATTRIBUTE6 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE6 := l_old_rows( orow_ix ).ATTRIBUTE6; end if;
2760 if l_merged_rows( l_mrow_ix ).ATTRIBUTE7 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE7 := l_old_rows( orow_ix ).ATTRIBUTE7; end if;
2761 if l_merged_rows( l_mrow_ix ).ATTRIBUTE8 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE8 := l_old_rows( orow_ix ).ATTRIBUTE8; end if;
2762 if l_merged_rows( l_mrow_ix ).ATTRIBUTE9 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE9 := l_old_rows( orow_ix ).ATTRIBUTE9; end if;
2763 if l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY := l_old_rows( orow_ix ).ATTRIBUTE_CATEGORY; end if;
2764 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := l_old_rows( orow_ix ).CHANGE_ID; end if;
2765 if l_merged_rows( l_mrow_ix ).CHANGE_NOTICE is null then l_merged_rows( l_mrow_ix ).CHANGE_NOTICE := l_old_rows( orow_ix ).CHANGE_NOTICE; end if;
2766 if l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID is null then l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID := l_old_rows( orow_ix ).CURRENT_PHASE_ID; end if;
2767 if l_merged_rows( l_mrow_ix ).DESCRIPTION is null then l_merged_rows( l_mrow_ix ).DESCRIPTION := l_old_rows( orow_ix ).DESCRIPTION; end if;
2768 if l_merged_rows( l_mrow_ix ).ECN_INITIATION_DATE is null then l_merged_rows( l_mrow_ix ).ECN_INITIATION_DATE := l_old_rows( orow_ix ).ECN_INITIATION_DATE; end if;
2769 if l_merged_rows( l_mrow_ix ).EFFECTIVITY_DATE is null then l_merged_rows( l_mrow_ix ).EFFECTIVITY_DATE := l_old_rows( orow_ix ).EFFECTIVITY_DATE; end if;
2770 if l_merged_rows( l_mrow_ix ).IMPLEMENTATION_DATE is null then l_merged_rows( l_mrow_ix ).IMPLEMENTATION_DATE := l_old_rows( orow_ix ).IMPLEMENTATION_DATE; end if;
2771 if l_merged_rows( l_mrow_ix ).IMPLEMENTED_SERIAL_NUMBER is null then l_merged_rows( l_mrow_ix ).IMPLEMENTED_SERIAL_NUMBER := l_old_rows( orow_ix ).IMPLEMENTED_SERIAL_NUMBER; end if;
2772 if l_merged_rows( l_mrow_ix ).LIFECYCLE_ID is null then l_merged_rows( l_mrow_ix ).LIFECYCLE_ID := l_old_rows( orow_ix ).LIFECYCLE_ID; end if;
2773 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := l_old_rows( orow_ix ).PROGRAM_APPLICATION_ID; end if;
2774 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := l_old_rows( orow_ix ).PROGRAM_ID; end if;
2775 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := l_old_rows( orow_ix ).PROGRAM_UPDATE_DATE; end if;
2776 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := l_old_rows( orow_ix ).REQUEST_ID; end if;
2777 if l_merged_rows( l_mrow_ix ).REVISED_ITEM_SEQUENCE_ID is null then l_merged_rows( l_mrow_ix ).REVISED_ITEM_SEQUENCE_ID := l_old_rows( orow_ix ).REVISED_ITEM_SEQUENCE_ID; end if;
2778 if l_merged_rows( l_mrow_ix ).REVISION is null then l_merged_rows( l_mrow_ix ).REVISION := l_old_rows( orow_ix ).REVISION; end if;
2779 if l_merged_rows( l_mrow_ix ).REVISION_ID is null then l_merged_rows( l_mrow_ix ).REVISION_ID := l_old_rows( orow_ix ).REVISION_ID; end if;
2780 if l_merged_rows( l_mrow_ix ).REVISION_LABEL is null then l_merged_rows( l_mrow_ix ).REVISION_LABEL := l_old_rows( orow_ix ).REVISION_LABEL; end if;
2781 if l_merged_rows( l_mrow_ix ).REVISION_REASON is null then l_merged_rows( l_mrow_ix ).REVISION_REASON := l_old_rows( orow_ix ).REVISION_REASON; end if;
2782 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := l_old_rows( orow_ix ).TRANSACTION_ID; end if;
2783 -- End Generated Code
2784
2785 END LOOP; -- loop over old rows
2786
2787 /*
2788 -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
2789 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
2790 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
2791 END IF;
2792 */
2793 IF l_merged_rows IS NOT NULL THEN
2794 -- delete
2795 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
2796 FORALL rid_ix IN INDICES OF l_old_rowids
2797 DELETE FROM MTL_ITEM_REVISIONS_INTERFACE
2798 WHERE ROWID = l_old_rowids( rid_ix );
2799 -- insert
2800 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
2801 FORALL row_index IN INDICES OF l_merged_rows
2802 INSERT INTO MTL_ITEM_REVISIONS_INTERFACE
2803 VALUES l_merged_rows( row_index );
2804 END IF;
2805 END IF; -- ENDS IF l_old_rows.count <> 0
2806 IF p_commit = FND_API.G_TRUE THEN
2807 Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
2808 COMMIT;
2809 END IF;
2810 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
2811 END merge_revs;
2812
2813 -- Merging Item Associations.
2814 PROCEDURE Merge_Associations ( p_batch_id IN NUMBER
2815 , p_is_pdh_batch IN FLAG DEFAULT NULL
2816 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
2817 )
2818 IS
2819
2820 CURSOR pdh_candidate_assocs_rows_cur IS
2821 SELECT *
2822 FROM
2823 (
2824 SELECT
2825 ROWID rid,
2826 Count(*) OVER ( PARTITION BY ITEM_NUMBER,
2827 PK1_VALUE,
2828 PK2_VALUE,
2829 PK3_VALUE,
2830 PK4_VALUE,
2831 PK5_VALUE,
2832 BUNDLE_ID,
2833 DATA_LEVEL_ID,
2834 ORGANIZATION_ID )
2835 CNT,
2836 Rank() OVER ( ORDER BY ITEM_NUMBER,
2837 PK1_VALUE,
2838 PK2_VALUE,
2839 PK3_VALUE,
2840 PK4_VALUE,
2841 PK5_VALUE,
2842 BUNDLE_ID,
2843 DATA_LEVEL_ID,
2844 ORGANIZATION_ID )
2845 RNK,
2846 eiai.*
2847 FROM EGO_ITEM_ASSOCIATIONS_INTF eiai
2848 WHERE BATCH_ID = p_batch_id
2849 AND PROCESS_FLAG = 1
2850 )
2851 WHERE CNT > 1
2852 ORDER BY rnk, last_update_date DESC;
2853
2854 CURSOR ss_candidate_assocs_rows_cur IS
2855 SELECT *
2856 FROM
2857 (
2858 SELECT
2859 ROWID rid,
2860 Count(*) OVER ( PARTITION BY SOURCE_SYSTEM_ID,
2861 SOURCE_SYSTEM_REFERENCE,
2862 PK1_VALUE,
2863 PK2_VALUE,
2864 PK3_VALUE,
2865 PK4_VALUE,
2866 PK5_VALUE,
2867 BUNDLE_ID,
2868 DATA_LEVEL_ID,
2869 ORGANIZATION_ID )
2870 CNT,
2871 Rank() OVER ( ORDER BY SOURCE_SYSTEM_ID,
2872 SOURCE_SYSTEM_REFERENCE,
2873 PK1_VALUE,
2874 PK2_VALUE,
2875 PK3_VALUE,
2876 PK4_VALUE,
2877 PK5_VALUE,
2878 BUNDLE_ID,
2879 DATA_LEVEL_ID,
2880 ORGANIZATION_ID )
2881 RNK,
2882 eiai.*
2883 FROM EGO_ITEM_ASSOCIATIONS_INTF eiai
2884 WHERE BATCH_ID = p_batch_id
2885 AND PROCESS_FLAG = 0
2886 )
2887 WHERE CNT > 1
2888 ORDER BY rnk, last_update_date DESC;
2889
2890 TYPE Assocs_Rows_With_RowId IS TABLE OF ss_candidate_assocs_rows_cur%ROWTYPE;
2891
2892 l_current_rank_handled NUMBER;
2893 l_previous_rank_handled NUMBER;
2894 l_new_row_index NUMBER := 0;
2895 l_old_row_ids UROWID_TABLE;
2896 l_current_merged_tran_type VARCHAR2(10);
2897
2898 l_new_row IAssocs_Row;
2899 l_new_rows IAssocs_Rows;
2900 l_old_rows Assocs_Rows_With_RowId;
2901
2902 BEGIN
2903 Debug_Conc_Log( 'Calling Merge_Associations ');
2904 l_current_rank_handled := 0;
2905 l_previous_rank_handled := 0;
2906
2907 IF p_is_pdh_batch = FND_API.G_TRUE THEN
2908 -- 'PDH Batch'
2909 Debug_Conc_Log( 'Getting candidate rows for merging for PDH Batch ');
2910 OPEN pdh_candidate_assocs_rows_cur;
2911 FETCH pdh_candidate_assocs_rows_cur BULK COLLECT INTO l_old_rows;
2912 CLOSE pdh_candidate_assocs_rows_cur;
2913 ELSE
2914 -- 'SS Batch'
2915 Debug_Conc_Log( 'Getting candidate rows for merging for Source System Batch ');
2916 OPEN ss_candidate_assocs_rows_cur;
2917 FETCH ss_candidate_assocs_rows_cur BULK COLLECT INTO l_old_rows;
2918 CLOSE ss_candidate_assocs_rows_cur;
2919 END IF;
2920
2921 Debug_Conc_Log( 'Merging '|| l_old_rows.COUNT || ' rows in associations table' );
2922
2923 IF l_old_rows.COUNT < 1 THEN
2924 RETURN;
2925 END IF;
2926
2927 l_old_row_ids := UROWID_TABLE( );
2928 l_old_row_ids.EXTEND( l_old_rows.COUNT );
2929
2930 FOR l_index IN l_old_rows.FIRST .. l_old_rows.LAST
2931 LOOP
2932 l_old_row_ids( l_index ) := l_old_rows( l_index ).RID;
2933 l_current_rank_handled := l_old_rows( l_index ).RNK;
2934 IF l_current_rank_handled <> l_previous_rank_handled THEN
2935 l_new_row_index := l_new_row_index + 1 ;
2936 l_new_rows( l_new_row_index ) := l_new_row;
2937 l_new_rows( l_new_row_index ).BATCH_ID := l_old_rows( l_index ).BATCH_ID;
2938 l_new_rows( l_new_row_index ).ORGANIZATION_ID := l_old_rows( l_index ).ORGANIZATION_ID;
2939 l_new_rows( l_new_row_index ).PK1_VALUE := l_old_rows( l_index ).PK1_VALUE;
2940 l_new_rows( l_new_row_index ).PK2_VALUE := l_old_rows( l_index ).PK2_VALUE;
2941 l_new_rows( l_new_row_index ).PK3_VALUE := l_old_rows( l_index ).PK3_VALUE;
2942 l_new_rows( l_new_row_index ).PK4_VALUE := l_old_rows( l_index ).PK4_VALUE;
2943 l_new_rows( l_new_row_index ).PK5_VALUE := l_old_rows( l_index ).PK5_VALUE;
2944 l_new_rows( l_new_row_index ).DATA_LEVEL_ID := l_old_rows( l_index ).DATA_LEVEL_ID;
2945 l_new_rows( l_new_row_index ).ORGANIZATION_CODE := l_old_rows( l_index ).ORGANIZATION_CODE;
2946 l_new_rows( l_new_row_index ).PROCESS_FLAG := l_old_rows( l_index ).PROCESS_FLAG;
2947 l_new_rows( l_new_row_index ).TRANSACTION_ID := l_old_rows( l_index ).TRANSACTION_ID;
2948 l_new_rows( l_new_row_index ).ASSOCIATION_ID := l_old_rows( l_index ).ASSOCIATION_ID;
2949 l_new_rows( l_new_row_index ).REQUEST_ID := l_old_rows( l_index ).REQUEST_ID;
2950 l_new_rows( l_new_row_index ).PROGRAM_APPLICATION_ID := l_old_rows( l_index ).PROGRAM_APPLICATION_ID;
2951 l_new_rows( l_new_row_index ).PROGRAM_ID := l_old_rows( l_index ).PROGRAM_ID;
2952 l_new_rows( l_new_row_index ).PROGRAM_UPDATE_DATE := l_old_rows( l_index ).PROGRAM_UPDATE_DATE;
2953 l_new_rows( l_new_row_index ).SUPPLIER_NAME := l_old_rows( l_index ).SUPPLIER_NAME;
2954 l_new_rows( l_new_row_index ).SUPPLIER_NUMBER := l_old_rows( l_index ).SUPPLIER_NUMBER;
2955 l_new_rows( l_new_row_index ).SUPPLIER_SITE_NAME := l_old_rows( l_index ).SUPPLIER_SITE_NAME;
2956 l_new_rows( l_new_row_index ).DATA_LEVEL_NAME := l_old_rows( l_index ).DATA_LEVEL_NAME;
2957 l_new_rows( l_new_row_index ).STYLE_ITEM_FLAG := l_old_rows( l_index ).STYLE_ITEM_FLAG;
2958 l_new_rows( l_new_row_index ).STYLE_ITEM_ID := l_old_rows( l_index ).STYLE_ITEM_ID;
2959 l_new_rows( l_new_row_index ).BUNDLE_ID := l_old_rows( l_index ).BUNDLE_ID;
2960 l_new_rows( l_new_row_index ).SOURCE_SYSTEM_ID := l_old_rows( l_index ).SOURCE_SYSTEM_ID;
2961 l_new_rows( l_new_row_index ).SOURCE_SYSTEM_REFERENCE := l_old_rows( l_index ).SOURCE_SYSTEM_REFERENCE;
2962 l_new_rows( l_new_row_index ).ITEM_NUMBER := l_old_rows( l_index ).ITEM_NUMBER;
2963 l_new_rows( l_new_row_index ).CREATED_BY := l_old_rows( l_index ).CREATED_BY;
2964 l_new_rows( l_new_row_index ).CREATION_DATE := l_old_rows( l_index ).CREATION_DATE;
2965 l_new_rows( l_new_row_index ).LAST_UPDATED_BY := l_old_rows( l_index ).LAST_UPDATED_BY;
2966 l_new_rows( l_new_row_index ).LAST_UPDATE_DATE := l_old_rows( l_index ).LAST_UPDATE_DATE;
2967 l_new_rows( l_new_row_index ).LAST_UPDATE_LOGIN := l_old_rows( l_index ).LAST_UPDATE_LOGIN;
2968 l_current_merged_tran_type := l_old_rows( l_index ).TRANSACTION_TYPE;
2969 END IF;
2970 IF l_new_rows( l_new_row_index ).INVENTORY_ITEM_ID IS NULL THEN
2971 l_new_rows( l_new_row_index ).INVENTORY_ITEM_ID := l_old_rows( l_index ).INVENTORY_ITEM_ID;
2972 END IF;
2973 IF l_new_rows( l_new_row_index ).PRIMARY_FLAG IS NULL
2974 AND l_new_rows( l_new_row_index ).STATUS_CODE <> 2
2975 AND l_old_rows( l_index ).PRIMARY_FLAG <> 'Y' THEN
2976 l_new_rows( l_new_row_index ).PRIMARY_FLAG := l_old_rows( l_index ).PRIMARY_FLAG;
2977 END IF;
2978 IF l_new_rows( l_new_row_index ).STATUS_CODE IS NULL
2979 AND l_new_rows( l_new_row_index ).PRIMARY_FLAG <> 'Y'
2980 AND l_old_rows( l_index ).STATUS_CODE <> '2' THEN
2981 l_new_rows( l_new_row_index ).STATUS_CODE := l_old_rows( l_index ).STATUS_CODE;
2982 END IF;
2983 IF l_new_rows( l_new_row_index ).TRANSACTION_TYPE IS NULL
2984 OR l_new_rows( l_new_row_index ).TRANSACTION_TYPE <> l_current_merged_tran_type THEN
2985 l_new_rows( l_new_row_index ).TRANSACTION_TYPE :=
2986 CASE
2987 WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
2988 OR l_current_merged_tran_type = G_TRANS_TYPE_CREATE
2989 THEN G_TRANS_TYPE_CREATE
2990 WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
2991 OR l_current_merged_tran_type = G_TRANS_TYPE_SYNC
2992 THEN G_TRANS_TYPE_SYNC
2993 WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
2994 OR l_current_merged_tran_type = G_TRANS_TYPE_UPDATE
2995 THEN G_TRANS_TYPE_UPDATE
2996 ELSE NULL -- Transaction type is not valid.
2997 END;
2998 l_current_merged_tran_type := l_new_rows( l_new_row_index ).TRANSACTION_TYPE;
2999 END IF;
3000 l_previous_rank_handled := l_old_rows( l_index ).RNK;
3001 END LOOP;
3002
3003 -- Updating default values for primary_flag and status_code
3004 -- primary_flag null is defaulted with 'N'
3005 -- status_code null is defaulted with 1
3006 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
3007 SET PRIMARY_FLAG = 'N'
3008 WHERE PRIMARY_FLAG IS NULL
3009 AND BATCH_ID = p_batch_id
3010 AND TRANSACTION_TYPE = 'CREATE'; --Modified for bug 11670735
3011
3012 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
3013 SET STATUS_CODE = 'N'
3014 WHERE STATUS_CODE IS NULL
3015 AND BATCH_ID = p_batch_id
3016 AND TRANSACTION_TYPE = 'CREATE'; --Modified for bug 11670735
3017
3018 IF l_new_rows IS NOT NULL THEN
3019 -- Delete
3020 FORALL rid_ix IN INDICES OF l_old_row_ids
3021 DELETE FROM EGO_ITEM_ASSOCIATIONS_INTF
3022 WHERE ROWID = l_old_row_ids( rid_ix );
3023 -- Insert
3024 FORALL row_index IN INDICES OF l_new_rows
3025 INSERT INTO EGO_ITEM_ASSOCIATIONS_INTF
3026 VALUES l_new_rows( row_index );
3027 END IF;
3028 Debug_Conc_Log( 'End of Call to Merge_Associations ');
3029
3030 END merge_associations;
3031
3032
3033 PROCEDURE merge_batch ( p_batch_id IN NUMBER
3034 , p_is_pdh_batch IN FLAG DEFAULT NULL
3035 , p_ss_id IN NUMBER DEFAULT NULL
3036 , p_master_org_id IN NUMBER DEFAULT NULL
3037 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
3038 )
3039 IS
3040 l_org_id NUMBER := p_master_org_id;
3041 l_pdh_batch_flag FLAG := p_is_pdh_batch;
3042 l_ss_id NUMBER := p_ss_id;
3043 BEGIN
3044 Debug_Conc_Log( 'merge_batch: Starting for batch_id=' || TO_CHAR(p_batch_id) );
3045 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
3046 merge_params_from_batch_header( p_batch_id => p_batch_id
3047 , x_is_pdh_batch => l_pdh_batch_flag
3048 , x_ss_id => l_ss_id
3049 , x_master_org_id => l_org_id
3050 );
3051 END IF;
3052
3053 Debug_Conc_Log( 'merge_batch: Merging batch items' );
3054 MERGE_ITEMS( p_batch_id => p_batch_id
3055 , p_master_org_id => l_org_id
3056 , p_is_pdh_batch => l_pdh_batch_flag
3057 , p_ss_id => l_ss_id
3058 , p_commit => FND_API.G_FALSE
3059 );
3060 Debug_Conc_Log( 'merge_batch: Merging batch revisions' );
3061 MERGE_REVS ( p_batch_id => p_batch_id
3062 , p_master_org_id => l_org_id
3063 , p_is_pdh_batch => l_pdh_batch_flag
3064 , p_ss_id => l_ss_id
3065 , p_commit => FND_API.G_FALSE
3066 );
3067 Debug_Conc_Log( 'merge_batch: Merging Associations' );
3068 merge_associations( p_batch_id => p_batch_id
3069 , p_is_pdh_batch => l_pdh_batch_flag
3070 , p_commit => FND_API.G_FALSE
3071 );
3072
3073 Debug_Conc_Log( 'merge_batch: Merging batch extended attributes' );
3074 MERGE_ATTRS( p_batch_id => p_batch_id
3075 , p_master_org_id => l_org_id
3076 , p_is_pdh_batch => l_pdh_batch_flag
3077 , p_ss_id => l_ss_id
3078 , p_commit => FND_API.G_FALSE
3079 );
3080 IF p_commit = FND_API.G_TRUE THEN
3081 Debug_Conc_Log( 'merge_batch: Committing' );
3082 COMMIT;
3083 END IF;
3084 Debug_Conc_Log( 'merge_batch: Exiting' );
3085 END merge_batch;
3086
3087 PROCEDURE merge_attrs ( p_batch_id IN NUMBER
3088 , p_is_pdh_batch IN FLAG DEFAULT NULL
3089 , p_ss_id IN NUMBER DEFAULT NULL
3090 , p_master_org_id IN NUMBER DEFAULT NULL
3091 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
3092 )
3093 IS
3094 l_org_id NUMBER := p_master_org_id;
3095 l_pdh_batch_flag FLAG := p_is_pdh_batch;
3096 l_ss_id NUMBER := p_ss_id;
3097 BEGIN
3098 Debug_Conc_Log( 'Starting merge_attrs for batch_id:' || to_char( p_batch_id ) );
3099 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
3100 merge_params_from_batch_header( p_batch_id => p_batch_id
3101 , x_is_pdh_batch => l_pdh_batch_flag
3102 , x_ss_id => l_ss_id
3103 , x_master_org_id => l_org_id
3104 );
3105 END IF;
3106
3107 Debug_Conc_Log( 'merge_attrs: merging item-level extended attributes' );
3108 MERGE_ITEM_ATTRS ( p_batch_id => p_batch_id
3109 , p_master_org_id => l_org_id
3110 , p_is_pdh_batch => l_pdh_batch_flag
3111 , p_ss_id => l_ss_id
3112 , p_commit => FND_API.G_FALSE
3113 );
3114 Debug_Conc_Log( 'merge_attrs: merging revision-level extended attributes' );
3115 MERGE_REV_ATTRS( p_batch_id => p_batch_id
3116 , p_master_org_id => l_org_id
3117 , p_is_pdh_batch => l_pdh_batch_flag
3118 , p_ss_id => l_ss_id
3119 , p_commit => FND_API.G_FALSE
3120 );
3121 IF p_commit = FND_API.G_TRUE THEN
3122 Debug_Conc_Log( 'merge_attrs: Committing' );
3123 COMMIT;
3124 END IF;
3125 Debug_Conc_Log( 'merge_attrs: Exiting' );
3126 END merge_attrs;
3127
3128 --=================================================================================================================--
3129 --------------------------------------- End of Merging Section ----------------------------------------------------
3130 --=================================================================================================================--
3131
3132 --=================================================================================================================--
3133 --------------------------------- Start of Merging Section for Import -----------------------------------------------
3134 --=================================================================================================================--
3135 /*
3136 * All methods in this section does the following - For all the ready records in batch i.e. with process status = 1,
3137 * if more than one record found for same primary keys (for example ITEM_NUMBER, ORGANIZATION_ID, REVISION for
3138 * revisions interface table), then merge all the data to all the rows having same PKs. Then mark all other rows
3139 * with process status = 111 and keep only one row with process status = 1. This way only one record will get
3140 * processed and all the data from all the records will get processed. Later, after completion of all imports,
3141 * the rows with process status = 111 will get converted to success or failure depending on the status of row
3142 * that got processed.
3143 */
3144
3145 -- Merges item and org assignments
3146 PROCEDURE Merge_Items_For_Import( p_batch_id IN NUMBER
3147 , p_master_org_id IN NUMBER
3148 )
3149 IS
3150 /*
3151 * This cursor is never executed.
3152 * It's only used for type definition.
3153 */
3154 CURSOR c_target_rec_type IS
3155 SELECT ROWID rid
3156 , 0 cnt
3157 , 0 rnk
3158 , msii.*
3159 FROM MTL_SYSTEM_ITEMS_INTERFACE msii;
3160
3161 TYPE MSII_ROWS IS TABLE OF MSII_ROW INDEX BY BINARY_INTEGER;
3162 TYPE MSII_CURSOR IS REF CURSOR;
3163 c_target_rows MSII_CURSOR;
3164 old_row c_target_rec_type%ROWTYPE;
3165
3166 l_merged_rows MSII_ROWS;
3167 l_new_rows MSII_ROWS;
3168 l_merged_row MSII_ROW;
3169 l_old_rowids UROWID_TABLE;
3170
3171 l_candidate_trans MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_TYPE%TYPE;
3172
3173 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
3174 l_mrow_ix PLS_INTEGER := 0;
3175 l_new_row_idx PLS_INTEGER := 0;
3176
3177 l_org_id MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
3178 l_proc_log_prefix CONSTANT VARCHAR2( 30 ) := 'Merge_Items_For_Import - ';
3179 BEGIN
3180 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
3181 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
3182 -- making sure that item_number always has a value for ready records
3183 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
3184 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
3185 FROM MTL_SYSTEM_ITEMS_KFV
3186 WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
3187 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID)
3188 WHERE SET_PROCESS_ID = p_batch_id
3189 AND PROCESS_FLAG = 1
3190 AND INVENTORY_ITEM_ID IS NOT NULL
3191 AND ITEM_NUMBER IS NULL;
3192
3193 OPEN c_target_rows FOR
3194 SELECT *
3195 FROM
3196 (SELECT
3197 ROWID rid,
3198 COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID) cnt,
3199 RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID) rnk,
3200 msii.*
3201 FROM MTL_SYSTEM_ITEMS_INTERFACE msii
3202 WHERE PROCESS_FLAG = 1
3203 AND SET_PROCESS_ID = p_batch_id
3204 AND ITEM_NUMBER IS NOT NULL
3205 AND ORGANIZATION_ID IS NOT NULL
3206 AND EXISTS
3207 (SELECT NULL
3208 FROM MTL_PARAMETERS mp
3209 WHERE mp.ORGANIZATION_ID = msii.ORGANIZATION_ID
3210 AND mp.MASTER_ORGANIZATION_ID = l_org_id
3211 )
3212 ) sub
3213 WHERE sub.cnt > 1
3214 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
3215
3216 l_old_rowids := UROWID_TABLE( );
3217 l_new_row_idx := 0;
3218 LOOP
3219 FETCH c_target_rows INTO old_row;
3220 IF c_target_rows%NOTFOUND AND l_new_row_idx > 0 THEN
3221 FOR i IN 1..l_new_row_idx LOOP
3222 Debug_Conc_Log( l_proc_log_prefix || ' No More records found for processing.');
3223 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
3224 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ',' ||
3225 l_new_rows( i ).SOURCE_SYSTEM_ID);
3226 l_mrow_ix := l_mrow_ix + 1;
3227 l_merged_rows( l_mrow_ix ) := l_merged_row;
3228 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
3229 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
3230 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
3231 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3232 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE_DESC;
3233 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := l_new_rows( i ).CONFIRM_STATUS;
3234 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
3235 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
3236 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
3237 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
3238 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
3239 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
3240 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3241 END IF; --IF l_new_row_idx > 0 THEN
3242 EXIT WHEN c_target_rows%NOTFOUND;
3243
3244 l_old_rowids.EXTEND;
3245 l_old_rowids( l_old_rowids.LAST ) := old_row.RID;
3246
3247 IF( old_row.RNK <> l_cur_rank ) THEN
3248 -- check if already merged rows exists, then insert them into l_merged_rows
3249 -- when a final merged record is ready for one item-org then for each source system reference
3250 -- we will insert a merged record i.e. ssr, msii.merged_record
3251 IF l_new_row_idx > 0 THEN
3252 FOR i IN 1..l_new_row_idx LOOP
3253 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
3254 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
3255 l_new_rows( i ).SOURCE_SYSTEM_ID);
3256 l_mrow_ix := l_mrow_ix + 1;
3257 l_merged_rows( l_mrow_ix ) := l_merged_row;
3258 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
3259 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
3260 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
3261 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3262 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE_DESC;
3263 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := l_new_rows( i ).CONFIRM_STATUS;
3264 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
3265 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
3266 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
3267 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
3268 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
3269 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
3270 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3271 END IF; --IF l_new_row_idx > 0 THEN
3272 l_cur_rank := old_row.RNK;
3273 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
3274 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID = ' ||
3275 old_row.ITEM_NUMBER || ',' ||
3276 old_row.ORGANIZATION_ID || ', ' ||
3277 old_row.INVENTORY_ITEM_ID);
3278 l_new_rows.DELETE;
3279 l_new_row_idx := 1;
3280 l_new_rows( l_new_row_idx ).PROCESS_FLAG := old_row.PROCESS_FLAG;
3281 -- initializing l_merged_row . This row will contain the current merged row for an item
3282 l_merged_row := NULL;
3283 l_merged_row.SET_PROCESS_ID := p_batch_id;
3284 l_merged_row.PROCESS_FLAG := old_row.PROCESS_FLAG;
3285 ELSE
3286 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
3287 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID = ' ||
3288 old_row.ITEM_NUMBER || ', ' ||
3289 old_row.ORGANIZATION_ID || ', ' ||
3290 old_row.INVENTORY_ITEM_ID);
3291 l_new_row_idx := l_new_row_idx + 1;
3292 l_new_rows( l_new_row_idx ).PROCESS_FLAG := 111;
3293 END IF;
3294
3295 l_new_rows( l_new_row_idx ).SET_PROCESS_ID := p_batch_id;
3296 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID := old_row.SOURCE_SYSTEM_ID;
3297 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE := old_row.SOURCE_SYSTEM_REFERENCE;
3298 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE_DESC := old_row.SOURCE_SYSTEM_REFERENCE_DESC;
3299 l_new_rows( l_new_row_idx ).CONFIRM_STATUS := old_row.CONFIRM_STATUS;
3300 l_new_rows( l_new_row_idx ).CREATED_BY := old_row.CREATED_BY;
3301 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY := old_row.LAST_UPDATED_BY;
3302
3303 -- Special Cases:
3304 -- Transaction type
3305 l_candidate_trans := UPPER( old_row.TRANSACTION_TYPE );
3306
3307 IF l_merged_row.TRANSACTION_TYPE IS NULL
3308 OR l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
3309 THEN
3310 -- CREATE > SYNC > UPDATE : order of case expression matters
3311 l_merged_row.TRANSACTION_TYPE :=
3312 CASE
3313 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
3314 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
3315 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
3316 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
3317 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
3318 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
3319 ELSE NULL -- INVALID transaction types encountered so far ...
3320 END;
3321 END IF;
3322
3323 -- The following columns need to be treated as atomic groups
3324 -- 1. Item Identifier
3325 IF l_merged_row.INVENTORY_ITEM_ID IS NULL
3326 AND l_merged_row.ITEM_NUMBER IS NULL
3327 AND l_merged_row.SEGMENT1 IS NULL
3328 AND l_merged_row.SEGMENT2 IS NULL
3329 AND l_merged_row.SEGMENT3 IS NULL
3330 AND l_merged_row.SEGMENT4 IS NULL
3331 AND l_merged_row.SEGMENT5 IS NULL
3332 AND l_merged_row.SEGMENT6 IS NULL
3333 AND l_merged_row.SEGMENT7 IS NULL
3334 AND l_merged_row.SEGMENT8 IS NULL
3335 AND l_merged_row.SEGMENT9 IS NULL
3336 AND l_merged_row.SEGMENT10 IS NULL
3337 AND l_merged_row.SEGMENT11 IS NULL
3338 AND l_merged_row.SEGMENT12 IS NULL
3339 AND l_merged_row.SEGMENT13 IS NULL
3340 AND l_merged_row.SEGMENT14 IS NULL
3341 AND l_merged_row.SEGMENT15 IS NULL
3342 AND l_merged_row.SEGMENT16 IS NULL
3343 AND l_merged_row.SEGMENT17 IS NULL
3344 AND l_merged_row.SEGMENT18 IS NULL
3345 AND l_merged_row.SEGMENT19 IS NULL
3346 AND l_merged_row.SEGMENT20 IS NULL
3347 THEN
3348 l_merged_row.INVENTORY_ITEM_ID := old_row.INVENTORY_ITEM_ID;
3349 l_merged_row.ITEM_NUMBER := old_row.ITEM_NUMBER;
3350 l_merged_row.SEGMENT1 := old_row.SEGMENT1;
3351 l_merged_row.SEGMENT2 := old_row.SEGMENT2;
3352 l_merged_row.SEGMENT3 := old_row.SEGMENT3;
3353 l_merged_row.SEGMENT4 := old_row.SEGMENT4;
3354 l_merged_row.SEGMENT5 := old_row.SEGMENT5;
3355 l_merged_row.SEGMENT6 := old_row.SEGMENT6;
3356 l_merged_row.SEGMENT7 := old_row.SEGMENT7;
3357 l_merged_row.SEGMENT8 := old_row.SEGMENT8;
3358 l_merged_row.SEGMENT9 := old_row.SEGMENT9;
3359 l_merged_row.SEGMENT10 := old_row.SEGMENT10;
3360 l_merged_row.SEGMENT11 := old_row.SEGMENT11;
3361 l_merged_row.SEGMENT12 := old_row.SEGMENT12;
3362 l_merged_row.SEGMENT13 := old_row.SEGMENT13;
3363 l_merged_row.SEGMENT14 := old_row.SEGMENT14;
3364 l_merged_row.SEGMENT15 := old_row.SEGMENT15;
3365 l_merged_row.SEGMENT16 := old_row.SEGMENT16;
3366 l_merged_row.SEGMENT17 := old_row.SEGMENT17;
3367 l_merged_row.SEGMENT18 := old_row.SEGMENT18;
3368 l_merged_row.SEGMENT19 := old_row.SEGMENT19;
3369 l_merged_row.SEGMENT20 := old_row.SEGMENT20;
3370 END IF;
3371
3372 -- 2. Template Identifier
3373 IF l_merged_row.TEMPLATE_ID IS NULL
3374 AND l_merged_row.TEMPLATE_NAME IS NULL
3375 THEN
3376 l_merged_row.TEMPLATE_ID := old_row.TEMPLATE_ID ;
3377 l_merged_row.TEMPLATE_NAME := old_row.TEMPLATE_NAME ;
3378 END IF;
3379
3380 -- 3. Item Catalog Category
3381 IF l_merged_row.ITEM_CATALOG_GROUP_ID IS NULL
3382 AND l_merged_row.ITEM_CATALOG_GROUP_NAME IS NULL
3383 THEN
3384 l_merged_row.ITEM_CATALOG_GROUP_ID := old_row.ITEM_CATALOG_GROUP_ID ;
3385 l_merged_row.ITEM_CATALOG_GROUP_NAME := old_row.ITEM_CATALOG_GROUP_NAME ;
3386 END IF;
3387
3388 -- 4. Primary UOM
3389 IF l_merged_row.PRIMARY_UOM_CODE IS NULL
3390 AND l_merged_row.PRIMARY_UNIT_OF_MEASURE IS NULL
3391 THEN
3392 l_merged_row.PRIMARY_UOM_CODE := old_row.PRIMARY_UOM_CODE ;
3393 l_merged_row.PRIMARY_UNIT_OF_MEASURE := old_row.PRIMARY_UNIT_OF_MEASURE ;
3394 END IF;
3395
3396 -- 5. Organization
3397 IF l_merged_row.ORGANIZATION_ID IS NULL
3398 AND l_merged_row.ORGANIZATION_CODE IS NULL
3399 THEN
3400 l_merged_row.ORGANIZATION_ID := old_row.ORGANIZATION_ID ;
3401 l_merged_row.ORGANIZATION_CODE := old_row.ORGANIZATION_CODE ;
3402 END IF;
3403
3404 -- 6. Copy Organization
3405 IF l_merged_row.COPY_ORGANIZATION_ID IS NULL
3406 AND l_merged_row.COPY_ORGANIZATION_CODE IS NULL
3407 THEN
3408 l_merged_row.COPY_ORGANIZATION_ID := old_row.COPY_ORGANIZATION_ID ;
3409 l_merged_row.COPY_ORGANIZATION_CODE := old_row.COPY_ORGANIZATION_CODE ;
3410 END IF;
3411
3412 if l_merged_row.ACCEPTABLE_EARLY_DAYS is null then l_merged_row.ACCEPTABLE_EARLY_DAYS := old_row.ACCEPTABLE_EARLY_DAYS; end if;
3413 if l_merged_row.ACCEPTABLE_RATE_DECREASE is null then l_merged_row.ACCEPTABLE_RATE_DECREASE := old_row.ACCEPTABLE_RATE_DECREASE; end if;
3414 if l_merged_row.ACCEPTABLE_RATE_INCREASE is null then l_merged_row.ACCEPTABLE_RATE_INCREASE := old_row.ACCEPTABLE_RATE_INCREASE; end if;
3415 if l_merged_row.ACCOUNTING_RULE_ID is null then l_merged_row.ACCOUNTING_RULE_ID := old_row.ACCOUNTING_RULE_ID; end if;
3416 if l_merged_row.ALLOWED_UNITS_LOOKUP_CODE is null then l_merged_row.ALLOWED_UNITS_LOOKUP_CODE := old_row.ALLOWED_UNITS_LOOKUP_CODE; end if;
3417 if l_merged_row.ALLOW_EXPRESS_DELIVERY_FLAG is null then l_merged_row.ALLOW_EXPRESS_DELIVERY_FLAG := old_row.ALLOW_EXPRESS_DELIVERY_FLAG; end if;
3418 if l_merged_row.ALLOW_ITEM_DESC_UPDATE_FLAG is null then l_merged_row.ALLOW_ITEM_DESC_UPDATE_FLAG := old_row.ALLOW_ITEM_DESC_UPDATE_FLAG; end if;
3419 if l_merged_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG is null then l_merged_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG := old_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG; end if;
3420 if l_merged_row.ALLOW_UNORDERED_RECEIPTS_FLAG is null then l_merged_row.ALLOW_UNORDERED_RECEIPTS_FLAG := old_row.ALLOW_UNORDERED_RECEIPTS_FLAG; end if;
3421 if l_merged_row.ASN_AUTOEXPIRE_FLAG is null then l_merged_row.ASN_AUTOEXPIRE_FLAG := old_row.ASN_AUTOEXPIRE_FLAG; end if;
3422 if l_merged_row.ASSET_CATEGORY_ID is null then l_merged_row.ASSET_CATEGORY_ID := old_row.ASSET_CATEGORY_ID; end if;
3423 if l_merged_row.ASSET_CREATION_CODE is null then l_merged_row.ASSET_CREATION_CODE := old_row.ASSET_CREATION_CODE; end if;
3424 if l_merged_row.ATO_FORECAST_CONTROL is null then l_merged_row.ATO_FORECAST_CONTROL := old_row.ATO_FORECAST_CONTROL; end if;
3425 if l_merged_row.ATP_COMPONENTS_FLAG is null then l_merged_row.ATP_COMPONENTS_FLAG := old_row.ATP_COMPONENTS_FLAG; end if;
3426 if l_merged_row.ATP_FLAG is null then l_merged_row.ATP_FLAG := old_row.ATP_FLAG; end if;
3427 if l_merged_row.ATP_RULE_ID is null then l_merged_row.ATP_RULE_ID := old_row.ATP_RULE_ID; end if;
3428 if l_merged_row.ATTRIBUTE1 is null then l_merged_row.ATTRIBUTE1 := old_row.ATTRIBUTE1; end if;
3429 if l_merged_row.ATTRIBUTE10 is null then l_merged_row.ATTRIBUTE10 := old_row.ATTRIBUTE10; end if;
3430 if l_merged_row.ATTRIBUTE11 is null then l_merged_row.ATTRIBUTE11 := old_row.ATTRIBUTE11; end if;
3431 if l_merged_row.ATTRIBUTE12 is null then l_merged_row.ATTRIBUTE12 := old_row.ATTRIBUTE12; end if;
3432 if l_merged_row.ATTRIBUTE13 is null then l_merged_row.ATTRIBUTE13 := old_row.ATTRIBUTE13; end if;
3433 if l_merged_row.ATTRIBUTE14 is null then l_merged_row.ATTRIBUTE14 := old_row.ATTRIBUTE14; end if;
3434 if l_merged_row.ATTRIBUTE15 is null then l_merged_row.ATTRIBUTE15 := old_row.ATTRIBUTE15; end if;
3435 if l_merged_row.ATTRIBUTE16 is null then l_merged_row.ATTRIBUTE16 := old_row.ATTRIBUTE16; end if;
3436 if l_merged_row.ATTRIBUTE17 is null then l_merged_row.ATTRIBUTE17 := old_row.ATTRIBUTE17; end if;
3437 if l_merged_row.ATTRIBUTE18 is null then l_merged_row.ATTRIBUTE18 := old_row.ATTRIBUTE18; end if;
3438 if l_merged_row.ATTRIBUTE19 is null then l_merged_row.ATTRIBUTE19 := old_row.ATTRIBUTE19; end if;
3439 if l_merged_row.ATTRIBUTE2 is null then l_merged_row.ATTRIBUTE2 := old_row.ATTRIBUTE2; end if;
3440 if l_merged_row.ATTRIBUTE20 is null then l_merged_row.ATTRIBUTE20 := old_row.ATTRIBUTE20; end if;
3441 if l_merged_row.ATTRIBUTE21 is null then l_merged_row.ATTRIBUTE21 := old_row.ATTRIBUTE21; end if;
3442 if l_merged_row.ATTRIBUTE22 is null then l_merged_row.ATTRIBUTE22 := old_row.ATTRIBUTE22; end if;
3443 if l_merged_row.ATTRIBUTE23 is null then l_merged_row.ATTRIBUTE23 := old_row.ATTRIBUTE23; end if;
3444 if l_merged_row.ATTRIBUTE24 is null then l_merged_row.ATTRIBUTE24 := old_row.ATTRIBUTE24; end if;
3445 if l_merged_row.ATTRIBUTE25 is null then l_merged_row.ATTRIBUTE25 := old_row.ATTRIBUTE25; end if;
3446 if l_merged_row.ATTRIBUTE26 is null then l_merged_row.ATTRIBUTE26 := old_row.ATTRIBUTE26; end if;
3447 if l_merged_row.ATTRIBUTE27 is null then l_merged_row.ATTRIBUTE27 := old_row.ATTRIBUTE27; end if;
3448 if l_merged_row.ATTRIBUTE28 is null then l_merged_row.ATTRIBUTE28 := old_row.ATTRIBUTE28; end if;
3449 if l_merged_row.ATTRIBUTE29 is null then l_merged_row.ATTRIBUTE29 := old_row.ATTRIBUTE29; end if;
3450 if l_merged_row.ATTRIBUTE3 is null then l_merged_row.ATTRIBUTE3 := old_row.ATTRIBUTE3; end if;
3451 if l_merged_row.ATTRIBUTE30 is null then l_merged_row.ATTRIBUTE30 := old_row.ATTRIBUTE30; end if;
3452 if l_merged_row.ATTRIBUTE4 is null then l_merged_row.ATTRIBUTE4 := old_row.ATTRIBUTE4; end if;
3453 if l_merged_row.ATTRIBUTE5 is null then l_merged_row.ATTRIBUTE5 := old_row.ATTRIBUTE5; end if;
3454 if l_merged_row.ATTRIBUTE6 is null then l_merged_row.ATTRIBUTE6 := old_row.ATTRIBUTE6; end if;
3455 if l_merged_row.ATTRIBUTE7 is null then l_merged_row.ATTRIBUTE7 := old_row.ATTRIBUTE7; end if;
3456 if l_merged_row.ATTRIBUTE8 is null then l_merged_row.ATTRIBUTE8 := old_row.ATTRIBUTE8; end if;
3457 if l_merged_row.ATTRIBUTE9 is null then l_merged_row.ATTRIBUTE9 := old_row.ATTRIBUTE9; end if;
3458 if l_merged_row.ATTRIBUTE_CATEGORY is null then l_merged_row.ATTRIBUTE_CATEGORY := old_row.ATTRIBUTE_CATEGORY; end if;
3459 if l_merged_row.AUTO_CREATED_CONFIG_FLAG is null then l_merged_row.AUTO_CREATED_CONFIG_FLAG := old_row.AUTO_CREATED_CONFIG_FLAG; end if;
3460 if l_merged_row.AUTO_LOT_ALPHA_PREFIX is null then l_merged_row.AUTO_LOT_ALPHA_PREFIX := old_row.AUTO_LOT_ALPHA_PREFIX; end if;
3461 if l_merged_row.AUTO_REDUCE_MPS is null then l_merged_row.AUTO_REDUCE_MPS := old_row.AUTO_REDUCE_MPS; end if;
3462 if l_merged_row.AUTO_SERIAL_ALPHA_PREFIX is null then l_merged_row.AUTO_SERIAL_ALPHA_PREFIX := old_row.AUTO_SERIAL_ALPHA_PREFIX; end if;
3463 if l_merged_row.BACK_ORDERABLE_FLAG is null then l_merged_row.BACK_ORDERABLE_FLAG := old_row.BACK_ORDERABLE_FLAG; end if;
3464 if l_merged_row.BASE_ITEM_ID is null then l_merged_row.BASE_ITEM_ID := old_row.BASE_ITEM_ID; end if;
3465 if l_merged_row.BASE_WARRANTY_SERVICE_ID is null then l_merged_row.BASE_WARRANTY_SERVICE_ID := old_row.BASE_WARRANTY_SERVICE_ID; end if;
3466 if l_merged_row.BOM_ENABLED_FLAG is null then l_merged_row.BOM_ENABLED_FLAG := old_row.BOM_ENABLED_FLAG; end if;
3467 if l_merged_row.BOM_ITEM_TYPE is null then l_merged_row.BOM_ITEM_TYPE := old_row.BOM_ITEM_TYPE; end if;
3468 if l_merged_row.BUILD_IN_WIP_FLAG is null then l_merged_row.BUILD_IN_WIP_FLAG := old_row.BUILD_IN_WIP_FLAG; end if;
3469 if l_merged_row.BULK_PICKED_FLAG is null then l_merged_row.BULK_PICKED_FLAG := old_row.BULK_PICKED_FLAG; end if;
3470 if l_merged_row.BUYER_ID is null then l_merged_row.BUYER_ID := old_row.BUYER_ID; end if;
3471 if l_merged_row.CARRYING_COST is null then l_merged_row.CARRYING_COST := old_row.CARRYING_COST; end if;
3472 if l_merged_row.CAS_NUMBER is null then l_merged_row.CAS_NUMBER := old_row.CAS_NUMBER; end if;
3473 if l_merged_row.CATALOG_STATUS_FLAG is null then l_merged_row.CATALOG_STATUS_FLAG := old_row.CATALOG_STATUS_FLAG; end if;
3474 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := old_row.CHANGE_ID; end if;
3475 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := old_row.CHANGE_LINE_ID; end if;
3476 if l_merged_row.CHARGE_PERIODICITY_CODE is null then l_merged_row.CHARGE_PERIODICITY_CODE := old_row.CHARGE_PERIODICITY_CODE; end if;
3477 if l_merged_row.CHECK_SHORTAGES_FLAG is null then l_merged_row.CHECK_SHORTAGES_FLAG := old_row.CHECK_SHORTAGES_FLAG; end if;
3478 if l_merged_row.CHILD_LOT_FLAG is null then l_merged_row.CHILD_LOT_FLAG := old_row.CHILD_LOT_FLAG; end if;
3479 if l_merged_row.CHILD_LOT_PREFIX is null then l_merged_row.CHILD_LOT_PREFIX := old_row.CHILD_LOT_PREFIX; end if;
3480 if l_merged_row.CHILD_LOT_STARTING_NUMBER is null then l_merged_row.CHILD_LOT_STARTING_NUMBER := old_row.CHILD_LOT_STARTING_NUMBER; end if;
3481 if l_merged_row.CHILD_LOT_VALIDATION_FLAG is null then l_merged_row.CHILD_LOT_VALIDATION_FLAG := old_row.CHILD_LOT_VALIDATION_FLAG; end if;
3482 if l_merged_row.COLLATERAL_FLAG is null then l_merged_row.COLLATERAL_FLAG := old_row.COLLATERAL_FLAG; end if;
3483 if l_merged_row.COMMS_ACTIVATION_REQD_FLAG is null then l_merged_row.COMMS_ACTIVATION_REQD_FLAG := old_row.COMMS_ACTIVATION_REQD_FLAG; end if;
3484 if l_merged_row.COMMS_NL_TRACKABLE_FLAG is null then l_merged_row.COMMS_NL_TRACKABLE_FLAG := old_row.COMMS_NL_TRACKABLE_FLAG; end if;
3485 if l_merged_row.CONFIG_MATCH is null then l_merged_row.CONFIG_MATCH := old_row.CONFIG_MATCH; end if;
3486 if l_merged_row.CONFIG_MODEL_TYPE is null then l_merged_row.CONFIG_MODEL_TYPE := old_row.CONFIG_MODEL_TYPE; end if;
3487 if l_merged_row.CONFIG_ORGS is null then l_merged_row.CONFIG_ORGS := old_row.CONFIG_ORGS; end if;
3488 if l_merged_row.CONSIGNED_FLAG is null then l_merged_row.CONSIGNED_FLAG := old_row.CONSIGNED_FLAG; end if;
3489 if l_merged_row.CONTAINER_ITEM_FLAG is null then l_merged_row.CONTAINER_ITEM_FLAG := old_row.CONTAINER_ITEM_FLAG; end if;
3490 if l_merged_row.CONTAINER_TYPE_CODE is null then l_merged_row.CONTAINER_TYPE_CODE := old_row.CONTAINER_TYPE_CODE; end if;
3491 if l_merged_row.CONTINOUS_TRANSFER is null then l_merged_row.CONTINOUS_TRANSFER := old_row.CONTINOUS_TRANSFER; end if;
3492 if l_merged_row.CONTRACT_ITEM_TYPE_CODE is null then l_merged_row.CONTRACT_ITEM_TYPE_CODE := old_row.CONTRACT_ITEM_TYPE_CODE; end if;
3493 if l_merged_row.CONVERGENCE is null then l_merged_row.CONVERGENCE := old_row.CONVERGENCE; end if;
3494 if l_merged_row.COPY_ITEM_ID is null then l_merged_row.COPY_ITEM_ID := old_row.COPY_ITEM_ID; end if;
3495 if l_merged_row.COPY_ITEM_NUMBER is null then l_merged_row.COPY_ITEM_NUMBER := old_row.COPY_ITEM_NUMBER; end if;
3496 if l_merged_row.COPY_LOT_ATTRIBUTE_FLAG is null then l_merged_row.COPY_LOT_ATTRIBUTE_FLAG := old_row.COPY_LOT_ATTRIBUTE_FLAG; end if;
3497 if l_merged_row.COSTING_ENABLED_FLAG is null then l_merged_row.COSTING_ENABLED_FLAG := old_row.COSTING_ENABLED_FLAG; end if;
3498 if l_merged_row.COST_OF_SALES_ACCOUNT is null then l_merged_row.COST_OF_SALES_ACCOUNT := old_row.COST_OF_SALES_ACCOUNT; end if;
3499 if l_merged_row.COUPON_EXEMPT_FLAG is null then l_merged_row.COUPON_EXEMPT_FLAG := old_row.COUPON_EXEMPT_FLAG; end if;
3500 if l_merged_row.COVERAGE_SCHEDULE_ID is null then l_merged_row.COVERAGE_SCHEDULE_ID := old_row.COVERAGE_SCHEDULE_ID; end if;
3501 if l_merged_row.CREATE_SUPPLY_FLAG is null then l_merged_row.CREATE_SUPPLY_FLAG := old_row.CREATE_SUPPLY_FLAG; end if;
3502 if l_merged_row.CRITICAL_COMPONENT_FLAG is null then l_merged_row.CRITICAL_COMPONENT_FLAG := old_row.CRITICAL_COMPONENT_FLAG; end if;
3503 if l_merged_row.CUMULATIVE_TOTAL_LEAD_TIME is null then l_merged_row.CUMULATIVE_TOTAL_LEAD_TIME := old_row.CUMULATIVE_TOTAL_LEAD_TIME; end if;
3504 if l_merged_row.CUM_MANUFACTURING_LEAD_TIME is null then l_merged_row.CUM_MANUFACTURING_LEAD_TIME := old_row.CUM_MANUFACTURING_LEAD_TIME; end if;
3505 if l_merged_row.CURRENT_PHASE_ID is null then l_merged_row.CURRENT_PHASE_ID := old_row.CURRENT_PHASE_ID; end if;
3506 if l_merged_row.CUSTOMER_ORDER_ENABLED_FLAG is null then l_merged_row.CUSTOMER_ORDER_ENABLED_FLAG := old_row.CUSTOMER_ORDER_ENABLED_FLAG; end if;
3507 if l_merged_row.CUSTOMER_ORDER_FLAG is null then l_merged_row.CUSTOMER_ORDER_FLAG := old_row.CUSTOMER_ORDER_FLAG; end if;
3508 if l_merged_row.CYCLE_COUNT_ENABLED_FLAG is null then l_merged_row.CYCLE_COUNT_ENABLED_FLAG := old_row.CYCLE_COUNT_ENABLED_FLAG; end if;
3509 if l_merged_row.DAYS_EARLY_RECEIPT_ALLOWED is null then l_merged_row.DAYS_EARLY_RECEIPT_ALLOWED := old_row.DAYS_EARLY_RECEIPT_ALLOWED; end if;
3510 if l_merged_row.DAYS_LATE_RECEIPT_ALLOWED is null then l_merged_row.DAYS_LATE_RECEIPT_ALLOWED := old_row.DAYS_LATE_RECEIPT_ALLOWED; end if;
3511 if l_merged_row.DAYS_MAX_INV_SUPPLY is null then l_merged_row.DAYS_MAX_INV_SUPPLY := old_row.DAYS_MAX_INV_SUPPLY; end if;
3512 if l_merged_row.DAYS_MAX_INV_WINDOW is null then l_merged_row.DAYS_MAX_INV_WINDOW := old_row.DAYS_MAX_INV_WINDOW; end if;
3513 if l_merged_row.DAYS_TGT_INV_SUPPLY is null then l_merged_row.DAYS_TGT_INV_SUPPLY := old_row.DAYS_TGT_INV_SUPPLY; end if;
3514 if l_merged_row.DAYS_TGT_INV_WINDOW is null then l_merged_row.DAYS_TGT_INV_WINDOW := old_row.DAYS_TGT_INV_WINDOW; end if;
3515 if l_merged_row.DEFAULT_GRADE is null then l_merged_row.DEFAULT_GRADE := old_row.DEFAULT_GRADE; end if;
3516 if l_merged_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG is null then l_merged_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG := old_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG; end if;
3517 if l_merged_row.DEFAULT_LOT_STATUS_ID is null then l_merged_row.DEFAULT_LOT_STATUS_ID := old_row.DEFAULT_LOT_STATUS_ID; end if;
3518 if l_merged_row.DEFAULT_SERIAL_STATUS_ID is null then l_merged_row.DEFAULT_SERIAL_STATUS_ID := old_row.DEFAULT_SERIAL_STATUS_ID; end if;
3519 if l_merged_row.DEFAULT_SHIPPING_ORG is null then l_merged_row.DEFAULT_SHIPPING_ORG := old_row.DEFAULT_SHIPPING_ORG; end if;
3520 if l_merged_row.DEFAULT_SO_SOURCE_TYPE is null then l_merged_row.DEFAULT_SO_SOURCE_TYPE := old_row.DEFAULT_SO_SOURCE_TYPE; end if;
3521 if l_merged_row.DEFECT_TRACKING_ON_FLAG is null then l_merged_row.DEFECT_TRACKING_ON_FLAG := old_row.DEFECT_TRACKING_ON_FLAG; end if;
3522 if l_merged_row.DEMAND_SOURCE_HEADER_ID is null then l_merged_row.DEMAND_SOURCE_HEADER_ID := old_row.DEMAND_SOURCE_HEADER_ID; end if;
3523 if l_merged_row.DEMAND_SOURCE_LINE is null then l_merged_row.DEMAND_SOURCE_LINE := old_row.DEMAND_SOURCE_LINE; end if;
3524 if l_merged_row.DEMAND_SOURCE_TYPE is null then l_merged_row.DEMAND_SOURCE_TYPE := old_row.DEMAND_SOURCE_TYPE; end if;
3525 if l_merged_row.DEMAND_TIME_FENCE_CODE is null then l_merged_row.DEMAND_TIME_FENCE_CODE := old_row.DEMAND_TIME_FENCE_CODE; end if;
3526 if l_merged_row.DEMAND_TIME_FENCE_DAYS is null then l_merged_row.DEMAND_TIME_FENCE_DAYS := old_row.DEMAND_TIME_FENCE_DAYS; end if;
3527 if l_merged_row.DESCRIPTION is null then l_merged_row.DESCRIPTION := old_row.DESCRIPTION; end if;
3528 if l_merged_row.DIMENSION_UOM_CODE is null then l_merged_row.DIMENSION_UOM_CODE := old_row.DIMENSION_UOM_CODE; end if;
3529 if l_merged_row.DIVERGENCE is null then l_merged_row.DIVERGENCE := old_row.DIVERGENCE; end if;
3530 if l_merged_row.DOWNLOADABLE_FLAG is null then l_merged_row.DOWNLOADABLE_FLAG := old_row.DOWNLOADABLE_FLAG; end if;
3531 if l_merged_row.DRP_PLANNED_FLAG is null then l_merged_row.DRP_PLANNED_FLAG := old_row.DRP_PLANNED_FLAG; end if;
3532 if l_merged_row.DUAL_UOM_CONTROL is null then l_merged_row.DUAL_UOM_CONTROL := old_row.DUAL_UOM_CONTROL; end if;
3533 if l_merged_row.DUAL_UOM_DEVIATION_HIGH is null then l_merged_row.DUAL_UOM_DEVIATION_HIGH := old_row.DUAL_UOM_DEVIATION_HIGH; end if;
3534 if l_merged_row.DUAL_UOM_DEVIATION_LOW is null then l_merged_row.DUAL_UOM_DEVIATION_LOW := old_row.DUAL_UOM_DEVIATION_LOW; end if;
3535 if l_merged_row.EAM_ACTIVITY_CAUSE_CODE is null then l_merged_row.EAM_ACTIVITY_CAUSE_CODE := old_row.EAM_ACTIVITY_CAUSE_CODE; end if;
3536 if l_merged_row.EAM_ACTIVITY_SOURCE_CODE is null then l_merged_row.EAM_ACTIVITY_SOURCE_CODE := old_row.EAM_ACTIVITY_SOURCE_CODE; end if;
3537 if l_merged_row.EAM_ACTIVITY_TYPE_CODE is null then l_merged_row.EAM_ACTIVITY_TYPE_CODE := old_row.EAM_ACTIVITY_TYPE_CODE; end if;
3538 if l_merged_row.EAM_ACT_NOTIFICATION_FLAG is null then l_merged_row.EAM_ACT_NOTIFICATION_FLAG := old_row.EAM_ACT_NOTIFICATION_FLAG; end if;
3539 if l_merged_row.EAM_ACT_SHUTDOWN_STATUS is null then l_merged_row.EAM_ACT_SHUTDOWN_STATUS := old_row.EAM_ACT_SHUTDOWN_STATUS; end if;
3540 if l_merged_row.EAM_ITEM_TYPE is null then l_merged_row.EAM_ITEM_TYPE := old_row.EAM_ITEM_TYPE; end if;
3541 if l_merged_row.EFFECTIVITY_CONTROL is null then l_merged_row.EFFECTIVITY_CONTROL := old_row.EFFECTIVITY_CONTROL; end if;
3542 if l_merged_row.ELECTRONIC_FLAG is null then l_merged_row.ELECTRONIC_FLAG := old_row.ELECTRONIC_FLAG; end if;
3543 if l_merged_row.ENABLED_FLAG is null then l_merged_row.ENABLED_FLAG := old_row.ENABLED_FLAG; end if;
3544 if l_merged_row.ENCUMBRANCE_ACCOUNT is null then l_merged_row.ENCUMBRANCE_ACCOUNT := old_row.ENCUMBRANCE_ACCOUNT; end if;
3545 if l_merged_row.END_ASSEMBLY_PEGGING_FLAG is null then l_merged_row.END_ASSEMBLY_PEGGING_FLAG := old_row.END_ASSEMBLY_PEGGING_FLAG; end if;
3546 if l_merged_row.END_DATE_ACTIVE is null then l_merged_row.END_DATE_ACTIVE := old_row.END_DATE_ACTIVE; end if;
3547 if l_merged_row.ENFORCE_SHIP_TO_LOCATION_CODE is null then l_merged_row.ENFORCE_SHIP_TO_LOCATION_CODE := old_row.ENFORCE_SHIP_TO_LOCATION_CODE; end if;
3548 if l_merged_row.ENGINEERING_DATE is null then l_merged_row.ENGINEERING_DATE := old_row.ENGINEERING_DATE; end if;
3549 if l_merged_row.ENGINEERING_ECN_CODE is null then l_merged_row.ENGINEERING_ECN_CODE := old_row.ENGINEERING_ECN_CODE; end if;
3550 if l_merged_row.ENGINEERING_ITEM_ID is null then l_merged_row.ENGINEERING_ITEM_ID := old_row.ENGINEERING_ITEM_ID; end if;
3551 if l_merged_row.ENG_ITEM_FLAG is null then l_merged_row.ENG_ITEM_FLAG := old_row.ENG_ITEM_FLAG; end if;
3552 if l_merged_row.EQUIPMENT_TYPE is null then l_merged_row.EQUIPMENT_TYPE := old_row.EQUIPMENT_TYPE; end if;
3553 if l_merged_row.EVENT_FLAG is null then l_merged_row.EVENT_FLAG := old_row.EVENT_FLAG; end if;
3554 if l_merged_row.EXCLUDE_FROM_BUDGET_FLAG is null then l_merged_row.EXCLUDE_FROM_BUDGET_FLAG := old_row.EXCLUDE_FROM_BUDGET_FLAG; end if;
3555 if l_merged_row.EXPENSE_ACCOUNT is null then l_merged_row.EXPENSE_ACCOUNT := old_row.EXPENSE_ACCOUNT; end if;
3556 if l_merged_row.EXPENSE_BILLABLE_FLAG is null then l_merged_row.EXPENSE_BILLABLE_FLAG := old_row.EXPENSE_BILLABLE_FLAG; end if;
3557 if l_merged_row.EXPIRATION_ACTION_CODE is null then l_merged_row.EXPIRATION_ACTION_CODE := old_row.EXPIRATION_ACTION_CODE; end if;
3558 if l_merged_row.EXPIRATION_ACTION_INTERVAL is null then l_merged_row.EXPIRATION_ACTION_INTERVAL := old_row.EXPIRATION_ACTION_INTERVAL; end if;
3559 if l_merged_row.FINANCING_ALLOWED_FLAG is null then l_merged_row.FINANCING_ALLOWED_FLAG := old_row.FINANCING_ALLOWED_FLAG; end if;
3560 if l_merged_row.FIXED_DAYS_SUPPLY is null then l_merged_row.FIXED_DAYS_SUPPLY := old_row.FIXED_DAYS_SUPPLY; end if;
3561 if l_merged_row.FIXED_LEAD_TIME is null then l_merged_row.FIXED_LEAD_TIME := old_row.FIXED_LEAD_TIME; end if;
3562 if l_merged_row.FIXED_LOT_MULTIPLIER is null then l_merged_row.FIXED_LOT_MULTIPLIER := old_row.FIXED_LOT_MULTIPLIER; end if;
3563 if l_merged_row.FIXED_ORDER_QUANTITY is null then l_merged_row.FIXED_ORDER_QUANTITY := old_row.FIXED_ORDER_QUANTITY; end if;
3564 if l_merged_row.FORECAST_HORIZON is null then l_merged_row.FORECAST_HORIZON := old_row.FORECAST_HORIZON; end if;
3565 if l_merged_row.FULL_LEAD_TIME is null then l_merged_row.FULL_LEAD_TIME := old_row.FULL_LEAD_TIME; end if;
3566 if l_merged_row.GLOBAL_ATTRIBUTE1 is null then l_merged_row.GLOBAL_ATTRIBUTE1 := old_row.GLOBAL_ATTRIBUTE1; end if;
3567 if l_merged_row.GLOBAL_ATTRIBUTE10 is null then l_merged_row.GLOBAL_ATTRIBUTE10 := old_row.GLOBAL_ATTRIBUTE10; end if;
3568 if l_merged_row.GLOBAL_ATTRIBUTE2 is null then l_merged_row.GLOBAL_ATTRIBUTE2 := old_row.GLOBAL_ATTRIBUTE2; end if;
3569 if l_merged_row.GLOBAL_ATTRIBUTE3 is null then l_merged_row.GLOBAL_ATTRIBUTE3 := old_row.GLOBAL_ATTRIBUTE3; end if;
3570 if l_merged_row.GLOBAL_ATTRIBUTE4 is null then l_merged_row.GLOBAL_ATTRIBUTE4 := old_row.GLOBAL_ATTRIBUTE4; end if;
3571 if l_merged_row.GLOBAL_ATTRIBUTE5 is null then l_merged_row.GLOBAL_ATTRIBUTE5 := old_row.GLOBAL_ATTRIBUTE5; end if;
3572 if l_merged_row.GLOBAL_ATTRIBUTE6 is null then l_merged_row.GLOBAL_ATTRIBUTE6 := old_row.GLOBAL_ATTRIBUTE6; end if;
3573 if l_merged_row.GLOBAL_ATTRIBUTE7 is null then l_merged_row.GLOBAL_ATTRIBUTE7 := old_row.GLOBAL_ATTRIBUTE7; end if;
3574 if l_merged_row.GLOBAL_ATTRIBUTE8 is null then l_merged_row.GLOBAL_ATTRIBUTE8 := old_row.GLOBAL_ATTRIBUTE8; end if;
3575 if l_merged_row.GLOBAL_ATTRIBUTE9 is null then l_merged_row.GLOBAL_ATTRIBUTE9 := old_row.GLOBAL_ATTRIBUTE9; end if;
3576 if l_merged_row.GLOBAL_ATTRIBUTE_CATEGORY is null then l_merged_row.GLOBAL_ATTRIBUTE_CATEGORY := old_row.GLOBAL_ATTRIBUTE_CATEGORY; end if;
3577 if l_merged_row.GLOBAL_TRADE_ITEM_NUMBER is null then l_merged_row.GLOBAL_TRADE_ITEM_NUMBER := old_row.GLOBAL_TRADE_ITEM_NUMBER; end if;
3578 if l_merged_row.GRADE_CONTROL_FLAG is null then l_merged_row.GRADE_CONTROL_FLAG := old_row.GRADE_CONTROL_FLAG; end if;
3579 if l_merged_row.GTIN_DESCRIPTION is null then l_merged_row.GTIN_DESCRIPTION := old_row.GTIN_DESCRIPTION; end if;
3580 if l_merged_row.HAZARDOUS_MATERIAL_FLAG is null then l_merged_row.HAZARDOUS_MATERIAL_FLAG := old_row.HAZARDOUS_MATERIAL_FLAG; end if;
3581 if l_merged_row.HAZARD_CLASS_ID is null then l_merged_row.HAZARD_CLASS_ID := old_row.HAZARD_CLASS_ID; end if;
3582 if l_merged_row.HOLD_DAYS is null then l_merged_row.HOLD_DAYS := old_row.HOLD_DAYS; end if;
3583 if l_merged_row.IB_ITEM_INSTANCE_CLASS is null then l_merged_row.IB_ITEM_INSTANCE_CLASS := old_row.IB_ITEM_INSTANCE_CLASS; end if;
3584 if l_merged_row.INDIVISIBLE_FLAG is null then l_merged_row.INDIVISIBLE_FLAG := old_row.INDIVISIBLE_FLAG; end if;
3585 if l_merged_row.INSPECTION_REQUIRED_FLAG is null then l_merged_row.INSPECTION_REQUIRED_FLAG := old_row.INSPECTION_REQUIRED_FLAG; end if;
3586 if l_merged_row.INTERNAL_ORDER_ENABLED_FLAG is null then l_merged_row.INTERNAL_ORDER_ENABLED_FLAG := old_row.INTERNAL_ORDER_ENABLED_FLAG; end if;
3587 if l_merged_row.INTERNAL_ORDER_FLAG is null then l_merged_row.INTERNAL_ORDER_FLAG := old_row.INTERNAL_ORDER_FLAG; end if;
3588 if l_merged_row.INTERNAL_VOLUME is null then l_merged_row.INTERNAL_VOLUME := old_row.INTERNAL_VOLUME; end if;
3589 if l_merged_row.INVENTORY_ASSET_FLAG is null then l_merged_row.INVENTORY_ASSET_FLAG := old_row.INVENTORY_ASSET_FLAG; end if;
3590 if l_merged_row.INVENTORY_CARRY_PENALTY is null then l_merged_row.INVENTORY_CARRY_PENALTY := old_row.INVENTORY_CARRY_PENALTY; end if;
3591 if l_merged_row.INVENTORY_ITEM_FLAG is null then l_merged_row.INVENTORY_ITEM_FLAG := old_row.INVENTORY_ITEM_FLAG; end if;
3592 if l_merged_row.INVENTORY_ITEM_STATUS_CODE is null then l_merged_row.INVENTORY_ITEM_STATUS_CODE := old_row.INVENTORY_ITEM_STATUS_CODE; end if;
3593 if l_merged_row.INVENTORY_PLANNING_CODE is null then l_merged_row.INVENTORY_PLANNING_CODE := old_row.INVENTORY_PLANNING_CODE; end if;
3594 if l_merged_row.INVOICEABLE_ITEM_FLAG is null then l_merged_row.INVOICEABLE_ITEM_FLAG := old_row.INVOICEABLE_ITEM_FLAG; end if;
3595 if l_merged_row.INVOICE_CLOSE_TOLERANCE is null then l_merged_row.INVOICE_CLOSE_TOLERANCE := old_row.INVOICE_CLOSE_TOLERANCE; end if;
3596 if l_merged_row.INVOICE_ENABLED_FLAG is null then l_merged_row.INVOICE_ENABLED_FLAG := old_row.INVOICE_ENABLED_FLAG; end if;
3597 if l_merged_row.INVOICING_RULE_ID is null then l_merged_row.INVOICING_RULE_ID := old_row.INVOICING_RULE_ID; end if;
3598 if l_merged_row.ITEM_TYPE is null then l_merged_row.ITEM_TYPE := old_row.ITEM_TYPE; end if;
3599 if l_merged_row.LEAD_TIME_LOT_SIZE is null then l_merged_row.LEAD_TIME_LOT_SIZE := old_row.LEAD_TIME_LOT_SIZE; end if;
3600 if l_merged_row.LIFECYCLE_ID is null then l_merged_row.LIFECYCLE_ID := old_row.LIFECYCLE_ID; end if;
3601 if l_merged_row.LIST_PRICE_PER_UNIT is null then l_merged_row.LIST_PRICE_PER_UNIT := old_row.LIST_PRICE_PER_UNIT; end if;
3602 if l_merged_row.LOCATION_CONTROL_CODE is null then l_merged_row.LOCATION_CONTROL_CODE := old_row.LOCATION_CONTROL_CODE; end if;
3603 if l_merged_row.LONG_DESCRIPTION is null then l_merged_row.LONG_DESCRIPTION := old_row.LONG_DESCRIPTION; end if;
3604 if l_merged_row.LOT_CONTROL_CODE is null then l_merged_row.LOT_CONTROL_CODE := old_row.LOT_CONTROL_CODE; end if;
3605 if l_merged_row.LOT_DIVISIBLE_FLAG is null then l_merged_row.LOT_DIVISIBLE_FLAG := old_row.LOT_DIVISIBLE_FLAG; end if;
3606 if l_merged_row.LOT_MERGE_ENABLED is null then l_merged_row.LOT_MERGE_ENABLED := old_row.LOT_MERGE_ENABLED; end if;
3607 if l_merged_row.LOT_SPLIT_ENABLED is null then l_merged_row.LOT_SPLIT_ENABLED := old_row.LOT_SPLIT_ENABLED; end if;
3608 if l_merged_row.LOT_STATUS_ENABLED is null then l_merged_row.LOT_STATUS_ENABLED := old_row.LOT_STATUS_ENABLED; end if;
3609 if l_merged_row.LOT_SUBSTITUTION_ENABLED is null then l_merged_row.LOT_SUBSTITUTION_ENABLED := old_row.LOT_SUBSTITUTION_ENABLED; end if;
3610 if l_merged_row.LOT_TRANSLATE_ENABLED is null then l_merged_row.LOT_TRANSLATE_ENABLED := old_row.LOT_TRANSLATE_ENABLED; end if;
3611 if l_merged_row.MARKET_PRICE is null then l_merged_row.MARKET_PRICE := old_row.MARKET_PRICE; end if;
3612 if l_merged_row.MATERIAL_BILLABLE_FLAG is null then l_merged_row.MATERIAL_BILLABLE_FLAG := old_row.MATERIAL_BILLABLE_FLAG; end if;
3613 if l_merged_row.MATERIAL_COST is null then l_merged_row.MATERIAL_COST := old_row.MATERIAL_COST; end if;
3614 if l_merged_row.MATERIAL_OH_RATE is null then l_merged_row.MATERIAL_OH_RATE := old_row.MATERIAL_OH_RATE; end if;
3615 if l_merged_row.MATERIAL_OH_SUB_ELEM is null then l_merged_row.MATERIAL_OH_SUB_ELEM := old_row.MATERIAL_OH_SUB_ELEM; end if;
3616 if l_merged_row.MATERIAL_OH_SUB_ELEM_ID is null then l_merged_row.MATERIAL_OH_SUB_ELEM_ID := old_row.MATERIAL_OH_SUB_ELEM_ID; end if;
3617 if l_merged_row.MATERIAL_SUB_ELEM is null then l_merged_row.MATERIAL_SUB_ELEM := old_row.MATERIAL_SUB_ELEM; end if;
3618 if l_merged_row.MATERIAL_SUB_ELEM_ID is null then l_merged_row.MATERIAL_SUB_ELEM_ID := old_row.MATERIAL_SUB_ELEM_ID; end if;
3619 if l_merged_row.MATURITY_DAYS is null then l_merged_row.MATURITY_DAYS := old_row.MATURITY_DAYS; end if;
3620 if l_merged_row.MAXIMUM_LOAD_WEIGHT is null then l_merged_row.MAXIMUM_LOAD_WEIGHT := old_row.MAXIMUM_LOAD_WEIGHT; end if;
3621 if l_merged_row.MAXIMUM_ORDER_QUANTITY is null then l_merged_row.MAXIMUM_ORDER_QUANTITY := old_row.MAXIMUM_ORDER_QUANTITY; end if;
3622 if l_merged_row.MAX_MINMAX_QUANTITY is null then l_merged_row.MAX_MINMAX_QUANTITY := old_row.MAX_MINMAX_QUANTITY; end if;
3623 if l_merged_row.MAX_WARRANTY_AMOUNT is null then l_merged_row.MAX_WARRANTY_AMOUNT := old_row.MAX_WARRANTY_AMOUNT; end if;
3624 if l_merged_row.MINIMUM_FILL_PERCENT is null then l_merged_row.MINIMUM_FILL_PERCENT := old_row.MINIMUM_FILL_PERCENT; end if;
3625 if l_merged_row.MINIMUM_LICENSE_QUANTITY is null then l_merged_row.MINIMUM_LICENSE_QUANTITY := old_row.MINIMUM_LICENSE_QUANTITY; end if;
3626 if l_merged_row.MINIMUM_ORDER_QUANTITY is null then l_merged_row.MINIMUM_ORDER_QUANTITY := old_row.MINIMUM_ORDER_QUANTITY; end if;
3627 if l_merged_row.MIN_MINMAX_QUANTITY is null then l_merged_row.MIN_MINMAX_QUANTITY := old_row.MIN_MINMAX_QUANTITY; end if;
3628 if l_merged_row.MODEL_CONFIG_CLAUSE_NAME is null then l_merged_row.MODEL_CONFIG_CLAUSE_NAME := old_row.MODEL_CONFIG_CLAUSE_NAME; end if;
3629 if l_merged_row.MRP_CALCULATE_ATP_FLAG is null then l_merged_row.MRP_CALCULATE_ATP_FLAG := old_row.MRP_CALCULATE_ATP_FLAG; end if;
3630 if l_merged_row.MRP_PLANNING_CODE is null then l_merged_row.MRP_PLANNING_CODE := old_row.MRP_PLANNING_CODE; end if;
3631 if l_merged_row.MRP_SAFETY_STOCK_CODE is null then l_merged_row.MRP_SAFETY_STOCK_CODE := old_row.MRP_SAFETY_STOCK_CODE; end if;
3632 if l_merged_row.MRP_SAFETY_STOCK_PERCENT is null then l_merged_row.MRP_SAFETY_STOCK_PERCENT := old_row.MRP_SAFETY_STOCK_PERCENT; end if;
3633 if l_merged_row.MTL_TRANSACTIONS_ENABLED_FLAG is null then l_merged_row.MTL_TRANSACTIONS_ENABLED_FLAG := old_row.MTL_TRANSACTIONS_ENABLED_FLAG; end if;
3634 if l_merged_row.MUST_USE_APPROVED_VENDOR_FLAG is null then l_merged_row.MUST_USE_APPROVED_VENDOR_FLAG := old_row.MUST_USE_APPROVED_VENDOR_FLAG; end if;
3635 if l_merged_row.NEGATIVE_MEASUREMENT_ERROR is null then l_merged_row.NEGATIVE_MEASUREMENT_ERROR := old_row.NEGATIVE_MEASUREMENT_ERROR; end if;
3636 if l_merged_row.NEW_REVISION_CODE is null then l_merged_row.NEW_REVISION_CODE := old_row.NEW_REVISION_CODE; end if;
3637 if l_merged_row.ONT_PRICING_QTY_SOURCE is null then l_merged_row.ONT_PRICING_QTY_SOURCE := old_row.ONT_PRICING_QTY_SOURCE; end if;
3638 if l_merged_row.OPERATION_SLACK_PENALTY is null then l_merged_row.OPERATION_SLACK_PENALTY := old_row.OPERATION_SLACK_PENALTY; end if;
3639 if l_merged_row.ORDERABLE_ON_WEB_FLAG is null then l_merged_row.ORDERABLE_ON_WEB_FLAG := old_row.ORDERABLE_ON_WEB_FLAG; end if;
3640 if l_merged_row.ORDER_COST is null then l_merged_row.ORDER_COST := old_row.ORDER_COST; end if;
3641 if l_merged_row.OUTSIDE_OPERATION_FLAG is null then l_merged_row.OUTSIDE_OPERATION_FLAG := old_row.OUTSIDE_OPERATION_FLAG; end if;
3642 if l_merged_row.OUTSIDE_OPERATION_UOM_TYPE is null then l_merged_row.OUTSIDE_OPERATION_UOM_TYPE := old_row.OUTSIDE_OPERATION_UOM_TYPE; end if;
3643 if l_merged_row.OUTSOURCED_ASSEMBLY is null then l_merged_row.OUTSOURCED_ASSEMBLY := old_row.OUTSOURCED_ASSEMBLY; end if;
3644 if l_merged_row.OVERCOMPLETION_TOLERANCE_TYPE is null then l_merged_row.OVERCOMPLETION_TOLERANCE_TYPE := old_row.OVERCOMPLETION_TOLERANCE_TYPE; end if;
3645 if l_merged_row.OVERCOMPLETION_TOLERANCE_VALUE is null then l_merged_row.OVERCOMPLETION_TOLERANCE_VALUE := old_row.OVERCOMPLETION_TOLERANCE_VALUE; end if;
3646 if l_merged_row.OVERRUN_PERCENTAGE is null then l_merged_row.OVERRUN_PERCENTAGE := old_row.OVERRUN_PERCENTAGE; end if;
3647 if l_merged_row.OVER_RETURN_TOLERANCE is null then l_merged_row.OVER_RETURN_TOLERANCE := old_row.OVER_RETURN_TOLERANCE; end if;
3648 if l_merged_row.OVER_SHIPMENT_TOLERANCE is null then l_merged_row.OVER_SHIPMENT_TOLERANCE := old_row.OVER_SHIPMENT_TOLERANCE; end if;
3649 if l_merged_row.PARENT_CHILD_GENERATION_FLAG is null then l_merged_row.PARENT_CHILD_GENERATION_FLAG := old_row.PARENT_CHILD_GENERATION_FLAG; end if;
3650 if l_merged_row.PAYMENT_TERMS_ID is null then l_merged_row.PAYMENT_TERMS_ID := old_row.PAYMENT_TERMS_ID; end if;
3651 if l_merged_row.PICKING_RULE_ID is null then l_merged_row.PICKING_RULE_ID := old_row.PICKING_RULE_ID; end if;
3652 if l_merged_row.PICK_COMPONENTS_FLAG is null then l_merged_row.PICK_COMPONENTS_FLAG := old_row.PICK_COMPONENTS_FLAG; end if;
3653 if l_merged_row.PLANNED_INV_POINT_FLAG is null then l_merged_row.PLANNED_INV_POINT_FLAG := old_row.PLANNED_INV_POINT_FLAG; end if;
3654 if l_merged_row.PLANNER_CODE is null then l_merged_row.PLANNER_CODE := old_row.PLANNER_CODE; end if;
3655 if l_merged_row.PLANNING_EXCEPTION_SET is null then l_merged_row.PLANNING_EXCEPTION_SET := old_row.PLANNING_EXCEPTION_SET; end if;
3656 if l_merged_row.PLANNING_MAKE_BUY_CODE is null then l_merged_row.PLANNING_MAKE_BUY_CODE := old_row.PLANNING_MAKE_BUY_CODE; end if;
3657 if l_merged_row.PLANNING_TIME_FENCE_CODE is null then l_merged_row.PLANNING_TIME_FENCE_CODE := old_row.PLANNING_TIME_FENCE_CODE; end if;
3658 if l_merged_row.PLANNING_TIME_FENCE_DAYS is null then l_merged_row.PLANNING_TIME_FENCE_DAYS := old_row.PLANNING_TIME_FENCE_DAYS; end if;
3659 if l_merged_row.POSITIVE_MEASUREMENT_ERROR is null then l_merged_row.POSITIVE_MEASUREMENT_ERROR := old_row.POSITIVE_MEASUREMENT_ERROR; end if;
3660 if l_merged_row.POSTPROCESSING_LEAD_TIME is null then l_merged_row.POSTPROCESSING_LEAD_TIME := old_row.POSTPROCESSING_LEAD_TIME; end if;
3661 if l_merged_row.PREPOSITION_POINT is null then l_merged_row.PREPOSITION_POINT := old_row.PREPOSITION_POINT; end if;
3662 if l_merged_row.PREPROCESSING_LEAD_TIME is null then l_merged_row.PREPROCESSING_LEAD_TIME := old_row.PREPROCESSING_LEAD_TIME; end if;
3663 if l_merged_row.PREVENTIVE_MAINTENANCE_FLAG is null then l_merged_row.PREVENTIVE_MAINTENANCE_FLAG := old_row.PREVENTIVE_MAINTENANCE_FLAG; end if;
3664 if l_merged_row.PRICE_TOLERANCE_PERCENT is null then l_merged_row.PRICE_TOLERANCE_PERCENT := old_row.PRICE_TOLERANCE_PERCENT; end if;
3665 if l_merged_row.PRIMARY_SPECIALIST_ID is null then l_merged_row.PRIMARY_SPECIALIST_ID := old_row.PRIMARY_SPECIALIST_ID; end if;
3666 if l_merged_row.PROCESS_COSTING_ENABLED_FLAG is null then l_merged_row.PROCESS_COSTING_ENABLED_FLAG := old_row.PROCESS_COSTING_ENABLED_FLAG; end if;
3667 if l_merged_row.PROCESS_EXECUTION_ENABLED_FLAG is null then l_merged_row.PROCESS_EXECUTION_ENABLED_FLAG := old_row.PROCESS_EXECUTION_ENABLED_FLAG; end if;
3668 if l_merged_row.PROCESS_QUALITY_ENABLED_FLAG is null then l_merged_row.PROCESS_QUALITY_ENABLED_FLAG := old_row.PROCESS_QUALITY_ENABLED_FLAG; end if;
3669 if l_merged_row.PROCESS_SUPPLY_LOCATOR_ID is null then l_merged_row.PROCESS_SUPPLY_LOCATOR_ID := old_row.PROCESS_SUPPLY_LOCATOR_ID; end if;
3670 if l_merged_row.PROCESS_SUPPLY_SUBINVENTORY is null then l_merged_row.PROCESS_SUPPLY_SUBINVENTORY := old_row.PROCESS_SUPPLY_SUBINVENTORY; end if;
3671 if l_merged_row.PROCESS_YIELD_LOCATOR_ID is null then l_merged_row.PROCESS_YIELD_LOCATOR_ID := old_row.PROCESS_YIELD_LOCATOR_ID; end if;
3672 if l_merged_row.PROCESS_YIELD_SUBINVENTORY is null then l_merged_row.PROCESS_YIELD_SUBINVENTORY := old_row.PROCESS_YIELD_SUBINVENTORY; end if;
3673 if l_merged_row.PRODUCT_FAMILY_ITEM_ID is null then l_merged_row.PRODUCT_FAMILY_ITEM_ID := old_row.PRODUCT_FAMILY_ITEM_ID; end if;
3674 if l_merged_row.PRORATE_SERVICE_FLAG is null then l_merged_row.PRORATE_SERVICE_FLAG := old_row.PRORATE_SERVICE_FLAG; end if;
3675 if l_merged_row.PURCHASING_ENABLED_FLAG is null then l_merged_row.PURCHASING_ENABLED_FLAG := old_row.PURCHASING_ENABLED_FLAG; end if;
3676 if l_merged_row.PURCHASING_ITEM_FLAG is null then l_merged_row.PURCHASING_ITEM_FLAG := old_row.PURCHASING_ITEM_FLAG; end if;
3677 if l_merged_row.PURCHASING_TAX_CODE is null then l_merged_row.PURCHASING_TAX_CODE := old_row.PURCHASING_TAX_CODE; end if;
3678 if l_merged_row.QTY_RCV_EXCEPTION_CODE is null then l_merged_row.QTY_RCV_EXCEPTION_CODE := old_row.QTY_RCV_EXCEPTION_CODE; end if;
3679 if l_merged_row.QTY_RCV_TOLERANCE is null then l_merged_row.QTY_RCV_TOLERANCE := old_row.QTY_RCV_TOLERANCE; end if;
3680 if l_merged_row.RECEIPT_DAYS_EXCEPTION_CODE is null then l_merged_row.RECEIPT_DAYS_EXCEPTION_CODE := old_row.RECEIPT_DAYS_EXCEPTION_CODE; end if;
3681 if l_merged_row.RECEIPT_REQUIRED_FLAG is null then l_merged_row.RECEIPT_REQUIRED_FLAG := old_row.RECEIPT_REQUIRED_FLAG; end if;
3682 if l_merged_row.RECEIVE_CLOSE_TOLERANCE is null then l_merged_row.RECEIVE_CLOSE_TOLERANCE := old_row.RECEIVE_CLOSE_TOLERANCE; end if;
3683 if l_merged_row.RECEIVING_ROUTING_ID is null then l_merged_row.RECEIVING_ROUTING_ID := old_row.RECEIVING_ROUTING_ID; end if;
3684 if l_merged_row.RECIPE_ENABLED_FLAG is null then l_merged_row.RECIPE_ENABLED_FLAG := old_row.RECIPE_ENABLED_FLAG; end if;
3685 if l_merged_row.RECOVERED_PART_DISP_CODE is null then l_merged_row.RECOVERED_PART_DISP_CODE := old_row.RECOVERED_PART_DISP_CODE; end if;
3686 if l_merged_row.RELEASE_TIME_FENCE_CODE is null then l_merged_row.RELEASE_TIME_FENCE_CODE := old_row.RELEASE_TIME_FENCE_CODE; end if;
3687 if l_merged_row.RELEASE_TIME_FENCE_DAYS is null then l_merged_row.RELEASE_TIME_FENCE_DAYS := old_row.RELEASE_TIME_FENCE_DAYS; end if;
3688 if l_merged_row.REPAIR_LEADTIME is null then l_merged_row.REPAIR_LEADTIME := old_row.REPAIR_LEADTIME; end if;
3689 if l_merged_row.REPAIR_PROGRAM is null then l_merged_row.REPAIR_PROGRAM := old_row.REPAIR_PROGRAM; end if;
3690 if l_merged_row.REPAIR_YIELD is null then l_merged_row.REPAIR_YIELD := old_row.REPAIR_YIELD; end if;
3691 if l_merged_row.REPETITIVE_PLANNING_FLAG is null then l_merged_row.REPETITIVE_PLANNING_FLAG := old_row.REPETITIVE_PLANNING_FLAG; end if;
3692 if l_merged_row.REPLENISH_TO_ORDER_FLAG is null then l_merged_row.REPLENISH_TO_ORDER_FLAG := old_row.REPLENISH_TO_ORDER_FLAG; end if;
3693 if l_merged_row.RESERVABLE_TYPE is null then l_merged_row.RESERVABLE_TYPE := old_row.RESERVABLE_TYPE; end if;
3694 if l_merged_row.RESPONSE_TIME_PERIOD_CODE is null then l_merged_row.RESPONSE_TIME_PERIOD_CODE := old_row.RESPONSE_TIME_PERIOD_CODE; end if;
3695 if l_merged_row.RESPONSE_TIME_VALUE is null then l_merged_row.RESPONSE_TIME_VALUE := old_row.RESPONSE_TIME_VALUE; end if;
3696 if l_merged_row.RESTRICT_LOCATORS_CODE is null then l_merged_row.RESTRICT_LOCATORS_CODE := old_row.RESTRICT_LOCATORS_CODE; end if;
3697 if l_merged_row.RESTRICT_SUBINVENTORIES_CODE is null then l_merged_row.RESTRICT_SUBINVENTORIES_CODE := old_row.RESTRICT_SUBINVENTORIES_CODE; end if;
3698 if l_merged_row.RETEST_INTERVAL is null then l_merged_row.RETEST_INTERVAL := old_row.RETEST_INTERVAL; end if;
3699 if l_merged_row.RETURNABLE_FLAG is null then l_merged_row.RETURNABLE_FLAG := old_row.RETURNABLE_FLAG; end if;
3700 if l_merged_row.RETURN_INSPECTION_REQUIREMENT is null then l_merged_row.RETURN_INSPECTION_REQUIREMENT := old_row.RETURN_INSPECTION_REQUIREMENT; end if;
3701 if l_merged_row.REVISION is null then l_merged_row.REVISION := old_row.REVISION; end if;
3702 if l_merged_row.REVISION_IMPORT_POLICY is null then l_merged_row.REVISION_IMPORT_POLICY := old_row.REVISION_IMPORT_POLICY; end if;
3703 if l_merged_row.REVISION_QTY_CONTROL_CODE is null then l_merged_row.REVISION_QTY_CONTROL_CODE := old_row.REVISION_QTY_CONTROL_CODE; end if;
3704 if l_merged_row.RFQ_REQUIRED_FLAG is null then l_merged_row.RFQ_REQUIRED_FLAG := old_row.RFQ_REQUIRED_FLAG; end if;
3705 if l_merged_row.ROUNDING_CONTROL_TYPE is null then l_merged_row.ROUNDING_CONTROL_TYPE := old_row.ROUNDING_CONTROL_TYPE; end if;
3706 if l_merged_row.ROUNDING_FACTOR is null then l_merged_row.ROUNDING_FACTOR := old_row.ROUNDING_FACTOR; end if;
3707 if l_merged_row.SAFETY_STOCK_BUCKET_DAYS is null then l_merged_row.SAFETY_STOCK_BUCKET_DAYS := old_row.SAFETY_STOCK_BUCKET_DAYS; end if;
3708 if l_merged_row.SALES_ACCOUNT is null then l_merged_row.SALES_ACCOUNT := old_row.SALES_ACCOUNT; end if;
3709 if l_merged_row.SECONDARY_DEFAULT_IND is null then l_merged_row.SECONDARY_DEFAULT_IND := old_row.SECONDARY_DEFAULT_IND; end if;
3710 if l_merged_row.SECONDARY_SPECIALIST_ID is null then l_merged_row.SECONDARY_SPECIALIST_ID := old_row.SECONDARY_SPECIALIST_ID; end if;
3711 if l_merged_row.SECONDARY_UOM_CODE is null then l_merged_row.SECONDARY_UOM_CODE := old_row.SECONDARY_UOM_CODE; end if;
3712 if l_merged_row.SERIAL_NUMBER_CONTROL_CODE is null then l_merged_row.SERIAL_NUMBER_CONTROL_CODE := old_row.SERIAL_NUMBER_CONTROL_CODE; end if;
3713 if l_merged_row.SERIAL_STATUS_ENABLED is null then l_merged_row.SERIAL_STATUS_ENABLED := old_row.SERIAL_STATUS_ENABLED; end if;
3714 if l_merged_row.SERVICEABLE_COMPONENT_FLAG is null then l_merged_row.SERVICEABLE_COMPONENT_FLAG := old_row.SERVICEABLE_COMPONENT_FLAG; end if;
3715 if l_merged_row.SERVICEABLE_ITEM_CLASS_ID is null then l_merged_row.SERVICEABLE_ITEM_CLASS_ID := old_row.SERVICEABLE_ITEM_CLASS_ID; end if;
3716 if l_merged_row.SERVICEABLE_PRODUCT_FLAG is null then l_merged_row.SERVICEABLE_PRODUCT_FLAG := old_row.SERVICEABLE_PRODUCT_FLAG; end if;
3717 if l_merged_row.SERVICE_DURATION is null then l_merged_row.SERVICE_DURATION := old_row.SERVICE_DURATION; end if;
3718 if l_merged_row.SERVICE_DURATION_PERIOD_CODE is null then l_merged_row.SERVICE_DURATION_PERIOD_CODE := old_row.SERVICE_DURATION_PERIOD_CODE; end if;
3719 if l_merged_row.SERVICE_ITEM_FLAG is null then l_merged_row.SERVICE_ITEM_FLAG := old_row.SERVICE_ITEM_FLAG; end if;
3720 if l_merged_row.SERVICE_STARTING_DELAY is null then l_merged_row.SERVICE_STARTING_DELAY := old_row.SERVICE_STARTING_DELAY; end if;
3721 if l_merged_row.SERV_BILLING_ENABLED_FLAG is null then l_merged_row.SERV_BILLING_ENABLED_FLAG := old_row.SERV_BILLING_ENABLED_FLAG; end if;
3722 if l_merged_row.SERV_IMPORTANCE_LEVEL is null then l_merged_row.SERV_IMPORTANCE_LEVEL := old_row.SERV_IMPORTANCE_LEVEL; end if;
3723 if l_merged_row.SERV_REQ_ENABLED_CODE is null then l_merged_row.SERV_REQ_ENABLED_CODE := old_row.SERV_REQ_ENABLED_CODE; end if;
3724 if l_merged_row.SET_ID is null then l_merged_row.SET_ID := old_row.SET_ID; end if;
3725 if l_merged_row.SHELF_LIFE_CODE is null then l_merged_row.SHELF_LIFE_CODE := old_row.SHELF_LIFE_CODE; end if;
3726 if l_merged_row.SHELF_LIFE_DAYS is null then l_merged_row.SHELF_LIFE_DAYS := old_row.SHELF_LIFE_DAYS; end if;
3727 if l_merged_row.SHIPPABLE_ITEM_FLAG is null then l_merged_row.SHIPPABLE_ITEM_FLAG := old_row.SHIPPABLE_ITEM_FLAG; end if;
3728 if l_merged_row.SHIP_MODEL_COMPLETE_FLAG is null then l_merged_row.SHIP_MODEL_COMPLETE_FLAG := old_row.SHIP_MODEL_COMPLETE_FLAG; end if;
3729 if l_merged_row.SHRINKAGE_RATE is null then l_merged_row.SHRINKAGE_RATE := old_row.SHRINKAGE_RATE; end if;
3730 if l_merged_row.SOURCE_ORGANIZATION_ID is null then l_merged_row.SOURCE_ORGANIZATION_ID := old_row.SOURCE_ORGANIZATION_ID; end if;
3731 if l_merged_row.SOURCE_SUBINVENTORY is null then l_merged_row.SOURCE_SUBINVENTORY := old_row.SOURCE_SUBINVENTORY; end if;
3732 if l_merged_row.SOURCE_TYPE is null then l_merged_row.SOURCE_TYPE := old_row.SOURCE_TYPE; end if;
3733 if l_merged_row.SO_AUTHORIZATION_FLAG is null then l_merged_row.SO_AUTHORIZATION_FLAG := old_row.SO_AUTHORIZATION_FLAG; end if;
3734 if l_merged_row.SO_TRANSACTIONS_FLAG is null then l_merged_row.SO_TRANSACTIONS_FLAG := old_row.SO_TRANSACTIONS_FLAG; end if;
3735 if l_merged_row.START_AUTO_LOT_NUMBER is null then l_merged_row.START_AUTO_LOT_NUMBER := old_row.START_AUTO_LOT_NUMBER; end if;
3736 if l_merged_row.START_AUTO_SERIAL_NUMBER is null then l_merged_row.START_AUTO_SERIAL_NUMBER := old_row.START_AUTO_SERIAL_NUMBER; end if;
3737 if l_merged_row.START_DATE_ACTIVE is null then l_merged_row.START_DATE_ACTIVE := old_row.START_DATE_ACTIVE; end if;
3738 if l_merged_row.STD_LOT_SIZE is null then l_merged_row.STD_LOT_SIZE := old_row.STD_LOT_SIZE; end if;
3739 if l_merged_row.STOCK_ENABLED_FLAG is null then l_merged_row.STOCK_ENABLED_FLAG := old_row.STOCK_ENABLED_FLAG; end if;
3740 if l_merged_row.SUBCONTRACTING_COMPONENT is null then l_merged_row.SUBCONTRACTING_COMPONENT := old_row.SUBCONTRACTING_COMPONENT; end if;
3741 if l_merged_row.SUBSCRIPTION_DEPEND_FLAG is null then l_merged_row.SUBSCRIPTION_DEPEND_FLAG := old_row.SUBSCRIPTION_DEPEND_FLAG; end if;
3742 if l_merged_row.SUBSTITUTION_WINDOW_CODE is null then l_merged_row.SUBSTITUTION_WINDOW_CODE := old_row.SUBSTITUTION_WINDOW_CODE; end if;
3743 if l_merged_row.SUBSTITUTION_WINDOW_DAYS is null then l_merged_row.SUBSTITUTION_WINDOW_DAYS := old_row.SUBSTITUTION_WINDOW_DAYS; end if;
3744 if l_merged_row.SUMMARY_FLAG is null then l_merged_row.SUMMARY_FLAG := old_row.SUMMARY_FLAG; end if;
3745 if l_merged_row.TAXABLE_FLAG is null then l_merged_row.TAXABLE_FLAG := old_row.TAXABLE_FLAG; end if;
3746 if l_merged_row.TAX_CODE is null then l_merged_row.TAX_CODE := old_row.TAX_CODE; end if;
3747 if l_merged_row.TIME_BILLABLE_FLAG is null then l_merged_row.TIME_BILLABLE_FLAG := old_row.TIME_BILLABLE_FLAG; end if;
3748 if l_merged_row.TRACKING_QUANTITY_IND is null then l_merged_row.TRACKING_QUANTITY_IND := old_row.TRACKING_QUANTITY_IND; end if;
3749 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := old_row.TRANSACTION_ID; end if;
3750 if l_merged_row.UNDER_RETURN_TOLERANCE is null then l_merged_row.UNDER_RETURN_TOLERANCE := old_row.UNDER_RETURN_TOLERANCE; end if;
3751 if l_merged_row.UNDER_SHIPMENT_TOLERANCE is null then l_merged_row.UNDER_SHIPMENT_TOLERANCE := old_row.UNDER_SHIPMENT_TOLERANCE; end if;
3752 if l_merged_row.UNIT_HEIGHT is null then l_merged_row.UNIT_HEIGHT := old_row.UNIT_HEIGHT; end if;
3753 if l_merged_row.UNIT_LENGTH is null then l_merged_row.UNIT_LENGTH := old_row.UNIT_LENGTH; end if;
3754 if l_merged_row.UNIT_OF_ISSUE is null then l_merged_row.UNIT_OF_ISSUE := old_row.UNIT_OF_ISSUE; end if;
3755 if l_merged_row.UNIT_VOLUME is null then l_merged_row.UNIT_VOLUME := old_row.UNIT_VOLUME; end if;
3756 if l_merged_row.UNIT_WEIGHT is null then l_merged_row.UNIT_WEIGHT := old_row.UNIT_WEIGHT; end if;
3757 if l_merged_row.UNIT_WIDTH is null then l_merged_row.UNIT_WIDTH := old_row.UNIT_WIDTH; end if;
3758 if l_merged_row.UN_NUMBER_ID is null then l_merged_row.UN_NUMBER_ID := old_row.UN_NUMBER_ID; end if;
3759 if l_merged_row.USAGE_ITEM_FLAG is null then l_merged_row.USAGE_ITEM_FLAG := old_row.USAGE_ITEM_FLAG; end if;
3760 if l_merged_row.VARIABLE_LEAD_TIME is null then l_merged_row.VARIABLE_LEAD_TIME := old_row.VARIABLE_LEAD_TIME; end if;
3761 if l_merged_row.VEHICLE_ITEM_FLAG is null then l_merged_row.VEHICLE_ITEM_FLAG := old_row.VEHICLE_ITEM_FLAG; end if;
3762 if l_merged_row.VENDOR_WARRANTY_FLAG is null then l_merged_row.VENDOR_WARRANTY_FLAG := old_row.VENDOR_WARRANTY_FLAG; end if;
3763 if l_merged_row.VMI_FIXED_ORDER_QUANTITY is null then l_merged_row.VMI_FIXED_ORDER_QUANTITY := old_row.VMI_FIXED_ORDER_QUANTITY; end if;
3764 if l_merged_row.VMI_FORECAST_TYPE is null then l_merged_row.VMI_FORECAST_TYPE := old_row.VMI_FORECAST_TYPE; end if;
3765 if l_merged_row.VMI_MAXIMUM_DAYS is null then l_merged_row.VMI_MAXIMUM_DAYS := old_row.VMI_MAXIMUM_DAYS; end if;
3766 if l_merged_row.VMI_MAXIMUM_UNITS is null then l_merged_row.VMI_MAXIMUM_UNITS := old_row.VMI_MAXIMUM_UNITS; end if;
3767 if l_merged_row.VMI_MINIMUM_DAYS is null then l_merged_row.VMI_MINIMUM_DAYS := old_row.VMI_MINIMUM_DAYS; end if;
3768 if l_merged_row.VMI_MINIMUM_UNITS is null then l_merged_row.VMI_MINIMUM_UNITS := old_row.VMI_MINIMUM_UNITS; end if;
3769 if l_merged_row.VOLUME_UOM_CODE is null then l_merged_row.VOLUME_UOM_CODE := old_row.VOLUME_UOM_CODE; end if;
3770 if l_merged_row.VOL_DISCOUNT_EXEMPT_FLAG is null then l_merged_row.VOL_DISCOUNT_EXEMPT_FLAG := old_row.VOL_DISCOUNT_EXEMPT_FLAG; end if;
3771 if l_merged_row.WARRANTY_VENDOR_ID is null then l_merged_row.WARRANTY_VENDOR_ID := old_row.WARRANTY_VENDOR_ID; end if;
3772 if l_merged_row.WEB_STATUS is null then l_merged_row.WEB_STATUS := old_row.WEB_STATUS; end if;
3773 if l_merged_row.WEIGHT_UOM_CODE is null then l_merged_row.WEIGHT_UOM_CODE := old_row.WEIGHT_UOM_CODE; end if;
3774 if l_merged_row.WH_UPDATE_DATE is null then l_merged_row.WH_UPDATE_DATE := old_row.WH_UPDATE_DATE; end if;
3775 if l_merged_row.WIP_SUPPLY_LOCATOR_ID is null then l_merged_row.WIP_SUPPLY_LOCATOR_ID := old_row.WIP_SUPPLY_LOCATOR_ID; end if;
3776 if l_merged_row.WIP_SUPPLY_SUBINVENTORY is null then l_merged_row.WIP_SUPPLY_SUBINVENTORY := old_row.WIP_SUPPLY_SUBINVENTORY; end if;
3777 if l_merged_row.WIP_SUPPLY_TYPE is null then l_merged_row.WIP_SUPPLY_TYPE := old_row.WIP_SUPPLY_TYPE; end if;
3778 -- end generated code
3779 END LOOP; -- over old rows
3780
3781 Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || c_target_rows%ROWCOUNT );
3782 IF c_target_rows%ISOPEN THEN
3783 CLOSE c_target_rows;
3784 END IF;
3785
3786 IF l_merged_rows IS NOT NULL THEN
3787 -- delete
3788 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
3789 FORALL rid_ix IN INDICES OF l_old_rowids
3790 DELETE FROM MTL_SYSTEM_ITEMS_INTERFACE
3791 WHERE ROWID = l_old_rowids( rid_ix );
3792 -- insert
3793 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
3794 FORALL row_index IN INDICES OF l_merged_rows
3795 INSERT INTO MTL_SYSTEM_ITEMS_INTERFACE
3796 VALUES l_merged_rows( row_index );
3797 END IF;
3798 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
3799 EXCEPTION WHEN OTHERS THEN
3800 Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
3801 IF c_target_rows%ISOPEN THEN
3802 CLOSE c_target_rows;
3803 END IF;
3804 RAISE;
3805 END Merge_Items_For_Import;
3806
3807 -- Merges Item Revision records
3808 PROCEDURE Merge_Revs_For_Import( p_batch_id IN NUMBER
3809 , p_master_org_id IN NUMBER
3810 )
3811 IS
3812 SUBTYPE MIRI_ROW IS MTL_ITEM_REVISIONS_INTERFACE%ROWTYPE;
3813 TYPE MIRI_ROWS IS TABLE OF MIRI_ROW INDEX BY BINARY_INTEGER;
3814
3815 /*
3816 * Note that the organization_id column is filled in from the organization_code and batch organization_id
3817 * as part of resolve_ssxref_on_data_load
3818 * revision column is filled in from the revision_id before this cursor is fetched.
3819 */
3820 CURSOR c_target_revs IS
3821 SELECT *
3822 FROM
3823 (SELECT
3824 ROWID rid,
3825 COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID, REVISION ) cnt,
3826 RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID, REVISION ) rnk,
3827 miri.*
3828 FROM MTL_ITEM_REVISIONS_INTERFACE miri
3829 WHERE PROCESS_FLAG = 1
3830 AND SET_PROCESS_ID = p_batch_id
3831 AND ITEM_NUMBER IS NOT NULL
3832 AND ORGANIZATION_ID IS NOT NULL
3833 AND REVISION IS NOT NULL
3834 AND EXISTS
3835 (SELECT NULL
3836 FROM MTL_PARAMETERS mp
3837 WHERE mp.ORGANIZATION_ID = miri.ORGANIZATION_ID
3838 AND mp.MASTER_ORGANIZATION_ID = p_master_org_id
3839 )
3840 ) sub
3841 WHERE sub.cnt > 1
3842 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
3843
3844 TYPE TARGET_ROWS IS TABLE OF c_target_revs%ROWTYPE;
3845
3846 l_merged_rows MIRI_ROWS;
3847 l_new_rows MIRI_ROWS;
3848 l_merged_row MIRI_ROW;
3849 l_old_rows TARGET_ROWS;
3850 l_old_rowids UROWID_TABLE;
3851
3852 l_candidate_trans MTL_ITEM_REVISIONS_INTERFACE.TRANSACTION_TYPE%TYPE;
3853
3854 l_mrow_ix PLS_INTEGER := 0;
3855 l_new_row_idx PLS_INTEGER := 0;
3856 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
3857
3858 l_proc_log_prefix CONSTANT VARCHAR2(30) := 'Merge_Revs_For_Import - ';
3859 BEGIN
3860 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
3861 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
3862
3863 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
3864 SET REVISION = NVL( ( SELECT r.REVISION
3865 FROM MTL_ITEM_REVISIONS_B r
3866 WHERE r.REVISION_ID = miri.REVISION_ID
3867 AND r.ORGANIZATION_ID = miri.ORGANIZATION_ID
3868 )
3869 , REVISION
3870 )
3871 WHERE REVISION_ID IS NOT NULL
3872 AND SET_PROCESS_ID = p_batch_id
3873 AND PROCESS_FLAG = 1
3874 AND REVISION IS NULL;
3875
3876 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
3877 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
3878 FROM MTL_SYSTEM_ITEMS_KFV
3879 WHERE INVENTORY_ITEM_ID = miri.INVENTORY_ITEM_ID
3880 AND ORGANIZATION_ID = miri.ORGANIZATION_ID)
3881 WHERE SET_PROCESS_ID = p_batch_id
3882 AND PROCESS_FLAG = 1
3883 AND INVENTORY_ITEM_ID IS NOT NULL
3884 AND ITEM_NUMBER IS NULL;
3885
3886 OPEN c_target_revs;
3887 FETCH c_target_revs BULK COLLECT INTO l_old_rows;
3888 CLOSE c_target_revs;
3889
3890 Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
3891 IF 0 <> l_old_rows.COUNT THEN
3892 l_old_rowids := UROWID_TABLE( );
3893 l_old_rowids.EXTEND( l_old_rows.COUNT );
3894
3895 FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
3896 l_old_rowids( idx ) := l_old_rows( idx ).RID;
3897
3898 IF ( l_cur_rank <> l_old_rows( idx ).RNK )
3899 THEN
3900 IF l_new_row_idx > 0 THEN
3901 FOR i IN 1..l_new_row_idx LOOP
3902 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
3903 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
3904 l_new_rows( i ).SOURCE_SYSTEM_ID);
3905 l_mrow_ix := l_mrow_ix + 1;
3906 l_merged_rows( l_mrow_ix ) := l_merged_row;
3907 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
3908 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
3909 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
3910 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3911 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
3912 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
3913 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
3914 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
3915 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
3916 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
3917 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3918 END IF; --IF l_new_row_idx > 0 THEN
3919 l_cur_rank := l_old_rows( idx ).RNK;
3920 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
3921 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, Revision = ' ||
3922 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
3923 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
3924 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
3925 l_old_rows( idx ).REVISION);
3926 l_new_rows.DELETE;
3927 l_new_row_idx := 1;
3928 l_new_rows( l_new_row_idx ).PROCESS_FLAG := l_old_rows( idx ).PROCESS_FLAG;
3929 -- initializing l_merged_row . This row will contain the current merged row for an item
3930 l_merged_row := NULL;
3931 l_merged_row.SET_PROCESS_ID := p_batch_id;
3932 l_merged_row.PROCESS_FLAG := l_old_rows( idx ).PROCESS_FLAG;
3933 ELSE
3934 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
3935 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, Revision = ' ||
3936 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
3937 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
3938 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
3939 l_old_rows( idx ).REVISION);
3940 l_new_row_idx := l_new_row_idx + 1;
3941 l_new_rows( l_new_row_idx ).PROCESS_FLAG := 111;
3942 END IF;
3943
3944 l_new_rows( l_new_row_idx ).SET_PROCESS_ID := p_batch_id;
3945 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID := l_old_rows( idx ).SOURCE_SYSTEM_ID;
3946 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
3947 l_new_rows( l_new_row_idx ).CREATED_BY := l_old_rows( idx ).CREATED_BY;
3948 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY := l_old_rows( idx ).LAST_UPDATED_BY;
3949
3950 -- Special Cases:
3951 -- Transaction type
3952 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
3953
3954 IF l_merged_row.TRANSACTION_TYPE IS NULL
3955 OR l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
3956 THEN
3957 -- CREATE > SYNC > UPDATE : order of case expression matters
3958 l_merged_row.TRANSACTION_TYPE :=
3959 CASE
3960 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
3961 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
3962 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
3963 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
3964 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
3965 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
3966 ELSE NULL -- INVALID transaction types encountered ...
3967 END;
3968 END IF;
3969
3970 -- The following columns need to be treated as atomic groups
3971 -- 1. Item Identifier
3972 IF l_merged_row.INVENTORY_ITEM_ID IS NULL
3973 AND l_merged_row.ITEM_NUMBER IS NULL
3974 THEN
3975 l_merged_row.INVENTORY_ITEM_ID := l_old_rows( idx ).INVENTORY_ITEM_ID;
3976 l_merged_row.ITEM_NUMBER := l_old_rows( idx ).ITEM_NUMBER;
3977 END IF;
3978
3979 -- 2. Organization
3980 IF l_merged_row.ORGANIZATION_ID IS NULL
3981 AND l_merged_row.ORGANIZATION_CODE IS NULL
3982 THEN
3983 l_merged_row.ORGANIZATION_ID := l_old_rows( idx ).ORGANIZATION_ID;
3984 l_merged_row.ORGANIZATION_CODE := l_old_rows( idx ).ORGANIZATION_CODE;
3985 END IF;
3986
3987 -- 3. Template Identifier
3988 IF l_merged_row.TEMPLATE_ID IS NULL
3989 AND l_merged_row.TEMPLATE_NAME IS NULL
3990 THEN
3991 l_merged_row.TEMPLATE_ID := l_old_rows( idx ).TEMPLATE_ID ;
3992 l_merged_row.TEMPLATE_NAME := l_old_rows( idx ).TEMPLATE_NAME ;
3993 END IF;
3994
3995 -- Non-special cased
3996 if l_merged_row.ATTRIBUTE1 is null then l_merged_row.ATTRIBUTE1 := l_old_rows( idx ).ATTRIBUTE1; end if;
3997 if l_merged_row.ATTRIBUTE10 is null then l_merged_row.ATTRIBUTE10 := l_old_rows( idx ).ATTRIBUTE10; end if;
3998 if l_merged_row.ATTRIBUTE11 is null then l_merged_row.ATTRIBUTE11 := l_old_rows( idx ).ATTRIBUTE11; end if;
3999 if l_merged_row.ATTRIBUTE12 is null then l_merged_row.ATTRIBUTE12 := l_old_rows( idx ).ATTRIBUTE12; end if;
4000 if l_merged_row.ATTRIBUTE13 is null then l_merged_row.ATTRIBUTE13 := l_old_rows( idx ).ATTRIBUTE13; end if;
4001 if l_merged_row.ATTRIBUTE14 is null then l_merged_row.ATTRIBUTE14 := l_old_rows( idx ).ATTRIBUTE14; end if;
4002 if l_merged_row.ATTRIBUTE15 is null then l_merged_row.ATTRIBUTE15 := l_old_rows( idx ).ATTRIBUTE15; end if;
4003 if l_merged_row.ATTRIBUTE2 is null then l_merged_row.ATTRIBUTE2 := l_old_rows( idx ).ATTRIBUTE2; end if;
4004 if l_merged_row.ATTRIBUTE3 is null then l_merged_row.ATTRIBUTE3 := l_old_rows( idx ).ATTRIBUTE3; end if;
4005 if l_merged_row.ATTRIBUTE4 is null then l_merged_row.ATTRIBUTE4 := l_old_rows( idx ).ATTRIBUTE4; end if;
4006 if l_merged_row.ATTRIBUTE5 is null then l_merged_row.ATTRIBUTE5 := l_old_rows( idx ).ATTRIBUTE5; end if;
4007 if l_merged_row.ATTRIBUTE6 is null then l_merged_row.ATTRIBUTE6 := l_old_rows( idx ).ATTRIBUTE6; end if;
4008 if l_merged_row.ATTRIBUTE7 is null then l_merged_row.ATTRIBUTE7 := l_old_rows( idx ).ATTRIBUTE7; end if;
4009 if l_merged_row.ATTRIBUTE8 is null then l_merged_row.ATTRIBUTE8 := l_old_rows( idx ).ATTRIBUTE8; end if;
4010 if l_merged_row.ATTRIBUTE9 is null then l_merged_row.ATTRIBUTE9 := l_old_rows( idx ).ATTRIBUTE9; end if;
4011 if l_merged_row.ATTRIBUTE_CATEGORY is null then l_merged_row.ATTRIBUTE_CATEGORY := l_old_rows( idx ).ATTRIBUTE_CATEGORY; end if;
4012 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4013 if l_merged_row.CHANGE_NOTICE is null then l_merged_row.CHANGE_NOTICE := l_old_rows( idx ).CHANGE_NOTICE; end if;
4014 if l_merged_row.CURRENT_PHASE_ID is null then l_merged_row.CURRENT_PHASE_ID := l_old_rows( idx ).CURRENT_PHASE_ID; end if;
4015 if l_merged_row.DESCRIPTION is null then l_merged_row.DESCRIPTION := l_old_rows( idx ).DESCRIPTION; end if;
4016 if l_merged_row.ECN_INITIATION_DATE is null then l_merged_row.ECN_INITIATION_DATE := l_old_rows( idx ).ECN_INITIATION_DATE; end if;
4017 if l_merged_row.EFFECTIVITY_DATE is null then l_merged_row.EFFECTIVITY_DATE := l_old_rows( idx ).EFFECTIVITY_DATE; end if;
4018 if l_merged_row.IMPLEMENTATION_DATE is null then l_merged_row.IMPLEMENTATION_DATE := l_old_rows( idx ).IMPLEMENTATION_DATE; end if;
4019 if l_merged_row.IMPLEMENTED_SERIAL_NUMBER is null then l_merged_row.IMPLEMENTED_SERIAL_NUMBER := l_old_rows( idx ).IMPLEMENTED_SERIAL_NUMBER; end if;
4020 if l_merged_row.LIFECYCLE_ID is null then l_merged_row.LIFECYCLE_ID := l_old_rows( idx ).LIFECYCLE_ID; end if;
4021 if l_merged_row.REVISED_ITEM_SEQUENCE_ID is null then l_merged_row.REVISED_ITEM_SEQUENCE_ID := l_old_rows( idx ).REVISED_ITEM_SEQUENCE_ID; end if;
4022 if l_merged_row.REVISION is null then l_merged_row.REVISION := l_old_rows( idx ).REVISION; end if;
4023 if l_merged_row.REVISION_ID is null then l_merged_row.REVISION_ID := l_old_rows( idx ).REVISION_ID; end if;
4024 if l_merged_row.REVISION_LABEL is null then l_merged_row.REVISION_LABEL := l_old_rows( idx ).REVISION_LABEL; end if;
4025 if l_merged_row.REVISION_REASON is null then l_merged_row.REVISION_REASON := l_old_rows( idx ).REVISION_REASON; end if;
4026 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4027
4028 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4029 FOR i IN 1..l_new_row_idx LOOP
4030 Debug_Conc_Log( l_proc_log_prefix || ' No More records found for processing.');
4031 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4032 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4033 l_new_rows( i ).SOURCE_SYSTEM_ID);
4034 l_mrow_ix := l_mrow_ix + 1;
4035 l_merged_rows( l_mrow_ix ) := l_merged_row;
4036 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
4037 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
4038 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4039 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4040 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4041 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4042 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4043 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4044 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4045 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4046 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4047 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4048 END LOOP; -- loop over old rows
4049
4050 IF l_merged_rows IS NOT NULL THEN
4051 -- delete
4052 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
4053 FORALL rid_ix IN INDICES OF l_old_rowids
4054 DELETE FROM MTL_ITEM_REVISIONS_INTERFACE
4055 WHERE ROWID = l_old_rowids( rid_ix );
4056 -- insert
4057 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
4058 FORALL row_index IN INDICES OF l_merged_rows
4059 INSERT INTO MTL_ITEM_REVISIONS_INTERFACE
4060 VALUES l_merged_rows( row_index );
4061 END IF;
4062 END IF; -- ENDS IF l_old_rows.count <> 0
4063 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4064 EXCEPTION WHEN OTHERS THEN
4065 Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4066 IF c_target_revs%ISOPEN THEN
4067 CLOSE c_target_revs;
4068 END IF;
4069 RAISE;
4070 END Merge_Revs_For_Import;
4071
4072 -- Merges Item Category assignments
4073 PROCEDURE Merge_Categories_For_Import( p_batch_id IN NUMBER
4074 , p_master_org_id IN NUMBER
4075 )
4076 IS
4077 SUBTYPE MICI_ROW IS MTL_ITEM_CATEGORIES_INTERFACE%ROWTYPE;
4078 TYPE MICI_ROWS IS TABLE OF MICI_ROW INDEX BY BINARY_INTEGER;
4079
4080 /*
4081 * Note that the organization_id column is filled in from the organization_code and batch organization_id
4082 * as part of resolve_ssxref_on_data_load
4083 */
4084 CURSOR c_target_categories IS
4085 SELECT *
4086 FROM
4087 (SELECT
4088 ROWID rid,
4089 COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID, CATEGORY_SET_NAME, CATEGORY_NAME ) cnt,
4090 RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID, CATEGORY_SET_NAME, CATEGORY_NAME ) rnk,
4091 mici.*
4092 FROM MTL_ITEM_CATEGORIES_INTERFACE mici
4093 WHERE PROCESS_FLAG = 1
4094 AND SET_PROCESS_ID = p_batch_id
4095 AND ITEM_NUMBER IS NOT NULL
4096 AND ORGANIZATION_ID IS NOT NULL
4097 AND CATEGORY_SET_NAME IS NOT NULL
4098 AND CATEGORY_NAME IS NOT NULL
4099 AND EXISTS
4100 (SELECT NULL
4101 FROM MTL_PARAMETERS mp
4102 WHERE mp.ORGANIZATION_ID = mici.ORGANIZATION_ID
4103 AND mp.MASTER_ORGANIZATION_ID = p_master_org_id
4104 )
4105 ) sub
4106 WHERE sub.cnt > 1
4107 ORDER BY rnk, last_update_date DESC NULLS LAST;
4108
4109 TYPE TARGET_ROWS IS TABLE OF c_target_categories%ROWTYPE;
4110
4111 l_merged_rows MICI_ROWS;
4112 l_new_rows MICI_ROWS;
4113 l_merged_row MICI_ROW;
4114 l_old_rows TARGET_ROWS;
4115 l_old_rowids UROWID_TABLE;
4116
4117 l_candidate_trans MTL_ITEM_CATEGORIES_INTERFACE.TRANSACTION_TYPE%TYPE;
4118
4119 l_mrow_ix PLS_INTEGER := 0;
4120 l_new_row_idx PLS_INTEGER := 0;
4121 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
4122
4123 l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Categories_For_Import - ';
4124 BEGIN
4125 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4126 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4127
4128 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
4129 SET CATEGORY_SET_NAME = NVL( mici.CATEGORY_SET_NAME,
4130 ( SELECT mcs.CATEGORY_SET_NAME
4131 FROM MTL_CATEGORY_SETS mcs
4132 WHERE mcs.CATEGORY_SET_ID = mici.CATEGORY_SET_ID
4133 )
4134 ),
4135 CATEGORY_NAME = NVL( mici.CATEGORY_NAME,
4136 ( SELECT mc.CONCATENATED_SEGMENTS
4137 FROM MTL_CATEGORIES_KFV mc
4138 WHERE mc.CATEGORY_ID = mici.CATEGORY_ID
4139 )
4140 )
4141 WHERE ( ( CATEGORY_NAME IS NULL AND CATEGORY_ID IS NOT NULL )
4142 OR ( CATEGORY_SET_NAME IS NULL AND CATEGORY_SET_ID IS NOT NULL )
4143 )
4144 AND SET_PROCESS_ID = p_batch_id
4145 AND PROCESS_FLAG = 1;
4146
4147 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
4148 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4149 FROM MTL_SYSTEM_ITEMS_KFV
4150 WHERE INVENTORY_ITEM_ID = mici.INVENTORY_ITEM_ID
4151 AND ORGANIZATION_ID = mici.ORGANIZATION_ID)
4152 WHERE SET_PROCESS_ID = p_batch_id
4153 AND PROCESS_FLAG = 1
4154 AND INVENTORY_ITEM_ID IS NOT NULL
4155 AND ITEM_NUMBER IS NULL;
4156
4157 OPEN c_target_categories;
4158 FETCH c_target_categories BULK COLLECT INTO l_old_rows;
4159 CLOSE c_target_categories;
4160
4161 Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4162 IF 0 <> l_old_rows.COUNT THEN
4163 l_old_rowids := UROWID_TABLE( );
4164 l_old_rowids.EXTEND( l_old_rows.COUNT );
4165
4166 FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4167 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4168
4169 IF ( l_cur_rank <> l_old_rows( idx ).RNK )
4170 THEN
4171 IF l_new_row_idx > 0 THEN
4172 FOR i IN 1..l_new_row_idx LOOP
4173 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4174 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4175 l_new_rows( i ).SOURCE_SYSTEM_ID);
4176 l_mrow_ix := l_mrow_ix + 1;
4177 l_merged_rows( l_mrow_ix ) := l_merged_row;
4178 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
4179 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
4180 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4181 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4182 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4183 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4184 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4185 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4186 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4187 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4188 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4189 END IF; --IF l_new_row_idx > 0 THEN
4190 l_cur_rank := l_old_rows( idx ).RNK;
4191 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
4192 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, Cat-Set, Cat = ' ||
4193 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4194 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4195 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4196 l_old_rows( idx ).CATEGORY_SET_NAME || ', ' ||
4197 l_old_rows( idx ).CATEGORY_NAME);
4198 l_new_rows.DELETE;
4199 l_new_row_idx := 1;
4200 l_new_rows( l_new_row_idx ).PROCESS_FLAG := l_old_rows( idx ).PROCESS_FLAG;
4201 -- initializing l_merged_row . This row will contain the current merged row for an item
4202 l_merged_row := NULL;
4203 l_merged_row.SET_PROCESS_ID := p_batch_id;
4204 l_merged_row.PROCESS_FLAG := l_old_rows( idx ).PROCESS_FLAG;
4205 ELSE
4206 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
4207 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, Cat-Set, Cat = ' ||
4208 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4209 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4210 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4211 l_old_rows( idx ).CATEGORY_SET_NAME || ', ' ||
4212 l_old_rows( idx ).CATEGORY_NAME);
4213 l_new_row_idx := l_new_row_idx + 1;
4214 l_new_rows( l_new_row_idx ).PROCESS_FLAG := 111;
4215 END IF;
4216
4217 l_new_rows( l_new_row_idx ).SET_PROCESS_ID := p_batch_id;
4218 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4219 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4220 l_new_rows( l_new_row_idx ).CREATED_BY := l_old_rows( idx ).CREATED_BY;
4221 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY := l_old_rows( idx ).LAST_UPDATED_BY;
4222
4223 -- Special Cases:
4224 -- Transaction type
4225 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4226
4227 IF l_merged_row.TRANSACTION_TYPE IS NULL
4228 OR l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
4229 THEN
4230 -- CREATE > SYNC > UPDATE : order of case expression matters
4231 l_merged_row.TRANSACTION_TYPE :=
4232 CASE
4233 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4234 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
4235 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4236 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
4237 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4238 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
4239 ELSE NULL -- INVALID transaction types encountered ...
4240 END;
4241 END IF;
4242
4243 -- The following columns need to be treated as atomic groups
4244 -- 1. Item Identifier
4245 IF l_merged_row.INVENTORY_ITEM_ID IS NULL
4246 AND l_merged_row.ITEM_NUMBER IS NULL
4247 THEN
4248 l_merged_row.INVENTORY_ITEM_ID := l_old_rows( idx ).INVENTORY_ITEM_ID;
4249 l_merged_row.ITEM_NUMBER := l_old_rows( idx ).ITEM_NUMBER;
4250 END IF;
4251
4252 -- 2. Organization
4253 IF l_merged_row.ORGANIZATION_ID IS NULL
4254 AND l_merged_row.ORGANIZATION_CODE IS NULL
4255 THEN
4256 l_merged_row.ORGANIZATION_ID := l_old_rows( idx ).ORGANIZATION_ID;
4257 l_merged_row.ORGANIZATION_CODE := l_old_rows( idx ).ORGANIZATION_CODE;
4258 END IF;
4259
4260 -- 3. Category Set
4261 IF l_merged_row.CATEGORY_SET_ID IS NULL
4262 AND l_merged_row.CATEGORY_SET_NAME IS NULL
4263 THEN
4264 l_merged_row.CATEGORY_SET_ID := l_old_rows( idx ).CATEGORY_SET_ID;
4265 l_merged_row.CATEGORY_SET_NAME := l_old_rows( idx ).CATEGORY_SET_NAME;
4266 END IF;
4267
4268 -- 4. Category
4269 IF l_merged_row.CATEGORY_ID IS NULL
4270 AND l_merged_row.CATEGORY_NAME IS NULL
4271 THEN
4272 l_merged_row.CATEGORY_ID := l_old_rows( idx ).CATEGORY_ID;
4273 l_merged_row.CATEGORY_NAME := l_old_rows( idx ).CATEGORY_NAME;
4274 END IF;
4275
4276 -- Non-special cased
4277 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4278 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := l_old_rows( idx ).CHANGE_LINE_ID; end if;
4279 if l_merged_row.OLD_CATEGORY_ID is null then l_merged_row.OLD_CATEGORY_ID := l_old_rows( idx ).OLD_CATEGORY_ID; end if;
4280 if l_merged_row.OLD_CATEGORY_NAME is null then l_merged_row.OLD_CATEGORY_NAME := l_old_rows( idx ).OLD_CATEGORY_NAME; end if;
4281 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4282
4283 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4284 FOR i IN 1..l_new_row_idx LOOP
4285 Debug_Conc_Log( l_proc_log_prefix || ' No More records found for processing.');
4286 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4287 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4288 l_new_rows( i ).SOURCE_SYSTEM_ID);
4289 l_mrow_ix := l_mrow_ix + 1;
4290 l_merged_rows( l_mrow_ix ) := l_merged_row;
4291 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
4292 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
4293 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4294 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4295 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4296 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4297 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4298 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4299 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4300 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4301 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4302 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4303 END LOOP; -- loop over old rows
4304
4305 IF l_merged_rows IS NOT NULL THEN
4306 -- delete
4307 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
4308 FORALL rid_ix IN INDICES OF l_old_rowids
4309 DELETE FROM MTL_ITEM_CATEGORIES_INTERFACE
4310 WHERE ROWID = l_old_rowids( rid_ix );
4311 -- insert
4312 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
4313 FORALL row_index IN INDICES OF l_merged_rows
4314 INSERT INTO MTL_ITEM_CATEGORIES_INTERFACE
4315 VALUES l_merged_rows( row_index );
4316 END IF;
4317 END IF; -- ENDS IF l_old_rows.count <> 0
4318 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4319 EXCEPTION WHEN OTHERS THEN
4320 Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4321 IF c_target_categories%ISOPEN THEN
4322 CLOSE c_target_categories;
4323 END IF;
4324 RAISE;
4325 END Merge_Categories_For_Import;
4326
4327 -- Merges Item Attributes
4328 PROCEDURE Merge_Item_Attrs_For_Import( p_batch_id IN NUMBER
4329 , p_master_org_id IN NUMBER
4330 )
4331 IS
4332 CURSOR c_target_item_attrs IS
4333 SELECT sub.*
4334 , attrs.DATA_TYPE_CODE
4335 FROM
4336 ( SELECT
4337 EIUAI.ROWID rid
4338 , COUNT( * ) OVER ( PARTITION BY
4339 ITEM_NUMBER
4340 , ATTR_GROUP_INT_NAME
4341 , ATTR_INT_NAME
4342 , DATA_LEVEL_ID
4343 , PK1_VALUE
4344 , PK2_VALUE
4345 , PK3_VALUE
4346 , PK4_VALUE
4347 , PK5_VALUE
4348 , ORGANIZATION_ID
4349 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4350 )
4351 cnt
4352 , RANK() OVER ( ORDER BY
4353 ITEM_NUMBER
4354 , ATTR_GROUP_INT_NAME
4355 , ATTR_INT_NAME
4356 , DATA_LEVEL_ID
4357 , PK1_VALUE
4358 , PK2_VALUE
4359 , PK3_VALUE
4360 , PK4_VALUE
4361 , PK5_VALUE
4362 , ORGANIZATION_ID
4363 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4364 )
4365 rnk
4366 , eiuai.*
4367 FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
4368 WHERE DATA_SET_ID = p_batch_id
4369 AND PROCESS_STATUS = 1
4370 AND ITEM_NUMBER IS NOT NULL
4371 AND ORGANIZATION_ID IS NOT NULL
4372 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4373 AND FL_CTX_EXT.APPLICATION_ID = 431
4374 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
4375 AND FL_CTX_EXT.MULTI_ROW = 'N'
4376 AND EXISTS( SELECT NULL
4377 FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
4378 WHERE DL.APPLICATION_ID = 431
4379 AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
4380 AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
4381 /* Bug:11887867
4382 AND DL.DATA_LEVEL_ID = DL.DATA_LEVEL_ID
4383 */
4384 AND A.DATA_LEVEL_ID = DL.DATA_LEVEL_ID
4385 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
4386 )
4387 ) sub
4388 , EGO_ATTRS_V attrs
4389 WHERE sub.CNT > 1
4390 AND attrs.APPLICATION_ID = 431
4391 AND attrs.ATTR_GROUP_NAME = sub.ATTR_GROUP_INT_NAME
4392 AND attrs.ATTR_NAME = sub.ATTR_INT_NAME
4393 AND attrs.ATTR_GROUP_TYPE = NVL( sub.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4394 ORDER BY rnk, last_update_date DESC, interface_table_unique_id DESC;
4395
4396 TYPE TARGET_ROWS IS TABLE OF c_target_item_attrs%ROWTYPE;
4397
4398 l_merged_rows EIUAI_ROWS;
4399 l_new_rows EIUAI_ROWS;
4400 l_merged_row EIUAI_ROW;
4401 l_old_rows TARGET_ROWS;
4402 l_old_rowids UROWID_TABLE;
4403
4404 l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
4405
4406 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
4407 l_mrow_ix PLS_INTEGER := 0;
4408 l_new_row_idx PLS_INTEGER := 0;
4409
4410 l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
4411
4412 l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Item_Attrs_For_Import - ';
4413 BEGIN
4414 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4415 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4416
4417 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4418 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4419 FROM MTL_SYSTEM_ITEMS_KFV
4420 WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
4421 AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
4422 WHERE DATA_SET_ID = p_batch_id
4423 AND PROCESS_STATUS = 1
4424 AND INVENTORY_ITEM_ID IS NOT NULL
4425 AND ITEM_NUMBER IS NULL;
4426
4427 OPEN c_target_item_attrs;
4428 FETCH c_target_item_attrs BULK COLLECT INTO l_old_rows;
4429 CLOSE c_target_item_attrs;
4430
4431 Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4432 IF 0 <> l_old_rows.COUNT THEN
4433 l_old_rowids := UROWID_TABLE( );
4434 l_old_rowids.EXTEND( l_old_rows.COUNT );
4435
4436 -- process the item-level attrs
4437 FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4438 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4439
4440 IF( l_old_rows( idx ).RNK <> l_cur_rank ) THEN
4441 IF l_new_row_idx > 0 THEN
4442 FOR i IN 1..l_new_row_idx LOOP
4443 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4444 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4445 l_new_rows( i ).SOURCE_SYSTEM_ID);
4446 l_mrow_ix := l_mrow_ix + 1;
4447 l_merged_rows( l_mrow_ix ) := l_merged_row;
4448 l_merged_rows( l_mrow_ix ).DATA_SET_ID := l_new_rows( i ).DATA_SET_ID;
4449 l_merged_rows( l_mrow_ix ).PROCESS_STATUS := l_new_rows( i ).PROCESS_STATUS;
4450 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4451 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4452 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4453 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_new_rows( i ).ATTR_INT_NAME;
4454 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_new_rows( i ).DATA_LEVEL_ID;
4455 l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME := l_new_rows( i ).DATA_LEVEL_NAME;
4456 l_merged_rows( l_mrow_ix ).PK1_VALUE := l_new_rows( i ).PK1_VALUE;
4457 l_merged_rows( l_mrow_ix ).PK2_VALUE := l_new_rows( i ).PK2_VALUE;
4458 l_merged_rows( l_mrow_ix ).PK3_VALUE := l_new_rows( i ).PK3_VALUE;
4459 l_merged_rows( l_mrow_ix ).PK4_VALUE := l_new_rows( i ).PK4_VALUE;
4460 l_merged_rows( l_mrow_ix ).PK5_VALUE := l_new_rows( i ).PK5_VALUE;
4461 l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_new_rows( i ).ROW_IDENTIFIER;
4462 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4463 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4464 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4465 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4466 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4467 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4468 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4469 END IF; --IF l_new_row_idx > 0 THEN
4470 l_cur_rank := l_old_rows( idx ).RNK;
4471 l_data_type_code := l_old_rows( idx ).DATA_TYPE_CODE;
4472
4473 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
4474 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4475 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4476 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4477 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4478 l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4479 l_old_rows( idx ).ATTR_INT_NAME);
4480 l_new_rows.DELETE;
4481 l_new_row_idx := 1;
4482 l_new_rows( l_new_row_idx ).PROCESS_STATUS := l_old_rows( idx ).PROCESS_STATUS;
4483 -- initializing l_merged_row . This row will contain the current merged row for an item
4484 l_merged_row := NULL;
4485 l_merged_row.DATA_SET_ID := p_batch_id;
4486 l_merged_row.PROCESS_STATUS := l_old_rows( idx ).PROCESS_STATUS;
4487 ELSE
4488 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
4489 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4490 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4491 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4492 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4493 l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4494 l_old_rows( idx ).ATTR_INT_NAME);
4495 l_new_row_idx := l_new_row_idx + 1;
4496 l_new_rows( l_new_row_idx ).PROCESS_STATUS := 7;
4497 END IF;
4498
4499 l_new_rows( l_new_row_idx ).DATA_SET_ID := p_batch_id;
4500 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4501 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4502 l_new_rows( l_new_row_idx ).ATTR_GROUP_INT_NAME := l_old_rows( idx ).ATTR_GROUP_INT_NAME;
4503 l_new_rows( l_new_row_idx ).ATTR_INT_NAME := l_old_rows( idx ).ATTR_INT_NAME;
4504 l_new_rows( l_new_row_idx ).DATA_LEVEL_NAME := l_old_rows( idx ).DATA_LEVEL_NAME;
4505 l_new_rows( l_new_row_idx ).DATA_LEVEL_ID := l_old_rows( idx ).DATA_LEVEL_ID;
4506 l_new_rows( l_new_row_idx ).PK1_VALUE := l_old_rows( idx ).PK1_VALUE;
4507 l_new_rows( l_new_row_idx ).PK2_VALUE := l_old_rows( idx ).PK2_VALUE;
4508 l_new_rows( l_new_row_idx ).PK3_VALUE := l_old_rows( idx ).PK3_VALUE;
4509 l_new_rows( l_new_row_idx ).PK4_VALUE := l_old_rows( idx ).PK4_VALUE;
4510 l_new_rows( l_new_row_idx ).PK5_VALUE := l_old_rows( idx ).PK5_VALUE;
4511 l_new_rows( l_new_row_idx ).ROW_IDENTIFIER := l_old_rows( idx ).ROW_IDENTIFIER;
4512 l_new_rows( l_new_row_idx ).CREATED_BY := l_old_rows( idx ).CREATED_BY;
4513 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY := l_old_rows( idx ).LAST_UPDATED_BY;
4514
4515 -- Special Cases:
4516 -- Transaction type
4517 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4518
4519 IF l_merged_row.TRANSACTION_TYPE IS NULL
4520 OR l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
4521 THEN
4522 -- CREATE > SYNC > UPDATE : order of case expression matters
4523 l_merged_row.TRANSACTION_TYPE :=
4524 CASE
4525 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4526 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
4527 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4528 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
4529 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4530 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
4531 ELSE NULL -- INVALID transaction types encountered so far ...
4532 END;
4533 END IF;
4534
4535
4536 -- The following columns need to be treated as atomic groups
4537 -- 1. Item Identifier
4538 IF l_merged_row.INVENTORY_ITEM_ID IS NULL
4539 AND l_merged_row.ITEM_NUMBER IS NULL
4540 THEN
4541 l_merged_row.INVENTORY_ITEM_ID := l_old_rows( idx ).INVENTORY_ITEM_ID;
4542 l_merged_row.ITEM_NUMBER := l_old_rows( idx ).ITEM_NUMBER;
4543 END IF;
4544
4545 -- 2. Organization
4546 IF l_merged_row.ORGANIZATION_ID IS NULL
4547 AND l_merged_row.ORGANIZATION_CODE IS NULL
4548 THEN
4549 l_merged_row.ORGANIZATION_ID := l_old_rows( idx ).ORGANIZATION_ID ;
4550 l_merged_row.ORGANIZATION_CODE := l_old_rows( idx ).ORGANIZATION_CODE ;
4551 END IF;
4552
4553 -- 3. The attribute value
4554 IF l_merged_row.ATTR_DISP_VALUE IS NULL
4555 AND l_merged_row.ATTR_VALUE_STR IS NULL
4556 AND l_merged_row.ATTR_VALUE_DATE IS NULL
4557 AND l_merged_row.ATTR_VALUE_NUM IS NULL
4558 AND l_merged_row.ATTR_VALUE_UOM IS NULL
4559 AND l_merged_row.ATTR_UOM_DISP_VALUE IS NULL
4560 THEN
4561 CASE
4562 WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN -- String Attribute
4563 IF l_old_rows( idx ).ATTR_VALUE_STR IS NOT NULL
4564 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4565 THEN
4566 l_merged_row.ATTR_VALUE_STR := l_old_rows( idx ).ATTR_VALUE_STR;
4567 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4568 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4569 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4570 END IF;
4571 WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN -- Date Attribute
4572 IF l_old_rows( idx ).ATTR_VALUE_DATE IS NOT NULL
4573 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4574 THEN
4575 l_merged_row.ATTR_VALUE_DATE := l_old_rows( idx ).ATTR_VALUE_DATE;
4576 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4577 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4578 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4579 END IF;
4580 WHEN l_data_type_code = 'N' THEN -- Num Attribute
4581 IF l_old_rows( idx ).ATTR_VALUE_NUM IS NOT NULL
4582 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4583 THEN
4584 l_merged_row.ATTR_VALUE_NUM := l_old_rows( idx ).ATTR_VALUE_NUM;
4585 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4586 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4587 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4588 END IF;
4589 END CASE;
4590 END IF;
4591
4592 -- Non-special cased
4593 if l_merged_row.ATTR_GROUP_TYPE is null then l_merged_row.ATTR_GROUP_TYPE := l_old_rows( idx ).ATTR_GROUP_TYPE; end if;
4594 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4595 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := l_old_rows( idx ).CHANGE_LINE_ID; end if;
4596 if l_merged_row.ITEM_CATALOG_GROUP_ID is null then l_merged_row.ITEM_CATALOG_GROUP_ID := l_old_rows( idx ).ITEM_CATALOG_GROUP_ID; end if;
4597 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4598 -- End Generated Code
4599
4600 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4601 FOR i IN 1..l_new_row_idx LOOP
4602 Debug_Conc_Log( l_proc_log_prefix || ' No More records found for processing.');
4603 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4604 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4605 l_new_rows( i ).SOURCE_SYSTEM_ID);
4606 l_mrow_ix := l_mrow_ix + 1;
4607 l_merged_rows( l_mrow_ix ) := l_merged_row;
4608 l_merged_rows( l_mrow_ix ).DATA_SET_ID := l_new_rows( i ).DATA_SET_ID;
4609 l_merged_rows( l_mrow_ix ).PROCESS_STATUS := l_new_rows( i ).PROCESS_STATUS;
4610 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4611 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4612 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4613 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_new_rows( i ).ATTR_INT_NAME;
4614 l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME := l_new_rows( i ).DATA_LEVEL_NAME;
4615 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_new_rows( i ).DATA_LEVEL_ID;
4616 l_merged_rows( l_mrow_ix ).PK1_VALUE := l_new_rows( i ).PK1_VALUE;
4617 l_merged_rows( l_mrow_ix ).PK2_VALUE := l_new_rows( i ).PK2_VALUE;
4618 l_merged_rows( l_mrow_ix ).PK3_VALUE := l_new_rows( i ).PK3_VALUE;
4619 l_merged_rows( l_mrow_ix ).PK4_VALUE := l_new_rows( i ).PK4_VALUE;
4620 l_merged_rows( l_mrow_ix ).PK5_VALUE := l_new_rows( i ).PK5_VALUE;
4621 l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_new_rows( i ).ROW_IDENTIFIER;
4622 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4623 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4624 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4625 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4626 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4627 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4628 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4629 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4630 END LOOP; -- loop over old rows
4631
4632 IF l_merged_rows IS NOT NULL THEN
4633 -- delete
4634 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
4635 FORALL rid_ix IN INDICES OF l_old_rowids
4636 DELETE FROM EGO_ITM_USR_ATTR_INTRFC
4637 WHERE ROWID = l_old_rowids( rid_ix );
4638 -- insert
4639 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
4640 FORALL row_index IN INDICES OF l_merged_rows
4641 INSERT INTO EGO_ITM_USR_ATTR_INTRFC
4642 VALUES l_merged_rows( row_index );
4643 END IF;
4644 END IF; -- ENDS IF l_old_rows.count <> 0
4645
4646 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4647 EXCEPTION WHEN OTHERS THEN
4648 Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4649 IF c_target_item_attrs%ISOPEN THEN
4650 CLOSE c_target_item_attrs;
4651 END IF;
4652 RAISE;
4653 END Merge_Item_Attrs_For_Import;
4654
4655 -- Merges Item Revision Attributes
4656 PROCEDURE Merge_Rev_Attrs_For_Import( p_batch_id IN NUMBER
4657 , p_master_org_id IN NUMBER
4658 )
4659 IS
4660 CURSOR c_target_rev_attrs(cp_rev_dl_id NUMBER) IS
4661 SELECT sub.*
4662 , attrs.DATA_TYPE_CODE
4663 FROM
4664 ( SELECT
4665 eiuai.ROWID rid
4666 , COUNT( * ) OVER ( PARTITION BY
4667 ITEM_NUMBER
4668 , ATTR_GROUP_INT_NAME
4669 , ATTR_INT_NAME
4670 , ORGANIZATION_ID
4671 , REVISION
4672 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4673 )
4674 cnt
4675 , RANK() OVER ( ORDER BY
4676 ITEM_NUMBER
4677 , ATTR_GROUP_INT_NAME
4678 , ATTR_INT_NAME
4679 , ORGANIZATION_ID
4680 , REVISION
4681 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4682 )
4683 rnk
4684 , eiuai.*
4685 FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
4686 WHERE DATA_SET_ID = p_batch_id
4687 AND PROCESS_STATUS = 1
4688 AND ITEM_NUMBER IS NOT NULL
4689 AND ORGANIZATION_ID IS NOT NULL
4690 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4691 AND FL_CTX_EXT.APPLICATION_ID = 431
4692 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
4693 AND FL_CTX_EXT.MULTI_ROW = 'N'
4694 AND EXISTS( SELECT NULL
4695 FROM EGO_ATTR_GROUP_DL A
4696 WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
4697 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
4698 )
4699 ) sub
4700 , EGO_ATTRS_V attrs
4701 WHERE sub.CNT > 1
4702 AND attrs.APPLICATION_ID = 431
4703 AND attrs.ATTR_GROUP_NAME = sub.ATTR_GROUP_INT_NAME
4704 AND attrs.ATTR_NAME = sub.ATTR_INT_NAME
4705 AND attrs.ATTR_GROUP_TYPE = NVL( sub.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4706 ORDER BY rnk, last_update_date DESC, interface_table_unique_id DESC;
4707
4708 TYPE TARGET_ROWS IS TABLE OF c_target_rev_attrs%ROWTYPE;
4709
4710 l_merged_rows EIUAI_ROWS;
4711 l_new_rows EIUAI_ROWS;
4712 l_merged_row EIUAI_ROW;
4713 l_old_rows TARGET_ROWS;
4714 l_old_rowids UROWID_TABLE;
4715
4716 l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
4717
4718 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
4719 l_mrow_ix PLS_INTEGER := 0;
4720 l_new_row_idx PLS_INTEGER := 0;
4721 l_rev_dl_id NUMBER;
4722
4723 l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
4724
4725 l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Rev_Attrs_For_Import - ';
4726 BEGIN
4727 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4728 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4729 BEGIN
4730 SELECT DATA_LEVEL_ID INTO l_rev_dl_id
4731 FROM EGO_DATA_LEVEL_B
4732 WHERE ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
4733 AND APPLICATION_ID = 431
4734 AND DATA_LEVEL_NAME = 'ITEM_REVISION_LEVEL';
4735 EXCEPTION WHEN NO_DATA_FOUND THEN
4736 RETURN;
4737 END;
4738 Debug_Conc_Log( l_proc_log_prefix || 'l_rev_dl_id: ' || l_rev_dl_id );
4739
4740 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4741 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4742 FROM MTL_SYSTEM_ITEMS_KFV
4743 WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
4744 AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
4745 WHERE DATA_SET_ID = p_batch_id
4746 AND PROCESS_STATUS = 1
4747 AND INVENTORY_ITEM_ID IS NOT NULL
4748 AND ITEM_NUMBER IS NULL;
4749
4750 OPEN c_target_rev_attrs(l_rev_dl_id);
4751 FETCH c_target_rev_attrs BULK COLLECT INTO l_old_rows;
4752 CLOSE c_target_rev_attrs;
4753
4754 Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4755 IF 0 <> l_old_rows.COUNT THEN
4756 l_old_rowids := UROWID_TABLE( );
4757 l_old_rowids.EXTEND( l_old_rows.COUNT );
4758
4759 -- process the item-level attrs
4760 FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4761 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4762
4763 IF( l_old_rows( idx ).RNK <> l_cur_rank ) THEN
4764 IF l_new_row_idx > 0 THEN
4765 FOR i IN 1..l_new_row_idx LOOP
4766 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4767 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4768 l_new_rows( i ).SOURCE_SYSTEM_ID);
4769 l_mrow_ix := l_mrow_ix + 1;
4770 l_merged_rows( l_mrow_ix ) := l_merged_row;
4771 l_merged_rows( l_mrow_ix ).DATA_SET_ID := l_new_rows( i ).DATA_SET_ID;
4772 l_merged_rows( l_mrow_ix ).PROCESS_STATUS := l_new_rows( i ).PROCESS_STATUS;
4773 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4774 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4775 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4776 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_new_rows( i ).ATTR_INT_NAME;
4777 l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME := l_new_rows( i ).DATA_LEVEL_NAME;
4778 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_new_rows( i ).DATA_LEVEL_ID;
4779 l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_new_rows( i ).ROW_IDENTIFIER;
4780 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4781 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4782 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4783 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4784 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4785 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4786 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4787 END IF; --IF l_new_row_idx > 0 THEN
4788 l_cur_rank := l_old_rows( idx ).RNK;
4789 l_data_type_code := l_old_rows( idx ).DATA_TYPE_CODE;
4790
4791 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
4792 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4793 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4794 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4795 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4796 l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4797 l_old_rows( idx ).ATTR_INT_NAME);
4798 l_new_rows.DELETE;
4799 l_new_row_idx := 1;
4800 l_new_rows( l_new_row_idx ).PROCESS_STATUS := l_old_rows( idx ).PROCESS_STATUS;
4801 -- initializing l_merged_row . This row will contain the current merged row for an item
4802 l_merged_row := NULL;
4803 l_merged_row.DATA_SET_ID := p_batch_id;
4804 l_merged_row.PROCESS_STATUS := l_old_rows( idx ).PROCESS_STATUS;
4805 ELSE
4806 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
4807 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4808 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4809 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4810 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4811 l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4812 l_old_rows( idx ).ATTR_INT_NAME);
4813 l_new_row_idx := l_new_row_idx + 1;
4814 l_new_rows( l_new_row_idx ).PROCESS_STATUS := 7;
4815 END IF;
4816
4817 l_new_rows( l_new_row_idx ).DATA_SET_ID := p_batch_id;
4818 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4819 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4820 l_new_rows( l_new_row_idx ).ATTR_GROUP_INT_NAME := l_old_rows( idx ).ATTR_GROUP_INT_NAME;
4821 l_new_rows( l_new_row_idx ).ATTR_INT_NAME := l_old_rows( idx ).ATTR_INT_NAME;
4822 l_new_rows( l_new_row_idx ).DATA_LEVEL_NAME := l_old_rows( idx ).DATA_LEVEL_NAME;
4823 l_new_rows( l_new_row_idx ).DATA_LEVEL_ID := l_old_rows( idx ).DATA_LEVEL_ID;
4824 l_new_rows( l_new_row_idx ).ROW_IDENTIFIER := l_old_rows( idx ).ROW_IDENTIFIER;
4825 l_new_rows( l_new_row_idx ).CREATED_BY := l_old_rows( idx ).CREATED_BY;
4826 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY := l_old_rows( idx ).LAST_UPDATED_BY;
4827
4828 -- Special Cases:
4829 -- Transaction type
4830 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4831
4832 IF l_merged_row.TRANSACTION_TYPE IS NULL
4833 OR l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
4834 THEN
4835 -- CREATE > SYNC > UPDATE : order of case expression matters
4836 l_merged_row.TRANSACTION_TYPE :=
4837 CASE
4838 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4839 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
4840 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4841 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
4842 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4843 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
4844 ELSE NULL -- INVALID transaction types encountered so far ...
4845 END;
4846 END IF;
4847
4848
4849 -- The following columns need to be treated as atomic groups
4850 -- 1. Item Identifier
4851 IF l_merged_row.INVENTORY_ITEM_ID IS NULL
4852 AND l_merged_row.ITEM_NUMBER IS NULL
4853 THEN
4854 l_merged_row.INVENTORY_ITEM_ID := l_old_rows( idx ).INVENTORY_ITEM_ID;
4855 l_merged_row.ITEM_NUMBER := l_old_rows( idx ).ITEM_NUMBER;
4856 END IF;
4857
4858 -- 2. Organization
4859 IF l_merged_row.ORGANIZATION_ID IS NULL
4860 AND l_merged_row.ORGANIZATION_CODE IS NULL
4861 THEN
4862 l_merged_row.ORGANIZATION_ID := l_old_rows( idx ).ORGANIZATION_ID ;
4863 l_merged_row.ORGANIZATION_CODE := l_old_rows( idx ).ORGANIZATION_CODE ;
4864 END IF;
4865
4866 -- 3. The attribute value
4867 IF l_merged_row.ATTR_DISP_VALUE IS NULL
4868 AND l_merged_row.ATTR_VALUE_STR IS NULL
4869 AND l_merged_row.ATTR_VALUE_DATE IS NULL
4870 AND l_merged_row.ATTR_VALUE_NUM IS NULL
4871 AND l_merged_row.ATTR_VALUE_UOM IS NULL
4872 AND l_merged_row.ATTR_UOM_DISP_VALUE IS NULL
4873 THEN
4874 CASE
4875 WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN -- String Attribute
4876 IF l_old_rows( idx ).ATTR_VALUE_STR IS NOT NULL
4877 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4878 THEN
4879 l_merged_row.ATTR_VALUE_STR := l_old_rows( idx ).ATTR_VALUE_STR;
4880 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4881 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4882 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4883 END IF;
4884 WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN -- Date Attribute
4885 IF l_old_rows( idx ).ATTR_VALUE_DATE IS NOT NULL
4886 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4887 THEN
4888 l_merged_row.ATTR_VALUE_DATE := l_old_rows( idx ).ATTR_VALUE_DATE;
4889 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4890 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4891 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4892 END IF;
4893 WHEN l_data_type_code = 'N' THEN -- Num Attribute
4894 IF l_old_rows( idx ).ATTR_VALUE_NUM IS NOT NULL
4895 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4896 THEN
4897 l_merged_row.ATTR_VALUE_NUM := l_old_rows( idx ).ATTR_VALUE_NUM;
4898 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4899 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4900 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4901 END IF;
4902 END CASE;
4903 END IF;
4904
4905 -- Non-special cased
4906 if l_merged_row.ATTR_GROUP_TYPE is null then l_merged_row.ATTR_GROUP_TYPE := l_old_rows( idx ).ATTR_GROUP_TYPE; end if;
4907 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4908 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := l_old_rows( idx ).CHANGE_LINE_ID; end if;
4909 if l_merged_row.ITEM_CATALOG_GROUP_ID is null then l_merged_row.ITEM_CATALOG_GROUP_ID := l_old_rows( idx ).ITEM_CATALOG_GROUP_ID; end if;
4910 if l_merged_row.REVISION is null then l_merged_row.REVISION := l_old_rows( idx ).REVISION; end if;
4911 if l_merged_row.REVISION_ID is null then l_merged_row.REVISION_ID := l_old_rows( idx ).REVISION_ID; end if;
4912 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4913 -- End Generated Code
4914
4915 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4916 FOR i IN 1..l_new_row_idx LOOP
4917 Debug_Conc_Log( l_proc_log_prefix || ' No More records found for processing.');
4918 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4919 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4920 l_new_rows( i ).SOURCE_SYSTEM_ID);
4921 l_mrow_ix := l_mrow_ix + 1;
4922 l_merged_rows( l_mrow_ix ) := l_merged_row;
4923 l_merged_rows( l_mrow_ix ).DATA_SET_ID := l_new_rows( i ).DATA_SET_ID;
4924 l_merged_rows( l_mrow_ix ).PROCESS_STATUS := l_new_rows( i ).PROCESS_STATUS;
4925 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4926 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4927 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4928 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_new_rows( i ).ATTR_INT_NAME;
4929 l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME := l_new_rows( i ).DATA_LEVEL_NAME;
4930 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_new_rows( i ).DATA_LEVEL_ID;
4931 l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_new_rows( i ).ROW_IDENTIFIER;
4932 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4933 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4934 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4935 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4936 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4937 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4938 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4939 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4940 END LOOP; -- loop over old rows
4941
4942 IF l_merged_rows IS NOT NULL THEN
4943 -- delete
4944 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
4945 FORALL rid_ix IN INDICES OF l_old_rowids
4946 DELETE FROM EGO_ITM_USR_ATTR_INTRFC
4947 WHERE ROWID = l_old_rowids( rid_ix );
4948 -- insert
4949 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
4950 FORALL row_index IN INDICES OF l_merged_rows
4951 INSERT INTO EGO_ITM_USR_ATTR_INTRFC
4952 VALUES l_merged_rows( row_index );
4953 END IF;
4954 END IF; -- ENDS IF l_old_rows.count <> 0
4955 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4956 EXCEPTION WHEN OTHERS THEN
4957 Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4958 IF c_target_rev_attrs%ISOPEN THEN
4959 CLOSE c_target_rev_attrs;
4960 END IF;
4961 RAISE;
4962 END Merge_Rev_Attrs_For_Import;
4963
4964 -- Merges all entities in batch
4965 PROCEDURE Merge_Batch_For_Import( p_batch_id IN NUMBER
4966 , p_master_org_id IN NUMBER
4967 )
4968 IS
4969 BEGIN
4970 Merge_Items_For_Import(p_batch_id, p_master_org_id);
4971 Merge_Revs_For_Import(p_batch_id, p_master_org_id);
4972 Merge_Categories_For_Import(p_batch_id, p_master_org_id);
4973 Merge_Item_Attrs_For_Import(p_batch_id, p_master_org_id);
4974 Merge_Rev_Attrs_For_Import(p_batch_id, p_master_org_id);
4975 END Merge_Batch_For_Import;
4976
4977 --=================================================================================================================--
4978 --------------------------------- End of Merging Section for Import -----------------------------------------------
4979 --=================================================================================================================--
4980
4981 /*
4982 * This method is called after all the import is completed
4983 * this will update the process flag of rows with process flag = 111
4984 */
4985 PROCEDURE Demerge_Batch_After_Import(
4986 ERRBUF OUT NOCOPY VARCHAR2
4987 , RETCODE OUT NOCOPY VARCHAR2
4988 , p_batch_id IN NUMBER
4989 )
4990 IS
4991 l_proc_log_prefix VARCHAR2(50) := 'Demerge_Batch_After_Import - ';
4992 BEGIN
4993 Debug_Conc_Log( l_proc_log_prefix || 'Starting ...' );
4994 -- processing items and org assignments
4995 UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
4996 SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
4997 (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
4998 FROM MTL_SYSTEM_ITEMS_INTERFACE msii_merged
4999 WHERE msii_merged.ITEM_NUMBER = msii.ITEM_NUMBER
5000 AND msii_merged.ORGANIZATION_ID = msii.ORGANIZATION_ID
5001 AND msii_merged.REQUEST_ID = msii.REQUEST_ID
5002 AND msii_merged.SET_PROCESS_ID = msii.SET_PROCESS_ID
5003 AND msii_merged.PROCESS_FLAG <> 111)
5004 WHERE SET_PROCESS_ID = p_batch_id
5005 AND PROCESS_FLAG = 111;
5006
5007 Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Items.' );
5008 -- processing item revisions
5009 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
5010 SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
5011 (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
5012 FROM MTL_ITEM_REVISIONS_INTERFACE miri_merged
5013 WHERE miri_merged.ITEM_NUMBER = miri.ITEM_NUMBER
5014 AND miri_merged.ORGANIZATION_ID = miri.ORGANIZATION_ID
5015 AND miri_merged.REVISION = miri.REVISION
5016 AND miri_merged.REQUEST_ID = miri.REQUEST_ID
5017 AND miri_merged.SET_PROCESS_ID = miri.SET_PROCESS_ID
5018 AND miri_merged.PROCESS_FLAG <> 111)
5019 WHERE SET_PROCESS_ID = p_batch_id
5020 AND PROCESS_FLAG = 111;
5021
5022 Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Revisions.' );
5023 -- processing category assignments
5024 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
5025 SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
5026 (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
5027 FROM MTL_ITEM_CATEGORIES_INTERFACE mici_merged
5028 WHERE mici_merged.ITEM_NUMBER = mici.ITEM_NUMBER
5029 AND mici_merged.ORGANIZATION_ID = mici.ORGANIZATION_ID
5030 AND mici_merged.CATEGORY_SET_NAME = mici.CATEGORY_SET_NAME
5031 AND mici_merged.CATEGORY_NAME = mici.CATEGORY_NAME
5032 AND mici_merged.REQUEST_ID = mici.REQUEST_ID
5033 AND mici_merged.SET_PROCESS_ID = mici.SET_PROCESS_ID
5034 AND mici_merged.PROCESS_FLAG <> 111)
5035 WHERE SET_PROCESS_ID = p_batch_id
5036 AND PROCESS_FLAG = 111;
5037
5038 Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Category Assignments.' );
5039 -- processing revision attributes
5040 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
5041 SET (PROCESS_STATUS, INVENTORY_ITEM_ID) =
5042 (SELECT PROCESS_STATUS, INVENTORY_ITEM_ID
5043 FROM EGO_ITM_USR_ATTR_INTRFC eiuai_merged
5044 WHERE eiuai_merged.ITEM_NUMBER = eiuai.ITEM_NUMBER
5045 AND eiuai_merged.ORGANIZATION_ID = eiuai.ORGANIZATION_ID
5046 AND eiuai_merged.ATTR_GROUP_INT_NAME = eiuai.ATTR_GROUP_INT_NAME
5047 AND eiuai_merged.ATTR_INT_NAME = eiuai.ATTR_INT_NAME
5048 AND NVL(eiuai_merged.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = NVL(eiuai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
5049 AND eiuai_merged.REVISION = eiuai.REVISION
5050 AND eiuai_merged.REQUEST_ID = eiuai.REQUEST_ID
5051 AND eiuai_merged.DATA_SET_ID = eiuai.DATA_SET_ID
5052 AND eiuai_merged.PROCESS_STATUS <> 7)
5053 WHERE DATA_SET_ID = p_batch_id
5054 AND PROCESS_STATUS = 7
5055 AND REVISION IS NOT NULL;
5056
5057 Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Revision attributes.' );
5058 -- processing item attributes
5059 UPDATE /*+ INDEX(eiuai,EGO_ITM_USR_ATTR_INTRFC_N3) */ /* Bug 9678667 */
5060 EGO_ITM_USR_ATTR_INTRFC eiuai
5061 SET (PROCESS_STATUS, INVENTORY_ITEM_ID) =
5062 (SELECT PROCESS_STATUS, INVENTORY_ITEM_ID
5063 FROM EGO_ITM_USR_ATTR_INTRFC eiuai_merged
5064 WHERE eiuai_merged.ITEM_NUMBER = eiuai.ITEM_NUMBER
5065 AND eiuai_merged.ORGANIZATION_ID = eiuai.ORGANIZATION_ID
5066 AND eiuai_merged.ATTR_GROUP_INT_NAME = eiuai.ATTR_GROUP_INT_NAME
5067 AND eiuai_merged.ATTR_INT_NAME = eiuai.ATTR_INT_NAME
5068 AND Nvl(eiuai_merged.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = Nvl(eiuai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
5069 AND eiuai_merged.REVISION IS NULL
5070 AND eiuai_merged.REQUEST_ID = eiuai.REQUEST_ID
5071 AND eiuai_merged.DATA_SET_ID = eiuai.DATA_SET_ID
5072 AND eiuai_merged.PROCESS_STATUS <> 7)
5073 WHERE DATA_SET_ID = p_batch_id
5074 AND PROCESS_STATUS = 7
5075 AND REVISION IS NULL;
5076
5077 Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Item attributes.' );
5078
5079 --COMMIT;
5080 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
5081 RETCODE := '0';
5082 ERRBUF := NULL;
5083 EXCEPTION WHEN OTHERS THEN
5084 Debug_Conc_Log(l_proc_log_prefix || 'Error - ' || SQLERRM);
5085 RETCODE := '2';
5086 ERRBUF := 'Error in method EGO_IMPORT_PVT.Demerge_Batch_After_Import - '||SQLERRM;
5087 END Demerge_Batch_After_Import;
5088
5089 /*
5090 * This method does a bulkload of GTINs
5091 */
5092 PROCEDURE Process_Gtin_Intf_Rows(ERRBUF OUT NOCOPY VARCHAR2,
5093 RETCODE OUT NOCOPY VARCHAR2,
5094 p_data_set_id IN NUMBER) IS
5095 CURSOR c_intf_rows IS
5096 SELECT
5097 intf.INVENTORY_ITEM_ID,
5098 intf.ORGANIZATION_ID,
5099 intf.ITEM_NUMBER,
5100 intf.ORGANIZATION_CODE,
5101 intf.PRIMARY_UOM_CODE,
5102 intf.GLOBAL_TRADE_ITEM_NUMBER,
5103 intf.GTIN_DESCRIPTION,
5104 intf.TRANSACTION_ID,
5105 c.CROSS_REFERENCE EXISTING_GTIN,
5106 c.DESCRIPTION EXISTING_GTIN_DESC,
5107 c.CROSS_REFERENCE_ID
5108 FROM MTL_SYSTEM_ITEMS_INTERFACE intf, MTL_PARAMETERS p, MTL_CROSS_REFERENCES c
5109 WHERE intf.SET_PROCESS_ID = p_data_set_id
5110 AND intf.ORGANIZATION_ID = p.ORGANIZATION_ID
5111 AND p.ORGANIZATION_ID = p.MASTER_ORGANIZATION_ID
5112 AND intf.PROCESS_FLAG IN (5,7)
5113 AND intf.GLOBAL_TRADE_ITEM_NUMBER IS NOT NULL
5114 AND c.INVENTORY_ITEM_ID(+) = intf.INVENTORY_ITEM_ID
5115 AND c.UOM_CODE(+) = intf.PRIMARY_UOM_CODE
5116 AND intf.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5117 AND c.CROSS_REFERENCE_TYPE(+) = 'GTIN';
5118
5119 l_gtin NUMBER;
5120 l_msg_text VARCHAR2(4000);
5121 dumm_status VARCHAR2(100);
5122 l_user_id NUMBER := FND_GLOBAL.USER_ID;
5123 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
5124 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
5125 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5126 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5127 l_err_text VARCHAR2(4000);
5128 l_error BOOLEAN;
5129 l_rowid ROWID;
5130 l_xref_id NUMBER;
5131 l_existing_gtin VARCHAR2(1000);
5132 l_raise_event BOOLEAN;
5133 l_xref_event_name CONSTANT VARCHAR2(100) := 'oracle.apps.ego.item.postXrefChange';
5134 l_msg_data VARCHAR2(4000);
5135 l_return_status VARCHAR2(10);
5136 l_org_id NUMBER;
5137 l_transaction_id NUMBER;
5138 l_priv VARCHAR2(10);
5139 l_party_name VARCHAR2(1000); -- Bug: 5355759
5140 BEGIN
5141 Debug_Conc_Log('Starting Process_Gtin_Intf_Rows for batch_id='||TO_CHAR(p_data_set_id));
5142 l_raise_event := FALSE;
5143 l_party_name := Get_Current_Party_Name; -- Bug: 5355759
5144 FOR i IN c_intf_rows LOOP
5145 Debug_Conc_Log('Processing for Item, Org='||TO_CHAR(i.INVENTORY_ITEM_ID)||', '||TO_CHAR(i.ORGANIZATION_ID));
5146 -- checking the edit cross reference privilege for creating GTIN xref.
5147 --l_priv := EGO_ITEM_AML_PUB.Check_No_AML_Priv(1.0, i.INVENTORY_ITEM_ID, i.ORGANIZATION_ID, 'EGO_EDIT_ITEM_XREFS', NULL, NULL);
5148 l_priv := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_ITEM_XREFS', 'EGO_ITEM', i.INVENTORY_ITEM_ID, i.ORGANIZATION_ID, NULL, NULL, NULL, l_party_name);
5149
5150 IF NVL(l_priv, 'F') <> 'T' THEN
5151 Debug_Conc_Log('No Edit Cross Reference Privilege on item');
5152 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
5153 FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
5154 FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
5155 l_msg_text := FND_MESSAGE.GET;
5156
5157 dumm_status := INVPUOPI.mtl_log_interface_err(
5158 i.ORGANIZATION_ID
5159 ,l_user_id
5160 ,l_login_id
5161 ,l_prog_appid
5162 ,l_prog_id
5163 ,l_request_id
5164 ,i.TRANSACTION_ID
5165 ,l_msg_text
5166 ,'GLOBAL_TRADE_ITEM_NUMBER'
5167 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5168 ,'INV_IOI_ERR_NO_ED_XREF_PRIV_01'--bug 11894684, replace INV_IOI_ERR
5169 ,l_err_text);
5170 ELSE
5171 Debug_Conc_Log('Edit Cross Reference Privilege is present on item');
5172 -- validating the GTIN
5173 IF i.EXISTING_GTIN IS NULL THEN
5174 Debug_Conc_Log('No Existing GTIN found');
5175 Debug_Conc_Log('Validating GTIN-'||i.GLOBAL_TRADE_ITEM_NUMBER);
5176 --1. validating GTIN is number or not
5177 l_error := FALSE;
5178 l_msg_text := NULL;
5179 BEGIN
5180 l_gtin := TO_NUMBER(i.GLOBAL_TRADE_ITEM_NUMBER);
5181 EXCEPTION WHEN VALUE_ERROR THEN
5182 Debug_Conc_Log('Validation Failed - GTIN is not a Number');
5183 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_NOT_NUMBER');
5184 dumm_status := INVPUOPI.mtl_log_interface_err(
5185 i.ORGANIZATION_ID
5186 ,l_user_id
5187 ,l_login_id
5188 ,l_prog_appid
5189 ,l_prog_id
5190 ,l_request_id
5191 ,i.TRANSACTION_ID
5192 ,l_msg_text
5193 ,'GLOBAL_TRADE_ITEM_NUMBER'
5194 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5195 ,'INV_IOI_ERR_GTIN_NOT_NUMBER' --bug 11894684, replace INV_IOI_ERR
5196 ,l_err_text);
5197 l_error := TRUE;
5198 END;
5199
5200 --2. validating the length of GTIN to be 14
5201 IF LENGTH(i.GLOBAL_TRADE_ITEM_NUMBER) <> 14 THEN
5202 Debug_Conc_Log('Validation Failed - Length is not 14 chars');
5203 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_LENGTH_NOT_CORRECT');
5204 dumm_status := INVPUOPI.mtl_log_interface_err(
5205 i.ORGANIZATION_ID
5206 ,l_user_id
5207 ,l_login_id
5208 ,l_prog_appid
5209 ,l_prog_id
5210 ,l_request_id
5211 ,i.TRANSACTION_ID
5212 ,l_msg_text
5213 ,'GLOBAL_TRADE_ITEM_NUMBER'
5214 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5215 ,'INV_IOI_ERR_GTIN_LTH_N_CRRCT'--bug 11894684, replace INV_IOI_ERR
5216 ,l_err_text);
5217 l_error := TRUE;
5218 END IF; --end IF LENGTH(i.GLOBAL_TRADE_ITEM_NUMBER
5219
5220 --3. validating the check digit of GTIN to be valid
5221 IF (NOT l_error) AND EGO_GTIN_ATTRS_PVT.Is_Check_Digit_Invalid(i.GLOBAL_TRADE_ITEM_NUMBER) THEN
5222 Debug_Conc_Log('Validation Failed - Check digit is not valid');
5223 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_CHECKDIGIT_INVALID');
5224 dumm_status := INVPUOPI.mtl_log_interface_err(
5225 i.ORGANIZATION_ID
5226 ,l_user_id
5227 ,l_login_id
5228 ,l_prog_appid
5229 ,l_prog_id
5230 ,l_request_id
5231 ,i.TRANSACTION_ID
5232 ,l_msg_text
5233 ,'GLOBAL_TRADE_ITEM_NUMBER'
5234 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5235 ,'INV_IOI_ERR_CKDIGIT_INVALID'--bug 11894684, replace INV_IOI_ERR
5236 ,l_err_text);
5237 l_error := TRUE;
5238 END IF; --end IF (NOT l_error) AND
5239
5240 --4. gtin can not contain more than six leading zeros
5241 IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 7) = '0000000' THEN
5242 Debug_Conc_Log('Validation Failed - gtin can not contain more than six leading zeros');
5243 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_LEADING_ZERO_INVALID');
5244 dumm_status := INVPUOPI.mtl_log_interface_err(
5245 i.ORGANIZATION_ID
5246 ,l_user_id
5247 ,l_login_id
5248 ,l_prog_appid
5249 ,l_prog_id
5250 ,l_request_id
5251 ,i.TRANSACTION_ID
5252 ,l_msg_text
5253 ,'GLOBAL_TRADE_ITEM_NUMBER'
5254 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5255 ,'INV_IOI_ERR_GTIN_LDING_0_IVLD'--bug 11894684, replace INV_IOI_ERR
5256 ,l_err_text);
5257 l_error := TRUE;
5258 END IF;
5259
5260 -- 5. The third digit from the left contained in a GTIN must be 0,1,3,6,7,8,9 when the second digit from the left is 0
5261 IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 1) = '0' AND
5262 SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 3, 1) NOT IN ('0', '1', '3', '6', '7', '8', '9') THEN
5263 Debug_Conc_Log('Validation Failed - The third digit from the left contained in a GTIN must be 0,1,3,6,7,8,9 when the second digit from the left is 0 ');
5264 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_THIRD_DIGIT_INVALID');
5265 dumm_status := INVPUOPI.mtl_log_interface_err(
5266 i.ORGANIZATION_ID
5267 ,l_user_id
5268 ,l_login_id
5269 ,l_prog_appid
5270 ,l_prog_id
5271 ,l_request_id
5272 ,i.TRANSACTION_ID
5273 ,l_msg_text
5274 ,'GLOBAL_TRADE_ITEM_NUMBER'
5275 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5276 ,'INV_IOI_ERR_GTIN_3RD_D_IVLD'--bug 11894684, replace INV_IOI_ERR
5277 ,l_err_text);
5278 l_error := TRUE;
5279 END IF;
5280
5281 -- 6. If a GTIN in a RCI message has six leading zeros, digits 7-9 must be between 301-968
5282 IF (NOT l_error) AND SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 6) = '000000' AND
5283 TO_NUMBER(SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 7, 3)) NOT BETWEEN 301 AND 968 THEN
5284 Debug_Conc_Log('Validation Failed - If a GTIN in a RCI message has six leading zeros, digits 7-9 must be between 301-968');
5285 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_7TO9DIGIT_INVALID');
5286 dumm_status := INVPUOPI.mtl_log_interface_err(
5287 i.ORGANIZATION_ID
5288 ,l_user_id
5289 ,l_login_id
5290 ,l_prog_appid
5291 ,l_prog_id
5292 ,l_request_id
5293 ,i.TRANSACTION_ID
5294 ,l_msg_text
5295 ,'GLOBAL_TRADE_ITEM_NUMBER'
5296 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5297 ,'INV_IOI_ERR_GTIN_7TO9D_IVLD'--bug 11894684, replace INV_IOI_ERR
5298 ,l_err_text);
5299 l_error := TRUE;
5300 END IF;
5301
5302 -- 7. GTINs submitted in RCI messages cannot contain values 0980-0989 or 099 in the first 4 digits
5303 IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 3) IN ('098', '099') THEN
5304 Debug_Conc_Log('Validation Failed - GTINs submitted in RCI messages cannot contain values 0980-0989 or 099 in the first 4 digits');
5305 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_0TO4_DIGIT_INVALID');
5306 dumm_status := INVPUOPI.mtl_log_interface_err(
5307 i.ORGANIZATION_ID
5308 ,l_user_id
5309 ,l_login_id
5310 ,l_prog_appid
5311 ,l_prog_id
5312 ,l_request_id
5313 ,i.TRANSACTION_ID
5314 ,l_msg_text
5315 ,'GLOBAL_TRADE_ITEM_NUMBER'
5316 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5317 ,'INV_IOI_ERR_GTIN_0TO4D_IVLD'--bug 11894684, replace INV_IOI_ERR
5318 ,l_err_text);
5319 l_error := TRUE;
5320 END IF;
5321
5322 -- 8. GTINs submitted in RCI messages cannot contain values 02, 04, 05, and 10-29 in the second and third digits from the left
5323 IF (NOT l_error) AND (SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 2) IN ('02', '04', '05') OR
5324 TO_NUMBER(SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 2)) BETWEEN 10 AND 29) THEN
5325 Debug_Conc_Log('Validation Failed - GTINs submitted in RCI messages cannot contain values 02, 04, 05, and 10-29 in the second and third digits from the left');
5326 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_2TO3_DIGIT_INVALID');
5327 dumm_status := INVPUOPI.mtl_log_interface_err(
5328 i.ORGANIZATION_ID
5329 ,l_user_id
5330 ,l_login_id
5331 ,l_prog_appid
5332 ,l_prog_id
5333 ,l_request_id
5334 ,i.TRANSACTION_ID
5335 ,l_msg_text
5336 ,'GLOBAL_TRADE_ITEM_NUMBER'
5337 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5338 ,'INV_IOI_ERR_GTIN_2TO3_D_IVLD'--bug 11894684, replace INV_IOI_ERR
5339 ,l_err_text);
5340 l_error := TRUE;
5341 END IF;
5342
5343 -- checking for duplicate GTIN
5344 IF NOT l_error THEN
5345 BEGIN
5346 SELECT CONCATENATED_SEGMENTS INTO l_existing_gtin
5347 FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_CROSS_REFERENCES_B mcr, MTL_PARAMETERS mp
5348 WHERE msik.INVENTORY_ITEM_ID = mcr.INVENTORY_ITEM_ID
5349 AND msik.ORGANIZATION_ID = mp.ORGANIZATION_ID
5350 AND mp.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
5351 AND mcr.CROSS_REFERENCE_TYPE = 'GTIN'
5352 AND mcr.CROSS_REFERENCE = i.GLOBAL_TRADE_ITEM_NUMBER
5353 AND mcr.UOM_CODE = msik.PRIMARY_UOM_CODE
5354 AND ROWNUM = 1;
5355
5356 Debug_Conc_Log('Validation Failed - duplicate GTIN');
5357 FND_MESSAGE.Set_Name('EGO', 'EGO_GTIN_EXISTS_WITH_PACKITEM');
5358 FND_MESSAGE.Set_Token('GTIN', i.GLOBAL_TRADE_ITEM_NUMBER);
5359 FND_MESSAGE.Set_Token('PACK_ITEM', l_existing_gtin);
5360 FND_MESSAGE.Set_Token('UOM', i.PRIMARY_UOM_CODE);
5361 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET;
5362 dumm_status := INVPUOPI.mtl_log_interface_err(
5363 i.ORGANIZATION_ID
5364 ,l_user_id
5365 ,l_login_id
5366 ,l_prog_appid
5367 ,l_prog_id
5368 ,l_request_id
5369 ,i.TRANSACTION_ID
5370 ,l_msg_text
5371 ,'GLOBAL_TRADE_ITEM_NUMBER'
5372 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5373 ,'INV_IOI_ERR_GTIN_EXS_W_PKITM' --bug 11894684, replace INV_IOI_ERR
5374 ,l_err_text);
5375 l_error := TRUE;
5376 EXCEPTION WHEN NO_DATA_FOUND THEN
5377 NULL;
5378 END;
5379 END IF; -- checking for duplicate GTIN
5380 -- if no errors then creating a GTIN
5381 IF NOT l_error THEN
5382 Debug_Conc_Log('No Errors - Creating GTIN');
5383 MTL_CROSS_REFERENCES_PKG.INSERT_ROW(
5384 P_SOURCE_SYSTEM_ID => NULL,
5385 P_START_DATE_ACTIVE => NULL,
5386 P_END_DATE_ACTIVE => NULL,
5387 P_OBJECT_VERSION_NUMBER => NULL,
5388 P_UOM_CODE => i.PRIMARY_UOM_CODE,
5389 P_REVISION_ID => NULL,
5390 P_EPC_GTIN_SERIAL => NULL,
5391 P_INVENTORY_ITEM_ID => i.INVENTORY_ITEM_ID,
5392 P_ORGANIZATION_ID => NULL,
5393 P_CROSS_REFERENCE_TYPE => 'GTIN',
5394 P_CROSS_REFERENCE => i.GLOBAL_TRADE_ITEM_NUMBER,
5395 P_ORG_INDEPENDENT_FLAG => 'Y',
5396 P_REQUEST_ID => l_request_id,
5397 P_ATTRIBUTE1 => NULL,
5398 P_ATTRIBUTE2 => NULL,
5399 P_ATTRIBUTE3 => NULL,
5400 P_ATTRIBUTE4 => NULL,
5401 P_ATTRIBUTE5 => NULL,
5402 P_ATTRIBUTE6 => NULL,
5403 P_ATTRIBUTE7 => NULL,
5404 P_ATTRIBUTE8 => NULL,
5405 P_ATTRIBUTE9 => NULL,
5406 P_ATTRIBUTE10 => NULL,
5407 P_ATTRIBUTE11 => NULL,
5408 P_ATTRIBUTE12 => NULL,
5409 P_ATTRIBUTE13 => NULL,
5410 P_ATTRIBUTE14 => NULL,
5411 P_ATTRIBUTE15 => NULL,
5412 P_ATTRIBUTE_CATEGORY => NULL,
5413 P_DESCRIPTION => i.GTIN_DESCRIPTION,
5414 P_CREATION_DATE => SYSDATE,
5415 P_CREATED_BY => l_user_id,
5416 P_LAST_UPDATE_DATE => SYSDATE,
5417 P_LAST_UPDATED_BY => l_user_id,
5418 P_LAST_UPDATE_LOGIN => l_login_id,
5419 P_PROGRAM_APPLICATION_ID => l_prog_appid,
5420 P_PROGRAM_ID => l_prog_id,
5421 P_PROGRAM_UPDATE_DATE => SYSDATE,
5422 X_CROSS_REFERENCE_ID => l_xref_id);
5423
5424 Debug_Conc_Log('Done Creating GTIN');
5425 l_raise_event := TRUE;
5426 l_transaction_id := i.TRANSACTION_ID;
5427 l_org_id := i.ORGANIZATION_ID;
5428 END IF; -- end IF NOT l_error
5429 ELSIF i.EXISTING_GTIN IS NOT NULL THEN
5430 IF i.GTIN_DESCRIPTION IS NOT NULL
5431 AND ( ( i.EXISTING_GTIN_DESC <> i.GTIN_DESCRIPTION)
5432 OR (i.EXISTING_GTIN_DESC IS NULL AND i.GTIN_DESCRIPTION IS NOT NULL)
5433 )
5434 THEN
5435 Debug_Conc_Log('Existing GTIN found. Description needs to be updated.');
5436 UPDATE MTL_CROSS_REFERENCES_TL
5437 SET DESCRIPTION = i.GTIN_DESCRIPTION,
5438 LAST_UPDATE_DATE = SYSDATE,
5439 LAST_UPDATED_BY = l_user_id,
5440 LAST_UPDATE_LOGIN = l_login_id,
5441 SOURCE_LANG = USERENV('LANG')
5442 WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5443 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5444
5445 Debug_Conc_Log('Description updated for GTIN='||i.EXISTING_GTIN);
5446 l_raise_event := TRUE;
5447 l_transaction_id := i.TRANSACTION_ID;
5448 l_org_id := i.ORGANIZATION_ID;
5449 END IF; -- IF i.GTIN_DESCRIPTION IS NOT NULL
5450
5451 -- BUG 5549140 - Adding validation that existing GTIN can not be changed
5452 IF i.EXISTING_GTIN <> i.GLOBAL_TRADE_ITEM_NUMBER THEN
5453 Debug_Conc_Log('GTIN can not be updated');
5454 FND_MESSAGE.Set_Name('EGO', 'EGO_GTIN_NOT_UPDATEABLE');
5455 l_msg_text := FND_MESSAGE.GET;
5456 dumm_status := INVPUOPI.mtl_log_interface_err(
5457 i.ORGANIZATION_ID
5458 ,l_user_id
5459 ,l_login_id
5460 ,l_prog_appid
5461 ,l_prog_id
5462 ,l_request_id
5463 ,i.TRANSACTION_ID
5464 ,l_msg_text
5465 ,'GLOBAL_TRADE_ITEM_NUMBER'
5466 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5467 ,'INV_IOI_ERR_GTIN_NOT_UPDABLE'--bug 11894684, replace INV_IOI_ERR
5468 ,l_err_text);
5469 END IF; -- IF i.EXISTING_GTIN <> i.GLOBAL_TRADE_ITEM_NUMBER THEN
5470
5471 END IF; -- IF i.EXISTING_GTIN IS NULL THEN
5472 END IF; -- IF NVL(l_priv, 'Y') = 'Y' THEN
5473 END LOOP;
5474
5475 IF l_raise_event THEN
5476 Debug_Conc_Log('Raising business event');
5477 EGO_WF_WRAPPER_PVT.Raise_Item_Event(
5478 p_event_name => l_xref_event_name,
5479 p_request_id => l_request_id,
5480 x_msg_data => l_msg_data,
5481 x_return_status => l_return_status);
5482
5483 Debug_Conc_Log('Done Raising business event with status - '||l_return_status);
5484 Debug_Conc_Log('Done Raising business event with message - '||SUBSTR(l_msg_data, 3950));
5485 IF l_return_status <> 'S' THEN
5486 l_msg_text := SUBSTR('Error in raising business event for GTIN Cross References - '||l_msg_data, 4000);
5487 dumm_status := INVPUOPI.mtl_log_interface_err(
5488 l_org_id
5489 ,l_user_id
5490 ,l_login_id
5491 ,l_prog_appid
5492 ,l_prog_id
5493 ,l_request_id
5494 ,l_transaction_id
5495 ,l_msg_text
5496 ,'GLOBAL_TRADE_ITEM_NUMBER'
5497 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5498 ,'INV_IOI_ERR_RAISE_BE4_GTIN_CR'--bug 11894684, replace INV_IOI_ERR
5499 ,l_err_text);
5500 END IF;
5501 END IF;
5502
5503 COMMIT;
5504 RETCODE := '0';
5505 ERRBUF := NULL;
5506 Debug_Conc_Log('Done Process_Gtin_Intf_Rows with success');
5507 EXCEPTION WHEN OTHERS THEN
5508 Debug_Conc_Log('Done Process_Gtin_Intf_Rows with error - '||SQLERRM);
5509 RETCODE := '2';
5510 ERRBUF := 'Error in method EGO_IMPORT_PVT.Process_Gtin_Intf_Rows - '||SQLERRM;
5511 END Process_Gtin_Intf_Rows;
5512
5513 /*
5514 * Private method to process Source System item cross reference
5515 */
5516 FUNCTION Process_SSXref_Pvt(p_source_system_id IN NUMBER,
5517 p_source_system_reference IN VARCHAR2,
5518 p_source_system_reference_desc IN VARCHAR2,
5519 p_inventory_item_id IN NUMBER)
5520 RETURN BOOLEAN
5521 IS
5522 l_rowid ROWID;
5523 l_xref_id NUMBER;
5524 l_user_id NUMBER := FND_GLOBAL.USER_ID;
5525 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
5526 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
5527 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5528 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5529 l_raise_event BOOLEAN;
5530 l_msg_data VARCHAR2(4000);
5531 l_return_status VARCHAR2(10);
5532 l_msg_text VARCHAR2(4000);
5533 l_err_text VARCHAR2(4000);
5534 dumm_status NUMBER;
5535 l_item_id NUMBER;
5536 BEGIN
5537 Debug_Conc_Log('In Process_SSXref_Pvt begin');
5538 l_raise_event := FALSE;
5539 -- if a cross reference already exists for the source system item, then end dating it
5540 BEGIN
5541 SELECT ROWID, INVENTORY_ITEM_ID INTO l_rowid, l_item_id
5542 FROM MTL_CROSS_REFERENCES_B mcr
5543 WHERE mcr.SOURCE_SYSTEM_ID = p_source_system_id
5544 AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5545 AND mcr.CROSS_REFERENCE = p_source_system_reference
5546 AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5547
5548 Debug_Conc_Log('Existing Xref found l_item_id='||to_char(l_item_id));
5549 IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5550 Debug_Conc_Log('Updating the existing SS Xref, end dating');
5551 UPDATE MTL_CROSS_REFERENCES_B
5552 SET
5553 END_DATE_ACTIVE = SYSDATE,
5554 LAST_UPDATED_BY = l_user_id,
5555 LAST_UPDATE_DATE = SYSDATE,
5556 LAST_UPDATE_LOGIN = l_login_id,
5557 PROGRAM_APPLICATION_ID = l_prog_appid,
5558 PROGRAM_ID = l_prog_id,
5559 REQUEST_ID = l_request_id,
5560 PROGRAM_UPDATE_DATE = SYSDATE
5561 WHERE ROWID = l_rowid;
5562 Debug_Conc_Log('Done Updating the existing SS Xref, end dating');
5563 l_raise_event := TRUE;
5564 END IF; --IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5565 EXCEPTION WHEN NO_DATA_FOUND THEN
5566 Debug_Conc_Log('No Existing SS Xref Found');
5567 l_item_id := -1;
5568 NULL;
5569 END;
5570
5571 IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5572 -- calling MTL_CROSS_REFERENCES_B table handler to insert rows
5573 Debug_Conc_Log('Creating SS Xref');
5574 MTL_CROSS_REFERENCES_PKG.INSERT_ROW(
5575 P_SOURCE_SYSTEM_ID => p_source_system_id,
5576 P_START_DATE_ACTIVE => SYSDATE,
5577 P_END_DATE_ACTIVE => NULL,
5578 P_OBJECT_VERSION_NUMBER => NULL,
5579 P_UOM_CODE => NULL,
5580 P_REVISION_ID => NULL,
5581 P_EPC_GTIN_SERIAL => NULL,
5582 P_INVENTORY_ITEM_ID => p_inventory_item_id,
5583 P_ORGANIZATION_ID => NULL,
5584 P_CROSS_REFERENCE_TYPE => 'SS_ITEM_XREF',
5585 P_CROSS_REFERENCE => p_source_system_reference,
5586 P_ORG_INDEPENDENT_FLAG => 'Y',
5587 P_REQUEST_ID => l_request_id,
5588 P_ATTRIBUTE1 => NULL,
5589 P_ATTRIBUTE2 => NULL,
5590 P_ATTRIBUTE3 => NULL,
5591 P_ATTRIBUTE4 => NULL,
5592 P_ATTRIBUTE5 => NULL,
5593 P_ATTRIBUTE6 => NULL,
5594 P_ATTRIBUTE7 => NULL,
5595 P_ATTRIBUTE8 => NULL,
5596 P_ATTRIBUTE9 => NULL,
5597 P_ATTRIBUTE10 => NULL,
5598 P_ATTRIBUTE11 => NULL,
5599 P_ATTRIBUTE12 => NULL,
5600 P_ATTRIBUTE13 => NULL,
5601 P_ATTRIBUTE14 => NULL,
5602 P_ATTRIBUTE15 => NULL,
5603 P_ATTRIBUTE_CATEGORY => NULL,
5604 P_DESCRIPTION => p_source_system_reference_desc,
5605 P_CREATION_DATE => SYSDATE,
5606 P_CREATED_BY => l_user_id,
5607 P_LAST_UPDATE_DATE => SYSDATE,
5608 P_LAST_UPDATED_BY => l_user_id,
5609 P_LAST_UPDATE_LOGIN => l_login_id,
5610 P_PROGRAM_APPLICATION_ID => l_prog_appid,
5611 P_PROGRAM_ID => l_prog_id,
5612 P_PROGRAM_UPDATE_DATE => SYSDATE,
5613 X_CROSS_REFERENCE_ID => l_xref_id);
5614
5615 l_raise_event := TRUE;
5616 END IF; --IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5617 Debug_Conc_Log('Done Process_SSXref_Pvt');
5618 RETURN l_raise_event;
5619 END Process_SSXref_Pvt;
5620
5621 /*
5622 * This method Bulk Loads the Source system cross references
5623 */
5624 PROCEDURE Process_SSXref_Intf_Rows(ERRBUF OUT NOCOPY VARCHAR2,
5625 RETCODE OUT NOCOPY VARCHAR2,
5626 p_data_set_id IN NUMBER) IS
5627 CURSOR c_intf_rows IS
5628 SELECT
5629 SOURCE_SYSTEM_ID,
5630 SOURCE_SYSTEM_REFERENCE,
5631 SOURCE_SYSTEM_REFERENCE_DESC,
5632 INVENTORY_ITEM_ID,
5633 ORGANIZATION_ID,
5634 TRANSACTION_ID,
5635 TRANSACTION_TYPE
5636 FROM MTL_SYSTEM_ITEMS_INTERFACE msi
5637 WHERE msi.PROCESS_FLAG IN (5, 7)
5638 AND msi.SET_PROCESS_ID = p_data_set_id
5639 AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5640 AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5641 AND msi.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5642 AND NOT EXISTS (SELECT NULL
5643 FROM MTL_CROSS_REFERENCES_B mcr
5644 WHERE mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5645 AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5646 AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5647 AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5648 AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE));
5649
5650 -- Bug: 4752861
5651 CURSOR c_intf_existing_rows IS
5652 SELECT
5653 msi.SOURCE_SYSTEM_ID,
5654 msi.SOURCE_SYSTEM_REFERENCE,
5655 msi.SOURCE_SYSTEM_REFERENCE_DESC,
5656 msi.INVENTORY_ITEM_ID,
5657 msi.ORGANIZATION_ID,
5658 msi.TRANSACTION_ID,
5659 msi.TRANSACTION_TYPE,
5660 mcr.CROSS_REFERENCE_ID
5661 FROM MTL_SYSTEM_ITEMS_INTERFACE msi, MTL_CROSS_REFERENCES mcr
5662 WHERE msi.PROCESS_FLAG IN (5, 7)
5663 AND msi.SET_PROCESS_ID = p_data_set_id
5664 AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5665 AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5666 AND msi.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5667 AND mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5668 AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5669 AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5670 AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5671 AND msi.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL
5672 AND NVL(mcr.DESCRIPTION, msi.SOURCE_SYSTEM_REFERENCE_DESC||'##') <> msi.SOURCE_SYSTEM_REFERENCE_DESC
5673 AND UPPER(msi.TRANSACTION_TYPE) <> 'CREATE'
5674 AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5675
5676 -- Bug: 5262421 - Introducing 11 as new process_status. When user chooses to re-import and Import Only Cross References
5677 -- is true, then we move the status of MSII record to 11, so that it will not be picked up by any other IOI program
5678 -- running with option "Process All Batch". So while creating Xrefs, we will also pick up records with process_status = 11
5679 CURSOR c_unprcd_intf_rows IS
5680 SELECT
5681 SOURCE_SYSTEM_ID,
5682 SOURCE_SYSTEM_REFERENCE,
5683 SOURCE_SYSTEM_REFERENCE_DESC,
5684 INVENTORY_ITEM_ID,
5685 ITEM_NUMBER,
5686 ORGANIZATION_ID,
5687 TRANSACTION_ID,
5688 TRANSACTION_TYPE,
5689 ROWID AS ROW_ID
5690 FROM MTL_SYSTEM_ITEMS_INTERFACE msi
5691 WHERE msi.PROCESS_FLAG IN (0, 11)
5692 AND msi.SET_PROCESS_ID = p_data_set_id
5693 AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5694 AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5695 AND msi.CONFIRM_STATUS IN ('CM', 'CC')
5696 AND NOT EXISTS (SELECT NULL
5697 FROM MTL_CROSS_REFERENCES_B mcr
5698 WHERE mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5699 AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5700 AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5701 AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5702 AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE));
5703
5704 -- Bug: 4752861
5705 CURSOR c_unprcd_intf_existing_rows IS
5706 SELECT
5707 msi.SOURCE_SYSTEM_ID,
5708 msi.SOURCE_SYSTEM_REFERENCE,
5709 msi.SOURCE_SYSTEM_REFERENCE_DESC,
5710 msi.INVENTORY_ITEM_ID,
5711 msi.ITEM_NUMBER,
5712 msi.ORGANIZATION_ID,
5713 msi.TRANSACTION_ID,
5714 msi.TRANSACTION_TYPE,
5715 mcr.CROSS_REFERENCE_ID,
5716 msi.ROWID AS ROW_ID
5717 FROM MTL_SYSTEM_ITEMS_INTERFACE msi, MTL_CROSS_REFERENCES mcr
5718 WHERE msi.PROCESS_FLAG IN (0, 11)
5719 AND msi.SET_PROCESS_ID = p_data_set_id
5720 AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5721 AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5722 AND msi.CONFIRM_STATUS IN ('CM', 'CC')
5723 AND mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5724 AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5725 AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5726 AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5727 AND msi.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL
5728 AND NVL(mcr.DESCRIPTION, msi.SOURCE_SYSTEM_REFERENCE_DESC||'##') <> msi.SOURCE_SYSTEM_REFERENCE_DESC
5729 AND UPPER(msi.TRANSACTION_TYPE) <> 'CREATE'
5730 AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5731
5732 l_xref_event_name CONSTANT VARCHAR2(100) := 'oracle.apps.ego.item.postXrefChange';
5733 l_ss_id NUMBER;
5734 l_raise_event BOOLEAN;
5735 l_raise_bus_event BOOLEAN;
5736 l_user_id NUMBER := FND_GLOBAL.USER_ID;
5737 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
5738 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
5739 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5740 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5741 l_msg_data VARCHAR2(4000);
5742 l_err_text VARCHAR2(4000);
5743 l_return_status VARCHAR2(10);
5744 l_msg_text VARCHAR2(4000);
5745 dumm_status NUMBER;
5746 l_org_id NUMBER;
5747
5748 l_import_xref_only EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
5749 l_inventory_item_id MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
5750 l_transaction_id MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_ID%TYPE;
5751 BEGIN
5752 Debug_Conc_Log('Starting Process_SSXref_Intf_Rows for batch_id='||TO_CHAR(p_data_set_id));
5753 BEGIN
5754 SELECT b.SOURCE_SYSTEM_ID, NVL(opt.IMPORT_XREF_ONLY, 'N')
5755 INTO l_ss_id, l_import_xref_only
5756 FROM EGO_IMPORT_BATCHES_B b, EGO_IMPORT_OPTION_SETS opt
5757 WHERE b.BATCH_ID = p_data_set_id
5758 AND b.BATCH_ID = opt.BATCH_ID;
5759 EXCEPTION WHEN NO_DATA_FOUND THEN
5760 l_ss_id := get_pdh_source_system_id;
5761 l_import_xref_only := 'N';
5762 END;
5763
5764 IF l_ss_id = get_pdh_source_system_id THEN
5765 Debug_Conc_Log('Batch is a PDH batch, so returning');
5766 RETCODE := '0';
5767 ERRBUF := NULL;
5768 RETURN;
5769 END IF;
5770
5771 l_raise_bus_event := FALSE;
5772 IF l_import_xref_only = 'Y' THEN
5773 Debug_Conc_Log('Import Only Cross References is TRUE');
5774 Debug_Conc_Log('Updating the Source System Description');
5775 FOR i IN c_unprcd_intf_existing_rows LOOP
5776 Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5777 l_inventory_item_id := i.INVENTORY_ITEM_ID;
5778
5779 IF l_inventory_item_id IS NOT NULL THEN
5780 UPDATE MTL_CROSS_REFERENCES_TL
5781 SET DESCRIPTION = i.SOURCE_SYSTEM_REFERENCE_DESC,
5782 LAST_UPDATE_DATE = SYSDATE,
5783 LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
5784 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
5785 SOURCE_LANG = USERENV('LANG')
5786 WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5787 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5788
5789 l_raise_bus_event := TRUE;
5790 l_transaction_id := i.TRANSACTION_ID;
5791 l_org_id := i.ORGANIZATION_ID;
5792
5793 -- Bug: 5262421
5794 -- Updating item, user-defined attrs, gdsn attrs, AMLs to successful process status
5795 -- so that they appear correctly in the Imported tab
5796 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5797 SET PROCESS_FLAG = 7,
5798 TRANSACTION_TYPE = 'UPDATE',
5799 PROGRAM_APPLICATION_ID = l_prog_appid,
5800 PROGRAM_ID = l_prog_id,
5801 REQUEST_ID = l_request_id,
5802 PROGRAM_UPDATE_DATE = SYSDATE
5803 WHERE ROWID = i.ROW_ID;
5804
5805 UPDATE EGO_ITM_USR_ATTR_INTRFC
5806 SET PROCESS_STATUS = 4,
5807 PROGRAM_APPLICATION_ID = l_prog_appid,
5808 PROGRAM_ID = l_prog_id,
5809 REQUEST_ID = l_request_id,
5810 PROGRAM_UPDATE_DATE = SYSDATE
5811 WHERE DATA_SET_ID = p_data_set_id
5812 AND PROCESS_STATUS = 0
5813 AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5814 AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5815
5816 UPDATE EGO_AML_INTF
5817 SET PROCESS_FLAG = 7,
5818 PROGRAM_APPLICATION_ID = l_prog_appid,
5819 PROGRAM_ID = l_prog_id,
5820 REQUEST_ID = l_request_id,
5821 PROGRAM_UPDATE_DATE = SYSDATE
5822 WHERE DATA_SET_ID = p_data_set_id
5823 AND PROCESS_FLAG = 0
5824 AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5825 AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5826 ELSE
5827 Debug_Conc_Log('Inventory Item ID is NULL');
5828 END IF; --IF l_inventory_item_id IS NOT NULL THEN
5829 END LOOP; --FOR i IN c_unprcd_intf_existing_rows LOOP
5830 Debug_Conc_Log('Done Updating the Source System Description');
5831
5832 Debug_Conc_Log('Processing Source System Cross references that does not exist in PDH');
5833 FOR i IN c_unprcd_intf_rows LOOP
5834 Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5835 IF i.INVENTORY_ITEM_ID IS NULL THEN
5836 BEGIN
5837 SELECT INVENTORY_ITEM_ID INTO l_inventory_item_id
5838 FROM MTL_SYSTEM_ITEMS_B_KFV
5839 WHERE CONCATENATED_SEGMENTS = i.ITEM_NUMBER
5840 AND ORGANIZATION_ID = i.ORGANIZATION_ID;
5841 EXCEPTION WHEN NO_DATA_FOUND THEN
5842 Debug_Conc_Log('Inventory Item Id is NULL and no Matching Item found for Item Number-'||i.ITEM_NUMBER);
5843 l_inventory_item_id := NULL;
5844 END;
5845 ELSE
5846 l_inventory_item_id := i.INVENTORY_ITEM_ID;
5847 END IF; --IF i.INVENTORY_ITEM_ID IS NULL THEN
5848
5849 IF l_inventory_item_id IS NOT NULL THEN
5850 l_raise_event := Process_SSXref_Pvt(
5851 p_source_system_id => i.SOURCE_SYSTEM_ID,
5852 p_source_system_reference => i.SOURCE_SYSTEM_REFERENCE,
5853 p_source_system_reference_desc => i.SOURCE_SYSTEM_REFERENCE_DESC,
5854 p_inventory_item_id => l_inventory_item_id);
5855 IF l_raise_event THEN
5856 l_raise_bus_event := TRUE;
5857 -- Bug: 5262421
5858 -- Updating item, user-defined attrs, gdsn attrs, AMLs to successful process status
5859 -- so that they appear correctly in the Imported tab
5860 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5861 SET PROCESS_FLAG = 7,
5862 TRANSACTION_TYPE = 'UPDATE',
5863 PROGRAM_APPLICATION_ID = l_prog_appid,
5864 PROGRAM_ID = l_prog_id,
5865 REQUEST_ID = l_request_id,
5866 PROGRAM_UPDATE_DATE = SYSDATE
5867 WHERE ROWID = i.ROW_ID;
5868
5869 UPDATE EGO_ITM_USR_ATTR_INTRFC
5870 SET PROCESS_STATUS = 4,
5871 PROGRAM_APPLICATION_ID = l_prog_appid,
5872 PROGRAM_ID = l_prog_id,
5873 REQUEST_ID = l_request_id,
5874 PROGRAM_UPDATE_DATE = SYSDATE
5875 WHERE DATA_SET_ID = p_data_set_id
5876 AND PROCESS_STATUS = 0
5877 AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5878 AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5879
5880 UPDATE EGO_AML_INTF
5881 SET PROCESS_FLAG = 7,
5882 PROGRAM_APPLICATION_ID = l_prog_appid,
5883 PROGRAM_ID = l_prog_id,
5884 REQUEST_ID = l_request_id,
5885 PROGRAM_UPDATE_DATE = SYSDATE
5886 WHERE DATA_SET_ID = p_data_set_id
5887 AND PROCESS_FLAG = 0
5888 AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5889 AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5890 END IF; --IF l_raise_event THEN
5891 l_transaction_id := i.TRANSACTION_ID;
5892 l_org_id := i.ORGANIZATION_ID;
5893 ELSE
5894 Debug_Conc_Log('Inventory Item ID is NULL, so not calling Process_SSXref_Pvt');
5895 END IF; --IF l_inventory_item_id IS NOT NULL THEN
5896 END LOOP;
5897 ELSE --IF l_import_xref_only = 'Y' THEN
5898 Debug_Conc_Log('Import Only Cross References is FALSE');
5899 Debug_Conc_Log('Updating the Source System Description');
5900 FOR i IN c_intf_existing_rows LOOP
5901 Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5902 l_inventory_item_id := i.INVENTORY_ITEM_ID;
5903
5904 IF l_inventory_item_id IS NOT NULL THEN
5905 UPDATE MTL_CROSS_REFERENCES_TL
5906 SET DESCRIPTION = i.SOURCE_SYSTEM_REFERENCE_DESC,
5907 LAST_UPDATE_DATE = SYSDATE,
5908 LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
5909 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
5910 SOURCE_LANG = USERENV('LANG')
5911 WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5912 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5913
5914 l_raise_bus_event := TRUE;
5915 l_transaction_id := i.TRANSACTION_ID;
5916 l_org_id := i.ORGANIZATION_ID;
5917 ELSE
5918 Debug_Conc_Log('Inventory Item ID is NULL');
5919 END IF; --IF l_inventory_item_id IS NOT NULL THEN
5920 END LOOP; --FOR i IN c_intf_existing_rows LOOP
5921 Debug_Conc_Log('Done Updating the Source System Description');
5922
5923 Debug_Conc_Log('Processing Source System Cross references that does not exist in PDH');
5924 FOR i IN c_intf_rows LOOP
5925 Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5926 l_raise_event := Process_SSXref_Pvt(
5927 p_source_system_id => i.SOURCE_SYSTEM_ID,
5928 p_source_system_reference => i.SOURCE_SYSTEM_REFERENCE,
5929 p_source_system_reference_desc => i.SOURCE_SYSTEM_REFERENCE_DESC,
5930 p_inventory_item_id => i.INVENTORY_ITEM_ID);
5931 IF l_raise_event THEN
5932 l_raise_bus_event := TRUE;
5933 END IF; --IF l_raise_event THEN
5934 l_transaction_id := i.TRANSACTION_ID;
5935 l_org_id := i.ORGANIZATION_ID;
5936 END LOOP;
5937 END IF; --IF l_import_xref_only = 'Y' THEN
5938
5939 IF l_raise_bus_event THEN
5940 Debug_Conc_Log('Raising business event');
5941 EGO_WF_WRAPPER_PVT.Raise_Item_Event(
5942 p_event_name => l_xref_event_name,
5943 p_request_id => l_request_id,
5944 x_msg_data => l_msg_data,
5945 x_return_status => l_return_status);
5946
5947 Debug_Conc_Log('Done Raising business event with status - '||l_return_status);
5948 Debug_Conc_Log('Done Raising business event with message - '||SUBSTR(l_msg_data, 3950));
5949 IF l_return_status <> 'S' THEN
5950 l_msg_text := SUBSTR('Error in raising business event for Source System Item Cross References - '||l_msg_data, 4000);
5951 dumm_status := INVPUOPI.mtl_log_interface_err(
5952 l_org_id
5953 ,l_user_id
5954 ,l_login_id
5955 ,l_prog_appid
5956 ,l_prog_id
5957 ,l_request_id
5958 ,l_transaction_id
5959 ,l_msg_text
5960 ,'SOURCE_SYSTEM_REFERENCE'
5961 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5962 ,'INV_IOI_ERR_RAISE_BE4_SSICR'--bug 11894684, replace INV_IOI_ERR
5963 ,l_err_text);
5964 END IF; --IF l_return_status <> 'S' THEN
5965 END IF; --IF l_raise_event THEN
5966
5967 --COMMIT;
5968 RETCODE := '0';
5969 ERRBUF := NULL;
5970 Debug_Conc_Log('Done Process_SSXref_Intf_Rows with success');
5971 EXCEPTION WHEN OTHERS THEN
5972 RETCODE := '2';
5973 ERRBUF := 'Error in method EGO_IMPORT_PVT.Process_SSXref_Intf_Rows - '||SQLERRM;
5974 Debug_Conc_Log('Done Process_SSXref_Intf_Rows with error - '||SQLERRM);
5975 END Process_SSXref_Intf_Rows;
5976
5977 /*
5978 * This method sets the confirm_status for an unprocessed row (process_flag = 0) in the master org
5979 * for a source system item identified by p_source_system_id and p_source_system_reference.
5980 * p_status can have the following values:
5981 * G_CONF_XREF -- expecting p_inventory_item_id to be passed
5982 * G_CONF_MATCH -- expecting p_inventory_item_id to be passed
5983 * G_CONF_NEW -- expecting no p_inventory_item_id to be passed
5984 * G_UNCONF_NONE_MATCH -- expecting no p_inventory_item_id to be passed
5985 * G_UNCONF_SIGL_MATCH -- expecting p_inventory_item_id to be passed
5986 * G_UNCONF_MULT_MATCH -- p_inventory_item_id is optional
5987 */
5988 PROCEDURE Set_Confirm_Status(p_data_set_id IN NUMBER,
5989 p_source_system_id IN VARCHAR2,
5990 p_source_system_reference IN VARCHAR2,
5991 p_status IN VARCHAR2,
5992 p_inventory_item_id IN NUMBER DEFAULT NULL,
5993 p_organization_id IN NUMBER DEFAULT NULL)
5994 IS
5995 l_org_id MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
5996 l_org_code MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
5997 unexpected_parameters EXCEPTION;
5998 BEGIN
5999 -- Check that the parameters satisfy the assumptions: if they don't, raise error
6000
6001 -- Status should be one of the constants
6002 IF p_status NOT IN ( G_CONF_XREF, G_CONF_MATCH, G_CONF_NEW
6003 , G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH )
6004 THEN
6005 RAISE unexpected_parameters;
6006 END IF;
6007
6008 -- Item id must be passed for cross-referenced, confirmed matches, and unconfirmed single matches
6009 IF p_inventory_item_id IS NULL AND p_status IN ( G_CONF_XREF, G_CONF_MATCH, G_UNCONF_SIGL_MATCH )
6010 THEN
6011 RAISE unexpected_parameters;
6012 END IF;
6013
6014 -- Item id cannot be passed for confirmed new items, and no-match items
6015 IF p_inventory_item_id IS NOT NULL AND p_status IN ( G_CONF_NEW, G_UNCONF_NONE_MATCH )
6016 THEN
6017 RAISE unexpected_parameters;
6018 END IF;
6019
6020 SELECT
6021 MP.ORGANIZATION_ID,
6022 MP.ORGANIZATION_CODE
6023 INTO l_org_id, l_org_code
6024 FROM MTL_PARAMETERS MP,
6025 EGO_IMPORT_BATCHES_B BA
6026 WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID AND
6027 BA.BATCH_ID = p_data_set_id;
6028
6029 -- Set the confirm status and item number based on the parameters
6030 -- Rows that already have a "fake" confirm_status are kept "fake"
6031 /* Bug 8621347. Do not modify ITEM_NUMBER if p_status is G_UNCONF_NONE_MATCH.
6032 If p_status is G_CONF_NEW, update ITEM_NUMBER with SOURCE_SYSTEM_REFERENCE, if ITEM_NUMBER is not provided, otherwise
6033 retain ITEM_NUMBER.
6034 If p_status is G_CONF_NEW, update DESCRIPTION with SOURCE_SYSTEM_REFERENCE_DES, if DESCRIPTION is not provided, otherwise
6035 retain DESCRIPTION.
6036 */
6037 /* start bug 16309495
6038 In below query Item_number is fetched from MTL_SYSTEM_ITEMS_KFV based on p_inventory_item_id and p_organization_id
6039 and updates MTL_SYSTEM_ITEMS_INTERFACE.
6040 This will fire only for Single Match case.
6041 As we are populating INVENTORY_ITEM_ID,ORGANIZATION_ID
6042 There is no harm in removing ITEM_NUMBER.
6043 We can fetch this value later if need based on invId and OrgId.
6044 Hence commenting the inner query and replaced it with Null value.
6045 end bug 16309495*/
6046 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
6047 SET PROCESS_FLAG = 0,
6048 ORGANIZATION_ID = l_org_id,
6049 ORGANIZATION_CODE = l_org_code,
6050 INVENTORY_ITEM_ID = p_inventory_item_id,
6051 ITEM_NUMBER = Decode(p_status,
6052 G_CONF_NEW,Decode(ITEM_NUMBER,NULL,SOURCE_SYSTEM_REFERENCE,ITEM_NUMBER),
6053 G_UNCONF_NONE_MATCH,ITEM_NUMBER,NULL
6054 ),
6055 DESCRIPTION = Decode(p_status,G_CONF_NEW,Decode(DESCRIPTION,NULL,SOURCE_SYSTEM_REFERENCE_DESC,DESCRIPTION),DESCRIPTION),
6056 CONFIRM_STATUS =
6057 CASE
6058 WHEN CONFIRM_STATUS IN ( G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE, G_FAKE_CONF_STATUS_FLAG
6059 , G_UNCONF_NO_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE )
6060 THEN ( CASE p_status
6061 WHEN G_CONF_XREF THEN G_CONF_XREF_FAKE
6062 WHEN G_CONF_MATCH THEN G_CONF_MATCH_FAKE
6063 WHEN G_UNCONF_SIGL_MATCH THEN G_UNCONF_SINGLE_MATCH_FAKE
6064 WHEN G_UNCONF_MULT_MATCH THEN G_UNCONF_MULTI_MATCH_FAKE
6065 WHEN G_UNCONF_NONE_MATCH THEN G_UNCONF_NO_MATCH_FAKE
6066 ELSE p_status
6067 END
6068 )
6069 ELSE p_status
6070 END
6071 WHERE
6072 SET_PROCESS_ID = p_data_set_id AND
6073 SOURCE_SYSTEM_ID = p_source_system_id AND
6074 SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
6075 (PROCESS_FLAG = 0 OR PROCESS_FLAG IS NULL) AND
6076 ( (ORGANIZATION_ID IS NULL AND ORGANIZATION_CODE IS NULL) OR
6077 ORGANIZATION_ID = l_org_id OR
6078 (ORGANIZATION_ID IS NULL AND ORGANIZATION_CODE = l_org_code)
6079 );
6080 END Set_Confirm_Status;
6081
6082 /*
6083 * this function checks if the user has to provide revision information
6084 * based on the data and revision import policy
6085 */
6086 FUNCTION IS_NEW_REVISION_INFO_NEEDED
6087 (
6088 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
6089 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
6090 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
6091 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
6092 , p_organization_code IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_CODE%TYPE
6093 , p_instance_rev_policy IN EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE
6094 )
6095 RETURN BOOLEAN IS
6096 l_temp VARCHAR2(1);
6097 BEGIN
6098 IF p_instance_rev_policy IN ('S', 'L') THEN
6099 RETURN false;
6100 END IF;
6101
6102 SELECT 'x' INTO l_temp
6103 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
6104 WHERE SET_PROCESS_ID = p_batch_id AND
6105 PROCESS_FLAG = 0 AND
6106 SOURCE_SYSTEM_ID = p_source_system_id AND
6107 SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
6108 (ORGANIZATION_ID = p_organization_id OR ORGANIZATION_CODE = p_organization_code) AND
6109 REVISION IS NOT NULL AND
6110 Upper(REVISION) NOT IN ( SELECT B.REVISION FROM MTL_ITEM_REVISIONS_B B, MTL_SYSTEM_ITEMS_INTERFACE MSII
6111 WHERE MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
6112 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
6113 AND (MSII.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
6114 OR MSII.ORGANIZATION_CODE = MIRI.ORGANIZATION_CODE)
6115 AND MSII.SET_PROCESS_ID = MIRI.SET_PROCESS_ID
6116 AND MSII.PROCESS_FLAG = 0
6117 AND B.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
6118 ) AND
6119 EFFECTIVITY_DATE IS NOT NULL AND
6120 UPPER(TRANSACTION_TYPE) = 'CREATE' AND
6121 ROWNUM < 2;
6122 RETURN false;
6123 EXCEPTION
6124 WHEN NO_DATA_FOUND THEN
6125 RETURN true;
6126 END IS_NEW_REVISION_INFO_NEEDED;
6127
6128 -----------------------------------------------------------------------------------------
6129 --R12C : This Function returns varchar2 value to specify if the batch is
6130 -- ready for Import.
6131 FUNCTION Get_Import_Ready_Status ( p_data_set_id IN NUMBER,
6132 p_source_system_id IN VARCHAR2,
6133 p_source_system_reference IN VARCHAR2,
6134 p_bundle_id IN NUMBER
6135 )
6136 RETURN VARCHAR2 IS
6137 l_is_batch_GDSN_enabled VARCHAR2(1);
6138 l_confirm_status VARCHAR2(50);
6139
6140 CURSOR item_group_cr IS
6141 SELECT MSII.SOURCE_SYSTEM_ID,
6142 MSII.SOURCE_SYSTEM_REFERENCE,
6143 MSII.SET_PROCESS_ID,
6144 MSII.BUNDLE_ID
6145 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
6146 WHERE MSII.PROCESS_FLAG = 0
6147 AND MSII.SET_PROCESS_ID = p_data_set_id
6148 AND MSII.BUNDLE_ID = p_bundle_id;
6149
6150 BEGIN
6151 -- See if the batch is GDSN Enabled
6152 SELECT NVL(ENABLED_FOR_DATA_POOL, 'N') INTO l_is_batch_GDSN_enabled
6153 FROM EGO_IMPORT_OPTION_SETS
6154 WHERE BATCH_ID = p_data_set_id;
6155
6156 IF l_is_batch_GDSN_enabled = 'Y' AND p_bundle_id IS NOT NULL THEN
6157 FOR rec in item_group_cr LOOP
6158 l_confirm_status := Get_Confirm_Status( rec.SET_PROCESS_ID ,
6159 rec.SOURCE_SYSTEM_ID ,
6160 rec.SOURCE_SYSTEM_REFERENCE,
6161 rec.bundle_id
6162 );
6163 IF l_confirm_status NOT IN ( 'CNR', 'CCR', 'CMR', 'CFCR', 'CFMR' ) THEN
6164 RETURN 'NotImportReady';
6165 END IF;
6166 END LOOP;
6167 RETURN 'ImportReady';
6168 ELSE
6169 l_confirm_status := Get_Confirm_Status( p_data_set_id ,
6170 p_source_system_id ,
6171 p_source_system_reference,
6172 p_bundle_id
6173 );
6174 IF l_confirm_status IN ( 'CNR', 'CCR', 'CMR', 'CFCR', 'CFMR' ) THEN
6175 RETURN 'ImportReady';
6176 ELSE
6177 RETURN 'NotImportReady';
6178 END IF;
6179 END IF;
6180 END Get_Import_Ready_Status;
6181 -----------------------------------------------------------------------------------------
6182
6183 /*
6184 * This method gets the confirm status plus the extra letter to indicate
6185 * whether an item is ready to be passed on to IOI
6186 */
6187 FUNCTION Get_Confirm_Status( p_data_set_id IN NUMBER,
6188 p_source_system_id IN VARCHAR2,
6189 p_source_system_reference IN VARCHAR2,
6190 p_bundle_id IN NUMBER
6191 )
6192 RETURN VARCHAR2 IS
6193 l_pdh_item_number MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
6194 l_pdh_description MTL_SYSTEM_ITEMS_INTERFACE.DESCRIPTION%TYPE;
6195 l_pdh_item_catalog_group_id MTL_SYSTEM_ITEMS_INTERFACE.ITEM_CATALOG_GROUP_ID%TYPE;
6196 l_confirm_status MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE;
6197 l_item_num_gen MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
6198 l_item_desc_gen MTL_ITEM_CATALOG_GROUPS_B.ITEM_DESC_GEN_METHOD%TYPE;
6199 l_organization_id MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
6200 l_organization_code MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
6201 l_batch_rev_policy EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE;
6202 l_instance_rev_policy MTL_SYSTEM_ITEMS_INTERFACE.REVISION_IMPORT_POLICY%TYPE;
6203 l_style_item_flag MTL_SYSTEM_ITEMS_INTERFACE.STYLE_ITEM_FLAG%TYPE;
6204 BEGIN
6205 SELECT
6206 MP.ORGANIZATION_ID,
6207 MP.ORGANIZATION_CODE,
6208 NVL(OPT.REVISION_IMPORT_POLICY, 'L')
6209 INTO l_organization_id, l_organization_code, l_batch_rev_policy
6210 FROM MTL_PARAMETERS MP,
6211 EGO_IMPORT_BATCHES_B ba,
6212 EGO_IMPORT_OPTION_SETS OPT
6213 WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID AND
6214 BA.BATCH_ID = OPT.BATCH_ID AND
6215 BA.BATCH_ID = p_data_set_id;
6216
6217 SELECT ITEM_NUMBER,
6218 NVL(DESCRIPTION,
6219 ( SELECT ATTRIBUTE_VALUE
6220 FROM MTL_ITEM_TEMPLATES_VL TEMP, MTL_ITEM_TEMPL_ATTRIBUTES ATTR
6221 WHERE ( (MSII.TEMPLATE_ID IS NOT NULL AND TEMP.TEMPLATE_ID = MSII.TEMPLATE_ID)
6222 OR (MSII.TEMPLATE_ID IS NULL AND TEMP.TEMPLATE_NAME = MSII.TEMPLATE_NAME)
6223 ) AND
6224 (TEMP.CONTEXT_ORGANIZATION_ID = MSII.ORGANIZATION_ID OR TEMP.CONTEXT_ORGANIZATION_ID IS NULL) AND
6225 TEMP.TEMPLATE_ID = ATTR.TEMPLATE_ID AND
6226 ATTR.ENABLED_FLAG = 'Y' AND
6227 ATTR.ATTRIBUTE_NAME LIKE 'MTL_SYSTEM_ITEMS.DESCRIPTION')),
6228 NVL(ITEM_CATALOG_GROUP_ID,
6229 ( SELECT MICG.ITEM_CATALOG_GROUP_ID
6230 FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
6231 WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME)),
6232 CONFIRM_STATUS,
6233 NVL(REVISION_IMPORT_POLICY, l_batch_rev_policy),
6234 MSII.STYLE_ITEM_FLAG
6235 INTO l_pdh_item_number, l_pdh_description, l_pdh_item_catalog_group_id, l_confirm_status, l_instance_rev_policy, l_style_item_flag
6236 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_IMPORT_BATCHES_B BATCH
6237 WHERE MSII.SET_PROCESS_ID = p_data_set_id AND
6238 MSII.SOURCE_SYSTEM_ID = p_source_system_id AND
6239 MSII.SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
6240 MSII.ORGANIZATION_ID = BATCH.ORGANIZATION_ID AND
6241 BATCH.BATCH_ID = p_data_set_id AND
6242 PROCESS_FLAG = 0 AND
6243 ( ( p_bundle_id IS NULL AND MSII.BUNDLE_ID IS NULL ) --R12C:
6244 OR MSII.BUNDLE_ID = p_bundle_id
6245 ) AND
6246 ROWNUM = 1;
6247 -- eletuchy: note that this rownum = 1 introduced indeterminacy ...
6248
6249 -- if confirm status is one of UN, US, UM (unconfirmed no match, unconfirmed single match, unconfirmed multiple matches) or null
6250 -- simply return it
6251 IF l_confirm_status IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH
6252 , G_UNCONF_NO_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE )
6253 OR l_confirm_status IS NULL
6254 THEN
6255 RETURN l_confirm_status;
6256
6257 -- if confirm status is CN (confirmed new), we need to see if all required information for item creation is provided
6258 ELSIF l_confirm_status = G_CONF_NEW THEN
6259 -- if item catalog group id is specified, we look at the item number generation method, if any
6260 -- says U (user entered) and is not there, it is not ready
6261 Get_Item_Num_Desc_Gen_Method(l_pdh_item_catalog_group_id, l_item_num_gen, l_item_desc_gen);
6262 IF ( ( l_item_desc_gen <> 'F' AND l_pdh_description IS NULL ) OR
6263 ( l_item_desc_gen = 'F' AND l_pdh_description IS NULL AND NVL(l_style_item_flag, 'N') = 'Y' )
6264 ) THEN
6265 RETURN G_CONF_NEW_NOT_READY;
6266 END IF;
6267
6268 -- if no item catalog group id is specified, these columns are required
6269 IF l_pdh_item_catalog_group_id IS NULL THEN
6270 IF l_pdh_item_number IS null THEN
6271 RETURN G_CONF_NEW_NOT_READY;
6272 ELSE
6273 RETURN G_CONF_NEW_READY;
6274 END IF;
6275 END IF;
6276
6277 IF ( ( l_item_num_gen NOT IN ('S', 'F') AND l_pdh_item_number IS NULL ) OR
6278 ( l_item_num_gen IN ('S', 'F') AND l_pdh_item_number IS NULL AND NVL(l_style_item_flag, 'N') = 'Y' )
6279 ) THEN
6280 RETURN G_CONF_NEW_NOT_READY;
6281 ELSE
6282 RETURN G_CONF_NEW_READY;
6283 END IF;
6284 -- if confirm status is CM (confirmed match) or CC (confirmed cross reference),
6285 -- we need to see if rev level attributes are loaded and check import policy
6286 ELSIF l_confirm_status in ( G_CONF_MATCH, G_CONF_XREF, G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE ) THEN
6287 RETURN l_confirm_status
6288 || CASE WHEN IS_NEW_REVISION_INFO_NEEDED( p_data_set_id
6289 , p_source_system_id
6290 , p_source_system_reference
6291 , l_organization_id
6292 , l_organization_code
6293 , l_instance_rev_policy ) THEN 'N'
6294 ELSE 'R'
6295 END;
6296 ELSE
6297 RETURN 'UNKNOWN';
6298 END IF;
6299
6300 EXCEPTION
6301 WHEN NO_DATA_FOUND THEN -- no batch header info, or no matching msii rows
6302 RETURN 'UNKNOWN';
6303 END Get_Confirm_Status;
6304
6305 PROCEDURE Get_Item_Num_Desc_Gen_Method(p_item_catalog_group_id IN NUMBER,
6306 x_item_num_gen_method OUT NOCOPY VARCHAR2,
6307 x_item_desc_gen_method OUT NOCOPY VARCHAR2) IS
6308 l_num_gen_resolved VARCHAR2(1) := 'N';
6309 l_desc_gen_resolved VARCHAR2(1) := 'N';
6310 l_item_num_gen_method MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
6311 l_item_desc_gen_method MTL_ITEM_CATALOG_GROUPS_B.ITEM_DESC_GEN_METHOD%TYPE;
6312
6313 CURSOR c_gen_method IS
6314 SELECT
6315 DECODE(ICC.ITEM_NUM_GEN_METHOD,
6316 NULL, DECODE(ICC.PARENT_CATALOG_GROUP_ID, NULL, 'U', 'I'),
6317 ICC.ITEM_NUM_GEN_METHOD),
6318 DECODE(ICC.ITEM_DESC_GEN_METHOD,
6319 NULL, DECODE(ICC.PARENT_CATALOG_GROUP_ID, NULL, 'U', 'I'),
6320 ICC.ITEM_DESC_GEN_METHOD)
6321 FROM MTL_ITEM_CATALOG_GROUPS_B ICC
6322 CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
6323 START WITH ICC.ITEM_CATALOG_GROUP_ID = p_item_catalog_group_id;
6324 BEGIN
6325 OPEN c_gen_method;
6326 LOOP
6327 FETCH c_gen_method INTO l_item_num_gen_method, l_item_desc_gen_method;
6328 -- exit loop if no more row exists or we have resolved both item number and description generation methods
6329 EXIT WHEN (l_num_gen_resolved = 'Y' AND l_desc_gen_resolved = 'Y') OR c_gen_method%NOTFOUND;
6330 -- if generation method hasn't been resolved yet
6331 IF l_num_gen_resolved = 'N' AND l_item_num_gen_method IN ('U', 'S', 'F') THEN
6332 l_num_gen_resolved := 'Y';
6333 x_item_num_gen_method := l_item_num_gen_method;
6334 END IF;
6335
6336 IF l_desc_gen_resolved = 'N' AND l_item_desc_gen_method IN ('U', 'F') THEN
6337 l_desc_gen_resolved := 'Y';
6338 x_item_desc_gen_method := l_item_desc_gen_method;
6339 END IF;
6340
6341
6342 END LOOP;
6343
6344 CLOSE c_gen_method;
6345 END Get_Item_Num_Desc_Gen_Method;
6346
6347
6348 /*
6349 * parse item segments into item number if item_number is null
6350 */
6351 PROCEDURE PARSE_ITEM_SEGMENTS ( p_set_id IN NUMBER
6352 , p_master_org_id IN NUMBER
6353 , p_is_pdh_batch IN FLAG DEFAULT FND_API.G_FALSE
6354 )
6355 IS
6356 CURSOR c_ss_items_table IS
6357 SELECT rowid rid
6358 FROM mtl_system_items_interface
6359 WHERE set_process_id = p_set_id
6360 AND process_flag = 0
6361 AND organization_id /*bug 6402904 parse for child items also*/
6362 IN (SELECT organization_id
6363 FROM mtl_parameters mp
6364 WHERE mp.master_organization_id = p_master_org_id)
6365 AND ( confirm_status IS NULL
6366 OR confirm_status = G_FAKE_CONF_STATUS_FLAG
6367 )
6368 AND item_number IS null
6369 FOR UPDATE OF item_number;
6370
6371 CURSOR c_pdh_items_table IS
6372 SELECT rowid rid
6373 FROM mtl_system_items_interface
6374 WHERE set_process_id = p_set_id
6375 AND process_flag = 1
6376 AND item_number IS null
6377 FOR UPDATE OF item_number;
6378
6379 l_err_text VARCHAR2(240) := NULL;
6380 l_item_number MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE := NULL;
6381 l_item_id MTL_SYSTEM_ITEMS_B.INVENTORY_ITEM_ID%TYPE := NULL;
6382 l_ret_code INTEGER;
6383 BEGIN
6384 IF p_is_pdh_batch = FND_API.G_TRUE THEN
6385 FOR item_record IN c_pdh_items_table LOOP
6386 l_ret_code := INVPUOPI.MTL_PR_PARSE_ITEM_SEGMENTS ( p_row_id =>item_record.rid
6387 , item_number =>l_item_number
6388 , item_id =>l_item_id
6389 , ERR_TEXT =>l_err_text
6390 );
6391 END LOOP;
6392 ELSE
6393 FOR item_record IN c_ss_items_table LOOP
6394 l_ret_code := INVPUOPI.MTL_PR_PARSE_ITEM_SEGMENTS ( p_row_id =>item_record.rid
6395 , item_number =>l_item_number
6396 , item_id =>l_item_id
6397 , ERR_TEXT =>l_err_text
6398 );
6399 END LOOP;
6400 END IF;
6401 END PARSE_ITEM_SEGMENTS;
6402
6403 /**
6404 * resolve the SYNC transaction_type into 'CREATE' or 'UPDATE'
6405 * using the same logic as INVPOPIB.pls for a PDH batch
6406 */
6407 PROCEDURE UPDATE_ITEM_SYNC_RECORDS_PDH
6408 (p_set_id IN NUMBER,
6409 p_org_id IN NUMBER
6410 ) IS
6411 CURSOR c_items_table IS
6412 SELECT rowid
6413 , organization_id
6414 , inventory_item_id
6415 , item_number
6416 , transaction_id
6417 , transaction_type
6418 FROM mtl_system_items_interface
6419 WHERE set_process_id = p_set_id
6420 AND organization_id = p_org_id
6421 AND process_flag = 1
6422 AND UPPER(transaction_type) = 'SYNC'
6423 FOR UPDATE OF transaction_type;
6424
6425 CURSOR c_item_exists(cp_item_id NUMBER) IS
6426 SELECT 1
6427 FROM mtl_system_items_b
6428 WHERE inventory_item_id = cp_item_id;
6429
6430 l_item_exist NUMBER(10) := 0;
6431 l_err_text VARCHAR2(200);
6432 l_status NUMBER(10):= 0;
6433 l_item_id mtl_system_items_b.inventory_item_id%TYPE;
6434
6435 BEGIN
6436 FOR item_record IN c_items_table LOOP
6437 l_item_exist := 0;
6438 l_item_id := NULL;
6439
6440 IF item_record.inventory_item_id IS NULL THEN
6441 IF item_record.item_number IS NOT NULL THEN
6442 l_status := INVPUOPI.MTL_PR_PARSE_ITEM_NUMBER
6443 ( ITEM_NUMBER =>item_record.item_number
6444 , ITEM_ID =>item_record.inventory_item_id
6445 , TRANS_ID =>item_record.transaction_id
6446 , ORG_ID =>item_record.organization_id
6447 , ERR_TEXT =>l_err_text
6448 , P_ROWID =>item_record.rowid
6449 );
6450 END IF;
6451 l_item_exist := INVUPD1B.EXISTS_IN_MSI
6452 ( ROW_ID => item_record.rowid
6453 , ORG_ID => item_record.organization_id
6454 , INV_ITEM_ID => l_item_id
6455 , TRANS_ID => item_record.transaction_id
6456 , ERR_TEXT => l_err_text
6457 , XSET_ID => p_set_id
6458 );
6459 ELSE
6460 l_item_id := item_record.inventory_item_id;
6461 OPEN c_item_exists(item_record.inventory_item_id);
6462 FETCH c_item_exists INTO l_item_exist;
6463 CLOSE c_item_exists;
6464 l_item_exist := NVL(l_item_exist,0);
6465 END IF;
6466
6467 IF l_item_exist = 1 THEN
6468 UPDATE mtl_system_items_interface
6469 SET transaction_type = 'UPDATE'
6470 WHERE rowid = item_record.rowid;
6471 ELSE
6472 UPDATE mtl_system_items_interface
6473 SET transaction_type = 'CREATE', inventory_item_id = NULL
6474 WHERE rowid = item_record.rowid;
6475 END IF;
6476 END LOOP;
6477
6478 END UPDATE_ITEM_SYNC_RECORDS_PDH;
6479
6480 /*
6481 * This procedure resolves source system item cross references
6482 * immediately after MTL_SYSTEM_ITEMS_INTERFACE is populated and
6483 * tries to resolve discrepencies between user entered CONFIRM_STATUS
6484 * (if any), TRANSACTION_TYPE (if any) and other data.
6485 * This procedure needs to be safe for re-execution if data is loaded into an
6486 * active batch repeatedly.
6487 */
6488 PROCEDURE Resolve_SSXref_on_Data_load( p_data_set_id IN NUMBER
6489 ,p_commit IN FLAG DEFAULT FND_API.G_TRUE
6490 )
6491 IS
6492 l_org_id MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
6493 l_org_code MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
6494 l_ss_id EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_id%TYPE;
6495 l_import_xref_only EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
6496 l_party_name VARCHAR2(1000);
6497 l_security_predicate VARCHAR2(4000);
6498 l_return_status VARCHAR2(100);
6499 l_sql VARCHAR2(32000);
6500
6501 l_insert_date DATE;
6502 l_org VARCHAR2(100);
6503 l_enabled_for_data_pool EGO_IMPORT_OPTION_SETS.ENABLED_FOR_DATA_POOL%TYPE;
6504 BEGIN
6505 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Entering' );
6506
6507 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Gather Statistics' );
6508 Gather_Stats_For_Intf_Tables(p_data_set_id);
6509 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Call for Gather Statistics' );
6510 l_party_name := Get_Current_Party_Name;
6511
6512 -- get the organization_id, organization_code for this batch
6513 BEGIN
6514 SELECT
6515 MP.ORGANIZATION_ID,
6516 MP.ORGANIZATION_CODE,
6517 BA.SOURCE_SYSTEM_ID,
6518 NVL(OPT.IMPORT_XREF_ONLY, 'N'),
6519 NVL(ENABLED_FOR_DATA_POOL, 'N')
6520 INTO l_org_id, l_org_code, l_ss_id, l_import_xref_only, l_enabled_for_data_pool
6521 FROM MTL_PARAMETERS MP,
6522 EGO_IMPORT_BATCHES_B BA,
6523 EGO_IMPORT_OPTION_SETS OPT
6524 WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID
6525 AND BA.BATCH_ID = p_data_set_id
6526 AND BA.BATCH_ID = OPT.BATCH_ID;
6527 EXCEPTION WHEN NO_DATA_FOUND THEN
6528 -- IF batch not found then getting the default org_id from
6529 -- profile option for the user
6530 l_org := fnd_profile.value('EGO_USER_ORGANIZATION_CONTEXT');
6531 BEGIN
6532 SELECT mp.MASTER_ORGANIZATION_ID, mp1.ORGANIZATION_CODE
6533 INTO l_org_id, l_org_code
6534 FROM MTL_PARAMETERS mp, MTL_PARAMETERS mp1
6535 WHERE mp.ORGANIZATION_ID = TO_NUMBER(l_org)
6536 AND mp.MASTER_ORGANIZATION_ID = mp1.ORGANIZATION_ID;
6537 EXCEPTION WHEN OTHERS THEN
6538 l_org_id := NULL;
6539 l_org_code := NULL;
6540 END;
6541 l_ss_id := get_pdh_source_system_id();
6542 l_import_xref_only := 'N';
6543 l_enabled_for_data_pool := 'N';
6544 END;
6545
6546 -- populate organization_id if it's null
6547 -- if organization_code is not null, derive from it otherwise use
6548 -- organization id for batch
6549 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6550 SET ORGANIZATION_ID =
6551 CASE
6552 WHEN ORGANIZATION_CODE IS NOT NULL
6553 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = MSII.ORGANIZATION_CODE)
6554 ELSE l_org_id
6555 END
6556 WHERE SET_PROCESS_ID = p_data_set_id AND
6557 (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6558 ORGANIZATION_ID IS NULL;
6559
6560
6561 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
6562 SET ORGANIZATION_ID =
6563 CASE
6564 WHEN ORGANIZATION_CODE IS NOT NULL
6565 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = MIRI.ORGANIZATION_CODE)
6566 ELSE l_org_id
6567 END
6568 WHERE SET_PROCESS_ID = p_data_set_id AND
6569 (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6570 ORGANIZATION_ID IS NULL;
6571
6572
6573 UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
6574 SET ORGANIZATION_ID =
6575 CASE
6576 WHEN ORGANIZATION_CODE IS NOT NULL
6577 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = MICI.ORGANIZATION_CODE)
6578 ELSE l_org_id
6579 END
6580 WHERE SET_PROCESS_ID = p_data_set_id AND
6581 (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6582 ORGANIZATION_ID IS NULL;
6583
6584 UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
6585 SET ORGANIZATION_ID =
6586 CASE
6587 WHEN ORGANIZATION_CODE IS NOT NULL
6588 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE)
6589 ELSE l_org_id
6590 END
6591 WHERE DATA_SET_ID = p_data_set_id AND
6592 (PROCESS_STATUS IS NULL OR PROCESS_STATUS IN (0, 1)) AND
6593 ORGANIZATION_ID IS NULL;
6594
6595 UPDATE EGO_ITEM_PEOPLE_INTF EIPI
6596 SET ORGANIZATION_ID =
6597 CASE
6598 WHEN ORGANIZATION_CODE IS NOT NULL
6599 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = EIPI.ORGANIZATION_CODE)
6600 ELSE l_org_id
6601 END
6602 WHERE DATA_SET_ID = p_data_set_id AND
6603 (PROCESS_STATUS IS NULL OR PROCESS_STATUS IN (0, 1)) AND
6604 ORGANIZATION_ID IS NULL;
6605
6606 UPDATE EGO_AML_INTF EAI
6607 SET ORGANIZATION_ID =
6608 CASE
6609 WHEN ORGANIZATION_CODE IS NOT NULL
6610 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = EAI.ORGANIZATION_CODE)
6611 ELSE l_org_id
6612 END
6613 WHERE DATA_SET_ID = p_data_set_id AND
6614 (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6615 ORGANIZATION_ID IS NULL;
6616
6617 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6618 SET ORGANIZATION_ID =
6619 CASE
6620 WHEN ORGANIZATION_CODE IS NOT NULL
6621 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = EIAI.ORGANIZATION_CODE)
6622 ELSE l_org_id
6623 END
6624 WHERE BATCH_ID = p_data_set_id AND
6625 (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6626 ORGANIZATION_ID IS NULL;
6627
6628 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done populating organization_id' );
6629
6630 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Resolving data_level_name' );
6631
6632 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6633 SET DATA_LEVEL_ID = (SELECT DATA_LEVEL_ID
6634 FROM EGO_DATA_LEVEL_B EDLB
6635 WHERE EDLB.APPLICATION_ID = 431
6636 AND EDLB.ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
6637 AND EDLB.DATA_LEVEL_NAME = EIAI.DATA_LEVEL_NAME
6638 )
6639 WHERE BATCH_ID = p_data_set_id
6640 AND (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1))
6641 AND DATA_LEVEL_ID IS NULL
6642 AND DATA_LEVEL_NAME IS NOT NULL;
6643
6644
6645 UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6646 SET uai.DATA_LEVEL_ID = (SELECT edlb.DATA_LEVEL_ID
6647 FROM EGO_DATA_LEVEL_B edlb
6648 WHERE edlb.DATA_LEVEL_NAME = uai.DATA_LEVEL_NAME
6649 AND edlb.APPLICATION_ID = 431
6650 AND edlb.ATTR_GROUP_TYPE = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6651 )
6652 WHERE uai.DATA_SET_ID = p_data_set_id
6653 AND (uai.PROCESS_STATUS IS NULL OR uai.PROCESS_STATUS IN (0, 1))
6654 AND uai.DATA_LEVEL_NAME IS NOT NULL
6655 AND uai.DATA_LEVEL_ID IS NULL;
6656
6657 UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6658 SET uai.DATA_LEVEL_ID = (SELECT edlv.DATA_LEVEL_ID
6659 FROM EGO_DATA_LEVEL_VL edlv
6660 WHERE edlv.USER_DATA_LEVEL_NAME = uai.USER_DATA_LEVEL_NAME
6661 AND edlv.APPLICATION_ID = 431
6662 AND edlv.ATTR_GROUP_TYPE = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6663 )
6664 WHERE uai.DATA_SET_ID = p_data_set_id
6665 AND (uai.PROCESS_STATUS IS NULL OR uai.PROCESS_STATUS IN (0, 1) )
6666 AND uai.USER_DATA_LEVEL_NAME IS NOT NULL
6667 AND uai.DATA_LEVEL_NAME IS NULL
6668 AND uai.DATA_LEVEL_ID IS NULL;
6669
6670 -----------------------------------------------------------
6671 -- If all data level columns are null, then check if the --
6672 -- attribute group is associated at only one level, then --
6673 -- put that data level id here. --
6674 -----------------------------------------------------------
6675 UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6676 SET DATA_LEVEL_ID = (SELECT DATA_LEVEL_ID
6677 FROM EGO_ATTR_GROUP_DL eagd, EGO_FND_DSC_FLX_CTX_EXT ag_ext
6678 WHERE eagd.ATTR_GROUP_ID = ag_ext.ATTR_GROUP_ID
6679 AND ag_ext.APPLICATION_ID = 431
6680 AND ag_ext.DESCRIPTIVE_FLEXFIELD_NAME = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6681 AND ag_ext.DESCRIPTIVE_FLEX_CONTEXT_CODE = uai.ATTR_GROUP_INT_NAME
6682 )
6683 WHERE uai.DATA_SET_ID = p_data_set_id
6684 AND (uai.PROCESS_STATUS IS NULL OR uai.PROCESS_STATUS IN (0, 1) )
6685 AND uai.DATA_LEVEL_ID IS NULL
6686 AND uai.DATA_LEVEL_NAME IS NULL
6687 AND uai.USER_DATA_LEVEL_NAME IS NULL
6688 AND (SELECT COUNT(*)
6689 FROM EGO_ATTR_GROUP_DL eagd, EGO_FND_DSC_FLX_CTX_EXT ag_ext
6690 WHERE eagd.ATTR_GROUP_ID = ag_ext.ATTR_GROUP_ID
6691 AND ag_ext.APPLICATION_ID = 431
6692 AND ag_ext.DESCRIPTIVE_FLEXFIELD_NAME = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6693 AND ag_ext.DESCRIPTIVE_FLEX_CONTEXT_CODE = uai.ATTR_GROUP_INT_NAME
6694 ) = 1;
6695
6696
6697 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving data_level_name' );
6698
6699 UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6700 SET PK1_VALUE = ( SELECT VENDOR_ID
6701 FROM AP_SUPPLIERS aas
6702 WHERE aas.SEGMENT1 = eiai.SUPPLIER_NUMBER
6703 AND NVL(aas.end_date_active,SYSDATE+1) > SYSDATE --bug11072046
6704 )
6705 WHERE eiai.BATCH_ID = p_data_set_id
6706 AND (eiai.PROCESS_FLAG IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6707 AND eiai.PK1_VALUE IS NULL
6708 AND eiai.SUPPLIER_NUMBER IS NOT NULL;
6709
6710 UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6711 SET PK1_VALUE = ( SELECT VENDOR_ID
6712 FROM AP_SUPPLIERS aas
6713 WHERE aas.VENDOR_NAME = eiai.SUPPLIER_NAME
6714 AND NVL(aas.end_date_active,SYSDATE+1) > SYSDATE --bug11072046
6715 )
6716 WHERE eiai.BATCH_ID = p_data_set_id
6717 AND (eiai.PROCESS_FLAG IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6718 AND eiai.PK1_VALUE IS NULL
6719 AND eiai.SUPPLIER_NAME IS NOT NULL
6720 AND eiai.SUPPLIER_NUMBER IS NULL;
6721
6722 UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6723 SET PK2_VALUE = ( SELECT VENDOR_SITE_ID
6724 FROM AP_SUPPLIER_SITES_ALL asa
6725 WHERE asa.VENDOR_ID = eiai.PK1_VALUE
6726 AND asa.VENDOR_SITE_CODE = eiai.SUPPLIER_SITE_NAME
6727 AND asa.ORG_ID = FND_PROFILE.Value('ORG_ID')
6728 and nvl(asa.inactive_date,SYSDATE + 1) >SYSDATE --bug11072046
6729 )
6730 WHERE eiai.BATCH_ID = p_data_set_id
6731 AND (eiai.PROCESS_FLAG IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6732 AND eiai.PK2_VALUE IS NULL
6733 AND eiai.SUPPLIER_SITE_NAME IS NOT NULL;
6734
6735 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving PK Values in Intersection Interface table' );
6736
6737 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6738 SET STYLE_ITEM_ID = (SELECT MSIK.INVENTORY_ITEM_ID
6739 FROM MTL_SYSTEM_ITEMS_KFV MSIK
6740 WHERE MSIK.CONCATENATED_SEGMENTS = MSII.STYLE_ITEM_NUMBER
6741 AND MSIK.ORGANIZATION_ID = MSII.ORGANIZATION_ID
6742 )
6743 WHERE SET_PROCESS_ID = p_data_set_id
6744 AND STYLE_ITEM_NUMBER IS NOT NULL
6745 AND STYLE_ITEM_ID IS NULL
6746 AND STYLE_ITEM_FLAG = 'N'
6747 AND (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) ;
6748
6749 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving Style Item Id' );
6750
6751 IF l_ss_id = get_pdh_source_system_id() THEN
6752 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, update item_number if inventory_item_id is populated' );
6753 -- if user does know the inventory_item_id, use it to overwrite
6754 -- item_number
6755 -- so in the imported tab, we can join to the child entities by item_number alone
6756 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6757 SET item_number = (SELECT CONCATENATED_SEGMENTS
6758 FROM MTL_SYSTEM_ITEMS_KFV
6759 WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
6760 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID)
6761 WHERE SET_PROCESS_ID = p_data_set_id
6762 AND PROCESS_FLAG = 1
6763 AND ITEM_NUMBER IS NULL
6764 AND INVENTORY_ITEM_ID IS NOT NULL;
6765
6766 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
6767 SET item_number = (SELECT CONCATENATED_SEGMENTS
6768 FROM MTL_SYSTEM_ITEMS_KFV
6769 WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
6770 AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
6771 WHERE SET_PROCESS_ID = p_data_set_id
6772 AND PROCESS_FLAG = 1
6773 AND ITEM_NUMBER IS NULL
6774 AND INVENTORY_ITEM_ID IS NOT NULL;
6775
6776 UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
6777 SET item_number = (SELECT CONCATENATED_SEGMENTS
6778 FROM MTL_SYSTEM_ITEMS_KFV
6779 WHERE INVENTORY_ITEM_ID = MICI.INVENTORY_ITEM_ID
6780 AND ORGANIZATION_ID = MICI.ORGANIZATION_ID)
6781 WHERE SET_PROCESS_ID = p_data_set_id
6782 AND PROCESS_FLAG = 1
6783 AND ITEM_NUMBER IS NULL
6784 AND INVENTORY_ITEM_ID IS NOT NULL;
6785
6786 UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
6787 SET item_number = (SELECT CONCATENATED_SEGMENTS
6788 FROM MTL_SYSTEM_ITEMS_KFV
6789 WHERE INVENTORY_ITEM_ID = EIUAI.INVENTORY_ITEM_ID
6790 AND ORGANIZATION_ID = EIUAI.ORGANIZATION_ID)
6791 WHERE DATA_SET_ID = p_data_set_id
6792 AND PROCESS_STATUS = 1
6793 AND ITEM_NUMBER IS NULL
6794 AND INVENTORY_ITEM_ID IS NOT NULL;
6795
6796 UPDATE EGO_AML_INTF EAI
6797 SET item_number = (SELECT CONCATENATED_SEGMENTS
6798 FROM MTL_SYSTEM_ITEMS_KFV
6799 WHERE INVENTORY_ITEM_ID = EAI.INVENTORY_ITEM_ID
6800 AND ORGANIZATION_ID = EAI.ORGANIZATION_ID)
6801 WHERE DATA_SET_ID = p_data_set_id
6802 AND PROCESS_FLAG = 1
6803 AND ITEM_NUMBER IS NULL
6804 AND INVENTORY_ITEM_ID IS NOT NULL;
6805
6806 UPDATE EGO_ITEM_PEOPLE_INTF MIPI
6807 SET item_number = (SELECT CONCATENATED_SEGMENTS
6808 FROM MTL_SYSTEM_ITEMS_KFV
6809 WHERE INVENTORY_ITEM_ID = MIPI.INVENTORY_ITEM_ID
6810 AND ORGANIZATION_ID = MIPI.ORGANIZATION_ID)
6811 WHERE DATA_SET_ID = p_data_set_id
6812 AND PROCESS_STATUS = 1
6813 AND ITEM_NUMBER IS NULL
6814 AND INVENTORY_ITEM_ID IS NOT NULL;
6815
6816 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6817 SET item_number = (SELECT CONCATENATED_SEGMENTS
6818 FROM MTL_SYSTEM_ITEMS_KFV
6819 WHERE INVENTORY_ITEM_ID = EIAI.INVENTORY_ITEM_ID
6820 AND ORGANIZATION_ID = EIAI.ORGANIZATION_ID)
6821 WHERE BATCH_ID = p_data_set_id
6822 AND PROCESS_FLAG = 1
6823 AND ITEM_NUMBER IS NULL
6824 AND INVENTORY_ITEM_ID IS NOT NULL;
6825
6826 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done updating item_number if inventory_item_id is populated' );
6827
6828 -- parse segments into item_number if item_number is null
6829 -- so that we can join to the child entities by item number alone
6830 PARSE_ITEM_SEGMENTS(p_data_set_id, l_org_id, FND_API.G_TRUE);
6831 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done parsing item segments' );
6832
6833 -- insert fake records ...
6834 l_insert_date := SYSDATE;
6835 -- ... 1. for attributes (no child orgs)
6836 INSERT INTO
6837 MTL_SYSTEM_ITEMS_INTERFACE MSII
6838 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6839 , confirm_status, inventory_item_id, item_number
6840 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN
6841 , ITEM_CATALOG_GROUP_ID )
6842 SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, EIUAI.organization_id, l_ss_id
6843 , G_FAKE_CONF_STATUS_FLAG
6844 , MAX( EIUAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6845 , EIUAI.item_number
6846 , l_insert_date -- CREATION_DATE
6847 , l_insert_date -- LAST_UPDATE_DATE
6848 , MAX( EIUAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6849 , MAX( EIUAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6850 , MAX( EIUAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6851 , MAX( EIUAI.item_catalog_group_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_CATALOG_GROUP_ID
6852 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
6853 -- , MTL_PARAMETERS MP
6854 WHERE
6855 data_set_id = p_data_set_id
6856 AND process_status = 1
6857 AND EIUAI.organization_id = l_org_id
6858 -- AND EIUAI.organization_id = MP.organization_id
6859 -- AND MP.master_organization_id = l_org_id
6860 AND NOT EXISTS
6861 (
6862 select null from mtl_system_items_interface
6863 where set_process_id = EIUAI.data_set_id
6864 and item_number = EIUAI.item_number
6865 and process_flag = EIUAI.process_status
6866 and organization_id = l_org_id
6867 )
6868 GROUP BY EIUAI.ITEM_NUMBER, EIUAI.organization_id;
6869 -- using GROUP BY rather than distinct for performance reasons (emulating merge code)
6870 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for UDAs: ' || SQL%ROWCOUNT );
6871 -- ... 2. for AMLs (no child orgs)
6872 INSERT INTO
6873 MTL_SYSTEM_ITEMS_INTERFACE MSII
6874 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6875 , confirm_status, inventory_item_id, item_number
6876 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
6877 SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, l_org_id, l_ss_id
6878 , G_FAKE_CONF_STATUS_FLAG
6879 , MAX( EAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6880 , EAI.item_number
6881 , l_insert_date -- CREATION_DATE
6882 , l_insert_date -- LAST_UPDATE_DATE
6883 , MAX( EAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6884 , MAX( EAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6885 , MAX( EAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6886 FROM EGO_AML_INTF EAI
6887 -- , MTL_PARAMETERS MP
6888 WHERE
6889 EAI.data_set_id = p_data_set_id
6890 AND EAI.process_flag = 1
6891 AND EAI.organization_id = l_org_id
6892 -- AND EAI.organization_id = MP.organization_id
6893 -- AND MP.master_organization_id = l_org_id
6894 AND NOT EXISTS
6895 (
6896 select null from mtl_system_items_interface
6897 where set_process_id = EAI.data_set_id
6898 and item_number = EAI.item_number
6899 and process_flag = EAI.process_flag
6900 and organization_id = l_org_id
6901 )
6902 GROUP BY EAI.ITEM_NUMBER;
6903 -- using GROUP BY rather than distinct for performance reasons (emulating merge code)
6904 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for AMLs: ' || SQL%ROWCOUNT );
6905
6906 --R12C: Inseting Fake Row into MSII for orphan row in EGO_ITEM_ASSOCIATIONS_INTF.
6907 INSERT INTO
6908 MTL_SYSTEM_ITEMS_INTERFACE MSII
6909 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6910 , confirm_status, inventory_item_id, item_number
6911 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
6912 SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, EIAI.organization_id, l_ss_id
6913 , G_FAKE_CONF_STATUS_FLAG
6914 , MAX( EIAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6915 , EIAI.item_number
6916 , l_insert_date -- CREATION_DATE
6917 , l_insert_date -- LAST_UPDATE_DATE
6918 , MAX( EIAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6919 , MAX( EIAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6920 , MAX( EIAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6921 FROM EGO_ITEM_ASSOCIATIONS_INTF EIAI
6922 WHERE
6923 batch_id = p_data_set_id
6924 AND process_flag = 1
6925 AND EIAI.organization_id = l_org_id
6926 AND NOT EXISTS
6927 (
6928 select null from mtl_system_items_interface
6929 where set_process_id = EIAI.batch_id
6930 and item_number = EIAI.item_number
6931 and process_flag = EIAI.process_flag
6932 and organization_id = l_org_id
6933 )
6934 GROUP BY EIAI.ITEM_NUMBER, EIAI.organization_id;
6935 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for ASSOCIATIONS: ' || SQL%ROWCOUNT );
6936
6937 --R12C: Insertion of Fake row into MSII for a orphan row in MTL_ITEM_CATEGORIES_INTERFACE
6938 INSERT INTO
6939 MTL_SYSTEM_ITEMS_INTERFACE MSII
6940 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6941 , confirm_status, inventory_item_id, item_number
6942 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
6943 SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, MICI.organization_id, l_ss_id
6944 , G_FAKE_CONF_STATUS_FLAG
6945 , MAX( MICI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6946 , MICI.item_number
6947 , l_insert_date -- CREATION_DATE
6948 , l_insert_date -- LAST_UPDATE_DATE
6949 , MAX( MICI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6950 , MAX( MICI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6951 , MAX( MICI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6952 FROM MTL_ITEM_CATEGORIES_INTERFACE MICI
6953 WHERE
6954 set_process_id = p_data_set_id
6955 AND process_flag = 1
6956 AND MICI.organization_id = l_org_id
6957 AND NOT EXISTS
6958 (
6959 select null from mtl_system_items_interface
6960 where set_process_id = MICI.set_process_id
6961 and item_number = MICI.item_number
6962 and process_flag = MICI.process_flag
6963 and organization_id = l_org_id
6964 )
6965 GROUP BY MICI.ITEM_NUMBER, MICI.organization_id;
6966 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for CATEGORY ASSIGNMENT rows: ' || SQL%ROWCOUNT );
6967 MERGE_BATCH( p_batch_id => p_data_set_id
6968 , p_master_org_id => l_org_id
6969 , p_is_pdh_batch => FND_API.G_TRUE
6970 , p_commit => FND_API.G_FALSE
6971 );
6972 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done merging batch' );
6973
6974 -- resolve SYNC transaction_type into UPDATE or CREATE
6975 -- this is needed in the Confirmed Tab for a PDH batch to partition
6976 -- items into 'Matched' and 'New'
6977 UPDATE_ITEM_SYNC_RECORDS_PDH(p_data_set_id, l_org_id);
6978 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done updating item sync records' );
6979
6980 /* Bug 5283663: CREATE rows can have the FAKE confirm status,
6981 since those rows are moved to process flag 3 in resolve_child_entities;
6982 before IOI has a chance to process them
6983 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6984 SET CONFIRM_STATUS = NULL
6985 WHERE
6986 set_process_id = p_data_set_id
6987 AND process_flag = 1
6988 AND organization_id = l_org_id
6989 AND UPPER( transaction_type ) = G_TRANS_TYPE_CREATE
6990 AND confirm_status = G_FAKE_CONF_STATUS_FLAG;
6991 */
6992
6993 -- that's it
6994 IF FND_API.G_TRUE = p_commit THEN
6995 COMMIT;
6996 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, committed' );
6997 END IF;
6998
6999 RETURN;
7000 END IF;
7001
7002 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, setting process_flag if null' );
7003
7004 -- we need to look at all these columns
7005 -- Filter Conditions: set_process_id (batch), process_flag (0 -- unprocessed), organization_id (master org), process_flag (null)
7006 -- Source System Item Primary Keys: source_system_id, source_system_reference
7007 -- PDH Item Primary Key Possibilities: inventory_item_id, item_number, segment1, segment2, ... segment20
7008 -- User Directive: transaction_type
7009
7010 -- Normalize the PROCESS_FLAG if it is null
7011 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
7012 SET PROCESS_FLAG = 0
7013 WHERE SET_PROCESS_ID = p_data_set_id AND
7014 PROCESS_FLAG IS NULL;
7015
7016 UPDATE MTL_ITEM_REVISIONS_INTERFACE
7017 SET PROCESS_FLAG = 0
7018 WHERE SET_PROCESS_ID = p_data_set_id AND
7019 PROCESS_FLAG IS NULL;
7020
7021 UPDATE MTL_ITEM_CATEGORIES_INTERFACE
7022 SET PROCESS_FLAG = 0
7023 WHERE SET_PROCESS_ID = p_data_set_id AND
7024 PROCESS_FLAG IS NULL;
7025
7026 UPDATE EGO_ITM_USR_ATTR_INTRFC
7027 SET PROCESS_STATUS = 0
7028 WHERE DATA_SET_ID = p_data_set_id AND
7029 PROCESS_STATUS IS NULL;
7030
7031 UPDATE EGO_ITEM_PEOPLE_INTF
7032 SET PROCESS_STATUS = 0
7033 WHERE DATA_SET_ID = p_data_set_id AND
7034 PROCESS_STATUS IS NULL;
7035
7036 UPDATE EGO_AML_INTF
7037 SET PROCESS_FLAG = 0
7038 WHERE DATA_SET_ID = p_data_set_id AND
7039 PROCESS_FLAG IS NULL;
7040
7041 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
7042 SET PROCESS_FLAG = 0
7043 WHERE BATCH_ID = p_data_set_id AND
7044 PROCESS_FLAG IS NULL;
7045
7046 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done setting process_flag if null' );
7047
7048 IF l_enabled_for_data_pool = 'Y' THEN
7049
7050 EGO_IMPORT_UTIL_PVT.check_for_duplicates( p_batch_id => p_data_set_id
7051 , p_commit => FND_API.G_FALSE
7052 );
7053 Debug_Conc_Log( 'Done checking duplicates for a data_pool batch ' );
7054 ELSE
7055 Debug_Conc_Log( 'Duplicates checked only for a data_pool entabled batch' );
7056 END IF;
7057
7058 -- insert fake records ...
7059 l_insert_date := SYSDATE;
7060 -- ... 1. for attributes (no child orgs)
7061 INSERT INTO
7062 MTL_SYSTEM_ITEMS_INTERFACE MSII
7063 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
7064 , confirm_status, inventory_item_id, item_number
7065 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN
7066 , ITEM_CATALOG_GROUP_ID )
7067 SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, EIUAI.organization_id
7068 , EIUAI.source_system_id, EIUAI.source_system_reference, EIUAI.bundle_id
7069 , G_FAKE_CONF_STATUS_FLAG
7070 , MAX( EIUAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
7071 , MAX( EIUAI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
7072 , l_insert_date -- CREATION_DATE
7073 , l_insert_date -- LAST_UPDATE_DATE
7074 , MAX( EIUAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
7075 , MAX( EIUAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
7076 , MAX( EIUAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
7077 , MAX( EIUAI.item_catalog_group_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_CATALOG_GROUP_ID
7078 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
7079 -- , MTL_PARAMETERS MP
7080 WHERE
7081 data_set_id = p_data_set_id
7082 AND process_status = 0
7083 AND EIUAI.organization_id = l_org_id
7084 -- AND EIUAI.organization_id = MP.organization_id
7085 -- AND MP.master_organization_id = l_org_id
7086 AND source_system_id = l_ss_id
7087 AND source_system_reference IS NOT NULL
7088 AND NOT EXISTS
7089 (
7090 select null from mtl_system_items_interface
7091 where set_process_id = EIUAI.data_set_id
7092 and source_system_id = EIUAI.source_system_id
7093 and source_system_reference = EIUAI.source_system_reference
7094 and process_flag = EIUAI.process_status
7095 and organization_id = l_org_id
7096 )
7097 GROUP BY EIUAI.source_system_id, EIUAI.source_system_reference, EIUAI.organization_id, EIUAI.BUNDLE_ID;
7098 -- using GROUP BY rather than distinct for performance reasons (no load on merge code)
7099 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for UDAs: ' || SQL%ROWCOUNT );
7100 -- ... 2. for AMLs (no child orgs)
7101 INSERT INTO
7102 MTL_SYSTEM_ITEMS_INTERFACE MSII
7103 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference
7104 , source_system_reference_desc, confirm_status, inventory_item_id, item_number
7105 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7106 SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7107 , EAI.source_system_id, EAI.source_system_reference
7108 , MAX( EAI.source_system_reference_desc ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) SOURCE_SYSTEM_REFERENCE_DESC
7109 , G_FAKE_CONF_STATUS_FLAG
7110 , MAX( EAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
7111 , MAX( EAI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
7112 , l_insert_date -- CREATION_DATE
7113 , l_insert_date -- LAST_UPDATE_DATE
7114 , MAX( EAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
7115 , MAX( EAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
7116 , MAX( EAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
7117 FROM EGO_AML_INTF EAI
7118 -- , MTL_PARAMETERS MP
7119 WHERE
7120 EAI.data_set_id = p_data_set_id
7121 AND EAI.process_flag = 0
7122 AND EAI.organization_id = l_org_id
7123 -- AND EAI.organization_id = MP.organization_id
7124 -- AND MP.master_organization_id = l_org_id
7125 AND source_system_id = l_ss_id
7126 AND source_system_reference IS NOT NULL
7127 AND NOT EXISTS
7128 (
7129 select null from mtl_system_items_interface
7130 where set_process_id = EAI.data_set_id
7131 and source_system_id = EAI.source_system_id
7132 and source_system_reference = EAI.source_system_reference
7133 and process_flag = EAI.process_flag
7134 and organization_id = l_org_id
7135 )
7136 GROUP BY EAI.source_system_id, EAI.source_system_reference;
7137 -- using GROUP BY rather than distinct for performance reasons (no load on merge code)
7138 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for AMLs: ' || SQL%ROWCOUNT );
7139
7140 --R12C: Inserting Fake Row (Parent Row in MSII) for Orphan row in EGO_ITEM_ASSOCIATIONS_INTF
7141 INSERT INTO
7142 MTL_SYSTEM_ITEMS_INTERFACE MSII
7143 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
7144 , confirm_status, inventory_item_id, item_number
7145 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7146 SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7147 , EIAI.source_system_id, EIAI.source_system_reference, EIAI.bundle_id
7148 , G_FAKE_CONF_STATUS_FLAG
7149 , MAX( EIAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
7150 , MAX( EIAI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
7151 , l_insert_date -- CREATION_DATE
7152 , l_insert_date -- LAST_UPDATE_DATE
7153 , MAX( EIAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
7154 , MAX( EIAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
7155 , MAX( EIAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
7156 FROM EGO_ITEM_ASSOCIATIONS_INTF EIAI
7157 WHERE
7158 EIAI.batch_id = p_data_set_id
7159 AND EIAI.process_flag = 0
7160 AND EIAI.organization_id = l_org_id
7161 AND source_system_id = l_ss_id
7162 AND source_system_reference IS NOT NULL
7163 AND NOT EXISTS
7164 (
7165 select null from mtl_system_items_interface
7166 where set_process_id = EIAI.batch_id
7167 and source_system_id = EIAI.source_system_id
7168 and source_system_reference = EIAI.source_system_reference
7169 and process_flag = EIAI.process_flag
7170 and organization_id = l_org_id
7171 )
7172 GROUP BY EIAI.source_system_id, EIAI.source_system_reference, EIAI.bundle_id;
7173 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for ASSOCIATIONS: ' || SQL%ROWCOUNT );
7174
7175
7176 --R12C: Inserting Fake Row (Parent Row in MSII) for Orphan row in EGO_ITEM_ASSOCIATIONS_INTF
7177 INSERT INTO
7178 MTL_SYSTEM_ITEMS_INTERFACE MSII
7179 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
7180 , confirm_status, inventory_item_id, item_number
7181 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7182 SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7183 , MICI.source_system_id, MICI.source_system_reference, MICI.bundle_id
7184 , G_FAKE_CONF_STATUS_FLAG
7185 , MAX( MICI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
7186 , MAX( MICI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
7187 , l_insert_date -- CREATION_DATE
7188 , l_insert_date -- LAST_UPDATE_DATE
7189 , MAX( MICI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
7190 , MAX( MICI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
7191 , MAX( MICI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
7192 FROM MTL_ITEM_CATEGORIES_INTERFACE MICI
7193 WHERE
7194 MICI.set_process_id = p_data_set_id
7195 AND MICI.process_flag = 0
7196 AND MICI.organization_id = l_org_id
7197 AND source_system_id = l_ss_id
7198 AND source_system_reference IS NOT NULL
7199 AND NOT EXISTS
7200 (
7201 select null from mtl_system_items_interface
7202 where set_process_id = MICI.set_process_id
7203 and source_system_id = MICI.source_system_id
7204 and source_system_reference = MICI.source_system_reference
7205 and process_flag = MICI.process_flag
7206 and organization_id = l_org_id
7207 )
7208 GROUP BY MICI.source_system_id, MICI.source_system_reference, MICI.bundle_id;
7209 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for CAT Assignments: ' || SQL%ROWCOUNT );
7210 -- R12C: End
7211 -- check for records that need to be marked excluded
7212 UPDATE
7213 MTL_SYSTEM_ITEMS_INTERFACE MSII
7214 SET CONFIRM_STATUS = CASE
7215 WHEN CONFIRM_STATUS IS NULL THEN G_EXCLUDED
7216 ELSE G_FAKE_EXCLUDED
7217 END
7218 WHERE
7219 SET_PROCESS_ID = p_data_set_id
7220 AND ( CONFIRM_STATUS IS NULL
7221 OR CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG ) -- bug5303685: exclusion check for fake rows
7222 AND PROCESS_FLAG = 0
7223 AND ORGANIZATION_ID = l_org_id
7224 AND EXISTS
7225 ( SELECT NULL
7226 FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
7227 WHERE SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7228 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7229 );
7230
7231 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, excluded items: ' || SQL%ROWCOUNT );
7232
7233 -- parse segments into item number
7234 PARSE_ITEM_SEGMENTS(p_data_set_id, l_org_id);
7235 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done parsing item segments' );
7236
7237 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Calling Err_null_ssxref_ssid' );
7238 --Bug 5352143
7239 --This Procedure errors out rows in interface table which have source system reference
7240 --as null or have invalid source system id
7241
7242 Err_null_ssxref_ssid( p_data_set_id );
7243
7244 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Returned from Err_null_ssxref_ssid' );
7245
7246 /*
7247 * Note that merging does not need to be aware of fake records,
7248 * since they will either not be created (if there are already records in MSII)
7249 * or will be the oldest records (if the user loads item info for previously fake
7250 * records).
7251 * Either way, the confirm status after merging will be NULL.
7252 */
7253 IF l_enabled_for_data_pool = 'N' THEN
7254 MERGE_BATCH( p_batch_id => p_data_set_id
7255 , p_master_org_id => l_org_id
7256 , p_is_pdh_batch => FND_API.G_FALSE
7257 , p_commit => FND_API.G_FALSE
7258 );
7259 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done merging rows' );
7260 ELSE
7261 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Not calling merging, because batch is enabled for data pool' );
7262 END IF;
7263
7264 -- check for records that need to be marked excluded among the merged records
7265 -- (for freshly merged records, confirm_status is NULL)
7266 -- fix for bug 5329665
7267 UPDATE
7268 MTL_SYSTEM_ITEMS_INTERFACE MSII
7269 SET CONFIRM_STATUS = G_EXCLUDED
7270 WHERE
7271 SET_PROCESS_ID = p_data_set_id
7272 AND CONFIRM_STATUS IS NULL
7273 AND PROCESS_FLAG = 0
7274 AND ORGANIZATION_ID = l_org_id
7275 AND EXISTS
7276 ( SELECT NULL
7277 FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
7278 WHERE SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7279 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7280 );
7281
7282
7283 -- For every unprocessed master record in a batch which has transaction_type value of 'UPDATE' or 'SYNC'
7284 -- if it has no inventory_item_id
7285 -- if it has an item number, parse it into segments.
7286 -- determine if an item exists with these segments in MSI and if true, populate inventory_item_id
7287 -- else it has inventory_item_id
7288 -- determine if an item exists with this inventory_item_id in MSI
7289
7290 -- if the current transaction_type is 'SYNC'
7291 -- change it to 'UPDATE' if there is a way to resolve it to an existing item.
7292 -- change it to 'CREATE' if there is no way to resolve it to an existing item
7293 UPDATE_ITEM_SYNC_RECORDS(p_data_set_id, l_org_id);
7294 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done updating item sync records' );
7295 -- Now the records all have either 'UPDATE' or 'CREATE' as transaction_type
7296 -- UPDATE:
7297 -- 1. Specified by user directly.
7298 -- a. with existent inventory_item_id -- GOOD.
7299 -- b. with nonexistent inventory_item_id -- BAD -- try getting it from xref
7300 -- c. with no inventory_item_id, some information on item number or segments
7301 -- c.1. is resolved to existent inventory_item_id -- GOOD
7302 -- c.2. can not resolve to existent inventory_item_id -- inventory_item_id is still null -- try getting it from xref
7303 -- d. with no PDH item key information at all -- inventory_item_id is null -- try getting it from xref
7304 -- 2. Resolved from 'SYNC' -- may have inventory_item_id resolved. GOOD
7305 -- -- may have a null inventory_item_id -- try getting it from xref
7306
7307 -- CREATE:
7308 -- 1. Specified by user directly.
7309 -- 2. Resolved from 'SYNC'
7310 -- a. with nonexistent inventory_item_id
7311 -- b. with no inventory_item_id, some information on item number or segments which can not resolve to existent inventory_item_id
7312 -- c. with no PDH item key information at all.
7313 l_party_name := Get_Current_Party_Name;
7314
7315 -- getting security predicate
7316 EGO_DATA_SECURITY.get_security_predicate(
7317 p_api_version => 1.0
7318 ,p_function => 'EGO_VIEW_SS_ITEM_XREFS'
7319 ,p_object_name => 'EGO_ITEM'
7320 ,p_user_name => l_party_name
7321 ,p_statement_type => 'EXISTS'
7322 ,p_pk1_alias => 'XREF.INVENTORY_ITEM_ID'
7323 ,p_pk2_alias => l_org_id
7324 ,x_predicate => l_security_predicate
7325 ,x_return_status => l_return_status
7326 );
7327
7328 l_security_predicate := NVL(l_security_predicate, '1=1');
7329
7330 l_sql := q'#
7331 UPDATE
7332 MTL_SYSTEM_ITEMS_INTERFACE MSII
7333 SET TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7334 , INVENTORY_ITEM_ID =
7335 (SELECT INVENTORY_ITEM_ID
7336 FROM MTL_CROSS_REFERENCES_B XREF
7337 WHERE XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF' AND
7338 XREF.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE AND
7339 XREF.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID AND
7340 SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1) AND #'
7341 || l_security_predicate || q'# AND
7342 ROWNUM < = 1)
7343 WHERE
7344 SET_PROCESS_ID = :p_data_set_id AND
7345 PROCESS_FLAG = 0 AND
7346 ORGANIZATION_ID = :l_org_id AND
7347 ( CONFIRM_STATUS IS NULL
7348 OR CONFIRM_STATUS = '#'||G_FAKE_CONF_STATUS_FLAG||q'#'
7349 )
7350 AND
7351 ( INVENTORY_ITEM_ID IS NULL OR NOT EXISTS
7352 (SELECT 1
7353 FROM MTL_SYSTEM_ITEMS_B
7354 WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
7355 ) )
7356 AND UPPER( TRANSACTION_TYPE ) = 'UPDATE' #';
7357
7358 execute immediate l_sql using p_data_set_id, l_org_id;
7359 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, resolved xrefs. Rows touched: ' || SQL%ROWCOUNT );
7360 -- determine if import policy applies to a source system item:
7361 -- the revision import policy should not apply if the user has given us a
7362 -- rev code or id in either EGO_ITM_USR_ATTR_INTRFC or MTL_ITEM_REVISIONS_INTERFACE: We set it to 'S' meaning specific.
7363 -- however, if the rev import policy is set to Specific already, we need to verify that
7364 -- the user has given us a rev code or id in either EGO_ITM_USR_ATTR_INTRFC or MTL_ITEM_REVISIONS_INTERFACE.
7365 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
7366 SET REVISION_IMPORT_POLICY =
7367 CASE
7368 WHEN EXISTS -- check the revision interface table
7369 (
7370 SELECT NULL
7371 FROM MTL_ITEM_REVISIONS_INTERFACE
7372 WHERE SET_PROCESS_ID = MSII.SET_PROCESS_ID
7373 AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7374 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7375 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID
7376 AND PROCESS_FLAG = MSII.PROCESS_FLAG
7377 AND
7378 (
7379 REVISION_ID IS NOT NULL
7380 OR REVISION IS NOT NULL
7381 )
7382 )
7383 THEN 'S'
7384 WHEN EXISTS -- check the user attrs interface table
7385 (
7386 SELECT NULL
7387 FROM EGO_ITM_USR_ATTR_INTRFC USR_ATTR
7388 WHERE DATA_SET_ID = MSII.SET_PROCESS_ID
7389 AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7390 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7391 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID
7392 AND PROCESS_STATUS = MSII.PROCESS_FLAG
7393 AND
7394 (
7395 REVISION_ID IS NOT NULL
7396 OR REVISION IS NOT NULL
7397 )
7398 )
7399 THEN 'S'
7400 ELSE NULL
7401 END
7402 WHERE SET_PROCESS_ID = p_data_set_id
7403 AND ORGANIZATION_ID = l_org_id
7404 AND PROCESS_FLAG = 0
7405 AND ( REVISION_IMPORT_POLICY = 'S' OR REVISION_IMPORT_POLICY IS NULL )
7406 --AND CONFIRM_STATUS IS NULL
7407 ;
7408 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done resolving item import policy' );
7409
7410 -- We will also try to harmonize CONFIRM_STATUS, TRANSACTION_TYPE with information the user provides on INVENTORY_ITEMID or
7411 -- ITEM_NUMBER, segments, et.al.
7412 -- CONFIRM_STATUS can have the following values: CN (confirmed new), CC (confirmed xref), CM (confirmed match),
7413 -- US (unconfirmed single match), UM (unconfirmed multiple match), UN (unconfirmed no match), EX (excluded), null.
7414 -- See spec (EGOVIMPS.pls) constants for list of confirm status values.
7415 -- Bug: 5458886 - If batch is cross references only batch, then New Item should not be allowed
7416 UPDATE -- for non-fake rows
7417 MTL_SYSTEM_ITEMS_INTERFACE MSII
7418 SET
7419 CONFIRM_STATUS =
7420 CASE
7421 WHEN UPPER( TRANSACTION_TYPE ) = G_TRANS_TYPE_CREATE AND l_import_xref_only = 'N' THEN G_CONF_NEW
7422 WHEN INVENTORY_ITEM_ID IS NOT NULL THEN G_CONF_XREF -- TRANSACTION_TYPE is 'UPDATE'
7423 ELSE G_UNCONF_NONE_MATCH
7424 END
7425 , TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7426 WHERE
7427 SET_PROCESS_ID = p_data_set_id AND
7428 PROCESS_FLAG = 0 AND
7429 ORGANIZATION_ID = l_org_id AND
7430 CONFIRM_STATUS IS NULL;
7431
7432 UPDATE -- for fake rows
7433 MTL_SYSTEM_ITEMS_INTERFACE MSII
7434 SET
7435 CONFIRM_STATUS =
7436 CASE
7437 WHEN UPPER( TRANSACTION_TYPE ) = G_TRANS_TYPE_CREATE AND l_import_xref_only = 'N' THEN G_CONF_NEW
7438 WHEN INVENTORY_ITEM_ID IS NOT NULL THEN G_CONF_XREF_FAKE -- TRANSACTION_TYPE is 'UPDATE'
7439 ELSE G_UNCONF_NO_MATCH_FAKE
7440 END
7441 , TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7442 WHERE
7443 SET_PROCESS_ID = p_data_set_id AND
7444 PROCESS_FLAG = 0 AND
7445 ORGANIZATION_ID = l_org_id AND
7446 CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG;
7447
7448 -- update inventory_item_id to make sure their existence makes sense
7449 UPDATE
7450 MTL_SYSTEM_ITEMS_INTERFACE MSII
7451 SET
7452 INVENTORY_ITEM_ID =
7453 CASE
7454 WHEN CONFIRM_STATUS IN ( G_CONF_XREF, G_CONF_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH
7455 , G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE )
7456 THEN INVENTORY_ITEM_ID
7457 -- if it's 'CN', 'UN', 'EX' or NULL, erase
7458 ELSE NULL
7459 END
7460 WHERE
7461 SET_PROCESS_ID = p_data_set_id AND
7462 PROCESS_FLAG = 0 AND
7463 ORGANIZATION_ID = l_org_id;
7464
7465 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done resolving confirm status' );
7466 -- for all records where item_catalog_group_name is present and item_catalog_group_id is not present
7467 -- update the item_catalog_group_id
7468 UPDATE
7469 MTL_SYSTEM_ITEMS_INTERFACE MSII
7470 SET ITEM_CATALOG_GROUP_ID = (SELECT MICG.ITEM_CATALOG_GROUP_ID
7471 FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
7472 WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME)
7473 WHERE MSII.SET_PROCESS_ID = p_data_set_id
7474 AND MSII.PROCESS_FLAG = 0
7475 AND MSII.ORGANIZATION_ID = l_org_id
7476 AND MSII.CONFIRM_STATUS IN ( G_CONF_NEW, G_CONF_XREF, G_CONF_MATCH, G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
7477 AND MSII.ITEM_CATALOG_GROUP_ID IS NULL
7478 AND MSII.ITEM_CATALOG_GROUP_NAME IS NOT NULL;
7479
7480 Debug_Conc_Log('Resolve_SSXref_on_Data_load - After Updating Item Catalog Group ID' );
7481
7482
7483 IF FND_API.G_TRUE = p_commit THEN
7484 COMMIT;
7485 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, committed' );
7486 END IF;
7487 EXCEPTION
7488 WHEN NO_DATA_FOUND THEN
7489 IF FND_API.G_TRUE = p_commit THEN
7490 COMMIT;
7491 END IF;
7492 RETURN;
7493
7494 END Resolve_SSXref_on_Data_load;
7495
7496
7497 /*
7498 * This method cleans up the row identifiers before the actual import process starts
7499 * Here we group the rows based on item_number or source_system_reference
7500 */
7501 PROCEDURE CLEAN_UP_UDA_ROW_IDENTS_PRE( p_batch_id IN NUMBER,
7502 p_process_status IN NUMBER,
7503 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE
7504 )
7505 IS
7506 CURSOR c_unmerged_rows(cp_ss_id IN NUMBER) IS
7507 SELECT ROW_IDENTIFIER FROM
7508 (
7509 SELECT
7510 ROW_IDENTIFIER,
7511 COUNT( DISTINCT ROW_IDENTIFIER )
7512 OVER ( PARTITION BY
7513 NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7514 NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7515 REVISION,/*Bug:11887867*/
7516 ATTR_GROUP_INT_NAME,
7517 ATTR_INT_NAME,
7518 DATA_LEVEL_ID,
7519 PK1_VALUE,
7520 PK2_VALUE,
7521 PK3_VALUE,
7522 PK4_VALUE,
7523 PK5_VALUE,
7524 ORGANIZATION_ID,
7525 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7526 ) cnt
7527 FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7528 WHERE DATA_SET_ID = p_batch_id
7529 AND PROCESS_STATUS = p_process_status
7530 AND (ITEM_NUMBER IS NOT NULL OR SOURCE_SYSTEM_REFERENCE IS NOT NULL)
7531 AND DATA_LEVEL_ID IS NOT NULL
7532 AND EXISTS( SELECT NULL
7533 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7534 WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7535 AND FL_CTX_EXT.APPLICATION_ID = 431
7536 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7537 AND FL_CTX_EXT.MULTI_ROW = 'N'
7538 )
7539 )
7540 WHERE CNT > 1;
7541
7542
7543 CURSOR c_intf_recs(cp_ss_id IN NUMBER) IS
7544 SELECT ROW_ID, MAX_ROW_IDENTIFIER FROM
7545 (
7546 SELECT
7547 ROWID ROW_ID,
7548 COUNT( DISTINCT ROW_IDENTIFIER ) OVER ( PARTITION BY
7549 NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7550 NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7551 REVISION,/*Bug:11887867*/
7552 ATTR_GROUP_INT_NAME,
7553 DATA_LEVEL_ID,
7554 PK1_VALUE,
7555 PK2_VALUE,
7556 PK3_VALUE,
7557 PK4_VALUE,
7558 PK5_VALUE,
7559 ORGANIZATION_ID,
7560 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7561 ) cnt,
7562 MAX( ROW_IDENTIFIER ) OVER ( PARTITION BY
7563 NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7564 NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7565 ATTR_GROUP_INT_NAME,
7566 DATA_LEVEL_ID,
7567 PK1_VALUE,
7568 PK2_VALUE,
7569 PK3_VALUE,
7570 PK4_VALUE,
7571 PK5_VALUE,
7572 ORGANIZATION_ID,
7573 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7574 ) MAX_ROW_IDENTIFIER
7575 FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7576 WHERE DATA_SET_ID = p_batch_id
7577 AND PROCESS_STATUS = p_process_status
7578 AND (ITEM_NUMBER IS NOT NULL OR SOURCE_SYSTEM_REFERENCE IS NOT NULL)
7579 AND DATA_LEVEL_ID IS NOT NULL
7580 AND EXISTS( SELECT NULL
7581 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7582 WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7583 AND FL_CTX_EXT.APPLICATION_ID = 431
7584 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7585 AND FL_CTX_EXT.MULTI_ROW = 'N'
7586 )
7587 )
7588 WHERE CNT > 1;
7589
7590 CURSOR c_error_case_cursor IS
7591 SELECT /*+ INDEX(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N3) */ /* Bug 9678667 */
7592 DISTINCT
7593 ORGANIZATION_ID,
7594 ITEM_NUMBER,
7595 SOURCE_SYSTEM_REFERENCE,
7596 INVENTORY_ITEM_ID,
7597 ATTR_GROUP_INT_NAME,
7598 TRANSACTION_ID
7599 FROM EGO_ITM_USR_ATTR_INTRFC
7600 WHERE DATA_SET_ID = p_batch_id
7601 AND PROCESS_STATUS = 3.475;
7602
7603 l_msg_text VARCHAR2(4000);
7604 dumm_status VARCHAR2(100);
7605 l_user_id NUMBER := FND_GLOBAL.USER_ID;
7606 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
7607 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
7608 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
7609 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
7610 l_err_text VARCHAR2(4000);
7611
7612 TYPE ROW_IDS IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7613 TYPE ROW_IDENTIFIERS IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7614 l_unmerged_row_idents ROW_IDENTIFIERS;
7615
7616 l_row_ids ROW_IDS;
7617 l_row_idents ROW_IDENTIFIERS;
7618 l_ss_id NUMBER;
7619 BEGIN
7620 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Starting');
7621 BEGIN
7622 SELECT SOURCE_SYSTEM_ID INTO l_ss_id
7623 FROM EGO_IMPORT_BATCHES_B
7624 WHERE BATCH_ID = p_batch_id;
7625 EXCEPTION WHEN NO_DATA_FOUND THEN
7626 l_ss_id := GET_PDH_SOURCE_SYSTEM_ID();
7627 END;
7628
7629 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updating item_number and revision, l_ss_id='||l_ss_id);
7630 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
7631 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
7632 FROM MTL_SYSTEM_ITEMS_KFV
7633 WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
7634 AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
7635 WHERE DATA_SET_ID = p_batch_id
7636 AND PROCESS_STATUS = p_process_status
7637 AND INVENTORY_ITEM_ID IS NOT NULL
7638 AND ITEM_NUMBER IS NULL;
7639
7640 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
7641 SET REVISION = ( SELECT R.REVISION
7642 FROM MTL_ITEM_REVISIONS_B R
7643 WHERE R.REVISION_ID = eiuai.REVISION_ID
7644 )
7645 WHERE DATA_SET_ID = p_batch_id
7646 AND PROCESS_STATUS = p_process_status
7647 AND REVISION_ID IS NOT NULL
7648 AND REVISION IS NULL;
7649
7650 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Erroring out Unmerged Rows' );
7651 OPEN c_unmerged_rows(l_ss_id);
7652 LOOP
7653 FETCH c_unmerged_rows BULK COLLECT INTO l_unmerged_row_idents LIMIT 1000;
7654 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - fetched '||l_unmerged_row_idents.Count||' rows, ');
7655
7656 FORALL idx IN l_unmerged_row_idents.FIRST..l_unmerged_row_idents.LAST
7657 UPDATE EGO_ITM_USR_ATTR_INTRFC
7658 SET process_status = 3.475
7659 WHERE DATA_SET_ID = p_batch_id
7660 AND PROCESS_STATUS = p_process_status
7661 AND ROW_IDENTIFIER = l_unmerged_row_idents(idx);
7662 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Errored - '||SQL%ROWCOUNT||' rows');
7663 EXIT WHEN c_unmerged_rows%NOTFOUND;
7664 END LOOP;
7665 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done Erroring unmerged rows');
7666 CLOSE c_unmerged_rows;
7667
7668 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Logging errors for Errored out unmerged rows');
7669 FOR i IN c_error_case_cursor LOOP
7670 FND_MESSAGE.SET_NAME('EGO', 'EGO_EF_IDENTICAL_ROWS_ERR');
7671 FND_MESSAGE.SET_TOKEN('AG_NAME', i.ATTR_GROUP_INT_NAME);
7672 l_msg_text := FND_MESSAGE.GET;
7673 dumm_status := INVPUOPI.mtl_log_interface_err(
7674 i.ORGANIZATION_ID
7675 ,l_user_id
7676 ,l_login_id
7677 ,l_prog_appid
7678 ,l_prog_id
7679 ,l_request_id
7680 ,i.TRANSACTION_ID
7681 ,l_msg_text
7682 ,'ATTR_GROUP_INT_NAME'
7683 ,'EGO_ITM_USR_ATTR_INTRFC'
7684 ,'INV_IOI_ERR_EF_IDENTICAL_RS01'--bug 11894684, replace INV_IOI_ERR
7685 ,l_err_text);
7686 END LOOP;
7687 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done Logging errors for Errored out unmerged rows');
7688
7689 UPDATE /*+ INDEX(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N3) */ /* Bug 9678667 */
7690 EGO_ITM_USR_ATTR_INTRFC
7691 SET
7692 PROCESS_STATUS = 3,
7693 REQUEST_ID = l_request_id
7694 WHERE DATA_SET_ID = p_batch_id
7695 AND PROCESS_STATUS = 3.475;
7696
7697 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done updating rows to 3');
7698
7699 -- work around the following case by setting the row identifier to the same value
7700 -- item ids attr_grp attr row_ident value
7701 -- xyz item_sr one 1 x
7702 -- xyz item_sr two 2 y
7703 -- UDA loader code throws an error ...
7704 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updating row_identifiers to unique value where' );
7705 OPEN c_intf_recs(l_ss_id);
7706 LOOP
7707 FETCH c_intf_recs BULK COLLECT INTO l_row_ids, l_row_idents LIMIT 1000;
7708 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - fetched '||l_unmerged_row_idents.Count||' rows, ');
7709
7710 FORALL idx IN l_row_ids.FIRST..l_row_ids.LAST
7711 UPDATE EGO_ITM_USR_ATTR_INTRFC
7712 SET ROW_IDENTIFIER = l_row_idents(idx)
7713 WHERE ROWID = l_row_ids(idx);
7714 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updated - '||SQL%ROWCOUNT||' rows');
7715 EXIT WHEN c_intf_recs%NOTFOUND;
7716 END LOOP;
7717 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done updating row_identifiers');
7718 CLOSE c_intf_recs;
7719
7720 IF FND_API.G_TRUE = p_commit THEN
7721 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre COMMITING');
7722 COMMIT;
7723 END IF;
7724 EXCEPTION WHEN OTHERS THEN
7725 IF c_unmerged_rows%ISOPEN THEN
7726 CLOSE c_unmerged_rows;
7727 END IF;
7728 IF c_intf_recs%ISOPEN THEN
7729 CLOSE c_intf_recs;
7730 END IF;
7731 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre Error - '||SQLERRM);
7732 RAISE;
7733 END CLEAN_UP_UDA_ROW_IDENTS_PRE;
7734
7735
7736 PROCEDURE CLEAN_UP_UDA_ROW_IDENTS_POST( p_batch_id IN NUMBER,
7737 p_process_status IN NUMBER,
7738 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE
7739 )
7740 IS
7741 CURSOR c_unmerged_rows IS
7742 SELECT ROW_IDENTIFIER FROM
7743 (
7744 SELECT
7745 ROW_IDENTIFIER,
7746 COUNT( DISTINCT ROW_IDENTIFIER )
7747 OVER ( PARTITION BY
7748 INVENTORY_ITEM_ID,
7749 REVISION,/*Bug:11887867*/
7750 ATTR_GROUP_INT_NAME,
7751 ATTR_INT_NAME,
7752 DATA_LEVEL_ID,
7753 PK1_VALUE,
7754 PK2_VALUE,
7755 PK3_VALUE,
7756 PK4_VALUE,
7757 PK5_VALUE,
7758 ORGANIZATION_ID,
7759 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7760 ) cnt
7761 FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7762 WHERE DATA_SET_ID = p_batch_id
7763 AND PROCESS_STATUS = p_process_status
7764 AND INVENTORY_ITEM_ID IS NOT NULL
7765 AND DATA_LEVEL_ID IS NOT NULL
7766 AND EXISTS( SELECT NULL
7767 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7768 WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7769 AND FL_CTX_EXT.APPLICATION_ID = 431
7770 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7771 AND FL_CTX_EXT.MULTI_ROW = 'N'
7772 )
7773 )
7774 WHERE CNT > 1;
7775
7776
7777 CURSOR c_intf_recs IS
7778 SELECT ROW_ID, MAX_ROW_IDENTIFIER FROM
7779 (
7780 SELECT
7781 ROWID ROW_ID,
7782 COUNT( DISTINCT ROW_IDENTIFIER ) OVER ( PARTITION BY
7783 INVENTORY_ITEM_ID,
7784 REVISION,/*Bug:11887867*/
7785 ATTR_GROUP_INT_NAME,
7786 DATA_LEVEL_ID,
7787 PK1_VALUE,
7788 PK2_VALUE,
7789 PK3_VALUE,
7790 PK4_VALUE,
7791 PK5_VALUE,
7792 ORGANIZATION_ID,
7793 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7794 ) cnt,
7795 MAX( ROW_IDENTIFIER ) OVER ( PARTITION BY
7796 INVENTORY_ITEM_ID,
7797 ATTR_GROUP_INT_NAME,
7798 DATA_LEVEL_ID,
7799 PK1_VALUE,
7800 PK2_VALUE,
7801 PK3_VALUE,
7802 PK4_VALUE,
7803 PK5_VALUE,
7804 ORGANIZATION_ID,
7805 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7806 ) MAX_ROW_IDENTIFIER
7807 FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7808 WHERE DATA_SET_ID = p_batch_id
7809 AND PROCESS_STATUS = p_process_status
7810 AND INVENTORY_ITEM_ID IS NOT NULL
7811 AND DATA_LEVEL_ID IS NOT NULL
7812 AND EXISTS( SELECT NULL
7813 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7814 WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7815 AND FL_CTX_EXT.APPLICATION_ID = 431
7816 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7817 AND FL_CTX_EXT.MULTI_ROW = 'N'
7818 )
7819 )
7820 WHERE CNT > 1;
7821
7822 CURSOR c_error_case_cursor IS
7823 SELECT /*+ INDEX(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N3) */ /* Bug 9678667 */
7824 DISTINCT
7825 ORGANIZATION_ID,
7826 ITEM_NUMBER,
7827 SOURCE_SYSTEM_REFERENCE,
7828 INVENTORY_ITEM_ID,
7829 ATTR_GROUP_INT_NAME,
7830 TRANSACTION_ID
7831 FROM EGO_ITM_USR_ATTR_INTRFC
7832 WHERE DATA_SET_ID = p_batch_id
7833 AND PROCESS_STATUS = 3.475;
7834
7835 l_msg_text VARCHAR2(4000);
7836 dumm_status VARCHAR2(100);
7837 l_user_id NUMBER := FND_GLOBAL.USER_ID;
7838 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
7839 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
7840 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
7841 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
7842 l_err_text VARCHAR2(4000);
7843
7844 TYPE ROW_IDS IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7845 TYPE ROW_IDENTIFIERS IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7846 l_unmerged_row_idents ROW_IDENTIFIERS;
7847
7848 l_row_ids ROW_IDS;
7849 l_row_idents ROW_IDENTIFIERS;
7850 BEGIN
7851 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Starting');
7852 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Erroring out Unmerged Rows' );
7853 OPEN c_unmerged_rows;
7854 LOOP
7855 FETCH c_unmerged_rows BULK COLLECT INTO l_unmerged_row_idents LIMIT 1000;
7856 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - fetched '||l_unmerged_row_idents.Count||' rows, ');
7857
7858 FORALL idx IN l_unmerged_row_idents.FIRST..l_unmerged_row_idents.LAST
7859 UPDATE EGO_ITM_USR_ATTR_INTRFC
7860 SET process_status = 3.475
7861 WHERE DATA_SET_ID = p_batch_id
7862 AND PROCESS_STATUS = p_process_status
7863 AND ROW_IDENTIFIER = l_unmerged_row_idents(idx);
7864 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Errored - '||SQL%ROWCOUNT||' rows');
7865 EXIT WHEN c_unmerged_rows%NOTFOUND;
7866 END LOOP;
7867 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done Erroring unmerged rows');
7868 CLOSE c_unmerged_rows;
7869
7870 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Logging errors for Errored out unmerged rows');
7871 FOR i IN c_error_case_cursor LOOP
7872 FND_MESSAGE.SET_NAME('EGO', 'EGO_EF_IDENTICAL_ROWS_ERR');
7873 FND_MESSAGE.SET_TOKEN('AG_NAME', i.ATTR_GROUP_INT_NAME);
7874 l_msg_text := FND_MESSAGE.GET;
7875 dumm_status := INVPUOPI.mtl_log_interface_err(
7876 i.ORGANIZATION_ID
7877 ,l_user_id
7878 ,l_login_id
7879 ,l_prog_appid
7880 ,l_prog_id
7881 ,l_request_id
7882 ,i.TRANSACTION_ID
7883 ,l_msg_text
7884 ,'ATTR_GROUP_INT_NAME'
7885 ,'EGO_ITM_USR_ATTR_INTRFC'
7886 ,'INV_IOI_ERR_EF_IDENTICAL_RS02'--bug 11894684, replace INV_IOI_ERR
7887 ,l_err_text);
7888 END LOOP;
7889 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done Logging errors for Errored out unmerged rows');
7890
7891 UPDATE /*+ INDEX(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N3) */ /* Bug 9678667 */
7892 EGO_ITM_USR_ATTR_INTRFC
7893 SET
7894 PROCESS_STATUS = 3,
7895 REQUEST_ID = l_request_id
7896 WHERE DATA_SET_ID = p_batch_id
7897 AND PROCESS_STATUS = 3.475;
7898
7899 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done updating rows to 3');
7900
7901 -- work around the following case by setting the row identifier to the same value
7902 -- item ids attr_grp attr row_ident value
7903 -- xyz item_sr one 1 x
7904 -- xyz item_sr two 2 y
7905 -- UDA loader code throws an error ...
7906 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Updating row_identifiers to unique value where' );
7907 OPEN c_intf_recs;
7908 LOOP
7909 FETCH c_intf_recs BULK COLLECT INTO l_row_ids, l_row_idents LIMIT 1000;
7910 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - fetched '||l_unmerged_row_idents.Count||' rows, ');
7911
7912 FORALL idx IN l_row_ids.FIRST..l_row_ids.LAST
7913 UPDATE EGO_ITM_USR_ATTR_INTRFC
7914 SET ROW_IDENTIFIER = l_row_idents(idx)
7915 WHERE ROWID = l_row_ids(idx);
7916 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Updated - '||SQL%ROWCOUNT||' rows');
7917 EXIT WHEN c_intf_recs%NOTFOUND;
7918 END LOOP;
7919 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done updating row_identifiers');
7920 CLOSE c_intf_recs;
7921
7922 IF FND_API.G_TRUE = p_commit THEN
7923 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post COMMITING');
7924 COMMIT;
7925 END IF;
7926 EXCEPTION WHEN OTHERS THEN
7927 IF c_unmerged_rows%ISOPEN THEN
7928 CLOSE c_unmerged_rows;
7929 END IF;
7930 IF c_intf_recs%ISOPEN THEN
7931 CLOSE c_intf_recs;
7932 END IF;
7933 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post Error - '||SQLERRM);
7934 RAISE;
7935 END CLEAN_UP_UDA_ROW_IDENTS_POST;
7936
7937 /*
7938 * This method cleans up UDA row identifiers, ensuring that all single attr groups
7939 * are represented by only one row identifier in EGO_ITM_USR_ATTR_INTRFC
7940 *
7941 * Helper procedure for resolve_child_entities
7942 */
7943 PROCEDURE CLEAN_UP_UDA_ROW_IDENTS( p_batch_id IN NUMBER,
7944 p_process_status IN NUMBER,
7945 p_ignore_item_num_upd IN VARCHAR2, --FND_API.G_TRUE
7946 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE
7947 )
7948 IS
7949 BEGIN
7950 Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Starting');
7951 IF p_ignore_item_num_upd = FND_API.G_FALSE THEN
7952 Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Calling CLEAN_UP_UDA_ROW_IDENTS_PRE');
7953 CLEAN_UP_UDA_ROW_IDENTS_PRE(p_batch_id => p_batch_id,
7954 p_process_status => p_process_status,
7955 p_commit => p_commit);
7956 Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Done CLEAN_UP_UDA_ROW_IDENTS_PRE');
7957 ELSE
7958 Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Calling CLEAN_UP_UDA_ROW_IDENTS_POST');
7959 CLEAN_UP_UDA_ROW_IDENTS_POST(p_batch_id => p_batch_id,
7960 p_process_status => p_process_status,
7961 p_commit => p_commit);
7962 Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Done CLEAN_UP_UDA_ROW_IDENTS_POST');
7963 END IF;
7964 END CLEAN_UP_UDA_ROW_IDENTS;
7965
7966 /*
7967 * This method populates the child entities with PK values.
7968 * This method populates the other interface tables like MTL_ITEM_REVISION_INTERFACE,
7969 * EGO_ITEM_PEOPLE_INTF, MTL_ITEM_CATEGORIES_INTERFACE, EGO_ITM_USR_ATTR_INTRFC etc.
7970 * with the inventory item id/number and organization id/code.
7971 */
7972 PROCEDURE Resolve_Child_Entities( p_data_set_id IN NUMBER
7973 , p_commit IN FLAG DEFAULT FND_API.G_TRUE
7974 )
7975 IS
7976 CURSOR c_no_privilege_rows IS
7977 SELECT
7978 ROWID,
7979 SOURCE_SYSTEM_ID,
7980 SOURCE_SYSTEM_REFERENCE,
7981 ITEM_NUMBER,
7982 ORGANIZATION_CODE,
7983 INVENTORY_ITEM_ID,
7984 ORGANIZATION_ID,
7985 TRANSACTION_TYPE,
7986 TRANSACTION_ID
7987 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
7988 WHERE SET_PROCESS_ID = p_data_set_id
7989 AND PROCESS_FLAG = 33390;
7990
7991
7992
7993 CURSOR c_old_xref_no_priv_row IS
7994 SELECT KFV.CONCATENATED_SEGMENTS ITEM_NUMBER,
7995 MSII.ORGANIZATION_CODE,
7996 MSII.ORGANIZATION_ID,
7997 MSII.TRANSACTION_ID
7998 FROM MTL_SYSTEM_ITEMS_B_KFV KFV,
7999 MTL_SYSTEM_ITEMS_INTERFACE MSII,
8000 MTL_CROSS_REFERENCES MCR
8001 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8002 AND MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8003 AND MSII.SOURCE_SYSTEM_ID = MCR.SOURCE_SYSTEM_ID
8004 AND MSII.ORGANIZATION_ID = KFV.ORGANIZATION_ID
8005 AND MCR.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8006 AND MCR.INVENTORY_ITEM_ID = KFV.INVENTORY_ITEM_ID
8007 AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE-1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
8008 AND MSII.PROCESS_FLAG = 33391;
8009
8010
8011
8012 l_msg_text VARCHAR2(4000);
8013 dumm_status VARCHAR2(100);
8014 l_user_id NUMBER := FND_GLOBAL.USER_ID;
8015 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
8016 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
8017 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
8018 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
8019 l_err_text VARCHAR2(4000);
8020 l_ss_id EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE;
8021 l_org_id EGO_IMPORT_BATCHES_B.ORGANIZATION_ID%TYPE;
8022 l_item_id NUMBER;
8023 l_revision MTL_ITEM_REVISIONS_B.REVISION%TYPE;
8024 l_error BOOLEAN;
8025 l_import_policy EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE;
8026
8027 l_import_xref_only EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
8028 l_party_name VARCHAR2(1000);
8029 l_security_predicate VARCHAR2(4000);
8030 l_return_status VARCHAR2(100);
8031 l_sql VARCHAR2(32000);
8032 l_enabled_for_data_pool EGO_IMPORT_OPTION_SETS.ENABLED_FOR_DATA_POOL%TYPE;
8033 l_org VARCHAR2(100);
8034 BEGIN
8035 -- get the source_system_id for this batch
8036 Debug_Conc_Log( 'Resolve_Child_Entities START' );
8037 BEGIN
8038 SELECT
8039 BA.SOURCE_SYSTEM_ID,
8040 BA.ORGANIZATION_ID,
8041 NVL(OPT.REVISION_IMPORT_POLICY, 'L'),
8042 NVL(opt.IMPORT_XREF_ONLY, 'N'),
8043 NVL(opt.ENABLED_FOR_DATA_POOL, 'N')
8044 INTO l_ss_id, l_org_id, l_import_policy, l_import_xref_only, l_enabled_for_data_pool
8045 FROM EGO_IMPORT_BATCHES_B BA, EGO_IMPORT_OPTION_SETS OPT
8046 WHERE BA.BATCH_ID = p_data_set_id AND BA.BATCH_ID = OPT.BATCH_ID;
8047 EXCEPTION WHEN NO_DATA_FOUND THEN
8048 l_org := fnd_profile.value('EGO_USER_ORGANIZATION_CONTEXT');
8049 BEGIN
8050 SELECT mp.MASTER_ORGANIZATION_ID
8051 INTO l_org_id
8052 FROM MTL_PARAMETERS mp
8053 WHERE mp.ORGANIZATION_ID = TO_NUMBER(l_org);
8054 EXCEPTION WHEN OTHERS THEN
8055 l_org_id := NULL;
8056 END;
8057 l_ss_id := get_pdh_source_system_id();
8058 l_import_xref_only := 'N';
8059 l_enabled_for_data_pool := 'N';
8060 l_import_policy := NULL;
8061 END;
8062
8063 -- no need to resolve child entities for a PDH batch
8064 -- no need to resolve child entities for a Non-PDH batch, if Import Only Cross References is true
8065 IF l_ss_id = get_pdh_source_system_id() THEN
8066 -- move fake rows to have the success process flag value
8067 -- so that they are not processed by IOI
8068 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8069 SET
8070 REQUEST_ID = l_request_id
8071 , PROGRAM_APPLICATION_ID = l_prog_appid
8072 , PROGRAM_ID = l_prog_id
8073 , PROGRAM_UPDATE_DATE = SYSDATE
8074 , PROCESS_FLAG = CASE -- bug 5283663: never leave fake rows in status 1
8075 WHEN UPPER( TRANSACTION_TYPE ) <> G_TRANS_TYPE_CREATE THEN 7
8076 ELSE 3
8077 END
8078 WHERE
8079 set_process_id = p_data_set_id
8080 AND organization_id = l_org_id
8081 AND confirm_status = G_FAKE_CONF_STATUS_FLAG
8082 AND (REQUEST_ID IS NULL OR REQUEST_ID = l_request_id) --added for bug 8860381
8083 -- AND UPPER( TRANSACTION_TYPE ) <> G_TRANS_TYPE_CREATE -- bug 5283663: never leave fake rows in status 1
8084 ;
8085
8086 Debug_Conc_Log('Resolve_Child_Entities - Calling Clean_Up_UDA_Row_Idents');
8087 Clean_Up_UDA_Row_Idents( p_batch_id => p_data_set_id,
8088 p_process_status => 1,
8089 p_ignore_item_num_upd => FND_API.G_FALSE,
8090 p_commit => FND_API.G_FALSE );
8091 Debug_Conc_Log('Resolve_Child_Entities - Clean_Up_UDA_Row_Idents Done.');
8092
8093 Debug_Conc_Log('Resolve_Child_Entities - Resolving Style_Item_Flag');
8094 UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
8095 SET (STYLE_ITEM_FLAG, STYLE_ITEM_ID, INVENTORY_ITEM_ID) = (SELECT
8096 DECODE(MAX(NVL(msik.STYLE_ITEM_FLAG, '$NULL$')),
8097 '$NULL$', msii.STYLE_ITEM_FLAG,
8098 NULL, msii.STYLE_ITEM_FLAG,
8099 'N', 'N',
8100 'Y', 'Y'
8101 ),
8102 NVL(MAX(msik.STYLE_ITEM_ID), msii.STYLE_ITEM_ID),
8103 NVL(msii.INVENTORY_ITEM_ID, MAX(msik.INVENTORY_ITEM_ID))
8104 FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_PARAMETERS mp
8105 WHERE (msii.INVENTORY_ITEM_ID = msik.INVENTORY_ITEM_ID
8106 OR msii.ITEM_NUMBER = msik.CONCATENATED_SEGMENTS)
8107 AND msik.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
8108 AND msii.ORGANIZATION_ID = mp.ORGANIZATION_ID
8109 )
8110 WHERE SET_PROCESS_ID = p_data_set_id
8111 AND PROCESS_FLAG = 1;
8112
8113 Debug_Conc_Log('Resolve_Child_Entities - Done Resolving Style_Item_Flag, rows processed='||SQL%ROWCOUNT);
8114
8115 Debug_Conc_Log('Resolve_Child_Entities END');
8116 IF FND_API.G_TRUE = p_commit THEN
8117 Debug_Conc_Log('Resolve_Child_Entities COMMITING');
8118 COMMIT;
8119 END IF;
8120 RETURN;
8121 END IF;
8122
8123 l_party_name := Get_Current_Party_Name;
8124
8125 -- getting security predicate
8126 EGO_DATA_SECURITY.get_security_predicate(
8127 p_api_version => 1.0
8128 ,p_function => 'EGO_EDIT_SS_ITEM_XREFS'
8129 ,p_object_name => 'EGO_ITEM'
8130 ,p_user_name => l_party_name
8131 ,p_statement_type => 'EXISTS'
8132 ,p_pk1_alias => 'APPLYSEC.INVENTORY_ITEM_ID'
8133 ,p_pk2_alias => l_org_id
8134 ,x_predicate => l_security_predicate
8135 ,x_return_status => l_return_status
8136 );
8137
8138 Debug_Conc_Log('Resolve_Child_Entities - Security Predicate = '||l_security_predicate);
8139 IF NVL(l_import_xref_only, 'N') = 'Y' THEN
8140 Debug_Conc_Log('Resolve_Child_Entities - Import Cross References Only is true' );
8141 IF l_security_predicate IS NULL THEN
8142 RETURN;
8143 ELSE
8144 Debug_Conc_Log('Resolve_Child_Entities - Checking data security');
8145 -- For CN case, if one is importing cross-references only, the new item would not be
8146 -- created. Thus, there's no need to check security on the cross-references.
8147
8148 -- CC/CM:
8149 -- old link and new link are the same:
8150 l_sql := q'#
8151 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8152 SET PROCESS_FLAG = 33390
8153 WHERE SET_PROCESS_ID = :p_data_set_id
8154 AND PROCESS_FLAG = 0
8155 AND ORGANIZATION_ID = :org_id
8156 AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8157 AND EXISTS
8158 (SELECT 1
8159 FROM MTL_CROSS_REFERENCES_VL APPLYSEC
8160 WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8161 AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8162 AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8163 AND APPLYSEC.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8164 AND (APPLYSEC.DESCRIPTION <> MSII.SOURCE_SYSTEM_REFERENCE_DESC OR
8165 (APPLYSEC.DESCRIPTION IS NULL AND MSII.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL))
8166 AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8167 AND NOT #' || l_security_predicate || ' )';
8168
8169 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8170
8171 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on the link where old link and new link are the same and
8172 source system reference desc is being updated');
8173 -- old link and new link are not the same:
8174 -- check edit privilege on old item link (if any)
8175 l_sql := q'#
8176 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8177 SET PROCESS_FLAG = 33391
8178 WHERE SET_PROCESS_ID = :p_data_set_id
8179 AND PROCESS_FLAG = 0
8180 AND ORGANIZATION_ID = :org_id
8181 AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8182 AND EXISTS ( SELECT 1
8183 FROM MTL_CROSS_REFERENCES_B APPLYSEC
8184 WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8185 AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8186 AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8187 AND APPLYSEC.INVENTORY_ITEM_ID <> MSII.INVENTORY_ITEM_ID
8188 AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8189 AND NOT #' || l_security_predicate || ' )';
8190
8191 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8192
8193 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on old item link (if any) where old link and new link are not the same' );
8194 -- old link and new link are not the same:
8195 -- check edit privilege on new item link
8196 l_sql := q'#
8197 UPDATE MTL_SYSTEM_ITEMS_INTERFACE APPLYSEC
8198 SET PROCESS_FLAG = 33390
8199 WHERE SET_PROCESS_ID = :p_data_set_id
8200 AND PROCESS_FLAG = 0
8201 AND ORGANIZATION_ID = :org_id
8202 AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8203 AND NOT #' || l_security_predicate || q'#
8204 AND APPLYSEC.INVENTORY_ITEM_ID IS NOT NULL
8205 AND LNNVL (APPLYSEC.INVENTORY_ITEM_ID =
8206 (SELECT XREF.INVENTORY_ITEM_ID
8207 FROM MTL_CROSS_REFERENCES_B XREF
8208 WHERE XREF.CROSS_REFERENCE = APPLYSEC.SOURCE_SYSTEM_REFERENCE
8209 AND XREF.SOURCE_SYSTEM_ID = APPLYSEC.SOURCE_SYSTEM_ID
8210 AND XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8211 AND SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE-1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1))) #';
8212
8213 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8214
8215 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on new item link where old link and new link are not the same' );
8216
8217 FOR i IN c_no_privilege_rows LOOP
8218 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8219 FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8220 FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8221 l_msg_text := FND_MESSAGE.GET;
8222
8223 dumm_status := INVPUOPI.mtl_log_interface_err(
8224 i.ORGANIZATION_ID
8225 ,l_user_id
8226 ,l_login_id
8227 ,l_prog_appid
8228 ,l_prog_id
8229 ,l_request_id
8230 ,i.TRANSACTION_ID
8231 ,l_msg_text
8232 ,'SOURCE_SYSTEM_REFERENCE'
8233 ,'MTL_SYSTEM_ITEMS_INTERFACE'
8234 ,'INV_IOI_ERR_NO_ED_XREF_PRIV_2'--bug 11894684, replace INV_IOI_ERR
8235 ,l_err_text);
8236
8237 END LOOP;
8238
8239 FOR i IN c_old_xref_no_priv_row LOOP
8240 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8241 FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8242 FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8243 l_msg_text := FND_MESSAGE.GET;
8244
8245 dumm_status := INVPUOPI.mtl_log_interface_err(
8246 i.ORGANIZATION_ID
8247 ,l_user_id
8248 ,l_login_id
8249 ,l_prog_appid
8250 ,l_prog_id
8251 ,l_request_id
8252 ,i.TRANSACTION_ID
8253 ,l_msg_text
8254 ,'SOURCE_SYSTEM_REFERENCE'
8255 ,'MTL_SYSTEM_ITEMS_INTERFACE'
8256 ,'INV_IOI_ERR_NO_ED_XREF_PRIV_3'--bug 11894684, replace INV_IOI_ERR
8257 ,l_err_text);
8258 END LOOP;
8259
8260 Debug_Conc_Log( 'Resolve_Child_Entities - After logging errors for records without privilege' );
8261
8262 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8263 SET PROCESS_FLAG = 3
8264 WHERE SET_PROCESS_ID = p_data_set_id
8265 AND PROCESS_FLAG IN (33390, 33391)
8266 AND CONFIRM_STATUS IN ( 'CM', 'CC', 'CN', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8267 AND ORGANIZATION_ID = l_org_id;
8268
8269 Debug_Conc_Log( 'Resolve_Child_Entities - After erroring out records without privilege' );
8270
8271 IF FND_API.G_TRUE = p_commit THEN
8272 Debug_Conc_Log( 'Resolve_Child_Entities COMMITING' );
8273 COMMIT;
8274 END IF;
8275
8276 RETURN;
8277 END IF; --IF l_security_predicate IS NULL THEN
8278 END IF; --IF NVL(l_import_xref_only, 'N') = 'Y' THEN
8279
8280 -- resolving transaction type for revisions
8281 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8282 SET TRANSACTION_TYPE = (
8283 SELECT
8284 (CASE
8285 WHEN MSII.CONFIRM_STATUS = 'CN'
8286 THEN 'CREATE'
8287 WHEN (MSII.CONFIRM_STATUS IN ( 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8288 AND EXISTS (SELECT NULL
8289 FROM MTL_ITEM_REVISIONS_B MIR
8290 WHERE MIR.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8291 AND MIR.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8292 AND MIR.REVISION = MIRI.REVISION) )
8293 THEN 'UPDATE'
8294 ELSE 'CREATE'
8295 END)
8296 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8297 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8298 AND MSII.PROCESS_FLAG = 0
8299 AND MSII.CONFIRM_STATUS IN ('CN', 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE)
8300 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8301 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8302 AND MSII.ORGANIZATION_ID = l_org_id
8303 AND ROWNUM = 1
8304 )
8305 WHERE MIRI.PROCESS_FLAG = 0
8306 AND MIRI.SET_PROCESS_ID = p_data_set_id
8307 AND EXISTS (SELECT NULL
8308 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8309 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8310 AND MSII.PROCESS_FLAG = 0
8311 AND MSII.CONFIRM_STATUS IN ( 'CN', 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8312 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8313 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8314 AND MSII.ORGANIZATION_ID = l_org_id);
8315
8316 Debug_Conc_Log('Resolve_Child_Entities - After resolving transaction_type for revisions' );
8317
8318 -- update the confirm status to ready for all READY CN records
8319 UPDATE
8320 MTL_SYSTEM_ITEMS_INTERFACE MSII
8321 SET CONFIRM_STATUS = (
8322 CASE
8323 WHEN (MSII.DESCRIPTION IS NULL
8324 AND NOT EXISTS
8325 (SELECT NULL
8326 FROM MTL_ITEM_TEMPLATES_VL TEMP,
8327 MTL_ITEM_TEMPL_ATTRIBUTES ATTR
8328 WHERE ((MSII.TEMPLATE_ID IS NOT NULL AND TEMP.TEMPLATE_ID = MSII.TEMPLATE_ID)
8329 OR (MSII.TEMPLATE_ID IS NULL AND TEMP.TEMPLATE_NAME = MSII.TEMPLATE_NAME)
8330 )
8331 AND (TEMP.CONTEXT_ORGANIZATION_ID = MSII.ORGANIZATION_ID OR TEMP.CONTEXT_ORGANIZATION_ID IS NULL)
8332 AND TEMP.TEMPLATE_ID = ATTR.TEMPLATE_ID
8333 AND ATTR.ENABLED_FLAG = 'Y'
8334 AND ATTR.ATTRIBUTE_NAME = 'MTL_SYSTEM_ITEMS.DESCRIPTION'
8335 )
8336 AND 'F' <>
8337 (SELECT DECODE(MSII.STYLE_ITEM_FLAG, 'Y', 'ZZZ', (MAX(ICC.ITEM_DESC_GEN_METHOD) KEEP (DENSE_RANK FIRST ORDER BY LEVEL) ) ) AS ITEM_DESC_GEN_METHOD
8338 FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8339 WHERE ICC.ITEM_DESC_GEN_METHOD IS NOT NULL
8340 AND ICC.ITEM_DESC_GEN_METHOD <> 'I'
8341 CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8342 START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8343 )
8344 )
8345 THEN CONFIRM_STATUS
8346 WHEN
8347 (MSII.ITEM_NUMBER IS NULL AND MSII.ITEM_CATALOG_GROUP_ID IS NULL)
8348 THEN CONFIRM_STATUS
8349 WHEN
8350 ( MSII.ITEM_CATALOG_GROUP_ID IS NOT NULL
8351 AND MSII.ITEM_NUMBER IS NULL
8352 AND (SELECT DECODE(MSII.STYLE_ITEM_FLAG, 'Y', 'ZZZ', (MAX(ICC.ITEM_NUM_GEN_METHOD) KEEP (DENSE_RANK FIRST ORDER BY LEVEL) ) ) AS ITEM_NUM_GEN_METHOD
8353 FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8354 WHERE ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
8355 AND ICC.ITEM_NUM_GEN_METHOD <> 'I'
8356 CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8357 START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8358 ) NOT IN ('S', 'F')
8359 )
8360 THEN CONFIRM_STATUS
8361 ELSE CONFIRM_STATUS||'R'
8362 END
8363 )
8364 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8365 AND MSII.PROCESS_FLAG = 0
8366 AND MSII.ORGANIZATION_ID = l_org_id
8367 AND MSII.CONFIRM_STATUS = 'CN';
8368
8369 Debug_Conc_Log('Resolve_Child_Entities - After updating confirm status to CNR' );
8370 -- for all records with confirm_status = CN and item_number is null and is sequence generated
8371 -- update the item_number column.
8372
8373 -- eletuchy:
8374 -- The item number must be generated here because the IOI doesn't know anything about source system references.
8375 -- Therefore, the parent-child linkages must be reported to IOI via inventory_item_id and item_number columns.
8376 -- For CN items with sequence-generated item_numbers, neither inventory_item_id not item_number contain any info,
8377 -- so IOI wouldn't know about the parent-child linkages unless the item number generation occurs here.
8378
8379 -- dsakalle: For R12C, bug 6113606
8380 -- We are not honoring user entered item number values from R12C
8381 -- so the overwriting of item number must happen only from IOI
8382 /*
8383 UPDATE
8384 MTL_SYSTEM_ITEMS_INTERFACE MSII
8385 SET ITEM_NUMBER = EGO_IMPORT_PVT.GET_NEXT_ITEM_NUMBER(MSII.ITEM_CATALOG_GROUP_ID)
8386 WHERE MSII.ITEM_CATALOG_GROUP_ID IS NOT NULL
8387 AND MSII.ITEM_NUMBER IS NULL
8388 AND MSII.SET_PROCESS_ID = p_data_set_id
8389 AND MSII.PROCESS_FLAG = 0
8390 AND MSII.CONFIRM_STATUS = 'CNR'
8391 AND MSII.ORGANIZATION_ID = l_org_id
8392 AND 'S' = ( SELECT MAX( ICC.ITEM_NUM_GEN_METHOD ) KEEP (DENSE_RANK FIRST ORDER BY LEVEL)
8393 FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8394 WHERE ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
8395 AND ICC.ITEM_NUM_GEN_METHOD <> 'I'
8396 CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8397 START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8398 );
8399
8400 Debug_Conc_Log('Resolve_Child_Entities - After updating Sequence Generated Item Numbers' );
8401 */
8402 -- update all records with confirm_status='CC', 'CM' to ready, where conditions are satisfied
8403 UPDATE
8404 MTL_SYSTEM_ITEMS_INTERFACE MSII
8405 SET CONFIRM_STATUS = (
8406 CASE
8407 WHEN
8408 (NVL(MSII.REVISION_IMPORT_POLICY, l_import_policy) = 'N' AND
8409 1 <> (SELECT COUNT(*)
8410 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8411 WHERE MIRI.SET_PROCESS_ID = MSII.SET_PROCESS_ID
8412 AND MIRI.PROCESS_FLAG = 0
8413 AND MIRI.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8414 AND MIRI.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8415 AND MIRI.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8416 AND MIRI.REVISION IS NOT NULL
8417 AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8418 AND UPPER(MIRI.TRANSACTION_TYPE) = 'CREATE'))
8419 THEN CONFIRM_STATUS
8420 ELSE CONFIRM_STATUS||'R'
8421 END
8422 )
8423 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8424 AND MSII.PROCESS_FLAG = 0
8425 AND MSII.ORGANIZATION_ID = l_org_id
8426 AND MSII.CONFIRM_STATUS IN ('CC', 'CM');
8427
8428 UPDATE
8429 MTL_SYSTEM_ITEMS_INTERFACE MSII
8430 SET CONFIRM_STATUS = (
8431 CASE
8432 WHEN ( NVL(MSII.REVISION_IMPORT_POLICY, l_import_policy) = 'N' AND
8433 1 <> (SELECT COUNT(*)
8434 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8435 WHERE MIRI.SET_PROCESS_ID = MSII.SET_PROCESS_ID
8436 AND MIRI.PROCESS_FLAG = 0
8437 AND MIRI.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8438 AND MIRI.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8439 AND MIRI.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8440 AND MIRI.REVISION IS NOT NULL
8441 AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8442 AND UPPER(MIRI.TRANSACTION_TYPE) = G_TRANS_TYPE_CREATE )
8443 )
8444 THEN CONFIRM_STATUS
8445 ELSE G_FAKE_MATCH_READY
8446 END
8447 )
8448 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8449 AND MSII.PROCESS_FLAG = 0
8450 AND MSII.ORGANIZATION_ID = l_org_id
8451 AND MSII.CONFIRM_STATUS IN ( G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE );
8452
8453 Debug_Conc_Log('Resolve_Child_Entities - After updating confirm status to CMR or CCR' );
8454
8455 IF l_security_predicate IS NOT NULL THEN
8456 Debug_Conc_Log('Resolve_Child_Entities - Need to check privilege' );
8457 -- For the confirmed new case, if there exists an active cross reference which you cannot break
8458 -- update process_flag to 33391
8459 l_sql := q'#
8460 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8461 SET PROCESS_FLAG = 33391
8462 WHERE SET_PROCESS_ID = :p_data_set_id
8463 AND PROCESS_FLAG = 0
8464 AND ORGANIZATION_ID = :org_id
8465 AND CONFIRM_status = 'CNR'
8466 AND EXISTS ( SELECT 1 FROM MTL_CROSS_REFERENCES_B APPLYSEC
8467 WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8468 AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8469 AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8470 AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8471 AND NOT #' || l_security_predicate || ' )';
8472
8473 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8474
8475 Debug_Conc_Log('Resolve_Child_Entities - After checking for CNR' );
8476 -- CC/CM:
8477 -- old link and new link are the same:
8478 l_sql := q'#
8479 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8480 SET PROCESS_FLAG = 33390
8481 WHERE SET_PROCESS_ID = :p_data_set_id
8482 AND PROCESS_FLAG = 0
8483 AND ORGANIZATION_ID = :org_id
8484 AND CONFIRM_STATUS IN ('CCR', 'CMR', 'FMR' )
8485 AND EXISTS
8486 (SELECT 1
8487 FROM MTL_CROSS_REFERENCES_VL APPLYSEC
8488 WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8489 AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8490 AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8491 AND APPLYSEC.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8492 AND (APPLYSEC.DESCRIPTION <> MSII.SOURCE_SYSTEM_REFERENCE_DESC OR
8493 (APPLYSEC.DESCRIPTION IS NULL AND MSII.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL))
8494 AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8495 AND NOT #' || l_security_predicate || ' )';
8496
8497 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8498
8499 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on the link where old link and new link are the same and
8500 source system reference desc is being updated' );
8501 -- old link and new link are not the same:
8502 -- check edit privilege on old item link (if any)
8503 l_sql := q'#
8504 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8505 SET PROCESS_FLAG = 33391
8506 WHERE SET_PROCESS_ID = :p_data_set_id
8507 AND PROCESS_FLAG = 0
8508 AND ORGANIZATION_ID = :org_id
8509 AND CONFIRM_STATUS IN ( 'CCR', 'CMR', 'FMR' )
8510 AND EXISTS ( SELECT 1
8511 FROM MTL_CROSS_REFERENCES_B APPLYSEC
8512 WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8513 AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8514 AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8515 AND APPLYSEC.INVENTORY_ITEM_ID <> MSII.INVENTORY_ITEM_ID
8516 AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8517 AND NOT #' || l_security_predicate || ' )';
8518
8519 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8520
8521 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on old item link (if any) where old link and new link are not the same' );
8522
8523 -- old link and new link are not the same:
8524 -- check edit privilege on new item link
8525 l_sql := q'#
8526 UPDATE MTL_SYSTEM_ITEMS_INTERFACE APPLYSEC
8527 SET PROCESS_FLAG = 33390
8528 WHERE SET_PROCESS_ID = :p_data_set_id
8529 AND PROCESS_FLAG = 0
8530 AND ORGANIZATION_ID = :org_id
8531 AND CONFIRM_STATUS IN ( 'CCR', 'CMR', 'FMR' )
8532 AND NOT #' || l_security_predicate || q'#
8533 AND APPLYSEC.INVENTORY_ITEM_ID IS NOT NULL
8534 AND LNNVL (APPLYSEC.INVENTORY_ITEM_ID =
8535 (SELECT XREF.INVENTORY_ITEM_ID
8536 FROM MTL_CROSS_REFERENCES_B XREF
8537 WHERE XREF.CROSS_REFERENCE = APPLYSEC.SOURCE_SYSTEM_REFERENCE
8538 AND XREF.SOURCE_SYSTEM_ID = APPLYSEC.SOURCE_SYSTEM_ID
8539 AND XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8540 AND SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE-1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1))) #';
8541
8542 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8543
8544 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on new item link where old link and new link are not the same' );
8545
8546 Debug_Conc_Log( 'Resolve_Child_Entities - After updating records without privilege to status 33390' );
8547
8548 FOR i IN c_no_privilege_rows LOOP
8549 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8550 FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8551 FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8552 l_msg_text := FND_MESSAGE.GET;
8553
8554
8555
8556 dumm_status := INVPUOPI.mtl_log_interface_err(
8557 i.ORGANIZATION_ID
8558 ,l_user_id
8559 ,l_login_id
8560 ,l_prog_appid
8561 ,l_prog_id
8562 ,l_request_id
8563 ,i.TRANSACTION_ID
8564 ,l_msg_text
8565 ,'SOURCE_SYSTEM_REFERENCE'
8566 ,'MTL_SYSTEM_ITEMS_INTERFACE'
8567 ,'INV_IOI_ERR_NO_ED_XREF_PRIV_4'--bug 11894684, replace INV_IOI_ERR
8568 ,l_err_text);
8569 END LOOP;
8570
8571 FOR i IN c_old_xref_no_priv_row LOOP
8572 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8573 FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8574 FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8575 l_msg_text := FND_MESSAGE.GET;
8576
8577 dumm_status := INVPUOPI.mtl_log_interface_err(
8578 i.ORGANIZATION_ID
8579 ,l_user_id
8580 ,l_login_id
8581 ,l_prog_appid
8582 ,l_prog_id
8583 ,l_request_id
8584 ,i.TRANSACTION_ID
8585 ,l_msg_text
8586 ,'SOURCE_SYSTEM_REFERENCE'
8587 ,'MTL_SYSTEM_ITEMS_INTERFACE'
8588 ,'INV_IOI_ERR_NO_ED_XREF_PRIV_5'--bug 11894684, replace INV_IOI_ERR
8589 ,l_err_text);
8590 END LOOP;
8591
8592 Debug_Conc_Log('Resolve_Child_Entities - After logging errors for no privilege' );
8593 END IF; --IF l_security_predicate IS NOT NULL THEN
8594
8595 -- ELETUCHY XXX: seems wasteful to overwrite transaction type to sync rather than update, no?
8596 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8597 SET PROCESS_FLAG = 1
8598 , TRANSACTION_TYPE = CASE
8599 WHEN CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8600 ELSE G_TRANS_TYPE_UPDATE
8601 END
8602 -- ELETUCHY Bug 5316904: Should not attempt to change ICC from source system batch
8603 , ITEM_CATALOG_GROUP_ID = CASE
8604 WHEN CONFIRM_STATUS = 'CNR' THEN ITEM_CATALOG_GROUP_ID
8605 ELSE NULL
8606 END
8607 , ITEM_CATALOG_GROUP_NAME = CASE
8608 WHEN CONFIRM_STATUS = 'CNR' THEN ITEM_CATALOG_GROUP_NAME
8609 ELSE NULL
8610 END
8611 WHERE SET_PROCESS_ID = p_data_set_id
8612 AND PROCESS_FLAG = 0
8613 AND CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR' )
8614 AND ORGANIZATION_ID = l_org_id;
8615
8616 -- ELETUCHY: these fake rows will never be processed by IOI, so putting trans_type to UPDATE is reasonable
8617 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8618 SET PROCESS_FLAG = 1,
8619 TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE,
8620 CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG
8621 WHERE SET_PROCESS_ID = p_data_set_id
8622 AND PROCESS_FLAG = 0
8623 AND CONFIRM_STATUS = G_FAKE_MATCH_READY
8624 AND ORGANIZATION_ID = l_org_id;
8625
8626 Debug_Conc_Log('Resolve_Child_Entities - Done with master item rows' );
8627
8628 -- updating item_number, item_id from MSII table
8629 -- for child items
8630 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8631 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER, ITEM_CATALOG_GROUP_ID, ITEM_CATALOG_GROUP_NAME, STYLE_ITEM_FLAG, STYLE_ITEM_ID ) =
8632 (SELECT
8633 1,
8634 (CASE
8635 WHEN MSII2.CONFIRM_STATUS = 'CNR'
8636 THEN 'CREATE'
8637 ELSE 'SYNC'
8638 END),
8639 MSII2.INVENTORY_ITEM_ID,
8640 MSII2.ITEM_NUMBER,
8641 MSII2.ITEM_CATALOG_GROUP_ID,
8642 MSII2.ITEM_CATALOG_GROUP_NAME,
8643 NVL(MSII.STYLE_ITEM_FLAG, MSII2.STYLE_ITEM_FLAG),
8644 NVL(MSII.STYLE_ITEM_ID, MSII2.STYLE_ITEM_ID)
8645 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
8646 WHERE MSII2.SET_PROCESS_ID = p_data_set_id
8647 AND MSII2.PROCESS_FLAG = 1
8648 AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8649 AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8650 AND MSII2.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8651 AND MSII2.ORGANIZATION_ID = l_org_id
8652 AND ROWNUM = 1
8653 )
8654 WHERE MSII.PROCESS_FLAG = 0
8655 AND MSII.CONFIRM_STATUS IS NULL
8656 AND MSII.SET_PROCESS_ID = p_data_set_id
8657 AND EXISTS (SELECT NULL FROM MTL_PARAMETERS mp
8658 WHERE mp.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8659 AND mp.MASTER_ORGANIZATION_ID = l_org_id
8660 AND mp.MASTER_ORGANIZATION_ID <> mp.ORGANIZATION_ID
8661 )
8662 AND EXISTS (SELECT NULL
8663 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
8664 WHERE MSII2.SET_PROCESS_ID = p_data_set_id
8665 AND MSII2.PROCESS_FLAG = 1
8666 AND MSII2.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8667 AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8668 AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8669 AND MSII2.ORGANIZATION_ID = l_org_id);
8670
8671 Debug_Conc_Log('Resolve_Child_Entities - After resolving child items' );
8672
8673 -- updating item_number, item_id from MSII table
8674 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8675 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8676 (SELECT
8677 1,
8678 (CASE
8679 WHEN MSII.CONFIRM_STATUS = 'CNR'
8680 THEN 'CREATE'
8681 WHEN MIRI.TRANSACTION_TYPE <> 'SYNC'
8682 THEN MIRI.TRANSACTION_TYPE
8683 WHEN EXISTS (SELECT 1
8684 FROM MTL_ITEM_REVISIONS_B MIR
8685 WHERE MIR.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8686 AND MIR.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8687 AND MIR.REVISION = MIRI.REVISION)
8688 THEN 'UPDATE'
8689 ELSE 'CREATE'
8690 END),
8691 MSII.INVENTORY_ITEM_ID,
8692 MSII.ITEM_NUMBER
8693 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8694 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8695 AND MSII.PROCESS_FLAG = 1
8696 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8697 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8698 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8699 AND MSII.ORGANIZATION_ID = l_org_id
8700 AND ROWNUM = 1
8701 )
8702 WHERE MIRI.PROCESS_FLAG = 0
8703 AND MIRI.SET_PROCESS_ID = p_data_set_id
8704 AND EXISTS (SELECT NULL
8705 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8706 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8707 AND MSII.PROCESS_FLAG = 1
8708 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8709 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8710 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8711 AND MSII.ORGANIZATION_ID = l_org_id);
8712
8713 Debug_Conc_Log('Resolve_Child_Entities - After resolving revision rows' );
8714 -- updating item_number, item_id from MSII table
8715 UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
8716 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8717 (SELECT
8718 1,
8719 (CASE
8720 WHEN MSII.CONFIRM_STATUS = 'CNR'
8721 THEN 'CREATE'
8722 ELSE MICI.TRANSACTION_TYPE
8723 END),
8724 MSII.INVENTORY_ITEM_ID,
8725 MSII.ITEM_NUMBER
8726 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8727 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8728 AND MSII.PROCESS_FLAG = 1
8729 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8730 AND MSII.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
8731 AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
8732 AND MSII.ORGANIZATION_ID = l_org_id
8733 AND ROWNUM = 1
8734 )
8735 WHERE MICI.PROCESS_FLAG = 0
8736 AND MICI.SET_PROCESS_ID = p_data_set_id
8737 AND EXISTS (SELECT NULL
8738 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8739 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8740 AND MSII.PROCESS_FLAG = 1
8741 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8742 AND MSII.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
8743 AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
8744 AND MSII.ORGANIZATION_ID = l_org_id);
8745
8746 Debug_Conc_Log('Resolve_Child_Entities - After resolving categories rows' );
8747 -- updating item_number, item_id from MSII table
8748 UPDATE EGO_ITM_USR_ATTR_INTRFC ATTRS
8749 SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER, ITEM_CATALOG_GROUP_ID) =
8750 (SELECT
8751 1,
8752 (CASE
8753 WHEN UPPER(ATTRS.TRANSACTION_TYPE) = G_TRANS_TYPE_DELETE THEN G_TRANS_TYPE_DELETE
8754 WHEN MSII.CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8755 ELSE G_TRANS_TYPE_SYNC
8756 END),
8757 MSII.INVENTORY_ITEM_ID,
8758 MSII.ITEM_NUMBER,
8759 NVL(ATTRS.ITEM_CATALOG_GROUP_ID, MSII.ITEM_CATALOG_GROUP_ID)
8760 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8761 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8762 AND MSII.PROCESS_FLAG = 1
8763 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8764 AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8765 AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8766 AND MSII.ORGANIZATION_ID = l_org_id
8767 AND ROWNUM = 1
8768 )
8769 WHERE ATTRS.PROCESS_STATUS = 0
8770 AND ATTRS.DATA_SET_ID = p_data_set_id
8771 AND EXISTS (SELECT NULL
8772 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8773 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8774 AND MSII.PROCESS_FLAG = 1
8775 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8776 AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8777 AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8778 AND MSII.ORGANIZATION_ID = l_org_id);
8779
8780 Debug_Conc_Log('Resolve_Child_Entities - After resolving user defined attrs rows' );
8781
8782 UPDATE EGO_ITM_USR_ATTR_INTRFC ATTRS
8783 SET REVISION = (
8784 CASE (SELECT
8785 CASE
8786 WHEN MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8787 AND (MSII.REVISION_IMPORT_POLICY = 'L' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'L'))
8788 THEN '1'
8789 WHEN MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8790 AND (MSII.REVISION_IMPORT_POLICY = 'N' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'N'))
8791 THEN '2'
8792 WHEN MSII.CONFIRM_STATUS = 'CNR'
8793 THEN '3'
8794 END
8795 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8796 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8797 AND MSII.PROCESS_FLAG = 1
8798 AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8799 AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8800 AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8801 AND MSII.ORGANIZATION_ID = l_org_id
8802 )
8803 WHEN '1'
8804 THEN (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC)
8805 FROM MTL_ITEM_REVISIONS_B
8806 WHERE INVENTORY_ITEM_ID = ATTRS.INVENTORY_ITEM_ID
8807 AND ORGANIZATION_ID = ATTRS.ORGANIZATION_ID)
8808 WHEN '2'
8809 THEN (SELECT REVISION
8810 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8811 WHERE MIRI.SET_PROCESS_ID = ATTRS.DATA_SET_ID
8812 AND MIRI.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8813 AND MIRI.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8814 AND MIRI.ORGANIZATION_ID = ATTRS.ORGANIZATION_ID
8815 AND MIRI.REVISION IS NOT NULL
8816 AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8817 AND UPPER(MIRI.TRANSACTION_TYPE) = 'CREATE'
8818 AND ROWNUM = 1
8819 )
8820 WHEN '3'
8821 THEN (SELECT STARTING_REVISION
8822 FROM MTL_PARAMETERS
8823 WHERE ORGANIZATION_ID = ATTRS.ORGANIZATION_ID
8824 )
8825 END)
8826 WHERE ATTRS.PROCESS_STATUS = 1
8827 AND ATTRS.DATA_SET_ID = p_data_set_id
8828 AND ATTRS.REVISION IS NULL
8829 AND EXISTS (SELECT NULL
8830 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8831 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8832 AND MSII.PROCESS_FLAG = 1
8833 AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8834 AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8835 AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8836 AND MSII.ORGANIZATION_ID = l_org_id)
8837 AND EXISTS (SELECT NULL
8838 FROM EGO_OBJ_AG_ASSOCS_B A, EGO_FND_DSC_FLX_CTX_EXT EXT
8839 WHERE A.ATTR_GROUP_ID = EXT.ATTR_GROUP_ID
8840 AND A.OBJECT_ID = (SELECT OBJECT_ID FROM FND_OBJECTS WHERE OBJ_NAME = 'EGO_ITEM')
8841 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = ATTRS.ATTR_GROUP_INT_NAME
8842 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL(ATTRS.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
8843 AND EXT.APPLICATION_ID = 431
8844 AND A.DATA_LEVEL = 'ITEM_REVISION_LEVEL');
8845
8846 Debug_Conc_Log('Resolve_Child_Entities - After resolving user attrs intf table for revision' );
8847 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8848 SET (REVISION, TRANSACTION_TYPE) =
8849 (SELECT
8850 (CASE
8851 WHEN (EXISTS (SELECT NULL
8852 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8853 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8854 AND MSII.PROCESS_FLAG = 1
8855 AND MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8856 AND (MSII.REVISION_IMPORT_POLICY = 'L' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'L'))
8857 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8858 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8859 AND MSII.ORGANIZATION_ID = l_org_id)
8860 )
8861 THEN (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC)
8862 FROM MTL_ITEM_REVISIONS_B
8863 WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
8864 AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
8865 WHEN (EXISTS (SELECT NULL
8866 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8867 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8868 AND MSII.PROCESS_FLAG = 1
8869 AND MSII.CONFIRM_STATUS = 'CNR'
8870 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8871 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8872 AND MSII.ORGANIZATION_ID = l_org_id)
8873 )
8874 THEN (SELECT STARTING_REVISION
8875 FROM MTL_PARAMETERS
8876 WHERE ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8877 )
8878 END) AS REVISION,
8879 'SYNC' AS TRANSACTION_TYPE
8880 FROM DUAL)
8881 WHERE MIRI.PROCESS_FLAG = 1
8882 AND MIRI.SET_PROCESS_ID = p_data_set_id
8883 AND MIRI.REVISION IS NULL
8884 AND EXISTS (SELECT NULL
8885 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8886 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8887 AND MSII.PROCESS_FLAG = 1
8888 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8889 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8890 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8891 AND MSII.ORGANIZATION_ID = l_org_id);
8892
8893 Debug_Conc_Log('Resolve_Child_Entities - After resolving item revisions interface table for revision' );
8894 -- updating item_number, item_id from MSII table
8895 UPDATE EGO_ITEM_PEOPLE_INTF EIPI
8896 SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8897 (SELECT
8898 1,
8899 (CASE
8900 WHEN MSII.CONFIRM_STATUS = 'CNR'
8901 THEN 'CREATE'
8902 ELSE 'SYNC'
8903 END),
8904 MSII.INVENTORY_ITEM_ID,
8905 MSII.ITEM_NUMBER
8906 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8907 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8908 AND MSII.PROCESS_FLAG = 1
8909 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8910 AND MSII.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
8911 AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
8912 AND MSII.ORGANIZATION_ID = l_org_id
8913 AND ROWNUM = 1
8914 )
8915 WHERE EIPI.PROCESS_STATUS = 0
8916 AND EIPI.DATA_SET_ID = p_data_set_id
8917 AND EXISTS (SELECT NULL
8918 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8919 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8920 AND MSII.PROCESS_FLAG = 1
8921 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8922 AND MSII.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
8923 AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
8924 AND MSII.ORGANIZATION_ID = l_org_id);
8925
8926 Debug_Conc_Log('Resolve_Child_Entities - After resolving item people rows' );
8927 -- updating item_number, item_id from MSII table
8928 UPDATE EGO_AML_INTF EAI
8929 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8930 (SELECT
8931 1,
8932 (CASE
8933 WHEN UPPER(EAI.TRANSACTION_TYPE) = G_TRANS_TYPE_DELETE THEN G_TRANS_TYPE_DELETE
8934 WHEN MSII.CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8935 ELSE G_TRANS_TYPE_SYNC
8936 END),
8937 MSII.INVENTORY_ITEM_ID,
8938 MSII.ITEM_NUMBER
8939 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8940 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8941 AND MSII.PROCESS_FLAG = 1
8942 AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8943 AND MSII.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
8944 AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
8945 AND MSII.ORGANIZATION_ID = l_org_id
8946 AND ROWNUM = 1
8947 )
8948 WHERE EAI.PROCESS_FLAG = 0
8949 AND EAI.DATA_SET_ID = p_data_set_id
8950 AND EXISTS (SELECT NULL
8951 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8952 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8953 AND MSII.PROCESS_FLAG = 1
8954 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8955 AND MSII.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
8956 AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
8957 AND MSII.ORGANIZATION_ID = l_org_id);
8958
8959 Debug_Conc_Log( 'Resolve_Child_Entities - After resolving aml rows' );
8960
8961 -- updating item_number, item_id from MSII table
8962 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
8963 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8964 (SELECT
8965 1,
8966 (CASE
8967 WHEN MSII.CONFIRM_STATUS = 'CNR'
8968 THEN 'CREATE'
8969 ELSE EIAI.TRANSACTION_TYPE
8970 END),
8971 MSII.INVENTORY_ITEM_ID,
8972 MSII.ITEM_NUMBER
8973 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8974 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8975 AND MSII.PROCESS_FLAG = 1
8976 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8977 AND MSII.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
8978 AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
8979 AND MSII.ORGANIZATION_ID = l_org_id
8980 AND ROWNUM = 1
8981 )
8982 WHERE EIAI.PROCESS_FLAG = 0
8983 AND EIAI.BATCH_ID = p_data_set_id
8984 AND EXISTS (SELECT NULL
8985 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8986 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8987 AND MSII.PROCESS_FLAG = 1
8988 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8989 AND MSII.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
8990 AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
8991 AND MSII.ORGANIZATION_ID = l_org_id);
8992
8993 Debug_Conc_Log('Resolve_Child_Entities - After resolving intersection rows' );
8994 -- getting security predicate
8995 EGO_DATA_SECURITY.get_security_predicate(
8996 p_api_version => 1.0
8997 ,p_function => 'EGO_VIEW_SS_ITEM_XREFS'
8998 ,p_object_name => 'EGO_ITEM'
8999 ,p_user_name => l_party_name
9000 ,p_statement_type => 'EXISTS'
9001 ,p_pk1_alias => 'MCR.INVENTORY_ITEM_ID'
9002 ,p_pk2_alias => l_org_id
9003 ,x_predicate => l_security_predicate
9004 ,x_return_status => l_return_status
9005 );
9006
9007 IF l_security_predicate IS NULL THEN
9008 l_security_predicate := ' AND 1=1 ';
9009 ELSE
9010 l_security_predicate := ' AND '||l_security_predicate;
9011 END IF;
9012
9013 Debug_Conc_Log('Resolve_Child_Entities - Security Predicate - '||l_security_predicate);
9014
9015 -- updating all the child entities, which do not have parent in mtl_system_items_interface
9016 -- updating the items and org assignments
9017
9018 -- Note that using q'# is a new feature of 10g. By using this syntax, we can put as many single quotes within
9019 -- the string. for example q'# This is Devendra's code #'
9020 l_sql := q'#
9021 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9022 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9023 (SELECT
9024 1,
9025 NVL(MSII.TRANSACTION_TYPE, 'SYNC'),
9026 MCR.INVENTORY_ITEM_ID
9027 FROM MTL_CROSS_REFERENCES_B MCR
9028 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9029 AND MCR.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
9030 AND MCR.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
9031 AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
9032 AND ROWNUM = 1
9033 )
9034 WHERE MSII.SET_PROCESS_ID = :p_data_set_id
9035 AND MSII.PROCESS_FLAG = 0
9036 -- PICK ONLY CHILD ITEMS
9037 AND EXISTS (SELECT NULL
9038 FROM MTL_PARAMETERS MP
9039 WHERE MP.MASTER_ORGANIZATION_ID = :l_org_id
9040 AND MP.ORGANIZATION_ID <> MP.MASTER_ORGANIZATION_ID
9041 AND MP.ORGANIZATION_ID = MSII.ORGANIZATION_ID)
9042 -- CHILD MUST NOT HAVE A MASTER RECORD IN CURRENT BATCH
9043 AND NOT EXISTS (SELECT NULL
9044 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
9045 WHERE MSII2.PROCESS_FLAG in (0, 1, 33390,33391)
9046 AND MSII2.SET_PROCESS_ID = :p_data_set_id1
9047 AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
9048 AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
9049 AND MSII2.ORGANIZATION_ID = :l_org_id1
9050 )
9051 -- HAS A CROSS REFERENCE
9052 AND EXISTS (SELECT NULL
9053 FROM MTL_CROSS_REFERENCES_B MCR
9054 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9055 AND MCR.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
9056 AND MCR.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
9057 AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
9058 #'||l_security_predicate||')';
9059
9060 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id, p_data_set_id, l_org_id;
9061
9062 Debug_Conc_Log('Resolve_Child_Entities - After updating items intf table for child items that has XXref' );
9063
9064 -- updating the item revisions
9065 l_sql := q'#
9066 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
9067 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9068 (SELECT
9069 1,
9070 NVL(MIRI.TRANSACTION_TYPE, 'SYNC'),
9071 MCR.INVENTORY_ITEM_ID
9072 FROM MTL_CROSS_REFERENCES_B MCR
9073 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9074 AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9075 AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
9076 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9077 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9078 AND ROWNUM = 1
9079 )
9080 WHERE MIRI.SET_PROCESS_ID = :p_data_set_id
9081 AND MIRI.PROCESS_FLAG = 0
9082 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9083 AND NOT EXISTS (SELECT NULL
9084 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9085 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9086 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9087 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
9088 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9089 AND MSII.ORGANIZATION_ID = :l_org_id
9090 )
9091 -- HAS A CROSS REFERENCE
9092 AND EXISTS (SELECT NULL
9093 FROM MTL_CROSS_REFERENCES_B MCR
9094 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9095 AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9096 AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
9097 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9098 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9099 #'||l_security_predicate||')';
9100
9101 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9102
9103 Debug_Conc_Log('Resolve_Child_Entities - After updating revisions intf table for items that has XXref' );
9104
9105 -- updating the item revisions where revision is null and revision_import_policy is Update Latest
9106 -- Bug: 5476972
9107 IF l_import_policy = 'L' THEN
9108 l_sql := q'#
9109 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
9110 SET (REVISION, TRANSACTION_TYPE) =
9111 (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC), 'UPDATE'
9112 FROM MTL_ITEM_REVISIONS_B
9113 WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
9114 AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
9115 WHERE MIRI.SET_PROCESS_ID = :p_data_set_id
9116 AND MIRI.PROCESS_FLAG = 1
9117 AND MIRI.REVISION IS NULL
9118 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9119 AND NOT EXISTS (SELECT NULL
9120 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9121 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9122 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9123 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
9124 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9125 AND MSII.ORGANIZATION_ID = :l_org_id
9126 )
9127 -- HAS A CROSS REFERENCE
9128 AND EXISTS (SELECT NULL
9129 FROM MTL_CROSS_REFERENCES_B MCR
9130 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9131 AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9132 AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
9133 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9134 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9135 #'||l_security_predicate||')';
9136
9137 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9138
9139 Debug_Conc_Log('Resolve_Child_Entities - After updating REVISION in revisions intf table for items that has XXref' );
9140 END IF;
9141
9142 -- updating the item category assignments
9143 l_sql := q'#
9144 UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
9145 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9146 (SELECT
9147 1,
9148 MICI.TRANSACTION_TYPE,
9149 MCR.INVENTORY_ITEM_ID
9150 FROM MTL_CROSS_REFERENCES_B MCR
9151 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9152 AND MCR.CROSS_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9153 AND MCR.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
9154 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9155 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9156 AND ROWNUM = 1
9157 )
9158 WHERE MICI.SET_PROCESS_ID = :p_data_set_id
9159 AND MICI.PROCESS_FLAG = 0
9160 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9161 AND NOT EXISTS (SELECT NULL
9162 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9163 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9164 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9165 AND MSII.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
9166 AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9167 AND MSII.ORGANIZATION_ID = :l_org_id
9168 )
9169 -- HAS A CROSS REFERENCE
9170 AND EXISTS (SELECT NULL
9171 FROM MTL_CROSS_REFERENCES_B MCR
9172 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9173 AND MCR.CROSS_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9174 AND MCR.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
9175 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9176 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9177 #'||l_security_predicate||')';
9178
9179 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9180
9181 Debug_Conc_Log('Resolve_Child_Entities - After updating categories intf table for items that has XXref');
9182
9183 -- updating the item people
9184 l_sql := q'#
9185 UPDATE EGO_ITEM_PEOPLE_INTF EIPI
9186 SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9187 (SELECT
9188 1,
9189 NVL(EIPI.TRANSACTION_TYPE, 'SYNC'),
9190 MCR.INVENTORY_ITEM_ID
9191 FROM MTL_CROSS_REFERENCES_B MCR
9192 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9193 AND MCR.CROSS_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9194 AND MCR.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
9195 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9196 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9197 AND ROWNUM = 1
9198 )
9199 WHERE EIPI.DATA_SET_ID = :p_data_set_id
9200 AND EIPI.PROCESS_STATUS = 0
9201 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9202 AND NOT EXISTS (SELECT NULL
9203 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9204 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9205 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9206 AND MSII.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
9207 AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9208 AND MSII.ORGANIZATION_ID = :l_org_id
9209 )
9210 -- HAS A CROSS REFERENCE
9211 AND EXISTS (SELECT NULL
9212 FROM MTL_CROSS_REFERENCES_B MCR
9213 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9214 AND MCR.CROSS_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9215 AND MCR.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
9216 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9217 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9218 #'||l_security_predicate||')';
9219
9220 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9221
9222 Debug_Conc_Log('Resolve_Child_Entities - After updating item people intf table for items that has XXref');
9223
9224 -- updating the item user defined attributes interface
9225 l_sql := q'#
9226 UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
9227 SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9228 (SELECT
9229 1,
9230 NVL(EIUAI.TRANSACTION_TYPE, 'SYNC'),
9231 MCR.INVENTORY_ITEM_ID
9232 FROM MTL_CROSS_REFERENCES_B MCR
9233 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9234 AND MCR.CROSS_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9235 AND MCR.SOURCE_SYSTEM_ID = EIUAI.SOURCE_SYSTEM_ID
9236 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9237 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9238 AND ROWNUM = 1
9239 )
9240 WHERE EIUAI.DATA_SET_ID = :p_data_set_id
9241 AND EIUAI.PROCESS_STATUS = 0
9242 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9243 AND NOT EXISTS (SELECT NULL
9244 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9245 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390, 33391)
9246 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9247 AND MSII.SOURCE_SYSTEM_ID = EIUAI.SOURCE_SYSTEM_ID
9248 AND MSII.SOURCE_SYSTEM_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9249 AND MSII.ORGANIZATION_ID = :l_org_id
9250 )
9251 -- HAS A CROSS REFERENCE
9252 AND EXISTS (SELECT NULL
9253 FROM MTL_CROSS_REFERENCES_B MCR
9254 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9255 AND MCR.CROSS_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9256 AND MCR.SOURCE_SYSTEM_ID = EIUAI.SOURCE_SYSTEM_ID
9257 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9258 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9259 #'||l_security_predicate||')';
9260
9261 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9262
9263 Debug_Conc_Log('Resolve_Child_Entities - After updating user attrs intf table for items that has XXref');
9264
9265 -- updating the item AML interface
9266 l_sql := q'#
9267 UPDATE EGO_AML_INTF EAI
9268 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9269 (SELECT
9270 1,
9271 NVL(EAI.TRANSACTION_TYPE, 'SYNC'),
9272 MCR.INVENTORY_ITEM_ID
9273 FROM MTL_CROSS_REFERENCES_B MCR
9274 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9275 AND MCR.CROSS_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9276 AND MCR.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
9277 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9278 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9279 AND ROWNUM = 1
9280 )
9281 WHERE EAI.DATA_SET_ID = :p_data_set_id
9282 AND EAI.PROCESS_FLAG = 0
9283 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9284 AND NOT EXISTS (SELECT NULL
9285 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9286 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390, 33391)
9287 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9288 AND MSII.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
9289 AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9290 AND MSII.ORGANIZATION_ID = :l_org_id
9291 )
9292 -- HAS A CROSS REFERENCE
9293 AND EXISTS (SELECT NULL
9294 FROM MTL_CROSS_REFERENCES_B MCR
9295 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9296 AND MCR.CROSS_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9297 AND MCR.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
9298 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9299 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9300 #'||l_security_predicate||')';
9301
9302 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9303
9304 Debug_Conc_Log('Resolve_Child_Entities - After updating aml intf table for items that has XXref');
9305
9306 -- updating the item intersections
9307 l_sql := q'#
9308 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
9309 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9310 (SELECT
9311 1,
9312 EIAI.TRANSACTION_TYPE,
9313 MCR.INVENTORY_ITEM_ID
9314 FROM MTL_CROSS_REFERENCES_B MCR
9315 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9316 AND MCR.CROSS_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9317 AND MCR.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
9318 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9319 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9320 AND ROWNUM = 1
9321 )
9322 WHERE EIAI.BATCH_ID = :p_data_set_id
9323 AND EIAI.PROCESS_FLAG = 0
9324 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9325 AND NOT EXISTS (SELECT NULL
9326 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9327 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9328 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9329 AND MSII.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
9330 AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9331 AND MSII.ORGANIZATION_ID = :l_org_id
9332 )
9333 -- HAS A CROSS REFERENCE
9334 AND EXISTS (SELECT NULL
9335 FROM MTL_CROSS_REFERENCES_B MCR
9336 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9337 AND MCR.CROSS_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9338 AND MCR.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
9339 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9340 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9341 #'||l_security_predicate||')';
9342
9343 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9344
9345 Debug_Conc_Log('Resolve_Child_Entities - After updating intersections intf table for items that has XXref');
9346
9347 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9348 SET REQUEST_ID = CASE PROCESS_FLAG
9349 WHEN 33390 THEN l_request_id
9350 WHEN 33391 THEN l_request_id
9351 ELSE REQUEST_ID
9352 END,
9353 PROCESS_FLAG = CASE PROCESS_FLAG
9354 WHEN 33390 THEN 3
9355 WHEN 33391 THEN 3
9356 ELSE PROCESS_FLAG
9357 END,
9358 CONFIRM_STATUS = SUBSTR(CONFIRM_STATUS, 1, 2)
9359 WHERE SET_PROCESS_ID = p_data_set_id
9360 AND PROCESS_FLAG IN (1, 33390, 33391)
9361 AND CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR')
9362 AND ORGANIZATION_ID = l_org_id;
9363 Debug_Conc_Log( 'Resolve_Child_Entities - Resolved pre-IOI process flag, request_id for ' || SQL%ROWCOUNT || ' rows' );
9364
9365 /*
9366 * Note that setting the process flag to 7 does not interfere with the source system cross-reference
9367 * import because that bulk-loader looks for process flag 7 with the request id of the calling request.
9368 * Since both that code (Process_SSXref_Intf_Rows) and this chunk are executed within the auspices of
9369 * the same concurrent request, the cross-ref import will work correctly.
9370 */
9371 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9372 SET REQUEST_ID = l_request_id
9373 , PROCESS_FLAG = CASE PROCESS_FLAG
9374 WHEN 33390 THEN 3
9375 WHEN 33391 THEN 3
9376 ELSE 7
9377 END
9378 WHERE SET_PROCESS_ID = p_data_set_id
9379 AND PROCESS_FLAG IN (1, 33390, 33391)
9380 AND CONFIRM_STATUS IN ( G_FAKE_CONF_STATUS_FLAG, G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE )
9381 AND ORGANIZATION_ID = l_org_id;
9382 Debug_Conc_Log( 'Resolve_Child_Entities - Stamped request_id and final process flag on ' || SQL%ROWCOUNT || ' inserted rows' );
9383
9384 IF l_enabled_for_data_pool = 'N' THEN
9385 Debug_Conc_Log('Resolve_Child_Entities - Calling Merge_Batch_For_Import');
9386 Merge_Batch_For_Import(p_data_set_id, l_org_id);
9387 Debug_Conc_Log('Resolve_Child_Entities - Done Merge_Batch_For_Import');
9388
9389 Debug_Conc_Log('Resolve_Child_Entities - Calling Clean_Up_UDA_Row_Idents');
9390 Clean_Up_UDA_Row_Idents( p_batch_id => p_data_set_id,
9391 p_process_status => 1,
9392 p_ignore_item_num_upd => FND_API.G_FALSE,
9393 p_commit => FND_API.G_FALSE );
9394
9395 Debug_Conc_Log('Resolve_Child_Entities - Clean_Up_UDA_Row_Idents Done.');
9396 ELSE
9397 Debug_Conc_Log('Resolve_Child_Entities - Not calling Merge_Batch_For_Import, because this batch is enabled for data pool');
9398 END IF;
9399
9400 Debug_Conc_Log('Resolve_Child_Entities - Resolving Style_Item_Flag');
9401 UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
9402 SET (STYLE_ITEM_FLAG, STYLE_ITEM_ID) = (SELECT
9403 DECODE(MAX(NVL(msik.STYLE_ITEM_FLAG, '$NULL$')),
9404 '$NULL$', msii.STYLE_ITEM_FLAG,
9405 NULL, msii.STYLE_ITEM_FLAG,
9406 'N', 'N',
9407 'Y', 'Y'
9408 ),
9409 NVL(MAX(msik.STYLE_ITEM_ID), msii.STYLE_ITEM_ID)
9410 FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_PARAMETERS mp
9411 WHERE (msii.INVENTORY_ITEM_ID = msik.INVENTORY_ITEM_ID
9412 OR msii.ITEM_NUMBER = msik.CONCATENATED_SEGMENTS)
9413 AND msik.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
9414 AND msii.ORGANIZATION_ID = mp.ORGANIZATION_ID
9415 )
9416 WHERE SET_PROCESS_ID = p_data_set_id
9417 AND PROCESS_FLAG = 1;
9418
9419 Debug_Conc_Log('Resolve_Child_Entities - Done Resolving Style_Item_Flag, rows processed='||SQL%ROWCOUNT);
9420
9421 Debug_Conc_Log('Resolve_Child_Entities END');
9422 IF FND_API.G_TRUE = p_commit THEN
9423 Debug_Conc_Log('Resolve_Child_Entities COMMITING');
9424 COMMIT;
9425 END IF;
9426
9427 END Resolve_Child_Entities;
9428
9429 PROCEDURE Stamp_Row_RequestId( p_request_id IN MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE
9430 , p_target_rowid IN UROWID
9431 )
9432 IS
9433 BEGIN
9434 IF p_request_id IS NULL THEN RETURN; END IF;
9435
9436 SAVEPOINT do_stamp_row;
9437
9438 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9439 SET REQUEST_ID = p_request_id
9440 WHERE MSII.ROWID = p_target_rowid
9441 AND PROCESS_FLAG = 7
9442 AND ( SOURCE_SYSTEM_ID IS NOT NULL
9443 OR SOURCE_SYSTEM_REFERENCE IS NOT NULL
9444 );
9445
9446 IF 1 <> SQL%ROWCOUNT THEN
9447 ROLLBACK TO do_stamp_row;
9448 -- ELSE
9449 -- COMMIT;
9450 END IF;
9451
9452 RETURN;
9453 END;
9454
9455
9456 PROCEDURE Stamp_RequestId_For_ReImport( p_request_id IN MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE )
9457 IS
9458 l_index PLS_INTEGER;
9459 BEGIN
9460 IF G_MSII_REIMPORT_ROWS IS NOT NULL THEN
9461 l_index := G_MSII_REIMPORT_ROWS.FIRST;
9462 WHILE l_index IS NOT NULL LOOP
9463 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9464 SET REQUEST_ID = p_request_id
9465 WHERE ROWID = G_MSII_REIMPORT_ROWS( l_index );
9466 l_index := G_MSII_REIMPORT_ROWS.next( l_index );
9467 END LOOP;
9468 G_MSII_REIMPORT_ROWS := NULL;
9469 END IF;
9470 END;
9471
9472 PROCEDURE Log_Error_For_ReImport(p_request_id IN MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE
9473 , p_target_rowid IN UROWID
9474 , p_err_msg IN VARCHAR2
9475 )
9476 IS
9477 l_org_id NUMBER;
9478 l_transaction_id NUMBER;
9479 dumm_status VARCHAR2(100);
9480 l_user_id NUMBER := FND_GLOBAL.USER_ID;
9481 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
9482 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
9483 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
9484 l_err_text VARCHAR2(4000);
9485 BEGIN
9486 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9487 SET REQUEST_ID = p_request_id
9488 WHERE ROWID = p_target_rowid
9489 RETURNING ORGANIZATION_ID, TRANSACTION_ID
9490 INTO l_org_id, l_transaction_id;
9491
9492 dumm_status := INVPUOPI.mtl_log_interface_err(
9493 l_org_id
9494 ,l_user_id
9495 ,l_login_id
9496 ,l_prog_appid
9497 ,l_prog_id
9498 ,p_request_id
9499 ,l_transaction_id
9500 ,p_err_msg
9501 ,'GLOBAL_TRADE_ITEM_NUMBER'
9502 ,'MTL_SYSTEM_ITEMS_INTERFACE'
9503 ,'INV_IOI_ERR_FAIL4REIMPORT'--bug 11894684, replace INV_IOI_ERR
9504 ,l_err_text);
9505 EXCEPTION WHEN OTHERS THEN
9506 NULL;
9507 END Log_Error_For_ReImport;
9508
9509 PROCEDURE Prepare_Row_For_ReImport
9510 ( p_batch_id IN MTL_SYSTEM_ITEMS_INTERFACE.SET_PROCESS_ID%TYPE
9511 , p_organization_id IN MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE
9512 , p_target_rowid IN UROWID
9513 , x_return_code OUT NOCOPY NUMBER
9514 , x_err_msg OUT NOCOPY VARCHAR2
9515 )
9516 IS
9517 l_process_flag MTL_SYSTEM_ITEMS_INTERFACE.PROCESS_FLAG%TYPE;
9518 l_ssr MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
9519 l_ss_id MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE;
9520 l_ssr_desc MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE_DESC%TYPE;
9521 l_batch_ss_id EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE;
9522 l_request_id MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE;
9523 l_org_id MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE;
9524 l_item_number MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
9525 l_item_id MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
9526 l_ssxref_only EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
9527
9528 l_is_pdh_batch BOOLEAN;
9529 l_is_reimport BOOLEAN;
9530 l_is_ssxref_only BOOLEAN;
9531 l_reimport_process_status MTL_SYSTEM_ITEMS_INTERFACE.PROCESS_FLAG%TYPE;
9532 l_priv_exists VARCHAR2(1);
9533 l_msg_text VARCHAR2(4000);
9534 l_xref_item_number MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
9535 l_xref_item_id MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
9536 l_xref_desc MTL_CROSS_REFERENCES.DESCRIPTION%TYPE;
9537 l_org_code MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_CODE%TYPE;
9538 l_party_name VARCHAR2(1000); -- Bug: 5355759
9539 BEGIN
9540 x_return_code := 0;
9541 BEGIN -- CHECK THAT BATCH HAS A HEADER
9542 SELECT BATCH.SOURCE_SYSTEM_ID
9543 , BATCH.ORGANIZATION_ID
9544 , NVL( OPT.IMPORT_XREF_ONLY, 'N' )
9545 INTO l_batch_ss_id
9546 , l_org_id
9547 , l_ssxref_only
9548 FROM EGO_IMPORT_BATCHES_B BATCH, EGO_IMPORT_OPTION_SETS OPT
9549 WHERE BATCH.BATCH_ID = p_batch_id
9550 AND BATCH.ORGANIZATION_ID = p_organization_id
9551 AND BATCH.BATCH_ID = OPT.BATCH_ID;
9552 EXCEPTION
9553 WHEN NO_DATA_FOUND THEN
9554 x_return_code := 20; -- no batch header
9555 RETURN;
9556 END;
9557
9558 l_is_reimport := FALSE;
9559 l_is_pdh_batch := ( l_batch_ss_id = get_pdh_source_system_id );
9560 l_is_ssxref_only := NOT l_is_pdh_batch AND ( 'Y' = l_ssxref_only );
9561 l_party_name := Get_Current_Party_Name; -- Bug: 5355759
9562 IF l_is_pdh_batch THEN
9563 SAVEPOINT do_prepare_master_row; -- ENSURES THAT THE UPDATES ARE AN ATOMIC UNIT WITHIN THE TRANSACTION
9564 -- XXX: Should child updates be attempted first?
9565
9566 -- update/select master item row
9567 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9568 SET PROCESS_FLAG = CASE PROCESS_FLAG
9569 WHEN 3 THEN 1
9570 -- WHEN 7 THEN G_IOI_STAMP_REQUEST_ID_FLAG
9571 ELSE PROCESS_FLAG END
9572 WHERE SET_PROCESS_ID = p_batch_id
9573 AND ORGANIZATION_ID = p_organization_id
9574 AND MSII.ROWID = p_target_rowid
9575 AND PROCESS_FLAG IN ( 3, 7 )
9576 AND ( SOURCE_SYSTEM_ID IS NULL
9577 OR SOURCE_SYSTEM_ID = l_batch_ss_id
9578 )
9579 RETURNING
9580 MSII.PROCESS_FLAG
9581 , MSII.REQUEST_ID
9582 , MSII.INVENTORY_ITEM_ID
9583 , MSII.ITEM_NUMBER
9584 , MSII.ORGANIZATION_ID
9585 INTO
9586 l_process_flag
9587 , l_request_id
9588 , l_item_id
9589 , l_item_number
9590 , l_org_id;
9591
9592 IF 1 <> SQL%ROWCOUNT THEN
9593 ROLLBACK TO do_prepare_master_row;
9594 x_return_code := 10; -- update statement found too many matching master rows, or not enough
9595 RETURN;
9596 END IF;
9597
9598 IF 7 = l_process_flag THEN
9599 -- IF G_MSII_REIMPORT_ROWS IS NULL THEN
9600 -- G_MSII_REIMPORT_ROWS := UROWID_TABLE( );
9601 -- END IF;
9602 x_return_code := G_NEEDS_REQUEST_ID_STAMP;
9603 -- G_MSII_REIMPORT_ROWS.EXTEND( );
9604 -- G_MSII_REIMPORT_ROWS( G_MSII_REIMPORT_ROWS.LAST ) := p_target_rowid;
9605 ELSE
9606 l_is_reimport := TRUE;
9607 SAVEPOINT do_prepare_master_row; -- move savepoint up since parent row was in error
9608 END IF;
9609
9610 IF l_item_id IS NOT NULL THEN
9611 -- xxx: should the item number to use for comparison be fetched from the msii kfv?
9612
9613 -- updating the item's org assignments
9614 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9615 SET PROCESS_FLAG = 1
9616 WHERE ( INVENTORY_ITEM_ID = l_item_id
9617 OR ( ITEM_NUMBER = l_item_number
9618 AND INVENTORY_ITEM_ID IS NULL
9619 )
9620 )
9621 AND PROCESS_FLAG = 3
9622 AND SET_PROCESS_ID = p_batch_id
9623 AND REQUEST_ID = l_request_id
9624 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9625 FROM MTL_PARAMETERS MP
9626 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9627 AND MP.ORGANIZATION_ID <> l_org_id
9628 );
9629 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9630
9631 -- updating item revisions
9632 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
9633 SET PROCESS_FLAG = 1
9634 WHERE ( INVENTORY_ITEM_ID = l_item_id
9635 OR ( ITEM_NUMBER = l_item_number
9636 AND INVENTORY_ITEM_ID IS NULL
9637 )
9638 )
9639 AND PROCESS_FLAG = 3
9640 AND SET_PROCESS_ID = p_batch_id
9641 AND REQUEST_ID = l_request_id
9642 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9643 FROM MTL_PARAMETERS MP
9644 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9645 );
9646 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9647
9648 -- updating item category assignments
9649 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
9650 SET PROCESS_FLAG = 1
9651 WHERE ( INVENTORY_ITEM_ID = l_item_id
9652 OR ( ITEM_NUMBER = l_item_number
9653 AND INVENTORY_ITEM_ID IS NULL
9654 )
9655 )
9656 AND PROCESS_FLAG = 3
9657 AND SET_PROCESS_ID = p_batch_id
9658 AND REQUEST_ID = l_request_id
9659 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9660 FROM MTL_PARAMETERS MP
9661 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9662 );
9663 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9664
9665 -- updating item user defined attributes
9666 UPDATE EGO_ITM_USR_ATTR_INTRFC
9667 SET PROCESS_STATUS = 1
9668 WHERE ( INVENTORY_ITEM_ID = l_item_id
9669 OR ( ITEM_NUMBER = l_item_number
9670 AND INVENTORY_ITEM_ID IS NULL
9671 )
9672 )
9673 AND PROCESS_STATUS = 3
9674 AND DATA_SET_ID = p_batch_id
9675 AND REQUEST_ID = l_request_id
9676 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9677 FROM MTL_PARAMETERS MP
9678 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9679 );
9680 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9681
9682 -- updating item people
9683 UPDATE EGO_ITEM_PEOPLE_INTF eipi
9684 SET PROCESS_STATUS = 1
9685 WHERE ( INVENTORY_ITEM_ID = l_item_id
9686 OR ( ITEM_NUMBER = l_item_number
9687 AND INVENTORY_ITEM_ID IS NULL
9688 )
9689 )
9690 AND PROCESS_STATUS = 3
9691 AND DATA_SET_ID = p_batch_id
9692 AND REQUEST_ID = l_request_id
9693 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9694 FROM MTL_PARAMETERS MP
9695 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9696 );
9697 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9698
9699 -- updating item AML
9700 UPDATE EGO_AML_INTF
9701 SET PROCESS_FLAG = 1
9702 WHERE ( INVENTORY_ITEM_ID = l_item_id
9703 OR ( ITEM_NUMBER = l_item_number
9704 AND INVENTORY_ITEM_ID IS NULL
9705 )
9706 )
9707 AND PROCESS_FLAG = 3
9708 AND DATA_SET_ID = p_batch_id
9709 AND REQUEST_ID = l_request_id
9710 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9711 FROM MTL_PARAMETERS MP
9712 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9713 );
9714 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9715
9716 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
9717 SET PROCESS_FLAG = 1
9718 WHERE ( INVENTORY_ITEM_ID = l_item_id
9719 OR ( ITEM_NUMBER = l_item_number
9720 AND INVENTORY_ITEM_ID IS NULL
9721 )
9722 )
9723 AND PROCESS_FLAG = 3
9724 AND BATCH_ID = p_batch_id
9725 AND REQUEST_ID = l_request_id
9726 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9727 FROM MTL_PARAMETERS MP
9728 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9729 );
9730 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9731 ELSE -- item id is null
9732 -- updating the item's org assignments
9733 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9734 SET PROCESS_FLAG = 1
9735 WHERE ITEM_NUMBER = l_item_number
9736 AND PROCESS_FLAG = 3
9737 AND SET_PROCESS_ID = p_batch_id
9738 AND REQUEST_ID = l_request_id
9739 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9740 FROM MTL_PARAMETERS MP
9741 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9742 AND MP.ORGANIZATION_ID <> l_org_id
9743 );
9744 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9745
9746 -- updating item revisions
9747 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
9748 SET PROCESS_FLAG = 1
9749 WHERE ITEM_NUMBER = l_item_number
9750 AND PROCESS_FLAG = 3
9751 AND SET_PROCESS_ID = p_batch_id
9752 AND REQUEST_ID = l_request_id
9753 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9754 FROM MTL_PARAMETERS MP
9755 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9756 );
9757 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9758
9759 -- updating item category assignments
9760 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
9761 SET PROCESS_FLAG = 1
9762 WHERE ITEM_NUMBER = l_item_number
9763 AND PROCESS_FLAG = 3
9764 AND SET_PROCESS_ID = p_batch_id
9765 AND REQUEST_ID = l_request_id
9766 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9767 FROM MTL_PARAMETERS MP
9768 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9769 );
9770 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9771
9772 -- updating item user defined attributes
9773 UPDATE EGO_ITM_USR_ATTR_INTRFC
9774 SET PROCESS_STATUS = 1
9775 WHERE ITEM_NUMBER = l_item_number
9776 AND PROCESS_STATUS = 3
9777 AND DATA_SET_ID = p_batch_id
9778 AND REQUEST_ID = l_request_id
9779 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9780 FROM MTL_PARAMETERS MP
9781 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9782 );
9783 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9784
9785 -- updating item people
9786 UPDATE EGO_ITEM_PEOPLE_INTF eipi
9787 SET PROCESS_STATUS = 1
9788 WHERE ITEM_NUMBER = l_item_number
9789 AND PROCESS_STATUS = 3
9790 AND DATA_SET_ID = p_batch_id
9791 AND REQUEST_ID = l_request_id
9792 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9793 FROM MTL_PARAMETERS MP
9794 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9795 );
9796 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9797
9798 -- updating item AML
9799 UPDATE EGO_AML_INTF
9800 SET PROCESS_FLAG = 1
9801 WHERE ITEM_NUMBER = l_item_number
9802 AND PROCESS_FLAG = 3
9803 AND DATA_SET_ID = p_batch_id
9804 AND REQUEST_ID = l_request_id
9805 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9806 FROM MTL_PARAMETERS MP
9807 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9808 );
9809 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9810 -- updating item ITEM ASSOCIATIONS
9811 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
9812 SET PROCESS_FLAG = 1
9813 WHERE ITEM_NUMBER = l_item_number
9814 AND PROCESS_FLAG = 3
9815 AND BATCH_ID = p_batch_id
9816 AND REQUEST_ID = l_request_id
9817 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9818 FROM MTL_PARAMETERS MP
9819 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9820 );
9821 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9822 END IF;
9823 ELSE -- source system is not PIMDH
9824 SAVEPOINT do_prepare_master_row; -- ENSURES THAT THE UPDATES ARE AN ATOMIC UNIT WITHIN THE TRANSACTION
9825
9826 -- TODO: need to check for cross-reference related security.
9827 -- however, we can't trust confirm status for the errored rows...
9828
9829 -- XXX: Should child updates be attempted first?
9830
9831 -- Bug: 5355759
9832 IF l_is_ssxref_only THEN
9833 l_reimport_process_status := 11;
9834 ELSE
9835 l_reimport_process_status := 1;
9836 END IF;
9837
9838 -- update/select master item row
9839 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9840 SET PROCESS_FLAG = CASE PROCESS_FLAG
9841 WHEN 3 THEN l_reimport_process_status
9842 -- WHEN 7 THEN G_IOI_STAMP_REQUEST_ID_FLAG
9843 ELSE PROCESS_FLAG END
9844 WHERE SET_PROCESS_ID = p_batch_id
9845 AND ORGANIZATION_ID = p_organization_id
9846 AND MSII.ROWID = p_target_rowid
9847 AND PROCESS_FLAG IN ( 3, 7 )
9848 AND SOURCE_SYSTEM_ID IS NOT NULL
9849 AND SOURCE_SYSTEM_REFERENCE IS NOT NULL
9850 RETURNING
9851 MSII.PROCESS_FLAG
9852 , MSII.REQUEST_ID
9853 , MSII.SOURCE_SYSTEM_ID
9854 , MSII.SOURCE_SYSTEM_REFERENCE
9855 , MSII.SOURCE_SYSTEM_REFERENCE_DESC
9856 , MSII.ORGANIZATION_ID
9857 , MSII.INVENTORY_ITEM_ID
9858 , MSII.ITEM_NUMBER
9859 INTO
9860 l_process_flag
9861 , l_request_id
9862 , l_ss_id
9863 , l_ssr
9864 , l_ssr_desc
9865 , l_org_id
9866 , l_item_id
9867 , l_item_number;
9868
9869 IF 1 <> SQL%ROWCOUNT THEN
9870 ROLLBACK TO do_prepare_master_row;
9871 x_return_code := 10;
9872 RETURN;
9873 END IF;
9874
9875 IF 7 = l_process_flag THEN
9876 -- IF G_MSII_REIMPORT_ROWS IS NULL THEN
9877 -- G_MSII_REIMPORT_ROWS := UROWID_TABLE( );
9878 -- END IF;
9879 x_return_code := G_NEEDS_REQUEST_ID_STAMP;
9880 -- G_MSII_REIMPORT_ROWS.EXTEND( );
9881 -- G_MSII_REIMPORT_ROWS( G_MSII_REIMPORT_ROWS.LAST ) := p_target_rowid;
9882 ELSE
9883 l_is_reimport := TRUE;
9884 SAVEPOINT do_prepare_master_row; -- move savepoint up since parent row was in error
9885 -- Bug: 5355759
9886 -- check for cross-reference related security
9887
9888 BEGIN
9889 SELECT ORGANIZATION_CODE
9890 INTO l_org_code
9891 FROM MTL_PARAMETERS
9892 WHERE ORGANIZATION_ID = l_org_id;
9893 EXCEPTION
9894 WHEN NO_DATA_FOUND THEN
9895 NULL;
9896 END;
9897
9898 BEGIN
9899 SELECT MSIK.CONCATENATED_SEGMENTS
9900 , MSIK.INVENTORY_ITEM_ID
9901 , MCR.DESCRIPTION
9902 INTO l_xref_item_number
9903 , l_xref_item_id
9904 , l_xref_desc
9905 FROM MTL_CROSS_REFERENCES MCR,
9906 MTL_SYSTEM_ITEMS_KFV MSIK
9907 WHERE MCR.INVENTORY_ITEM_ID = MSIK.INVENTORY_ITEM_ID
9908 AND MSIK.ORGANIZATION_ID = l_org_id
9909 AND MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9910 AND MCR.SOURCE_SYSTEM_ID = l_ss_id
9911 AND MCR.CROSS_REFERENCE = l_ssr
9912 AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE-1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE+1);
9913
9914 IF l_xref_item_id <> l_item_id THEN
9915 -- old xref and new xref are not same, so check privilege on old item
9916 l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_xref_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9917 IF 'T' <> l_priv_exists THEN
9918 -- no privileges, logging error
9919 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9920 FND_MESSAGE.SET_TOKEN('ITEM', l_xref_item_number);
9921 FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9922 l_msg_text := FND_MESSAGE.GET;
9923 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9924 SET PROCESS_FLAG = 3
9925 WHERE ROWID = p_target_rowid;
9926 x_return_code := G_NEED_TO_LOG_ERROR;
9927 x_err_msg := l_msg_text;
9928 RETURN;
9929 ELSE
9930 -- privilege exists on old item. Check privilege on new item
9931 l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9932 IF 'T' <> l_priv_exists THEN
9933 -- no privileges, logging error
9934 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9935 FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9936 FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9937 l_msg_text := FND_MESSAGE.GET;
9938
9939 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9940 SET PROCESS_FLAG = 3
9941 WHERE ROWID = p_target_rowid;
9942
9943 x_return_code := G_NEED_TO_LOG_ERROR;
9944 x_err_msg := l_msg_text;
9945 RETURN;
9946 END IF; -- IF 'T' <> l_priv_exists THEN
9947 END IF; -- IF 'T' <> l_priv_exists THEN
9948 ELSIF l_xref_item_id = l_item_id AND NVL(l_ssr_desc, '!') <> NVL(l_xref_desc, '!') THEN
9949 -- New and Old link are same, but description is different, so check privilege on item
9950 l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9951 IF 'T' <> l_priv_exists THEN
9952 -- no privileges, logging error
9953 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9954 FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9955 FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9956 l_msg_text := FND_MESSAGE.GET;
9957
9958 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9959 SET PROCESS_FLAG = 3
9960 WHERE ROWID = p_target_rowid;
9961
9962 x_return_code := G_NEED_TO_LOG_ERROR;
9963 x_err_msg := l_msg_text;
9964 RETURN;
9965 END IF; -- IF 'T' <> l_priv_exists THEN
9966 END IF; -- IF l_xref_item_id <> l_item_id THEN
9967 EXCEPTION
9968 WHEN NO_DATA_FOUND THEN
9969 -- check privilege only for new item
9970 l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9971 IF 'T' <> l_priv_exists THEN
9972 -- no privileges, logging error
9973 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9974 FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9975 FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9976 l_msg_text := FND_MESSAGE.GET;
9977
9978 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9979 SET PROCESS_FLAG = 3
9980 WHERE ROWID = p_target_rowid;
9981
9982 x_return_code := G_NEED_TO_LOG_ERROR;
9983 x_err_msg := l_msg_text;
9984 RETURN;
9985 END IF; -- IF 'T' <> l_priv_exists THEN
9986 END;
9987 END IF;
9988
9989 IF NOT l_is_ssxref_only THEN
9990 -- updating item's org assignments
9991 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9992 SET PROCESS_FLAG = 1
9993 WHERE SOURCE_SYSTEM_ID = l_ss_id
9994 AND SOURCE_SYSTEM_REFERENCE = l_ssr
9995 AND PROCESS_FLAG = 3
9996 AND SET_PROCESS_ID = p_batch_id
9997 AND REQUEST_ID = l_request_id
9998 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID -- org assignment
9999 FROM MTL_PARAMETERS MP
10000 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
10001 AND MP.ORGANIZATION_ID <> l_org_id
10002 );
10003 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10004
10005 -- updating item revisions
10006 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
10007 SET PROCESS_FLAG = 1
10008 WHERE SOURCE_SYSTEM_ID = l_ss_id
10009 AND SOURCE_SYSTEM_REFERENCE = l_ssr
10010 AND PROCESS_FLAG = 3
10011 AND SET_PROCESS_ID = p_batch_id
10012 AND REQUEST_ID = l_request_id
10013 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
10014 FROM MTL_PARAMETERS MP
10015 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
10016 );
10017 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10018
10019 -- updating item category assignments
10020 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
10021 SET PROCESS_FLAG = 1
10022 WHERE SOURCE_SYSTEM_ID = l_ss_id
10023 AND SOURCE_SYSTEM_REFERENCE = l_ssr
10024 AND PROCESS_FLAG = 3
10025 AND SET_PROCESS_ID = p_batch_id
10026 AND REQUEST_ID = l_request_id
10027 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
10028 FROM MTL_PARAMETERS MP
10029 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
10030 );
10031 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10032
10033 -- updating item user defined attributes
10034 UPDATE EGO_ITM_USR_ATTR_INTRFC
10035 SET PROCESS_STATUS = 1
10036 WHERE SOURCE_SYSTEM_ID = l_ss_id
10037 AND SOURCE_SYSTEM_REFERENCE = l_ssr
10038 AND PROCESS_STATUS = 3
10039 AND DATA_SET_ID = p_batch_id
10040 AND REQUEST_ID = l_request_id
10041 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
10042 FROM MTL_PARAMETERS MP
10043 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
10044 );
10045 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10046
10047 -- updating item people
10048 UPDATE EGO_ITEM_PEOPLE_INTF eipi
10049 SET PROCESS_STATUS = 1
10050 WHERE SOURCE_SYSTEM_ID = l_ss_id
10051 AND SOURCE_SYSTEM_REFERENCE = l_ssr
10052 AND PROCESS_STATUS = 3
10053 AND DATA_SET_ID = p_batch_id
10054 AND REQUEST_ID = l_request_id
10055 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
10056 FROM MTL_PARAMETERS MP
10057 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
10058 );
10059 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10060
10061 -- updating item AML
10062 UPDATE EGO_AML_INTF
10063 SET PROCESS_FLAG = 1
10064 WHERE SOURCE_SYSTEM_ID = l_ss_id
10065 AND SOURCE_SYSTEM_REFERENCE = l_ssr
10066 AND PROCESS_FLAG = 3
10067 AND DATA_SET_ID = p_batch_id
10068 AND REQUEST_ID = l_request_id
10069 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
10070 FROM MTL_PARAMETERS MP
10071 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
10072 );
10073 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10074 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
10075 SET PROCESS_FLAG = 1
10076 WHERE SOURCE_SYSTEM_ID = l_ss_id
10077 AND SOURCE_SYSTEM_REFERENCE = l_ssr
10078 AND PROCESS_FLAG = 3
10079 AND BATCH_ID = p_batch_id
10080 AND REQUEST_ID = l_request_id
10081 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
10082 FROM MTL_PARAMETERS MP
10083 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
10084 );
10085 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10086 END IF; -- IF l_is_ssxref_only
10087 END IF;
10088
10089 IF NOT l_is_reimport THEN
10090 ROLLBACK TO do_prepare_master_row;
10091 x_return_code := 50;
10092 END IF;
10093 SAVEPOINT do_prepare_master_row;
10094 EXCEPTION
10095 WHEN NO_DATA_FOUND THEN
10096 ROLLBACK TO do_prepare_master_row;
10097 x_return_code := 30;
10098 WHEN TOO_MANY_ROWS THEN
10099 ROLLBACK TO do_prepare_master_row;
10100 x_return_code := 40;
10101 WHEN OTHERS THEN -- unanticipated error ( probably during update )
10102 ROLLBACK TO do_prepare_master_row;
10103 x_return_code := SQLCODE;
10104 END Prepare_Row_For_ReImport;
10105
10106 ------------------------------------------------------------------------------------------
10107 -- This function returns the batch status of a batch --
10108 ------------------------------------------------------------------------------------------
10109 FUNCTION GET_BATCH_STATUS(p_batch_id NUMBER) RETURN VARCHAR2 AS
10110 l_batch_status VARCHAR2(2);
10111 BEGIN
10112 SELECT
10113 (CASE WHEN ( (crimp.PHASE_CODE IN ('P', 'I', 'R') AND (crimp.REQUESTED_START_DATE <= SYSDATE) )
10114 OR crmatch.PHASE_CODE IN ('P', 'I', 'R')
10115 )
10116 THEN 'P'
10117 ELSE impbat.BATCH_STATUS
10118 END
10119 ) BATCH_STATUS
10120 INTO l_batch_status
10121 FROM
10122 EGO_IMPORT_BATCHES_B impbat,
10123 FND_CONCURRENT_REQUESTS crimp,
10124 FND_CONCURRENT_REQUESTS crmatch
10125 WHERE impbat.BATCH_ID = p_batch_id
10126 AND impbat.LAST_MATCH_REQUEST_ID = crmatch.REQUEST_ID (+)
10127 AND impbat.LAST_IMPORT_REQUEST_ID = crimp.REQUEST_ID (+);
10128
10129 RETURN l_batch_status;
10130 EXCEPTION
10131 WHEN NO_DATA_FOUND THEN
10132 RETURN NULL;
10133 END GET_BATCH_STATUS;
10134
10135 ------------------------------------------------------------------------------------------------
10136 -- Functions GET_LATEST_EIUAI_REV_[SS/PDH] --
10137 -- Returns the the code of the latest LOGICAL revision row loaded for the item into the --
10138 -- user defined attribute interface table --
10139 -- Note the lack of attribute-specific parameters - this is to ensure that contexts in --
10140 -- which this proc gets called will only attempt to go after a single logical revision --
10141 -- row, regardless of the possible absence of the required attributes in that row and --
10142 -- their possible presence in other logical rows of the interface table --
10143 ------------------------------------------------------------------------------------------------
10144 FUNCTION GET_LATEST_EIUAI_REV_SS
10145 (
10146 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10147 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10148 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10149 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10150 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10151 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10152 )
10153 RETURN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10154 IS
10155 l_rev_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10156 BEGIN
10157 IF p_do_processed_rows_flag = FND_API.G_TRUE THEN
10158 SELECT MAX( EIUAI.REVISION ) INTO l_rev_code
10159 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10160 WHERE EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10161 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10162 AND EIUAI.ORGANIZATION_ID = p_organization_id
10163 AND EIUAI.DATA_SET_ID = p_batch_id
10164 AND EIUAI.REVISION IS NOT NULL
10165 AND EIUAI.PROCESS_STATUS IN ( 3,4 )
10166 AND EIUAI.REQUEST_ID = p_request_id
10167 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10168 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10169 , EGO_OBJ_AG_ASSOCS_B A
10170 WHERE
10171 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10172 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10173 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10174 AND FL_CTX_EXT.APPLICATION_ID = 431
10175 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10176 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10177 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10178 AND A.CLASSIFICATION_CODE IS NOT NULL
10179 AND A.OBJECT_ID IS NOT NULL
10180 AND ROWNUM = 1
10181 );
10182 -- the aggregate function MAX always returns one (possibly null) row, so
10183 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10184 ELSE
10185 SELECT MAX( EIUAI.REVISION ) INTO l_rev_code
10186 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10187 WHERE EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10188 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10189 AND EIUAI.ORGANIZATION_ID = p_organization_id
10190 AND EIUAI.DATA_SET_ID = p_batch_id
10191 AND EIUAI.REVISION IS NOT NULL
10192 AND EIUAI.PROCESS_STATUS = 0
10193 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10194 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10195 , EGO_OBJ_AG_ASSOCS_B A
10196 WHERE
10197 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10198 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10199 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10200 AND FL_CTX_EXT.APPLICATION_ID = 431
10201 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10202 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10203 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10204 AND A.CLASSIFICATION_CODE IS NOT NULL
10205 AND A.OBJECT_ID IS NOT NULL
10206 AND ROWNUM = 1
10207 );
10208 -- the aggregate function MAX always returns one (possibly null) row, so
10209 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10210 END IF;
10211 RETURN l_rev_code;
10212 END GET_LATEST_EIUAI_REV_SS;
10213
10214 FUNCTION GET_LATEST_EIUAI_REV_PDH
10215 (
10216 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10217 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
10218 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
10219 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10220 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10221 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10222 )
10223 RETURN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10224 IS
10225 l_rev_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10226 l_sql_stmt VARCHAR2( 32000 );
10227 BEGIN
10228 -- the aggregate function MAX always returns one (possibly null) row, so
10229 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10230
10231 IF p_inventory_item_id IS NULL
10232 THEN
10233 IF p_do_processed_rows_flag = FND_API.G_TRUE THEN
10234 SELECT MAX( EIUAI.REVISION )
10235 INTO l_rev_code
10236 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10237 WHERE EIUAI.ITEM_NUMBER = p_item_number
10238 AND EIUAI.ORGANIZATION_ID = p_organization_id
10239 AND EIUAI.DATA_SET_ID = p_batch_id
10240 AND EIUAI.REVISION IS NOT NULL
10241 AND EIUAI.PROCESS_STATUS IN ( 3, 4 )
10242 AND EIUAI.REQUEST_ID = p_request_id
10243 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10244 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10245 , EGO_OBJ_AG_ASSOCS_B A
10246 WHERE
10247 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10248 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10249 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10250 AND FL_CTX_EXT.APPLICATION_ID = 431
10251 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10252 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10253 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10254 AND A.CLASSIFICATION_CODE IS NOT NULL
10255 AND A.OBJECT_ID IS NOT NULL
10256 AND ROWNUM = 1
10257 );
10258 -- the aggregate function MAX always returns one (possibly null) row, so
10259 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10260 ELSE
10261 SELECT MAX( EIUAI.REVISION )
10262 INTO l_rev_code
10263 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10264 WHERE EIUAI.ITEM_NUMBER = p_item_number
10265 AND EIUAI.ORGANIZATION_ID = p_organization_id
10266 AND EIUAI.DATA_SET_ID = p_batch_id
10267 AND EIUAI.REVISION IS NOT NULL
10268 AND EIUAI.PROCESS_STATUS = 1
10269 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10270 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10271 , EGO_OBJ_AG_ASSOCS_B A
10272 WHERE
10273 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10274 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10275 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10276 AND FL_CTX_EXT.APPLICATION_ID = 431
10277 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10278 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10279 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10280 AND A.CLASSIFICATION_CODE IS NOT NULL
10281 AND A.OBJECT_ID IS NOT NULL
10282 AND ROWNUM = 1
10283 );
10284 -- the aggregate function MAX always returns one (possibly null) row, so
10285 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10286 END IF;
10287 ELSE
10288 IF p_do_processed_rows_flag = FND_API.G_TRUE THEN
10289 SELECT MAX( EIUAI.REVISION )
10290 INTO l_rev_code
10291 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10292 WHERE
10293 ( ( EIUAI.INVENTORY_ITEM_ID IS NULL
10294 AND EIUAI.ITEM_NUMBER = p_item_number
10295 )
10296 OR EIUAI.INVENTORY_ITEM_ID = p_inventory_item_id
10297 )
10298 AND EIUAI.ORGANIZATION_ID = p_organization_id
10299 AND EIUAI.DATA_SET_ID = p_batch_id
10300 AND EIUAI.REVISION IS NOT NULL
10301 AND EIUAI.PROCESS_STATUS IN ( 3, 4 )
10302 AND EIUAI.REQUEST_ID = p_request_id
10303 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10304 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10305 , EGO_OBJ_AG_ASSOCS_B A
10306 WHERE
10307 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10308 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10309 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10310 AND FL_CTX_EXT.APPLICATION_ID = 431
10311 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10312 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10313 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10314 AND A.CLASSIFICATION_CODE IS NOT NULL
10315 AND A.OBJECT_ID IS NOT NULL
10316 AND ROWNUM = 1
10317 );
10318 -- the aggregate function MAX always returns one (possibly null) row, so
10319 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10320 ELSE
10321 SELECT MAX( EIUAI.REVISION )
10322 INTO l_rev_code
10323 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10324 WHERE
10325 ( ( EIUAI.INVENTORY_ITEM_ID IS NULL
10326 AND EIUAI.ITEM_NUMBER = p_item_number
10327 )
10328 OR EIUAI.INVENTORY_ITEM_ID = p_inventory_item_id
10329 )
10330 AND EIUAI.ORGANIZATION_ID = p_organization_id
10331 AND EIUAI.DATA_SET_ID = p_batch_id
10332 AND EIUAI.REVISION IS NOT NULL
10333 AND EIUAI.PROCESS_STATUS = 1
10334 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10335 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10336 , EGO_OBJ_AG_ASSOCS_B A
10337 WHERE
10338 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10339 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10340 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10341 AND FL_CTX_EXT.APPLICATION_ID = 431
10342 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10343 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10344 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10345 AND A.CLASSIFICATION_CODE IS NOT NULL
10346 AND A.OBJECT_ID IS NOT NULL
10347 AND ROWNUM = 1
10348 );
10349 -- the aggregate function MAX always returns one (possibly null) row, so
10350 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10351 END IF;
10352 END IF;
10353 RETURN l_rev_code;
10354 END GET_LATEST_EIUAI_REV_PDH;
10355
10356 FUNCTION GET_LATEST_MIRI_REV_SS
10357 (
10358 p_batch_id IN MTL_ITEM_REVISIONS_INTERFACE.SET_PROCESS_ID%TYPE
10359 , p_source_system_id IN MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
10360 , p_source_system_reference IN MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE
10361 , p_organization_id IN MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE
10362 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10363 , p_request_id IN MTL_ITEM_REVISIONS_INTERFACE.REQUEST_ID%TYPE DEFAULT NULL
10364 )
10365 RETURN MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE IS
10366 l_revision MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE;
10367 BEGIN
10368 IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10369 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10370 INTO l_revision
10371 FROM
10372 MTL_ITEM_REVISIONS_INTERFACE MIRI
10373 WHERE MIRI.SET_PROCESS_id = p_batch_id
10374 AND MIRI.SOURCE_SYSTEM_ID = p_source_system_id
10375 AND MIRI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10376 AND MIRI.ORGANIZATION_ID = p_organization_id
10377 AND MIRI.PROCESS_FLAG = 0;
10378 ELSE
10379 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10380 INTO l_revision
10381 FROM
10382 MTL_ITEM_REVISIONS_INTERFACE MIRI
10383 WHERE
10384 MIRI.SET_PROCESS_id = p_batch_id
10385 AND MIRI.SOURCE_SYSTEM_ID = p_source_system_id
10386 AND MIRI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10387 AND MIRI.ORGANIZATION_ID = p_organization_id
10388 AND MIRI.REQUEST_ID = p_request_id
10389 AND MIRI.PROCESS_FLAG IN (3, 7);
10390 END IF;
10391 RETURN l_revision;
10392 EXCEPTION
10393 WHEN NO_DATA_FOUND THEN
10394 RETURN NULL;
10395 END GET_LATEST_MIRI_REV_SS;
10396
10397 FUNCTION GET_LATEST_MIRI_REV_PDH
10398 (
10399 p_batch_id IN MTL_ITEM_REVISIONS_INTERFACE.SET_PROCESS_ID%TYPE
10400 , p_inventory_item_id IN MTL_ITEM_REVISIONS_INTERFACE.INVENTORY_ITEM_ID%TYPE
10401 , p_item_number IN MTL_ITEM_REVISIONS_INTERFACE.ITEM_NUMBER%TYPE
10402 , p_organization_id IN MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE
10403 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10404 , p_request_id IN MTL_ITEM_REVISIONS_INTERFACE.REQUEST_ID%TYPE DEFAULT NULL
10405 )
10406 RETURN MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE IS
10407 l_revision MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE;
10408 BEGIN
10409 IF p_inventory_item_id IS NULL THEN
10410 IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10411 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10412 ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10413 INTO l_revision
10414 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10415 WHERE MIRI.SET_PROCESS_id = p_batch_id
10416 AND MIRI.ITEM_NUMBER = p_item_number
10417 AND MIRI.ORGANIZATION_ID = p_organization_id
10418 AND MIRI.PROCESS_FLAG = 1;
10419 ELSE
10420 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10421 ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10422 INTO l_revision
10423 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10424 WHERE MIRI.SET_PROCESS_id = p_batch_id
10425 AND MIRI.ITEM_NUMBER = p_item_number
10426 AND MIRI.ORGANIZATION_ID = p_organization_id
10427 AND MIRI.REQUEST_ID = p_request_id
10428 AND MIRI.PROCESS_FLAG IN (3, 7);
10429 END IF;
10430 ELSE -- p_inventory_item_id is not null
10431 IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10432 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10433 ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10434 INTO l_revision
10435 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10436 WHERE MIRI.SET_PROCESS_id = p_batch_id
10437 AND ( ( MIRI.INVENTORY_ITEM_ID IS NULL AND MIRI.ITEM_NUMBER = p_item_number )
10438 OR MIRI.INVENTORY_ITEM_ID = p_inventory_item_id
10439 )
10440 AND MIRI.ORGANIZATION_ID = p_organization_id
10441 AND MIRI.PROCESS_FLAG = 1;
10442 ELSE
10443 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10444 ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10445 INTO l_revision
10446 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10447 WHERE MIRI.SET_PROCESS_id = p_batch_id
10448 AND ( ( MIRI.INVENTORY_ITEM_ID IS NULL AND MIRI.ITEM_NUMBER = p_item_number )
10449 OR MIRI.INVENTORY_ITEM_ID = p_inventory_item_id
10450 )
10451 AND MIRI.ORGANIZATION_ID = p_organization_id
10452 AND PROCESS_FLAG IN ( 3, 7 );
10453 END IF;
10454 END IF;
10455 RETURN l_revision;
10456 EXCEPTION
10457 WHEN NO_DATA_FOUND THEN
10458 RETURN NULL;
10459 END GET_LATEST_MIRI_REV_PDH;
10460
10461 --------------------------------------------------------------------------------------------
10462 -- Function WRAPPED_TO_NUMBER --
10463 -- Wraps the to_number built-in to return null in case of conversion failure --
10464 --------------------------------------------------------------------------------------------
10465 FUNCTION WRAPPED_TO_NUMBER( p_val VARCHAR2 )
10466 RETURN NUMBER
10467 DETERMINISTIC
10468 IS
10469 l_return_value NUMBER;
10470 BEGIN
10471 l_return_value := to_number( p_val );
10472 RETURN l_return_value;
10473 EXCEPTION
10474 WHEN OTHERS THEN
10475 RETURN NULL;
10476 END WRAPPED_TO_NUMBER;
10477
10478 --------------------------------------------------------------------------------------------
10479 -- Function WRAPPED_TO_DATE --
10480 -- Wraps the to_date built-in to return null in case of conversion failure --
10481 --------------------------------------------------------------------------------------------
10482 FUNCTION WRAPPED_TO_DATE( p_val VARCHAR2 )
10483 RETURN DATE
10484 DETERMINISTIC
10485 IS
10486 l_return_value DATE;
10487 BEGIN
10488 l_return_value := to_date( p_val, EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT );
10489
10490 -- bug 5366882: substitute internal "null-out" value with excel "null-out" value
10491 RETURN CASE WHEN l_return_value = to_date( '1', 'J' ) THEN G_EXCEL_MISS_DATE_VAL -- to_date( '9999-12-31', 'YYYY-MM-DD' )
10492 ELSE l_return_value
10493 END;
10494 EXCEPTION
10495 WHEN OTHERS THEN
10496 RETURN NULL;
10497 END WRAPPED_TO_DATE;
10498
10499 --------------------------------------------------------------------------------------------
10500 -- Function GET_REV_USR_ATTR --
10501 -- Returns the display value of the specified revision attribute; if there is no --
10502 -- display value, it returns the appropriate value column, based on the --
10503 -- p_attr_value_type parameter --
10504 --------------------------------------------------------------------------------------------
10505 FUNCTION GET_REV_USR_ATTR
10506 ( p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10507 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10508 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10509 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10510 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10511 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10512 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10513 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10514 , p_attr_value_type IN FLAG
10515 )
10516 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10517 IS
10518 l_return_value EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE;
10519 l_revision_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10520 BEGIN
10521 l_return_value := null;
10522 l_revision_code := p_revision_code;
10523
10524 -- Check to see whether the revision code has been provided:
10525 -- If not, default it to be the code of the latest LOGICAL revision row
10526 IF l_revision_code IS NULL
10527 THEN
10528 l_revision_code := GET_LATEST_EIUAI_REV_SS( p_batch_id => p_batch_id
10529 , p_source_system_id => p_source_system_id
10530 , p_source_system_reference => p_source_system_reference
10531 , p_organization_id => p_organization_id
10532 , p_do_processed_rows_flag => FND_API.G_FALSE
10533 );
10534 END IF;
10535
10536 IF l_revision_code IS NOT NULL
10537 THEN
10538 BEGIN -- start sub-query block
10539 CASE p_attr_value_type
10540 -- text attr-type case
10541 WHEN G_TEXT_DATA_TYPE THEN
10542 SELECT NVL( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR ) INTO l_return_value
10543 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10544 WHERE
10545 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10546 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10547 AND EIUAI.ATTR_INT_NAME = p_attr_name
10548 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10549 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10550 AND EIUAI.ORGANIZATION_ID = p_organization_id
10551 AND EIUAI.DATA_SET_ID = p_batch_id
10552 AND EIUAI.REVISION = l_revision_code
10553 AND rownum < 2
10554 ;
10555 -- end text attr-type case
10556 -- number attr-type case
10557 WHEN G_NUMBER_DATA_TYPE THEN
10558 SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_NUM ) ) INTO l_return_value
10559 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10560 WHERE
10561 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10562 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10563 AND EIUAI.ATTR_INT_NAME = p_attr_name
10564 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10565 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10566 AND EIUAI.ORGANIZATION_ID = p_organization_id
10567 AND EIUAI.DATA_SET_ID = p_batch_id
10568 AND EIUAI.REVISION = l_revision_code
10569 AND rownum < 2
10570 ;
10571 -- end number attr-type case
10572 -- date attr-type case
10573 WHEN G_DATE_DATA_TYPE THEN
10574 -- XXX: which date format to use? what about date-time type vs date-type?
10575 SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_DATE ) ) INTO l_return_value
10576 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10577 WHERE
10578 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10579 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10580 AND EIUAI.ATTR_INT_NAME = p_attr_name
10581 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10582 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10583 AND EIUAI.ORGANIZATION_ID = p_organization_id
10584 AND EIUAI.DATA_SET_ID = p_batch_id
10585 AND EIUAI.REVISION = l_revision_code
10586 AND rownum < 2
10587 ;
10588 -- end date attr-type case
10589 END CASE;
10590 EXCEPTION
10591 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table!
10592 l_return_value := null; -- 'no data found';
10593 WHEN OTHERS THEN
10594 l_return_value := null; -- 'other error';
10595 END; -- query sub-block
10596 ELSE -- revision code is null
10597 BEGIN -- start sub-query block
10598 CASE p_attr_value_type
10599 -- text attr-type case
10600 WHEN G_TEXT_DATA_TYPE THEN
10601 SELECT NVL( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR ) INTO l_return_value
10602 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10603 WHERE
10604 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10605 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10606 AND EIUAI.ATTR_INT_NAME = p_attr_name
10607 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10608 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10609 AND EIUAI.ORGANIZATION_ID = p_organization_id
10610 AND EIUAI.DATA_SET_ID = p_batch_id
10611 AND EIUAI.REVISION IS NULL
10612 AND rownum < 2
10613 ;
10614 -- end text attr-type case
10615 -- number attr-type case
10616 WHEN G_NUMBER_DATA_TYPE THEN
10617 SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_NUM ) ) INTO l_return_value
10618 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10619 WHERE
10620 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10621 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10622 AND EIUAI.ATTR_INT_NAME = p_attr_name
10623 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10624 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10625 AND EIUAI.ORGANIZATION_ID = p_organization_id
10626 AND EIUAI.DATA_SET_ID = p_batch_id
10627 AND EIUAI.REVISION IS NULL
10628 AND rownum < 2
10629 ;
10630 -- end number attr-type case
10631 -- date attr-type case
10632 WHEN G_DATE_DATA_TYPE THEN
10633 -- XXX: which date format to use? what about date-time type vs date-type?
10634 SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_DATE ) ) INTO l_return_value
10635 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10636 WHERE
10637 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10638 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10639 AND EIUAI.ATTR_INT_NAME = p_attr_name
10640 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10641 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10642 AND EIUAI.ORGANIZATION_ID = p_organization_id
10643 AND EIUAI.DATA_SET_ID = p_batch_id
10644 AND EIUAI.REVISION IS NULL
10645 AND rownum < 2
10646 ;
10647 -- end date attr-type case
10648 END CASE;
10649 EXCEPTION
10650 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table!
10651 l_return_value := null; -- 'no data found';
10652 WHEN OTHERS THEN
10653 l_return_value := null; -- 'other error';
10654 END; -- query sub-block
10655 END IF;
10656
10657 RETURN l_return_value;
10658 END GET_REV_USR_ATTR;
10659
10660 ----------------------------------------------------------------------------------------------
10661 -- Function GET_REV_USR_ATTR_TO_CHAR
10662 -- Returns the display value of the specified revision attribute, if the attribute is present
10663 -- in the interface table, or the internal value, interpreted as a display value.
10664 -- The assumption is that this will be called from a value set context ...
10665 ----------------------------------------------------------------------------------------------
10666 FUNCTION GET_REV_USR_ATTR_TO_CHAR
10667 (
10668 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10669 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE DEFAULT NULL
10670 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE DEFAULT NULL
10671 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10672 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10673 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10674 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10675 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10676 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10677 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10678 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
10679 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE DEFAULT NULL
10680 , p_use_pdh_keys_to_join IN BOOLEAN
10681 , p_get_value_col IN BOOLEAN
10682 , p_attr_type IN FLAG
10683 , p_attr_miss_value IN BOOLEAN DEFAULT TRUE
10684 )
10685 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10686 IS
10687 l_return_value EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE;
10688 l_revision_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10689 l_sql_stmt VARCHAR2( 32000 );
10690 l_do_procd_rows_sql VARCHAR2( 200 );
10691 l_join_sql VARCHAR2( 200 );
10692 l_select_sql VARCHAR2( 200 );
10693 l_do_processed_rows BOOLEAN;
10694 l_miss_str VARCHAR2( 30 );
10695 l_date_format VARCHAR2( 30 ) := NULL;
10696 BEGIN
10697 l_return_value := null; -- 'default';
10698
10699 CASE -- order of WHEN clauses matters!
10700 WHEN p_USE_PDH_KEYS_TO_JOIN AND
10701 p_inventory_item_id IS NULL AND
10702 p_item_number IS NULL
10703 THEN RETURN l_return_value;
10704 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10705 l_join_sql :=
10706 ' AND ( ( '
10707 || CASE
10708 WHEN p_inventory_item_id IS NOT NULL THEN
10709 ' EIUAI.INVENTORY_ITEM_ID IS NULL AND'
10710 ELSE ''
10711 END
10712 || ' EIUAI.ITEM_NUMBER = :item_number '
10713 || ' ) '
10714 || ' OR EIUAI.INVENTORY_ITEM_ID = :item_id '
10715 || ' ) '
10716 ;
10717 WHEN p_source_system_reference IS NULL AND
10718 p_source_system_id IS NULL
10719 THEN RETURN l_return_value;
10720 ELSE
10721 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE = :ss_ref '
10722 || ' AND EIUAI.SOURCE_SYSTEM_ID = :ss_id ';
10723 END CASE;
10724
10725 l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
10726 l_do_procd_rows_sql := ' AND EIUAI.PROCESS_STATUS'
10727 || CASE
10728 WHEN l_do_processed_rows THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
10729 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
10730 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join THEN ' = 1 '
10731 ELSE '' -- XXX: hmmm, raise exception here?
10732 END;
10733
10734 l_date_format := CASE p_attr_type
10735 WHEN G_DATE_TIME_DATA_TYPE THEN FND_PROFILE.VALUE( 'ICX_DATE_FORMAT_MASK' ) || ' HH24:MI:SS'
10736 WHEN G_DATE_DATA_TYPE THEN FND_PROFILE.VALUE( 'ICX_DATE_FORMAT_MASK' )
10737 ELSE NULL
10738 END;
10739
10740 l_miss_str := CASE WHEN NOT p_attr_miss_value THEN G_EXCEL_MISS_VS_VAL
10741 WHEN p_attr_type = G_DATE_DATA_TYPE THEN 'TO_CHAR('||G_EXCEL_MISS_DATE_STR||','''||l_date_format||''')'
10742 WHEN p_attr_type = G_DATE_TIME_DATA_TYPE THEN 'TO_CHAR('||G_EXCEL_MISS_DATE_STR||','''||l_date_format||''')'
10743 WHEN p_attr_type = G_NUMBER_DATA_TYPE THEN 'TO_CHAR('||G_EXCEL_MISS_NUM_STR||')'
10744 WHEN p_attr_type = G_TEXT_DATA_TYPE THEN ''''||G_EXCEL_MISS_CHAR_VAL||''''
10745 END;
10746
10747 IF p_get_value_col
10748 THEN
10749 l_select_sql := CASE
10750 WHEN p_attr_type = G_DATE_DATA_TYPE OR p_attr_type = G_DATE_TIME_DATA_TYPE THEN
10751 'DECODE( EIUAI.ATTR_VALUE_DATE'
10752 ||', NULL, ' || l_miss_str
10753 ||', '|| EGO_USER_ATTRS_BULK_PVT.G_NULL_DATE_VAL ||', '|| l_miss_str
10754 ||', TO_CHAR( EIUAI.ATTR_VALUE_DATE, '''|| l_date_format || ''')'
10755 ||')'
10756 WHEN p_attr_type = G_NUMBER_DATA_TYPE THEN
10757 -- ignore UOM column completely ... the assumption is that this
10758 -- code is called for junk values only
10759 'DECODE( EIUAI.ATTR_VALUE_NUM'
10760 ||', NULL, ' || l_miss_str
10761 ||', TO_CHAR( EIUAI.ATTR_VALUE_NUM )'
10762 ||')'
10763 WHEN p_attr_type = G_TEXT_DATA_TYPE THEN
10764 'NVL( EIUAI.ATTR_VALUE_STR, '|| l_miss_str || ')'
10765 END;
10766 ELSE
10767 l_select_sql := ' EIUAI.ATTR_DISP_VALUE ';
10768 END IF;
10769
10770 -- Check to see whether the revision code has been provided:
10771 -- If not, default it to be the code of the latest LOGICAL revision row
10772 l_revision_code :=
10773 CASE -- order of WHEN clauses matters!
10774 WHEN p_revision_code IS NOT NULL THEN p_revision_code
10775 WHEN p_use_pdh_keys_to_join THEN
10776 GET_LATEST_EIUAI_REV_PDH( p_batch_id => p_batch_id
10777 , p_inventory_item_id => p_inventory_item_id
10778 , p_item_number => p_item_number
10779 , p_organization_id => p_organization_id
10780 , p_do_processed_rows_flag => p_do_processed_rows_flag
10781 , p_request_id => p_request_id
10782 )
10783 ELSE
10784 GET_LATEST_EIUAI_REV_SS ( p_batch_id => p_batch_id
10785 , p_source_system_id => p_source_system_id
10786 , p_source_system_reference => p_source_system_reference
10787 , p_organization_id => p_organization_id
10788 , p_do_processed_rows_flag => p_do_processed_rows_flag
10789 , p_request_id => p_request_id
10790 )
10791 END;
10792
10793 l_sql_stmt := '
10794 SELECT ' || l_select_sql
10795 ||' FROM EGO_ITM_USR_ATTR_INTRFC EIUAI '
10796 ||' WHERE '
10797 ||' NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type'
10798 ||' AND EIUAI.ATTR_GROUP_INT_NAME = :attr_grp'
10799 ||' AND EIUAI.ATTR_INT_NAME = :attr '
10800 || l_join_sql
10801 ||' AND EIUAI.ORGANIZATION_ID = :org_id '
10802 ||' AND EIUAI.DATA_SET_ID = :batch_id '
10803 || l_do_procd_rows_sql
10804 ||' AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1 '
10805 ||' AND rownum = 1 '
10806 ;
10807 -- note that decode does a null-safe comparision (i.e. ( NULL = NULL ) = TRUE ||||'')
10808
10809 IF l_do_processed_rows THEN
10810 CASE
10811 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10812 EXECUTE IMMEDIATE l_sql_stmt
10813 INTO l_return_value
10814 USING G_DEFAULT_ATTR_GROUP_TYPE
10815 , p_attr_group_type, p_attr_group_name, p_attr_name
10816 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10817 , p_request_id
10818 , l_revision_code
10819 ;
10820 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10821 EXECUTE IMMEDIATE l_sql_stmt
10822 INTO l_return_value
10823 USING G_DEFAULT_ATTR_GROUP_TYPE
10824 , p_attr_group_type, p_attr_group_name, p_attr_name
10825 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10826 , p_request_id
10827 , l_revision_code
10828 ;
10829 END CASE;
10830 ELSE -- unprocessed rows
10831 CASE
10832 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10833 EXECUTE IMMEDIATE l_sql_stmt
10834 INTO l_return_value
10835 USING G_DEFAULT_ATTR_GROUP_TYPE
10836 , p_attr_group_type, p_attr_group_name, p_attr_name
10837 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10838 , l_revision_code
10839 ;
10840 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10841 EXECUTE IMMEDIATE l_sql_stmt
10842 INTO l_return_value
10843 USING G_DEFAULT_ATTR_GROUP_TYPE
10844 , p_attr_group_type, p_attr_group_name, p_attr_name
10845 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10846 , l_revision_code
10847 ;
10848 END CASE;
10849 END IF;
10850
10851 RETURN l_return_value;
10852
10853 EXCEPTION
10854 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
10855 RETURN l_return_value;
10856 WHEN OTHERS THEN
10857 -- XXX: Log the error here?
10858 RETURN l_return_value;
10859 END GET_REV_USR_ATTR_TO_CHAR;
10860
10861 FUNCTION GET_REV_USR_ATTR_SS_DISP
10862 (
10863 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10864 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10865 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10866 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10867 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10868 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10869 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10870 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10871 , p_attr_type IN FLAG
10872 , p_from_internal_column IN FLAG
10873 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10874 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10875 )
10876 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10877 IS
10878 l_get_value_col BOOLEAN := ( FND_API.G_TRUE = p_from_internal_column );
10879 BEGIN
10880 RETURN GET_REV_USR_ATTR_TO_CHAR
10881 (
10882 p_batch_id => p_batch_id
10883 , p_source_system_id => p_source_system_id
10884 , p_source_system_reference => p_source_system_reference
10885 , p_organization_id => p_organization_id
10886 , p_revision_code => p_revision_code
10887 , p_attr_group_type => p_attr_group_type
10888 , p_attr_group_name => p_attr_group_name
10889 , p_attr_name => p_attr_name
10890 , p_attr_type => p_attr_type
10891 , p_do_processed_rows_flag => p_do_processed_rows_flag
10892 , p_request_id => p_request_id
10893 , p_use_pdh_keys_to_join => FALSE
10894 , p_get_value_col => l_get_value_col
10895 , p_attr_miss_value => FALSE -- returns value set miss value if get_value_column TRUE
10896 );
10897 END;
10898
10899 FUNCTION GET_REV_USR_ATTR_PDH_DISP
10900 (
10901 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10902 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
10903 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
10904 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10905 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10906 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10907 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10908 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10909 , p_attr_type IN FLAG
10910 , p_from_internal_column IN FLAG
10911 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10912 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10913 )
10914 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10915 IS
10916 l_get_value_col BOOLEAN := ( FND_API.G_TRUE = p_from_internal_column );
10917 BEGIN
10918 RETURN GET_REV_USR_ATTR_TO_CHAR
10919 (
10920 p_batch_id => p_batch_id
10921 , p_inventory_item_id => p_inventory_item_id
10922 , p_item_number => p_item_number
10923 , p_organization_id => p_organization_id
10924 , p_revision_code => p_revision_code
10925 , p_attr_group_type => p_attr_group_type
10926 , p_attr_group_name => p_attr_group_name
10927 , p_attr_name => p_attr_name
10928 , p_attr_type => p_attr_type
10929 , p_do_processed_rows_flag => p_do_processed_rows_flag
10930 , p_request_id => p_request_id
10931 , p_use_pdh_keys_to_join => TRUE
10932 , p_get_value_col => l_get_value_col
10933 , p_attr_miss_value => FALSE -- returns value set miss value if get_value_column TRUE
10934 );
10935 END;
10936
10937
10938 ----------------------------------------------------------------------------------------------
10939 -- Function GET_REV_USR_ATTR_DISP_DATE
10940 -- Returns the date value of the specified revision attribute, if the attribute is present
10941 -- in the interface table, merging in an attempted conversion of the display column content.
10942 ----------------------------------------------------------------------------------------------
10943 FUNCTION GET_REV_USR_ATTR_DATE
10944 (
10945 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10946 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE DEFAULT NULL
10947 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE DEFAULT NULL
10948 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10949 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10950 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10951 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10952 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10953 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10954 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10955 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
10956 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE DEFAULT NULL
10957 , p_use_pdh_keys_to_join IN BOOLEAN
10958 , p_get_value_column IN BOOLEAN
10959 )
10960 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE
10961 IS
10962 l_return_value EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE;
10963 l_revision_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10964 l_sql_stmt VARCHAR2( 32000 );
10965 l_do_procd_rows_sql VARCHAR2( 200 );
10966 l_join_sql VARCHAR2( 200 );
10967 l_select_sql VARCHAR2( 300 );
10968 l_do_processed_rows BOOLEAN;
10969 BEGIN
10970 l_return_value := null; -- 'default';
10971
10972 CASE -- order of WHEN clauses matters!
10973 WHEN p_USE_PDH_KEYS_TO_JOIN AND
10974 p_inventory_item_id IS NULL AND
10975 p_item_number IS NULL
10976 THEN RETURN l_return_value;
10977 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10978 l_join_sql :=
10979 ' AND ( ( '
10980 || CASE
10981 WHEN p_inventory_item_id IS NOT NULL THEN
10982 ' EIUAI.INVENTORY_ITEM_ID IS NULL AND'
10983 ELSE ''
10984 END
10985 || ' EIUAI.ITEM_NUMBER = :item_number '
10986 || ' ) '
10987 || ' OR EIUAI.INVENTORY_ITEM_ID = :item_id '
10988 || ' ) '
10989 ;
10990 WHEN p_source_system_reference IS NULL AND
10991 p_source_system_id IS NULL
10992 THEN RETURN l_return_value;
10993 ELSE
10994 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE = :ss_ref '
10995 || ' AND EIUAI.SOURCE_SYSTEM_ID = :ss_id ';
10996 END CASE;
10997
10998 l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
10999 l_do_procd_rows_sql := ' AND EIUAI.PROCESS_STATUS'
11000 || CASE
11001 WHEN l_do_processed_rows THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
11002 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
11003 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join THEN ' = 1 '
11004 ELSE '' -- XXX: hmmm, raise exception here?
11005 END;
11006
11007 IF p_get_value_column THEN
11008 l_select_sql := ' EIUAI.ATTR_VALUE_DATE ';
11009 ELSE
11010 l_select_sql := ' NVL2( EIUAI.ATTR_DISP_VALUE '
11011 || ' , EGO_IMPORT_PVT.wrapped_to_date( EIUAI.ATTR_DISP_VALUE ) '
11012 || ' , CASE WHEN EIUAI.ATTR_VALUE_DATE IS NULL '
11013 || 'OR EIUAI.ATTR_VALUE_DATE = TO_DATE(''1'',''J'') THEN ' || G_EXCEL_MISS_DATE_STR
11014 || ' ELSE EIUAI.ATTR_VALUE_DATE END'
11015 || ' ) '
11016 ;
11017 END IF;
11018
11019 -- Check to see whether the revision code has been provided:
11020 -- If not, default it to be the code of the latest LOGICAL revision row
11021 l_revision_code :=
11022 CASE -- order of WHEN clauses matters!
11023 WHEN p_revision_code IS NOT NULL THEN p_revision_code
11024 WHEN p_use_pdh_keys_to_join THEN
11025 GET_LATEST_EIUAI_REV_PDH( p_batch_id => p_batch_id
11026 , p_inventory_item_id => p_inventory_item_id
11027 , p_item_number => p_item_number
11028 , p_organization_id => p_organization_id
11029 , p_do_processed_rows_flag => p_do_processed_rows_flag
11030 , p_request_id => p_request_id
11031 )
11032 ELSE
11033 GET_LATEST_EIUAI_REV_SS ( p_batch_id => p_batch_id
11034 , p_source_system_id => p_source_system_id
11035 , p_source_system_reference => p_source_system_reference
11036 , p_organization_id => p_organization_id
11037 , p_do_processed_rows_flag => p_do_processed_rows_flag
11038 , p_request_id => p_request_id
11039 )
11040 END;
11041
11042 l_sql_stmt := '
11043 SELECT ' || l_select_sql
11044 ||' FROM EGO_ITM_USR_ATTR_INTRFC EIUAI '
11045 ||' WHERE '
11046 ||' NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type'
11047 ||' AND EIUAI.ATTR_GROUP_INT_NAME = :attr_grp'
11048 ||' AND EIUAI.ATTR_INT_NAME = :attr '
11049 || l_join_sql
11050 ||' AND EIUAI.ORGANIZATION_ID = :org_id '
11051 ||' AND EIUAI.DATA_SET_ID = :batch_id '
11052 || l_do_procd_rows_sql
11053 ||' AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1 '
11054 ||' AND rownum = 1 '
11055 ;
11056 -- note that decode does a null-safe comparision (i.e. ( NULL = NULL ) = TRUE ||||'')
11057
11058 -- my_put_line( 'sql:' || l_sql_stmt );
11059
11060 IF l_do_processed_rows THEN
11061 CASE
11062 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11063 EXECUTE IMMEDIATE l_sql_stmt
11064 INTO l_return_value
11065 USING G_DEFAULT_ATTR_GROUP_TYPE
11066 , p_attr_group_type, p_attr_group_name, p_attr_name
11067 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11068 , p_request_id
11069 , l_revision_code
11070 ;
11071 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
11072 EXECUTE IMMEDIATE l_sql_stmt
11073 INTO l_return_value
11074 USING G_DEFAULT_ATTR_GROUP_TYPE
11075 , p_attr_group_type, p_attr_group_name, p_attr_name
11076 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11077 , p_request_id
11078 , l_revision_code
11079 ;
11080 END CASE;
11081 ELSE -- unprocessed rows
11082 CASE
11083 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11084 EXECUTE IMMEDIATE l_sql_stmt
11085 INTO l_return_value
11086 USING G_DEFAULT_ATTR_GROUP_TYPE
11087 , p_attr_group_type, p_attr_group_name, p_attr_name
11088 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11089 , l_revision_code
11090 ;
11091 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
11092 EXECUTE IMMEDIATE l_sql_stmt
11093 INTO l_return_value
11094 USING G_DEFAULT_ATTR_GROUP_TYPE
11095 , p_attr_group_type, p_attr_group_name, p_attr_name
11096 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11097 , l_revision_code
11098 ;
11099 END CASE;
11100 END IF;
11101
11102 RETURN l_return_value;
11103
11104 EXCEPTION
11105 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11106 RETURN l_return_value;
11107 WHEN OTHERS THEN
11108 -- MY_PUT_LINE( 'GET_REV_USR_ATTR_DATE Error code ' || SQLCODE || ': ' || SQLERRM );
11109 RETURN l_return_value;
11110 END GET_REV_USR_ATTR_DATE;
11111
11112 FUNCTION GET_REV_USR_ATTR_SS_DDATE
11113 (
11114 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11115 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11116 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11117 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11118 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11119 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11120 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11121 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11122 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11123 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11124 )
11125 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11126 BEGIN
11127 RETURN GET_REV_USR_ATTR_DATE
11128 (
11129 p_batch_id => p_batch_id
11130 , p_source_system_id => p_source_system_id
11131 , p_source_system_reference => p_source_system_reference
11132 , p_organization_id => p_organization_id
11133 , p_revision_code => p_revision_code
11134 , p_attr_group_type => p_attr_group_type
11135 , p_attr_group_name => p_attr_group_name
11136 , p_attr_name => p_attr_name
11137 , p_do_processed_rows_flag => p_do_processed_rows_flag
11138 , p_request_id => p_request_id
11139 , p_use_pdh_keys_to_join => false
11140 , p_get_value_column => false
11141 );
11142 END GET_REV_USR_ATTR_SS_DDATE;
11143
11144 FUNCTION GET_REV_USR_ATTR_PDH_DDATE
11145 ( p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11146 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11147 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11148 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11149 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11150 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11151 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11152 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11153 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11154 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11155 )
11156 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11157 BEGIN
11158 RETURN GET_REV_USR_ATTR_DATE
11159 (
11160 p_batch_id => p_batch_id
11161 , p_inventory_item_id => p_inventory_item_id
11162 , p_item_number => p_item_number
11163 , p_organization_id => p_organization_id
11164 , p_revision_code => p_revision_code
11165 , p_attr_group_type => p_attr_group_type
11166 , p_attr_group_name => p_attr_group_name
11167 , p_attr_name => p_attr_name
11168 , p_do_processed_rows_flag => p_do_processed_rows_flag
11169 , p_request_id => p_request_id
11170 , p_use_pdh_keys_to_join => true
11171 , p_get_value_column => false
11172 );
11173 END GET_REV_USR_ATTR_PDH_DDATE;
11174
11175 ----------------------------------------------------------------------------------------------
11176 -- Function GET_REV_USR_ATTR_DISP_STR
11177 -- Returns the string value of the specified revision attribute, if the attribute is present
11178 -- in the interface table, merging in an attempted conversion of the display column content.
11179 ----------------------------------------------------------------------------------------------
11180 FUNCTION GET_REV_USR_ATTR_STR
11181 ( p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11182 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE DEFAULT NULL
11183 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE DEFAULT NULL
11184 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11185 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11186 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11187 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11188 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11189 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11190 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11191 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
11192 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE DEFAULT NULL
11193 , p_use_pdh_keys_to_join IN BOOLEAN
11194 , p_get_value_column IN BOOLEAN
11195 )
11196 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE
11197 IS
11198 l_return_value EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE;
11199 l_revision_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
11200 l_sql_stmt VARCHAR2( 32000 );
11201 l_do_procd_rows_sql VARCHAR2( 200 );
11202 l_join_sql VARCHAR2( 200 );
11203 l_select_sql VARCHAR2( 200 );
11204 l_do_processed_rows BOOLEAN;
11205 BEGIN
11206 l_return_value := null; -- 'default';
11207
11208 CASE -- order of WHEN clauses matters!
11209 WHEN p_USE_PDH_KEYS_TO_JOIN AND
11210 p_inventory_item_id IS NULL AND
11211 p_item_number IS NULL
11212 THEN RETURN l_return_value;
11213 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11214 l_join_sql :=
11215 ' AND ( ( '
11216 || CASE
11217 WHEN p_inventory_item_id IS NOT NULL THEN
11218 ' EIUAI.INVENTORY_ITEM_ID IS NULL AND'
11219 ELSE ''
11220 END
11221 || ' EIUAI.ITEM_NUMBER = :item_number '
11222 || ' ) '
11223 || ' OR EIUAI.INVENTORY_ITEM_ID = :item_id '
11224 || ' ) '
11225 ;
11226 WHEN p_source_system_reference IS NULL AND
11227 p_source_system_id IS NULL
11228 THEN RETURN l_return_value;
11229 ELSE
11230 l_join_sql := '
11231 AND EIUAI.SOURCE_SYSTEM_REFERENCE = :ss_ref
11232 AND EIUAI.SOURCE_SYSTEM_ID = :ss_id ';
11233 END CASE;
11234
11235 l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
11236 l_do_procd_rows_sql := ' AND EIUAI.PROCESS_STATUS'
11237 || CASE
11238 WHEN l_do_processed_rows THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
11239 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
11240 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join THEN ' = 1 '
11241 ELSE '' -- XXX: hmmm, raise exception here?
11242 END;
11243
11244 IF p_get_value_column THEN
11245 l_select_sql := ' EIUAI.ATTR_VALUE_STR ';
11246 ELSE
11247 l_select_sql := ' COALESCE( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR, '''|| G_EXCEL_MISS_CHAR_VAL ||''' ) ';
11248 END IF;
11249
11250 -- Check to see whether the revision code has been provided:
11251 -- If not, default it to be the code of the latest LOGICAL revision row
11252 l_revision_code :=
11253 CASE -- order of WHEN clauses matters!
11254 WHEN p_revision_code IS NOT NULL THEN p_revision_code
11255 WHEN p_use_pdh_keys_to_join THEN
11256 GET_LATEST_EIUAI_REV_PDH( p_batch_id => p_batch_id
11257 , p_inventory_item_id => p_inventory_item_id
11258 , p_item_number => p_item_number
11259 , p_organization_id => p_organization_id
11260 , p_do_processed_rows_flag => p_do_processed_rows_flag
11261 , p_request_id => p_request_id
11262 )
11263 ELSE
11264 GET_LATEST_EIUAI_REV_SS ( p_batch_id => p_batch_id
11265 , p_source_system_id => p_source_system_id
11266 , p_source_system_reference => p_source_system_reference
11267 , p_organization_id => p_organization_id
11268 , p_do_processed_rows_flag => p_do_processed_rows_flag
11269 , p_request_id => p_request_id
11270 )
11271 END;
11272
11273 l_sql_stmt := '
11274 SELECT ' || l_select_sql
11275 || '
11276 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
11277 WHERE
11278 NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type
11279 AND EIUAI.ATTR_GROUP_INT_NAME = :attr_grp
11280 AND EIUAI.ATTR_INT_NAME = :attr '
11281 || l_join_sql
11282 || '
11283 AND EIUAI.ORGANIZATION_ID = :org_id
11284 AND EIUAI.DATA_SET_ID = :batch_id '
11285 || l_do_procd_rows_sql
11286 /* || '
11287 AND EIUAI.REVISION '
11288 || CASE l_revision_code
11289 WHEN NULL THEN 'IS NULL '
11290 ELSE '= :rev_code '
11291 END */
11292 || '
11293 AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1
11294 AND rownum = 1
11295 ';
11296
11297 -- my_put_line( l_sql_stmt );
11298
11299 CASE
11300 WHEN l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11301 EXECUTE IMMEDIATE l_sql_stmt
11302 INTO l_return_value
11303 USING G_DEFAULT_ATTR_GROUP_TYPE
11304 , p_attr_group_type, p_attr_group_name, p_attr_name
11305 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11306 , p_request_id
11307 , l_revision_code
11308 ;
11309 WHEN l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11310 EXECUTE IMMEDIATE l_sql_stmt
11311 INTO l_return_value
11312 USING G_DEFAULT_ATTR_GROUP_TYPE
11313 , p_attr_group_type, p_attr_group_name, p_attr_name
11314 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11315 , p_request_id
11316 , l_revision_code
11317 ;
11318 WHEN NOT l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11319 EXECUTE IMMEDIATE l_sql_stmt
11320 INTO l_return_value
11321 USING G_DEFAULT_ATTR_GROUP_TYPE
11322 , p_attr_group_type, p_attr_group_name, p_attr_name
11323 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11324 , l_revision_code
11325 ;
11326 WHEN NOT l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11327 EXECUTE IMMEDIATE l_sql_stmt
11328 INTO l_return_value
11329 USING G_DEFAULT_ATTR_GROUP_TYPE
11330 , p_attr_group_type, p_attr_group_name, p_attr_name
11331 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11332 , l_revision_code
11333 ;
11334 END CASE;
11335 RETURN l_return_value;
11336
11337 EXCEPTION
11338 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11339 RETURN l_return_value;
11340 WHEN OTHERS THEN
11341 -- MY_PUT_LINE( 'Error code ' || SQLCODE || ': ' || SQLERRM );
11342 RAISE;
11343 END GET_REV_USR_ATTR_STR;
11344
11345 FUNCTION GET_REV_USR_ATTR_SS_DSTR
11346 (
11347 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11348 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11349 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11350 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11351 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11352 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11353 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11354 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11355 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11356 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11357 )
11358 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11359 BEGIN
11360 RETURN GET_REV_USR_ATTR_STR
11361 (
11362 p_batch_id => p_batch_id
11363 , p_source_system_id => p_source_system_id
11364 , p_source_system_reference => p_source_system_reference
11365 , p_organization_id => p_organization_id
11366 , p_revision_code => p_revision_code
11367 , p_attr_group_type => p_attr_group_type
11368 , p_attr_group_name => p_attr_group_name
11369 , p_attr_name => p_attr_name
11370 , p_do_processed_rows_flag => p_do_processed_rows_flag
11371 , p_request_id => p_request_id
11372 , p_use_pdh_keys_to_join => false
11373 , p_get_value_column => false
11374 );
11375 END GET_REV_USR_ATTR_SS_DSTR;
11376
11377 FUNCTION GET_REV_USR_ATTR_PDH_DSTR
11378 (
11379 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11380 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11381 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11382 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11383 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11384 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11385 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11386 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11387 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11388 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11389 )
11390 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11391 BEGIN
11392 RETURN GET_REV_USR_ATTR_STR
11393 (
11394 p_batch_id => p_batch_id
11395 , p_inventory_item_id => p_inventory_item_id
11396 , p_item_number => p_item_number
11397 , p_organization_id => p_organization_id
11398 , p_revision_code => p_revision_code
11399 , p_attr_group_type => p_attr_group_type
11400 , p_attr_group_name => p_attr_group_name
11401 , p_attr_name => p_attr_name
11402 , p_do_processed_rows_flag => p_do_processed_rows_flag
11403 , p_request_id => p_request_id
11404 , p_use_pdh_keys_to_join => true
11405 , p_get_value_column => false
11406 );
11407 END GET_REV_USR_ATTR_PDH_DSTR;
11408
11409 ----------------------------------------------------------------------------------------------
11410 -- Function GET_REV_USR_ATTR_DISP_NUM
11411 -- Returns the number value of the specified revision attribute, if the attribute is present
11412 -- in the interface table, merging in an attempted conversion of the display column content.
11413 --------------------------------------------------------------------------------------------
11414 FUNCTION GET_REV_USR_ATTR_NUM
11415 (
11416 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11417 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE DEFAULT NULL
11418 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE DEFAULT NULL
11419 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11420 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11421 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11422 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11423 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11424 , p_output_uom_code IN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE DEFAULT NULL
11425 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11426 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11427 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
11428 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE DEFAULT NULL
11429 , p_use_pdh_keys_to_join IN BOOLEAN
11430 , p_get_value_column IN BOOLEAN
11431 )
11432 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE
11433 IS
11434 l_return_value EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE;
11435 l_num_value EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE;
11436 l_revision_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
11437 l_sql_stmt VARCHAR2( 32000 );
11438 l_do_procd_rows_sql VARCHAR2( 200 );
11439 l_join_sql VARCHAR2( 200 );
11440 l_select_sql VARCHAR2( 200 );
11441 l_do_processed_rows BOOLEAN;
11442
11443 l_uom_code EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE;
11444 l_uom_disp_value EGO_ITM_USR_ATTR_INTRFC.ATTR_UOM_DISP_VALUE%TYPE;
11445 l_uom_rate NUMBER := 1;
11446 BEGIN
11447 l_return_value := null; -- 'default';
11448
11449 CASE -- order of WHEN clauses matters!
11450 WHEN p_USE_PDH_KEYS_TO_JOIN AND
11451 p_inventory_item_id IS NULL AND
11452 p_item_number IS NULL
11453 THEN RETURN l_return_value;
11454 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11455 l_join_sql :=
11456 ' AND ( ( '
11457 || CASE
11458 WHEN p_inventory_item_id IS NOT NULL THEN
11459 ' EIUAI.INVENTORY_ITEM_ID IS NULL AND'
11460 ELSE ''
11461 END
11462 || ' EIUAI.ITEM_NUMBER = :item_number '
11463 || ' ) '
11464 || ' OR EIUAI.INVENTORY_ITEM_ID = :item_id '
11465 || ' ) '
11466 ;
11467 WHEN p_source_system_reference IS NULL AND
11468 p_source_system_id IS NULL
11469 THEN RETURN l_return_value;
11470 ELSE
11471 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE = :ss_ref '
11472 || ' AND EIUAI.SOURCE_SYSTEM_ID = :ss_id ';
11473 END CASE;
11474
11475 l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
11476 l_do_procd_rows_sql := ' AND EIUAI.PROCESS_STATUS'
11477 || CASE
11478 WHEN l_do_processed_rows THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
11479 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
11480 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join THEN ' = 1 '
11481 ELSE '' -- XXX: hmmm, raise exception here?
11482 END;
11483
11484 IF p_get_value_column THEN
11485 l_select_sql := ' EIUAI.ATTR_VALUE_NUM ';
11486 ELSE
11487 l_select_sql := ' NVL2( EIUAI.ATTR_DISP_VALUE '
11488 || ' , to_number( EIUAI.ATTR_DISP_VALUE ) '
11489 || ' , NVL( EIUAI.ATTR_VALUE_NUM, ' || G_EXCEL_MISS_NUM_STR
11490 || ' ) ) '
11491 ;
11492 END IF;
11493
11494 -- Check to see whether the revision code has been provided:
11495 -- If not, default it to be the code of the latest LOGICAL revision row
11496 l_revision_code :=
11497 CASE -- order of WHEN clauses matters!
11498 WHEN p_revision_code IS NOT NULL THEN p_revision_code
11499 WHEN p_use_pdh_keys_to_join THEN
11500 GET_LATEST_EIUAI_REV_PDH( p_batch_id => p_batch_id
11501 , p_inventory_item_id => p_inventory_item_id
11502 , p_item_number => p_item_number
11503 , p_organization_id => p_organization_id
11504 , p_do_processed_rows_flag => p_do_processed_rows_flag
11505 , p_request_id => p_request_id
11506 )
11507 ELSE
11508 GET_LATEST_EIUAI_REV_SS ( p_batch_id => p_batch_id
11509 , p_source_system_id => p_source_system_id
11510 , p_source_system_reference => p_source_system_reference
11511 , p_organization_id => p_organization_id
11512 , p_do_processed_rows_flag => p_do_processed_rows_flag
11513 , p_request_id => p_request_id
11514 )
11515 END;
11516
11517 l_sql_stmt := '
11518 SELECT ' || l_select_sql
11519 || ', ATTR_VALUE_UOM
11520 , ATTR_UOM_DISP_VALUE
11521 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
11522 WHERE
11523 NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type
11524 AND EIUAI.ATTR_GROUP_INT_NAME = :attr_grp
11525 AND EIUAI.ATTR_INT_NAME = :attr '
11526 || l_join_sql
11527 || '
11528 AND EIUAI.ORGANIZATION_ID = :org_id
11529 AND EIUAI.DATA_SET_ID = :batch_id '
11530 || l_do_procd_rows_sql
11531 || '
11532 AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1
11533 AND rownum = 1
11534 ';
11535
11536 -- my_put_line( l_sql_stmt );
11537
11538 CASE
11539 WHEN l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11540 EXECUTE IMMEDIATE l_sql_stmt
11541 INTO l_num_value, l_uom_code, l_uom_disp_value
11542 USING G_DEFAULT_ATTR_GROUP_TYPE
11543 , p_attr_group_type, p_attr_group_name, p_attr_name
11544 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11545 , p_request_id
11546 , l_revision_code
11547 ;
11548 WHEN l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11549 EXECUTE IMMEDIATE l_sql_stmt
11550 INTO l_num_value, l_uom_code, l_uom_disp_value
11551 USING G_DEFAULT_ATTR_GROUP_TYPE
11552 , p_attr_group_type, p_attr_group_name, p_attr_name
11553 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11554 , p_request_id
11555 , l_revision_code
11556 ;
11557 WHEN NOT l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11558 EXECUTE IMMEDIATE l_sql_stmt
11559 INTO l_num_value, l_uom_code, l_uom_disp_value
11560 USING G_DEFAULT_ATTR_GROUP_TYPE
11561 , p_attr_group_type, p_attr_group_name, p_attr_name
11562 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11563 , l_revision_code
11564 ;
11565 WHEN NOT l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11566 EXECUTE IMMEDIATE l_sql_stmt
11567 INTO l_num_value, l_uom_code, l_uom_disp_value
11568 USING G_DEFAULT_ATTR_GROUP_TYPE
11569 , p_attr_group_type, p_attr_group_name, p_attr_name
11570 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11571 , l_revision_code
11572 ;
11573 END CASE;
11574
11575 -- perform a uom conversion if one is necessary
11576 l_return_value := CASE WHEN p_output_uom_code IS NULL THEN l_num_value
11577 ELSE WRAPPED_TO_UOM( p_val => l_num_value
11578 , p_to_uom_code => p_output_uom_code
11579 , p_from_uom_code => l_uom_code
11580 , p_from_uom_value => l_uom_disp_value
11581 )
11582 END;
11583 RETURN l_return_value;
11584 EXCEPTION
11585 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11586 RETURN l_return_value;
11587 WHEN OTHERS THEN
11588 -- MY_PUT_LINE( 'GET_REV_USR_ATTR_NUM Error code ' || SQLCODE || ': ' || SQLERRM );
11589 RETURN l_return_value;
11590 END GET_REV_USR_ATTR_NUM;
11591
11592 --------------------------------------------------------------------------------------------
11593 -- Function WRAPPED_TO_UOM --
11594 -- Wraps inv_convert.uom_conversion to return null in case of conversion failure. --
11595 -- If both of the from_uom params are null, no attempt to make the conversion is --
11596 -- performed. --
11597 --------------------------------------------------------------------------------------------
11598 FUNCTION WRAPPED_TO_UOM( p_val NUMBER
11599 , p_to_uom_code EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11600 , p_from_uom_code EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11601 , p_from_uom_value EGO_ITM_USR_ATTR_INTRFC.ATTR_UOM_DISP_VALUE%TYPE
11602 , p_inventory_item_id EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
11603 )
11604 RETURN NUMBER IS
11605 l_uom_code EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE := p_from_uom_code;
11606 l_uom_rate NUMBER;
11607 BEGIN
11608 IF p_val IS NULL
11609 OR p_val = 0
11610 OR p_val = 9.99e125 -- G_EXCEL_MISS_NUM we make sure that null out attempts are not UOM converted
11611 OR ( p_from_uom_code IS NULL
11612 AND p_from_uom_value IS NULL
11613 )
11614 THEN
11615 RETURN p_val;
11616 END IF;
11617
11618 IF l_uom_code IS NULL THEN
11619 SELECT uom_code INTO l_uom_code
11620 FROM mtl_units_of_measure_vl
11621 WHERE unit_of_measure = p_from_uom_value;
11622 END IF;
11623
11624 inv_convert.inv_um_conversion( from_unit => l_uom_code
11625 , to_unit => p_to_uom_code
11626 , item_id => p_inventory_item_id
11627 , uom_rate => l_uom_rate
11628 );
11629 IF l_uom_rate <> -99999 -- the error value in the inv_convert package
11630 THEN
11631 RETURN l_uom_rate * p_val;
11632 ELSE
11633 RETURN NULL;
11634 END IF;
11635
11636 EXCEPTION
11637 WHEN OTHERS THEN
11638 RETURN NULL;
11639 END WRAPPED_TO_UOM;
11640
11641 FUNCTION GET_REV_USR_ATTR_SS_DNUM
11642 (
11643 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11644 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11645 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11646 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11647 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11648 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11649 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11650 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11651 , p_output_uom_code IN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11652 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11653 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11654 )
11655 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11656 BEGIN
11657 RETURN GET_REV_USR_ATTR_NUM
11658 (
11659 p_batch_id => p_batch_id
11660 , p_source_system_id => p_source_system_id
11661 , p_source_system_reference => p_source_system_reference
11662 , p_organization_id => p_organization_id
11663 , p_revision_code => p_revision_code
11664 , p_attr_group_type => p_attr_group_type
11665 , p_attr_group_name => p_attr_group_name
11666 , p_attr_name => p_attr_name
11667 , p_do_processed_rows_flag => p_do_processed_rows_flag
11668 , p_request_id => p_request_id
11669 , p_use_pdh_keys_to_join => FALSE
11670 , p_get_value_column => FALSE
11671 , p_output_uom_code => p_output_uom_code
11672 );
11673 END GET_REV_USR_ATTR_SS_DNUM;
11674
11675 FUNCTION GET_REV_USR_ATTR_PDH_DNUM
11676 (
11677 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11678 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11679 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11680 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11681 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11682 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11683 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11684 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11685 , p_output_uom_code IN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11686 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11687 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11688 )
11689 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11690 BEGIN
11691 RETURN GET_REV_USR_ATTR_NUM
11692 (
11693 p_batch_id => p_batch_id
11694 , p_inventory_item_id => p_inventory_item_id
11695 , p_item_number => p_item_number
11696 , p_organization_id => p_organization_id
11697 , p_revision_code => p_revision_code
11698 , p_attr_group_type => p_attr_group_type
11699 , p_attr_group_name => p_attr_group_name
11700 , p_attr_name => p_attr_name
11701 , p_do_processed_rows_flag => p_do_processed_rows_flag
11702 , p_request_id => p_request_id
11703 , p_use_pdh_keys_to_join => TRUE
11704 , p_get_value_column => FALSE
11705 , p_output_uom_code => p_output_uom_code
11706 );
11707 END GET_REV_USR_ATTR_PDH_DNUM;
11708
11709 --------------------------------------------------------------------------------------------
11710 -- Function GET_REV_USR_ATTR_STR --
11711 -- Returns the string value of the specified revision attribute, if the attribute is present
11712 -- in the interface table.
11713 --------------------------------------------------------------------------------------------
11714 FUNCTION GET_REV_USR_ATTR_SS_VSTR
11715 (
11716 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11717 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11718 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11719 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11720 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11721 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11722 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11723 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11724 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11725 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11726 )
11727 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11728 BEGIN
11729 RETURN GET_REV_USR_ATTR_STR
11730 (
11731 p_batch_id => p_batch_id
11732 , p_source_system_id => p_source_system_id
11733 , p_source_system_reference => p_source_system_reference
11734 , p_organization_id => p_organization_id
11735 , p_revision_code => p_revision_code
11736 , p_attr_group_type => p_attr_group_type
11737 , p_attr_group_name => p_attr_group_name
11738 , p_attr_name => p_attr_name
11739 , p_do_processed_rows_flag => p_do_processed_rows_flag
11740 , p_request_id => p_request_id
11741 , p_use_pdh_keys_to_join => false
11742 , p_get_value_column => true
11743 );
11744 END GET_REV_USR_ATTR_SS_VSTR;
11745
11746 FUNCTION GET_REV_USR_ATTR_PDH_VSTR
11747 (
11748 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11749 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11750 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11751 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11752 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11753 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11754 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11755 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11756 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11757 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11758 )
11759 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11760 BEGIN
11761 RETURN GET_REV_USR_ATTR_STR
11762 (
11763 p_batch_id => p_batch_id
11764 , p_inventory_item_id => p_inventory_item_id
11765 , p_item_number => p_item_number
11766 , p_organization_id => p_organization_id
11767 , p_revision_code => p_revision_code
11768 , p_attr_group_type => p_attr_group_type
11769 , p_attr_group_name => p_attr_group_name
11770 , p_attr_name => p_attr_name
11771 , p_do_processed_rows_flag => p_do_processed_rows_flag
11772 , p_request_id => p_request_id
11773 , p_use_pdh_keys_to_join => true
11774 , p_get_value_column => true
11775 );
11776 END GET_REV_USR_ATTR_PDH_VSTR;
11777
11778 --------------------------------------------------------------------------------------------
11779 -- Function GET_REV_USR_ATTR_DATE
11780 -- Returns the date value of the specified revision attribute, if the attribute is present
11781 -- in the interface table.
11782 --------------------------------------------------------------------------------------------
11783 FUNCTION GET_REV_USR_ATTR_SS_VDATE
11784 (
11785 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11786 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11787 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11788 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11789 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11790 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11791 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11792 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11793 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11794 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11795 )
11796 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11797 BEGIN
11798 RETURN GET_REV_USR_ATTR_DATE
11799 (
11800 p_batch_id => p_batch_id
11801 , p_source_system_id => p_source_system_id
11802 , p_source_system_reference => p_source_system_reference
11803 , p_organization_id => p_organization_id
11804 , p_revision_code => p_revision_code
11805 , p_attr_group_type => p_attr_group_type
11806 , p_attr_group_name => p_attr_group_name
11807 , p_attr_name => p_attr_name
11808 , p_do_processed_rows_flag => p_do_processed_rows_flag
11809 , p_request_id => p_request_id
11810 , p_use_pdh_keys_to_join => false
11811 , p_get_value_column => true
11812 );
11813 END GET_REV_USR_ATTR_SS_VDATE;
11814
11815 FUNCTION GET_REV_USR_ATTR_PDH_VDATE
11816 (
11817 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11818 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11819 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11820 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11821 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11822 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11823 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11824 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11825 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11826 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11827 )
11828 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11829 BEGIN
11830 RETURN GET_REV_USR_ATTR_DATE
11831 (
11832 p_batch_id => p_batch_id
11833 , p_inventory_item_id => p_inventory_item_id
11834 , p_item_number => p_item_number
11835 , p_organization_id => p_organization_id
11836 , p_revision_code => p_revision_code
11837 , p_attr_group_type => p_attr_group_type
11838 , p_attr_group_name => p_attr_group_name
11839 , p_attr_name => p_attr_name
11840 , p_do_processed_rows_flag => p_do_processed_rows_flag
11841 , p_request_id => p_request_id
11842 , p_use_pdh_keys_to_join => true
11843 , p_get_value_column => true
11844 );
11845 END GET_REV_USR_ATTR_PDH_VDATE;
11846
11847 --------------------------------------------------------------------------------------------
11848 -- Function GET_REV_USR_ATTR_NUM
11849 -- Returns the number value of the specified revision attribute, if the attribute is present
11850 -- in the interface table.
11851 -- p_output_uom_code parameter is ignored (no uom conversions performed)
11852 --------------------------------------------------------------------------------------------
11853 FUNCTION GET_REV_USR_ATTR_SS_VNUM
11854 (
11855 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11856 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11857 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11858 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11859 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11860 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11861 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11862 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11863 , p_output_uom_code IN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11864 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11865 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11866 )
11867 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11868 BEGIN
11869 RETURN GET_REV_USR_ATTR_NUM
11870 (
11871 p_batch_id => p_batch_id
11872 , p_source_system_id => p_source_system_id
11873 , p_source_system_reference => p_source_system_reference
11874 , p_organization_id => p_organization_id
11875 , p_revision_code => p_revision_code
11876 , p_attr_group_type => p_attr_group_type
11877 , p_attr_group_name => p_attr_group_name
11878 , p_attr_name => p_attr_name
11879 , p_do_processed_rows_flag => p_do_processed_rows_flag
11880 , p_request_id => p_request_id
11881 , p_use_pdh_keys_to_join => false
11882 , p_get_value_column => true
11883 , p_output_uom_code => NULL
11884 );
11885 END GET_REV_USR_ATTR_SS_VNUM;
11886
11887 FUNCTION GET_REV_USR_ATTR_PDH_VNUM
11888 (
11889 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11890 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11891 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11892 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11893 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11894 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11895 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11896 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11897 , p_output_uom_code IN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11898 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11899 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11900 )
11901 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11902 BEGIN
11903 RETURN GET_REV_USR_ATTR_NUM
11904 (
11905 p_batch_id => p_batch_id
11906 , p_inventory_item_id => p_inventory_item_id
11907 , p_item_number => p_item_number
11908 , p_organization_id => p_organization_id
11909 , p_revision_code => p_revision_code
11910 , p_attr_group_type => p_attr_group_type
11911 , p_attr_group_name => p_attr_group_name
11912 , p_attr_name => p_attr_name
11913 , p_do_processed_rows_flag => p_do_processed_rows_flag
11914 , p_request_id => p_request_id
11915 , p_use_pdh_keys_to_join => true
11916 , p_get_value_column => true
11917 , p_output_uom_code => NULL
11918 );
11919 END GET_REV_USR_ATTR_PDH_VNUM;
11920
11921 FUNCTION Get_PDH_Source_System_Id RETURN NUMBER AS
11922 BEGIN
11923 RETURN G_PDH_SOURCE_SYSTEM_ID;
11924 END;
11925
11926 -----------------------------------------------------------------------------------------
11927 -- Get_Tokens --
11928 -- Takes a string and breaks it into tokens, returning them in another space-delimited --
11929 -- string; the tokens are determined according to the attributes/preferences of the --
11930 -- intermedia text index on items, using its stoplist, lexer, etc. --
11931 -----------------------------------------------------------------------------------------
11932 PROCEDURE GET_TOKENS
11933 (
11934 p_string_val IN VARCHAR2
11935 ,x_tokens OUT NOCOPY VARCHAR2
11936 ) IS
11937
11938 l_schema_name VARCHAR2(30);
11939 l_policy_name CONSTANT VARCHAR2(30) := 'EGO_ITEM_TEXT_TL_POL1';
11940
11941 l_token_table CTX_DOC.token_tab;
11942
11943 BEGIN
11944
11945 -- initialization
11946 x_tokens := '';
11947 l_schema_name := EGO_COMMON_PVT.Get_Prod_Schema('EGO');
11948
11949 -- retrieve tokens in a table
11950 CTX_DOC.Policy_Tokens(l_schema_name || '.' || l_policy_name
11951 ,p_string_val
11952 ,l_token_table
11953 ,userenv('lang') -- look into how to process other languages
11954 ,NULL
11955 ,NULL
11956 );
11957
11958 -- for each token, put operators and join with the specified conjunction
11959 FOR i IN 1..l_token_table.count LOOP
11960
11961 -- reset the clause
11962 x_tokens := x_tokens || ' ' || l_token_table(i).token;
11963
11964 END LOOP;
11965
11966 END GET_TOKENS;
11967
11968 ------------------------------------------------------------------------------------------
11969 -- Convert_Org_And_Cat_Grp --
11970 -- This procedure converts a specified interface table row's organization code to an ID --
11971 -- and converts the item catalog category name to its corresponding ID; these --
11972 -- conversions only occur if the org code/category name exactly match an existing name --
11973 -- in PDH. --
11974 ------------------------------------------------------------------------------------------
11975 PROCEDURE CONVERT_ORG_AND_CAT_GRP
11976 (
11977 p_batch_id IN NUMBER
11978 ,p_src_system_id IN NUMBER
11979 ,p_src_system_ref IN VARCHAR2
11980 ,p_commit IN BOOLEAN
11981 ) IS
11982
11983 l_org_id NUMBER;
11984 l_org_code VARCHAR2(3);
11985
11986 l_catalog_grp_id NUMBER;
11987 l_catalog_grp_name VARCHAR2(820);
11988
11989 l_update_flag BOOLEAN;
11990
11991 BEGIN
11992
11993 IF (p_batch_id IS NOT NULL AND p_src_system_id IS NOT NULL AND p_src_system_ref IS NOT NULL) THEN
11994
11995 --------------------------------
11996 -- MTL_SYSTEM_ITEMS_INTERFACE --
11997 --------------------------------
11998 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
11999 SET ORGANIZATION_ID =
12000 NVL(ORGANIZATION_ID,
12001 (SELECT MP.ORGANIZATION_ID
12002 FROM MTL_PARAMETERS MP
12003 WHERE MP.ORGANIZATION_CODE = MSII.ORGANIZATION_CODE))
12004 ,ITEM_CATALOG_GROUP_ID =
12005 NVL(ITEM_CATALOG_GROUP_ID,
12006 (SELECT MICG.ITEM_CATALOG_GROUP_ID
12007 FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
12008 WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME))
12009 WHERE SET_PROCESS_ID = p_batch_id
12010 AND SOURCE_SYSTEM_ID = p_src_system_id
12011 AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
12012 AND PROCESS_FLAG = 0;
12013
12014 ------------------
12015 -- EGO_AML_INTF --
12016 ------------------
12017 UPDATE EGO_AML_INTF EAI
12018 SET ORGANIZATION_ID =
12019 NVL(ORGANIZATION_ID,
12020 (SELECT MP.ORGANIZATION_ID
12021 FROM MTL_PARAMETERS MP
12022 WHERE MP.ORGANIZATION_CODE = EAI.ORGANIZATION_CODE))
12023 WHERE DATA_SET_ID = p_batch_id
12024 AND SOURCE_SYSTEM_ID = p_src_system_id
12025 AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
12026 AND PROCESS_FLAG = 0;
12027
12028 -----------------------------
12029 -- EGO_ITM_USR_ATTR_INTRFC --
12030 -----------------------------
12031 UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
12032 SET ORGANIZATION_ID =
12033 NVL(ORGANIZATION_ID,
12034 (SELECT MP.ORGANIZATION_ID
12035 FROM MTL_PARAMETERS MP
12036 WHERE MP.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE))
12037 WHERE DATA_SET_ID = p_batch_id
12038 AND SOURCE_SYSTEM_ID = p_src_system_id
12039 AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
12040 AND PROCESS_STATUS = 0;
12041
12042 IF (p_commit) THEN
12043 COMMIT WORK;
12044 END IF;
12045
12046 END IF; -- if all parameters are not null
12047
12048 END CONVERT_ORG_AND_CAT_GRP;
12049
12050
12051 ------------------------------------------------------------------------------------------
12052 -- Convert_Org_Cat_Grp_For_Batch --
12053 -- This is a wrapper procedure for the previous conversion procedure; this one accepts --
12054 -- a batch ID and converts all unprocessed rows belonging to that batch. --
12055 ------------------------------------------------------------------------------------------
12056 PROCEDURE CONVERT_ORG_CAT_GRP_FOR_BATCH
12057 (
12058 p_batch_id IN NUMBER
12059 ,p_commit IN BOOLEAN
12060 ) IS
12061
12062 CURSOR c_batch_pks IS
12063 SELECT MSII.SOURCE_SYSTEM_ID SOURCE_SYSTEM_ID
12064 ,MSII.SOURCE_SYSTEM_REFERENCE SOURCE_SYSTEM_REFERENCE
12065 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
12066 WHERE MSII.SET_PROCESS_ID = p_batch_id
12067 AND MSII.PROCESS_FLAG = 0
12068 AND MSII.CONFIRM_STATUS IN ('US', 'UM', 'UN');
12069
12070 BEGIN
12071
12072 FOR v_pks IN c_batch_pks
12073 LOOP
12074
12075 CONVERT_ORG_AND_CAT_GRP(p_batch_id, v_pks.SOURCE_SYSTEM_ID, v_pks.SOURCE_SYSTEM_REFERENCE, p_commit);
12076
12077 END LOOP;
12078
12079 END CONVERT_ORG_CAT_GRP_FOR_BATCH;
12080
12081
12082 ------------------------------------------------------------------------------------------
12083 -- Confirm_Matches --
12084 -- This procedure takes care of setting the confirm status for a particular match in --
12085 -- the item match table, depending on how many matches were found for a row in the --
12086 -- interface table. --
12087 ------------------------------------------------------------------------------------------
12088 PROCEDURE CONFIRM_MATCHES
12089 (
12090 p_batch_id IN NUMBER
12091 ,p_src_system_id IN NUMBER
12092 ,p_src_system_ref IN VARCHAR2
12093 ,p_match_count IN NUMBER
12094 ,p_inventory_item_id IN NUMBER
12095 ,p_organization_id IN NUMBER
12096 ) IS
12097
12098 l_confirm_single_match VARCHAR2(1);
12099 l_confirm_no_match VARCHAR2(1);
12100
12101 BEGIN
12102
12103 IF (p_match_count < 1) THEN
12104
12105 /* Bug 8621347. If item does not have any matches, get CONFIRM_NO_MATCH value of the Batch */
12106 SELECT NVL(CONFIRM_NO_MATCH,'N')
12107 INTO l_confirm_no_match
12108 FROM EGO_IMPORT_BATCH_DETAILS_V
12109 WHERE BATCH_ID=p_batch_id;
12110
12111 /* Bug 8621347. Set the CONFIRM_STATUS to G_CONF_NEW (Confirm New), if CONFIRM_NO_MATCH i.e., 'Automatically Confirm New Item on No Match'
12112 is enabled. Otherwise, set CONFIRM_STATUS to G_UNCONF_NONE_MATCH (Unconfirm No Match).
12113 */
12114 IF (l_confirm_no_match = 'Y') THEN
12115 EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12116 ,p_src_system_id
12117 ,p_src_system_ref
12118 ,EGO_IMPORT_PVT.G_CONF_NEW);
12119 ELSE
12120 EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12121 ,p_src_system_id
12122 ,p_src_system_ref
12123 ,EGO_IMPORT_PVT.G_UNCONF_NONE_MATCH);
12124 END IF;
12125
12126 ELSIF (p_match_count > 1) THEN
12127
12128 EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12129 ,p_src_system_id
12130 ,p_src_system_ref
12131 ,EGO_IMPORT_PVT.G_UNCONF_MULT_MATCH);
12132
12133 ELSE
12134
12135 SELECT CONFIRM_SINGLE_MATCH
12136 INTO l_confirm_single_match
12137 FROM EGO_IMPORT_BATCH_DETAILS_V
12138 WHERE BATCH_ID = p_batch_id;
12139
12140 IF (l_confirm_single_match = 'Y') THEN
12141
12142 EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12143 ,p_src_system_id
12144 ,p_src_system_ref
12145 ,EGO_IMPORT_PVT.G_CONF_MATCH
12146 ,p_inventory_item_id
12147 ,p_organization_id);
12148
12149 ELSE
12150
12151 EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12152 ,p_src_system_id
12153 ,p_src_system_ref
12154 ,EGO_IMPORT_PVT.G_UNCONF_SIGL_MATCH
12155 ,p_inventory_item_id
12156 ,p_organization_id);
12157
12158 END IF;
12159
12160 END IF;
12161
12162 END CONFIRM_MATCHES;
12163
12164 ------------------------------------------------------------------------------------------
12165 -- Get_Latest_Revision_Func --
12166 -- This function returns the latest revision available for a particular spoke item. --
12167 -- The function first checks for a revision in the item revision interface table, then --
12168 -- MSI interface, and finally, the user-defined attributes interface table. --
12169 ------------------------------------------------------------------------------------------
12170 FUNCTION GET_LATEST_REVISION_FUNC
12171 (
12172 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
12173 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
12174 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
12175 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
12176 )
12177 RETURN VARCHAR2
12178 IS
12179
12180 l_revision_code VARCHAR2(3);
12181
12182
12183 BEGIN
12184
12185 -- attempt to get the latest revision from the revision interface table
12186 -- according to latest effectivity date; in the case of equal effectivity
12187 -- dates, return that with the "greatest" revision code (ASCII sort order)
12188 l_revision_code := GET_LATEST_MIRI_REV_SS( p_batch_id, p_source_system_id, p_source_system_reference, p_organization_id, FND_API.G_FALSE );
12189
12190 -- if the revision still could not be obtained, then obtain it from the
12191 -- user attrs interface table (ASCII sort order)
12192 IF (l_revision_code IS NULL) THEN
12193 l_revision_code := GET_LATEST_EIUAI_REV_SS( p_batch_id, p_source_system_id, p_source_system_reference, p_organization_id, FND_API.G_FALSE );
12194 END IF;
12195
12196 RETURN l_revision_code;
12197 END GET_LATEST_REVISION_FUNC;
12198
12199 /**
12200 * For every unprocessed master record in a batch which has transaction_type value of 'UPDATE' or 'SYNC'
12201 * if it has no inventory_item_id
12202 * if it has an item number, parse it into segments.
12203 * determine if an item exists with these segments in MSI and if true, populate inventory_item_id
12204 * else it has inventory_item_id
12205 * determine if an item exists with this inventory_item_id in MSI
12206 *
12207 * if the current transaction_type is 'SYNC'
12208 * change it to 'UPDATE' if there is a way to resolve it to an existing item.
12209 * change it to 'CREATE' if there is no way to resolve it to an existing item
12210 */
12211 PROCEDURE UPDATE_ITEM_SYNC_RECORDS
12212 (p_set_id IN NUMBER
12213 ,p_org_id IN NUMBER
12214 ) IS
12215 CURSOR c_items_table IS
12216 SELECT rowid
12217 ,organization_id
12218 ,inventory_item_id
12219 ,item_number
12220 ,transaction_id
12221 ,transaction_type
12222 FROM mtl_system_items_interface
12223 WHERE set_process_id = p_set_id
12224 AND process_flag = 0
12225 AND organization_id = p_org_id
12226 AND ( confirm_status IS NULL
12227 OR confirm_status = G_FAKE_CONF_STATUS_FLAG ) -- for bug 5136989
12228 AND UPPER(transaction_type) in ('SYNC', 'UPDATE')
12229 FOR UPDATE OF transaction_type;
12230
12231 CURSOR c_item_exists(cp_item_id NUMBER) IS
12232 SELECT 1
12233 FROM mtl_system_items_b
12234 WHERE inventory_item_id = cp_item_id;
12235
12236 l_item_exist NUMBER(10) := 0;
12237 l_err_text VARCHAR2(200);
12238 l_status NUMBER(10):= 0;
12239 l_item_id mtl_system_items_b.inventory_item_id%TYPE;
12240
12241 BEGIN
12242
12243 FOR item_record IN c_items_table LOOP
12244 l_item_exist :=0;
12245 l_item_id := NULL;
12246
12247 IF item_record.inventory_item_id IS NULL THEN
12248 IF item_record.item_number IS NOT NULL THEN
12249 l_status := INVPUOPI.MTL_PR_PARSE_ITEM_NUMBER(
12250 ITEM_NUMBER =>item_record.item_number
12251 ,ITEM_ID =>item_record.inventory_item_id
12252 ,TRANS_ID =>item_record.transaction_id
12253 ,ORG_ID =>item_record.organization_id
12254 ,ERR_TEXT =>l_err_text
12255 ,P_ROWID =>item_record.rowid);
12256 END IF;
12257 l_item_exist := INVUPD1B.EXISTS_IN_MSI(
12258 ROW_ID => item_record.rowid
12259 ,ORG_ID => item_record.organization_id
12260 ,INV_ITEM_ID => l_item_id
12261 ,TRANS_ID => item_record.transaction_id
12262 ,ERR_TEXT => l_err_text
12263 ,XSET_ID => p_set_id);
12264 ELSE
12265 l_item_id := item_record.inventory_item_id;
12266 OPEN c_item_exists(item_record.inventory_item_id);
12267 FETCH c_item_exists INTO l_item_exist;
12268 CLOSE c_item_exists;
12269 l_item_exist := NVL(l_item_exist,0);
12270 END IF;
12271
12272 IF upper(item_record.transaction_type) = 'SYNC' THEN
12273 IF l_item_exist = 1 THEN
12274 UPDATE mtl_system_items_interface
12275 SET transaction_type = 'UPDATE'
12276 WHERE rowid = item_record.rowid;
12277 ELSE
12278 IF item_record.item_number IS NOT NULL THEN
12279 UPDATE mtl_system_items_interface
12280 SET transaction_type = 'CREATE', inventory_item_id = NULL
12281 WHERE rowid = item_record.rowid;
12282 ELSE
12283 UPDATE mtl_system_items_interface
12284 SET transaction_type = 'UPDATE', inventory_item_id = NULL
12285 WHERE rowid = item_record.rowid;
12286 END IF;
12287 END IF;
12288 END IF;
12289 END LOOP;
12290 END UPDATE_ITEM_SYNC_RECORDS;
12291
12292
12293 PROCEDURE SET_CONFIRM_STATUS
12294 (p_batch_id IN MTL_SYSTEM_ITEMS_INTERFACE.SET_PROCESS_ID%TYPE
12295 ,p_source_system_id IN MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
12296 ,p_source_system_reference IN MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE
12297 ,p_new_status IN MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE
12298 ,p_inventory_item_id IN MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
12299 ,p_organization_id IN MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE DEFAULT NULL
12300 ,p_check_matching_table IN FLAG DEFAULT FND_API.G_FALSE
12301 ,errmsg OUT NOCOPY VARCHAR2
12302 ,retcode OUT NOCOPY VARCHAR2
12303 ) IS
12304 CURSOR cur_old_status IS
12305 SELECT CONFIRM_STATUS
12306 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_IMPORT_BATCHES_B BA
12307 WHERE MSII.SET_PROCESS_ID = p_batch_id
12308 AND MSII.SOURCE_SYSTEM_ID = p_source_system_id
12309 AND MSII.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12310 AND MSII.ORGANIZATION_ID = BA.ORGANIZATION_ID
12311 AND BA.BATCH_ID = p_batch_id
12312 AND NVL(MSII.PROCESS_FLAG, 0) < 1
12313 AND ROWNUM < 2;
12314
12315 l_old_status MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE;
12316 l_need_resolve_unconf_status FLAG := p_check_matching_table;
12317 l_resolved_status MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE := p_new_status;
12318 l_item_in_matching_table NUMBER;
12319 BEGIN
12320 OPEN cur_old_status;
12321 FETCH cur_old_status INTO l_old_status;
12322 CLOSE cur_old_status;
12323
12324 IF l_old_status IS NOT NULL AND l_old_status NOT IN (G_CONF_MATCH,G_CONF_XREF,G_CONF_NEW, G_UNCONF_NONE_MATCH,
12325 G_UNCONF_SIGL_MATCH,G_UNCONF_MULT_MATCH,G_EXCLUDED) THEN
12326 errmsg := 'Invalid old status';
12327 retcode := 'F';
12328 RETURN;
12329 END IF;
12330
12331 IF p_new_status NOT IN (G_CONF_MATCH,G_CONF_NEW, G_UNCONF_NONE_MATCH,
12332 G_UNCONF_SIGL_MATCH,G_UNCONF_MULT_MATCH,G_EXCLUDED,
12333 G_UNCONF_ACTION, G_UNEXCLUDE_ACTION) THEN
12334 errmsg := 'Invalid new status or action';
12335 retcode := 'F';
12336 RETURN;
12337 END IF;
12338
12339 IF (l_old_status = G_UNCONF_NONE_MATCH AND p_new_status = G_CONF_MATCH) OR
12340 (l_old_status = G_CONF_XREF AND p_new_status = G_UNCONF_SIGL_MATCH) OR
12341 (l_old_status = G_CONF_XREF AND p_new_status = G_UNCONF_MULT_MATCH) OR
12342 (l_old_status = G_CONF_XREF AND p_new_status = G_CONF_MATCH) OR
12343 (l_old_status = G_CONF_MATCH AND p_new_status = G_UNCONF_NONE_MATCH) OR
12344 (l_old_status = G_CONF_MATCH AND p_new_status = G_CONF_MATCH) OR
12345 (l_old_status = G_CONF_NEW AND p_new_status = G_CONF_MATCH) OR
12346 (l_old_status = G_CONF_NEW AND p_new_status = G_CONF_NEW) OR
12347 (l_old_status = G_EXCLUDED AND p_new_status = G_CONF_MATCH) OR
12348 (l_old_status = G_EXCLUDED AND p_new_status = G_CONF_NEW) OR
12349 (l_old_status = G_EXCLUDED AND p_new_status = G_EXCLUDED) THEN
12350 errmsg := 'Invalid status transition from ' || l_old_status || ' to ' || p_new_status || '.';
12351 retcode := 'F';
12352 RETURN;
12353 END IF;
12354
12355 IF l_old_status NOT IN (G_CONF_MATCH,G_CONF_XREF,G_CONF_NEW) AND p_new_status = G_UNCONF_ACTION THEN
12356 errmsg := 'Invalid action: cannot unconfirm an item that is not confirmed.';
12357 retcode := 'F';
12358 RETURN;
12359 END IF;
12360
12361 IF l_old_status <> G_EXCLUDED AND p_new_status = G_UNEXCLUDE_ACTION THEN
12362 errmsg := 'Invalid action: cannot unexclude an item that is not excluded';
12363 retcode := 'F';
12364 RETURN;
12365 END IF;
12366
12367 IF p_new_status = G_CONF_MATCH AND (p_inventory_item_id IS NULL OR p_organization_id IS NULL) THEN
12368 errmsg := 'Insufficient parameters: need PDH item id and org id';
12369 retcode := 'F';
12370 RETURN;
12371 END IF;
12372
12373 IF p_new_status <> G_CONF_MATCH AND p_inventory_item_id IS NOT NULL THEN
12374 errmsg := 'Invalid parameters: p_inventory_item_id must be null if item is not confirmed as matched';
12375 retcode := 'F';
12376 RETURN;
12377 END IF;
12378
12379 IF p_new_status = G_CONF_MATCH THEN
12380 BEGIN
12381 SELECT 1 INTO l_item_in_matching_table
12382 FROM EGO_ITEM_MATCHES
12383 WHERE BATCH_ID = p_batch_id
12384 AND SOURCE_SYSTEM_ID = p_source_system_id
12385 AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12386 AND INVENTORY_ITEM_ID = p_inventory_item_id
12387 AND ORGANIZATION_ID = p_organization_id;
12388 EXCEPTION WHEN NO_DATA_FOUND THEN
12389 errmsg := 'Invalid parameters: need to pick a PDH item that is matched';
12390 retcode := 'F';
12391 RETURN;
12392 END;
12393 END IF;
12394
12395 IF p_new_status IN (G_CONF_MATCH, G_CONF_NEW, G_EXCLUDED) AND
12396 p_check_matching_table = FND_API.G_TRUE THEN
12397 errmsg := 'Invalid parameters: cannot check matching table when setting confirm_status to ' || p_new_status;
12398 retcode := 'F';
12399 RETURN;
12400 END IF;
12401
12402 IF p_new_status IN (G_UNCONF_ACTION, G_UNEXCLUDE_ACTION) THEN
12403 l_need_resolve_unconf_status := FND_API.G_TRUE;
12404 END IF;
12405
12406 IF l_need_resolve_unconf_status = FND_API.G_TRUE THEN
12407 SELECT decode(count(1), 0, G_UNCONF_NONE_MATCH, 1, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_match)
12408 INTO l_resolved_status
12409 FROM EGO_ITEM_MATCHES
12410 WHERE BATCH_ID = p_batch_id
12411 AND SOURCE_SYSTEM_ID = p_source_system_id
12412 AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference;
12413 END IF;
12414
12415 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
12416 SET CONFIRM_STATUS = l_resolved_status, INVENTORY_ITEM_ID = p_inventory_item_id
12417 WHERE SET_PROCESS_ID = p_batch_id
12418 AND SOURCE_SYSTEM_ID = p_source_system_id
12419 AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12420 AND ORGANIZATION_ID = (SELECT ORGANIZATION_id FROM EGO_IMPORT_BATCHES_B WHERE BATCH_ID = p_batch_id)
12421 AND NVL(PROCESS_FLAG, 0) < 1;
12422
12423 IF l_old_status = G_EXCLUDED THEN
12424 DELETE FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
12425 WHERE SOURCE_SYSTEM_ID = p_source_system_id
12426 AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference;
12427 END IF;
12428
12429 IF p_new_status = G_EXCLUDED THEN
12430 MERGE INTO EGO_IMPORT_EXCLUDED_SS_ITEMS
12431 USING dual
12432 ON (SOURCE_SYSTEM_ID = p_source_system_id AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference)
12433 WHEN matched THEN
12434 UPDATE SET LAST_UPDATED_BY = FND_GLOBAL.USER_ID, LAST_UPDATE_DATE = SYSDATE,
12435 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID, OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1
12436 WHEN NOT matched THEN
12437 INSERT VALUES (p_source_system_id, p_source_system_reference, 1, FND_GLOBAL.USER_ID, SYSDATE, FND_GLOBAL.USER_ID, SYSDATE, FND_GLOBAL.LOGIN_ID);
12438 END IF;
12439
12440 errmsg := NULL;
12441 retcode := 'S';
12442 END SET_CONFIRM_STATUS;
12443
12444 ------------------------------------------------------------------
12445 -- Function for returning the change order flag for the batch
12446 -- Bug#4631349 (RSOUNDAR)
12447 ------------------------------------------------------------------
12448 FUNCTION getAddAllToChangeFlag (p_batch_id IN NUMBER)
12449 RETURN VARCHAR2 IS
12450
12451 l_add_all_change_flag VARCHAR2(1);
12452
12453 BEGIN
12454 SELECT NVL(ADD_ALL_TO_CHANGE_FLAG,'N')
12455 INTO l_add_all_change_flag
12456 FROM EGO_IMPORT_OPTION_SETS
12457 WHERE BATCH_ID = p_batch_id;
12458 RETURN l_add_all_change_flag;
12459 EXCEPTION
12460 WHEN OTHERS THEN
12461 RETURN 'N';
12462
12463 END getAddAllToChangeFlag;
12464
12465 FUNCTION Get_Lookup_Meaning(p_lookup_type IN VARCHAR2, p_lookup_code IN VARCHAR2)
12466 RETURN VARCHAR2 IS
12467 l_meaning VARCHAR2(1000);
12468 BEGIN
12469 SELECT MEANING INTO l_meaning
12470 FROM FND_LOOKUPS
12471 WHERE LOOKUP_TYPE = p_lookup_type
12472 AND LOOKUP_CODE = p_lookup_code;
12473
12474 RETURN l_meaning;
12475 EXCEPTION WHEN OTHERS THEN
12476 RETURN NULL;
12477 END Get_Lookup_Meaning;
12478
12479 ------------------------------------------------------------------
12480 --Function for returning batch details before import
12481 --Bug.:4933193
12482 ------------------------------------------------------------------
12483 FUNCTION GET_IMPORT_DETAILS_DATA
12484 ( p_set_process_id NUMBER,
12485 p_organization_id NUMBER ,
12486 p_organization_code VARCHAR2
12487 )
12488 RETURN SYSTEM.EGO_IMPORT_CNT_TABLE
12489 IS
12490 CURSOR cr_item ( p_set_process_id NUMBER, p_organization_id NUMBER , p_organization_code VARCHAR2) IS
12491 SELECT
12492 COUNT(1) CNT ,
12493 COUNT(
12494 CASE
12495 WHEN PROCESS_FLAG = 7
12496 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12497 THEN 1
12498 ELSE NULL
12499 END
12500 ) AS NEW_CNT ,
12501 COUNT(
12502 CASE
12503 WHEN PROCESS_FLAG = 7
12504 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12505 THEN 1
12506 ELSE NULL
12507 END
12508 ) UPDATE_CNT
12509 FROM MTL_SYSTEM_ITEMS_INTERFACE
12510 WHERE SET_PROCESS_ID = p_set_process_id
12511 AND ( (ORGANIZATION_ID is not null and ORGANIZATION_ID = p_organization_id )
12512 OR
12513 (ORGANIZATION_ID is null and ORGANIZATION_CODE = p_organization_code )
12514 );
12515
12516
12517 CURSOR cr_org_assign (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12518 SELECT
12519 COUNT(1) CNT ,
12520 COUNT(
12521 CASE
12522 WHEN PROCESS_FLAG = 7
12523 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12524 THEN 1
12525 ELSE NULL
12526 END
12527 ) AS NEW_CNT ,
12528 COUNT(
12529 CASE
12530 WHEN PROCESS_FLAG = 7
12531 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12532 THEN 1
12533 ELSE NULL
12534 END
12535 ) UPDATE_CNT
12536 FROM MTL_SYSTEM_ITEMS_INTERFACE msii
12537 WHERE SET_PROCESS_ID = p_set_process_id
12538 AND EXISTS
12539 (
12540 SELECT NULL
12541 FROM MTL_PARAMETERS mp
12542 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12543 AND mp.ORGANIZATION_ID <> mp.MASTER_ORGANIZATION_ID
12544 AND ( (msii.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = msii.ORGANIZATION_ID)
12545 OR
12546 (msii.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = msii.ORGANIZATION_CODE)
12547 )
12548 );
12549
12550
12551 CURSOR cr_revision (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12552 SELECT
12553 COUNT(1) AS CNT ,
12554 COUNT(
12555 CASE
12556 WHEN PROCESS_FLAG = 7
12557 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12558 THEN 1
12559 ELSE NULL
12560 END
12561 ) AS NEW_CNT ,
12562 COUNT(
12563 CASE
12564 WHEN PROCESS_FLAG = 7
12565 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12566 THEN 1
12567 ELSE NULL
12568 END
12569 ) UPDATE_CNT
12570 FROM MTL_ITEM_REVISIONS_INTERFACE miri
12571 WHERE SET_PROCESS_ID = p_set_process_id
12572 AND EXISTS
12573 (
12574 SELECT NULL
12575 FROM MTL_PARAMETERS mp
12576 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12577 AND ( (miri.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = miri.ORGANIZATION_ID)
12578 OR
12579 (miri.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = miri.ORGANIZATION_CODE)
12580 )
12581 );
12582
12583
12584 CURSOR cr_structure (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12585 SELECT
12586 COUNT(
12587 CASE
12588 WHEN UPPER(TRANSACTION_TYPE) <> 'NO_OP'
12589 THEN 1
12590 ELSE NULL
12591 END
12592 ) AS CNT ,
12593 COUNT(
12594 CASE
12595 WHEN PROCESS_FLAG = 7
12596 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12597 THEN 1
12598 ELSE NULL
12599 END
12600 ) AS NEW_CNT ,
12601 COUNT(
12602 CASE
12603 WHEN PROCESS_FLAG = 7
12604 AND UPPER(TRANSACTION_TYPE) IN ( 'UPDATE', 'DELETE' )
12605 THEN 1
12606 ELSE NULL
12607 END
12608 ) UPDATE_CNT
12609 FROM BOM_INVENTORY_COMPS_INTERFACE bici
12610 WHERE bici.BATCH_ID = p_set_process_id
12611 AND EXISTS
12612 (
12613 SELECT NULL
12614 FROM MTL_PARAMETERS mp
12615 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12616 AND ( (bici.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bici.ORGANIZATION_ID)
12617 OR
12618 (bici.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bici.ORGANIZATION_CODE)
12619 )
12620 );
12621
12622
12623 CURSOR cr_people (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12624 SELECT
12625 COUNT(1) AS CNT ,
12626 COUNT(
12627 CASE
12628 WHEN PROCESS_STATUS = 4
12629 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12630 THEN 1
12631 ELSE NULL
12632 END
12633 ) AS NEW_CNT ,
12634 COUNT(
12635 CASE
12636 WHEN PROCESS_STATUS = 4
12637 AND ( UPPER(TRANSACTION_TYPE) IN ('UPDATE', 'DELETE') )
12638 THEN 1
12639 ELSE NULL
12640 END
12641 ) UPDATE_CNT
12642 FROM EGO_ITEM_PEOPLE_INTF eipi
12643 WHERE eipi.DATA_SET_ID = p_set_process_id
12644 AND EXISTS
12645 (
12646 SELECT NULL
12647 FROM MTL_PARAMETERS mp
12648 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12649 AND ( (eipi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eipi.ORGANIZATION_ID)
12650 OR
12651 (eipi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eipi.ORGANIZATION_CODE)
12652 )
12653 ) ;
12654
12655
12656 CURSOR cr_category_assignment (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12657 SELECT
12658 COUNT(1) AS CNT ,
12659 COUNT(
12660 CASE
12661 WHEN PROCESS_FLAG = 7
12662 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12663 THEN 1
12664 ELSE NULL
12665 END
12666 ) AS NEW_CNT ,
12667 COUNT(
12668 CASE
12669 WHEN PROCESS_FLAG = 7
12670 AND ( UPPER(TRANSACTION_TYPE) IN ( 'UPDATE','DELETE') )
12671 THEN 1
12672 ELSE NULL
12673 END
12674 ) UPDATE_CNT
12675 FROM MTL_ITEM_CATEGORIES_INTERFACE mici
12676 WHERE mici.SET_PROCESS_ID = p_set_process_id
12677 AND EXISTS
12678 (
12679 SELECT NULL
12680 FROM MTL_PARAMETERS mp
12681 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12682 AND ( (mici.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = mici.ORGANIZATION_ID)
12683 OR
12684 (mici.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = mici.ORGANIZATION_CODE)
12685 )
12686 );
12687
12688
12689 CURSOR cr_aml (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12690 SELECT
12691 COUNT(1) AS CNT ,
12692 COUNT(
12693 CASE
12694 WHEN PROCESS_FLAG = 7
12695 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12696 THEN 1
12697 ELSE NULL
12698 END
12699 ) AS NEW_CNT ,
12700 COUNT(
12701 CASE
12702 WHEN PROCESS_FLAG = 7
12703 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12704 THEN 1
12705 ELSE NULL
12706 END
12707 ) UPDATE_CNT
12708 FROM EGO_AML_INTF eai
12709 WHERE eai.DATA_SET_ID = p_set_process_id
12710 AND EXISTS
12711 (
12712 SELECT NULL
12713 FROM MTL_PARAMETERS mp
12714 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12715 AND ( (eai.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eai.ORGANIZATION_ID)
12716 OR
12717 (eai.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eai.ORGANIZATION_CODE)
12718 )
12719 );
12720
12721
12722 CURSOR cr_component_ops (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12723 SELECT
12724 COUNT(1) AS CNT ,
12725 COUNT(
12726 CASE
12727 WHEN PROCESS_FLAG = 7
12728 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12729 THEN 1
12730 ELSE NULL
12731 END
12732 ) AS NEW_CNT ,
12733 COUNT(
12734 CASE
12735 WHEN PROCESS_FLAG = 7
12736 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12737 THEN 1
12738 ELSE NULL
12739 END
12740 ) UPDATE_CNT
12741 FROM BOM_COMPONENT_OPS_INTERFACE bcoi
12742 WHERE bcoi.BATCH_ID = p_set_process_id
12743 AND EXISTS
12744 (
12745 SELECT NULL
12746 FROM MTL_PARAMETERS mp
12747 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12748 AND ( (bcoi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bcoi.ORGANIZATION_ID)
12749 OR
12750 (bcoi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bcoi.ORGANIZATION_CODE)
12751 )
12752 );
12753
12754
12755 CURSOR cr_ref_desgs (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12756 SELECT
12757 COUNT(1) AS CNT ,
12758 COUNT(
12759 CASE
12760 WHEN PROCESS_FLAG = 7
12761 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12762 THEN 1
12763 ELSE NULL
12764 END
12765 ) AS NEW_CNT ,
12766 COUNT(
12767 CASE
12768 WHEN PROCESS_FLAG = 7
12769 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12770 THEN 1
12771 ELSE NULL
12772 END
12773 ) UPDATE_CNT
12774 FROM BOM_REF_DESGS_INTERFACE brdi
12775 WHERE brdi.BATCH_ID = p_set_process_id
12776 AND EXISTS
12777 (
12778 SELECT NULL
12779 FROM MTL_PARAMETERS mp
12780 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12781 AND ( (brdi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = brdi.ORGANIZATION_ID)
12782 OR
12783 (brdi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = brdi.ORGANIZATION_CODE)
12784 )
12785 );
12786
12787
12788 CURSOR cr_sub_comps (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12789 SELECT
12790 COUNT(1) AS CNT ,
12791 COUNT(
12792 CASE
12793 WHEN PROCESS_FLAG = 7
12794 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12795 THEN 1
12796 ELSE NULL
12797 END
12798 ) AS NEW_CNT ,
12799 COUNT(
12800 CASE
12801 WHEN PROCESS_FLAG = 7
12802 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12803 THEN 1
12804 ELSE NULL
12805 END
12806 ) UPDATE_CNT
12807 FROM BOM_SUB_COMPS_INTERFACE bsci
12808 WHERE bsci.BATCH_ID = p_set_process_id
12809 AND EXISTS
12810 (
12811 SELECT NULL
12812 FROM MTL_PARAMETERS mp
12813 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12814 AND ( (bsci.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bsci.ORGANIZATION_ID)
12815 OR
12816 (bsci.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bsci.ORGANIZATION_CODE)
12817 )
12818 );
12819
12820
12821 CURSOR cr_bill_of_mtls (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12822 SELECT
12823 COUNT(
12824 CASE
12825 WHEN UPPER(TRANSACTION_TYPE) <> 'NO_OP'
12826 THEN 1
12827 ELSE NULL
12828 END
12829 ) AS CNT ,
12830 COUNT(
12831 CASE
12832 WHEN PROCESS_FLAG = 7
12833 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12834 THEN 1
12835 ELSE NULL
12836 END
12837 ) AS NEW_CNT ,
12838 COUNT(
12839 CASE
12840 WHEN PROCESS_FLAG = 7
12841 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12842 THEN 1
12843 ELSE NULL
12844 END
12845 ) UPDATE_CNT
12846 FROM BOM_BILL_OF_MTLS_INTERFACE bomi
12847 WHERE bomi.BATCH_ID = p_set_process_id
12848 AND EXISTS
12849 (
12850 SELECT NULL
12851 FROM MTL_PARAMETERS mp
12852 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12853 AND ( (bomi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bomi.ORGANIZATION_ID)
12854 OR
12855 (bomi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bomi.ORGANIZATION_CODE)
12856 )
12857 );
12858
12859 CURSOR cr_item_sup (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12860 SELECT
12861 edlb.DATA_LEVEL_NAME AS DATA_LEVEL_NAME,
12862 COUNT(1) AS CNT ,
12863 COUNT(
12864 CASE
12865 WHEN PROCESS_FLAG = 7
12866 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12867 THEN 1
12868 ELSE NULL
12869 END
12870 ) AS NEW_CNT ,
12871 COUNT(
12872 CASE
12873 WHEN PROCESS_FLAG = 7
12874 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12875 THEN 1
12876 ELSE NULL
12877 END
12878 ) UPDATE_CNT
12879 FROM EGO_ITEM_ASSOCIATIONS_INTF eiai, EGO_DATA_LEVEL_B edlb
12880 WHERE eiai.BATCH_ID = p_set_process_id
12881 AND eiai.DATA_LEVEL_ID = edlb.DATA_LEVEL_ID
12882 AND EXISTS
12883 (
12884 SELECT NULL
12885 FROM MTL_PARAMETERS mp
12886 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12887 AND ( (eiai.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eiai.ORGANIZATION_ID)
12888 OR
12889 (eiai.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eiai.ORGANIZATION_CODE)
12890 )
12891 )
12892 GROUP BY edlb.DATA_LEVEL_NAME;
12893
12894
12895 CURSOR cr_lookup IS
12896 SELECT LOOKUP_CODE,
12897 MEANING,
12898 TAG
12899 FROM FND_LOOKUP_VALUES_VL
12900 WHERE LOOKUP_TYPE='EGO_PDH_ENTITY_TYPES'
12901 AND VIEW_APPLICATION_ID = 0
12902 AND SECURITY_GROUP_ID = fnd_global.lookup_security_group(LOOKUP_TYPE, VIEW_APPLICATION_ID);
12903
12904
12905 TYPE TABLE_TAG_TYPE IS TABLE OF VARCHAR2(150) INDEX BY VARCHAR2(30);
12906 TYPE TABLE_MEANING_TYPE IS TABLE OF VARCHAR2(80) INDEX BY VARCHAR2(30);
12907
12908
12909 l_row_type SYSTEM.EGO_IMPORT_CNT_REC;
12910 l_return_table SYSTEM.EGO_IMPORT_CNT_TABLE;
12911 l_tag TABLE_TAG_TYPE;
12912 l_meaning TABLE_MEANING_TYPE;
12913 l_import_xref_only VARCHAR2(1);
12914
12915 BEGIN
12916 l_return_table := SYSTEM.EGO_IMPORT_CNT_TABLE();
12917 l_row_type := SYSTEM.EGO_IMPORT_CNT_REC('',0,0,0,0,0);
12918
12919 -- Bug: 5262421, if IMPORT_XREF_ONLY is 'Y', then we will show 0 as after import count for AML
12920 BEGIN
12921 SELECT NVL(opt.IMPORT_XREF_ONLY, 'N') INTO l_import_xref_only
12922 FROM EGO_IMPORT_BATCHES_B b, EGO_IMPORT_OPTION_SETS opt
12923 WHERE b.BATCH_ID = p_set_process_id
12924 AND b.BATCH_ID = opt.BATCH_ID;
12925 EXCEPTION WHEN NO_DATA_FOUND THEN
12926 l_import_xref_only := 'N';
12927 END;
12928
12929 FOR i IN cr_lookup
12930 LOOP
12931 l_tag(i.LOOKUP_CODE) := i.TAG;
12932 l_meaning(i.LOOKUP_CODE) := i.MEANING;
12933 END LOOP;
12934
12935 FOR i IN cr_item( p_set_process_id, p_organization_id, p_organization_code)
12936 LOOP
12937 IF i.CNT > 0 THEN
12938 l_return_table.EXTEND();
12939 l_row_type.MEANING := l_meaning('ITEM');
12940 l_row_type.CNT := i.CNT;
12941 l_row_type.NEW_CNT := i.NEW_CNT;
12942 l_row_type.TAG := l_tag('ITEM');
12943 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12944 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12945 l_return_table(l_return_table.LAST) := l_row_type;
12946 END IF;
12947 END LOOP;
12948
12949 FOR i IN cr_org_assign (p_set_process_id, p_organization_id)
12950 LOOP
12951 IF i.CNT > 0 THEN
12952 l_return_table.EXTEND();
12953 l_row_type.MEANING := l_meaning('ORG_ASSIGN');
12954 l_row_type.CNT := i.CNT;
12955 l_row_type.NEW_CNT := i.NEW_CNT;
12956 l_row_type.TAG := l_tag('ORG_ASSIGN');
12957 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12958 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12959 l_return_table(l_return_table.LAST) := l_row_type;
12960 END IF;
12961 END LOOP;
12962
12963 FOR i IN cr_revision (p_set_process_id, p_organization_id)
12964 LOOP
12965 IF i.CNT > 0 THEN
12966 l_return_table.EXTEND();
12967 l_row_type.MEANING := l_meaning('REVISION');
12968 l_row_type.CNT := i.CNT;
12969 l_row_type.NEW_CNT := i.NEW_CNT;
12970 l_row_type.TAG := l_tag('REVISION');
12971 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12972 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12973 l_return_table(l_return_table.LAST) := l_row_type;
12974 END IF;
12975 END LOOP;
12976
12977 FOR i IN cr_structure (p_set_process_id, p_organization_id)
12978 LOOP
12979 IF i.CNT > 0 THEN
12980 l_return_table.EXTEND();
12981 l_row_type.MEANING := l_meaning('STRUCTURE');
12982 l_row_type.CNT := i.CNT;
12983 l_row_type.NEW_CNT := i.NEW_CNT;
12984 l_row_type.TAG := l_tag('STRUCTURE');
12985 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12986 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12987 l_return_table(l_return_table.LAST) := l_row_type;
12988 END IF;
12989 END LOOP;
12990
12991 FOR i IN cr_people (p_set_process_id, p_organization_id)
12992 LOOP
12993 IF i.CNT > 0 THEN
12994 l_return_table.EXTEND();
12995 l_row_type.MEANING := l_meaning('PEOPLE');
12996 l_row_type.CNT := i.CNT;
12997 l_row_type.NEW_CNT := i.NEW_CNT;
12998 l_row_type.TAG := l_tag('PEOPLE');
12999 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13000 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13001 l_return_table(l_return_table.LAST) := l_row_type;
13002 END IF;
13003 END LOOP;
13004
13005 FOR i IN cr_category_assignment (p_set_process_id, p_organization_id)
13006 LOOP
13007 IF i.CNT > 0 THEN
13008 l_return_table.EXTEND();
13009 l_row_type.MEANING := l_meaning('CATEGORY_ASSIGN');
13010 l_row_type.CNT := i.CNT;
13011 l_row_type.NEW_CNT := i.NEW_CNT;
13012 l_row_type.TAG := l_tag('CATEGORY_ASSIGN');
13013 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13014 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13015 l_return_table(l_return_table.LAST) := l_row_type;
13016 END IF;
13017 END LOOP;
13018
13019 FOR i IN cr_aml (p_set_process_id, p_organization_id)
13020 LOOP
13021 IF i.CNT > 0 THEN
13022 l_return_table.EXTEND();
13023 l_row_type.MEANING := l_meaning( 'AML');
13024 l_row_type.CNT := i.CNT;
13025 -- Bug: 5262421, if l_import_xref_only is Y, then in after import total only show 0
13026 IF NVL(l_import_xref_only, 'N') = 'Y' THEN
13027 l_row_type.NEW_CNT := 0;
13028 l_row_type.UPDATE_CNT := 0;
13029 l_row_type.AFTER_IMPORT_TOTAL := 0;
13030 ELSE
13031 l_row_type.NEW_CNT := i.NEW_CNT;
13032 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13033 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13034 END IF;
13035 l_row_type.TAG := l_tag( 'AML');
13036 l_return_table(l_return_table.LAST) := l_row_type;
13037 END IF;
13038 END LOOP;
13039
13040 FOR i IN cr_component_ops (p_set_process_id, p_organization_id)
13041 LOOP
13042 IF i.CNT > 0 THEN
13043 l_return_table.EXTEND();
13044 l_row_type.MEANING := l_meaning('COMPONENT_OPS');
13045 l_row_type.CNT := i.CNT;
13046 l_row_type.NEW_CNT := i.NEW_CNT;
13047 l_row_type.TAG := l_tag('COMPONENT_OPS');
13048 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13049 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13050 l_return_table(l_return_table.LAST) := l_row_type;
13051 END IF;
13052 END LOOP;
13053
13054 FOR i IN cr_ref_desgs (p_set_process_id, p_organization_id)
13055 LOOP
13056 IF i.CNT > 0 THEN
13057 l_return_table.EXTEND();
13058 l_row_type.MEANING := l_meaning('REF_DESGS');
13059 l_row_type.CNT := i.CNT;
13060 l_row_type.NEW_CNT := i.NEW_CNT;
13061 l_row_type.TAG := l_tag('REF_DESGS');
13062 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13063 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13064 l_return_table(l_return_table.LAST) := l_row_type;
13065 END IF;
13066 END LOOP;
13067
13068 FOR i IN cr_sub_comps (p_set_process_id, p_organization_id)
13069 LOOP
13070 IF i.CNT > 0 THEN
13071 l_return_table.EXTEND();
13072 l_row_type.MEANING := l_meaning('SUB_COMPS');
13073 l_row_type.CNT := i.CNT;
13074 l_row_type.NEW_CNT := i.NEW_CNT;
13075 l_row_type.TAG := l_tag('SUB_COMPS');
13076 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13077 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13078 l_return_table(l_return_table.LAST) := l_row_type;
13079 END IF;
13080 END LOOP;
13081
13082 FOR i IN cr_bill_of_mtls (p_set_process_id, p_organization_id )
13083 LOOP
13084 IF i.CNT > 0 THEN
13085 l_return_table.EXTEND();
13086 l_row_type.MEANING := l_meaning('BILL_OF_MTLS');
13087 l_row_type.CNT := i.CNT;
13088 l_row_type.NEW_CNT := i.NEW_CNT;
13089 l_row_type.TAG := l_tag('BILL_OF_MTLS');
13090 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13091 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13092 l_return_table(l_return_table.LAST) := l_row_type;
13093 END IF;
13094 END LOOP;
13095
13096 FOR i IN cr_item_sup (p_set_process_id, p_organization_id )
13097 LOOP
13098 IF i.CNT > 0 THEN
13099 l_return_table.EXTEND();
13100 IF i.DATA_LEVEL_NAME = 'ITEM_SUP' THEN
13101 l_row_type.MEANING := l_meaning('ITEM_SUP');
13102 l_row_type.TAG := l_tag('ITEM_SUP');
13103 ELSIF i.DATA_LEVEL_NAME = 'ITEM_SUP_SITE' THEN
13104 l_row_type.MEANING := l_meaning('ITEM_SUP_SITE');
13105 l_row_type.TAG := l_tag('ITEM_SUP_SITE');
13106 ELSIF i.DATA_LEVEL_NAME = 'ITEM_SUP_SITE_ORG' THEN
13107 l_row_type.MEANING := l_meaning('ITEM_ORG_SUP_SITE');
13108 l_row_type.TAG := l_tag('ITEM_ORG_SUP_SITE');
13109 END IF;
13110 l_row_type.CNT := i.CNT;
13111 l_row_type.NEW_CNT := i.NEW_CNT;
13112 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13113 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13114 l_return_table(l_return_table.LAST) := l_row_type;
13115 END IF;
13116 END LOOP;
13117
13118 RETURN l_return_table ;
13119 EXCEPTION
13120 WHEN OTHERS THEN
13121 l_row_type := SYSTEM.EGO_IMPORT_CNT_REC('',0,0,0,0,0);
13122 l_return_table := SYSTEM.EGO_IMPORT_CNT_TABLE();
13123 l_row_type.MEANING := SQLERRM;
13124 l_return_table.EXTEND();
13125 l_return_table(l_return_table.LAST) := l_row_type;
13126 RETURN l_return_table;
13127 END GET_IMPORT_DETAILS_DATA;
13128
13129 /*
13130 * This method updates the request_ids to ego_import_batches_b table.
13131 */
13132 PROCEDURE Update_Request_Id_To_Batch (
13133 p_import_request_id IN NUMBER,
13134 p_match_request_id IN NUMBER,
13135 p_batch_id IN NUMBER)
13136 IS
13137 BEGIN
13138 IF ( NVL(p_import_request_id, 0) > 0 ) OR ( NVL(p_match_request_id, 0) > 0 ) THEN
13139 UPDATE EGO_IMPORT_BATCHES_B
13140 SET LAST_MATCH_REQUEST_ID = DECODE(p_match_request_id, NULL, LAST_MATCH_REQUEST_ID, 0, LAST_MATCH_REQUEST_ID, p_match_request_id),
13141 LAST_IMPORT_REQUEST_ID = DECODE(p_import_request_id, NULL, LAST_IMPORT_REQUEST_ID, 0, LAST_IMPORT_REQUEST_ID, p_import_request_id)
13142 WHERE BATCH_ID = p_batch_id;
13143 END IF; -- IF ( NVL(p_import_request_id, 0) > 0 ) OR ( NVL(p_match_request_id, 0) > 0 ) THEN
13144 END Update_Request_Id_To_Batch;
13145
13146 END EGO_IMPORT_PVT;