DBA Data[Home] [Help]

PACKAGE BODY: APPS.EGO_IMPORT_BATCH_COMPARE_PVT

Source


1 PACKAGE BODY EGO_IMPORT_BATCH_COMPARE_PVT AS
2 /* $Header: EGOVCMPB.pls 120.32 2007/08/21 06:59:27 nshariff ship $ */
3 
4  G_NUMBER_FORMAT      VARCHAR2(1) := 'N';
5  G_CHAR_FORMAT        VARCHAR2(1) := 'C';
6  G_DATE_FORMAT        VARCHAR2(1) := 'D';
7  G_TIME_FORMAT        VARCHAR2(1) := 'X';
8  G_DATE_TIME_FORMAT   VARCHAR2(1) := 'Y';
9  G_ITEM_LEVEL                       VARCHAR2(20) := 'ITEM_LEVEL';
10  G_ORG_LEVEL                        VARCHAR2(20) := 'ITEM_ORG';
11  G_ITEM_SUPPLIER_LEVEL              VARCHAR2(20) := 'ITEM_SUP';
12  G_ITEM_SUPPLIER_SITE_LEVEL         VARCHAR2(20) := 'ITEM_SUP_SITE';
13  G_ITEM_SUPPLIER_SITE_ORG_LEVEL     VARCHAR2(20) := 'ITEM_SUP_SITE_ORG';
14  G_ITEM_REVISION_LEVEL              VARCHAR2(20) := 'ITEM_REVISION_LEVEL';
15  G_ITEM_LEVEL_ID                       NUMBER := 43101;
16  G_ORG_LEVEL_ID                        NUMBER := 43102;
17  G_ITEM_SUPPLIER_LEVEL_ID              NUMBER := 43103;
18  G_ITEM_SUPPLIER_SITE_LEVEL_ID         NUMBER := 43104;
19  G_ITEM_SUPSITEORG_LEVEL_ID            NUMBER := 43105;
20 
21 
22  PROCEDURE Debug_Message(message IN VARCHAR2) IS
23  BEGIN
24    NULL;
25    --nisar_debug_proc(message);
26  END Debug_Message;
27 
28 
29   /**
30   * Nisar - Bug 5139813.
31   * Returns current production revision for an item.
32   * Returns - VARCHAR2.
33   */
34   FUNCTION GET_CURRENT_PDH_REVISION(p_inventory_item_id NUMBER
35                                    ,p_organization_id NUMBER)
36   RETURN VARCHAR2 IS
37     l_rev VARCHAR2(5);
38   BEGIN
39     EXECUTE IMMEDIATE 'SELECT IR.REVISION FROM MTL_ITEM_REVISIONS_B IR
40                    WHERE IR.INVENTORY_ITEM_ID = :1
41                    AND IR.ORGANIZATION_ID = :2
42                    AND IR.REVISION_ID IN
43                        (SELECT MAX(IR2.REVISION_ID)
44                            KEEP (DENSE_RANK LAST ORDER BY IR2.EFFECTIVITY_DATE )
45                          FROM MTL_ITEM_REVISIONS_B IR2
46                          WHERE IR2.ORGANIZATION_ID       = IR.ORGANIZATION_ID
47                            AND IR2.INVENTORY_ITEM_ID = IR.INVENTORY_ITEM_ID
48                            AND IR2.EFFECTIVITY_DATE <= SYSDATE
49                            AND IR2.IMPLEMENTATION_DATE IS NOT NULL
50                        )' INTO l_rev USING p_inventory_item_id, p_organization_id;
51     RETURN l_rev;
52   END GET_CURRENT_PDH_REVISION;
53 
54 
55   /**
56   * Nisar - Bug. 5139813.
57   * RETURNS BOOLEAN - To find out if certain revision exists for a given
58   * item passing its inventory_item_id and organization_id
59   */
60   FUNCTION REV_EXISTS_IN_PDH ( p_revision VARCHAR2,
61                                p_inventory_item_id NUMBER,
62                                p_organization_id NUMBER
63                              )
64   RETURN VARCHAR2 IS
65     l_temp VARCHAR2(5);
66   BEGIN
67     EXECUTE IMMEDIATE 'SELECT REVISION
68                        FROM MTL_ITEM_REVISIONS
69                        WHERE INVENTORY_ITEM_ID = :1
70                          AND ORGANIZATION_ID = :2
71                          AND REVISION = :3' INTO l_temp USING p_inventory_item_id, p_organization_id, p_revision;
72     RETURN 'Y'; -- Return true
73   EXCEPTION
74     WHEN OTHERS THEN
75       RETURN 'N'; -- return false
76   END REV_EXISTS_IN_PDH;
77 
78  /**
79  To get the Source System value for the internal value given
80  */
81   FUNCTION  Get_SS_Data_For_Val_set (
82                         p_value_set_id           IN   NUMBER
83                        ,p_validation_code        IN   VARCHAR2
84                        ,p_str_val                IN   VARCHAR2   DEFAULT NULL
85                        ,p_date_val               IN   DATE       DEFAULT NULL
86                        ,p_num_val                IN   NUMBER     DEFAULT NULL
87 	          ) RETURN VARCHAR2
88   IS
89     l_sql                       VARCHAR2(32767);
90     l_disp_value                VARCHAR2(150);
91     l_attr_group_metadata_obj   EGO_ATTR_GROUP_METADATA_OBJ;
92     l_attr_metadata_obj         EGO_ATTR_METADATA_OBJ;
93   BEGIN
94     l_attr_metadata_obj := EGO_ATTR_METADATA_OBJ(
95                                      NULL-- ATTR_ID
96                                     ,NULL -- ATTR_GROUP_ID
97                                     ,NULL -- ATTR_GROUP_NAME
98                                     ,NULL -- ATTR_NAME
99                                     ,NULL -- ATTR_DISP_NAME
100                                     ,NULL -- DATA_TYPE_CODE
101                                     ,NULL -- DATA_TYPE_MEANING
102                                     ,NULL -- SEQUENCE
103                                     ,NULL -- UNIQUE_KEY_FLAG
104                                     ,NULL -- DEFAULT_VALUE
105                                     ,NULL -- INFO_1
106                                     ,NULL -- MAXIMUM_SIZE
107                                     ,NULL -- REQUIRED_FLAG
108                                     ,NULL -- DATABASE_COLUMN
109                                     ,NULL -- VALUE_SET_ID
110                                     ,NULL -- VALIDATION_CODE
111                                     ,NULL -- MINIMUM_VALUE
112                                     ,NULL -- MAXIMUM_VALUE
113                                     ,NULL -- UNIT_OF_MEASURE_CLASS
114                                     ,NULL -- UNIT_OF_MEASURE_BASE
115                                     ,NULL -- DISP_TO_INT_VAL_QUERY
116                                     ,NULL -- INT_TO_DISP_VAL_QUERY
117                                     ,NULL -- VS_BIND_VALUES_CODE
118                                     ,NULL -- VIEW_IN_HIERARCHY_CODE
119                                     ,NULL -- EDIT_IN_HIERARCHY_CODE
120                               );
121     l_attr_group_metadata_obj :=   EGO_ATTR_GROUP_METADATA_OBJ(
122                                      NULL   -- ATTR_GROUP_ID
123                                     ,NULL   -- APPLICATION_ID
124                                     ,NULL   -- ATTR_GROUP_TYPE
125                                     ,NULL   --  ATTR_GROUP_NAME
126                                     ,NULL   -- ATTR_GROUP_DISP_NAME
127                                     ,NULL   -- AGV_NAME
128                                     ,NULL   -- MULTI_ROW_CODE
129                                     ,NULL   -- VIEW_PRIVILEGE
130                                     ,NULL   -- EDIT_PRIVILEGE
131                                     ,NULL   -- EXT_TABLE_B_NAME
132                                     ,NULL   -- EXT_TABLE_TL_NAME
133                                     ,NULL   -- EXT_TABLE_VL_NAME
134                                     ,NULL   -- SORT_ATTR_VALUES_FLAG
135                                     ,NULL   -- UNIQUE_KEY_ATTRS_COUNT
136                                     ,NULL   -- TRANS_ATTRS_COUNT
137                                     ,NULL   -- attr_metadata_table
138                                     ,NULL   -- ATTR_GROUP_ID_FLAG
139                                     ,NULL   -- HIERARCHY_NODE_QUERY
140                                     ,NULL   -- HIERARCHY_PROPAGATION_API
141                                     ,NULL   -- HIERARCHY_PROPAGATE_FLAG
142                                     ,NULL   -- ENABLED_DATA_LEVELS
143                                     ,NULL   -- VARIANT
144                                     );
145     EGO_USER_ATTRS_COMMON_PVT.Build_Sql_Queries_For_Value(
146                   p_value_set_id             =>  p_value_set_id
147                  ,p_validation_code          =>  p_validation_code
148                  ,px_attr_group_metadata_obj =>  l_attr_group_metadata_obj-- EGO_ATTR_GROUP_METADATA_OBJ
149                  ,px_attr_metadata_obj       =>  l_attr_metadata_obj ); -- EGO_ATTR_METADATA_OBJ
150     l_sql    :=  l_attr_metadata_obj.INT_TO_DISP_VAL_QUERY ;
151     IF l_sql IS NOT NULL THEN
152 	    l_sql := l_sql || ' :1' ;
153       IF( INSTR(l_sql, '$') > 0 ) THEN
154         IF p_num_val IS NOT NULL THEN
155           l_disp_value := TO_CHAR(p_num_val);
156         ELSIF p_str_val IS NOT NULL THEN
157           l_disp_value  := p_str_val;
158         ELSIF p_date_val IS NOT NULL THEN
159           l_disp_value := TO_CHAR(p_date_val, 'MM/DD/YYYY HH24:MI:SS');
160         END IF; --IF p_num_val IS NOT NULL THEN
161       ELSIF p_num_val IS NOT NULL THEN
162 	      BEGIN
163           EXECUTE IMMEDIATE l_sql INTO l_disp_value USING p_num_val;
164         EXCEPTION WHEN NO_DATA_FOUND THEN
165           l_disp_value := TO_CHAR(p_num_val);
166         END;
167 	    ELSIF p_str_val IS NOT NULL THEN
168         BEGIN
169 	        EXECUTE IMMEDIATE l_sql  INTO l_disp_value USING p_str_val;
170         EXCEPTION WHEN NO_DATA_FOUND THEN
171           l_disp_value  := p_str_val;
172         END;
173 	    ELSIF p_date_val IS NOT NULL THEN
174         BEGIN
175           EXECUTE IMMEDIATE l_sql INTO l_disp_value USING p_date_val;
176         EXCEPTION WHEN NO_DATA_FOUND THEN
177           l_disp_value := TO_CHAR(p_date_val, 'MM/DD/YYYY HH24:MI:SS');
178         END;
179 	    END IF; --IF( INSTR(l_sql, '$') > 0 ) THEN
180     ELSE
181       IF p_num_val IS NOT NULL THEN
182         l_disp_value := TO_CHAR(p_num_val);
183       ELSIF  p_str_val IS NOT NULL THEN
184         l_disp_value  := p_str_val;
185       ELSIF p_date_val IS NOT NULL THEN
186         l_disp_value := TO_CHAR(p_date_val, 'MM/DD/YYYY HH24:MI:SS');
187       END IF; --IF p_num_val IS NOT NULL THEN
188     END IF; -- IF l_sql IS NOT NULL THEN
189 
190     -- if we get NULL as the display value THEN send back the input value as output
191     IF l_disp_value IS NULL THEN
192       IF p_num_val IS NOT NULL THEN
193         l_disp_value := TO_CHAR(p_num_val);
194       ELSIF p_str_val IS NOT NULL THEN
195         l_disp_value  := p_str_val;
196       ELSIF p_date_val IS NOT NULL THEN
197         l_disp_value := TO_CHAR(p_date_val, 'MM/DD/YYYY HH24:MI:SS');
198       END IF;
199     END IF;
200 
201     RETURN l_disp_value;
202   END Get_SS_Data_For_Val_set;
203 
204  /******************************************************************************
205    Populate data in sql table type to return the data.
206   *****************************************************************************/
207   PROCEDURE populate_compare_tbl ( p_compare_table IN OUT  NOCOPY SYSTEM.EGO_COMPARE_VIEW_TABLE ,
208                                    p_index         IN NUMBER ,
209                                    p_sel_item      IN NUMBER ,
210                                    p_value         IN VARCHAR2 ,
211                                    p_item1         IN NUMBER ,
212                                    p_item2         IN NUMBER ,
213                                    p_item3         IN NUMBER ,
214                                    p_item4         IN NUMBER  )
215   IS
216   BEGIN
217     IF p_sel_item = p_item1 THEN
218       p_compare_table(p_index).item1 := p_value ;
219     ELSIF p_sel_item = p_item2 THEN
220       p_compare_table(p_index).item2 := p_value ;
221     ELSIF p_sel_item = p_item3 THEN
222       p_compare_table(p_index).item3 := p_value ;
223     ELSIF p_sel_item = p_item4 THEN
224       p_compare_table(p_index).item4 := p_value ;
225     END IF;
226   END populate_compare_tbl;
227 
228 
229  /***************************************************************************
230   By Nisar - Get the function (or Privilege) name ... Privilege of
231   a user to access attributes of an Attribute Group
232   *****************************************************************************/
233   FUNCTION get_privilege_name ( p_priv_id IN NUMBER) RETURN VARCHAR2
234   IS
235     l_name VARCHAR2(100);
236   BEGIN
237     SELECT FUNCTION_NAME INTO l_name
238     FROM FND_FORM_FUNCTIONS
239     WHERE FUNCTION_ID = p_priv_id;
240     RETURN l_name;
241   EXCEPTION WHEN NO_DATA_FOUND THEN
242     RETURN NULL;
243   END get_privilege_name;
244 
245 
246 
247  /***************************************************************************
248     To get the data(primary, opearational,
249     , and developer defined
250     attrs, for the source system item and matched item ids passed.
251   *****************************************************************************/
252 
253   FUNCTION GET_COMPARED_DATA (p_ss_code           NUMBER,
254                               p_ss_record         VARCHAR2 ,
255                               p_batch_id          NUMBER,
256                               p_mode              NUMBER,
257                               p_item1             NUMBER,
258                               p_item2             NUMBER,
259                               p_item3             NUMBER,
260                               p_item4             NUMBER,
261                               p_org_Id            NUMBER,
262                               p_pdh_revision      VARCHAR2,
263                               p_supplier_id       NUMBER DEFAULT NULL,  -- R12C: New Parameter: Supplier Id
264                               p_supplier_site_id  NUMBER DEFAULT NULL,  -- R12C: New Parameter: Supplier Site Id
265                               p_bundle_id         NUMBER DEFAULT NULL   -- R12C: New Parameter passed only in case of GDSN Enable batches.
266                               )
267                               RETURN  SYSTEM.EGO_COMPARE_VIEW_TABLE
268   IS
269     --------------------------------------------------------------
270     -- CURSOR FOR GETTING META DATA OF ITEM OPERATIONAL ATTRIBUTES
271     --------------------------------------------------------------
272     CURSOR cr_attr_info IS
273       SELECT
274         AG.ATTR_GROUP_NAME,
275         AG.ATTR_GROUP_DISP_NAME,
276         AG.VIEW_PRIVILEGE_ID,
277         A.ATTR_ID,
278         A.DATABASE_COLUMN,
279         A.ATTR_DISPLAY_NAME ,
280         A.VALIDATION_CODE,
281         A.ATTR_NAME,
282         A.VALUE_SET_ID,
283         A.DATA_TYPE_CODE,
284         A.UOM_CLASS
285       FROM
286         EGO_ATTR_GROUPS_DL_V AG ,
287         EGO_ATTRS_V A
288       WHERE A.ATTR_GROUP_TYPE = AG.ATTR_GROUP_TYPE
289         AND A.ATTR_GROUP_TYPE = 'EGO_MASTER_ITEMS'
290         AND A.ATTR_GROUP_NAME = AG.ATTR_GROUP_NAME
291         AND A.APPLICATION_ID  = AG.APPLICATION_ID
292         AND A.APPLICATION_ID  = 431
293         AND AG.ATTR_GROUP_NAME <> 'Main'
294       ORDER BY AG.ATTR_GROUP_NAME;
295 
296     -----------------------------------------------------
297     -- CURSOR FOR GETTING ATTRIBUTE GROUP ID AND NAME OF
298     -- ITEM OPERATIONAL ATTRIBUTE GROUPS
299     -----------------------------------------------------
300     CURSOR cr_op_attr_grps IS
301       SELECT
302         AG.ATTR_GROUP_ID,
303         AG.ATTR_GROUP_NAME
304       FROM EGO_ATTR_GROUPS_DL_V AG
305       WHERE AG.ATTR_GROUP_TYPE IN ('EGO_MASTER_ITEMS')
306         AND AG.ATTR_GROUP_NAME <> 'Main'
307         AND AG.APPLICATION_ID  = 431   ;
308 
309     ----------------------------------------------------------------------
310     -- CURSOR FOR GETTING THE NAME AND MEANING FOR ITEM PRIMARY ATTRIBUTES
311     ----------------------------------------------------------------------
312     CURSOR cr_primary_attr IS
313       SELECT
314         LOOKUP_CODE,
315         MEANING
316       FROM FND_LOOKUPS
317       WHERE LOOKUP_TYPE ='EGO_ITEM_PRIMARY_ATTRIBUTE_GRP'
318         AND LOOKUP_CODE NOT IN ('APPROVAL_STATUS','ITEM_NUMBER', 'NEW_ITEM_REQUEST')  --  'LONG_DESCRIPTION',
319         AND ENABLED_FLAG = 'Y'
320         AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
321         AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE);
322 
323     ------------------------------------------------------------
324     -- CURSOR TO GET THE USER DEFINED ATTRIBUTE GROUPS
325     -- PRESENT IN THE INTERFACE TABLE FOR A SOURCE SYSTEM ITEM
326     ------------------------------------------------------------
327     CURSOR cr_attr_groups(c_revision IN VARCHAR2, c_bundle_id IN NUMBER) IS
328       SELECT DISTINCT
329         I.ATTR_GROUP_INT_NAME,
330         I.REVISION,
331         AG.DATA_LEVEL_INTERNAL_NAME,             -- R12C: Added
332         AG.DATA_LEVEL_ID,               -- R12C: Added
333         AG.ATTR_GROUP_DISP_NAME,
334         AG.ATTR_GROUP_ID,
335         AG.VIEW_PRIVILEGE_ID
336       FROM
337         EGO_ITM_USR_ATTR_INTRFC I,
338         EGO_ATTR_GROUPS_DL_V AG
339       WHERE NVL(AG.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = 'EGO_ITEMMGMT_GROUP'
340         AND I.SOURCE_SYSTEM_ID =  p_ss_code
341         AND I.SOURCE_SYSTEM_REFERENCE =  p_ss_record
342         AND I.DATA_SET_ID = p_batch_id
343         AND NVL(I.PROCESS_STATUS, -1) < 1
344         AND (REVISION IS NULL OR REVISION = c_revision)
345         AND I.organization_id = p_org_id
346         AND I.ATTR_GROUP_INT_NAME = AG.ATTR_GROUP_NAME
347         AND (  I.DATA_LEVEL_ID = AG.DATA_LEVEL_ID
348             OR I.DATA_LEVEL_NAME = AG.DATA_LEVEL_INTERNAL_NAME )
349         AND AG.APPLICATION_ID = 431
350         AND AG.MULTI_ROW_CODE = 'N'
351         AND ( I.BUNDLE_ID IS NULL OR I.BUNDLE_ID = c_bundle_id );
352 
353     ----------------------------------------------------------------------
354     -- CURSOR TO GET USER DEFINED ATTRIBUTES FROM THE INTERFACE TABLE
355     -- FOR GIVEN ATTRIBUTE GROUP
356     ----------------------------------------------------------------------
357     CURSOR cr_usr_intf (p_attr_group_int_name VARCHAR2, p_data_level_id NUMBER, c_bundle_id IN NUMBER ) IS
358       SELECT
359         AV.ATTR_ID,
360         AGV.ATTR_GROUP_ID,
361         I.ATTR_VALUE_STR,
362         I.ATTR_VALUE_NUM,
363         I.ATTR_VALUE_DATE,
364         I.ATTR_DISP_VALUE,
365         I.REVISION_ID,
366         I.REVISION,
367         I.ATTR_VALUE_UOM,
368         I.ATTR_UOM_DISP_VALUE,
369         AV.ATTR_DISPLAY_NAME,
370         AGV.ATTR_GROUP_DISP_NAME,
371         I.ATTR_INT_NAME ,
372         I.ATTR_GROUP_INT_NAME,
373         AGV.DATA_LEVEL_ID,              -- R12C: Added
374         AGV.DATA_LEVEL_INTERNAL_NAME,            -- R12C: Added
375         AV.DATABASE_COLUMN,
376         AV.VALUE_SET_ID,
377         AV.VALIDATION_CODE,
378         AV.DATA_TYPE_CODE,
379         AV.UOM_CLASS
380       FROM
381         EGO_ITM_USR_ATTR_INTRFC I,
382         EGO_ATTRS_V AV,
383         EGO_ATTR_GROUPS_DL_V AGV
384       WHERE AV.ATTR_GROUP_NAME = AGV.ATTR_GROUP_NAME
385         AND AV.ATTR_NAME = I.ATTR_INT_NAME
386         AND AV.ATTR_GROUP_NAME = I.ATTR_GROUP_INT_NAME
387         AND I.ATTR_GROUP_INT_NAME = p_attr_group_int_name
388         AND I.DATA_LEVEL_ID = p_data_level_id
389         AND NVL(AGV.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = 'EGO_ITEMMGMT_GROUP'
390         AND I.SOURCE_SYSTEM_ID = p_ss_code
391         AND I.SOURCE_SYSTEM_REFERENCE = p_ss_record
392         AND I.DATA_SET_ID = p_batch_id
393         AND NVL(I.PROCESS_STATUS, -1) < 1
394         AND I.REVISION IS NULL
395         AND I.ORGANIZATION_ID = p_org_id
396         AND (  I.DATA_LEVEL_ID = AGV.DATA_LEVEL_ID
397             OR I.DATA_LEVEL_NAME = AGV.DATA_LEVEL_INTERNAL_NAME )
398         AND AV.APPLICATION_ID = 431
399         AND AGV.APPLICATION_ID = AV.APPLICATION_ID
400         AND ( I.BUNDLE_ID IS NULL OR I.BUNDLE_ID = c_bundle_id );
401 
402     ------------------------------------------------------
403     -- TO GET THE ATTRIBUTES FOR GIVEN ATTRIBUTE GROUP  --
404     --    USER DEFINED ATTRIBUTES WITH RIVISION         --
405     ------------------------------------------------------
406     CURSOR cr_rev_usr_intf (p_attr_group_int_name VARCHAR2, c_revision VARCHAR2, c_bundle_id IN NUMBER ) IS
407       SELECT
408         AV.ATTR_ID,
409         AGV.ATTR_GROUP_ID,
410         I.ATTR_VALUE_STR,
411         I.ATTR_VALUE_NUM,
412         I.ATTR_VALUE_DATE,
413         I.ATTR_DISP_VALUE,
414         I.REVISION_ID,
415         I.REVISION,
416         I.ATTR_VALUE_UOM,
417         I.ATTR_UOM_DISP_VALUE,
418         AV.ATTR_DISPLAY_NAME,
419         AV.UOM_CLASS,
420         AGV.ATTR_GROUP_DISP_NAME,
421         I.ATTR_INT_NAME ,
422         I.ATTR_GROUP_INT_NAME,
423         AGV.DATA_LEVEL_ID,              -- R12C: Added
424         AGV.DATA_LEVEL_INTERNAL_NAME,            -- R12C: Added
425         AV.DATABASE_COLUMN,
426         AV.VALUE_SET_ID,
427         AV.VALIDATION_CODE,
428         AV.DATA_TYPE_CODE
429       FROM
430         EGO_ITM_USR_ATTR_INTRFC I,
431         EGO_ATTRS_V AV,
432         EGO_ATTR_GROUPS_DL_V AGV
433       WHERE AV.ATTR_GROUP_NAME = AGV.ATTR_GROUP_NAME
434         AND AV.ATTR_NAME = I.ATTR_INT_NAME
435         AND AV.ATTR_GROUP_NAME = I.ATTR_GROUP_INT_NAME
436         AND I.ATTR_GROUP_INT_NAME = p_attr_group_int_name
437         AND NVL(AGV.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = 'EGO_ITEMMGMT_GROUP'
438         AND I.SOURCE_SYSTEM_ID = p_ss_code
439         AND I.SOURCE_SYSTEM_REFERENCE = p_ss_record
440         AND I.DATA_SET_ID = p_batch_id
441         AND NVL(I.PROCESS_STATUS, -1) < 1
442         AND I.REVISION = c_revision
443         AND I.organization_id = p_org_id
444         AND (  I.DATA_LEVEL_ID = AGV.DATA_LEVEL_ID
445             OR I.DATA_LEVEL_NAME = AGV.DATA_LEVEL_INTERNAL_NAME )
446         AND AV.APPLICATION_ID = 431
447         AND AGV.APPLICATION_ID = AV.APPLICATION_ID
448         AND ( I.BUNDLE_ID IS NULL OR I.BUNDLE_ID = c_bundle_id );
449 
450     -------------------------------------------------------
451     -- CURSOR TO GET THE GDSN ATTRIBUTES IN INTERFACE TABLE
452     -------------------------------------------------------
453     CURSOR cr_dd_intf( c_bundle_id IN NUMBER ) IS
454       SELECT
455         AV.ATTR_ID,
456         AGV.ATTR_GROUP_ID,
457         I.ATTR_VALUE_STR,
458         I.ATTR_VALUE_NUM,
459         I.ATTR_VALUE_DATE,
460         I.ATTR_DISP_VALUE,
461         I.REVISION_ID,
462         I.ATTR_VALUE_UOM,
463         I.ATTR_UOM_DISP_VALUE,
464         AV.ATTR_DISPLAY_NAME,
465         AGV.ATTR_GROUP_DISP_NAME,
466         AGV.VIEW_PRIVILEGE_ID,
467         I.ATTR_INT_NAME ,
468         I.ATTR_GROUP_INT_NAME,
469         AV.DATABASE_COLUMN,
470         AV.VALUE_SET_ID,
471         AV.VALIDATION_CODE,
472         AV.DATA_TYPE_CODE,
473         AV.UOM_CLASS
474       FROM
475         EGO_ITM_USR_ATTR_INTRFC I,
476         EGO_ATTRS_V AV,
477         EGO_ATTR_GROUPS_DL_V AGV
478       WHERE AV.ATTR_GROUP_NAME = AGV.ATTR_GROUP_NAME
479         AND AGV.ATTR_GROUP_TYPE = 'EGO_ITEM_GTIN_ATTRS'
480         AND AV.ATTR_NAME = I.ATTR_INT_NAME
481         AND AV.ATTR_GROUP_NAME = I.ATTR_GROUP_INT_NAME
482         AND I.SOURCE_SYSTEM_ID = p_ss_code
483         AND I.SOURCE_SYSTEM_REFERENCE = p_ss_record
484         AND I.DATA_SET_ID = p_batch_id
485         AND I.organization_id = p_org_id
486         AND NVL(I.PROCESS_STATUS, -1) < 1
487         AND AV.APPLICATION_ID = 431
488         AND AGV.APPLICATION_ID = AV.APPLICATION_ID
489         AND ( I.BUNDLE_ID IS NULL OR I.BUNDLE_ID = c_bundle_id )
490       ORDER BY AGV.ATTR_GROUP_ID;
491 
492     --------------------------------------------------
493     -- SAME CURSORS AS ABOVE MODIFIED FOR PDH ITEMS --
494     --------------------------------------------------
495 
496     ------------------------------------------------------------
497     -- CURSOR TO GET THE USER DEFINED ATTRIBUTE GROUPS
498     -- PRESENT IN THE INTERFACE TABLE FOR A PDH ITEM
499     ------------------------------------------------------------
500     CURSOR cr_attr_groups_pdh(c_revision IN VARCHAR2) IS
501       SELECT DISTINCT
502         I.ATTR_GROUP_INT_NAME,
503         I.REVISION,
504         AG.DATA_LEVEL_INTERNAL_NAME,             -- R12C: Added
505         AG.DATA_LEVEL_ID,               -- R12C: Added
506         AG.ATTR_GROUP_DISP_NAME,
507         AG.ATTR_GROUP_ID,
508         AG.VIEW_PRIVILEGE_ID
509       FROM
510         EGO_ITM_USR_ATTR_INTRFC I,
511         EGO_ATTR_GROUPS_DL_V AG
512       WHERE NVL(AG.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = 'EGO_ITEMMGMT_GROUP'
513         AND ((I.INVENTORY_ITEM_ID IS NOT NULL AND I.INVENTORY_ITEM_ID = p_item1)
514              OR
515              (I.ITEM_NUMBER IS NOT NULL AND I.ITEM_NUMBER = p_ss_record)
516             )
517         AND I.DATA_SET_ID = p_batch_id
518         AND NVL(I.PROCESS_STATUS, -1) <= 1
519         AND (REVISION IS NULL OR REVISION = c_revision)
520         AND I.ORGANIZATION_ID = p_org_id
521         AND I.ATTR_GROUP_INT_NAME = AG.ATTR_GROUP_name
522         AND (  I.DATA_LEVEL_ID = AG.DATA_LEVEL_ID
523             OR I.DATA_LEVEL_NAME = AG.DATA_LEVEL_INTERNAL_NAME )
524         AND AG.APPLICATION_ID = 431
525         AND AG.MULTI_ROW_CODE = 'N';
526 
527     ----------------------------------------------------------------------
528     -- CURSOR TO GET USER DEFINED ATTRIBUTES FROM THE INTERFACE TABLE
529     -- FOR GIVEN ATTRIBUTE GROUP FOR A PDH ITEM
530     ----------------------------------------------------------------------
531     CURSOR cr_usr_intf_pdh (c_attr_group_int_name VARCHAR2, p_data_level_id NUMBER) IS
532       SELECT
533         AV.ATTR_ID,
534         AGV.ATTR_GROUP_ID,
535         I.ATTR_VALUE_STR,
536         I.ATTR_VALUE_NUM,
537         I.ATTR_VALUE_DATE,
538         I.ATTR_DISP_VALUE,
539         I.REVISION_ID,
540         I.REVISION,
541         I.ATTR_VALUE_UOM,
542         I.ATTR_UOM_DISP_VALUE,
543         AV.ATTR_DISPLAY_NAME,
544         AGV.ATTR_GROUP_DISP_NAME,
545         I.ATTR_INT_NAME ,
546         I.ATTR_GROUP_INT_NAME,
547         AGV.DATA_LEVEL_ID,              -- R12C: Added
548         AGV.DATA_LEVEL_INTERNAL_NAME,            -- R12C: Added
549         AV.DATABASE_COLUMN,
550         AV.VALUE_SET_ID,
551         AV.VALIDATION_CODE,
552         AV.DATA_TYPE_CODE,
553         AV.UOM_CLASS
554       FROM
555         EGO_ITM_USR_ATTR_INTRFC I,
556         EGO_ATTRS_V AV,
557         EGO_ATTR_GROUPS_DL_V AGV
558       WHERE AV.ATTR_GROUP_NAME = AGV.ATTR_GROUP_NAME
559         AND ((I.INVENTORY_ITEM_ID IS NOT NULL AND I.INVENTORY_ITEM_ID = p_item1)
560              OR
561              (I.ITEM_NUMBER IS NOT NULL AND I.ITEM_NUMBER = p_ss_record)
562             )
563         AND AV.ATTR_NAME = I.ATTR_INT_NAME
564         AND AV.ATTR_GROUP_NAME = I.ATTR_GROUP_INT_NAME
565         AND I.ATTR_GROUP_INT_NAME = c_attr_group_int_name
566         AND I.DATA_LEVEL_ID = p_data_level_id
567         AND NVL(AGV.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = 'EGO_ITEMMGMT_GROUP'
568         AND I.DATA_SET_ID = p_batch_id
569         AND NVL(I.PROCESS_STATUS, -1) <= 1
570         AND I.REVISION IS NULL
571         AND I.ORGANIZATION_ID = p_org_id
572         AND (  I.DATA_LEVEL_ID = AGV.DATA_LEVEL_ID
573             OR I.DATA_LEVEL_NAME = AGV.DATA_LEVEL_INTERNAL_NAME )
574         AND AV.APPLICATION_ID = 431
575         AND AGV.APPLICATION_ID = AV.APPLICATION_ID;
576 
577 
578     ------------------------------------------------------
579     -- TO GET THE ATTRIBUTES FOR GIVEN ATTRIBUTE GROUP  --
580     --    USER DEFINED ATTRIBUTES WITH RIVISION         --
581     ------------------------------------------------------
582     CURSOR cr_rev_usr_intf_pdh (c_attr_group_int_name VARCHAR2, c_revision VARCHAR2) IS
583       SELECT
584         AV.ATTR_ID,
585         AGV.ATTR_GROUP_ID,
586         I.ATTR_VALUE_STR,
587         I.ATTR_VALUE_NUM,
588         I.ATTR_VALUE_DATE,
589         I.ATTR_DISP_VALUE,
590         I.REVISION_ID,
591         I.REVISION,
592         I.ATTR_VALUE_UOM,
593         I.ATTR_UOM_DISP_VALUE,
594         AV.ATTR_DISPLAY_NAME,
595         AGV.ATTR_GROUP_DISP_NAME,
596         I.ATTR_INT_NAME ,
597         I.ATTR_GROUP_INT_NAME,
598         AGV.DATA_LEVEL_ID,              -- R12C: Added
599         AGV.DATA_LEVEL_INTERNAL_NAME,            -- R12C: Added
600         AV.DATABASE_COLUMN,
601         AV.VALUE_SET_ID,
602         AV.VALIDATION_CODE,
603         AV.DATA_TYPE_CODE,
604         AV.UOM_CLASS
605       FROM
606         EGO_ITM_USR_ATTR_INTRFC I,
607         EGO_ATTRS_V AV,
608         EGO_ATTR_GROUPS_DL_V AGV
609       WHERE AV.ATTR_GROUP_NAME = AGV.ATTR_GROUP_NAME
610         AND AV.ATTR_NAME = I.ATTR_INT_NAME
611         AND AV.ATTR_GROUP_NAME = I.ATTR_GROUP_INT_NAME
612         AND I.ATTR_GROUP_INT_NAME = c_attr_group_int_name
613         AND NVL(AGV.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = 'EGO_ITEMMGMT_GROUP'
614         AND I.DATA_SET_ID = p_batch_id
615         AND NVL(I.PROCESS_STATUS, -1) <= 1
616         AND I.REVISION = c_revision
617         AND ((I.INVENTORY_ITEM_ID IS NOT NULL AND I.INVENTORY_ITEM_ID = p_item1)
618              OR
619              (I.ITEM_NUMBER IS NOT NULL AND I.ITEM_NUMBER = p_ss_record)
620             )
621         AND I.ORGANIZATION_ID = p_org_id
622         AND (  I.DATA_LEVEL_ID = AGV.DATA_LEVEL_ID
623             OR I.DATA_LEVEL_NAME = AGV.DATA_LEVEL_INTERNAL_NAME )
624         AND AV.APPLICATION_ID = 431
625         AND AGV.APPLICATION_ID = AV.APPLICATION_ID;
626 
627     -------------------------------------------------------
628     -- CURSOR TO GET THE GTIN ATTRIBUTES IN INTERFACE TABLE
629     -------------------------------------------------------
630     CURSOR cr_dd_intf_pdh IS
631       SELECT
632         AV.ATTR_ID,
633         AGV.ATTR_GROUP_ID,
634         I.ATTR_VALUE_STR,
635         I.ATTR_VALUE_NUM,
636         I.ATTR_VALUE_DATE,
637         I.ATTR_DISP_VALUE,
638         I.REVISION_ID,
639         I.ATTR_VALUE_UOM,
640         I.ATTR_UOM_DISP_VALUE,
641         AV.ATTR_DISPLAY_NAME,
642         AGV.ATTR_GROUP_DISP_NAME,
643         AGV.VIEW_PRIVILEGE_ID,
644         I.ATTR_INT_NAME ,
645         I.ATTR_GROUP_INT_NAME,
646         AV.DATABASE_COLUMN,
647         AV.VALUE_SET_ID,
648         AV.VALIDATION_CODE,
649         AV.DATA_TYPE_CODE,
650         AV.UOM_CLASS
651       FROM
652         EGO_ITM_USR_ATTR_INTRFC I,
653         EGO_ATTRS_V AV,
654         EGO_ATTR_GROUPS_DL_V AGV
655       WHERE AV.ATTR_GROUP_NAME = AGV.ATTR_GROUP_NAME
656         AND AGV.ATTR_GROUP_TYPE = 'EGO_ITEM_GTIN_ATTRS'
657         AND AV.ATTR_NAME = I.ATTR_INT_NAME
658         AND AV.ATTR_GROUP_NAME = I.ATTR_GROUP_INT_NAME
659         AND I.DATA_SET_ID = p_batch_id
660         AND ((I.INVENTORY_ITEM_ID IS NOT NULL AND I.INVENTORY_ITEM_ID = p_item1)
661              OR
662              (I.ITEM_NUMBER IS NOT NULL AND I.ITEM_NUMBER = p_ss_record)
663             )
664         AND I.organization_id = p_org_id
665         AND NVL(I.PROCESS_STATUS, -1) <= 1
666         AND AV.APPLICATION_ID = 431
667         AND AGV.APPLICATION_ID = AV.APPLICATION_ID
668       ORDER BY AGV.ATTR_GROUP_ID;
669 
670     CURSOR cr_match_item_rev IS
671       SELECT
672         INVENTORY_ITEM_ID,
673         REVISION_ID,
674         SOURCE_SYSTEM_REFERENCE
675       FROM EGO_ITEM_MATCHES
676       WHERE INVENTORY_ITEM_ID IN (p_item1, p_item2, p_item3, p_item4)
677         AND SOURCE_SYSTEM_ID = p_ss_code
678         AND SOURCE_SYSTEM_REFERENCE = p_ss_record
679         AND BATCH_ID = p_batch_id
680         AND ORGANIZATION_id = p_org_id;
681 
682     l_compare_tbl            SYSTEM.EGO_COMPARE_VIEW_TABLE ;
683     err_compare_tbl          SYSTEM.EGO_COMPARE_VIEW_TABLE ;
684     l_compare_REc            SYSTEM.EGO_COMPARE_VIEW_REC;
685     err_compare_rec          SYSTEM.EGO_COMPARE_VIEW_REC;
686     l_str_value              VARCHAR2(4000);     --EGO_MTL_SY_ITEMS_EXT_B.C_EXT_ATTR40%TYPE;
687     l_sel_clause             VARCHAR2(32000);           --keeping the max limit
688     l_int_val                VARCHAR2(4000);     --EGO_MTL_SY_ITEMS_EXT_B.C_EXT_ATTR40%TYPE;
689     l_val_set_clause         VARCHAR2(12000);           --keeping it that long for safety
690     l_sql_query              VARCHAR2(32000);           --keeping the max limit
691     l_val                    VARCHAR2(4000);
692 
693     l_attr_id                NUMBER;
694     l_n_tbl                  NUMBER;
695     l_num_value              NUMBER;
696     l_ignore                 NUMBER;
697     l_cnt                    NUMBER;
698     l_count                  NUMBER;
699     l_idx                    NUMBER;
700     l_start                  NUMBER;
701 
702     --varibles for Dynamic Cursors
703     cr_ud_attr               INTEGER;
704     cr_dd_attr               INTEGER;
705     cr_msi_attr              INTEGER;
706     cr_msi_intf              INTEGER;
707 
708     l_date_value             DATE;
709     l_sql_msi                VARCHAR2(32000); --keeping the max limit
710     l_default_sel            NUMBER;
711     l_item_ID                NUMBER;
712     l_temp                   VARCHAR2(50);
713     l_col_idx                NUMBER;
714     i                        NUMBER;
715     l_fmt                    VARCHAR2(1);
716     l_disp_val               VARCHAR2(4000);
717     l_msii_sql               VARCHAR2(20000);
718     l_lkup_str               VARCHAR2(400);
719     l_temp_query             VARCHAR2(400);
720     l_catalog_id             NUMBER;
721     l_hier_catalog_id        NUMBER;
722     l_lifecycle_id           NUMBER;
723     l_phase_id               NUMBER;
724     l_primay_ag_disp_name    FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
725     l_primary_ag_int_name    FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;
726     l_revision               MTL_ITEM_REVISIONS.REVISION%TYPE;
727     l_rev_attr_count         NUMBER;
728     l_attr_group_display_name VARCHAR2(200);
729 
730     -- Variables for Security issues
731     l_attGrp_old	VARCHAR2(80);
732     l_attGrp_new	VARCHAR2(80);
733     l_priv_name		VARCHAR2(480);
734     l_priv_item1	VARCHAR2(1);
735     l_priv_item2	VARCHAR2(1);
736     l_priv_item3	VARCHAR2(1);
737     l_priv_item4	VARCHAR2(1);
738     l_party_id		VARCHAR2(100);
739     l_user_id		NUMBER;
740     l_pdh_revision 	VARCHAR(5);
741     --Bug#5043002
742     TYPE TypeNum IS TABLE OF NUMBER INDEX BY BINARY_INTEGER ;
743     l_inv_rev_id_tbl TypeNum ;
744     k NUMBER ;
745     l_item_lable                VARCHAR2(50);
746     l_itemOrg_lable             VARCHAR2(50);
747     l_itemSup_lable             VARCHAR2(50);
748     l_itemSupSite_lable         VARCHAR2(50);
749     l_itemSupSiteOrg_lable      VARCHAR2(50);
750     l_itemRev_lable        VARCHAR2(50);
751 
752     --Bug#5043002
753 
754 
755     TYPE ATTR_META IS RECORD
756           ( ATTR_DISPLAY_NAME    VARCHAR2(240) := ''
757            ,ATTR_GROUP_NAME      VARCHAR2(240)
758            ,ATTR_ID              NUMBER
759            ,VIEW_PRIVILEGE_NAME  VARCHAR2(480)
760            ,UOM_CLASS		         VARCHAR2(10)
761            ,ATTR_NAME            VARCHAR2(240)
762            ,VALUE_SET_ID         NUMBER
763            ,VALIDATION_CODE      VARCHAR2(1)
764            ,DATA_TYPE_CODE       VARCHAR2(1)
765            ,ATTR_GROUP_DISP_NAME VARCHAR2(240)
766            ,DATABASE_COLUMN      VARCHAR2(240)
767            ,FLAG                 VARCHAR2(1) );
768     TYPE ATTR_M_DATA_TBL IS TABLE OF ATTR_META ;
769     TYPE   T        IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
770     TYPE   x        IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;
771     TYPE   A        IS TABLE OF VARCHAR2(1000) INDEX BY VARCHAR2(50);
772     TYPE   C        IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(50);
773     TYPE   UOM_CLASS_NAMES           IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
774     TYPE   VALUE_SET_ID_TABLE        IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
775     G_META                  X;
776     UOM			        UOM_CLASS_NAMES;
777     UOM_USER_CODE   UOM_CLASS_NAMES; --saves UOM code entered by user
778     UOM_DISP_VAL    UOM_CLASS_NAMES; --saves UOM display value entered by user.
779     VSID        VALUE_SET_ID_TABLE;
780 
781     l_attr_data      ATTR_META;
782     l_attr_data_tbl  ATTR_M_DATA_TBL;      -- Saves meta data for all attributes
783     l_attr_meta_tbl  ATTR_M_DATA_TBL;      -- Saves meta data for attributes for which SS data Exists
784     l_p_atr_sql      A ;
785     l_ch_policy_tbl  C;
786     l_ch_policy      VARCHAR2(100);
787     l_is_policy      VARCHAR2(1);
788     l_party_id_num   NUMBER;
789     l_ss_id          NUMBER;
790     is_pdh_batch     BOOLEAN;
791     -- This is required to find out index of each row in case we add these
792     -- extra rows.
793     l_supplier_rows_count   NUMBER; -- Keep Count of number of supplier rows added.
794                                     -- If supplierId is passed l_supplier_rows_count :=1
795                                     -- if supplierSiteUd is passed l_supplier_rows_count := 2
796 
797 
798   BEGIN
799     Debug_Message('Starting GET_COMPARED_DATA at - '||TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
800     Debug_Message('Parameters are p_ss_code, p_ss_record, p_batch_id, p_mode, p_item1, p_item2, p_item3, p_item4, p_org_Id=');
801     Debug_Message(TO_CHAR(p_ss_code)||', '||p_ss_record||', '||TO_CHAR(p_batch_id)||', '||TO_CHAR(p_mode)||
802                   ', '||TO_CHAR(p_item1)||', '||TO_CHAR(p_item2)||', '||TO_CHAR(p_item3)||', '||TO_CHAR(p_item4)||', '||TO_CHAR(p_org_Id));
803     -- GETTING THE PARTY_ID FOR THE USER --
804     l_user_id := FND_GLOBAL.USER_ID;
805     BEGIN
806       SELECT party_id INTO l_party_id_num
807       FROM ego_user_v
808       WHERE user_id = l_user_id;
809     EXCEPTION WHEN NO_DATA_FOUND THEN
810       err_compare_tbl := SYSTEM.EGO_COMPARE_VIEW_TABLE();
811       err_compare_rec := SYSTEM.EGO_COMPARE_VIEW_REC('', '', '','', '', '','', '', '','', '','','','','');
812       --err_compare_rec.ATTR_GROUP_DISP_NAME := 'Encountered error, No search conducted';
813       err_compare_rec.ATTR_GROUP_DISP_NAME := FND_MESSAGE.GET_STRING('EGO', 'EGO_PERSON_INVALID');
814       err_compare_tbl.EXTEND();
815       err_compare_tbl(1) := err_compare_rec;
816       Debug_Message('Error - '||err_compare_rec.ATTR_GROUP_DISP_NAME);
817       Debug_Message('Done GET_COMPARED_DATA with error');
818       RETURN err_compare_tbl;
819     END;
820 
821     l_party_id := 'HZ_PARTY:' || TO_CHAR(l_party_id_num);
822 
823     Debug_Message('Party_id = '||l_party_id);
824 
825     -- Query for getting the source_system_id to which this item do belong to
826     SELECT source_system_id INTO l_ss_id
827     FROM ego_import_batches_b
828     WHERE batch_id = p_batch_id;
829 
830     IF l_ss_id = EGO_IMPORT_PVT.get_pdh_source_system_id THEN
831       is_pdh_batch := TRUE;
832     ELSE
833       is_pdh_batch := FALSE;
834     END IF; -- IF p_ss_code = EGO_IMPORT_PVT.get_pdh_source_system_id THEN
835 
836     l_is_policy := 'N';
837     FND_MESSAGE.SET_NAME('EGO', 'EGO_ERP_MAIN_ATTR_GRP');
838     l_primay_ag_disp_name := FND_MESSAGE.GET();
839     FND_MESSAGE.SET_NAME('EGO', 'EGO_ERP_MAIN_ATTR_GRP');
840     l_primary_ag_int_name  := FND_MESSAGE.GET();
841     FND_MESSAGE.SET_NAME('EGO', 'EGO_ITEM');
842     l_item_lable := FND_MESSAGE.GET();
843     FND_MESSAGE.SET_NAME('EGO', 'EGO_ITEM_ORGANIZATION');
844     l_itemOrg_lable := FND_MESSAGE.GET();
845     FND_MESSAGE.SET_NAME('EGO', 'EGO_ITEM_SUPPLIER');
846     l_itemSup_lable := FND_MESSAGE.GET();
847     FND_MESSAGE.SET_NAME('EGO', 'EGO_ITEM_SUPPLIR_SITE');
848     l_itemSupSite_lable := FND_MESSAGE.GET();
849     FND_MESSAGE.SET_NAME('EGO', 'EGO_ITEM_SUPPLIR_SITE_STORE');
850     l_itemSupSiteOrg_lable := FND_MESSAGE.GET();
851     FND_MESSAGE.SET_NAME('EGO', 'EGO_ITEM_REVISION');
852     l_itemRev_lable := FND_MESSAGE.GET();
853 
854     l_compare_tbl := SYSTEM.EGO_COMPARE_VIEW_TABLE();
855     l_compare_rec := SYSTEM.EGO_COMPARE_VIEW_REC('', '', '','','','','','','','','','','','','');
856 
857     Debug_Message('Processing Item attributes (Primary and Operational) for Source System');
858     -- If called form confirmed tab - p_mode = 1
859     -- when p_mode is 1, THEN we need to compute the change policy
860     -- so finding out the change policy on each item operational attribute group
861     IF P_MODE = 1 AND p_item1 IS NOT NULL THEN
862       Debug_Message('Mode is 1, so computing the change policy');
863       -- getting the item_catalog_group, lifecycle_id and phase_id
864       SELECT LIFECYCLE_ID, ITEM_CATALOG_GROUP_ID, CURRENT_PHASE_ID
865         INTO l_lifecycle_id, l_catalog_id, l_phase_id
866       FROM MTL_SYSTEM_ITEMS_B
867       WHERE INVENTORY_ITEM_ID = p_item1
868         AND ORGANIZATION_ID = p_org_id;
869 
870       IF l_lifecycle_id IS NOT NULL AND l_catalog_id IS NOT NULL THEN
871         BEGIN
872           SELECT ic.item_catalog_group_id
873             INTO l_hier_catalog_id
874           FROM mtl_item_catalog_groups_b ic
875           WHERE  EXISTS
876             (SELECT olc.object_classification_code CatalogId
877              FROM  ego_obj_type_lifecycles olc
878              WHERE olc.object_id = (select object_id from fnd_objects where obj_name = 'EGO_ITEM')
879                AND olc.lifecycle_id = l_lifecycle_id
880                AND olc.object_classification_code = ic.item_catalog_group_id
881             )
882             AND ROWNUM = 1
883           CONNECT BY PRIOR parent_catalog_group_id = item_catalog_group_id
884           START WITH item_catalog_group_id = l_catalog_id;
885         EXCEPTION WHEN NO_DATA_FOUND THEN
886           l_hier_catalog_id := l_catalog_id;
887         END;
888       END IF; --IF l_lifecycle_id IS NOT NULL AND l_catalog_id IS NOT NULL THEN
889 
890       IF l_hier_catalog_id IS NOT NULL THEN
891         l_catalog_id := l_hier_catalog_id;
892       END IF; --IF l_hier_catalog_id IS NOT NULL THEN
893 
894       Debug_Message('Lifecycle_id, Item_Catalog_Group_Id, Current_Phase_id='||TO_CHAR(l_lifecycle_id)||', '||TO_CHAR(l_catalog_id)||', '||TO_CHAR(l_phase_id));
895       IF (l_phase_id IS NOT NULL) THEN
896         -- if lifecycle phase is not NULL THEN the Change Policy can exists
897         l_is_policy := 'Y';
898         -- finding the policy for each operational attribute
899         FOR rec in cr_op_attr_grps LOOP
900           Debug_Message('Getting change Policy for operational attribute Attr_Group_Id, Attr_Group_Name='||TO_CHAR(rec.ATTR_GROUP_ID)||', '||rec.ATTR_GROUP_NAME);
901           ENG_CHANGE_POLICY_PKG.GetChangePolicy
902                           (   p_policy_object_name     => 'CATALOG_LIFECYCLE_PHASE'
903                            ,  p_policy_code            => 'CHANGE_POLICY'
904                            ,  p_policy_pk1_value       =>  l_catalog_id
905                            ,  p_policy_pk2_value       =>  l_lifecycle_id
906                            ,  p_policy_pk3_value       =>  l_phase_id
907                            ,  p_policy_pk4_value       =>  NULL
908                            ,  p_policy_pk5_value       =>  NULL
909                            ,  p_attribute_object_name  => 'EGO_CATALOG_GROUP'
910                            ,  p_attribute_code         => 'ATTRIBUTE_GROUP'
911                            ,  p_attribute_value        =>  rec.ATTR_GROUP_ID
912                            ,  x_policy_value           =>  l_ch_policy
913                            );
914 
915           Debug_Message('Change Policy is '||l_ch_policy);
916           IF INSTR(l_ch_policy,'NOT') > 0 THEN
917             l_ch_policy_tbl(rec.ATTR_GROUP_NAME) :=  'N';
918           ELSIF INSTR(l_ch_policy,'ALLOWED') > 0 THEN
919             l_ch_policy_tbl(rec.ATTR_GROUP_NAME) :=  'Y';
920           ELSIF INSTR(l_ch_policy,'CHANGE') > 0 THEN
921             l_ch_policy_tbl(rec.ATTR_GROUP_NAME) :=  'C';
922           END IF; -- IF INSTR(l_ch_policy,'NOT') > 0 THEN
923         END LOOP; -- FOR rec in cr_op_attr_grps LOOP
924       END IF; --IF (l_phase_id IS NOT NULL) THEN
925       Debug_Message('Computing Change Policy for operational attribute groups - Done');
926     END IF; -- IF P_MODE = 1 AND p_item1 IS NOT NULL THEN
927 
928     -- for some item attributes, the display value does not comes from value set
929     -- but comes from some specific SQLs. So storing these SQLs in local array
930     l_lkup_str :=' SELECT  F.MEANING '||
931                  ' FROM FND_LOOKUP_VALUES F'||
932                  ' WHERE F.LANGUAGE = USERENV(''LANG'')'||
933                  ' AND F.LOOKUP_TYPE = ';
934 
935     l_p_atr_sql('ITEM_TYPE')                 := l_lkup_str ||  ' ''ITEM_TYPE''' ||
936                                                 ' AND F.LOOKUP_CODE = ';
937     l_p_atr_sql('ALLOWED_UNITS_LOOKUP_CODE') := l_lkup_str || '''MTL_CONVERSION_TYPE'' ' ||
938                                                 ' AND F.LOOKUP_CODE = ';
939     l_p_atr_sql('ONT_PRICING_QTY_SOURCE')    := l_lkup_str || '''INV_PRICING_UOM_TYPE'' ' ||
940                                                 ' AND F.LOOKUP_CODE = ';
941     l_p_atr_sql('SECONDARY_DEFAULT_IND')     := l_lkup_str || '''INV_DEFAULTING_UOM_TYPE'' ' ||
942                                                 ' AND F.LOOKUP_CODE = ';
943     l_p_atr_sql('TRACKING_QUANTITY_IND')     := l_lkup_str || '''INV_TRACKING_UOM_TYPE'' ' ||
944                                                 ' AND F.LOOKUP_CODE = ';
945 
946     l_p_atr_sql('PRIMARY_UOM_CODE')          := ' SELECT UOMTL.UNIT_OF_MEASURE_TL '||
947                                                 ' FROM MTL_UNITS_OF_MEASURE_TL UOMTL' ||
948                                                 ' WHERE UOMTL.LANGUAGE = USERENV(''LANG'') ' ||
949                                                 ' AND UOMTL.UOM_CODE = ';
950     l_p_atr_sql('SECONDARY_UOM_CODE')        :=   l_p_atr_sql('PRIMARY_UOM_CODE');
951 
952     l_p_atr_sql('UOM_CODE')                  :=  l_p_atr_sql('PRIMARY_UOM_CODE') || ':1';
953 
954     l_p_atr_sql('UOM_CLASS')			           :=  ' SELECT UOMTL.UNIT_OF_MEASURE_TL '||
955                                                  ' FROM MTL_UNITS_OF_MEASURE_TL UOMTL' ||
956                                                  ' WHERE UOMTL.LANGUAGE = USERENV(''LANG'') ' ||
957                                                  '   AND UOMTL.BASE_UOM_FLAG = ''Y''' ||
958                                    					     '   AND UOMTL.UOM_CLASS = :1 ';
959 
960     l_p_atr_sql('ITEM_CATALOG_GROUP_ID')     := ' SELECT ICGKFV.CONCATENATED_SEGMENTS ' ||
961                                                 ' FROM MTL_ITEM_CATALOG_GROUPS_B_KFV ICGKFV ' ||
962                                                 ' WHERE ICGKFV.ITEM_CATALOG_GROUP_ID = ' ;
963     l_p_atr_sql('CURRENT_PHASE_ID')          := ' SELECT LCP.NAME '||
964                                                 ' FROM PA_EGO_LIFECYCLES_PHASES_V LCP '||
965                                                 ' WHERE LCP.OBJECT_TYPE = ''PA_TASKS'' '||
966                                                 '   AND LCP.PROJ_ELEMENT_ID = ';
967     l_p_atr_sql('LIFECYCLE_ID')              := ' SELECT LC.NAME ' ||
968                                                 ' FROM PA_EGO_LIFECYCLES_PHASES_V LC ' ||
969                                                 ' WHERE LC.OBJECT_TYPE = ''PA_STRUCTURES'''||
970                                                 '   AND LC.PROJ_ELEMENT_ID = ' ;
971 
972     l_p_atr_sql('LONG_DESCRIPTION')          := ' SELECT ITL.LONG_DESCRIPTION '||
973                                                 ' FROM MTL_SYSTEM_ITEMS_TL ITL '||
974                                                 ' WHERE ITL.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID '||
975                                                 '   AND ITL.ORGANIZATION_ID = I.ORGANIZATION_ID '||
976                                                 '   AND ITL.LANGUAGE = USERENV(''LANG'') ';
977     l_p_atr_sql('DESCRIPTION')               := ' SELECT ITL.DESCRIPTION '||
978                                                 ' FROM MTL_SYSTEM_ITEMS_TL ITL '||
979                                                 ' WHERE ITL.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID '||
980                                                 '   AND ITL.ORGANIZATION_ID = I.ORGANIZATION_ID '||
981                                                 '   AND ITL.LANGUAGE = USERENV(''LANG'')  ';
982     l_p_atr_sql('ITEM_NUMBER')                := ' I.CONCATENATED_SEGMENTS ';
983     l_p_atr_sql('TRADE_ITEM_DESCRIPTOR')      := ' SELECT DISPLAY_NAME ' ||
984                                                  ' FROM EGO_VALUE_SET_VALUES_V ' ||
985                                                  ' WHERE VALUE_SET_NAME = ''TradeItemDescVS'' ' ||
986                                                  '   AND INTERNAL_NAME = ';
987 
988     l_p_atr_sql('STYLE_ITEM_FLAG')            := l_lkup_str || ' ''EGO_YES_NO'' ' ||
989                                                  ' AND F.LOOKUP_CODE = ';
990 
991     l_p_atr_sql('STYLE_ITEM_NUMBER')          :=  '( SELECT CONCATENATED_SEGMENTS ' ||
992                                                   '  FROM MTL_SYSTEM_ITEMS_KFV MSIKFV ' ||
993                                                   '  WHERE MSIKFV.INVENTORY_ITEM_ID = I.STYLE_ITEM_ID ' ||
994                                                   '    AND MSIKFV.ORGANIZATION_ID = I.ORGANIZATION_ID '||
995                                                   ') ';
996 
997     l_p_atr_sql('GDSN_OUTBOUND_ENABLED_FLAG') := l_lkup_str || ' ''EGO_YES_NO'' ' ||
998                                                  ' AND F.LOOKUP_CODE = ';
999 
1000     l_p_atr_sql('INVENTORY_ITEM_STATUS_CODE'):= ' SELECT INVENTORY_ITEM_STATUS_CODE_TL ' ||
1001                                                 ' FROM mtl_item_status  ' ||
1002                                                 ' WHERE INVENTORY_ITEM_STATUS_CODE = ' ;
1003     l_default_sel := 0;
1004     l_attr_data_tbl :=  ATTR_M_DATA_TBL();
1005     l_attr_meta_tbl :=  ATTR_M_DATA_TBL();
1006     l_msii_sql := 'SELECT INVENTORY_ITEM_ID  ';
1007     l_default_sel := 1;
1008 
1009     -------------------------------------------------------------------------------
1010     -- Getting meda data for primary attributes
1011     -- Saving the meta data about each attribute in meta data table l_attr_data_tbl
1012     -- Based on this metadata, also preparing the query l_msii_sql for getting data
1013     -- from interface and production table
1014     -------------------------------------------------------------------------------
1015     Debug_Message('Started getting metadata for Primary Attributes');
1016     FOR l_pr_attr_rec IN cr_primary_attr LOOP
1017       l_attr_data_tbl.extend();
1018       l_attr_data.ATTR_DISPLAY_NAME := l_pr_attr_rec.MEANING;
1019       --Debug_Message('Primary Attribute - ' || l_attr_data.ATTR_DISPLAY_NAME);
1020       -- Saving value set ids for primary attributes in meta data table
1021       IF l_pr_attr_rec.LOOKUP_CODE IN ('DUAL_UOM_DEVIATION_HIGH', 'DUAL_UOM_DEVIATION_LOW', 'CREATION_DATE', 'CREATED_BY') THEN
1022         l_attr_data.VALUE_SET_ID := 0;     -- VALUE SET DOES NOT EXISTS
1023       ELSE
1024         l_attr_data.VALUE_SET_ID := -1;     -- NO VALUE SET, but display value comes from special SQLs
1025       END IF; -- IF l_pr_attr_rec.LOOKUP_CODE IN ('DUAL
1026 
1027       -- Saving data type code in meta data table
1028       IF l_pr_attr_rec.LOOKUP_CODE IN ('ITEM_TYPE', 'DESCRIPTION', 'LONG_DESCRIPTION', 'APPROVAL_STATUS',
1029 	                                     'INVENTORY_ITEM_STATUS_CODE', 'ONT_PRICING_QTY_SOURCE',
1030 					                             'PRIMARY_UOM_CODE', 'SECONDARY_DEFAULT_IND', 'SECONDARY_UOM_CODE',
1031                             					 'TRACKING_QUANTITY_IND', 'ALLOWED_UNITS_LOOKUP_CODE',
1032                                        'ITEM_CATALOG_GROUP_ID', 'CURRENT_PHASE_ID', 'LIFECYCLE_ID' ,
1033                                        'TRADE_ITEM_DESCRIPTOR', 'STYLE_ITEM_FLAG', 'STYLE_ITEM_NUMBER' ,
1034                                        'GDSN_OUTBOUND_ENABLED_FLAG' ) THEN
1035         l_attr_data.DATA_TYPE_CODE := G_CHAR_FORMAT;
1036       ELSIF l_pr_attr_rec.LOOKUP_CODE IN ('CREATION_DATE') THEN
1037         l_attr_data.DATA_TYPE_CODE := G_DATE_FORMAT;
1038       ELSE
1039         l_attr_data.DATA_TYPE_CODE := G_NUMBER_FORMAT;
1040       END IF; -- IF l_pr_attr_rec.LOOKUP_CODE IN
1041 
1042       l_attr_data.ATTR_GROUP_DISP_NAME := l_primay_ag_disp_name;
1043       l_attr_data.ATTR_GROUP_NAME := l_primary_ag_int_name;
1044       l_attr_data.DATABASE_COLUMN := l_pr_attr_rec.LOOKUP_CODE;
1045       l_attr_data.FLAG :=   'N';
1046 	    l_attr_data.VIEW_PRIVILEGE_NAME	:= 'NOTAPPLICABLE';
1047       l_attr_data_tbl(l_attr_data_tbl.LAST) := l_attr_data;
1048       l_msii_sql := l_msii_sql || ', ' || l_pr_attr_rec.LOOKUP_CODE ;
1049     END LOOP; -- FOR l_pr_attr_rec IN cr_primary_attr LOOP
1050     Debug_Message('Done getting metadata for Primary Attributes');
1051 
1052     ------------------------------------------------------------------------------
1053     -- Get meta data for operational attributes.
1054     -- Saving the meta data about each attribute in meta data table l_attr_data_tbl
1055     -- Based on this metadata, also preparing the query l_msii_sql for getting data
1056     -- from interface and production table
1057     -------------------------------------------------------------------------------
1058     Debug_Message('Started getting metadata for Operational Attributes');
1059     FOR l_attr_name_rec IN cr_attr_info LOOP
1060       l_attr_data_tbl.extend();
1061       l_attr_data.ATTR_DISPLAY_NAME := l_attr_name_rec.ATTR_DISPLAY_NAME;
1062       l_attr_data.VALUE_SET_ID := NVL(l_attr_name_rec.VALUE_SET_ID, 0);
1063       l_attr_data.VALIDATION_CODE := l_attr_name_rec.VALIDATION_CODE ;
1064       l_attr_data.DATA_TYPE_CODE := l_attr_name_rec.DATA_TYPE_CODE;
1065       l_attr_data.ATTR_GROUP_DISP_NAME := l_attr_name_rec.ATTR_GROUP_DISP_NAME;
1066       l_attr_data.ATTR_GROUP_NAME := l_attr_name_rec.ATTR_GROUP_NAME;
1067       l_attr_data.DATABASE_COLUMN := l_attr_name_rec.DATABASE_COLUMN;
1068       l_attr_data.FLAG := 'N';
1069 	    l_attr_data.VIEW_PRIVILEGE_NAME	:= 'NOTAPPLICABLE';
1070       l_attr_data.UOM_CLASS	:= l_attr_name_rec.UOM_CLASS;
1071       l_attr_data.ATTR_NAME := l_attr_name_rec.ATTR_NAME;
1072       l_attr_data.ATTR_ID := l_attr_name_rec.ATTR_ID;
1073       l_attr_data_tbl(l_attr_data_tbl.LAST) := l_attr_data;
1074       l_msii_sql := l_msii_sql || ', ' || l_attr_name_rec.DATABASE_COLUMN ;
1075     END LOOP; -- FOR l_attr_name_rec IN cr_attr_info LOOP
1076     Debug_Message('Done getting metadata for Operationl Attributes');
1077 
1078     -- Preaparing dynamic sql cursor from query l_msii_sql
1079     -- to get data from interface table
1080     Debug_Message('Preparing SQL to get data from interface table for item primary and operational attributes.');
1081     cr_msi_intf := DBMS_SQL.OPEN_CURSOR;
1082 
1083     -- if the batch is PDH batch
1084     -- we need to match inventory_item_id or item number in interface table
1085     -- with the p_item1 or p_ss_record
1086     IF is_pdh_batch THEN
1087       -- PDH item
1088       Debug_Message('Prepared query for Primary and Operational Attributes for PDH item');
1089       l_msii_sql := l_msii_sql || ' FROM MTL_SYSTEM_ITEMS_INTERFACE I '
1090                                || ' WHERE ORGANIZATION_ID = :1'
1091                                || '   AND SET_PROCESS_ID = :2 '
1092                                || '   AND ((I.INVENTORY_ITEM_ID IS NOT NULL AND I.INVENTORY_ITEM_ID = :3) '
1093                                || '      OR '
1094                                || '        (I.ITEM_NUMBER IS NOT NULL AND I.ITEM_NUMBER = :4)) '
1095                   			       || '   AND NVL(PROCESS_FLAG, -1) <= 1 ' ;
1096 
1097 
1098     ELSE
1099       --  NON PDH item
1100       Debug_Message('Prepared query for Primary and Operational Attributes for NON-PDH item');
1101       l_msii_sql := l_msii_sql || ' FROM MTL_SYSTEM_ITEMS_INTERFACE I '
1102                                || ' WHERE ORGANIZATION_ID = :1'
1103                                || '   AND SOURCE_SYSTEM_ID = :2 '
1104                                || '   AND SOURCE_SYSTEM_REFERENCE = :3'
1105                                || '   AND SET_PROCESS_ID = :4 '
1106 	                             || '   AND NVL(PROCESS_FLAG, -1) < 1 ' ;
1107       -- Adding bundleId only in case bundleId is passed.
1108       IF p_bundle_id IS NOT NULL THEN
1109         l_msii_sql := l_msii_sql || ' AND BUNDLE_ID = :5 ';
1110       END IF;
1111     END IF; --IF is_pdh_batch THEN
1112 
1113     Debug_Message('SQL is - ');
1114     FOR l in 1..(CEIL(LENGTH(l_msii_sql)/1000)) LOOP
1115       Debug_Message(SUBSTR(l_msii_sql, ((l-1)*1000) + 1, 1000));
1116     END LOOP; --FOR l in 1..(CEIL(LENGTH(l_msii_sql)/1000)) LOOP
1117 
1118     Debug_Message('Parsing the SQL');
1119     DBMS_SQL.PARSE(cr_msi_intf, l_msii_sql, DBMS_SQL.native);
1120     Debug_Message('Done Parsing the SQL');
1121 
1122     -- Defining columns for l_msii_sql
1123     -- First column will be number as l_msii_sql has inventory_item_id as first selected column always.
1124     -- depending on the metadata of primary and operational attributes, we define here the type of column
1125     Debug_Message('Defining columns of SQL');
1126     DBMS_SQL.DEFINE_COLUMN(cr_msi_intf ,1 ,l_num_value);
1127     l_count := l_attr_data_tbl.LAST;
1128     Debug_Message('Total columns = '||TO_CHAR(l_count));
1129     FOR i IN 1..l_count LOOP
1130       l_fmt := l_attr_data_tbl(i).DATA_TYPE_CODE ;
1131       IF l_fmt = G_NUMBER_FORMAT THEN
1132         DBMS_SQL.DEFINE_COLUMN(cr_msi_intf, i + l_default_sel, l_num_value);
1133       ELSIF l_fmt = G_CHAR_FORMAT THEN
1134         DBMS_SQL.DEFINE_COLUMN(cr_msi_intf, i + l_default_sel, l_str_value, 4000);
1135       ELSIF l_fmt = G_TIME_FORMAT OR l_fmt = G_DATE_TIME_FORMAT THEN
1136         DBMS_SQL.DEFINE_COLUMN(cr_msi_intf, i + l_default_sel, l_date_value);
1137       END IF; --IF l_fmt = G_NUMBER_FORMAT THEN
1138     END LOOP; --FOR i IN 1..l_count LOOP
1139     Debug_Message('Done defining columns of SQL');
1140 
1141     Debug_Message('Binding variables');
1142     -- Binding Variables to query.
1143     IF is_pdh_batch THEN
1144       -- For PDH item.
1145       DBMS_SQL.BIND_VARIABLE(cr_msi_intf, ':1', p_org_Id);
1146       DBMS_SQL.BIND_VARIABLE(cr_msi_intf, ':2', p_batch_id);
1147       DBMS_SQL.BIND_VARIABLE(cr_msi_intf, ':3', p_item1);
1148       DBMS_SQL.BIND_VARIABLE(cr_msi_intf, ':4', p_ss_record);
1149     ELSE
1150       -- Non PDH Item.
1151       DBMS_SQL.BIND_VARIABLE(cr_msi_intf, ':1', p_org_Id);
1152       DBMS_SQL.BIND_VARIABLE(cr_msi_intf, ':2', p_ss_code);
1153       DBMS_SQL.BIND_VARIABLE(cr_msi_intf, ':3', p_ss_record);
1154       DBMS_SQL.BIND_VARIABLE(cr_msi_intf, ':4', p_batch_id);
1155       IF p_bundle_id IS NOT NULL THEN
1156         DBMS_SQL.BIND_VARIABLE(cr_msi_intf, ':5', p_bundle_id);
1157       END IF;
1158     END IF; --IF is_pdh_batch THEN
1159     Debug_Message('Done Binding variables');
1160 
1161     l_ignore := DBMS_SQL.EXECUTE(cr_msi_intf);
1162     Debug_Message('Query Execution Complete');
1163 
1164     ------------------------------------------------------------------------------------
1165     -- While finding Privileges of the user upon items, do find privilege one time    --
1166     -- for all attributes in an attribute group. Since the attributes are all ordered --
1167     -- by attribute group, We compare the earlier attribute group with present one    --
1168     -- and if they are same there is no need to recalculate the privileges --- for    --
1169     -- which l_attrGrp_old and l_attrGrp_new are used                                 --
1170     ------------------------------------------------------------------------------------
1171 
1172     l_attGrp_old := '';
1173 
1174     -----------------------------------------------------------------
1175     -- Fetch Source System Data and keep entering in l_compare_tbl --
1176     -- Since it is required to enter data for other items we do    --
1177     -- keep required meta data for the attributes for which source --
1178     -- system data is not NULL.                                    --
1179     -----------------------------------------------------------------
1180     Debug_Message('Fetching the Rows');
1181     WHILE DBMS_SQL.FETCH_ROWS(cr_msi_intf) > 0  LOOP
1182       -- for each column defined previously, get the value of column in l_disp_val
1183 
1184       -- Inserting rows for Supplier and SupplierSite in case we are showing
1185       -- any supplier and supplier site information
1186       l_supplier_rows_count := 0;
1187 
1188       IF  p_supplier_id IS NOT NULL THEN
1189         l_supplier_rows_count := l_supplier_rows_count + 1;
1190         l_compare_tbl.extend();
1191         FND_MESSAGE.SET_NAME('EGO', 'EGO_ITEM_SUPPLIER');
1192         l_compare_rec.ATTR_GROUP_DISP_NAME := FND_MESSAGE.GET();
1193         FND_MESSAGE.SET_NAME('EGO', 'EGO_SUPPLIER_NAME');
1194         l_compare_rec.ATTR_DISP_NAME        := FND_MESSAGE.GET();
1195         -- Get the supplier Information
1196         l_temp_query := 'SELECT VENDOR_NAME FROM PO_VENDORS WHERE VENDOR_ID = :1 ';
1197         EXECUTE IMMEDIATE l_temp_query into l_temp using p_supplier_id;
1198         l_compare_rec.SOURCE_SYS_VAL        := l_temp;
1199         l_compare_rec.ITEM1                 := l_temp;
1200         l_compare_rec.ITEM2                 := l_temp;
1201         l_compare_rec.ITEM3                 := l_temp;
1202         l_compare_rec.ITEM4                 := l_temp;
1203         l_compare_rec.PRIV_ITEM1            := 'T';
1204         l_compare_rec.PRIV_ITEM2            := 'T';
1205         l_compare_rec.PRIV_ITEM3            := 'T';
1206         l_compare_rec.PRIV_ITEM4            := 'T';
1207         l_compare_tbl(l_compare_tbl.LAST) := l_compare_rec;
1208       END IF;
1209 
1210       IF p_supplier_site_id IS NOT NULL THEN
1211         l_supplier_rows_count := l_supplier_rows_count + 1;
1212         l_compare_tbl.extend();
1213         FND_MESSAGE.SET_NAME('EGO', 'EGO_ITEM_SUPPLIR_SITE');
1214         l_compare_rec.ATTR_GROUP_DISP_NAME := FND_MESSAGE.GET();
1215         FND_MESSAGE.SET_NAME('EGO', 'EGO_SUPPLIER_SITE');
1216         l_compare_rec.ATTR_DISP_NAME        := FND_MESSAGE.GET();
1217         -- Get the supplier Information
1218         l_temp_query := 'SELECT VENDOR_SITE_CODE FROM    PO_VENDOR_SITES_ALL WHERE  VENDOR_SITE_ID = :1 ';
1219         EXECUTE IMMEDIATE l_temp_query into l_temp using p_supplier_site_id;
1220         l_compare_rec.SOURCE_SYS_VAL        := l_temp;
1221         l_compare_rec.ITEM1                 := l_temp;
1222         l_compare_rec.ITEM2                 := l_temp;
1223         l_compare_rec.ITEM3                 := l_temp;
1224         l_compare_rec.ITEM4                 := l_temp;
1225         l_compare_rec.PRIV_ITEM1            := 'T';
1226         l_compare_rec.PRIV_ITEM2            := 'T';
1227         l_compare_rec.PRIV_ITEM3            := 'T';
1228         l_compare_rec.PRIV_ITEM4            := 'T';
1229         l_compare_tbl(l_compare_tbl.LAST) := l_compare_rec;
1230       END IF;
1231 
1232       FOR i IN 1..l_count LOOP
1233         l_fmt := l_attr_data_tbl(i).DATA_TYPE_CODE ;
1234         IF l_fmt = G_NUMBER_FORMAT THEN
1235           DBMS_SQL.COLUMN_VALUE(cr_msi_intf, i+l_default_sel, l_num_value);
1236           l_disp_val := TO_CHAR(l_num_value);
1237         ELSIF l_fmt = G_CHAR_FORMAT THEN
1238           DBMS_SQL.COLUMN_VALUE(cr_msi_intf, i +l_default_sel, l_str_value);
1239           l_disp_val := l_str_value;
1240         ELSIF l_fmt = G_TIME_FORMAT OR l_fmt = G_DATE_TIME_FORMAT THEN
1241           DBMS_SQL.COLUMN_VALUE(cr_msi_intf, i+l_default_sel, l_date_value);
1242           l_disp_val := TO_CHAR(l_date_value, 'MM/DD/YYYY HH24:MI:SS');
1243         END IF; -- IF l_fmt = G_NUMBER_FORMAT THEN
1244 
1245         IF l_disp_val IS NOT NULL THEN
1246           --Debug_Message('Source System Data for Attribute - Value are ' || l_attr_data_tbl(i).ATTR_DISPLAY_NAME ||' - '|| l_disp_val);
1247           -- Set the flag=Y in the meta data table indicating the source system data is present
1248           -- for this attribute.
1249           l_attr_data_tbl(i).FLAG := 'Y';
1250           l_compare_tbl.extend();
1251           -- Since there exists data for this attribute for Source System
1252           -- Save the meta data so that we can use this when retrieving data from production table.
1253           l_attr_meta_tbl.extend();
1254           l_attr_meta_tbl(l_attr_meta_tbl.LAST) := l_attr_data_tbl(i);
1255           l_compare_rec.ATTR_GROUP_DISP_NAME := l_attr_data_tbl(i).ATTR_GROUP_DISP_NAME ;
1256           l_compare_rec.ATTR_DISP_NAME := l_attr_data_tbl(i).ATTR_DISPLAY_NAME ;
1257 
1258           -- for each attribute group there can be a privilege attached
1259           -- so, finding if user has privilege for this attribute group
1260           -- Setting properly the privilege (either T or F) in compare table
1261 	        l_attGrp_new := l_attr_data_tbl(i).ATTR_GROUP_DISP_NAME;
1262 	        l_priv_name := l_attr_data_tbl(i).VIEW_PRIVILEGE_NAME;
1263 	        IF(l_priv_name IS NULL OR l_priv_name = 'NOTAPPLICABLE') THEN
1264 	          l_priv_item1 := 'T';
1265 	          l_priv_item2 := 'T';
1266 	          l_priv_item3 := 'T';
1267 	          l_priv_item4 := 'T';
1268 	        ELSIF(l_attGrp_old <> l_attGrp_new) THEN
1269 	          l_priv_item1 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item1,
1270 							              p_org_Id, NULL, NULL, NULL, l_party_id);
1271 	          l_priv_item2 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item2,
1272 						              	p_org_Id, NULL, NULL, NULL, l_party_id);
1273             l_priv_item3 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item3,
1274                             p_org_Id, NULL, NULL, NULL, l_party_id);
1275             l_priv_item4 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item4,
1276                             p_org_Id, NULL, NULL, NULL, l_party_id);
1277           END IF; --IF(l_priv_name IS NULL OR l_priv_name = 'NOTAPPLICABLE') THEN
1278 
1279           l_attGrp_old := l_attGrp_new;
1280           l_compare_rec.PRIV_ITEM1 := l_priv_item1;
1281           l_compare_rec.PRIV_ITEM2 := l_priv_item2;
1282           l_compare_rec.PRIV_ITEM3 := l_priv_item3;
1283           l_compare_rec.PRIV_ITEM4 := l_priv_item4;
1284 
1285           Debug_Message('Value Set for this attribute is ' || TO_CHAR(l_attr_data_tbl(i).VALUE_SET_ID));
1286           -- if a value set is attached to an attribute, THEN getting its display value and storing
1287           -- that value in compare_table. Because we need to display the display values
1288           -- value_set_id = 0 means value set is not associated
1289           -- value_set_id = -1 means value set is not associated, but there is some other SQL to get the
1290           -- display value. We have already stored such SQLs in l_p_atr_sql
1291           -- value set is not associated for columns 'DESCRIPTION','ITEM_NUMBER', 'LONG_DESCRIPTION'
1292           IF l_attr_data_tbl(i).VALUE_SET_ID = -1
1293             AND l_attr_data_tbl(i).DATABASE_COLUMN NOT IN ('DESCRIPTION', 'ITEM_NUMBER', 'LONG_DESCRIPTION', 'APPROVAL_STATUS', 'CREATION_DATE' ,
1294                                                            'STYLE_ITEM_NUMBER' )
1295           THEN
1296             -- Value set not associated but there is some other SQL to get the
1297             -- display value. We have already stored such SQLs in l_p_atr_sql
1298             l_temp_query := l_p_atr_sql(l_attr_data_tbl(i).DATABASE_COLUMN) || ' :1';
1299             EXECUTE IMMEDIATE l_temp_query into l_temp using l_disp_val;
1300             l_compare_rec.source_sys_val := l_temp;
1301             Debug_Message('Value in the View table for this Attribute - '|| l_temp);
1302           ELSIF l_attr_data_tbl(i).VALUE_SET_ID = -1
1303             OR l_attr_data_tbl(i).VALIDATION_CODE = EGO_EXT_FWK_PUB.G_NONE_VALIDATION_CODE --G_NUMBER_FORMAT
1304             OR l_attr_data_tbl(i).DATABASE_COLUMN IN ( 'DESCRIPTION','ITEM_NUMBER', 'LONG_DESCRIPTION', 'APPROVAL_STATUS', 'CREATION_DATE',
1305                                                        'STYLE_ITEM_FLAG' , 'STYLE_ITEM_NUMBER', 'GDSN_OUTBOUND_ENABLED_FLAG',
1306                                                        'TRADE_ITEM_DESCRIPTOR' )
1307           THEN
1308             -- Value set not associated Or NO Validation required.
1309             l_compare_rec.source_sys_val := l_disp_val;
1310             Debug_Message('Value in the View table for this Attribute - '||l_disp_val);
1311           ELSIF l_attr_data_tbl(i).VALUE_SET_ID <> 0 THEN
1312             --Value set is associated.
1313             l_temp := Get_SS_Data_For_Val_set
1314                             ( p_value_set_id     =>  l_attr_data_tbl(i).VALUE_SET_ID
1315                              ,p_validation_code  =>  l_attr_data_tbl(i).VALIDATION_CODE
1316                              ,p_str_val          =>  l_disp_val);
1317             IF l_temp IS NOT NULL THEN
1318               l_compare_rec.source_sys_val := l_temp;
1319             ELSE
1320               l_compare_rec.source_sys_val := l_disp_val;
1321             END IF; --IF l_temp IS NOT NULL THEN
1322             Debug_Message('Value in the View table for this Attribute - '|| l_compare_rec.SOURCE_SYS_VAL);
1323           ELSE
1324             l_compare_rec.source_sys_val := l_disp_val;
1325             Debug_Message('Value in the View table for this Attribute - '|| l_disp_val);
1326           END IF; --IF l_attr_data_tbl(i).VALUE_SET_ID = -1
1327 
1328           -- If UOM class is associated with this attribute THEN appending base Unit Of Measure to the value
1329           IF(l_attr_data_tbl(i).UOM_CLASS IS NOT NULL) THEN
1330 	          l_temp_query := l_p_atr_sql('UOM_CLASS');
1331 	          EXECUTE IMMEDIATE l_temp_query INTO l_temp USING l_attr_data_tbl(i).UOM_CLASS;
1332 		        l_compare_rec.source_sys_val := l_disp_val || ' ' || l_temp;
1333 	        END IF; --IF(l_attr_data_tbl(i).UOM_CLASS is not NULL) THEN
1334 
1335           IF l_is_policy = 'Y' AND  --Change policy needs to be populated
1336             (l_attr_data_tbl(i).ATTR_GROUP_NAME <> l_primary_ag_int_name)
1337           THEN
1338             l_compare_rec.CHANGE_POLICY := l_ch_policy_tbl(l_attr_data_tbl(i).ATTR_GROUP_NAME);
1339           END IF; --IF l_is_policy = 'Y' AND
1340 
1341           l_compare_tbl(l_compare_tbl.LAST) := l_compare_rec;
1342         END IF; --IF l_disp_val IS NOT NULL THEN
1343       END LOOP; --FOR i IN 1..l_count LOOP
1344       Debug_Message('Completed Entering records for Source System');
1345     END LOOP; --WHILE DBMS_SQL.FETCH_ROWS(cr_msi_intf) > 0  LOOP
1346     DBMS_SQL.close_cursor(cr_msi_intf);
1347 
1348     Debug_Message('Done processing Item attributes (Primary and Operational) for Source System');
1349     Debug_Message('Processing Item attributes (Primary and Operational) for Production Items');
1350     -- Building query to get values from production table MTL_SYSTEM_ITEMS
1351     l_default_sel := 0; -- To keep track of total number of attributes in Compare Table
1352 
1353     -- If atleast one attribute for Source System item is populated
1354     -- in l_compare_tbl, Proceed to fill table for other items
1355     Debug_Message('Number of attributes populated for Source System item in Compare Table - ' || TO_CHAR(l_compare_tbl.LAST));
1356     IF (l_compare_tbl.LAST > 0) THEN
1357       Debug_Message('Preparing SQL for Primary and Operational attributes of Production Items ');
1358       l_sql_msi := 'SELECT I.INVENTORY_ITEM_ID AS INVENTORY_ITEM_ID ' ;
1359       l_default_sel := l_default_sel + 1;
1360       l_col_idx := 1;
1361       FOR i in 1..l_count LOOP
1362         Debug_Message('Primary Attr : ' || l_attr_data_tbl(i).DATABASE_COLUMN );
1363         -- If source system contains some value for this attribute the FLAG would be Y
1364         IF l_attr_data_tbl(i).FLAG = 'Y' THEN
1365           G_META(l_col_idx + l_default_sel) := l_attr_data_tbl(i).DATA_TYPE_CODE;
1366           IF l_attr_data_tbl(i).VALUE_SET_ID = -1 THEN
1367             --Primary attribute
1368             l_sql_msi := l_sql_msi || ' , ( '||l_p_atr_sql(l_attr_data_tbl(i).DATABASE_COLUMN);
1369             IF l_attr_data_tbl(i).DATABASE_COLUMN NOT IN ('DESCRIPTION','ITEM_NUMBER', 'LONG_DESCRIPTION' ,
1370                                                           'STYLE_ITEM_NUMBER' ) THEN
1371               l_sql_msi := l_sql_msi ||'I.'||l_attr_data_tbl(i).DATABASE_COLUMN ;
1372             END IF; -- IF l_attr_data_tbl(i).DATABASE_COLUMN NOT IN ('DESCRIPTION
1373             l_sql_msi := l_sql_msi ||')AS '|| l_attr_data_tbl(i).DATABASE_COLUMN;
1374           ELSE
1375             l_sql_msi :=  l_sql_msi || ' , '||  ' I.'||l_attr_data_tbl(i).DATABASE_COLUMN;
1376           END IF; --IF l_attr_data_tbl(i).VALUE_SET_ID = -1 THEN
1377 
1378 	        -- Saving Unit Of Measure UOM Class associated with this attribute in UOM table
1379           IF (l_attr_data_tbl(i).UOM_CLASS IS NOT NULL) THEN
1380 	          UOM(l_col_idx+ l_default_sel) := l_attr_data_tbl(i).UOM_CLASS;
1381 	        ELSE
1382 	          UOM(l_col_idx+ l_default_sel) := NULL;
1383 	        END IF; --IF (l_attr_data_tbl(i).UOM_CLASS IS NOT NULL) THEN
1384           l_col_idx := l_col_idx + 1;
1385         END IF; --IF l_attr_data_tbl(i).FLAG = 'Y' THEN
1386       END LOOP; --FOR i in 1..l_count LOOP
1387 
1388       -- if the batch is PDH batch
1389       -- we need to bind only one inventory_item_id
1390       IF is_pdh_batch THEN
1391         -- PDH Case
1392         l_sql_msi := l_sql_msi || ' FROM MTL_SYSTEM_ITEMS_B_KFV I '
1393                                || ' WHERE INVENTORY_ITEM_ID = :1 '
1394                                || '   AND ORGANIZATION_ID = :2';
1395       ELSE
1396         -- Non PDH Case
1397         l_sql_msi := l_sql_msi || ' FROM MTL_SYSTEM_ITEMS_B_KFV I '
1398                                || ' WHERE INVENTORY_ITEM_ID IN( :1,:2,:3,:4 ) '
1399                                || '   AND ORGANIZATION_ID = :5';
1400       END IF; --IF is_pdh_batch THEN
1401 
1402       Debug_Message('Done preparing SQL for Primary and Operational attributes of Production Items ');
1403 
1404       Debug_Message('SQL is - ');
1405       FOR l in 1..(CEIL(LENGTH(l_sql_msi)/1000)) LOOP
1406         Debug_Message(SUBSTR(l_sql_msi, ((l-1)*1000) + 1, 1000));
1407       END LOOP; --FOR l in 1..(CEIL(LENGTH(l_sql_msi)/1000)) LOOP
1408 
1409       -- Opening a Dynamic Cursor for handling Query l_sql_msi
1410       cr_msi_attr := dbms_sql.open_cursor;
1411       Debug_Message('Parsing the SQL');
1412       DBMS_SQL.PARSE(cr_msi_attr, l_sql_msi, DBMS_SQL.native);
1413       Debug_Message('Done parsing the SQL');
1414 
1415       Debug_Message('Binding variables');
1416       -- Binding the variables
1417 	    IF is_pdh_batch THEN
1418 	      DBMS_SQL.BIND_VARIABLE(cr_msi_attr,':1',p_item1);
1419         DBMS_SQL.BIND_VARIABLE(cr_msi_attr,':2',p_org_id);
1420       ELSE
1421 	      DBMS_SQL.BIND_VARIABLE(cr_msi_attr,':1',p_item1);
1422         DBMS_SQL.BIND_VARIABLE(cr_msi_attr,':2',p_item2);
1423         DBMS_SQL.BIND_VARIABLE(cr_msi_attr,':3',p_item3);
1424         DBMS_SQL.BIND_VARIABLE(cr_msi_attr,':4',p_item4);
1425         DBMS_SQL.BIND_VARIABLE(cr_msi_attr,':5',p_org_id);
1426       END IF; --IF is_pdh_batch THEN
1427       Debug_Message('Done binding variables');
1428 
1429       -- First columnn is inventory item id.
1430       Debug_Message('Defining columns for SQL');
1431       DBMS_SQL.DEFINE_COLUMN(cr_msi_attr, 1, l_num_value);
1432       -- Defining Columns for Dynamic Cursor
1433       Debug_Message('Total columns = '||TO_CHAR(l_col_idx + 1));
1434       FOR i in 2..l_col_idx LOOP
1435         IF G_META(i) = G_CHAR_FORMAT THEN
1436           DBMS_SQL.DEFINE_COLUMN(cr_msi_attr, i, l_str_value, 4000);
1437         ELSIF G_META(i) = G_NUMBER_FORMAT THEN
1438           DBMS_SQL.DEFINE_COLUMN(cr_msi_attr, i, l_num_value);
1439         ELSIF G_META(i) in(G_DATE_FORMAT, G_TIME_FORMAT, G_DATE_TIME_FORMAT) THEN
1440           DBMS_SQL.DEFINE_COLUMN(cr_msi_attr, i, l_date_value);
1441         END IF; --IF G_META(i) = G_CHAR_FORMAT THEN
1442       END LOOP; --FOR i in 2..l_col_idx LOOP
1443 
1444       l_ignore := DBMS_SQL.EXECUTE(cr_msi_attr);
1445       Debug_Message('Done Execution of the Query');
1446 
1447       Debug_Message('Fetching rows');
1448       WHILE DBMS_SQL.FETCH_ROWS(cr_msi_attr) > 0 LOOP
1449         -- first column is inventory_item_id
1450         Debug_Message('Getting value for inventory_item_id');
1451         DBMS_SQL.COLUMN_VALUE(cr_msi_attr, 1, l_item_id);
1452         Debug_Message('Selected Row and started entering into Compare View table for item : ' || TO_CHAR(l_item_id));
1453 
1454         FOR i IN 2..l_col_idx LOOP
1455           -- for each column get the value into appropriate variable depending upon the format of column
1456           IF G_META(i) = G_CHAR_FORMAT THEN
1457             DBMS_SQL.COLUMN_VALUE(cr_msi_attr, i, l_str_value);
1458             l_val := l_str_value;
1459           ELSIF G_META(i) = G_NUMBER_FORMAT THEN
1460             DBMS_SQL.COLUMN_VALUE(cr_msi_attr, i, l_num_value);
1461             l_val := TO_CHAR(l_num_value);
1462           ELSIF G_META(i) = G_DATE_FORMAT THEN
1463             DBMS_SQL.COLUMN_VALUE(cr_msi_attr, i, l_date_value);
1464             l_val := TO_CHAR(l_date_value, 'MM/DD/YYYY HH24:MI:SS');
1465           END IF; -- IF G_META(i) = G_CHAR_FORMAT THEN
1466 
1467           -- To populate into the Compare View Table
1468           IF l_attr_meta_tbl(i-1).VALUE_SET_ID <> -1
1469               AND l_attr_meta_tbl(i-1).VALUE_SET_ID <> 0
1470               AND l_attr_meta_tbl(i-1).VALIDATION_CODE <> EGO_EXT_FWK_PUB.G_NONE_VALIDATION_CODE
1471           THEN
1472             Debug_Message('Value Set is associated, so getting display value for internal value: ' || l_val);
1473             IF(G_META(i) = G_DATE_FORMAT) THEN
1474               l_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
1475                         431, l_val, NULL, NULL, l_attr_meta_tbl(i-1).ATTR_NAME, 'EGO_MASTER_ITEMS'
1476                         ,l_attr_meta_tbl(i-1).ATTR_GROUP_NAME, l_attr_meta_tbl(i-1).ATTR_ID
1477                         ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
1478                         , NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
1479             ELSIF (G_META(i) = G_CHAR_FORMAT) THEN
1480               l_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
1481                         431, NULL, l_val, NULL, l_attr_meta_tbl(i-1).ATTR_NAME, 'EGO_MASTER_ITEMS'
1482                         ,l_attr_meta_tbl(i-1).ATTR_GROUP_NAME, l_attr_meta_tbl(i-1).ATTR_ID
1483                         ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
1484                         ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
1485             ELSIF (G_META(i) = G_NUMBER_FORMAT) THEN
1486               l_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
1487                         431, NULL, NULL, l_val, l_attr_meta_tbl(i-1).ATTR_NAME, 'EGO_MASTER_ITEMS'
1488                         ,l_attr_meta_tbl(i-1).ATTR_GROUP_NAME, l_attr_meta_tbl(i-1).ATTR_ID
1489                         ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
1490                         ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
1491             END IF; --IF(G_META(i) = G_DATE_FORMAT) THEN
1492             Debug_Message('Display value is: ' || l_val);
1493           END IF; --IF l_attr_meta_tbl(i-1).VALUE_SET_ID <> -1
1494 
1495           -- if UOM class is attached to attribute THEN append the base UOM to the value
1496 	        IF ( UOM(i) IS NOT NULL ) THEN
1497             -- UOM is associated to this Attribute.
1498 	          l_temp_query := l_p_atr_sql('UOM_CLASS');
1499 	          EXECUTE IMMEDIATE l_temp_query INTO l_temp USING UOM(i);
1500 	          l_val := l_val || ' ' || l_temp;
1501 	        END IF; -- IF ( UOM(i) IS NOT NULL ) THEN
1502 
1503           populate_compare_tbl(p_compare_table => l_compare_tbl ,
1504                                p_index         => i-1+l_supplier_rows_count,
1505                                p_sel_item      => l_item_id ,
1506                                p_value         => l_val ,
1507                                p_item1         => p_item1 ,
1508                                p_item2         => p_item2 ,
1509                                p_item3         => p_item3 ,
1510                                p_item4         => p_item4);
1511         END LOOP; --FOR i IN 2..l_col_idx LOOP
1512       END LOOP; --WHILE DBMS_SQL.FETCH_ROWS(cr_msi_attr) > 0 LOOP
1513       DBMS_SQL.close_cursor(cr_msi_attr);
1514       Debug_Message('Completed inserting information for primary and operational attributes for all items');
1515     END IF; --IF (l_compare_tbl.LAST > 0) THEN
1516     Debug_Message('Done processing Item attributes (Primary and Operational) for Production Items');
1517 
1518     Debug_Message('Processing User Defined attributes.');
1519     Debug_Message('Finding out the max revision And Pdh Revi : ' || p_pdh_revision );
1520     -- To find out if there are any attributes have Revisions associated with them
1521     IF is_pdh_batch THEN
1522       -- If the item is of PDH Type
1523     /*  l_revision := EGO_IMPORT_PVT.GET_LATEST_EIUAI_REV_PDH(
1524                          p_batch_id                  => p_batch_id
1525                         ,p_inventory_item_id         => p_item1
1526                         ,p_item_number               => p_ss_record
1527                         ,p_organization_id           => p_org_id);*/
1528       -- l_revision is revision of the source system item.
1529       -- p_pdh_revision is the revision of the PDH item.
1530       l_revision := p_pdh_revision;
1531 
1532       -- If l_revision is null or l_revision revision do not present in PDH
1533       -- l_pdh_revision = production revision. else l_pdh_revision = l_revision.
1534       IF (p_item1 IS NOT NULL AND
1535               (  p_pdh_revision IS NULL
1536                  OR
1537                    'N' = REV_EXISTS_IN_PDH ( p_revision => p_pdh_revision
1538                                             ,p_inventory_item_id => p_item1
1539                                             ,p_organization_id => p_org_id
1540                              )
1541               )
1542          )
1543       THEN
1544         l_pdh_revision := GET_CURRENT_PDH_REVISION( p_item1, p_org_id);
1545       ELSE
1546         l_pdh_revision := p_pdh_revision;
1547       END IF;
1548     ELSE
1549       -- For NON PDH Type
1550       l_revision := EGO_IMPORT_PVT.GET_LATEST_EIUAI_REV_SS(
1551                          p_batch_id                  => p_batch_id
1552                         ,p_source_system_id          => p_ss_code
1553                         ,p_source_system_reference   => p_ss_record
1554                         ,p_organization_id           => p_org_id);
1555     END IF; --IF is_pdh_batch THEN
1556 
1557     Debug_Message('Max revision is '||l_revision);
1558 
1559     -- Process accessing User Defined attributes one attribute grp at a time
1560     l_val_set_clause := NULL;
1561 
1562     IF is_pdh_batch THEN
1563       -- Handling User Defined Attributes for PDH batch
1564       Debug_Message('Batch is PDH batch ');
1565       FOR rec_attr IN cr_attr_groups_pdh(l_revision) LOOP
1566         -- R12C: Show Item_Supplier attributes only if 'Supplier Id' is passed. (Supplier is selected)
1567         -- R12C: Show Item Supplier site attributes and item supplier site org attributes only if
1568         --            'Supplier Site Id' is passed.
1569         -- NOTE: SupplierSiteId do not exist without SupplierId.
1570         -- Added the following if condition for item intersection support in R12C.
1571         IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_LEVEL_ID AND p_supplier_id IS NOT NULL
1572            OR rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_SITE_LEVEL_ID AND p_supplier_site_id IS NOT NULL
1573            OR rec_attr.DATA_LEVEL_ID = G_ITEM_SUPSITEORG_LEVEL_ID AND p_supplier_site_id IS NOT NULL
1574            OR rec_attr.DATA_LEVEL_ID IN ( G_ITEM_LEVEL_ID, G_ORG_LEVEL_ID )
1575         THEN
1576           Debug_Message('Processing attribute group - '||rec_attr.ATTR_GROUP_INT_NAME);
1577           -- if change policy may be present THEN get the Change policy for each attr grp
1578           IF (l_is_policy = 'Y') THEN
1579             Debug_Message('Getting change policy for attribute group - '||rec_attr.ATTR_GROUP_INT_NAME);
1580             ENG_CHANGE_POLICY_PKG.GetChangePolicy
1581                             (   p_policy_object_name     => 'CATALOG_LIFECYCLE_PHASE'
1582                             ,  p_policy_code            => 'CHANGE_POLICY'
1583                             ,  p_policy_pk1_value       =>  l_catalog_id
1584                             ,  p_policy_pk2_value       =>  l_lifecycle_id
1585                             ,  p_policy_pk3_value       =>  l_phase_id
1586                             ,  p_policy_pk4_value       =>  NULL
1587                             ,  p_policy_pk5_value       =>  NULL
1588                             ,  p_attribute_object_name  => 'EGO_CATALOG_GROUP'
1589                             ,  p_attribute_code         => 'ATTRIBUTE_GROUP'
1590                             ,  p_attribute_value        =>  rec_attr.ATTR_GROUP_ID
1591                             ,  x_policy_value           =>  l_ch_policy
1592                             );
1593             Debug_Message('Change Policy for attribute group : '||rec_attr.ATTR_GROUP_INT_NAME || ' is : ' || l_ch_policy );
1594             IF INSTR(l_ch_policy,'NOT') > 0 THEN
1595               l_ch_policy_tbl(rec_attr.ATTR_GROUP_INT_NAME) := 'N';
1596             ELSIF INSTR(l_ch_policy,'ALLOWED') > 0 THEN
1597               l_ch_policy_tbl(rec_attr.ATTR_GROUP_INT_NAME) := 'Y';
1598             ELSIF INSTR(l_ch_policy,'CHANGE') > 0 THEN
1599               l_ch_policy_tbl(rec_attr.ATTR_GROUP_INT_NAME) := 'C';
1600             END IF; -- IF INSTR(l_ch_policy,'NOT') > 0 THEN
1601           END IF; --IF (l_is_policy = 'Y') THEN
1602 
1603           l_sel_clause := NULL;
1604           l_sql_query := NULL;
1605           l_temp_query := NULL;
1606           l_idx := 1;
1607           l_start := NVL(l_compare_tbl.LAST, 0)  ;
1608           cr_ud_attr := dbms_sql.open_cursor;
1609 
1610           --R12C: Finding attr Group display name with prefix to identify
1611           -- the Attribute group data level.
1612           IF rec_attr.DATA_LEVEL_ID = G_ITEM_LEVEL_ID THEN
1613             l_attr_group_display_name := l_item_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
1614           ELSIF rec_attr.DATA_LEVEL_INTERNAL_NAME = G_ITEM_REVISION_LEVEL THEN
1615             l_attr_group_display_name := l_itemRev_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
1616           ELSIF rec_attr.DATA_LEVEL_ID = G_ORG_LEVEL_ID THEN
1617            l_attr_group_display_name := l_itemOrg_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
1618           ELSIF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_LEVEL_ID THEN
1619             l_attr_group_display_name := l_itemSup_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
1620           ELSIF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_SITE_LEVEL_ID THEN
1621             l_attr_group_display_name := l_itemSupSite_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
1622           ELSIF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPSITEORG_LEVEL_ID THEN
1623             l_attr_group_display_name := l_itemSupSiteOrg_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
1624           END IF;
1625 
1626 	        -- Since Each AG is handled at each time. Find once privileges over all items
1627           -- of a particular Attribute Group
1628           Debug_Message('Finding and Populating privilege');
1629 	        l_priv_name := get_privilege_name(rec_attr.VIEW_PRIVILEGE_ID);
1630 	        IF(l_priv_name IS NULL) THEN
1631 	          l_priv_item1 := 'T';
1632 	          l_priv_item2 := 'T';
1633 	          l_priv_item3 := 'T';
1634 	          l_priv_item4 := 'T';
1635 	        ELSE
1636             l_priv_item1 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item1,
1637                             p_org_Id, NULL, NULL, NULL, l_party_id);
1638             l_priv_item2 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item2,
1639                             p_org_Id, NULL, NULL, NULL, l_party_id);
1640             l_priv_item3 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item3,
1641                             p_org_Id, NULL, NULL, NULL, l_party_id);
1642             l_priv_item4 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item4,
1643                             p_org_Id, NULL, NULL, NULL, l_party_id);
1644           END IF; --IF(l_priv_name IS NULL) THEN
1645           Debug_Message('Done finding and Populating privilege');
1646 
1647           -- If is no revision level records for this attribute group
1648           IF rec_attr.REVISION IS NULL THEN
1649             -- For Each attribute Group selected. Get all the attributes in it and
1650             -- Populate the l_compare_table for these attributes
1651             -- The cusor cr_usr_intf_pdh returns
1652             -- Also Perparing Query clause <l_sel_clause> to query for same attributes over other Items.
1653             l_sql_query := ' FROM EGO_MTL_SY_ITEMS_EXT_VL I, EGO_ATTR_GROUPS_DL_V AG '||
1654                           ' WHERE AG.APPLICATION_ID = 431  '||
1655                           '   AND NVL(AG.ATTR_GROUP_TYPE, ''EGO_ITEMMGMT_GROUP'') = ''EGO_ITEMMGMT_GROUP'' '||
1656                           '   AND AG.ATTR_GROUP_ID = I.ATTR_GROUP_ID'||
1657                           '   AND I.DATA_LEVEL_ID = :98' ||   -- Added for R12C: Data_level_id
1658                           '   AND AG.ATTR_GROUP_NAME =  :99'; --Bug#5043002 '' || rec_attr.ATTR_GROUP_INT_NAME ||'''';
1659 
1660             -- R12C: BEGIN
1661             IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_LEVEL_ID THEN
1662               l_sql_query := l_sql_query || '   AND I.PK1_VALUE = :96';
1663             END IF;
1664 
1665             IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_SITE_LEVEL_ID THEN
1666               l_sql_query := l_sql_query || '   AND I.PK2_VALUE = :97';
1667             END IF;
1668 
1669             IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPSITEORG_LEVEL_ID THEN
1670               l_sql_query := l_sql_query || '   AND I.PK1_VALUE = :96 AND I.PK2_VALUE = :97';
1671             END IF;
1672             -- R12C: END
1673 
1674             Debug_Message('Revision is NULL');
1675             Debug_Message('Populating all the attribute values for this attribute group for source system');
1676             FOR rec_ud_attrs IN cr_usr_intf_pdh( rec_attr.ATTR_GROUP_INT_NAME, rec_attr.DATA_LEVEL_ID ) LOOP
1677               Debug_Message('Processing the attribute: '||rec_ud_attrs.ATTR_INT_NAME);
1678               l_idx := l_idx + 1;
1679               l_compare_tbl.extend();
1680               l_compare_rec.ATTR_GROUP_DISP_NAME := l_attr_group_display_name;
1681               l_compare_rec.ATTR_DISP_NAME := rec_ud_attrs.ATTR_DISPLAY_NAME;
1682               l_compare_rec.ATTRIBUTE_CODE := rec_ud_attrs.ATTR_ID;
1683               l_compare_rec.ATTR_INT_NAME := rec_ud_attrs.ATTR_INT_NAME;
1684               l_compare_rec.ATTR_GROUP_INT_NAME := rec_ud_attrs.ATTR_GROUP_INT_NAME;
1685 
1686               -- Setting properly the privilege in compare table. privileges are calculated
1687               -- for each AG earlier
1688               l_compare_rec.PRIV_ITEM1 := l_priv_item1;
1689               l_compare_rec.PRIV_ITEM2 := l_priv_item2;
1690               l_compare_rec.PRIV_ITEM3 := l_priv_item3;
1691               l_compare_rec.PRIV_ITEM4 := l_priv_item4;
1692 
1693               -- Saving UOM Class and value set Associated with this attribute
1694 	            UOM(l_idx) := rec_ud_attrs.UOM_CLASS;
1695               UOM_USER_CODE(l_idx) := rec_ud_attrs.ATTR_VALUE_UOM;
1696               UOM_DISP_VAL(l_idx) := rec_ud_attrs.ATTR_UOM_DISP_VALUE;
1697 
1698               IF rec_ud_attrs.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_NONE_VALIDATION_CODE THEN
1699                 VSId(l_idx) := 0;
1700               ELSE
1701                 VSId(l_idx) := rec_ud_attrs.VALUE_SET_ID;
1702               END IF;
1703 
1704               -- getting and setting source system value
1705               -- If Value set is not associated
1706               IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
1707                 Debug_Message('Value set is NOT attached');
1708 		            IF rec_ud_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
1709                   G_META(l_idx) := G_CHAR_FORMAT;
1710                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_DISP_VALUE;
1711                 ELSIF rec_ud_attrs.DATABASE_COLUMN LIKE 'C%' OR rec_ud_attrs.DATABASE_COLUMN LIKE 'T%' THEN
1712                   G_META(l_idx) := G_CHAR_FORMAT;
1713                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_STR;
1714                 ELSIF rec_ud_attrs.DATABASE_COLUMN LIKE 'D%' THEN
1715                   G_META(l_idx) := G_DATE_FORMAT;
1716                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_DATE;
1717                 ELSIF rec_ud_attrs.DATABASE_COLUMN LIKE 'N%' THEN
1718                   G_META(l_idx) := G_NUMBER_FORMAT;
1719                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_NUM;
1720                 END IF; --IF rec_ud_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
1721 
1722                 -- Adding column to sql string to get production values
1723           		  l_sel_clause := l_sel_clause || ' , ' || rec_ud_attrs.DATABASE_COLUMN;
1724               ELSE
1725                 Debug_Message('Value set is attached');
1726                 -- If Value set is Associated
1727                 l_sel_clause  := l_sel_clause || ' , '|| rec_ud_attrs.DATABASE_COLUMN;
1728                 G_META(l_idx) := SUBSTR(rec_ud_attrs.DATABASE_COLUMN, 1, 1);
1729                 IF rec_ud_attrs.ATTR_DISP_VALUE IS NULL THEN
1730                   l_compare_rec.SOURCE_SYS_VAL := Get_SS_Data_For_Val_set
1731                                                     ( p_value_set_id    =>  rec_ud_attrs.VALUE_SET_ID
1732                                                     ,p_validation_code =>  rec_ud_attrs.VALIDATION_CODE
1733                                                     ,p_str_val         =>  rec_ud_attrs.ATTR_VALUE_STR
1734                                                     ,p_date_val        =>  rec_ud_attrs.ATTR_VALUE_DATE
1735                                                     ,p_num_val         =>  rec_ud_attrs.ATTR_VALUE_NUM );
1736                 ELSE
1737                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_DISP_VALUE;
1738                 END IF; --IF rec_ud_attrs.ATTR_DISP_VALUE IS NULL THEN
1739                 Debug_Message('Display value is: '||l_compare_rec.SOURCE_SYS_VAL);
1740               END IF; --IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
1741 
1742               -- if UOM class is attached to the attribute, THEN appending the base UOM to attribute value.
1743               IF rec_ud_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
1744                 Debug_Message('UOM Display Value is attached');
1745                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || rec_ud_attrs.ATTR_UOM_DISP_VALUE;
1746                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
1747               ELSIF rec_ud_attrs.ATTR_VALUE_UOM IS NOT NULL THEN
1748                 Debug_Message('UOM code is attached is attached');
1749                 l_temp_query := l_p_atr_sql('UOM_CODE');
1750                 EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_ud_attrs.ATTR_VALUE_UOM;
1751                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
1752                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
1753               ELSIF rec_ud_attrs.UOM_CLASS IS NOT NULL THEN
1754                 Debug_Message('UOM Class is attached');
1755                 l_temp_query := l_p_atr_sql('UOM_CLASS');
1756                 EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_ud_attrs.UOM_CLASS;
1757                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
1758                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
1759               END IF; --IF rec_ud_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
1760 
1761               IF l_is_policy = 'Y'  THEN
1762                 l_compare_rec.CHANGE_POLICY := l_ch_policy_tbl(rec_attr.ATTR_GROUP_INT_NAME);
1763               END IF; --IF l_is_policy = 'Y'  THEN
1764               l_compare_tbl(l_compare_tbl.LAST) := l_compare_rec;
1765               Debug_Message('Done processing the attribute: '||rec_ud_attrs.ATTR_INT_NAME);
1766             END LOOP; --FOR rec_ud_attrs IN cr_usr_intf_pdh(rec_attr.ATTR_GROUP_INT_NAME) LOOP
1767 
1768             l_sql_query := 'SELECT I.INVENTORY_ITEM_ID ' || l_sel_clause || l_sql_query ||
1769                           '  AND I.INVENTORY_ITEM_ID = :1'||
1770                           '  AND I.ORGANIZATION_ID = :2';
1771           ELSE --IF rec_attr.REVISION IS NULL THEN
1772             -- If there are attributes with Revisions ... Get Attributes in for given Attribute Group.
1773             l_sql_query := ' FROM EGO_MTL_SY_ITEMS_EXT_VL I, EGO_ATTR_GROUPS_DL_V AG,  MTL_ITEM_REVISIONS_B REV'||
1774                           ' WHERE AG.APPLICATION_ID = 431  '||
1775                           '   AND NVL(AG.ATTR_GROUP_TYPE, ''EGO_ITEMMGMT_GROUP'') = ''EGO_ITEMMGMT_GROUP'' '||
1776                           '   AND AG.ATTR_GROUP_ID = I.ATTR_GROUP_ID'||
1777 			                    '   AND I.INVENTORY_ITEM_ID = REV.INVENTORY_ITEM_ID ' ||
1778                   			  '   AND I.ORGANIZATION_ID = REV.ORGANIZATION_ID ' ||
1779 			                    '   AND I.REVISION_ID = REV.REVISION_ID ' ||
1780 			                    '   AND REV.REVISION = ''' || l_pdh_revision || '''' ||
1781 			                    '   AND I.DATA_LEVEL_ID = :98' ||
1782                           '   AND AG.ATTR_GROUP_NAME =  :99' ; --Bug#5043002 '' || rec_attr.ATTR_GROUP_INT_NAME ||'''';
1783 
1784             -- R12C: BEGIN
1785             IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_LEVEL_ID THEN
1786               l_sql_query := l_sql_query || '   AND I.PK1_VALUE = :96';
1787             END IF;
1788 
1789             IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_SITE_LEVEL_ID THEN
1790               l_sql_query := l_sql_query || '   AND I.PK2_VALUE = :97';
1791             END IF;
1792 
1793             IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPSITEORG_LEVEL_ID THEN
1794               l_sql_query := l_sql_query || '   AND I.PK1_VALUE = :96 AND I.PK2_VALUE = :97';
1795             END IF;
1796             -- R12C: END
1797 
1798 	          Debug_Message('Revision is NOT NULL, revision is: '||rec_attr.REVISION);
1799             Debug_Message('Populating all the attribute values for this attribute group for source system');
1800             FOR rec_ud_attrs IN cr_rev_usr_intf_pdh(rec_attr.ATTR_GROUP_INT_NAME, l_revision) LOOP
1801               Debug_Message('Processing the attribute: '||rec_ud_attrs.ATTR_INT_NAME);
1802               l_idx := l_idx + 1;
1803               l_compare_tbl.extend();
1804               l_compare_rec.ATTR_GROUP_DISP_NAME :=  l_attr_group_display_name;
1805               l_compare_rec.ATTR_DISP_NAME       :=  rec_ud_attrs.ATTR_DISPLAY_NAME;
1806               l_compare_rec.ATTRIBUTE_CODE       :=  rec_ud_attrs.ATTR_ID;
1807               l_compare_rec.ATTR_INT_NAME        :=  rec_ud_attrs.ATTR_INT_NAME ;
1808               l_compare_rec.ATTR_GROUP_INT_NAME  :=  rec_ud_attrs.ATTR_GROUP_INT_NAME;
1809 
1810               -- Setting properly the privilege in compare table. privileges are calculated
1811               -- for each AG earlier
1812               l_compare_rec.PRIV_ITEM1 := l_priv_item1;
1813               l_compare_rec.PRIV_ITEM2 := l_priv_item2;
1814               l_compare_rec.PRIV_ITEM3 := l_priv_item3;
1815               l_compare_rec.PRIV_ITEM4 := l_priv_item4;
1816 
1817               -- Saving UOM Class and value set Associated with this attribute
1818               IF rec_ud_attrs.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_NONE_VALIDATION_CODE THEN
1819                 VSId(l_idx) := 0;
1820               ELSE
1821                 VSId(l_idx) := rec_ud_attrs.VALUE_SET_ID;
1822               END IF;
1823 	            UOM(l_idx) := rec_ud_attrs.UOM_CLASS;
1824               UOM_USER_CODE(l_idx) := rec_ud_attrs.ATTR_VALUE_UOM;
1825               UOM_DISP_VAL(l_idx) := rec_ud_attrs.ATTR_UOM_DISP_VALUE;
1826 
1827               -- getting and setting source system value
1828               -- If Value set is not associated
1829               IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
1830                 Debug_Message('Value set is NOT attached');
1831         		    IF rec_ud_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
1832                   G_META(l_idx) := G_CHAR_FORMAT;
1833                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_DISP_VALUE;
1834                 ELSIF rec_ud_attrs.DATABASE_COLUMN LIKE 'C%' OR rec_ud_attrs.DATABASE_COLUMN LIKE 'T%' THEN
1835                   G_META(l_idx) := G_CHAR_FORMAT;
1836                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_STR;
1837                 ELSIF rec_ud_attrs.DATABASE_COLUMN LIKE 'D%' THEN
1838                   G_META(l_idx) := G_DATE_FORMAT;
1839                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_DATE;
1840                 ELSIF rec_ud_attrs.DATABASE_COLUMN LIKE 'N%' THEN
1841                   G_META(l_idx) := G_NUMBER_FORMAT;
1842                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_NUM;
1843                 END IF; --IF rec_ud_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
1844 
1845                 l_sel_clause := l_sel_clause || ' , ' || rec_ud_attrs.DATABASE_COLUMN;
1846               ELSE --IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
1847                 Debug_Message('Value set is attached');
1848                 l_sel_clause  := l_sel_clause || ' , '|| rec_ud_attrs.DATABASE_COLUMN;
1849                 G_META(l_idx) := SUBSTR(rec_ud_attrs.DATABASE_COLUMN, 1, 1);
1850                 --G_CHAR_FORMAT;
1851                 IF rec_ud_attrs.ATTR_DISP_VALUE IS NULL THEN
1852                   l_compare_rec.SOURCE_SYS_VAL := Get_SS_Data_For_Val_set
1853                                                         ( p_value_set_id    =>  rec_ud_attrs.VALUE_SET_ID
1854                                                         ,p_validation_code =>  rec_ud_attrs.VALIDATION_CODE
1855                                                         ,p_str_val         =>  rec_ud_attrs.ATTR_VALUE_STR
1856                                                         ,p_date_val        =>  rec_ud_attrs.ATTR_VALUE_DATE
1857                                                         ,p_num_val         =>  rec_ud_attrs.ATTR_VALUE_NUM );
1858                 ELSE
1859                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_DISP_VALUE;
1860                 END IF; --IF rec_ud_attrs.ATTR_DISP_VALUE IS NULL THEN
1861                 Debug_Message('Display value is: '||l_compare_rec.SOURCE_SYS_VAL);
1862               END IF; --IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
1863 
1864               -- if UOM class is attached to the attribute, THEN appending the base UOM to attribute value.
1865               IF rec_ud_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
1866                 Debug_Message('UOM Display Value is attached');
1867                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || rec_ud_attrs.ATTR_UOM_DISP_VALUE;
1868                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
1869               ELSIF rec_ud_attrs.ATTR_VALUE_UOM IS NOT NULL THEN
1870                 Debug_Message('UOM code is attached is attached');
1871                 l_temp_query := l_p_atr_sql('UOM_CODE');
1872                 EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_ud_attrs.ATTR_VALUE_UOM;
1873                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
1874                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
1875               ELSIF rec_ud_attrs.UOM_CLASS IS NOT NULL THEN
1876                 Debug_Message('UOM Class is attached');
1877                 l_temp_query := l_p_atr_sql('UOM_CLASS');
1878                 EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_ud_attrs.UOM_CLASS;
1879                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
1880                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
1881               END IF; --IF rec_ud_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
1882 
1883               IF l_is_policy = 'Y' THEN
1884                 l_compare_rec.CHANGE_POLICY := l_ch_policy_tbl(rec_attr.ATTR_GROUP_INT_NAME);
1885               END IF; --IF l_is_policy = 'Y' THEN
1886 
1887               l_compare_tbl(l_compare_tbl.LAST) := l_compare_rec;
1888             END LOOP; --FOR rec_ud_attrs IN cr_rev_usr_intf_pdh(rec_attr.ATTR_GROUP_INT_NAME, l_revision) LOOP
1889             l_sql_query := 'SELECT I.INVENTORY_ITEM_ID ' || l_sel_clause || l_sql_query;
1890 	          l_sql_query := l_sql_query ||' AND I.INVENTORY_ITEM_ID = :1 AND I.ORGANIZATION_ID = :2' ;
1891           END IF; --IF rec_attr.REVISION IS NULL THEN
1892 
1893           Debug_Message('Done populating attribute values for this attribute group for source system');
1894           Debug_Message('Getting values from production table');
1895 
1896           Debug_Message('SQL is - ');
1897           FOR l in 1..(CEIL(LENGTH(l_sql_query)/1000)) LOOP
1898             Debug_Message(SUBSTR(l_sql_query, ((l-1)*1000) + 1, 1000));
1899           END LOOP; --FOR l in 1..(CEIL(LENGTH(l_sql_query)/1000)) LOOP
1900 
1901           -- Define Dynamic SQL for querying for other Items.
1902           Debug_Message('Parsing SQL');
1903           DBMS_SQL.PARSE(cr_ud_attr, l_sql_query, DBMS_SQL.native);
1904           Debug_Message('Done Parsing SQL');
1905 
1906           Debug_Message('Defining columns for SQL');
1907           DBMS_SQL.DEFINE_COLUMN(cr_ud_attr, 1, l_num_value);
1908           -- Defining columns in Dynamic Cursor
1909           Debug_Message('Total columns: '||TO_CHAR(l_idx + 1));
1910           FOR i IN 2..l_idx LOOP
1911             IF G_META(i) = G_CHAR_FORMAT THEN
1912               DBMS_SQL.DEFINE_COLUMN(cr_ud_attr, i, l_str_value,4000);
1913             ELSIF G_META(i) = G_NUMBER_FORMAT THEN
1914               DBMS_SQL.DEFINE_COLUMN(cr_ud_attr, i, l_num_value);
1915             ELSIF G_META(i) = G_DATE_FORMAT THEN
1916               DBMS_SQL.DEFINE_COLUMN(cr_ud_attr, i, l_date_value);
1917             END IF; --IF G_META(i) = G_CHAR_FORMAT THEN
1918           END LOOP; --FOR i IN 2..l_idx LOOP
1919 
1920           Debug_Message('Binding variables');
1921           DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':1', p_item1);
1922           DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':2', p_org_id);
1923 	  --Bug#5043002
1924           --R12C: BEGIN
1925           IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_LEVEL_ID THEN
1926             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':96', p_supplier_id);
1927           END IF;
1928 
1929           IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_SITE_LEVEL_ID THEN
1930             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':97', p_supplier_site_id);
1931           END IF;
1932 
1933           IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPSITEORG_LEVEL_ID THEN
1934             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':96', p_supplier_id);
1935             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':97', p_supplier_site_id);
1936           END IF;
1937           DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':98', rec_attr.DATA_LEVEL_ID);
1938           --R12C: END
1939 
1940           DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':99', rec_attr.ATTR_GROUP_INT_NAME);
1941 
1942           -- Execution of the Query (Cursor) for UD attrs for Items
1943           l_ignore := DBMS_SQL.EXECUTE(cr_ud_attr);
1944           Debug_Message('Executed SQL, fetching rows');
1945           WHILE DBMS_SQL.FETCH_ROWS(cr_ud_attr) > 0 LOOP
1946             l_cnt := l_start + 1;
1947             l_item_id := NULL;
1948             DBMS_SQL.COLUMN_VALUE(cr_ud_attr, 1, l_item_id);
1949             FOR i IN 2..l_idx LOOP
1950               l_str_value := NULL;
1951               l_num_value := NULL;
1952               l_date_value := NULL;
1953               IF G_META(i) = G_CHAR_FORMAT THEN
1954                 DBMS_SQL.COLUMN_VALUE(cr_ud_attr, i, l_str_value);
1955                 l_int_val := l_str_value;
1956               ELSIF G_META(i) = G_DATE_FORMAT THEN
1957                 DBMS_SQL.COLUMN_VALUE(cr_ud_attr, i, l_date_value);
1958                 l_int_val := TO_CHAR(l_date_value, 'MM/DD/YYYY HH24:MI:SS');
1959               ELSIF G_META(i) = G_NUMBER_FORMAT THEN
1960                 DBMS_SQL.COLUMN_VALUE(cr_ud_attr, i, l_num_value);
1961                 l_int_val := TO_CHAR(l_num_value);
1962               END IF; --IF G_META(i) = G_CHAR_FORMAT THEN
1963 
1964               -- if a value set is associated, then get the display value
1965               IF VSID(i) IS NOT NULL AND VSID(i) <> 0 THEN
1966                 IF G_META(i) = G_DATE_FORMAT THEN
1967                   l_int_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
1968                                 431, l_int_val, NULL, NULL, l_compare_tbl(l_cnt).ATTR_INT_NAME, 'EGO_ITEMMGMT_GROUP'
1969                                 ,l_compare_tbl(l_cnt).ATTR_GROUP_INT_NAME, l_compare_tbl(l_cnt).ATTRIBUTE_CODE
1970                                 ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
1971                                 ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
1972                 ELSIF G_META(i) = G_CHAR_FORMAT THEN
1973                   l_int_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
1974                                 431, NULL, l_int_val, NULL, l_compare_tbl(l_cnt).ATTR_INT_NAME, 'EGO_ITEMMGMT_GROUP'
1975                                 ,l_compare_tbl(l_cnt).ATTR_GROUP_INT_NAME, l_compare_tbl(l_cnt).ATTRIBUTE_CODE
1976                                 ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
1977                                 ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
1978                 ELSIF G_META(i) = G_NUMBER_FORMAT THEN
1979                   l_int_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
1980                                 431, NULL, NULL, l_int_val, l_compare_tbl(l_cnt).ATTR_INT_NAME, 'EGO_ITEMMGMT_GROUP'
1981                                 ,l_compare_tbl(l_cnt).ATTR_GROUP_INT_NAME, l_compare_tbl(l_cnt).ATTRIBUTE_CODE
1982                                 ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
1983                                 ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
1984                 END IF;
1985               END IF; --IF VSID(i) IS NOT NULL
1986 
1987               --if UOM class is attached to the attribute, THEN appending the base UOM to attribute value.
1988               IF UOM(i) IS NOT NULL THEN
1989                 l_temp_query := l_p_atr_sql('UOM_CLASS');
1990                 EXECUTE IMMEDIATE l_temp_query INTO l_temp USING UOM(i);
1991                 l_int_val := l_int_val || ' ' || l_temp;
1992               END IF; --IF UOM_DISP_VAL(i) IS NOT NULL THEN
1993 
1994               populate_compare_tbl(
1995                                   p_compare_table =>   l_compare_tbl
1996                                 ,p_index         =>   l_cnt
1997                                 ,p_sel_item      =>   l_item_id
1998                                 ,p_value         =>   l_int_val
1999                                 ,p_item1         =>   p_item1
2000                                 ,p_item2         =>   p_item2
2001                                 ,p_item3         =>   p_item3
2002                                 ,p_item4         =>   p_item4);
2003               l_cnt := l_cnt + 1;
2004             END LOOP; --FOR i IN 2..l_idx LOOP
2005           END LOOP; -- WHILE DBMS_SQL.FETCH_ROWS(cr_ud_attr) > 0 LOOP
2006           DBMS_SQL.close_cursor(cr_ud_attr);
2007           Debug_Message('Done Getting values from production table');
2008         END IF; -- IF DATA_LEVEL CHECK AGIANST p_supplier_id, p_supplier_site_id
2009       END LOOP; --FOR rec_attr IN cr_attr_groups_pdh(l_revision) LOOP
2010       Debug_Message('Done getting User Defined Attributes for Items ');
2011     ELSE --IF is_pdh_batch THEN
2012       ------------------------------------------------------------------------------------
2013       -- Following is the code for NON PDH type and total of the code in this else case --
2014       -- is similar to the one in above if claue                                        --
2015       ------------------------------------------------------------------------------------
2016       Debug_Message('Batch is NON-PDH batch ');
2017       FOR rec_attr IN cr_attr_groups(l_revision, p_bundle_id ) LOOP
2018         -- R12C: Show Item_Supplier attributes only if 'Supplier Id' is passed. (Supplier is selected)
2019         -- R12C: Show Item Supplier site attributes and item supplier site org attributes only if
2020         --            'Supplier Site Id' is passed.
2021         -- NOTE: SupplierSiteId do not exist without SupplierId.
2022         -- Added the following if condition for item intersection support in R12C.
2023         IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_LEVEL_ID AND p_supplier_id IS NOT NULL
2024            OR rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_SITE_LEVEL_ID AND p_supplier_site_id IS NOT NULL
2025            OR rec_attr.DATA_LEVEL_ID = G_ITEM_SUPSITEORG_LEVEL_ID AND p_supplier_site_id IS NOT NULL
2026            OR rec_attr.DATA_LEVEL_ID IN ( G_ITEM_LEVEL_ID, G_ORG_LEVEL_ID )
2027            OR rec_attr.DATA_LEVEL_INTERNAL_NAME IN ( G_ITEM_REVISION_LEVEL )
2028         THEN
2029           Debug_Message('Processing attribute group - '||rec_attr.ATTR_GROUP_INT_NAME);
2030           Debug_Message('With Data Level: ' || rec_attr.DATA_LEVEL_ID);
2031           -- if change policy may be present THEN get the Change policy for each attr grp
2032           IF (l_is_policy = 'Y') THEN
2033             Debug_Message('Getting change policy for attribute group - '||rec_attr.ATTR_GROUP_INT_NAME);
2034             ENG_CHANGE_POLICY_PKG.GetChangePolicy
2035                             (   p_policy_object_name     => 'CATALOG_LIFECYCLE_PHASE'
2036                             ,  p_policy_code            => 'CHANGE_POLICY'
2037                             ,  p_policy_pk1_value       =>  l_catalog_id
2038                             ,  p_policy_pk2_value       =>  l_lifecycle_id
2039                             ,  p_policy_pk3_value       =>  l_phase_id
2040                             ,  p_policy_pk4_value       =>  NULL
2041                             ,  p_policy_pk5_value       =>  NULL
2042                             ,  p_attribute_object_name  => 'EGO_CATALOG_GROUP'
2043                             ,  p_attribute_code         => 'ATTRIBUTE_GROUP'
2044                             ,  p_attribute_value        =>  rec_attr.ATTR_GROUP_ID
2045                             ,  x_policy_value           =>  l_ch_policy
2046                             );
2047             Debug_Message('Change Policy for attribute group : '||rec_attr.ATTR_GROUP_INT_NAME || ' is : ' || l_ch_policy );
2048             IF INSTR(l_ch_policy,'NOT') > 0 THEN
2049               l_ch_policy_tbl(rec_attr.ATTR_GROUP_INT_NAME) :=  'N';
2050             ELSIF INSTR(l_ch_policy,'ALLOWED') > 0 THEN
2051               l_ch_policy_tbl(rec_attr.ATTR_GROUP_INT_NAME) :=  'Y';
2052             ELSIF INSTR(l_ch_policy,'CHANGE') > 0 THEN
2053               l_ch_policy_tbl(rec_attr.ATTR_GROUP_INT_NAME) :=  'C';
2054             END IF; --IF INSTR(l_ch_policy,'NOT') > 0 THEN
2055           END IF; --IF (l_is_policy = 'Y') THEN
2056 
2057           l_sel_clause := NULL;
2058           l_sql_query := NULL;
2059           l_temp_query := NULL;
2060           l_idx := 1;
2061           l_start := NVL(l_compare_tbl.LAST,0);
2062           cr_ud_attr := dbms_sql.open_cursor;
2063           l_sql_query :=' FROM EGO_MTL_SY_ITEMS_EXT_VL I, EGO_ATTR_GROUPS_DL_V AG '||
2064                         ' WHERE AG.APPLICATION_ID = 431  '||
2065                         '   AND NVL(AG.ATTR_GROUP_TYPE, ''EGO_ITEMMGMT_GROUP'') = ''EGO_ITEMMGMT_GROUP'' '||
2066                         '   AND AG.ATTR_GROUP_ID = I.ATTR_GROUP_ID'||
2067                         '   AND I.DATA_LEVEL_ID = :98' ||   -- Added for R12C: Data_level_id
2068                         '   AND AG.ATTR_GROUP_NAME = :99' ; --Bug#5043002'' || rec_attr.ATTR_GROUP_INT_NAME ||'''';
2069           -- Since Each AG is handled at each time. Find once privileges over all items.
2070 
2071           -- R12C: BEGIN
2072           IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_LEVEL_ID THEN
2073             l_sql_query := l_sql_query || '   AND I.PK1_VALUE = :96';
2074           END IF;
2075 
2076            IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_SITE_LEVEL_ID THEN
2077             l_sql_query := l_sql_query || '   AND I.PK2_VALUE = :97';
2078           END IF;
2079 
2080           IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPSITEORG_LEVEL_ID THEN
2081             l_sql_query := l_sql_query || '   AND I.PK1_VALUE = :96 AND I.PK2_VALUE = :97';
2082           END IF;
2083           -- R12C: END
2084 
2085           --R12C: Finding attr Group display name with prefix to identify
2086           -- the Attribute group data level.
2087           IF rec_attr.DATA_LEVEL_ID = G_ITEM_LEVEL_ID THEN
2088             l_attr_group_display_name := l_item_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
2089           ELSIF rec_attr.DATA_LEVEL_INTERNAL_NAME = G_ITEM_REVISION_LEVEL THEN
2090             l_attr_group_display_name := l_itemRev_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
2091           ELSIF rec_attr.DATA_LEVEL_ID = G_ORG_LEVEL_ID THEN
2092            l_attr_group_display_name := l_itemOrg_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
2093           ELSIF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_LEVEL_ID THEN
2094             l_attr_group_display_name := l_itemSup_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
2095           ELSIF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_SITE_LEVEL_ID THEN
2096             l_attr_group_display_name := l_itemSupSite_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
2097           ELSIF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPSITEORG_LEVEL_ID THEN
2098             l_attr_group_display_name := l_itemSupSiteOrg_lable || ':' || rec_attr.ATTR_GROUP_DISP_NAME;
2099           END IF;
2100 
2101           Debug_Message('Finding and Populating privilege');
2102           l_priv_name := get_privilege_name(rec_attr.VIEW_PRIVILEGE_ID);
2103           IF(l_priv_name IS NULL) THEN
2104             l_priv_item1 := 'T';
2105             l_priv_item2 := 'T';
2106             l_priv_item3 := 'T';
2107             l_priv_item4 := 'T';
2108           ELSE
2109             l_priv_item1 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item1,
2110                             p_org_Id, NULL, NULL, NULL, l_party_id);
2111             l_priv_item2 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item2,
2112                             p_org_Id, NULL, NULL, NULL, l_party_id);
2113             l_priv_item3 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item3,
2114                             p_org_Id, NULL, NULL, NULL, l_party_id);
2115             l_priv_item4 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item4,
2116                             p_org_Id, NULL, NULL, NULL, l_party_id);
2117           END IF;
2118           Debug_Message('Done finding and Populating privilege');
2119           --Deleting all the values of temporary table that might have values for last loop.
2120           l_inv_rev_id_tbl.DELETE ;
2121           -- If is no revision level records for this attribute group
2122           IF rec_attr.REVISION IS NULL THEN
2123             -- For Each attribute Group selected. Get all the attributes in it and
2124             -- Populate the l_compare_table for these attributes
2125             -- The cusor cr_usr_intf_pdh returns
2126             -- Also Perparing Query clause <l_sel_clause> to query for same attributes over other Items.
2127 
2128             Debug_Message('Revision is NULL');
2129             Debug_Message('Populating all the attribute values for this attribute group for source system');
2130             FOR rec_ud_attrs IN cr_usr_intf( rec_attr.ATTR_GROUP_INT_NAME, rec_attr.DATA_LEVEL_ID, p_bundle_id ) LOOP
2131               Debug_Message('Processing the attribute: '||rec_ud_attrs.ATTR_INT_NAME);
2132               l_idx := l_idx + 1;
2133               l_compare_tbl.extend();
2134               l_compare_rec.ATTR_GROUP_DISP_NAME :=  l_attr_group_display_name;
2135               l_compare_rec.ATTR_DISP_NAME       :=  rec_ud_attrs.ATTR_DISPLAY_NAME;
2136               l_compare_rec.ATTRIBUTE_CODE       :=  rec_ud_attrs.ATTR_ID;
2137               l_compare_rec.ATTR_INT_NAME        :=  rec_ud_attrs.ATTR_INT_NAME ;
2138               l_compare_rec.ATTR_GROUP_INT_NAME  :=  rec_ud_attrs.ATTR_GROUP_INT_NAME;
2139 
2140               -- Setting properly the privilege in compare table. privileges are calculated
2141 	            -- for each AG earlier
2142 	            l_compare_rec.PRIV_ITEM1 := l_priv_item1;
2143 	            l_compare_rec.PRIV_ITEM2 := l_priv_item2;
2144               l_compare_rec.PRIV_ITEM3 := l_priv_item3;
2145 	            l_compare_rec.PRIV_ITEM4 := l_priv_item4;
2146 
2147               -- Saving UOM Class and value set Associated with this attribute
2148 	            UOM(l_idx) := rec_ud_attrs.UOM_CLASS;
2149               UOM_USER_CODE(l_idx) := rec_ud_attrs.ATTR_VALUE_UOM;
2150               UOM_DISP_VAL(l_idx) := rec_ud_attrs.ATTR_UOM_DISP_VALUE;
2151               IF rec_ud_attrs.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_NONE_VALIDATION_CODE THEN
2152                 VSId(l_idx) := 0;
2153               ELSE
2154                 VSId(l_idx) := rec_ud_attrs.VALUE_SET_ID;
2155               END IF;
2156 
2157               -- getting and setting source system value
2158               -- If Value set is not associated
2159               IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
2160                 Debug_Message('Value set is NOT attached');
2161 		            IF rec_ud_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
2162                   G_META(l_idx) := G_CHAR_FORMAT;
2163                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_DISP_VALUE;
2164                 ELSIF rec_ud_attrs.DATABASE_COLUMN LIKE 'C%' OR rec_ud_attrs.DATABASE_COLUMN LIKE 'T%' THEN
2165                   G_META(l_idx) := G_CHAR_FORMAT;
2166                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_STR;
2167                 ELSIF rec_ud_attrs.DATABASE_COLUMN  LIKE 'D%' THEN
2168                   G_META(l_idx) := G_DATE_FORMAT;
2169                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_DATE;
2170                 ELSIF rec_ud_attrs.DATABASE_COLUMN  LIKE 'N%' THEN
2171                   G_META(l_idx) := G_NUMBER_FORMAT;
2172                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_NUM;
2173                 END IF; --IF rec_ud_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
2174 
2175                 -- Adding column to sql string to get production values
2176 		            l_sel_clause := l_sel_clause || ' , ' || rec_ud_attrs.DATABASE_COLUMN;
2177               ELSE --IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
2178                 Debug_Message('Value set is attached');
2179                 -- If Value set is Associated
2180                 l_sel_clause := l_sel_clause || ' , '|| rec_ud_attrs.DATABASE_COLUMN;
2181                 G_META(l_idx) := SUBSTR(rec_ud_attrs.DATABASE_COLUMN, 1, 1);
2182                 IF rec_ud_attrs.ATTR_DISP_VALUE IS NULL THEN
2183                   l_compare_rec.SOURCE_SYS_VAL := Get_SS_Data_For_Val_set
2184                                                         ( p_value_set_id    =>  rec_ud_attrs.VALUE_SET_ID
2185                                                         ,p_validation_code =>  rec_ud_attrs.VALIDATION_CODE
2186                                                         ,p_str_val         =>  rec_ud_attrs.ATTR_VALUE_STR
2187                                                         ,p_date_val        =>  rec_ud_attrs.ATTR_VALUE_DATE
2188                                                         ,p_num_val         =>  rec_ud_attrs.ATTR_VALUE_NUM );
2189                 ELSE
2190                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_DISP_VALUE;
2191                 END IF; --IF rec_ud_attrs.ATTR_DISP_VALUE IS NULL THEN
2192                 Debug_Message('Display value is: '||l_compare_rec.SOURCE_SYS_VAL);
2193 	            END IF; --IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
2194 
2195 
2196               -- if UOM class is attached to the attribute, THEN appending the base UOM to attribute value.
2197               IF rec_ud_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
2198                 Debug_Message('UOM Display Value is attached');
2199                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || rec_ud_attrs.ATTR_UOM_DISP_VALUE;
2200                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2201               ELSIF rec_ud_attrs.ATTR_VALUE_UOM IS NOT NULL THEN
2202                 Debug_Message('UOM code is attached is attached');
2203                 l_temp_query := l_p_atr_sql('UOM_CODE');
2204                 EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_ud_attrs.ATTR_VALUE_UOM;
2205                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
2206                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2207               ELSIF rec_ud_attrs.UOM_CLASS IS NOT NULL THEN
2208                 Debug_Message('UOM Class is attached');
2209                 l_temp_query := l_p_atr_sql('UOM_CLASS');
2210                 EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_ud_attrs.UOM_CLASS;
2211                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
2212                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2213               END IF; --IF rec_ud_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
2214 
2215 
2216               IF l_is_policy = 'Y'  THEN
2217                 l_compare_rec.CHANGE_POLICY := l_ch_policy_tbl(rec_ud_attrs.ATTR_GROUP_INT_NAME);
2218               END IF; --IF l_is_policy = 'Y'  THEN
2219 
2220               l_compare_tbl(l_compare_tbl.LAST) := l_compare_rec;
2221               Debug_Message('Done processing the attribute: '||rec_ud_attrs.ATTR_INT_NAME);
2222             END LOOP; --FOR rec_ud_attrs IN cr_usr_intf(rec_attr.ATTR_GROUP_INT_NAME) LOOP
2223 
2224             Debug_Message('With out Revision - End inserting Attr for Source System for Attr Grp : '||rec_attr.ATTR_GROUP_INT_NAME);
2225             l_sql_query := 'SELECT INVENTORY_ITEM_ID ' || l_sel_clause || l_sql_query ||
2226                           '   AND I.INVENTORY_ITEM_ID in (:1,:2,:3,:4)'||
2227                           '  AND I.ORGANIZATION_ID = :5'   ;
2228 
2229           ELSE --IF rec_attr.REVISION IS NULL THEN
2230             -- If there are attributes with Revisions ... Get Attributes in for given Attribute Group.
2231             Debug_Message('Revision is NOT NULL, revision is: '||rec_attr.REVISION);
2232             Debug_Message('Populating all the attribute values for this attribute group for source system');
2233             FOR  rec_ud_attrs IN cr_rev_usr_intf( rec_attr.ATTR_GROUP_INT_NAME, l_revision, p_bundle_id ) LOOP
2234               Debug_Message('Processing the attribute: '||rec_ud_attrs.ATTR_INT_NAME);
2235               l_idx := l_idx + 1;
2236               l_compare_tbl.extend();
2237               l_compare_rec.ATTR_GROUP_DISP_NAME := l_attr_group_display_name;
2238               l_compare_rec.ATTR_DISP_NAME       := rec_ud_attrs.ATTR_DISPLAY_NAME;
2239               l_compare_rec.ATTRIBUTE_CODE       :=  rec_ud_attrs.ATTR_ID;
2240               l_compare_rec.ATTR_INT_NAME        :=  rec_ud_attrs.ATTR_INT_NAME ;
2241               l_compare_rec.ATTR_GROUP_INT_NAME  :=  rec_ud_attrs.ATTR_GROUP_INT_NAME;
2242 
2243 	            -- setting properly the privilege in compare table. privileges are calculated
2244 	            -- for each AG earlier
2245 	            l_compare_rec.PRIV_ITEM1 := l_priv_item1;
2246     	        l_compare_rec.PRIV_ITEM2 := l_priv_item2;
2247               l_compare_rec.PRIV_ITEM3 := l_priv_item3;
2248 	            l_compare_rec.PRIV_ITEM4 := l_priv_item4;
2249 	            -- Nisar End
2250 
2251               -- Saving UOM Class and value set Associated with this attribute
2252               IF rec_ud_attrs.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_NONE_VALIDATION_CODE THEN
2253                 VSId(l_idx) := 0;
2254               ELSE
2255                 VSId(l_idx) := rec_ud_attrs.VALUE_SET_ID;
2256               END IF;
2257 	            UOM(l_idx) := rec_ud_attrs.UOM_CLASS;
2258               UOM_USER_CODE(l_idx) := rec_ud_attrs.ATTR_VALUE_UOM;
2259               UOM_DISP_VAL(l_idx) := rec_ud_attrs.ATTR_UOM_DISP_VALUE;
2260 
2261               -- getting and setting source system value
2262               -- If Value set is not associated
2263               IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
2264                 Debug_Message('Value set is NOT attached');
2265                 IF rec_ud_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
2266                   G_META(l_idx) := G_CHAR_FORMAT;
2267                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_DISP_VALUE;
2268                 ELSIF rec_ud_attrs.DATABASE_COLUMN LIKE 'C%' OR rec_ud_attrs.DATABASE_COLUMN LIKE 'T%' THEN
2269                   G_META(l_idx) := G_CHAR_FORMAT;
2270                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_STR;
2271                 ELSIF rec_ud_attrs.DATABASE_COLUMN  LIKE 'D%' THEN
2272                   G_META(l_idx) := G_DATE_FORMAT;
2273                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_DATE;
2274                 ELSIF rec_ud_attrs.DATABASE_COLUMN  LIKE 'N%' THEN
2275                   G_META(l_idx) := G_NUMBER_FORMAT;
2276                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_VALUE_NUM;
2277                 END IF; --IF rec_ud_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
2278 
2279                 l_sel_clause := l_sel_clause || ' , ' || rec_ud_attrs.DATABASE_COLUMN;
2280               ELSE --IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
2281                 Debug_Message('Value set is attached');
2282                 l_sel_clause := l_sel_clause || ' , '||  rec_ud_attrs.DATABASE_COLUMN;
2283                 G_META(l_idx) := SUBSTR(rec_ud_attrs.DATABASE_COLUMN, 1, 1);
2284                 IF rec_ud_attrs.ATTR_DISP_VALUE IS NULL THEN
2285                   l_compare_rec.SOURCE_SYS_VAL := Get_SS_Data_For_Val_set
2286                                                         ( p_value_set_id    =>  rec_ud_attrs.VALUE_SET_ID
2287                                                         ,p_validation_code =>  rec_ud_attrs.VALIDATION_CODE
2288                                                         ,p_str_val         =>  rec_ud_attrs.ATTR_VALUE_STR
2289                                                         ,p_date_val        =>  rec_ud_attrs.ATTR_VALUE_DATE
2290                                                         ,p_num_val         =>  rec_ud_attrs.ATTR_VALUE_NUM );
2291                 ELSE
2292                   l_compare_rec.SOURCE_SYS_VAL := rec_ud_attrs.ATTR_DISP_VALUE;
2293                 END IF; --IF rec_ud_attrs.ATTR_DISP_VALUE IS NULL THEN
2294                 Debug_Message('Display value is: '||l_compare_rec.SOURCE_SYS_VAL);
2295               END IF; --IF rec_ud_attrs.VALUE_SET_ID IS NULL OR rec_ud_attrs.VALUE_SET_ID = 0 THEN
2296 
2297               -- if UOM class is attached to the attribute, THEN appending the base UOM to attribute value.
2298               IF rec_ud_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
2299                 Debug_Message('UOM Display Value is attached');
2300                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || rec_ud_attrs.ATTR_UOM_DISP_VALUE;
2301                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2302               ELSIF rec_ud_attrs.ATTR_VALUE_UOM IS NOT NULL THEN
2303                 Debug_Message('UOM code is attached is attached');
2304                 l_temp_query := l_p_atr_sql('UOM_CODE');
2305                 EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_ud_attrs.ATTR_VALUE_UOM;
2306                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
2307                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2308               ELSIF rec_ud_attrs.UOM_CLASS IS NOT NULL THEN
2309                 Debug_Message('UOM Class is attached');
2310                 l_temp_query := l_p_atr_sql('UOM_CLASS');
2311                 EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_ud_attrs.UOM_CLASS;
2312                 l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
2313                 Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2314               END IF; --IF rec_ud_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
2315 
2316               IF l_is_policy = 'Y'  THEN
2317                 l_compare_rec.CHANGE_POLICY := l_ch_policy_tbl(rec_ud_attrs.ATTR_GROUP_INT_NAME);
2318               END IF; --IF l_is_policy = 'Y'  THEN
2319 
2320               l_compare_tbl(l_compare_tbl.LAST) := l_compare_rec;
2321             END LOOP; --FOR  rec_ud_attrs IN cr_rev_usr_intf(rec_attr.ATTR_GROUP_INT_NAME, l_revision) LOOP
2322 
2323             -- preparing query to get user defined attribute values from production table
2324             l_sql_query := 'SELECT INVENTORY_ITEM_ID ' || l_sel_clause || l_sql_query;
2325             l_temp_query := NULL;
2326             -- Bug#5043002
2327 					  k := 50 ;
2328             FOR match_rec IN cr_match_item_rev LOOP
2329               l_temp_query  := l_temp_query  || ' (I.INVENTORY_ITEM_ID = :'||k ; -- Bug#5043002|| match_rec.INVENTORY_ITEM_ID;
2330 						  l_inv_rev_id_tbl(k) := match_rec.INVENTORY_ITEM_ID ; -- Bug#5043002
2331               IF match_rec.REVISION_ID IS NOT NULL THEN
2332 						    k:=k+1 ;
2333                 l_temp_query  := l_temp_query || ' AND  I.REVISION_id =  :'||k ; -- Bug#5043002|| match_rec.REVISION_ID;
2334   						  l_inv_rev_id_tbl(k) := match_rec.REVISION_ID ; -- Bug#5043002
2335               END IF;
2336               l_temp_query  := l_temp_query  || ' ) ';
2337               l_temp_query  := l_temp_query || ' OR ';
2338 						  k:= k+1 ;
2339               EXIT WHEN cr_match_item_rev%ROWCOUNT = 4;
2340             END LOOP; --FOR match_rec IN cr_match_item_rev LOOP
2341 	    -- bug#5043002
2342 
2343             IF l_temp_query IS NOT NULL THEN
2344               -- The last 'OR' has to be deleted from the l_temp_query for the query to be valid
2345               -- the following code does that
2346               l_temp_query := substr(l_temp_query,1,length(l_temp_query)-3);
2347               l_temp_query := ' AND  ('|| l_temp_query  ||' ) ' ;
2348             END IF; --IF l_temp_query IS NOT NULL THEN
2349             l_sql_query := l_sql_query || l_temp_query  || 'AND I.ORGANIZATION_ID = :1' ;
2350           END IF; --IF rec_attr.REVISION IS NULL THEN
2351 
2352           Debug_Message('Done populating attribute values for this attribute group for source system');
2353           Debug_Message('Getting values from production table');
2354 
2355           Debug_Message('SQL is - ');
2356           FOR l in 1..(CEIL(LENGTH(l_sql_query)/1000)) LOOP
2357             Debug_Message(SUBSTR(l_sql_query, ((l-1)*1000) + 1, 1000));
2358           END LOOP; --FOR l in 1..(CEIL(LENGTH(l_sql_query)/1000)) LOOP
2359 
2360           Debug_Message('Entering User Defined Attributes for Items ');
2361           -- Define Dynamic SQL for querying for other Items.
2362           Debug_Message('Parsing SQL');
2363           DBMS_SQL.PARSE(cr_ud_attr, l_sql_query, DBMS_SQL.native);
2364           Debug_Message('Done parsing SQL');
2365 
2366           Debug_Message('Defining columns for SQL');
2367           DBMS_SQL.DEFINE_COLUMN(cr_ud_attr, 1 , l_num_value); --inventory_item_id
2368           Debug_Message('Total columns: '||TO_CHAR(l_idx + 1));
2369           FOR i IN 2..l_idx LOOP
2370             IF G_META(i) = G_CHAR_FORMAT THEN
2371               DBMS_SQL.DEFINE_COLUMN(cr_ud_attr, i, l_str_value, 4000);
2372             ELSIF G_META(i) = G_NUMBER_FORMAT THEN
2373               DBMS_SQL.DEFINE_COLUMN(cr_ud_attr, i, l_num_value);
2374             ELSIF G_META(i) = G_DATE_FORMAT THEN
2375               DBMS_SQL.DEFINE_COLUMN(cr_ud_attr, i, l_date_value);
2376             END IF; --IF G_META(i) = G_CHAR_FORMAT THEN
2377           END LOOP; --FOR i IN 2..l_idx LOOP
2378 
2379           Debug_Message('Binding variables');
2380           IF rec_attr.REVISION IS NULL THEN
2381             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':1', p_item1);
2382             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':2', p_item2);
2383             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':3', p_item3);
2384             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':4', p_item4);
2385             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':5', p_org_id);
2386           ELSE
2387             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':1', p_org_id);
2388           END IF; --IF rec_attr.REVISION IS NULL THEN
2389 
2390           --R12C: BEGIN
2391           IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_LEVEL_ID THEN
2392             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':96', p_supplier_id);
2393           END IF;
2394 
2395           IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPPLIER_SITE_LEVEL_ID THEN
2396             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':97', p_supplier_site_id);
2397           END IF;
2398 
2399           IF rec_attr.DATA_LEVEL_ID = G_ITEM_SUPSITEORG_LEVEL_ID THEN
2400             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':96', p_supplier_id);
2401             DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':97', p_supplier_site_id);
2402           END IF;
2403      	    DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':98', rec_attr.DATA_LEVEL_ID);
2404           --R12C: END
2405 
2406           --Bug#5043002
2407      	    DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':99', rec_attr.ATTR_GROUP_INT_NAME);
2408 
2409           -- Bug#5043002
2410           IF nvl(l_inv_rev_id_tbl.LAST,0)>0 THEN
2411             FOR j in l_inv_rev_id_tbl.FIRST..l_inv_rev_id_tbl.LAST LOOP
2412                     DBMS_SQL.BIND_VARIABLE(cr_ud_attr, ':'||j, l_inv_rev_id_tbl(j));
2413             END LOOP ;
2414           END IF ;
2415           -- Bug#5043002
2416           Debug_Message('Done binding variables');
2417 
2418           l_ignore := DBMS_SQL.EXECUTE(cr_ud_attr);
2419           Debug_Message('Executed SQL, fetching rows');
2420           WHILE DBMS_SQL.FETCH_ROWS(cr_ud_attr) > 0 LOOP
2421             l_cnt := l_start + 1 ;
2422             l_item_id := NULL;
2423             DBMS_SQL.COLUMN_VALUE(cr_ud_attr, 1, l_item_id);
2424             FOR i IN 2..l_idx LOOP
2425               l_str_value := NULL;
2426               l_num_value := NULL;
2427               l_date_value := NULL;
2428               IF G_META(i) = G_CHAR_FORMAT THEN
2429                 DBMS_SQL.COLUMN_VALUE(cr_ud_attr, i, l_str_value);
2430                 l_int_val := l_str_value;
2431               ELSIF G_META(i) = G_DATE_FORMAT THEN
2432                 DBMS_SQL.COLUMN_VALUE(cr_ud_attr, i, l_date_value);
2433                 l_int_val := TO_CHAR(l_date_value, 'MM/DD/YYYY HH24:MI:SS');
2434               ELSIF G_META(i) = G_NUMBER_FORMAT THEN
2435                 DBMS_SQL.COLUMN_VALUE(cr_ud_attr, i, l_num_value);
2436                 l_int_val := TO_CHAR(l_num_value);
2437               END IF; --IF G_META(i) = G_CHAR_FORMAT THEN
2438 
2439               -- if a value set is associated, then get the display value
2440               IF VSID(i) IS NOT NULL AND VSID(i) <> 0 THEN
2441                 IF G_META(i) = G_DATE_FORMAT THEN
2442                   l_int_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
2443                                 431, l_int_val, NULL, NULL, l_compare_tbl(l_cnt).ATTR_INT_NAME, 'EGO_ITEMMGMT_GROUP'
2444                                 ,l_compare_tbl(l_cnt).ATTR_GROUP_INT_NAME, l_compare_tbl(l_cnt).ATTRIBUTE_CODE
2445                                 ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
2446                                 ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
2447                 ELSIF G_META(i) = G_CHAR_FORMAT THEN
2448                   l_int_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
2449                                 431, NULL, l_int_val, NULL, l_compare_tbl(l_cnt).ATTR_INT_NAME, 'EGO_ITEMMGMT_GROUP'
2450                                 ,l_compare_tbl(l_cnt).ATTR_GROUP_INT_NAME, l_compare_tbl(l_cnt).ATTRIBUTE_CODE
2451                                 ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
2452                                 ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
2453                 ELSIF G_META(i) = G_NUMBER_FORMAT THEN
2454                   l_int_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
2455                                 431, NULL, NULL, l_int_val, l_compare_tbl(l_cnt).ATTR_INT_NAME, 'EGO_ITEMMGMT_GROUP'
2456                                 ,l_compare_tbl(l_cnt).ATTR_GROUP_INT_NAME, l_compare_tbl(l_cnt).ATTRIBUTE_CODE
2457                                 ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
2458                                 ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
2459                 END IF; --IF G_META(i) = G_DATE_FORMAT THEN
2460               END IF; --IF VSID(i) IS NOT NULL AND VSID(i) <> 0 THEN
2461 
2462               --if UOM class is attached to the attribute, THEN appending the base UOM to attribute value.
2463               IF UOM(i) IS NOT NULL THEN
2464                 l_temp_query := l_p_atr_sql('UOM_CLASS');
2465                 EXECUTE IMMEDIATE l_temp_query INTO l_temp USING UOM(i);
2466                 l_int_val := l_int_val || ' ' || l_temp;
2467               END IF; --IF UOM_DISP_VAL(i) IS NOT NULL THEN
2468 
2469               populate_compare_tbl( p_compare_table =>   l_compare_tbl
2470                                   ,p_index         =>   l_cnt
2471                                   ,p_sel_item      =>   l_item_id
2472                                   ,p_value         =>   l_int_val
2473                                   ,p_item1         =>   p_item1
2474                                   ,p_item2         =>   p_item2
2475                                   ,p_item3         =>   p_item3
2476                                   ,p_item4         =>   p_item4);
2477               l_cnt := l_cnt + 1;
2478             END LOOP; --FOR i IN 2..l_idx LOOP
2479           END LOOP; --WHILE DBMS_SQL.FETCH_ROWS(cr_ud_attr) > 0 LOOP
2480 
2481           DBMS_SQL.CLOSE_CURSOR(cr_ud_attr);
2482           Debug_Message('Done Getting values from production table');
2483         END IF; -- IF DATA_LEVEL check against p_supplier_site_id and p_supplier_id
2484       END LOOP; --FOR rec_attr IN cr_attr_groups(l_revision) LOOP
2485       Debug_Message('Done getting User Defined Attributes for Items ');
2486     END IF; --IF is_pdh_batch THEN
2487     Debug_Message('Done processing User Defined attributes.');
2488 
2489     Debug_Message('Processing GDSN attributes.');
2490     -- processing GTIN attributes - single row only
2491     l_sel_clause := NULL;
2492     l_val_set_clause := NULL;
2493     l_sql_query := NULL;
2494     l_idx := 1;
2495     l_start := NVL(l_compare_tbl.LAST, 0);
2496 
2497     IF is_pdh_batch THEN
2498       Debug_Message('Batch is PDH batch ');
2499       -- Getting GTIN Attributes and inserting into l_compare_table
2500       -- Also preparing query for GTIN attribute values for production Items
2501       Debug_Message('Getting GTIN attributes for Source System');
2502       FOR rec_dd_attrs IN cr_dd_intf_pdh LOOP
2503         Debug_Message('Processing attribute - '||rec_dd_attrs.ATTR_INT_NAME);
2504         l_idx := l_idx + 1;
2505         l_compare_tbl.extend();
2506         l_compare_rec.ATTR_GROUP_DISP_NAME := rec_dd_attrs.ATTR_GROUP_DISP_NAME;
2507         l_compare_rec.ATTR_DISP_NAME := rec_dd_attrs.ATTR_DISPLAY_NAME;
2508         l_compare_rec.ATTRIBUTE_CODE := rec_dd_attrs.ATTR_ID;
2509         l_compare_rec.ATTR_INT_NAME := rec_dd_attrs.ATTR_INT_NAME;
2510         l_compare_rec.ATTR_GROUP_INT_NAME := rec_dd_attrs.ATTR_GROUP_INT_NAME;
2511 
2512         -- getting and setting the privilege in compare table
2513         l_attGrp_new := rec_dd_attrs.ATTR_GROUP_DISP_NAME;
2514 	      l_priv_name := get_privilege_name(rec_dd_attrs.VIEW_PRIVILEGE_ID);
2515 
2516         IF (l_priv_name IS NULL) THEN
2517 	        l_priv_item1 := 'T';
2518           l_priv_item2 := 'T';
2519           l_priv_item3 := 'T';
2520           l_priv_item4 := 'T';
2521         ELSIF(l_attGrp_old <> l_attGrp_new) THEN
2522           l_priv_item1 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item1,
2523                     p_org_Id, NULL, NULL, NULL, l_party_id);
2524           l_priv_item2 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item2,
2525                     p_org_Id, NULL, NULL, NULL, l_party_id);
2526           l_priv_item3 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item3,
2527                     p_org_Id, NULL, NULL, NULL, l_party_id);
2528           l_priv_item4 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item4,
2529                     p_org_Id, NULL, NULL, NULL, l_party_id);
2530         END IF; --IF (l_priv_name IS NULL) THEN
2531 
2532         -- Finding the Change Policy for an Attribute Group
2533         -- The condition (l_attGrp_old <> l_attGrp_new) is to calculate Change Policy only once for
2534         -- each Attribute Group.
2535         IF l_attGrp_old <> l_attGrp_new AND l_is_policy = 'Y' THEN
2536           ENG_CHANGE_POLICY_PKG.GetChangePolicy
2537                 (   p_policy_object_name     => 'CATALOG_LIFECYCLE_PHASE'
2538                  ,  p_policy_code            => 'CHANGE_POLICY'
2539                  ,  p_policy_pk1_value       =>  l_catalog_id
2540                  ,  p_policy_pk2_value       =>  l_lifecycle_id
2541                  ,  p_policy_pk3_value       =>  l_phase_id
2542                  ,  p_policy_pk4_value       =>  NULL
2543                  ,  p_policy_pk5_value       =>  NULL
2544                  ,  p_attribute_object_name  => 'EGO_CATALOG_GROUP'
2545                  ,  p_attribute_code         => 'ATTRIBUTE_GROUP'
2546                  ,  p_attribute_value        =>  rec_dd_attrs.ATTR_GROUP_ID
2547                  ,  x_policy_value           =>  l_ch_policy
2548                  );
2549 
2550           Debug_Message('Change Policy for attribute group : '||rec_dd_attrs.ATTR_GROUP_INT_NAME || ' is : ' || l_ch_policy );
2551           IF INSTR(l_ch_policy,'NOT') > 0 THEN
2552             l_ch_policy_tbl(rec_dd_attrs.ATTR_GROUP_INT_NAME) :=  'N';
2553           ELSIF INSTR(l_ch_policy,'ALLOWED') > 0 THEN
2554             l_ch_policy_tbl(rec_dd_attrs.ATTR_GROUP_INT_NAME) :=  'Y';
2555           ELSIF INSTR(l_ch_policy,'CHANGE') > 0 THEN
2556             l_ch_policy_tbl(rec_dd_attrs.ATTR_GROUP_INT_NAME) :=  'C';
2557           END IF; --IF INSTR(l_ch_policy,'NOT') > 0 THEN
2558         END IF; --IF (l_attGrp_old <> l_attGrp_new) THEN
2559         l_attGrp_old := l_attGrp_new;
2560 
2561      	  l_compare_rec.PRIV_ITEM1 := l_priv_item1;
2562 	      l_compare_rec.PRIV_ITEM2 := l_priv_item2;
2563         l_compare_rec.PRIV_ITEM3 := l_priv_item3;
2564         l_compare_rec.PRIV_ITEM4 := l_priv_item4;
2565 
2566         -- Saving UOM Class and value set Associated with this attribute
2567         UOM(l_idx) := rec_dd_attrs.UOM_CLASS;
2568         UOM_USER_CODE(l_idx) := rec_dd_attrs.ATTR_VALUE_UOM;
2569         UOM_DISP_VAL(l_idx) := rec_dd_attrs.ATTR_UOM_DISP_VALUE;
2570         IF rec_dd_attrs.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_NONE_VALIDATION_CODE THEN
2571           VSId(l_idx) := 0;
2572         ELSE
2573           VSId(l_idx) := rec_dd_attrs.VALUE_SET_ID;
2574         END IF;
2575 
2576         -- getting and setting source system value
2577         -- If Value set is not associated
2578         IF rec_dd_attrs.VALUE_SET_ID = 0 OR rec_dd_attrs.VALUE_SET_ID IS NULL THEN
2579           Debug_Message('Value set is NOT attached');
2580           IF rec_dd_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
2581             G_META(l_idx) := G_CHAR_FORMAT;
2582             l_compare_rec.SOURCE_SYS_VAL := rec_dd_attrs.ATTR_DISP_VALUE;
2583           ELSIF rec_dd_attrs.DATA_TYPE_CODE IN (G_CHAR_FORMAT , 'A') THEN
2584             G_META(l_idx) := G_CHAR_FORMAT;
2585             l_compare_rec.SOURCE_SYS_VAL := rec_dd_attrs.ATTR_VALUE_STR;
2586           ELSIF rec_dd_attrs.DATA_TYPE_CODE IN (G_TIME_FORMAT,G_DATE_TIME_FORMAT) THEN
2587             G_META(l_idx) := G_DATE_FORMAT;
2588             l_compare_rec.SOURCE_SYS_VAL := TO_CHAR(rec_dd_attrs.ATTR_VALUE_DATE, 'MM/DD/YYYY HH24:MI:SS');
2589           ELSIF rec_dd_attrs.DATA_TYPE_CODE = G_NUMBER_FORMAT THEN
2590             G_META(l_idx) := G_NUMBER_FORMAT;
2591             l_compare_rec.SOURCE_SYS_VAL := TO_CHAR(rec_dd_attrs.ATTR_VALUE_NUM);
2592           END IF; --IF rec_dd_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
2593 
2594           -- Adding column to sql string to get production values
2595           l_sel_clause  := l_sel_clause || ' , '|| rec_dd_attrs.DATABASE_COLUMN;
2596         ELSE --IF rec_dd_attrs.VALUE_SET_ID = 0 OR rec_dd_attrs.VALUE_SET_ID IS NULL THEN
2597           Debug_Message('Value set is attached');
2598           l_sel_clause  := l_sel_clause || ' , '|| rec_dd_attrs.DATABASE_COLUMN;
2599           G_META(l_idx) := rec_dd_attrs.DATA_TYPE_CODE;       --G_CHAR_FORMAT;
2600           IF rec_dd_attrs.ATTR_DISP_VALUE IS NULL THEN
2601             l_compare_rec.SOURCE_SYS_VAL := Get_SS_Data_For_Val_set
2602                                                   ( p_value_set_id    =>  rec_dd_attrs.VALUE_SET_ID
2603                                                    ,p_validation_code =>  rec_dd_attrs.VALIDATION_CODE
2604                                                    ,p_str_val         =>  rec_dd_attrs.ATTR_VALUE_STR
2605                                                    ,p_date_val        =>  rec_dd_attrs.ATTR_VALUE_DATE
2606                                                    ,p_num_val         =>  rec_dd_attrs.ATTR_VALUE_NUM );
2607           ELSE
2608             l_compare_rec.SOURCE_SYS_VAL := rec_dd_attrs.ATTR_DISP_VALUE;
2609           END IF; --IF rec_dd_attrs.ATTR_DISP_VALUE IS NULL THEN
2610           Debug_Message('Display value is: '||l_compare_rec.SOURCE_SYS_VAL);
2611         END IF; --IF rec_dd_attrs.VALUE_SET_ID = 0 OR rec_dd_attrs.VALUE_SET_ID IS NULL THEN
2612 
2613         -- if UOM class is attached to the attribute, THEN appending the base UOM to attribute value.
2614         IF rec_dd_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
2615           Debug_Message('UOM Display Value is attached');
2616           l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || rec_dd_attrs.ATTR_UOM_DISP_VALUE;
2617           Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2618         ELSIF rec_dd_attrs.ATTR_VALUE_UOM IS NOT NULL THEN
2619           Debug_Message('UOM code is attached is attached');
2620           l_temp_query := l_p_atr_sql('UOM_CODE');
2621           EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_dd_attrs.ATTR_VALUE_UOM;
2622           l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
2623           Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2624         ELSIF rec_dd_attrs.UOM_CLASS IS NOT NULL THEN
2625           Debug_Message('UOM Class is attached');
2626           l_temp_query := l_p_atr_sql('UOM_CLASS');
2627           EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_dd_attrs.UOM_CLASS;
2628           l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
2629           Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2630         END IF; --IF rec_dd_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
2631 
2632         IF l_is_policy = 'Y' THEN
2633           l_compare_rec.CHANGE_POLICY := l_ch_policy_tbl(rec_dd_attrs.ATTR_GROUP_INT_NAME);
2634         END IF; --IF l_is_policy = 'Y'  THEN
2635 
2636         l_compare_tbl(l_compare_tbl.LAST) := l_compare_rec;
2637 
2638       END LOOP; --FOR rec_dd_attrs IN cr_dd_intf_pdh LOOP
2639       Debug_Message('Done getting GDSN attributes for Source System');
2640     ELSE --IF is_pdh_batch THEN
2641       Debug_Message('Batch is NON-PDH batch');
2642       Debug_Message('Getting GDSN attributes for Source System');
2643       FOR rec_dd_attrs IN cr_dd_intf( p_bundle_id ) LOOP
2644         Debug_Message('Processing attribute - '||rec_dd_attrs.ATTR_INT_NAME);
2645         l_idx := l_idx + 1;
2646         l_compare_tbl.extend();
2647         l_compare_rec.ATTR_GROUP_DISP_NAME :=  rec_dd_attrs.ATTR_GROUP_DISP_NAME;
2648         l_compare_rec.ATTR_DISP_NAME       :=  rec_dd_attrs.ATTR_DISPLAY_NAME;
2649         l_compare_rec.ATTRIBUTE_CODE       :=  rec_dd_attrs.ATTR_ID;
2650         l_compare_rec.ATTR_INT_NAME        :=  rec_dd_attrs.ATTR_INT_NAME ;
2651         l_compare_rec.ATTR_GROUP_INT_NAME  :=  rec_dd_attrs.ATTR_GROUP_INT_NAME;
2652 
2653         -- getting and setting the privilege in compare table
2654         l_attGrp_new := rec_dd_attrs.ATTR_GROUP_DISP_NAME;
2655 	      l_priv_name := get_privilege_name(rec_dd_attrs.VIEW_PRIVILEGE_ID);
2656         IF (l_priv_name IS NULL) THEN
2657           l_priv_item1 := 'T';
2658           l_priv_item2 := 'T';
2659           l_priv_item3 := 'T';
2660           l_priv_item4 := 'T';
2661         ELSIF(l_attGrp_old <> l_attGrp_new) THEN
2662           l_priv_item1 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item1,
2663                     p_org_Id, NULL, NULL, NULL, l_party_id);
2664           l_priv_item2 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item2,
2665                     p_org_Id, NULL, NULL, NULL, l_party_id);
2666           l_priv_item3 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item3,
2667                     p_org_Id, NULL, NULL, NULL, l_party_id);
2668           l_priv_item4 := EGO_DATA_SECURITY.CHECK_FUNCTION( 1.0, l_priv_name, 'EGO_ITEM', p_item4,
2669                     p_org_Id, NULL, NULL, NULL, l_party_id);
2670         END IF; -- IF (l_priv_name IS NULL) THEN
2671 
2672         -- Finding the Change Policy for an Attribute Group
2673         -- The condition (l_attGrp_old <> l_attGrp_new) is to calculate Change Policy only once for
2674         -- each Attribute Group.
2675         IF l_attGrp_old <> l_attGrp_new AND l_is_policy = 'Y' THEN
2676           ENG_CHANGE_POLICY_PKG.GetChangePolicy
2677                 (   p_policy_object_name     => 'CATALOG_LIFECYCLE_PHASE'
2678                  ,  p_policy_code            => 'CHANGE_POLICY'
2679                  ,  p_policy_pk1_value       =>  l_catalog_id
2680                  ,  p_policy_pk2_value       =>  l_lifecycle_id
2681                  ,  p_policy_pk3_value       =>  l_phase_id
2682                  ,  p_policy_pk4_value       =>  NULL
2683                  ,  p_policy_pk5_value       =>  NULL
2684                  ,  p_attribute_object_name  => 'EGO_CATALOG_GROUP'
2685                  ,  p_attribute_code         => 'ATTRIBUTE_GROUP'
2686                  ,  p_attribute_value        =>  rec_dd_attrs.ATTR_GROUP_ID
2687                  ,  x_policy_value           =>  l_ch_policy
2688                  );
2689 
2690           Debug_Message('Change Policy for attribute group : '||rec_dd_attrs.ATTR_GROUP_INT_NAME || ' is : ' || l_ch_policy );
2691           IF INSTR(l_ch_policy,'NOT') > 0 THEN
2692             l_ch_policy_tbl(rec_dd_attrs.ATTR_GROUP_INT_NAME) :=  'N';
2693           ELSIF INSTR(l_ch_policy,'ALLOWED') > 0 THEN
2694             l_ch_policy_tbl(rec_dd_attrs.ATTR_GROUP_INT_NAME) :=  'Y';
2695           ELSIF INSTR(l_ch_policy,'CHANGE') > 0 THEN
2696             l_ch_policy_tbl(rec_dd_attrs.ATTR_GROUP_INT_NAME) :=  'C';
2697           END IF; --IF INSTR(l_ch_policy,'NOT') > 0 THEN
2698         END IF; --IF (l_attGrp_old <> l_attGrp_new) THEN
2699         l_attGrp_old := l_attGrp_new;
2700 
2701         l_compare_rec.PRIV_ITEM1 := l_priv_item1;
2702         l_compare_rec.PRIV_ITEM2 := l_priv_item2;
2703         l_compare_rec.PRIV_ITEM3 := l_priv_item3;
2704         l_compare_rec.PRIV_ITEM4 := l_priv_item4;
2705 
2706         -- Saving UOM Class and value set Associated with this attribute
2707         UOM(l_idx) := rec_dd_attrs.UOM_CLASS;
2708         UOM_USER_CODE(l_idx) := rec_dd_attrs.ATTR_VALUE_UOM;
2709         UOM_DISP_VAL(l_idx) := rec_dd_attrs.ATTR_UOM_DISP_VALUE;
2710         IF rec_dd_attrs.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_NONE_VALIDATION_CODE THEN
2711           VSId(l_idx) := 0;
2712         ELSE
2713           VSId(l_idx) := rec_dd_attrs.VALUE_SET_ID;
2714         END IF;
2715 
2716         -- getting and setting source system value
2717         -- If Value set is not associated
2718         IF rec_dd_attrs.VALUE_SET_ID = 0 OR rec_dd_attrs.VALUE_SET_ID IS NULL THEN
2719           Debug_Message('Value set is NOT attached');
2720 	        IF rec_dd_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
2721             G_META(l_idx) := G_CHAR_FORMAT;
2722             l_compare_rec.SOURCE_SYS_VAL := rec_dd_attrs.ATTR_DISP_VALUE;
2723           ELSIF rec_dd_attrs.DATA_TYPE_CODE IN (G_CHAR_FORMAT, 'A') THEN
2724             G_META(l_idx) := G_CHAR_FORMAT;
2725             l_compare_rec.SOURCE_SYS_VAL := rec_dd_attrs.ATTR_VALUE_STR;
2726           ELSIF rec_dd_attrs.DATA_TYPE_CODE IN (G_TIME_FORMAT, G_DATE_TIME_FORMAT) THEN
2727             G_META(l_idx) := G_DATE_FORMAT;
2728             l_compare_rec.SOURCE_SYS_VAL := TO_CHAR(rec_dd_attrs.ATTR_VALUE_DATE, 'MM/DD/YYYY HH24:MI:SS');
2729           ELSIF rec_dd_attrs.DATA_TYPE_CODE = G_NUMBER_FORMAT THEN
2730             G_META(l_idx) := G_NUMBER_FORMAT;
2731             l_compare_rec.SOURCE_SYS_VAL := TO_CHAR(rec_dd_attrs.ATTR_VALUE_NUM);
2732           END IF; --IF rec_dd_attrs.ATTR_DISP_VALUE IS NOT NULL THEN
2733 
2734           -- Adding column to sql string to get production values
2735           l_sel_clause  := l_sel_clause || ' , '|| rec_dd_attrs.DATABASE_COLUMN;
2736 	      ELSE --IF rec_dd_attrs.VALUE_SET_ID = 0 OR rec_dd_attrs.VALUE_SET_ID IS NULL THEN
2737           Debug_Message('Value set is attached');
2738           l_sel_clause := l_sel_clause || ' , '||  rec_dd_attrs.DATABASE_COLUMN;
2739           G_META(l_idx) := rec_dd_attrs.DATA_TYPE_CODE; --G_CHAR_FORMAT;
2740           IF rec_dd_attrs.ATTR_DISP_VALUE IS NULL THEN
2741             l_compare_rec.SOURCE_SYS_VAL := Get_SS_Data_For_Val_set
2742                                                   ( p_value_set_id    =>  rec_dd_attrs.VALUE_SET_ID
2743                                                    ,p_validation_code =>  rec_dd_attrs.VALIDATION_CODE
2744                                                    ,p_str_val         =>  rec_dd_attrs.ATTR_VALUE_STR
2745                                                    ,p_date_val        =>  rec_dd_attrs.ATTR_VALUE_DATE
2746                                                    ,p_num_val         =>  rec_dd_attrs.ATTR_VALUE_NUM );
2747           ELSE
2748             l_compare_rec.SOURCE_SYS_VAL := rec_dd_attrs.ATTR_DISP_VALUE;
2749           END IF; --IF rec_dd_attrs.ATTR_DISP_VALUE IS NULL THEN
2750         END IF; --IF rec_dd_attrs.VALUE_SET_ID = 0 OR rec_dd_attrs.VALUE_SET_ID IS NULL THEN
2751 
2752         -- if UOM class is attached to the attribute, THEN appending the base UOM to attribute value.
2753         IF rec_dd_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
2754           Debug_Message('UOM Display Value is attached');
2755           l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || rec_dd_attrs.ATTR_UOM_DISP_VALUE;
2756           Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2757         ELSIF rec_dd_attrs.ATTR_VALUE_UOM IS NOT NULL THEN
2758           Debug_Message('UOM code is attached is attached');
2759           l_temp_query := l_p_atr_sql('UOM_CODE');
2760           EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_dd_attrs.ATTR_VALUE_UOM;
2761           l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
2762           Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2763         ELSIF rec_dd_attrs.UOM_CLASS IS NOT NULL THEN
2764           Debug_Message('UOM Class is attached');
2765           l_temp_query := l_p_atr_sql('UOM_CLASS');
2766           EXECUTE IMMEDIATE l_temp_query INTO l_temp USING rec_dd_attrs.UOM_CLASS;
2767           l_compare_rec.SOURCE_SYS_VAL := l_compare_rec.SOURCE_SYS_VAL || ' ' || l_temp;
2768           Debug_Message('Value after appending UOM is: '||l_compare_rec.SOURCE_SYS_VAL);
2769         END IF; --IF rec_dd_attrs.ATTR_UOM_DISP_VALUE IS NOT NULL THEN
2770 
2771         IF l_is_policy = 'Y' THEN
2772           l_compare_rec.CHANGE_POLICY := l_ch_policy_tbl(rec_dd_attrs.ATTR_GROUP_INT_NAME);
2773         END IF; --IF l_is_policy = 'Y'  THEN
2774 
2775         l_compare_tbl(l_compare_tbl.LAST) := l_compare_rec;
2776       END LOOP; --FOR rec_dd_attrs IN cr_dd_intf LOOP
2777       Debug_Message('Done getting GDSN attributes for Source System');
2778     END IF; --IF is_pdh_batch THEN
2779 
2780     Debug_Message('Preparing SQL for getting attribute values for production items.');
2781     -- If Selection clause if NULL THEN there are no GTIN Attrs to be selected
2782     IF l_sel_clause IS NOT NULL THEN
2783       IF is_pdh_batch THEN
2784 	      l_sql_query := 'SELECT INVENTORY_ITEM_ID '|| l_sel_clause ||
2785                        ' FROM EGO_ITEM_GTN_ATTRS_VL I ' ||
2786                        ' WHERE I.INVENTORY_ITEM_ID = :1 ' ||
2787                        '   AND I.ORGANIZATION_ID = :2 ' ;
2788 	    ELSE
2789 	      l_sql_query := 'SELECT INVENTORY_ITEM_ID '|| l_sel_clause ||
2790                        ' FROM EGO_ITEM_GTN_ATTRS_VL I ' ||
2791                        ' WHERE I.INVENTORY_ITEM_ID IN (:1,:2,:3,:4)' ||
2792                        '   AND I.ORGANIZATION_ID = :5 ' ;
2793       END IF; --IF is_pdh_batch THEN
2794 
2795       Debug_Message('SQL is - ');
2796       FOR l in 1..(CEIL(LENGTH(l_sql_query)/1000)) LOOP
2797         Debug_Message(SUBSTR(l_sql_query, ((l-1)*1000) + 1, 1000));
2798       END LOOP; --FOR l in 1..(CEIL(LENGTH(l_sql_query)/1000)) LOOP
2799 
2800       -- Defining a Dynamic Cursor -
2801       cr_dd_attr := DBMS_SQL.OPEN_CURSOR;
2802       Debug_Message('Parsing SQL');
2803       DBMS_SQL.PARSE(cr_dd_attr, l_sql_query, DBMS_SQL.native);
2804       Debug_Message('Done Parsing SQL');
2805       Debug_Message('Defining columns');
2806       DBMS_SQL.DEFINE_COLUMN(cr_dd_attr, 1 , l_num_value); --inventory _item _id
2807       Debug_Message('Total columns: '||TO_CHAR(l_idx + 1));
2808       FOR i IN 2..l_idx LOOP
2809         IF G_META(i) = G_CHAR_FORMAT THEN
2810           DBMS_SQL.DEFINE_COLUMN(cr_dd_attr, i, l_str_value, 4000);
2811         ELSIF G_META(i) = G_NUMBER_FORMAT THEN
2812           DBMS_SQL.DEFINE_COLUMN(cr_dd_attr, i, l_num_value);
2813         ELSIF G_META(i) = G_DATE_FORMAT THEN
2814           DBMS_SQL.DEFINE_COLUMN(cr_dd_attr, i, l_date_value);
2815         END IF; --IF G_META(i) = G_CHAR_FORMAT THEN
2816       END LOOP; --FOR i IN 2..l_idx LOOP
2817 
2818       Debug_Message('Binding variables');
2819       IF is_pdh_batch THEN
2820         DBMS_SQL.BIND_VARIABLE(cr_dd_attr, ':1', p_item1);
2821         DBMS_SQL.BIND_VARIABLE(cr_dd_attr, ':2', p_org_id);
2822 	    ELSE
2823 	      DBMS_SQL.BIND_VARIABLE(cr_dd_attr, ':1', p_item1);
2824         DBMS_SQL.BIND_VARIABLE(cr_dd_attr, ':2', p_item2);
2825         DBMS_SQL.BIND_VARIABLE(cr_dd_attr, ':3', p_item3);
2826         DBMS_SQL.BIND_VARIABLE(cr_dd_attr, ':4', p_item4);
2827         DBMS_SQL.BIND_VARIABLE(cr_dd_attr, ':5', p_org_id);
2828 	    END IF; --IF is_pdh_batch THEN
2829       Debug_Message('Done binding variables');
2830 
2831       l_ignore := DBMS_SQL.EXECUTE(cr_dd_attr);
2832       Debug_Message('Executed SQL, fetching rows');
2833       WHILE DBMS_SQL.FETCH_ROWS(cr_dd_attr) > 0 LOOP
2834         l_cnt := l_start + 1;
2835         FOR i IN 2..l_idx LOOP
2836           l_str_value := NULL;
2837           l_num_value := NULL;
2838           l_date_value := NULL;
2839           IF G_META(i) = G_CHAR_FORMAT THEN
2840             DBMS_SQL.COLUMN_VALUE(cr_dd_attr, i, l_str_value);
2841             l_val := l_str_value;
2842           ELSIF G_META(i) = G_DATE_FORMAT THEN
2843             DBMS_SQL.COLUMN_VALUE(cr_dd_attr, i, l_date_value);
2844             l_val := TO_CHAR(l_date_value, 'MM/DD/YYYY HH24:MI:SS');
2845           ELSIF G_META(i) = G_NUMBER_FORMAT THEN
2846             DBMS_SQL.COLUMN_VALUE(cr_dd_attr, i, l_num_value);
2847             l_val := TO_CHAR(l_num_value);
2848           END IF; --IF G_META(i) = G_CHAR_FORMAT THEN
2849 
2850           -- if a value set is associated, then get the display value
2851           IF VSID(i) IS NOT NULL AND VSID(i) <> 0 THEN
2852             IF G_META(i) = G_DATE_FORMAT THEN
2853               l_int_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
2854                             431, l_int_val, NULL, NULL, l_compare_tbl(l_cnt).ATTR_INT_NAME, 'EGO_ITEM_GTIN_ATTRS'
2855                             ,l_compare_tbl(l_cnt).ATTR_GROUP_INT_NAME, l_compare_tbl(l_cnt).ATTRIBUTE_CODE
2856                             ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
2857                             ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
2858             ELSIF G_META(i) = G_CHAR_FORMAT THEN
2859               l_int_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
2860                             431, NULL, l_int_val, NULL, l_compare_tbl(l_cnt).ATTR_INT_NAME, 'EGO_ITEM_GTIN_ATTRS'
2861                             ,l_compare_tbl(l_cnt).ATTR_GROUP_INT_NAME, l_compare_tbl(l_cnt).ATTRIBUTE_CODE
2862                             ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
2863                             ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
2864             ELSIF G_META(i) = G_NUMBER_FORMAT THEN
2865               l_int_val := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
2866                             431, NULL, NULL, l_int_val, l_compare_tbl(l_cnt).ATTR_INT_NAME, 'EGO_ITEM_GTIN_ATTRS'
2867                             ,l_compare_tbl(l_cnt).ATTR_GROUP_INT_NAME, l_compare_tbl(l_cnt).ATTRIBUTE_CODE
2868                             ,'EGO_ITEM' ,'ORGANIZATION_ID', p_org_id, 'INVENTORY_ITEM_ID', l_item_id, NULL
2869                             ,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
2870             END IF; --IF G_META(i) = G_DATE_FORMAT THEN
2871           END IF; --IF VSID(i) IS NOT NULL AND VSID(i) <> 0 THEN
2872 
2873           --if UOM class is attached to the attribute, THEN appending the base UOM to attribute value.
2874           IF UOM(i) IS NOT NULL THEN
2875             l_temp_query := l_p_atr_sql('UOM_CLASS');
2876             EXECUTE IMMEDIATE l_temp_query INTO l_temp USING UOM(i);
2877             l_val := l_val || ' ' || l_temp;
2878           END IF; --IF UOM_DISP_VAL(i) IS NOT NULL THEN
2879 
2880           populate_compare_tbl(    p_compare_table => l_compare_tbl ,
2881                                    p_index         => l_cnt,
2882                                    p_sel_item      => l_item_id ,
2883                                    p_value         => l_val ,
2884                                    p_item1         => p_item1 ,
2885                                    p_item2         => p_item2 ,
2886                                    p_item3         => p_item3 ,
2887                                    p_item4         => p_item4);
2888           l_cnt := l_cnt + 1;
2889         END LOOP; --FOR i IN 2..l_idx LOOP
2890       END LOOP; --WHILE DBMS_SQL.FETCH_ROWS(cr_dd_attr) > 0 LOOP
2891       DBMS_SQL.CLOSE_CURSOR(cr_dd_attr);
2892       Debug_Message('Done getting attribute values for production items.');
2893     END IF; --IF l_sel_clause IS NOT NULL THEN
2894     Debug_Message('Done Processing GDSN attributes.');
2895     Debug_Message('Done GET_COMPARED_DATA Successfully at - '||TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
2896     RETURN l_compare_tbl;
2897   EXCEPTION
2898     WHEN OTHERS THEN
2899       err_compare_tbl := SYSTEM.EGO_COMPARE_VIEW_TABLE();
2900       err_compare_rec := SYSTEM.EGO_COMPARE_VIEW_REC('', '', '','', '', '','', '', '','', '','','','','');
2901       --err_compare_rec.ATTR_GROUP_DISP_NAME := 'Encountered error, No search conducted';
2902       err_compare_rec.ATTR_GROUP_DISP_NAME := SQLERRM;
2903       err_compare_tbl.EXTEND();
2904       err_compare_tbl(1) := err_compare_rec;
2905       Debug_Message('Error - '||SQLERRM);
2906       Debug_Message('Done GET_COMPARED_DATA with error at - '||TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
2907       RETURN err_compare_tbl;
2908   END GET_COMPARED_DATA;
2909 END EGO_IMPORT_BATCH_COMPARE_PVT;