DBA Data[Home] [Help]

PACKAGE BODY: APPS.INV_EBI_ITEM_HELPER

Source


1 PACKAGE BODY INV_EBI_ITEM_HELPER AS
2 /* $Header: INVEIHITB.pls 120.76.12020000.2 2012/07/19 05:09:40 smukka ship $ */
3 
4 /************************************************************************************
5 --      API name        : set_nls
6 --      Type            : Private
7 --      Function        :
8 --      This API is used to set nls in autonomous transaction
9 --
10 ************************************************************************************/
11 
12 PROCEDURE set_nls(p_nls_language in VARCHAR2)
13    IS
14    PRAGMA AUTONOMOUS_TRANSACTION;
15    BEGIN
16     INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.set_nls');
17     FND_GLOBAL.SET_NLS_CONTEXT(p_nls_language);
18     INV_EBI_UTIL.debug_line('STEP 20 :END INSIDE INV_EBI_ITEM_HELPER.set_nls');
19     commit;
20    END ;
21 
22 /************************************************************************************
23 --      API name        : populate_err_msg
24 --      Type            : Public
25 --      Function        :
26 --      This API is used to retrieve the err message.
27 --
28 ************************************************************************************/
29 PROCEDURE populate_err_msg(p_orgid               IN            NUMBER
30                           ,p_invid               IN            NUMBER
31                           ,p_org_code            IN            VARCHAR2
32                           ,p_item_name           IN            VARCHAR2
33                           ,p_part_err_msg        IN            VARCHAR2
34                           ,x_err_msg             IN OUT NOCOPY VARCHAR2
35                            )
36 IS
37  l_ovrflw_msg              VARCHAR2(1):='N';
38  l_part_item_msg           VARCHAR2(32000);
39  l_part_org_msg            VARCHAR2(32000);
40  l_part_msgtxt             VARCHAR2(32000);
41  BEGIN
42   IF  (p_item_name IS NOT NULL)  THEN
43     l_part_item_msg :=  ' Item Name: '|| p_item_name ;
44   ELSIF (p_item_name IS NULL AND p_invid IS NOT NULL) THEN
45     l_part_item_msg :=  ' Item Id: '|| p_invid ;
46   END IF;
47   IF (p_org_code IS NOT NULL) THEN
48     l_part_org_msg   := ' Org Code: ' || p_org_code ;
49   ELSIF (p_org_code IS NULL AND p_orgid IS NOT NULL) THEN
50     l_part_org_msg   := ' Org Id: ' || p_orgId ;
51   END IF;
52   l_part_msgtxt :=  l_part_org_msg || l_part_item_msg || ' Err Msg: ' || p_part_err_msg ;
53   IF (x_err_msg IS NULL) THEN
54     x_err_msg := l_part_msgtxt;
55   ELSE
56     IF (LENGTH(x_err_msg ||l_part_msgtxt) < 31000) THEN
57       x_err_msg := x_err_msg ||' , ' || l_part_msgtxt;
58     ELSE
59       l_ovrflw_msg := 'Y';
60     END IF;
61   END IF;
62   IF (l_ovrflw_msg = 'Y') AND SUBSTR(x_err_msg,length(x_err_msg)-2) <> '...' THEN
63     x_err_msg := x_err_msg || '...';
64   END IF;
65  EXCEPTION
66    WHEN OTHERS THEN
67      NULL;
68 END populate_err_msg;
69 /************************************************************************************
70   --      API name        : id_col_value
71   --      Type            : Public
72   --      Function        :
73   ************************************************************************************/
74 FUNCTION id_col_value(
75     p_col_name                   IN     VARCHAR2
76    ,p_pk_col_name_val_pairs      IN      INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl
77 ) RETURN VARCHAR2 IS
78 l_pkval varchar2(150);
79 BEGIN
80   IF ( (p_pk_col_name_val_pairs IS NOT NULL AND p_pk_col_name_val_pairs.COUNT >0)
81     AND p_col_name IS NOT NULL) THEN
82     FOR i IN 1..p_pk_col_name_val_pairs.COUNT
83     LOOP
84       IF LOWER(p_col_name) = LOWER(p_pk_col_name_val_pairs(i).name)
85       THEN
86         l_pkval := p_pk_col_name_val_pairs(i).value;
87         EXIT;
88       END IF;
89     END LOOP;
90   END IF;
91   RETURN l_pkval;
92 EXCEPTION WHEN OTHERS THEN
93   RETURN NULL;
94 END id_col_value;
95 /************************************************************************************
96   --      API name        : value_to_id
97   --      Type            : Public
98   --      Function        :
99   ************************************************************************************/
100 FUNCTION value_to_id(
101      p_pk_col_name_val_pairs  IN   INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl
102     ,p_entity_name            IN   VARCHAR2
103   ) RETURN NUMBER IS
104   l_table_name            VARCHAR2(30);
105   l_col_name              VARCHAR2(30);
106   l_sql                   VARCHAR2(32000);
107   l_id                    NUMBER;
108   l_pk1                   VARCHAR2(150);
109   l_pk2                   VARCHAR2(150);
110 BEGIN
111   IF ( p_entity_name is NOT NULL )
112   THEN
113     CASE p_entity_name
114       WHEN G_TEMPLATE THEN
115         l_pk1 := ID_COL_VALUE('template_name',p_pk_col_name_val_pairs);
116         SELECT template_id INTO l_id  FROM mtl_item_templates
117         WHERE template_name =l_pk1;
118       WHEN G_INVENTORY_ITEM THEN
119         l_pk1 := ID_COL_VALUE('concatenated_segments',p_pk_col_name_val_pairs);
120         l_pk2 := ID_COL_VALUE('organization_id',p_pk_col_name_val_pairs);
121         SELECT inventory_item_id INTO l_id  FROM mtl_system_items_kfv
122         WHERE concatenated_segments = l_pk1
123         AND organization_id =  l_pk2;
124       WHEN G_ORGANIZATION THEN
125         l_pk1 := ID_COL_VALUE('organization_code',p_pk_col_name_val_pairs);
126         SELECT organization_id INTO l_id  FROM mtl_parameters
127         WHERE organization_code = l_pk1;
128       WHEN G_ITEM_CATALOG_GROUP THEN
129         l_pk1 := ID_COL_VALUE('concatenated_segments',p_pk_col_name_val_pairs);
130         SELECT item_catalog_group_id INTO l_id  FROM mtl_item_catalog_groups_kfv
131         WHERE concatenated_segments = l_pk1;
132       WHEN G_LIFECYCLE THEN
133         l_pk1 :=  ID_COL_VALUE('name',p_pk_col_name_val_pairs);
134         SELECT proj_element_id INTO l_id  FROM pa_ego_lifecycles_v
135         WHERE name = l_pk1;
136       WHEN G_CURRENT_PHASE THEN
137         l_pk1 :=  ID_COL_VALUE('name',p_pk_col_name_val_pairs);
138         l_pk2 := ID_COL_VALUE('parent_structure_id',p_pk_col_name_val_pairs);
139         SELECT proj_element_id INTO l_id  from pa_ego_phases_v
140         WHERE name = l_pk1
141         AND parent_structure_id = l_pk2;
142       WHEN G_REVISION THEN
143         l_pk1 := ID_COL_VALUE('organization_id',p_pk_col_name_val_pairs);
144         l_pk2 := ID_COL_VALUE('inventory_item_id',p_pk_col_name_val_pairs);
145         SELECT revision_id INTO l_id  from mtl_item_rev_highdate_v MIRVH
146         WHERE organization_id = l_pk1
147         AND  inventory_item_id = l_pk2
148         AND MIRVH.EFFECTIVITY_DATE < SYSDATE
149         AND decode(MIRVH.HIGH_DATE,SYSDATE,SYSDATE+1) > SYSDATE;
150       WHEN G_HAZARD_CLASS THEN
151         l_pk1 := ID_COL_VALUE('hazard_class',p_pk_col_name_val_pairs);
152         SELECT hazard_class_id INTO l_id  from po_hazard_classes_vl
153         WHERE hazard_class = l_pk1;
154       WHEN G_ASSET_CATEGORY THEN
155         l_pk1 := ID_COL_VALUE('concatenated_segments',p_pk_col_name_val_pairs);
156         SELECT category_id INTO l_id  FROM fa_categories_b_kfv
157         WHERE concatenated_segments = l_pk1;
158       WHEN G_MANUFACTURER THEN
159         l_pk1 := ID_COL_VALUE('manufacturer_name',p_pk_col_name_val_pairs);
160         SELECT manufacturer_id INTO l_id  FROM mtl_manufacturers
161         WHERE manufacturer_name = l_pk1;
162       WHEN G_CATEGORY_SET THEN
163          l_pk1 := ID_COL_VALUE('category_set_name',p_pk_col_name_val_pairs);
164         SELECT category_set_id INTO l_id  FROM mtl_category_sets_vl
165         WHERE category_set_name = l_pk1;
166       WHEN G_CATEGORY THEN
167         l_pk1 := ID_COL_VALUE('concatenated_segments',p_pk_col_name_val_pairs);
168         l_pk2 := ID_COL_VALUE('category_set_name',p_pk_col_name_val_pairs);
169         SELECT category_id INTO l_id FROM mtl_categories_kfv mck,mtl_category_sets_vl mcs
170          where mcs.category_set_name = l_pk2
171          and mcs.structure_id = mck.structure_id
172          and mck.concatenated_segments = l_pk1;
173     END CASE;
174   END IF;
175     RETURN l_id;
176 EXCEPTION
177   WHEN OTHERS THEN
178     RETURN NULL;
179 END value_to_id;
180  /************************************************************************************
181     --      API name        : id_to_value
182     --      Type            : Public
183     --      Function        : returns the code equivalent of a given id
184    ************************************************************************************/
185   FUNCTION id_to_value(
186       p_pk_col_name_val_pairs  IN   INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl
187      ,p_entity_name            IN   VARCHAR2
188    ) RETURN VARCHAR2 IS
189    l_table_name            VARCHAR2(30);
190    l_col_name              VARCHAR2(30);
191    l_sql                   VARCHAR2(32000);
192    l_code                  VARCHAR2(100);
193    l_pk1                   VARCHAR2(150);
194    l_pk2                   VARCHAR2(150);
195   BEGIN
196     IF ( p_entity_name is NOT NULL )
197     THEN
198     CASE p_entity_name
199       WHEN G_TEMPLATE THEN
200         l_pk1 := ID_COL_VALUE('template_id',p_pk_col_name_val_pairs);
201         SELECT template_name  INTO l_code
202         FROM mtl_item_templates_vl
203         WHERE  template_id = l_pk1;
204       WHEN G_ORGANIZATION THEN
205         l_pk1 := ID_COL_VALUE('organization_id',p_pk_col_name_val_pairs);
206         SELECT organization_code INTO l_code
207         FROM mtl_parameters
208         WHERE organization_id = l_pk1;
209       WHEN G_ITEM_CATALOG_GROUP THEN
210         l_pk1 := ID_COL_VALUE('item_catalog_group_id',p_pk_col_name_val_pairs);
211         SELECT concatenated_segments  INTO l_code
212         FROM mtl_item_catalog_groups_kfv
213         WHERE item_catalog_group_id = l_pk1;
214       WHEN G_LIFECYCLE THEN
215        l_pk1 := ID_COL_VALUE('proj_element_id',p_pk_col_name_val_pairs);
216         SELECT name INTO l_code
217         FROM pa_ego_lifecycles_v
218         WHERE proj_element_id = l_pk1;
219       WHEN G_CURRENT_PHASE THEN
220          l_pk1 := ID_COL_VALUE('proj_element_id',p_pk_col_name_val_pairs);
221         SELECT phase_code  INTO l_code
222         FROM pa_ego_phases_v
223         WHERE proj_element_id = l_pk1;
224       WHEN G_REVISION THEN
225          l_pk1 := ID_COL_VALUE('revision_id',p_pk_col_name_val_pairs);
226         SELECT revision_label INTO l_code
227         FROM mtl_item_revisions_vl
228         WHERE  revision_id = l_pk1;
229       WHEN G_HAZARD_CLASS THEN
230         l_pk1 := ID_COL_VALUE('hazard_class_id',p_pk_col_name_val_pairs);
231         SELECT hazard_class  INTO l_code
232         FROM po_hazard_classes_vl
233         WHERE hazard_class_id = l_pk1;
234       WHEN G_ASSET_CATEGORY THEN
235          l_pk1 := ID_COL_VALUE('category_id',p_pk_col_name_val_pairs);
236         SELECT concatenated_segments  INTO l_code
237         FROM fa_categories_b_kfv
238         WHERE category_id = l_pk1 ;
239       WHEN G_MANUFACTURER THEN
240         l_pk1 := ID_COL_VALUE('manufacturer_id',p_pk_col_name_val_pairs);
241         SELECT manufacturer_name INTO l_code
242         FROM mtl_manufacturers
243         WHERE manufacturer_id = l_pk1;
244       WHEN G_CATEGORY_SET THEN
245         l_pk1 := ID_COL_VALUE('cat_set_id',p_pk_col_name_val_pairs);
246         SELECT category_set_name INTO l_code
247         FROM mtl_category_sets_vl
248         WHERE CATEGORY_SET_ID  = l_pk1;
249       WHEN G_CATEGORY THEN
250         l_pk1 := ID_COL_VALUE('cat_id',p_pk_col_name_val_pairs);
251         SELECT concatenated_segments INTO l_code
252         FROM mtl_categories_kfv
253         WHERE CATEGORY_ID =l_pk1;
254       WHEN G_INVENTORY_ITEM THEN
255         l_pk1 := ID_COL_VALUE('organization_id',p_pk_col_name_val_pairs);
256         l_pk2 := ID_COL_VALUE('inventory_item_id',p_pk_col_name_val_pairs);
257         SELECT concatenated_segments INTO l_code
258         FROM mtl_system_items_b_kfv
259         WHERE organization_id = l_pk1
260         AND inventory_item_id = l_pk2;
261     END CASE;
262     END IF;
263     RETURN l_code;
264   EXCEPTION
265        WHEN OTHERS THEN
266          RETURN NULL;
267  END id_to_value;
268 
269  /************************************************************************************
270   --      API name        : populate_item_ids
271   --      Type            : Public
272   --      Function        :
273  ***********************************************************************************/
274 
275   PROCEDURE populate_item_ids(
276     p_item  IN  inv_ebi_item_obj
277    ,x_out   OUT NOCOPY inv_ebi_item_output_obj
278    ,x_item  OUT NOCOPY inv_ebi_item_obj
279   ) IS
280     l_pk_col_name_val_pairs   INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl;
281     l_output_status           inv_ebi_output_status;
282   BEGIN
283     INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.populate_item_ids');
284     x_item  := p_item;
285     l_output_status := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
286     x_out           := inv_ebi_item_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,NULL,NULL,NULL,NULL,NULL);
287     l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
288     IF ( (p_item.main_obj_type.organization_id IS NULL OR p_item.main_obj_type.organization_id = fnd_api.g_miss_num)
289        AND p_item.main_obj_type.organization_code IS NOT NULL ) THEN
290       l_pk_col_name_val_pairs.EXTEND(1);
291       l_pk_col_name_val_pairs(1).name  := 'organization_code';
292       l_pk_col_name_val_pairs(1).value := p_Item.main_obj_type.organization_code;
293       x_item.main_obj_type.organization_id  := INV_EBI_ITEM_HELPER.value_to_id(
294                                                  p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
295                                                 ,p_entity_name            => INV_EBI_ITEM_HELPER.G_ORGANIZATION
296                                                );
297       INV_EBI_UTIL.debug_line('STEP 20: ORG ID '|| x_item.main_obj_type.organization_id);
298       l_pk_col_name_val_pairs.TRIM(1);
299         IF (x_item.main_obj_type.organization_id IS NULL) THEN
300           FND_MESSAGE.set_name('INV','INV_EBI_ORG_CODE_INVALID');
301           FND_MESSAGE.set_token('COL_VALUE', p_Item.main_obj_type.organization_code);
302           FND_MSG_PUB.add;
303           RAISE FND_API.g_exc_error;
304         END IF;
305     END IF;
306     IF ( (p_item.main_obj_type.inventory_item_id IS NULL OR  p_item.main_obj_type.inventory_item_id= fnd_api.g_miss_num)
307        AND p_item.main_obj_type.item_number IS NOT NULL ) THEN
308       l_pk_col_name_val_pairs.EXTEND(2);
309       l_pk_col_name_val_pairs(1).name  := 'concatenated_segments';
310       l_pk_col_name_val_pairs(1).value := p_item.main_obj_type.item_number;
311       l_pk_col_name_val_pairs(2).name  := 'organization_id';
312       l_pk_col_name_val_pairs(2).value := x_item.main_obj_type.organization_id;
313       x_item.main_obj_type.inventory_item_id  := INV_EBI_ITEM_HELPER.value_to_id(
314                                                    p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
315                                                   ,p_entity_name            => INV_EBI_ITEM_HELPER.G_INVENTORY_ITEM
316                                                  );
317       l_pk_col_name_val_pairs.TRIM(2);
318       INV_EBI_UTIL.debug_line('STEP 30: INV ITEM ID '|| x_item.main_obj_type.inventory_item_id);
319     END IF;
320     IF ( (p_item.main_obj_type.template_id IS NULL OR p_item.main_obj_type.template_id =fnd_api.g_miss_num)
321        AND p_item.main_obj_type.template_name IS NOT NULL AND p_item.main_obj_type.template_name <> fnd_api.g_miss_char) THEN
322       l_pk_col_name_val_pairs.EXTEND(1);
323       l_pk_col_name_val_pairs(1).name  := 'template_name';
324       l_pk_col_name_val_pairs(1).value := p_item.main_obj_type.template_name;
325       x_item.main_obj_type.template_id := INV_EBI_ITEM_HELPER.value_to_id(
326                                              p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
327                                             ,p_entity_name            => INV_EBI_ITEM_HELPER.G_TEMPLATE
328                                           );
329       INV_EBI_UTIL.debug_line('STEP 40: TEMPLATE ID '|| x_item.main_obj_type.template_id);
330       l_pk_col_name_val_pairs.TRIM(1);
331 
332       IF (x_item.main_obj_type.template_id IS NULL) THEN
333         FND_MESSAGE.set_name('INV','INV_TEMPLATE_ERROR');
334         FND_MSG_PUB.add;
335         RAISE FND_API.g_exc_error;
336       END IF;
337     END IF;
338     IF (p_item.org_id_obj_type IS NOT NULL AND p_item.org_id_obj_type.COUNT > 0 ) THEN
339       FOR i IN 1..p_item.org_id_obj_type.COUNT LOOP
340         IF (p_item.org_id_obj_type(i).org_id IS  NULL AND p_item.org_id_obj_type(i).org_code IS NOT NULL) THEN
341           l_pk_col_name_val_pairs.EXTEND(1);
342           l_pk_col_name_val_pairs(1).name  := 'organization_code';
343           l_pk_col_name_val_pairs(1).value := p_item.org_id_obj_type(i).org_code;
344           x_item.org_id_obj_type(i).org_id  := INV_EBI_ITEM_HELPER.value_to_id(
345                                                  p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
346                                                 ,p_entity_name            => INV_EBI_ITEM_HELPER.G_ORGANIZATION
347                                                );
348           INV_EBI_UTIL.debug_line('STEP 50: ORG ID '|| x_item.org_id_obj_type(i).org_id);
349           l_pk_col_name_val_pairs.TRIM(1);
350           IF (x_item.org_id_obj_type(i).org_id IS NULL) THEN
351             FND_MESSAGE.set_name('INV','INV_EBI_ORG_CODE_INVALID');
352             FND_MESSAGE.set_token('COL_VALUE', p_item.org_id_obj_type(i).org_code);
353             FND_MSG_PUB.add;
354             RAISE FND_API.g_exc_error;
355           END IF;
356         END IF;
357       END LOOP;
358     END IF;
359     IF ( (p_item.main_obj_type.item_catalog_group_id IS NULL OR p_item.main_obj_type.item_catalog_group_id=fnd_api.g_miss_num)
360        AND p_item.main_obj_type.item_catalog_group_code IS NOT NULL
361        AND p_item.main_obj_type.item_catalog_group_code <> fnd_api.g_miss_char) THEN
362       l_pk_col_name_val_pairs.EXTEND(1);
363       l_pk_col_name_val_pairs(1).name  := 'concatenated_segments';
364       l_pk_col_name_val_pairs(1).value := p_item.main_obj_type.item_catalog_group_code;
365       x_item.main_obj_type.item_catalog_group_id  := INV_EBI_ITEM_HELPER.value_to_id(
366                                                        p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
367                                                       ,p_entity_name            => INV_EBI_ITEM_HELPER.G_ITEM_CATALOG_GROUP
368                                                      );
369       INV_EBI_UTIL.debug_line('STEP 60: CATALOG GROUP ID '|| x_item.main_obj_type.item_catalog_group_id);
370       l_pk_col_name_val_pairs.TRIM(1);
371         IF (x_item.main_obj_type.item_catalog_group_id IS NULL ) THEN
372                FND_MESSAGE.set_name('INV','INV_EBI_ITEM_INVALID');
373                FND_MESSAGE.set_token('COL_VALUE',p_item.main_obj_type.item_catalog_group_code);
374                FND_MSG_PUB.add;
375                RAISE FND_API.g_exc_error;
376         END IF;
377     END IF;
378     IF ( (p_item.main_obj_type.lifecycle_id IS NULL OR p_item.main_obj_type.lifecycle_id =fnd_api.g_miss_num)
379        AND p_item.main_obj_type.lifecycle_name IS NOT NULL) THEN
380       l_pk_col_name_val_pairs.EXTEND(1);
381       l_pk_col_name_val_pairs(1).name  := 'name';
382       l_pk_col_name_val_pairs(1).value := p_item.main_obj_type.lifecycle_name;
383       x_item.main_obj_type.lifecycle_id  := INV_EBI_ITEM_HELPER.value_to_id (
384                                               p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
385                                              ,p_entity_name            => INV_EBI_ITEM_HELPER.G_LIFECYCLE
386                                              );
387       INV_EBI_UTIL.debug_line('STEP 70: LIFE CYCLE ID '|| x_item.main_obj_type.lifecycle_id);
388       l_pk_col_name_val_pairs.TRIM(1);
389     END IF;
390     IF ( (p_item.main_obj_type.current_phase_id IS NULL  OR p_item.main_obj_type.current_phase_id=fnd_api.g_miss_num)
391       AND (p_item.main_obj_type.current_phase_name IS NOT NULL AND x_item.main_obj_type.lifecycle_id is NOT NULL)) THEN
392       l_pk_col_name_val_pairs.EXTEND(2);
393       l_pk_col_name_val_pairs(1).name  := 'name';
394       l_pk_col_name_val_pairs(1).value := p_item.main_obj_type.current_phase_name;
395       l_pk_col_name_val_pairs(2).name  := 'parent_structure_id';
396       l_pk_col_name_val_pairs(2).value := x_item.main_obj_type.lifecycle_id ;
397       x_item.main_obj_type.current_phase_id  := INV_EBI_ITEM_HELPER.value_to_id(
398                                                   p_pk_col_name_val_pairs => l_pk_col_name_val_pairs
399                                                  ,p_entity_name           => INV_EBI_ITEM_HELPER.G_CURRENT_PHASE
400                                                 );
401       INV_EBI_UTIL.debug_line('STEP 80: CURRENT PHASE ID '|| x_item.main_obj_type.current_phase_id);
402       l_pk_col_name_val_pairs.TRIM(2);
403     END IF;
404     IF ( (p_item.main_obj_type.revision_id IS NULL OR p_item.main_obj_type.revision_id= fnd_api.g_miss_num)
405      AND (x_item.main_obj_type.organization_id IS NOT NULL AND x_item.main_obj_type.inventory_item_id IS NOT NULL)
406        ) THEN
407       l_pk_col_name_val_pairs.EXTEND(2);
408       l_pk_col_name_val_pairs(1).name  := 'organization_id';
409       l_pk_col_name_val_pairs(1).value := p_item.main_obj_type.organization_id;
410       l_pk_col_name_val_pairs(2).name  := 'inventory_item_id';
411       l_pk_col_name_val_pairs(2).value := x_item.main_obj_type.inventory_item_id;
412       x_item.main_obj_type.revision_id  := INV_EBI_ITEM_HELPER.value_to_id(
413                                              p_pk_col_name_val_pairs => l_pk_col_name_val_pairs
414                                             ,p_entity_name           => INV_EBI_ITEM_HELPER.G_REVISION
415                                            );
416       INV_EBI_UTIL.debug_line('STEP 90: REVISION ID '|| x_item.main_obj_type.revision_id);
417       l_pk_col_name_val_pairs.TRIM(2);
418    END IF;
419     IF ( (p_item.purchasing_obj_type.hazard_class_id IS NULL  OR p_item.purchasing_obj_type.hazard_class_id = fnd_api.g_miss_num)
420       AND p_item.purchasing_obj_type.hazard_class_code IS NOT NULL) THEN
421       l_pk_col_name_val_pairs.EXTEND(1);
422       l_pk_col_name_val_pairs(1).name  := 'hazard_class';
423       l_pk_col_name_val_pairs(1).value := p_item.purchasing_obj_type.hazard_class_code ;
424       x_item.purchasing_obj_type.hazard_class_id  := INV_EBI_ITEM_HELPER.value_to_id(
425                                                  p_pk_col_name_val_pairs => l_pk_col_name_val_pairs
426                                                 ,p_entity_name           => INV_EBI_ITEM_HELPER.G_HAZARD_CLASS
427                                                );
428       INV_EBI_UTIL.debug_line('STEP 100: HAZARD CLASS ID '|| x_item.purchasing_obj_type.hazard_class_id);
429       l_pk_col_name_val_pairs.TRIM(1);
430     END IF;
431     IF ( (p_item.purchasing_obj_type.asset_category_id IS NULL OR p_item.purchasing_obj_type.asset_category_id =fnd_api.g_miss_num)
432        AND p_item.purchasing_obj_type.asset_category_code IS NOT NULL ) THEN
433       l_pk_col_name_val_pairs.EXTEND(1);
434       l_pk_col_name_val_pairs(1).name  := 'concatenated_segments';
435       l_pk_col_name_val_pairs(1).value := p_item.purchasing_obj_type.asset_category_code;
436       x_item.purchasing_obj_type.asset_category_id  := INV_EBI_ITEM_HELPER.value_to_id(
437                                                          p_pk_col_name_val_pairs => l_pk_col_name_val_pairs
438                                                         ,p_entity_name           => INV_EBI_ITEM_HELPER.G_ASSET_CATEGORY
439                                                      );
440       INV_EBI_UTIL.debug_line('STEP 110: ASSET CATEGORY ID '|| x_item.purchasing_obj_type.asset_category_id);
441       l_pk_col_name_val_pairs.TRIM(1);
442     END IF;
443     IF ( (p_item.bom_obj_type.base_item_id IS NULL OR p_item.bom_obj_type.base_item_id= fnd_api.g_miss_num)
444       AND p_item.bom_obj_type.base_item_number IS NOT NULL )THEN
445       l_pk_col_name_val_pairs.EXTEND(2);
446       l_pk_col_name_val_pairs(1).name  := 'concatenated_segments';
447       l_pk_col_name_val_pairs(1).value := p_item.bom_obj_type.base_item_number;
448       l_pk_col_name_val_pairs(2).name  := 'organization_id';
449       l_pk_col_name_val_pairs(2).value := p_item.main_obj_type.organization_id;
450       x_item.bom_obj_type.base_item_id  := INV_EBI_ITEM_HELPER.value_to_id(
451                                               p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
452                                              ,p_entity_name            => INV_EBI_ITEM_HELPER.G_INVENTORY_ITEM
453                                            );
454       INV_EBI_UTIL.debug_line('STEP 120: BASE ITEM ID '|| x_item.bom_obj_type.base_item_id);
455       l_pk_col_name_val_pairs.TRIM(2);
456     END IF;
457     IF ( p_item.part_num_obj_tbl_type IS NOT NULL AND p_item.part_num_obj_tbl_type.COUNT > 0 ) THEN
458       FOR i in 1..p_item.part_num_obj_tbl_type.COUNT LOOP
459         IF ((p_item.part_num_obj_tbl_type(i).manufacturer_id IS NULL OR p_item.part_num_obj_tbl_type(i).manufacturer_id = fnd_api.g_miss_num)
460         AND (p_item.part_num_obj_tbl_type(i).manufacturer_name IS NOT NULL OR p_item.part_num_obj_tbl_type(i).manufacturer_name <> fnd_api.g_miss_char))THEN
461           l_pk_col_name_val_pairs.EXTEND(1);
462           l_pk_col_name_val_pairs(1).name  := 'manufacturer_name';
463           l_pk_col_name_val_pairs(1).value := p_item.part_num_obj_tbl_type(i).manufacturer_name;
464           x_item.part_num_obj_tbl_type(i).manufacturer_id  := INV_EBI_ITEM_HELPER.value_to_id (
465                                                                 p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
466                                                                ,p_entity_name            => INV_EBI_ITEM_HELPER.G_MANUFACTURER
467                                                               );
468           INV_EBI_UTIL.debug_line('STEP 130: MANUFACTURER NAME' || p_item.part_num_obj_tbl_type(i).manufacturer_name || 'MFG ID: ' || x_item.part_num_obj_tbl_type(i).manufacturer_id);
469           l_pk_col_name_val_pairs.TRIM(1);
470         END IF;
471       END LOOP;
472     END IF;
473     IF ( p_item.category_id_obj_tbl_type IS NOT NULL AND p_item.category_id_obj_tbl_type.COUNT > 0) THEN
474       FOR i IN 1..p_item.category_id_obj_tbl_type.COUNT LOOP
475         IF ((p_item.category_id_obj_tbl_type(i).cat_set_id IS NULL OR p_item.category_id_obj_tbl_type(i).cat_set_id = fnd_api.g_miss_num)
476         AND (p_item.category_id_obj_tbl_type(i).cat_set_name IS NOT NULL OR p_item.category_id_obj_tbl_type(i).cat_set_name <> fnd_api.g_miss_char) ) THEN
477           l_pk_col_name_val_pairs.EXTEND(1);
478           l_pk_col_name_val_pairs(1).name  := 'category_set_name';
479           l_pk_col_name_val_pairs(1).value := p_item.category_id_obj_tbl_type(i).cat_set_name;
480           x_item.category_id_obj_tbl_type(i).cat_set_id  := INV_EBI_ITEM_HELPER.value_to_id(
481                                                               p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
482                                                              ,p_entity_name            => INV_EBI_ITEM_HELPER.G_CATEGORY_SET
483                                                              );
484           INV_EBI_UTIL.debug_line('STEP 140: CATEGORY SET NAME: '|| p_item.category_id_obj_tbl_type(i).cat_set_name ||
485 	                                   'CATEGORY SET ID: '|| x_item.category_id_obj_tbl_type(i).cat_set_id);
486           l_pk_col_name_val_pairs.TRIM(1);
487         END IF;
488         IF ( (p_item.category_id_obj_tbl_type(i).cat_id IS NULL OR p_item.category_id_obj_tbl_type(i).cat_id =fnd_api.g_miss_num)
489         AND ( p_item.category_id_obj_tbl_type(i).cat_name IS NOT NULL OR p_item.category_id_obj_tbl_type(i).cat_name <> fnd_api.g_miss_char)) THEN
490           l_pk_col_name_val_pairs.EXTEND(2);
491           l_pk_col_name_val_pairs(1).name  := 'concatenated_segments';
492           l_pk_col_name_val_pairs(1).value := p_item.category_id_obj_tbl_type(i).cat_name;
493           l_pk_col_name_val_pairs(2).name  := 'category_set_name';
494           l_pk_col_name_val_pairs(2).value := p_item.category_id_obj_tbl_type(i).cat_set_name;
495           x_item.category_id_obj_tbl_type(i).cat_id  := INV_EBI_ITEM_HELPER.value_to_id (
496                                                           p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
497                                                          ,p_entity_name            => INV_EBI_ITEM_HELPER.G_CATEGORY
498                                                         );
499           INV_EBI_UTIL.debug_line('STEP 150: CATEGORY ID: '|| x_item.category_id_obj_tbl_type(i).cat_id);
500 	  l_pk_col_name_val_pairs.TRIM(1);
501         END IF;
502       END LOOP;
503     END IF;
504     IF ( (p_item.main_obj_type.rev_lifecycle_id IS NULL OR p_item.main_obj_type.rev_lifecycle_id= fnd_api.g_miss_num)
505        AND p_item.main_obj_type.rev_lifecycle_name IS NOT NULL) THEN
506       l_pk_col_name_val_pairs.EXTEND(1);
507       l_pk_col_name_val_pairs(1).name  := 'name';
508       l_pk_col_name_val_pairs(1).value := p_item.main_obj_type.rev_lifecycle_name;
509       x_item.main_obj_type.rev_lifecycle_id  := INV_EBI_ITEM_HELPER.value_to_id(
510                                                  p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
511                                                 ,p_entity_name            => INV_EBI_ITEM_HELPER.G_LIFECYCLE
512                                                );
513        INV_EBI_UTIL.debug_line('STEP 160: REV LIFECYCLE ID: '|| x_item.main_obj_type.rev_lifecycle_id);
514        l_pk_col_name_val_pairs.TRIM(1);
515    END IF;
516    IF ( (p_item.main_obj_type.rev_current_phase_id IS NULL OR p_item.main_obj_type.rev_current_phase_id= fnd_api.g_miss_num)
517      AND (p_item.main_obj_type.rev_current_phase_name IS NOT NULL  AND  x_item.main_obj_type.rev_lifecycle_id IS NOT NULL )
518        )  THEN
519       l_pk_col_name_val_pairs.EXTEND(2);
520       l_pk_col_name_val_pairs(1).name  := 'name';
521       l_pk_col_name_val_pairs(1).value := p_item.main_obj_type.rev_current_phase_name;
522        l_pk_col_name_val_pairs(2).name  := 'parent_structure_id';
523       l_pk_col_name_val_pairs(2).value :=  x_item.main_obj_type.rev_lifecycle_id;
524       x_item.main_obj_type.rev_current_phase_id  := INV_EBI_ITEM_HELPER.value_to_id(
525                                                      p_pk_col_name_val_pairs   => l_pk_col_name_val_pairs
526                                                     ,p_entity_name             => INV_EBI_ITEM_HELPER.G_CURRENT_PHASE
527                                                    );
528        INV_EBI_UTIL.debug_line('STEP 170: REV CURR PHASE ID: '|| x_item.main_obj_type.rev_current_phase_id);
529       l_pk_col_name_val_pairs.TRIM(2);
530    END IF;
531    INV_EBI_UTIL.debug_line('STEP 180:  END INSIDE INV_EBI_ITEM_HELPER.populate_item_ids STATUS:  '|| x_out.output_status.return_status);
532 
533  EXCEPTION
534  WHEN FND_API.g_exc_error THEN
535      x_out.output_status.return_status :=  FND_API.g_ret_sts_error;
536      IF(x_out.output_status.msg_data IS NULL) THEN
537        fnd_msg_pub.count_and_get(
538          p_encoded => fnd_api.g_false
539         ,p_count   => x_out.output_status.msg_count
540         ,p_data    => x_out.output_status.msg_data
541        );
542      END IF;
543  WHEN OTHERS THEN
544    x_out.output_status.return_status := FND_API.g_ret_sts_unexp_error;
545    IF (x_out.output_status.msg_data IS NOT NULL) THEN
546      x_out.output_status.msg_data  :=  x_out.output_status.msg_data||' -> INV_EBI_ITEM_PUB.populate_item_ids ';
547    ELSE
548      x_out.output_status.msg_data  :=  SQLERRM||' INV_EBI_ITEM_PUB.populate_item_ids ';
549    END IF;
550  END populate_item_ids;
551  /************************************************************************************
552  --      API name        : get_default_master_org
553  --      Type            : Public
554  --      Function        :
555  ************************************************************************************/
556  FUNCTION get_default_master_org(
557    p_config  IN inv_ebi_name_value_tbl
558   ) RETURN NUMBER IS
559    l_master_org             NUMBER;
560    l_master_org_count       NUMBER;
561    l_default_master_org_id  NUMBER;
562    l_master_org_code        VARCHAR2(3);
563    CURSOR c_master_org IS
564      SELECT master_organization_id
565      FROM mtl_parameters
566      WHERE organization_id = master_organization_id;
567  BEGIN
568    OPEN c_master_org;
569    LOOP
570      FETCH c_master_org INTO l_master_org;
571      IF (c_master_org%ROWCOUNT > 1) THEN
572        l_master_org_code := INV_EBI_UTIL.get_config_param_value(
573                                   p_config_tbl         =>  p_config
574                                  ,p_config_param_name  => 'Default_Master_Organization_For_Item'
575                                 );
576        l_master_org  :=  get_organization_id(
577                            p_organization_code  =>  l_master_org_code
578                          );
579        EXIT;
580      END IF;
581    END LOOP;
582    CLOSE c_master_org;
583    RETURN l_master_org;
584  EXCEPTION
585    WHEN OTHERS THEN
586      RETURN NULL;
587 END get_default_master_org;
588 
589 
590 procedure check_conversion(p_conv_rate_from_unit1_to_bu1 in number,
591                                              p_conv_rate_from_uom1_uom2 in number ,
592                                              p_convrate_from_unit_to_bu in number,
593                                              p_conv_rate_from_bu1_to_bu2 in number,
594                                              x_return_status OUT NOCOPY  VARCHAR2)
595 is
596 
597 l_length1 NUMBER;
598 l_length2 NUMBER;
599 l_conv_rate_calc NUMBER;
600 l_rate_in_tbl NUMBER;
601 BEGIN
602   l_conv_rate_calc := (((p_conv_rate_from_uom1_uom2 ) * p_convrate_from_unit_to_bu)/p_conv_rate_from_bu1_to_bu2);
603   l_rate_in_tbl := p_conv_rate_from_unit1_to_bu1;
604   SELECT Length(l_rate_in_tbl)-InStr(l_rate_in_tbl,'.') INTO l_length1 FROM dual;
605   SELECT Length(l_conv_rate_calc)-InStr(l_conv_rate_calc,'.') INTO l_length2 FROM dual;
606   IF l_length1<=l_length2 THEN
607     SELECT Round(l_conv_rate_calc,l_length1) INTO l_conv_rate_calc FROM dual;
608   ELSE
609     SELECT Round(l_rate_in_tbl,l_length2) INTO l_rate_in_tbl FROM dual;
610   END IF;
611 
612   if(l_conv_rate_calc = l_rate_in_tbl )	then
613 		x_return_status := FND_API.G_RET_STS_SUCCESS ;
614   else
615     x_return_status := FND_API.G_RET_STS_ERROR;
616 	end if;
617 end check_conversion;
618 
619 FUNCTION validate_uom(p_uom_code IN VARCHAR2)
620 RETURN VARCHAR2
621 IS
622 
623 CURSOR is_uom_valid is
624 SELECT uom_code FROM mtl_units_of_measure WHERE uom_code = p_uom_code;
625 BEGIN
626 OPEN  is_uom_valid;
627 
628 IF ( is_uom_valid%NOTFOUND) THEN
629   RETURN FND_API.G_FALSE;
630 ELSE
631   RETURN FND_API.G_TRUE;
632 END IF;
633 
634 END;
635 
636 
637 /************************************************************************************
638  --     API name        : UOMConversion
639  --     Type            : Private
640  --     Function        :
641  --     This API is used to create uom conversions
642  --
643 ************************************************************************************/
644 
645 
646 procedure UOMConversion(
647 p_uom_input        IN inv_ebi_uom_conv_obj_tbl_type,
648 p_item_id          IN NUMBER,
649 x_msg_data         OUT NOCOPY  VARCHAR2,
650 x_return_status    OUT NOCOPY  VARCHAR2
651 )
652 is
653 
654   uom_conv_details                          inv_ebi_uom_conv_obj_tbl_type;
655   l_class1                                  varchar2(10);
656   l_baseunit1                               varchar2(3);
657   l_conv_rate_from_mu_to_unit               number;
658   l_convrate_from_unit_to_bu                number;
659   l_convrate_from_bu_to_unit                number;
660   uom_from_v_list1_uom_cur                  varchar2(3);
661   conv_rate_from_v_list1_uom_cur            number;
662   l_CONVRATE_FROM_MU_TO_BU                  number;
663   l_ret                                     varchar2(1);
664   l_class2                                  varchar2(10);
665   l_baseunit2                               varchar2(3);
666   l_conv_rate_from_bu2_to_bu1         		  number;
667   l_conv_rate_from_mu1_to_bu2		            number;
668   l_conv_rate_from_mu1_to_unit              number;
669   uom_from_v_list2_uom_cur                  varchar2(3);
670   conv_rate_from_v_list2_uom_cur            number;
671   l_conv_rate_from_unit1_to_bu1             number;
672   flag					                            number;
673   flag1					                            number;
674   msg_count                                 NUMBER;
675 begin
676   uom_conv_details := p_uom_input;
677   x_return_status := FND_API.G_RET_STS_SUCCESS ;
678 for j in 1..uom_conv_details.count loop
679   flag:=0;
680   flag1:=0;
681   IF(validate_uom(uom_conv_details(j).to_uom)=FND_API.G_FALSE) THEN
682       x_return_status := FND_API.G_RET_STS_ERROR;
683       FND_MESSAGE.set_name('INV','INV_EBI_INVALID_UOM');
684       FND_MESSAGE.set_token('UOM', uom_conv_details(j).to_uom);
685       FND_MSG_PUB.add;
686       RAISE fnd_api.g_exc_unexpected_error;
687   END IF;
688   IF(validate_uom(uom_conv_details(j).from_uom)=FND_API.G_FALSE) THEN
689       x_return_status := FND_API.G_RET_STS_ERROR;
690       FND_MESSAGE.set_name('INV','INV_EBI_INVALID_UOM');
691       FND_MESSAGE.set_token('UOM', uom_conv_details(j).from_uom);
692       FND_MSG_PUB.add;
693       RAISE fnd_api.g_exc_unexpected_error;
694   END IF;
695   select UOM_CLASS into l_class1 from MTL_UNITS_OF_MEASURE where UOM_CODE=uom_conv_details(j).to_uom;
696   select UOM_CODE into l_baseunit1 from MTL_UNITS_OF_MEASURE where UOM_CLASS=l_class1 and BASE_UOM_FLAG='Y';
697   if(l_baseunit1 = uom_conv_details(j).to_uom)  then
698     l_convrate_from_unit_to_bu :=1;
699   else
700     inv_convert.inv_um_conversion(uom_conv_details(j).to_uom,l_baseunit1,p_item_id,l_convrate_from_unit_to_bu);
701     if(l_convrate_from_unit_to_bu = -99999) then
702       for l_list1_uom_rec in (select conversion_rate,UOM_CODE  from MTL_UOM_CONVERSIONS where UOM_CLASS = l_class1 and inventory_item_id= 0)
703       loop
704         for i in 1..uom_conv_details.count loop
705           uom_from_v_list1_uom_cur := l_list1_uom_rec.UOM_CODE;
706           if(uom_conv_details(i).from_uom = uom_from_v_list1_uom_cur)	then
707             l_conv_rate_from_mu_to_unit :=uom_conv_details(i).conversion_rate;
708        	    inv_convert.inv_um_conversion(uom_conv_details(i).from_uom,l_baseunit1,p_item_id,l_convrate_from_mu_to_bu);
709 	    l_convrate_from_unit_to_bu :=l_convrate_from_mu_to_bu/l_conv_rate_from_mu_to_unit;
710 	    inv_convert.create_uom_conversion(l_baseunit1,uom_conv_details(i).to_uom,p_item_id,(1/l_convrate_from_unit_to_bu),l_ret);
711 	    flag := 1;
712    	  end if;
713         end loop;
714       end loop;
715       if(flag <> 1) then
716         l_convrate_from_unit_to_bu :=1;
717         inv_convert.create_uom_conversion(l_baseunit1,uom_conv_details(j).to_uom,p_item_id,l_convrate_from_unit_to_bu,l_ret);
718       end if;
719     end if;
720     if (l_ret <> FND_API.g_ret_sts_success) then
721        x_return_status := FND_API.G_RET_STS_ERROR;
722        RAISE fnd_api.g_exc_unexpected_error;
723     END IF;
724   end if;
725   /* step -2 starts from here  */
726   select UOM_CLASS into l_class2 from MTL_UNITS_OF_MEASURE where UOM_CODE=uom_conv_details(j).from_uom;
727   select UOM_CODE into l_baseunit2 from MTL_UNITS_OF_MEASURE where UOM_CLASS= l_class2 and BASE_UOM_FLAG='Y';
728   if(l_class1=l_class2)	then
729     l_baseunit2:= l_baseunit1 ;
730     l_conv_rate_from_bu2_to_bu1 :=1;
731     /*Next calls step-3  */
732   else
733     inv_convert.inv_um_conversion(l_baseunit2,l_baseunit1,p_item_id,l_conv_rate_from_bu2_to_bu1 );
734     if(l_conv_rate_from_bu2_to_bu1 = -99999) then
735       for l_list2_uom_rec in (select conversion_rate,UOM_CODE  from MTL_UOM_CONVERSIONS where UOM_CLASS = l_class2 and inventory_item_id= 0) loop
736         for l in 1..uom_conv_details.Count loop
737     	  uom_from_v_list2_uom_cur := l_list2_uom_rec.UOM_CODE;
738 	  if(uom_conv_details(l).from_uom = uom_from_v_list2_uom_cur)	then
739 	    l_conv_rate_from_mu1_to_unit  := uom_conv_details(l).conversion_rate;
740 	    inv_convert.inv_um_conversion(uom_conv_details(l).from_uom,l_baseunit2,p_item_id,l_conv_rate_from_mu1_to_bu2);
741 	    l_conv_rate_from_bu2_to_bu1 := (l_conv_rate_from_mu1_to_unit * l_convrate_from_unit_to_bu )/l_conv_rate_from_mu1_to_bu2;
742     	    inv_convert.create_uom_conversion(l_baseunit1,l_baseunit2,p_item_id,l_conv_rate_from_bu2_to_bu1,l_ret);
743 	    flag1 :=1;
744  	    /*Next calls step-3  */
745 	  end if ;
746         end loop;
747       end loop;
748       if(flag1 <> 1) then
749         l_conv_rate_from_bu2_to_bu1 :=1;
750         inv_convert.create_uom_conversion(l_baseunit1,l_baseunit2,p_item_id,l_conv_rate_from_bu2_to_bu1,l_ret);
751       end if;
752     end if;
753     if (l_ret <> FND_API.g_ret_sts_success) then
754       x_return_status := FND_API.G_RET_STS_ERROR;
755       RAISE fnd_api.g_exc_unexpected_error;
756     END IF;
757   end if ;
758   /*STEP3*/
759   if (l_baseunit2 = uom_conv_details(j).from_uom) then
760     l_conv_rate_from_unit1_to_bu1 :=1;
761     check_conversion(l_conv_rate_from_unit1_to_bu1,uom_conv_details(j).conversion_rate,l_convrate_from_unit_to_bu,l_conv_rate_from_bu2_to_bu1,l_ret);
762     if( l_ret = 'E') then
763       x_return_status := FND_API.G_RET_STS_ERROR;
764       FND_MESSAGE.set_name('INV','INV_EBI_MISMATCH_CONV_RATE');
765       FND_MESSAGE.set_token('UOM1',uom_conv_details(j).from_uom);
766       FND_MESSAGE.set_token('UOM2',uom_conv_details(j).to_uom);
767       FND_MSG_PUB.add;
768       RAISE fnd_api.g_exc_unexpected_error;
769     end if;
770   else
771     inv_convert.inv_um_conversion(uom_conv_details(j).from_uom,l_baseunit2,p_item_id,l_conv_rate_from_unit1_to_bu1);
772     if(l_conv_rate_from_unit1_to_bu1 = -99999) then
773       l_conv_rate_from_unit1_to_bu1 := ((uom_conv_details(j).conversion_rate) * l_convrate_from_unit_to_bu)/l_conv_rate_from_bu2_to_bu1;
774       inv_convert.create_uom_conversion(l_baseunit2,uom_conv_details(j).from_uom,p_item_id,l_conv_rate_from_unit1_to_bu1,l_ret);
775       if (l_ret <> FND_API.g_ret_sts_success)  then
776         x_return_status := FND_API.G_RET_STS_ERROR;
777         RAISE fnd_api.g_exc_unexpected_error;
778       end if;
779     else
780       check_conversion(l_conv_rate_from_unit1_to_bu1,uom_conv_details(j).conversion_rate,l_convrate_from_unit_to_bu,l_conv_rate_from_bu2_to_bu1,l_ret);
781       if(  l_ret = 'E') THEN
782         x_return_status := FND_API.G_RET_STS_ERROR;
783         FND_MESSAGE.set_name('INV','INV_EBI_MISMATCH_CONV_RATE');
784         FND_MSG_PUB.add;
785         RAISE fnd_api.g_exc_unexpected_error;
786       end if;
787     end if ;
788   end if;
789 end loop;
790 Exception
791   WHEN fnd_api.g_exc_unexpected_error THEN
792     IF x_msg_data IS NULL THEN
793       FND_MSG_PUB.count_and_get(
794         p_encoded => FND_API.g_false
795         ,p_count  => msg_count
796         ,p_data   => x_msg_data
797         );
798     END IF;
799   WHEN OTHERS THEN
800     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
801     IF x_msg_data IS NULL THEN
802       x_msg_data := SQLERRM || ' AT UOMConversion';
803     END IF;
804 end UOMConversion;
805 
806 
807 
808 
809 
810 /************************************************************************************
811  --     API name        : initialize_item
812  --     Type            : Private
813  --     Function        :
814  --     This API is used to
815  --
816 ************************************************************************************/
817 PROCEDURE initialize_item(
818  x_item                 IN OUT NOCOPY inv_ebi_item_obj
819 )
820 IS
821 BEGIN
822 IF (x_item.physical_obj_type IS NULL) THEN
823   x_item.physical_obj_type := inv_ebi_item_physical_obj(
824     fnd_api.g_miss_char,
825     fnd_api.g_miss_num,
826     fnd_api.g_miss_char,
827     fnd_api.g_miss_num,
828     fnd_api.g_miss_char,
829     fnd_api.g_miss_char,
830     fnd_api.g_miss_char,
831     fnd_api.g_miss_num,
832     fnd_api.g_miss_num,
833     fnd_api.g_miss_num,
834     fnd_api.g_miss_num,
835     fnd_api.g_miss_char,
836     fnd_api.g_miss_char,
837     fnd_api.g_miss_char,
838     fnd_api.g_miss_char,
839     fnd_api.g_miss_char,
840     fnd_api.g_miss_num,
841     fnd_api.g_miss_num,
842     fnd_api.g_miss_num
843   );
844 END IF;
845 IF (x_item.inventory_obj_type IS NULL) THEN
846   x_item.inventory_obj_type := inv_ebi_item_inventory_obj(
847     fnd_api.g_miss_char,
848     fnd_api.g_miss_char,
849     fnd_api.g_miss_char,
850     fnd_api.g_miss_char,
851     fnd_api.g_miss_num,
852     fnd_api.g_miss_num,
853     fnd_api.g_miss_num,
854     fnd_api.g_miss_num,
855     fnd_api.g_miss_char,
856     fnd_api.g_miss_num,
857     fnd_api.g_miss_num,
858     fnd_api.g_miss_num,
859     fnd_api.g_miss_char,
860     fnd_api.g_miss_char,
861     fnd_api.g_miss_num,
862     fnd_api.g_miss_char,
863     fnd_api.g_miss_char,
864     fnd_api.g_miss_num,
865     fnd_api.g_miss_num,
866     fnd_api.g_miss_num,
867     fnd_api.g_miss_char,
868     fnd_api.g_miss_char,
869     fnd_api.g_miss_char,
870     fnd_api.g_miss_char,
871     fnd_api.g_miss_char,
872     fnd_api.g_miss_char,
873     fnd_api.g_miss_char,
874     fnd_api.g_miss_char,
875     fnd_api.g_miss_char,
876     fnd_api.g_miss_num,
877     fnd_api.g_miss_char,
878     fnd_api.g_miss_char,
879     fnd_api.g_miss_char,
880     fnd_api.g_miss_char,
881     fnd_api.g_miss_num,
882     fnd_api.g_miss_char,
883     fnd_api.g_miss_num,
884     fnd_api.g_miss_char,
885     fnd_api.g_miss_num,
886     fnd_api.g_miss_char,
887     fnd_api.g_miss_num
888   );
889 END IF;
890 IF (x_item.purchasing_obj_type IS NULL) THEN
891   x_item.purchasing_obj_type := inv_ebi_item_purchasing_obj(
892    fnd_api.g_miss_char,
893    fnd_api.g_miss_char,
894    fnd_api.g_miss_char,
895    fnd_api.g_miss_char,
896    fnd_api.g_miss_char,
897    fnd_api.g_miss_char,
898    fnd_api.g_miss_char,
899    fnd_api.g_miss_char,
900    fnd_api.g_miss_char,
901    fnd_api.g_miss_char,
902    fnd_api.g_miss_char,
903    fnd_api.g_miss_num,
904    fnd_api.g_miss_char,
905    fnd_api.g_miss_num,
906    fnd_api.g_miss_num,
907    fnd_api.g_miss_num,
908    fnd_api.g_miss_num,
909    fnd_api.g_miss_char,
910    fnd_api.g_miss_num,
911    fnd_api.g_miss_num,
912    fnd_api.g_miss_num,
913    fnd_api.g_miss_num,
914    fnd_api.g_miss_num,
915    fnd_api.g_miss_num,
916    fnd_api.g_miss_num,
917    fnd_api.g_miss_char,
918    fnd_api.g_miss_num
919   );
920 END IF;
921 IF (x_item.receiving_obj_type IS NULL) THEN
922   x_item.receiving_obj_type := inv_ebi_item_receiving_obj(
923    fnd_api.g_miss_char,
924    fnd_api.g_miss_num,
925    fnd_api.g_miss_num,
926    fnd_api.g_miss_char,
927    fnd_api.g_miss_char,
928    fnd_api.g_miss_char,
929    fnd_api.g_miss_char,
930    fnd_api.g_miss_num,
931    fnd_api.g_miss_num,
932    fnd_api.g_miss_char
933   );
934 END IF;
935 IF (x_item.gplanning_obj_type IS NULL) THEN
936   x_item.gplanning_obj_type := inv_ebi_item_gplanning_obj(
937    fnd_api.g_miss_num,
938    fnd_api.g_miss_char,
939    fnd_api.g_miss_num,
940    fnd_api.g_miss_num,
941    fnd_api.g_miss_num,
942    fnd_api.g_miss_num,
943    fnd_api.g_miss_num,
944    fnd_api.g_miss_num,
945    fnd_api.g_miss_num,
946    fnd_api.g_miss_num,
947    fnd_api.g_miss_num,
948    fnd_api.g_miss_char,
949    fnd_api.g_miss_num,
950    fnd_api.g_miss_num,
951    fnd_api.g_miss_num,
952    fnd_api.g_miss_num,
953    fnd_api.g_miss_num,
954    fnd_api.g_miss_num,
955    fnd_api.g_miss_num,
956    fnd_api.g_miss_num,
957    fnd_api.g_miss_num,
958    fnd_api.g_miss_num,
959    fnd_api.g_miss_num,
960    fnd_api.g_miss_num,
961    fnd_api.g_miss_num,
962    fnd_api.g_miss_num,
963    fnd_api.g_miss_num,
964    fnd_api.g_miss_num,
965    fnd_api.g_miss_num
966   );
967 END IF;
968 IF (x_item.mrp_obj_type IS NULL) THEN
969   x_item.mrp_obj_type := inv_ebi_item_mrp_obj(
970    fnd_api.g_miss_num,
971    fnd_api.g_miss_num,
972    fnd_api.g_miss_char,
973    fnd_api.g_miss_char,
974    fnd_api.g_miss_num,
975    fnd_api.g_miss_num,
976    fnd_api.g_miss_num,
977    fnd_api.g_miss_char,
978    fnd_api.g_miss_num,
979    fnd_api.g_miss_num,
980    fnd_api.g_miss_num,
981    fnd_api.g_miss_char,
982    fnd_api.g_miss_num,
983    fnd_api.g_miss_num,
984    fnd_api.g_miss_num,
985    fnd_api.g_miss_num,
986    fnd_api.g_miss_num,
987    fnd_api.g_miss_num,
988    fnd_api.g_miss_num,
989    fnd_api.g_miss_char,
990    fnd_api.g_miss_char,
991    fnd_api.g_miss_num,
992    fnd_api.g_miss_num,
993    fnd_api.g_miss_num,
994    fnd_api.g_miss_num,
995    fnd_api.g_miss_num,
996    fnd_api.g_miss_num,
997    fnd_api.g_miss_num,
998    fnd_api.g_miss_num,
999    fnd_api.g_miss_num,
1000    fnd_api.g_miss_num,
1001    fnd_api.g_miss_num,
1002    fnd_api.g_miss_num,
1003    fnd_api.g_miss_num,
1004    fnd_api.g_miss_num,
1005    fnd_api.g_miss_char,
1006    fnd_api.g_miss_num
1007   );
1008 END IF;
1009 IF (x_item.order_obj_type IS NULL) THEN
1010   x_item.order_obj_type := inv_ebi_item_order_obj(
1011    fnd_api.g_miss_char,
1012    fnd_api.g_miss_char,
1013    fnd_api.g_miss_char,
1014    fnd_api.g_miss_char,
1015    fnd_api.g_miss_char,
1016    fnd_api.g_miss_char,
1017    fnd_api.g_miss_char,
1018    fnd_api.g_miss_char,
1019    fnd_api.g_miss_char,
1020    fnd_api.g_miss_num,
1021    fnd_api.g_miss_char,
1022    fnd_api.g_miss_char,
1023    fnd_api.g_miss_num,
1024    fnd_api.g_miss_char,
1025    fnd_api.g_miss_num,
1026    fnd_api.g_miss_char,
1027    fnd_api.g_miss_num,
1028    fnd_api.g_miss_num,
1029    fnd_api.g_miss_num,
1030    fnd_api.g_miss_num,
1031    fnd_api.g_miss_num,
1032    fnd_api.g_miss_char,
1033    fnd_api.g_miss_char,
1034    fnd_api.g_miss_char
1035   );
1036 END IF;
1037 IF (x_item.service_obj_type IS NULL) THEN
1038   x_item.service_obj_type := inv_ebi_item_service_obj(
1039    fnd_api.g_miss_num,
1040    fnd_api.g_miss_num,
1041    fnd_api.g_miss_char,
1042    fnd_api.g_miss_char,
1043    fnd_api.g_miss_num,
1044    fnd_api.g_miss_char,
1045    fnd_api.g_miss_char,
1046    fnd_api.g_miss_char,
1047    fnd_api.g_miss_char,
1048    fnd_api.g_miss_char,
1049    fnd_api.g_miss_char
1050   );
1051 END IF;
1052 IF (x_item.bom_obj_type IS NULL) THEN
1053   x_item.bom_obj_type := inv_ebi_item_bom_obj(
1054    fnd_api.g_miss_char,
1055    fnd_api.g_miss_num,
1056    fnd_api.g_miss_num,
1057    fnd_api.g_miss_char,
1058    fnd_api.g_miss_num,
1059    fnd_api.g_miss_char,
1060    fnd_api.g_miss_char,
1061    fnd_api.g_miss_char,
1062    fnd_api.g_miss_char,
1063    fnd_api.g_miss_char
1064   );
1065 END IF;
1066 IF (x_item.costing_obj_type IS NULL) THEN
1067   x_item.costing_obj_type := inv_ebi_item_costing_obj(
1068    fnd_api.g_miss_char,
1069    fnd_api.g_miss_char,
1070    fnd_api.g_miss_char,
1071    fnd_api.g_miss_num,
1072    fnd_api.g_miss_num,
1073    fnd_api.g_miss_num
1074   );
1075 END IF;
1076 IF (x_item.lead_time_obj_type IS NULL) THEN
1077   x_item.lead_time_obj_type := inv_ebi_item_lead_time_obj(
1078    fnd_api.g_miss_num,
1079    fnd_api.g_miss_num,
1080    fnd_api.g_miss_num,
1081    fnd_api.g_miss_num,
1082    fnd_api.g_miss_num,
1083    fnd_api.g_miss_num,
1084    fnd_api.g_miss_num,
1085    fnd_api.g_miss_num
1086   );
1087 END IF;
1088 IF (x_item.wip_obj_type IS NULL) THEN
1089   x_item.wip_obj_type := inv_ebi_item_wip_obj(
1090    fnd_api.g_miss_char,
1091    fnd_api.g_miss_num,
1092    fnd_api.g_miss_char,
1093    fnd_api.g_miss_num,
1094    fnd_api.g_miss_num,
1095    fnd_api.g_miss_num,
1096    fnd_api.g_miss_num,
1097    fnd_api.g_miss_num
1098   );
1099 END IF;
1100 IF (x_item.invoice_obj_type IS NULL) THEN
1101   x_item.invoice_obj_type := inv_ebi_item_invoice_obj(
1102    fnd_api.g_miss_char,
1103    fnd_api.g_miss_char,
1104    fnd_api.g_miss_num,
1105    fnd_api.g_miss_num,
1106    fnd_api.g_miss_char,
1107    fnd_api.g_miss_num,
1108    fnd_api.g_miss_num
1109   );
1110 END IF;
1111 IF (x_item.web_option_obj_type IS NULL) THEN
1112   x_item.web_option_obj_type := inv_ebi_item_web_option_obj(
1113     fnd_api.g_miss_char,
1114     fnd_api.g_miss_char,
1115     fnd_api.g_miss_char,
1116     fnd_api.g_miss_num
1117   );
1118 END IF;
1119 IF (x_item.asset_obj_type IS NULL) THEN
1120   x_item.asset_obj_type := inv_ebi_item_asset_obj(
1121    fnd_api.g_miss_num,
1122    fnd_api.g_miss_char,
1123    fnd_api.g_miss_char,
1124    fnd_api.g_miss_char,
1125    fnd_api.g_miss_char,
1126    fnd_api.g_miss_char,
1127    fnd_api.g_miss_char,
1128    fnd_api.g_miss_char,
1129    fnd_api.g_miss_char
1130   );
1131 END IF;
1132 IF (x_item.deprecated_obj_type IS NULL) THEN
1133   x_item.deprecated_obj_type := inv_ebi_item_deprecated_obj(
1134    fnd_api.g_miss_char,
1135    fnd_api.g_miss_num,
1136    fnd_api.g_miss_num,
1137    fnd_api.g_miss_char,
1138    fnd_api.g_miss_num,
1139    fnd_api.g_miss_date,
1140    fnd_api.g_miss_num,
1141    fnd_api.g_miss_char,
1142    fnd_api.g_miss_char,
1143    fnd_api.g_miss_char,
1144    fnd_api.g_miss_char,
1145    fnd_api.g_miss_char,
1146    fnd_api.g_miss_char,
1147    fnd_api.g_miss_num,
1148    fnd_api.g_miss_num,
1149    fnd_api.g_miss_num,
1150    fnd_api.g_miss_num,
1151    fnd_api.g_miss_char,
1152    fnd_api.g_miss_num,
1153    fnd_api.g_miss_num,
1154    fnd_api.g_miss_num,
1155    fnd_api.g_miss_date,
1156    fnd_api.g_miss_char,
1157    fnd_api.g_miss_char,
1158    fnd_api.g_miss_char,
1159    fnd_api.g_miss_num,
1160    fnd_api.g_miss_char,
1161    fnd_api.g_miss_num,
1162    fnd_api.g_miss_char,
1163    fnd_api.g_miss_num,
1164    fnd_api.g_miss_num,
1165    fnd_api.g_miss_char,
1166    fnd_api.g_miss_char
1167   );
1168 END IF;
1169 IF (x_item.process_manufacturing_obj IS NULL) THEN
1170   x_item.process_manufacturing_obj  :=  inv_ebi_item_processmfg_obj(
1171     fnd_api.g_miss_char,
1172     fnd_api.g_miss_char,
1173     fnd_api.g_miss_char,
1174     fnd_api.g_miss_char,
1175     fnd_api.g_miss_char,
1176     fnd_api.g_miss_num,
1177     fnd_api.g_miss_char,
1178     fnd_api.g_miss_num,
1179     fnd_api.g_miss_char,
1180     fnd_api.g_miss_char
1181   );
1182  END IF;
1183 END initialize_item;
1184 
1185  /************************************************************************************
1186  --      API name        : is_new_item_request_reqd
1187  --      Type            : Public
1188  --      Function        :
1189  ************************************************************************************/
1190  FUNCTION is_new_item_request_reqd(
1191    p_item_catalog_group_id  IN   NUMBER
1192  ) RETURN VARCHAR IS
1193    l_is_new_item_request_reqd   VARCHAR2(3);
1194  BEGIN
1195    IF (p_item_catalog_group_id IS NOT NULL AND p_item_catalog_group_id <> fnd_api.g_miss_num) THEN
1196      SELECT new_item_request_reqd INTO l_is_new_item_request_reqd
1197      FROM mtl_item_catalog_groups_vl
1198      WHERE item_catalog_group_id = p_item_catalog_group_id;
1199      IF(l_is_new_item_request_reqd = 'Y') THEN
1200        RETURN FND_API.g_true;
1201      ELSE
1202        RETURN FND_API.g_false;
1203      END IF;
1204    END IF;
1205  RETURN FND_API.g_false;
1206  EXCEPTION
1207    WHEN OTHERS THEN
1208      RETURN FND_API.g_false;
1209  END is_new_item_request_reqd;
1210  /************************************************************************************
1211  --      API name        : get_organization_id
1212  --      Type            : Public
1213  --      Function        :
1214  ************************************************************************************/
1215 FUNCTION get_organization_id ( p_organization_code  IN  VARCHAR2 ) RETURN NUMBER
1216 IS
1217   l_org_id    NUMBER;
1218 BEGIN
1219   SELECT  organization_id
1220   INTO    l_org_id
1221   FROM    mtl_parameters
1222   WHERE   organization_code = p_organization_code;
1223   RETURN l_org_id;
1224 EXCEPTION
1225    WHEN OTHERS THEN
1226      RETURN NULL;
1227 END Get_Organization_Id;
1228  /************************************************************************************
1229  --      API name        : get_inventory_item_id
1230  --      Type            : Public
1231  --      Function        :
1232  ************************************************************************************/
1233  FUNCTION get_inventory_item_id(
1234     p_organization_id   IN   NUMBER
1235    ,p_item_number       IN   VARCHAR2
1236  ) RETURN NUMBER IS
1237  l_inventory_item_id  NUMBER;
1238  BEGIN
1239    SELECT inventory_item_id INTO l_inventory_item_id
1240    FROM mtl_system_items_kfv
1241    WHERE concatenated_segments = p_item_number
1242    AND organization_id = p_organization_id;
1243    RETURN l_inventory_item_id;
1244  EXCEPTION
1245    WHEN OTHERS THEN
1246      RETURN FND_API.g_miss_num;
1247  END get_inventory_item_id;
1248  /************************************************************************************
1249   -- API name : get_item_num
1250   -- Type : Private
1251   -- Function :
1252   -- This API is used to
1253   --
1254   ************************************************************************************/
1255 FUNCTION get_item_num(
1256    p_segment1  IN VARCHAR2
1257   ,p_segment2  IN VARCHAR2
1258   ,p_segment3  IN VARCHAR2
1259   ,p_segment4  IN VARCHAR2
1260   ,p_segment5  IN VARCHAR2
1261   ,p_segment6  IN VARCHAR2
1262   ,p_segment7  IN VARCHAR2
1263   ,p_segment8  IN VARCHAR2
1264   ,p_segment9  IN VARCHAR2
1265   ,p_segment10 IN VARCHAR2
1266   ,p_segment11 IN VARCHAR2
1267   ,p_segment12 IN VARCHAR2
1268   ,p_segment13 IN VARCHAR2
1269   ,p_segment14 IN VARCHAR2
1270   ,p_segment15 IN VARCHAR2
1271   ,p_segment16 IN VARCHAR2
1272   ,p_segment17 IN VARCHAR2
1273   ,p_segment18 IN VARCHAR2
1274   ,p_segment19 IN VARCHAR2
1275   ,p_segment20 IN VARCHAR2
1276  ) RETURN VARCHAR2 IS
1277  l_item_number  VARCHAR2(2000);
1278  BEGIN
1279    SELECT DECODE(p_segment1,fnd_api.g_miss_char,'',NULL,'',p_segment1) ||
1280      DECODE(p_segment2,fnd_api.g_miss_char,'',NULL,'',p_segment2) ||
1281      DECODE(p_segment3,fnd_api.g_miss_char,'',NULL,'',p_segment3) ||
1282      DECODE(p_segment4,fnd_api.g_miss_char,'',NULL,'',p_segment4) ||
1283      DECODE(p_segment5,fnd_api.g_miss_char,'',NULL,'',p_segment5) ||
1284      DECODE(p_segment6,fnd_api.g_miss_char,'',NULL,'',p_segment6) ||
1285      DECODE(p_segment7,fnd_api.g_miss_char,'',NULL,'',p_segment7) ||
1286      DECODE(p_segment8,fnd_api.g_miss_char,'',NULL,'',p_segment8) ||
1287      DECODE(p_segment9,fnd_api.g_miss_char,'',NULL,'',p_segment9) ||
1288      DECODE(p_segment10,fnd_api.g_miss_char,'',NULL,'',p_segment10) ||
1289      DECODE(p_segment11,fnd_api.g_miss_char,'',NULL,'',p_segment11) ||
1290      DECODE(p_segment12,fnd_api.g_miss_char,'',NULL,'',p_segment12) ||
1291      DECODE(p_segment13,fnd_api.g_miss_char,'',NULL,'',p_segment13) ||
1292      DECODE(p_segment14,fnd_api.g_miss_char,'',NULL,'',p_segment14) ||
1293      DECODE(p_segment15,fnd_api.g_miss_char,'',NULL,'',p_segment15) ||
1294      DECODE(p_segment16,fnd_api.g_miss_char,'',NULL,'',p_segment16) ||
1295      DECODE(p_segment17,fnd_api.g_miss_char,'',NULL,'',p_segment17) ||
1296      DECODE(p_segment18,fnd_api.g_miss_char,'',NULL,'',p_segment18) ||
1297      DECODE(p_segment19,fnd_api.g_miss_char,'',NULL,'',p_segment19) ||
1298      DECODE(p_segment20,fnd_api.g_miss_char,'',NULL,'',p_segment20)
1299    INTO l_item_number
1300    FROM DUAL;
1301    RETURN l_item_number;
1302  EXCEPTION
1303    WHEN OTHERS THEN
1304       RETURN NULL;
1305  END get_item_num;
1306 /************************************************************************************
1307 --      API name        : is_item_engg
1308 --      Type            : Public
1309 --      Function        :
1310 --
1311 ************************************************************************************/
1312 FUNCTION is_engineering_item(
1313   p_organization_id    IN  NUMBER
1314  ,p_item_number        IN  VARCHAR2
1315 ) RETURN VARCHAR IS
1316    l_item_flag VARCHAR2(1);
1317 BEGIN
1318   SELECT eng_item_flag INTO l_item_flag
1319   FROM mtl_system_items_kfv
1320   WHERE concatenated_segments = NVL(p_item_number,FND_API.G_MISS_CHAR)
1321   AND  organization_id =p_organization_id;
1322   IF(l_item_flag='Y') THEN
1323      RETURN FND_API.g_true;
1324   ELSE
1325      RETURN FND_API.g_false;
1326   END IF;
1327 EXCEPTION
1328   WHEN OTHERS THEN
1329     RETURN FND_API.g_false;
1330 END is_engineering_item;
1331 /************************************************************************************
1332  --      API name        : is_item_exists
1333  --      Type            : Public
1334  --      Function        :
1335  --
1336  --Check if the concatenated segment numbers have to be unique or Is the
1337  --below condition sufficient
1338  --some information
1339  ************************************************************************************/
1340  FUNCTION is_item_exists (
1341    p_organization_id IN  NUMBER
1342   ,p_item_number     IN  VARCHAR2
1343  ) RETURN VARCHAR IS
1344    l_item_count NUMBER;
1345  BEGIN
1346    SELECT COUNT(1) INTO l_item_count
1347    FROM mtl_system_items_kfv
1348    WHERE concatenated_segments = p_item_number
1349    AND  organization_id = p_organization_id;
1350    IF(l_item_count=0) THEN
1351         RETURN FND_API.g_false;
1352    ELSE
1353         RETURN FND_API.g_true;
1354    END IF;
1355  EXCEPTION
1356    WHEN OTHERS THEN
1357      RETURN FND_API.g_false;
1358  END is_item_exists;
1359 
1360  /************************************************************************************
1361   --      API name        : is_revision_exists
1362   --      Type            : private
1363   --      Function        :
1364   --
1365   --Check if the revision is already created
1366   ************************************************************************************/
1367 
1368  FUNCTION is_revision_exists (
1369     p_organization_id       IN  NUMBER
1370    ,p_item_number           IN  VARCHAR2
1371    ,p_revision              IN  VARCHAR2
1372  ) RETURN VARCHAR IS
1373 
1374    l_count  NUMBER;
1375   BEGIN
1376 
1377     SELECT COUNT(1) INTO l_count
1378     FROM
1379       mtl_item_revisions_b mir ,
1380       mtl_system_items_kfv   msi
1381     WHERE
1382       msi.concatenated_segments = p_item_number  AND
1383       msi.organization_id = p_organization_id    AND
1384       msi.inventory_item_id = mir.inventory_item_id AND
1385       msi.organization_id = mir.organization_id AND
1386       mir.revision  = UPPER(p_revision);
1387 
1388     IF(l_count=0) THEN
1389          RETURN FND_API.g_false;
1390     ELSE
1391          RETURN FND_API.g_true;
1392     END IF;
1393   EXCEPTION
1394     WHEN OTHERS THEN
1395       RETURN FND_API.g_false;
1396  END is_revision_exists;
1397 
1398 
1399  /************************************************************************************
1400   --      API name        : get_desc_gen_method
1401   --      Type            : private
1402   --      Function        : Return description generation method of ICC
1403 ************************************************************************************/
1404 FUNCTION get_desc_gen_method(p_item_catalog_group_id NUMBER)
1405 RETURN VARCHAR2
1406 IS
1407   l_parent_catalog_group_id NUMBER;
1408   t_parent_catalog_group_id NUMBER;
1409   l_item_desc_gen_method    VARCHAR2(2);
1410 BEGIN
1411   SELECT item_desc_gen_method, parent_catalog_group_id
1412   INTO l_item_desc_gen_method, l_parent_catalog_group_id
1413   FROM MTL_ITEM_CATALOG_GROUPS_VL
1414   WHERE item_catalog_group_id = p_item_catalog_group_id;
1415   IF UPPER(l_item_desc_gen_method)='I' THEN
1416     WHILE UPPER(l_item_desc_gen_method) = 'I' LOOP
1417       SELECT item_desc_gen_method,
1418              parent_catalog_group_id
1419       INTO   l_item_desc_gen_method,
1420              t_parent_catalog_group_id
1421       FROM   mtl_item_catalog_groups_vl
1422       WHERE  item_catalog_group_id = l_parent_catalog_group_id;
1423       EXIT WHEN t_parent_catalog_group_id IS NULL;
1424       l_parent_catalog_group_id := t_parent_catalog_group_id;
1425     END LOOP;
1426   END IF;
1427   RETURN l_item_desc_gen_method;
1428   EXCEPTION
1429     WHEN OTHERS THEN
1430       RETURN NULL;
1431 END;
1432 
1433 /************************************************************************************
1434 --    API name        : Get_Default_Lifecycle_Phase
1435 --    Type            : Private
1436 --    Function        :
1437 --    This API is used to
1438 --
1439 ************************************************************************************/
1440 
1441 FUNCTION Get_Default_Lifecycle_Phase ( p_lifecycle_id  IN NUMBER)
1442 RETURN NUMBER IS
1443 
1444   CURSOR c_Get_Lifecyle_Phase (
1445            p_lifecycle_id       NUMBER
1446          ) IS
1447      SELECT pev_p.proj_element_id
1448      FROM   pa_proj_element_versions pev_l
1449            ,pa_lifecycle_usages plu
1450            ,pa_proj_element_versions pev_p
1451            ,pa_proj_elements ppe_p
1452            ,pa_project_statuses pc
1453      WHERE  pev_l.object_type = 'PA_STRUCTURES'
1454        AND  pev_l.proj_element_id = p_lifecycle_id
1455        AND  pev_l.project_id = 0
1456        AND  plu.usage_type = 'PRODUCTS'
1457        AND  plu.lifecycle_id = pev_l.proj_element_id
1458        AND  pev_l.element_version_id = pev_p.parent_structure_version_id
1459        AND  pev_p.proj_element_id = ppe_p.proj_element_id
1460        AND  ppe_p.phase_code = pc.project_status_code
1461        AND  (pc.start_date_active IS NULL OR pc.start_date_active <= SYSDATE)
1462        AND  (pc.end_date_active IS NULL OR pc.end_date_active     >= SYSDATE)
1463      ORDER BY pev_p.display_sequence ;
1464 
1465   l_phase_id NUMBER;
1466 
1467 BEGIN
1468     IF(c_Get_Lifecyle_Phase % ISOPEN) THEN
1469       CLOSE c_Get_Lifecyle_Phase;
1470     END IF;
1471 
1472     OPEN c_Get_Lifecyle_Phase ( p_lifecycle_id     => p_lifecycle_id );
1473 
1474     FETCH c_Get_Lifecyle_Phase INTO l_phase_id;
1475 
1476     IF ( c_Get_Lifecyle_Phase%NOTFOUND ) THEN
1477        CLOSE c_Get_Lifecyle_Phase;
1478        Return 0;
1479     END IF;
1480 
1481     CLOSE c_Get_Lifecyle_Phase;
1482 
1483     RETURN l_phase_id;
1484 
1485     EXCEPTION WHEN OTHERS THEN
1486       IF(c_Get_Lifecyle_Phase % ISOPEN) THEN
1487          CLOSE c_Get_Lifecyle_Phase;
1488       END IF;
1489       Return 0;
1490 
1491 END Get_Default_Lifecycle_Phase;
1492 
1493 /************************************************************************************
1494 --    API name        : Get_Default_Item_Status_Code
1495 --    Type            : Private
1496 --    Function        :
1497 --    This API is used to get default inventory item status code
1498 --    Added for bug 9688120
1499 ************************************************************************************/
1500 FUNCTION Get_Default_Item_Status_Code(p_phase_id  IN NUMBER)
1501 RETURN VARCHAR2 IS
1502 
1503 l_status_code EGO_LCPHASE_ITEM_STATUS.ITEM_STATUS_CODE%TYPE;
1504 
1505 BEGIN
1506 
1507    SELECT status.ITEM_STATUS_CODE INTO l_status_code
1508    FROM EGO_LCPHASE_ITEM_STATUS status
1509        ,PA_EGO_PHASES_V phases
1510    WHERE phases.PROJ_ELEMENT_ID = p_phase_id
1511    AND status.PHASE_CODE = phases.PHASE_CODE
1512    AND DEFAULT_FLAG = 'Y';
1513 
1514    RETURN l_status_code;
1515 
1516    EXCEPTION WHEN OTHERS THEN
1517     RETURN NULL;
1518 
1519  END Get_Default_Item_Status_Code;
1520 
1521 
1522 /************************************************************************************
1523 --    API name        : process_item_pvt
1524 --    Type            : Public
1525 --    Function        :
1526 --    This API is used to
1527 --
1528 ************************************************************************************/
1529  PROCEDURE process_item_pvt(
1530    p_commit              IN  VARCHAR2 := FND_API.g_false
1531   ,p_operation           IN  VARCHAR2
1532   ,p_item                IN  inv_ebi_item_obj
1533   ,x_out                 OUT NOCOPY inv_ebi_item_output_obj
1534  )
1535  IS
1536    l_transaction_type          VARCHAR2(20);
1537    l_item_exits                VARCHAR2(3);
1538    l_item                      inv_ebi_item_obj;
1539    l_xref_id                   NUMBER;
1540    l_item_number               VARCHAR2(2000);
1541    l_description               VARCHAR2(240);
1542    l_item_desc_gen_method      VARCHAR2(3) := 'U';
1543    l_is_master_org             VARCHAR2(3) := 'N';
1544    l_is_new_item_request_reqd  VARCHAR2(3) := 'N';
1545    l_eng_item_flag             VARCHAR2(3);
1546    l_output_status             inv_ebi_output_status;
1547    l_count                     NUMBER := 0;
1548    l_master_org                NUMBER;
1549    l_pk_col_name_val_pairs     INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl;
1550    l_apply_template_update     VARCHAR2(2000);
1551    l_validate_revised_itm_rev  VARCHAR2(1);
1552    l_revised_item_exists       NUMBER := 0;
1553    l_effectivity_date          DATE;
1554    l_source_system_id          NUMBER;
1555    l_assign_def_temp_from_icc  VARCHAR2(1) := FND_API.G_FALSE;
1556    l_curr_lifecycle_id         NUMBER;
1557    l_curr_phase_id             NUMBER;
1558    l_curr_item_status_code     MTL_SYSTEM_ITEMS_B.inventory_item_status_code%TYPE;
1559    /* Start of Bug 13370136 */ -- ramukher
1560    l_nls_language              FND_LANGUAGES.nls_language%TYPE;
1561    l_orig_nls_lang             FND_LANGUAGES.nls_language%TYPE;
1562    /*End of Bug 13370136 */ -- ramukher
1563    CURSOR c_item_description(
1564      p_item_number      IN  VARCHAR2
1565     ,p_organization_id  IN  NUMBER
1566    ) IS
1567     SELECT description
1568     FROM   mtl_system_items_kfv
1569     WHERE  concatenated_segments = p_item_number
1570     AND    organization_id  = p_organization_id;
1571 
1572     -- Added for bug 10416391
1573     CURSOR c_get_item_curr_data(
1574                  cp_item_id IN  NUMBER,
1575                  cp_org_id  IN  NUMBER
1576              ) IS
1577 
1578       SELECT lifecycle_id ,current_phase_id ,inventory_item_status_code
1579       FROM   mtl_system_items_b
1580       WHERE  inventory_item_id = cp_item_id
1581       AND    organization_id   = cp_org_id;
1582 
1583   /* CURSOR c_get_default_phase_id (cp_lifecycle_id IN  NUMBER) IS
1584        SELECT pev_p.PROJ_ELEMENT_ID
1585          FROM PA_PROJ_ELEMENT_VERSIONS pev_l,
1586               PA_LIFECYCLE_USAGES plu,
1587               PA_PROJ_ELEMENT_VERSIONS pev_p,
1588               PA_PROJ_ELEMENTS PPE_P,
1589               PA_PROJECT_STATUSES pc
1590         WHERE pev_l.OBJECT_TYPE = 'PA_STRUCTURES'
1591           AND pev_l.PROJ_ELEMENT_ID = cp_lifecycle_id
1592           AND pev_l.PROJECT_ID = 0
1593           AND plu.USAGE_TYPE = 'PRODUCTS'
1594           AND plu.LIFECYCLE_ID = pev_l.PROJ_ELEMENT_ID
1595           AND pev_l.ELEMENT_VERSION_ID = pev_p.PARENT_STRUCTURE_VERSION_ID
1596           AND pev_p.PROJ_ELEMENT_ID = ppe_p.PROJ_ELEMENT_ID
1597           AND ppe_p.PHASE_CODE = pc.PROJECT_STATUS_CODE
1598           AND (pc.START_DATE_ACTIVE IS NULL OR pc.START_DATE_ACTIVE <= SYSDATE)
1599           AND (pc.END_DATE_ACTIVE IS NULL OR pc.END_DATE_ACTIVE >= SYSDATE)
1600      ORDER BY pev_p.DISPLAY_SEQUENCE;*/
1601 
1602    /* Start of Bug 13370136 */ -- ramukher
1603    CURSOR c_get_nls_language (p_language_code IN VARCHAR2) IS
1604      SELECT nls_language
1605      FROM FND_LANGUAGES
1606      WHERE LANGUAGE_CODE = p_language_code;
1607    /*End of Bug 13370136 */ -- ramukher
1608 
1609  BEGIN
1610    SAVEPOINT inv_ebi_pvt_item_save_pnt;
1611    l_item := p_item;
1612    INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.process_item_pvt ');
1613    l_output_status := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
1614    x_out           := inv_ebi_item_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,NULL,NULL,NULL,NULL,NULL);
1615    l_item_number   := l_item.main_obj_type.item_number;
1616    l_pk_col_name_val_pairs  :=    INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
1617    IF(l_item_number IS NULL OR l_item_number = fnd_api.g_miss_char) THEN
1618      l_item_number := get_item_num(
1619          p_segment1  => l_item.main_obj_type.segment1
1620         ,p_segment2  => l_item.main_obj_type.segment2
1621         ,p_segment3  => l_item.main_obj_type.segment3
1622         ,p_segment4  => l_item.main_obj_type.segment4
1623         ,p_segment5  => l_item.main_obj_type.segment5
1624         ,p_segment6  => l_item.main_obj_type.segment6
1625         ,p_segment7  => l_item.main_obj_type.segment7
1626         ,p_segment8  => l_item.main_obj_type.segment8
1627         ,p_segment9  => l_item.main_obj_type.segment9
1628         ,p_segment10 => l_item.main_obj_type.segment10
1629         ,p_segment11 => l_item.main_obj_type.segment11
1630         ,p_segment12 => l_item.main_obj_type.segment12
1631         ,p_segment13 => l_item.main_obj_type.segment13
1632         ,p_segment14 => l_item.main_obj_type.segment14
1633         ,p_segment15 => l_item.main_obj_type.segment15
1634         ,p_segment16 => l_item.main_obj_type.segment16
1635         ,p_segment17 => l_item.main_obj_type.segment17
1636         ,p_segment18 => l_item.main_obj_type.segment18
1637         ,p_segment19 => l_item.main_obj_type.segment19
1638         ,p_segment20 => l_item.main_obj_type.segment20
1639      );
1640    END IF;
1641    IF l_item_number IS NULL THEN
1642      FND_MESSAGE.set_name('INV','INV_EBI_ITEM_NUM_NULL');
1643      FND_MSG_PUB.add;
1644      RAISE FND_API.g_exc_error;
1645    END IF;
1646    IF p_operation = INV_EBI_ITEM_PUB.g_otype_sync THEN
1647      IF( is_item_exists (
1648            p_organization_id    =>   l_item.main_obj_type.organization_id
1649           ,p_item_number        =>   l_item_number
1650            ) = FND_API.g_true ) THEN
1651        l_transaction_type := INV_EBI_ITEM_PUB.g_otype_update;
1652      ELSE
1653        l_transaction_type               := INV_EBI_ITEM_PUB.g_otype_create;
1654        l_item.main_obj_type.item_number := l_item_number;
1655      END IF;
1656    ELSE
1657      l_transaction_type               := p_operation;
1658      l_item.main_obj_type.item_number := l_item_number;
1659    END IF;
1660    initialize_item(x_item => l_item);
1661 
1662    l_validate_revised_itm_rev := INV_EBI_UTIL.get_config_param_value(
1663                                    p_config_tbl         =>  l_item.name_value_tbl
1664                                   ,p_config_param_name  => 'VALIDATE_REVISED_ITEM_REVISION'
1665                                 );
1666    IF (l_validate_revised_itm_rev = fnd_api.g_true ) AND (l_item.main_obj_type.revision_code IS NOT NULL)
1667       AND (l_item.main_obj_type.revision_code <> fnd_api.g_miss_char)
1668      AND ( is_item_exists (
1669            p_organization_id    =>   l_item.main_obj_type.organization_id
1670           ,p_item_number        =>   l_item_number
1671            ) = FND_API.g_true )
1672    THEN
1673      IF( l_item.main_obj_type.inventory_item_id IS NULL) THEN
1674         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
1675         l_pk_col_name_val_pairs.EXTEND(2);
1676         l_pk_col_name_val_pairs(1).name   := 'organization_id';
1677         l_pk_col_name_val_pairs(1).value  := l_item.main_obj_type.organization_id;
1678         l_pk_col_name_val_pairs(2).name   := 'concatenated_segments';
1679         l_pk_col_name_val_pairs(2).value  := l_item.main_obj_type.item_number;
1680         l_item.main_obj_type.inventory_item_id :=  INV_EBI_ITEM_HELPER.value_to_id (
1681                                                          p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
1682                                                         ,p_entity_name=> INV_EBI_ITEM_HELPER.G_INVENTORY_ITEM
1683                                                  );
1684      END IF;
1685 
1686         SELECT COUNT(1) into l_revised_item_exists
1687         FROM mtl_item_revisions_b ir
1688         WHERE ir.inventory_item_id = l_item.main_obj_type.inventory_item_id
1689         AND ir.organization_id = l_item.main_obj_type.organization_id
1690         AND ir.revision = l_item.main_obj_type.revision_code
1691         AND(ir.effectivity_date IN
1692                            (SELECT first_value(ir2.effectivity_date) over(ORDER BY ir2.effectivity_date DESC)
1693                            FROM mtl_item_revisions_b ir2
1694                            WHERE ir2.organization_id = ir.organization_id
1695                            AND ir2.inventory_item_id = ir.inventory_item_id
1696                            AND ir2.effectivity_date <= sysdate
1697                            AND ir2.implementation_date IS NOT NULL)
1698         OR ir.effectivity_date > sysdate);
1699         IF l_revised_item_exists = 0 then
1700           FND_MESSAGE.set_name('INV','INV_EBI_INVALD_REV_CODE');
1701           FND_MESSAGE.set_token('ITEM_NUMBER', l_item_number);
1702           FND_MESSAGE.set_token('REVISION_CODE',l_item.main_obj_type.revision_code);
1703           FND_MESSAGE.set_token('ORG_CODE',l_item.main_obj_type.organization_code);
1704           FND_MSG_PUB.add;
1705           RAISE FND_API.g_exc_error;
1706         END IF;
1707    END IF;
1708 
1709    -- Bug 9709331
1710    l_assign_def_temp_from_icc := INV_EBI_UTIL.get_config_param_value(
1711                                            p_config_tbl         =>  l_item.name_value_tbl
1712                                           ,p_config_param_name  => 'ASSIGN_DEFAULT_TEMPLATE_FROM_ICC'
1713                                          );
1714 
1715    IF(l_assign_def_temp_from_icc  = fnd_api.g_true) THEN
1716 
1717      IF(l_item.main_obj_type.template_id IS NULL
1718         OR  l_item.main_obj_type.template_id = fnd_api.g_miss_num
1719         AND l_item.main_obj_type.item_catalog_group_id IS NOT NULL
1720         AND l_item.main_obj_type.item_catalog_group_id <> fnd_api.g_miss_num)THEN
1721 
1722         SELECT default_template_id ,default_template_name INTO l_item.main_obj_type.template_id,l_item.main_obj_type.template_name
1723         FROM ego_catalog_groups_v
1724         WHERE catalog_group_id = l_item.main_obj_type.item_catalog_group_id;
1725 
1726      END IF;
1727 
1728    END IF;
1729 
1730    IF ((l_item.main_obj_type.apply_template IS NULL OR
1731         l_item.main_obj_type.apply_template = fnd_api.g_miss_char) AND
1732         (l_item.main_obj_type.template_id IS NOT NULL OR
1733         l_item.main_obj_type.template_name IS NOT NULL)) THEN
1734 
1735      l_item.main_obj_type.apply_template :='ALL';
1736 
1737    END IF;
1738 
1739    IF(l_transaction_type = INV_EBI_ITEM_PUB.g_otype_create ) THEN
1740 
1741      IF(l_item.main_obj_type.description IS NULL OR l_item.main_obj_type.description = fnd_api.g_miss_char) THEN
1742 
1743        IF(l_item.main_obj_type.item_catalog_group_id IS NOT NULL AND l_item.main_obj_type.item_catalog_group_id <> fnd_api.g_miss_num) THEN
1744          l_item_desc_gen_method := get_desc_gen_method(l_item.main_obj_type.item_catalog_group_id);
1745        END IF;
1746 
1747        IF(l_item_desc_gen_method = 'U' OR l_item_desc_gen_method IS NULL OR l_item.main_obj_type.item_catalog_group_id IS NULL OR l_item.main_obj_type.item_catalog_group_id = fnd_api.g_miss_num) THEN
1748          l_is_master_org := INV_EBI_UTIL.is_master_org(l_item.main_obj_type.organization_id);
1749 
1750          IF(l_is_master_org = fnd_api.g_true) THEN
1751            l_item.main_obj_type.description := l_item_number;
1752          ELSE
1753            l_master_org := INV_EBI_UTIL.get_master_organization(
1754                                         p_organization_id =>  l_item.main_obj_type.organization_id
1755                               );
1756            OPEN c_item_description(
1757                    p_item_number       => l_item_number
1758                   ,p_organization_id   => l_master_org
1759            );
1760            FETCH c_item_description INTO l_description;
1761 
1762            IF(c_item_description%NOTFOUND) THEN
1763              FND_MESSAGE.set_name('INV','INV_EBI_ITEM_NO_MASTER_ORG');
1764              FND_MESSAGE.set_token('ITEM_NUMBER', l_item_number);
1765              FND_MSG_PUB.add;
1766              RAISE FND_API.g_exc_error;
1767            END IF;
1768 
1769            l_item.main_obj_type.description  := l_description;
1770            CLOSE c_item_description;
1771 
1772          END IF;
1773 
1774        END IF;
1775 
1776      END IF;
1777 
1778     /* Start of Bug 8299853 FDD says if NIR is required item should be created as eng_item and
1779        approval status as unapproved. If NIR is not required item gets created with approval status as NULL by default,which is considered
1780        as approved ,and we take care of creating it with eng_item_flag='N' if eng_item_flag is NULL.*/
1781 
1782 
1783      IF(is_new_item_request_reqd(
1784                 p_item_catalog_group_id => l_item.main_obj_type.item_catalog_group_id
1785           ) = fnd_api.g_true ) THEN
1786 
1787        IF(l_item.bom_obj_type.eng_item_flag ='N' ) THEN
1788 
1789          FND_MESSAGE.set_name('INV','INV_EBI_ICC_CONFG_FOR_NIR');
1790          FND_MESSAGE.set_token('ITEM',l_item.main_obj_type.item_number);
1791          FND_MESSAGE.set_token('ITEM_CATALOG',  l_item.main_obj_type.item_catalog_group_code);
1792          FND_MSG_PUB.add;
1793          RAISE FND_API.g_exc_error;
1794 
1795        ELSIF(l_item.bom_obj_type.eng_item_flag = fnd_api.g_miss_char OR l_item.bom_obj_type.eng_item_flag IS NULL ) THEN
1796 
1797          l_item.bom_obj_type.eng_item_flag := 'Y';
1798          l_item.deprecated_obj_type.approval_status := 'N';
1799 
1800        ELSE
1801 
1802          l_item.deprecated_obj_type.approval_status := 'N';
1803 
1804        END IF;
1805      ELSE
1806 
1807        IF(l_item.bom_obj_type.eng_item_flag = fnd_api.g_miss_char OR l_item.bom_obj_type.eng_item_flag IS NULL ) THEN
1808           l_item.bom_obj_type.eng_item_flag := 'N';
1809        END IF;
1810      END IF;--End of Bug 8299853
1811 
1812      --Start of Bug 10416391
1813      IF(l_item.main_obj_type.lifecycle_id IS NOT NULL AND
1814         l_item.main_obj_type.lifecycle_id <> fnd_api.g_miss_num
1815         AND (l_item.main_obj_type.current_phase_id IS NULL OR
1816              l_item.main_obj_type.current_phase_id = fnd_api.g_miss_num)
1817        ) THEN
1818 
1819          l_item.main_obj_type.current_phase_id  := Get_Default_Lifecycle_Phase(
1820                                                       p_lifecycle_id =>  l_item.main_obj_type.lifecycle_id
1821                                                    );
1822 
1823      END IF;
1824      -- End of Bug 10416391
1825 
1826      --Start of Bug 9688120
1827      --If incoming item status code is null get default item status code for the incoming phase
1828      IF((l_item.main_obj_type.inventory_item_status_code IS NULL OR
1829          l_item.main_obj_type.inventory_item_status_code = fnd_api.g_miss_char)
1830          AND l_item.main_obj_type.current_phase_id IS NOT NULL
1831          AND l_item.main_obj_type.current_phase_id <> fnd_api.g_miss_num
1832         ) THEN
1833 
1834         l_item.main_obj_type.inventory_item_status_code := Get_Default_Item_Status_Code(
1835                                                               p_phase_id  => l_item.main_obj_type.current_phase_id
1836                                                            );
1837       END IF;
1838       --End of Bug 9688120
1839 
1840    END IF;
1841 
1842 
1843    IF(l_transaction_type = INV_EBI_ITEM_PUB.g_otype_update ) THEN
1844      l_apply_template_update := INV_EBI_UTIL.get_config_param_value(
1845                                    p_config_tbl         =>  l_item.name_value_tbl
1846                                   ,p_config_param_name  => 'TEMPLATE_FOR_ITEM_UPDATE_ALLOWED'
1847                                 );
1848      IF( UPPER(l_apply_template_update ) = fnd_api.g_false ) THEN
1849        l_item.main_obj_type.template_id  := fnd_api.g_miss_num;
1850        l_item.main_obj_type.template_name := fnd_api.g_miss_char;
1851      END IF;
1852 
1853 
1854 
1855      --Bug 7601514 :  To create new revision coming in while updating item only if incoming revision is not null
1856      IF(l_item.main_obj_type.revision_code IS NOT NULL AND l_item.main_obj_type.revision_code <> fnd_api.g_miss_char) THEN
1857        --Bug 7412466 : To create new revision coming in while updating item
1858        IF( is_revision_exists (p_organization_id    =>  l_item.main_obj_type.organization_id
1859                               ,p_item_number        =>  l_item.main_obj_type.item_number
1860                               ,p_revision           =>  l_item.main_obj_type.revision_code
1861                               ) =  FND_API.g_false )      THEN
1862          IF( l_item.main_obj_type.effectivity_date IS NULL OR
1863              l_item.main_obj_type.effectivity_date = fnd_api.g_miss_date ) THEN
1864              l_effectivity_date := SYSDATE;
1865          ELSE
1866            l_effectivity_date := l_item.main_obj_type.effectivity_date;
1867          END IF;
1868 	 INV_EBI_UTIL.debug_line('STEP 20: BEFORE CALLING EGO_ITEM_PUB.Process_Item_Revision ');
1869          INV_EBI_UTIL.debug_line('STEP 30: ITEM NUMBER '|| l_item.main_obj_type.item_number || 'ORG CODE: '|| l_item.main_obj_type.organization_code);
1870          EGO_ITEM_PUB.Process_Item_Revision(
1871             p_api_version              => 1.0
1872            ,p_init_msg_list            => FND_API.g_false
1873            ,p_commit                   => FND_API.g_false
1874            ,p_transaction_type         => INV_EBI_ITEM_PUB.g_otype_create
1875            ,p_inventory_item_id        => l_item.main_obj_type.inventory_item_id
1876            ,p_item_number              => l_item.main_obj_type.item_number
1877            ,p_organization_id          => l_item.main_obj_type.organization_id
1878            ,p_organization_code        => l_item.main_obj_type.organization_code
1879            ,p_revision                 => l_item.main_obj_type.revision_code
1880            ,p_description              => l_item.main_obj_type.revision_description
1881            ,p_effectivity_date         => l_effectivity_date
1882            ,p_revision_label           => l_item.main_obj_type.revision_label
1883            ,p_revision_reason          => l_item.main_obj_type.revision_reason  --This parameter is added in inv_ebi_item_main_obj
1884            ,p_lifecycle_id             => l_item.main_obj_type.rev_lifecycle_id
1885            ,p_current_phase_id         => l_item.main_obj_type.rev_current_phase_id
1886            ,p_template_id              => l_item.main_obj_type.template_id
1887            ,p_template_name            => l_item.main_obj_type.template_name
1888            ,p_attribute_category       => l_item.custom_obj_type.rev_attribute_category
1889            ,p_attribute1               => l_item.custom_obj_type.rev_attribute1
1890            ,p_attribute2               => l_item.custom_obj_type.rev_attribute2
1891            ,p_attribute3               => l_item.custom_obj_type.rev_attribute3
1892            ,p_attribute4               => l_item.custom_obj_type.rev_attribute4
1893            ,p_attribute5               => l_item.custom_obj_type.rev_attribute5
1894            ,p_attribute6               => l_item.custom_obj_type.rev_attribute6
1895            ,p_attribute7               => l_item.custom_obj_type.rev_attribute7
1896            ,p_attribute8               => l_item.custom_obj_type.rev_attribute8
1897            ,p_attribute9               => l_item.custom_obj_type.rev_attribute9
1898            ,p_attribute10              => l_item.custom_obj_type.rev_attribute10
1899            ,p_attribute11              => l_item.custom_obj_type.rev_attribute11
1900            ,p_attribute12              => l_item.custom_obj_type.rev_attribute12
1901            ,p_attribute13              => l_item.custom_obj_type.rev_attribute13
1902            ,p_attribute14              => l_item.custom_obj_type.rev_attribute14
1903            ,p_attribute15              => l_item.custom_obj_type.rev_attribute15
1904            ,x_return_status            => x_out.output_status.return_status
1905            ,x_msg_count                => x_out.output_status.msg_count
1906            ,x_msg_data                 => x_out.output_status.msg_data
1907            );
1908 	 INV_EBI_UTIL.debug_line('STEP 40: AFTER CALLING EGO_ITEM_PUB.Process_Item_Revision STATUS: '|| x_out.output_status.return_status);
1909          IF (x_out.output_status.return_status NOT IN (FND_API.g_ret_sts_success,'0')) THEN
1910            x_out.output_status.msg_data := x_out.output_status.msg_data || ' -> Item Number:' || l_item.main_obj_type.item_number || ' -> Org Code: ' || l_item.main_obj_type.organization_code;
1911            RAISE  FND_API.g_exc_unexpected_error;
1912          END IF;
1913        END IF;  -- Bug 7412466
1914      END IF;    -- End of Bug 7601514
1915 
1916      -- Start of Bug 10416391
1917      -- In update case if incoming lifecycle id is not null and lifecycle phase id null
1918      -- then if current life cycle id from data base is null,default lifecycle phase to
1919      -- default phase of the lifecycle.
1920      IF(l_item.main_obj_type.lifecycle_id IS NOT NULL AND
1921         l_item.main_obj_type.lifecycle_id <> fnd_api.g_miss_num
1922         AND (l_item.main_obj_type.current_phase_id IS NULL OR
1923              l_item.main_obj_type.current_phase_id = fnd_api.g_miss_num)
1924        ) THEN
1925 
1926          IF(c_get_item_curr_data % ISOPEN ) THEN
1927            CLOSE c_get_item_curr_data;
1928          END IF;
1929 
1930          OPEN c_get_item_curr_data(
1931                 cp_item_id  => l_item.main_obj_type.inventory_item_id
1932                ,cp_org_id   => l_item.main_obj_type.organization_id
1933             );
1934 
1935          FETCH c_get_item_curr_data INTO l_curr_lifecycle_id,l_curr_phase_id,l_curr_item_status_code;
1936 
1937          CLOSE c_get_item_curr_data;
1938          IF(nvl(l_curr_lifecycle_id,fnd_api.g_miss_num) <> l_item.main_obj_type.lifecycle_id) THEN
1939 
1940 	   l_item.main_obj_type.current_phase_id  := Get_Default_Lifecycle_Phase(
1941 	                                                p_lifecycle_id =>  l_item.main_obj_type.lifecycle_id
1942                                                    );
1943          ELSIF(l_curr_phase_id IS NOT NULL) THEN
1944             --If curr lifecycle id and incmong lifecycle id are same
1945 	    --then if current phase id is not null and if incoming phase is null populate curr phase id to
1946             --incoming value.
1947            l_item.main_obj_type.current_phase_id  := l_curr_phase_id;
1948 
1949          END IF;
1950      END IF;
1951      -- End of Bug 10416391
1952 
1953      --Start of Bug 9688120
1954      IF((l_item.main_obj_type.inventory_item_status_code IS NULL OR
1955         l_item.main_obj_type.inventory_item_status_code = fnd_api.g_miss_char)
1956         AND l_item.main_obj_type.current_phase_id IS NOT NULL
1957         AND l_item.main_obj_type.current_phase_id <> fnd_api.g_miss_num
1958      ) THEN
1959 
1960         IF(c_get_item_curr_data % ISOPEN ) THEN
1961           CLOSE c_get_item_curr_data;
1962         END IF;
1963 
1964         OPEN c_get_item_curr_data(
1965                cp_item_id  => l_item.main_obj_type.inventory_item_id
1966               ,cp_org_id   => l_item.main_obj_type.organization_id
1967            );
1968 
1969         FETCH c_get_item_curr_data INTO l_curr_lifecycle_id,l_curr_phase_id,l_curr_item_status_code;
1970 
1971         CLOSE c_get_item_curr_data;
1972 
1973         IF(nvl(l_curr_phase_id,fnd_api.g_miss_num) <> l_item.main_obj_type.current_phase_id ) THEN
1974 
1975           l_item.main_obj_type.inventory_item_status_code := Get_Default_Item_Status_Code(
1976                                                               p_phase_id  => l_item.main_obj_type.current_phase_id
1977                                                            );
1978         ELSE
1979           IF(l_curr_item_status_code IS NOT NULL) THEN
1980 
1981              l_item.main_obj_type.inventory_item_status_code  := l_curr_item_status_code;
1982           END IF;
1983         END IF;
1984      END IF;
1985      --End of Bug 9688120
1986 
1987    END IF;
1988 
1989    INV_EBI_UTIL.debug_line('STEP 50: BEFORE CALLING EGO_ITEM_PUB.process_item');
1990 
1991    -- Following code is commented out for Bug 13618550 ,it may cause issue to PLM4P PIP
1992    /*
1993    IF( (l_item.main_obj_type.tracking_quantity_ind = 'P' OR l_item.main_obj_type.tracking_quantity_ind IS NULL OR l_item.main_obj_type.tracking_quantity_ind = fnd_api.g_miss_char) AND
1994       (l_item.main_obj_type.secondary_default_ind IS NULL OR l_item.main_obj_type.secondary_default_ind = fnd_api.g_miss_char)) THEN
1995       l_item.main_obj_type.secondary_default_ind := fnd_api.g_miss_char;
1996    END IF;
1997    */
1998 
1999    INV_EBI_UTIL.debug_line('STEP 60:In INV_EBI_ITEM_HELPER.process_item_pvt,before calling EGO_ITEM_PUB.process_item');
2000    INV_EBI_UTIL.debug_line('STEP 70: Engineering_date before defaulting to fnd_api.g_miss_date ' || to_char(l_item.deprecated_obj_type.engineering_date,'YYYY/MM/DD HH24:MI:SS'));
2001    --OAAdapter is not setting engineering_date to fnd_api.g_miss_date on Cummins soa env.
2002    --as a temporary fix we are hardcoding the value.
2003    l_item.deprecated_obj_type.engineering_date  := fnd_api.g_miss_date; -- added for bug 11884886
2004    INV_EBI_UTIL.debug_line('STEP 80:Before calling EGO_ITEM_PUB.process_item after defaulting to fnd_api.g_miss_date ' || to_char(l_item.deprecated_obj_type.engineering_date,'YYYY/MM/DD HH24:MI:SS'));
2005    EGO_ITEM_PUB.process_item(
2006       p_api_version                  =>   1.0
2007      ,p_init_msg_list                =>   l_item.main_obj_type.init_msg_list
2008      ,p_commit                       =>   FND_API.g_false
2009      ,p_transaction_type             =>   l_transaction_type
2010      ,p_language_code                =>   l_item.main_obj_type.language_code
2011      ,p_template_id                  =>   l_item.main_obj_type.template_id
2012      ,p_template_name                =>   l_item.main_obj_type.template_name
2013      ,p_copy_inventory_item_id       =>   l_item.main_obj_type.copy_inventory_item_id
2014      ,p_inventory_item_id            =>   l_item.main_obj_type.inventory_item_id
2015      ,p_organization_id              =>   l_item.main_obj_type.organization_id
2016      ,p_master_organization_id       =>   l_item.main_obj_type.master_organization_id
2017      ,p_description                  =>   l_item.main_obj_type.description
2018      ,p_long_description             =>   l_item.main_obj_type.long_description
2019      ,p_primary_uom_code             =>   l_item.main_obj_type.primary_uom_code
2020      ,p_primary_unit_of_measure      =>   l_item.main_obj_type.primary_unit_of_measure
2021      ,p_item_type                    =>   l_item.main_obj_type.item_type
2022      ,p_inventory_item_status_code   =>   l_item.main_obj_type.inventory_item_status_code
2023      ,p_allowed_units_lookup_code    =>   l_item.main_obj_type.allowed_units_lookup_code
2024      ,p_item_catalog_group_id        =>   l_item.main_obj_type.item_catalog_group_id
2025      ,p_catalog_status_flag          =>   l_item.deprecated_obj_type.catalog_status_flag
2026      ,p_inventory_item_flag          =>   l_item.inventory_obj_type.inventory_item_flag
2027      ,p_stock_enabled_flag           =>   l_item.inventory_obj_type.stock_enabled_flag
2028      ,p_mtl_transactions_enabled_fl  =>   l_item.inventory_obj_type.mtl_transactions_enabled_fl
2029      ,p_check_shortages_flag         =>   l_item.inventory_obj_type.check_shortages_flag
2030      ,p_revision_qty_control_code    =>   l_item.inventory_obj_type.revision_qty_control_code
2031      ,p_reservable_type              =>   l_item.inventory_obj_type.reservable_type
2032      ,p_shelf_life_code              =>   l_item.inventory_obj_type.shelf_life_code
2033      ,p_shelf_life_days              =>   l_item.inventory_obj_type.shelf_life_days
2034      ,p_cycle_count_enabled_flag     =>   l_item.inventory_obj_type.cycle_count_enabled_flag
2035      ,p_negative_measurement_error   =>   l_item.inventory_obj_type.negative_measurement_error
2036      ,p_positive_measurement_error   =>   l_item.inventory_obj_type.positive_measurement_error
2037      ,p_lot_control_code             =>   l_item.inventory_obj_type.lot_control_code
2038      ,p_auto_lot_alpha_prefix        =>   l_item.inventory_obj_type.auto_lot_alpha_prefix
2039      ,p_start_auto_lot_number        =>   l_item.inventory_obj_type.start_auto_lot_number
2040      ,p_serial_number_control_code   =>   l_item.inventory_obj_type.serial_number_control_code
2041      ,p_auto_serial_alpha_prefix     =>   l_item.inventory_obj_type.auto_serial_alpha_prefix
2042      ,p_start_auto_serial_number     =>   l_item.inventory_obj_type.start_auto_serial_number
2043      ,p_location_control_code        =>   l_item.inventory_obj_type.location_control_code
2044      ,p_restrict_subinventories_cod  =>   l_item.inventory_obj_type.restrict_subinventories_cod
2045      ,p_restrict_locators_code       =>   l_item.inventory_obj_type.restrict_locators_code
2046      ,p_bom_enabled_flag             =>   l_item.bom_obj_type.bom_enabled_flag
2047      ,p_bom_item_type                =>   l_item.bom_obj_type.bom_item_type
2048      ,p_base_item_id                 =>   l_item.bom_obj_type.base_item_id
2049      ,p_effectivity_control          =>   l_item.bom_obj_type.effectivity_control
2050      ,p_eng_item_flag                =>   l_item.bom_obj_type.eng_item_flag
2051      ,p_engineering_ecn_code         =>   l_item.deprecated_obj_type.engineering_ecn_code
2052      ,p_engineering_item_id          =>   l_item.deprecated_obj_type.engineering_item_id
2053      ,p_engineering_date             =>   l_item.deprecated_obj_type.engineering_date
2054      ,p_product_family_item_id       =>   l_item.deprecated_obj_type.product_family_item_id
2055      ,p_auto_created_config_flag     =>   l_item.bom_obj_type.auto_created_config_flag
2056      ,p_model_config_clause_name     =>   l_item.deprecated_obj_type.model_config_clause_name
2057      ,p_new_revision_code            =>   l_item.deprecated_obj_type.new_revision_code
2058      ,p_costing_enabled_flag         =>   l_item.costing_obj_type.costing_enabled_flag
2059      ,p_inventory_asset_flag         =>   l_item.costing_obj_type.inventory_asset_flag
2060      ,p_default_include_in_rollup_f  =>   l_item.costing_obj_type.default_include_in_rollup_f
2061      ,p_cost_of_sales_account        =>   l_item.costing_obj_type.cost_of_sales_account
2062      ,p_std_lot_size                 =>   l_item.costing_obj_type.std_lot_size
2063      ,p_purchasing_item_flag         =>   l_item.purchasing_obj_type.purchasing_item_flag
2064      ,p_purchasing_enabled_flag      =>   l_item.purchasing_obj_type.purchasing_enabled_flag
2065      ,p_must_use_approved_vendor_fl  =>   l_item.purchasing_obj_type.must_use_approved_vendor_fl
2066      ,p_allow_item_desc_update_flag  =>   l_item.purchasing_obj_type.allow_item_desc_update_flag
2067      ,p_rfq_required_flag            =>   l_item.purchasing_obj_type.rfq_required_flag
2068      ,p_outside_operation_flag       =>   l_item.purchasing_obj_type.outside_operation_flag
2069      ,p_outside_operation_uom_type   =>   l_item.purchasing_obj_type.outside_operation_uom_type
2070      ,p_taxable_flag                 =>   l_item.purchasing_obj_type.taxable_flag
2071      ,p_purchasing_tax_code          =>   l_item.purchasing_obj_type.purchasing_tax_code
2072      ,p_receipt_required_flag        =>   l_item.purchasing_obj_type.receipt_required_flag
2073      ,p_inspection_required_flag     =>   l_item.purchasing_obj_type.inspection_required_flag
2074      ,p_buyer_id                     =>   l_item.purchasing_obj_type.buyer_id
2075      ,p_unit_of_issue                =>   l_item.purchasing_obj_type.unit_of_issue
2076      ,p_receive_close_tolerance      =>   l_item.purchasing_obj_type.receive_close_tolerance
2077      ,p_invoice_close_tolerance      =>   l_item.purchasing_obj_type.invoice_close_tolerance
2078      ,p_un_number_id                 =>   l_item.purchasing_obj_type.un_number_id
2079      ,p_hazard_class_id              =>   l_item.purchasing_obj_type.hazard_class_id
2080      ,p_list_price_per_unit          =>   l_item.purchasing_obj_type.list_price_per_unit
2081      ,p_market_price                 =>   l_item.purchasing_obj_type.market_price
2082      ,p_price_tolerance_percent      =>   l_item.purchasing_obj_type.price_tolerance_percent
2083      ,p_rounding_factor              =>   l_item.purchasing_obj_type.rounding_factor
2084      ,p_encumbrance_account          =>   l_item.purchasing_obj_type.encumbrance_account
2085      ,p_expense_account              =>   l_item.purchasing_obj_type.expense_account
2086      ,p_expense_billable_flag        =>   l_item.deprecated_obj_type.expense_billable_flag
2087      ,p_asset_category_id            =>   l_item.purchasing_obj_type.asset_category_id
2088      ,p_receipt_days_exception_code  =>   l_item.receiving_obj_type.receipt_days_exception_code
2089      ,p_days_early_receipt_allowed   =>   l_item.receiving_obj_type.days_early_receipt_allowed
2090      ,p_days_late_receipt_allowed    =>   l_item.receiving_obj_type.days_late_receipt_allowed
2091      ,p_allow_substitute_receipts_f  =>   l_item.receiving_obj_type.allow_substitute_receipts_f
2092      ,p_allow_unordered_receipts_fl  =>   l_item.receiving_obj_type.allow_unordered_receipts_fl
2093      ,p_allow_express_delivery_flag  =>   l_item.receiving_obj_type.allow_express_delivery_flag
2094      ,p_qty_rcv_exception_code       =>   l_item.receiving_obj_type.qty_rcv_exception_code
2095      ,p_qty_rcv_tolerance            =>   l_item.receiving_obj_type.qty_rcv_tolerance
2096      ,p_receiving_routing_id         =>   l_item.receiving_obj_type.receiving_routing_id
2097      ,p_enforce_ship_to_location_c   =>   l_item.receiving_obj_type.enforce_ship_to_location_c
2098      ,p_weight_uom_code              =>   l_item.physical_obj_type.weight_uom_code
2099      ,p_unit_weight                  =>   l_item.physical_obj_type.unit_weight
2100      ,p_volume_uom_code              =>   l_item.physical_obj_type.volume_uom_code
2101      ,p_unit_volume                  =>   l_item.physical_obj_type.unit_volume
2102      ,p_container_item_flag          =>   l_item.physical_obj_type.container_item_flag
2103      ,p_vehicle_item_flag            =>   l_item.physical_obj_type.vehicle_item_flag
2104      ,p_container_type_code          =>   l_item.physical_obj_type.container_type_code
2105      ,p_internal_volume              =>   l_item.physical_obj_type.internal_volume
2106      ,p_maximum_load_weight          =>   l_item.physical_obj_type.maximum_load_weight
2107      ,p_minimum_fill_percent         =>   l_item.physical_obj_type.minimum_fill_percent
2108      ,p_inventory_planning_code      =>   l_item.gplanning_obj_type.inventory_planning_code
2109      ,p_planner_code                 =>   l_item.gplanning_obj_type.planner_code
2110      ,p_planning_make_buy_code       =>   l_item.gplanning_obj_type.planning_make_buy_code
2111      ,p_min_minmax_quantity          =>   l_item.gplanning_obj_type.min_minmax_quantity
2112      ,p_max_minmax_quantity          =>   l_item.gplanning_obj_type.max_minmax_quantity
2113      ,p_minimum_order_quantity       =>   l_item.gplanning_obj_type.minimum_order_quantity
2114      ,p_maximum_order_quantity       =>   l_item.gplanning_obj_type.maximum_order_quantity
2115      ,p_order_cost                   =>   l_item.gplanning_obj_type.order_cost
2116      ,p_carrying_cost                =>   l_item.gplanning_obj_type.carrying_cost
2117      ,p_source_type                  =>   l_item.gplanning_obj_type.source_type
2118      ,p_source_organization_id       =>   l_item.gplanning_obj_type.source_organization_id
2119      ,p_source_subinventory          =>   l_item.gplanning_obj_type.source_subinventory
2120      ,p_mrp_safety_stock_code        =>   l_item.gplanning_obj_type.mrp_safety_stock_code
2121      ,p_safety_stock_bucket_days     =>   l_item.gplanning_obj_type.safety_stock_bucket_days
2122      ,p_mrp_safety_stock_percent     =>   l_item.gplanning_obj_type.mrp_safety_stock_percent
2123      ,p_fixed_order_quantity         =>   l_item.gplanning_obj_type.fixed_order_quantity
2124      ,p_fixed_days_supply            =>   l_item.gplanning_obj_type.fixed_days_supply
2125      ,p_fixed_lot_multiplier         =>   l_item.gplanning_obj_type.fixed_lot_multiplier
2126      ,p_mrp_planning_code            =>   l_item.mrp_obj_type.mrp_planning_code
2127      ,p_ato_forecast_control         =>   l_item.mrp_obj_type.ato_forecast_control
2128      ,p_planning_exception_set       =>   l_item.mrp_obj_type.planning_exception_set
2129      ,p_end_assembly_pegging_flag    =>   l_item.mrp_obj_type.end_assembly_pegging_flag
2130      ,p_shrinkage_rate               =>   l_item.mrp_obj_type.shrinkage_rate
2131      ,p_rounding_control_type        =>   l_item.mrp_obj_type.rounding_control_type
2132      ,p_acceptable_early_days        =>   l_item.mrp_obj_type.acceptable_early_days
2133      ,p_repetitive_planning_flag     =>   l_item.mrp_obj_type.repetitive_planning_flag
2134      ,p_overrun_percentage           =>   l_item.mrp_obj_type.overrun_percentage
2135      ,p_acceptable_rate_increase     =>   l_item.mrp_obj_type.acceptable_rate_increase
2136      ,p_acceptable_rate_decrease     =>   l_item.mrp_obj_type.acceptable_rate_decrease
2137      ,p_mrp_calculate_atp_flag       =>   l_item.mrp_obj_type.mrp_calculate_atp_flag
2138      ,p_auto_reduce_mps              =>   l_item.mrp_obj_type.auto_reduce_mps
2139      ,p_planning_time_fence_code     =>   l_item.mrp_obj_type.planning_time_fence_code
2140      ,p_planning_time_fence_days     =>   l_item.mrp_obj_type.planning_time_fence_days
2141      ,p_demand_time_fence_code       =>   l_item.mrp_obj_type.demand_time_fence_code
2142      ,p_demand_time_fence_days       =>   l_item.mrp_obj_type.demand_time_fence_days
2143      ,p_release_time_fence_code      =>   l_item.mrp_obj_type.release_time_fence_code
2144      ,p_release_time_fence_days      =>   l_item.mrp_obj_type.release_time_fence_days
2145      ,p_preprocessing_lead_time      =>   l_item.lead_time_obj_type.preprocessing_lead_time
2146      ,p_full_lead_time               =>   l_item.lead_time_obj_type.full_lead_time
2147      ,p_postprocessing_lead_time     =>   l_item.lead_time_obj_type.postprocessing_lead_time
2148      ,p_fixed_lead_time              =>   l_item.lead_time_obj_type.fixed_lead_time
2149      ,p_variable_lead_time           =>   l_item.lead_time_obj_type.variable_lead_time
2150      ,p_cum_manufacturing_lead_time  =>   l_item.lead_time_obj_type.cum_manufacturing_lead_time
2151      ,p_cumulative_total_lead_time   =>   l_item.lead_time_obj_type.cumulative_total_lead_time
2152      ,p_lead_time_lot_size           =>   l_item.lead_time_obj_type.lead_time_lot_size
2153      ,p_build_in_wip_flag            =>   l_item.wip_obj_type.build_in_wip_flag
2154      ,p_wip_supply_type              =>   l_item.wip_obj_type.wip_supply_type
2155      ,p_wip_supply_subinventory      =>   l_item.wip_obj_type.wip_supply_subinventory
2156      ,p_wip_supply_locator_id        =>   l_item.wip_obj_type.wip_supply_locator_id
2157      ,p_overcompletion_tolerance_ty  =>   l_item.wip_obj_type.overcompletion_tolerance_ty
2158      ,p_overcompletion_tolerance_va  =>   l_item.wip_obj_type.overcompletion_tolerance_va
2159      ,p_customer_order_flag          =>   l_item.order_obj_type.customer_order_flag
2160      ,p_customer_order_enabled_flag  =>   l_item.order_obj_type.customer_order_enabled_flag
2161      ,p_shippable_item_flag          =>   l_item.order_obj_type.shippable_item_flag
2162      ,p_internal_order_flag          =>   l_item.order_obj_type.internal_order_flag
2163      ,p_internal_order_enabled_flag  =>   l_item.order_obj_type.internal_order_enabled_flag
2164      ,p_so_transactions_flag         =>   l_item.order_obj_type.so_transactions_flag
2165      ,p_pick_components_flag         =>   l_item.order_obj_type.pick_components_flag
2166      ,p_atp_flag                     =>   l_item.order_obj_type.atp_flag
2167      ,p_replenish_to_order_flag      =>   l_item.order_obj_type.replenish_to_order_flag
2168      ,p_atp_rule_id                  =>   l_item.order_obj_type.atp_rule_id
2169      ,p_atp_components_flag          =>   l_item.order_obj_type.atp_components_flag
2170      ,p_ship_model_complete_flag     =>   l_item.order_obj_type.ship_model_complete_flag
2171      ,p_picking_rule_id              =>   l_item.order_obj_type.picking_rule_id
2172      ,p_collateral_flag              =>   l_item.order_obj_type.collateral_flag
2173      ,p_default_shipping_org         =>   l_item.order_obj_type.default_shipping_org
2174      ,p_returnable_flag              =>   l_item.order_obj_type.returnable_flag
2175      ,p_return_inspection_requireme  =>   l_item.order_obj_type.return_inspection_requireme
2176      ,p_over_shipment_tolerance      =>   l_item.order_obj_type.over_shipment_tolerance
2177      ,p_under_shipment_tolerance     =>   l_item.order_obj_type.under_shipment_tolerance
2178      ,p_over_return_tolerance        =>   l_item.order_obj_type.over_return_tolerance
2179      ,p_under_return_tolerance       =>   l_item.order_obj_type.under_return_tolerance
2180      ,p_invoiceable_item_flag        =>   l_item.invoice_obj_type.invoiceable_item_flag
2181      ,p_invoice_enabled_flag         =>   l_item.invoice_obj_type.invoice_enabled_flag
2182      ,p_accounting_rule_id           =>   l_item.invoice_obj_type.accounting_rule_id
2183      ,p_invoicing_rule_id            =>   l_item.invoice_obj_type.invoicing_rule_id
2184      ,p_tax_code                     =>   l_item.invoice_obj_type.tax_code
2185      ,p_sales_account                =>   l_item.invoice_obj_type.sales_account
2186      ,p_payment_terms_id             =>   l_item.invoice_obj_type.payment_terms_id
2187      ,p_coverage_schedule_id         =>   l_item.service_obj_type.coverage_schedule_id
2188      ,p_service_duration             =>   l_item.service_obj_type.service_duration
2189      ,p_service_duration_period_cod  =>   l_item.service_obj_type.service_duration_period_cod
2190      ,p_serviceable_product_flag     =>   l_item.service_obj_type.serviceable_product_flag
2191      ,p_service_starting_delay       =>   l_item.service_obj_type.service_starting_delay
2192      ,p_material_billable_flag       =>   l_item.service_obj_type.material_billable_flag
2193      ,p_serviceable_component_flag   =>   l_item.deprecated_obj_type.serviceable_component_flag
2194      ,p_preventive_maintenance_flag  =>   l_item.deprecated_obj_type.preventive_maintenance_flag
2195      ,p_prorate_service_flag         =>   l_item.deprecated_obj_type.prorate_service_flag
2196      ,p_serviceable_item_class_id    =>   l_item.deprecated_obj_type.serviceable_item_class_id
2197      ,p_base_warranty_service_id     =>   l_item.deprecated_obj_type.base_warranty_service_id
2198      ,p_warranty_vendor_id           =>   l_item.deprecated_obj_type.warranty_vendor_id
2199      ,p_max_warranty_amount          =>   l_item.deprecated_obj_type.max_warranty_amount
2200      ,p_response_time_period_code    =>   l_item.deprecated_obj_type.response_time_period_code
2201      ,p_response_time_value          =>   l_item.deprecated_obj_type.response_time_value
2202      ,p_primary_specialist_id        =>   l_item.deprecated_obj_type.primary_specialist_id
2203      ,p_secondary_specialist_id      =>   l_item.deprecated_obj_type.secondary_specialist_id
2204      ,p_wh_update_date               =>   l_item.deprecated_obj_type.wh_update_date
2205      ,p_equipment_type               =>   l_item.physical_obj_type.equipment_type
2206      ,p_recovered_part_disp_code     =>   l_item.service_obj_type.recovered_part_disp_code
2207      ,p_defect_tracking_on_flag      =>   l_item.service_obj_type.defect_tracking_on_flag
2208      ,p_event_flag                   =>   l_item.physical_obj_type.event_flag
2209      ,p_electronic_flag              =>   l_item.physical_obj_type.electronic_flag
2210      ,p_downloadable_flag            =>   l_item.physical_obj_type.downloadable_flag
2211      ,p_vol_discount_exempt_flag     =>   l_item.deprecated_obj_type.vol_discount_exempt_flag
2212      ,p_coupon_exempt_flag           =>   l_item.deprecated_obj_type.coupon_exempt_flag
2213      ,p_comms_nl_trackable_flag      =>   l_item.service_obj_type.comms_nl_trackable_flag
2214      ,p_asset_creation_code          =>   l_item.service_obj_type.asset_creation_code
2215      ,p_comms_activation_reqd_flag   =>   l_item.deprecated_obj_type.comms_activation_reqd_flag
2216      ,p_orderable_on_web_flag        =>   l_item.web_option_obj_type.orderable_on_web_flag
2217      ,p_back_orderable_flag          =>   l_item.web_option_obj_type.back_orderable_flag
2218      ,p_web_status                   =>   l_item.web_option_obj_type.web_status
2219      ,p_indivisible_flag             =>   l_item.physical_obj_type.indivisible_flag
2220      ,p_dimension_uom_code           =>   l_item.physical_obj_type.dimension_uom_code
2221      ,p_unit_length                  =>   l_item.physical_obj_type.unit_length
2222      ,p_unit_width                   =>   l_item.physical_obj_type.unit_width
2223      ,p_unit_height                  =>   l_item.physical_obj_type.unit_height
2224      ,p_bulk_picked_flag             =>   l_item.inventory_obj_type.bulk_picked_flag
2225      ,p_lot_status_enabled           =>   l_item.inventory_obj_type.lot_status_enabled
2226      ,p_default_lot_status_id        =>   l_item.deprecated_obj_type.default_lot_status_id
2227      ,p_serial_status_enabled        =>   l_item.inventory_obj_type.serial_status_enabled
2228      ,p_default_serial_status_id     =>   l_item.deprecated_obj_type.default_serial_status_id
2229      ,p_lot_split_enabled            =>   l_item.inventory_obj_type.lot_split_enabled
2230      ,p_lot_merge_enabled            =>   l_item.inventory_obj_type.lot_merge_enabled
2231      ,p_inventory_carry_penalty      =>   l_item.wip_obj_type.inventory_carry_penalty
2232      ,p_operation_slack_penalty      =>   l_item.wip_obj_type.operation_slack_penalty
2233      ,p_financing_allowed_flag       =>   l_item.order_obj_type.financing_allowed_flag
2234      ,p_eam_item_type                =>   l_item.asset_obj_type.eam_item_type
2235      ,p_eam_activity_type_code       =>   l_item.asset_obj_type.eam_activity_type_code
2236      ,p_eam_activity_cause_code      =>   l_item.asset_obj_type.eam_activity_cause_code
2237      ,p_eam_act_notification_flag    =>   l_item.asset_obj_type.eam_act_notification_flag
2238      ,p_eam_act_shutdown_status      =>   l_item.asset_obj_type.eam_act_shutdown_status
2239      ,p_dual_uom_control             =>   l_item.deprecated_obj_type.dual_uom_control
2240      ,p_secondary_uom_code           =>   l_item.main_obj_type.secondary_uom_code
2241      ,p_dual_uom_deviation_high      =>   l_item.main_obj_type.dual_uom_deviation_high
2242      ,p_dual_uom_deviation_low       =>   l_item.main_obj_type.dual_uom_deviation_low
2243      ,p_contract_item_type_code      =>   l_item.asset_obj_type.contract_item_type_code
2244      ,p_subscription_depend_flag     =>   l_item.deprecated_obj_type.subscription_depend_flag
2245      ,p_serv_req_enabled_code        =>   l_item.asset_obj_type.serv_req_enabled_code
2246      ,p_serv_billing_enabled_flag    =>   l_item.asset_obj_type.serv_billing_enabled_flag
2247      ,p_serv_importance_level        =>   l_item.deprecated_obj_type.serv_importance_level
2248      ,p_planned_inv_point_flag       =>   l_item.mrp_obj_type.planned_inv_point_flag
2249      ,p_lot_translate_enabled        =>   l_item.inventory_obj_type.lot_translate_enabled
2250      ,p_default_so_source_type       =>   l_item.order_obj_type.default_so_source_type
2251      ,p_create_supply_flag           =>   l_item.mrp_obj_type.create_supply_flag
2252      ,p_substitution_window_code     =>   l_item.mrp_obj_type.substitution_window_code
2253      ,p_substitution_window_days     =>   l_item.mrp_obj_type.substitution_window_days
2254      ,p_ib_item_instance_class       =>   l_item.service_obj_type.ib_item_instance_class
2255      ,p_config_model_type            =>   l_item.bom_obj_type.config_model_type
2256      ,p_lot_substitution_enabled     =>   l_item.inventory_obj_type.lot_substitution_enabled
2257      ,p_minimum_license_quantity     =>   l_item.web_option_obj_type.minimum_license_quantity
2258      ,p_eam_activity_source_code     =>   l_item.asset_obj_type.eam_activity_source_code
2259      ,p_approval_status              =>   l_item.deprecated_obj_type.approval_status
2260      ,p_tracking_quantity_ind        =>   l_item.main_obj_type.tracking_quantity_ind
2261      ,p_ont_pricing_qty_source       =>   l_item.main_obj_type.ont_pricing_qty_source
2262      ,p_secondary_default_ind        =>   l_item.main_obj_type.secondary_default_ind
2263      ,p_option_specific_sourced      =>   l_item.deprecated_obj_type.option_specific_sourced
2264      ,p_vmi_minimum_units            =>   l_item.gplanning_obj_type.vmi_minimum_units
2265      ,p_vmi_minimum_days             =>   l_item.gplanning_obj_type.vmi_minimum_days
2266      ,p_vmi_maximum_units            =>   l_item.gplanning_obj_type.vmi_maximum_units
2267      ,p_vmi_maximum_days             =>   l_item.gplanning_obj_type.vmi_maximum_days
2268      ,p_vmi_fixed_order_quantity     =>   l_item.gplanning_obj_type.vmi_fixed_order_quantity
2269      ,p_so_authorization_flag        =>   l_item.gplanning_obj_type.so_authorization_flag
2270      ,p_consigned_flag               =>   l_item.gplanning_obj_type.consigned_flag
2271      ,p_asn_autoexpire_flag          =>   l_item.gplanning_obj_type.asn_autoexpire_flag
2272      ,p_vmi_forecast_type            =>   l_item.gplanning_obj_type.vmi_forecast_type
2273      ,p_forecast_horizon             =>   l_item.gplanning_obj_type.forecast_horizon
2274      ,p_exclude_from_budget_flag     =>   l_item.mrp_obj_type.exclude_from_budget_flag
2275      ,p_days_tgt_inv_supply          =>   l_item.mrp_obj_type.days_tgt_inv_supply
2276      ,p_days_tgt_inv_window          =>   l_item.mrp_obj_type.days_tgt_inv_window
2277      ,p_days_max_inv_supply          =>   l_item.mrp_obj_type.days_max_inv_supply
2278      ,p_days_max_inv_window          =>   l_item.mrp_obj_type.days_max_inv_window
2279      ,p_drp_planned_flag             =>   l_item.mrp_obj_type.drp_planned_flag
2280      ,p_critical_component_flag      =>   l_item.mrp_obj_type.critical_component_flag
2281      ,p_continous_transfer           =>   l_item.mrp_obj_type.continous_transfer
2282      ,p_convergence                  =>   l_item.mrp_obj_type.convergence
2283      ,p_divergence                   =>   l_item.mrp_obj_type.divergence
2284      ,p_config_orgs                  =>   l_item.bom_obj_type.config_orgs
2285      ,p_config_match                 =>   l_item.bom_obj_type.config_match
2286      ,p_item_number                  =>   l_item.main_obj_type.item_number
2287      ,p_segment1                     =>   l_item.main_obj_type.segment1
2288      ,p_segment2                     =>   l_item.main_obj_type.segment2
2289      ,p_segment3                     =>   l_item.main_obj_type.segment3
2290      ,p_segment4                     =>   l_item.main_obj_type.segment4
2291      ,p_segment5                     =>   l_item.main_obj_type.segment5
2292      ,p_segment6                     =>   l_item.main_obj_type.segment6
2293      ,p_segment7                     =>   l_item.main_obj_type.segment7
2294      ,p_segment8                     =>   l_item.main_obj_type.segment8
2295      ,p_segment9                     =>   l_item.main_obj_type.segment9
2296      ,p_segment10                    =>   l_item.main_obj_type.segment10
2297      ,p_segment11                    =>   l_item.main_obj_type.segment11
2298      ,p_segment12                    =>   l_item.main_obj_type.segment12
2299      ,p_segment13                    =>   l_item.main_obj_type.segment13
2300      ,p_segment14                    =>   l_item.main_obj_type.segment14
2301      ,p_segment15                    =>   l_item.main_obj_type.segment15
2302      ,p_segment16                    =>   l_item.main_obj_type.segment16
2303      ,p_segment17                    =>   l_item.main_obj_type.segment17
2304      ,p_segment18                    =>   l_item.main_obj_type.segment18
2305      ,p_segment19                    =>   l_item.main_obj_type.segment19
2306      ,p_segment20                    =>   l_item.main_obj_type.segment20
2307      ,p_summary_flag                 =>   l_item.main_obj_type.summary_flag
2308      ,p_enabled_flag                 =>   l_item.main_obj_type.enabled_flag
2309      ,p_start_date_active            =>   l_item.main_obj_type.start_date_active
2310      ,p_end_date_active              =>   l_item.main_obj_type.end_date_active
2311      ,p_attribute_category           =>   l_item.custom_obj_type.attribute_category
2312      ,p_attribute1                   =>   l_item.custom_obj_type.attribute1
2313      ,p_attribute2                   =>   l_item.custom_obj_type.attribute2
2314      ,p_attribute3                   =>   l_item.custom_obj_type.attribute3
2315      ,p_attribute4                   =>   l_item.custom_obj_type.attribute4
2316      ,p_attribute5                   =>   l_item.custom_obj_type.attribute5
2317      ,p_attribute6                   =>   l_item.custom_obj_type.attribute6
2318      ,p_attribute7                   =>   l_item.custom_obj_type.attribute7
2319      ,p_attribute8                   =>   l_item.custom_obj_type.attribute8
2320      ,p_attribute9                   =>   l_item.custom_obj_type.attribute9
2321      ,p_attribute10                  =>   l_item.custom_obj_type.attribute10
2322      ,p_attribute11                  =>   l_item.custom_obj_type.attribute11
2323      ,p_attribute12                  =>   l_item.custom_obj_type.attribute12
2324      ,p_attribute13                  =>   l_item.custom_obj_type.attribute13
2325      ,p_attribute14                  =>   l_item.custom_obj_type.attribute14
2326      ,p_attribute15                  =>   l_item.custom_obj_type.attribute15
2327      ,p_attribute16                  =>   l_item.custom_obj_type.attribute16
2328      ,p_attribute17                  =>   l_item.custom_obj_type.attribute17
2329      ,p_attribute18                  =>   l_item.custom_obj_type.attribute18
2330      ,p_attribute19                  =>   l_item.custom_obj_type.attribute19
2331      ,p_attribute20                  =>   l_item.custom_obj_type.attribute20
2332      ,p_attribute21                  =>   l_item.custom_obj_type.attribute21
2333      ,p_attribute22                  =>   l_item.custom_obj_type.attribute22
2334      ,p_attribute23                  =>   l_item.custom_obj_type.attribute23
2335      ,p_attribute24                  =>   l_item.custom_obj_type.attribute24
2336      ,p_attribute25                  =>   l_item.custom_obj_type.attribute25
2337      ,p_attribute26                  =>   l_item.custom_obj_type.attribute26
2338      ,p_attribute27                  =>   l_item.custom_obj_type.attribute27
2339      ,p_attribute28                  =>   l_item.custom_obj_type.attribute28
2340      ,p_attribute29                  =>   l_item.custom_obj_type.attribute29
2341      ,p_attribute30                  =>   l_item.custom_obj_type.attribute30
2342      ,p_global_attribute_category    =>   l_item.custom_obj_type.global_attribute_category
2343      ,p_global_attribute1            =>   l_item.custom_obj_type.global_attribute1
2344      ,p_global_attribute2            =>   l_item.custom_obj_type.global_attribute2
2345      ,p_global_attribute3            =>   l_item.custom_obj_type.global_attribute3
2346      ,p_global_attribute4            =>   l_item.custom_obj_type.global_attribute4
2347      ,p_global_attribute5            =>   l_item.custom_obj_type.global_attribute5
2348      ,p_global_attribute6            =>   l_item.custom_obj_type.global_attribute6
2349      ,p_global_attribute7            =>   l_item.custom_obj_type.global_attribute7
2350      ,p_global_attribute8            =>   l_item.custom_obj_type.global_attribute8
2351      ,p_global_attribute9            =>   l_item.custom_obj_type.global_attribute9
2352      ,p_global_attribute10           =>   l_item.custom_obj_type.global_attribute10
2353      ,p_creation_date                =>   l_item.main_obj_type.creation_date
2354      ,p_created_by                   =>   l_item.main_obj_type.created_by
2355      ,p_last_update_date             =>   l_item.main_obj_type.last_update_date
2356      ,p_last_updated_by              =>   l_item.main_obj_type.last_updated_by
2357      ,p_last_update_login            =>   l_item.main_obj_type.last_update_login
2358      ,p_request_id                   =>   l_item.main_obj_type.request_id
2359      ,p_program_application_id       =>   l_item.main_obj_type.program_application_id
2360      ,p_program_id                   =>   l_item.main_obj_type.program_id
2361      ,p_program_update_date          =>   l_item.main_obj_type.program_update_date
2362      ,p_lifecycle_id                 =>   l_item.main_obj_type.lifecycle_id
2363      ,p_current_phase_id             =>   l_item.main_obj_type.current_phase_id
2364      ,p_revision_id                  =>   l_item.main_obj_type.revision_id
2365      ,p_revision_code                =>   l_item.main_obj_type.revision_code
2366      ,p_revision_label               =>   l_item.main_obj_type.revision_label
2367      ,p_revision_description         =>   l_item.main_obj_type.revision_description
2368      ,p_effectivity_date             =>   l_item.main_obj_type.effectivity_date
2369      ,p_rev_lifecycle_id             =>   l_item.main_obj_type.rev_lifecycle_id
2370      ,p_rev_current_phase_id         =>   l_item.main_obj_type.rev_current_phase_id
2371      ,p_rev_attribute_category       =>   l_item.custom_obj_type.rev_attribute_category
2372      ,p_rev_attribute1               =>   l_item.custom_obj_type.rev_attribute1
2373      ,p_rev_attribute2               =>   l_item.custom_obj_type.rev_attribute2
2374      ,p_rev_attribute3               =>   l_item.custom_obj_type.rev_attribute3
2375      ,p_rev_attribute4               =>   l_item.custom_obj_type.rev_attribute4
2376      ,p_rev_attribute5               =>   l_item.custom_obj_type.rev_attribute5
2377      ,p_rev_attribute6               =>   l_item.custom_obj_type.rev_attribute6
2378      ,p_rev_attribute7               =>   l_item.custom_obj_type.rev_attribute7
2379      ,p_rev_attribute8               =>   l_item.custom_obj_type.rev_attribute8
2380      ,p_rev_attribute9               =>   l_item.custom_obj_type.rev_attribute9
2381      ,p_rev_attribute10              =>   l_item.custom_obj_type.rev_attribute10
2382      ,p_rev_attribute11              =>   l_item.custom_obj_type.rev_attribute11
2383      ,p_rev_attribute12              =>   l_item.custom_obj_type.rev_attribute12
2384      ,p_rev_attribute13              =>   l_item.custom_obj_type.rev_attribute13
2385      ,p_rev_attribute14              =>   l_item.custom_obj_type.rev_attribute14
2386      ,p_rev_attribute15              =>   l_item.custom_obj_type.rev_attribute15
2387      ,p_apply_template               =>   l_item.main_obj_type.apply_template
2388      ,p_object_version_number        =>   l_item.deprecated_obj_type.object_version_number
2389      ,p_process_control              =>   'PLM_UI:N'
2390      ,x_inventory_item_id            =>   x_out.inventory_item_id
2391      ,x_organization_id              =>   x_out.organization_id
2392      ,x_return_status                =>   x_out.output_status.return_status
2393      ,x_msg_count                    =>   x_out.output_status.msg_count
2394      ,x_msg_data                     =>   x_out.output_status.msg_data
2395      ,p_cas_number                   =>   l_item.process_manufacturing_obj.cas_number
2396      ,p_child_lot_flag               =>   l_item.inventory_obj_type.child_lot_flag
2397      ,p_child_lot_prefix             =>   l_item.inventory_obj_type.child_lot_prefix
2398      ,p_child_lot_starting_number    =>   l_item.inventory_obj_type.child_lot_starting_number
2399      ,p_child_lot_validation_flag    =>   l_item.inventory_obj_type.child_lot_validation_flag
2400      ,p_copy_lot_attribute_flag      =>   l_item.inventory_obj_type.copy_lot_attribute_flag
2401      ,p_default_grade                =>   l_item.inventory_obj_type.default_grade
2402      ,p_expiration_action_code       =>   l_item.inventory_obj_type.expiration_action_code
2403      ,p_expiration_action_interval   =>   l_item.inventory_obj_type.expiration_action_interval
2404      ,p_grade_control_flag           =>   l_item.inventory_obj_type.grade_control_flag
2405      ,p_hazardous_material_flag      =>   l_item.process_manufacturing_obj.hazardous_material_flag
2406      ,p_hold_days                    =>   l_item.inventory_obj_type.hold_days
2407      ,p_lot_divisible_flag           =>   l_item.inventory_obj_type.lot_divisible_flag
2408      ,p_maturity_days                =>   l_item.inventory_obj_type.maturity_days
2409      ,p_parent_child_generation_flag =>   l_item.inventory_obj_type.parent_child_generation_flag
2410      ,p_process_costing_enabled_flag =>   l_item.process_manufacturing_obj.process_costing_enabled_flag
2411      ,p_process_execution_enabled_fl =>   l_item.process_manufacturing_obj.process_execution_enabled_flag
2412      ,p_process_quality_enabled_flag =>   l_item.process_manufacturing_obj.process_quality_enabled_flag
2413      ,p_process_supply_locator_id    =>   l_item.process_manufacturing_obj.process_supply_locator_id
2414      ,p_process_supply_subinventory  =>   l_item.process_manufacturing_obj.process_supply_subinventory
2415      ,p_process_yield_locator_id     =>   l_item.process_manufacturing_obj.process_yield_locator_id
2416      ,p_process_yield_subinventory   =>   l_item.process_manufacturing_obj.process_yield_subinventory
2417      ,p_recipe_enabled_flag          =>   l_item.process_manufacturing_obj.recipe_enabled_flag
2418      ,p_retest_interval              =>   l_item.inventory_obj_type.retest_interval
2419      ,p_charge_periodicity_code      =>   l_item.order_obj_type.charge_periodicity_code
2420      ,p_repair_leadtime              =>   l_item.mrp_obj_type.repair_leadtime
2421      ,p_repair_yield                 =>   l_item.mrp_obj_type.repair_yield
2422      ,p_preposition_point            =>   l_item.mrp_obj_type.preposition_point
2423      ,p_repair_program               =>   l_item.mrp_obj_type.repair_program
2424      ,p_subcontracting_component     =>   l_item.gplanning_obj_type.subcontracting_component
2425      ,p_outsourced_assembly          =>   l_item.purchasing_obj_type.outsourced_assembly
2426    );
2427    INV_EBI_UTIL.debug_line('STEP 90: AFTER CALLING EGO_ITEM_PUB.process_item STATUS: '|| x_out.output_status.return_status);
2428    IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
2429      x_out.output_status.msg_data := x_out.output_status.msg_data || ' -> Item Number:' || l_item.main_obj_type.item_number || ' -> Org Code: ' || l_item.main_obj_type.organization_code;
2430      RAISE  FND_API.g_exc_unexpected_error;
2431    END IF;
2432 
2433    /*Start of Bug 13370136 */ -- ramukher
2434      IF l_item.main_obj_type.item_desc_lang_obj_tbl_type IS NOT NULL
2435      THEN
2436         /*Condition where the flow for Multi Language Support will be triggered*/
2437         IF (l_item.main_obj_type.item_desc_lang_obj_tbl_type.COUNT > 0)
2438         THEN
2439            /*Call the Process_item API for the same item in update mode for the different languages*/
2440 
2441            l_transaction_type := INV_EBI_ITEM_PUB.g_otype_update;
2442 
2443            l_item.main_obj_type.inventory_item_id := x_out.inventory_item_id;
2444 
2445            l_orig_nls_lang := FND_GLOBAL.nls_language();
2446 
2447            FOR i IN 1 .. l_item.main_obj_type.item_desc_lang_obj_tbl_type.COUNT
2448            LOOP
2449 
2450               FOR r_get_nls_language IN c_get_nls_language(l_item.main_obj_type.item_desc_lang_obj_tbl_type(i).lang_code)
2451               LOOP
2452 
2453                   l_nls_language := r_get_nls_language.nls_language;
2454                   --FND_GLOBAL.SET_NLS_CONTEXT(p_nls_language => l_nls_language);Commented for bug14210113
2455 
2456                   -- Added for bug 14210113
2457                   INV_EBI_UTIL.debug_line('STEP 100: BEFORE CALLING set_nls for language ' || l_nls_language);
2458                   set_nls(l_nls_language);
2459 
2460                   INV_EBI_UTIL.debug_line('STEP 110: BEFORE CALLING EGO_ITEM_PUB.process_item IN UPDATE MODE');
2461                   EGO_ITEM_PUB.process_item(
2462                     p_api_version                  =>   1.0
2463                    ,p_init_msg_list                =>   l_item.main_obj_type.init_msg_list
2464                    ,p_commit                       =>   FND_API.g_false
2465                    ,p_transaction_type             =>   l_transaction_type
2466                    ,p_item_number                  =>   l_item.main_obj_type.item_number
2467                    ,p_organization_id              =>   l_item.main_obj_type.organization_id
2468                    ,p_description                  =>   l_item.main_obj_type.item_desc_lang_obj_tbl_type(i).description
2469                    ,p_long_description             =>   l_item.main_obj_type.item_desc_lang_obj_tbl_type(i).long_desc
2470                    ,p_inventory_item_id            =>   l_item.main_obj_type.inventory_item_id
2471                    ,x_inventory_item_id            =>   x_out.inventory_item_id
2472                    ,x_organization_id              =>   x_out.organization_id
2473                    ,x_return_status                =>   x_out.output_status.return_status
2474                    ,x_msg_count                    =>   x_out.output_status.msg_count
2475                    ,x_msg_data                     =>   x_out.output_status.msg_data
2476                   );
2477 
2478                   INV_EBI_UTIL.debug_line('STEP 110: AFTER CALLING EGO_ITEM_PUB.process_item IN UPDATE MODE: STATUS: '|| x_out.output_status.return_status);
2479 
2480                   IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
2481 
2482                      INV_EBI_UTIL.debug_line('Error while updating Item ' || l_item.main_obj_type.item_number || ' description using language code :' || l_item.main_obj_type.item_desc_lang_obj_tbl_type(i).lang_code);
2483                      x_out.output_status.msg_data := x_out.output_status.msg_data || ' ->Item Number:' || l_item.main_obj_type.item_number || '-> Language code:' || l_item.main_obj_type.item_desc_lang_obj_tbl_type(i).lang_code;
2484 
2485                      -- To set back the language to base language
2486 
2487 		     --FND_GLOBAL.SET_NLS_CONTEXT(p_nls_language => l_orig_nls_lang);   Commented for bug14210113
2488 
2489 		     -- Added for bug 14210113
2490 		     INV_EBI_UTIL.debug_line('STEP 120: BEFORE CALLING set_nls for setting to original language in case of exception' || l_orig_nls_lang);
2491 		     set_nls(l_orig_nls_lang);
2492 
2493                      RAISE FND_API.g_exc_unexpected_error;
2494 
2495                   END IF;
2496 
2497               END LOOP;
2498            END LOOP;
2499         END IF;
2500      END IF;
2501 
2502      -- To set back the language to base language
2503 
2504      --FND_GLOBAL.SET_NLS_CONTEXT(p_nls_language => l_orig_nls_lang);  --Commented for bug 14210113
2505 
2506      -- Added for bug 14210113
2507      INV_EBI_UTIL.debug_line('STEP 130: BEFORE CALLING set_nls for setting to original language in case of success' || l_orig_nls_lang);
2508      set_nls(l_orig_nls_lang);
2509 
2510   /*End of Bug 13370136 */ -- ramukher
2511 
2512    --Added for Bug 12902341
2513    EGO_ITEM_PUB.SYNC_IM_INDEX ;
2514 
2515    l_pk_col_name_val_pairs.EXTEND(1);
2516    l_pk_col_name_val_pairs(1).name      := 'organization_id';
2517    l_pk_col_name_val_pairs(1).value     := l_item.main_obj_type.organization_id;
2518    x_out.organization_code  := id_to_value(
2519                                               p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
2520                                              ,p_entity_name            => G_ORGANIZATION
2521                                            );
2522    SELECT concatenated_segments,description
2523    INTO x_out.item_number,x_out.description
2524    FROM mtl_system_items_kfv
2525    WHERE organization_id = x_out.organization_id
2526    AND inventory_item_id = x_out.inventory_item_id;
2527    INV_EBI_UTIL.debug_line('STEP 140: BEFORE CALLING INV_EBI_ITEM_HELPER.get_Operating_unit ORG ID: '|| x_out.organization_id);
2528    get_Operating_unit
2529    (p_oranization_id => x_out.organization_id
2530    ,x_operating_unit => x_out.operating_unit
2531    ,x_ouid           => x_out.operating_unit_id
2532    );
2533    INV_EBI_UTIL.debug_line('STEP 150: AFTER CALLING INV_EBI_ITEM_HELPER.get_Operating_unit OPERATING UNIT: '|| x_out.operating_unit);
2534    BEGIN
2535      SELECT orig_system_id
2536        INTO l_source_system_id
2537        FROM HZ_ORIG_SYSTEMS_B
2538       WHERE orig_system = l_item.main_obj_type.cross_reference_type;
2539       INV_EBI_UTIL.debug_line('STEP 160: SOURCE SYSTEM ID: '|| l_source_system_id);
2540    EXCEPTION
2541      WHEN NO_DATA_FOUND THEN
2542        NULL;
2543    END;
2544 
2545    BEGIN
2546      SELECT COUNT(*)
2547        INTO l_count
2548        FROM MTL_CROSS_REFERENCES_B MCR
2549       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
2550         AND nvl(MCR.SOURCE_SYSTEM_ID,-99999) = nvl(l_source_system_id,-99999) --Bug 8704166
2551         AND MCR.CROSS_REFERENCE = l_item.main_obj_type.item_number
2552         AND MCR.INVENTORY_ITEM_ID = x_out.inventory_item_id
2553         AND MCR.END_DATE_ACTIVE IS NULL
2554          OR MCR.END_DATE_ACTIVE>SYSDATE;
2555    EXCEPTION
2556       WHEN NO_DATA_FOUND THEN
2557         l_count:=0;
2558    END;
2559 
2560    IF(l_transaction_type = INV_EBI_ITEM_PUB.g_otype_create) AND l_count=0 THEN
2561      INV_EBI_UTIL.debug_line('STEP 170: BEFORE CALLING MTL_CROSS_REFERENCES_PKG.insert_row');
2562 
2563      MTL_CROSS_REFERENCES_PKG.insert_row(
2564      p_source_system_id          => l_source_system_id,
2565      p_start_date_active         => SYSDATE,
2566      p_end_date_active           => NULL,
2567      p_object_version_number     => NULL,
2568      p_uom_code                  => NULL,
2569      p_revision_id               => NULL,
2570      p_epc_gtin_serial           => NULL,
2571      p_inventory_item_id         => x_out.inventory_item_id,
2572      p_organization_id           => NULL,
2573      p_cross_reference_type      => 'SS_ITEM_XREF',
2574      p_cross_reference           => l_item.main_obj_type.item_number, -- p_source_system_reference,
2575      p_org_independent_flag      => 'Y',
2576      p_request_id                => NULL,
2577      p_attribute1                => NULL,
2578      p_attribute2                => NULL,
2579      p_attribute3                => NULL,
2580      p_attribute4                => NULL,
2581      p_attribute5                => NULL,
2582      p_attribute6                => NULL,
2583      p_attribute7                => NULL,
2584      p_attribute8                => NULL,
2585      p_attribute9                => NULL,
2586      p_attribute10               => NULL,
2587      p_attribute11               => NULL,
2588      p_attribute12               => NULL,
2589      p_attribute13               => NULL,
2590      p_attribute14               => NULL,
2591      p_attribute15               => NULL,
2592      p_attribute_category        => NULL,
2593      p_description               => l_item.main_obj_type.description,
2594      p_creation_date             => SYSDATE,
2595      p_created_by                => FND_GLOBAL.user_id,
2596      p_last_update_date          => SYSDATE,
2597      p_last_updated_by           => FND_GLOBAL.user_id,
2598      p_last_update_login         => FND_GLOBAL.login_id,
2599      p_program_application_id    => NULL,
2600      p_program_id                => NULL,
2601      p_program_update_date       => SYSDATE,
2602      x_cross_reference_id        => l_xref_id);
2603      INV_EBI_UTIL.debug_line('STEP 180: AFTER CALLING MTL_CROSS_REFERENCES_PKG.insert_row');
2604   END IF;
2605   IF FND_API.to_boolean( p_commit ) THEN
2606     COMMIT;
2607   END IF;
2608   INV_EBI_UTIL.debug_line('STEP 190: END INSIDE INV_EBI_ITEM_HELPER.process_item_pvt STATUS: '|| x_out.output_status.return_status);
2609  EXCEPTION
2610    WHEN FND_API.g_exc_error THEN
2611      ROLLBACK TO inv_ebi_pvt_item_save_pnt;
2612      x_out.output_status.return_status :=  FND_API.g_ret_sts_error;
2613      IF(c_get_item_curr_data % ISOPEN) THEN
2614         CLOSE c_get_item_curr_data;
2615      END IF;
2616 
2617     IF(x_out.output_status.msg_data IS NULL) THEN
2618        fnd_msg_pub.count_and_get(
2619          p_encoded => fnd_api.g_false
2620         ,p_count   => x_out.output_status.msg_count
2621         ,p_data    => x_out.output_status.msg_data
2622      );
2623    END IF;
2624    WHEN FND_API.g_exc_unexpected_error THEN
2625      ROLLBACK TO inv_ebi_pvt_item_save_pnt;
2626      IF(c_get_item_curr_data % ISOPEN) THEN
2627         CLOSE c_get_item_curr_data;
2628      END IF;
2629 
2630      x_out.output_status.return_status :=  FND_API.g_ret_sts_unexp_error;
2631     IF(x_out.output_status.msg_data IS NULL) THEN
2632        fnd_msg_pub.count_and_get(
2633          p_encoded => fnd_api.g_false
2634         ,p_count   => x_out.output_status.msg_count
2635         ,p_data    => x_out.output_status.msg_data
2636       );
2637    END IF;
2638    WHEN OTHERS THEN
2639      ROLLBACK TO inv_ebi_pvt_item_save_pnt;
2640      IF(c_get_item_curr_data % ISOPEN) THEN
2641         CLOSE c_get_item_curr_data;
2642      END IF;
2643 
2644      x_out.output_status.return_status := FND_API.g_ret_sts_unexp_error;
2645      IF (x_out.output_status.msg_data IS NOT NULL) THEN
2646        x_out.output_status.msg_data      :=  x_out.output_status.msg_data ||' -> INV_EBI_ITEM_HELPER.process_item_pvt ';
2647        x_out.output_status.msg_data      := x_out.output_status.msg_data || ' -> Item Number:' || l_item.main_obj_type.item_number || ' -> Org Code: ' || l_item.main_obj_type.organization_code;
2648      ELSE
2649        x_out.output_status.msg_data      :=  SQLERRM||' INV_EBI_ITEM_HELPER.process_item_pvt ';
2650        x_out.output_status.msg_data      := x_out.output_status.msg_data || ' -> Item Number:' || l_item.main_obj_type.item_number || ' -> Org Code: ' || l_item.main_obj_type.organization_code;
2651      END IF;
2652  END process_item_pvt;
2653 /************************************************************************************
2654  --      API name        : process_item_uda
2655  --      Type            : Public
2656  --      Function        :
2657  --
2658 ************************************************************************************/
2659  PROCEDURE process_item_uda (
2660     p_api_version            IN      NUMBER DEFAULT 1.0
2661    ,p_inventory_item_id      IN      NUMBER
2662    ,p_organization_id        IN      NUMBER
2663    ,p_item_catalog_group_id  IN      NUMBER   DEFAULT NULL
2664    ,p_revision_id            IN      NUMBER   DEFAULT NULL
2665    ,p_revision_code          IN      VARCHAR2 DEFAULT NULL
2666    ,p_uda_input_obj          IN      inv_ebi_uda_input_obj
2667    ,p_commit                 IN      VARCHAR2  := fnd_api.g_false
2668    ,x_uda_output_obj         OUT     NOCOPY  inv_ebi_item_output_obj
2669  )
2670  IS
2671    l_uda_out                inv_ebi_uda_output_obj;
2672    l_attributes_row_table   ego_user_attr_row_table;
2673    l_attributes_data_table  ego_user_attr_data_table;
2674    l_attributes_row_obj     ego_user_attr_row_obj;
2675    l_transaction_type       VARCHAR2(20);
2676    l_data_level             VARCHAR2(25);
2677    l_revision_id            NUMBER;
2678    l_output_status          inv_ebi_output_status;
2679    l_is_item_level          VARCHAR2(1) := fnd_api.g_false;
2680    l_is_item_revision_level VARCHAR2(1) := fnd_api.g_false;
2681    l_data_lvl               VARCHAR2(25);
2682 
2683    --Start of Bug 10378371
2684    CURSOR c_data_level(
2685              p_item_catalog_group_id NUMBER,
2686              p_attr_grp_id           NUMBER) IS
2687 
2688       SELECT data_level_int_name
2689       FROM ego_obj_attr_grp_assocs_v
2690       WHERE attr_group_id = p_attr_grp_id
2691       AND classification_code IN( SELECT item_catalog_group_id
2692                                   FROM mtl_item_catalog_groups_kfv
2693                                   CONNECT BY PRIOR parent_catalog_group_id = item_catalog_group_id
2694                                   START WITH item_catalog_group_id = p_item_catalog_group_id
2695                                 );
2696    -- End of Bug 10378371
2697 
2698  BEGIN
2699    SAVEPOINT inv_ebi_item_uda_save_pnt;
2700    INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.process_item_uda');
2701    INV_EBI_UTIL.debug_line('STEP 20: INVENTORY ITEM ID: '|| p_inventory_item_id || 'ORG ID: '||p_organization_id);
2702    l_uda_out         := inv_ebi_uda_output_obj(NULL,NULL);
2703    l_output_status   := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
2704    x_uda_output_obj  := inv_ebi_item_output_obj(NULL,NULL,NULL,NULL,l_output_status,l_uda_out,NULL,NULL,NULL,NULL,NULL);
2705    INV_EBI_UTIL.debug_line('STEP 30: BEFORE CALLING INV_EBI_ITEM_HELPER.transform_uda');
2706    INV_EBI_UTIL.transform_uda (
2707      p_uda_input_obj          => p_uda_input_obj
2708     ,x_attributes_row_table   => l_attributes_row_table
2709     ,x_attributes_data_table  => l_attributes_data_table
2710     ,x_return_status          => x_uda_output_obj.output_status.return_status
2711     ,x_msg_count              => x_uda_output_obj.output_status.msg_count
2712     ,x_msg_data               => x_uda_output_obj.output_status.msg_data
2713    );
2714    INV_EBI_UTIL.debug_line('STEP 40: AFTER CALLING INV_EBI_ITEM_HELPER.transform_uda STATUS: '|| x_uda_output_obj.output_status.return_status);
2715    IF (x_uda_output_obj.output_status.return_status <> FND_API.g_ret_sts_success) THEN
2716      RAISE  FND_API.g_exc_unexpected_error;
2717    END IF;
2718 
2719    FOR i in 1..l_attributes_row_table.COUNT
2720    LOOP
2721      l_attributes_row_obj    :=  l_attributes_row_table(i);
2722      IF(l_attributes_row_table(i).attr_group_id IS NOT NULL AND p_item_catalog_group_id IS NOT NULL ) THEN
2723 
2724        -- Start of Bug 10378371
2725        l_is_item_level           := fnd_api.g_false;
2726        l_is_item_revision_level  := fnd_api.g_false;
2727        l_data_lvl := NULL;
2728 
2729        FOR cur_data_level IN c_data_level(
2730                                 p_item_catalog_group_id,
2731                                 l_attributes_row_table(i).attr_group_id
2732                              )
2733        LOOP
2734           INV_EBI_UTIL.debug_line('STEP 50: INSIDE Cursor Loop');
2735           l_data_level := cur_data_level.data_level_int_name;
2736           INV_EBI_UTIL.debug_line('STEP 60: l_data_level'|| l_data_level);
2737 
2738           IF(l_data_level  = INV_EBI_ITEM_PUB.G_DATA_LEVEL_ITEM) THEN
2739 
2740             l_is_item_level  :=  fnd_api.g_true;
2741             l_data_lvl       :=  l_data_level;
2742           ELSIF
2743 	    -- Item Rev level is mutually exclusive with all other levels
2744             (l_data_level = INV_EBI_ITEM_PUB.G_DATA_LEVEL_ITEM_REV) THEN
2745                l_is_item_revision_level  := fnd_api.g_true;
2746                l_data_lvl       :=  l_data_level;
2747           END IF;
2748 
2749        END LOOP;
2750        -- End of Bug 10378371
2751      END IF;
2752 
2753      IF (l_data_lvl = INV_EBI_ITEM_PUB.g_data_level_item_rev ) THEN
2754 
2755        IF p_revision_code IS NOT NULL AND p_revision_code <> fnd_api.g_miss_char THEN
2756          SELECT revision_id INTO l_revision_id
2757          FROM mtl_item_revisions
2758          WHERE inventory_item_id = p_inventory_item_id
2759          AND organization_id = p_organization_id
2760          AND revision = p_revision_code;
2761        ELSE
2762          FND_MESSAGE.set_name('INV','INV_EBI_ITEM_REVISION_CODE_NULL');
2763          FND_MSG_PUB.add;
2764          RAISE  FND_API.g_exc_error;
2765        END IF;
2766      ELSE
2767        l_revision_id := l_attributes_row_obj.data_level_1;
2768      END IF;
2769      IF(l_attributes_row_table(i).transaction_type IS NULL) THEN
2770        l_transaction_type   :=  ego_user_attrs_data_pvt.g_sync_mode;
2771      ELSE
2772        l_transaction_type   :=  l_attributes_row_table(i).transaction_type;
2773      END IF;
2774      INV_EBI_UTIL.debug_line('STEP 70: BEFORE CALLING EGO_USER_ATTRS_DATA_PUB.build_attr_group_row_object');
2775 
2776      -- Start of Bug 10378371
2777      -- Only Item Rev level and Item level UDAs are supported by the PIP
2778      IF(l_is_item_level = fnd_api.g_true OR l_is_item_revision_level = fnd_api.g_true ) THEN
2779      -- End of Bug 10378371
2780      l_attributes_row_obj := EGO_USER_ATTRS_DATA_PUB.build_attr_group_row_object(
2781                               p_row_identifier      => i
2782                              ,p_attr_group_id       => l_attributes_row_obj.attr_group_id
2783                              ,p_attr_group_app_id   => l_attributes_row_obj.attr_group_app_id
2784                              ,p_attr_group_type     => l_attributes_row_obj.attr_group_type
2785                              ,p_attr_group_name     => l_attributes_row_obj.attr_group_name
2786                              ,p_data_level          => l_data_lvl
2787                              ,p_data_level_1        => l_revision_id
2788                              ,p_data_level_2        => l_attributes_row_obj.data_level_2
2789                              ,p_data_level_3        => l_attributes_row_obj.data_level_3
2790                              ,p_data_level_4        => l_attributes_row_obj.data_level_4
2791                              ,p_data_level_5        => l_attributes_row_obj.data_level_5
2792                              ,p_transaction_type    => l_transaction_type
2793                             );
2794      l_attributes_row_table(i)  := l_attributes_row_obj;
2795      END IF;
2796 
2797    END LOOP;
2798    INV_EBI_UTIL.debug_line('STEP 80: BEFORE CALLING EGO_ITEM_PUB.process_user_attrs_for_item ');
2799    EGO_ITEM_PUB.process_user_attrs_for_item(
2800      p_api_version               => p_api_version
2801     ,p_inventory_item_id         => p_inventory_item_id
2802     ,p_organization_id           => p_organization_id
2803     ,p_attributes_row_table      => l_attributes_row_table
2804     ,p_attributes_data_table     => l_attributes_data_table
2805     ,p_entity_id                 => p_uda_input_obj.entity_id
2806     ,p_entity_index              => p_uda_input_obj.entity_index
2807     ,p_entity_code               => p_uda_input_obj.entity_code
2808     ,p_debug_level               => p_uda_input_obj.debug_level
2809     ,p_init_error_handler        => p_uda_input_obj.init_error_handler
2810     ,p_write_to_concurrent_log   => p_uda_input_obj.write_to_concurrent_log
2811     ,p_init_fnd_msg_list         => p_uda_input_obj.init_fnd_msg_list
2812     ,p_log_errors                => p_uda_input_obj.log_errors
2813     ,p_add_errors_to_fnd_stack   => p_uda_input_obj.add_errors_to_fnd_stack
2814     ,p_commit                    => FND_API.g_false
2815     ,x_failed_row_id_list        => x_uda_output_obj.uda_output.failed_row_id_list
2816     ,x_return_status             => x_uda_output_obj.output_status.return_status
2817     ,x_errorcode                 => x_uda_output_obj.uda_output.errorcode
2818     ,x_msg_count                 => x_uda_output_obj.output_status.msg_count
2819     ,x_msg_data                  => x_uda_output_obj.output_status.msg_data
2820    );
2821    INV_EBI_UTIL.debug_line('STEP 90: AFETR CALLING EGO_ITEM_PUB.process_user_attrs_for_item STATUS: '||x_uda_output_obj.output_status.return_status);
2822    IF (x_uda_output_obj.output_status.return_status  <> FND_API.g_ret_sts_success) THEN
2823      x_uda_output_obj.output_status.msg_data := x_uda_output_obj.output_status.msg_data || ' -> Inventory Item Id:' || p_inventory_item_id || ' -> Org Id: ' || p_organization_id;
2824      RAISE  FND_API.g_exc_unexpected_error;
2825    END IF;
2826    IF FND_API.to_boolean(p_commit) THEN
2827      COMMIT;
2828    END IF;
2829  INV_EBI_UTIL.debug_line('STEP 100: END INSIDE INV_EBI_ITEM_HELPER.process_item_uda');
2830  EXCEPTION
2831    WHEN FND_API.g_exc_error THEN
2832      ROLLBACK TO inv_ebi_item_uda_save_pnt;
2833      IF c_data_level%ISOPEN THEN
2834         CLOSE c_data_level;
2835      END IF;
2836      x_uda_output_obj.output_status.return_status :=  FND_API.g_ret_sts_error;
2837      IF(x_uda_output_obj.output_status.msg_data IS NULL) THEN
2838        FND_MSG_PUB.count_and_get(
2839          p_encoded => FND_API.g_false
2840         ,p_count   => x_uda_output_obj.output_status.msg_count
2841         ,p_data    => x_uda_output_obj.output_status.msg_data
2842      );
2843     END IF;
2844    WHEN FND_API.g_exc_unexpected_error THEN
2845      ROLLBACK TO inv_ebi_item_uda_save_pnt;
2846      IF c_data_level%ISOPEN THEN
2847         CLOSE c_data_level;
2848      END IF;
2849      x_uda_output_obj.output_status.return_status :=  FND_API.g_ret_sts_unexp_error;
2850      IF(x_uda_output_obj.output_status.msg_data IS NULL) THEN
2851        FND_MSG_PUB.count_and_get(
2852          p_encoded => FND_API.g_false
2853         ,p_count   => x_uda_output_obj.output_status.msg_count
2854         ,p_data    => x_uda_output_obj.output_status.msg_data
2855       );
2856      END IF;
2857    WHEN OTHERS THEN
2858      ROLLBACK TO inv_ebi_item_uda_save_pnt;
2859      IF c_data_level%ISOPEN THEN
2860         CLOSE c_data_level;
2861      END IF;
2862      x_uda_output_obj.output_status.return_status := FND_API.g_ret_sts_unexp_error;
2863      IF (x_uda_output_obj.output_status.msg_data IS NOT NULL) THEN
2864         x_uda_output_obj.output_status.msg_data  :=  x_uda_output_obj.output_status.msg_data ||' -> INV_EBI_ITEM_HELPER.process_item_uda ';
2865      ELSE
2866         x_uda_output_obj.output_status.msg_data  :=  SQLERRM||' at INV_EBI_ITEM_HELPER.process_item_uda ';
2867      END IF;
2868  END process_item_uda;
2869   /************************************************************************************
2870   --      API name        : process_org_id_assignments
2871   --      Type            : Public
2872   --      Function        :
2873   --  ************************************************************************************/
2874   PROCEDURE process_org_id_assignments(
2875     p_init_msg_list      IN          VARCHAR2
2876    ,p_commit             IN          VARCHAR2 := fnd_api.g_false
2877    ,p_inventory_item_id  IN          NUMBER
2878    ,p_item_number        IN          VARCHAR2
2879    ,p_org_id_tbl         IN          inv_ebi_org_tbl
2880    ,x_out                OUT NOCOPY  inv_ebi_item_output_obj
2881   )
2882   IS
2883     l_item_org_assignment_rec    ego_item_pub.item_org_assignment_rec_type;
2884     l_item_org_assignment_tbl    ego_item_pub.item_org_assignment_tbl_type;
2885     l_output_status              inv_ebi_output_status;
2886     l_api_version                NUMBER:=1.0;
2887     l_item_org_tbl_count         NUMBER := 1;
2888   BEGIN
2889     SAVEPOINT inv_ebi_org_id_save_pnt;
2890     INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.process_org_id_assignments ');
2891     INV_EBI_UTIL.debug_line('STEP 20: ITEM ID: '|| p_inventory_item_id || 'ITEM NUMBER: ' || p_item_number);
2892     l_output_status  := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
2893     x_out            := inv_ebi_item_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,NULL,NULL,NULL,NULL,NULL);
2894     IF p_org_id_tbl.COUNT > 0 THEN
2895       FOR i IN 1..p_org_id_tbl.COUNT LOOP
2896         l_item_org_assignment_rec.inventory_item_id := p_inventory_item_id;
2897         l_item_org_assignment_rec.item_number       := p_item_number;
2898         l_item_org_assignment_rec.organization_id   := p_org_id_tbl(i).org_id;
2899         l_item_org_assignment_tbl(i)                := l_item_org_assignment_rec;
2900         INV_EBI_UTIL.debug_line('STEP 30: ORGANIZATION ID: '||p_org_id_tbl(i).org_id);
2901       END LOOP;
2902       INV_EBI_UTIL.debug_line('STEP 40: BEFORE CALLING EGO_ITEM_PUB.process_item_org_assignments ');
2903       EGO_ITEM_PUB.process_item_org_assignments(
2904         p_api_version                  => l_api_version --don't pass as of now
2905        ,p_init_msg_list                => p_init_msg_list
2906        ,p_commit                       => FND_API.g_false
2907        ,p_item_org_assignment_tbl      => l_item_org_assignment_tbl
2908        ,x_return_status                => x_out.output_status.return_status
2909        ,x_msg_count                    => x_out.output_status.msg_count
2910       );
2911       INV_EBI_UTIL.debug_line('STEP 50: AFTER CALLING EGO_ITEM_PUB.process_item_org_assignments STATUS: '||  x_out.output_status.return_status);
2912       IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
2913         x_out.output_status.msg_data := x_out.output_status.msg_data || ' ->  Item Name:' || p_item_number;
2914         RAISE  FND_API.g_exc_unexpected_error;
2915       END IF;
2916     END IF;
2917     IF FND_API.to_boolean( p_commit ) THEN
2918        COMMIT;
2919     END IF;
2920     INV_EBI_UTIL.debug_line('STEP 60: END INSIDE INV_EBI_ITEM_HELPER.process_org_id_assignments ');
2921   EXCEPTION
2922     WHEN FND_API.g_exc_unexpected_error THEN
2923       ROLLBACK TO inv_ebi_org_id_save_pnt;
2924       x_out.output_status.return_status :=  FND_API.g_ret_sts_unexp_error;
2925       IF(x_out.output_status.msg_data IS NULL) THEN
2926         FND_MSG_PUB.count_and_get(
2927           p_encoded => FND_API.g_false
2928          ,p_count   => x_out.output_status.msg_count
2929          ,p_data    => x_out.output_status.msg_data
2930         );
2931       END IF;
2932     WHEN OTHERS THEN
2933       ROLLBACK TO inv_ebi_org_id_save_pnt;
2934       x_out.output_status.return_status := FND_API.g_ret_sts_unexp_error;
2935       IF (x_out.output_status.msg_data IS NOT NULL) THEN
2936         x_out.output_status.msg_data  :=  x_out.output_status.msg_data||' -> INV_EBI_ITEM_HELPER.process_org_id_assignments ';
2937       ELSE
2938         x_out.output_status.msg_data  :=  SQLERRM||' INV_EBI_ITEM_HELPER.process_org_id_assignments ';
2939       END IF;
2940   END process_org_id_assignments;
2941     /* Bug 9755814 -  Added the below Functions for the Update Category issue  */
2942   FUNCTION is_category_set_multi_assign (
2943     p_category_set_id  IN  NUMBER
2944   ) RETURN BOOLEAN
2945   IS
2946     l_multi_cat_assign_flag  VARCHAR2(1);
2947   BEGIN
2948     l_multi_cat_assign_flag := 'N';
2949     SELECT mult_item_cat_assign_flag
2950       INTO l_multi_cat_assign_flag
2951       FROM mtl_category_sets_b
2952       WHERE category_set_id = p_category_set_id;
2953     IF (l_multi_cat_assign_flag = 'Y') THEN
2954       RETURN TRUE;
2955     ELSE
2956       RETURN FALSE;
2957     END IF;
2958   EXCEPTION
2959     WHEN OTHERS THEN
2960       RETURN FALSE;
2961   END is_category_set_multi_assign;
2962   /* API to be used only when multi assign is disabled for the category set */
2963   FUNCTION get_item_category (
2964     p_inventory_item_id  IN  NUMBER
2965   , p_organization_id    IN  NUMBER
2966   , p_category_set_id    IN  NUMBER
2967   ) RETURN NUMBER
2968   IS
2969     l_item_category  NUMBER;
2970   BEGIN
2971     l_item_category := 0;
2972     SELECT   NVL(category_id, 0)
2973       INTO   l_item_category
2974       FROM   mtl_item_categories
2975       WHERE  inventory_item_id = p_inventory_item_id
2976       AND    organization_id = p_organization_id
2977       AND    category_set_id = p_category_set_id;
2978     RETURN l_item_category;
2979   EXCEPTION
2980     WHEN OTHERS THEN
2981       RETURN 0;
2982   END get_item_category;
2983 
2984 
2985  FUNCTION table_of_number_contains (
2986     p_table  IN  FND_TABLE_OF_NUMBER
2987   , p_value  IN  NUMBER
2988   ) RETURN BOOLEAN
2989   IS
2990   BEGIN
2991 
2992     IF p_table IS NOT NULL THEN
2993       FOR i IN 1..p_table.COUNT LOOP
2994        IF p_table(i) = p_value THEN
2995 	  RETURN TRUE;
2996 	END IF;
2997       END LOOP;
2998     END IF;
2999     RETURN FALSE;
3000   EXCEPTION
3001     WHEN OTHERS THEN
3002       RETURN FALSE;
3003   END table_of_number_contains;
3004 
3005 
3006 
3007   /* Bug 9755814 -  Added the below API to update the category of an item when a default category set is already been assigned through the Functional area (Inventory, Purchasing etc.,) */
3008 /*  From 12.1.3 onwards (and 12.2), please call the EGO_ITEM_PUB.Process_Item_Cat_Assignment() API with UPDATE transaction.*/
3009 
3010   /************************************************************************************
3011   --      API name        : update_category_assignments
3012   --      Type            : Public
3013   --      Function        :
3014   --  ************************************************************************************/
3015 
3016   PROCEDURE update_category_assignments(
3017      p_api_version       IN   NUMBER,
3018      p_init_msg_list     IN   VARCHAR2 ,
3019      p_commit            IN   VARCHAR2 ,
3020      p_category_id       IN   NUMBER,
3021      p_old_category_id   IN   NUMBER,
3022      p_category_set_id   IN   NUMBER,
3023      p_inventory_item_id IN   NUMBER,
3024      p_organization_id   IN   NUMBER,
3025      x_return_status     OUT  NOCOPY VARCHAR2,
3026      x_errorcode         OUT  NOCOPY NUMBER,
3027      x_msg_count         OUT  NOCOPY NUMBER,
3028      x_msg_data          OUT  NOCOPY VARCHAR2
3029 	  )
3030 
3031   IS
3032 
3033   BEGIN
3034 
3035    IF INV_EGO_REVISION_VALIDATE.check_data_security(
3036                                      p_function           => 'EGO_EDIT_ITEM'
3037                                     ,p_object_name        => 'EGO_ITEM'
3038                                     ,p_instance_pk1_value => p_inventory_item_id
3039                                     ,p_instance_pk2_value => p_organization_id
3040                                     ,P_User_Id            => FND_GLOBAL.user_id) <> 'T'
3041       THEN
3042        FND_MESSAGE.set_name('INV','INV_IOI_ITEM_UPDATE_PRIV');
3043        FND_MSG_PUB.add;
3044        RAISE FND_API.g_EXC_ERROR;
3045     ELSE
3046      INV_ITEM_CATEGORY_PUB.Update_Category_Assignment(
3047                p_api_version         => p_api_version
3048               ,p_init_msg_list       => p_init_msg_list
3049               ,p_commit              => p_commit
3050               ,p_category_id         => p_category_id
3051 	      ,p_old_category_id     => p_old_category_id
3052               ,p_category_set_id     => p_category_set_id
3053               ,p_inventory_item_id   => p_inventory_item_id
3054               ,p_organization_id     => p_organization_id
3055               ,x_return_status       =>x_return_status
3056               ,x_errorcode           => x_errorcode
3057               ,x_msg_count           => x_msg_count
3058               ,x_msg_data            => x_msg_data
3059               );
3060       IF (x_return_status <> FND_API.g_ret_sts_success) THEN
3061        x_msg_data  :=  x_msg_data || ' -> Inventory Item Id:' || p_inventory_item_id || ' -> Org Id: ' || p_organization_id;
3062        RAISE  FND_API.g_exc_unexpected_error;
3063        END IF;
3064     END IF;
3065 
3066     EXCEPTION
3067     WHEN FND_API.g_exc_error THEN
3068       x_return_status   :=  FND_API.g_ret_sts_error;
3069       IF(x_msg_data  IS NULL) THEN
3070         FND_MSG_PUB.count_and_get(
3071           p_encoded => FND_API.g_false
3072          ,p_count   => x_msg_count
3073          ,p_data    => x_msg_data
3074        );
3075       END IF;
3076     WHEN FND_API.g_exc_unexpected_error THEN
3077        x_return_status  :=  FND_API.g_ret_sts_unexp_error;
3078       IF(x_msg_data IS NULL) THEN
3079         FND_MSG_PUB.count_and_get(
3080           p_encoded => FND_API.g_false
3081          ,p_count   => x_msg_count
3082          ,p_data    => x_msg_data
3083         );
3084       END IF;
3085     WHEN OTHERS THEN
3086       x_return_status := FND_API.g_ret_sts_unexp_error;
3087       IF (x_msg_data IS NOT NULL) THEN
3088         x_msg_data      :=  x_msg_data ||' -> INV_EBI_ITEM_HELPER.update_category_assignments ';
3089       ELSE
3090         x_msg_data      :=  SQLERRM||' INV_EBI_ITEM_HELPER.update_category_assignments ';
3091       END IF;
3092    END update_category_assignments;
3093 
3094 
3095   /************************************************************************************
3096   --      API name        : process_category_assignments
3097   --      Type            : Public
3098   --      Function        :
3099   --
3100   ************************************************************************************/
3101   /* Bug 9755814 - changes are done to this API for these scenarios when ever  multi assign is enabled the category is added, */
3102   /* when multi asisgn is disabled updates the category and when multiple category assignments are coming in for the category set it fails */
3103   PROCEDURE process_category_assignments(
3104     p_api_version         IN           NUMBER  DEFAULT 1.0
3105    ,p_init_msg_list       IN           VARCHAR2
3106    ,p_commit              IN           VARCHAR2 := fnd_api.g_false
3107    ,p_inventory_item_id   IN           NUMBER
3108    ,p_organization_id     IN           NUMBER
3109    ,p_category_id_tbl     IN       inv_ebi_category_obj_tbl_type
3110    ,x_out                 OUT NOCOPY   inv_ebi_item_output_obj
3111   )
3112   IS
3113 
3114     l_category_output   inv_ebi_category_output_obj;
3115     l_output_status     inv_ebi_output_status;
3116     l_category_id       NUMBER;
3117       l_old_item_category NUMBER;
3118     l_no_multi_assign_cat_set_tbl FND_TABLE_OF_NUMBER;
3119   BEGIN
3120     SAVEPOINT inv_ebi_cat_id_save_pnt;
3121     INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.process_category_assignments ');
3122     INV_EBI_UTIL.debug_line('STEP 20: ITEM ID: '|| p_inventory_item_id || 'ORG ID: '|| p_organization_id);
3123     l_category_output :=  inv_ebi_category_output_obj(NULL);
3124     l_output_status  := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
3125     x_out            := inv_ebi_item_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,l_category_output,NULL,NULL,NULL,NULL);
3126     INV_EBI_UTIL.debug_line('STEP 30: BEFORE CALLING EGO_ITEM_PUB.process_item_cat_assignment');
3127      l_no_multi_assign_cat_set_tbl :=FND_TABLE_OF_NUMBER();
3128       FOR i IN 1..p_category_id_tbl.COUNT LOOP
3129       l_category_id := p_category_id_tbl(i).cat_id;
3130 
3131 IF is_category_set_multi_assign(p_category_id_tbl(i).cat_set_id) THEN
3132 	  -- multi assign enabled - just add the category
3133 	  -- TODO - check what happens if same category comes again in CREATE mode
3134 	  EGO_ITEM_PUB.process_item_cat_assignment(
3135             p_api_version         => p_api_version
3136            ,p_init_msg_list       => p_init_msg_list
3137            ,p_commit              => FND_API.g_false
3138            ,p_category_id         => l_category_id
3139            ,p_category_set_id     => p_category_id_tbl(i).cat_set_id
3140            ,p_inventory_item_id   => p_inventory_item_id
3141            ,p_organization_id     => p_organization_id
3142            ,p_transaction_type    => EGO_ITEM_PUB.G_TTYPE_CREATE
3143            ,x_return_status       => x_out.output_status.return_status
3144            ,x_errorcode           => x_out.category_output.error_code
3145            ,x_msg_count           => x_out.output_status.msg_count
3146            ,x_msg_data            => x_out.output_status.msg_data
3147           );
3148 	  INV_EBI_UTIL.debug_line('STEP 50: AFTER CALLING EGO_ITEM_PUB.process_item_cat_assignment STATUS:  '|| x_out.output_status.return_status);
3149 	  IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
3150 	    x_out.output_status.msg_data  :=  x_out.output_status.msg_data || ' -> Inventory Item Id:' || p_inventory_item_id || ' -> Org Id: ' || p_organization_id;
3151             RAISE  FND_API.g_exc_unexpected_error;
3152           END IF;
3153 	ELSE
3154 	  -- multi assign disabled
3155 	  l_old_item_category := get_item_category(p_inventory_item_id, p_organization_id, p_category_id_tbl(i).cat_set_id);
3156 	  IF l_old_item_category = 0 THEN
3157 	    -- no category exists for the category set for the item
3158 	    EGO_ITEM_PUB.process_item_cat_assignment(
3159              p_api_version         => p_api_version
3160             ,p_init_msg_list       => p_init_msg_list
3161             ,p_commit              => FND_API.g_false
3162             ,p_category_id         => l_category_id
3163             ,p_category_set_id     => p_category_id_tbl(i).cat_set_id
3164             ,p_inventory_item_id   => p_inventory_item_id
3165             ,p_organization_id     => p_organization_id
3166             ,p_transaction_type    => EGO_ITEM_PUB.G_TTYPE_CREATE
3167             ,x_return_status       => x_out.output_status.return_status
3168             ,x_errorcode           => x_out.category_output.error_code
3169             ,x_msg_count           => x_out.output_status.msg_count
3170             ,x_msg_data            => x_out.output_status.msg_data
3171             );
3172 
3173 	    INV_EBI_UTIL.debug_line('STEP 50: AFTER CALLING EGO_ITEM_PUB.process_item_cat_assignment STATUS:  '|| x_out.output_status.return_status);
3174 	    IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
3175 	      x_out.output_status.msg_data  :=  x_out.output_status.msg_data || ' -> Inventory Item Id:' || p_inventory_item_id || ' -> Org Id: ' || p_organization_id;
3176               RAISE  FND_API.g_exc_unexpected_error;
3177             END IF;
3178 	     l_no_multi_assign_cat_set_tbl.EXTEND() ;
3179 	     l_no_multi_assign_cat_set_tbl(l_no_multi_assign_cat_set_tbl.COUNT) :=p_category_id_tbl(i).cat_set_id;
3180 	  ELSE
3181                -- one category exists for the category set for the item
3182            IF (l_no_multi_assign_cat_set_tbl IS  NULL OR l_no_multi_assign_cat_set_tbl.COUNT =0)
3183             OR (NOT table_of_number_contains(l_no_multi_assign_cat_set_tbl, p_category_id_tbl(i).cat_set_id))  THEN
3184               -- Update the category
3185 
3186 	      update_category_assignments(
3187                p_api_version         => p_api_version
3188               ,p_init_msg_list       => p_init_msg_list
3189               ,p_commit              => FND_API.g_false
3190               ,p_category_id         => l_category_id
3191 	      ,p_old_category_id     => l_old_item_category
3192               ,p_category_set_id     => p_category_id_tbl(i).cat_set_id
3193               ,p_inventory_item_id   => p_inventory_item_id
3194               ,p_organization_id     => p_organization_id
3195               ,x_return_status       => x_out.output_status.return_status
3196               ,x_errorcode           => x_out.category_output.error_code
3197               ,x_msg_count           => x_out.output_status.msg_count
3198               ,x_msg_data            => x_out.output_status.msg_data
3199               );
3200 
3201 	      INV_EBI_UTIL.debug_line('STEP 50: AFTER CALLING EGO_ITEM_PUB.process_item_cat_assignment STATUS:  '|| x_out.output_status.return_status);
3202 	      IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
3203                 RAISE  FND_API.g_exc_unexpected_error;
3204               END IF;
3205 	      l_no_multi_assign_cat_set_tbl.EXTEND() ;
3206                l_no_multi_assign_cat_set_tbl(l_no_multi_assign_cat_set_tbl.COUNT) :=p_category_id_tbl(i).cat_set_id;
3207 	    ELSIF l_no_multi_assign_cat_set_tbl IS NOT NULL AND l_no_multi_assign_cat_set_tbl.COUNT > 0
3208 	            AND table_of_number_contains(l_no_multi_assign_cat_set_tbl, p_category_id_tbl(i).cat_set_id)  THEN
3209 	      -- fail if multiple category assignments are coming in for the category set
3210 	      -- with multi assign disabled
3211               FND_MESSAGE.set_name('INV',' INV_ITEM_CAT_ASSIGN_NO_MULT');
3212               FND_MSG_PUB.add;
3213                 RAISE  FND_API.g_exc_unexpected_error;
3214 	    END IF;
3215 	  END IF;
3216 	END IF;
3217     END LOOP;
3218     IF FND_API.to_boolean( p_commit ) THEN
3219       COMMIT;
3220     END IF;
3221     INV_EBI_UTIL.debug_line('STEP 60: END INSIDE INV_EBI_ITEM_HELPER.process_category_assignments ');
3222   EXCEPTION
3223     WHEN FND_API.g_exc_unexpected_error THEN
3224       ROLLBACK TO inv_ebi_cat_id_save_pnt;
3225       x_out.output_status.return_status :=  FND_API.g_ret_sts_unexp_error;
3226       IF(x_out.output_status.msg_data IS NULL) THEN
3227         FND_MSG_PUB.count_and_get(
3228           p_encoded => FND_API.g_false
3229          ,p_count   => x_out.output_status.msg_count
3230          ,p_data    => x_out.output_status.msg_data
3231         );
3232       END IF;
3233     WHEN OTHERS THEN
3234       ROLLBACK TO inv_ebi_cat_id_save_pnt;
3235       x_out.output_status.return_status := FND_API.g_ret_sts_unexp_error;
3236       IF (x_out.output_status.msg_data IS NOT NULL) THEN
3237         x_out.output_status.msg_data      :=  x_out.output_status.msg_data ||' -> INV_EBI_ITEM_HELPER.process_category_assignments ';
3238       ELSE
3239         x_out.output_status.msg_data      :=  SQLERRM||' INV_EBI_ITEM_HELPER.process_category_assignments ';
3240       END IF;
3241   END process_category_assignments;
3242    /************************************************************************************
3243    --     API name        : process_part_num_association
3244    --     Type            : Public
3245    --     Function        :
3246    --     This API is used to
3247    --
3248   ************************************************************************************/
3249    PROCEDURE process_part_num_association(
3250      p_commit                 IN   VARCHAR2 := fnd_api.g_false
3251     ,p_organization_id        IN   NUMBER
3252     ,p_inventory_item_id      IN   NUMBER
3253     ,p_mfg_part_obj           IN   inv_ebi_manufacturer_part_obj
3254     ,x_out                    OUT  NOCOPY inv_ebi_item_output_obj
3255   )
3256   IS
3257     l_count                      NUMBER := 0;
3258     l_rowid                      VARCHAR2(100);
3259     l_manufacturer_id            mtl_mfg_part_numbers.manufacturer_id%TYPE;
3260     l_mfg_part_num               mtl_mfg_part_numbers.mfg_part_num%TYPE;
3261     l_inventory_item_id          mtl_mfg_part_numbers.inventory_item_id%TYPE;
3262     l_organization_id            mtl_mfg_part_numbers.organization_id%TYPE;
3263     l_description                mtl_mfg_part_numbers.description%TYPE;
3264     l_attribute_category         mtl_mfg_part_numbers.attribute_category%TYPE;
3265     l_attribute1                 mtl_mfg_part_numbers.attribute1%TYPE;
3266     l_attribute2                 mtl_mfg_part_numbers.attribute2%TYPE;
3267     l_attribute3                 mtl_mfg_part_numbers.attribute3%TYPE;
3268     l_attribute4                 mtl_mfg_part_numbers.attribute4%TYPE;
3269     l_attribute5                 mtl_mfg_part_numbers.attribute5%TYPE;
3270     l_attribute6                 mtl_mfg_part_numbers.attribute6%TYPE;
3271     l_attribute7                 mtl_mfg_part_numbers.attribute7%TYPE;
3272     l_attribute8                 mtl_mfg_part_numbers.attribute8%TYPE;
3273     l_attribute9                 mtl_mfg_part_numbers.attribute9%TYPE;
3274     l_attribute10                mtl_mfg_part_numbers.attribute10%TYPE;
3275     l_attribute11                mtl_mfg_part_numbers.attribute11%TYPE;
3276     l_attribute12                mtl_mfg_part_numbers.attribute12%TYPE;
3277     l_attribute13                mtl_mfg_part_numbers.attribute13%TYPE;
3278     l_attribute14                mtl_mfg_part_numbers.attribute14%TYPE;
3279     l_attribute15                mtl_mfg_part_numbers.attribute15%TYPE;
3280     l_output_status              inv_ebi_output_status;
3281     CURSOR c_mfg_part_num(
3282               p_manufacturer_id    IN  NUMBER
3283              ,p_mfg_part_num       IN  VARCHAR2
3284              ,P_organization_id    IN  NUMBER
3285              ,p_inventory_item_id  IN  NUMBER
3286             ) IS
3287       SELECT
3288          rowid
3289         ,manufacturer_id
3290         ,mfg_part_num
3291         ,inventory_item_id
3292         ,organization_id
3293         ,description
3294         ,attribute_category
3295         ,attribute1
3296         ,attribute2
3297         ,attribute3
3298         ,attribute4
3299         ,attribute5
3300         ,attribute6
3301         ,attribute7
3302         ,attribute8
3303         ,attribute9
3304         ,attribute10
3305         ,attribute11
3306         ,attribute12
3307         ,attribute13
3308         ,attribute14
3309         ,attribute15
3310       FROM mtl_mfg_part_numbers
3311       WHERE manufacturer_id = p_manufacturer_id
3312       AND mfg_part_num = p_mfg_part_num
3313       AND organization_id = p_organization_id
3314       AND inventory_item_id = p_inventory_item_id;
3315   BEGIN
3316     SAVEPOINT inv_ebi_part_num_save_pnt;
3317     INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.process_part_num_association ');
3318     l_output_status  := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
3319     x_out            := inv_ebi_item_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,NULL,NULL,NULL,NULL,NULL);
3320     IF p_mfg_part_obj.mfg_part_num IS NOT NULL THEN
3321     INV_EBI_UTIL.debug_line('STEP 20: ORGANIZATION ID: '|| p_organization_id || 'MFG PART NUMBER: '|| p_mfg_part_obj.mfg_part_num  ||
3322                                      ' MANUFACTURER ID : '|| p_mfg_part_obj.manufacturer_id);
3323       OPEN c_mfg_part_num(
3324          p_manufacturer_id    =>  p_mfg_part_obj.manufacturer_id
3325         ,p_mfg_part_num       =>  p_mfg_part_obj.mfg_part_num
3326         ,P_organization_id    =>  p_organization_id
3327         ,p_inventory_item_id  =>  p_inventory_item_id
3328       );
3329       FETCH c_mfg_part_num INTO
3330          l_rowid
3331         ,l_manufacturer_id
3332         ,l_mfg_part_num
3333         ,l_inventory_item_id
3334         ,l_organization_id
3335         ,l_description
3336         ,l_attribute_category
3337         ,l_attribute1
3338         ,l_attribute2
3339         ,l_attribute3
3340         ,l_attribute4
3341         ,l_attribute5
3342         ,l_attribute6
3343         ,l_attribute7
3344         ,l_attribute8
3345         ,l_attribute9
3346         ,l_attribute10
3347         ,l_attribute11
3348         ,l_attribute12
3349         ,l_attribute13
3350         ,l_attribute14
3351         ,l_attribute15 ;
3352       IF (p_inventory_item_id <>  FND_API.G_MISS_NUM ) THEN
3353         l_inventory_item_id := p_inventory_item_id;
3354       END IF;
3355       IF (p_organization_id <>  FND_API.G_MISS_NUM ) THEN
3356          l_organization_id := p_organization_id;
3357       END IF;
3358       IF (p_mfg_part_obj.description <>  FND_API.G_MISS_CHAR) THEN
3359          l_description := p_mfg_part_obj.description;
3360       END IF;
3361       IF (p_mfg_part_obj.attribute_category <>  FND_API.G_MISS_CHAR) THEN
3362         l_attribute_category := p_mfg_part_obj.attribute_category;
3363       END IF;
3364       IF (p_mfg_part_obj.attribute1 <>  FND_API.G_MISS_CHAR) THEN
3365           l_attribute1 := p_mfg_part_obj.attribute1;
3366       END IF;
3367       IF (p_mfg_part_obj.attribute2 <>  FND_API.G_MISS_CHAR) THEN
3368           l_attribute2 := p_mfg_part_obj.attribute2;
3369       END IF;
3370       IF (p_mfg_part_obj.attribute3 <>  FND_API.G_MISS_CHAR ) THEN
3371           l_attribute3 := p_mfg_part_obj.attribute3;
3372       END IF;
3373       IF (p_mfg_part_obj.attribute4 <>  FND_API.G_MISS_CHAR) THEN
3374           l_attribute4 := p_mfg_part_obj.attribute4;
3375       END IF;
3376       IF (p_mfg_part_obj.attribute5 <>  FND_API.G_MISS_CHAR) THEN
3377           l_attribute5 := p_mfg_part_obj.attribute5;
3378       END IF;
3379       IF (p_mfg_part_obj.attribute6 <>  FND_API.G_MISS_CHAR) THEN
3380           l_attribute6 := p_mfg_part_obj.attribute6;
3381       END IF;
3382       IF (p_mfg_part_obj.attribute7 <>  FND_API.G_MISS_CHAR) THEN
3383           l_attribute7 := p_mfg_part_obj.attribute7;
3384       END IF;
3385       IF (p_mfg_part_obj.attribute8 <>  FND_API.G_MISS_CHAR) THEN
3386           l_attribute8 := p_mfg_part_obj.attribute8;
3387       END IF;
3388       IF (p_mfg_part_obj.attribute9 <>  FND_API.G_MISS_CHAR) THEN
3389           l_attribute9 := p_mfg_part_obj.attribute9;
3390       END IF;
3391       IF (p_mfg_part_obj.attribute10 <>  FND_API.G_MISS_CHAR) THEN
3392           l_attribute10 := p_mfg_part_obj.attribute10;
3393       END IF;
3394       IF (p_mfg_part_obj.attribute11 <>  FND_API.G_MISS_CHAR) THEN
3395         l_attribute11 := p_mfg_part_obj.attribute11;
3396       END IF;
3397       IF (p_mfg_part_obj.attribute12 <>  FND_API.G_MISS_CHAR ) THEN
3398           l_attribute12 := p_mfg_part_obj.attribute12;
3399       END IF;
3400       IF (p_mfg_part_obj.attribute13 <>  FND_API.G_MISS_CHAR) THEN
3401           l_attribute13 := p_mfg_part_obj.attribute13;
3402       END IF;
3403       IF (p_mfg_part_obj.attribute14 <>  FND_API.G_MISS_CHAR) THEN
3404           l_attribute14 := p_mfg_part_obj.attribute14;
3405       END IF;
3406       IF (p_mfg_part_obj.attribute15 <>  FND_API.G_MISS_CHAR) THEN
3407         l_attribute15 := p_mfg_part_obj.attribute15;
3408       END IF;
3409 
3410       IF UPPER(p_mfg_part_obj.transaction_type) = ENG_GLOBALS.G_OPR_CREATE THEN
3411       INV_EBI_UTIL.debug_line('STEP 30: BEFORE CALLING MTL_MFG_PART_NUMBERS_PKG.insert_row ');
3412         MTL_MFG_PART_NUMBERS_PKG.insert_row(
3413            x_rowid               =>        l_rowid
3414           ,x_manufacturer_id     =>        p_mfg_part_obj.manufacturer_id
3415           ,x_mfg_part_num        =>        p_mfg_part_obj.mfg_part_num
3416           ,x_inventory_item_id   =>        p_inventory_item_id
3417           ,x_last_update_date    =>        SYSDATE
3418           ,x_last_updated_by     =>        fnd_global.user_id
3419           ,x_creation_date       =>        SYSDATE
3420           ,x_created_by          =>        fnd_global.user_id
3421           ,x_last_update_login   =>        fnd_global.login_id
3422           ,x_organization_id     =>        p_organization_id
3423           ,x_description         =>        p_mfg_part_obj.description
3424           ,x_attribute_category  =>        p_mfg_part_obj.attribute_category
3425           ,x_attribute1          =>        p_mfg_part_obj.attribute1
3426           ,x_attribute2          =>        p_mfg_part_obj.attribute2
3427           ,x_attribute3          =>        p_mfg_part_obj.attribute3
3428           ,x_attribute4          =>        p_mfg_part_obj.attribute4
3429           ,x_attribute5          =>        p_mfg_part_obj.attribute5
3430           ,x_attribute6          =>        p_mfg_part_obj.attribute6
3431           ,x_attribute7          =>        p_mfg_part_obj.attribute7
3432           ,x_attribute8          =>        p_mfg_part_obj.attribute8
3433           ,x_attribute9          =>        p_mfg_part_obj.attribute9
3434           ,x_attribute10         =>        p_mfg_part_obj.attribute10
3435           ,x_attribute11         =>        p_mfg_part_obj.attribute11
3436           ,x_attribute12         =>        p_mfg_part_obj.attribute12
3437           ,x_attribute13         =>        p_mfg_part_obj.attribute13
3438           ,x_attribute14         =>        p_mfg_part_obj.attribute14
3439           ,x_attribute15         =>        p_mfg_part_obj.attribute15
3440          );
3441       INV_EBI_UTIL.debug_line('STEP 40: AFTER CALLING MTL_MFG_PART_NUMBERS_PKG.insert_row ');
3442       ELSIF UPPER(p_mfg_part_obj.transaction_type) = ENG_GLOBALS.G_OPR_UPDATE  THEN
3443       INV_EBI_UTIL.debug_line('STEP 50: BEFORE CALLING MTL_MFG_PART_NUMBERS_PKG.update_row ');
3444         MTL_MFG_PART_NUMBERS_PKG.update_row(
3445            x_rowid               =>         l_rowid
3446           ,x_manufacturer_id     =>         l_manufacturer_id
3447           ,x_mfg_part_num        =>         l_mfg_part_num
3448           ,x_inventory_item_id   =>         l_inventory_item_id
3449           ,x_last_update_date    =>         SYSDATE
3450           ,x_last_updated_by     =>         fnd_global.user_id
3451           ,x_last_update_login   =>         fnd_global.login_id
3452           ,x_organization_id     =>         l_organization_id
3453           ,x_description         =>         l_description
3454           ,x_attribute_category  =>         l_attribute_category
3455           ,x_attribute1          =>         l_attribute1
3456           ,x_attribute2          =>         l_attribute2
3457           ,x_attribute3          =>         l_attribute3
3458           ,x_attribute4          =>         l_attribute4
3459           ,x_attribute5          =>         l_attribute5
3460           ,x_attribute6          =>         l_attribute6
3461           ,x_attribute7          =>         l_attribute7
3462           ,x_attribute8          =>         l_attribute8
3463           ,x_attribute9          =>         l_attribute9
3464           ,x_attribute10         =>         l_attribute10
3465           ,x_attribute11         =>         l_attribute11
3466           ,x_attribute12         =>         l_attribute12
3467           ,x_attribute13         =>         l_attribute13
3468           ,x_attribute14         =>         l_attribute14
3469           ,x_attribute15         =>         l_attribute15
3470         );
3471       INV_EBI_UTIL.debug_line('STEP 60: AFTER CALLING MTL_MFG_PART_NUMBERS_PKG.update_row ');
3472       ELSIF UPPER(p_mfg_part_obj.transaction_type) = ENG_GLOBALS.G_OPR_DELETE THEN
3473       INV_EBI_UTIL.debug_line('STEP 70: BEFORE CALLING MTL_MFG_PART_NUMBERS_PKG.delete_row ');
3474         MTL_MFG_PART_NUMBERS_PKG.Delete_Row(l_Rowid);
3475       INV_EBI_UTIL.debug_line('STEP 80: AFTER CALLING MTL_MFG_PART_NUMBERS_PKG.delete_row ');
3476       ELSIF (p_mfg_part_obj.transaction_type IS NULL) THEN
3477         IF (c_mfg_part_num%NOTFOUND) THEN
3478       INV_EBI_UTIL.debug_line('STEP 90: BEFORE CALLING Sync Mode MTL_MFG_PART_NUMBERS_PKG.insert_row ');
3479           MTL_MFG_PART_NUMBERS_PKG.insert_row(
3480              x_rowid               =>        l_rowid
3481             ,x_manufacturer_id     =>        p_mfg_part_obj.manufacturer_id
3482             ,x_mfg_part_num        =>        p_mfg_part_obj.mfg_part_num
3483             ,x_inventory_item_id   =>        p_inventory_item_id
3484             ,x_last_update_date    =>        SYSDATE
3485             ,x_last_updated_by     =>        fnd_global.user_id
3486             ,x_creation_date       =>        SYSDATE
3487             ,x_created_by          =>        fnd_global.user_id
3488             ,x_last_update_login   =>        fnd_global.login_id
3489             ,x_organization_id     =>        p_organization_id
3490             ,x_description         =>        p_mfg_part_obj.description
3491             ,x_attribute_category  =>        p_mfg_part_obj.attribute_category
3492             ,x_attribute1          =>        p_mfg_part_obj.attribute1
3493             ,x_attribute2          =>        p_mfg_part_obj.attribute2
3494             ,x_attribute3          =>        p_mfg_part_obj.attribute3
3495             ,x_attribute4          =>        p_mfg_part_obj.attribute4
3496             ,x_attribute5          =>        p_mfg_part_obj.attribute5
3497             ,x_attribute6          =>        p_mfg_part_obj.attribute6
3498             ,x_attribute7          =>        p_mfg_part_obj.attribute7
3499             ,x_attribute8          =>        p_mfg_part_obj.attribute8
3500             ,x_attribute9          =>        p_mfg_part_obj.attribute9
3501             ,x_attribute10         =>        p_mfg_part_obj.attribute10
3502             ,x_attribute11         =>        p_mfg_part_obj.attribute11
3503             ,x_attribute12         =>        p_mfg_part_obj.attribute12
3504             ,x_attribute13         =>        p_mfg_part_obj.attribute13
3505             ,x_attribute14         =>        p_mfg_part_obj.attribute14
3506             ,x_attribute15         =>        p_mfg_part_obj.attribute15
3507            );
3508         INV_EBI_UTIL.debug_line('STEP 100: AFTER CALLING Sync Mode MTL_MFG_PART_NUMBERS_PKG.insert_row ');
3509         ELSE
3510         INV_EBI_UTIL.debug_line('STEP 110: BEFORE CALLING Sync Mode MTL_MFG_PART_NUMBERS_PKG.update_row ');
3511           MTL_MFG_PART_NUMBERS_PKG.update_row(
3512              x_rowid               =>         l_rowid
3513             ,x_manufacturer_id     =>         l_manufacturer_id
3514             ,x_mfg_part_num        =>         l_mfg_part_num
3515             ,x_inventory_item_id   =>         l_inventory_item_id
3516             ,x_last_update_date    =>         SYSDATE
3517             ,x_last_updated_by     =>         fnd_global.user_id
3518             ,x_last_update_login   =>         fnd_global.login_id
3519             ,x_organization_id     =>         l_organization_id
3520             ,x_description         =>         l_description
3521             ,x_attribute_category  =>         l_attribute_category
3522             ,x_attribute1          =>         l_attribute1
3523             ,x_attribute2          =>         l_attribute2
3524             ,x_attribute3          =>         l_attribute3
3525             ,x_attribute4          =>         l_attribute4
3526             ,x_attribute5          =>         l_attribute5
3527             ,x_attribute6          =>         l_attribute6
3528             ,x_attribute7          =>         l_attribute7
3529             ,x_attribute8          =>         l_attribute8
3530             ,x_attribute9          =>         l_attribute9
3531             ,x_attribute10         =>         l_attribute10
3532             ,x_attribute11         =>         l_attribute11
3533             ,x_attribute12         =>         l_attribute12
3534             ,x_attribute13         =>         l_attribute13
3535             ,x_attribute14         =>         l_attribute14
3536             ,x_attribute15         =>         l_attribute15
3537           );
3538         INV_EBI_UTIL.debug_line('STEP 120: AFTER CALLING Sync Mode MTL_MFG_PART_NUMBERS_PKG.update_row ');
3539         END IF;
3540       END IF;
3541       CLOSE c_mfg_part_num;
3542     ELSE
3543       FND_MESSAGE.set_name('INV_EBI','INV_EBI_PART_NUM_NULL');
3544       FND_MESSAGE.set_token('PART_NUM', p_mfg_part_obj.mfg_part_num);
3545       FND_MSG_PUB.add;
3546       RAISE  FND_API.g_exc_error;
3547     END IF;
3548     IF FND_API.to_boolean( p_commit ) THEN
3549       COMMIT;
3550     END IF;
3551   INV_EBI_UTIL.debug_line('STEP 130: END INSIDE INV_EBI_ITEM_HELPER.process_part_num_association  STATUS:  '|| x_out.output_status.return_status);
3552   EXCEPTION
3553     WHEN FND_API.g_exc_error THEN
3554       ROLLBACK TO inv_ebi_part_num_save_pnt;
3555       x_out.output_status.return_status :=  FND_API.g_ret_sts_error;
3556       IF(x_out.output_status.msg_data IS NULL) THEN
3557         FND_MSG_PUB.count_and_get(
3558           p_encoded => FND_API.g_false
3559          ,p_count   => x_out.output_status.msg_count
3560          ,p_data    => x_out.output_status.msg_data
3561        );
3562       END IF;
3563       x_out.output_status.msg_data := x_out.output_status.msg_data || ' -> Inventory Item Id:' || p_inventory_item_id || ' -> Org Id: ' || p_organization_id;
3564     WHEN FND_API.g_exc_unexpected_error THEN
3565      ROLLBACK TO inv_ebi_part_num_save_pnt;
3566       x_out.output_status.return_status :=  FND_API.g_ret_sts_unexp_error;
3567       IF(x_out.output_status.msg_data IS NULL) THEN
3568         FND_MSG_PUB.count_and_get(
3569           p_encoded => FND_API.g_false
3570          ,p_count   => x_out.output_status.msg_count
3571          ,p_data    => x_out.output_status.msg_data
3572         );
3573       END IF;
3574       x_out.output_status.msg_data := x_out.output_status.msg_data || ' -> Inventory Item Id:' || p_inventory_item_id || ' -> Org Id: ' || p_organization_id;
3575     WHEN OTHERS THEN
3576       ROLLBACK TO inv_ebi_part_num_save_pnt;
3577       x_out.output_status.return_status := FND_API.g_ret_sts_unexp_error;
3578       IF (x_out.output_status.msg_data IS NOT NULL) THEN
3579         x_out.output_status.msg_data  :=  x_out.output_status.msg_data||' -> INV_EBI_ITEM_HELPER.process_part_num_association ';
3580         x_out.output_status.msg_data := x_out.output_status.msg_data || ' -> Inventory Item Id:' || p_inventory_item_id || ' -> Org Id: ' || p_organization_id;
3581       ELSE
3582         x_out.output_status.msg_data  :=  SQLERRM||' INV_EBI_ITEM_HELPER.process_part_num_association ';
3583         x_out.output_status.msg_data := x_out.output_status.msg_data || ' -> Inventory Item Id:' || p_inventory_item_id || ' -> Org Id: ' || p_organization_id;
3584       END IF;
3585   END process_part_num_association;
3586 
3587 /************************************************************************************
3588  --    API name        : process_update_item_lifecycle
3589  --    Type            : Public
3590  --    PROCEDURE       : This API updates item lifecycle/phase/status .
3591  --    This is invoked in Create ECO flow when Revised item is sent in update mode.
3592  --    Normally in Create ECO flow item updation will be done after Change Order creation,
3593  --    but PIM does not allow updation of lifecycle when there are pending
3594  --    Change orders on the item,and if the item has BOM,lifecycle phase and status
3595  --    cannot be updated,so we use this api to update lifecycle/phase/status by invoking this api
3596  --    before change order creation.
3597  Bug:10416391
3598 ************************************************************************************/
3599 
3600 PROCEDURE process_update_item_lifecycle(
3601     p_commit             IN  VARCHAR2 := FND_API.g_false
3602    ,p_update_item_tbl    IN  inv_ebi_item_attr_tbl
3603    ,x_out                OUT NOCOPY  inv_ebi_item_output_obj
3604   ) IS
3605 
3606   l_output_status      inv_ebi_output_status;
3607   l_inventory_item_id  NUMBER;
3608   l_organization_id    NUMBER;
3609   l_item_tbl           EGO_ITEM_PUB.ITEM_TBL_TYPE;
3610   x_item_tbl           EGO_ITEM_PUB.ITEM_TBL_TYPE;
3611   l_role_grant_tbl     EGO_ITEM_PUB.ROLE_GRANT_TBL_TYPE := EGO_ITEM_PUB.G_MISS_ROLE_GRANT_TBL;
3612   x_return_status      VARCHAR2(3) := fnd_api.g_ret_sts_success;
3613   x_msg_count number;
3614 
3615   CURSOR c_get_item_curr_data(
3616              cp_item_id IN  NUMBER,
3617              cp_org_id  IN  NUMBER
3618          ) IS
3619 
3620   SELECT lifecycle_id,
3621          current_phase_id,
3622          inventory_item_status_code,
3623          item_catalog_group_id
3624   FROM   mtl_system_items_b
3625   WHERE  inventory_item_id = cp_item_id
3626   AND    organization_id   = cp_org_id;
3627 
3628   CURSOR c_get_phase_seq (cp_phase_id IN  NUMBER ) IS
3629       SELECT display_sequence
3630       FROM   pa_proj_element_versions
3631       WHERE  proj_element_id = cp_phase_id;
3632 
3633   CURSOR c_get_next_phase (cp_lifecycle_id IN  NUMBER
3634                           ,cp_phase_id     IN  NUMBER ) IS
3635       SELECT p1.proj_element_id, p1.display_sequence
3636       FROM   PA_PROJ_ELEMENT_VERSIONS P1, PA_PROJ_ELEMENT_VERSIONS P2
3637       WHERE  P1.PARENT_STRUCTURE_VERSION_ID = P2.ELEMENT_VERSION_ID
3638         AND  P2.PROJ_ELEMENT_ID = cp_lifecycle_id
3639         AND  P1.display_sequence >
3640                 (SELECT P3.display_sequence
3641                  FROM   PA_PROJ_ELEMENT_VERSIONS P3
3642                  WHERE  P3.PROJ_ELEMENT_ID = cp_phase_id
3643                    AND  P3.PARENT_STRUCTURE_VERSION_ID = P1.parent_structure_version_id
3644                  )
3645       ORDER BY p1.DISPLAY_SEQUENCE ASC;
3646 
3647     CURSOR c_get_priv_phase (cp_lifecycle_id IN  NUMBER
3648                             ,cp_phase_id     IN  NUMBER ) IS
3649       SELECT p1.proj_element_id, p1.display_sequence
3650       FROM   PA_PROJ_ELEMENT_VERSIONS P1, PA_PROJ_ELEMENT_VERSIONS P2
3651       WHERE  P1.PARENT_STRUCTURE_VERSION_ID = P2.ELEMENT_VERSION_ID
3652         AND  P2.PROJ_ELEMENT_ID = cp_lifecycle_id
3653         AND  P1.display_sequence <
3654                 (SELECT P3.display_sequence
3655                  FROM   PA_PROJ_ELEMENT_VERSIONS P3
3656                  WHERE  P3.PROJ_ELEMENT_ID = cp_phase_id
3657                    AND  P3.PARENT_STRUCTURE_VERSION_ID = P1.parent_structure_version_id
3658                  )
3659     ORDER BY p1.DISPLAY_SEQUENCE DESC;
3660 
3661   l_curr_cc_id                    NUMBER;
3662   l_curr_lifecycle_id             NUMBER;
3663   l_curr_phase_id                 NUMBER;
3664   l_curr_status_code              MTL_SYSTEM_ITEMS_B.inventory_item_status_code%TYPE;
3665   l_new_lifecycle_id              NUMBER;
3666   l_new_phase_id                  NUMBER;
3667   l_new_cc_id                     NUMBER;
3668   l_new_status_code               MTL_SYSTEM_ITEMS_B.inventory_item_status_code%TYPE;
3669   l_count                         NUMBER := 0;
3670   l_new_phase_seq                 NUMBER;
3671   l_curr_phase_seq                NUMBER;
3672   l_allow_lcp_skip                VARCHAR2(1) := NULL;
3673 
3674  BEGIN
3675 
3676    SAVEPOINT inv_ebi_proc_upd_item_lc_pnt;
3677 
3678    INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.process_update_item_lifecycle');
3679    l_output_status := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
3680    x_out           := inv_ebi_item_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,NULL,NULL,NULL,NULL,NULL);
3681 
3682    IF(p_update_item_tbl IS NOT NULL AND p_update_item_tbl.COUNT > 0) THEN
3683 
3684      FOR i IN 1..p_update_item_tbl.COUNT LOOP
3685 
3686        IF(c_get_item_curr_data % ISOPEN) THEN
3687           CLOSE c_get_item_curr_data;
3688        END IF;
3689 
3690        OPEN c_get_item_curr_data(
3691                cp_item_id  =>  p_update_item_tbl(i).item_obj.main_obj_type.inventory_item_id
3692               ,cp_org_id   =>  p_update_item_tbl(i).item_obj.main_obj_type.organization_id
3693             );
3694          FETCH c_get_item_curr_data INTO
3695            l_curr_lifecycle_id,
3696            l_curr_phase_id,
3697            l_curr_status_code,
3698            l_curr_cc_id;
3699 
3700        CLOSE c_get_item_curr_data;
3701 
3702        l_new_lifecycle_id  := p_update_item_tbl(i).item_obj.main_obj_type.lifecycle_id ;
3703        l_new_phase_id      := p_update_item_tbl(i).item_obj.main_obj_type.current_phase_id;
3704        l_new_status_code   := p_update_item_tbl(i).item_obj.main_obj_type.inventory_item_status_code;
3705 
3706 
3707        INV_EBI_UTIL.debug_line('STEP 20: l_new_lifecycle_id ' || l_new_lifecycle_id);
3708        INV_EBI_UTIL.debug_line('STEP 30: l_new_phase_id ' || l_new_phase_id);
3709        INV_EBI_UTIL.debug_line('STEP 40: l_new_status_code ' || l_new_status_code);
3710        INV_EBI_UTIL.debug_line('STEP 50: l_curr_lifecycle_id ' || l_curr_lifecycle_id);
3711        INV_EBI_UTIL.debug_line('STEP 60: l_curr_phase_id ' || l_curr_phase_id);
3712        INV_EBI_UTIL.debug_line('STEP 70: l_curr_status_code ' || l_curr_status_code);
3713 
3714        IF(l_new_lifecycle_id IS NOT NULL AND
3715           l_new_lifecycle_id <> fnd_api.g_miss_num AND
3716             (l_new_phase_id IS NULL OR l_new_phase_id = fnd_api.g_miss_num)) THEN
3717 
3718             IF(nvl(l_curr_lifecycle_id,fnd_api.g_miss_num) <> l_new_lifecycle_id) THEN
3719                l_new_phase_id  := Get_Default_Lifecycle_Phase(
3720 	                             p_lifecycle_id =>  l_new_lifecycle_id
3721                                   );
3722             ELSIF(l_curr_phase_id IS NOT NULL) THEN
3723             --If curr lifecycle id and incmong lifecycle id are same
3724             --then if current phase id is not null and if incoming phase is null populate curr phase id to
3725             --incoming value.
3726               l_new_phase_id  := l_curr_phase_id;
3727             END IF;
3728        END IF;
3729 
3730        IF(l_new_lifecycle_id = l_curr_lifecycle_id)
3731           THEN
3732          l_new_lifecycle_id  := fnd_api.g_miss_num;
3733 
3734          --Start of bug 11066016
3735          /*To skip lifecycle phases we need to invoke EGO_ITEM_PUB.Process_item_phase_and_status
3736          in loop till desired phase is reached.This api promotes or demotes lifecycle phases as per the
3737          Transaction type being passed*/
3738 
3739          l_allow_lcp_skip  :=   INV_EBI_UTIL.get_config_param_value(
3740 	                           p_config_tbl         =>  p_update_item_tbl(i).item_obj.name_value_tbl
3741 	                          ,p_config_param_name  =>  G_ALLOW_LIFECYCLE_PHASE_SKIP
3742 	                        );
3743 
3744 	 IF (l_allow_lcp_skip IS NULL OR l_allow_lcp_skip = fnd_api.g_miss_char) THEN
3745 
3746 	   l_allow_lcp_skip  := INV_EBI_FLAGS.G_ALLOW_LIFECYCLE_PHASE_SKIP;
3747 
3748 	 END IF;
3749          IF(l_allow_lcp_skip = FND_API.G_TRUE) THEN
3750 
3751            IF(l_new_phase_id <> l_curr_phase_id) THEN
3752 
3753              INV_EBI_UTIL.debug_line('STEP 80: Current Phase and Incoming Phase is different');
3754              OPEN c_get_phase_seq(cp_phase_id => l_curr_phase_id);
3755              FETCH c_get_phase_seq INTO l_curr_phase_seq;
3756 
3757              IF c_get_phase_seq%NOTFOUND THEN
3758                l_curr_phase_seq := -1;
3759              END IF;
3760 
3761              CLOSE c_get_phase_seq;
3762              INV_EBI_UTIL.debug_line('STEP 90: CURRENT PHASE SEQUENCE IS ' || l_curr_phase_seq);
3763              OPEN c_get_phase_seq(cp_phase_id => l_new_phase_id);
3764              FETCH c_get_phase_seq INTO l_new_phase_seq;
3765 
3766              IF c_get_phase_seq%NOTFOUND THEN
3767                l_new_phase_seq := -1;
3768              END IF;
3769 
3770              CLOSE c_get_phase_seq;
3771              INV_EBI_UTIL.debug_line('STEP 100: INCOMING PHASE SEQUENCE IS ' || l_new_phase_seq);
3772 
3773              IF l_curr_phase_seq < l_new_phase_seq THEN
3774                INV_EBI_UTIL.debug_line('STEP 110: CURRENT PHASE SEQUENCE IS LESS THAN INCOMING PHASE SEQUENCE');
3775                FOR cur_next_phase IN c_get_next_phase(
3776                                      cp_lifecycle_id  => l_curr_lifecycle_id,
3777                                      cp_phase_id      => l_curr_phase_id
3778                                    )
3779                LOOP
3780                 IF(cur_next_phase.display_sequence < l_new_phase_seq) THEN
3781                   INV_EBI_UTIL.debug_line('STEP 120: START CALLING EGO_ITEM_PUB.PROCESS_ITEM_PHASE_AND_STATUS FOR PROMOTING PHASE ');
3782 	          EGO_ITEM_PUB.Process_item_phase_and_status(
3783 	           p_api_version           => 1.0
3784 	          ,p_commit                => fnd_api.g_false
3785 	          ,p_init_msg_list         => fnd_api.g_true
3786 	          ,p_transaction_type      => EGO_ITEM_PUB.G_TTYPE_PROMOTE
3787 	          ,p_inventory_item_id     => p_update_item_tbl(i).item_obj.main_obj_type.inventory_item_id
3788 	          ,p_item_number           => p_update_item_tbl(i).item_obj.main_obj_type.item_number
3789 	          ,p_organization_id       => p_update_item_tbl(i).item_obj.main_obj_type.organization_id
3790 	          ,p_organization_code     => p_update_item_tbl(i).item_obj.main_obj_type.organization_code
3791 	          ,p_revision_id           => NULL
3792 	          ,p_revision              => NULL
3793 	          ,p_implement_changes     => fnd_api.g_true
3794 	          ,p_status                => NULL
3795 	          ,p_effective_date        => sysdate
3796 	          ,p_lifecycle_id          => l_curr_lifecycle_id
3797 	          ,p_phase_id              => cur_next_phase.proj_element_id
3798 	          ,p_new_effective_date    => NULL
3799 	          ,x_return_status         => x_out.output_status.return_status
3800 	          ,x_msg_count             => x_out.output_status.msg_count
3801 	          ,x_msg_data              => x_out.output_status.msg_data
3802                  ) ;
3803                   INV_EBI_UTIL.debug_line('STEP 130: END CALLING EGO_ITEM_PUB.PROCESS_ITEM_PHASE_AND_STATUS  status is '|| x_out.output_status.return_status );
3804                   IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
3805 	        	  x_out.item_number := p_update_item_tbl(i).item_obj.main_obj_type.item_number;
3806 	        	  x_out.organization_code := p_update_item_tbl(i).item_obj.main_obj_type.organization_code;
3807 	        	  x_out.output_status.msg_data := x_out.output_status.msg_data || ' -> Item Number:' || p_update_item_tbl(i).item_obj.main_obj_type.item_number || ' -> Org Code: ' || p_update_item_tbl(i).item_obj.main_obj_type.organization_code;
3808 	        	  RAISE  FND_API.g_exc_unexpected_error;
3809                   END IF;
3810 
3811                  END IF;
3812                END LOOP;
3813 
3814               ELSIF l_curr_phase_seq > l_new_phase_seq THEN
3815                 INV_EBI_UTIL.debug_line('STEP 140: INCOMING PHASE SEQUENCE IS LESS THAN CURRENT PHASE SEQUENCE');
3816 	        FOR cur_priv_phase IN c_get_priv_phase(
3817                                      cp_lifecycle_id  => l_curr_lifecycle_id,
3818                                      cp_phase_id      => l_curr_phase_id
3819                                    )
3820                 LOOP
3821 
3822                 IF(cur_priv_phase.display_sequence > l_new_phase_seq) THEN
3823                   INV_EBI_UTIL.debug_line('STEP 150: START CALLING EGO_ITEM_PUB.PROCESS_ITEM_PHASE_AND_STATUS FOR DEMOTING PHASE ');
3824 	          EGO_ITEM_PUB.Process_item_phase_and_status(
3825 	           p_api_version           => 1.0
3826 	          ,p_commit                => fnd_api.g_false
3827 	          ,p_init_msg_list         => fnd_api.g_true
3828 	          ,p_transaction_type      => EGO_ITEM_PUB.G_TTYPE_DEMOTE
3829 	          ,p_inventory_item_id     => p_update_item_tbl(i).item_obj.main_obj_type.inventory_item_id
3830 	          ,p_item_number           => p_update_item_tbl(i).item_obj.main_obj_type.item_number
3831 	          ,p_organization_id       => p_update_item_tbl(i).item_obj.main_obj_type.organization_id
3832 	          ,p_organization_code     => p_update_item_tbl(i).item_obj.main_obj_type.organization_code
3833 	          ,p_revision_id           => NULL
3834 	          ,p_revision              => NULL
3835 	          ,p_implement_changes     => fnd_api.g_true
3836 	          ,p_status                => NULL
3837 	          ,p_effective_date        => sysdate
3838 	          ,p_lifecycle_id          => l_curr_lifecycle_id
3839 	          ,p_phase_id              => cur_priv_phase.proj_element_id
3840 	          ,p_new_effective_date    => NULL
3841 	          ,x_return_status         => x_out.output_status.return_status
3842 	          ,x_msg_count             => x_out.output_status.msg_count
3843 	          ,x_msg_data              => x_out.output_status.msg_data
3844                  ) ;
3845                   INV_EBI_UTIL.debug_line('STEP 160: END CALLING EGO_ITEM_PUB.PROCESS_ITEM_PHASE_AND_STATUS  status is '|| x_out.output_status.return_status );
3846                   IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
3847 	        	  x_out.item_number := p_update_item_tbl(i).item_obj.main_obj_type.item_number;
3848 	        	  x_out.organization_code := p_update_item_tbl(i).item_obj.main_obj_type.organization_code;
3849 	        	  x_out.output_status.msg_data := x_out.output_status.msg_data || ' -> Item Number:' || p_update_item_tbl(i).item_obj.main_obj_type.item_number || ' -> Org Code: ' || p_update_item_tbl(i).item_obj.main_obj_type.organization_code;
3850 	        	  RAISE  FND_API.g_exc_unexpected_error;
3851                   END IF;
3852 
3853                  END IF;
3854                END LOOP;
3855 
3856              END IF;
3857            END IF;
3858          END IF;--End of bug 11066016
3859        END IF;
3860 
3861        IF(l_new_phase_id = l_curr_phase_id)
3862          THEN
3863          l_new_phase_id   := fnd_api.g_miss_num;
3864        END IF;
3865 
3866        IF (l_new_status_code = l_curr_status_code)
3867          THEN
3868 
3869          l_new_status_code   := fnd_api.g_miss_char;
3870     -- If incoming item status  is Obsolete or Inactive,item should be deactivated after CO creation is
3871     -- Succesfull,because Inactive or Obsolete item cannot be used as Revised item on CO.
3872        ELSIF(l_new_status_code IN ('Obsolete', 'Inactive')) THEN
3873          l_new_status_code  := fnd_api.g_miss_char;
3874          l_new_phase_id     := fnd_api.g_miss_num;
3875          l_new_lifecycle_id := fnd_api.g_miss_num;
3876          -- If incoming status is inactive or obsolete as this updation will
3877          -- be successfull only after co creation ,and if we just try to update phase ,updation will fail because
3878          -- earlier status and incoming new phase may not be a valid combination.so if status is inactive or obsolete
3879          -- do not update phase and status prior to co creation ,and user should not send bom data when item status
3880          -- is being deactivated.
3881        END IF;
3882 
3883        IF( l_new_lifecycle_id <> fnd_api.g_miss_num OR
3884            l_new_phase_id     <> fnd_api.g_miss_num OR
3885            l_new_status_code  <> fnd_api.g_miss_char) THEN
3886 
3887          l_item_tbl.DELETE;
3888          l_item_tbl(1).transaction_type             := INV_EBI_ITEM_PUB.g_otype_update;
3889          l_item_tbl(1).inventory_item_id            := p_update_item_tbl(i).item_obj.main_obj_type.inventory_item_id;
3890          l_item_tbl(1).organization_id              := p_update_item_tbl(i).item_obj.main_obj_type.organization_id;
3891          l_item_tbl(1).lifecycle_id                 := l_new_lifecycle_id;
3892          l_item_tbl(1).current_phase_id             := l_new_phase_id;
3893          l_item_tbl(1).inventory_item_status_code   := l_new_status_code;
3894          l_item_tbl(1).item_catalog_group_id        := p_update_item_tbl(i).item_obj.main_obj_type.item_catalog_group_id;
3895 
3896          INV_EBI_UTIL.debug_line('STEP 170 :  l_item_tbl(1).transaction_type ' || l_item_tbl(1).transaction_type);
3897 	 INV_EBI_UTIL.debug_line('STEP 180 :  l_item_tbl(1).inventory_item_id  ' || l_item_tbl(1).inventory_item_id );
3898          INV_EBI_UTIL.debug_line('STEP 190: l_item_tbl(1).organization_id ' || l_item_tbl(1).organization_id);
3899          INV_EBI_UTIL.debug_line('STEP 200: l_item_tbl(1).lifecycle_id ' || l_item_tbl(1).lifecycle_id);
3900 	 INV_EBI_UTIL.debug_line('STEP 210: l_item_tbl(1).current_phase_id  ' || l_item_tbl(1).current_phase_id );
3901          INV_EBI_UTIL.debug_line('STEP 220: l_item_tbl(1).inventory_item_status_code ' || l_item_tbl(1).inventory_item_status_code);
3902          INV_EBI_UTIL.debug_line('STEP 230: l_item_tbl(1).item_catalog_group_id ' || l_item_tbl(1).item_catalog_group_id);
3903          EGO_ITEM_PUB.PROCESS_ITEMS(
3904 	    p_api_version            => 1.0
3905 	   ,p_init_msg_list          => fnd_api.g_true
3906 	   ,p_commit                 => fnd_api.g_false
3907 	   ,p_item_tbl               => l_item_tbl
3908 	   ,p_role_grant_tbl         => l_role_grant_tbl
3909 	   ,x_item_tbl               => x_item_tbl
3910 	   ,x_return_status          => x_out.output_status.return_status
3911 	   ,x_msg_count              => x_out.output_status.msg_count
3912 	 );
3913 	 INV_EBI_UTIL.debug_line('STEP 240: END CALLING EGO_ITEM_PUB.PROCESS_ITEMS STATUS: '|| x_out.output_status.return_status);
3914 	 IF (x_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
3915 	   x_out.item_number := p_update_item_tbl(i).item_obj.main_obj_type.item_number;
3916 	   x_out.organization_code := p_update_item_tbl(i).item_obj.main_obj_type.organization_code;
3917 	   x_out.output_status.msg_data := x_out.output_status.msg_data || ' -> Item Number:' || p_update_item_tbl(i).item_obj.main_obj_type.item_number || ' -> Org Code: ' || p_update_item_tbl(i).item_obj.main_obj_type.organization_code;
3918 	   RAISE  FND_API.g_exc_unexpected_error;
3919          END IF;
3920        END IF;
3921      END LOOP;
3922    END IF;
3923 
3924    IF FND_API.to_boolean( p_commit ) THEN
3925       COMMIT;
3926    END IF;
3927 
3928   EXCEPTION
3929 
3930     WHEN FND_API.g_exc_unexpected_error THEN
3931       ROLLBACK TO inv_ebi_proc_upd_item_lc_pnt;
3932       IF(c_get_item_curr_data % ISOPEN) THEN
3933          CLOSE c_get_item_curr_data;
3934       END IF;
3935 
3936       IF c_get_phase_seq%ISOPEN THEN
3937          CLOSE c_get_phase_seq;
3938       END IF;
3939 
3940       x_out.output_status.return_status :=  FND_API.g_ret_sts_unexp_error;
3941      IF(x_out.output_status.msg_data IS NULL) THEN
3942        x_out.output_status.error_table     :=  INV_EBI_UTIL.get_error_table();
3943 
3944        IF (x_out.output_status.error_table IS NOT NULL AND x_out.output_status.error_table.COUNT > 0) THEN
3945 
3946 	 x_out.output_status.msg_data := INV_EBI_UTIL.get_error_table_msgtxt(x_out.output_status.error_table);
3947          IF(x_out.output_status.msg_data IS NULL) THEN
3948 
3949             fnd_msg_pub.count_and_get(
3950               p_encoded => fnd_api.g_false
3951              ,p_count   => x_out.output_status.msg_count
3952              ,p_data    => x_out.output_status.msg_data
3953             );
3954          END IF;
3955        END IF;
3956     END IF;
3957     WHEN OTHERS THEN
3958       ROLLBACK TO inv_ebi_proc_upd_item_lc_pnt;
3959       IF(c_get_item_curr_data % ISOPEN) THEN
3960          CLOSE c_get_item_curr_data;
3961       END IF;
3962 
3963       IF c_get_phase_seq%ISOPEN THEN
3964          CLOSE c_get_phase_seq;
3965       END IF;
3966 
3967       x_out.output_status.return_status := FND_API.g_ret_sts_unexp_error;
3968       x_out.output_status.error_table   :=  INV_EBI_UTIL.get_error_table();
3969 
3970       IF (x_out.output_status.error_table IS NOT NULL AND x_out.output_status.error_table.COUNT > 0) THEN
3971         x_out.output_status.msg_data := INV_EBI_UTIL.get_error_table_msgtxt(x_out.output_status.error_table);
3972       END IF;
3973 
3974       IF (x_out.output_status.msg_data IS NOT NULL) THEN
3975         x_out.output_status.msg_data      :=  x_out.output_status.msg_data ||' -> INV_EBI_ITEM_HELPER.process_update_item_lifecycle ';
3976       ELSE
3977         x_out.output_status.msg_data      :=  SQLERRM||' INV_EBI_ITEM_HELPER.process_update_item_lifecycle ';
3978       END IF;
3979  END process_update_item_lifecycle;
3980 
3981 
3982 /************************************************************************************
3983 --      API name        : sync_item
3984 --      Type            : Public
3985 --      Function        :
3986 --
3987   --Should include API calls for Item alternative Catalog ,create Manufacture,Manufacture part
3988   --Template Ids??
3989   --Check if Organization Ids are there and how assignments to multiple orgs have to be handled
3990 ************************************************************************************/
3991 Procedure sync_item (
3992   p_commit           IN  VARCHAR2 := FND_API.g_false
3993  ,p_operation        IN  VARCHAR2
3994  ,p_item             IN  inv_ebi_item_obj
3995  ,x_out              OUT NOCOPY inv_ebi_item_output_obj
3996 ) IS
3997   l_out                   inv_ebi_item_output_obj;
3998   l_api_version           NUMBER:=1.0;
3999   l_inventory_item_id     NUMBER;
4000   l_organization_id       NUMBER;
4001   l_organization_code     VARCHAR2(3);
4002   l_item_number           VARCHAR2(2000);
4003   l_output_status         inv_ebi_output_status;
4004   l_category_output       inv_ebi_category_output_obj;
4005 
4006   l_mfg_part_num_obj      inv_ebi_manufacturer_part_obj;
4007   l_master_org_id         NUMBER;
4008   l_manufacturer_count    NUMBER := 0;
4009   l_pk_col_name_val_pairs INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl;
4010   l_operating_unit       VARCHAR2(240);
4011   l_operating_unit_id    NUMBER;
4012   l_description          VARCHAR2(240);
4013   l_ret                  VARCHAR2(1);
4014 BEGIN
4015   SAVEPOINT inv_ebi_sync_item_save_pnt;
4016   l_output_status := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
4017   x_out           := inv_ebi_item_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,NULL,NULL,NULL,NULL,NULL);
4018   l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
4019 
4020   --Create or update item
4021   INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.sync_item ');
4022   INV_EBI_UTIL.debug_line('STEP 20: ORGANIZATION CODE: '|| p_item.main_obj_type.organization_code ||' Item Number: '|| p_item.main_obj_type.item_number);
4023   INV_EBI_UTIL.debug_line('STEP 30: BEFORE CALLING INV_EBI_ITEM_HELPER.process_item_pvt ');
4024   process_item_pvt (
4025     p_item             =>  p_item
4026    ,p_operation        =>  p_operation
4027    ,p_commit           =>  FND_API.g_false
4028    ,x_out              =>  l_out
4029   );
4030   INV_EBI_UTIL.debug_line('STEP 40: AFTER CALLING INV_EBI_ITEM_HELPER.process_item_pvt STATUS: '|| l_out.output_status.return_status);
4031   IF (l_out.output_status.return_status <> fnd_api.g_ret_sts_success) THEN
4032     x_out.output_status.msg_data := l_out.output_status.msg_data;
4033     RAISE  fnd_api.g_exc_unexpected_error;
4034   END IF;
4035   l_inventory_item_id  := l_out.inventory_item_id;
4036   l_organization_id    := l_out.organization_id;
4037   l_organization_code  := l_out.organization_code;
4038   l_item_number        := l_out.item_number;
4039   l_operating_unit     := l_out.operating_unit;
4040   l_operating_unit_id  := l_out.operating_unit_id;
4041   l_description        := l_out.description;
4042 
4043   --Assign item to all the orgs sent in the list.
4044   IF (p_item.org_id_obj_type IS NOT  NULL AND p_item.org_id_obj_type.COUNT > 0) THEN
4045     INV_EBI_UTIL.debug_line('STEP 50: BEFORE CALLING INV_EBI_ITEM_HELPER.process_org_id_assignments' );
4046     INV_EBI_UTIL.debug_line('STEP 60: INVENTORY ITEM ID:  '|| l_inventory_item_id );
4047     process_org_id_assignments(
4048       p_init_msg_list      =>  p_item.main_obj_type.init_msg_list
4049      ,p_commit             =>  fnd_api.g_false
4050      ,p_inventory_item_id  =>  l_inventory_item_id
4051      ,p_item_number        =>  p_item.main_obj_type.item_number
4052      ,p_org_id_tbl         =>  p_item.org_id_obj_type
4053      ,x_out                =>  l_out
4054      );
4055      INV_EBI_UTIL.debug_line('STEP 70: AFTER CALLING INV_EBI_ITEM_HELPER.process_org_id_assignments STATUS: '|| l_out.output_status.return_status);
4056   END IF;
4057   IF (l_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
4058     x_out.output_status.msg_data := l_out.output_status.msg_data;
4059     RAISE  fnd_api.g_exc_unexpected_error;
4060   END IF;
4061   --Catalog Category assignment
4062   IF (p_item.category_id_obj_tbl_type IS NOT NULL AND p_item.category_id_obj_tbl_type.COUNT > 0) THEN
4063   INV_EBI_UTIL.debug_line('STEP 80: BEFORE CALLING INV_EBI_ITEM_HELPER.process_category_assignments ');
4064     process_category_assignments(
4065       p_api_version        =>  l_api_version
4066      ,p_init_msg_list      =>  p_item.main_obj_type.init_msg_list
4067      ,p_commit             =>  fnd_api.g_false
4068      ,p_inventory_item_id  =>  l_inventory_item_id
4069      ,p_organization_id    =>  p_item.main_obj_type.organization_id
4070      ,p_category_id_tbl    =>  p_item.category_id_obj_tbl_type
4071      ,x_out                =>  l_out
4072     );
4073     INV_EBI_UTIL.debug_line('STEP 90: AFTER CALLING INV_EBI_ITEM_HELPER.process_category_assignments STATUS: '|| l_out.output_status.return_status);
4074  END IF;
4075  IF (l_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
4076    x_out.output_status.msg_data := l_out.output_status.msg_data;
4077    RAISE  fnd_api.g_exc_unexpected_error;
4078  END IF;
4079  l_category_output :=  inv_ebi_category_output_obj(l_out.category_output.error_code);
4080  l_master_org_id  := INV_EBI_UTIL.get_master_organization(
4081                         p_organization_id  => p_item.main_obj_type.organization_id
4082                      );
4083 
4084  --Manufacturer Part Num association needs to be done for master org only.
4085  IF(l_master_org_id = p_item.main_obj_type.organization_id) THEN
4086    IF (p_item.part_num_obj_tbl_type IS NOT NULL AND p_item.part_num_obj_tbl_type.COUNT > 0) THEN
4087      FOR i IN p_item.part_num_obj_tbl_type.FIRST..p_item.part_num_obj_tbl_type.LAST
4088      LOOP
4089        l_mfg_part_num_obj := p_item.part_num_obj_tbl_type(i);
4090        IF(l_mfg_part_num_obj.manufacturer_id IS NOT NULL AND l_mfg_part_num_obj.manufacturer_id <> fnd_api.g_miss_num) THEN
4091        SELECT COUNT(1) INTO l_manufacturer_count
4092        FROM mtl_manufacturers
4093        WHERE manufacturer_id = l_mfg_part_num_obj.manufacturer_id;
4094        END IF;
4095        IF(l_manufacturer_count > 0 ) THEN
4096        INV_EBI_UTIL.debug_line('STEP 100: BEFORE CALLING INV_EBI_ITEM_HELPER.process_part_num_association');
4097         process_part_num_association(
4098            p_commit                 =>  FND_API.g_false
4099           ,p_organization_id        =>  p_item.main_obj_type.organization_id
4100           ,p_inventory_item_id      =>  l_inventory_item_id
4101           ,p_mfg_part_obj           =>  l_mfg_part_num_obj
4102           ,x_out                    =>  l_out
4103          );
4104        INV_EBI_UTIL.debug_line('STEP 110: AFTER CALLING INV_EBI_ITEM_HELPER.process_part_num_association STATUS: '|| l_out.output_status.return_status);
4105        ELSE
4106 
4107          --If manufcaturer does not exist raise exception
4108          FND_MESSAGE.set_name('INV','INV_EBI_MFG_NOT_EXIST');
4109          IF l_mfg_part_num_obj.manufacturer_name IS NULL THEN
4110            l_pk_col_name_val_pairs.EXTEND(1);
4111            l_pk_col_name_val_pairs(1).name  := 'manufacturer_id';
4112            l_pk_col_name_val_pairs(1).value := l_mfg_part_num_obj.manufacturer_id;
4113            l_mfg_part_num_obj.manufacturer_name := id_to_value(
4114                                                       p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
4115                                                      ,p_entity_name            => G_MANUFACTURER
4116                                                     );
4117            l_pk_col_name_val_pairs.TRIM(1);
4118          END IF;
4119          FND_MESSAGE.set_token('MFG_NAME', l_mfg_part_num_obj.manufacturer_name);
4120          FND_MSG_PUB.add;
4121          RAISE  FND_API.g_exc_error;
4122        END IF;
4123        IF (l_out.output_status.return_status <> FND_API.g_ret_sts_success) THEN
4124           x_out.output_status.msg_data := l_out.output_status.msg_data ;
4125           RAISE  FND_API.g_exc_unexpected_error;
4126        END IF;
4127      END LOOP;
4128      INV_EBI_UTIL.debug_line('STEP 120: END CALLING INV_EBI_ITEM_HELPER.process_part_num_association');
4129     END IF;
4130   END IF;
4131 
4132   IF ( p_item.uom_conversion_obj_tbl_type IS NOT NULL AND p_item.uom_conversion_obj_tbl_type.Count>0) THEN
4133     UOMConversion(p_uom_input        => p_item.uom_conversion_obj_tbl_type
4134                   ,p_item_id          => l_inventory_item_id
4135 		  ,x_msg_data         => x_out.output_status.msg_data
4136                   ,x_return_status    => l_ret
4137     );
4138     IF (l_ret <> FND_API.g_ret_sts_success) THEN
4139       RAISE  FND_API.g_exc_unexpected_error;
4140     END IF;
4141   END IF;
4142   x_out  := inv_ebi_item_output_obj(l_inventory_item_id,l_organization_id,l_organization_code,l_item_number,l_out.output_status,NULL,l_category_output,NULL,l_operating_unit,l_operating_unit_id,l_description);
4143 
4144   IF fnd_api.to_boolean(p_commit) THEN
4145     COMMIT;
4146   END IF;
4147 INV_EBI_UTIL.debug_line('STEP 130: END INSIDE INV_EBI_ITEM_HELPER.sync_item STATUS:  '|| x_out.output_status.return_status);
4148 EXCEPTION
4149   WHEN FND_API.g_exc_error THEN
4150     ROLLBACK TO inv_ebi_sync_item_save_pnt;
4151     x_out.output_status.return_status :=  FND_API.g_ret_sts_error;
4152     IF(x_out.output_status.msg_data IS NULL) THEN
4153       FND_MSG_PUB.count_and_get(
4154         p_encoded => FND_API.g_false
4155        ,p_count   => x_out.output_status.msg_count
4156        ,p_data    => x_out.output_status.msg_data
4157      );
4158     END IF;
4159   WHEN FND_API.g_exc_unexpected_error THEN
4160     ROLLBACK TO inv_ebi_sync_item_save_pnt;
4161     x_out.output_status.return_status :=  FND_API.g_ret_sts_unexp_error;
4162     IF(x_out.output_status.msg_data IS NULL) THEN
4163       FND_MSG_PUB.count_and_get(
4164         p_encoded => FND_API.g_false
4165        ,p_count   => x_out.output_status.msg_count
4166        ,p_data    => x_out.output_status.msg_data
4167       );
4168     END IF;
4169   WHEN OTHERS THEN
4170     ROLLBACK TO inv_ebi_sync_item_save_pnt;
4171     x_out.output_status.return_status := FND_API.g_ret_sts_unexp_error;
4172     IF (x_out.output_status.msg_data IS NOT NULL) THEN
4173       x_out.output_status.msg_data  :=  l_out.output_status.msg_data ||' -> INV_EBI_ITEM_HELPER.sync_item ';
4174     ELSE
4175       x_out.output_status.msg_data  :=  SQLERRM||' INV_EBI_ITEM_HELPER.sync_item ';
4176     END IF;
4177 END sync_item;
4178 /************************************************************************************
4179 --      API name        : get_item_balance
4180 --      Type            : Public
4181 --      Function        :
4182 ************************************************************************************/
4183 PROCEDURE get_item_balance(
4184     p_item_balance_input        IN              inv_ebi_item_bal_input_list
4185    ,x_item_balance_output       OUT NOCOPY      inv_ebi_item_bal_output_list
4186    ,x_return_status             OUT NOCOPY      VARCHAR2
4187    ,x_msg_count                 OUT NOCOPY      NUMBER
4188    ,x_msg_data                  OUT NOCOPY      VARCHAR2
4189   )
4190 IS
4191   l_locator_id                  NUMBER;
4192   l_cur_index                   NUMBER;
4193   l_item_bal_output             inv_ebi_item_balance_obj;
4194   l_item_balance_loc_tbl        inv_ebi_item_bal_loc_tbl;
4195   l_item_balance_output_tbl     inv_ebi_item_bal_output_tbl;
4196   l_item_balance_loc_obj        inv_ebi_item_bal_loc_obj;
4197   l_item_balance_output_obj     inv_ebi_item_bal_output_obj;
4198   l_is_revision_control         BOOLEAN;
4199   l_is_lot_control              BOOLEAN;
4200   l_is_serial_control           BOOLEAN;
4201   l_return_status               VARCHAR2(1);
4202   l_msg_count                   NUMBER;
4203   l_msg_data                    VARCHAR2(1000);
4204   l_qty_on_hand                 NUMBER;
4205   l_res_qty_on_hand             NUMBER;
4206   l_qty_reserved                NUMBER;
4207   l_qty_suggested               NUMBER;
4208   l_avail_to_transact           NUMBER;
4209   l_avail_to_reserve            NUMBER;
4210   l_sec_qty_on_hand             NUMBER;
4211   l_sec_res_qty_on_hand         NUMBER;
4212   l_sec_qty_reserved            NUMBER;
4213   l_sec_qty_suggested           NUMBER;
4214   l_sec_avail_to_transact       NUMBER;
4215   l_sec_avail_to_reserve        NUMBER;
4216   l_organization_code           VARCHAR2(3000);
4217   l_item_name                   VARCHAR2(30);
4218   l_pk_col_name_val_pairs       INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl;
4219   CURSOR c_locator_id(p_inventory_item_id IN NUMBER, p_organization_id IN NUMBER,
4220                       p_revision IN VARCHAR2, p_subinventory_code IN VARCHAR2
4221                      )IS
4222   SELECT
4223     DISTINCT(locator_id)
4224   FROM
4225     mtl_onhand_locator_v
4226   WHERE
4227     locator_id IS NOT NULL AND
4228     inventory_item_id = p_inventory_item_id AND
4229     organization_id = p_organization_id AND
4230     (revision IS NOT NULL OR (revision = p_revision)) AND
4231     (subinventory_code IS NOT NULL OR (subinventory_code = p_subinventory_code));
4232 BEGIN
4233   INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.get_item_balance');
4234   x_return_status := fnd_api.g_ret_sts_success;
4235   l_item_balance_output_tbl := inv_ebi_item_bal_output_tbl();
4236   Inv_Quantity_Tree_Pub.clear_quantity_cache;
4237   IF p_item_balance_input.item_input_table IS NOT NULL THEN
4238     FOR i IN p_item_balance_input.item_input_table.FIRST..p_item_balance_input.item_input_table.LAST LOOP
4239       BEGIN
4240         l_item_balance_output_tbl.EXTEND();
4241         IF p_item_balance_input.item_input_table(i).is_revision_control = FND_API.G_TRUE THEN
4242          l_is_revision_control := TRUE;
4243         ELSE
4244          l_is_revision_control := FALSE;
4245         END IF;
4246         IF p_item_balance_input.item_input_table(i).is_lot_control = FND_API.G_TRUE THEN
4247           l_is_lot_control := TRUE;
4248         ELSE
4249           l_is_lot_control := FALSE;
4250         END IF;
4251         IF p_item_balance_input.item_input_table(i).is_serial_control = FND_API.G_TRUE THEN
4252           l_is_serial_control := TRUE;
4253         ELSE
4254           l_is_serial_control := FALSE;
4255         END IF;
4256 	INV_EBI_UTIL.debug_line('STEP 20: BEFORE CALLING INV_QUANTITY_TREE_PUB.query_quantities');
4257         INV_QUANTITY_TREE_PUB.query_quantities(
4258           p_api_version_number                  => p_item_balance_input.item_input_table(i).api_version_number
4259          ,p_init_msg_lst                        => p_item_balance_input.item_input_table(i).init_msg_lst
4260          ,p_organization_id                     => p_item_balance_input.item_input_table(i).organization_id
4261          ,p_inventory_item_id                   => p_item_balance_input.item_input_table(i).inventory_item_id
4262          ,p_tree_mode                           => p_item_balance_input.item_input_table(i).tree_mode
4263          ,p_is_revision_control                 => l_is_revision_control
4264          ,p_is_lot_control                      => l_is_lot_control
4265          ,p_is_serial_control                   => l_is_serial_control
4266          ,p_grade_code                          => p_item_balance_input.item_input_table(i).grade_code
4267          ,p_demand_source_type_id               => p_item_balance_input.item_input_table(i).demand_source_type_id
4268          ,p_demand_source_header_id             => p_item_balance_input.item_input_table(i).demand_source_header_id
4269          ,p_demand_source_line_id               => p_item_balance_input.item_input_table(i).demand_source_line_id
4270          ,p_demand_source_name                  => p_item_balance_input.item_input_table(i).demand_source_name
4271          ,p_lot_expiration_date                 => p_item_balance_input.item_input_table(i).lot_expiration_date
4272          ,p_revision                            => p_item_balance_input.item_input_table(i).revision
4273          ,p_lot_number                          => p_item_balance_input.item_input_table(i).lot_number
4274          ,p_subinventory_code                   => p_item_balance_input.item_input_table(i).subinventory_code
4275          ,p_locator_id                          => p_item_balance_input.item_input_table(i).locator_id
4276          ,p_onhand_source                       => p_item_balance_input.item_input_table(i).onhand_source
4277          ,p_transfer_subinventory_code          => p_item_balance_input.item_input_table(i).transfer_subinventory_code
4278          ,p_cost_group_id                       => p_item_balance_input.item_input_table(i).cost_group_id
4279          ,p_lpn_id                              => p_item_balance_input.item_input_table(i).lpn_id
4280          ,p_transfer_locator_id                 => p_item_balance_input.item_input_table(i).transfer_locator_id
4281          ,x_qoh                                 => l_qty_on_hand
4282          ,x_rqoh                                => l_res_qty_on_hand
4283          ,x_qr                                  => l_qty_reserved
4284          ,x_qs                                  => l_qty_suggested
4285          ,x_att                                 => l_avail_to_transact
4286          ,x_atr                                 => l_avail_to_reserve
4287          ,x_sqoh                                => l_sec_qty_on_hand
4288          ,x_srqoh                               => l_sec_res_qty_on_hand
4289          ,x_sqr                                 => l_sec_qty_reserved
4290          ,x_sqs                                 => l_sec_qty_suggested
4291          ,x_satt                                => l_sec_avail_to_transact
4292          ,x_satr                                => l_sec_avail_to_reserve
4293          ,x_return_status                       => l_return_status
4294          ,x_msg_count                           => l_msg_count
4295          ,x_msg_data                            => l_msg_data
4296         );
4297 	INV_EBI_UTIL.debug_line('STEP 30: AFTER CALLING INV_QUANTITY_TREE_PUB.query_quantities STATUS: '||l_return_status);
4298         l_item_bal_output := inv_ebi_item_balance_obj(
4299                                l_return_status
4300                               ,l_msg_count
4301                               ,l_msg_data
4302                               ,l_qty_on_hand
4303                               ,l_res_qty_on_hand
4304                               ,l_qty_reserved
4305                               ,l_qty_suggested
4306                               ,l_avail_to_transact
4307                               ,l_avail_to_reserve
4308                               ,l_sec_qty_on_hand
4309                               ,l_sec_res_qty_on_hand
4310                               ,l_sec_qty_reserved
4311                               ,l_sec_qty_suggested
4312                               ,l_sec_avail_to_transact
4313                               ,l_sec_avail_to_reserve
4314                              );
4315         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
4316         l_pk_col_name_val_pairs.EXTEND(1);
4317         l_pk_col_name_val_pairs(1).name   := 'organization_id';
4318         l_pk_col_name_val_pairs(1).value  := p_item_balance_input.item_input_table(i).organization_id;
4319         l_organization_code  :=  INV_EBI_ITEM_HELPER.id_to_value (
4320                                                  p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
4321                                                  ,p_entity_name=> G_ORGANIZATION
4322                                                );
4323         INV_EBI_UTIL.debug_line('STEP 40: ORG CODE: '||l_organization_code);
4324         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
4325         l_pk_col_name_val_pairs.EXTEND(1);
4326         l_pk_col_name_val_pairs(1).name   := 'organization_id';
4327         l_pk_col_name_val_pairs(1).value  := p_item_balance_input.item_input_table(i).organization_id;
4328         l_pk_col_name_val_pairs.EXTEND(1);
4329         l_pk_col_name_val_pairs(2).name   := 'inventory_item_id';
4330         l_pk_col_name_val_pairs(2).value  := p_item_balance_input.item_input_table(i).inventory_item_id;
4331         l_item_name :=  INV_EBI_ITEM_HELPER.id_to_value(
4332                                       p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
4333                                       ,p_entity_name=> G_INVENTORY_ITEM
4334                                     );
4335         INV_EBI_UTIL.debug_line('STEP 50: ITEMNAME: '||l_item_name);
4336         l_item_balance_output_obj := inv_ebi_item_bal_output_obj(
4337                                        p_item_balance_input.item_input_table(i).organization_id
4338                                       ,p_item_balance_input.item_input_table(i).inventory_item_id
4339                                       ,l_organization_code
4340                                       ,l_item_name
4341                                       ,p_item_balance_input.item_input_table(i).demand_source_type_id
4342                                       ,p_item_balance_input.item_input_table(i).demand_source_header_id
4343                                       ,p_item_balance_input.item_input_table(i).demand_source_line_id
4344                                       ,p_item_balance_input.item_input_table(i).revision
4345                                       ,p_item_balance_input.item_input_table(i).lot_number
4346                                       ,p_item_balance_input.item_input_table(i).subinventory_code
4347                                       ,p_item_balance_input.item_input_table(i).locator_id
4348                                       ,p_item_balance_input.item_input_table(i).onhand_source
4349                                       ,p_item_balance_input.item_input_table(i).transfer_subinventory_code
4350                                       ,p_item_balance_input.item_input_table(i).cost_group_id
4351                                       ,p_item_balance_input.item_input_table(i).lpn_id
4352                                       ,p_item_balance_input.item_input_table(i).transfer_locator_id
4353                                       ,l_item_bal_output
4354                                       ,NULL
4355                                       ,NULL
4356                                       ,NULL);
4357         l_item_balance_output_tbl(i) := l_item_balance_output_obj;
4358         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4359           RAISE  FND_API.g_exc_unexpected_error;
4360         END IF;
4361         --If Locator Information is required then get the item balance based on location
4362         IF p_item_balance_input.item_input_table(i).is_loc_info_required = fnd_api.g_true THEN
4363           l_item_balance_loc_tbl :=inv_ebi_item_bal_loc_tbl();
4364           l_cur_index :=1;
4365           FOR cer IN c_locator_id(p_item_balance_input.item_input_table(i).inventory_item_id
4366                                  ,p_item_balance_input.item_input_table(i).organization_id
4367                                  ,p_item_balance_input.item_input_table(i).revision
4368                                  ,p_item_balance_input.item_input_table(i).subinventory_code)
4369           LOOP
4370             l_locator_id := cer.locator_id;
4371             l_item_balance_loc_tbl.extend();
4372 	    INV_EBI_UTIL.debug_line('STEP 60: BEFORE CALLING INV_QUANTITY_TREE_PUB.query_quantities');
4373             INV_Quantity_Tree_PUB.Query_Quantities(
4374               p_api_version_number                => p_item_balance_input.item_input_table(i).api_version_number
4375              ,p_init_msg_lst                      => p_item_balance_input.item_input_table(i).init_msg_lst
4376              ,p_organization_id                   => p_item_balance_input.item_input_table(i).organization_id
4377              ,p_inventory_item_id                 => p_item_balance_input.item_input_table(i).inventory_item_id
4378              ,p_tree_mode                         => p_item_balance_input.item_input_table(i).tree_mode
4379              ,p_is_revision_control               => l_is_revision_control
4380              ,p_is_lot_control                    => l_is_lot_control
4381              ,p_is_serial_control                 => l_is_serial_control
4382              ,p_grade_code                        => p_item_balance_input.item_input_table(i).grade_code
4383              ,p_demand_source_type_id             => p_item_balance_input.item_input_table(i).demand_source_type_id
4384              ,p_demand_source_header_id           => p_item_balance_input.item_input_table(i).demand_source_header_id
4385              ,p_demand_source_line_id             => p_item_balance_input.item_input_table(i).demand_source_line_id
4386              ,p_demand_source_name                => p_item_balance_input.item_input_table(i).demand_source_name
4387              ,p_lot_expiration_date               => p_item_balance_input.item_input_table(i).lot_expiration_date
4388              ,p_revision                          => p_item_balance_input.item_input_table(i).revision
4389              ,p_lot_number                        => p_item_balance_input.item_input_table(i).lot_number
4390              ,p_subinventory_code                 => p_item_balance_input.item_input_table(i).subinventory_code
4391              ,p_locator_id                        => l_locator_id
4392              ,p_onhand_source                     => p_item_balance_input.item_input_table(i).onhand_source
4393              ,p_transfer_subinventory_code        => p_item_balance_input.item_input_table(i).transfer_subinventory_code
4394              ,p_cost_group_id                     => p_item_balance_input.item_input_table(i).cost_group_id
4395              ,p_lpn_id                            => p_item_balance_input.item_input_table(i).lpn_id
4396              ,p_transfer_locator_id               => p_item_balance_input.item_input_table(i).transfer_locator_id
4397              ,x_qoh                               => l_qty_on_hand
4398              ,x_rqoh                              => l_res_qty_on_hand
4399              ,x_qr                                => l_qty_reserved
4400              ,x_qs                                => l_qty_suggested
4401              ,x_att                               => l_avail_to_transact
4402              ,x_atr                               => l_avail_to_reserve
4403              ,x_sqoh                              => l_sec_qty_on_hand
4404              ,x_srqoh                             => l_sec_res_qty_on_hand
4405              ,x_sqr                               => l_sec_qty_reserved
4406              ,x_sqs                               => l_sec_qty_suggested
4407              ,x_satt                              => l_sec_avail_to_transact
4408              ,x_satr                              => l_sec_avail_to_reserve
4409              ,x_return_status                     => l_return_status
4410              ,x_msg_count                         => l_msg_count
4411              ,x_msg_data                          => l_msg_data
4412             );
4413 	    INV_EBI_UTIL.debug_line('STEP 70: AFTER CALLING INV_QUANTITY_TREE_PUB.query_quantities STATUS: '||l_return_status);
4414             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4415               l_msg_data := l_msg_data || ' -> Inventory Item Id:' || p_item_balance_input.item_input_table(i).inventory_item_id || ' -> Org Id: ' || p_item_balance_input.item_input_table(i).organization_id;
4416               RAISE  FND_API.g_exc_unexpected_error;
4417             END IF;
4418             l_item_bal_output := inv_ebi_item_balance_obj(
4419                                    l_return_status
4420                                   ,l_msg_count
4421                                   ,l_msg_data
4422                                   ,l_qty_on_hand
4423                                   ,l_res_qty_on_hand
4424                                   ,l_qty_reserved
4425                                   ,l_qty_suggested
4426                                   ,l_avail_to_transact
4427                                   ,l_avail_to_reserve
4428                                   ,l_sec_qty_on_hand
4429                                   ,l_sec_res_qty_on_hand
4430                                   ,l_sec_qty_reserved
4431                                   ,l_sec_qty_suggested
4432                                   ,l_sec_avail_to_transact
4433                                   ,l_sec_avail_to_reserve
4434                                  );
4435             l_item_balance_loc_obj := inv_ebi_item_bal_loc_obj(l_locator_id,l_item_bal_output);
4436             l_item_balance_loc_tbl(l_cur_index) := l_item_balance_loc_obj;
4437             l_cur_index := l_cur_index + 1;
4438           END LOOP;
4439         END IF; -- IF p_item_balance_input.item_input_table(i).is_loc_info_required is true
4440       l_item_balance_output_tbl(i).item_balance_loc_tbl := l_item_balance_loc_tbl;
4441       INV_EBI_UTIL.debug_line('STEP 80: BEFORE CALLING INV_EBI_ITEM_HELPER.get_operating_unit');
4442       get_Operating_unit
4443         (p_oranization_id => p_item_balance_input.item_input_table(i).organization_id
4444         ,x_operating_unit => l_item_balance_output_tbl(i).operating_unit
4445         ,x_ouid      => l_item_balance_output_tbl(i).operating_unit_id
4446         );
4447       INV_EBI_UTIL.debug_line('STEP 90: AFTER CALLING INV_EBI_ITEM_HELPER.get_operating_unit');
4448       EXCEPTION
4449         WHEN FND_API.g_exc_unexpected_error THEN
4450           x_return_status := FND_API.g_ret_sts_error;
4451           IF l_msg_data IS NULL THEN
4452             FND_MSG_PUB.count_and_get(
4453               p_encoded => FND_API.g_false
4454              ,p_count => l_item_balance_output_tbl(i).item_balance_output.msg_count
4455              ,p_data => l_item_balance_output_tbl(i).item_balance_output.msg_data
4456             );
4457           END IF;
4458           populate_err_msg  (p_orgid           => p_item_balance_input.item_input_table(i).organization_id
4459                             ,p_invid           => p_item_balance_input.item_input_table(i).inventory_item_id
4460                             ,p_org_code        => l_organization_code
4461                             ,p_item_name       => l_item_name
4462                             ,p_part_err_msg    => l_item_balance_output_tbl(i).item_balance_output.msg_data
4463                             ,x_err_msg         => x_msg_data
4464                              );
4465           WHEN OTHERS THEN
4466             x_return_status := FND_API.g_ret_sts_error;
4467           populate_err_msg(p_orgid           => p_item_balance_input.item_input_table(i).organization_id
4468                           ,p_invid           => p_item_balance_input.item_input_table(i).inventory_item_id
4469                           ,p_org_code        => l_organization_code
4470                           ,p_item_name       => l_item_name
4471                           ,p_part_err_msg    => SQLERRM||'-> at inv_ebi_item_helper.get_item_balance'
4472                           ,x_err_msg         => x_msg_data
4473                           );
4474      END;
4475 
4476     END LOOP;
4477     x_item_balance_output :=inv_ebi_item_bal_output_list(l_item_balance_output_tbl);
4478   END IF; --p_item_balance_input IS NOT NULL
4479   INV_EBI_UTIL.debug_line('STEP 100: AFTER CALLING INV_EBI_ITEM_HELPER.get_item_balance STATUS: '||x_return_status);
4480 EXCEPTION
4481   WHEN OTHERS THEN
4482     x_return_status := FND_API.g_ret_sts_error;
4483     IF (x_msg_data IS NOT NULL) THEN
4484       x_msg_data := x_msg_data ||' -> at INV_EBI_ITEM_HELPER.get_item_balance';
4485     ELSE
4486       x_msg_data  :=  SQLERRM||' at INV_EBI_ITEM_HELPER.get_item_balance ';
4487     END IF;
4488 END get_item_balance;
4489 /************************************************************************************
4490 --      API name        : validate_get_item_request
4491 --      Type            : Public
4492 --      Function        :
4493 --      This API is used to validate the Item Request Inputs
4494 --
4495 ************************************************************************************/
4496 PROCEDURE validate_get_item_request(
4497   p_get_opr_attrs_rec  IN         inv_ebi_get_operational_attrs,
4498   x_status             OUT NOCOPY VARCHAR2,
4499   x_msg_count          OUT NOCOPY NUMBER,
4500   x_msg_data           OUT NOCOPY VARCHAR2
4501 )
4502 IS
4503 BEGIN
4504   FND_MSG_PUB.initialize();
4505   IF((p_get_opr_attrs_rec.item_id IS NULL) AND
4506      (p_get_opr_attrs_rec.item_name IS NULL)) THEN
4507      FND_MESSAGE.set_name('INV','INV_EBI_NO_ITEM_ID_NAME');
4508      FND_MSG_PUB.add;
4509      RAISE FND_API.G_EXC_ERROR;
4510   ELSIF((p_get_opr_attrs_rec.organization_id IS NULL) AND
4511      (p_get_opr_attrs_rec.organization_code IS NULL))THEN
4512      FND_MESSAGE.set_name('INV','INV_EBI_NO_ORGID_ORGCODE');
4513      FND_MSG_PUB.add;
4514      RAISE FND_API.G_EXC_ERROR;
4515   ELSE
4516      x_status := FND_API.G_RET_STS_SUCCESS;
4517   END IF;
4518 EXCEPTION
4519   WHEN FND_API.G_EXC_ERROR THEN
4520     x_status := FND_API.G_RET_STS_ERROR;
4521     FND_MSG_PUB.count_and_get(
4522       p_encoded => FND_API.g_false
4523       ,p_count   => x_msg_count
4524       ,p_data    => x_msg_data
4525     );
4526   WHEN OTHERS THEN
4527     x_status := FND_API.G_RET_STS_ERROR;
4528     IF (x_msg_data IS NOT NULL) THEN
4529           x_msg_data   :=   x_msg_data||' -> INV_EBI_ITEM_HELPER.validate_get_item_request ';
4530     ELSE
4531           x_msg_data   :=   SQLERRM||' INV_EBI_ITEM_HELPER.validate_get_item_request ';
4532     END IF;
4533 END validate_get_item_request;
4534 /************************************************************************************
4535    --      API name        : get_uda_attributes
4536    --      Type            : Public
4537    --      Function        :
4538    --      Bug 7240247
4539  ************************************************************************************/
4540 
4541   PROCEDURE get_uda_attributes(
4542    p_classification_id  IN     NUMBER,
4543    p_attr_group_type    IN     VARCHAR2,
4544    p_application_id     IN     NUMBER,
4545    p_attr_grp_id_tbl    IN     FND_TABLE_OF_NUMBER,
4546    p_data_level         IN     VARCHAR2,
4547    p_revision_id        IN     NUMBER,
4548    p_object_name        IN     VARCHAR2,
4549    p_pk_data            IN     EGO_COL_NAME_VALUE_PAIR_ARRAY,
4550    x_uda_obj            OUT    NOCOPY inv_ebi_uda_input_obj,
4551    x_uda_output_obj     OUT    NOCOPY inv_ebi_eco_output_obj
4552  ) IS
4553  l_attr_grp_req_tbl        ego_attr_group_request_table;
4554  l_attr_grp_req_obj        ego_attr_group_request_obj;
4555  l_attr_grp                ego_user_attr_row_table;
4556  l_attr                    ego_user_attr_data_table;
4557  l_count                   NUMBER := 0;
4558  l_new_attr_in_tbl         VARCHAR2(1)    := fnd_api.g_false;
4559  l_uda_out                 inv_ebi_uda_output_obj;
4560  l_output_status           inv_ebi_output_status;
4561  l_attr_group_name         VARCHAR2(30);
4562  l_data_level              VARCHAR2(20) := NULL;
4563  l_data_level1             VARCHAR2(20) := NULL;
4564  l_is_item_level           VARCHAR2(1)  := fnd_api.g_false;
4565  l_is_item_revision_level  VARCHAR2(1)  := fnd_api.g_false;
4566 
4567  --Commented for bug 10397048
4568 /*CURSOR c_attr_cursor(
4569       p_classification_id     IN NUMBER,
4570       p_attr_group_type       IN VARCHAR2,
4571       p_application_id        IN NUMBER,
4572       p_attr_group_name       IN VARCHAR2,
4573       p_data_level_int_name   IN VARCHAR2
4574       ) IS
4575   SELECT
4576     att.attr_name,
4577     ass.attr_group_id,
4578     ass.data_level_int_name
4579   FROM
4580     ego_obj_attr_grp_assocs_v ass,
4581     ego_attrs_v att
4582   WHERE ass.classification_code = TO_CHAR(p_classification_id)
4583     AND ass.attr_group_type = att.attr_group_type
4584     AND att.attr_group_type = p_attr_group_type
4585     AND ass.application_id = att.application_id
4586     AND att.application_id = p_application_id
4587     AND ass.attr_group_name = att.attr_group_name
4588     AND att.attr_group_name = p_attr_group_name
4589     AND ass.data_level_int_name = p_data_level_int_name;*/
4590 
4591 --Above cursor query is changed for bug 10379048
4592 CURSOR c_attr_cursor(
4593       p_attr_group_type       IN VARCHAR2,
4594       p_application_id        IN NUMBER,
4595       p_attr_group_name       IN VARCHAR2
4596       ) IS
4597   SELECT
4598     att.attr_name
4599   FROM
4600     ego_attrs_v att
4601   WHERE
4602     att.attr_group_type     = p_attr_group_type
4603     AND att.application_id  = p_application_id
4604     AND att.attr_group_name = p_attr_group_name;
4605 
4606   -- Added for bug 10397048
4607   CURSOR c_data_level(
4608                p_item_catalog_group_id NUMBER,
4609                p_attr_grp_id           NUMBER) IS
4610 
4611         SELECT data_level_int_name
4612         FROM ego_obj_attr_grp_assocs_v
4613         WHERE attr_group_id = p_attr_grp_id
4614         AND classification_code IN( SELECT item_catalog_group_id
4615                                     FROM mtl_item_catalog_groups_kfv
4616                                     CONNECT BY PRIOR parent_catalog_group_id = item_catalog_group_id
4617                                     START WITH item_catalog_group_id = p_item_catalog_group_id
4618                                 );
4619 
4620  BEGIN
4621    l_uda_out         := inv_ebi_uda_output_obj(NULL,NULL);
4622    l_output_status   := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
4623    x_uda_output_obj  := inv_ebi_eco_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,l_uda_out);
4624 
4625    l_attr_grp_req_tbl := EGO_ATTR_GROUP_REQUEST_TABLE();
4626 
4627    l_count := 1;
4628 
4629 
4630    FOR i IN 1..p_attr_grp_id_tbl.COUNT LOOP
4631 
4632      IF(p_attr_group_type = INV_EBI_UTIL.G_EGO_ITEMMGMT_GROUP) THEN
4633 
4634        -- Commented out for bug 10397048
4635       /*SELECT data_level_int_name INTO l_data_level
4636        FROM ego_obj_attr_grp_assocs_v
4637        WHERE attr_group_id = p_attr_grp_id_tbl(i)
4638        AND classification_code = TO_CHAR(p_classification_id);*/
4639 
4640        -- An attribute group can have multiple data levels,but item revision level is mutually excelusive.
4641        -- Currently we support only item and item revision level udas.
4642        -- Start of Bug 10397048
4643        FOR cur_data_level IN c_data_level(
4644 	                            p_classification_id,
4645 	                            p_attr_grp_id_tbl(i)
4646 	                        )
4647        LOOP
4648 
4649 	 IF(cur_data_level.data_level_int_name  = INV_EBI_ITEM_PUB.G_DATA_LEVEL_ITEM) THEN
4650 
4651 	   l_is_item_level    :=  fnd_api.g_true;
4652 	   l_data_level       :=  cur_data_level.data_level_int_name;
4653 
4654 	 ELSIF
4655 	 -- Item Rev level is mutually exclusive with all other levels
4656 	   (cur_data_level.data_level_int_name = INV_EBI_ITEM_PUB.G_DATA_LEVEL_ITEM_REV) THEN
4657 	      l_is_item_revision_level  :=  fnd_api.g_true;
4658 	      l_data_level              :=  cur_data_level.data_level_int_name;
4659 	 END IF;
4660 
4661        END LOOP;
4662        -- End of Bug 10397048
4663      ELSE
4664 
4665        l_data_level := p_data_level;
4666 
4667      END IF;
4668 
4669      --Commented the query for bug 10397048
4670      /*SELECT attr_group_name INTO l_attr_group_name
4671             FROM ego_obj_attr_grp_assocs_v
4672             WHERE
4673               attr_group_id = p_attr_grp_id_tbl(i) AND
4674               classification_code = TO_CHAR(p_classification_id) AND
4675               data_level_int_name = l_data_level;*/
4676 
4677      --Above query is changed for bug 10397048
4678      SELECT attr_group_name INTO l_attr_group_name
4679      FROM ego_attr_groups_v
4680      WHERE attr_group_id   =  p_attr_grp_id_tbl(i) AND
4681            application_id  =  p_application_id     AND
4682            attr_group_type =  p_attr_group_type;
4683 
4684      FOR attr_cursor IN c_attr_cursor(
4685                            p_attr_group_type      => p_attr_group_type,
4686                            p_application_id       => p_application_id,
4687                            p_attr_group_name      => l_attr_group_name
4688                          )
4689      LOOP
4690        l_new_attr_in_tbl := FND_API.G_FALSE;
4691 
4692        IF(l_count <>1 ) THEN
4693          FOR ctr1 IN l_attr_grp_req_tbl.FIRST..l_attr_grp_req_tbl.LAST  LOOP
4694            IF (l_attr_grp_req_tbl(ctr1).attr_group_id = p_attr_grp_id_tbl(i) AND
4695              l_attr_grp_req_tbl(ctr1).data_level = l_data_level ) THEN
4696              l_attr_grp_req_tbl(ctr1).ATTR_NAME_LIST := l_attr_grp_req_tbl(ctr1).ATTR_NAME_LIST || ',' || attr_cursor.attr_name;
4697              l_new_attr_in_tbl := FND_API.G_TRUE;
4698            END IF;
4699          END LOOP;
4700        END IF;
4701 
4702        IF l_new_attr_in_tbl <> FND_API.G_TRUE THEN
4703 
4704          l_attr_grp_req_tbl.extend();
4705 
4706          IF(l_data_level = INV_EBI_ITEM_PUB.g_data_level_item_rev) THEN
4707            l_data_level1 := p_revision_id;
4708          ELSE
4709            l_data_level1 := NULL;
4710          END IF;
4711 
4712 
4713          l_attr_grp_req_tbl(l_count) := EGO_ATTR_GROUP_REQUEST_OBJ(p_attr_grp_id_tbl(i)
4714           ,NULL
4715           ,NULL
4716           ,NULL
4717           ,l_data_level
4718           ,l_data_level1
4719           ,NULL
4720           ,NULL
4721           ,NULL
4722           ,NULL
4723           ,attr_cursor.attr_name);
4724 
4725          l_count := l_count + 1;
4726        END IF;
4727      END LOOP;
4728   END LOOP;
4729   EGO_USER_ATTRS_DATA_PUB.Get_User_Attrs_Data(
4730      p_api_version                  =>  1.0
4731     ,p_object_name                  =>  p_object_name
4732     ,p_pk_column_name_value_pairs   =>  p_pk_data
4733     ,p_attr_group_request_table     =>  l_attr_grp_req_tbl
4734     ,x_attributes_row_table         =>  l_attr_grp
4735     ,x_attributes_data_table        =>  l_attr
4736     ,x_return_status                =>  x_uda_output_obj.output_status.return_status
4737     ,x_errorcode                    =>  x_uda_output_obj.uda_output.errorcode
4738     ,x_msg_count                    =>  x_uda_output_obj.output_status.msg_count
4739     ,x_msg_data                     =>  x_uda_output_obj.output_status.msg_data
4740   );
4741   IF(x_uda_output_obj.output_status.return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4742     RAISE FND_API.g_exc_unexpected_error;
4743   END IF;
4744 
4745   INV_EBI_UTIL.transform_attr_rowdata_uda(
4746      p_attributes_row_table    =>   l_attr_grp
4747     ,p_attributes_data_table   =>   l_attr
4748     ,x_uda_input_obj           =>   x_uda_obj
4749     ,x_return_status           =>   x_uda_output_obj.output_status.return_status
4750     ,x_msg_count               =>   x_uda_output_obj.output_status.msg_count
4751     ,x_msg_data                =>   x_uda_output_obj.output_status.msg_data
4752 
4753   );
4754   IF(x_uda_output_obj.output_status.return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4755     RAISE FND_API.g_exc_unexpected_error;
4756   END IF;
4757 
4758 
4759   EXCEPTION
4760     WHEN FND_API.g_exc_unexpected_error THEN
4761 
4762       x_uda_output_obj.output_status.return_status :=  FND_API.g_ret_sts_unexp_error;
4763       IF(c_attr_cursor % ISOPEN) THEN
4764         CLOSE c_attr_cursor;
4765       END IF;
4766       IF(c_data_level % ISOPEN) THEN
4767         CLOSE c_data_level;
4768       END IF;
4769       IF(x_uda_output_obj.output_status.msg_data IS NULL) THEN
4770         fnd_msg_pub.count_and_get(
4771           p_encoded => FND_API.g_false
4772          ,p_count   => x_uda_output_obj.output_status.msg_count
4773          ,p_data    => x_uda_output_obj.output_status.msg_data
4774        );
4775       END IF;
4776 
4777     WHEN OTHERS THEN
4778 
4779       x_uda_output_obj.output_status.return_status := FND_API.g_ret_sts_unexp_error;
4780       IF(c_attr_cursor % ISOPEN) THEN
4781         CLOSE c_attr_cursor;
4782       END IF;
4783       IF(c_data_level % ISOPEN) THEN
4784         CLOSE c_data_level;
4785       END IF;
4786       IF (x_uda_output_obj.output_status.msg_data IS NOT NULL) THEN
4787         x_uda_output_obj.output_status.msg_data      :=  x_uda_output_obj.output_status.msg_data||' ->INV_EBI_CHANGE_ORDER_HELPER.get_uda_attributes ';
4788       ELSE
4789         x_uda_output_obj.output_status.msg_data      :=  SQLERRM||'INV_EBI_CHANGE_ORDER_HELPER.get_uda_attributes ';
4790     END IF;
4791  END get_uda_attributes;
4792 
4793 
4794 /************************************************************************************
4795 --      API name        : get_item_uda
4796 --      Type            : Private
4797 --      Function        :
4798 --      This API is used to retrieve the uda's of the requested Items.
4799 --      Bug 7240247
4800 ************************************************************************************/
4801 
4802 PROCEDURE get_item_uda(
4803   p_inventory_item_id         IN  NUMBER,
4804   p_organization_id           IN  NUMBER,
4805   p_item_classification_id    IN  NUMBER,
4806   p_revision_id               IN  NUMBER,
4807   x_item_uda                  OUT NOCOPY      inv_ebi_uda_input_obj,
4808   x_return_status             OUT NOCOPY      VARCHAR2,
4809   x_msg_count                 OUT NOCOPY      NUMBER,
4810   x_msg_data                  OUT NOCOPY      VARCHAR2
4811 ) IS
4812 
4813 l_count                  NUMBER :=0;
4814 l_item_uda_count         NUMBER :=0;
4815 l_attr_group_count       NUMBER :=0;
4816 l_application_id         NUMBER;
4817 l_attr_group_id_tbl      FND_TABLE_OF_NUMBER;
4818 l_pkdata                 EGO_COL_NAME_VALUE_PAIR_ARRAY;
4819 l_uda_output_obj         inv_ebi_eco_output_obj;
4820 l_output_status          inv_ebi_output_status;
4821 
4822 -- Changed the Cursor query for Bug 10397048 to support inherited attribute groups of an icc
4823 CURSOR c_attr_group_id IS
4824   SELECT DISTINCT ems.attr_group_id
4825   FROM
4826     ego_mtl_sy_items_ext_vl ems,
4827     ego_obj_attr_grp_assocs_v ass
4828   WHERE
4829      ems.inventory_item_id      =  p_inventory_item_id AND
4830      ems.organization_id        =  p_organization_id AND
4831      ems.item_catalog_group_id  IN ( SELECT item_catalog_group_id
4832                                      FROM mtl_item_catalog_groups_kfv
4833                                      CONNECT BY PRIOR parent_catalog_group_id = item_catalog_group_id
4834                                      START WITH item_catalog_group_id = p_item_classification_id
4835                                    ) AND
4836      ems.attr_group_id          =  ass.attr_group_id;
4837 
4838 BEGIN
4839 
4840   l_output_status   := inv_ebi_output_status(fnd_api.g_ret_sts_success,NULL,NULL,NULL);
4841   l_uda_output_obj  := inv_ebi_eco_output_obj(NULL,NULL,NULL,NULL,l_output_status,NULL,NULL);
4842 
4843 
4844   IF( p_inventory_item_id IS NOT NULL AND
4845       p_organization_id IS NOT NULL AND
4846       p_item_classification_id IS NOT NULL) THEN
4847 
4848     SELECT COUNT(1) INTO l_count
4849     FROM mtl_system_items_b
4850     WHERE
4851       inventory_item_id      =  p_inventory_item_id AND
4852       organization_id        =  p_organization_id AND
4853       item_catalog_group_id  =  p_item_classification_id;
4854 
4855   END IF;
4856 
4857   IF(l_count > 0) THEN
4858 
4859     IF c_attr_group_id%ISOPEN THEN
4860       CLOSE c_attr_group_id;
4861     END IF;
4862 
4863     OPEN c_attr_group_id ;
4864       FETCH c_attr_group_id  BULK COLLECT INTO l_attr_group_id_tbl ;
4865     CLOSE c_attr_group_id;
4866 
4867 
4868     IF(l_attr_group_id_tbl IS NOT NULL AND l_attr_group_id_tbl.COUNT > 0) THEN
4869 
4870       l_pkdata := EGO_COL_NAME_VALUE_PAIR_ARRAY();
4871       l_pkdata.extend(2);
4872       l_pkdata(1) := EGO_COL_NAME_VALUE_PAIR_OBJ('INVENTORY_ITEM_ID',p_inventory_item_id);
4873       l_pkdata(2) := EGO_COL_NAME_VALUE_PAIR_OBJ('ORGANIZATION_ID',p_organization_id);
4874 
4875       l_application_id:= INV_EBI_UTIL.get_application_id(
4876                              p_application_short_name => 'EGO'
4877                          );
4878 
4879       IF(l_application_id IS NULL ) THEN
4880 
4881         FND_MESSAGE.set_name('INV','INV_EBI_APP_INVALID');
4882         FND_MESSAGE.set_token('COL_VALUE', 'EGO');
4883         FND_MSG_PUB.add;
4884         RAISE FND_API.g_exc_error;
4885       END IF;
4886 
4887       get_uda_attributes(
4888          p_classification_id  =>  p_item_classification_id,
4889          p_attr_group_type    =>  INV_EBI_UTIL.G_EGO_ITEMMGMT_GROUP,
4890          p_application_id     =>  l_application_id,
4891          p_attr_grp_id_tbl    =>  l_attr_group_id_tbl,
4892          p_data_level         =>  NULL,
4893          p_revision_id        =>  p_revision_id,
4894          p_object_name        =>  INV_EBI_UTIL.G_EGO_ITEM,
4895          p_pk_data            =>  l_pkdata,
4896          x_uda_obj            =>  x_item_uda,
4897          x_uda_output_obj     =>  l_uda_output_obj
4898       );
4899 
4900       IF(l_uda_output_obj.output_status.return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
4901         x_msg_data      := l_uda_output_obj.output_status.msg_data ;
4902         RAISE FND_API.g_exc_unexpected_error;
4903       END IF;
4904     END IF;
4905   END IF;
4906 
4907   EXCEPTION
4908     WHEN FND_API.g_exc_unexpected_error THEN
4909 
4910       IF c_attr_group_id%ISOPEN THEN
4911         CLOSE c_attr_group_id;
4912       END IF;
4913 
4914       x_return_status :=  FND_API.g_ret_sts_unexp_error;
4915       IF(x_msg_data IS NULL) THEN
4916         fnd_msg_pub.count_and_get(
4917           p_encoded => FND_API.g_false
4918          ,p_count   => x_msg_count
4919          ,p_data    => x_msg_data
4920        );
4921       END IF;
4922     WHEN OTHERS THEN
4923 
4924       IF c_attr_group_id%ISOPEN THEN
4925         CLOSE c_attr_group_id;
4926       END IF;
4927 
4928       x_return_status :=  FND_API.g_ret_sts_unexp_error;
4929       IF (x_msg_data IS NOT NULL) THEN
4930         x_msg_data      :=  x_msg_data||' ->INV_EBI_ITEM_HELPER.get_item_uda ';
4931       ELSE
4932         x_msg_data      :=  SQLERRM||'INV_EBI_ITEM_HELPER.get_item_uda';
4933     END IF;
4934  END get_item_uda;
4935 /************************************************************************************
4936 --      API name        : get_item_attributes
4937 --      Type            : Public
4938 --      Function        :
4939 --      This API is used to retrieve the operational attributes for the requested Items.
4940 --
4941 ************************************************************************************/
4942 PROCEDURE get_item_attributes(
4943   p_get_item_inp_obj       IN         inv_ebi_get_item_input,
4944   x_item_tbl_obj           OUT NOCOPY inv_ebi_item_attr_tbl_obj,
4945   x_return_status          OUT NOCOPY VARCHAR2,
4946   x_msg_count              OUT NOCOPY NUMBER,
4947   x_msg_data               OUT NOCOPY VARCHAR2
4948 )
4949 IS
4950   l_item_phy_obj            inv_ebi_item_physical_obj;
4951   l_item_inv_obj            inv_ebi_item_inventory_obj;
4952   l_item_pur_obj            inv_ebi_item_purchasing_obj;
4953   l_item_recving_obj        inv_ebi_item_receiving_obj;
4954   l_item_gplan_obj          inv_ebi_item_gplanning_obj;
4955   l_item_mrp_obj            inv_ebi_item_mrp_obj;
4956   l_item_order_obj          inv_ebi_item_order_obj;
4957   l_item_service_obj        inv_ebi_item_service_obj;
4958   l_item_bom_obj            inv_ebi_item_bom_obj;
4959   l_item_costing_obj        inv_ebi_item_costing_obj;
4960   l_item_lead_time_obj      inv_ebi_item_lead_time_obj;
4961   l_item_wip_obj            inv_ebi_item_wip_obj;
4962   l_item_invoice_obj        inv_ebi_item_invoice_obj;
4963   l_item_web_opiton         inv_ebi_item_web_option_obj;
4964   l_item_asset_obj          inv_ebi_item_asset_obj;
4965   l_item_process_obj        inv_ebi_item_processmfg_obj;
4966   l_item_mfr_part_obj       inv_ebi_manufacturer_part_obj;
4967   l_item_core_obj           inv_ebi_item_main_obj;
4968   l_item_custom_obj         inv_ebi_item_custom_obj;
4969   l_uda_obj                 inv_ebi_uda_input_obj;
4970   l_item_obj                inv_ebi_item_obj;
4971   l_getassetmgmtattrs       VARCHAR2(1)    := FND_API.G_FALSE;
4972   l_getbomattrs             VARCHAR2(1)    := FND_API.G_FALSE;
4973   l_getcostingattrs         VARCHAR2(1)    := FND_API.G_FALSE;
4974   l_getgeneralplanningattrs VARCHAR2(1)    := FND_API.G_FALSE;
4975   l_getinventoryattrs       VARCHAR2(1)    := FND_API.G_FALSE;
4976   l_getinvoicingattrs       VARCHAR2(1)    := FND_API.G_FALSE;
4977   l_getleadtimeattrs        VARCHAR2(1)    := FND_API.G_FALSE;
4978   l_getmpsmrpplanningattrs  VARCHAR2(1)    := FND_API.G_FALSE;
4979   l_getorderattrs           VARCHAR2(1)    := FND_API.G_FALSE;
4980   l_getphysicalattrs        VARCHAR2(1)    := FND_API.G_FALSE;
4981   l_getprocessattrs         VARCHAR2(1)    := FND_API.G_FALSE;
4982   l_getpurchasingattrs      VARCHAR2(1)    := FND_API.G_FALSE;
4983   l_getrecevingattrs        VARCHAR2(1)    := FND_API.G_FALSE;
4984   l_getserviceattrs         VARCHAR2(1)    := FND_API.G_FALSE;
4985   l_getweboptionattrs       VARCHAR2(1)    := FND_API.G_FALSE;
4986   l_getwipattrs             VARCHAR2(1)    := FND_API.G_FALSE;
4987   l_getitemoprattrs         VARCHAR2(1)    := FND_API.G_FALSE;
4988   l_org_id                  NUMBER;
4989   l_item_id                 NUMBER;
4990   l_msg_data                VARCHAR2(100);
4991   l_msg_count               NUMBER;
4992   l_item_attr_tbl           inv_ebi_item_attr_tbl;
4993   l_mfr_part_table          inv_ebi_mfg_part_obj_tbl_type;
4994   l_return_status           VARCHAR2(1);
4995   l_msg                     VARCHAR2(100);
4996   l_pk_col_name_val_pairs   INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl;
4997   ctr                       NUMBER;
4998   l_error_code              NUMBER;
4999   l_default_cost_group_id   VARCHAR2(2000)  :=NULL;
5000   l_default_cost_type_id    VARCHAR2(2000)  :=NULL;
5001 
5002   CURSOR c_mfr_part_cursor(p_item_id IN NUMBER,p_org_id IN NUMBER) IS
5003     SELECT
5004       manufacturer_id,mfg_part_num
5005     FROM mtl_mfg_part_numbers
5006     WHERE inventory_item_id = p_item_id AND organization_id=p_org_id;
5007 
5008 BEGIN
5009   INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.get_item_attributes');
5010   l_item_attr_tbl := inv_ebi_item_attr_tbl();
5011   x_return_status := FND_API.G_RET_STS_SUCCESS;
5012   IF p_get_item_inp_obj.p_config_flags IS NULL THEN
5013     l_getitemoprattrs := FND_API.G_TRUE;
5014   ELSE
5015   FOR i IN p_get_item_inp_obj.p_config_flags.FIRST..p_get_item_inp_obj.p_config_flags.LAST
5016   LOOP
5017     CASE p_get_item_inp_obj.p_config_flags(i).param_name
5018       WHEN G_ASSET_MGMT_ATTRS THEN
5019         l_getassetmgmtattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5020       WHEN G_BOM_ATTRS THEN
5021         l_getbomattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5022       WHEN G_COSTING_ATTRS THEN
5023         l_getcostingattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5024       WHEN G_GPLAN_ATTRS THEN
5025         l_getgeneralplanningattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5026       WHEN G_INVENTORY_ATTRS THEN
5027         l_getinventoryattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5028       WHEN G_INVOICE_ATTRS THEN
5029         l_getinvoicingattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5030       WHEN G_LEAD_TIME_ATTRS  THEN
5031         l_getleadtimeattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5032       WHEN G_MPSMRP_ATTRS THEN
5033         l_getmpsmrpplanningattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5034       WHEN G_ORDER_ATTRS THEN
5035         l_getorderattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5036       WHEN G_PHYSICAL_ATTRS THEN
5037         l_getphysicalattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5038       WHEN G_PROCESS_ATTRS THEN
5039         l_getprocessattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5040       WHEN G_PURCHASING_ATTRS THEN
5041         l_getpurchasingattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5042       WHEN G_RECEVING_ATTRS THEN
5043         l_getrecevingattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5044       WHEN G_SERVICE_ATTRS  THEN
5045         l_getserviceattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5046       WHEN G_WEB_OPTION_ATTRS THEN
5047         l_getweboptionattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5048       WHEN G_WIP_ATTRS THEN
5049         l_getwipattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5050       WHEN G_ITEM_ATTRS  THEN
5051         l_getitemoprattrs := p_get_item_inp_obj.p_config_flags(i).param_value;
5052       WHEN G_DEFAULT_COST_GROUP_ID THEN
5053         l_default_cost_group_id := p_get_item_inp_obj.p_config_flags(i).param_value;
5054       WHEN G_DEFAULT_COST_TYPE_ID THEN
5055         l_default_cost_type_id := p_get_item_inp_obj.p_config_flags(i).param_value;
5056       ELSE
5057         NULL;
5058     END CASE;
5059   END LOOP;
5060   END IF;
5061   FOR i IN p_get_item_inp_obj.p_get_opr_attrs_tbl_type.FIRST..p_get_item_inp_obj.p_get_opr_attrs_tbl_type.LAST
5062   LOOP
5063     BEGIN
5064       l_item_attr_tbl.extend();
5065       l_mfr_part_table := inv_ebi_mfg_part_obj_tbl_type();
5066       l_item_attr_tbl(i) := inv_ebi_get_item_output_obj(NULL,FND_API.G_RET_STS_SUCCESS,NULL,NULL);
5067       l_item_core_obj := inv_ebi_item_main_obj(
5068                                                NULL,NULL,NULL,NULL,NULL,NULL,
5069                                                NULL,NULL,NULL,NULL,NULL,NULL,
5070                                                NULL,NULL,NULL,NULL,NULL,NULL,
5071                                                NULL,NULL,NULL,NULL,NULL,NULL,
5072                                                NULL,NULL,NULL,NULL,NULL,NULL,
5073                                                NULL,NULL,NULL,NULL,NULL,NULL,
5074                                                NULL,NULL,NULL,NULL,NULL,NULL,
5075                                                NULL,NULL,NULL,NULL,NULL,NULL,
5076                                                NULL,NULL,NULL,NULL,NULL,NULL,
5077                                                NULL,NULL,NULL,NULL,NULL,NULL,
5078                                                NULL,NULL,NULL,NULL,NULL,NULL,
5079                                                NULL,NULL,NULL,NULL,NULL,NULL,
5080                                                NULL,NULL,NULL,NULL,NULL,NULL,
5081                                                NULL,NULL,NULL,NULL,NULL,
5082                                                NULL  -- Added for Bug 13370136 -- ramukher
5083                                                );
5084       l_item_custom_obj := inv_ebi_item_custom_obj(NULL,NULL,NULL,NULL,NULL,NULL,
5085                                                    NULL,NULL,NULL,NULL,NULL,NULL,
5086                                                    NULL,NULL,NULL,NULL,NULL,NULL,
5087                                                    NULL,NULL,NULL,NULL,NULL,NULL,
5088                                                    NULL,NULL,NULL,NULL,NULL,NULL,
5089                                                    NULL,NULL,NULL,NULL,NULL,NULL,
5090                                                    NULL,NULL,NULL,NULL,NULL,NULL,
5091                                                    NULL,NULL,NULL,NULL,NULL,NULL,
5092                                                    NULL,NULL,NULL,NULL,NULL,NULL,
5093                                                    NULL,NULL,NULL,NULL);
5094 
5095 
5096       l_item_phy_obj := inv_ebi_item_physical_obj(
5097                                              NULL,NULL,NULL,NULL,NULL,
5098                                              NULL,NULL,NULL,NULL,NULL,
5099                                              NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
5100                                              );
5101       l_item_inv_obj := inv_ebi_item_inventory_obj(
5102                                              NULL,NULL,NULL,NULL,NULL,
5103                                              NULL,NULL,NULL,NULL,NULL,
5104                                              NULL,NULL,NULL,NULL,NULL,
5105                                              NULL,NULL,NULL,NULL,NULL,
5106                                              NULL,NULL,NULL,NULL,NULL,
5107                                              NULL,NULL,NULL,NULL,NULL,
5108                                              NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
5109                                              );
5110       l_item_pur_obj := inv_ebi_item_purchasing_obj(
5111                                              NULL,NULL,NULL,NULL,NULL,
5112                                              NULL,NULL,NULL,NULL,NULL,NULL,
5113                                              NULL,NULL,NULL,NULL,NULL,NULL,
5114                                              NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
5115                                              );
5116       l_item_recving_obj := inv_ebi_item_receiving_obj(
5117                                              NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
5118                                              );
5119       l_item_gplan_obj := inv_ebi_item_gplanning_obj(
5120                                              NULL,NULL,NULL,NULL,NULL,
5121                                              NULL,NULL,NULL,NULL,NULL,NULL,
5122                                              NULL,NULL,NULL,NULL,NULL,NULL,
5123                                              NULL,NULL,NULL,NULL,NULL,NULL,
5124                                              NULL,NULL,NULL,NULL,NULL,NULL
5125                                              );
5126       l_item_mrp_obj :=         inv_ebi_item_mrp_obj(
5127                                              NULL,NULL,NULL,NULL,NULL,NULL,NULL,
5128                                              NULL,NULL,NULL,NULL,NULL,NULL,NULL,
5129                                              NULL,NULL,NULL,NULL,NULL,NULL,NULL,
5130                                              NULL,NULL,NULL,NULL,NULL,NULL,NULL,
5131                                              NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
5132                                              );
5133       l_item_order_obj := inv_ebi_item_order_obj(
5134                                               NULL,NULL,NULL,NULL,NULL,NULL,
5135                                               NULL,NULL,NULL,NULL,NULL,NULL,NULL,
5136                                               NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
5137                                               );
5138       l_item_service_obj := inv_ebi_item_service_obj(
5139                                               NULL,NULL,NULL,NULL,NULL,NULL,
5140                                               NULL,NULL,NULL,NULL,NULL
5141                                               );
5142       l_item_bom_obj :=     inv_ebi_item_bom_obj(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
5143       l_item_costing_obj := inv_ebi_item_costing_obj(
5144                                               NULL,NULL,NULL,NULL,NULL,NULL
5145                                               );
5146       l_item_lead_time_obj := inv_ebi_item_lead_time_obj(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
5147       l_item_wip_obj := inv_ebi_item_wip_obj(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
5148       l_item_invoice_obj := inv_ebi_item_invoice_obj(NULL,NULL,NULL,NULL,NULL,NULL,NULL);
5149       l_item_web_opiton := inv_ebi_item_web_option_obj(NULL,NULL,NULL,NULL);
5150       l_item_asset_obj := inv_ebi_item_asset_obj(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
5151       l_item_process_obj := inv_ebi_item_processmfg_obj(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
5152       l_uda_obj := inv_ebi_uda_input_obj(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
5153       INV_EBI_UTIL.debug_line('STEP 20: BEFORE CALLING INV_EBI_ITEM_HELPER.validate_get_item_request');
5154       validate_get_item_request(
5155         p_get_opr_attrs_rec => p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i)
5156         ,x_status => l_return_status
5157         ,x_msg_count => l_item_attr_tbl(i).msg_count
5158         ,x_msg_data => l_item_attr_tbl(i).msg_data
5159       );
5160       INV_EBI_UTIL.debug_line('STEP 30: AFTER CALLING INV_EBI_ITEM_HELPER.validate_get_item_request STATUS: ' ||l_return_status);
5161       l_org_id := p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i).organization_id;
5162       l_item_id := p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i).item_id;
5163       IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5164         RAISE FND_API.G_EXC_ERROR;
5165       END IF;
5166       IF((l_org_id IS NULL) )THEN
5167         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5168         l_pk_col_name_val_pairs.EXTEND(1);
5169         l_pk_col_name_val_pairs(1).name   := 'organization_code';
5170         l_pk_col_name_val_pairs(1).value  :=  p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i).organization_code;
5171         l_org_id  :=  INV_EBI_ITEM_HELPER.value_to_id (
5172                         p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5173                        ,p_entity_name=> INV_EBI_ITEM_HELPER.G_ORGANIZATION
5174                       );
5175         IF (l_org_id IS NULL) THEN
5176           FND_MESSAGE.set_name('INV','INV_EBI_ORG_CODE_INVALID');
5177           FND_MESSAGE.set_token('COL_VALUE', p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i).organization_code);
5178           FND_MSG_PUB.add;
5179           RAISE FND_API.G_EXC_ERROR;
5180         END IF;
5181       END IF;
5182       IF( l_item_id IS NULL) THEN
5183         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5184         l_pk_col_name_val_pairs.EXTEND(2);
5185         l_pk_col_name_val_pairs(1).name   := 'organization_id';
5186         l_pk_col_name_val_pairs(1).value  := l_org_id;
5187         l_pk_col_name_val_pairs(2).name   := 'concatenated_segments';
5188         l_pk_col_name_val_pairs(2).value  := p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i).item_name;
5189         l_item_id :=  INV_EBI_ITEM_HELPER.value_to_id (
5190                         p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5191                        ,p_entity_name=> INV_EBI_ITEM_HELPER.G_INVENTORY_ITEM
5192                       );
5193         IF (l_item_id IS NULL ) THEN
5194                FND_MESSAGE.set_name('INV','INV_EBI_ITEM_INVALID');
5195                FND_MESSAGE.set_token('COL_VALUE', p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i).item_name);
5196                FND_MSG_PUB.add;
5197                RAISE FND_API.G_EXC_ERROR;
5198         END IF;
5199       END IF;
5200       SELECT inventory_item_id
5201         ,organization_id
5202         ,description
5203         ,item_catalog_group_id
5204         ,end_date_active
5205         ,start_date_active
5206         ,primary_uom_code
5207         ,tracking_quantity_ind
5208         ,ont_pricing_qty_source
5209         ,secondary_uom_code
5210         ,secondary_default_ind
5211         ,dual_uom_deviation_high
5212         ,dual_uom_deviation_low
5213         ,allowed_units_lookup_code
5214         ,item_type
5215         ,description
5216         ,inventory_item_status_code
5217         ,primary_unit_of_measure
5218         ,lifecycle_id
5219         ,current_phase_id
5220         ,eam_item_type
5221         ,eam_activity_type_code
5222         ,eam_activity_cause_code
5223         ,eam_activity_source_code
5224         ,eam_act_notification_flag
5225         ,eam_act_shutdown_status
5226         ,bom_enabled_flag
5227         ,bom_item_type
5228         ,base_item_id
5229         ,auto_created_config_flag
5230         ,effectivity_control
5231         ,config_model_type
5232         ,config_orgs
5233         ,config_match
5234         ,eng_item_flag
5235         ,costing_enabled_flag
5236         ,inventory_asset_flag
5237         ,default_include_in_rollup_flag
5238         ,cost_of_sales_account
5239         ,std_lot_size
5240         ,inventory_planning_code
5241         ,planner_code
5242         ,planning_make_buy_code
5243         ,min_minmax_quantity
5244         ,max_minmax_quantity
5245         ,minimum_order_quantity
5246         ,maximum_order_quantity
5247         ,order_cost
5248         ,carrying_cost
5249         ,source_type
5250         ,source_organization_id
5251         ,source_subinventory
5252         ,mrp_safety_stock_code
5253         ,safety_stock_bucket_days
5254         ,mrp_safety_stock_percent
5255         ,fixed_order_quantity
5256         ,fixed_days_supply
5257         ,fixed_lot_multiplier
5258         ,vmi_minimum_units
5259         ,vmi_minimum_days
5260         ,vmi_maximum_units
5261         ,vmi_maximum_days
5262         ,vmi_fixed_order_quantity
5263         ,so_authorization_flag
5264         ,consigned_flag
5265         ,asn_autoexpire_flag
5266         ,vmi_forecast_type
5267         ,forecast_horizon
5268         ,inventory_item_flag
5269         ,stock_enabled_flag
5270         ,mtl_transactions_enabled_flag
5271         ,check_shortages_flag
5272         ,revision_qty_control_code
5273         ,reservable_type
5274         ,shelf_life_code
5275         ,shelf_life_days
5276         ,cycle_count_enabled_flag
5277         ,negative_measurement_error
5278         ,positive_measurement_error
5279         ,lot_control_code
5280         ,auto_lot_alpha_prefix
5281         ,start_auto_lot_number
5282         ,serial_number_control_code
5283         ,auto_serial_alpha_prefix
5284         ,start_auto_serial_number
5285         ,location_control_code
5286         ,restrict_subinventories_code
5287         ,restrict_locators_code
5288         ,bulk_picked_flag
5289         ,lot_status_enabled
5290         ,serial_status_enabled
5291         ,lot_split_enabled
5292         ,lot_merge_enabled
5293         ,lot_translate_enabled
5294         ,lot_substitution_enabled
5295         ,invoiceable_item_flag
5296         ,invoice_enabled_flag
5297         ,accounting_rule_id
5298         ,invoicing_rule_id
5299         ,tax_code
5300         ,sales_account
5301         ,payment_terms_id
5302         ,preprocessing_lead_time
5303         ,full_lead_time
5304         ,postprocessing_lead_time
5305         ,fixed_lead_time
5306         ,variable_lead_time
5307         ,cum_manufacturing_lead_time
5308         ,cumulative_total_lead_time
5309         ,lead_time_lot_size
5310         ,mrp_planning_code
5311         ,ato_forecast_control
5312         ,planning_exception_set
5313         ,end_assembly_pegging_flag
5314         ,shrinkage_rate
5315         ,rounding_control_type
5316         ,acceptable_early_days
5317         ,repetitive_planning_flag
5318         ,overrun_percentage
5319         ,acceptable_rate_increase
5320         ,acceptable_rate_decrease
5321         ,mrp_calculate_atp_flag
5322         ,auto_reduce_mps
5323         ,planning_time_fence_code
5324         ,planning_time_fence_days
5325         ,demand_time_fence_code
5326         ,demand_time_fence_days
5327         ,release_time_fence_code
5328         ,release_time_fence_days
5329         ,substitution_window_code
5330         ,substitution_window_days
5331         ,exclude_from_budget_flag
5332         ,days_tgt_inv_supply
5333         ,days_tgt_inv_window
5334         ,days_max_inv_supply
5335         ,days_max_inv_window
5336         ,drp_planned_flag
5337         ,critical_component_flag
5338         ,continous_transfer
5339         ,convergence
5340         ,divergence
5341         ,customer_order_flag
5342         ,customer_order_enabled_flag
5343         ,shippable_item_flag
5344         ,internal_order_flag
5345         ,internal_order_enabled_flag
5346         ,so_transactions_flag
5347         ,pick_components_flag
5348         ,atp_flag
5349         ,replenish_to_order_flag
5350         ,atp_rule_id
5351         ,atp_components_flag
5352         ,ship_model_complete_flag
5353         ,picking_rule_id
5354         ,collateral_flag
5355         ,default_shipping_org
5356         ,returnable_flag
5357         ,return_inspection_requirement
5358         ,over_shipment_tolerance
5359         ,under_shipment_tolerance
5360         ,over_return_tolerance
5361         ,under_return_tolerance
5362         ,financing_allowed_flag
5363         ,default_so_source_type
5364         ,weight_uom_code
5365         ,unit_weight
5366         ,volume_uom_code
5367         ,unit_volume
5368         ,container_item_flag
5369         ,vehicle_item_flag
5370         ,container_type_code
5371         ,internal_volume
5372         ,maximum_load_weight
5373         ,minimum_fill_percent
5374         ,equipment_type
5375         ,event_flag
5376         ,electronic_flag
5377         ,downloadable_flag
5378         ,indivisible_flag
5379         ,dimension_uom_code
5380         ,unit_length
5381         ,unit_width
5382         ,unit_height
5383         ,recipe_enabled_flag
5384         ,process_costing_enabled_flag
5385         ,process_quality_enabled_flag
5386         ,process_execution_enabled_flag
5387         ,process_supply_subinventory
5388         ,process_supply_locator_id
5389         ,process_yield_subinventory
5390         ,process_yield_locator_id
5391         ,hazardous_material_flag
5392         ,cas_number
5393         ,purchasing_item_flag
5394         ,purchasing_enabled_flag
5395         ,must_use_approved_vendor_flag
5396         ,allow_item_desc_update_flag
5397         ,rfq_required_flag
5398         ,outside_operation_flag
5399         ,outside_operation_uom_type
5400         ,taxable_flag
5401         ,purchasing_tax_code
5402         ,receipt_required_flag
5403         ,inspection_required_flag
5404         ,buyer_id
5405         ,unit_of_issue
5406         ,receive_close_tolerance
5407         ,invoice_close_tolerance
5408         ,un_number_id
5409         ,hazard_class_id
5410         ,list_price_per_unit
5411         ,market_price
5412         ,price_tolerance_percent
5413         ,rounding_factor
5414         ,encumbrance_account
5415         ,expense_account
5416         ,asset_category_id
5417         ,receipt_days_exception_code
5418         ,days_early_receipt_allowed
5419         ,days_late_receipt_allowed
5420         ,allow_substitute_receipts_flag
5421         ,allow_unordered_receipts_flag
5422         ,allow_express_delivery_flag
5423         ,qty_rcv_exception_code
5424         ,qty_rcv_tolerance
5425         ,receiving_routing_id
5426         ,enforce_ship_to_location_code
5427         ,coverage_schedule_id
5428         ,service_duration
5429         ,service_duration_period_code
5430         ,serviceable_product_flag
5431         ,service_starting_delay
5432         ,material_billable_flag
5433         ,recovered_part_disp_code
5434         ,defect_tracking_on_flag
5435         ,comms_nl_trackable_flag
5436         ,asset_creation_code
5437         ,ib_item_instance_class
5438         ,orderable_on_web_flag
5439         ,back_orderable_flag
5440         ,web_status
5441         ,minimum_license_quantity
5442         ,build_in_wip_flag
5443         ,wip_supply_type
5444         ,wip_supply_subinventory
5445         ,wip_supply_locator_id
5446         ,overcompletion_tolerance_type
5447         ,overcompletion_tolerance_value
5448         ,inventory_carry_penalty
5449         ,operation_slack_penalty
5450         ,ATTRIBUTE_CATEGORY
5451         ,ATTRIBUTE1
5452         ,ATTRIBUTE2
5453         ,ATTRIBUTE3
5454         ,ATTRIBUTE4
5455         ,ATTRIBUTE5
5456         ,ATTRIBUTE6
5457         ,ATTRIBUTE7
5458         ,ATTRIBUTE8
5459         ,ATTRIBUTE9
5460         ,ATTRIBUTE10
5461         ,ATTRIBUTE11
5462         ,ATTRIBUTE12
5463         ,ATTRIBUTE13
5464         ,ATTRIBUTE14
5465         ,ATTRIBUTE15
5466         ,ATTRIBUTE16
5467         ,ATTRIBUTE17
5468         ,ATTRIBUTE18
5469         ,ATTRIBUTE19
5470         ,ATTRIBUTE20
5471         ,ATTRIBUTE21
5472         ,ATTRIBUTE22
5473         ,ATTRIBUTE23
5474         ,ATTRIBUTE24
5475         ,ATTRIBUTE25
5476         ,ATTRIBUTE26
5477         ,ATTRIBUTE27
5478         ,ATTRIBUTE28
5479         ,ATTRIBUTE29
5480         ,ATTRIBUTE30
5481         ,GLOBAL_ATTRIBUTE_CATEGORY
5482         ,GLOBAL_ATTRIBUTE1
5483         ,GLOBAL_ATTRIBUTE2
5484         ,GLOBAL_ATTRIBUTE3
5485         ,GLOBAL_ATTRIBUTE4
5486         ,GLOBAL_ATTRIBUTE5
5487         ,GLOBAL_ATTRIBUTE6
5488         ,GLOBAL_ATTRIBUTE7
5489         ,GLOBAL_ATTRIBUTE8
5490         ,GLOBAL_ATTRIBUTE9
5491         ,GLOBAL_ATTRIBUTE10
5492         INTO l_item_core_obj.inventory_item_id
5493         ,l_item_core_obj.organization_id
5494         ,l_item_core_obj.description
5495         ,l_item_core_obj.item_catalog_group_id
5496         ,l_item_core_obj.end_date_active
5497         ,l_item_core_obj.start_date_active
5498         ,l_item_core_obj.primary_uom_code
5499         ,l_item_core_obj.tracking_quantity_ind
5500         ,l_item_core_obj.ont_pricing_qty_source
5501         ,l_item_core_obj.secondary_uom_code
5502         ,l_item_core_obj.secondary_default_ind
5503         ,l_item_core_obj.dual_uom_deviation_high
5504         ,l_item_core_obj.dual_uom_deviation_low
5505         ,l_item_core_obj.allowed_units_lookup_code
5506         ,l_item_core_obj.item_type
5507         ,l_item_core_obj.description
5508         ,l_item_core_obj.inventory_item_status_code
5509         ,l_item_core_obj.primary_unit_of_measure
5510         ,l_item_core_obj.lifecycle_id
5511         ,l_item_core_obj.current_phase_id
5512         ,l_item_asset_obj.eam_item_type
5513         ,l_item_asset_obj.eam_activity_type_code
5514         ,l_item_asset_obj.eam_activity_cause_code
5515         ,l_item_asset_obj.eam_activity_source_code
5516         ,l_item_asset_obj.eam_act_notification_flag
5517         ,l_item_asset_obj.eam_act_shutdown_status
5518         ,l_item_bom_obj.bom_enabled_flag
5519         ,l_item_bom_obj.bom_item_type
5520         ,l_item_bom_obj.base_item_id
5521         ,l_item_bom_obj.auto_created_config_flag
5522         ,l_item_bom_obj.effectivity_control
5523         ,l_item_bom_obj.config_model_type
5524         ,l_item_bom_obj.config_orgs
5525         ,l_item_bom_obj.config_match
5526         ,l_item_bom_obj.eng_item_flag
5527         ,l_item_costing_obj.costing_enabled_flag
5528         ,l_item_costing_obj.inventory_asset_flag
5529         ,l_item_costing_obj.default_include_in_rollup_f
5530         ,l_item_costing_obj.cost_of_sales_account
5531         ,l_item_costing_obj.std_lot_size
5532         ,l_item_gplan_obj.inventory_planning_code
5533         ,l_item_gplan_obj.planner_code
5534         ,l_item_gplan_obj.planning_make_buy_code
5535         ,l_item_gplan_obj.min_minmax_quantity
5536         ,l_item_gplan_obj.max_minmax_quantity
5537         ,l_item_gplan_obj.minimum_order_quantity
5538         ,l_item_gplan_obj.maximum_order_quantity
5539         ,l_item_gplan_obj.order_cost
5540         ,l_item_gplan_obj.carrying_cost
5541         ,l_item_gplan_obj.source_type
5542         ,l_item_gplan_obj.source_organization_id
5543         ,l_item_gplan_obj.source_subinventory
5544         ,l_item_gplan_obj.mrp_safety_stock_code
5545         ,l_item_gplan_obj.safety_stock_bucket_days
5546         ,l_item_gplan_obj.mrp_safety_stock_percent
5547         ,l_item_gplan_obj.fixed_order_quantity
5548         ,l_item_gplan_obj.fixed_days_supply
5549         ,l_item_gplan_obj.fixed_lot_multiplier
5550         ,l_item_gplan_obj.vmi_minimum_units
5551         ,l_item_gplan_obj.vmi_minimum_days
5552         ,l_item_gplan_obj.vmi_maximum_units
5553         ,l_item_gplan_obj.vmi_maximum_days
5554         ,l_item_gplan_obj.vmi_fixed_order_quantity
5555         ,l_item_gplan_obj.so_authorization_flag
5556         ,l_item_gplan_obj.consigned_flag
5557         ,l_item_gplan_obj.asn_autoexpire_flag
5558         ,l_item_gplan_obj.vmi_forecast_type
5559         ,l_item_gplan_obj.forecast_horizon
5560         ,l_item_inv_obj.inventory_item_flag
5561         ,l_item_inv_obj.stock_enabled_flag
5562         ,l_item_inv_obj.mtl_transactions_enabled_fl
5563         ,l_item_inv_obj.check_shortages_flag
5564         ,l_item_inv_obj.revision_qty_control_code
5565         ,l_item_inv_obj.reservable_type
5566         ,l_item_inv_obj.shelf_life_code
5567         ,l_item_inv_obj.shelf_life_days
5568         ,l_item_inv_obj.cycle_count_enabled_flag
5569         ,l_item_inv_obj.negative_measurement_error
5570         ,l_item_inv_obj.positive_measurement_error
5571         ,l_item_inv_obj.lot_control_code
5572         ,l_item_inv_obj.auto_lot_alpha_prefix
5573         ,l_item_inv_obj.start_auto_lot_number
5574         ,l_item_inv_obj.serial_number_control_code
5575         ,l_item_inv_obj.auto_serial_alpha_prefix
5576         ,l_item_inv_obj.start_auto_serial_number
5577         ,l_item_inv_obj.location_control_code
5578         ,l_item_inv_obj.restrict_subinventories_cod
5579         ,l_item_inv_obj.restrict_locators_code
5580         ,l_item_inv_obj.bulk_picked_flag
5581         ,l_item_inv_obj.lot_status_enabled
5582         ,l_item_inv_obj.serial_status_enabled
5583         ,l_item_inv_obj.lot_split_enabled
5584         ,l_item_inv_obj.lot_merge_enabled
5585         ,l_item_inv_obj.lot_translate_enabled
5586         ,l_item_inv_obj.lot_substitution_enabled
5587         ,l_item_invoice_obj.invoiceable_item_flag
5588         ,l_item_invoice_obj.invoice_enabled_flag
5589         ,l_item_invoice_obj.accounting_rule_id
5590         ,l_item_invoice_obj.invoicing_rule_id
5591         ,l_item_invoice_obj.tax_code
5592         ,l_item_invoice_obj.sales_account
5593         ,l_item_invoice_obj.payment_terms_id
5594         ,l_item_lead_time_obj.preprocessing_lead_time
5595         ,l_item_lead_time_obj.full_lead_time
5596         ,l_item_lead_time_obj.postprocessing_lead_time
5597         ,l_item_lead_time_obj.fixed_lead_time
5598         ,l_item_lead_time_obj.variable_lead_time
5599         ,l_item_lead_time_obj.cum_manufacturing_lead_time
5600         ,l_item_lead_time_obj.cumulative_total_lead_time
5601         ,l_item_lead_time_obj.lead_time_lot_size
5602         ,l_item_mrp_obj.mrp_planning_code
5603         ,l_item_mrp_obj.ato_forecast_control
5604         ,l_item_mrp_obj.planning_exception_set
5605         ,l_item_mrp_obj.end_assembly_pegging_flag
5606         ,l_item_mrp_obj.shrinkage_rate
5607         ,l_item_mrp_obj.rounding_control_type
5608         ,l_item_mrp_obj.acceptable_early_days
5609         ,l_item_mrp_obj.repetitive_planning_flag
5610         ,l_item_mrp_obj.overrun_percentage
5611         ,l_item_mrp_obj.acceptable_rate_increase
5612         ,l_item_mrp_obj.acceptable_rate_decrease
5613         ,l_item_mrp_obj.mrp_calculate_atp_flag
5614         ,l_item_mrp_obj.auto_reduce_mps
5615         ,l_item_mrp_obj.planning_time_fence_code
5616         ,l_item_mrp_obj.planning_time_fence_days
5617         ,l_item_mrp_obj.demand_time_fence_code
5618         ,l_item_mrp_obj.demand_time_fence_days
5619         ,l_item_mrp_obj.release_time_fence_code
5620         ,l_item_mrp_obj.release_time_fence_days
5621         ,l_item_mrp_obj.substitution_window_code
5622         ,l_item_mrp_obj.substitution_window_days
5623         ,l_item_mrp_obj.exclude_from_budget_flag
5624         ,l_item_mrp_obj.days_tgt_inv_supply
5625         ,l_item_mrp_obj.days_tgt_inv_window
5626         ,l_item_mrp_obj.days_max_inv_supply
5627         ,l_item_mrp_obj.days_max_inv_window
5628         ,l_item_mrp_obj.drp_planned_flag
5629         ,l_item_mrp_obj.critical_component_flag
5630         ,l_item_mrp_obj.continous_transfer
5631         ,l_item_mrp_obj.convergence
5632         ,l_item_mrp_obj.divergence
5633         ,l_item_order_obj.customer_order_flag
5634         ,l_item_order_obj.customer_order_enabled_flag
5635         ,l_item_order_obj.shippable_item_flag
5636         ,l_item_order_obj.internal_order_flag
5637         ,l_item_order_obj.internal_order_enabled_flag
5638         ,l_item_order_obj.so_transactions_flag
5639         ,l_item_order_obj.pick_components_flag
5640         ,l_item_order_obj.atp_flag
5641         ,l_item_order_obj.replenish_to_order_flag
5642         ,l_item_order_obj.atp_rule_id
5643         ,l_item_order_obj.atp_components_flag
5644         ,l_item_order_obj.ship_model_complete_flag
5645         ,l_item_order_obj.picking_rule_id
5646         ,l_item_order_obj.collateral_flag
5647         ,l_item_order_obj.default_shipping_org
5648         ,l_item_order_obj.returnable_flag
5649         ,l_item_order_obj.return_inspection_requireme
5650         ,l_item_order_obj.over_shipment_tolerance
5651         ,l_item_order_obj.under_shipment_tolerance
5652         ,l_item_order_obj.over_return_tolerance
5653         ,l_item_order_obj.under_return_tolerance
5654         ,l_item_order_obj.financing_allowed_flag
5655         ,l_item_order_obj.default_so_source_type
5656         ,l_item_phy_obj.weight_uom_code
5657         ,l_item_phy_obj.unit_weight
5658         ,l_item_phy_obj.volume_uom_code
5659         ,l_item_phy_obj.unit_volume
5660         ,l_item_phy_obj.container_item_flag
5661         ,l_item_phy_obj.vehicle_item_flag
5662         ,l_item_phy_obj.container_type_code
5663         ,l_item_phy_obj.internal_volume
5664         ,l_item_phy_obj.maximum_load_weight
5665         ,l_item_phy_obj.minimum_fill_percent
5666         ,l_item_phy_obj.equipment_type
5667         ,l_item_phy_obj.event_flag
5668         ,l_item_phy_obj.electronic_flag
5669         ,l_item_phy_obj.downloadable_flag
5670         ,l_item_phy_obj.indivisible_flag
5671         ,l_item_phy_obj.dimension_uom_code
5672         ,l_item_phy_obj.unit_length
5673         ,l_item_phy_obj.unit_width
5674         ,l_item_phy_obj.unit_height
5675         ,l_item_process_obj.recipe_enabled_flag
5676         ,l_item_process_obj.process_costing_enabled_flag
5677         ,l_item_process_obj.process_quality_enabled_flag
5678         ,l_item_process_obj.process_execution_enabled_flag
5679         ,l_item_process_obj.process_supply_subinventory
5680         ,l_item_process_obj.process_supply_locator_id
5681         ,l_item_process_obj.process_yield_subinventory
5682         ,l_item_process_obj.process_yield_locator_id
5683         ,l_item_process_obj.hazardous_material_flag
5684         ,l_item_process_obj.cas_number
5685         ,l_item_pur_obj.purchasing_item_flag
5686         ,l_item_pur_obj.purchasing_enabled_flag
5687         ,l_item_pur_obj.must_use_approved_vendor_fl
5688         ,l_item_pur_obj.allow_item_desc_update_flag
5689         ,l_item_pur_obj.rfq_required_flag
5690         ,l_item_pur_obj.outside_operation_flag
5691         ,l_item_pur_obj.outside_operation_uom_type
5692         ,l_item_pur_obj.taxable_flag
5693         ,l_item_pur_obj.purchasing_tax_code
5694         ,l_item_pur_obj.receipt_required_flag
5695         ,l_item_pur_obj.inspection_required_flag
5696         ,l_item_pur_obj.buyer_id
5697         ,l_item_pur_obj.unit_of_issue
5698         ,l_item_pur_obj.receive_close_tolerance
5699         ,l_item_pur_obj.invoice_close_tolerance
5700         ,l_item_pur_obj.un_number_id
5701         ,l_item_pur_obj.hazard_class_id
5702         ,l_item_pur_obj.list_price_per_unit
5703         ,l_item_pur_obj.market_price
5704         ,l_item_pur_obj.price_tolerance_percent
5705         ,l_item_pur_obj.rounding_factor
5706         ,l_item_pur_obj.encumbrance_account
5707         ,l_item_pur_obj.expense_account
5708         ,l_item_pur_obj.asset_category_id
5709         ,l_item_recving_obj.receipt_days_exception_code
5710         ,l_item_recving_obj.days_early_receipt_allowed
5711         ,l_item_recving_obj.days_late_receipt_allowed
5712         ,l_item_recving_obj.allow_substitute_receipts_f
5713         ,l_item_recving_obj.allow_unordered_receipts_fl
5714         ,l_item_recving_obj.allow_express_delivery_flag
5715         ,l_item_recving_obj.qty_rcv_exception_code
5716         ,l_item_recving_obj.qty_rcv_tolerance
5717         ,l_item_recving_obj.receiving_routing_id
5718         ,l_item_recving_obj.enforce_ship_to_location_c
5719         ,l_item_service_obj.coverage_schedule_id
5720         ,l_item_service_obj.service_duration
5721         ,l_item_service_obj.service_duration_period_cod
5722         ,l_item_service_obj.serviceable_product_flag
5723         ,l_item_service_obj.service_starting_delay
5724         ,l_item_service_obj.material_billable_flag
5725         ,l_item_service_obj.recovered_part_disp_code
5726         ,l_item_service_obj.defect_tracking_on_flag
5727         ,l_item_service_obj.comms_nl_trackable_flag
5728         ,l_item_service_obj.asset_creation_code
5729         ,l_item_service_obj.ib_item_instance_class
5730         ,l_item_web_opiton.orderable_on_web_flag
5731         ,l_item_web_opiton.back_orderable_flag
5732         ,l_item_web_opiton.web_status
5733         ,l_item_web_opiton.minimum_license_quantity
5734         ,l_item_wip_obj.build_in_wip_flag
5735         ,l_item_wip_obj.wip_supply_type
5736         ,l_item_wip_obj.wip_supply_subinventory
5737         ,l_item_wip_obj.wip_supply_locator_id
5738         ,l_item_wip_obj.overcompletion_tolerance_ty
5739         ,l_item_wip_obj.overcompletion_tolerance_va
5740         ,l_item_wip_obj.inventory_carry_penalty
5741         ,l_item_wip_obj.operation_slack_penalty
5742         ,l_item_custom_obj.ATTRIBUTE_CATEGORY
5743         ,l_item_custom_obj.ATTRIBUTE1
5744         ,l_item_custom_obj.ATTRIBUTE2
5745         ,l_item_custom_obj.ATTRIBUTE3
5746         ,l_item_custom_obj.ATTRIBUTE4
5747         ,l_item_custom_obj.ATTRIBUTE5
5748         ,l_item_custom_obj.ATTRIBUTE6
5749         ,l_item_custom_obj.ATTRIBUTE7
5750         ,l_item_custom_obj.ATTRIBUTE8
5751         ,l_item_custom_obj.ATTRIBUTE9
5752         ,l_item_custom_obj.ATTRIBUTE10
5753         ,l_item_custom_obj.ATTRIBUTE11
5754         ,l_item_custom_obj.ATTRIBUTE12
5755         ,l_item_custom_obj.ATTRIBUTE13
5756         ,l_item_custom_obj.ATTRIBUTE14
5757         ,l_item_custom_obj.ATTRIBUTE15
5758         ,l_item_custom_obj.ATTRIBUTE16
5759         ,l_item_custom_obj.ATTRIBUTE17
5760         ,l_item_custom_obj.ATTRIBUTE18
5761         ,l_item_custom_obj.ATTRIBUTE19
5762         ,l_item_custom_obj.ATTRIBUTE20
5763         ,l_item_custom_obj.ATTRIBUTE21
5764         ,l_item_custom_obj.ATTRIBUTE22
5765         ,l_item_custom_obj.ATTRIBUTE23
5766         ,l_item_custom_obj.ATTRIBUTE24
5767         ,l_item_custom_obj.ATTRIBUTE25
5768         ,l_item_custom_obj.ATTRIBUTE26
5769         ,l_item_custom_obj.ATTRIBUTE27
5770         ,l_item_custom_obj.ATTRIBUTE28
5771         ,l_item_custom_obj.ATTRIBUTE29
5772         ,l_item_custom_obj.ATTRIBUTE30
5773         ,l_item_custom_obj.GLOBAL_ATTRIBUTE_CATEGORY
5774         ,l_item_custom_obj.GLOBAL_ATTRIBUTE1
5775         ,l_item_custom_obj.GLOBAL_ATTRIBUTE2
5776         ,l_item_custom_obj.GLOBAL_ATTRIBUTE3
5777         ,l_item_custom_obj.GLOBAL_ATTRIBUTE4
5778         ,l_item_custom_obj.GLOBAL_ATTRIBUTE5
5779         ,l_item_custom_obj.GLOBAL_ATTRIBUTE6
5780         ,l_item_custom_obj.GLOBAL_ATTRIBUTE7
5781         ,l_item_custom_obj.GLOBAL_ATTRIBUTE8
5782         ,l_item_custom_obj.GLOBAL_ATTRIBUTE9
5783         ,l_item_custom_obj.GLOBAL_ATTRIBUTE10
5784       FROM  mtl_system_items_vl
5785       WHERE inventory_item_id=l_item_id AND organization_id=l_org_id;
5786 
5787    IF ( (l_item_core_obj.revision_id IS NULL OR l_item_core_obj.revision_id= fnd_api.g_miss_num)
5788          AND (l_org_id IS NOT NULL AND l_item_id IS NOT NULL)
5789        ) THEN
5790       l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5791       l_pk_col_name_val_pairs.EXTEND(2);
5792       l_pk_col_name_val_pairs(1).name   := 'organization_id';
5793       l_pk_col_name_val_pairs(1).value  := l_org_id;
5794       l_pk_col_name_val_pairs(2).name   := 'inventory_item_id';
5795       l_pk_col_name_val_pairs(2).value  := l_item_id;
5796       l_item_core_obj.revision_id       := INV_EBI_ITEM_HELPER.value_to_id(
5797                                              p_pk_col_name_val_pairs => l_pk_col_name_val_pairs
5798                                             ,p_entity_name           => INV_EBI_ITEM_HELPER.G_REVISION
5799                                            );
5800       l_pk_col_name_val_pairs.TRIM(2);
5801    END IF;
5802       ctr := 1;
5803       FOR c IN c_mfr_part_cursor(l_item_id,l_org_id)
5804       LOOP
5805         l_item_mfr_part_obj := inv_ebi_manufacturer_part_obj(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
5806                           ,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
5807         l_mfr_part_table.extend();
5808         l_item_mfr_part_obj.manufacturer_id := c.manufacturer_id;
5809         l_item_mfr_part_obj.mfg_part_num := c.mfg_part_num;
5810         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5811         l_pk_col_name_val_pairs.EXTEND(1);
5812         l_pk_col_name_val_pairs(1).name   := 'manufacturer_id';
5813         l_pk_col_name_val_pairs(1).value  :=  l_item_mfr_part_obj.manufacturer_id;
5814         l_item_mfr_part_obj.manufacturer_name  :=  INV_EBI_ITEM_HELPER.id_to_value (
5815                                                        p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5816                                                       ,p_entity_name=> G_MANUFACTURER
5817                                                       );
5818         INV_EBI_UTIL.debug_line('STEP 40: MFG NAME: '||l_item_mfr_part_obj.manufacturer_name);
5819         l_mfr_part_table(ctr) :=  l_item_mfr_part_obj;
5820         ctr := ctr + 1;
5821       END LOOP;
5822 
5823       IF (INV_EBI_UTIL.is_pim_installed) THEN -- Bug 8369900 To check is_pim_installed for reverse flow
5824       --Bug 7240247 To get Item udas
5825       INV_EBI_UTIL.debug_line('STEP 50: BEFORE CALLING INV_EBI_ITEM_HELPER.get_item_uda');
5826       get_item_uda(
5827         p_inventory_item_id         => l_item_core_obj.inventory_item_id,
5828         p_organization_id           => l_item_core_obj.organization_id,
5829         p_item_classification_id    => l_item_core_obj.item_catalog_group_id,
5830         p_revision_id               => l_item_core_obj.revision_id,
5831         x_item_uda                  => l_uda_obj,
5832         x_return_status             => l_return_status,
5833         x_msg_count                 => l_msg_count,
5834         x_msg_data                  => l_msg_data
5835         );
5836       INV_EBI_UTIL.debug_line('STEP 60: AFTER CALLING INV_EBI_ITEM_HELPER.get_item_uda STATUS: '||l_return_status);
5837       IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5838         l_item_attr_tbl(i).msg_data := l_msg_data;
5839         RAISE FND_API.G_EXC_ERROR;
5840       END IF;
5841       END IF; --Bug 8369900 end
5842 
5843       --   To populate unit_cost of l_item_costing_obj
5844       l_item_costing_obj.unit_cost  :=  CST_COST_API.get_item_cost (
5845                                           p_api_version         => 1,
5846                                           p_inventory_item_id   => l_item_id,
5847                                           p_organization_id     => l_org_id,
5848                                           p_cost_group_id       => l_default_cost_group_id,
5849                                           p_cost_type_id        => l_default_cost_type_id
5850                                         );
5851 
5852       IF(l_item_core_obj.organization_id IS NOT NULL) THEN
5853         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5854         l_pk_col_name_val_pairs.EXTEND(1);
5855         l_pk_col_name_val_pairs(1).name   := 'organization_id';
5856         l_pk_col_name_val_pairs(1).value  :=  l_item_core_obj.organization_id;
5857         l_item_core_obj.organization_code  :=  INV_EBI_ITEM_HELPER.id_to_value (
5858                                                  p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5859                                                  ,p_entity_name=> G_ORGANIZATION
5860                                                );
5861       INV_EBI_UTIL.debug_line('STEP 70: ORG CODE: '||l_item_core_obj.organization_code);
5862       END IF;
5863 
5864       IF(l_item_core_obj.template_id IS NOT NULL) THEN
5865         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5866         l_pk_col_name_val_pairs.EXTEND(1);
5867         l_pk_col_name_val_pairs(1).name   := 'template_id';
5868         l_pk_col_name_val_pairs(1).value  :=  l_item_core_obj.template_id;
5869         l_item_core_obj.template_name  :=  INV_EBI_ITEM_HELPER.id_to_value(
5870                                              p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5871                                              ,p_entity_name=> G_TEMPLATE
5872                                            );
5873       INV_EBI_UTIL.debug_line('STEP 80: TEMPLATE NAME: '||l_item_core_obj.template_name);
5874       END IF;
5875 
5876       IF(l_item_core_obj.item_catalog_group_id IS NOT NULL) THEN
5877         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5878         l_pk_col_name_val_pairs.EXTEND(1);
5879         l_pk_col_name_val_pairs(1).name   := 'item_catalog_group_id';
5880         l_pk_col_name_val_pairs(1).value  :=  l_item_core_obj.item_catalog_group_id;
5881         l_item_core_obj.item_catalog_group_code  :=  INV_EBI_ITEM_HELPER.id_to_value(
5882                                                        p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5883                                                        ,p_entity_name=> G_ITEM_CATALOG_GROUP
5884                                                      );
5885       INV_EBI_UTIL.debug_line('STEP 90: CATALOG GROUP CODE: '||l_item_core_obj.item_catalog_group_code);
5886       END IF;
5887 
5888       IF(l_item_core_obj.lifecycle_id IS NOT NULL) THEN
5889         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5890         l_pk_col_name_val_pairs.EXTEND(1);
5891         l_pk_col_name_val_pairs(1).name   := 'proj_element_id'; -- Column name not available project_element_id
5892         l_pk_col_name_val_pairs(1).value  := l_item_core_obj.lifecycle_id;
5893         l_item_core_obj.lifecycle_name  :=  INV_EBI_ITEM_HELPER.id_to_value(
5894                                               p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5895                                               ,p_entity_name=> G_LIFECYCLE
5896                                             );
5897       INV_EBI_UTIL.debug_line('STEP 100: LIFE CYCLE NAME: '||l_item_core_obj.lifecycle_name);
5898       END IF;
5899       IF(l_item_core_obj.current_phase_id IS NOT NULL) THEN
5900         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5901         l_pk_col_name_val_pairs.EXTEND(1);
5902         l_pk_col_name_val_pairs(1).name   := 'proj_element_id';
5903         l_pk_col_name_val_pairs(1).value  :=  l_item_core_obj.current_phase_id;
5904         l_item_core_obj.current_phase_name :=  INV_EBI_ITEM_HELPER.id_to_value(
5905                                                  p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5906                                                  ,p_entity_name=> G_CURRENT_PHASE
5907                                                );
5908       END IF;
5909       IF  (l_item_core_obj.revision_id IS NOT NULL) THEN
5910         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5911         l_pk_col_name_val_pairs.EXTEND(1);
5912         l_pk_col_name_val_pairs(1).name   := 'revision_id';
5913         l_pk_col_name_val_pairs(1).value  :=  l_item_core_obj.revision_id ;
5914         l_item_core_obj.revision_code     :=  INV_EBI_ITEM_HELPER.id_to_value(
5915                                                 p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5916                                                 ,p_entity_name=> G_REVISION
5917                                               );
5918       INV_EBI_UTIL.debug_line('STEP 110: REVISION CODE: '||l_item_core_obj.revision_code);
5919       END IF;
5920       IF(l_item_pur_obj.hazard_class_id IS NOT NULL) THEN
5921         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5922         l_pk_col_name_val_pairs.EXTEND(1);
5923         l_pk_col_name_val_pairs(1).name   := 'hazard_class_id';
5924         l_pk_col_name_val_pairs(1).value  :=  l_item_pur_obj.hazard_class_id;
5925         l_item_pur_obj.hazard_class_code  :=  INV_EBI_ITEM_HELPER.id_to_value(
5926                                                 p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5927                                                 ,p_entity_name=> G_HAZARD_CLASS
5928                                               );
5929       END IF;
5930       IF  (l_item_pur_obj.asset_category_id  IS NOT NULL) THEN
5931         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5932         l_pk_col_name_val_pairs.EXTEND(1);
5933         l_pk_col_name_val_pairs(1).name   := 'category_id';
5934         l_pk_col_name_val_pairs(1).value  :=  l_item_pur_obj.asset_category_id ;
5935         l_item_pur_obj.asset_category_code  :=  INV_EBI_ITEM_HELPER.id_to_value(
5936                                                   p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5937                                                   ,p_entity_name=> G_ASSET_CATEGORY
5938                                                 );
5939       END IF;
5940       IF  (l_item_bom_obj.base_item_id  IS NOT NULL) THEN
5941         l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5942         l_pk_col_name_val_pairs.EXTEND(2);
5943         l_pk_col_name_val_pairs(1).name   := 'inventory_item_id';
5944         l_pk_col_name_val_pairs(1).value  :=  l_item_bom_obj.base_item_id;
5945         l_pk_col_name_val_pairs(2).name   := 'organization_id';
5946         l_pk_col_name_val_pairs(2).value  :=  l_item_core_obj.organization_id;
5947         l_item_bom_obj.base_item_number  :=  INV_EBI_ITEM_HELPER.id_to_value(
5948                                                p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5949                                                ,p_entity_name=> G_INVENTORY_ITEM
5950                                              );
5951       END IF;
5952       -- gets the item number
5953       l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5954       l_pk_col_name_val_pairs.EXTEND(1);
5955       l_pk_col_name_val_pairs(1).name   := 'organization_id';
5956       l_pk_col_name_val_pairs(1).value  := l_item_core_obj.organization_id;
5957       l_pk_col_name_val_pairs.EXTEND(1);
5958       l_pk_col_name_val_pairs(2).name   := 'inventory_item_id';
5959       l_pk_col_name_val_pairs(2).value  := l_item_core_obj.inventory_item_id;
5960       l_item_core_obj.item_name :=  INV_EBI_ITEM_HELPER.id_to_value(
5961                                       p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5962                                       ,p_entity_name=> G_INVENTORY_ITEM
5963                                     );
5964       SELECT MASTER_ORGANIZATION_ID INTO l_item_core_obj.MASTER_ORGANIZATION_ID
5965       FROM mtl_parameters WHERE organization_id=l_org_id;
5966       -- converts the master org id to master org code
5967       l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
5968       l_pk_col_name_val_pairs.EXTEND(1);
5969       l_pk_col_name_val_pairs(1).name   := 'organization_id';
5970       l_pk_col_name_val_pairs(1).value  := l_item_core_obj.master_organization_id;
5971       l_item_core_obj.master_organization_code :=  INV_EBI_ITEM_HELPER.id_to_value(
5972                                                      p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
5973                                                      ,p_entity_name=> INV_EBI_ITEM_HELPER.G_ORGANIZATION
5974                                                    );
5975       IF(NOT (l_getassetmgmtattrs = FND_API.G_TRUE) AND NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
5976         l_item_asset_obj := NULL;
5977       END IF;
5978       IF(NOT(l_getbomattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
5979         l_item_bom_obj := NULL;
5980       END IF;
5981       IF(NOT(l_getcostingattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
5982         l_item_costing_obj := NULL;
5983       END IF;
5984       IF(NOT(l_getgeneralplanningattrs = FND_API.G_TRUE) AND NOT(l_getitemoprattrs = FND_API.G_TRUE ))THEN
5985         l_item_gplan_obj := NULL;
5986       END IF;
5987       IF(NOT(l_getinventoryattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
5988         l_item_inv_obj := NULL;
5989       END IF;
5990       IF(NOT(l_getinvoicingattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
5991         l_item_invoice_obj := NULL;
5992       END IF;
5993       IF(NOT(l_getleadtimeattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
5994         l_item_lead_time_obj := NULL;
5995       END IF;
5996       IF(NOT(l_getmpsmrpplanningattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
5997         l_item_mrp_obj := NULL;
5998       END IF;
5999       IF(NOT(l_getorderattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
6000         l_item_order_obj := NULL;
6001       END IF;
6002       IF(NOT(l_getphysicalattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
6003         l_item_phy_obj := NULL;
6004       END IF;
6005       IF(NOT(l_getprocessattrs=FND_API.G_TRUE) AND NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
6006         l_item_process_obj := NULL;
6007       END IF;
6008       IF(NOT(l_getpurchasingattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE )) THEN
6009         l_item_pur_obj := NULL;
6010       END IF;
6011       IF(NOT(l_getrecevingattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE ))THEN
6012         l_item_recving_obj := NULL;
6013       END IF;
6014       IF(NOT(l_getserviceattrs = FND_API.G_TRUE) AND  NOT(l_getitemoprattrs = FND_API.G_TRUE ))THEN
6015         l_item_service_obj := NULL;
6016       END IF;
6017       IF(NOT(l_getweboptionattrs = FND_API.G_TRUE) AND NOT(l_getitemoprattrs = FND_API.G_TRUE ))THEN
6018         l_item_web_opiton := NULL;
6019       END IF;
6020       IF(NOT(l_getwipattrs = FND_API.G_TRUE) AND NOT(l_getitemoprattrs = FND_API.G_TRUE ))THEN
6021         l_item_wip_obj := NULL;
6022       END IF;
6023       l_item_obj := inv_ebi_item_obj(l_item_core_obj
6024                                           ,l_item_phy_obj
6025                                           ,l_item_inv_obj
6026                                           ,l_item_pur_obj
6027                                           ,l_item_recving_obj
6028                                           ,l_item_gplan_obj
6029                                           ,l_item_mrp_obj
6030                                           ,l_item_order_obj
6031                                           ,l_item_service_obj
6032                                           ,l_item_bom_obj
6033                                           ,l_item_costing_obj
6034                                           ,l_item_lead_time_obj
6035                                           ,l_item_wip_obj
6036                                           ,l_item_invoice_obj
6037                                           ,l_item_web_opiton
6038                                           ,l_item_asset_obj
6039                                           ,NULL
6040                                           ,l_item_process_obj
6041                                           ,l_item_custom_obj
6042                                           ,NULL
6043                                           ,NULL
6044                                           ,l_mfr_part_table
6045                                           ,l_uda_obj
6046                                           ,NULL
6047                                           ,NULL
6048                                           ,NULL
6049                                           ,NULL
6050                                           ,NULL
6051                                      );
6052         get_Operating_unit
6053         (p_oranization_id => l_org_id
6054         ,x_operating_unit => l_item_obj.operating_unit
6055         ,x_ouid      => l_item_obj.operating_unit_id
6056         );
6057       l_item_attr_tbl(i).item_obj := l_item_obj;
6058       EXCEPTION
6059        WHEN FND_API.G_EXC_ERROR THEN
6060          x_return_status := FND_API.G_RET_STS_ERROR;
6061          l_item_attr_tbl(i).return_status := FND_API.G_RET_STS_ERROR;
6062          IF l_item_attr_tbl(i).msg_data IS NOT NULL THEN
6063            FND_MSG_PUB.count_and_get(
6064              p_encoded => FND_API.g_false
6065              ,p_count  => l_item_attr_tbl(i).msg_count
6066              ,p_data   => l_item_attr_tbl(i).msg_data
6067            );
6068          END IF;
6069          populate_err_msg(p_orgid           => l_org_id
6070                           ,p_invid          => l_item_id
6071                           ,p_org_code        => p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i).organization_code
6072                           ,p_item_name       => p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i).item_name
6073                           ,p_part_err_msg    => l_item_attr_tbl(i).msg_data
6074                           ,x_err_msg         => x_msg_data
6075                            );
6076        WHEN OTHERS THEN
6077          x_return_status  :=  FND_API.G_RET_STS_ERROR;
6078          l_item_attr_tbl(i).return_status := FND_API.G_RET_STS_ERROR;
6079         populate_err_msg(p_orgid            => l_org_id
6080                           ,p_invid          => l_item_id
6081                           ,p_org_code        => p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i).organization_code
6082                           ,p_item_name       => p_get_item_inp_obj.p_get_opr_attrs_tbl_type(i).item_name
6083                           ,p_part_err_msg    => SQLERRM||' -> at inv_ebi_item_helper.get_item_attributes'
6084                           ,x_err_msg         => x_msg_data
6085                            );
6086       END;
6087     END LOOP;
6088     x_item_tbl_obj:=inv_ebi_item_attr_tbl_obj(l_item_attr_tbl);
6089     INV_EBI_UTIL.debug_line('STEP 120: END INSIDE INV_EBI_ITEM_HELPER.get_item_attributes STATUS: '||x_return_status);
6090   EXCEPTION
6091     WHEN OTHERS THEN
6092       x_return_status := FND_API.G_RET_STS_ERROR;
6093       IF (x_msg_data IS NOT NULL) THEN
6094         x_msg_data  :=  x_msg_data ||' -> at INV_EBI_ITEM_HELPER.get_item_attributes';
6095       ELSE
6096         x_msg_data   :=   SQLERRM||' at INV_EBI_ITEM_HELPER.get_item_attributes';
6097       END IF;
6098 END get_item_attributes;
6099 
6100 
6101 /***************************************************************************************************
6102 --      API name        : get_last_run_date
6103 --      Type            : Private For Internal Use Only
6104 --      Purpose         : To get the last run date of the concurrent program
6105 *****************************************************************************************************/
6106 
6107 FUNCTION  get_last_run_date( p_conc_prog_id  IN             NUMBER
6108                            ,p_appl_id        IN             NUMBER
6109                            ) RETURN DATE
6110 IS
6111   l_date   DATE :=NULL;
6112   CURSOR c_last_sche_comp_date
6113   IS
6114   SELECT actual_start_date FROM (
6115     SELECT actual_start_date
6116     FROM fnd_concurrent_requests
6117     WHERE  program_application_id = p_appl_id
6118     AND    concurrent_program_id =  p_conc_prog_id
6119     AND    UPPER(phase_code) = 'C'
6120     AND    (root_request_id is not null OR resubmit_interval is not null)
6121     AND    actual_start_date is not null
6122     ORDER BY actual_start_date DESC)
6123   WHERE ROWNUM = 1;
6124 
6125   CURSOR c_last_comp_date
6126   IS
6127   SELECT actual_start_date INTO l_date FROM (
6128     SELECT actual_start_date
6129     FROM fnd_concurrent_requests
6130     WHERE  program_application_id = p_appl_id
6131     AND    concurrent_program_id =  p_conc_prog_id
6132     AND    UPPER(phase_code) = 'C'
6133     AND    actual_start_date is not null
6134     ORDER BY actual_start_date DESC)
6135   WHERE ROWNUM = 1;
6136 
6137 BEGIN
6138   IF c_last_sche_comp_date%ISOPEN THEN
6139     CLOSE c_last_sche_comp_date;
6140   END IF;
6141 
6142   OPEN c_last_sche_comp_date;
6143   FETCH c_last_sche_comp_date into l_date;
6144   CLOSE c_last_sche_comp_date;
6145 
6146   IF l_date IS NULL THEN
6147     IF c_last_comp_date%ISOPEN THEN
6148       CLOSE c_last_comp_date;
6149     END IF;
6150     OPEN c_last_comp_date;
6151       FETCH c_last_comp_date into l_date;
6152     CLOSE c_last_comp_date;
6153   END IF;
6154 
6155   IF l_date IS NULL THEN
6156     l_date := SYSDATE-30;
6157   END IF;
6158 
6159   RETURN l_date;
6160 EXCEPTION
6161   WHEN OTHERS THEN
6162     IF c_last_sche_comp_date%ISOPEN THEN
6163       CLOSE c_last_sche_comp_date;
6164     END IF;
6165     IF c_last_comp_date%ISOPEN THEN
6166       CLOSE c_last_comp_date;
6167     END IF;
6168 END get_last_run_date;
6169 
6170 /************************************************************************************
6171 --      API name        : parse_input_String
6172 --      Type            : Public
6173 --      Function        : To parse the input string
6174 ************************************************************************************/
6175 
6176 FUNCTION parse_input_string(
6177   p_input_string              IN        VARCHAR2
6178 )
6179 RETURN  FND_TABLE_OF_VARCHAR2_255
6180 IS
6181   l_input_string           VARCHAR2(240);
6182   l_count                  NUMBER:=0;
6183   l_length                 NUMBER:=0;
6184   l_parsed_tbl             FND_TABLE_OF_VARCHAR2_255;
6185 BEGIN
6186   l_input_string           := p_input_string;
6187   l_parsed_tbl             := FND_TABLE_OF_VARCHAR2_255();
6188   l_length := LENGTH(l_input_string);
6189 
6190   IF (SUBSTR(l_input_string,l_length-1) <> ';;') THEN
6191     l_input_string := l_input_string || ';;';
6192   END IF;
6193 
6194   WHILE INSTR(l_input_string,';;') > 0 LOOP
6195     l_parsed_tbl.EXTEND(1);
6196     l_count := l_count+1;
6197     l_parsed_tbl(l_count) := SUBSTR(l_input_string,1,INSTR(l_input_string,';;')-1) ;
6198     l_input_string            :=  SUBSTR(l_input_string,INSTR(l_input_string,';;')+2);
6199   END LOOP;
6200 
6201   RETURN l_parsed_tbl;
6202 END parse_input_string;
6203 /************************************************************************************
6204 --      API name        : filter_items_based_on_org
6205 --      Type            : Public
6206 --      Function        : To filter items based on the given organization
6207 ************************************************************************************/
6208 
6209 PROCEDURE filter_items_based_on_org(
6210   p_org_codes              IN         VARCHAR2
6211  ,p_item_tbl               IN         inv_ebi_get_opr_attrs_tbl
6212  ,x_item_tbl               OUT NOCOPY inv_ebi_get_opr_attrs_tbl
6213  ,x_return_status          OUT NOCOPY VARCHAR2
6214  ,x_msg_count              OUT NOCOPY NUMBER
6215  ,x_msg_data               OUT NOCOPY VARCHAR2)
6216 IS
6217   l_org_tbl                  FND_TABLE_OF_VARCHAR2_255;
6218   l_item_output_tbl          inv_ebi_get_opr_attrs_tbl;
6219   l_counter                  NUMBER:=0;
6220 BEGIN
6221   x_return_status := FND_API.g_ret_sts_success;
6222   INV_EBI_UTIL.debug_line('STEP 10: START INSIDE INV_EBI_ITEM_HELPER.filter_items_based_on_org');
6223   l_item_output_tbl       := inv_ebi_get_opr_attrs_tbl();
6224 
6225   IF p_org_codes IS NOT NULL THEN
6226     l_org_tbl := parse_input_string(p_org_codes);
6227   END IF;
6228 
6229   IF p_item_tbl IS NOT NULL AND p_item_tbl.COUNT>0 THEN
6230     FOR i in p_item_tbl.FIRST..p_item_tbl.LAST LOOP
6231       IF l_org_tbl IS NOT NULL AND l_org_tbl.COUNT>0 THEN
6232         FOR j in l_org_tbl.FIRST..l_org_tbl.LAST LOOP
6233           IF (p_item_tbl(i).organization_code = l_org_tbl(j)) THEN
6234 	    INV_EBI_UTIL.debug_line('STEP 20: ITEM NAME IS '|| p_item_tbl(i).item_name);
6235 	    INV_EBI_UTIL.debug_line('STEP 30: ORGANIZATION CODE IS '|| l_org_tbl(j));
6236             l_counter := l_counter + 1;
6237             l_item_output_tbl.EXTEND(1);
6238             l_item_output_tbl(l_counter) := p_item_tbl(i);
6239             EXIT;
6240           END IF;
6241         END LOOP;
6242       END IF;
6243     END LOOP;
6244   END IF;
6245 
6246   x_item_tbl := l_item_output_tbl;
6247   INV_EBI_UTIL.debug_line('STEP 40: END INSIDE INV_EBI_ITEM_HELPER.filter_items_based_on_org RETURN STATUS: '|| x_return_status);
6248 EXCEPTION
6249   WHEN OTHERS THEN
6250     x_return_status := FND_API.g_ret_sts_unexp_error;
6251     x_msg_data := SQLERRM ||' at INV_EBI_ITEM_HELPER.filter_items_based_on_org';
6252 END filter_items_based_on_org;
6253 
6254 /************************************************************************************
6255 --      API name        : parse_and_get_item
6256 --      Type            : Private For Internal Use Only
6257 --      Function        : To parse the input string and get list of items
6258 ************************************************************************************/
6259 PROCEDURE parse_and_get_item(
6260   p_item_names              IN        VARCHAR2
6261  ,p_org_codes               IN        VARCHAR2
6262  ,x_item_tbl               OUT NOCOPY inv_ebi_get_opr_attrs_tbl
6263  ,x_return_status          OUT NOCOPY VARCHAR2
6264  ,x_msg_count              OUT NOCOPY NUMBER
6265  ,x_msg_data               OUT NOCOPY VARCHAR2)
6266 IS
6267   l_return_status            VARCHAR2(2);
6268   l_msg_data                 VARCHAR2(2000);
6269   l_count                    NUMBER:=0;
6270   l_counter                  NUMBER := 0;
6271   l_entity_exist             NUMBER :=0;
6272   l_entity_count             NUMBER :=0;
6273   l_org_id                   NUMBER;
6274   l_item_id                  NUMBER;
6275   l_item_output_tbl          inv_ebi_get_opr_attrs_tbl;
6276   l_item_obj                 inv_ebi_get_operational_attrs;
6277   l_item_tbl                 FND_TABLE_OF_VARCHAR2_255;
6278   l_org_tbl                  FND_TABLE_OF_VARCHAR2_255;
6279   l_valid_item_tbl           FND_TABLE_OF_VARCHAR2_255;
6280   l_valid_org_tbl            FND_TABLE_OF_VARCHAR2_255;
6281   l_pk_col_name_val_pairs    INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl ;
6282   CURSOR c_get_all_orgs(p_item_name VARCHAR2) IS
6283     SELECT msik.inventory_item_id,msik.organization_id,mp.organization_code
6284     FROM mtl_system_items_kfv msik,mtl_parameters  mp
6285     WHERE msik.concatenated_segments = p_item_name
6286     AND msik.organization_id = mp.organization_id;
6287 BEGIN
6288   x_return_status := FND_API.g_ret_sts_success;
6289   INV_EBI_UTIL.debug_line('STEP 10: START CALLING INSIDE INV_EBI_ITEM_HELPER.parse_and_get_item ');
6290   l_item_output_tbl       := inv_ebi_get_opr_attrs_tbl();
6291   INV_EBI_UTIL.debug_line('STEP 20: ITEM NAMES '|| p_item_names);
6292   INV_EBI_UTIL.debug_line('STEP 30: ORG CODES  '|| p_org_codes);
6293   IF p_item_names IS NOT NULL THEN
6294     l_item_tbl := parse_input_string(p_item_names);
6295   END IF;
6296 
6297   IF p_org_codes IS NOT NULL THEN
6298     l_org_tbl := parse_input_string(p_org_codes);
6299   END IF;
6300   IF l_item_tbl IS NOT NULL AND l_item_tbl.COUNT > 0 THEN
6301     l_valid_item_tbl := FND_TABLE_OF_VARCHAR2_255();
6302     l_entity_count :=0;
6303     FOR i in l_item_tbl.FIRST..l_item_tbl.LAST LOOP
6304       BEGIN
6305         FND_MSG_PUB.initialize();
6306         SELECT COUNT(1) into l_entity_exist
6307         FROM mtl_system_items_kfv
6308         WHERE concatenated_segments = l_item_tbl(i);
6309         IF l_entity_exist>0 THEN
6310           l_entity_count := l_entity_count +1;
6311           l_valid_item_tbl.EXTEND();
6312           l_valid_item_tbl(l_entity_count) := l_item_tbl(i);
6313         ELSE
6314           FND_MESSAGE.set_name('INV','INV_EBI_ITEM_INVALID');
6315           FND_MESSAGE.set_token('COL_VALUE', l_item_tbl(i));
6316           FND_MSG_PUB.add;
6317           RAISE FND_API.G_EXC_ERROR;
6318         END IF;
6319       EXCEPTION
6320         WHEN FND_API.G_EXC_ERROR THEN
6321           x_return_status := FND_API.g_ret_sts_error;
6322           FND_MSG_PUB.count_and_get( p_encoded => FND_API.g_false
6323                                      ,p_count   => x_msg_count
6324                                      ,p_data    => l_msg_data
6325                                    );
6326           x_msg_data :=  x_msg_data || l_msg_data ||' , ' ;
6327         WHEN OTHERS THEN
6328           x_return_status := FND_API.g_ret_sts_error;
6329           x_msg_data := SQLERRM ||' at INV_EBI_ITEM_HELPER.parse_and_get_item';
6330       END;
6331     END LOOP;
6332   END IF;
6333   IF l_org_tbl IS NOT NULL AND l_org_tbl.COUNT > 0 THEN
6334     l_valid_org_tbl := FND_TABLE_OF_VARCHAR2_255();
6335     l_entity_count :=0;
6336     FOR i in l_org_tbl.FIRST..l_org_tbl.LAST LOOP
6337       BEGIN
6338         FND_MSG_PUB.initialize();
6339         SELECT COUNT(1) into l_entity_exist
6340           FROM mtl_parameters
6341         WHERE organization_code = l_org_tbl(i);
6342         IF l_entity_exist>0 THEN
6343           l_entity_count := l_entity_count +1;
6344           l_valid_org_tbl.EXTEND();
6345           l_valid_org_tbl(l_entity_count) := l_org_tbl(i);
6346         ELSE
6347           FND_MESSAGE.set_name('INV','INV_EBI_ORG_CODE_INVALID');
6348           FND_MESSAGE.set_token('COL_VALUE', l_org_tbl(i));
6349           FND_MSG_PUB.add;
6350           RAISE FND_API.G_EXC_ERROR;
6351         END IF;
6352       EXCEPTION
6353         WHEN FND_API.G_EXC_ERROR THEN
6354           x_return_status := FND_API.g_ret_sts_error;
6355           FND_MSG_PUB.count_and_get( p_encoded => FND_API.g_false
6356                                      ,p_count   => x_msg_count
6357                                      ,p_data    => l_msg_data
6358                                    );
6359           x_msg_data :=  x_msg_data || l_msg_data ||' , ' ;
6360         WHEN OTHERS THEN
6361           x_return_status := FND_API.g_ret_sts_error;
6362           x_msg_data := SQLERRM ||' at INV_EBI_ITEM_HELPER.parse_and_get_item';
6363       END;
6364     END LOOP;
6365   END IF;
6366   IF l_valid_item_tbl IS NOT NULL AND l_valid_item_tbl.COUNT > 0 THEN
6367     FOR i in l_valid_item_tbl.FIRST..l_valid_item_tbl.LAST LOOP
6368       BEGIN
6369         FND_MSG_PUB.initialize();
6370         l_count :=0;
6371         IF l_valid_org_tbl IS NOT NULL AND l_valid_org_tbl.COUNT > 0 THEN
6372           FOR j in l_valid_org_tbl.FIRST..l_valid_org_tbl.LAST LOOP
6373             l_pk_col_name_val_pairs := INV_EBI_ITEM_HELPER.inv_ebi_name_value_pair_tbl();
6374             l_pk_col_name_val_pairs.EXTEND();
6375             l_pk_col_name_val_pairs(1).name  := 'organization_code';
6376             l_pk_col_name_val_pairs(1).value := l_valid_org_tbl(j);
6377             l_org_id                         := INV_EBI_ITEM_HELPER.value_to_id( p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
6378                                                                                  ,p_entity_name            => INV_EBI_ITEM_HELPER.G_ORGANIZATION
6379                                                                                );
6380             l_pk_col_name_val_pairs.TRIM(1);
6381             l_pk_col_name_val_pairs.EXTEND(2);
6382             l_pk_col_name_val_pairs(1).name  := 'concatenated_segments';
6383             l_pk_col_name_val_pairs(1).value := l_valid_item_tbl(i);
6384             l_pk_col_name_val_pairs(2).name  := 'organization_id';
6385             l_pk_col_name_val_pairs(2).value := l_org_id;
6386             l_item_id                        := INV_EBI_ITEM_HELPER.value_to_id( p_pk_col_name_val_pairs  => l_pk_col_name_val_pairs
6387                                                                                 ,p_entity_name            => INV_EBI_ITEM_HELPER.G_INVENTORY_ITEM
6388                                                                                 );
6389             l_pk_col_name_val_pairs.TRIM(2);
6390 
6391             IF l_item_id IS NOT NULL THEN
6392               l_counter := l_counter + 1;
6393               l_item_obj  :=  inv_ebi_get_operational_attrs( l_item_id, l_valid_item_tbl(i) , l_org_id, l_valid_org_tbl(j),NULL,NULL);
6394               l_item_output_tbl.EXTEND(1);
6395               l_item_output_tbl(l_counter) := l_item_obj;
6396               l_count := 1;
6397             END IF;
6398 
6399           END LOOP;
6400         ELSE
6401           FOR cur IN c_get_all_orgs(l_valid_item_tbl(i)) LOOP
6402             l_counter := l_counter + 1;
6403             l_item_obj  :=  inv_ebi_get_operational_attrs( cur.inventory_item_id, l_valid_item_tbl(i) , cur.organization_id, cur.organization_code,NULL,NULL);
6404             l_item_output_tbl.EXTEND(1);
6405             l_item_output_tbl(l_counter) := l_item_obj;
6406             l_count := 1;
6407           END LOOP;
6408         END IF;
6409 
6410         IF l_count = 0 THEN
6411           FND_MESSAGE.set_name('INV','INV_EBI_INVALID_USER_INPUT');
6412           FND_MESSAGE.set_token('USER_INPUT', l_valid_item_tbl(i));
6413           FND_MSG_PUB.add;
6414           RAISE FND_API.G_EXC_ERROR;
6415         END IF;
6416       EXCEPTION
6417         WHEN FND_API.G_EXC_ERROR THEN
6418           x_return_status := FND_API.g_ret_sts_error;
6419           FND_MSG_PUB.count_and_get( p_encoded => FND_API.g_false
6420                                   ,p_count   => x_msg_count
6421                                   ,p_data    => l_msg_data
6422                                  );
6423           x_msg_data := x_msg_data || l_msg_data  ;
6424         WHEN OTHERS THEN
6425           x_return_status := FND_API.g_ret_sts_unexp_error;
6426           x_msg_data := SQLERRM ||' at INV_EBI_ITEM_HELPER.parse_and_get_item';
6427       END;
6428     END LOOP;
6429   END IF;
6430   x_item_tbl := l_item_output_tbl;
6431   IF (x_item_tbl.count > 0) THEN
6432     FOR i IN 1 .. x_item_tbl.count
6433     LOOP
6434       INV_EBI_UTIL.debug_line('STEP 40: ITEM NAME FROM OUT TABLE '|| x_item_tbl(i).item_name);
6435       INV_EBI_UTIL.debug_line('STEP 50: ORGANIZATION CODE FROM OUT TABLE '|| x_item_tbl(i).organization_code);
6436       INV_EBI_UTIL.debug_line('STEP 60: OPERATING UNIT FROM OUT TABLE '|| x_item_tbl(i).operating_unit);
6437     END LOOP;
6438   END IF;
6439   INV_EBI_UTIL.debug_line('STEP 70: END INSIDE INV_EBI_ITEM_HELPER.parse_and_get_item RETURN STATUS: '|| x_return_status);
6440 EXCEPTION
6441   WHEN OTHERS THEN
6442     x_return_status := FND_API.g_ret_sts_unexp_error;
6443     x_msg_data := SQLERRM ||' at INV_EBI_ITEM_HELPER.parse_and_get_item';
6444 END parse_and_get_item;
6445 
6446 /************************************************************************************
6447 --      API name        : parse_source_system_string
6448 --      Type            : Public
6449 --      Function        : To parse the input string
6450 ************************************************************************************/
6451 
6452 FUNCTION parse_source_system_string(
6453   p_input_string              IN        VARCHAR2
6454 )
6455 RETURN  FND_TABLE_OF_VARCHAR2_255
6456 IS
6457   l_cross_reference_type   VARCHAR2(32000);
6458   l_count                  NUMBER:=0;
6459   l_parsed_tbl             FND_TABLE_OF_VARCHAR2_255;
6460 BEGIN
6461   l_cross_reference_type   := TRIM(',' FROM p_input_string);
6462   l_parsed_tbl             := FND_TABLE_OF_VARCHAR2_255();
6463   l_cross_reference_type   := l_cross_reference_type || ',';
6464   WHILE INSTR(l_cross_reference_type,',') > 0 LOOP
6465     l_parsed_tbl.EXTEND(1);
6466     l_count := l_count+1;
6467     l_parsed_tbl(l_count)  := SUBSTR(l_cross_reference_type,1,INSTR(l_cross_reference_type,',')-1) ;
6468     l_cross_reference_type := SUBSTR(l_cross_reference_type,INSTR(l_cross_reference_type,',')+1);
6469   END LOOP;
6470   RETURN l_parsed_tbl;
6471 END parse_source_system_string;
6472 
6473 /************************************************************************************
6474 --      API name        : get_item_attributes_list
6475 --      Type            : Public For Internal Use Only
6476 --      Function        :
6477 ************************************************************************************/
6478 PROCEDURE get_item_attributes_list(
6479   p_name_value_list         IN             inv_ebi_name_value_tbl
6480  ,p_prog_id                 IN             NUMBER
6481  ,p_appl_id                 IN             NUMBER
6482  ,p_cross_reference_type    IN             VARCHAR2
6483  ,x_items                  OUT NOCOPY      inv_ebi_get_opr_attrs_tbl
6484  ,x_return_status          OUT NOCOPY      VARCHAR2
6485  ,x_msg_count              OUT NOCOPY      NUMBER
6486  ,x_msg_data               OUT NOCOPY      VARCHAR2
6487 )
6488 IS
6489   l_return_status            VARCHAR2(2);
6490   l_item_string              VARCHAR2(32000);
6491   l_org_string               VARCHAR2(32000);
6492   l_from_date                DATE := NULL;
6493   l_to_date                  DATE := NULL;
6494   l_from_date_str            VARCHAR2(30);
6495   l_to_date_str              VARCHAR2(30);
6496   l_last_x_hrs               NUMBER;
6497   l_item_org_output_tbl      inv_ebi_get_opr_attrs_tbl;
6498   l_item_tbl                 inv_ebi_get_opr_attrs_tbl;
6499   l_item_output_tbl          inv_ebi_get_opr_attrs_tbl;
6500   l_item_tbl_flst            inv_ebi_get_opr_attrs_tbl;
6501   l_msg_data                 VARCHAR2(2000);
6502   l_msg_count                NUMBER;
6503   l_parsed_tbl               FND_TABLE_OF_VARCHAR2_255;
6504 
6505   CURSOR c_get_item_list_pim IS
6506     SELECT inv_ebi_get_operational_attrs(item_pim.inventory_item_id,item_pim.concatenated_segments,item_pim.organization_id,item_pim.organization_code,NULL,NULL)
6507     FROM
6508       (SELECT mcr.inventory_item_id, msik.concatenated_segments, msi.organization_id, mp.organization_code
6509        FROM mtl_cross_references_b mcr, mtl_system_items_b msi, mtl_parameters mp, mtl_system_items_kfv msik, hz_orig_systems_b hz
6510        WHERE mcr.inventory_item_id = msi.inventory_item_id
6511      --AND mcr.organization_id = msi.organization_id   --8897962 mcr has organization_id value as null
6512        AND hz.orig_system IN (SELECT * FROM THE(SELECT CAST(l_parsed_tbl AS FND_TABLE_OF_VARCHAR2_255) FROM DUAL))
6513        AND hz.orig_system_id = mcr.source_system_id
6514        AND msi.organization_id = mp.organization_id
6515        AND msik.organization_id = msi.organization_id
6516        AND msik.inventory_item_id = msi.inventory_item_id
6517        AND msi.last_update_date <> msi.creation_date
6518        AND msi.last_update_date >= l_from_date
6519        AND msi.last_update_date <= l_to_date
6520        UNION
6521        SELECT cic.inventory_item_id, msik.concatenated_segments, cic.organization_id, mp.organization_code
6522        FROM   mtl_cross_references_b mcr, cst_item_costs cic,mtl_parameters mp, mtl_system_items_kfv msik, hz_orig_systems_b hz
6523        WHERE  mcr.inventory_item_id = cic.inventory_item_id
6524      --AND    mcr.organization_id = cic.organization_id
6525        AND    msik.organization_id = mp.organization_id
6526        AND    msik.organization_id = cic.organization_id
6527        AND    msik.inventory_item_id = cic.inventory_item_id
6528        AND    cic.last_update_date <> cic.creation_date
6529        AND    hz.orig_system IN (SELECT * FROM THE(SELECT CAST(l_parsed_tbl AS FND_TABLE_OF_VARCHAR2_255) FROM DUAL))
6530        AND    hz.orig_system_id = mcr.source_system_id
6531        AND    cic.last_update_date >= l_from_date
6532        AND    cic.last_update_date <= l_to_date
6533        UNION
6534        SELECT  cql.inventory_item_id, msik.concatenated_segments, cql.organization_id, mp.organization_code
6535        FROM    mtl_cross_references_b mcr, cst_quantity_layers cql, mtl_parameters mp, mtl_system_items_kfv msik, hz_orig_systems_b hz
6536        WHERE   mcr.inventory_item_id = cql.inventory_item_id
6537      --AND     mcr.organization_id = cql.organization_id
6538        AND     msik.organization_id = mp.organization_id
6539        AND     hz.orig_system IN (SELECT * FROM THE(SELECT CAST(l_parsed_tbl AS FND_TABLE_OF_VARCHAR2_255) FROM DUAL))
6540        AND     hz.orig_system_id = mcr.source_system_id
6541        AND     msik.organization_id = cql.organization_id
6542        AND     msik.inventory_item_id = cql.inventory_item_id
6543        AND     cql.last_update_date >= l_from_date
6544        AND     cql.last_update_date <= l_to_date) item_pim;
6545 
6546 CURSOR c_get_item_list IS
6547     SELECT inv_ebi_get_operational_attrs(item_npim.inventory_item_id,item_npim.concatenated_segments,item_npim.organization_id,item_npim.organization_code,NULL,NULL)
6548     FROM
6549       (SELECT msi.inventory_item_id, msik.concatenated_segments, msi.organization_id, mp.organization_code
6550        FROM   mtl_system_items_b msi, mtl_parameters mp, mtl_system_items_kfv msik
6551        WHERE  msi.organization_id = mp.organization_id
6552        AND    msik.organization_id = msi.organization_id
6553        AND    msik.inventory_item_id = msi.inventory_item_id
6554        AND    msi.last_update_date <> msi.creation_date
6555        AND    msi.last_update_date >= l_from_date
6556        AND    msi.last_update_date <= l_to_date
6557        UNION
6558        SELECT cic.inventory_item_id,  msik.concatenated_segments, cic.organization_id, mp.organization_code
6559        FROM   cst_item_costs cic, mtl_parameters mp,  mtl_system_items_kfv msik
6560        WHERE  cic.organization_id = mp.organization_id
6561        AND    msik.organization_id = cic.organization_id
6562        AND    msik.inventory_item_id = cic.inventory_item_id
6563        AND    cic.last_update_date <> cic.creation_date
6564        AND    cic.last_update_date >= l_from_date
6565        AND    cic.last_update_date <= l_to_date
6566        UNION
6567        SELECT cql.inventory_item_id, msik.concatenated_segments, cql.organization_id, mp.organization_code
6568        FROM   cst_quantity_layers cql,mtl_parameters mp,  mtl_system_items_kfv msik
6569        WHERE  cql.organization_id=mp.organization_id
6570        AND    msik.organization_id = cql.organization_id
6571        AND    msik.inventory_item_id = cql.inventory_item_id
6572        AND    cql.last_update_date >= l_from_date
6573        AND    cql.last_update_date <= l_to_date
6574        ) item_npim;
6575 
6576   CURSOR c_get_item_flist IS
6577     SELECT inv_ebi_get_operational_attrs(item_flst.item_id,item_flst.item_name,item_flst.organization_id,item_flst.organization_code,NULL,NULL)
6578     FROM (
6579       SELECT a.item_id,a.item_name, a.organization_id,a.organization_code
6580       FROM THE (SELECT CAST( l_item_output_tbl as inv_ebi_get_opr_attrs_tbl)
6581                  FROM dual ) a
6582     INTERSECT
6583       SELECT b.item_id,b.item_name, b.organization_id,b.organization_code
6584       FROM THE (SELECT CAST( l_item_tbl as inv_ebi_get_opr_attrs_tbl)
6585                  FROM dual ) b
6586        ) item_flst;
6587 BEGIN
6588   FND_MSG_PUB.initialize();
6589   INV_EBI_UTIL.setup();
6590   INV_EBI_UTIL.debug_line('STEP 10: START CALLING INV_EBI_ITEM_HELPER.GET_ITEM_ATTRIBUTES_LIST');
6591   x_return_status := FND_API.g_ret_sts_success;
6592 
6593   IF (p_cross_reference_type IS NOT NULL AND p_cross_reference_type <> FND_API.G_MISS_CHAR) THEN
6594     l_parsed_tbl := parse_source_system_string(p_cross_reference_type);
6595   END IF;
6596 
6597   --Getting the values for the parameters passed from CP
6598   IF (p_name_value_list IS NOT NULL AND  p_name_value_list.COUNT > 0) THEN
6599     l_item_string   := INV_EBI_UTIL.get_config_param_value(p_name_value_list,'Item Name');
6600     l_org_string    := INV_EBI_UTIL.get_config_param_value(p_name_value_list,'Organization Code');
6601     l_from_date_str := INV_EBI_UTIL.get_config_param_value(p_name_value_list,'From Date');
6602     l_to_date_str   := INV_EBI_UTIL.get_config_param_value(p_name_value_list,'To Date');
6603     l_last_x_hrs    := INV_EBI_UTIL.get_config_param_value(p_name_value_list,'Updated in the last X Hrs');
6604 
6605     INV_EBI_UTIL.debug_line('STEP 20: INPUT PARAMETER FOR ITEM IS ' || l_item_string);
6606     INV_EBI_UTIL.debug_line('STEP 30: INPUT PARAMETER FOR ORG IS ' || l_org_string);
6607     INV_EBI_UTIL.debug_line('STEP 40: INPUT PARAMETER FOR FROM DATE IS ' || l_from_date_str);
6608     INV_EBI_UTIL.debug_line('STEP 50: INPUT PARAMETER FOR TO DATE IS  ' || l_to_date_str);
6609     INV_EBI_UTIL.debug_line('STEP 60: INPUT PARAMETER FOR LAST UPDATED HRS IS '|| l_last_x_hrs);
6610 
6611     IF l_from_date_str IS NOT NULL THEN
6612       l_from_date   := TO_DATE(l_from_date_str,'YYYY/MM/DD HH24:MI:SS');
6613       INV_EBI_UTIL.debug_line('STEP 70: FROM DATE CONVERSION IF IT IS NOT NULL ' || l_from_date);
6614     END IF;
6615 
6616     IF l_to_date_str IS NOT NULL THEN
6617       l_to_date     := TO_DATE(l_to_date_str,'YYYY/MM/DD HH24:MI:SS');
6618       INV_EBI_UTIL.debug_line('STEP 80: TO DATE CONVERSION IF IT IS NOT NULL ' || l_to_date);
6619     END IF;
6620 
6621     IF l_last_x_hrs IS NOT NULL THEN
6622       l_from_date   := SYSDATE-( l_last_x_hrs/24);
6623       l_to_date     := SYSDATE ;
6624       INV_EBI_UTIL.debug_line('STEP 90: FROM DATE IF THE LAST X HRS PARAMATER IS GIVEN ' || l_from_date);
6625       INV_EBI_UTIL.debug_line('STEP 100: TO DATE IF THE LAST X HRS PARAMATER IS GIVEN ' || l_to_date);
6626     END IF;
6627   END IF;
6628 
6629   -- If all the parameter values are null then fetch items that got updated
6630   -- from the last successfull completiopn date of CP
6631   IF (l_item_string IS NULL AND l_from_date IS NULL AND l_to_date IS NULL AND l_last_x_hrs IS NULL) THEN
6632     l_from_date :=INV_EBI_ITEM_HELPER.get_last_run_date( p_conc_prog_id => p_prog_id
6633                                     ,p_appl_id      => p_appl_id
6634                                     );
6635     INV_EBI_UTIL.debug_line('STEP 110: FROM DATE IF ALL THE PARAMETERS ARE NULL '|| l_from_date);
6636     l_to_date := SYSDATE;
6637   END IF;
6638 
6639   IF l_from_date IS NOT NULL AND l_to_date IS NULL THEN
6640     l_to_date := SYSDATE;
6641   END IF;
6642 
6643   -- Get the valid combination of Items and Organizations
6644   IF ( l_item_string IS NOT NULL  ) THEN
6645     INV_EBI_UTIL.debug_line('STEP 120: BEFORE CALLING PARSE_AND_GET_ITEM');
6646     parse_and_get_item( p_item_names            => l_item_string
6647                        ,p_org_codes             => l_org_string
6648                        ,x_item_tbl              => l_item_output_tbl
6649                        ,x_return_status         => l_return_status
6650                        ,x_msg_count             => l_msg_count
6651                        ,x_msg_data              => l_msg_data);
6652   INV_EBI_UTIL.debug_line('STEP 130: AFTER CALLING PARSE_AND_GET_ITEM  RETURN STATUS: '|| l_return_status);
6653   END IF;
6654 
6655 
6656   IF (l_return_status  <> FND_API.g_ret_sts_success) THEN
6657     x_return_status := l_return_status;
6658     IF  l_msg_data IS NOT NULL THEN
6659       x_msg_data := l_msg_data;
6660     END IF;
6661   END IF;
6662 
6663   x_items := l_item_output_tbl;
6664 
6665   -- Filtering the Items that got updated within the given dates
6666   IF (l_from_date IS NOT NULL AND l_to_date IS NOT NULL) THEN
6667     IF(INV_EBI_UTIL.is_pim_installed AND l_parsed_tbl IS NOT NULL AND l_parsed_tbl.COUNT>0) THEN
6668       INV_EBI_UTIL.debug_line('STEP 140: INSIDE THE IF PART OF FILTERING THE ITEMS WITH IN GIVEN DATES');
6669       --Fetched the data based on the source system reference
6670       IF (c_get_item_list_pim%ISOPEN) THEN
6671         CLOSE c_get_item_list_pim;
6672       END IF;
6673       OPEN  c_get_item_list_pim;
6674       FETCH c_get_item_list_pim BULK COLLECT INTO l_item_tbl;
6675       CLOSE c_get_item_list_pim;
6676     ELSE
6677      --Fetch all the records irrespective of source system reference
6678       INV_EBI_UTIL.debug_line('STEP 150: INSIDE THE ELSE PART OF FILTERING THE ITEMS WITH IN GIVEN DATES');
6679       IF (c_get_item_list%ISOPEN) THEN
6680         CLOSE c_get_item_list;
6681       END IF;
6682       OPEN  c_get_item_list;
6683       FETCH c_get_item_list BULK COLLECT INTO l_item_tbl;
6684       CLOSE c_get_item_list;
6685     END IF;
6686     IF (l_item_tbl.count > 0 ) THEN
6687       FOR i IN 1 .. l_item_tbl.count
6688       LOOP
6689         INV_EBI_UTIL.debug_line('STEP 160: ITEM NAME FROM ITEM LIST IS '|| l_item_tbl(i).item_name);
6690         INV_EBI_UTIL.debug_line('STEP 170: ORG CODE FROM ITEM LIST IS '|| l_item_tbl(i).organization_code);
6691       END LOOP;
6692     END IF;
6693 
6694     IF (l_item_string IS NOT NULL) THEN
6695       IF (c_get_item_flist%ISOPEN) THEN
6696         CLOSE c_get_item_flist;
6697       END IF;
6698       OPEN c_get_item_flist;
6699       FETCH c_get_item_flist BULK COLLECT INTO l_item_tbl_flst;
6700       CLOSE c_get_item_flist;
6701       x_items := l_item_tbl_flst;
6702     -- Filtering the Items that got updated in the specified time in the given Orgs
6703     ELSIF (l_org_string IS NOT NULL) THEN
6704       INV_EBI_UTIL.debug_line('STEP 180: BEFORE CALLING FILTER ITEMS BASED ON ORG');
6705       filter_items_based_on_org( p_org_codes            => l_org_string
6706                                 ,p_item_tbl             => l_item_tbl
6707                                 ,x_item_tbl             => l_item_org_output_tbl
6708                                 ,x_return_status        => l_return_status
6709                                 ,x_msg_count            => l_msg_count
6710                                 ,x_msg_data             => l_msg_data);
6711       INV_EBI_UTIL.debug_line('STEP 190: AFTER CALLING FILTER ITEMS BASED ON ORG RETURN STATUS: '|| l_return_status);
6712       IF (l_return_status  = FND_API.g_ret_sts_success) THEN
6713         x_items := l_item_org_output_tbl;
6714       ELSE
6715         x_return_status := l_return_status;
6716         IF  l_msg_data IS NOT NULL THEN
6717           x_msg_data := l_msg_data;
6718         END IF;
6719       END IF;
6720     ELSE
6721       x_items := l_item_tbl;
6722     END IF;
6723   END IF;
6724   IF (x_items.count > 0) THEN
6725     FOR i IN 1 .. x_items.count
6726     LOOP
6727       INV_EBI_UTIL.debug_line('STEP 200: ITEM NAME '|| x_items(i).item_name ||' ORGANIZATION ID '|| x_items(i).organization_id  ||  ' ORGANIZATION CODE '|| x_items(i).organization_code);
6728     END LOOP;
6729   END IF;
6730   IF  x_items is NOT NULL AND x_items.COUNT > 0 then
6731     INV_EBI_UTIL.debug_line('STEP 210: BEFORE CALLING INV_EBI_ITEM_HELPER.get_Operating_unit');
6732     FOR i IN 1..x_items.COUNT
6733     LOOP
6734       get_Operating_unit
6735         (p_oranization_id => x_items(i).organization_id
6736         ,x_operating_unit => x_items(i).operating_unit
6737         ,x_ouid           => x_items(i).operating_unit_id
6738         );
6739     END LOOP;
6740     INV_EBI_UTIL.debug_line('STEP 220: AFTER CALLING INV_EBI_ITEM_HELPER.get_Operating_unit');
6741   END IF;
6742   INV_EBI_UTIL.debug_line('STEP 230: END CALLING INV_EBI_ITEM_HELPER.get_item_attributes_list RETURN STATUS:  '|| x_return_status);
6743   INV_EBI_UTIL.wrapup;
6744 EXCEPTION
6745   WHEN OTHERS THEN
6746     x_return_status := FND_API.g_ret_sts_unexp_error;
6747     x_msg_data := SQLERRM ||' at INV_EBI_ITEM_HELPER.get_item_attributes_list';
6748     IF (c_get_item_flist%ISOPEN) THEN
6749       CLOSE c_get_item_flist;
6750     END IF;
6751     IF (c_get_item_list%ISOPEN) THEN
6752       CLOSE c_get_item_list;
6753     END IF;
6754     IF (c_get_item_list_pim%ISOPEN) THEN
6755       CLOSE c_get_item_list_pim;
6756     END IF;
6757 END get_item_attributes_list;
6758 
6759 /************************************************************************************
6760 --      API name        : get_item_balance_list
6761 --      Type            : Public
6762 --      Function        :
6763 ************************************************************************************/
6764 PROCEDURE get_item_balance_list(
6765   p_name_value_list         IN             inv_ebi_name_value_tbl
6766  ,p_prog_id                 IN             NUMBER
6767  ,p_appl_id                 IN             NUMBER
6768  ,p_cross_reference_type    IN             VARCHAR2
6769  ,x_items                  OUT NOCOPY      inv_ebi_get_opr_attrs_tbl
6770  ,x_return_status          OUT NOCOPY      VARCHAR2
6771  ,x_msg_count              OUT NOCOPY      NUMBER
6772  ,x_msg_data               OUT NOCOPY      VARCHAR2
6773 )
6774 IS
6775   l_return_status            VARCHAR2(2);
6776   l_item_string              VARCHAR2(32000);
6777   l_org_string               VARCHAR2(32000);
6778   l_item_name                VARCHAR2(40);
6779   l_org_code                 VARCHAR2(40);
6780   l_from_date                DATE := NULL;
6781   l_to_date                  DATE := NULL;
6782   l_from_date_str            VARCHAR2(30);
6783   l_to_date_str              VARCHAR2(30);
6784   l_last_x_hrs               NUMBER;
6785   l_item_tbl                inv_ebi_get_opr_attrs_tbl;
6786   l_item_output_tbl         inv_ebi_get_opr_attrs_tbl;
6787   l_item_org_output_tbl     inv_ebi_get_opr_attrs_tbl;
6788   l_item_tbl_flst           inv_ebi_get_opr_attrs_tbl;
6789   l_msg_data                 VARCHAR2(2000);
6790   l_msg_count                NUMBER;
6791   l_parsed_tbl               FND_TABLE_OF_VARCHAR2_255;
6792 
6793   CURSOR c_get_bal_item_lst_pim IS  --8897962
6794     SELECT inv_ebi_get_operational_attrs(gibp.inventory_item_id,gibp.concatenated_segments, gibp.organization_id,gibp.organization_code,NULL,NULL)
6795     FROM (
6796       SELECT DISTINCT mcr.inventory_item_id,msik.concatenated_segments,moq.organization_id,mp.organization_code
6797       FROM   mtl_onhand_quantities_detail moq,mtl_cross_references_b mcr, mtl_parameters mp, mtl_system_items_kfv msik, hz_orig_systems_b hz
6798       WHERE  mcr.inventory_item_id = moq.inventory_item_id
6799     --AND    mcr.organization_id = moq.organization_id
6800       AND    moq.organization_id = mp.organization_id
6801       AND    msik.organization_id  = moq.organization_id
6802       AND    msik.inventory_item_id = moq.inventory_item_id
6803       AND    hz.orig_system IN (SELECT * FROM THE(SELECT CAST(l_parsed_tbl AS FND_TABLE_OF_VARCHAR2_255) FROM DUAL))
6804       AND    hz.orig_system_id = mcr.source_system_id
6805       AND    moq.last_update_date >= l_from_date
6806       AND    moq.last_update_date <= l_to_date) gibp;
6807 
6808   CURSOR c_get_bal_item_lst IS
6809     SELECT inv_ebi_get_operational_attrs(gib.inventory_item_id,gib.concatenated_segments, gib.organization_id,gib.organization_code,NULL,NULL)
6810     FROM (SELECT DISTINCT moq.inventory_item_id,msik.concatenated_segments,moq.organization_id,mp.organization_code
6811           FROM mtl_onhand_quantities_detail moq, mtl_parameters mp, mtl_system_items_kfv msik
6812           WHERE moq.organization_id = mp.organization_id
6813           AND   msik.organization_id  = moq.organization_id
6814           AND   msik.inventory_item_id = moq.inventory_item_id
6815           AND   moq.last_update_date >= l_from_date
6816           AND   moq.last_update_date <= l_to_date)  gib;
6817 
6818   CURSOR c_get_bal_item_flst IS
6819     SELECT inv_ebi_get_operational_attrs(gibf.item_id,gibf.item_name, gibf.organization_id,gibf.organization_code,NULL,NULL)
6820     FROM (
6821     SELECT a.item_id,a.item_name, a.organization_id,a.organization_code
6822     FROM THE (SELECT cast( l_item_output_tbl as inv_ebi_get_opr_attrs_tbl)
6823               FROM dual ) a
6824     INTERSECT
6825     SELECT b.item_id,b.item_name, b.organization_id,b.organization_code
6826     FROM THE (SELECT cast( l_item_tbl as inv_ebi_get_opr_attrs_tbl)
6827               FROM dual ) b ) gibf;
6828 
6829 BEGIN
6830   FND_MSG_PUB.initialize();
6831   INV_EBI_UTIL.setup();
6832   INV_EBI_UTIL.debug_line('STEP 10: INSIDE INV_EBI_ITEM_HELPER.get_item_balance_list');
6833   x_return_status := FND_API.g_ret_sts_success;
6834 
6835   IF (p_cross_reference_type IS NOT NULL AND p_cross_reference_type <> FND_API.G_MISS_CHAR) THEN
6836     l_parsed_tbl := parse_source_system_string(p_cross_reference_type);
6837   END IF;
6838 
6839   IF (p_name_value_list IS NOT NULL AND  p_name_value_list.COUNT > 0) THEN
6840     l_item_string   := INV_EBI_UTIL.get_config_param_value(p_name_value_list,'Item Name');
6841     l_org_string    := INV_EBI_UTIL.get_config_param_value(p_name_value_list,'Organization Code');
6842     l_from_date_str := INV_EBI_UTIL.get_config_param_value(p_name_value_list,'From Date');
6843     l_to_date_str   := INV_EBI_UTIL.get_config_param_value(p_name_value_list,'To Date');
6844     l_last_x_hrs    := INV_EBI_UTIL.get_config_param_value(p_name_value_list,'Updated in the last X Hrs');
6845 
6846     INV_EBI_UTIL.debug_line('STEP 20: INPUT PARAMETER FOR ITEM IS ' || l_item_string);
6847     INV_EBI_UTIL.debug_line('STEP 30: INPUT PARAMETER FOR ORG IS ' || l_org_string);
6848     INV_EBI_UTIL.debug_line('STEP 40: INPUT PARAMETER FOR FROM DATE IS ' || l_from_date_str);
6849     INV_EBI_UTIL.debug_line('STEP 50: INPUT PARAMETER FOR TO DATE IS  ' || l_to_date_str);
6850     INV_EBI_UTIL.debug_line('STEP 60: INPUT PARAMETER FOR LAST UPDATED HRS IS '|| l_last_x_hrs);
6851 
6852     IF l_from_date_str IS NOT NULL THEN
6853       l_from_date   := TO_DATE(l_from_date_str,'YYYY/MM/DD HH24:MI:SS');
6854       INV_EBI_UTIL.debug_line('STEP 70: INSIDE IF OF FROM DATE FORMAT :'|| l_from_date);
6855     END IF;
6856 
6857     IF l_to_date_str IS NOT NULL THEN
6858       l_to_date     := TO_DATE(l_to_date_str,'YYYY/MM/DD HH24:MI:SS');
6859       INV_EBI_UTIL.debug_line('STEP 80: INSIDE IF OF TO DATE FORMAT '|| l_to_date);
6860     END IF;
6861 
6862     IF l_last_x_hrs IS NOT NULL THEN
6863       l_from_date   := SYSDATE-( l_last_x_hrs/24);
6864       l_to_date     := SYSDATE ;
6865       INV_EBI_UTIL.debug_line('STEP 90: FROM DATE IF LAST X HRS IS GIVEN '|| l_from_date);
6866       INV_EBI_UTIL.debug_line('STEP 100: TO DATE IF LAST X HRS IS GIVEN '|| l_to_date);
6867     END IF;
6868   END IF;
6869 
6870   IF (l_item_string IS NULL AND l_from_date IS NULL AND l_to_date IS NULL AND l_last_x_hrs IS NULL) THEN
6871     l_from_date :=get_last_run_date( p_conc_prog_id => p_prog_id
6872                                     ,p_appl_id      => p_appl_id
6873                                     );
6874     INV_EBI_UTIL.debug_line('STEP 110: FROM DATE WHEN ALL THE PARAMETERS ARE PASSED AS NULL '||l_from_date);
6875     l_to_date := SYSDATE;
6876   END IF;
6877 
6878   IF l_from_date IS NOT NULL AND l_to_date IS NULL THEN
6879     l_to_date := SYSDATE;
6880   END IF;
6881 
6882   IF ( l_item_string IS NOT NULL  ) THEN
6883     INV_EBI_UTIL.debug_line('STEP 120: BEFORE CALLING PARSE AND GET ITEM');
6884     parse_and_get_item( p_item_names            => l_item_string
6885                        ,p_org_codes             => l_org_string
6886                        ,x_item_tbl              => l_item_output_tbl
6887                        ,x_return_status         => l_return_status
6888                        ,x_msg_count             => l_msg_count
6889                        ,x_msg_data              => l_msg_data);
6890   END IF;
6891   INV_EBI_UTIL.debug_line('STEP 130: AFTER CALLING PARSE AND GET ITEM STATUS:  '|| l_return_status);
6892   IF (l_return_status  <> FND_API.g_ret_sts_success) THEN
6893     x_return_status := l_return_status;
6894     IF  l_msg_data IS NOT NULL THEN
6895       x_msg_data := l_msg_data;
6896     END IF;
6897   END IF;
6898 
6899   x_items := l_item_output_tbl;
6900 
6901   IF (l_from_date IS NOT NULL AND l_to_date IS NOT NULL) THEN
6902     IF(INV_EBI_UTIL.is_pim_installed AND l_parsed_tbl IS NOT NULL AND l_parsed_tbl.COUNT>0) THEN
6903       INV_EBI_UTIL.debug_line('STEP 140:  INSIDE IF BLOCK IF FROM DATE AND TO DATE IS NOT NULL');
6904     --Fetched the data based on the source system reference
6905       IF (c_get_bal_item_lst_pim%ISOPEN) THEN
6906         CLOSE c_get_bal_item_lst_pim;
6907       END IF;
6908       OPEN  c_get_bal_item_lst_pim;
6909       FETCH c_get_bal_item_lst_pim BULK COLLECT INTO l_item_tbl;
6910       CLOSE c_get_bal_item_lst_pim;
6911     ELSE
6912       INV_EBI_UTIL.debug_line('STEP 150: INSIDE ELSE BLOCK IF FROM DATE AND TO DATE IS NOT NULL');
6913       IF (c_get_bal_item_lst%ISOPEN) THEN
6914         CLOSE c_get_bal_item_lst;
6915       END IF;
6916       OPEN  c_get_bal_item_lst;
6917       FETCH c_get_bal_item_lst BULK COLLECT INTO l_item_tbl;
6918       CLOSE c_get_bal_item_lst;
6919     END IF;
6920     IF (l_item_tbl.count >0) THEN
6921       FOR i IN 1 .. l_item_tbl.count
6922       LOOP
6923         INV_EBI_UTIL.debug_line('STEP 160: ITEM NAME FROM ITEM LIST IS '|| l_item_tbl(i).item_name);
6924         INV_EBI_UTIL.debug_line('STEP 170: ORG CODE FROM ITEM LIST IS  '|| l_item_tbl(i).organization_code);
6925       END LOOP;
6926     END IF;
6927 
6928     IF (l_item_string IS NOT NULL) THEN
6929       IF (c_get_bal_item_flst%ISOPEN) THEN
6930         CLOSE c_get_bal_item_flst;
6931       END IF;
6932       OPEN c_get_bal_item_flst;
6933       FETCH c_get_bal_item_flst BULK COLLECT INTO l_item_tbl_flst;
6934       CLOSE c_get_bal_item_flst;
6935       x_items := l_item_tbl_flst;
6936     ELSIF (l_org_string IS NOT NULL) THEN
6937       INV_EBI_UTIL.debug_line('STEP 180: BEFORE CALLING FILTER ITEMS BASED ON ORG');
6938       filter_items_based_on_org( p_org_codes            => l_org_string
6939                                 ,p_item_tbl             => l_item_tbl
6940                                 ,x_item_tbl             => l_item_org_output_tbl
6941                                 ,x_return_status        => l_return_status
6942                                 ,x_msg_count            => l_msg_count
6943                                 ,x_msg_data             => l_msg_data);
6944       INV_EBI_UTIL.debug_line('STEP 190: AFTER CALLING FILTER ITEMS BASED ON ORG STATUS:  '|| l_return_status);
6945       IF (l_return_status  = FND_API.g_ret_sts_success) THEN
6946         x_items := l_item_org_output_tbl;
6947       ELSE
6948         x_return_status := l_return_status;
6949         IF  x_msg_data IS NOT NULL THEN
6950           x_msg_data := x_msg_data || l_msg_data;
6951         ELSE
6952           x_msg_data := l_msg_data;
6953         END IF;
6954       END IF;
6955     ELSE
6956       x_items := l_item_tbl;
6957     END IF;
6958   END IF;
6959   IF (x_items.count > 0) THEN
6960     FOR i IN 1 .. x_items.count
6961     LOOP
6962       INV_EBI_UTIL.debug_line('STEP 200:  ITEM NAME '|| x_items(i).item_name ||' ORGANIZATION CODE '|| x_items(i).organization_code);
6963     END LOOP;
6964   END IF;
6965   -- for Operating unit Pouplation
6966   IF  x_items is NOT NULL AND x_items.COUNT > 0 then
6967     INV_EBI_UTIL.debug_line('STEP 210: BEFORE CALLING GET OPERATING UNIT');
6968     FOR i IN 1..x_items.COUNT
6969     LOOP
6970       get_Operating_unit
6971         (p_oranization_id => x_items(i).organization_id
6972         ,x_operating_unit => x_items(i).operating_unit
6973         ,x_ouid      => x_items(i).operating_unit_id
6974         );
6975     END LOOP;
6976     INV_EBI_UTIL.debug_line('STEP 220: AFTER CALLING GET OPERATING UNIT');
6977   END IF;
6978   INV_EBI_UTIL.debug_line('STEP 230: END CALLING INV_EBI_ITEM_HELPER.get_item_balance_list STATUS: '|| x_return_status);
6979   INV_EBI_UTIL.wrapup;
6980 EXCEPTION
6981   WHEN OTHERS THEN
6982     x_return_status := FND_API.g_ret_sts_unexp_error;
6983     x_msg_data := SQLERRM ||' at INV_EBI_ITEM_HELPER.get_item_balance_list';
6984     IF (c_get_bal_item_flst%ISOPEN) THEN
6985       CLOSE c_get_bal_item_flst;
6986     END IF;
6987     IF (c_get_bal_item_lst%ISOPEN) THEN
6988       CLOSE c_get_bal_item_lst;
6989     END IF;
6990     IF (c_get_bal_item_lst_pim%ISOPEN) THEN
6991       CLOSE c_get_bal_item_lst_pim;
6992     END IF;
6993 END get_item_balance_list;
6994 /************************************************************************************
6995 --      API name        : get_Operating_unit
6996 --      Type            : Public
6997 --      Function        :
6998 ************************************************************************************/
6999 PROCEDURE get_Operating_unit
7000    (p_oranization_id IN NUMBER
7001    ,x_operating_unit  OUT NOCOPY VARCHAR2
7002    ,x_ouid             OUT NOCOPY NUMBER
7003    )
7004 IS
7005 CURSOR c_operating_unit(cp_organization_id NUMBER)
7006   IS
7007   SELECT operating_unit,name
7008   FROM ORG_ORGANIZATION_DEFINITIONS orgdef,
7009      HR_OPERATING_UNITS hrou
7010   WHERE orgdef.organization_id = cp_organization_id
7011   AND   hrou.organization_id=orgdef.operating_unit;
7012 BEGIN
7013   IF (c_operating_unit%ISOPEN) THEN
7014     CLOSE c_operating_unit;
7015   END IF;
7016   OPEN c_operating_unit(p_oranization_id);
7017   FETCH c_operating_unit into x_ouid,x_operating_unit;
7018   CLOSE c_operating_unit;
7019  EXCEPTION WHEN OTHERS
7020  THEN
7021   IF (c_operating_unit%ISOPEN) THEN
7022     CLOSE c_operating_unit;
7023   END IF;
7024 END get_Operating_unit;
7025 
7026 /************************************************************************************
7027 --      API name        : set_server_time_zone
7028 --      Type            : Public
7029 --      Function        :
7030 ************************************************************************************/
7031 PROCEDURE set_server_time_zone
7032 IS
7033   l_server_tz  VARCHAR2(50);
7034   l_tzoffset   VARCHAR2(10);
7035 BEGIN
7036 
7037   INV_EBI_ITEM_HELPER.G_TIME_ZONE_OFFSET := NULL;
7038 
7039   SELECT timezone_code
7040   INTO   l_server_tz
7041   FROM   fnd_timezones_b
7042   WHERE  upgrade_tz_id = fnd_profile.value('SERVER_TIMEZONE_ID')
7043   AND    UPPER(enabled_flag)='Y';
7044 
7045   SELECT TZ_OFFSET(l_server_tz)
7046   INTO   l_tzoffset
7047   FROM   DUAL;
7048 
7049   INV_EBI_ITEM_HELPER.G_TIME_ZONE_OFFSET := l_tzoffset;
7050 
7051 EXCEPTION
7052   WHEN OTHERS THEN
7053     NULL;
7054 END set_server_time_zone;
7055 /************************************************************************************
7056 --      API name        : convert_date_str
7057 --      Type            : Public
7058 --      Function        :
7059 ************************************************************************************/
7060 FUNCTION convert_date_str(p_datetime IN DATE)
7061 RETURN VARCHAR2
7062 IS
7063   l_ret_tz     VARCHAR2(50);
7064 BEGIN
7065   IF(p_datetime IS NOT NULL AND p_datetime<>FND_API.G_MISS_DATE) THEN
7066     l_ret_tz := SUBSTR(TO_CHAR(p_datetime,'YYYY-MM-DD"T"HH24:MI:SS')||INV_EBI_ITEM_HELPER.G_TIME_ZONE_OFFSET,1,25);
7067   END IF;
7068   RETURN l_ret_tz;
7069 EXCEPTION
7070   WHEN OTHERS THEN
7071     NULL;
7072 END convert_date_str;
7073 END INV_EBI_ITEM_HELPER;