DBA Data[Home] [Help]

PACKAGE BODY: APPS.EGO_ITEM_PVT

Source


1 PACKAGE BODY EGO_ITEM_PVT AS
2 /* $Header: EGOVITMB.pls 120.57.12020000.4 2012/11/14 09:25:19 liswang ship $ */
3 
4                       -----------------------
5                       -- Private Data Type --
6                       -----------------------
7 
8     TYPE LOCAL_MEDIUM_VARCHAR_TABLE IS TABLE OF VARCHAR2(4000)
9       INDEX BY BINARY_INTEGER;
10 
11 -- =============================================================================
12 --                         Package constants and cursors
13 -- =============================================================================
14 
15    G_FILE_NAME          CONSTANT  VARCHAR2(12)  := 'EGOVITMB.pls';
16    G_PKG_NAME           CONSTANT  VARCHAR2(30)  := 'EGO_ITEM_PVT';
17    G_APP_NAME           CONSTANT  VARCHAR2(3)   := 'EGO';
18    G_PKG_NAME_TOKEN     CONSTANT  VARCHAR2(8)   := 'PKG_NAME';
19    G_API_NAME_TOKEN     CONSTANT  VARCHAR2(8)   := 'API_NAME';
20    G_PROC_NAME_TOKEN    CONSTANT  VARCHAR2(9)   := 'PROC_NAME';
21    G_SQL_ERR_MSG_TOKEN  CONSTANT  VARCHAR2(11)  := 'SQL_ERR_MSG';
22    G_PLSQL_ERR          CONSTANT  VARCHAR2(17)  := 'EGO_PLSQL_ERR';
23    G_INVALID_PARAMS_MSG CONSTANT  VARCHAR2(30)  := 'EGO_API_INVALID_PARAMS';
24 
25    G_EQ_VAL        CONSTANT  VARCHAR2(2) := 'EQ';
26    G_GT_VAL        CONSTANT  VARCHAR2(2) := 'GT';
27    G_GE_VAL        CONSTANT  VARCHAR2(2) := 'GE';
28    G_LT_VAL        CONSTANT  VARCHAR2(2) := 'LT';
29    G_LE_VAL        CONSTANT  VARCHAR2(2) := 'LE';
30 
31    G_TRUE          CONSTANT  VARCHAR2(1) := 'T'; -- FND_API.G_TRUE;
32    G_FALSE         CONSTANT  VARCHAR2(1) := 'F'; -- FND_API.G_FALSE;
33 
34    G_EGO_ITEM                CONSTANT  VARCHAR2(20) := 'EGO_ITEM';
35    G_HZ_USER_PARTY_TYPE      CONSTANT  VARCHAR2(20) := 'PERSON';
36    G_HZ_COMPANY_PARTY_TYPE   CONSTANT  VARCHAR2(20) := 'ORGANIZATION';
37 
38    -- data securiry functions
39    G_FN_NAME_ADD_ROLE        CONSTANT  VARCHAR2(50) := 'EGO_ADD_ITEM_PEOPLE';
40    G_FN_NAME_PROMOTE         CONSTANT  VARCHAR2(50) := 'EGO_PRO_ITEM_LIFE_CYCLE';
41    G_FN_NAME_DEMOTE          CONSTANT  VARCHAR2(50) := 'EGO_DEM_ITEM_LIFE_CYCLE';
42    G_FN_NAME_CHANGE_STATUS   CONSTANT  VARCHAR2(50) := 'EGO_EDIT_ITEM_STATUS';
43    G_FN_NAME_EDIT_LC_PROJ    CONSTANT  VARCHAR2(50) := 'EGO_CREATE_ITEM_LC_TRACK_PROJ';
44 
45    -- functional securiry functions
46    G_FN_NAME_ADMIN           CONSTANT  VARCHAR2(50) := 'EGO_ITEM_ADMINISTRATION';
47 
48    TYPE DYNAMIC_CUR IS REF CURSOR;
49 
50 -- =============================================================================
51 --                         Package variables
52 -- =============================================================================
53 
54    ------------------- BEGIN Bug 6531908: Cached user information --------------
55 
56    g_username               VARCHAR2(100);
57    g_party_id               VARCHAR2(30);
58 
59    --------------------- END Bug 6531908 ---------------------------------------
60 
61 
62 -- =============================================================================
63 --                 Private Procedures
64 -- =============================================================================
65 
66 -- ----------------------
67 --
68 -- Developer debugging
69 -- ----------------------
70 PROCEDURE code_debug (p_msg  IN  VARCHAR2) IS
71 --PRAGMA AUTONOMOUS_TRANSACTION;
72 BEGIN
73   -- insert into xx_b1253_debug  values ( p_msg,sysdate);
74   -- commit;
75 
76 
77   RETURN;
78 EXCEPTION
79   WHEN OTHERS THEN
80   NULL;
81 END code_debug;
82 
83 ------------------------------------------
84 --
85 -- Check validation of start date
86 -- in context with the end date passed
87 --
88  ------------------------------------------
89 FUNCTION date_check (p_start_date  IN DATE
90                     ,p_end_date    IN DATE
91                     ,p_validation_type IN VARCHAR2
92                     ) RETURN BOOLEAN IS
93 BEGIN
94   IF p_validation_type NOT IN
95        (G_EQ_VAL
96        ,G_GT_VAL
97        ,G_GE_VAL
98        ,G_LT_VAL
99        ,G_LE_VAL
100        ) THEN
101     RETURN FALSE;
102   END IF;
103   IF p_validation_type = G_EQ_VAL THEN
104     IF ( (p_start_date IS NULL AND p_end_date IS NULL)
105           OR
106           (p_start_date = p_end_date)
107        ) THEN
108       RETURN TRUE;
109     END IF;
110   ELSIF p_validation_type = G_GT_VAL THEN
111     IF (p_end_date IS NOT NULL AND NVL(p_start_date,p_end_date+1)>p_end_date) THEN
112       RETURN TRUE;
113     END IF;
114   ELSIF p_validation_type = G_GE_VAL THEN
115     IF ( (p_start_date IS NULL AND p_end_date IS NULL )
116           OR
117          (p_end_date IS NOT NULL AND NVL(p_start_date,p_end_date)>=p_end_date)
118        ) THEN
119       RETURN TRUE;
120     END IF;
121   ELSIF p_validation_type = G_LT_VAL THEN
122     IF (p_start_date IS NOT NULL AND p_start_date < NVL(p_end_date,p_start_date+1)) THEN
123       RETURN TRUE;
124     END IF;
125   ELSIF p_validation_type = G_LE_VAL THEN
126     IF ( (p_start_date IS NULL AND p_end_date IS NULL)
127           OR
128          (p_start_date IS NOT NULL AND p_start_date <= NVL(p_end_date,p_start_date))
129        ) THEN
130       RETURN TRUE;
131     END IF;
132   END IF;
133   RETURN FALSE;
134 END date_check;
135 
136 ------------------------------------------
137 --
138 -- Check validity of organization details passed
139 --
140  ------------------------------------------
141 FUNCTION validate_org (x_organization_id    IN OUT NOCOPY NUMBER
142                       ,p_organization_code  IN VARCHAR2
143                       ,p_set_message        IN VARCHAR2
144                     ) RETURN BOOLEAN IS
145   l_dummy_char  VARCHAR2(32767);
146 BEGIN
147   IF x_organization_id IS NOT NULL THEN
148     BEGIN
149       SELECT organization_id
150       INTO x_organization_id
151       from mtl_parameters
152       where organization_id = x_organization_id;
153       RETURN TRUE;
154     EXCEPTION
155       WHEN OTHERS THEN
156         IF FND_API.To_Boolean(p_set_message) THEN
157           fnd_message.Set_Name(G_APP_NAME, 'EGO_ORGANIZATION_ID');
158           l_dummy_char := fnd_message.get();
159           fnd_message.Set_Name(G_APP_NAME, 'EGO_IPI_INVALID_VALUE');
160           fnd_message.Set_Token('NAME', l_dummy_char);
161           fnd_message.Set_Token('VALUE', x_organization_id);
162           fnd_msg_pub.Add;
163         END IF;
164         RETURN FALSE;
165     END;
166   ELSIF p_organization_code IS NOT NULL THEN
167     BEGIN
168       SELECT organization_id
169       INTO x_organization_id
170       from mtl_parameters
171       where organization_code = p_organization_code;
172       RETURN TRUE;
173     EXCEPTION
174       WHEN OTHERS THEN
175         IF FND_API.To_Boolean(p_set_message) THEN
176           fnd_message.Set_Name(G_APP_NAME, 'EGO_ORGANIZATION_CODE');
177           l_dummy_char := fnd_message.get();
178           fnd_message.Set_Name(G_APP_NAME, 'EGO_IPI_INVALID_VALUE');
179           fnd_message.Set_Token('NAME', l_dummy_char);
180           fnd_message.Set_Token('VALUE', p_organization_code);
181           fnd_msg_pub.Add;
182         END IF;
183         RETURN FALSE;
184     END;
185   ELSE
186 --    x_organization_id := NULL;
187     RETURN FALSE;
188   END IF;
189 EXCEPTION
190   WHEN OTHERS THEN
191 --    x_organization_id := NULL;
192     RETURN FALSE;
193 END validate_org;
194 
195 ------------------------------------------
196 --
197 -- Check validity of item details passed
198 --
199  ------------------------------------------
200 FUNCTION validate_item (x_inventory_item_id  IN OUT NOCOPY NUMBER
201                        ,x_item_number        IN OUT NOCOPY VARCHAR2
202                        ,x_approval_status    OUT NOCOPY VARCHAR2
203                        ,p_organization_id    IN  NUMBER
204                        ,p_set_message        IN VARCHAR2
205                     ) RETURN BOOLEAN IS
206   l_dummy_char  VARCHAR2(32767);
207 BEGIN
208   IF p_organization_id IS NOT NULL THEN
209     IF x_inventory_item_id IS NOT NULL THEN
210       BEGIN
211         SELECT itm.inventory_item_id, itm.approval_status, itm_num.concatenated_segments
212         INTO x_inventory_item_id, x_approval_status, x_item_number
213         FROM mtl_system_items_b itm, mtl_system_items_b_kfv itm_num
214         WHERE itm.inventory_item_id = x_inventory_item_id
215           AND itm.organization_id = p_organization_id
216           AND itm_num.inventory_item_id = itm.inventory_item_id
217           AND itm_num.organization_id = itm.organization_id;
218         RETURN TRUE;
219       EXCEPTION
220         WHEN OTHERS THEN
221           IF FND_API.To_Boolean(p_set_message) THEN
222             fnd_message.Set_Name(G_APP_NAME, 'EGO_EF_BL_INV_ITEM_ID_ERR');
223             fnd_message.Set_Token('ITEM_ID', x_inventory_item_id);
224             fnd_msg_pub.Add;
225           END IF;
226           RETURN FALSE;
227       END;
228     ELSIF x_item_number IS NOT NULL THEN
229       BEGIN
230         SELECT itm.inventory_item_id, itm.approval_status, itm_num.concatenated_segments
231         INTO x_inventory_item_id, x_approval_status, x_item_number
232         FROM mtl_system_items_b itm, mtl_system_items_b_kfv itm_num
233         WHERE itm_num.organization_id = p_organization_id
234           AND itm_num.concatenated_segments = x_item_number
235           AND itm.inventory_item_id = itm_num.inventory_item_id
236           AND itm.organization_id = itm_num.organization_id;
237         RETURN TRUE;
238       EXCEPTION
239         WHEN OTHERS THEN
240           IF FND_API.To_Boolean(p_set_message) THEN
241             fnd_message.Set_Name(G_APP_NAME, 'EGO_EF_BL_ITEM_NUM_ERR');
242             fnd_message.Set_Token('ITEM_NUMBER', x_item_number);
243             fnd_msg_pub.Add;
244           END IF;
245           RETURN FALSE;
246       END;
247     ELSE
248 --    x_inventory_item_id := NULL;
249 --    x_item_number := NULL;
250 --    x_approval_status := NULL;
251       RETURN FALSE;
252     END IF;
253   ELSE
254     IF FND_API.To_Boolean(p_set_message) THEN
255       fnd_message.Set_Name(G_APP_NAME, 'EGO_ORGANIZATION');
256       l_dummy_char := fnd_message.get();
257       fnd_message.Set_Name(G_APP_NAME, 'EGO_IPI_INVALID_VALUE');
258       fnd_message.Set_Token('NAME', l_dummy_char);
259       fnd_message.Set_Token('VALUE', ' ');
260       fnd_msg_pub.Add;
261     END IF;
262     RETURN FALSE;
263   END IF;
264 EXCEPTION
265   WHEN OTHERS THEN
266 --    x_inventory_item_id := NULL;
267 --    x_item_number := NULL;
268 --    x_approval_status := NULL;
269     RETURN FALSE;
270 END validate_item;
271 
272 
273 ------------------------------------------
274 --
275 -- Check validity of item revision details
276 --
277  ------------------------------------------
278 FUNCTION validate_item_rev (x_revision_id        IN OUT NOCOPY NUMBER
279                            ,x_revision           IN OUT NOCOPY VARCHAR2
280                            ,p_inventory_item_id  IN NUMBER
281                            ,p_organization_id    IN NUMBER
282                            ,p_set_message        IN VARCHAR2
283                     ) RETURN BOOLEAN IS
284   l_dummy_char  VARCHAR2(32767);
285 BEGIN
286   IF p_organization_id IS NOT NULL AND p_inventory_item_id IS NOT NULL THEN
287     IF x_revision_id IS NOT NULL THEN
288       BEGIN
289         SELECT revision_id, revision
290         INTO x_revision_id, x_revision
291         FROM mtl_item_revisions_b
292         WHERE inventory_item_id = p_inventory_item_id
293           AND organization_id = p_organization_id
294           AND revision_id = x_revision_id;
295         RETURN TRUE;
296       EXCEPTION
297         WHEN OTHERS THEN
298           IF FND_API.To_Boolean(p_set_message) THEN
299             fnd_message.Set_Name(G_APP_NAME, 'EGO_REVISIONID_INVALID');
300             fnd_message.Set_Token('REVISION_ID', x_revision_id);
301             fnd_msg_pub.Add;
302           END IF;
303           RETURN FALSE;
304       END;
305     ELSIF x_revision IS NOT NULL THEN
306       BEGIN
307         SELECT revision_id, revision
308         INTO x_revision_id, x_revision
309         FROM mtl_item_revisions_b
310         WHERE inventory_item_id = p_inventory_item_id
311           AND organization_id = p_organization_id
312           AND revision = x_revision;
313         RETURN TRUE;
314       EXCEPTION
315         WHEN OTHERS THEN
316           IF FND_API.To_Boolean(p_set_message) THEN
317             fnd_message.Set_Name(G_APP_NAME, 'EGO_REVISION_INVALID');
318             fnd_message.Set_Token('REVISION', x_revision);
319             fnd_msg_pub.Add;
320           END IF;
321           RETURN FALSE;
322       END;
323     ELSE
324 --    x_revision_id := NULL;
325 --    x_revision := NULL;
326       RETURN FALSE;
327     END IF;
328   ELSE
329     RETURN FALSE;
330   END IF;
331 EXCEPTION
332   WHEN OTHERS THEN
333 --    x_revision_id := NULL;
334 --    x_revision := NULL;
335     RETURN FALSE;
336 END validate_item_rev;
337 
338 ------------------------------------------
339 --
340 -- check validity of party details passed
341 --
342  ------------------------------------------
343 FUNCTION validate_party (p_party_type    IN VARCHAR2
344                         ,x_party_id      IN OUT NOCOPY NUMBER
345                         ,x_party_name    IN OUT NOCOPY VARCHAR2
346                         ) RETURN BOOLEAN IS
347   l_hz_party_type   HZ_PARTIES.party_type%TYPE;
348   l_dummy_char  VARCHAR2(32767);
349 BEGIN
350   IF p_party_type IN (EGO_ITEM_PUB.G_USER_PARTY_TYPE
351                      ,EGO_ITEM_PUB.G_GROUP_PARTY_TYPE
352                      ,EGO_ITEM_PUB.G_COMPANY_PARTY_TYPE
353                      ,EGO_ITEM_PUB.G_ALL_USERS_PARTY_TYPE
354                      ) THEN
355     IF p_party_type = EGO_ITEM_PUB.G_ALL_USERS_PARTY_TYPE THEN
356       x_party_id := -1000; -- needed by EGO_SECURITY_PUB
357       x_party_name := p_party_type;
358       RETURN TRUE;
359     ELSE
360       IF p_party_type = EGO_ITEM_PUB.G_COMPANY_PARTY_TYPE THEN
361         l_hz_party_type := G_HZ_COMPANY_PARTY_TYPE;
362       ELSIF p_party_type = EGO_ITEM_PUB.G_GROUP_PARTY_TYPE THEN
363         l_hz_party_type := p_party_type;
364       ELSIF p_party_type = EGO_ITEM_PUB.G_USER_PARTY_TYPE THEN
365         l_hz_party_type := G_HZ_USER_PARTY_TYPE;
366       END IF;
367       IF x_party_id IS NOT NULL THEN
368         -- validate the party_id passed.
369         BEGIN
370           SELECT party_id, party_name
371           INTO x_party_id, x_party_name
372           FROM hz_parties
373           WHERE party_id = x_party_id
374           AND party_type = l_hz_party_type;
375           RETURN TRUE;
376         EXCEPTION
377           WHEN OTHERS THEN
378 --            x_party_id := NULL;
379 --            x_party_name := NULL;
380             RETURN FALSE;
381         END;
382       ELSIF x_party_name IS NOT NULL THEN
383         -- validate the party_name passed.
384         BEGIN
385           SELECT party_id, party_name
386           INTO x_party_id, x_party_name
387           FROM hz_parties
388           WHERE party_name = x_party_name
389           AND party_type = l_hz_party_type;
390           RETURN TRUE;
391         EXCEPTION
392           WHEN OTHERS THEN
393 --            x_party_id := NULL;
394 --            x_party_name := NULL;
395             RETURN FALSE;
396         END;
397       END IF;
398     END IF;
399   ELSE
400 --    x_party_name := NULL;
401 --    x_party_id   := NULL;
402     RETURN FALSE;
403   END IF;
404 EXCEPTION
405   WHEN OTHERS THEN
406 --    x_party_id := NULL;
407 --    x_party_name := NULL;
408     RETURN FALSE;
409 END validate_party;
410 
411 ------------------------------------------
412 --
413 -- check validity of instance set details
414 --
415  ------------------------------------------
416 FUNCTION validate_instance_set (x_instance_set_id IN OUT NOCOPY NUMBER
417                                ,p_set_disp_name   IN VARCHAR2
418                                ) RETURN BOOLEAN IS
419   l_dummy_char  VARCHAR2(32767);
420 BEGIN
421   IF x_instance_set_id IS NOT NULL THEN
422     BEGIN
423       SELECT instance_set_id
424       INTO x_instance_set_id
425       FROM fnd_object_instance_sets
426       WHERE instance_set_id = x_instance_set_id
427         AND object_id = (SELECT object_id FROM fnd_objects WHERE obj_name = G_EGO_ITEM);
428       RETURN TRUE;
429     EXCEPTION
430       WHEN OTHERS THEN
431 --        x_instance_set_id := NULL;
432         RETURN FALSE;
433     END;
434   ELSIF p_set_disp_name IS NOT NULL THEN
435     BEGIN
436       SELECT instance_set_id
437       INTO x_instance_set_id
438       FROM fnd_object_instance_sets_vl
439       WHERE display_name = p_set_disp_name
440         AND object_id = (SELECT object_id FROM fnd_objects WHERE obj_name = G_EGO_ITEM);
441       RETURN TRUE;
442     EXCEPTION
443       WHEN OTHERS THEN
444 --        x_instance_set_id := NULL;
445         RETURN FALSE;
446     END;
447   ELSE
448 --    x_instance_set_id := NULL;
449     RETURN FALSE;
450   END IF;
451 EXCEPTION
452   WHEN OTHERS THEN
453 --    x_instance_set_id := NULL;
454     RETURN FALSE;
455 END validate_instance_set;
456 
457 -----------------------------
458 --
459 --  check validity of  menu
460 --
461 -----------------------------
462 FUNCTION validate_menu (x_menu_id        IN OUT NOCOPY NUMBER
463                        ,x_menu_name      IN OUT NOCOPY VARCHAR2
464                        ,p_user_menu_name IN  VARCHAR2
465                        ,p_menu_type      IN VARCHAR2
466                        ) RETURN BOOLEAN IS
467   l_dummy_char  VARCHAR2(32767);
468 BEGIN
469   IF p_menu_type IS NOT NULL THEN
470     IF x_menu_id IS NOT NULL THEN
471       BEGIN
472         SELECT menu_id, menu_name
473         INTO x_menu_id, x_menu_name
474         FROM fnd_menus
475         WHERE menu_id = x_menu_id
476         AND type = p_menu_type;
477         RETURN TRUE;
478       EXCEPTION
479         WHEN OTHERS THEN
480 --          x_menu_id := NULL;
481 --          x_menu_name := NULL;
482           RETURN FALSE;
483       END;
484     ELSIF p_user_menu_name IS NOT NULL THEN
485       BEGIN
486         SELECT menu_id, menu_name
487         INTO x_menu_id, x_menu_name
488         FROM fnd_menus_vl
489         WHERE user_menu_name = p_user_menu_name
490         AND type = p_menu_type;
491         RETURN TRUE;
492       EXCEPTION
493         WHEN OTHERS THEN
494 --          x_menu_id := NULL;
495 --          x_menu_name := NULL;
496           RETURN FALSE;
497       END;
498     END IF;
499   ELSE
500 --    x_menu_id := NULL;
501 --    x_menu_name := NULL;
502     RETURN FALSE;
503   END IF;
504 EXCEPTION
505   WHEN OTHERS THEN
506 --    x_menu_id := NULL;
507 --    x_menu_name := NULL;
508     RETURN FALSE;
509 END validate_menu;
510 
511 ---------------------------------
512 --
513 -- Get Lifecycle / Phase Names
514 --
515 ---------------------------------
516 FUNCTION get_lifecycle_name (p_lc_phase_type    IN VARCHAR2
517                             ,p_proj_element_id  IN NUMBER
518                             ) RETURN VARCHAR2 IS
519   l_dummy_char VARCHAR2(32767);
520 BEGIN
521   IF p_lc_phase_type = 'LIFECYCLE' THEN
522     SELECT name
523     INTO l_dummy_char
524     FROM PA_EGO_LIFECYCLES_V
525     WHERE proj_element_id = p_proj_element_id;
526   ELSIF p_lc_phase_type = 'PHASE' THEN
527     SELECT name
528     INTO l_dummy_char
529     FROM PA_EGO_PHASES_V
530     WHERE proj_element_id = p_proj_element_id;
531   END IF;
532   RETURN l_dummy_char;
533 EXCEPTION
534   WHEN OTHERS THEN
535     RETURN NULL;
536 END get_lifecycle_name;
537 
538 ---------------------------------
539 --
540 -- check whether the user has functional privilege
541 --
542 ---------------------------------
543 FUNCTION validate_function_security (p_function_name     IN VARCHAR2  -- 'EGO_ITEM_ADMINISTRATION'
544                                     ,p_set_message       IN VARCHAR2
545                                     ) RETURN BOOLEAN IS
546 BEGIN
547   RETURN TRUE;
548   IF fnd_function.test(p_function_name) THEN
549     RETURN TRUE;
550   ELSE
551     IF FND_API.To_Boolean(p_set_message) THEN
552       fnd_message.Set_Name(G_APP_NAME, 'EGO_NO_FUNC_PRIVILEGE_FOR_USER');
553       fnd_msg_pub.Add;
554     END IF;
555     RETURN FALSE;
556   END IF;
557 EXCEPTION
558   WHEN OTHERS THEN
559     RETURN FALSE;
560 END validate_function_security;
561 
562 -- -----------------------------------------------------------------------------------
563 --  API Name:       Chg_Order_required
564 --
565 --  Description:
566 --    Returns Y if a change order or update is not allowed on a particular Attribute
567 --    based on the given inventoryitemid,orgId,ObjectId,attributegroupid and revision level
568 -- ------------------------------------------------------------------------------------
569 FUNCTION Chg_Order_Required(
570                             p_inventory_item_id IN NUMBER
571                            ,p_organization_id IN NUMBER
572                            ,p_object_id IN NUMBER
573                            ,p_attr_grp_id  IN NUMBER
574                            ,p_data_level_1 IN VARCHAR2
575                           )
576 RETURN VARCHAR2
577 IS
578 
579 p_chg_ord_req VARCHAR2(1);
580 l_policy_check_sql       VARCHAR2(32767);
581 
582 BEGIN
583 l_policy_check_sql:= 'SELECT ''Y'''||
584 '          FROM MTL_SYSTEM_ITEMS_B      MSI,'||
585 '          MTL_ITEM_REVISIONS_B    MIR,'||
586 '          ENG_CHANGE_POLICIES_V   ECP'||
587 '          WHERE '||
588 '          MSI.INVENTORY_ITEM_ID = :1'||
589 '          AND MSI.ORGANIZATION_ID = :2'||
590 '          AND MSI.INVENTORY_ITEM_ID = MIR.INVENTORY_ITEM_ID'||
591 '          AND MSI.ORGANIZATION_ID = MIR.ORGANIZATION_ID '||
592 '          AND MSI.LIFECYCLE_ID IS NOT NULL'||
593 '          AND (MSI.APPROVAL_STATUS IS NULL OR MSI.APPROVAL_STATUS =''A'') '||
594 '          AND ECP.POLICY_OBJECT_PK1_VALUE = '||
595 '                    (SELECT TO_CHAR(ic.item_catalog_group_id) '||
596 '                       FROM mtl_item_catalog_groups_b ic'||
597 '                       WHERE  EXISTS '||
598 '                          ( SELECT olc.object_classification_code CatalogId '||
599 '                            FROM  ego_obj_type_lifecycles olc '||
600 '                            WHERE olc.object_id = :3 '||
601 '                            AND olc.lifecycle_id = MSI.lifecycle_id '||
602 '                            AND olc.object_classification_code = ic.item_catalog_group_id  '||
603 '                          ) '||
604 '                      AND ROWNUM = 1 '||
605 '                      CONNECT BY PRIOR parent_catalog_group_id = item_catalog_group_id '||
606 '                      START WITH item_catalog_group_id = MSI.item_catalog_group_id '||
607 '                      )'||
608 '          AND ECP.ATTRIBUTE_OBJECT_NAME = ''EGO_CATALOG_GROUP'' '||
609 '          AND ECP.ATTRIBUTE_CODE = ''ATTRIBUTE_GROUP'' '||
610 '          AND ECP.POLICY_OBJECT_NAME =''CATALOG_LIFECYCLE_PHASE'' '||
611 '          AND ECP.POLICY_CHAR_VALUE IS NOT NULL '||
612 '          AND ECP.POLICY_CHAR_VALUE IN (''CHANGE_ORDER_REQUIRED'' ,''NOT_ALLOWED'')'||
613 '          AND ECP.ATTRIBUTE_NUMBER_VALUE =:4 '||
614 '          AND ( '||
615 '                   ( (:5 IS NOT NULL '||
616 '                     AND MIR.REVISION_ID = :6)'||
617 '                     AND ECP.POLICY_OBJECT_PK2_VALUE = NVL(MIR.LIFECYCLE_ID, MSI.LIFECYCLE_ID) '||
618 '                     AND ECP.POLICY_OBJECT_PK3_VALUE = NVL(MIR.CURRENT_PHASE_ID, MSI.CURRENT_PHASE_ID) '||
619 '                    )  '||
620 '                    OR '||
621 '                    ( ECP.POLICY_OBJECT_PK2_VALUE = MSI.LIFECYCLE_ID '||
622 '                     AND ECP.POLICY_OBJECT_PK3_VALUE = MSI.CURRENT_PHASE_ID '||
623 '                    ))';
624 
625     BEGIN
626 
627       EXECUTE IMMEDIATE l_policy_check_sql INTO p_chg_ord_req USING p_inventory_item_id,
628                                                                     p_organization_id,
629                                                                     p_object_id,
630                                                                     p_attr_grp_id,
631                                                                     p_data_level_1,
632                                                                     p_data_level_1;
633 
634      RETURN p_chg_ord_req;
635 EXCEPTION
636       WHEN NO_DATA_FOUND THEN
637          RETURN 'N';
638       WHEN OTHERS THEN
639         RETURN NULL;
640     END;
641 END  Chg_Order_Required;
642 
643 -- -----------------------------------------------------------------------------------
644 --  API Name:       Remove_Rows_After_Policy_Check
645 --
646 --  Description:
647 --    Updates the error table and deletes the corresponding rows from the
648 --    EGO_USER_ATTR_ROW_TABLE if a change order is required or update is not allowed
649 --    for a  given attribute
650 -- ------------------------------------------------------------------------------------
651   FUNCTION Remove_Rows_After_Policy_Check (
652             p_inventory_item_id     IN NUMBER
653            ,p_organization_id       IN NUMBER
654            ,p_attributes_row_table  IN    EGO_USER_ATTR_ROW_TABLE
655            ,p_entity_id             IN   NUMBER     DEFAULT NULL
656            ,p_entity_index          IN   NUMBER     DEFAULT NULL
657            ,p_entity_code           IN   VARCHAR2   DEFAULT NULL
658            ,x_return_status         OUT NOCOPY VARCHAR2
659 ) RETURN EGO_USER_ATTR_ROW_TABLE IS
660 
661 l_object_id NUMBER;
662 l_is_required VARCHAR2(1);
663 l_token_table     ERROR_HANDLER.Token_Tbl_Type;
664 l_attr_grp_id NUMBER;
665 l_rev_id VARCHAR2(150);
666 l_delete_sql VARCHAR2(200);
667 l_attr_data_table_index NUMBER;
668 
669 l_attributes_row_table   EGO_USER_ATTR_ROW_TABLE;
670 l_current_data_element EGO_USER_ATTR_ROW_OBJ;
671 
672 l_current_category_name  MTL_ITEM_CATALOG_GROUPS_KFV.concatenated_segments%TYPE;
673 l_current_life_cycle   PA_EGO_LIFECYCLES_V.NAME%TYPE;
674 l_current_phase_name     PA_EGO_PHASES_V.NAME%TYPE;
675 l_policy_cat_id NUMBER;
676 l_catalog_category_names_table LOCAL_MEDIUM_VARCHAR_TABLE;
677 l_item_number MTL_SYSTEM_ITEMS_B.SEGMENT1%TYPE;
678 l_row_identifier NUMBER;
679 i NUMBER :=0;
680 BEGIN
681     l_attributes_row_table := EGO_USER_ATTR_ROW_TABLE();
682     l_attr_data_table_index := p_attributes_row_table.FIRST;
683     SELECT OBJECT_ID into l_object_id FROM  fnd_objects WHERE obj_name ='EGO_ITEM';
684 
685     LOOP
686           l_current_data_element := p_attributes_row_table(l_attr_data_table_index);
687           l_rev_id := l_current_data_element.DATA_LEVEL_1;
688           l_attr_grp_id := l_current_data_element.ATTR_GROUP_ID;
689           l_row_identifier :=l_current_data_element.ROW_IDENTIFIER;
690 
691           l_is_required:=Chg_Order_Required(
692                                             p_inventory_item_id =>p_inventory_item_id
693                                            ,p_organization_id =>p_organization_id
694                                            ,p_object_id =>l_object_id
695                                            ,p_attr_grp_id =>l_attr_grp_id
696                                            ,p_data_level_1 =>l_rev_id
697                                           );
698 
699         IF (l_is_required='Y') THEN
700 
701              l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_NAME';
702              l_token_table(1).TOKEN_VALUE := l_current_data_element.ATTR_GROUP_NAME;
703 
704              SELECT segment1 INTO l_item_number FROM MTL_SYSTEM_ITEMS_B  WHERE inventory_item_id=p_inventory_item_id;
705 
706 
707              l_token_table(2).TOKEN_NAME := 'ITEM_NUMBER';
708              l_token_table(2).TOKEN_VALUE := l_item_number;
709 
710             SELECT PEP.NAME
711               INTO l_current_life_cycle
712               FROM MTL_SYSTEM_ITEMS_B      MSI
713                   ,PA_EGO_LIFECYCLES_V     PEP
714              WHERE MSI.INVENTORY_ITEM_ID =p_inventory_item_id
715                AND MSI.ORGANIZATION_ID = p_organization_id
716               AND MSI.LIFECYCLE_ID = PEP.PROJ_ELEMENT_ID;
717 
718                l_token_table(3).TOKEN_NAME := 'LIFE_CYCLE';
719                l_token_table(3).TOKEN_VALUE := l_current_life_cycle;
720 
721               SELECT PEP.NAME
722                 INTO l_current_phase_name
723                 FROM MTL_SYSTEM_ITEMS_B      MSI
724                     ,PA_EGO_PHASES_V         PEP
725                WHERE MSI.INVENTORY_ITEM_ID = p_inventory_item_id
726                  AND MSI.ORGANIZATION_ID = p_organization_id
727                  AND MSI.CURRENT_PHASE_ID = PEP.PROJ_ELEMENT_ID;
728 
729                  l_token_table(4).TOKEN_NAME := 'PHASE';
730                  l_token_table(4).TOKEN_VALUE := l_current_phase_name;
731 
732                 SELECT item_catalog_group_id
733                 INTO l_policy_cat_id
734                 FROM (SELECT item_catalog_group_id
735                         FROM mtl_item_catalog_groups_b ic
736                        WHERE EXISTS
737                               ( SELECT olc.object_classification_code CatalogId
738                                   FROM  ego_obj_type_lifecycles olc, mtl_system_items_b MSI
739                                  WHERE olc.object_id = l_object_id
740                                    AND olc.lifecycle_id = MSI.lifecycle_id
741                                    AND MSI.inventory_item_id = p_inventory_item_id
742                                    AND MSI.organization_id = p_organization_id
743                                    AND olc.object_classification_code = ic.item_catalog_group_id
744                                 )
745                          CONNECT BY PRIOR parent_catalog_group_id = item_catalog_group_id
746                          START WITH item_catalog_group_id
747                          =(SELECT item_catalog_group_id
748                                  FROM MTL_SYSTEM_ITEMS_B
749                                  WHERE inventory_item_id=p_inventory_item_id
750                            )
751                        ) CAT_HIER
752                 WHERE ROWNUM = 1;
753 
754                   IF (l_catalog_category_names_table.EXISTS(l_policy_cat_id)) THEN
755                     l_current_category_name := l_catalog_category_names_table(l_policy_cat_id);
756                   ELSE
757                     SELECT concatenated_segments
758                       INTO l_current_category_name
759                       FROM MTL_ITEM_CATALOG_GROUPS_KFV
760                      WHERE ITEM_CATALOG_GROUP_ID = l_policy_cat_id;
761                     l_catalog_category_names_table(l_policy_cat_id) := l_current_category_name;
762                   END IF;
763 
764                    l_token_table(5).TOKEN_NAME := 'CATALOG_CATEGORY_NAME';
765                    l_token_table(5).TOKEN_VALUE := l_current_category_name;
766 
767                     ERROR_HANDLER.Add_Error_Message(
768                     p_message_name                  => 'EGO_EF_BL_ITM_NOT_ALLOW_ERR'
769                    ,p_application_id                => 'EGO'
770                    ,p_token_tbl                     => l_token_table
771                    ,p_message_type                  => FND_API.G_RET_STS_ERROR
772                    ,p_row_identifier                =>  l_row_identifier
773                    ,p_entity_id                     => p_entity_id
774                    ,p_entity_index                  => p_entity_index
775                    ,p_entity_code                   => p_entity_code
776                  );
777                  x_return_status:=FND_API.G_RET_STS_ERROR;
778                  l_token_table.DELETE();
779                 --Delete the row from the ROW_TABLE as it is an error case.
780         ELSIF (l_is_required='N') THEN
781                    i:=i+1;
782                   l_attributes_row_table.EXTEND();
783                   l_attributes_row_table(i):=l_current_data_element;
784         END IF;--IF(l_is_required='Y')
785         l_attr_data_table_index := p_attributes_row_table.NEXT(l_attr_data_table_index);
786         IF (l_attr_data_table_index IS NULL) THEN
787            EXIT ;
788         END IF;--IF(l_attr_data_table_index IS NULL)
789       END LOOP;
790       RETURN l_attributes_row_table;
791 EXCEPTION
792   WHEN OTHERS THEN
793       RETURN NULL;
794 END Remove_Rows_After_Policy_Check;
795 
796 
797 --
798 -- Bug 12534846. Added new methods to process the case when
799 -- user updates the ICC.
800 -- sreharih. Fri May 13 16:05:48 PDT 2011
801 --
802 
803 --
804 -- Check whether ICC changed or not.
805 -- The method is called after ICC id is updated
806 -- in MSI table. So we need to check the old ICC
807 -- value from EMSI_ext.
808 --
809 
810 FUNCTION icc_changed (p_inventory_item_id IN NUMBER,
811                       p_new_icc_id        IN NUMBER) RETURN BOOLEAN IS
812 
813  l_temp ego_mtl_sy_items_ext_b.item_catalog_group_id%TYPE;
814 
815  CURSOR c IS
816  SELECT ems.item_catalog_group_id
817    FROM ego_mtl_sy_items_ext_b ems
818   WHERE ems.inventory_item_id = p_inventory_item_id
819     AND ems.item_catalog_group_id <> p_new_icc_id
820     AND rownum = 1;
821 
822 BEGIN
823 
824  code_debug('icc_changed : ' || ' Entering with params ' ||
825                                  ' inventory_item_id = ' ||  p_inventory_item_id ||
826                                  ' new_icc_id        = ' ||  p_new_icc_id
827            );
828 
829  IF p_new_icc_id IS NOT NULL AND p_new_icc_id <> G_MISS_NUM THEN
830 
831    OPEN c;
832    FETCH c INTO l_temp;
833    CLOSE c;
834 
835    code_debug('icc_changed : ' || ' l_temp = ' || l_temp);
836 
837    IF l_temp <> -1 AND l_temp IS NOT NULL  THEN -- do we need -1 check
838         code_debug('icc_changed : ' || ' Returning true');
839         RETURN true;
840    END IF;
841 
842  END IF;
843 
844  code_debug('icc_changed : ' || ' Returning false');
845  RETURN false;
846 
847 END icc_changed;
848 
849 
850 --
851 -- Delete old icc attributes.
852 -- Just moved logic from process_items to this method.
853 --
854 PROCEDURE delete_old_icc_attrs (p_inventory_item_id IN NUMBER,
855                                  p_new_icc_id        IN NUMBER)  IS
856 
857 
858 BEGIN
859 
860   code_debug('delete_old_icc_attrs : ' || ' Entering method ');
861 
862         DELETE
863         FROM    ego_mtl_sy_items_ext_tl
864         WHERE   inventory_item_id  = p_inventory_item_id
865         AND attr_group_id NOT IN
866             (SELECT ATTR_GROUP_ID
867             FROM    EGO_OBJ_ATTR_GRP_ASSOCS_V AGV,
868                     FND_OBJECTS FO
869             WHERE   AGV.OBJECT_ID = FO.OBJECT_ID
870             AND AGV.OBJECT_NAME ='EGO_ITEM'
871             AND AGV.CLASSIFICATION_CODE IS NOT NULL
872             AND AGV.CLASSIFICATION_CODE IN
873                  (SELECT TO_CHAR(item_catalog_group_id)
874                  FROM    mtl_item_catalog_groups_b CONNECT BY prior parent_catalog_group_id = item_catalog_group_id
875                  START WITH item_catalog_group_id   = p_new_icc_id
876                  )
877             UNION ALL
878             SELECT  ATTR_GROUP_ID
879             FROM    EGO_ATTR_GROUPS_V
880             WHERE   APPLICATION_ID   = 431
881             AND ATTR_GROUP_TYPE  = 'EGO_ITEMMGMT_GROUP'
882             AND (ATTR_GROUP_NAME = 'ItemDetailDesc'
883             OR ATTR_GROUP_NAME  = 'ItemDetailImage')
884             );
885 
886   code_debug('delete_old_icc_attrs : ' || ' Deleted ' || SQL%ROWCOUNT || ' from TL');
887 
888        DELETE
889         FROM    ego_mtl_sy_items_ext_b
890         WHERE   inventory_item_id  = p_inventory_item_id
891         AND attr_group_id NOT IN
892             (SELECT ATTR_GROUP_ID
893             FROM    EGO_OBJ_ATTR_GRP_ASSOCS_V AGV,
894                      FND_OBJECTS FO
895             WHERE   AGV.OBJECT_ID = FO.OBJECT_ID
896             AND AGV.OBJECT_NAME ='EGO_ITEM'
897             AND AGV.CLASSIFICATION_CODE IS NOT NULL
898             AND AGV.CLASSIFICATION_CODE IN
899                  (SELECT TO_CHAR(item_catalog_group_id)
900                  FROM    mtl_item_catalog_groups_b CONNECT BY prior parent_catalog_group_id = item_catalog_group_id
901                  START WITH item_catalog_group_id   = p_new_icc_id
902                  )
903             UNION ALL
904             SELECT  ATTR_GROUP_ID
905             FROM    EGO_ATTR_GROUPS_V
906             WHERE   APPLICATION_ID   = 431
907             AND ATTR_GROUP_TYPE  = 'EGO_ITEMMGMT_GROUP'
908             AND (ATTR_GROUP_NAME = 'ItemDetailDesc'
909             OR ATTR_GROUP_NAME  = 'ItemDetailImage')
910             );
911 
912  code_debug('delete_old_icc_attrs : ' || ' Deleted ' || SQL%ROWCOUNT || ' from B');
913 
914 END delete_old_icc_attrs;
915 
916 --
917 -- update icc id to other common attrs
918 -- Just moved the logic from process_items to this method.
919 --
920 PROCEDURE update_common_attrs (p_inventory_item_id IN NUMBER,
921                                     p_new_icc_id        IN NUMBER,
922                                     p_commit            IN VARCHAR2,
923                                     x_return_status     OUT NOCOPY VARCHAR2,
924                                     x_msg_count         OUT NOCOPY NUMBER) IS
925 
926 
927    l_init_msg_list      VARCHAR2(1)  := NULL;
928 
929 BEGIN
930  code_debug('update_common_attrs : ' || ' Entering method with params p_commit = ' || p_commit);
931 
932        EGO_ITEM_PUB.Update_Item_Attr_Ext(
933                           P_API_VERSION           => 1.0,
934                           P_INIT_MSG_LIST         => l_init_msg_list,
935                           P_COMMIT                => p_commit,
936                           P_INVENTORY_ITEM_ID     => p_inventory_item_id,
937                           P_ITEM_CATALOG_GROUP_ID => p_new_icc_id,
938                           x_return_status         => x_return_status,
939                           X_MSG_COUNT             => x_msg_count);
940 
941  code_debug('update_common_attrs : ' || ' Return status for ego_item_pub.update-item_attr_ext ' || x_return_status
942                                                                                  || ' count = ' || x_msg_count);
943 
944 END update_common_attrs;
945 
946 
947 --
948 -- Method to process update of ICC id.
949 --
950 PROCEDURE process_icc_change (p_inventory_item_id IN NUMBER,
951                               p_new_icc_id        IN NUMBER,
952                               p_commit            IN VARCHAR2,
953                               x_return_status     OUT NOCOPY VARCHAR2,
954                               x_msg_count         OUT NOCOPY NUMBER) IS
955 
956 
957 BEGIN
958 
959    code_debug('process_icc_change : ' ||  ' Entering with params ' ||
960                                           ' inventory_item_id = '  ||  p_inventory_item_id ||
961                                           ' new_icc_id        = '  ||  p_new_icc_id ||
962                                           ' commit            = '  ||  p_commit
963              );
964 
965 
966     IF icc_changed( p_inventory_item_id => p_inventory_item_id,
967                     p_new_icc_id        => p_new_icc_id) THEN
968 
969        code_debug('process_icc_change : ' ||  ' Icc changed');
970 
971         delete_old_icc_attrs(p_inventory_item_id => p_inventory_item_id,
972                              p_new_icc_id        => p_new_icc_id);
973 
974        code_debug('process_icc_change : ' ||  ' deleted old attrs ... ');
975 
976         update_common_attrs(p_inventory_item_id => p_inventory_item_id,
977                             p_new_icc_id        => p_new_icc_id,
978                             p_commit            => p_commit,
979                             x_return_status     => x_return_status,
980                             x_msg_count         => x_msg_count);
981 
982       code_debug('process_icc_change : ' ||  ' udpated common attrs ... ');
983 
984     END IF;
985 
986 
987 END process_icc_change;
988 
989 
990 -- =============================================================================
991 --                                  Procedures
992 -- =============================================================================
993 
994 -- -----------------------------------------------------------------------------
995 --  API Name:       Process_Items
996 -- -----------------------------------------------------------------------------
997 
998 PROCEDURE Process_Items
999 (
1000    p_commit         IN      VARCHAR2      DEFAULT  FND_API.g_FALSE
1001 ,  x_return_status      OUT NOCOPY  VARCHAR2
1002 ,  x_msg_count          OUT NOCOPY  NUMBER
1003 )
1004 IS
1005    CURSOR c_get_org_code(cp_org_id NUMBER) IS
1006       SELECT  organization_code
1007              ,master_organization_id
1008       FROM    mtl_parameters
1009       WHERE   organization_id = cp_org_id;
1010 
1011    l_api_name       CONSTANT    VARCHAR2(30)  :=  'Process_Items';
1012    l_return_status      VARCHAR2(1)  :=  G_MISS_CHAR;
1013    l_msg_count          NUMBER       :=  0;
1014    l_cnt                NUMBER       :=  0;
1015    l_error_code         NUMBER;
1016    --R12 C
1017    l_return_err         VARCHAR2(1000);
1018    l_batch_id           NUMBER;
1019    G_Item_Rec           EGO_Item_PUB.Item_Rec_Type;
1020    l_error_text   VARCHAR2(4000);
1021 
1022 
1023 ----------------------------------------------------------------------------
1024 -- Business Event For Implicit Revision/Category Assignments
1025 ----------------------------------------------------------------------------
1026   CURSOR  DEFAULT_CAT_ASSIGN_CREATE ( CP_ITEM_ID NUMBER
1027              ,CP_ORG_ID  NUMBER ) IS
1028   SELECT  S.CATEGORY_SET_ID,
1029     S.CATEGORY_ID
1030   FROM    MTL_ITEM_CATEGORIES S
1031   WHERE   S.INVENTORY_ITEM_ID   = CP_ITEM_ID
1032   AND     S.ORGANIZATION_ID     = CP_ORG_ID
1033     AND EXISTS
1034        (SELECT 'X'
1035         FROM    MTL_DEFAULT_CATEGORY_SETS D
1036         WHERE   D.CATEGORY_SET_ID         = S.CATEGORY_SET_ID
1037           AND (D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.INVENTORY_ITEM_FLAG, 'Y', 1, 0 )
1038       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.PURCHASING_ITEM_FLAG, 'Y', 2, 0 )
1039       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.INTERNAL_ORDER_FLAG, 'Y', 2, 0 )
1040       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.MRP_PLANNING_CODE, 6, 0, 3 )
1041       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.SERVICEABLE_PRODUCT_FLAG, 'Y', 4, 0 )
1042       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.COSTING_ENABLED_FLAG, 'Y', 5, 0 )
1043       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.ENG_ITEM_FLAG, 'Y', 6, 0 )
1044       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.CUSTOMER_ORDER_FLAG, 'Y', 7, 0 )
1045       OR D.FUNCTIONAL_AREA_ID   = DECODE( NVL(G_Item_Rec.EAM_ITEM_TYPE, 0), 0, 0, 9 )
1046       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.CONTRACT_ITEM_TYPE_CODE, 'SERVICE' , 10, 'WARRANTY' , 10, 'SUBSCRIPTION' , 10, 'USAGE' , 10, 0 )
1047       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.CONTRACT_ITEM_TYPE_CODE, 'SERVICE' , 4, 'WARRANTY' , 4, 0 )
1048       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.CUSTOMER_ORDER_FLAG, 'Y', 11, 0 )
1049       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.INTERNAL_ORDER_FLAG, 'Y', 11, 0 )));
1050  -------------------------------------------------------------------------------
1051   CURSOR  DEFAULT_CAT_ASSIGN_UPDATE ( CP_ITEM_ID NUMBER
1052              ,CP_ORG_ID  NUMBER ) IS
1053   SELECT  S.CATEGORY_SET_ID,
1054     S.CATEGORY_ID
1055   FROM    MTL_ITEM_CATEGORIES S,
1056     MTL_CATEGORY_SETS_B D
1057   WHERE   S.INVENTORY_ITEM_ID   = CP_ITEM_ID
1058     AND S.CATEGORY_SET_ID = D.CATEGORY_SET_ID
1059     AND S.ORGANIZATION_ID = CP_ORG_ID
1060     AND (D.CONTROL_LEVEL  = 1
1061     OR EXISTS
1062     (SELECT 'X'
1063     FROM    MTL_DEFAULT_CATEGORY_SETS D
1064     WHERE   D.CATEGORY_SET_ID         = S.CATEGORY_SET_ID
1065       AND (D.FUNCTIONAL_AREA_ID = DECODE( G_Item_Rec.INVENTORY_ITEM_FLAG, 'Y', 1, 0 )
1066       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.PURCHASING_ITEM_FLAG, 'Y', 2, 0 )
1067       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.INTERNAL_ORDER_FLAG, 'Y', 2, 0 )
1068       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.MRP_PLANNING_CODE, 6, 0, 3 )
1069       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.SERVICEABLE_PRODUCT_FLAG, 'Y', 4, 0 )
1070       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.COSTING_ENABLED_FLAG, 'Y', 5, 0 )
1071       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.ENG_ITEM_FLAG, 'Y', 6, 0 )
1072       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.CUSTOMER_ORDER_FLAG, 'Y', 7, 0 )
1073       OR D.FUNCTIONAL_AREA_ID   = DECODE( NVL(G_Item_Rec.EAM_ITEM_TYPE, 0), 0, 0, 9 )
1074       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.CONTRACT_ITEM_TYPE_CODE, 'SERVICE' , 10, 'WARRANTY' , 10, 'SUBSCRIPTION' , 10, 'USAGE' , 10, 0 )
1075       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.CONTRACT_ITEM_TYPE_CODE, 'SERVICE' , 4, 'WARRANTY' , 4, 0 )
1076       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.CUSTOMER_ORDER_FLAG, 'Y', 11, 0 )
1077       OR D.FUNCTIONAL_AREA_ID   = DECODE( G_Item_Rec.INTERNAL_ORDER_FLAG, 'Y', 11, 0 ))
1078     )) ;
1079   -----------------------------------------------------------------------------
1080       CURSOR  REV_RECORDS_CREATE ( CP_ITEM_ID NUMBER
1081                                   ,CP_ORG_ID  NUMBER ) IS
1082    SELECT REVISION_ID
1083      FROM MTL_ITEM_REVISIONS_B
1084     WHERE INVENTORY_ITEM_ID  = CP_ITEM_ID
1085       AND ORGANIZATION_ID    = CP_ORG_ID ;
1086  -----------------------------------------------------------------------------
1087    l_Item_rec_in        INV_ITEM_GRP.Item_Rec_Type;
1088    l_revision_rec       INV_ITEM_GRP.Item_Revision_Rec_Type;
1089    l_rev_index_failure  BOOLEAN := FALSE;
1090 
1091    l_Item_rec_out       INV_ITEM_GRP.Item_Rec_Type;
1092 
1093    l_Template_Id        NUMBER;
1094    l_Template_Name      VARCHAR2(30);
1095    l_Error_tbl          INV_ITEM_GRP.Error_Tbl_Type;
1096    --------------------------------------------------------------------------
1097    -- Business Event enhancement
1098    --------------------------------------------------------------------------
1099    l_event_return_status VARCHAR2(1) ;
1100    l_msg_data            VARCHAR2(2000);
1101    l_org_code_rec        c_get_org_code%ROWTYPE;
1102    l_item_desc          mtl_system_items_kfv.DESCRIPTION%TYPE;
1103    l_item_number        mtl_system_items_kfv.CONCATENATED_SEGMENTS%TYPE;
1104    ----------------------------------------------------------------
1105    l_revision_id_out     MTL_ITEM_REVISIONS_B.REVISION_ID%TYPE;
1106    l_cat_tab_index       NUMBER := G_MISS_NUM ;
1107    l_cat_match           VARCHAR2(1) DEFAULT  FND_API.G_FALSE ;
1108    --Bug: 4881908
1109    l_process_control     VARCHAR2(2000) := INV_EGO_REVISION_VALIDATE.Get_Process_Control;
1110    ---------------------------------------------------------------------------
1111    TYPE CATEGORY_ASSIGN_REC IS RECORD (
1112      CATEGORY_SET_ID   NUMBER := G_MISS_NUM,
1113      CATEGORY_ID       NUMBER := G_MISS_NUM,
1114      INVENTORY_ITEM_ID NUMBER := G_MISS_NUM,
1115      ORGANIZATION_ID   NUMBER := G_MISS_NUM );
1116    TYPE CATEGORY_ASSIGN_TAB IS TABLE OF CATEGORY_ASSIGN_REC INDEX BY BINARY_INTEGER;
1117 
1118    l_cat_assign_rec_table_bef  CATEGORY_ASSIGN_TAB;
1119    l_cat_assign_rec_table_aft  CATEGORY_ASSIGN_TAB;
1120    l_wf_org_code               VARCHAR2(3);
1121 
1122    -- Bug 9852661
1123    l_attributes_row_table             EGO_USER_ATTR_ROW_TABLE := EGO_USER_ATTR_ROW_TABLE();
1124    l_attributes_data_table            EGO_USER_ATTR_DATA_TABLE := EGO_USER_ATTR_DATA_TABLE() ;
1125    l_attr_row_count   NUMBER;
1126    l_attr_data_count  NUMBER;
1127    -- Bug 9852661
1128   BEGIN
1129 
1130    x_return_status  :=  G_RET_STS_SUCCESS;
1131 
1132    -----------------------------------------------------------------------------
1133    -- Loop through item records in the global table.
1134    -----------------------------------------------------------------------------
1135 
1136    G_Item_indx     :=  G_Item_Tbl.FIRST;
1137 
1138  WHILE G_Item_indx <= G_Item_Tbl.LAST LOOP
1139 
1140    -- Clear the Item GRP API message table before processing an item
1141    l_Error_tbl.DELETE;
1142 
1143    G_Item_Rec  :=  G_Item_Tbl(G_Item_indx);
1144 
1145     -- Copy item from
1146    l_Template_Id                :=  G_Item_Rec.Template_Id;
1147    l_Template_Name              :=  G_Item_Rec.Template_Name;
1148 
1149    -- Item identifier
1150    l_Item_rec_in.INVENTORY_ITEM_ID      :=  G_Item_Rec.Inventory_Item_Id;
1151    l_Item_rec_in.ITEM_NUMBER            :=  G_Item_Rec.Item_Number;
1152    l_Item_rec_in.SEGMENT1       :=  G_Item_Rec.Segment1;
1153    l_Item_rec_in.SEGMENT2       :=  G_Item_Rec.Segment2;
1154    l_Item_rec_in.SEGMENT3       :=  G_Item_Rec.Segment3;
1155    l_Item_rec_in.SEGMENT4       :=  G_Item_Rec.Segment4;
1156    l_Item_rec_in.SEGMENT5       :=  G_Item_Rec.Segment5;
1157    l_Item_rec_in.SEGMENT6       :=  G_Item_Rec.Segment6;
1158    l_Item_rec_in.SEGMENT7       :=  G_Item_Rec.Segment7;
1159    l_Item_rec_in.SEGMENT8       :=  G_Item_Rec.Segment8;
1160    l_Item_rec_in.SEGMENT9       :=  G_Item_Rec.Segment9;
1161    l_Item_rec_in.SEGMENT10      :=  G_Item_Rec.Segment10;
1162    l_Item_rec_in.SEGMENT11      :=  G_Item_Rec.Segment11;
1163    l_Item_rec_in.SEGMENT12      :=  G_Item_Rec.Segment12;
1164    l_Item_rec_in.SEGMENT13      :=  G_Item_Rec.Segment13;
1165    l_Item_rec_in.SEGMENT14      :=  G_Item_Rec.Segment14;
1166    l_Item_rec_in.SEGMENT15      :=  G_Item_Rec.Segment15;
1167    l_Item_rec_in.SEGMENT16      :=  G_Item_Rec.Segment16;
1168    l_Item_rec_in.SEGMENT17      :=  G_Item_Rec.Segment17;
1169    l_Item_rec_in.SEGMENT18      :=  G_Item_Rec.Segment18;
1170    l_Item_rec_in.SEGMENT19      :=  G_Item_Rec.Segment19;
1171    l_Item_rec_in.SEGMENT20      :=  G_Item_Rec.Segment20;
1172    l_Item_rec_in.SUMMARY_FLAG           :=  G_Item_Rec.Summary_Flag;
1173    l_Item_rec_in.ENABLED_FLAG           :=  G_Item_Rec.Enabled_Flag;
1174    l_Item_rec_in.START_DATE_ACTIVE      :=  G_Item_Rec.Start_Date_Active;
1175    l_Item_rec_in.END_DATE_ACTIVE        :=  G_Item_Rec.End_Date_Active;
1176 
1177    -- Organization
1178    l_Item_rec_in.ORGANIZATION_ID        :=  G_Item_Rec.Organization_Id;
1179    l_Item_rec_in.ORGANIZATION_CODE      :=  G_Item_Rec.Organization_Code;
1180 
1181    -- Item catalog group (user item type)
1182    l_Item_rec_in.ITEM_CATALOG_GROUP_ID      :=  G_Item_Rec.Item_Catalog_Group_Id;
1183    l_Item_rec_in.CATALOG_STATUS_FLAG        :=  G_Item_Rec.Catalog_Status_Flag;
1184 
1185    -- Lifecycle
1186    l_Item_rec_in.LIFECYCLE_ID           :=  G_Item_Rec.Lifecycle_Id;
1187    l_Item_rec_in.CURRENT_PHASE_ID       :=  G_Item_Rec.Current_Phase_Id;
1188 
1189    -- Main attributes
1190    l_Item_rec_in.DESCRIPTION            :=  G_Item_Rec.Description;
1191    l_Item_rec_in.LONG_DESCRIPTION       :=  G_Item_Rec.Long_Description;
1192    l_Item_rec_in.PRIMARY_UOM_CODE       :=  G_Item_Rec.Primary_Uom_Code;
1193 
1194    --PRIMARY_UNIT_OF_MEASURE
1195    l_Item_rec_in.ALLOWED_UNITS_LOOKUP_CODE  :=  G_Item_Rec.ALLOWED_UNITS_LOOKUP_CODE;
1196    l_Item_rec_in.INVENTORY_ITEM_STATUS_CODE :=  G_Item_Rec.Inventory_Item_Status_Code;
1197 
1198    l_Item_rec_in.DUAL_UOM_CONTROL           :=  G_Item_Rec.DUAL_UOM_CONTROL;
1199    l_Item_rec_in.SECONDARY_UOM_CODE         :=  G_Item_Rec.SECONDARY_UOM_CODE;
1200    l_Item_rec_in.DUAL_UOM_DEVIATION_HIGH    :=  G_Item_Rec.DUAL_UOM_DEVIATION_HIGH;
1201    l_Item_rec_in.DUAL_UOM_DEVIATION_LOW     :=  G_Item_Rec.DUAL_UOM_DEVIATION_LOW;
1202    l_Item_rec_in.ITEM_TYPE                  :=  G_Item_Rec.ITEM_TYPE;
1203 
1204    -- Inventory
1205    l_Item_rec_in.INVENTORY_ITEM_FLAG            :=  G_Item_Rec.INVENTORY_ITEM_FLAG;
1206    l_Item_rec_in.STOCK_ENABLED_FLAG             :=  G_Item_Rec.STOCK_ENABLED_FLAG;
1207    l_Item_rec_in.MTL_TRANSACTIONS_ENABLED_FLAG  :=  G_Item_Rec.MTL_TRANSACTIONS_ENABLED_FLAG;
1208    l_Item_rec_in.REVISION_QTY_CONTROL_CODE      :=  G_Item_Rec.REVISION_QTY_CONTROL_CODE;
1209    l_Item_rec_in.LOT_CONTROL_CODE               :=  G_Item_Rec.LOT_CONTROL_CODE;
1210    l_Item_rec_in.AUTO_LOT_ALPHA_PREFIX          :=  G_Item_Rec.AUTO_LOT_ALPHA_PREFIX;
1211    l_Item_rec_in.START_AUTO_LOT_NUMBER          :=  G_Item_Rec.START_AUTO_LOT_NUMBER;
1212    l_Item_rec_in.SERIAL_NUMBER_CONTROL_CODE     :=  G_Item_Rec.SERIAL_NUMBER_CONTROL_CODE;
1213    l_Item_rec_in.AUTO_SERIAL_ALPHA_PREFIX       :=  G_Item_Rec.AUTO_SERIAL_ALPHA_PREFIX;
1214    l_Item_rec_in.START_AUTO_SERIAL_NUMBER       :=  G_Item_Rec.START_AUTO_SERIAL_NUMBER;
1215    l_Item_rec_in.SHELF_LIFE_CODE                :=  G_Item_Rec.SHELF_LIFE_CODE;
1216    l_Item_rec_in.SHELF_LIFE_DAYS                :=  G_Item_Rec.SHELF_LIFE_DAYS;
1217    l_Item_rec_in.RESTRICT_SUBINVENTORIES_CODE   :=  G_Item_Rec.RESTRICT_SUBINVENTORIES_CODE;
1218    l_Item_rec_in.LOCATION_CONTROL_CODE          :=  G_Item_Rec.LOCATION_CONTROL_CODE;
1219    l_Item_rec_in.RESTRICT_LOCATORS_CODE         :=  G_Item_Rec.RESTRICT_LOCATORS_CODE;
1220    l_Item_rec_in.RESERVABLE_TYPE                :=  G_Item_Rec.RESERVABLE_TYPE;
1221    l_Item_rec_in.CYCLE_COUNT_ENABLED_FLAG       :=  G_Item_Rec.CYCLE_COUNT_ENABLED_FLAG;
1222    l_Item_rec_in.NEGATIVE_MEASUREMENT_ERROR     :=  G_Item_Rec.NEGATIVE_MEASUREMENT_ERROR;
1223    l_Item_rec_in.POSITIVE_MEASUREMENT_ERROR     :=  G_Item_Rec.POSITIVE_MEASUREMENT_ERROR;
1224    l_Item_rec_in.CHECK_SHORTAGES_FLAG           :=  G_Item_Rec.CHECK_SHORTAGES_FLAG;
1225    l_Item_rec_in.LOT_STATUS_ENABLED             :=  G_Item_Rec.LOT_STATUS_ENABLED;
1226    l_Item_rec_in.DEFAULT_LOT_STATUS_ID          :=  G_Item_Rec.DEFAULT_LOT_STATUS_ID;
1227    l_Item_rec_in.SERIAL_STATUS_ENABLED          :=  G_Item_Rec.SERIAL_STATUS_ENABLED;
1228    l_Item_rec_in.DEFAULT_SERIAL_STATUS_ID       :=  G_Item_Rec.DEFAULT_SERIAL_STATUS_ID;
1229    l_Item_rec_in.LOT_SPLIT_ENABLED              :=  G_Item_Rec.LOT_SPLIT_ENABLED;
1230    l_Item_rec_in.LOT_MERGE_ENABLED              :=  G_Item_Rec.LOT_MERGE_ENABLED;
1231    l_Item_rec_in.LOT_TRANSLATE_ENABLED          :=  G_Item_Rec.LOT_TRANSLATE_ENABLED;
1232    l_Item_rec_in.LOT_SUBSTITUTION_ENABLED       :=  G_Item_Rec.LOT_SUBSTITUTION_ENABLED;
1233    l_Item_rec_in.BULK_PICKED_FLAG               :=  G_Item_Rec.BULK_PICKED_FLAG;
1234 
1235    -- Bills of Material
1236    l_Item_rec_in.BOM_ITEM_TYPE          :=  G_Item_Rec.BOM_ITEM_TYPE;
1237    l_Item_rec_in.BOM_ENABLED_FLAG       :=  G_Item_Rec.BOM_ENABLED_FLAG;
1238    l_Item_rec_in.BASE_ITEM_ID           :=  G_Item_Rec.BASE_ITEM_ID;
1239    l_Item_rec_in.ENG_ITEM_FLAG          :=  G_Item_Rec.ENG_ITEM_FLAG;
1240    l_Item_rec_in.ENGINEERING_ITEM_ID    :=  G_Item_Rec.ENGINEERING_ITEM_ID;
1241    l_Item_rec_in.ENGINEERING_ECN_CODE   :=  G_Item_Rec.ENGINEERING_ECN_CODE;
1242    l_Item_rec_in.ENGINEERING_DATE       :=  G_Item_Rec.ENGINEERING_DATE;
1243    l_Item_rec_in.EFFECTIVITY_CONTROL    :=  G_Item_Rec.EFFECTIVITY_CONTROL;
1244    l_Item_rec_in.CONFIG_MODEL_TYPE      :=  G_Item_Rec.CONFIG_MODEL_TYPE;
1245    l_Item_rec_in.PRODUCT_FAMILY_ITEM_ID :=  G_Item_Rec.Product_Family_Item_Id;
1246    l_Item_rec_in.AUTO_CREATED_CONFIG_FLAG :=  G_Item_Rec.auto_created_config_flag;--3911562
1247    -- Costing
1248    l_Item_rec_in.COSTING_ENABLED_FLAG       :=  G_Item_Rec.COSTING_ENABLED_FLAG;
1249    l_Item_rec_in.INVENTORY_ASSET_FLAG       :=  G_Item_Rec.INVENTORY_ASSET_FLAG;
1250    l_Item_rec_in.COST_OF_SALES_ACCOUNT      :=  G_Item_Rec.COST_OF_SALES_ACCOUNT;
1251    l_Item_rec_in.DEFAULT_INCLUDE_IN_ROLLUP_FLAG :=  G_Item_Rec.DEFAULT_INCLUDE_IN_ROLLUP_FLAG;
1252    l_Item_rec_in.STD_LOT_SIZE               :=  G_Item_Rec.STD_LOT_SIZE;
1253 
1254    -- Enterprise Asset Management
1255    l_Item_rec_in.EAM_ITEM_TYPE              :=  G_Item_Rec.EAM_ITEM_TYPE;
1256    l_Item_rec_in.EAM_ACTIVITY_TYPE_CODE     :=  G_Item_Rec.EAM_ACTIVITY_TYPE_CODE;
1257    l_Item_rec_in.EAM_ACTIVITY_CAUSE_CODE    :=  G_Item_Rec.EAM_ACTIVITY_CAUSE_CODE;
1258    l_Item_rec_in.EAM_ACTIVITY_SOURCE_CODE   :=  G_Item_Rec.EAM_ACTIVITY_SOURCE_CODE;
1259    l_Item_rec_in.EAM_ACT_SHUTDOWN_STATUS    :=  G_Item_Rec.EAM_ACT_SHUTDOWN_STATUS;
1260    l_Item_rec_in.EAM_ACT_NOTIFICATION_FLAG  :=  G_Item_Rec.EAM_ACT_NOTIFICATION_FLAG;
1261 
1262    -- Purchasing
1263    l_Item_rec_in.PURCHASING_ITEM_FLAG       :=  G_Item_Rec.PURCHASING_ITEM_FLAG;
1264    l_Item_rec_in.PURCHASING_ENABLED_FLAG    :=  G_Item_Rec.PURCHASING_ENABLED_FLAG;
1265    l_Item_rec_in.BUYER_ID                   :=  G_Item_Rec.BUYER_ID;
1266    l_Item_rec_in.MUST_USE_APPROVED_VENDOR_FLAG  :=  G_Item_Rec.MUST_USE_APPROVED_VENDOR_FLAG;
1267    l_Item_rec_in.PURCHASING_TAX_CODE        :=  G_Item_Rec.PURCHASING_TAX_CODE;
1268    l_Item_rec_in.TAXABLE_FLAG               :=  G_Item_Rec.TAXABLE_FLAG;
1269    l_Item_rec_in.RECEIVE_CLOSE_TOLERANCE    :=  G_Item_Rec.RECEIVE_CLOSE_TOLERANCE;
1270    l_Item_rec_in.ALLOW_ITEM_DESC_UPDATE_FLAG:=  G_Item_Rec.ALLOW_ITEM_DESC_UPDATE_FLAG;
1271    l_Item_rec_in.INSPECTION_REQUIRED_FLAG   :=  G_Item_Rec.INSPECTION_REQUIRED_FLAG;
1272    l_Item_rec_in.RECEIPT_REQUIRED_FLAG      :=  G_Item_Rec.RECEIPT_REQUIRED_FLAG;
1273    l_Item_rec_in.MARKET_PRICE               :=  G_Item_Rec.MARKET_PRICE;
1274    l_Item_rec_in.UN_NUMBER_ID               :=  G_Item_Rec.UN_NUMBER_ID;
1275    l_Item_rec_in.HAZARD_CLASS_ID            :=  G_Item_Rec.HAZARD_CLASS_ID;
1276    l_Item_rec_in.RFQ_REQUIRED_FLAG          :=  G_Item_Rec.RFQ_REQUIRED_FLAG;
1277    l_Item_rec_in.LIST_PRICE_PER_UNIT        :=  G_Item_Rec.LIST_PRICE_PER_UNIT;
1278    l_Item_rec_in.PRICE_TOLERANCE_PERCENT    :=  G_Item_Rec.PRICE_TOLERANCE_PERCENT;
1279    l_Item_rec_in.ASSET_CATEGORY_ID          :=  G_Item_Rec.ASSET_CATEGORY_ID;
1280    l_Item_rec_in.ROUNDING_FACTOR            :=  G_Item_Rec.ROUNDING_FACTOR;
1281    l_Item_rec_in.UNIT_OF_ISSUE              :=  G_Item_Rec.UNIT_OF_ISSUE;
1282    l_Item_rec_in.OUTSIDE_OPERATION_FLAG     :=  G_Item_Rec.OUTSIDE_OPERATION_FLAG;
1283    l_Item_rec_in.OUTSIDE_OPERATION_UOM_TYPE :=  G_Item_Rec.OUTSIDE_OPERATION_UOM_TYPE;
1284    l_Item_rec_in.INVOICE_CLOSE_TOLERANCE    :=  G_Item_Rec.INVOICE_CLOSE_TOLERANCE;
1285    l_Item_rec_in.ENCUMBRANCE_ACCOUNT        :=  G_Item_Rec.ENCUMBRANCE_ACCOUNT;
1286    l_Item_rec_in.EXPENSE_ACCOUNT            :=  G_Item_Rec.EXPENSE_ACCOUNT;
1287    l_Item_rec_in.QTY_RCV_EXCEPTION_CODE     :=  G_Item_Rec.QTY_RCV_EXCEPTION_CODE;
1288    l_Item_rec_in.RECEIVING_ROUTING_ID       :=  G_Item_Rec.RECEIVING_ROUTING_ID;
1289    l_Item_rec_in.QTY_RCV_TOLERANCE          :=  G_Item_Rec.QTY_RCV_TOLERANCE;
1290    l_Item_rec_in.ENFORCE_SHIP_TO_LOCATION_CODE  :=  G_Item_Rec.ENFORCE_SHIP_TO_LOCATION_CODE;
1291    l_Item_rec_in.ALLOW_SUBSTITUTE_RECEIPTS_FLAG :=  G_Item_Rec.ALLOW_SUBSTITUTE_RECEIPTS_FLAG;
1292    l_Item_rec_in.ALLOW_UNORDERED_RECEIPTS_FLAG  :=  G_Item_Rec.ALLOW_UNORDERED_RECEIPTS_FLAG;
1293    l_Item_rec_in.ALLOW_EXPRESS_DELIVERY_FLAG    :=  G_Item_Rec.ALLOW_EXPRESS_DELIVERY_FLAG;
1294    l_Item_rec_in.DAYS_EARLY_RECEIPT_ALLOWED :=  G_Item_Rec.DAYS_EARLY_RECEIPT_ALLOWED;
1295    l_Item_rec_in.DAYS_LATE_RECEIPT_ALLOWED  :=  G_Item_Rec.DAYS_LATE_RECEIPT_ALLOWED;
1296    l_Item_rec_in.RECEIPT_DAYS_EXCEPTION_CODE:=  G_Item_Rec.RECEIPT_DAYS_EXCEPTION_CODE;
1297 
1298    -- Physical
1299    l_Item_rec_in.WEIGHT_UOM_CODE        :=  G_Item_Rec.WEIGHT_UOM_CODE;
1300    l_Item_rec_in.UNIT_WEIGHT            :=  G_Item_Rec.UNIT_WEIGHT;
1301    l_Item_rec_in.VOLUME_UOM_CODE        :=  G_Item_Rec.VOLUME_UOM_CODE;
1302    l_Item_rec_in.UNIT_VOLUME            :=  G_Item_Rec.UNIT_VOLUME;
1303    l_Item_rec_in.CONTAINER_ITEM_FLAG    :=  G_Item_Rec.CONTAINER_ITEM_FLAG;
1304    l_Item_rec_in.VEHICLE_ITEM_FLAG      :=  G_Item_Rec.VEHICLE_ITEM_FLAG;
1305    l_Item_rec_in.MAXIMUM_LOAD_WEIGHT    :=  G_Item_Rec.MAXIMUM_LOAD_WEIGHT;
1306    l_Item_rec_in.MINIMUM_FILL_PERCENT   :=  G_Item_Rec.MINIMUM_FILL_PERCENT;
1307    l_Item_rec_in.INTERNAL_VOLUME        :=  G_Item_Rec.INTERNAL_VOLUME;
1308    l_Item_rec_in.CONTAINER_TYPE_CODE    :=  G_Item_Rec.CONTAINER_TYPE_CODE;
1309    l_Item_rec_in.COLLATERAL_FLAG        :=  G_Item_Rec.COLLATERAL_FLAG;
1310    l_Item_rec_in.EVENT_FLAG             :=  G_Item_Rec.EVENT_FLAG;
1311    l_Item_rec_in.EQUIPMENT_TYPE         :=  G_Item_Rec.EQUIPMENT_TYPE;
1312    l_Item_rec_in.ELECTRONIC_FLAG        :=  G_Item_Rec.ELECTRONIC_FLAG;
1313    l_Item_rec_in.DOWNLOADABLE_FLAG      :=  G_Item_Rec.DOWNLOADABLE_FLAG;
1314    l_Item_rec_in.INDIVISIBLE_FLAG       :=  G_Item_Rec.INDIVISIBLE_FLAG;
1315    l_Item_rec_in.DIMENSION_UOM_CODE     :=  G_Item_Rec.DIMENSION_UOM_CODE;
1316    l_Item_rec_in.UNIT_LENGTH            :=  G_Item_Rec.UNIT_LENGTH;
1317    l_Item_rec_in.UNIT_WIDTH             :=  G_Item_Rec.UNIT_WIDTH;
1318    l_Item_rec_in.UNIT_HEIGHT            :=  G_Item_Rec.UNIT_HEIGHT;
1319    --
1320    l_Item_rec_in.INVENTORY_PLANNING_CODE    :=  G_Item_Rec.INVENTORY_PLANNING_CODE;
1321    l_Item_rec_in.PLANNER_CODE               :=  G_Item_Rec.PLANNER_CODE;
1322    l_Item_rec_in.PLANNING_MAKE_BUY_CODE     :=  G_Item_Rec.PLANNING_MAKE_BUY_CODE;
1323    l_Item_rec_in.MIN_MINMAX_QUANTITY        :=  G_Item_Rec.MIN_MINMAX_QUANTITY;
1324    l_Item_rec_in.MAX_MINMAX_QUANTITY        :=  G_Item_Rec.MAX_MINMAX_QUANTITY;
1325    l_Item_rec_in.SAFETY_STOCK_BUCKET_DAYS   :=  G_Item_Rec.SAFETY_STOCK_BUCKET_DAYS;
1326    l_Item_rec_in.CARRYING_COST              :=  G_Item_Rec.CARRYING_COST;
1327    l_Item_rec_in.ORDER_COST                 :=  G_Item_Rec.ORDER_COST;
1328    l_Item_rec_in.MRP_SAFETY_STOCK_PERCENT   :=  G_Item_Rec.MRP_SAFETY_STOCK_PERCENT;
1329    l_Item_rec_in.MRP_SAFETY_STOCK_CODE      :=  G_Item_Rec.MRP_SAFETY_STOCK_CODE;
1330    l_Item_rec_in.FIXED_ORDER_QUANTITY       :=  G_Item_Rec.FIXED_ORDER_QUANTITY;
1331    l_Item_rec_in.FIXED_DAYS_SUPPLY          :=  G_Item_Rec.FIXED_DAYS_SUPPLY;
1332    l_Item_rec_in.MINIMUM_ORDER_QUANTITY     :=  G_Item_Rec.MINIMUM_ORDER_QUANTITY;
1333    l_Item_rec_in.MAXIMUM_ORDER_QUANTITY     :=  G_Item_Rec.MAXIMUM_ORDER_QUANTITY;
1334    l_Item_rec_in.FIXED_LOT_MULTIPLIER       :=  G_Item_Rec.FIXED_LOT_MULTIPLIER;
1335    l_Item_rec_in.SOURCE_TYPE                :=  G_Item_Rec.SOURCE_TYPE;
1336    l_Item_rec_in.SOURCE_ORGANIZATION_ID     :=  G_Item_Rec.SOURCE_ORGANIZATION_ID;
1337    l_Item_rec_in.SOURCE_SUBINVENTORY        :=  G_Item_Rec.SOURCE_SUBINVENTORY;
1338    l_Item_rec_in.MRP_PLANNING_CODE          :=  G_Item_Rec.MRP_PLANNING_CODE;
1339    l_Item_rec_in.ATO_FORECAST_CONTROL       :=  G_Item_Rec.ATO_FORECAST_CONTROL;
1340    l_Item_rec_in.PLANNING_EXCEPTION_SET     :=  G_Item_Rec.PLANNING_EXCEPTION_SET;
1341    l_Item_rec_in.SHRINKAGE_RATE             :=  G_Item_Rec.SHRINKAGE_RATE;
1342    l_Item_rec_in.END_ASSEMBLY_PEGGING_FLAG  :=  G_Item_Rec.END_ASSEMBLY_PEGGING_FLAG;
1343    l_Item_rec_in.ROUNDING_CONTROL_TYPE      :=  G_Item_Rec.ROUNDING_CONTROL_TYPE;
1344    l_Item_rec_in.PLANNED_INV_POINT_FLAG     :=  G_Item_Rec.PLANNED_INV_POINT_FLAG;
1345    l_Item_rec_in.CREATE_SUPPLY_FLAG         :=  G_Item_Rec.CREATE_SUPPLY_FLAG;
1346    l_Item_rec_in.ACCEPTABLE_EARLY_DAYS      :=  G_Item_Rec.ACCEPTABLE_EARLY_DAYS;
1347    l_Item_rec_in.MRP_CALCULATE_ATP_FLAG     :=  G_Item_Rec.MRP_CALCULATE_ATP_FLAG;
1348    l_Item_rec_in.AUTO_REDUCE_MPS            :=  G_Item_Rec.AUTO_REDUCE_MPS;
1349    l_Item_rec_in.REPETITIVE_PLANNING_FLAG   :=  G_Item_Rec.REPETITIVE_PLANNING_FLAG;
1350    l_Item_rec_in.OVERRUN_PERCENTAGE         :=  G_Item_Rec.OVERRUN_PERCENTAGE;
1351    l_Item_rec_in.ACCEPTABLE_RATE_DECREASE   :=  G_Item_Rec.ACCEPTABLE_RATE_DECREASE;
1352    l_Item_rec_in.ACCEPTABLE_RATE_INCREASE   :=  G_Item_Rec.ACCEPTABLE_RATE_INCREASE;
1353    l_Item_rec_in.PLANNING_TIME_FENCE_CODE   :=  G_Item_Rec.PLANNING_TIME_FENCE_CODE;
1354    l_Item_rec_in.PLANNING_TIME_FENCE_DAYS   :=  G_Item_Rec.PLANNING_TIME_FENCE_DAYS;
1355    l_Item_rec_in.DEMAND_TIME_FENCE_CODE     :=  G_Item_Rec.DEMAND_TIME_FENCE_CODE;
1356    l_Item_rec_in.DEMAND_TIME_FENCE_DAYS     :=  G_Item_Rec.DEMAND_TIME_FENCE_DAYS;
1357    l_Item_rec_in.RELEASE_TIME_FENCE_CODE    :=  G_Item_Rec.RELEASE_TIME_FENCE_CODE;
1358    l_Item_rec_in.RELEASE_TIME_FENCE_DAYS    :=  G_Item_Rec.RELEASE_TIME_FENCE_DAYS;
1359    l_Item_rec_in.SUBSTITUTION_WINDOW_CODE   :=  G_Item_Rec.SUBSTITUTION_WINDOW_CODE;
1360    l_Item_rec_in.SUBSTITUTION_WINDOW_DAYS   :=  G_Item_Rec.SUBSTITUTION_WINDOW_DAYS;
1361 
1362    -- Lead Times
1363    l_Item_rec_in.PREPROCESSING_LEAD_TIME    :=  G_Item_Rec.PREPROCESSING_LEAD_TIME;
1364    l_Item_rec_in.FULL_LEAD_TIME             :=  G_Item_Rec.FULL_LEAD_TIME;
1365    l_Item_rec_in.POSTPROCESSING_LEAD_TIME   :=  G_Item_Rec.POSTPROCESSING_LEAD_TIME;
1366    l_Item_rec_in.FIXED_LEAD_TIME            :=  G_Item_Rec.FIXED_LEAD_TIME;
1367    l_Item_rec_in.VARIABLE_LEAD_TIME         :=  G_Item_Rec.VARIABLE_LEAD_TIME;
1368    l_Item_rec_in.CUM_MANUFACTURING_LEAD_TIME:=  G_Item_Rec.CUM_MANUFACTURING_LEAD_TIME;
1369    l_Item_rec_in.CUMULATIVE_TOTAL_LEAD_TIME :=  G_Item_Rec.CUMULATIVE_TOTAL_LEAD_TIME;
1370    l_Item_rec_in.LEAD_TIME_LOT_SIZE         :=  G_Item_Rec.LEAD_TIME_LOT_SIZE;
1371 
1372    -- WIP
1373    l_Item_rec_in.BUILD_IN_WIP_FLAG          :=  G_Item_Rec.BUILD_IN_WIP_FLAG;
1374    l_Item_rec_in.WIP_SUPPLY_TYPE            :=  G_Item_Rec.WIP_SUPPLY_TYPE;
1375    l_Item_rec_in.WIP_SUPPLY_SUBINVENTORY    :=  G_Item_Rec.WIP_SUPPLY_SUBINVENTORY;
1376    l_Item_rec_in.WIP_SUPPLY_LOCATOR_ID      :=  G_Item_Rec.WIP_SUPPLY_LOCATOR_ID;
1377    l_Item_rec_in.OVERCOMPLETION_TOLERANCE_TYPE  :=  G_Item_Rec.OVERCOMPLETION_TOLERANCE_TYPE;
1378    l_Item_rec_in.OVERCOMPLETION_TOLERANCE_VALUE :=  G_Item_Rec.OVERCOMPLETION_TOLERANCE_VALUE;
1379    l_Item_rec_in.INVENTORY_CARRY_PENALTY    :=  G_Item_Rec.INVENTORY_CARRY_PENALTY;
1380    l_Item_rec_in.OPERATION_SLACK_PENALTY    :=  G_Item_Rec.OPERATION_SLACK_PENALTY;
1381 
1382    -- Order Management
1383    l_Item_rec_in.CUSTOMER_ORDER_FLAG        :=  G_Item_Rec.CUSTOMER_ORDER_FLAG;
1384    l_Item_rec_in.CUSTOMER_ORDER_ENABLED_FLAG:=  G_Item_Rec.CUSTOMER_ORDER_ENABLED_FLAG;
1385    l_Item_rec_in.INTERNAL_ORDER_FLAG        :=  G_Item_Rec.INTERNAL_ORDER_FLAG;
1386    l_Item_rec_in.INTERNAL_ORDER_ENABLED_FLAG:=  G_Item_Rec.INTERNAL_ORDER_ENABLED_FLAG;
1387    l_Item_rec_in.SHIPPABLE_ITEM_FLAG        :=  G_Item_Rec.SHIPPABLE_ITEM_FLAG;
1388    l_Item_rec_in.SO_TRANSACTIONS_FLAG       :=  G_Item_Rec.SO_TRANSACTIONS_FLAG;
1389    l_Item_rec_in.PICKING_RULE_ID            :=  G_Item_Rec.PICKING_RULE_ID;
1390    l_Item_rec_in.PICK_COMPONENTS_FLAG       :=  G_Item_Rec.PICK_COMPONENTS_FLAG;
1391    l_Item_rec_in.REPLENISH_TO_ORDER_FLAG    :=  G_Item_Rec.REPLENISH_TO_ORDER_FLAG;
1392    l_Item_rec_in.ATP_FLAG                   :=  G_Item_Rec.ATP_FLAG;
1393    l_Item_rec_in.ATP_COMPONENTS_FLAG        :=  G_Item_Rec.ATP_COMPONENTS_FLAG;
1394    l_Item_rec_in.ATP_RULE_ID                :=  G_Item_Rec.ATP_RULE_ID;
1395    l_Item_rec_in.SHIP_MODEL_COMPLETE_FLAG   :=  G_Item_Rec.SHIP_MODEL_COMPLETE_FLAG;
1396    l_Item_rec_in.DEFAULT_SHIPPING_ORG       :=  G_Item_Rec.DEFAULT_SHIPPING_ORG;
1397    l_Item_rec_in.DEFAULT_SO_SOURCE_TYPE     :=  G_Item_Rec.DEFAULT_SO_SOURCE_TYPE;
1398    l_Item_rec_in.RETURNABLE_FLAG            :=  G_Item_Rec.RETURNABLE_FLAG;
1399    l_Item_rec_in.RETURN_INSPECTION_REQUIREMENT  :=  G_Item_Rec.RETURN_INSPECTION_REQUIREMENT;
1400    l_Item_rec_in.OVER_SHIPMENT_TOLERANCE    :=  G_Item_Rec.OVER_SHIPMENT_TOLERANCE;
1401    l_Item_rec_in.UNDER_SHIPMENT_TOLERANCE   :=  G_Item_Rec.UNDER_SHIPMENT_TOLERANCE;
1402    l_Item_rec_in.OVER_RETURN_TOLERANCE      :=  G_Item_Rec.OVER_RETURN_TOLERANCE;
1403    l_Item_rec_in.UNDER_RETURN_TOLERANCE     :=  G_Item_Rec.UNDER_RETURN_TOLERANCE;
1404    l_Item_rec_in.FINANCING_ALLOWED_FLAG     :=  G_Item_Rec.FINANCING_ALLOWED_FLAG;
1405    l_Item_rec_in.VOL_DISCOUNT_EXEMPT_FLAG   :=  G_Item_Rec.VOL_DISCOUNT_EXEMPT_FLAG;
1406    l_Item_rec_in.COUPON_EXEMPT_FLAG         :=  G_Item_Rec.COUPON_EXEMPT_FLAG;
1407    l_Item_rec_in.INVOICEABLE_ITEM_FLAG      :=  G_Item_Rec.INVOICEABLE_ITEM_FLAG;
1408    l_Item_rec_in.INVOICE_ENABLED_FLAG       :=  G_Item_Rec.INVOICE_ENABLED_FLAG;
1409    l_Item_rec_in.ACCOUNTING_RULE_ID         :=  G_Item_Rec.ACCOUNTING_RULE_ID;
1410    l_Item_rec_in.INVOICING_RULE_ID          :=  G_Item_Rec.INVOICING_RULE_ID;
1411    l_Item_rec_in.TAX_CODE                   :=  G_Item_Rec.TAX_CODE;
1412    l_Item_rec_in.SALES_ACCOUNT              :=  G_Item_Rec.SALES_ACCOUNT;
1413    l_Item_rec_in.PAYMENT_TERMS_ID           :=  G_Item_Rec.PAYMENT_TERMS_ID;
1414 
1415    -- Service
1416    l_Item_rec_in.CONTRACT_ITEM_TYPE_CODE    :=  G_Item_Rec.CONTRACT_ITEM_TYPE_CODE;
1417    l_Item_rec_in.SERVICE_DURATION_PERIOD_CODE   :=  G_Item_Rec.SERVICE_DURATION_PERIOD_CODE;
1418    l_Item_rec_in.SERVICE_DURATION           :=  G_Item_Rec.SERVICE_DURATION;
1419    l_Item_rec_in.COVERAGE_SCHEDULE_ID       :=  G_Item_Rec.COVERAGE_SCHEDULE_ID;
1420    l_Item_rec_in.SUBSCRIPTION_DEPEND_FLAG   :=  G_Item_Rec.SUBSCRIPTION_DEPEND_FLAG;
1421    l_Item_rec_in.SERV_IMPORTANCE_LEVEL      :=  G_Item_Rec.SERV_IMPORTANCE_LEVEL;
1422    l_Item_rec_in.SERV_REQ_ENABLED_CODE      :=  G_Item_Rec.SERV_REQ_ENABLED_CODE;
1423    l_Item_rec_in.COMMS_ACTIVATION_REQD_FLAG :=  G_Item_Rec.COMMS_ACTIVATION_REQD_FLAG;
1424    l_Item_rec_in.SERVICEABLE_PRODUCT_FLAG   :=  G_Item_Rec.SERVICEABLE_PRODUCT_FLAG;
1425    l_Item_rec_in.MATERIAL_BILLABLE_FLAG     :=  G_Item_Rec.MATERIAL_BILLABLE_FLAG;
1426    l_Item_rec_in.SERV_BILLING_ENABLED_FLAG  :=  G_Item_Rec.SERV_BILLING_ENABLED_FLAG;
1427    l_Item_rec_in.DEFECT_TRACKING_ON_FLAG    :=  G_Item_Rec.DEFECT_TRACKING_ON_FLAG;
1428    l_Item_rec_in.RECOVERED_PART_DISP_CODE   :=  G_Item_Rec.RECOVERED_PART_DISP_CODE;
1429    l_Item_rec_in.COMMS_NL_TRACKABLE_FLAG    :=  G_Item_Rec.COMMS_NL_TRACKABLE_FLAG;
1430    l_Item_rec_in.ASSET_CREATION_CODE        :=  G_Item_Rec.ASSET_CREATION_CODE;
1431    l_Item_rec_in.IB_ITEM_INSTANCE_CLASS     :=  G_Item_Rec.IB_ITEM_INSTANCE_CLASS;
1432    l_Item_rec_in.SERVICE_STARTING_DELAY     :=  G_Item_Rec.SERVICE_STARTING_DELAY;
1433 
1434    -- Web Option
1435    l_Item_rec_in.WEB_STATUS                 :=  G_Item_Rec.WEB_STATUS;
1436    l_Item_rec_in.ORDERABLE_ON_WEB_FLAG      :=  G_Item_Rec.ORDERABLE_ON_WEB_FLAG;
1437    l_Item_rec_in.BACK_ORDERABLE_FLAG        :=  G_Item_Rec.BACK_ORDERABLE_FLAG;
1438    l_Item_rec_in.MINIMUM_LICENSE_QUANTITY   :=  G_Item_Rec.MINIMUM_LICENSE_QUANTITY;
1439 
1440    --Start: 26 new attributes
1441    l_Item_rec_in.TRACKING_QUANTITY_IND      :=  G_Item_Rec.TRACKING_QUANTITY_IND;
1442    l_Item_rec_in.ONT_PRICING_QTY_SOURCE     :=  G_Item_Rec.ONT_PRICING_QTY_SOURCE;
1443    l_Item_rec_in.SECONDARY_DEFAULT_IND      :=  G_Item_Rec.SECONDARY_DEFAULT_IND;
1444 
1445    --Option specific sourced not used in grp package. This is a invisible field.
1446    --l_Item_rec_in.OPTION_SPECIFIC_SOURCED    :=  G_Item_Rec.OPTION_SPECIFIC_SOURCED;
1447    l_Item_rec_in.VMI_MINIMUM_UNITS          :=  G_Item_Rec.VMI_MINIMUM_UNITS;
1448    l_Item_rec_in.VMI_MINIMUM_DAYS           :=  G_Item_Rec.VMI_MINIMUM_DAYS;
1449    l_Item_rec_in.VMI_MAXIMUM_UNITS          :=  G_Item_Rec.VMI_MAXIMUM_UNITS;
1450    l_Item_rec_in.VMI_MAXIMUM_DAYS           :=  G_Item_Rec.VMI_MAXIMUM_DAYS;
1451    l_Item_rec_in.VMI_FIXED_ORDER_QUANTITY   :=  G_Item_Rec.VMI_FIXED_ORDER_QUANTITY;
1452    l_Item_rec_in.SO_AUTHORIZATION_FLAG      :=  G_Item_Rec.SO_AUTHORIZATION_FLAG;
1453    l_Item_rec_in.CONSIGNED_FLAG             :=  G_Item_Rec.CONSIGNED_FLAG;
1454    l_Item_rec_in.ASN_AUTOEXPIRE_FLAG        :=  G_Item_Rec.ASN_AUTOEXPIRE_FLAG;
1455    l_Item_rec_in.VMI_FORECAST_TYPE          :=  G_Item_Rec.VMI_FORECAST_TYPE;
1456    l_Item_rec_in.FORECAST_HORIZON           :=  G_Item_Rec.FORECAST_HORIZON;
1457    l_Item_rec_in.EXCLUDE_FROM_BUDGET_FLAG   :=  G_Item_Rec.EXCLUDE_FROM_BUDGET_FLAG;
1458    l_Item_rec_in.DAYS_TGT_INV_SUPPLY        :=  G_Item_Rec.DAYS_TGT_INV_SUPPLY;
1459    l_Item_rec_in.DAYS_TGT_INV_WINDOW        :=  G_Item_Rec.DAYS_TGT_INV_WINDOW;
1460    l_Item_rec_in.DAYS_MAX_INV_SUPPLY        :=  G_Item_Rec.DAYS_MAX_INV_SUPPLY;
1461    l_Item_rec_in.DAYS_MAX_INV_WINDOW        :=  G_Item_Rec.DAYS_MAX_INV_WINDOW;
1462    l_Item_rec_in.DRP_PLANNED_FLAG           :=  G_Item_Rec.DRP_PLANNED_FLAG;
1463    l_Item_rec_in.CRITICAL_COMPONENT_FLAG    :=  G_Item_Rec.CRITICAL_COMPONENT_FLAG;
1464    l_Item_rec_in.CONTINOUS_TRANSFER         :=  G_Item_Rec.CONTINOUS_TRANSFER;
1465    l_Item_rec_in.CONVERGENCE                :=  G_Item_Rec.CONVERGENCE;
1466    l_Item_rec_in.DIVERGENCE                 :=  G_Item_Rec.DIVERGENCE;
1467    l_Item_rec_in.CONFIG_ORGS                :=  G_Item_Rec.CONFIG_ORGS;
1468    l_Item_rec_in.CONFIG_MATCH               :=  G_Item_Rec.CONFIG_MATCH;
1469    --End: 26 new attributes
1470    IF G_Item_Rec.Process_Item_Record NOT IN (1,2) THEN
1471       G_Item_Rec.Process_Item_Record := 1;
1472    END IF;
1473    l_Item_rec_in.Process_Item_Record        := G_Item_Rec.Process_Item_Record;
1474 
1475    -- Descriptive flex
1476    l_Item_rec_in.ATTRIBUTE_CATEGORY :=  G_Item_Rec.Attribute_Category;
1477    l_Item_rec_in.ATTRIBUTE1         :=  G_Item_Rec.Attribute1;
1478    l_Item_rec_in.ATTRIBUTE2         :=  G_Item_Rec.Attribute2;
1479    l_Item_rec_in.ATTRIBUTE3         :=  G_Item_Rec.Attribute3;
1480    l_Item_rec_in.ATTRIBUTE4         :=  G_Item_Rec.Attribute4;
1481    l_Item_rec_in.ATTRIBUTE5         :=  G_Item_Rec.Attribute5;
1482    l_Item_rec_in.ATTRIBUTE6         :=  G_Item_Rec.Attribute6;
1483    l_Item_rec_in.ATTRIBUTE7         :=  G_Item_Rec.Attribute7;
1484    l_Item_rec_in.ATTRIBUTE8         :=  G_Item_Rec.Attribute8;
1485    l_Item_rec_in.ATTRIBUTE9         :=  G_Item_Rec.Attribute9;
1486    l_Item_rec_in.ATTRIBUTE10        :=  G_Item_Rec.Attribute10;
1487    l_Item_rec_in.ATTRIBUTE11        :=  G_Item_Rec.Attribute11;
1488    l_Item_rec_in.ATTRIBUTE12        :=  G_Item_Rec.Attribute12;
1489    l_Item_rec_in.ATTRIBUTE13        :=  G_Item_Rec.Attribute13;
1490    l_Item_rec_in.ATTRIBUTE14        :=  G_Item_Rec.Attribute14;
1491    l_Item_rec_in.ATTRIBUTE15        :=  G_Item_Rec.Attribute15;
1492    l_Item_rec_in.ATTRIBUTE16        :=  G_Item_Rec.Attribute16;
1493    l_Item_rec_in.ATTRIBUTE17        :=  G_Item_Rec.Attribute17;
1494    l_Item_rec_in.ATTRIBUTE18        :=  G_Item_Rec.Attribute18;
1495    l_Item_rec_in.ATTRIBUTE19        :=  G_Item_Rec.Attribute19;
1496    l_Item_rec_in.ATTRIBUTE20        :=  G_Item_Rec.Attribute20;
1497    l_Item_rec_in.ATTRIBUTE21        :=  G_Item_Rec.Attribute21;
1498    l_Item_rec_in.ATTRIBUTE22        :=  G_Item_Rec.Attribute22;
1499    l_Item_rec_in.ATTRIBUTE23        :=  G_Item_Rec.Attribute23;
1500    l_Item_rec_in.ATTRIBUTE24        :=  G_Item_Rec.Attribute24;
1501    l_Item_rec_in.ATTRIBUTE25        :=  G_Item_Rec.Attribute25;
1502    l_Item_rec_in.ATTRIBUTE26        :=  G_Item_Rec.Attribute26;
1503    l_Item_rec_in.ATTRIBUTE27        :=  G_Item_Rec.Attribute27;
1504    l_Item_rec_in.ATTRIBUTE28        :=  G_Item_Rec.Attribute28;
1505    l_Item_rec_in.ATTRIBUTE29        :=  G_Item_Rec.Attribute29;
1506    l_Item_rec_in.ATTRIBUTE30        :=  G_Item_Rec.Attribute30;
1507    -- Global Descriptive flex
1508    l_Item_rec_in.GLOBAL_ATTRIBUTE_CATEGORY  :=  G_Item_Rec.Global_Attribute_Category;
1509    l_Item_rec_in.GLOBAL_ATTRIBUTE1          :=  G_Item_Rec.Global_Attribute1;
1510    l_Item_rec_in.GLOBAL_ATTRIBUTE2          :=  G_Item_Rec.Global_Attribute2;
1511    l_Item_rec_in.GLOBAL_ATTRIBUTE3          :=  G_Item_Rec.Global_Attribute3;
1512    l_Item_rec_in.GLOBAL_ATTRIBUTE4          :=  G_Item_Rec.Global_Attribute4;
1513    l_Item_rec_in.GLOBAL_ATTRIBUTE5          :=  G_Item_Rec.Global_Attribute5;
1514    l_Item_rec_in.GLOBAL_ATTRIBUTE6          :=  G_Item_Rec.Global_Attribute6;
1515    l_Item_rec_in.GLOBAL_ATTRIBUTE7          :=  G_Item_Rec.Global_Attribute7;
1516    l_Item_rec_in.GLOBAL_ATTRIBUTE8          :=  G_Item_Rec.Global_Attribute8;
1517    l_Item_rec_in.GLOBAL_ATTRIBUTE9          :=  G_Item_Rec.Global_Attribute9;
1518    l_Item_rec_in.GLOBAL_ATTRIBUTE10         :=  G_Item_Rec.Global_Attribute10;
1519 
1520 
1521    l_Item_rec_in.GLOBAL_ATTRIBUTE11          :=  G_Item_Rec.Global_Attribute11;
1522    l_Item_rec_in.GLOBAL_ATTRIBUTE12          :=  G_Item_Rec.Global_Attribute12;
1523    l_Item_rec_in.GLOBAL_ATTRIBUTE13          :=  G_Item_Rec.Global_Attribute13;
1524    l_Item_rec_in.GLOBAL_ATTRIBUTE14          :=  G_Item_Rec.Global_Attribute14;
1525    l_Item_rec_in.GLOBAL_ATTRIBUTE15          :=  G_Item_Rec.Global_Attribute15;
1526    l_Item_rec_in.GLOBAL_ATTRIBUTE16          :=  G_Item_Rec.Global_Attribute16;
1527    l_Item_rec_in.GLOBAL_ATTRIBUTE17          :=  G_Item_Rec.Global_Attribute17;
1528    l_Item_rec_in.GLOBAL_ATTRIBUTE18          :=  G_Item_Rec.Global_Attribute18;
1529    l_Item_rec_in.GLOBAL_ATTRIBUTE19          :=  G_Item_Rec.Global_Attribute19;
1530    l_Item_rec_in.GLOBAL_ATTRIBUTE20         :=  G_Item_Rec.Global_Attribute20;
1531 
1532       /* R12 Enhacement */
1533 
1534    l_Item_rec_in.CAS_NUMBER                 :=  G_Item_Rec.CAS_NUMBER;
1535    l_Item_rec_in.CHILD_LOT_FLAG             :=  G_Item_Rec.CHILD_LOT_FLAG;
1536    l_Item_rec_in.CHILD_LOT_PREFIX           :=  G_Item_Rec.CHILD_LOT_PREFIX;
1537    l_Item_rec_in.CHILD_LOT_STARTING_NUMBER  :=  G_Item_Rec.CHILD_LOT_STARTING_NUMBER;
1538    l_Item_rec_in.CHILD_LOT_VALIDATION_FLAG  :=  G_Item_Rec.CHILD_LOT_VALIDATION_FLAG;
1539    l_Item_rec_in.COPY_LOT_ATTRIBUTE_FLAG    :=  G_Item_Rec.COPY_LOT_ATTRIBUTE_FLAG;
1540    l_Item_rec_in.DEFAULT_GRADE              :=  G_Item_Rec.DEFAULT_GRADE;
1541    l_Item_rec_in.EXPIRATION_ACTION_CODE     :=  G_Item_Rec.EXPIRATION_ACTION_CODE;
1542    l_Item_rec_in.EXPIRATION_ACTION_INTERVAL :=  G_Item_Rec.EXPIRATION_ACTION_INTERVAL;
1543    l_Item_rec_in.GRADE_CONTROL_FLAG         :=  G_Item_Rec.GRADE_CONTROL_FLAG;
1544    l_Item_rec_in.HAZARDOUS_MATERIAL_FLAG    :=  G_Item_Rec.HAZARDOUS_MATERIAL_FLAG;
1545    l_Item_rec_in.HOLD_DAYS                  :=  G_Item_Rec.HOLD_DAYS;
1546    l_Item_rec_in.LOT_DIVISIBLE_FLAG         :=  G_Item_Rec.LOT_DIVISIBLE_FLAG;
1547    l_Item_rec_in.MATURITY_DAYS              :=  G_Item_Rec.MATURITY_DAYS;
1548    l_Item_rec_in.PARENT_CHILD_GENERATION_FLAG    :=  G_Item_Rec.PARENT_CHILD_GENERATION_FLAG;
1549    l_Item_rec_in.PROCESS_COSTING_ENABLED_FLAG    :=  G_Item_Rec.PROCESS_COSTING_ENABLED_FLAG;
1550    l_Item_rec_in.PROCESS_EXECUTION_ENABLED_FLAG  :=  G_Item_Rec.PROCESS_EXECUTION_ENABLED_FLAG;
1551    l_Item_rec_in.PROCESS_QUALITY_ENABLED_FLAG    :=  G_Item_Rec.PROCESS_QUALITY_ENABLED_FLAG;
1552    l_Item_rec_in.PROCESS_SUPPLY_LOCATOR_ID       :=  G_Item_Rec.PROCESS_SUPPLY_LOCATOR_ID;
1553    l_Item_rec_in.PROCESS_SUPPLY_SUBINVENTORY     :=  G_Item_Rec.PROCESS_SUPPLY_SUBINVENTORY;
1554    l_Item_rec_in.PROCESS_YIELD_LOCATOR_ID        :=  G_Item_Rec.PROCESS_YIELD_LOCATOR_ID;
1555    l_Item_rec_in.PROCESS_YIELD_SUBINVENTORY      :=  G_Item_Rec.PROCESS_YIELD_SUBINVENTORY;
1556    l_Item_rec_in.RECIPE_ENABLED_FLAG             :=  G_Item_Rec.RECIPE_ENABLED_FLAG;
1557    l_Item_rec_in.RETEST_INTERVAL                 :=  G_Item_Rec.RETEST_INTERVAL;
1558    l_Item_rec_in.CHARGE_PERIODICITY_CODE         :=  G_Item_Rec.CHARGE_PERIODICITY_CODE;
1559    l_Item_rec_in.REPAIR_LEADTIME                 :=  G_Item_Rec.REPAIR_LEADTIME;
1560    l_Item_rec_in.REPAIR_YIELD                    :=  G_Item_Rec.REPAIR_YIELD;
1561    l_Item_rec_in.PREPOSITION_POINT               :=  G_Item_Rec.PREPOSITION_POINT;
1562    l_Item_rec_in.REPAIR_PROGRAM                  :=  G_Item_Rec.REPAIR_PROGRAM;
1563    l_Item_rec_in.SUBCONTRACTING_COMPONENT        :=  G_Item_Rec.SUBCONTRACTING_COMPONENT ;
1564    l_Item_rec_in.OUTSOURCED_ASSEMBLY             :=  G_Item_Rec.OUTSOURCED_ASSEMBLY;
1565    --R12 C attributes
1566    l_Item_rec_in.GDSN_OUTBOUND_ENABLED_FLAG      :=  G_Item_Rec.GDSN_OUTBOUND_ENABLED_FLAG;
1567    l_Item_rec_in.TRADE_ITEM_DESCRIPTOR           :=  G_Item_Rec.TRADE_ITEM_DESCRIPTOR;
1568    l_item_rec_in.STYLE_ITEM_FLAG                 :=  G_Item_Rec.STYLE_ITEM_FLAG;
1569    l_item_rec_in.STYLE_ITEM_ID                   :=  G_Item_Rec.STYLE_ITEM_ID;
1570 
1571    -- Bug 9852661
1572    l_attributes_row_table := EGO_USER_ATTR_ROW_TABLE();
1573    l_attributes_data_table := EGO_USER_ATTR_DATA_TABLE();
1574 
1575    l_attr_row_count := 1;
1576    IF (G_Item_Rec.attributes_row_table  IS NOT NULL) THEN
1577     FOR i IN 1 .. G_Item_Rec.attributes_row_table.Count LOOP
1578       l_attributes_row_table.EXTEND;
1579       l_attributes_row_table(l_attr_row_count) :=  G_Item_Rec.attributes_row_table(i);
1580       l_attr_row_count := l_attr_row_count + 1;
1581     END LOOP;
1582    END IF;
1583 
1584    l_attr_data_count := 1;
1585    IF (G_Item_Rec.attributes_data_table  IS NOT NULL) THEN
1586     FOR i IN 1 .. G_Item_Rec.attributes_data_table.Count LOOP
1587       l_attributes_data_table.EXTEND;
1588       l_attributes_data_table(l_attr_data_count) :=  G_Item_Rec.attributes_data_table(i);
1589       l_attr_data_count := l_attr_data_count + 1;
1590     END LOOP;
1591    END IF;
1592    -- Bug 9852661
1593 
1594    --Start : Added revision record processing
1595    BEGIN
1596       IF NOT l_rev_index_failure THEN
1597          l_revision_rec.Transaction_Type           := G_Revision_Tbl(G_Item_indx).Transaction_Type;
1598          l_revision_rec.Inventory_Item_Id          := G_Revision_Tbl(G_Item_indx).Inventory_Item_Id;
1599          l_revision_rec.Item_Number                := G_Revision_Tbl(G_Item_indx).Item_Number;
1600          l_revision_rec.Organization_Id            := G_Revision_Tbl(G_Item_indx).Organization_Id;
1601          l_revision_rec.Revision_Id                := G_Revision_Tbl(G_Item_indx).Revision_Id;
1602          l_revision_rec.Revision_Code              := G_Revision_Tbl(G_Item_indx).Revision_Code;
1603          l_revision_rec.Revision_Label             := G_Revision_Tbl(G_Item_indx).Revision_Label;
1604          l_revision_rec.Description                := G_Revision_Tbl(G_Item_indx).Description;
1605          l_revision_rec.Effectivity_Date           := G_Revision_Tbl(G_Item_indx).Effectivity_Date;
1606          l_revision_rec.Lifecycle_Id               := G_Revision_Tbl(G_Item_indx).Lifecycle_Id;
1607          l_revision_rec.Current_Phase_Id           := G_Revision_Tbl(G_Item_indx).Current_Phase_Id;
1608          -- 5208102: Supporting template for UDA's at revisions
1609          l_revision_rec.template_Id                := G_Revision_Tbl(G_Item_indx).Template_Id;
1610          l_revision_rec.template_Name              := G_Revision_Tbl(G_Item_indx).Template_Name;
1611 
1612          l_revision_rec.Attribute_Category         := G_Revision_Tbl(G_Item_indx).Attribute_Category;
1613          l_revision_rec.Attribute1                 := G_Revision_Tbl(G_Item_indx).Attribute1;
1614          l_revision_rec.Attribute2                 := G_Revision_Tbl(G_Item_indx).Attribute2;
1615          l_revision_rec.Attribute3                 := G_Revision_Tbl(G_Item_indx).Attribute3;
1616          l_revision_rec.Attribute4                 := G_Revision_Tbl(G_Item_indx).Attribute4;
1617          l_revision_rec.Attribute5                 := G_Revision_Tbl(G_Item_indx).Attribute5;
1618          l_revision_rec.Attribute6                 := G_Revision_Tbl(G_Item_indx).Attribute6;
1619          l_revision_rec.Attribute7                 := G_Revision_Tbl(G_Item_indx).Attribute7;
1620          l_revision_rec.Attribute8                 := G_Revision_Tbl(G_Item_indx).Attribute8;
1621          l_revision_rec.Attribute9                 := G_Revision_Tbl(G_Item_indx).Attribute9;
1622          l_revision_rec.Attribute10                := G_Revision_Tbl(G_Item_indx).Attribute10;
1623          l_revision_rec.Attribute11                := G_Revision_Tbl(G_Item_indx).Attribute11;
1624          l_revision_rec.Attribute12                := G_Revision_Tbl(G_Item_indx).Attribute12;
1625          l_revision_rec.Attribute13                := G_Revision_Tbl(G_Item_indx).Attribute13;
1626          l_revision_rec.Attribute14                := G_Revision_Tbl(G_Item_indx).Attribute14;
1627          l_revision_rec.Attribute15                := G_Revision_Tbl(G_Item_indx).Attribute15;
1628       ELSE
1629          l_revision_rec := NULL;
1630       END IF;
1631    EXCEPTION
1632       WHEN OTHERS THEN
1633          l_revision_rec := NULL;
1634          l_rev_index_failure := TRUE;
1635      -- Item and Item Rev should ideally be have same
1636      -- index and same number of pl/sql records.
1637    END;
1638    --End : Added revision record processing
1639 
1640    IF l_Process_Control = 'EGO_INTERFACE_HANDLER' THEN
1641       INV_ITEM_GRP.Interface_Handler
1642       (
1643          p_commit           => FND_API.G_TRUE
1644        ,p_transaction_type => G_Item_Rec.Transaction_Type
1645         ,p_Item_rec         => l_Item_rec_in
1646          ,P_revision_rec     => l_revision_rec
1647        ,p_Template_Id      => l_template_id
1648        ,P_Template_Name    => l_Template_Name
1649        ,x_batch_id         => l_Batch_id
1650        ,x_return_status    => l_return_status
1651        ,x_return_err       => l_return_err
1652       );
1653 
1654       FND_MESSAGE.set_name('INV', l_return_err); --Setting error message to be returned
1655 
1656    ELSIF ( G_Item_Rec.Transaction_Type = 'CREATE' ) THEN
1657 
1658       INV_ITEM_GRP.Create_Item
1659       (
1660          p_commit           =>  p_commit
1661       ,  p_Item_rec         =>  l_Item_rec_in
1662       ,  p_Revision_rec     =>  l_revision_rec
1663       ,  p_Template_Id      =>  l_Template_Id
1664       ,  p_Template_Name    =>  l_Template_Name
1665       ,  x_Item_rec         =>  l_Item_rec_out
1666       ,  x_return_status    =>  l_return_status
1667       ,  x_Error_tbl        =>  l_Error_tbl
1668       -- Bug 9092888, Bug 9852661 - Changes
1669       ,  p_attributes_row_table   => l_attributes_row_table  --       IN   EGO_USER_ATTR_ROW_TABLE DEFAULT NULL
1670       ,  p_attributes_data_table  => l_attributes_data_table --       IN   EGO_USER_ATTR_DATA_TABLE DEFAULT NULL
1671       -- Bug 9092888, Bug 9852661 - Changes
1672       );
1673 
1674       --Start 4105841 : Business Event Enhancement
1675       IF ( l_return_status = G_RET_STS_SUCCESS and  G_Item_Rec.Process_Item_Record = 1) THEN
1676 
1677         OPEN  c_get_org_code(cp_org_id => l_Item_rec_in.ORGANIZATION_ID);
1678         FETCH c_get_org_code INTO l_org_code_rec;
1679         CLOSE c_get_org_code;
1680 
1681         IF (INSTR(l_process_control,'PLM_UI:Y') = 0) THEN              --Bug: 4881908
1682          -----------------------------------------------------------------
1683    -- Get the functional Area deafulting Attribute Values for the
1684    -- Record and raise business Event.
1685    -----------------------------------------------------------------
1686          FOR DEFAULT_CAT_ASSIGN_REC IN DEFAULT_CAT_ASSIGN_CREATE(CP_ITEM_ID => l_Item_rec_out.INVENTORY_ITEM_ID ,CP_ORG_ID => l_Item_rec_out.ORGANIZATION_ID)
1687          LOOP
1688             EGO_WF_WRAPPER_PVT.Raise_Item_Event(
1689                                   p_event_name         => EGO_WF_WRAPPER_PVT.G_ITEM_CAT_ASSIGN_EVENT
1690                                  ,p_inventory_item_id  => l_Item_rec_out.INVENTORY_ITEM_ID
1691                                  ,p_organization_id    => l_Item_rec_in.ORGANIZATION_ID
1692          ,p_catalog_id         => DEFAULT_CAT_ASSIGN_REC.CATEGORY_SET_ID
1693                                  ,p_category_id        => DEFAULT_CAT_ASSIGN_REC.CATEGORY_ID
1694                                  ,x_msg_data           => l_msg_data
1695                                  ,x_return_status      => l_event_return_status);
1696          END LOOP;
1697    -----------------------------------------------------------------
1698          -- Fix for bug#8474046
1699          IF (l_org_code_rec.organization_code is not null) THEN
1700            l_wf_org_code := l_org_code_rec.organization_code;
1701          ELSE
1702            l_wf_org_code := l_Item_rec_in.organization_code;
1703          END IF;
1704      /* Fix for bug 8660792 - For raising item creation business event, pick the item_number and organization_id
1705         from l_Item_rec_out instead of l_Item_rec_in to avoid null values */
1706          EGO_WF_WRAPPER_PVT.Raise_Item_Create_Update_Event(
1707                                   p_event_name         => EGO_WF_WRAPPER_PVT.G_ITEM_CREATE_EVENT
1708                                  ,p_organization_id    => l_Item_rec_out.ORGANIZATION_ID
1709                                  ,p_organization_code  => l_wf_org_code -- fix for bug#8474046 l_org_code_rec.ORGANIZATION_CODE
1710                                  ,p_inventory_item_id  => l_Item_rec_out.INVENTORY_ITEM_ID
1711                                  ,p_item_number        => l_Item_rec_out.ITEM_NUMBER
1712                                  ,p_item_description   => l_Item_rec_in.DESCRIPTION
1713                                  ,x_msg_data           => l_msg_data
1714                                  ,x_return_status      => l_event_return_status);
1715    -----------------------------------------------------------------
1716    -- Default Revision Business Event Raising
1717    -----------------------------------------------------------------
1718          FOR REV_RECORDS_CREATE_REC IN REV_RECORDS_CREATE(CP_ITEM_ID => l_Item_rec_out.INVENTORY_ITEM_ID ,CP_ORG_ID => l_Item_rec_out.ORGANIZATION_ID)
1719          LOOP
1720           EGO_WF_WRAPPER_PVT.Raise_Item_Event(
1721                                   p_event_name         => EGO_WF_WRAPPER_PVT.G_REV_CHANGE_EVENT
1722                                  ,p_inventory_item_id  => l_Item_rec_out.INVENTORY_ITEM_ID
1723                                  ,p_organization_id    => l_Item_rec_in.ORGANIZATION_ID
1724                                  ,p_revision_id        => REV_RECORDS_CREATE_REC.REVISION_ID
1725                                  ,x_msg_data           => l_msg_data
1726                                  ,x_return_status      => l_event_return_status);
1727          END LOOP;
1728   -----------------------------------------------------------------
1729   END IF;
1730 
1731       /*Removed the call for default Revision creation
1732         Will be raising events for explicit actions only*/
1733 
1734         --Call ICX APIs
1735         BEGIN
1736            INV_ITEM_EVENTS_PVT.Invoke_ICX_APIs(
1737               p_entity_type       => 'ITEM'
1738              ,p_dml_type          => 'CREATE'
1739              ,p_inventory_item_id => l_Item_rec_out.INVENTORY_ITEM_ID
1740              ,p_item_number       => l_Item_rec_in.ITEM_NUMBER
1741              ,p_item_description  => l_Item_rec_in.DESCRIPTION
1742              ,p_organization_id   => l_Item_rec_in.ORGANIZATION_ID
1743              ,p_organization_code => l_org_code_rec.ORGANIZATION_CODE );
1744            EXCEPTION
1745               WHEN OTHERS THEN
1746                  NULL;
1747         END;
1748         --R12: Business Event Enhancement
1749       END IF;
1750       --End 4105841 : Business Event Enhancement
1751 
1752    ELSIF ( G_Item_Rec.Transaction_Type = 'UPDATE' ) THEN
1753 
1754 
1755 
1756     IF (INSTR(l_process_control,'PLM_UI:Y') = 0) THEN
1757       l_cat_tab_index := 1 ;
1758       FOR DEFAULT_CAT_ASSIGN_REC IN DEFAULT_CAT_ASSIGN_CREATE(CP_ITEM_ID => l_Item_rec_in.INVENTORY_ITEM_ID ,CP_ORG_ID => l_Item_rec_in.ORGANIZATION_ID)
1759       LOOP
1760               l_cat_assign_rec_table_bef(l_cat_tab_index).CATEGORY_SET_ID    := DEFAULT_CAT_ASSIGN_REC.CATEGORY_SET_ID;
1761               l_cat_assign_rec_table_bef(l_cat_tab_index).CATEGORY_ID        := DEFAULT_CAT_ASSIGN_REC.CATEGORY_ID;
1762               l_cat_assign_rec_table_bef(l_cat_tab_index).INVENTORY_ITEM_ID  := l_Item_rec_in.INVENTORY_ITEM_ID;
1763               l_cat_assign_rec_table_bef(l_cat_tab_index).ORGANIZATION_ID    := l_Item_rec_in.ORGANIZATION_ID;
1764               l_cat_tab_index := l_cat_tab_index + 1 ;
1765       END LOOP;
1766     END IF;
1767 ---------------------------------------------------------------------------
1768 
1769       INV_Item_GRP.Update_Item
1770       (
1771          p_commit           =>  p_commit
1772       ,  p_Item_rec         =>  l_Item_rec_in
1773       ,  p_Revision_rec     =>  l_revision_rec
1774       ,  p_Template_Id      =>  l_Template_Id
1775       ,  p_Template_Name    =>  l_Template_Name
1776       ,  x_Item_rec         =>  l_Item_rec_out
1777       ,  x_return_status    =>  l_return_status
1778       ,  x_Error_tbl        =>  l_Error_tbl
1779       );
1780 
1781 
1782 
1783       --
1784       -- Bug 12534846. Process_Items was failing if user is not passing inventory_item_id or
1785       -- item_number and only passing segments. The logic to get current ICC id of the item
1786       -- was using invenntory_item_id or using item_number to derive inventory_item_id. So if
1787       -- user passes only segments then the entire logic was failing. To fix the problem rather
1788       -- than adding logic to derive item_id from segments we went the route of
1789       --   a. Moving the ICC udpate logic after update_item call.
1790       --   b. User l_item_rec_out in the ensuing flow instead of l_item_rec_in
1791       -- See bugdb for detailed explanation.
1792       -- sreharih.  Fri May 13 16:05:48 PDT 2011 (oops ...i fixed it on friday the 13th)
1793       --
1794 
1795       code_debug('Process_Items ' || ' After calling INV_Item_GRP.Update_Item  ' ||
1796                                                         ' item_id = ' || l_Item_rec_out.inventory_item_id ||
1797                                                          ' org_id = ' || l_Item_rec_out.organization_id   ||
1798                                                   ' return status = ' || l_return_status);
1799 
1800 
1801       IF ( l_return_status = G_RET_STS_SUCCESS) THEN
1802          IF l_Item_rec_in.item_catalog_group_id IS NOT NULL AND
1803             l_Item_rec_in.item_catalog_group_id <> G_MISS_NUM THEN
1804             code_debug('Process_Items ' || ' calling process_icc_change for ' ||
1805                                                                 ' item_id = ' || l_Item_rec_out.inventory_item_id  ||
1806                                                                 ' icc_id  = ' || l_Item_rec_in.item_catalog_group_id);
1807 
1808 
1809             process_icc_change(p_inventory_item_id => l_Item_rec_out.inventory_item_id,
1810                                p_new_icc_id        => l_Item_rec_in.item_catalog_group_id,
1811                                p_commit            => p_commit,
1812                                x_return_status     => l_return_status,
1813                                x_msg_count         => l_cnt);
1814 
1815            code_debug('Process_Items ' || ' after process_icc_change return_status = ' || l_return_status ||
1816                                                                        ' msg_count = ' || l_cnt);
1817 
1818             l_msg_count := l_msg_count + l_cnt;
1819 
1820          END IF;
1821 
1822       END IF;
1823 
1824       --Start 4105841 : Business Event Enhancement
1825       IF ( l_return_status = G_RET_STS_SUCCESS
1826               and  G_Item_Rec.Process_Item_Record = 1) THEN
1827 
1828         OPEN  c_get_org_code(cp_org_id => l_Item_rec_out.ORGANIZATION_ID);
1829         FETCH c_get_org_code INTO l_org_code_rec;
1830         CLOSE c_get_org_code;
1831 
1832 
1833         --Bug 4586769  Fetch Item Description and number if NULL
1834   IF (   trim(l_item_rec_in.DESCRIPTION)   IS NULL
1835       OR      l_item_rec_in.DESCRIPTION = G_MISS_CHAR
1836       OR trim(l_Item_rec_in.ITEM_NUMBER)  IS NULL) THEN
1837            SELECT CONCATENATED_SEGMENTS, DESCRIPTION
1838        INTO l_item_number, l_item_desc
1839              FROM MTL_SYSTEM_ITEMS_KFV
1840             WHERE inventory_item_id = l_Item_rec_out.INVENTORY_ITEM_ID
1841         AND organization_id   = l_Item_rec_out.ORGANIZATION_ID;
1842         ELSE
1843      l_item_desc   := l_item_rec_in.DESCRIPTION;
1844      l_item_number := l_item_rec_in.ITEM_NUMBER;
1845   END IF;
1846         IF (INSTR(l_process_control,'PLM_UI:Y') = 0) THEN        --Bug: 4881908
1847   -------------------------------------------------------------------------
1848   -- Implicit Business Event for Cat assignments on Update
1849   -------------------------------------------------------------------------
1850         l_cat_tab_index := 1 ;
1851         FOR DEFAULT_CAT_ASSIGN_REC IN DEFAULT_CAT_ASSIGN_UPDATE(CP_ITEM_ID => l_Item_rec_out.INVENTORY_ITEM_ID ,CP_ORG_ID => l_Item_rec_out.ORGANIZATION_ID)
1852         LOOP
1853     l_cat_match := FND_API.G_FALSE;
1854     l_cat_assign_rec_table_aft(l_cat_tab_index).CATEGORY_SET_ID    := DEFAULT_CAT_ASSIGN_REC.CATEGORY_SET_ID;
1855     l_cat_assign_rec_table_aft(l_cat_tab_index).CATEGORY_ID        := DEFAULT_CAT_ASSIGN_REC.CATEGORY_ID;
1856     l_cat_assign_rec_table_aft(l_cat_tab_index).INVENTORY_ITEM_ID  := l_Item_rec_out.INVENTORY_ITEM_ID;
1857       l_cat_assign_rec_table_aft(l_cat_tab_index).ORGANIZATION_ID    := l_Item_rec_out.ORGANIZATION_ID;
1858     IF l_cat_assign_rec_table_bef IS NOT NULL AND l_cat_assign_rec_table_bef.FIRST IS NOT NULL THEN
1859             FOR CAT_REC_BEF IN l_cat_assign_rec_table_bef.FIRST .. l_cat_assign_rec_table_bef.LAST
1860         LOOP
1861                 IF l_cat_assign_rec_table_aft(l_cat_tab_index).CATEGORY_SET_ID = l_cat_assign_rec_table_bef(CAT_REC_BEF).CATEGORY_SET_ID THEN
1862             l_cat_match := FND_API.G_TRUE;
1863           ELSE
1864            NULL;
1865           END IF;
1866        END LOOP;
1867     END IF;
1868           IF l_cat_match = FND_API.G_FALSE THEN
1869               EGO_WF_WRAPPER_PVT.Raise_Item_Event(
1870                    p_event_name         => EGO_WF_WRAPPER_PVT.G_ITEM_CAT_ASSIGN_EVENT
1871       ,p_inventory_item_id  => l_cat_assign_rec_table_aft(l_cat_tab_index).INVENTORY_ITEM_ID
1872       ,p_organization_id    => l_cat_assign_rec_table_aft(l_cat_tab_index).ORGANIZATION_ID
1873                   ,p_catalog_id         => TO_CHAR(l_cat_assign_rec_table_aft(l_cat_tab_index).CATEGORY_SET_ID)
1874                   ,p_category_id        => TO_CHAR(l_cat_assign_rec_table_aft(l_cat_tab_index).CATEGORY_ID)
1875                   ,x_msg_data           => l_msg_data
1876                   ,x_return_status      => l_event_return_status);
1877     END IF ;
1878          l_cat_tab_index := l_cat_tab_index + 1 ;
1879         END LOOP;
1880         EGO_WF_WRAPPER_PVT.Raise_Item_Create_Update_Event(
1881                 p_event_name         => EGO_WF_WRAPPER_PVT.G_ITEM_UPDATE_EVENT
1882                ,p_organization_id    => l_Item_rec_out.ORGANIZATION_ID
1883                ,p_organization_code  => l_org_code_rec.ORGANIZATION_CODE
1884                ,p_inventory_item_id  => l_Item_rec_out.INVENTORY_ITEM_ID
1885                ,p_item_number        => l_item_number
1886                ,p_item_description   => l_item_desc
1887                ,x_msg_data           => l_msg_data
1888                ,x_return_status      => l_event_return_status);
1889   -------------------------------------------------------------------------
1890    BEGIN
1891     SELECT REVISION_ID INTO l_revision_id_out
1892       FROM MTL_ITEM_REVISIONS_B
1893      WHERE INVENTORY_ITEM_ID  = l_Item_rec_out.INVENTORY_ITEM_ID
1894        AND ORGANIZATION_ID    = l_Item_rec_out.ORGANIZATION_ID
1895        AND REVISION           = l_revision_rec.Revision_Code ;
1896    EXCEPTION
1897     WHEN NO_DATA_FOUND
1898      THEN
1899        l_revision_id_out := NULL;
1900    END;
1901    IF l_revision_id_out IS NOT NULL
1902    THEN
1903      EGO_WF_WRAPPER_PVT.Raise_Item_Event(
1904                                   p_event_name         => EGO_WF_WRAPPER_PVT.G_REV_CHANGE_EVENT
1905                                  ,p_inventory_item_id  => l_Item_rec_out.INVENTORY_ITEM_ID
1906                                  ,p_organization_id    => l_Item_rec_out.ORGANIZATION_ID
1907                                  ,p_revision_id        => l_revision_id_out
1908                                  ,x_msg_data           => l_msg_data
1909                                  ,x_return_status      => l_event_return_status);
1910 
1911          END IF;
1912   END IF;
1913         /*Removed the call for updates to child orgs
1914          Will be raising events for explicit actions only*/
1915 
1916         --Call ICX APIs
1917         BEGIN
1918            INV_ITEM_EVENTS_PVT.Invoke_ICX_APIs(
1919               p_entity_type       => 'ITEM'
1920              ,p_dml_type          => 'UPDATE'
1921              ,p_inventory_item_id => l_Item_rec_out.INVENTORY_ITEM_ID
1922              ,p_item_number       => l_item_number
1923              ,p_item_description  => l_item_desc
1924              ,p_organization_id   => l_Item_rec_out.ORGANIZATION_ID
1925              ,p_organization_code => l_org_code_rec.ORGANIZATION_CODE );
1926            EXCEPTION
1927               WHEN OTHERS THEN
1928                  NULL;
1929         END;
1930         --R12: Business Event Enhancement
1931       END IF;
1932       --End 4105841 : Business Event Enhancement
1933    END IF;
1934 
1935    IF (G_Item_Rec.Transaction_Type = 'CREATE' OR ( G_Item_Rec.Transaction_Type = 'UPDATE')) THEN
1936 
1937    -----------------------------------------------------------------------------
1938    --  Re-populate item record back to the global table.
1939    -----------------------------------------------------------------------------
1940 
1941    IF l_process_control = 'EGO_INTERFACE_HANDLER' THEN
1942       G_Item_Tbl(G_Item_indx).Inventory_Item_Id := l_batch_id;
1943    ELSIF G_Item_Rec.Process_Item_Record = 1 THEN
1944       G_Item_Tbl(G_Item_indx).Inventory_Item_Id          :=  l_Item_rec_out.INVENTORY_ITEM_ID;
1945       G_Item_Tbl(G_Item_indx).Organization_Id            :=  l_Item_rec_out.ORGANIZATION_ID;
1946       G_Item_Tbl(G_Item_indx).Item_Catalog_Group_Id      :=  l_Item_rec_out.ITEM_CATALOG_GROUP_ID;
1947       G_Item_Tbl(G_Item_indx).Description                :=  l_Item_rec_out.DESCRIPTION;
1948       G_Item_Tbl(G_Item_indx).Long_Description           :=  l_Item_rec_out.LONG_DESCRIPTION;
1949       G_Item_Tbl(G_Item_indx).Primary_Uom_Code           :=  l_Item_rec_out.PRIMARY_UOM_CODE;
1950       G_Item_Tbl(G_Item_indx).Allowed_Units_Lookup_Code  :=  l_Item_rec_out.ALLOWED_UNITS_LOOKUP_CODE;
1951       G_Item_Tbl(G_Item_indx).Inventory_Item_Status_Code :=  l_Item_rec_out.INVENTORY_ITEM_STATUS_CODE;
1952       G_Item_Tbl(G_Item_indx).Bom_Enabled_Flag           :=  l_Item_rec_out.BOM_ENABLED_FLAG;
1953       G_Item_Tbl(G_Item_indx).Eng_Item_Flag              :=  l_Item_rec_out.ENG_ITEM_FLAG;
1954 
1955    END IF;
1956 
1957    G_Item_Tbl(G_Item_indx).Return_Status              :=  l_return_status;
1958 
1959 
1960    IF ( l_return_status <> G_RET_STS_SUCCESS ) THEN
1961       x_return_status  :=  l_return_status;
1962    END IF;
1963 
1964    l_msg_count  :=  l_msg_count + NVL(l_Error_tbl.COUNT, 0);
1965    x_msg_count  :=  l_msg_count;
1966 
1967    -----------------------------------------------------------------------------
1968    --  Populate the item error message table.
1969    -----------------------------------------------------------------------------
1970 
1971    FOR errno IN 1 .. NVL(l_Error_tbl.LAST, 0) LOOP
1972 
1973       IF ( l_Error_tbl(errno).MESSAGE_TEXT IS NOT NULL ) THEN
1974          EGO_Item_Msg.Add_Error_Text (G_Item_indx, l_Error_tbl(errno).MESSAGE_TEXT);
1975       ELSE
1976          EGO_Item_Msg.Add_Error_Message (G_Item_indx, 'INV', l_Error_tbl(errno).MESSAGE_NAME);
1977       END IF;
1978 
1979    END LOOP;  -- l_Error_tbl
1980 
1981  ELSE
1982  	    x_return_status  :=  G_RET_STS_ERROR;
1983  	     l_msg_count :=l_msg_count+1;
1984  	     x_msg_count  :=l_msg_count;
1985  	     G_Item_Tbl(G_Item_indx).Return_Status :=G_RET_STS_ERROR ;
1986 
1987  END IF;
1988 
1989    -----------------------------------------------------------------------------
1990    --  Assign the next value of the global index variable of the global table.
1991    -----------------------------------------------------------------------------
1992 
1993    G_Item_indx  :=  G_Item_indx + 1;
1994 
1995  END LOOP;  -- G_Item_Tbl
1996 
1997 EXCEPTION
1998     -- WHEN Item_or_Org_INVALID THEN
1999     --      x_return_status  :=  G_RET_STS_ERROR;
2000 
2001    WHEN others THEN
2002       x_return_status  :=  G_RET_STS_UNEXP_ERROR;
2003       EGO_Item_Msg.Add_Error_Message ( G_Item_indx, 'INV', 'INV_ITEM_UNEXPECTED_ERROR',
2004                                        'PACKAGE_NAME', G_PKG_NAME, FALSE,
2005                                        'PROCEDURE_NAME', l_api_name, FALSE,
2006                                        'ERROR_TEXT', SQLERRM, FALSE );
2007 END Process_Items;
2008 
2009 
2010 -- -----------------------------------------------------------------------------
2011 --  API Name:       Process_Item_Org_Assignments
2012 -- -----------------------------------------------------------------------------
2013 
2014 PROCEDURE Process_Item_Org_Assignments
2015 (
2016    p_commit         IN      VARCHAR2      DEFAULT  FND_API.g_FALSE
2017 ,  x_return_status      OUT NOCOPY  VARCHAR2
2018 ,  x_msg_count          OUT NOCOPY  NUMBER
2019 )
2020 IS
2021    CURSOR c_get_item_rev_rec (cp_item_id NUMBER
2022                              ,cp_org_id  NUMBER) IS
2023       SELECT item.concatenated_segments
2024             ,item.description
2025       ,item.organization_id
2026       ,rev.revision_id
2027       FROM  mtl_system_items_b_kfv item
2028            ,mtl_item_revisions_b rev
2029       WHERE item.inventory_item_id       = cp_item_id
2030       AND   item.organization_id         = cp_org_id
2031       AND   rev.inventory_item_id        = cp_item_id
2032       AND   rev.organization_id          = cp_org_id;
2033 
2034    l_api_name       CONSTANT    VARCHAR2(30)  :=  'Process_Item_Org_Assignments';
2035    l_return_status              VARCHAR2(1) :=  G_MISS_CHAR;
2036    l_msg_count                  NUMBER      :=  0;
2037    l_Item_Org_Assignment_Rec    EGO_Item_PUB.Item_Org_Assignment_Rec_Type;
2038    l_Item_rec_in                INV_ITEM_GRP.Item_Rec_Type;
2039    l_revision_rec               INV_ITEM_GRP.Item_Revision_Rec_Type;
2040    l_rev_index_failure          BOOLEAN := FALSE;
2041    l_Item_rec_out               INV_ITEM_GRP.Item_Rec_Type;
2042    l_Error_tbl                  INV_ITEM_GRP.Error_Tbl_Type;
2043    l_master_org                 MTL_SYSTEM_ITEMS_B.ORGANIZATION_ID%TYPE;
2044    l_event_return_status VARCHAR2(1) ; --business event enhancement
2045    l_item_rev_rec        c_get_item_rev_rec%ROWTYPE;
2046    l_msg_data            VARCHAR2(2000);
2047    l_process_control     VARCHAR2(2000)  :=  INV_EGO_REVISION_VALIDATE.Get_Process_Control;  --Bug: 4881908
2048 
2049 BEGIN
2050    x_return_status  :=  G_RET_STS_SUCCESS;
2051 
2052    -- Loop through item records in the global table
2053    G_Item_Org_indx  :=  G_Item_Org_Assignment_Tbl.FIRST;
2054 
2055  WHILE G_Item_Org_indx <= G_Item_Org_Assignment_Tbl.LAST LOOP
2056 
2057    -- Clear the Item GRP API message table before processing an item
2058    l_Error_tbl.DELETE;
2059 
2060    l_Item_Org_Assignment_Rec  :=  G_Item_Org_Assignment_Tbl(G_Item_Org_indx);
2061 
2062    -- Item identifier
2063    l_Item_rec_in.INVENTORY_ITEM_ID      :=  l_Item_Org_Assignment_Rec.Inventory_Item_Id;
2064    l_Item_rec_in.ITEM_NUMBER            :=  l_Item_Org_Assignment_Rec.Item_Number;
2065    -- Organization
2066    l_Item_rec_in.ORGANIZATION_ID        :=  l_Item_Org_Assignment_Rec.Organization_Id;
2067    l_Item_rec_in.ORGANIZATION_CODE      :=  l_Item_Org_Assignment_Rec.Organization_Code;
2068    --Fix for Bug# 2768532
2069    l_Item_rec_in.PRIMARY_UOM_CODE       :=  l_Item_Org_Assignment_Rec.Primary_Uom_Code;
2070 
2071    --Start : Added revision record processing
2072    BEGIN
2073       IF NOT l_rev_index_failure THEN
2074          l_revision_rec.Transaction_Type           := G_Revision_Tbl(G_Item_indx).Transaction_Type;
2075          l_revision_rec.Inventory_Item_Id          := G_Revision_Tbl(G_Item_indx).Inventory_Item_Id;
2076          l_revision_rec.Item_Number                := G_Revision_Tbl(G_Item_indx).Item_Number;
2077          l_revision_rec.Organization_Id            := G_Revision_Tbl(G_Item_indx).Organization_Id;
2078          l_revision_rec.Revision_Id                := G_Revision_Tbl(G_Item_indx).Revision_Id;
2079          l_revision_rec.Revision_Code              := G_Revision_Tbl(G_Item_indx).Revision_Code;
2080          l_revision_rec.Revision_Label             := G_Revision_Tbl(G_Item_indx).Revision_Label;
2081          l_revision_rec.Description                := G_Revision_Tbl(G_Item_indx).Description;
2082          l_revision_rec.Effectivity_Date           := G_Revision_Tbl(G_Item_indx).Effectivity_Date;
2083          l_revision_rec.Lifecycle_Id               := G_Revision_Tbl(G_Item_indx).Lifecycle_Id;
2084          l_revision_rec.Current_Phase_Id           := G_Revision_Tbl(G_Item_indx).Current_Phase_Id;
2085          -- 5208102: Supporting template for UDA's at revisions
2086          l_revision_rec.template_Id                := G_Revision_Tbl(G_Item_indx).Template_Id;
2087          l_revision_rec.template_Name              := G_Revision_Tbl(G_Item_indx).Template_Name;
2088 
2089          l_revision_rec.Attribute_Category         := G_Revision_Tbl(G_Item_indx).Attribute_Category;
2090          l_revision_rec.Attribute1                 := G_Revision_Tbl(G_Item_indx).Attribute1;
2091          l_revision_rec.Attribute2                 := G_Revision_Tbl(G_Item_indx).Attribute2;
2092          l_revision_rec.Attribute3                 := G_Revision_Tbl(G_Item_indx).Attribute3;
2093          l_revision_rec.Attribute4                 := G_Revision_Tbl(G_Item_indx).Attribute4;
2094          l_revision_rec.Attribute5                 := G_Revision_Tbl(G_Item_indx).Attribute5;
2095          l_revision_rec.Attribute6                 := G_Revision_Tbl(G_Item_indx).Attribute6;
2096          l_revision_rec.Attribute7                 := G_Revision_Tbl(G_Item_indx).Attribute7;
2097          l_revision_rec.Attribute8                 := G_Revision_Tbl(G_Item_indx).Attribute8;
2098          l_revision_rec.Attribute9                 := G_Revision_Tbl(G_Item_indx).Attribute9;
2099          l_revision_rec.Attribute10                := G_Revision_Tbl(G_Item_indx).Attribute10;
2100          l_revision_rec.Attribute11                := G_Revision_Tbl(G_Item_indx).Attribute11;
2101          l_revision_rec.Attribute12                := G_Revision_Tbl(G_Item_indx).Attribute12;
2102          l_revision_rec.Attribute13                := G_Revision_Tbl(G_Item_indx).Attribute13;
2103          l_revision_rec.Attribute14                := G_Revision_Tbl(G_Item_indx).Attribute14;
2104          l_revision_rec.Attribute15                := G_Revision_Tbl(G_Item_indx).Attribute15;
2105       ELSE
2106          l_revision_rec := NULL;
2107       END IF;
2108    EXCEPTION
2109       WHEN OTHERS THEN
2110          l_revision_rec := NULL;
2111          l_rev_index_failure := TRUE;
2112      -- Item and Item Rev should ideally be have same
2113      -- index and same number of pl/sql records.
2114    END;
2115    --End : Added revision record processing
2116 
2117 
2118    INV_ITEM_GRP.Create_Item
2119       (
2120          p_commit           =>  p_commit
2121       ,  p_Item_rec         =>  l_Item_rec_in
2122       ,  p_Revision_rec     =>  l_revision_rec
2123       ,  p_Template_Id      =>  NULL
2124       ,  p_Template_Name    =>  NULL
2125       ,  x_Item_rec         =>  l_Item_rec_out
2126       ,  x_return_status    =>  l_return_status
2127       ,  x_Error_tbl        =>  l_Error_tbl
2128       );
2129 
2130 
2131 
2132    G_Item_Org_Assignment_Tbl(G_Item_Org_indx).Return_Status  :=  l_return_status;
2133 
2134    IF ( l_return_status <> G_RET_STS_SUCCESS ) THEN
2135       x_return_status  :=  l_return_status;
2136 /*Fix for Bug 4013187*/
2137    ELSE /*Copy the Description into TL tables for all the languages supported*/
2138       SELECT MASTER_ORGANIZATION_ID INTO l_master_org
2139       FROM mtl_parameters
2140       WHERE ORGANIZATION_ID = l_Item_rec_in.ORGANIZATION_ID;
2141 
2142       UPDATE MTL_SYSTEM_ITEMS_TL ASSIGNEE
2143       SET (ASSIGNEE.DESCRIPTION, ASSIGNEE.LONG_DESCRIPTION, ASSIGNEE.SOURCE_LANG)
2144                                = (SELECT DESCRIPTION, LONG_DESCRIPTION, SOURCE_LANG
2145                               FROM MTL_SYSTEM_ITEMS_TL MASTER
2146                                   WHERE INVENTORY_ITEM_ID = l_Item_rec_in.INVENTORY_ITEM_ID
2147                       AND ORGANIZATION_ID =L_MASTER_ORG
2148                                   AND MASTER."LANGUAGE" = ASSIGNEE."LANGUAGE")
2149          WHERE INVENTORY_ITEM_ID = l_Item_rec_in.INVENTORY_ITEM_ID
2150      AND ORGANIZATION_ID = l_Item_rec_in.ORGANIZATION_ID;
2151 
2152      --Start 4105841 : Business Event Enhancement
2153       IF ( l_return_status = G_RET_STS_SUCCESS ) THEN
2154         OPEN  c_get_item_rev_rec (cp_item_id => l_Item_rec_in.INVENTORY_ITEM_ID
2155                                  ,cp_org_id  => l_Item_rec_in.ORGANIZATION_ID);
2156 
2157         FETCH c_get_item_rev_rec INTO l_item_rev_rec;
2158         CLOSE c_get_item_rev_rec;
2159 
2160         IF (INSTR(l_process_control,'PLM_UI:Y') = 0) THEN              --Bug: 4881908
2161            EGO_WF_WRAPPER_PVT.Raise_Item_Create_Update_Event(
2162                                   p_event_name         => EGO_WF_WRAPPER_PVT.G_ITEM_CREATE_EVENT
2163                                  ,p_organization_id    => l_Item_rec_in.ORGANIZATION_ID
2164                                  ,p_organization_code  => l_Item_rec_in.ORGANIZATION_CODE
2165                                  ,p_inventory_item_id  => l_Item_rec_in.INVENTORY_ITEM_ID
2166                                  ,p_item_number        => l_item_rev_rec.concatenated_segments
2167                                  ,p_item_description   => l_item_rev_rec.description
2168                                  ,x_msg_data           => l_msg_data
2169                                  ,x_return_status      => l_event_return_status);
2170   END IF;
2171       /*Removed the call for default Revision creation
2172         Will be raising events for explicit actions only*/
2173         --Call ICX APIs
2174         BEGIN
2175            INV_ITEM_EVENTS_PVT.Invoke_ICX_APIs(
2176               p_entity_type       => 'ITEM'
2177              ,p_dml_type          => 'CREATE'
2178              ,p_inventory_item_id => l_Item_rec_in.INVENTORY_ITEM_ID
2179              ,p_item_number       => l_item_rev_rec.concatenated_segments
2180              ,p_item_description  => l_item_rev_rec.description
2181              ,p_organization_id   => l_Item_rec_in.ORGANIZATION_ID
2182              ,p_organization_code => l_Item_rec_in.ORGANIZATION_CODE );
2183            EXCEPTION
2184               WHEN OTHERS THEN
2185                  NULL;
2186         END;
2187         --R12: Business Event Enhancement
2188 
2189       --End 4105841 : Business Event Enhancement
2190      END IF;
2191    END IF;
2192 
2193    l_msg_count  :=  l_msg_count + NVL(l_Error_tbl.COUNT, 0);
2194    x_msg_count  :=  l_msg_count;
2195 
2196    FOR errno IN 1 .. NVL(l_Error_tbl.LAST, 0) LOOP
2197 
2198       IF ( l_Error_tbl(errno).MESSAGE_TEXT IS NOT NULL ) THEN
2199          EGO_Item_Msg.Add_Error_Text (G_Item_Org_indx, l_Error_tbl(errno).MESSAGE_TEXT);
2200       ELSE
2201          EGO_Item_Msg.Add_Error_Message (G_Item_Org_indx, 'INV', l_Error_tbl(errno).MESSAGE_NAME);
2202       END IF;
2203 
2204    END LOOP;  -- l_Error_tbl
2205 
2206    G_Item_Org_indx  :=  G_Item_Org_indx + 1;
2207 
2208  END LOOP;  -- G_Item_Org_Assignment_Tbl
2209 
2210 
2211 EXCEPTION
2212 
2213    WHEN others THEN
2214       x_return_status  :=  G_RET_STS_UNEXP_ERROR;
2215       EGO_Item_Msg.Add_Error_Message ( G_Item_Org_indx, 'INV', 'INV_ITEM_UNEXPECTED_ERROR',
2216                                        'PACKAGE_NAME', G_PKG_NAME, FALSE,
2217                                        'PROCEDURE_NAME', l_api_name, FALSE,
2218                                        'ERROR_TEXT', SQLERRM, FALSE );
2219 
2220 END Process_Item_Org_Assignments;
2221 
2222 -- -----------------------------------------------------------------------------
2223 --  API Name:       Seed_Item_Long_Desc_Attr_Group
2224 --
2225 --  Description:
2226 --    Add a row to the User-Defined Attribute Group 'Detailed Descriptions'
2227 --    so that the Item Long Description is shown on the Item Detail page.
2228 -- -----------------------------------------------------------------------------
2229 
2230 PROCEDURE Seed_Item_Long_Desc_Attr_Group (
2231         p_inventory_item_id             IN  NUMBER
2232        ,p_organization_id               IN  NUMBER
2233        ,p_item_catalog_group_id         IN  NUMBER
2234        ,x_return_status                 OUT NOCOPY VARCHAR2
2235        ,x_errorcode                     OUT NOCOPY NUMBER
2236        ,x_msg_count                     OUT NOCOPY NUMBER
2237        ,x_msg_data                      OUT NOCOPY VARCHAR2
2238 ) IS
2239 
2240     l_api_name               CONSTANT VARCHAR2(30) := 'Seed_Item_Long_Desc_Attr_Group';
2241 
2242     l_pk_column_values       EGO_COL_NAME_VALUE_PAIR_ARRAY;
2243     l_class_code_values      EGO_COL_NAME_VALUE_PAIR_ARRAY;
2244     l_label                  VARCHAR2(80);
2245     l_attr_value_info_table  EGO_USER_ATTR_DATA_TABLE;
2246 
2247   BEGIN
2248 
2249     l_pk_column_values := EGO_COL_NAME_VALUE_PAIR_ARRAY(
2250                             EGO_COL_NAME_VALUE_PAIR_OBJ('INVENTORY_ITEM_ID', p_inventory_item_id)
2251                            ,EGO_COL_NAME_VALUE_PAIR_OBJ('ORGANIZATION_ID', p_organization_id)
2252                           );
2253 
2254     l_class_code_values := EGO_COL_NAME_VALUE_PAIR_ARRAY(
2255                              EGO_COL_NAME_VALUE_PAIR_OBJ('ITEM_CATALOG_GROUP_ID', NVL(p_item_catalog_group_id, -1))
2256                            );
2257 
2258     SELECT DISPLAY_NAME
2259       INTO l_label
2260       FROM EGO_VALUE_SET_VALUES_V
2261      WHERE VALUE_SET_NAME = 'DescSource'
2262        AND INTERNAL_NAME = 'D';
2263 
2264     l_attr_value_info_table := EGO_USER_ATTR_DATA_TABLE(
2265                                  EGO_USER_ATTR_DATA_OBJ(1, 'Sequence', null, 10, null, null, null, null)
2266                                 ,EGO_USER_ATTR_DATA_OBJ(1, 'DescriptionSource', 'D', null, null, null, null, null)
2267                                 ,EGO_USER_ATTR_DATA_OBJ(1, 'Label', l_label, null, null, null, null, null)
2268                                 ,EGO_USER_ATTR_DATA_OBJ(1, 'DisplayMode', 'AsText', null, null, null, null, null)
2269                                );
2270 
2271     EGO_USER_ATTRS_DATA_PVT.Perform_DML_On_Row(
2272         p_api_version                   => 1.0
2273        ,p_object_name                   => 'EGO_ITEM'
2274        ,p_application_id                => 431
2275        ,p_attr_group_type               => 'EGO_ITEMMGMT_GROUP'
2276        ,p_attr_group_name               => 'ItemDetailDesc'
2277        ,p_pk_column_name_value_pairs    => l_pk_column_values
2278        ,p_class_code_name_value_pairs   => l_class_code_values
2279        ,p_data_level_name_value_pairs   => NULL
2280        ,p_attr_name_value_pairs         => l_attr_value_info_table
2281        ,x_return_status                 => x_return_status
2282        ,x_errorcode                     => x_errorcode
2283        ,x_msg_count                     => x_msg_count
2284        ,x_msg_data                      => x_msg_data
2285     );
2286 
2287   EXCEPTION
2288     WHEN OTHERS THEN
2289       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2290       x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
2291 
2292 END Seed_Item_Long_Desc_Attr_Group;
2293 
2294 -- -----------------------------------------------------------------------------
2295 --  API Name:       Seed_Item_Long_Desc_In_Bulk
2296 --
2297 --    Add a row to the User-Defined Attribute Group 'Detailed Descriptions'
2298 --    for all newly created items in the set identified by p_set_process_id
2299 -- -----------------------------------------------------------------------------
2300 
2301 PROCEDURE Seed_Item_Long_Desc_In_Bulk (
2302         p_set_process_id                IN  NUMBER
2303        ,x_return_status                 OUT NOCOPY VARCHAR2
2304        ,x_msg_data                      OUT NOCOPY VARCHAR2
2305 ) IS
2306 
2307     l_api_name               CONSTANT VARCHAR2(30) := 'Seed_Item_Long_Desc_In_Bulk';
2308     l_attr_group_id          NUMBER;
2309     --commented out as a part of Bug 4906499
2310     --l_label                  VARCHAR2(80);
2311 BEGIN
2312 
2313     -----------------------------------------------------------
2314     -- Find the Attr Group ID and Label we will be inserting --
2315     -----------------------------------------------------------
2316     SELECT ATTR_GROUP_ID
2317       INTO l_attr_group_id
2318       FROM EGO_FND_DSC_FLX_CTX_EXT
2319      WHERE APPLICATION_ID = 431
2320        AND DESCRIPTIVE_FLEXFIELD_NAME = 'EGO_ITEMMGMT_GROUP'
2321        AND DESCRIPTIVE_FLEX_CONTEXT_CODE = 'ItemDetailDesc';
2322     --commented out as a part of Bug 4906499
2323     /*SELECT DISPLAY_NAME
2324       INTO l_label
2325       FROM EGO_VALUE_SET_VALUES_V
2326      WHERE VALUE_SET_NAME = 'DescSource'
2327        AND INTERNAL_NAME = 'D';*/
2328 
2329     ----------------------------------------------------------------------
2330     -- Insert a row for every newly created item in the interface table --
2331     ----------------------------------------------------------------------
2332     INSERT INTO EGO_MTL_SY_ITEMS_EXT_B
2333     (
2334       EXTENSION_ID
2335      ,ORGANIZATION_ID
2336      ,INVENTORY_ITEM_ID
2337      ,ITEM_CATALOG_GROUP_ID
2338      ,ATTR_GROUP_ID
2339      ,CREATED_BY
2340      ,CREATION_DATE
2341      ,LAST_UPDATED_BY
2342      ,LAST_UPDATE_DATE
2343      ,N_EXT_ATTR1
2344      ,C_EXT_ATTR1
2345 --     ,C_EXT_ATTR2 -- commented out as a part of Bug 4906499
2346      ,C_EXT_ATTR4
2347      ,DATA_LEVEL_ID --Added for bug 6155995
2348     )
2349     SELECT EGO_EXTFWK_S.NEXTVAL
2350           ,MTL.ORGANIZATION_ID
2351           ,MTL.INVENTORY_ITEM_ID
2352           ,NVL(MTL.ITEM_CATALOG_GROUP_ID, -1)
2353           ,l_attr_group_id
2354           ,1
2355           ,SYSDATE
2356           ,1
2357           ,SYSDATE
2358           ,10
2359           ,'D'
2360 --          ,l_label  --commented out as a part of Bug 4906499
2361           ,'AsText'
2362     ,43102  --Added for bug 6155995
2363       FROM MTL_SYSTEM_ITEMS_INTERFACE MTL
2364      WHERE MTL.SET_PROCESS_ID = p_set_process_id
2365        AND MTL.PROCESS_FLAG = 4
2366        AND MTL.TRANSACTION_TYPE = 'CREATE';
2367 
2368     -----------------------------------------------------------------------------
2369     -- Insert corresponding rows in the TL table for each B table row we added --
2370     -----------------------------------------------------------------------------
2371     INSERT INTO EGO_MTL_SY_ITEMS_EXT_TL
2372     (
2373       EXTENSION_ID
2374      ,ORGANIZATION_ID
2375      ,INVENTORY_ITEM_ID
2376      ,ITEM_CATALOG_GROUP_ID
2377      ,ATTR_GROUP_ID
2378      ,SOURCE_LANG
2379      ,LANGUAGE
2380      ,CREATED_BY
2381      ,CREATION_DATE
2382      ,LAST_UPDATED_BY
2383      ,LAST_UPDATE_DATE
2384      ,TL_EXT_ATTR2  -- Added as a part of Bug 4906499
2385      ,DATA_LEVEL_ID --Added for bug 6155995
2386     )
2387     SELECT EXT.EXTENSION_ID
2388           ,EXT.ORGANIZATION_ID
2389           ,EXT.INVENTORY_ITEM_ID
2390           ,EXT.ITEM_CATALOG_GROUP_ID
2391           ,EXT.ATTR_GROUP_ID
2392           ,USERENV('LANG')
2393           ,L.LANGUAGE_CODE
2394           ,EXT.CREATED_BY
2395           ,EXT.CREATION_DATE
2396           ,EXT.LAST_UPDATED_BY
2397           ,EXT.LAST_UPDATE_DATE
2398          ,NVL(M.MESSAGE_TEXT,'Long Description')
2399    ,43102 --Added for bug 6155995
2400       FROM MTL_SYSTEM_ITEMS_INTERFACE MTL
2401           ,EGO_MTL_SY_ITEMS_EXT_B     EXT
2402           ,FND_LANGUAGES              L
2403           ,FND_NEW_MESSAGES           M
2404      WHERE MTL.SET_PROCESS_ID = p_set_process_id
2405        AND MTL.PROCESS_FLAG = 4
2406        AND MTL.TRANSACTION_TYPE = 'CREATE'
2407        AND MTL.ORGANIZATION_ID = EXT.ORGANIZATION_ID
2408        AND MTL.INVENTORY_ITEM_ID = EXT.INVENTORY_ITEM_ID
2409        AND EXT.ATTR_GROUP_ID = l_attr_group_id
2410        AND L.INSTALLED_FLAG IN ('I', 'B')
2411        AND MESSAGE_NAME = 'EGO_ITEM_LONG_DESCRIPTION'
2412        AND M.LANGUAGE_CODE = L.LANGUAGE_CODE
2413        AND M.APPLICATION_ID = 431;
2414 
2415     x_return_status := FND_API.G_RET_STS_SUCCESS;
2416 
2417   EXCEPTION
2418     WHEN OTHERS THEN
2419 
2420       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2421       x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
2422 
2423 END Seed_Item_Long_Desc_In_Bulk;
2424 
2425 -- -----------------------------------------------------------------------------
2426 --  API Name:      Build_Parent_Cat_Group_List
2427 --
2428 --  Description:
2429 --    This Function is copied from EGO_ITEM_USER_ATTRS_CP_PUB for Installation bug
2430 --    3873647.
2431 --    Gets the parent catalog group/categories list for a given catalog group/category code
2432 -- -----------------------------------------------------------------------------
2433 
2434 FUNCTION Build_Parent_Cat_Group_List (
2435         p_catalog_group_id              IN   NUMBER
2436        ,p_entity_id                     IN   NUMBER     DEFAULT NULL
2437        ,p_entity_index                  IN   NUMBER     DEFAULT NULL
2438        ,p_entity_code                   IN   VARCHAR2   DEFAULT NULL
2439 )
2440 RETURN VARCHAR2
2441 IS
2442 
2443     l_parent_cat_group_list  VARCHAR2(150) := '';
2444     l_token_table            ERROR_HANDLER.Token_Tbl_Type;
2445     l_dummy_transaction_id   NUMBER;
2446 
2447     -------------------------------------------------------------------------
2448     -- For finding all parent catalog groups for the current catalog group --
2449     -------------------------------------------------------------------------
2450     CURSOR parent_catalog_group_cursor
2451     IS
2452     SELECT ITEM_CATALOG_GROUP_ID
2453           ,PARENT_CATALOG_GROUP_ID
2454       FROM MTL_ITEM_CATALOG_GROUPS_B
2455    CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID = ITEM_CATALOG_GROUP_ID
2456      START WITH ITEM_CATALOG_GROUP_ID = p_catalog_group_id;
2457 
2458   BEGIN
2459 
2460     -------------------------------------------------------------------
2461     -- We build a list of all parent catalog groups, as long as the  --
2462     -- list is less than 151 characters long (the longest we can fit --
2463     -- into the EGO_COL_NAME_VALUE_PAIR_OBJ is 150 chars); if the    --
2464     -- list is too long to fully copy, we can only hope that the     --
2465     -- portion we copied will contain all the information we need.   --
2466     -------------------------------------------------------------------
2467     FOR cat_rec IN parent_catalog_group_cursor
2468     LOOP
2469       IF (cat_rec.PARENT_CATALOG_GROUP_ID IS NOT NULL) THEN
2470 
2471         l_parent_cat_group_list := l_parent_cat_group_list ||
2472                                    cat_rec.PARENT_CATALOG_GROUP_ID || ',';
2473       END IF;
2474     END LOOP;
2475 
2476     ---------------------------------------------------------------------
2477     -- Trim the trailing ',' from l_parent_cat_group_list if necessary --
2478     ---------------------------------------------------------------------
2479     IF (LENGTH(l_parent_cat_group_list) > 0) THEN
2480       l_parent_cat_group_list := SUBSTR(l_parent_cat_group_list, 1, LENGTH(l_parent_cat_group_list) - LENGTH(','));
2481     END IF;
2482 
2483     RETURN l_parent_cat_group_list;
2484 
2485   EXCEPTION
2486     WHEN OTHERS THEN
2487 
2488       l_token_table(1).TOKEN_NAME := 'CAT_GROUP_NAME';
2489       SELECT CONCATENATED_SEGMENTS
2490         INTO l_token_table(1).TOKEN_VALUE
2491         FROM MTL_ITEM_CATALOG_GROUPS_KFV
2492        WHERE ITEM_CATALOG_GROUP_ID = p_catalog_group_id;
2493 
2494       ERROR_HANDLER.Add_Error_Message(
2495         p_message_name                  => 'EGO_TOO_MANY_CAT_GROUPS'
2496        ,p_application_id                => 'EGO'
2497        ,p_token_tbl                     => l_token_table
2498        ,p_message_type                  => FND_API.G_RET_STS_ERROR
2499        ,p_entity_id                     => p_entity_id
2500        ,p_entity_index                  => p_entity_index
2501        ,p_entity_code                   => p_entity_code
2502       );
2503 
2504     ---------------------------------------------------------------------
2505     -- Trim the trailing ',' from l_parent_cat_group_list if necessary --
2506     ---------------------------------------------------------------------
2507     IF (LENGTH(l_parent_cat_group_list) > 0) THEN
2508       l_parent_cat_group_list := SUBSTR(l_parent_cat_group_list, 1, LENGTH(l_parent_cat_group_list) - LENGTH(','));
2509     END IF;
2510 
2511     RETURN l_parent_cat_group_list;
2512 
2513 END Build_Parent_Cat_Group_List;
2514 
2515 -- -----------------------------------------------------------------------------
2516 --  API Name:       Get_Related_Class_Codes
2517 --
2518 --  Description:
2519 --    This Procedure is copied from EGO_ITEM_USER_ATTRS_CP_PUB for Installation bug
2520 --    3873647.
2521 --    Gets the related classification codes list for a given classification code
2522 -- -----------------------------------------------------------------------------
2523 
2524 PROCEDURE Get_Related_Class_Codes (
2525         p_classification_code           IN   VARCHAR2
2526        ,p_entity_id                     IN   NUMBER     DEFAULT NULL
2527        ,p_entity_index                  IN   NUMBER     DEFAULT NULL
2528        ,p_entity_code                   IN   VARCHAR2   DEFAULT NULL
2529        ,x_related_class_codes_list      OUT NOCOPY VARCHAR2
2530 ) IS
2531 
2532 BEGIN
2533 
2534   x_related_class_codes_list :=
2535     Build_Parent_Cat_Group_List(TO_NUMBER(p_classification_code), p_entity_id, p_entity_index, p_entity_code);
2536 
2537 END Get_Related_Class_Codes;
2538 
2539 -- -----------------------------------------------------------------------------
2540 --  API Name:       Get_User_Attrs_Privs
2541 --
2542 --  Description:
2543 --    Helper function (private) to build a table of privileges;
2544 --    should never be exposed as a public API.  Raises an exception
2545 --    if anything fails.
2546 -- -----------------------------------------------------------------------------
2547 FUNCTION Get_User_Attrs_Privs (
2548         p_inventory_item_id             IN   NUMBER
2549        ,p_organization_id               IN   NUMBER
2550        ,p_entity_id                     IN   NUMBER     DEFAULT NULL
2551        ,p_entity_index                  IN   NUMBER     DEFAULT NULL
2552        ,p_entity_code                   IN   VARCHAR2   DEFAULT NULL
2553 )
2554 RETURN EGO_VARCHAR_TBL_TYPE
2555 IS
2556 
2557     l_party_id               VARCHAR2(30);
2558     l_return_status          VARCHAR2(1);
2559     l_user_privileges_table  EGO_DATA_SECURITY.EGO_PRIVILEGE_NAME_TABLE_TYPE;
2560     l_user_privileges_on_object EGO_VARCHAR_TBL_TYPE;
2561     l_privilege_table_index  NUMBER;
2562     l_token_table            ERROR_HANDLER.Token_Tbl_Type;
2563     l_api_name               CONSTANT VARCHAR2(30) := 'Get_User_Attrs_Privs';
2564   BEGIN
2565 
2566     --------------------------------------------------------------------------
2567     --           Get the party ID if we don't already know it               --
2568     --------------------------------------------------------------------------
2569 
2570     IF L_PARTY_ID IS NULL OR
2571        FND_GLOBAL.USER_NAME <> g_username THEN
2572 
2573       --
2574       -- New user - find out its party ID.
2575       --
2576 
2577       -------------------------------------------------------------
2578       -- This query assumes that the user is logged in correctly --
2579       -------------------------------------------------------------
2580 
2581       BEGIN
2582         SELECT 'HZ_PARTY:'||TO_CHAR(PARTY_ID)
2583           INTO l_party_id
2584           FROM EGO_USER_V
2585          WHERE USER_NAME = FND_GLOBAL.USER_NAME;
2586       EXCEPTION
2587         WHEN NO_DATA_FOUND THEN
2588 
2589           ERROR_HANDLER.Add_Error_Message(
2590             p_message_name                  => 'EGO_EF_NO_NAME_TO_VALIDATE'
2591            ,p_application_id                => 'EGO'
2592            ,p_message_type                  => FND_API.G_RET_STS_ERROR
2593            ,p_entity_id                     => p_entity_id
2594            ,p_entity_index                  => p_entity_index
2595            ,p_entity_code                   => p_entity_code
2596           );
2597 
2598           RAISE FND_API.G_EXC_ERROR;
2599 
2600       END;
2601 
2602       ------------------- BEGIN Bug 6531908 -----------------------------------
2603 
2604       code_debug(l_api_name ||
2605                  ' Writing username to party ID mapping to cache.' );
2606 
2607       -- Cache this most recent username to party ID mapping to avoid
2608       -- redundantly performing this lookup again.
2609       g_party_id := l_party_id;
2610       g_username := FND_GLOBAL.USER_NAME;
2611 
2612     ELSE
2613 
2614       -- Bug 6531908: The user is the same as previously, so reuse the same
2615       -- party ID as that determined previously.
2616       l_party_id := g_party_id;
2617 
2618       code_debug(l_api_name||' Querying cached party ID.' );
2619 
2620 
2621     END IF;
2622 
2623      ---------------------- END Bug 6531908 -----------------------------------
2624 
2625 
2626     EGO_DATA_SECURITY.Get_Functions(
2627       p_api_version         => 1.0
2628      ,p_object_name         => 'EGO_ITEM'
2629      ,p_instance_pk1_value  => p_inventory_item_id
2630      ,p_instance_pk2_value  => p_organization_id
2631      ,p_user_name           => l_party_id
2632      ,x_return_status       => l_return_status
2633      ,x_privilege_tbl       => l_user_privileges_table
2634     );
2635 
2636     ---------------------------------------------------------------------
2637     -- If the user has privileges on this instance, we need to convert --
2638     -- the table we have into a table of type EGO_VARCHAR_TBL_TYPE     --
2639     ---------------------------------------------------------------------
2640     IF (l_return_status = 'T' AND
2641         l_user_privileges_table.COUNT > 0) THEN
2642 
2643       l_user_privileges_on_object := EGO_VARCHAR_TBL_TYPE();
2644 
2645       l_privilege_table_index := l_user_privileges_table.FIRST;
2646       WHILE (l_privilege_table_index <= l_user_privileges_table.LAST)
2647       LOOP
2648         l_user_privileges_on_object.EXTEND();
2649         l_user_privileges_on_object(l_user_privileges_on_object.LAST) := l_user_privileges_table(l_privilege_table_index);
2650         l_privilege_table_index := l_user_privileges_table.NEXT(l_privilege_table_index);
2651       END LOOP;
2652 
2653     ELSE
2654 
2655       -----------------------------------------------
2656       -- If Get_Functions failed, report the error --
2657       -----------------------------------------------
2658       DECLARE
2659 
2660         l_error_message_name VARCHAR2(30);
2661         l_org_code           MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
2662         l_item_number        MTL_SYSTEM_ITEMS_KFV.CONCATENATED_SEGMENTS%TYPE;
2663 
2664       BEGIN
2665 
2666         IF (l_return_status = 'F') THEN
2667           l_error_message_name := 'EGO_EF_BL_NO_PRIVS_ON_INSTANCE';
2668         ELSE
2669           l_error_message_name := 'EGO_EF_BL_PRIV_CHECK_ERROR';
2670         END IF;
2671 
2672         SELECT CONCATENATED_SEGMENTS
2673           INTO l_item_number
2674           FROM MTL_SYSTEM_ITEMS_KFV
2675          WHERE INVENTORY_ITEM_ID = p_inventory_item_id
2676            AND ORGANIZATION_ID = p_organization_id;
2677 
2678         SELECT ORGANIZATION_CODE
2679           INTO l_org_code
2680           FROM MTL_PARAMETERS
2681          WHERE ORGANIZATION_ID = p_organization_id;
2682 
2683         l_token_table(1).TOKEN_NAME := 'USER_NAME';
2684         l_token_table(1).TOKEN_VALUE := FND_GLOBAL.USER_NAME;
2685         l_token_table(2).TOKEN_NAME := 'ITEM_NUMBER';
2686         l_token_table(2).TOKEN_VALUE := l_item_number;
2687         l_token_table(3).TOKEN_NAME := 'ORG_CODE';
2688         l_token_table(3).TOKEN_VALUE := l_org_code;
2689 
2690         ERROR_HANDLER.Add_Error_Message(
2691           p_message_name                  => l_error_message_name
2692          ,p_application_id                => 'EGO'
2693          ,p_token_tbl                     => l_token_table
2694          ,p_message_type                  => FND_API.G_RET_STS_ERROR
2695          ,p_entity_id                     => p_entity_id
2696          ,p_entity_index                  => p_entity_index
2697          ,p_entity_code                   => p_entity_code
2698         );
2699 
2700         RAISE FND_API.G_EXC_ERROR;
2701 
2702       END;
2703     END IF;
2704 
2705     RETURN l_user_privileges_on_object;
2706 
2707 END Get_User_Attrs_Privs;
2708 
2709 -- -----------------------------------------------------------------------------
2710 --  API Name:       Process_User_Attrs_For_Item
2711 --
2712 --  Description:
2713 --    Process passed-in User-Defined Attrs data for
2714 --    the Item whose Primary Keys are passed in
2715 -- -----------------------------------------------------------------------------
2716 PROCEDURE Process_User_Attrs_For_Item (
2717         p_api_version                   IN   NUMBER
2718        ,p_inventory_item_id             IN   NUMBER
2719        ,p_organization_id               IN   NUMBER
2720        ,p_attributes_row_table          IN   EGO_USER_ATTR_ROW_TABLE
2721        ,p_attributes_data_table         IN   EGO_USER_ATTR_DATA_TABLE
2722        ,p_change_info_table             IN   EGO_USER_ATTR_CHANGE_TABLE DEFAULT NULL
2723        ,p_entity_id                     IN   NUMBER     DEFAULT NULL
2724        ,p_entity_index                  IN   NUMBER     DEFAULT NULL
2725        ,p_entity_code                   IN   VARCHAR2   DEFAULT NULL
2726        ,p_debug_level                   IN   NUMBER     DEFAULT 0
2727        ,p_init_error_handler            IN   VARCHAR2   DEFAULT FND_API.G_TRUE
2728        ,p_write_to_concurrent_log       IN   VARCHAR2   DEFAULT FND_API.G_FALSE
2729        ,p_init_fnd_msg_list             IN   VARCHAR2   DEFAULT FND_API.G_FALSE
2730        ,p_log_errors                    IN   VARCHAR2   DEFAULT FND_API.G_TRUE
2731        ,p_add_errors_to_fnd_stack       IN   VARCHAR2   DEFAULT FND_API.G_FALSE
2732        ,p_commit                        IN   VARCHAR2   DEFAULT FND_API.G_FALSE
2733        ,p_do_policy_check               IN   VARCHAR2   DEFAULT FND_API.G_TRUE
2734        ,p_validate_hierarchy            IN   VARCHAR2   DEFAULT FND_API.G_TRUE--Added for bugFix:5275391
2735        ,x_failed_row_id_list            OUT NOCOPY VARCHAR2
2736        ,x_return_status                 OUT NOCOPY VARCHAR2
2737        ,x_errorcode                     OUT NOCOPY NUMBER
2738        ,x_msg_count                     OUT NOCOPY NUMBER
2739        ,x_msg_data                      OUT NOCOPY VARCHAR2
2740 ) IS
2741 
2742     l_api_name               CONSTANT VARCHAR2(30) := 'Process_User_Attrs_For_Item';
2743 
2744     l_pk_column_values       EGO_COL_NAME_VALUE_PAIR_ARRAY;
2745     l_class_code_values      EGO_COL_NAME_VALUE_PAIR_ARRAY;
2746     l_item_catalog_group_id  NUMBER;
2747     l_related_class_codes_list VARCHAR2(150);
2748     l_user_privileges_on_object EGO_VARCHAR_TBL_TYPE;
2749     l_token_table            ERROR_HANDLER.Token_Tbl_Type;
2750     l_attributes_row_table   EGO_USER_ATTR_ROW_TABLE;
2751     l_return_status VARCHAR2(2);
2752 
2753   BEGIN
2754     l_attributes_row_table:=EGO_USER_ATTR_ROW_TABLE();
2755     -------------------------------------------------------------------------
2756     -- First we build tables of Primary Key and Classification Code values --
2757     -------------------------------------------------------------------------
2758 
2759     -----------------------
2760     -- Get PKs organized --
2761     -----------------------
2762     l_pk_column_values :=
2763       EGO_COL_NAME_VALUE_PAIR_ARRAY(
2764         EGO_COL_NAME_VALUE_PAIR_OBJ('INVENTORY_ITEM_ID', TO_CHAR(p_inventory_item_id))
2765        ,EGO_COL_NAME_VALUE_PAIR_OBJ('ORGANIZATION_ID', TO_CHAR(p_organization_id))
2766       );
2767 
2768     -----------------------------------------------------------------
2769     -- Get the Item Catalog Group ID as well as a comma-delimited  --
2770     -- list of all parent Catalog Group IDs, which we then pass as --
2771     -- the second element in this array (Item Catalog Group ID is  --
2772     -- Item's Classification Code)                                 --
2773     -----------------------------------------------------------------
2774     -- Bug: 5636895 added NVL(ITEM...., -1)
2775     BEGIN
2776       SELECT NVL(ITEM_CATALOG_GROUP_ID, -1)
2777         INTO l_item_catalog_group_id
2778         FROM MTL_SYSTEM_ITEMS_B
2779        WHERE INVENTORY_ITEM_ID = p_inventory_item_id
2780          AND ORGANIZATION_ID = p_organization_id;
2781     EXCEPTION
2782       WHEN NO_DATA_FOUND THEN
2783 
2784         ----------------------------------------------------
2785         -- If the passed-in PKs are bad, report the error --
2786         ----------------------------------------------------
2787         l_token_table(1).TOKEN_NAME := 'ITEM_ID';
2788         l_token_table(1).TOKEN_VALUE := p_inventory_item_id;
2789 
2790         IF (FND_API.To_Boolean(p_add_errors_to_fnd_stack)) THEN
2791           ERROR_HANDLER.Add_Error_Message(
2792             p_message_name                  => 'EGO_EF_BL_INV_ITEM_ID_ERR'
2793            ,p_application_id                => 'EGO'
2794            ,p_token_tbl                     => l_token_table
2795            ,p_message_type                  => FND_API.G_RET_STS_ERROR
2796            ,p_entity_id                     => p_entity_id
2797            ,p_entity_index                  => p_entity_index
2798            ,p_entity_code                   => p_entity_code
2799            ,p_addto_fnd_stack               => 'Y'
2800           );
2801         ELSE
2802           ERROR_HANDLER.Add_Error_Message(
2803             p_message_name                  => 'EGO_EF_BL_INV_ITEM_ID_ERR'
2804            ,p_application_id                => 'EGO'
2805            ,p_token_tbl                     => l_token_table
2806            ,p_message_type                  => FND_API.G_RET_STS_ERROR
2807            ,p_entity_id                     => p_entity_id
2808            ,p_entity_index                  => p_entity_index
2809            ,p_entity_code                   => p_entity_code
2810           );
2811         END IF;
2812 
2813         RAISE FND_API.G_EXC_ERROR;
2814 
2815     END;
2816 
2817     Get_Related_Class_Codes(
2818       l_item_catalog_group_id
2819       ,p_entity_id
2820       ,p_entity_index
2821       ,p_entity_code
2822      ,l_related_class_codes_list
2823     );
2824 
2825     l_class_code_values :=
2826       EGO_COL_NAME_VALUE_PAIR_ARRAY(
2827         EGO_COL_NAME_VALUE_PAIR_OBJ('ITEM_CATALOG_GROUP_ID', TO_CHAR(l_item_catalog_group_id))
2828        ,EGO_COL_NAME_VALUE_PAIR_OBJ('RELATED_CLASS_CODE_LIST_1', l_related_class_codes_list)
2829       );
2830 
2831     ---------------------------------------------------------------
2832     -- Next, we build our privileges table for the current user; --
2833     -- any error in this helper function will be raised as an    --
2834     -- exception, which will prevent us from calling PUAD at all --
2835     ---------------------------------------------------------------
2836     l_user_privileges_on_object := Get_User_Attrs_Privs(
2837                                      p_inventory_item_id,
2838                                      p_organization_id,
2839                                      p_entity_id,
2840                                      p_entity_index,
2841                                      p_entity_code
2842                                    );
2843 
2844     ---------------------------------------------------------------
2845     -- we are calling the API to check and error out if  an attribute
2846     --update needs to have a change order or update is not allowed.
2847     ---------------------------------------------------------------
2848 IF (p_do_policy_check = FND_API.G_TRUE ) THEN
2849     l_attributes_row_table:=
2850                   Remove_Rows_After_Policy_Check(
2851                            p_inventory_item_id => p_inventory_item_id
2852                            ,p_organization_id => p_organization_id
2853                            ,p_attributes_row_table => p_attributes_row_table
2854                            ,p_entity_id => p_entity_id
2855                            ,p_entity_code => p_entity_code
2856                            ,x_return_status => l_return_status
2857                            );
2858 ELSE
2859     l_attributes_row_table:=p_attributes_row_table;
2860 END IF;
2861 --writing the errors to the log
2862 IF (l_return_status=FND_API.G_RET_STS_ERROR) THEN
2863             ERROR_HANDLER.Log_Error(
2864               p_write_err_to_inttable         => 'Y'
2865              ,p_write_err_to_debugfile        => ERROR_HANDLER.Get_Debug()
2866             );
2867 END IF;
2868 
2869     ---------------------------------------------------------------
2870     -- If all went well with retrieving privileges, we call PUAD --
2871     ---------------------------------------------------------------
2872     EGO_USER_ATTRS_DATA_PVT.Process_User_Attrs_Data(
2873       p_api_version                   => 1.0
2874      ,p_object_name                   => 'EGO_ITEM'
2875      ,p_attributes_row_table          => l_attributes_row_table
2876      ,p_attributes_data_table         => p_attributes_data_table
2877      ,p_pk_column_name_value_pairs    => l_pk_column_values
2878      ,p_class_code_name_value_pairs   => l_class_code_values
2879      ,p_user_privileges_on_object     => l_user_privileges_on_object
2880      ,p_change_info_table             => p_change_info_table
2881      --,p_pending_b_table_name          => 'EGO_ITEMS_ATTRS_CHANGES_B'
2882      --,p_pending_tl_table_name         => 'EGO_ITEMS_ATTRS_CHANGES_TL'
2883      --,p_pending_vl_name               => 'EGO_ITEMS_ATTRS_CHANGES_VL'
2884      ,p_entity_id                     => p_entity_id
2885      ,p_entity_index                  => p_entity_index
2886      ,p_entity_code                   => p_entity_code
2887      ,p_debug_level                   => p_debug_level
2888      ,p_validate_hierarchy            => p_validate_hierarchy
2889      ,p_init_error_handler            => p_init_error_handler
2890      ,p_write_to_concurrent_log       => p_write_to_concurrent_log
2891      ,p_init_fnd_msg_list             => p_init_fnd_msg_list
2892      ,p_log_errors                    => p_log_errors
2893      ,p_add_errors_to_fnd_stack       => p_add_errors_to_fnd_stack
2894      ,p_commit                        => p_commit
2895      ,x_failed_row_id_list            => x_failed_row_id_list
2896      ,x_return_status                 => x_return_status
2897      ,x_errorcode                     => x_errorcode
2898      ,x_msg_count                     => x_msg_count
2899      ,x_msg_data                      => x_msg_data
2900     );
2901 
2902   EXCEPTION
2903     WHEN FND_API.G_EXC_ERROR THEN
2904 
2905       x_return_status := FND_API.G_RET_STS_ERROR;
2906 
2907       x_msg_count := ERROR_HANDLER.Get_Message_Count();
2908 
2909       IF (x_msg_count > 0) THEN
2910         IF (FND_API.To_Boolean(p_log_errors)) THEN
2911           IF (FND_API.To_Boolean(p_write_to_concurrent_log)) THEN
2912             ERROR_HANDLER.Log_Error(
2913               p_write_err_to_inttable         => 'Y'
2914              ,p_write_err_to_conclog          => 'Y'
2915              ,p_write_err_to_debugfile        => ERROR_HANDLER.Get_Debug()
2916             );
2917           ELSE
2918             ERROR_HANDLER.Log_Error(
2919               p_write_err_to_inttable         => 'Y'
2920              ,p_write_err_to_debugfile        => ERROR_HANDLER.Get_Debug()
2921             );
2922           END IF;
2923         END IF;
2924 
2925         IF (x_msg_count = 1) THEN
2926           DECLARE
2927             message_list  ERROR_HANDLER.Error_Tbl_Type;
2928           BEGIN
2929             ERROR_HANDLER.Get_Message_List(message_list);
2930             x_msg_data := message_list(message_list.FIRST).message_text;
2931           END;
2932         ELSE
2933           x_msg_data := NULL;
2934         END IF;
2935       END IF;
2936 
2937     WHEN OTHERS THEN
2938 
2939       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2940 
2941       DECLARE
2942         l_dummy_entity_index     NUMBER;
2943         l_dummy_entity_id        VARCHAR2(60);
2944         l_dummy_message_type     VARCHAR2(1);
2945       BEGIN
2946         l_token_table(1).TOKEN_NAME := 'PKG_NAME';
2947         l_token_table(1).TOKEN_VALUE := G_PKG_NAME;
2948         l_token_table(2).TOKEN_NAME := 'API_NAME';
2949         l_token_table(2).TOKEN_VALUE := l_api_name;
2950         l_token_table(3).TOKEN_NAME := 'SQL_ERR_MSG';
2951         l_token_table(3).TOKEN_VALUE := SQLERRM;
2952 
2953         IF (FND_API.To_Boolean(p_add_errors_to_fnd_stack)) THEN
2954           ERROR_HANDLER.Add_Error_Message(
2955             p_message_name                  => 'EGO_PLSQL_ERR'
2956            ,p_application_id                => 'EGO'
2957            ,p_token_tbl                     => l_token_table
2958            ,p_message_type                  => FND_API.G_RET_STS_ERROR
2959            ,p_addto_fnd_stack               => 'Y'
2960           );
2961         ELSE
2962           ERROR_HANDLER.Add_Error_Message(
2963             p_message_name                  => 'EGO_PLSQL_ERR'
2964            ,p_application_id                => 'EGO'
2965            ,p_token_tbl                     => l_token_table
2966            ,p_message_type                  => FND_API.G_RET_STS_ERROR
2967           );
2968         END IF;
2969 
2970         ERROR_HANDLER.Get_Message(x_message_text => x_msg_data
2971                                  ,x_entity_index => l_dummy_entity_index
2972                                  ,x_entity_id    => l_dummy_entity_id
2973                                  ,x_message_type => l_dummy_message_type);
2974 
2975       END;
2976 
2977 END Process_User_Attrs_For_Item;
2978 
2979 -- -----------------------------------------------------------------------------
2980 --  API Name:       Get_User_Attrs_For_Item
2981 --
2982 --  Description:
2983 --    Fetch passed-in User-Defined Attrs data for
2984 --    the Item whose Primary Keys are passed in
2985 -- -----------------------------------------------------------------------------
2986 PROCEDURE Get_User_Attrs_For_Item (
2987         p_api_version                   IN   NUMBER
2988        ,p_inventory_item_id             IN   NUMBER
2989        ,p_organization_id               IN   NUMBER
2990        ,p_attr_group_request_table      IN   EGO_ATTR_GROUP_REQUEST_TABLE
2991        ,p_entity_id                     IN   NUMBER     DEFAULT NULL
2992        ,p_entity_index                  IN   NUMBER     DEFAULT NULL
2993        ,p_entity_code                   IN   VARCHAR2   DEFAULT NULL
2994        ,p_debug_level                   IN   NUMBER     DEFAULT 0
2995        ,p_init_error_handler            IN   VARCHAR2   DEFAULT FND_API.G_TRUE
2996        ,p_init_fnd_msg_list             IN   VARCHAR2   DEFAULT FND_API.G_FALSE
2997        ,p_add_errors_to_fnd_stack       IN   VARCHAR2   DEFAULT FND_API.G_FALSE
2998        ,p_commit                        IN   VARCHAR2   DEFAULT FND_API.G_FALSE
2999        ,x_attributes_row_table          OUT NOCOPY EGO_USER_ATTR_ROW_TABLE
3000        ,x_attributes_data_table         OUT NOCOPY EGO_USER_ATTR_DATA_TABLE
3001        ,x_return_status                 OUT NOCOPY VARCHAR2
3002        ,x_errorcode                     OUT NOCOPY NUMBER
3003        ,x_msg_count                     OUT NOCOPY NUMBER
3004        ,x_msg_data                      OUT NOCOPY VARCHAR2
3005 ) IS
3006 
3007     l_api_name               CONSTANT VARCHAR2(30) := 'Get_User_Attrs_For_Item';
3008 
3009     l_pk_column_values       EGO_COL_NAME_VALUE_PAIR_ARRAY;
3010     l_user_privileges_on_object EGO_VARCHAR_TBL_TYPE;
3011 
3012   BEGIN
3013 	x_attributes_row_table := EGO_USER_ATTR_ROW_TABLE(NULL);--Bug 14140340
3014     -----------------------
3015     -- Get PKs organized --
3016     -----------------------
3017     l_pk_column_values :=
3018       EGO_COL_NAME_VALUE_PAIR_ARRAY(
3019         EGO_COL_NAME_VALUE_PAIR_OBJ('INVENTORY_ITEM_ID', TO_CHAR(p_inventory_item_id))
3020        ,EGO_COL_NAME_VALUE_PAIR_OBJ('ORGANIZATION_ID', TO_CHAR(p_organization_id))
3021       );
3022 
3023     ---------------------------------------------------------------
3024     -- Next, we build our privileges table for the current user; --
3025     -- any error in this helper function will be raised as an    --
3026     -- exception, which will prevent us from calling GUAD at all --
3027     ---------------------------------------------------------------
3028     l_user_privileges_on_object := Get_User_Attrs_Privs(
3029                                      p_inventory_item_id,
3030                                      p_organization_id,
3031                                      p_entity_id,
3032                                      p_entity_index,
3033                                      p_entity_code
3034                                    );
3035 
3036     ---------------------------------------------------------------
3037     -- If all went well with retrieving privileges, we call GUAD --
3038     ---------------------------------------------------------------
3039     EGO_USER_ATTRS_DATA_PUB.Get_User_Attrs_Data(
3040       p_api_version                   => p_api_version
3041      ,p_object_name                   => 'EGO_ITEM'
3042      ,p_pk_column_name_value_pairs    => l_pk_column_values
3043      ,p_attr_group_request_table      => p_attr_group_request_table
3044      ,p_user_privileges_on_object     => l_user_privileges_on_object
3045      ,p_entity_id                     => p_entity_id
3046      ,p_entity_index                  => p_entity_index
3047      ,p_entity_code                   => p_entity_code
3048      ,p_debug_level                   => p_debug_level
3049      ,p_init_error_handler            => p_init_error_handler
3050      ,p_init_fnd_msg_list             => p_init_fnd_msg_list
3051      ,p_add_errors_to_fnd_stack       => p_add_errors_to_fnd_stack
3052      ,p_commit                        => p_commit
3053      ,x_attributes_row_table          => x_attributes_row_table
3054      ,x_attributes_data_table         => x_attributes_data_table
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 
3061 
3062   EXCEPTION
3063     WHEN FND_API.G_EXC_ERROR THEN
3064 
3065       x_return_status := FND_API.G_RET_STS_ERROR;
3066 
3067       x_msg_count := ERROR_HANDLER.Get_Message_Count();
3068 
3069       IF (x_msg_count > 0) THEN
3070         ERROR_HANDLER.Log_Error(
3071           p_write_err_to_inttable         => 'Y'
3072          ,p_write_err_to_debugfile        => ERROR_HANDLER.Get_Debug()
3073         );
3074 
3075         IF (x_msg_count = 1) THEN
3076           DECLARE
3077             message_list  ERROR_HANDLER.Error_Tbl_Type;
3078           BEGIN
3079             ERROR_HANDLER.Get_Message_List(message_list);
3080             x_msg_data := message_list(message_list.FIRST).message_text;
3081           END;
3082         ELSE
3083           x_msg_data := NULL;
3084         END IF;
3085       END IF;
3086 
3087     WHEN OTHERS THEN
3088 
3089       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3090 
3091       DECLARE
3092         l_token_table            ERROR_HANDLER.Token_Tbl_Type;
3093         l_dummy_entity_index     NUMBER;
3094         l_dummy_entity_id        VARCHAR2(60);
3095         l_dummy_message_type     VARCHAR2(1);
3096       BEGIN
3097         l_token_table(1).TOKEN_NAME := 'PKG_NAME';
3098         l_token_table(1).TOKEN_VALUE := G_PKG_NAME;
3099         l_token_table(2).TOKEN_NAME := 'API_NAME';
3100         l_token_table(2).TOKEN_VALUE := l_api_name;
3101         l_token_table(3).TOKEN_NAME := 'SQL_ERR_MSG';
3102         l_token_table(3).TOKEN_VALUE := SQLERRM;
3103 
3104         IF (FND_API.To_Boolean(p_add_errors_to_fnd_stack)) THEN
3105           ERROR_HANDLER.Add_Error_Message(
3106             p_message_name                  => 'EGO_PLSQL_ERR'
3107            ,p_application_id                => 'EGO'
3108            ,p_token_tbl                     => l_token_table
3109            ,p_message_type                  => FND_API.G_RET_STS_ERROR
3110            ,p_addto_fnd_stack               => 'Y'
3111           );
3112         ELSE
3113           ERROR_HANDLER.Add_Error_Message(
3114             p_message_name                  => 'EGO_PLSQL_ERR'
3115            ,p_application_id                => 'EGO'
3116            ,p_token_tbl                     => l_token_table
3117            ,p_message_type                  => FND_API.G_RET_STS_ERROR
3118           );
3119         END IF;
3120 
3121         ERROR_HANDLER.Get_Message(x_message_text => x_msg_data
3122                                  ,x_entity_index => l_dummy_entity_index
3123                                  ,x_entity_id    => l_dummy_entity_id
3124                                  ,x_message_type => l_dummy_message_type);
3125 
3126       END;
3127 
3128 END Get_User_Attrs_For_Item;
3129 
3130 -- -----------------------------------------------------------------------------
3131 --  API Name:       Generate_Seq_For_Item_Catalog
3132 --
3133 --  Description:
3134 --  Generates the Item Sequence For Number Generation
3135 -- -----------------------------------------------------------------------------
3136 PROCEDURE Generate_Seq_For_Item_Catalog (
3137        p_item_catalog_group_id          IN  NUMBER
3138        ,p_seq_start_num                 IN  NUMBER
3139        ,p_seq_increment_by              IN  NUMBER
3140        ,x_return_status                 OUT NOCOPY VARCHAR2
3141        ,x_errorcode                     OUT NOCOPY NUMBER
3142        ,x_msg_count                     OUT NOCOPY NUMBER
3143        ,x_msg_data                      OUT NOCOPY VARCHAR2
3144 )IS
3145     l_api_name               CONSTANT VARCHAR2(50) := 'Generate_Sequence_For_Item_Catalog';
3146     l_seq_name               VARCHAR2(100);
3147     l_syn_name               VARCHAR2(100);
3148     l_seq_name_prefix        VARCHAR2(70) ;
3149     l_syn_name_prefix        CONSTANT VARCHAR2(70) := 'ITEM_NUM_SEQ_';
3150     l_seq_name_suffix        CONSTANT VARCHAR2(10) := '_S' ;
3151     l_dyn_sql                VARCHAR2(100);
3152 
3153     l_status                 VARCHAR2(1);
3154     l_industry               VARCHAR2(1);
3155     l_schema                 VARCHAR2(30);
3156 
3157      fnd_apps_schema      VARCHAR2(30) := NULL;
3158     h_status             VARCHAR2(2000);
3159     h_industry           VARCHAR2(2000);
3160     h_x                  BOOLEAN;
3161 
3162 BEGIN
3163 
3164     h_x := FND_INSTALLATION.Get_App_Info('FND', h_status, h_industry, fnd_apps_schema);
3165 
3166     IF FND_INSTALLATION.GET_APP_INFO('INV', l_status, l_industry, l_schema) THEN
3167        IF l_schema IS NULL    THEN
3168           Raise_Application_Error (-20001, 'INV Schema could not be located.');
3169        END IF;
3170     ELSE
3171        Raise_Application_Error (-20001, 'INV Schema could not be located.');
3172     END IF;
3173 
3174     --l_seq_name_prefix := l_schema ||'.'||'ITEM_NUM_SEQ_';
3175      l_seq_name_prefix := 'ITEM_NUM_SEQ_';
3176      l_seq_name  := l_seq_name_prefix || p_item_catalog_group_id || l_seq_name_suffix;
3177      l_dyn_sql   := 'CREATE SEQUENCE '||l_seq_name||' INCREMENT BY '||p_seq_increment_by||' START WITH '||p_seq_start_num || ' NOCACHE';
3178 
3179      --bugfix 11907422 for 12.2 AD_DDL changes
3180     --EXECUTE IMMEDIATE l_dyn_sql;
3181 
3182     AD_DDL.DO_DDL(fnd_apps_schema, l_schema, AD_DDL.CREATE_SEQUENCE,l_dyn_sql, l_seq_name);
3183 
3184 
3185     l_syn_name  := l_syn_name_prefix || p_item_catalog_group_id || l_seq_name_suffix;
3186     l_dyn_sql   := 'CREATE SYNONYM '||l_syn_name||' FOR '||l_schema ||'.'||l_seq_name;
3187 
3188     --bugfix 11907422 for 12.2 AD_DDL changes
3189    -- EXECUTE IMMEDIATE l_dyn_sql;
3190     --comment this line since AD_DDL.DO_DDL will create synonym for us, 12392423
3191     --AD_DDL.DO_DDL(fnd_apps_schema, fnd_apps_schema, ad_ddl.create_synonym,l_dyn_sql, l_syn_name);
3192 EXCEPTION
3193    WHEN others THEN
3194       x_return_status  :=  G_RET_STS_UNEXP_ERROR;
3195       x_msg_data := G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
3196 END Generate_Seq_For_Item_Catalog;
3197 
3198 ----------------------------------------------------------------------
3199 -- -----------------------------------------------------------------------------
3200 --  API Name:       Drop_Sequence_For_Item_Catalog
3201 --
3202 --  Description:
3203 --  Drops the Item Sequence For Number Generation
3204 -- -----------------------------------------------------------------------------
3205 PROCEDURE Drop_Sequence_For_Item_Catalog (
3206        p_item_catalog_seq_name         IN  VARCHAR2
3207        ,x_return_status                OUT NOCOPY VARCHAR2
3208        ,x_errorcode                    OUT NOCOPY NUMBER
3209        ,x_msg_count                    OUT NOCOPY NUMBER
3210        ,x_msg_data                     OUT NOCOPY VARCHAR2)
3211 IS
3212     l_api_name               CONSTANT VARCHAR2(50) := 'Drop_Sequence_For_Item_Catalog';
3213     l_dyn_sql                VARCHAR2(100);
3214     l_status                 VARCHAR2(1);
3215     l_industry               VARCHAR2(1);
3216     l_schema                 VARCHAR2(30);
3217 
3218     fnd_apps_schema      VARCHAR2(30) := NULL;
3219     h_status             VARCHAR2(2000);
3220     h_industry           VARCHAR2(2000);
3221     h_x                  BOOLEAN;
3222 BEGIN
3223 
3224     h_x := FND_INSTALLATION.Get_App_Info('FND', h_status, h_industry, fnd_apps_schema);
3225 
3226     IF FND_INSTALLATION.GET_APP_INFO('INV', l_status, l_industry, l_schema) THEN
3227        IF l_schema IS NULL    THEN
3228           Raise_Application_Error (-20001, 'INV Schema could not be located.');
3229        END IF;
3230     ELSE
3231        Raise_Application_Error (-20001, 'INV Schema could not be located.');
3232     END IF;
3233 
3234     l_dyn_sql   := 'DROP SYNONYM '||p_item_catalog_seq_name;
3235     --bugfix 11907422 for 12.2 AD_DDL changes
3236     --EXECUTE IMMEDIATE l_dyn_sql;
3237 
3238     --comment this line since AD_DDL.DO_DDL will drop synonym for us, 12392423
3239     --AD_DDL.DO_DDL(fnd_apps_schema,fnd_apps_schema, ad_ddl.drop_synonym,l_dyn_sql, p_item_catalog_seq_name);
3240 
3241 
3242     -- l_dyn_sql   := 'DROP SEQUENCE '||l_schema||'.'||p_item_catalog_seq_name;
3243     l_dyn_sql   := 'DROP SEQUENCE '||p_item_catalog_seq_name;
3244     --bugfix 11907422 for 12.2 AD_DDL changes
3245    -- EXECUTE IMMEDIATE l_dyn_sql;
3246 
3247     AD_DDL.DO_DDL(fnd_apps_schema, l_schema, ad_ddl.drop_sequence,l_dyn_sql, p_item_catalog_seq_name);
3248 EXCEPTION
3249    WHEN others THEN
3250       x_return_status  :=  G_RET_STS_UNEXP_ERROR;
3251       x_msg_data := G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
3252 END Drop_Sequence_For_Item_Catalog;
3253 
3254 
3255 -- -----------------------------------------------------------------------------
3256 --  API Name:       has_role_on_item
3257 --
3258 --  Description:
3259 --    API to check whether the user has a role on Item or Not
3260 --    TRUE if the user has the specified role on the item
3261 --    FALSE if the user does not have the specified role on the item
3262 --
3263 -- -----------------------------------------------------------------------------
3264 FUNCTION has_role_on_item (p_function_name     IN VARCHAR2
3265                           ,p_instance_type     IN VARCHAR2 DEFAULT 'UNIVERSAL'
3266                           ,p_inventory_item_id IN NUMBER
3267                           ,p_item_number       IN VARCHAR2
3268                           ,p_organization_id   IN VARCHAR2
3269                           ,p_organization_name IN VARCHAR2
3270                           ,p_user_id           IN NUMBER
3271                           ,p_party_id          IN NUMBER
3272                           ,p_set_message       IN VARCHAR2
3273                           ) RETURN BOOLEAN IS
3274   TYPE dynamic_cur IS REF CURSOR;
3275   c_priv_cursor     dynamic_cur;
3276   l_owner_party_id     hz_parties.party_id%TYPE;
3277   l_owner_party_name   hz_parties.party_name%TYPE;
3278   l_sec_predicate   VARCHAR2(32767);
3279   l_return_status   VARCHAR2(10);
3280   l_select_sql      VARCHAR2(32767);
3281   l_dummy_number    NUMBER;
3282   l_dummy_char      VARCHAR2(32767);
3283 
3284 
3285   CURSOR c_user_party_id (cp_user_id IN NUMBER) IS
3286      SELECT party_id, party_name
3287      FROM   ego_user_v
3288      WHERE  user_id  = cp_user_id;
3289 
3290   CURSOR c_user_party_name (cp_party_id IN NUMBER) IS
3291      SELECT party_name
3292      FROM   hz_parties
3293      WHERE  party_id = cp_party_id;
3294 
3295 
3296 BEGIN
3297   l_owner_party_name := NULL;
3298   IF p_user_id IS NULL THEN
3299     OPEN c_user_party_id(cp_user_id => FND_GLOBAL.User_Id);
3300   ELSE
3301     OPEN c_user_party_id(cp_user_id => p_user_id);
3302   END IF;
3303   FETCH c_user_party_id INTO l_owner_party_id, l_owner_party_name;
3304   IF c_user_party_id%NOTFOUND THEN
3305     CLOSE c_user_party_id;
3306     --
3307     -- user is not registered properly
3308     --
3309     fnd_message.Set_Name(G_APP_NAME, 'EGO_NO_FUNC_PRIVILEGE_FOR_USER');
3310     IF FND_API.To_Boolean(p_set_message) THEN
3311       fnd_msg_pub.Add;
3312     END IF;
3313     RETURN FALSE;
3314   ELSE
3315     CLOSE c_user_party_id;
3316   END IF;
3317 
3318   EGO_DATA_SECURITY.get_security_predicate(
3319             p_api_version          => 1.0,
3320             p_function             => p_function_name,
3321             p_object_name          => G_EGO_ITEM,
3322             p_grant_instance_type  => p_instance_type,
3323             p_user_name            => 'HZ_PARTY:'||TO_CHAR(l_owner_party_id),
3324             p_statement_type       => 'EXISTS',
3325             p_pk1_alias            => 'MSIB.INVENTORY_ITEM_ID',
3326             p_pk2_alias            => 'MSIB.ORGANIZATION_ID',
3327             p_pk3_alias            => NULL,
3328             p_pk4_alias            => NULL,
3329             p_pk5_alias            => NULL,
3330             x_predicate            => l_sec_predicate,
3331             x_return_status        => l_return_status );
3332   code_debug(' Security Predicate '||l_sec_predicate);
3333   IF (l_sec_predicate IS NULL OR l_sec_predicate = '') THEN
3334     RETURN TRUE;
3335   ELSE
3336     l_select_sql :=
3337       ' SELECT  1 '||
3338       ' FROM MTL_SYSTEM_ITEMS MSIB '||
3339       ' WHERE MSIB.INVENTORY_ITEM_ID = :1'||
3340       ' AND MSIB.ORGANIZATION_ID = :2'||
3341       ' AND ' ||l_sec_predicate;
3342     code_debug(' Priv Query '||l_select_sql);
3343     OPEN c_priv_cursor FOR l_select_sql USING p_inventory_item_id,p_organization_id;
3344     FETCH c_priv_cursor INTO l_dummy_number;
3345     IF c_priv_cursor%NOTFOUND THEN
3346       CLOSE c_priv_cursor;
3347       IF FND_API.To_Boolean(p_set_message) THEN
3348         code_debug (' user does not have privilege '||p_function_name ||' on item '||p_inventory_item_id);
3349         IF p_function_name = G_FN_NAME_ADD_ROLE THEN
3350           fnd_message.Set_Name(G_APP_NAME, 'EGO_IPI_CANNOT_GRANT');
3351 -- EGO_IPI_CANNOT_GRANT :  User "USER" does not have privilege to give grants on Item "ITEM" in Organization "ORGANIZATION".
3352         ELSIF p_function_name IN (G_FN_NAME_PROMOTE) THEN
3353           fnd_message.Set_Name(G_APP_NAME, 'EGO_NO_PRIV_PROMOTE');
3354 -- EGO_NO_PRIV_PROMOTE : User "USER" does not have privilege to create, update, or delete pending phase records for promotion of Item "ITEM_NUMBER" in Organization "ORGANIZATION".
3355         ELSIF p_function_name IN (G_FN_NAME_DEMOTE) THEN
3356           fnd_message.Set_Name(G_APP_NAME, 'EGO_NO_PRIV_DEMOTE');
3357 -- EGO_NO_PRIV_DEMOTE : User "USER" does not have privilege to create, update, or delete pending phase records for demotion of Item "ITEM_NUMBER" in Organization "ORGANIZATION".
3358         ELSIF p_function_name =  G_FN_NAME_CHANGE_STATUS THEN
3359           fnd_message.Set_Name(G_APP_NAME, 'EGO_NO_PRIV_CHANGE_STATUS');
3360 -- EGO_NO_PRIV_CHANGE_STATUS :  User "USER" does not have privilege to change status of Item "ITEM" in Organization "ORGANIZATION".
3361         ELSIF p_function_name = G_FN_NAME_EDIT_LC_PROJ THEN
3362           fnd_message.set_name(G_APP_NAME, 'EGO_NO_PRIV_ITEM_PROJ_ASSOC');
3363 -- EGO_NO_PRIV_ITEM_PROJ_ASSOC :  User "USER" does not have privilege to create, update or delete project associtions on Item "ITEM" in Organization "ORGANIZATION".
3364         END IF;
3365         IF l_owner_party_name IS NULL THEN
3366           OPEN c_user_party_name (cp_party_id => l_owner_party_id);
3367           FETCH c_user_party_name INTO l_owner_party_name;
3368           CLOSE c_user_party_name;
3369         END IF;
3370         fnd_message.Set_Token('USER', l_owner_party_name);
3371         IF p_item_number IS NULL THEN
3372           SELECT concatenated_segments
3373             INTO l_dummy_char
3374             FROM mtl_system_items_b_kfv
3375            WHERE organization_id = p_organization_id
3376              AND inventory_item_id = p_inventory_item_id;
3377         ELSE
3378           l_dummy_char := p_item_number;
3379         END IF;
3380         IF p_function_name = G_FN_NAME_ADD_ROLE THEN
3381           fnd_message.Set_Token('ITEM', l_dummy_char);
3382         ELSE
3383           fnd_message.Set_Token('ITEM_NUMBER', l_dummy_char);
3384         END IF;
3385         IF p_organization_name IS NULL THEN
3386           SELECT name
3387           INTO l_dummy_char
3388           FROM hr_all_organization_units_vl
3389           WHERE organization_id = p_organization_id;
3390         ELSE
3391           l_dummy_char := p_organization_name;
3392         END IF;
3393         fnd_message.Set_Token('ORGANIZATION', l_dummy_char);
3394         fnd_msg_pub.Add;
3395       END IF;
3396       RETURN FALSE;
3397     ELSE
3398       CLOSE c_priv_cursor;
3399       RETURN TRUE;
3400     END IF;
3401   END IF;
3402  EXCEPTION
3403     WHEN OTHERS THEN
3404       RETURN FALSE;
3405   END has_role_on_item;
3406 
3407 ------------------------------------------------------------------------------
3408   -- Start OF comments
3409   -- API name  : Process_item_role
3410   -- TYPE      : Public
3411   -- Pre-reqs  : None
3412   -- PROCEDURE : Grants a role on an item.
3413   --
3414 ------------------------------------------------------------------------------
3415   PROCEDURE Process_item_role
3416       (p_api_version           IN  NUMBER
3417       ,p_commit                IN  VARCHAR2
3418       ,p_init_msg_list         IN  VARCHAR2
3419       ,p_transaction_type      IN  VARCHAR2
3420       ,p_inventory_item_id     IN  NUMBER
3421       ,p_item_number           IN  VARCHAR2
3422       ,p_organization_id       IN  NUMBER
3423       ,p_organization_code     IN  VARCHAR2
3424       ,p_role_id               IN  NUMBER
3425       ,p_role_name             IN  VARCHAR2
3426       ,p_instance_type         IN  VARCHAR2
3427       ,p_instance_set_id       IN  NUMBER
3428       ,p_instance_set_name     IN  VARCHAR2
3429       ,p_party_type            IN  VARCHAR2
3430       ,p_party_id              IN  NUMBER
3431       ,p_party_name            IN  VARCHAR2
3432       ,p_start_date            IN  DATE
3433       ,p_end_date              IN  DATE
3434       ,x_grant_guid            IN  OUT NOCOPY RAW
3435       ,x_return_status         OUT NOCOPY VARCHAR2
3436       ,x_msg_count             OUT NOCOPY NUMBER
3437       ,x_msg_data              OUT NOCOPY VARCHAR2
3438      ) IS
3439   l_api_name                    VARCHAR2(30);
3440   l_api_version                 NUMBER;
3441   l_error_token_table           ERROR_HANDLER.Token_Tbl_Type;
3442   l_dummy_number                NUMBER;
3443   l_dummy_char                  VARCHAR2(32767);
3444   l_sysdate                     DATE;
3445   l_start_date                  DATE;
3446   l_end_date                    DATE;
3447   l_organization_id             mtl_system_items_b.organization_id%TYPE;
3448   l_inventory_item_id           mtl_system_items_b.inventory_item_id%TYPE;
3449   l_approval_status             mtl_system_items_b.approval_status%TYPE;
3450   l_item_number                 mtl_system_items_b_kfv.concatenated_segments%TYPE;
3451   l_hz_party_type               hz_parties.party_type%TYPE;
3452   l_instance_set_id             fnd_object_instance_sets.instance_set_id%TYPE;
3453   l_party_id                    hz_parties.party_id%TYPE;
3454   l_party_name                  hz_parties.party_name%TYPE;
3455   l_role_id                     fnd_menus_vl.menu_id%TYPE;
3456   l_role_name                   fnd_menus_vl.menu_name%TYPE;
3457   l_instance_type               fnd_grants.instance_type%TYPE;
3458   l_pk1_value                   fnd_grants.instance_pk1_value%TYPE;
3459   l_pk2_value                   fnd_grants.instance_pk2_value%TYPE;
3460   l_invalid_flag                BOOLEAN;
3461   l_create_grant_flag           BOOLEAN;
3462   l_user_id                     NUMBER;
3463 BEGIN
3464 
3465 -- user must not be able to delete his own grants
3466   l_api_name    := 'Process_item_role';
3467   l_api_version := 1.0;
3468   x_return_status := FND_API.G_RET_STS_SUCCESS;
3469   l_user_id       :=  FND_GLOBAL.User_Id;
3470   code_debug(l_api_name ||' started with params - grant guid '||RAWTOHEX(x_grant_guid));
3471   code_debug(' p_api_version '|| p_api_version||' p_commit '||p_commit||' p_init_msg_list '||p_init_msg_list );
3472   code_debug(' p_transaction_type '||p_transaction_type ||' p_inventory_item_id '||p_inventory_item_id||' p_item_number '||p_item_number );
3473   code_debug(' p_organization_id '||p_organization_id ||' p_organization_code '||p_organization_code||' p_role_id '||p_role_id );
3474   code_debug(' p_role_name '||p_role_name ||' p_instance_type '||p_instance_type||' p_instance_set_id '||p_instance_set_id );
3475   code_debug(' p_instance_set_name '||p_instance_set_name ||' p_party_type '||p_party_type||' p_party_id '||p_party_id );
3476   code_debug(' p_party_name'||p_party_name ||' p_start_date'||p_start_date||' p_end_date'||p_end_date );
3477 
3478   IF FND_API.To_Boolean( p_commit ) THEN
3479     SAVEPOINT PROCESS_ITEM_ROLE_SP;
3480   END IF;
3481   --
3482   -- Initialize message list
3483   --
3484   IF FND_API.To_Boolean(p_init_msg_list) THEN
3485     FND_MSG_PUB.Initialize;
3486   END IF;
3487   code_debug(l_api_name||' msg pub initialized ' );
3488   --
3489   --Standard checks
3490   --
3491   IF NOT FND_API.Compatible_API_Call (l_api_version
3492                                      ,p_api_version
3493                                      ,l_api_name
3494                                      ,g_pkg_name)THEN
3495     code_debug (l_api_version ||' invalid api version ');
3496     RAISE FND_API.G_EXC_ERROR;
3497   END IF;
3498   code_debug(l_api_name||' valid api ' );
3499   --
3500   -- invalid params passed
3501   --
3502   IF ( p_transaction_type IS NULL
3503        OR
3504        p_transaction_type NOT IN
3505            (EGO_ITEM_PUB.G_TTYPE_CREATE
3506            ,EGO_ITEM_PUB.G_TTYPE_DELETE
3507            ,EGO_ITEM_PUB.G_TTYPE_UPDATE
3508            )
3509        OR
3510        (p_transaction_type = EGO_ITEM_PUB.G_TTYPE_CREATE
3511            AND( (p_role_name IS NULL AND p_role_id IS NULL)
3512                 OR
3513                 p_party_type IS NULL
3514                 OR
3515                 p_party_type NOT IN
3516                    (EGO_ITEM_PUB.G_USER_PARTY_TYPE
3517                    ,EGO_ITEM_PUB.G_GROUP_PARTY_TYPE
3518                    ,EGO_ITEM_PUB.G_COMPANY_PARTY_TYPE
3519                    ,EGO_ITEM_PUB.G_ALL_USERS_PARTY_TYPE
3520                    )
3521                 OR
3522                 (p_party_type IN (EGO_ITEM_PUB.G_GROUP_PARTY_TYPE
3523                                  ,EGO_ITEM_PUB.G_COMPANY_PARTY_TYPE
3524                                  ,EGO_ITEM_PUB.G_USER_PARTY_TYPE)
3525                    AND p_party_name IS NULL
3526                    AND p_party_id IS NULL
3527                 )
3528                 OR
3529                 p_instance_type IS NULL
3530                 OR
3531                 p_instance_type NOT IN
3532                   (EGO_ITEM_PUB.G_INSTANCE_TYPE_SET
3533                   ,EGO_ITEM_PUB.G_INSTANCE_TYPE_INSTANCE
3534                   )
3535                 OR
3536                 (p_instance_type = EGO_ITEM_PUB.G_INSTANCE_TYPE_SET
3537                     AND
3538                     ( (p_instance_set_id IS NULL AND p_instance_set_name IS NULL)
3539                      OR
3540                      p_inventory_item_id IS NOT NULL
3541                      OR
3542                      p_organization_id IS NOT NULL
3543                     )
3544                 )
3545                 OR
3546                 (p_instance_type = EGO_ITEM_PUB.G_INSTANCE_TYPE_INSTANCE
3547                    AND
3548                    ( (p_inventory_item_id IS NULL AND p_item_number IS NULL)
3549                     OR
3550                      (p_organization_id IS NULL AND p_organization_code IS NULL)
3551                     OR
3552                      (p_instance_set_id IS NOT NULL OR p_instance_set_name IS NOT NULL)
3553                    )
3554                 )
3555               )
3556        )
3557        OR
3558        (p_transaction_type = EGO_ITEM_PUB.G_TTYPE_UPDATE
3559            AND (x_grant_guid IS NULL)
3560        )
3561        OR
3562        (p_transaction_type = EGO_ITEM_PUB.G_TTYPE_DELETE
3563            AND (x_grant_guid IS NULL)
3564        )
3565      ) THEN
3566     --
3567     -- inalid parameters passed
3568     --
3569     code_debug (l_api_version ||' invalid parameters passed ');
3570     fnd_message.Set_Name(G_APP_NAME, G_INVALID_PARAMS_MSG);
3571     fnd_message.Set_Token(G_PKG_NAME_TOKEN, G_PKG_NAME);
3572     fnd_message.Set_Token(G_PROC_NAME_TOKEN, l_api_name);
3573     fnd_msg_pub.Add;
3574     RAISE FND_API.G_EXC_ERROR;
3575   END IF;
3576   code_debug(l_api_name||' valid params passed ' );
3577   l_sysdate           := SYSDATE;
3578   l_start_date        := NVL(p_start_date, l_sysdate);
3579   l_organization_id   := p_organization_id;
3580   l_inventory_item_id := p_inventory_item_id;
3581   l_item_number       := p_item_number;
3582   l_role_id           := p_role_id;
3583   l_instance_set_id   := p_instance_set_id;
3584   l_party_id          := p_party_id;
3585   l_party_name        := p_party_name;
3586   l_create_grant_flag := TRUE;
3587 
3588   IF p_transaction_type IN (EGO_ITEM_PUB.G_TTYPE_DELETE
3589                            ,EGO_ITEM_PUB.G_TTYPE_UPDATE) THEN
3590 
3591     BEGIN
3592       SELECT instance_type, instance_set_id, instance_pk1_value,
3593              instance_pk2_value, start_date, end_date
3594       INTO   l_instance_type, l_instance_set_id, l_pk1_value,
3595              l_pk2_value, l_start_date, l_end_date
3596       FROM   fnd_grants
3597       WHERE  grant_guid = x_grant_guid
3598         AND object_id = (SELECT object_id FROM fnd_objects WHERE obj_name = G_EGO_ITEM);
3599       code_debug(l_api_name||' grant validation check done ' );
3600     EXCEPTION
3601       WHEN NO_DATA_FOUND THEN
3602         code_debug (l_api_version ||' no grant found for modification ');
3603         IF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_UPDATE THEN
3604           fnd_message.set_name (G_APP_NAME, 'EGO_NO_REC_UPDATE');
3605         ELSE
3606           fnd_message.set_name (G_APP_NAME, 'EGO_NO_REC_DELETE');
3607         END IF;
3608         fnd_msg_pub.Add;
3609         RAISE FND_API.G_EXC_ERROR;
3610     END;
3611     --
3612     -- no security check done for the update of grants of type instance set.
3613     -- should this be done??
3614     --
3615     IF l_instance_type = EGO_ITEM_PUB.G_INSTANCE_TYPE_INSTANCE THEN
3616       l_inventory_item_id := l_pk1_value;
3617       l_organization_id := l_pk2_value;
3618       -- 4052565
3619       -- modified call to has_role_on_item from validate_role_privilege
3620       IF NOT has_role_on_item
3621                (p_function_name      => G_FN_NAME_ADD_ROLE
3622                ,p_instance_type      => p_instance_type
3623                ,p_inventory_item_id  => l_inventory_item_id
3624                ,p_item_number        => NULL
3625                ,p_organization_id    => l_organization_id
3626                ,p_organization_name  => NULL
3627                ,p_user_id            => l_user_id
3628                ,p_party_id           => l_party_id
3629                ,p_set_message        => G_TRUE
3630                ) THEN
3631         code_debug(l_api_name ||' user does not have privilege to update the roles on item');
3632         RAISE FND_API.G_EXC_ERROR;
3633       END IF;
3634       code_debug(l_api_name ||' user has privilege to update the roles on item');
3635     ELSE
3636       IF NOT validate_function_security(p_function_name  => G_FN_NAME_ADMIN
3637                                        ,p_set_message    => G_TRUE) THEN
3638         code_debug(l_api_name ||' user does not have function privilege to update roles in instance set');
3639         RAISE FND_API.G_EXC_ERROR;
3640       END IF;
3641       code_debug(l_api_name ||' user has function privilege to update the roles in instance set');
3642     END IF;
3643 
3644     IF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_DELETE THEN
3645       --
3646       -- delete the grant given
3647       --
3648       code_debug(l_api_name||' calling EGO_SECURITY_PUB.revoke_grant ' );
3649       EGO_SECURITY_PUB.revoke_grant
3650         (p_api_version    => 1.0
3651         ,p_grant_guid     => RAWTOHEX(x_grant_guid)
3652         ,x_return_status  => x_return_status
3653         ,x_errorcode      => l_dummy_number
3654         );
3655       code_debug(l_api_name||' returning EGO_SECURITY_PUB.revoke_grant with status '||x_return_status );
3656       IF x_return_status <> G_TRUE THEN
3657         --
3658         -- should never occur as the grant is already valid
3659         --
3660         RAISE FND_API.G_EXC_ERROR;
3661       ELSE
3662         x_return_status := FND_API.G_RET_STS_SUCCESS;
3663         IF FND_API.To_Boolean( p_commit ) THEN
3664           COMMIT WORK;
3665         END IF;
3666         RETURN;
3667       END IF;
3668     ELSIF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_UPDATE  THEN
3669       --
3670       -- update the grant given
3671       --
3672       IF date_check (p_start_date      => l_sysdate
3673                     ,p_end_date        => l_end_date
3674                     ,p_validation_type => G_GT_VAL
3675                     ) THEN
3676         code_debug (l_api_version ||' grant is already end dated ');
3677         fnd_message.Set_Name(G_APP_NAME, 'EGO_GRANT_END_DATED');
3678         fnd_msg_pub.Add;
3679         RAISE FND_API.G_EXC_ERROR;
3680       END IF;
3681       IF date_check (p_start_date      => l_sysdate
3682                     ,p_end_date        => p_end_date
3683                     ,p_validation_type => G_GT_VAL
3684                     ) THEN
3685         code_debug (l_api_version ||' end date less than sysdate ');
3686         fnd_message.Set_Name(G_APP_NAME, 'EGO_ENDDATE_LT_CURRDATE');
3687         fnd_msg_pub.Add;
3688         RAISE FND_API.G_EXC_ERROR;
3689       END IF;
3690       IF (p_start_date > l_sysdate and l_start_date > l_sysdate) THEN
3691         l_start_date := NVL(p_start_date,l_start_date);
3692       END IF;
3693       code_debug(l_api_name||' calling EGO_SECURITY_PUB.set_grant_date ');
3694       EGO_SECURITY_PUB.set_grant_date
3695        (p_api_version    => 1.0
3696        ,p_grant_guid     => RAWTOHEX(x_grant_guid)
3697        ,p_start_date     => l_start_date
3698        ,p_end_date       => p_end_date
3699        ,x_return_status  => x_return_status
3700        );
3701       code_debug(l_api_name||' returning EGO_SECURITY_PUB.set_grant_date with status '||x_return_status );
3702       IF x_return_status = G_FALSE THEN
3703         code_debug (l_api_version ||' overlap grant found for update ');
3704         fnd_message.Set_Name(G_APP_NAME, 'EGO_IPI_OVERLAP_GRANT');
3705         fnd_message.Set_Token('START_DATE', l_start_date);
3706         fnd_message.Set_Token('END_DATE', p_end_date);
3707         fnd_msg_pub.Add;
3708         RAISE FND_API.G_EXC_ERROR;
3709       ELSE
3710         x_return_status := FND_API.G_RET_STS_SUCCESS;
3711         IF FND_API.To_Boolean( p_commit ) THEN
3712           COMMIT WORK;
3713         END IF;
3714         RETURN;
3715       END IF;
3716     END IF;
3717   ELSIF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_CREATE THEN
3718     code_debug(l_api_name||' started validations for CREATE ');
3719     --
3720     -- start validations for create
3721     --
3722     --
3723     -- validate the party_id / party_name
3724     --
3725     IF NOT validate_party (p_party_type   => p_party_type
3726                           ,x_party_id     => l_party_id
3727                           ,x_party_name   => l_party_name
3728                           ) THEN
3729       code_debug (l_api_version ||' invalid party passed ');
3730       l_create_grant_flag := FALSE;
3731       IF p_party_type = EGO_ITEM_PUB.G_USER_PARTY_TYPE THEN
3732         fnd_message.Set_Name(G_APP_NAME, 'EGO_USER');
3733         l_dummy_char := fnd_message.get();
3734       ELSIF p_party_type = EGO_ITEM_PUB.G_GROUP_PARTY_TYPE THEN
3735         fnd_message.Set_Name(G_APP_NAME, 'EGO_GROUP_NAME');
3736         l_dummy_char := fnd_message.get();
3737       ELSIF p_party_type = EGO_ITEM_PUB.G_COMPANY_PARTY_TYPE THEN
3738         fnd_message.Set_Name(G_APP_NAME, 'EGO_COMPANY');
3739         l_dummy_char := fnd_message.get();
3740       END IF;
3741       fnd_message.Set_Name(G_APP_NAME, 'EGO_IPI_INVALID_VALUE');
3742       fnd_message.Set_Token('NAME', l_dummy_char);
3743       IF l_party_id IS NOT NULL THEN
3744         fnd_message.Set_Token('VALUE', l_party_id);
3745       ELSE
3746         fnd_message.Set_Token('VALUE', l_party_name);
3747       END IF;
3748       fnd_msg_pub.Add;
3749     END IF;
3750     code_debug(l_api_name||' validate party done ');
3751     --
3752     -- validate the menu details passed
3753     --
3754     IF NOT validate_menu (x_menu_id        => l_role_id
3755                          ,x_menu_name      => l_role_name
3756                          ,p_user_menu_name => p_role_name
3757                          ,p_menu_type      => 'SECURITY'
3758                          ) THEN
3759       code_debug (l_api_version ||' invalid menu passed ');
3760       l_create_grant_flag := FALSE;
3761       fnd_message.Set_Name(G_APP_NAME, 'EGO_ROLE');
3762       l_dummy_char := fnd_message.get();
3763       fnd_message.Set_Name(G_APP_NAME, 'EGO_IPI_INVALID_VALUE');
3764       fnd_message.Set_Token('NAME', l_dummy_char);
3765       IF l_role_id IS NOT NULL THEN
3766         fnd_message.Set_Token('VALUE', l_role_id);
3767       ELSE
3768         fnd_message.Set_Token('VALUE', p_role_name);
3769       END IF;
3770       fnd_msg_pub.Add;
3771     END IF;
3772     code_debug(l_api_name||' validate menu done ');
3773     --
3774     -- validate the start_date - end_date standrad checks
3775     --
3776     IF date_check (p_start_date      => l_start_date
3777                   ,p_end_date        => l_sysdate
3778                   ,p_validation_type => G_LT_VAL
3779                   ) THEN
3780       code_debug (l_api_version ||' start date less than sysdate ');
3781       l_create_grant_flag := FALSE;
3782       fnd_message.Set_Name(G_APP_NAME, 'EGO_INVALID_GRANT_START_DATE');
3783       fnd_msg_pub.Add;
3784     END IF;
3785     IF date_check (p_start_date      => l_sysdate
3786                   ,p_end_date        => p_end_date
3787                   ,p_validation_type => G_GT_VAL
3788                   ) THEN
3789       code_debug (l_api_version ||' end date less than sysdate ');
3790       l_create_grant_flag := FALSE;
3791       fnd_message.Set_Name(G_APP_NAME, 'EGO_ENDDATE_LT_CURRDATE');
3792       fnd_msg_pub.Add;
3793     END IF;
3794     IF date_check (p_start_date      => l_start_date
3795                   ,p_end_date        => p_end_date
3796                   ,p_validation_type => G_GT_VAL
3797                   ) THEN
3798       code_debug (l_api_version ||' end date less than startdate ');
3799       l_create_grant_flag := FALSE;
3800       fnd_message.Set_Name(G_APP_NAME, 'EGO_ENDDATE_EXCEEDS_STARTDATE');
3801       fnd_msg_pub.Add;
3802     END IF;
3803     code_debug(l_api_name||' validate date done ');
3804 
3805     IF  l_instance_set_id IS NOT NULL OR p_instance_set_name IS NOT NULL THEN
3806       --
3807       -- validate instance set
3808       --
3809       IF NOT validate_instance_set (x_instance_set_id => l_instance_set_id
3810                                    ,p_set_disp_name   => p_instance_set_name
3811                                    ) THEN
3812         code_debug (l_api_version ||' invalid instance set ');
3813         l_create_grant_flag := FALSE;
3814         fnd_message.Set_Name(G_APP_NAME, 'EGO_INSTANCE');
3815         l_dummy_char := fnd_message.get();
3816         fnd_message.Set_Name(G_APP_NAME, 'EGO_IPI_INVALID_VALUE');
3817         fnd_message.Set_Token('NAME', l_dummy_char);
3818         IF l_instance_set_id IS NOT NULL THEN
3819           fnd_message.Set_Token('VALUE', l_instance_set_id);
3820         ELSE
3821           fnd_message.Set_Token('VALUE', p_instance_set_name);
3822         END IF;
3823         fnd_msg_pub.Add;
3824       END IF;
3825       code_debug(l_api_name||' validate instance done ');
3826       IF NOT validate_function_security(p_function_name  => G_FN_NAME_ADMIN
3827                                        ,p_set_message    => G_TRUE) THEN
3828         code_debug(l_api_name ||' user does not have function privilege to update the roles on item');
3829         l_create_grant_flag := FALSE;
3830       END IF;
3831     ELSE
3832       --
3833       -- validate organization details
3834       --
3835       IF NOT validate_org (x_organization_id   => l_organization_id
3836                           ,p_organization_code => p_organization_code
3837                           ,p_set_message       => G_TRUE) THEN
3838         code_debug (l_api_version ||' invalid organization ');
3839         l_create_grant_flag := FALSE;
3840       ELSE
3841         code_debug(l_api_name||' validate org done ');
3842         --
3843         -- validate item details
3844         --
3845         IF NOT validate_item (x_inventory_item_id => l_inventory_item_id
3846                              ,x_item_number       => l_item_number
3847                              ,x_approval_status   => l_approval_status
3848                              ,p_organization_id   => l_organization_id
3849                             ,p_set_message        => G_TRUE) THEN
3850           code_debug (l_api_version ||' invalid item ');
3851           l_create_grant_flag := FALSE;
3852         ELSE
3853           code_debug(l_api_name||' validate item done ');
3854           -- 4052565
3855           -- modified call to has_role_on_item from validate_role_privilege
3856           IF NOT has_role_on_item
3857                     (p_function_name      => G_FN_NAME_ADD_ROLE
3858                     ,p_instance_type      => p_instance_type
3859                     ,p_inventory_item_id  => l_inventory_item_id
3860                     ,p_item_number        => l_item_number
3861                     ,p_organization_id    => l_organization_id
3862                     ,p_organization_name  => NULL
3863                     ,p_user_id            => l_user_id
3864                     ,p_party_id           => l_party_id
3865                     ,p_set_message        => G_TRUE
3866                     ) THEN
3867             code_debug(l_api_name ||' user does not have privilege to create roles ');
3868             l_create_grant_flag := FALSE;
3869           END IF;
3870           code_debug(l_api_name||' validate role privilege done ');
3871         END IF;
3872       END IF;
3873     END IF;
3874 
3875     IF l_create_grant_flag THEN
3876       --
3877       -- create a new grant
3878       --
3879       code_debug(l_api_name||' calling EGO_SECURITY_PUB.grant_role_guid ');
3880       EGO_SECURITY_PUB.grant_role_guid
3881         (p_api_version           => 1.0
3882         ,p_role_name             => l_role_name
3883         ,p_object_name           => G_EGO_ITEM
3884         ,p_instance_type         => p_instance_type
3885         ,p_instance_set_id       => l_instance_set_id
3886         ,p_instance_pk1_value    => TO_CHAR(l_inventory_item_id)
3887         ,p_instance_pk2_value    => TO_CHAR(l_organization_id)
3888         ,p_instance_pk3_value    => NULL
3889         ,p_instance_pk4_value    => NULL
3890         ,p_instance_pk5_value    => NULL
3891         ,p_party_id              => l_party_id
3892         ,p_start_date            => l_start_date
3893         ,p_end_date              => p_end_date
3894         ,x_return_status         => x_return_status
3895         ,x_errorcode             => x_msg_data
3896         ,x_grant_guid            => x_grant_guid
3897         );
3898       code_debug(l_api_name||' returning EGO_SECURITY_PUB.grant_role_guid with status '||x_return_status);
3899       IF x_return_status = G_FALSE THEN
3900         code_debug (l_api_version ||' grant overlap when creating new grant ');
3901         fnd_message.Set_Name(G_APP_NAME, 'EGO_IPI_OVERLAP_GRANT');
3902         fnd_message.Set_Token('START_DATE', l_start_date);
3903         fnd_message.Set_Token('END_DATE', p_end_date);
3904         fnd_msg_pub.Add;
3905         RAISE FND_API.G_EXC_ERROR;
3906       ELSE
3907         -- changing return status to FND_API.G_RET_STS_SUCCESS
3908         -- as per standards
3909         x_return_status := FND_API.G_RET_STS_SUCCESS;
3910       END IF;
3911     ELSE
3912       code_debug(l_api_name||' raising errors ');
3913       RAISE FND_API.G_EXC_ERROR;
3914     END IF;
3915   END IF;
3916 
3917   -- commit data
3918   IF FND_API.To_Boolean( p_commit ) THEN
3919     COMMIT WORK;
3920   END IF;
3921 
3922   EXCEPTION
3923     WHEN FND_API.G_EXC_ERROR THEN
3924       code_debug(l_api_name||' returning expected error ');
3925       IF FND_API.To_Boolean( p_commit ) THEN
3926         ROLLBACK TO  PROCESS_ITEM_ROLE_SP;
3927       END IF;
3928       x_return_status := FND_API.G_RET_STS_ERROR;
3929       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3930                                ,p_count   => x_msg_count
3931                                ,p_data    => x_msg_data);
3932     WHEN OTHERS THEN
3933       IF FND_API.To_Boolean( p_commit ) THEN
3934         ROLLBACK TO  PROCESS_ITEM_ROLE_SP;
3935       END IF;
3936       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
3937       FND_MESSAGE.Set_Name(G_APP_NAME, G_PLSQL_ERR);
3938       FND_MESSAGE.Set_Token(G_PKG_NAME_TOKEN, G_PKG_NAME);
3939       FND_MESSAGE.Set_Token(G_API_NAME_TOKEN, l_api_name);
3940       FND_MESSAGE.Set_Token(G_SQL_ERR_MSG_TOKEN, SQLERRM);
3941       FND_MSG_PUB.Add;
3942       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3943                                ,p_count   => x_msg_count
3944                                ,p_data    => x_msg_data);
3945       code_debug(' EXCEPTION in '||l_api_name||' : ' ||x_msg_data );
3946   END Process_item_role;
3947 
3948 
3949 ------------------------------------------------------------------------------
3950   -- Start OF comments
3951   -- API name  : Process_item_phase_and_status
3952   -- TYPE      : Public
3953   -- Pre-reqs  : None
3954   -- PROCEDURE : Changes item phase and status
3955   --
3956 ------------------------------------------------------------------------------
3957 PROCEDURE Process_item_phase_and_status
3958       (p_api_version           IN  NUMBER
3959       ,p_commit                IN  VARCHAR2
3960       ,p_init_msg_list         IN  VARCHAR2
3961       ,p_transaction_type      IN  VARCHAR2
3962       ,p_inventory_item_id     IN  NUMBER
3963       ,p_item_number           IN  VARCHAR2
3964       ,p_organization_id       IN  NUMBER
3965       ,p_organization_code     IN  VARCHAR2
3966       ,p_revision_id           IN  NUMBER
3967       ,p_revision              IN  VARCHAR2
3968       ,p_implement_changes     IN  VARCHAR2
3969       ,p_status                IN  VARCHAR2
3970       ,p_effective_date        IN  DATE
3971       ,p_lifecycle_id          IN  NUMBER
3972       ,p_phase_id              IN  NUMBER
3973       ,p_new_effective_date    IN  DATE
3974       ,x_return_status         OUT NOCOPY VARCHAR2
3975       ,x_msg_count             OUT NOCOPY NUMBER
3976       ,x_msg_data              OUT NOCOPY VARCHAR2
3977      ) IS
3978   l_api_name                    VARCHAR2(30);
3979   l_api_version                 NUMBER;
3980   l_organization_id             mtl_system_items_b.organization_id%TYPE;
3981   l_inventory_item_id           mtl_system_items_b.inventory_item_id%TYPE;
3982   l_item_number                 mtl_system_items_b_kfv.concatenated_segments%TYPE;
3983   l_approval_status             mtl_system_items_b.approval_status%TYPE;
3984   l_revision_id                 mtl_item_revisions_b.revision_id%TYPE;
3985   l_revision                    mtl_item_revisions_b.revision%TYPE;
3986   l_curr_cc_id                  mtl_system_items_b.item_catalog_group_id%TYPE;
3987   l_curr_lifecycle_id           mtl_system_items_b.lifecycle_id%TYPE;
3988   l_curr_phase_id               mtl_system_items_b.current_phase_id%TYPE;
3989   l_future_phase_id             mtl_system_items_b.current_phase_id%TYPE;
3990   l_item_sequence               NUMBER;
3991   l_phase_sequence              NUMBER;
3992   l_curr_status                 mtl_system_items_b.inventory_item_status_code%TYPE;
3993   l_policy_code                 VARCHAR2(99);
3994   l_policy_co_required          VARCHAR2(99);
3995   l_policy_not_allowed          VARCHAR2(99);
3996   l_sysdate                     DATE;
3997   l_effective_date              DATE;
3998   l_invalid_flag                BOOLEAN;
3999   l_change_status_flag          BOOLEAN;
4000   l_dummy_char                  VARCHAR2(32767);
4001   l_dummy_number                NUMBER;
4002   l_revision_master_controlled  VARCHAR2(1);
4003   l_status_master_controlled    VARCHAR2(1);
4004   l_is_master_org               VARCHAR2(1);
4005   l_org_name                    hr_all_organization_units_vl.name%TYPE;
4006   l_error_message               fnd_new_messages.message_name%TYPE;
4007   l_priv_function_name          fnd_form_functions.function_name%TYPE;
4008   l_user_id                     NUMBER;
4009   l_temp                        NUMBER;
4010 
4011   CURSOR c_get_item_det (cp_inventory_item_id  IN  NUMBER
4012                         ,cp_organization_id    IN  NUMBER) IS
4013   SELECT item_catalog_group_id, lifecycle_id,
4014          current_phase_id, inventory_item_status_code
4015   FROM mtl_system_items_b
4016   WHERE inventory_item_id = cp_inventory_item_id
4017     AND organization_id = cp_organization_id;
4018 
4019   CURSOR c_get_item_rev_det (cp_inventory_item_id  IN  NUMBER
4020                             ,cp_organization_id    IN  NUMBER
4021                             ,cp_revision_id        IN  NUMBER) IS
4022   SELECT itm.item_catalog_group_id, rev.lifecycle_id, rev.current_phase_id, itm.inventory_item_status_code
4023   FROM mtl_system_items_b itm, mtl_item_revisions_b rev
4024   WHERE itm.inventory_item_id = cp_inventory_item_id
4025     AND itm.organization_id = cp_organization_id
4026     AND rev.inventory_item_id = itm.inventory_item_id
4027     AND rev.organization_id = itm.organization_id --changed = rev.organization_id to itm.organization_id bug 7324207
4028     AND rev.revision_id = cp_revision_id; --changed =rev.revision_id to cp_revision_id bug 7324207
4029 
4030   CURSOR c_get_phase_seq (cp_phase_id     IN  NUMBER ) IS
4031     SELECT p1.display_sequence
4032     FROM   PA_PROJ_ELEMENT_VERSIONS P1
4033     WHERE  P1.PROJ_ELEMENT_ID = cp_phase_id;
4034 
4035   CURSOR c_get_next_phase (cp_lifecycle_id IN  NUMBER
4036                           ,cp_phase_id     IN  NUMBER ) IS
4037     SELECT p1.proj_element_id, p1.display_sequence
4038     FROM   PA_PROJ_ELEMENT_VERSIONS P1, PA_PROJ_ELEMENT_VERSIONS P2
4039     WHERE  P1.PARENT_STRUCTURE_VERSION_ID = P2.ELEMENT_VERSION_ID
4040       AND  P2.PROJ_ELEMENT_ID = cp_lifecycle_id
4041       AND  P1.display_sequence >
4042               (SELECT P3.display_sequence
4043                FROM   PA_PROJ_ELEMENT_VERSIONS P3
4044                WHERE  P3.PROJ_ELEMENT_ID = cp_phase_id
4045                  AND  P3.PARENT_STRUCTURE_VERSION_ID = P1.parent_structure_version_id
4046                )
4047     ORDER BY p1.DISPLAY_SEQUENCE ASC;
4048 
4049   CURSOR c_get_priv_phase (cp_lifecycle_id IN  NUMBER
4050                           ,cp_phase_id     IN  NUMBER ) IS
4051     SELECT p1.proj_element_id, p1.display_sequence
4052     FROM   PA_PROJ_ELEMENT_VERSIONS P1, PA_PROJ_ELEMENT_VERSIONS P2
4053     WHERE  P1.PARENT_STRUCTURE_VERSION_ID = P2.ELEMENT_VERSION_ID
4054       AND  P2.PROJ_ELEMENT_ID = cp_lifecycle_id
4055       AND  P1.display_sequence <
4056               (SELECT P3.display_sequence
4057                FROM   PA_PROJ_ELEMENT_VERSIONS P3
4058                WHERE  P3.PROJ_ELEMENT_ID = cp_phase_id
4059                  AND  P3.PARENT_STRUCTURE_VERSION_ID = P1.parent_structure_version_id
4060                )
4061     ORDER BY p1.DISPLAY_SEQUENCE DESC;
4062 
4063 
4064   CURSOR c_chk_phase_against_lc ( cp_lifecycle_id IN NUMBER
4065                                  ,cp_phase_id     IN NUMBER
4066                                 ) IS
4067     SELECT 1
4068     FROM PA_PROJ_ELEMENT_VERSIONS LC
4069     WHERE LC.proj_element_id = cp_lifecycle_id
4070     AND EXISTS
4071     (
4072     SELECT 1
4073     FROM PA_PROJ_ELEMENT_VERSIONS PHASES
4074     WHERE PHASES.parent_structure_version_id = LC.element_version_id
4075     AND PHASES.proj_element_id = cp_phase_id
4076     );
4077 
4078 
4079 
4080 BEGIN
4081   l_api_name := 'Process_item_phase_and_status';
4082   l_api_version := 1.0;
4083   x_return_status := FND_API.G_RET_STS_SUCCESS;
4084   l_user_id       :=  FND_GLOBAL.User_Id;
4085   l_policy_co_required  := 'CHANGE_ORDER_REQUIRED';
4086   l_policy_not_allowed  := 'NOT_ALLOWED';
4087   code_debug(l_api_name ||' started with params -- effective date '|| p_effective_date);
4088   code_debug(' p_api_version '|| p_api_version||' p_commit '||p_commit||' p_init_msg_list '||p_init_msg_list );
4089   code_debug(' p_transaction_type '||p_transaction_type ||' p_inventory_item_id '||p_inventory_item_id||' p_item_number '||p_item_number );
4090   code_debug(' p_organization_id '||p_organization_id ||' p_organization_code '||p_organization_code||' p_revision_id '||p_revision_id );
4091   code_debug(' p_revision '||p_revision ||' p_implement_changes '||p_implement_changes||' p_status     '||p_status     );
4092 
4093   IF FND_API.To_Boolean( p_commit ) THEN
4094     SAVEPOINT PROCESS_ITEM_PHASE_SP;
4095   END IF;
4096   --
4097   -- Initialize message list
4098   --
4099   IF FND_API.To_Boolean(p_init_msg_list) THEN
4100     FND_MSG_PUB.Initialize;
4101   END IF;
4102   code_debug(l_api_name||' msg pub initialized ' );
4103   --
4104   --Standard checks
4105   --
4106   IF NOT FND_API.Compatible_API_Call (l_api_version
4107                                      ,p_api_version
4108                                      ,l_api_name
4109                                      ,g_pkg_name) THEN
4110     code_debug (l_api_version ||' invalid api version ');
4111     RAISE FND_API.G_EXC_ERROR;
4112   END IF;
4113   --
4114   -- check for invalid params
4115   --
4116   IF ( p_transaction_type IS NULL
4117        OR
4118        p_transaction_type NOT IN (EGO_ITEM_PUB.G_TTYPE_UPDATE
4119                                  ,EGO_ITEM_PUB.G_TTYPE_DELETE
4120                                  ,EGO_ITEM_PUB.G_TTYPE_PROMOTE
4121                                  ,EGO_ITEM_PUB.G_TTYPE_DEMOTE
4122                                  ,EGO_ITEM_PUB.G_TTYPE_CHANGE_STATUS
4123                                   --  ,EGO_ITEM_PUB.G_TTYPE_CHANGE_PHASE  /* P4TP immutability enhancement */ Bug 11064547- Change Phase transation Type not supported
4124                                  )
4125        OR
4126        (  p_transaction_type NOT IN (EGO_ITEM_PUB.G_TTYPE_UPDATE
4127                                     ,EGO_ITEM_PUB.G_TTYPE_DELETE
4128                                      --  ,EGO_ITEM_PUB.G_TTYPE_CHANGE_PHASE Bug 11064547- Change Phase transation Type not supported
4129                                    )
4130            AND
4131           (p_revision IS NOT NULL OR p_revision_id IS NOT NULL)
4132            AND
4133            p_status IS NOT NULL
4134        )
4135        OR
4136        (   p_transaction_type = EGO_ITEM_PUB.G_TTYPE_CHANGE_PHASE
4137             AND
4138            (
4139              (p_phase_id IS NULL)    --- phase_id must be passed
4140               OR
4141              (p_status IS NOT NULL)   --- if status is passed, error since status is not required for rev phase change
4142               OR
4143              (p_revision IS NULL AND p_revision_id IS NULL) -- one of these must be passed
4144            )
4145        )
4146        OR
4147        (p_inventory_item_id IS NULL AND p_item_number IS NULL)
4148         OR
4149        (p_organization_id IS NULL AND p_organization_code IS NULL)
4150      ) THEN
4151     --
4152     -- inalid parameters passed
4153     --
4154     code_debug (l_api_version ||' invalid parameters passed ');
4155     fnd_message.Set_Name(G_APP_NAME, G_INVALID_PARAMS_MSG);
4156     fnd_message.Set_Token(G_PKG_NAME_TOKEN, G_PKG_NAME);
4157     fnd_message.Set_Token(G_PROC_NAME_TOKEN, l_api_name);
4158     FND_MSG_PUB.Add;
4159     RAISE FND_API.G_EXC_ERROR;
4160   END IF;
4161   l_change_status_flag := TRUE;
4162   l_organization_id    := p_organization_id;
4163   l_inventory_item_id  := p_inventory_item_id;
4164   l_item_number        := p_item_number;
4165   l_sysdate            := SYSDATE;
4166 
4167   IF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_UPDATE THEN
4168     l_effective_date := NVL(p_new_effective_date,l_sysdate);
4169   ELSIF p_transaction_type IN (EGO_ITEM_PUB.G_TTYPE_PROMOTE
4170                               ,EGO_ITEM_PUB.G_TTYPE_DEMOTE
4171                               ,EGO_ITEM_PUB.G_TTYPE_CHANGE_STATUS) THEN
4172     l_effective_date := NVL(p_effective_date, l_sysdate);
4173   ELSE
4174     l_effective_date := l_sysdate;
4175   END IF;
4176 
4177   IF date_check (p_start_date      => l_effective_date
4178                 ,p_end_date        => l_sysdate
4179                 ,p_validation_type => G_LT_VAL
4180                 ) THEN
4181     code_debug (l_api_name ||' effective date is less than system date ');
4182     l_change_status_flag := FALSE;
4183     fnd_message.Set_Name(G_APP_NAME, 'EGO_ITEM_INVALID_EFFCT_DATE');
4184     fnd_msg_pub.Add;
4185   ELSE
4186     code_debug (l_api_name ||' effective date is valid ');
4187   END IF;
4188   --
4189   -- validate organization details
4190   --
4191   IF NOT validate_org (x_organization_id   => l_organization_id
4192                       ,p_organization_code => p_organization_code
4193                       ,p_set_message       => G_TRUE) THEN
4194     code_debug (l_api_name ||' invalid organization ');
4195     l_change_status_flag := FALSE;
4196   ELSE
4197     code_debug (l_api_name ||' valid organization ');
4198     SELECT name
4199     INTO l_org_name
4200     FROM hr_all_organization_units_vl
4201     WHERE organization_id = l_organization_id;
4202     --
4203     -- validate item details
4204     --
4205     IF NOT validate_item (x_inventory_item_id => l_inventory_item_id
4206                          ,x_item_number       => l_item_number
4207                          ,x_approval_status   => l_approval_status
4208                          ,p_organization_id   => l_organization_id
4209                          ,p_set_message       => G_TRUE) THEN
4210       code_debug (l_api_name ||' invalid item ');
4211       l_change_status_flag := FALSE;
4212     ELSE
4213       code_debug (l_api_name ||' valid item ');
4214       IF NVL(l_approval_status,'A') <> 'A' THEN
4215         --
4216         -- item is not approved no operations permitted
4217         --
4218         code_debug (l_api_name ||' unapproved item ');
4219         l_change_status_flag := FALSE;
4220         fnd_message.Set_Name(G_APP_NAME, 'EGO_ITEM_NOT_APPROVED');
4221         fnd_msg_pub.Add;
4222       ELSE
4223         IF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_PROMOTE THEN
4224           l_priv_function_name := G_FN_NAME_PROMOTE;
4225         ELSIF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_DEMOTE THEN
4226           l_priv_function_name := G_FN_NAME_DEMOTE;
4227         ELSIF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_CHANGE_STATUS THEN
4228           l_priv_function_name := G_FN_NAME_CHANGE_STATUS;
4229         END IF;
4230         IF NOT has_role_on_item
4231                     (p_function_name        => l_priv_function_name
4232                     ,p_inventory_item_id    => l_inventory_item_id
4233                     ,p_item_number          => l_item_number
4234                     ,p_organization_id      => l_organization_id
4235                     ,p_organization_name    => NULL
4236                     ,p_user_id              => l_user_id
4237                     ,p_party_id             => NULL
4238                     ,p_set_message          => G_TRUE
4239                     ) THEN
4240           code_debug(l_api_name ||' user does not have privilege to perform specified action '||p_transaction_type);
4241           l_change_status_flag := FALSE;
4242         ELSE
4243           code_debug(l_api_name ||' user has privilege to perform the action '||l_priv_function_name);
4244         END IF;
4245         --
4246         -- validate revision details
4247         --
4248         l_revision_id := p_revision_id;
4249         l_revision    := p_revision;
4250         IF (l_revision IS NOT NULL OR l_revision_id IS NOT NULL) THEN
4251           IF NOT validate_item_rev
4252                                (x_revision_id        => l_revision_id
4253                                ,x_revision           => l_revision
4254                                ,p_inventory_item_id  => l_inventory_item_id
4255                                ,p_organization_id    => l_organization_id
4256                                ,p_set_message        => G_TRUE) THEN
4257             code_debug (l_api_name ||' invalid item revision ');
4258             l_change_status_flag := FALSE;
4259           ELSE
4260             code_debug (l_api_name ||' valid item revision ');
4261             --
4262             -- context of rev
4263             --
4264             OPEN c_get_item_rev_det (cp_inventory_item_id => l_inventory_item_id
4265                                     ,cp_organization_id => l_organization_id
4266                                     ,cp_revision_id     => l_revision_id
4267                                     );
4268             FETCH c_get_item_rev_det INTO l_curr_cc_id, l_curr_lifecycle_id, l_curr_phase_id, l_curr_status;
4269             CLOSE c_get_item_rev_det;
4270           END IF;
4271         ELSE
4272           --
4273           -- context of item
4274           --
4275           OPEN c_get_item_det (cp_inventory_item_id => l_inventory_item_id
4276                               ,cp_organization_id => l_organization_id
4277                               );
4278           FETCH c_get_item_det INTO l_curr_cc_id, l_curr_lifecycle_id, l_curr_phase_id, l_curr_status;
4279           CLOSE c_get_item_det;
4280         END IF;
4281         IF ( p_transaction_type IN (EGO_ITEM_PUB.G_TTYPE_PROMOTE, EGO_ITEM_PUB.G_TTYPE_DEMOTE)
4282              AND
4283              l_curr_lifecycle_id IS NULL
4284            ) THEN
4285           l_change_status_flag := FALSE;
4286           code_debug (l_api_name ||' no lifecycle associated to item / revision ');
4287           IF l_revision_id IS NULL THEN
4288             fnd_message.Set_Name(G_APP_NAME, 'EGO_ITEM_NO_LC_FOR_CHANGE');
4289           ELSE
4290             fnd_message.Set_Name(G_APP_NAME, 'EGO_REV_NO_LC_FOR_CHANGE');
4291           END IF;
4292           fnd_msg_pub.Add;
4293         END IF;
4294       END IF;  -- approval status
4295     END IF; -- validate item
4296   END IF; -- validate org
4297 
4298   IF NOT l_change_status_flag THEN
4299     --
4300     -- logical set of errors completed
4301     -- further validations assume that there are no errors
4302     --
4303     RAISE FND_API.G_EXC_ERROR;
4304   END IF;
4305 
4306   IF p_transaction_type IN (EGO_ITEM_PUB.G_TTYPE_PROMOTE, EGO_ITEM_PUB.G_TTYPE_DEMOTE
4307            /* , EGO_ITEM_PUB.G_TTYPE_CHANGE_PHASE */)  THEN
4308     --
4309     -- check if there is a project associated
4310     --
4311     IF 'TRUE' = EGO_LIFECYCLE_USER_PUB.Has_LC_Tracking_Project
4312                     (p_inventory_item_id  => l_inventory_item_id
4313                     ,p_organization_id    => l_organization_id
4314                     ,p_revision           => l_revision)  THEN
4315       code_debug (l_api_name ||' lc project associated to item / revision ');
4316       l_change_status_flag := FALSE;
4317       IF l_revision IS NOT NULL THEN
4318         fnd_message.Set_Name(G_APP_NAME,'EGO_ITEM_REV_LC_PROJ_EXISTS');
4319         fnd_message.set_token('REVISION', l_revision);
4320       ELSE
4321         fnd_message.Set_Name(G_APP_NAME,'ITEM_LC_PROJ_EXISTS');
4322       END IF;
4323       fnd_message.set_token('ITEM_NUMBER', l_item_number);
4324       fnd_message.set_token('ORG_NAME', l_org_name);
4325       fnd_msg_pub.Add;
4326     END IF;
4327 
4328     IF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_PROMOTE THEN
4329 
4330       -- BUG 11064547 swuppala: allow skipping of Phase during Promote/ Demote START
4331  	      -- If Phase ID is given, promote the Item to the given phase
4332  	      -- Or promote to the next immediate phase
4333      IF(p_phase_id  IS NULL) THEN
4334 
4335  	         --  Get the next phase and PROMOTE item to the next phase
4336           OPEN c_get_next_phase (cp_lifecycle_id => l_curr_lifecycle_id
4337                                 ,cp_phase_id     => l_curr_phase_id
4338                                 );
4339           FETCH c_get_next_phase INTO l_future_phase_id, l_phase_sequence;
4340           IF c_get_next_phase%NOTFOUND THEN
4341             CLOSE c_get_next_phase;
4342             code_debug (l_api_name ||' no phase to promote ');
4343             l_change_status_flag := FALSE;
4344             fnd_message.Set_Name(G_APP_NAME,'EGO_ITEM_CANNOT_PROMOTE');
4345             l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'LIFECYCLE'
4346                                                ,p_proj_element_id => l_curr_lifecycle_id);
4347             fnd_message.set_token('LIFE_CYCLE', l_dummy_char);
4348             l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'PHASE'
4349                                                ,p_proj_element_id => l_curr_phase_id);
4350             fnd_message.set_token('PHASE', l_dummy_char);
4351             fnd_msg_pub.Add;
4352           ELSE
4353             CLOSE c_get_next_phase;
4354           END IF;
4355      ELSE
4356  	         -- If Phase Id is given validate if it is a valid against the lifecycle
4357  	         OPEN c_chk_phase_against_lc (cp_lifecycle_id => l_curr_lifecycle_id
4358  	                                   ,cp_phase_id     => p_phase_id
4359  	                                   );
4360  	         FETCH c_chk_phase_against_lc INTO l_temp;
4361  	         IF c_chk_phase_against_lc%NOTFOUND THEN
4362  	           CLOSE c_chk_phase_against_lc;
4363  	           l_dummy_char := null;
4364  	           code_debug (l_api_name ||' phase does not exists in the current lifecycle of the item');
4365  	           l_change_status_flag := FALSE;
4366  	           fnd_message.Set_Name(G_APP_NAME,'EGO_LC_PHASE_NOT_ALLOWED');
4367  	           l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'LIFECYCLE'
4368  	                                             ,p_proj_element_id => l_curr_lifecycle_id);
4369  	           fnd_message.set_token('LIFECYCLE', l_dummy_char);
4370  	           l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'PHASE'
4371  	                                             ,p_proj_element_id => p_phase_id);
4372  	           fnd_message.set_token('PHASE', l_dummy_char);
4373  	           fnd_msg_pub.Add;
4374  	           -- EGO_LIFECYCLE_PHASE_INVALID if phase is invalid id?
4375  	         ELSE
4376  	           CLOSE c_chk_phase_against_lc;
4377  	           l_future_phase_id := p_phase_id;
4378  	         END IF;
4379  	         -- Also Check if it is a valid forward phase
4380  	         OPEN c_get_phase_seq(cp_phase_id => l_curr_phase_id);
4381  	         FETCH c_get_phase_seq INTO l_item_sequence;
4382  	         CLOSE c_get_phase_seq;
4383  	         OPEN c_get_phase_seq(cp_phase_id => p_phase_id);
4384  	         FETCH c_get_phase_seq INTO l_phase_sequence;
4385  	         CLOSE c_get_phase_seq;
4386 
4387  	         IF l_phase_sequence < l_item_sequence THEN
4388  	           code_debug (l_api_name ||' INVALID PHASE FOR PROMOTE');
4389  	           l_change_status_flag := FALSE;
4390  	           fnd_message.Set_Name(G_APP_NAME,'EGO_LC_PROMOTE_NOT_ALLOWED');
4391 
4392  	           l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'LIFECYCLE'
4393  	                                             ,p_proj_element_id => l_curr_lifecycle_id);
4394 
4395  	           fnd_message.set_token('LIFECYCLE', l_dummy_char);
4396  	           l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'PHASE'
4397  	                                             ,p_proj_element_id => p_phase_id);
4398 
4399  	           fnd_message.set_token('PHASE',  l_dummy_char);
4400  	           l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'PHASE'
4401  	                                             ,p_proj_element_id => l_curr_phase_id);
4402 
4403  	           fnd_message.set_token('CURRENTPHASE',  l_dummy_char);
4404 
4405  	           fnd_msg_pub.Add;
4406  	     END IF;
4407         END IF;
4408     ELSIF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_DEMOTE THEN
4409 
4410       -- If Phase ID is given, demote the Item to the given phase
4411       -- Or demote to the immediate previous phas
4412      IF(p_phase_id  IS NULL) THEN
4413  	         -- Get teh prev phase and demote the item
4414           OPEN c_get_priv_phase (cp_lifecycle_id => l_curr_lifecycle_id
4415                                 ,cp_phase_id     => l_curr_phase_id
4416                                 );
4417           FETCH c_get_priv_phase INTO l_future_phase_id, l_phase_sequence;
4418           IF c_get_priv_phase%NOTFOUND THEN
4419             CLOSE c_get_priv_phase;
4420             code_debug (l_api_name ||' no phase to demote ');
4421             l_change_status_flag := FALSE;
4422             fnd_message.Set_Name(G_APP_NAME,'EGO_ITEM_CANNOT_DEMOTE');
4423             l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'LIFECYCLE'
4424                                                ,p_proj_element_id => l_curr_lifecycle_id);
4425             fnd_message.set_token('LIFE_CYCLE', l_dummy_char);
4426             l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'PHASE'
4427                                                ,p_proj_element_id => l_curr_phase_id);
4428             fnd_message.set_token('PHASE', l_dummy_char);
4429             fnd_msg_pub.Add;
4430             fnd_msg_pub.Add;
4431           ELSE
4432             CLOSE c_get_priv_phase;
4433           END IF;
4434       ELSE
4435  	        -- Check if the given phase is valid.
4436  	         OPEN c_chk_phase_against_lc (cp_lifecycle_id => l_curr_lifecycle_id
4437  	                                   ,cp_phase_id     => p_phase_id
4438  	                                   );
4439  	         FETCH c_chk_phase_against_lc INTO l_temp;
4440  	         IF c_chk_phase_against_lc%NOTFOUND THEN
4441  	           CLOSE c_chk_phase_against_lc;
4442  	           l_dummy_char := null;
4443  	           code_debug (l_api_name ||' phase does not exists in the current lifecycle of the item');
4444  	           l_change_status_flag := FALSE;
4445  	           fnd_message.Set_Name(G_APP_NAME,'EGO_LC_PHASE_NOT_ALLOWED');
4446  	           l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'LIFECYCLE'
4447  	                                             ,p_proj_element_id => l_curr_lifecycle_id);
4448  	           fnd_message.set_token('LIFECYCLE', l_dummy_char);
4449  	           l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'PHASE'
4450  	                                             ,p_proj_element_id => p_phase_id);
4451  	           fnd_message.set_token('PHASE', l_dummy_char);
4452  	           fnd_msg_pub.Add;
4453  	           -- EGO_LIFECYCLE_PHASE_INVALID if phase is invalid id?
4454  	         ELSE
4455  	           CLOSE c_chk_phase_against_lc;
4456  	           l_future_phase_id := p_phase_id;
4457  	         END IF;
4458  	        -- Check if it is a valid backward phase
4459  	         OPEN c_get_phase_seq(cp_phase_id => l_curr_phase_id);
4460  	         FETCH c_get_phase_seq INTO l_item_sequence;
4461  	         CLOSE c_get_phase_seq;
4462  	         OPEN c_get_phase_seq(cp_phase_id => p_phase_id);
4463  	         FETCH c_get_phase_seq INTO l_phase_sequence;
4464  	         CLOSE c_get_phase_seq;
4465 
4466  	         IF l_phase_sequence > l_item_sequence THEN
4467  	           code_debug (l_api_name ||' INVALID PHASE FOR DEMOTE');
4468  	           l_change_status_flag := FALSE;
4469  	           fnd_message.Set_Name(G_APP_NAME,'EGO_LC_DEMOTE_NOT_ALLOWED');
4470  	                 l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'LIFECYCLE'
4471  	                                             ,p_proj_element_id => l_curr_lifecycle_id);
4472 
4473  	           fnd_message.set_token('LIFECYCLE', l_dummy_char);
4474  	           l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'PHASE'
4475  	                                             ,p_proj_element_id => p_phase_id);
4476 
4477  	           fnd_message.set_token('PHASE',  l_dummy_char);
4478  	           l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'PHASE'
4479  	                                             ,p_proj_element_id => l_curr_phase_id);
4480 
4481  	           fnd_message.set_token('CURRENTPHASE',  l_dummy_char);
4482 
4483  	           fnd_msg_pub.Add;
4484                 END IF;
4485          END IF;
4486       END IF;
4487     -- PROMOTE/DEMOTE can be used to skip the phase
4488  	  -- CHANGE_PHASE is not supported Bug 11064547
4489  	   /*
4490     ELSIF   p_transaction_type = EGO_ITEM_PUB.G_TTYPE_CHANGE_PHASE then
4491       --- first chk if the phase entered exists
4492       ---
4493       --- chk if the phase is part of the current lifecycle of the item
4494       OPEN c_chk_phase_against_lc (cp_lifecycle_id => l_curr_lifecycle_id
4495                                   ,cp_phase_id     => p_phase_id
4496                                   );
4497       FETCH c_chk_phase_against_lc INTO l_temp;
4498       IF c_chk_phase_against_lc%NOTFOUND THEN
4499         CLOSE c_chk_phase_against_lc;
4500         l_dummy_char := null;
4501         code_debug (l_api_name ||' phase does not exists in the current lifecycle of the item');
4502         l_change_status_flag := FALSE;
4503         fnd_message.Set_Name(G_APP_NAME,'EGO_LC_PHASE_NOT_ALLOWED');
4504         l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'LIFECYCLE'
4505                                            ,p_proj_element_id => l_curr_lifecycle_id);
4506         fnd_message.set_token('LIFECYCLE', l_dummy_char);
4507         l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'PHASE'
4508                                            ,p_proj_element_id => p_phase_id);
4509         fnd_message.set_token('PHASE', l_dummy_char);
4510         fnd_msg_pub.Add;
4511         -- EGO_LIFECYCLE_PHASE_INVALID if phase is invalid id?
4512       ELSE
4513         CLOSE c_chk_phase_against_lc;
4514         l_future_phase_id := p_phase_id;
4515       END IF;
4516 
4517       --- Only promotes are allowed to 'Freeze' phase
4518       ---
4519       OPEN c_get_phase_seq(cp_phase_id => l_curr_phase_id);
4520       FETCH c_get_phase_seq INTO l_item_sequence;
4521       CLOSE c_get_phase_seq;
4522       OPEN c_get_phase_seq(cp_phase_id => p_phase_id);
4523       FETCH c_get_phase_seq INTO l_phase_sequence;
4524       CLOSE c_get_phase_seq;
4525 
4526       IF l_phase_sequence < l_item_sequence THEN
4527         code_debug (l_api_name ||' for CHANGE_PHASE only promotes are allowed');
4528         l_change_status_flag := FALSE;
4529         fnd_message.Set_Name(G_APP_NAME,'EGO_LC_PHASE_CHG_NOT_ALLOWED');
4530 
4531         fnd_message.set_token('ITEM_NUMBER', l_item_number);
4532         fnd_message.set_token('REVISION', l_revision);
4533         fnd_msg_pub.Add;
4534       END IF;
4535 
4536 
4537     END IF;*/
4538 
4539     --
4540     -- get the policy for changes
4541     --
4542     code_debug (l_api_name ||' calling  EGO_LIFECYCLE_USER_PUB.Get_Policy_For_Phase_Change ');
4543     EGO_LIFECYCLE_USER_PUB.Get_Policy_For_Phase_Change
4544         ( p_api_version          => p_api_version
4545         , p_project_id           => NULL
4546         , p_inventory_item_id    => l_inventory_item_id
4547         , p_organization_id      => l_organization_id
4548         , p_curr_phase_id        => l_curr_phase_id
4549         , p_future_phase_id      => l_future_phase_id
4550         , p_phase_change_code    => p_transaction_type
4551         , p_lifecycle_id         => l_curr_lifecycle_id
4552         , x_policy_code          => l_policy_code
4553         , x_return_status        => x_return_status
4554         , x_errorcode            => l_dummy_char
4555         , x_msg_count            => x_msg_count
4556         , x_msg_data             => x_msg_data
4557         );
4558     code_debug (l_api_name ||' returning EGO_LIFECYCLE_USER_PUB.Get_Policy_For_Phase_Change with status '||x_return_status);
4559     IF l_policy_code IN (l_policy_co_required, l_policy_not_allowed) THEN
4560       l_change_status_flag := FALSE;
4561       -- decide the message based upon
4562       -- item /item revision
4563       -- change order required OR changes not allowed
4564       IF l_policy_code = l_policy_co_required THEN
4565         code_debug (l_api_name ||' policy requires CO to promote / demote ');
4566         IF l_revision_id IS NULL THEN
4567           l_error_message := 'EGO_ITEM_NO_PROMOTE';
4568         ELSE
4569           l_error_message := 'EGO_ITEM_REV_NO_PROMOTE';
4570         END IF;
4571       ELSIF l_policy_code = l_policy_not_allowed THEN
4572         code_debug (l_api_name ||' policy says not allowed to promote / demote ');
4573         IF l_revision_id IS NULL THEN
4574           l_error_message := 'EGO_ITEM_NO_DEMOTE';
4575         ELSE
4576           l_error_message := 'EGO_ITEM_REV_NO_DEMOTE';
4577         END IF;
4578       END IF;
4579       fnd_message.Set_Name(G_APP_NAME,l_error_message);
4580       fnd_message.set_token('ITEM_NUMBER', l_item_number);
4581       IF l_revision_id IS NOT NULL THEN
4582         fnd_message.set_token('REVISION', l_revision);
4583       END IF;
4584       l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'LIFECYCLE'
4585                                          ,p_proj_element_id => l_curr_lifecycle_id);
4586       fnd_message.set_token('LIFE_CYCLE', l_dummy_char);
4587       l_dummy_char := get_lifecycle_name (p_lc_phase_type   => 'PHASE'
4588                                          ,p_proj_element_id => l_curr_phase_id);
4589       fnd_message.set_token('PHASE', l_dummy_char);
4590       SELECT concatenated_segments
4591       INTO l_dummy_char
4592       FROM MTL_ITEM_CATALOG_GROUPS_KFV
4593       WHERE ITEM_CATALOG_GROUP_ID = (
4594           SELECT item_catalog_group_id
4595           FROM (SELECT item_catalog_group_id
4596                 FROM mtl_item_catalog_groups_b ic
4597                 WHERE EXISTS
4598                         ( SELECT olc.object_classification_code CatalogId
4599                           FROM  ego_obj_type_lifecycles olc, fnd_objects o
4600                           WHERE o.obj_name =  G_EGO_ITEM
4601                             AND olc.object_id = o.object_id
4602                             AND olc.lifecycle_id = l_curr_lifecycle_id
4603                             AND olc.object_classification_code = l_curr_cc_id
4604                          )
4605                 CONNECT BY PRIOR parent_catalog_group_id = item_catalog_group_id
4606                 START WITH item_catalog_group_id = l_curr_cc_id
4607                 ) CAT_HIER
4608           WHERE ROWNUM = 1
4609                                    );
4610       fnd_message.set_token('CATALOG_CATEGORY_NAME', l_dummy_char);
4611       fnd_msg_pub.Add;
4612     END IF;
4613   ELSIF p_transaction_type IN (EGO_ITEM_PUB.G_TTYPE_UPDATE, EGO_ITEM_PUB.G_TTYPE_DELETE) THEN
4614     -- check if the user has privilege to update the item.
4615     IF p_phase_id IS NOT NULL THEN
4616       -- user changing phase
4617       OPEN c_get_phase_seq(cp_phase_id => l_curr_phase_id);
4618       FETCH c_get_phase_seq INTO l_item_sequence;
4619       CLOSE c_get_phase_seq;
4620       OPEN c_get_phase_seq(cp_phase_id => p_phase_id);
4621       FETCH c_get_phase_seq INTO l_phase_sequence;
4622       CLOSE c_get_phase_seq;
4623       IF l_item_sequence < l_phase_sequence THEN
4624         l_priv_function_name := G_FN_NAME_PROMOTE;
4625         l_error_message := 'EGO_NO_PRIV_PROMOTE';
4626       ELSIF l_item_sequence > l_phase_sequence THEN
4627         l_priv_function_name := G_FN_NAME_DEMOTE;
4628         l_error_message := 'EGO_NO_PRIV_DEMOTE';
4629       ELSE
4630         -- phase is same, doing status change
4631         l_priv_function_name := G_FN_NAME_CHANGE_STATUS;
4632         l_error_message := 'EGO_NO_PRIV_CHANGE_STATUS';
4633       END IF;
4634     ELSE
4635       l_priv_function_name := G_FN_NAME_CHANGE_STATUS;
4636       l_error_message := 'EGO_NO_PRIV_CHANGE_STATUS';
4637     END IF;
4638     -- 4052565
4639     -- modified call to has_role_on_item from validate_role_privilege
4640     IF NOT has_role_on_item
4641                    (p_function_name        => l_priv_function_name
4642                    ,p_inventory_item_id    => l_inventory_item_id
4643                    ,p_item_number          => l_item_number
4644                    ,p_organization_id      => l_organization_id
4645                    ,p_organization_name    => NULL
4646                    ,p_user_id              => l_user_id
4647                    ,p_party_id             => NULL
4648                    ,p_set_message          => G_TRUE
4649                    ) THEN
4650       code_debug(l_api_name ||' user does not have privilege to update the existing change '||p_transaction_type);
4651       l_change_status_flag := FALSE;
4652       fnd_message.Set_Name(G_APP_NAME,l_error_message);
4653       fnd_message.set_token('USER', FND_GLOBAL.USER_NAME);
4654       fnd_message.set_token('ITEM_NUMBER', l_item_number);
4655       fnd_message.set_token('ORGANIZATION', l_org_name);
4656       fnd_msg_pub.Add;
4657     END IF;
4658   END IF;
4659 
4660   IF l_change_status_flag THEN
4661     code_debug (l_api_name ||' calling  EGO_ITEM_LC_IMP_PC_PUB.Create_Pending_Phase_Change ');
4662     IF p_transaction_type IN (EGO_ITEM_PUB.G_TTYPE_PROMOTE, EGO_ITEM_PUB.G_TTYPE_DEMOTE)  THEN
4663       EGO_ITEM_LC_IMP_PC_PUB.Create_Pending_Phase_Change
4664              (p_api_version         => p_api_version
4665              ,p_commit              => FND_API.G_FALSE
4666              ,p_inventory_item_id   => l_inventory_item_id
4667              ,p_item_number         => l_item_number
4668              ,p_organization_id     => l_organization_id
4669              ,p_effective_date      => l_effective_date
4670              ,p_pending_flag        => NULL
4671              ,p_revision            => l_revision
4672              ,p_lifecycle_id        => l_curr_lifecycle_id
4673              ,p_phase_id            => l_future_phase_id
4674              ,p_status_code         => p_status
4675              ,p_change_id           => NULL
4676              ,p_change_line_id      => NULL
4677              ,p_perform_security_check => FND_API.G_FALSE
4678              ,x_return_status       => x_return_status
4679              ,x_errorcode           => l_dummy_char
4680              ,x_msg_count           => x_msg_count
4681              ,x_msg_data            => x_msg_data
4682              );
4683     -- PROMOTE/DEMOTE can be used to skip the phase
4684  	  -- CHANGE_PHASE is not supported- Bug 11064547
4685  	   /*
4686     ELSIF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_CHANGE_PHASE  THEN
4687 
4688       EGO_ITEM_LC_IMP_PC_PUB.Create_Pending_Phase_Change
4689              (p_api_version         => p_api_version
4690              ,p_commit              => FND_API.G_FALSE
4691              ,p_inventory_item_id   => l_inventory_item_id
4692              ,p_item_number         => l_item_number
4693              ,p_organization_id     => l_organization_id
4694              ,p_effective_date      => l_effective_date
4695              ,p_pending_flag        => NULL
4696              ,p_revision            => l_revision
4697              ,p_lifecycle_id        => l_curr_lifecycle_id
4698              ,p_phase_id            => l_future_phase_id
4699              ,p_status_code         => NULL
4700              ,p_change_id           => NULL
4701              ,p_change_line_id      => NULL
4702              ,p_perform_security_check => FND_API.G_FALSE
4703              ,x_return_status       => x_return_status
4704              ,x_errorcode           => l_dummy_char
4705              ,x_msg_count           => x_msg_count
4706              ,x_msg_data            => x_msg_data
4707              );
4708     */
4709     ELSIF p_transaction_type = EGO_ITEM_PUB.G_TTYPE_CHANGE_STATUS THEN
4710       EGO_ITEM_LC_IMP_PC_PUB.Create_Pending_Phase_Change
4711              (p_api_version         => p_api_version
4712              ,p_commit              => FND_API.G_FALSE
4713              ,p_inventory_item_id   => l_inventory_item_id
4714              ,p_item_number         => l_item_number
4715              ,p_organization_id     => l_organization_id
4716              ,p_effective_date      => l_effective_date
4717              ,p_pending_flag        => NULL
4718              ,p_revision            => NULL
4719              ,p_lifecycle_id        => NULL
4720              ,p_phase_id            => NULL
4721              ,p_status_code         => p_status
4722              ,p_change_id           => NULL
4723              ,p_change_line_id      => NULL
4724              ,p_perform_security_check => FND_API.G_FALSE
4725              ,x_return_status       => x_return_status
4726              ,x_errorcode           => l_dummy_char
4727              ,x_msg_count           => x_msg_count
4728              ,x_msg_data            => x_msg_data
4729              );
4730 
4731     ELSIF p_transaction_type IN (EGO_ITEM_PUB.G_TTYPE_UPDATE, EGO_ITEM_PUB.G_TTYPE_DELETE) THEN
4732       EGO_ITEM_LC_IMP_PC_PUB.Modify_Pending_Phase_Change
4733              (p_api_version         => p_api_version
4734              ,p_commit              => FND_API.G_FALSE
4735              ,p_transaction_type    => p_transaction_type
4736              ,p_inventory_item_id   => l_inventory_item_id
4737              ,p_organization_id     => l_organization_id
4738              ,p_revision_id         => l_revision_id
4739              ,p_lifecycle_id        => p_lifecycle_id
4740              ,p_phase_id            => p_phase_id
4741              ,p_status_code         => p_status
4742              ,p_change_id           => NULL
4743              ,p_change_line_id      => NULL
4744              ,p_effective_date      => p_effective_date
4745              ,p_new_effective_date  => l_effective_date
4746              ,p_perform_security_check => FND_API.G_FALSE
4747              ,x_return_status       => x_return_status
4748              ,x_errorcode           => l_dummy_char
4749              ,x_msg_count           => x_msg_count
4750              ,x_msg_data            => x_msg_data
4751              );
4752     END IF;
4753 
4754     code_debug (l_api_name ||' return status from ego_item_lc_imp_pc_pub.create_pending_phase_change '||x_return_status);
4755     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4756       code_debug (l_api_name ||' cannot create/modify/delete pending phase change '||x_msg_data);
4757       --
4758       -- this will occur only in case of exception
4759       -- all valid values are passed.
4760       --
4761       IF x_msg_count = 1 THEN
4762         fnd_message.Set_Name(G_APP_NAME,'EGO_GENERIC_MSG_TEXT');
4763         fnd_message.set_token('MESSAGE', x_msg_data);
4764         fnd_msg_pub.Add;
4765       END IF;
4766       RAISE FND_API.G_EXC_ERROR;
4767     ELSIF  FND_API.To_Boolean(p_implement_changes) THEN
4768       code_debug (l_api_name ||' calling EGO_ITEM_LC_IMP_PC_PUB.Implement_Pending_Changes ');
4769       l_is_master_org := EGO_ITEM_LC_IMP_PC_PUB.get_master_org_status(l_organization_id);
4770       l_revision_master_controlled := FND_API.g_false;
4771       l_status_master_controlled := EGO_ITEM_LC_IMP_PC_PUB.get_master_controlled_status();
4772       EGO_ITEM_LC_IMP_PC_PUB.Implement_Pending_Changes
4773               (p_api_version                  => p_api_version
4774               ,p_inventory_item_id            => l_inventory_item_id
4775               ,p_organization_id              => l_organization_id
4776               ,p_revision_id                  => l_revision_id
4777               ,p_revision_master_controlled   => l_revision_master_controlled
4778               ,p_status_master_controlled     => l_status_master_controlled
4779               ,p_is_master_org                => l_is_master_org
4780               ,p_perform_security_check       => FND_API.G_FALSE
4781               ,x_return_status                => x_return_status
4782               ,x_errorcode                    => l_dummy_char
4783               ,x_msg_count                    => x_msg_count
4784               ,x_msg_data                     => x_msg_data
4785               );
4786       code_debug (l_api_name ||' return status from ego_item_lc_imp_pc_pub.Implement_Pending_Changes '||x_return_status);
4787       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4788         code_debug (l_api_name ||' cannot implement changes '||x_msg_data);
4789         IF x_msg_count = 1 THEN
4790           fnd_message.Set_Name(G_APP_NAME,'EGO_GENERIC_MSG_TEXT');
4791           fnd_message.set_token('MESSAGE', x_msg_data);
4792           fnd_msg_pub.Add;
4793         END IF;
4794         RAISE FND_API.G_EXC_ERROR;
4795       END IF;
4796     END IF;
4797   ELSE
4798     code_debug (l_api_name ||' flashing all errors ');
4799     RAISE FND_API.G_EXC_ERROR;
4800   END IF;
4801   --
4802   -- commit data
4803   --
4804   IF FND_API.To_Boolean( p_commit ) THEN
4805     COMMIT WORK;
4806   END IF;
4807   x_return_status := FND_API.G_RET_STS_SUCCESS;
4808   EXCEPTION
4809     WHEN FND_API.G_EXC_ERROR THEN
4810       IF FND_API.To_Boolean( p_commit ) THEN
4811         ROLLBACK TO  PROCESS_ITEM_PHASE_SP;
4812       END IF;
4813       x_return_status := FND_API.G_RET_STS_ERROR;
4814       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
4815                                ,p_count   => x_msg_count
4816                                ,p_data    => x_msg_data);
4817     WHEN OTHERS THEN
4818       IF FND_API.To_Boolean( p_commit ) THEN
4819         ROLLBACK TO  PROCESS_ITEM_PHASE_SP;
4820       END IF;
4821       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
4822       IF c_get_item_det%ISOPEN THEN
4823         CLOSE c_get_item_det;
4824       END IF;
4825       IF c_get_item_rev_det%ISOPEN THEN
4826         CLOSE c_get_item_rev_det;
4827       END IF;
4828       IF c_get_phase_seq%ISOPEN THEN
4829         CLOSE c_get_phase_seq;
4830       END IF;
4831       IF c_get_next_phase%ISOPEN THEN
4832         CLOSE c_get_next_phase;
4833       END IF;
4834       IF c_get_priv_phase%ISOPEN THEN
4835         CLOSE c_get_priv_phase;
4836       END IF;
4837       IF c_chk_phase_against_lc%ISOPEN THEN
4838         CLOSE c_chk_phase_against_lc;
4839       END IF;
4840       FND_MESSAGE.Set_Name(G_APP_NAME, G_PLSQL_ERR);
4841       FND_MESSAGE.Set_Token(G_PKG_NAME_TOKEN, G_PKG_NAME);
4842       FND_MESSAGE.Set_Token(G_API_NAME_TOKEN, l_api_name);
4843       FND_MESSAGE.Set_Token(G_SQL_ERR_MSG_TOKEN, SQLERRM);
4844       FND_MSG_PUB.Add;
4845       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
4846                                ,p_count   => x_msg_count
4847                                ,p_data    => x_msg_data);
4848       code_debug(' Exception in '||l_api_name||' : ' ||x_msg_data );
4849 END Process_item_phase_and_status;
4850 
4851 ------------------------------------------------------------------------------
4852   -- Start OF comments
4853   -- API name  : Implement_Item_Pending_Changes
4854   -- TYPE      : Public
4855   -- Pre-reqs  : None
4856   -- PROCEDURE : Implement the pending changes on the item
4857   --
4858 ------------------------------------------------------------------------------
4859 PROCEDURE Implement_Item_Pending_Changes
4860       (p_api_version           IN  NUMBER
4861       ,p_commit                IN  VARCHAR2
4862       ,p_init_msg_list         IN  VARCHAR2
4863       ,p_inventory_item_id     IN  NUMBER
4864       ,p_item_number           IN  VARCHAR2
4865       ,p_organization_id       IN  NUMBER
4866       ,p_organization_code     IN  VARCHAR2
4867       ,p_revision_id           IN  NUMBER
4868       ,p_revision              IN  VARCHAR2
4869       ,x_return_status         OUT NOCOPY VARCHAR2
4870       ,x_msg_count             OUT NOCOPY NUMBER
4871       ,x_msg_data              OUT NOCOPY VARCHAR2
4872      ) IS
4873   l_api_name                    VARCHAR2(30);
4874   l_api_version                 NUMBER;
4875   l_organization_id             mtl_system_items_b.organization_id%TYPE;
4876   l_inventory_item_id           mtl_system_items_b.inventory_item_id%TYPE;
4877   l_item_number                 mtl_system_items_b_kfv.concatenated_segments%TYPE;
4878   l_approval_status             mtl_system_items_b.approval_status%TYPE;
4879   l_revision_id                 mtl_item_revisions_b.revision_id%TYPE;
4880   l_revision                    mtl_item_revisions_b.revision%TYPE;
4881   l_dummy_char                  VARCHAR2(999);
4882   l_revision_master_controlled  VARCHAR2(1);
4883   l_status_master_controlled    VARCHAR2(1);
4884   l_is_master_org               VARCHAR2(1);
4885   l_invalid_flag                BOOLEAN;
4886   l_implement_flag              BOOLEAN;
4887 
4888 BEGIN
4889   l_api_name := 'Implement_Item_Pending_Changes';
4890   l_api_version := 1.0;
4891   code_debug(l_api_name ||' started with params ');
4892   code_debug(' p_api_version '|| p_api_version||' p_commit '||p_commit||' p_init_msg_list '||p_init_msg_list );
4893   code_debug(' p_inventory_item_id '||p_inventory_item_id||' p_item_number '||p_item_number||' p_revision  '||p_revision );
4894   code_debug(' p_organization_id '||p_organization_id ||' p_organization_code '||p_organization_code||' p_revision_id '||p_revision_id );
4895   IF FND_API.To_Boolean( p_commit ) THEN
4896     SAVEPOINT IMPLEMENT_CHANGES_SP;
4897   END IF;
4898   --
4899   -- Initialize message list
4900   --
4901   IF FND_API.To_Boolean(p_init_msg_list) THEN
4902     FND_MSG_PUB.Initialize;
4903   END IF;
4904   code_debug(l_api_name||' msg pub initialized ' );
4905   --
4906   --Standard checks
4907   --
4908   IF NOT FND_API.Compatible_API_Call (l_api_version
4909                                      ,p_api_version
4910                                      ,l_api_name
4911                                      ,g_pkg_name) THEN
4912     code_debug (l_api_name ||' invalid api version ');
4913     RAISE FND_API.G_EXC_ERROR;
4914   END IF;
4915   --
4916   -- check for mandatory params
4917   --
4918   IF ( (p_inventory_item_id IS NULL AND p_item_number IS NULL)
4919         OR
4920        (p_organization_id IS NULL AND p_organization_code IS NULL)
4921      ) THEN
4922     --
4923     -- invalid params passed
4924     --
4925     code_debug (l_api_name ||' invalid parameters passed ');
4926     fnd_message.Set_Name(G_APP_NAME, G_INVALID_PARAMS_MSG);
4927     fnd_message.Set_Token(G_PKG_NAME_TOKEN, G_PKG_NAME);
4928     fnd_message.Set_Token(G_PROC_NAME_TOKEN, l_api_name);
4929     FND_MSG_PUB.Add;
4930     RAISE FND_API.G_EXC_ERROR;
4931   END IF;
4932 
4933   --
4934   -- validate organization details
4935   --
4936   l_organization_id   := p_organization_id;
4937   l_inventory_item_id := p_inventory_item_id;
4938   l_item_number       := p_item_number;
4939   l_revision_id       := p_revision_id;
4940   l_revision          := p_revision;
4941   l_implement_flag    := TRUE;
4942 
4943   IF NOT validate_org (x_organization_id   => l_organization_id
4944                       ,p_organization_code => p_organization_code
4945                       ,p_set_message       => G_TRUE) THEN
4946     code_debug (l_api_name ||' invalid organiation passed ');
4947     l_implement_flag := FALSE;
4948   ELSE
4949     --
4950     -- validate item details
4951     --
4952     IF NOT validate_item (x_inventory_item_id => l_inventory_item_id
4953                          ,x_item_number       => l_item_number
4954                          ,x_approval_status   => l_approval_status
4955                          ,p_organization_id   => l_organization_id
4956                          ,p_set_message       => G_TRUE) THEN
4957       code_debug (l_api_name ||' invalid item passed ');
4958       l_implement_flag := FALSE;
4959     ELSE
4960 -- 4052565
4961 -- privilege check is now done in Implement_Pending_changes
4962 --      IF NOT validate_role_privilege (p_function_name     => G_FN_NAME_CHANGE_STATUS
4963 --                                     ,p_inventory_item_id => l_inventory_item_id
4964 --                                     ,p_item_number       => l_item_number
4965 --                                     ,p_organization_id   => l_organization_id
4966 --                                     ,p_organization_name => NULL
4967 --                                     ,p_set_message       => G_TRUE) THEN
4968 --        code_debug(l_api_name ||' user does not have privilege to implement pending changes');
4969 --        l_implement_flag := FALSE;
4970 --      END IF;
4971       --
4972       -- validate revision details
4973       --
4974       IF (l_revision_id IS NOT NULL OR l_revision IS NOT NULL) THEN
4975         IF NOT validate_item_rev
4976                              (x_revision_id        => l_revision_id
4977                              ,x_revision           => l_revision
4978                              ,p_inventory_item_id  => l_inventory_item_id
4979                              ,p_organization_id    => l_organization_id
4980                              ,p_set_message        => G_TRUE ) THEN
4981           code_debug (l_api_name ||' invalid revision passed ');
4982           l_implement_flag := FALSE;
4983         END IF;
4984       END IF;
4985     END IF;
4986   END IF;
4987 
4988   IF l_implement_flag THEN
4989     code_debug (l_api_name ||' calling  EGO_ITEM_LC_IMP_PC_PUB.Implement_Pending_Changes ');
4990     l_is_master_org := EGO_ITEM_LC_IMP_PC_PUB.get_master_org_status(l_organization_id);
4991     l_revision_master_controlled := FND_API.g_false;
4992     l_status_master_controlled := EGO_ITEM_LC_IMP_PC_PUB.get_master_controlled_status();
4993     EGO_ITEM_LC_IMP_PC_PUB.Implement_Pending_Changes
4994               (p_api_version                  => p_api_version
4995               ,p_inventory_item_id            => l_inventory_item_id
4996               ,p_organization_id              => l_organization_id
4997               ,p_revision_id                  => l_revision_id
4998               ,p_revision_master_controlled   => l_revision_master_controlled
4999               ,p_status_master_controlled     => l_status_master_controlled
5000               ,p_is_master_org                => l_is_master_org
5001               ,p_perform_security_check       => FND_API.G_TRUE
5002               ,x_return_status                => x_return_status
5003               ,x_errorcode                    => l_dummy_char
5004               ,x_msg_count                    => x_msg_count
5005               ,x_msg_data                     => x_msg_data
5006               );
5007     code_debug (l_api_name ||' return status from ego_item_lc_imp_pc_pub.Implement_Pending_Changes '||x_return_status);
5008     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5009       IF x_msg_count = 1 THEN
5010         code_debug (l_api_name ||' cannot implement changes for '||x_msg_data);
5011         fnd_message.Set_Name(G_APP_NAME,'EGO_GENERIC_MSG_TEXT');
5012         fnd_message.set_token('MESSAGE', x_msg_data);
5013         fnd_msg_pub.Add;
5014       END IF;
5015       RAISE FND_API.G_EXC_ERROR;
5016     END IF;
5017   ELSE
5018     code_debug (l_api_name ||' flashing all errors ');
5019     RAISE FND_API.G_EXC_ERROR;
5020   END IF;
5021   --
5022   -- commit data
5023   --
5024   IF FND_API.To_Boolean( p_commit ) THEN
5025     COMMIT WORK;
5026   END IF;
5027 
5028   EXCEPTION
5029     WHEN FND_API.G_EXC_ERROR THEN
5030       IF FND_API.To_Boolean( p_commit ) THEN
5031         ROLLBACK TO  IMPLEMENT_CHANGES_SP;
5032       END IF;
5033       x_return_status := FND_API.G_RET_STS_ERROR;
5034       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5035                                ,p_count   => x_msg_count
5036                                ,p_data    => x_msg_data);
5037     WHEN OTHERS THEN
5038       IF FND_API.To_Boolean( p_commit ) THEN
5039         ROLLBACK TO  IMPLEMENT_CHANGES_SP;
5040       END IF;
5041       x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
5042       FND_MESSAGE.Set_Name(G_APP_NAME, G_PLSQL_ERR);
5043       FND_MESSAGE.Set_Token(G_PKG_NAME_TOKEN, G_PKG_NAME);
5044       FND_MESSAGE.Set_Token(G_API_NAME_TOKEN, l_api_name);
5045       FND_MESSAGE.Set_Token(G_SQL_ERR_MSG_TOKEN, SQLERRM);
5046       FND_MSG_PUB.Add;
5047       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5048                                ,p_count   => x_msg_count
5049                                ,p_data    => x_msg_data);
5050       code_debug(' Exception in '||l_api_name||' : ' ||x_msg_data );
5051 END Implement_Item_Pending_Changes;
5052 
5053 
5054 -- -----------------------------------------------------------------------------
5055 --  Fix for Bug# 3945885.
5056 --
5057 --  API Name:       Get_Seq_Gen_Item_Nums
5058 --
5059 --  Description:
5060 --    API to return a Sequence of Item Numbers, given the Item Catalog Group ID.
5061 --
5062 -- -----------------------------------------------------------------------------
5063  PROCEDURE Get_Seq_Gen_Item_Nums( p_item_catalog_group_id    IN  NUMBER
5064          ,p_org_id_tbl               IN  DBMS_SQL.VARCHAR2_TABLE
5065                                  ,x_item_num_tbl             IN OUT NOCOPY EGO_VARCHAR_TBL_TYPE
5066                                  ) IS
5067 
5068    -----------------------------------------------------------------------
5069    -- Variables used to query Item Number Generation Method
5070    -----------------------------------------------------------------------
5071    l_itemgen_method_table         DBMS_SQL.VARCHAR2_TABLE;
5072    l_itemgen_seq_table            DBMS_SQL.VARCHAR2_TABLE;
5073    l_itemgen_prefix_table         DBMS_SQL.VARCHAR2_TABLE;
5074    l_itemgen_suffix_table         DBMS_SQL.VARCHAR2_TABLE;
5075    l_itemgen_method_cursor        INTEGER;
5076    l_itemgen_method_exec          INTEGER;
5077    l_itemgen_method_rows_cnt      NUMBER;
5078 
5079    l_item_num                     VARCHAR(1000);
5080    l_item_num_tbl                 EGO_VARCHAR_TBL_TYPE;
5081    l_exists                       VARCHAR2(1);
5082    l_can_itemnum_gen              BOOLEAN;
5083    l_itemgen_rownum               NUMBER;
5084    l_new_itemgen_sql              VARCHAR2(1000);
5085    -----------------------------------------------------------------------
5086 
5087    l_itemgen_hierarchy_sql    VARCHAR2(10000) :=
5088    ' SELECT EgoNewItemReqSetupEO.ITEM_CATALOG_GROUP_ID,             '||
5089    '        EgoNewItemReqSetupEO.PARENT_CATALOG_GROUP_ID,           '||
5090    '        DECODE(EgoNewItemReqSetupEO.ITEM_NUM_GEN_METHOD,            '||
5091    '               null, DECODE(EgoNewItemReqSetupEO.PARENT_CATALOG_GROUP_ID, null, ''U'', ''I''), '||
5092    '               EgoNewItemReqSetupEO.ITEM_NUM_GEN_METHOD) ITEM_NUM_GEN_METHOD,       '||
5093    '        EgoNewItemReqSetupEO.ITEM_NUM_SEQ_NAME,             '||
5094    '        EgoNewItemReqSetupEO.PREFIX,                '||
5095    '        EgoNewItemReqSetupEO.SUFFIX                 '||
5096    ' FROM MTL_ITEM_CATALOG_GROUPS_B EgoNewItemReqSetupEO            '||
5097    ' CONNECT BY PRIOR EgoNewItemReqSetupEO.PARENT_CATALOG_GROUP_ID =          '||
5098    '             EgoNewItemReqSetupEO.ITEM_CATALOG_GROUP_ID           '||
5099    ' START WITH EgoNewItemReqSetupEO.ITEM_CATALOG_GROUP_ID = :ITEM_CATALOG_GROUP_ID     ';
5100 
5101 
5102    CURSOR c_itemnum_exists_cursor (cp_item_number       IN  VARCHAR2
5103                                   ,cp_organization_id   IN  NUMBER ) IS
5104      SELECT 'x'
5105      FROM   mtl_system_items_b_kfv
5106      WHERE  concatenated_segments = cp_item_number
5107        AND  organization_id       = cp_organization_id;
5108 
5109  BEGIN
5110 
5111       l_itemgen_method_cursor := DBMS_SQL.OPEN_CURSOR;
5112       DBMS_SQL.PARSE(l_itemgen_method_cursor, l_itemgen_hierarchy_sql, DBMS_SQL.NATIVE);
5113 
5114       LOOP -- Loop for every 2500 rows.
5115 
5116         DBMS_SQL.DEFINE_ARRAY(
5117             c           => l_itemgen_method_cursor  -- cursor --
5118                 , position    => 3                        -- select position --
5119                 , c_tab       => l_itemgen_method_table   -- table of chars --
5120                 , cnt         => 2500                     -- rows requested --
5121                 , lower_bound => 1                        -- start at --
5122                  );
5123 
5124         DBMS_SQL.DEFINE_ARRAY(
5125             c           => l_itemgen_method_cursor  -- cursor --
5126                 , position    => 4                        -- select position --
5127                 , c_tab       => l_itemgen_seq_table      -- table of chars --
5128                 , cnt         => 2500                     -- rows requested --
5129                 , lower_bound => 1                        -- start at --
5130                  );
5131 
5132         DBMS_SQL.DEFINE_ARRAY(
5133             c           => l_itemgen_method_cursor  -- cursor --
5134                 , position    => 5                        -- select position --
5135                 , c_tab       => l_itemgen_prefix_table   -- table of chars --
5136                 , cnt         => 2500                     -- rows requested --
5137                 , lower_bound => 1                        -- start at --
5138                  );
5139 
5140         DBMS_SQL.DEFINE_ARRAY(
5141             c           => l_itemgen_method_cursor  -- cursor --
5142                 , position    => 6                        -- select position --
5143                 , c_tab       => l_itemgen_suffix_table   -- table of chars --
5144                 , cnt         => 2500                     -- rows requested --
5145                 , lower_bound => 1                        -- start at --
5146                  );
5147 
5148         DBMS_SQL.BIND_VARIABLE(l_itemgen_method_cursor, ':ITEM_CATALOG_GROUP_ID', p_item_catalog_group_id);
5149 
5150         l_itemgen_method_exec := DBMS_SQL.EXECUTE(l_itemgen_method_cursor);
5151         l_itemgen_method_rows_cnt := DBMS_SQL.FETCH_ROWS(l_itemgen_method_cursor);
5152 
5153         DBMS_SQL.COLUMN_VALUE(l_itemgen_method_cursor, 3, l_itemgen_method_table);
5154         DBMS_SQL.COLUMN_VALUE(l_itemgen_method_cursor, 4, l_itemgen_seq_table);
5155         DBMS_SQL.COLUMN_VALUE(l_itemgen_method_cursor, 5, l_itemgen_prefix_table);
5156         DBMS_SQL.COLUMN_VALUE(l_itemgen_method_cursor, 6, l_itemgen_suffix_table);
5157 
5158         --begin add for bug 9127677
5159         IF DBMS_SQL.IS_OPEN(l_itemgen_method_cursor) then
5160            DBMS_SQL.Close_Cursor(l_itemgen_method_cursor);
5161         END IF;
5162 	      --end add for bug 9127677
5163         --DBMS_OUTPUT.PUT_LINE('load_item_oper_attr_values: Retrieved rows => '||To_char(l_itemgen_method_rows_cnt));
5164 
5165         l_can_itemnum_gen := FALSE;
5166         l_itemgen_rownum := 0;
5167         FOR i IN 1..l_itemgen_method_table.COUNT  LOOP
5168           --DBMS_OUTPUT.PUT_LINE('Item Gen Method  => '|| l_itemgen_method_table(i));
5169           IF (l_itemgen_method_table(i) IN ('I','S')) THEN
5170             IF (l_itemgen_method_table(i) IN ('S')) THEN
5171               l_can_itemnum_gen := TRUE;
5172               l_itemgen_rownum  := i;
5173               --DBMS_OUTPUT.PUT_LINE('Item Number will be generated using Row => '||i);
5174               EXIT;
5175             ELSE
5176               --DBMS_OUTPUT.PUT_LINE('Need to traverse up 1 more level');
5177               NULL;
5178             END IF; --end: IF (l_itemgen_method_table(i) IN ('S'))
5179           ELSE
5180             --DBMS_OUTPUT.PUT_LINE('Item Number cannot be generated !!! ');
5181             EXIT;
5182           END IF; --end: IF (l_itemgen_method_table(i) IN ('I','S'))
5183         END LOOP; --end: FOR (i:=0; i < l_itemgen_method_table.COUNT; i++)
5184 
5185         l_new_itemgen_sql := '';
5186         IF (l_can_itemnum_gen) THEN
5187           ---------------------------------------------------------------------
5188           --As many Org IDs in the table, so many Item Numbers to be generated
5189           ---------------------------------------------------------------------
5190           FOR i IN 1..p_org_id_tbl.LAST
5191           LOOP --To generate ~requested number~ of Item Numbers
5192             LOOP -- To generate 1 Valid Item Number
5193               -----------------------------------------------------
5194               --Since this is a loop, re-set the string each time.
5195               -----------------------------------------------------
5196               l_new_itemgen_sql := '';
5197               l_new_itemgen_sql := l_new_itemgen_sql || ' SELECT ';
5198               l_new_itemgen_sql := l_new_itemgen_sql ||''''|| l_itemgen_prefix_table(l_itemgen_rownum) || ''' || ';
5199               l_new_itemgen_sql := l_new_itemgen_sql || l_itemgen_seq_table(l_itemgen_rownum) || '.NEXTVAL || ';
5200               l_new_itemgen_sql := l_new_itemgen_sql ||''''|| l_itemgen_suffix_table(l_itemgen_rownum)||'''';
5201               l_new_itemgen_sql := l_new_itemgen_sql || ' FROM DUAL ';
5202 
5203               --DBMS_OUTPUT.PUT_LINE('l_new_itemgen_sql => '||l_new_itemgen_sql);
5204               EXECUTE IMMEDIATE l_new_itemgen_sql INTO l_item_num;
5205 
5206               ------------------------------------------------------------------------
5207               --Check if this Item Number *doesnt* already exist.
5208               --NOTE: Convert the VARCHAR2 Org ID to NUMBER before calling the Cursor
5209               ------------------------------------------------------------------------
5210               OPEN c_itemnum_exists_cursor(l_item_num, FND_NUMBER.CANONICAL_TO_NUMBER(p_org_id_tbl(i)));
5211               FETCH c_itemnum_exists_cursor INTO l_exists;
5212               IF (c_itemnum_exists_cursor%NOTFOUND) THEN
5213                 CLOSE c_itemnum_exists_cursor;
5214                 EXIT;
5215               END IF; --end: IF (c_itemnum_exists_cursor%NOTFOUND) THEN
5216               CLOSE c_itemnum_exists_cursor;
5217             END LOOP; --end: To generate 1 Valid Item Number
5218 
5219             -----------------------------------------------------------------------
5220             -- If NULL, then create a New VARCHAR table.
5221             -----------------------------------------------------------------------
5222             IF l_item_num_tbl IS NULL THEN
5223               l_item_num_tbl := EGO_VARCHAR_TBL_TYPE();
5224             END IF;
5225 
5226             -----------------------------------------------------------------------
5227             -- Add newly generated Item Number to the end of existing table.
5228             -----------------------------------------------------------------------
5229             l_item_num_tbl.EXTEND();
5230             l_item_num_tbl(l_item_num_tbl.LAST) := l_item_num;
5231 
5232           END LOOP; --end: FOR i IN 1..p_num_of_items
5233 
5234           x_item_num_tbl := l_item_num_tbl;
5235 
5236         ELSE
5237           x_item_num_tbl := NULL;
5238         END IF; --end: IF (l_can_itemnum_gen) THEN
5239 
5240         EXIT WHEN l_itemgen_method_rows_cnt < 2500;
5241 
5242       END LOOP; --end: Loop for every 2500 rows.
5243 
5244  END Get_Seq_Gen_Item_Nums;
5245 
5246 
5247   -------------------------------------------------------------------------------------
5248   --  API Name: Get_Default_Template_Id                                              --
5249   --                                                                                 --
5250   --  Description: This function takes a catalog group ID as a parameter and returns --
5251   --    the template ID corresponding to the default template for the specified      --
5252   --    catalog group.                                                               --
5253   --                                                                                 --
5254   --  Parameters: p_category_id      NUMBER  Catalog group ID whose default template --
5255   --                                         is to be returned; if null, return      --
5256   --                                         value is null.                          --
5257   -------------------------------------------------------------------------------------
5258   FUNCTION Get_Default_Template_Id (
5259              p_category_id          IN NUMBER
5260            ) RETURN NUMBER IS
5261 
5262     l_parent_id                        NUMBER;
5263     l_default_template                 NUMBER;
5264 
5265   BEGIN
5266 
5267     l_parent_id := NULL;
5268     l_default_template := NULL;
5269 
5270     IF (p_category_id IS NULL) THEN
5271 
5272       -- the case when the catalog group ID is null
5273       RETURN FND_PROFILE.VALUE('INV_ITEM_DEFAULT_TEMPLATE');
5274 
5275     ELSE
5276 
5277       BEGIN
5278         -- search for a default template for the given category
5279         SELECT TEMPLATE_ID
5280           INTO l_default_template
5281           FROM EGO_CAT_GRP_TEMPLATES
5282          WHERE CATALOG_GROUP_ID = p_category_id
5283            AND DEFAULT_FLAG = 'Y'
5284            AND ROWNUM = 1;
5285 
5286         RETURN l_default_template;
5287 
5288       EXCEPTION
5289         WHEN NO_DATA_FOUND THEN
5290 
5291           -- if a default is not found, get the parent category ID
5292           SELECT PARENT_CATALOG_GROUP_ID
5293             INTO l_parent_id
5294             FROM MTL_ITEM_CATALOG_GROUPS_B
5295            WHERE ITEM_CATALOG_GROUP_ID = p_category_id;
5296 
5297           -- recurse on the parent category
5298           RETURN Get_Default_Template_Id(
5299                    p_category_id     => l_parent_id
5300                  );
5301 
5302       END;
5303 
5304     END IF; -- IF (p_category_id IS NULL)
5305 
5306   END Get_Default_Template_Id;
5307 
5308 -- -----------------------------------------------------------------------------
5309 --  API Name:       Validate_Required_Attrs
5310 --
5311 --  Description:
5312 --    Given an Item whose Primary Keys are passed in, find those attributes
5313 --    whose values are required but is null for the Item.
5314 --    Returns EGO_USER_ATTR_TABLE containing list of required
5315 --    attributes information.
5316 -- -----------------------------------------------------------------------------
5317 --
5318 PROCEDURE Validate_Required_Attrs (
5319         p_api_version                   IN   NUMBER
5320        ,p_inventory_item_id             IN   NUMBER
5321        ,p_organization_id               IN   NUMBER
5322        ,p_revision_id                   IN   NUMBER
5323        ,x_attributes_req_table          OUT NOCOPY EGO_USER_ATTR_TABLE
5324        ,x_return_status                 OUT NOCOPY VARCHAR2
5325        ,x_errorcode                     OUT NOCOPY NUMBER
5326        ,x_msg_count                     OUT NOCOPY NUMBER
5327        ,x_msg_data                      OUT NOCOPY VARCHAR2
5328 ) IS
5329     l_api_name                  CONSTANT VARCHAR2(30) := 'Validate_Required_Attrs';
5330     l_pk_column_values          EGO_COL_NAME_VALUE_PAIR_ARRAY;
5331     l_data_level_values         EGO_COL_NAME_VALUE_PAIR_ARRAY;
5332     l_class_code_values         EGO_COL_NAME_VALUE_PAIR_ARRAY;
5333     l_attr_group_type_table     EGO_VARCHAR_TBL_TYPE;
5334     l_item_catalog_group_id     NUMBER;
5335     l_related_class_codes_list  VARCHAR2(150);
5336     l_token_table               ERROR_HANDLER.Token_Tbl_Type;
5337 
5338     CURSOR get_catalog_group_id IS
5339       SELECT ITEM_CATALOG_GROUP_ID
5340         INTO l_item_catalog_group_id
5341         FROM MTL_SYSTEM_ITEMS_B
5342        WHERE INVENTORY_ITEM_ID = p_inventory_item_id
5343          AND ORGANIZATION_ID = p_organization_id;
5344 
5345   BEGIN
5346 
5347     -----------------------
5348     -- Get PKs organized --
5349     -----------------------
5350     l_pk_column_values :=
5351       EGO_COL_NAME_VALUE_PAIR_ARRAY(
5352         EGO_COL_NAME_VALUE_PAIR_OBJ('INVENTORY_ITEM_ID', TO_CHAR(p_inventory_item_id))
5353        ,EGO_COL_NAME_VALUE_PAIR_OBJ('ORGANIZATION_ID', TO_CHAR(p_organization_id))
5354       );
5355 
5356     ----------------------
5357     -- Get Class Codes  --
5358     ----------------------
5359     FOR catalog_group_rec IN get_catalog_group_id LOOP
5360        l_item_catalog_group_id := catalog_group_rec.ITEM_CATALOG_GROUP_ID;
5361     END LOOP;
5362 
5363     Get_Related_Class_Codes(
5364        p_classification_code      => l_item_catalog_group_id
5365       ,x_related_class_codes_list => l_related_class_codes_list
5366     );
5367 
5368     l_class_code_values :=
5369       EGO_COL_NAME_VALUE_PAIR_ARRAY(
5370         EGO_COL_NAME_VALUE_PAIR_OBJ('ITEM_CATALOG_GROUP_ID', TO_CHAR(l_item_catalog_group_id))
5371        ,EGO_COL_NAME_VALUE_PAIR_OBJ('RELATED_CLASS_CODE_LIST_1', l_related_class_codes_list)
5372       );
5373 
5374     ----------------------
5375     -- Get Data Levels  --
5376     ----------------------
5377     l_data_level_values :=
5378       EGO_COL_NAME_VALUE_PAIR_ARRAY(
5379         EGO_COL_NAME_VALUE_PAIR_OBJ('ITEM_LEVEL', null)
5380        ,EGO_COL_NAME_VALUE_PAIR_OBJ('ITEM_REVISION_LEVEL', TO_CHAR(p_revision_id))
5381       );
5382 
5383     ---------------------------------
5384     -- Setup attribute group type  --
5385     ---------------------------------
5386     l_attr_group_type_table := EGO_VARCHAR_TBL_TYPE();
5387     l_attr_group_type_table.EXTEND();
5388     l_attr_group_type_table(l_attr_group_type_table.LAST):= 'EGO_ITEMMGMT_GROUP';
5389 
5390 
5391     EGO_USER_ATTRS_DATA_PVT.Validate_Required_Attrs (
5392       p_api_version                   => p_api_version
5393      ,p_object_name                   => 'EGO_ITEM'
5394      ,p_pk_column_name_value_pairs    => l_pk_column_values
5395      ,p_class_code_name_value_pairs   => l_class_code_values
5396      ,p_data_level_name_value_pairs   => l_data_level_values
5397      ,p_attr_group_type_table         => l_attr_group_type_table
5398      ,x_attributes_req_table          => x_attributes_req_table
5399      ,x_return_status                 => x_return_status
5400      ,x_errorcode                     => x_errorcode
5401      ,x_msg_count                     => x_msg_count
5402      ,x_msg_data                      => x_msg_data
5403     );
5404 
5405   EXCEPTION
5406     WHEN FND_API.G_EXC_ERROR THEN
5407 
5408       x_return_status := FND_API.G_RET_STS_ERROR;
5409 
5410       x_msg_count := ERROR_HANDLER.Get_Message_Count();
5411 
5412       IF (x_msg_count > 0) THEN
5413         ERROR_HANDLER.Log_Error(
5414           p_write_err_to_inttable         => 'Y'
5415          ,p_write_err_to_debugfile        => ERROR_HANDLER.Get_Debug()
5416         );
5417 
5418         IF (x_msg_count = 1) THEN
5419           DECLARE
5420             message_list  ERROR_HANDLER.Error_Tbl_Type;
5421           BEGIN
5422             ERROR_HANDLER.Get_Message_List(message_list);
5423             x_msg_data := message_list(message_list.FIRST).message_text;
5424           END;
5425         ELSE
5426           x_msg_data := NULL;
5427         END IF;
5428       END IF;
5429 
5430     WHEN OTHERS THEN
5431 
5432       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5433 
5434       DECLARE
5435         l_token_table            ERROR_HANDLER.Token_Tbl_Type;
5436         l_dummy_entity_index     NUMBER;
5437         l_dummy_entity_id        VARCHAR2(60);
5438         l_dummy_message_type     VARCHAR2(1);
5439       BEGIN
5440         l_token_table(1).TOKEN_NAME := 'PKG_NAME';
5441         l_token_table(1).TOKEN_VALUE := G_PKG_NAME;
5442         l_token_table(2).TOKEN_NAME := 'API_NAME';
5443         l_token_table(2).TOKEN_VALUE := l_api_name;
5444         l_token_table(3).TOKEN_NAME := 'SQL_ERR_MSG';
5445         l_token_table(3).TOKEN_VALUE := SQLERRM;
5446 
5447         ERROR_HANDLER.Add_Error_Message(
5448             p_message_name                  => 'EGO_PLSQL_ERR'
5449            ,p_application_id                => 'EGO'
5450            ,p_token_tbl                     => l_token_table
5451            ,p_message_type                  => FND_API.G_RET_STS_ERROR
5452         );
5453 
5454         ERROR_HANDLER.Get_Message(x_message_text => x_msg_data
5455                                  ,x_entity_index => l_dummy_entity_index
5456                                  ,x_entity_id    => l_dummy_entity_id
5457                                  ,x_message_type => l_dummy_message_type);
5458 
5459       END;
5460 
5461 END Validate_Required_Attrs;
5462 
5463 
5464 
5465 
5466 
5467 
5468 
5469 
5470 
5471 
5472 PROCEDURE Generate_GDSN_Ext_AG_TP_Views  (
5473                                             p_attr_group_name   IN VARCHAR2 DEFAULT NULL
5474                                            ,ERRBUF              OUT NOCOPY VARCHAR2
5475                                            ,RETCODE             OUT NOCOPY VARCHAR2
5476                                          )
5477 IS
5478 
5479  TYPE VIEW_INFO IS RECORD
5480   (
5481       ITEM_ATTR_GROUP_NAME    VARCHAR2(30)
5482      ,TP_ATTR_GROUP_NAME      VARCHAR2(30)
5483      ,ITEM_ATTR_AGV_NAME      VARCHAR2(30)
5484      ,TP_ATTR_AGV_NAME        VARCHAR2(30)
5485      ,ITEM_AGV_ALIAS          VARCHAR2(30)
5486      ,TP_AGV_ALIAS            VARCHAR2(30)
5487      ,FINAL_WRAPPER_AGV_NAME  VARCHAR2(30)
5488   );
5489 
5490  TYPE VIEW_INFO_TABLE IS TABLE OF VIEW_INFO
5491  INDEX BY BINARY_INTEGER;
5492 
5493   CURSOR c_check_agv_name (cp_agv_name         IN VARCHAR2
5494                           ,cp_application_id   IN NUMBER
5495                           ,cp_attr_group_type  IN VARCHAR2
5496                           ,cp_attr_group_name  IN VARCHAR2
5497                           ) IS
5498   SELECT AGV_NAME
5499   FROM EGO_FND_DSC_FLX_CTX_EXT EXT1
5500   WHERE EXT1.AGV_NAME = cp_agv_name
5501     AND EXT1.ATTR_GROUP_ID NOT IN  (SELECT ATTR_GROUP_ID
5502                FROM EGO_FND_DSC_FLX_CTX_EXT EXT2
5503               WHERE EXT2.AGV_NAME = cp_agv_name
5504                 AND EXT2.APPLICATION_ID = cp_application_id
5505                 AND EXT2.DESCRIPTIVE_FLEXFIELD_NAME = cp_attr_group_type
5506                 AND EXT2.DESCRIPTIVE_FLEX_CONTEXT_CODE = cp_attr_group_name);
5507 
5508   CURSOR c_check_obj_name (cp_agv_name        IN  VARCHAR2
5509                           ,cp_application_id  IN NUMBER
5510                           ,cp_attr_group_type IN VARCHAR2
5511                           ,cp_attr_group_name IN VARCHAR2
5512                           )IS
5513  SELECT OBJECT_NAME
5514    FROM SYS.ALL_OBJECTS
5515   WHERE OBJECT_NAME = cp_agv_name
5516     AND OBJECT_NAME NOT IN (SELECT AGV_NAME
5517                               FROM EGO_FND_DSC_FLX_CTX_EXT
5518                              WHERE AGV_NAME = cp_agv_name
5519                                AND APPLICATION_ID  = cp_application_id
5520                                AND DESCRIPTIVE_FLEXFIELD_NAME =  cp_attr_group_type
5521                                AND DESCRIPTIVE_FLEX_CONTEXT_CODE =  cp_attr_group_name
5522                            );
5523 
5524 
5525  l_views_to_process           VIEW_INFO_TABLE;
5526 
5527  l_return_status              VARCHAR2(3);
5528  l_errorcode                  NUMBER;
5529  l_msg_count                  NUMBER;
5530  l_msg_data                   VARCHAR2(1000);
5531  l_temp_num                   NUMBER;
5532  l_multi_row_ag               VARCHAR2(2);
5533  l_ag_id                      VARCHAR2(20);
5534  l_temp_agv_name              VARCHAR2(30);
5535  l_views_exist                VARCHAR2(32767);
5536  l_view_compile_errs          VARCHAR2(32767);
5537  l_item_view_failed           BOOLEAN;
5538  l_tp_view_failed             BOOLEAN;
5539 
5540  ERR_OCCURED                  EXCEPTION;
5541 
5542 BEGIN
5543 
5544 
5545   ----------------------------------------------
5546   -- Building up the table of Attr groups to  --
5547   -- be processed                             --
5548   ----------------------------------------------
5549 
5550 
5551   l_views_to_process(1).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_TRADE_ITEM_INFO';
5552   l_views_to_process(1).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_TRADE_ITEM_INFO_AGV';
5553 
5554 
5555   l_views_to_process(2).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_PRICE';
5556   l_views_to_process(2).TP_ATTR_GROUP_NAME     := 'EGOINT_GDSN_PRICE';
5557   l_views_to_process(2).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_PRICE_INFO_AGV';
5558   l_views_to_process(2).TP_ATTR_AGV_NAME       := 'EGO_SBDH_PRICE_INFO_TPAGV';
5559   l_views_to_process(2).ITEM_AGV_ALIAS         := 'ITEMAGV';
5560   l_views_to_process(2).TP_AGV_ALIAS           := 'TPAGV';
5561   l_views_to_process(2).FINAL_WRAPPER_AGV_NAME := 'EGO_SBDH_PRICE_INFO_TPV';
5562 
5563   l_views_to_process(3).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_VAR_TRD_ITEM_TYPE';
5564   l_views_to_process(3).TP_ATTR_GROUP_NAME     := 'EGOINT_GDSN_VAR_TRD_ITEM_TYPE';
5565   l_views_to_process(3).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_VAR_TRD_ITEM_TYPE_AGV';
5566   l_views_to_process(3).TP_ATTR_AGV_NAME       := 'EGO_SBDH_VAR_TRD_ITM_TYP_TPAGV';
5567   l_views_to_process(3).ITEM_AGV_ALIAS         := 'ITEMAGV';
5568   l_views_to_process(3).TP_AGV_ALIAS           := 'TPAGV';
5569   l_views_to_process(3).FINAL_WRAPPER_AGV_NAME := 'EGO_SBDH_VAR_TRD_ITEM_TYPE_TPV';
5570 
5571   l_views_to_process(4).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_DEP_VAL_DATE_INFO';
5572   l_views_to_process(4).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_DEP_VAL_DATE_INFO_AGV';
5573 
5574   l_views_to_process(5).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_RETURNS';
5575   l_views_to_process(5).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_RETURNS_AGV';
5576 
5577   l_views_to_process(6).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_BUYING_QTY_INFO';
5578   l_views_to_process(6).TP_ATTR_GROUP_NAME     := 'EGOINT_GDSN_BUYING_QTY_INFO';
5579   l_views_to_process(6).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_BUYING_QTY_INFO_AGV';
5580   l_views_to_process(6).TP_ATTR_AGV_NAME       := 'EGO_SBDH_BUYING_QTY_INFO_TPAGV';
5581   l_views_to_process(6).ITEM_AGV_ALIAS         := 'ITEMAGV';
5582   l_views_to_process(6).TP_AGV_ALIAS           := 'TPAGV';
5583   l_views_to_process(6).FINAL_WRAPPER_AGV_NAME := 'EGO_SBDH_BUYING_QTY_INFO_TPV';
5584 
5585   l_views_to_process(7).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_SHIP_EXCL_DATES';
5586   l_views_to_process(7).TP_ATTR_GROUP_NAME     := 'EGOINT_GDSN_SHIP_EXCL_DATES';
5587   l_views_to_process(7).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_SHIP_EXCL_DATES_AGV';
5588   l_views_to_process(7).TP_ATTR_AGV_NAME       := 'EGO_SBDH_SHIP_EXCL_DATES_TPAGV';
5589   l_views_to_process(7).ITEM_AGV_ALIAS         := 'ITEMAGV';
5590   l_views_to_process(7).TP_AGV_ALIAS           := 'TPAGV';
5591   l_views_to_process(7).FINAL_WRAPPER_AGV_NAME := 'EGO_SBDH_SHIP_EXCL_DATES_TPV';
5592 
5593   l_views_to_process(8).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_ORDERING_INFO';
5594   l_views_to_process(8).TP_ATTR_GROUP_NAME     := 'EGOINT_GDSN_ORDERING_INFO';
5595   l_views_to_process(8).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_ORDERING_INFO_AGV';
5596   l_views_to_process(8).TP_ATTR_AGV_NAME       := 'EGO_SBDH_ORDERING_INFO_TPAGV';
5597   l_views_to_process(8).ITEM_AGV_ALIAS         := 'ITEMAGV';
5598   l_views_to_process(8).TP_AGV_ALIAS           := 'TPAGV';
5599   l_views_to_process(8).FINAL_WRAPPER_AGV_NAME := 'EGO_SBDH_ORDERING_INFO_TPV';
5600 
5601   l_views_to_process(9).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_TRD_ITM_LIFESPAN';
5602   l_views_to_process(9).TP_ATTR_GROUP_NAME     := 'EGOINT_GDSN_TRD_ITM_LIFESPAN';
5603   l_views_to_process(9).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_TRD_ITM_LIFESPAN_AGV';
5604   l_views_to_process(9).TP_ATTR_AGV_NAME       := 'EGO_SBDH_TRD_ITM_LIFSPAN_TPAGV';
5605   l_views_to_process(9).ITEM_AGV_ALIAS         := 'ITEMAGV';
5606   l_views_to_process(9).TP_AGV_ALIAS           := 'TPAGV';
5607   l_views_to_process(9).FINAL_WRAPPER_AGV_NAME := 'EGO_SBDH_TRD_ITM_LIFESPAN_TPV';
5608 
5609 
5610   l_views_to_process(10).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_PAYMENT_METHOD';
5611   l_views_to_process(10).TP_ATTR_GROUP_NAME     := 'EGOINT_GDSN_PAYMENT_METHOD';
5612   l_views_to_process(10).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_PAYMENT_METHOD_AGV';
5613   l_views_to_process(10).TP_ATTR_AGV_NAME       := 'EGO_SBDH_PAYMENT_METHOD_TPAGV';
5614   l_views_to_process(10).ITEM_AGV_ALIAS         := 'ITEMAGV';
5615   l_views_to_process(10).TP_AGV_ALIAS           := 'TPAGV';
5616   l_views_to_process(10).FINAL_WRAPPER_AGV_NAME := 'EGO_SBDH_PAYMENT_METHOD_TPV';
5617 
5618 
5619   l_views_to_process(11).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_PRC_CMPRSN_CONTNT';
5620   l_views_to_process(11).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_PRC_CMPRSN_CONTNT_AGV';
5621 
5622   l_views_to_process(12).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_PRC_CMPRSN_MSRMT';
5623   l_views_to_process(12).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_PRC_CMPRSN_MSRMT_AGV';
5624 
5625   l_views_to_process(13).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_STRG_HNDLG_HUMIDTY';
5626   l_views_to_process(13).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_STRG_HNDLG_HMDTY_AGV';
5627 
5628   l_views_to_process(14).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_CLASS_COMPLIANCE';
5629   l_views_to_process(14).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_CLASS_COMPLIANCE_AGV';
5630 
5631   l_views_to_process(15).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_COUNTRY_OF_ASSY';
5632   l_views_to_process(15).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_COUNTRY_OF_ASSY_AGV';
5633 
5634   l_views_to_process(16).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_CAMPAIGN_INFO';
5635   l_views_to_process(16).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_CAMPAIGN_INFO_AGV';
5636 
5637   l_views_to_process(17).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_SPECIAL_ITEM';
5638   l_views_to_process(17).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_SPECIAL_ITEM_AGV';
5639 
5640 
5641   l_views_to_process(18).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_ITEM_FEATURE_BNFT';
5642   l_views_to_process(18).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_ITEM_FEATURE_BNFT_AGV';
5643 
5644   l_views_to_process(19).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_MATERIAL_INFO';
5645   l_views_to_process(19).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_MATERIAL_INFO_AGV';
5646 
5647   l_views_to_process(20).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_SIZE_INFO';
5648   l_views_to_process(20).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_SIZE_INFO_AGV';
5649 
5650   l_views_to_process(21).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_SEASON_AVL_DATE';
5651   l_views_to_process(21).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_SEASON_AVL_DATE_AGV';
5652 
5653   l_views_to_process(22).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_SEASON';
5654   l_views_to_process(22).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_SEASON_AGV';
5655 
5656   l_views_to_process(23).ITEM_ATTR_GROUP_NAME   := 'EGOINT_GDSN_TARGET_CONSUMER';
5657   l_views_to_process(23).ITEM_ATTR_AGV_NAME     := 'EGO_SBDH_TARGET_CONSUMER_AGV';
5658 
5659 
5660   ----------------------------------------------
5661   -- Here we loop through the complete table  --
5662   -- built above for processing each of the   --
5663   -- attribute groups view                    --
5664   ----------------------------------------------
5665   l_views_exist := '';
5666   l_view_compile_errs := '';
5667   FOR i in 1 .. l_views_to_process.LAST
5668   LOOP
5669 
5670     IF( p_attr_group_name IS NULL OR
5671         (p_attr_group_name IS NOT NULL AND p_attr_group_name = l_views_to_process(i).ITEM_ATTR_GROUP_NAME)
5672       )
5673     THEN
5674         ----------------------------------------
5675         -- Firstly we need to sync up the     --
5676         -- metadata for all the tp attr group --
5677         ----------------------------------------
5678 
5679         l_return_status := NULL;
5680         l_errorcode := NULL;
5681         l_msg_count := NULL;
5682         l_msg_data := NULL;
5683 
5684         IF ( l_views_to_process(i).ITEM_ATTR_GROUP_NAME IS NOT NULL
5685              AND l_views_to_process(i).TP_ATTR_GROUP_NAME IS NOT NULL) THEN
5686 
5687             EGO_EXT_FWK_PUB.Sync_Up_Attr_Metadata (
5688                                   p_source_ag_name      => l_views_to_process(i).ITEM_ATTR_GROUP_NAME
5689                                  ,p_source_ag_type      => 'EGO_ITEMMGMT_GROUP'
5690                                  ,p_source_appl_id      => 431
5691                                  ,p_target_ag_name      => l_views_to_process(i).TP_ATTR_GROUP_NAME
5692                                  ,p_target_ag_type      => 'EGO_ITEM_TP_EXT_ATTRS'
5693                                  ,p_target_appl_id      => 431
5694                                  ,x_return_status       => l_return_status
5695                                  ,x_errorcode           => l_errorcode
5696                                  ,x_msg_count           => l_msg_count
5697                                  ,x_msg_data            => l_msg_data
5698                               );
5699         END IF;
5700 
5701 
5702         l_item_view_failed := FALSE;
5703         l_multi_row_ag := '';
5704         --------------------------------
5705         -- Validating the ITEM AGV NAME
5706         --------------------------------
5707 
5708         OPEN c_check_agv_name (cp_agv_name        => UPPER(l_views_to_process(i).ITEM_ATTR_AGV_NAME)
5709                               ,cp_application_id  => 431
5710                               ,cp_attr_group_type => 'EGO_ITEMMGMT_GROUP'
5711                               ,cp_attr_group_name => l_views_to_process(i).ITEM_ATTR_GROUP_NAME
5712                               );
5713         FETCH c_check_agv_name INTO l_temp_agv_name;
5714 
5715         OPEN c_check_obj_name (cp_agv_name => UPPER(l_views_to_process(i).ITEM_ATTR_AGV_NAME)
5716                               ,cp_application_id => 431
5717                               ,cp_attr_group_type => 'EGO_ITEMMGMT_GROUP'
5718                               ,cp_attr_group_name => l_views_to_process(i).ITEM_ATTR_GROUP_NAME
5719                               );
5720         FETCH c_check_obj_name INTO l_temp_agv_name;
5721 
5722 
5723         IF c_check_agv_name%FOUND OR c_check_obj_name%FOUND THEN
5724           l_views_exist := l_views_exist||' '||UPPER(l_views_to_process(i).ITEM_ATTR_AGV_NAME);--RAISE L_ITEM_VNAME_EXISTS;
5725           l_item_view_failed :=TRUE;
5726         ELSE
5727           UPDATE ego_fnd_dsc_flx_ctx_ext
5728             SET agv_name = UPPER(l_views_to_process(i).ITEM_ATTR_AGV_NAME)
5729           WHERE application_id                = 431
5730             AND descriptive_flexfield_name    = 'EGO_ITEMMGMT_GROUP'
5731             AND descriptive_flex_context_code = l_views_to_process(i).ITEM_ATTR_GROUP_NAME;
5732         END IF;
5733 
5734         CLOSE c_check_agv_name;
5735         CLOSE c_check_obj_name;
5736 
5737 
5738         --------------------------------
5739         -- Validating the TP AGV NAME
5740         --------------------------------
5741         IF (l_views_to_process(i).TP_ATTR_AGV_NAME IS NOT NULL AND
5742             l_views_to_process(i).TP_ATTR_GROUP_NAME IS NOT NULL) THEN
5743 
5744             OPEN c_check_agv_name (cp_agv_name        => UPPER(l_views_to_process(i).TP_ATTR_AGV_NAME)
5745                                   ,cp_application_id  => 431
5746                                   ,cp_attr_group_type => 'EGO_ITEM_TP_EXT_ATTRS'
5747                                   ,cp_attr_group_name => l_views_to_process(i).TP_ATTR_GROUP_NAME
5748                                   );
5749             FETCH c_check_agv_name INTO l_temp_agv_name;
5750 
5751             OPEN c_check_obj_name (cp_agv_name => UPPER(l_views_to_process(i).TP_ATTR_AGV_NAME)
5752                                   ,cp_application_id => 431
5753                                   ,cp_attr_group_type => 'EGO_ITEM_TP_EXT_ATTRS'
5754                                   ,cp_attr_group_name => l_views_to_process(i).TP_ATTR_GROUP_NAME
5755                                   );
5756             FETCH c_check_obj_name INTO l_temp_agv_name;
5757 
5758 
5759             IF c_check_agv_name%FOUND OR c_check_obj_name%FOUND THEN
5760               l_views_exist := l_views_exist||' '||UPPER(l_views_to_process(i).TP_ATTR_AGV_NAME);--RAISE L_TP_VNAME_EXISTS;
5761               l_tp_view_failed := TRUE;
5762             ELSE
5763               UPDATE ego_fnd_dsc_flx_ctx_ext
5764                 SET agv_name = UPPER(l_views_to_process(i).TP_ATTR_AGV_NAME)
5765               WHERE application_id                = 431
5766                 AND descriptive_flexfield_name    = 'EGO_ITEM_TP_EXT_ATTRS'
5767                 AND descriptive_flex_context_code = l_views_to_process(i).TP_ATTR_GROUP_NAME;
5768             END IF;
5769 
5770             CLOSE c_check_agv_name;
5771             CLOSE c_check_obj_name;
5772 
5773         END IF;
5774 
5775         --------------------------------------------------------------
5776         -- Fetching the attr group id for the item attr group --
5777         --------------------------------------------------------------
5778           SELECT ATTR_GROUP_ID, MULTI_ROW
5779             INTO l_temp_num, l_multi_row_ag
5780             FROM EGO_FND_DSC_FLX_CTX_EXT
5781            WHERE DESCRIPTIVE_FLEXFIELD_NAME = 'EGO_ITEMMGMT_GROUP'
5782              AND APPLICATION_ID = 431
5783              AND DESCRIPTIVE_FLEX_CONTEXT_CODE = l_views_to_process(i).ITEM_ATTR_GROUP_NAME;
5784 
5785         l_return_status := NULL;
5786         l_errorcode := NULL;
5787         l_msg_count := NULL;
5788         l_msg_data := NULL;
5789 
5790         -------------------------------------------------------------
5791         -- Here we generate the view for item attribute group      --
5792         -------------------------------------------------------------
5793         IF (l_temp_num >0) THEN
5794 
5795             l_ag_id := TO_CHAR(l_temp_num);
5796             EGO_EXT_FWK_PUB.Compile_Attr_Group_Views(
5797                                             ERRBUF                          => l_msg_data
5798                                            ,RETCODE                         => l_return_status
5799                                            ,p_attr_group_id_list            => l_ag_id
5800                                            ,p_init_msg_list                 => fnd_api.g_FALSE
5801                                            ,p_commit                        => fnd_api.g_TRUE
5802                                             );
5803 
5804         END IF;
5805 
5806         IF (l_return_status <> 'S') THEN
5807           l_view_compile_errs := l_view_compile_errs||' ,Error while creating view for :'||l_views_to_process(i).ITEM_ATTR_GROUP_NAME||
5808                                                       '('||l_msg_data||')';
5809           l_item_view_failed := TRUE;
5810         END IF;
5811 
5812 
5813 
5814 
5815         -----------------------------------------------
5816         -- Processing the TPAGV and the wrapper VIEW --
5817         -----------------------------------------------
5818 
5819         IF (l_views_to_process(i).TP_ATTR_AGV_NAME IS NOT NULL AND
5820             l_views_to_process(i).TP_ATTR_GROUP_NAME IS NOT NULL) THEN
5821 
5822             ----------------------------------------------------------------------
5823             -- Fetching the attr group id for the corresponding tp attr group   --
5824             ----------------------------------------------------------------------
5825             BEGIN
5826               SELECT ATTR_GROUP_ID
5827                 INTO l_temp_num
5828                 FROM EGO_FND_DSC_FLX_CTX_EXT
5829                WHERE DESCRIPTIVE_FLEXFIELD_NAME = 'EGO_ITEM_TP_EXT_ATTRS'
5830                  AND APPLICATION_ID = 431
5831                  AND DESCRIPTIVE_FLEX_CONTEXT_CODE = l_views_to_process(i).TP_ATTR_GROUP_NAME;
5832 
5833             EXCEPTION
5834               WHEN NO_DATA_FOUND THEN
5835                l_temp_num := -1;
5836             END;
5837 
5838             -------------------------------------------------------------
5839             -- Here we generate the view for the corresponding trading --
5840             -- partner attr grp                                        --
5841             -------------------------------------------------------------
5842             IF (l_temp_num >0) THEN
5843                 EGO_EXT_FWK_PUB.Compile_Attr_Group_Views(
5844                                                 ERRBUF                          => l_msg_data
5845                                                ,RETCODE                         => l_return_status
5846                                                ,p_attr_group_id_list            => TO_CHAR(l_temp_num)
5847                                                ,p_init_msg_list                 => fnd_api.g_FALSE
5848                                                ,p_commit                        => fnd_api.g_TRUE
5849                                                 );
5850             END IF;
5851 
5852             IF (l_return_status <> 'S') THEN
5853               l_view_compile_errs := l_view_compile_errs||' ,Error while creating view for :'||l_views_to_process(i).TP_ATTR_GROUP_NAME||
5854                                                           '('||l_msg_data||') ';
5855               l_tp_view_failed := TRUE;
5856             END IF;
5857 
5858             -------------------------------------------------------------
5859             -- Generating the wrapper view over the tp and item attr   --
5860             -- attr group views.                                       --
5861             -------------------------------------------------------------
5862 
5863             IF (l_views_to_process(i).FINAL_WRAPPER_AGV_NAME IS NOT NULL )THEN
5864 
5865                 IF (l_item_view_failed OR l_tp_view_failed) THEN
5866                   l_view_compile_errs := l_view_compile_errs||' ,Could not create the view '||l_views_to_process(i).FINAL_WRAPPER_AGV_NAME||
5867                                                               ' since the base view creation failed :';
5868                 ELSE
5869                   EGO_Item_PVT.GENERATE_GTIN_TP_ATTRS_VIEW (
5870                                                 p_item_attr_agv_name   => UPPER(l_views_to_process(i).ITEM_ATTR_AGV_NAME)
5871                                                ,p_tp_agv_name          => UPPER(l_views_to_process(i).TP_ATTR_AGV_NAME)
5872                                                ,p_item_attr_agv_alias  => l_views_to_process(i).ITEM_AGV_ALIAS
5873                                                ,p_tp_agv_alias         => l_views_to_process(i).TP_AGV_ALIAS
5874                                                ,p_final_agv_name       => l_views_to_process(i).FINAL_WRAPPER_AGV_NAME
5875                                                ,p_multi_row_ag         => l_multi_row_ag
5876                                                ,x_return_status        => l_return_status
5877                                                ,x_msg_data             => l_msg_data
5878                                               );
5879                 END IF;
5880 
5881 
5882                 IF (l_return_status <> 'S') THEN
5883                   l_view_compile_errs := l_view_compile_errs||' ,Error while creating view :'||l_views_to_process(i).FINAL_WRAPPER_AGV_NAME||
5884                                                               '('||l_msg_data||') ';
5885                 END IF;
5886 
5887             END IF;
5888 
5889         END IF;
5890     END IF;--
5891   END LOOP;
5892 
5893   IF (LENGTH(l_view_compile_errs)>1 OR LENGTH(l_views_exist)>1) THEN
5894    RAISE ERR_OCCURED;
5895   END IF;
5896 
5897   ERRBUF  := '';
5898   RETCODE := FND_API.G_RET_STS_SUCCESS;
5899 
5900 
5901 EXCEPTION
5902  WHEN ERR_OCCURED THEN
5903 
5904   IF(LENGTH(l_views_exist)>1) THEN
5905      l_views_exist := 'Could not create the following views as already an object exists by this name - '||l_views_exist;
5906   END IF;
5907 
5908   ERRBUF  := l_views_exist||'  '||l_view_compile_errs;
5909   RETCODE := FND_API.G_RET_STS_ERROR;
5910 
5911   RAISE_APPLICATION_ERROR(-20000, l_views_exist||'  '||l_view_compile_errs);
5912 
5913 END Generate_GDSN_Ext_AG_TP_Views;
5914 
5915 
5916 
5917 
5918 
5919 
5920 
5921 
5922 
5923 
5924 
5925 
5926 PROCEDURE GENERATE_GTIN_TP_ATTRS_VIEW  (
5927                                          p_item_attr_agv_name      IN    VARCHAR2
5928                                         ,p_tp_agv_name             IN    VARCHAR2
5929                                         ,p_item_attr_agv_alias     IN    VARCHAR2
5930                                         ,p_tp_agv_alias            IN    VARCHAR2
5931                                         ,p_final_agv_name          IN    VARCHAR2
5932                                         ,p_multi_row_ag            IN    VARCHAR2  -- 'Y' or 'N'
5933                                         ,x_return_status           OUT NOCOPY VARCHAR2
5934                                         ,x_msg_data                OUT NOCOPY VARCHAR2
5935                                        )
5936 IS
5937 
5938     TYPE LOCAL_VIEW_COLUMN_RECORD IS RECORD
5939          (
5940             VIEW_NAME       VARCHAR2(30)
5941            ,COLUMN_NAME     VARCHAR2(30)
5942          );
5943 
5944     TYPE VIEW_COLUMNS_TABLE IS TABLE OF LOCAL_VIEW_COLUMN_RECORD
5945     INDEX BY BINARY_INTEGER;
5946 
5947     l_item_agv_cols_tab       VIEW_COLUMNS_TABLE;
5948     l_tp_agv_cols_tab              VIEW_COLUMNS_TABLE;
5949 
5950     l_dynamic_sql                    VARCHAR2(2000);
5951     l_no_of_item_agv_cols            NUMBER;
5952     l_no_of_tp_agv_cols              NUMBER;
5953     l_item_agv_col_list                VARCHAR2(10000);
5954     l_final_view_query               VARCHAR2(10000);
5955     l_final_view_col_list            VARCHAR2(10000);
5956     l_final_view_sql                 VARCHAR2(20000);
5957     l_item_agv_alias            VARCHAR2(30);
5958     l_tp_agv_alias                   VARCHAR2(30);
5959     l_current_col_name               VARCHAR2(30);
5960     l_item_cur_col                     VARCHAR2(30);
5961 
5962  h_x                  BOOLEAN;
5963 fnd_apps_schema      VARCHAR2(30) := NULL;
5964 h_status             VARCHAR2(2000);
5965 h_industry           VARCHAR2(2000);
5966 
5967 
5968 BEGIN
5969 
5970     IF(p_item_attr_agv_alias IS NULL ) THEN
5971       l_item_agv_alias := p_item_attr_agv_name;
5972     ELSE
5973       l_item_agv_alias := p_item_attr_agv_alias;
5974     END IF;
5975 
5976     IF(p_tp_agv_alias IS NULL ) THEN
5977       l_tp_agv_alias := p_tp_agv_name;
5978     ELSE
5979       l_tp_agv_alias := p_tp_agv_alias;
5980     END IF;
5981 
5982     ---------------------------------------------------
5983     -- Fetching the column names of primary and the  --
5984     -- secondry view                                 --
5985     ---------------------------------------------------
5986 /***
5987   -- fix for 12.2 OLP compatible
5988 
5989     l_dynamic_sql := ' SELECT TABLE_NAME, COLUMN_NAME   '||
5990                      '   FROM SYS.ALL_TAB_COLUMNS           '||
5991                      '  WHERE TABLE_NAME = :1           ';
5992 ***/
5993 
5994     -- bug#15835530  fix for 12.2 OLP compatible
5995     l_dynamic_sql := ' SELECT syn.synonym_name, col.column_name   '||
5996                      '   FROM user_synonyms syn, dba_tab_columns col           '||
5997                      '  WHERE syn.synonym_name = :1 AND col.owner = syn.table_owner AND col.table_name = syn.table_name          ';
5998 
5999     EXECUTE IMMEDIATE l_dynamic_sql
6000     BULK COLLECT INTO l_item_agv_cols_tab
6001     USING p_item_attr_agv_name;
6002 
6003     EXECUTE IMMEDIATE l_dynamic_sql
6004     BULK COLLECT INTO l_tp_agv_cols_tab
6005     USING p_tp_agv_name;
6006 
6007     l_no_of_item_agv_cols := l_item_agv_cols_tab.COUNT;
6008     l_no_of_tp_agv_cols := l_tp_agv_cols_tab.COUNT;
6009 
6010     --------------------------------------------------------
6011     -- Building the concatenated list of sec view columns --
6012     --------------------------------------------------------
6013 
6014     l_item_agv_col_list := ' ';
6015     FOR i IN 1 .. l_no_of_item_agv_cols
6016     LOOP
6017       l_item_agv_col_list := l_item_agv_col_list || l_item_agv_cols_tab(i).COLUMN_NAME;
6018     END LOOP;
6019 
6020 
6021     ---------------------------------------------------
6022     -- Building the VIEW SQL                         --
6023     ---------------------------------------------------
6024 
6025     l_final_view_query := ' SELECT  ';
6026     l_final_view_col_list := ' ';
6027 
6028     FOR i IN 1 .. l_no_of_tp_agv_cols
6029     LOOP
6030 
6031       l_current_col_name := l_tp_agv_cols_tab(i).COLUMN_NAME;
6032       l_final_view_col_list := l_final_view_col_list||' '||l_current_col_name;
6033 
6034       IF (l_current_col_name = 'MASTER_ORGANIZATION_ID') THEN
6035         l_item_cur_col := 'ORGANIZATION_ID';
6036       ELSE
6037         l_item_cur_col := l_current_col_name;
6038       END IF;
6039 
6040       IF (INSTR(l_item_agv_col_list,l_item_cur_col) > 0) THEN
6041         l_final_view_query := l_final_view_query||' NVL('||l_tp_agv_alias||'.'||l_current_col_name||
6042                                                         ' , '||l_item_agv_alias||'.'||l_item_cur_col||
6043                                                         ' ) '|| l_current_col_name;
6044       ELSE
6045         l_final_view_query := l_final_view_query||' '||l_tp_agv_alias||'.'||l_current_col_name||
6046                                                   ' '||l_current_col_name;
6047       END IF;
6048 
6049       IF (i <> l_no_of_item_agv_cols) THEN
6050          -- commented following two lines to fix bug 6910417
6051          --l_final_view_query := l_final_view_query||' , ';
6052          --l_final_view_col_list := l_final_view_col_list||' , ';
6053 
6054          -- added following IF..ELSE..END IF to fix bug 6910417
6055          IF (i = l_no_of_tp_agv_cols) THEN
6056              l_final_view_query := l_final_view_query;
6057          l_final_view_col_list := l_final_view_col_list;
6058      ELSE
6059                  l_final_view_query := l_final_view_query||' , ';
6060          l_final_view_col_list := l_final_view_col_list||' , ';
6061      END IF;
6062 
6063       END IF;
6064 
6065     END LOOP;
6066 
6067     IF (p_multi_row_ag = 'Y') THEN
6068 
6069       l_final_view_sql:= ' CREATE OR REPLACE VIEW '||p_final_agv_name||' ( '||l_final_view_col_list||') '||
6070                          ' AS SELECT '||l_final_view_col_list||
6071                          '      FROM '||p_tp_agv_name||
6072                          '  UNION ALL '||
6073                          ' SELECT '||l_final_view_col_list||
6074                          '   FROM (SELECT NULL PARTY_SITE_ID, '||l_item_agv_alias||'.* , '||
6075                          '                '||l_item_agv_alias||'.ORGANIZATION_ID MASTER_ORGANIZATION_ID '||
6076                          '           FROM '||p_item_attr_agv_name||'  '||l_item_agv_alias||
6077                          '         ) ';
6078 
6079 
6080     ELSE
6081 
6082       l_final_view_sql := ' CREATE OR REPLACE VIEW '||p_final_agv_name||' ( '||l_final_view_col_list||') '||
6083                           ' AS '||l_final_view_query||
6084                           ' FROM '||p_item_attr_agv_name||' '||l_item_agv_alias||
6085                           ' , '||p_tp_agv_name||' '||l_tp_agv_alias||
6086                           ' WHERE '||l_item_agv_alias||'.INVENTORY_ITEM_ID = '||l_tp_agv_alias||'.INVENTORY_ITEM_ID(+) '||
6087                           '   AND '||l_item_agv_alias||'.ORGANIZATION_ID = '||l_tp_agv_alias||'.MASTER_ORGANIZATION_ID(+) '||
6088                           ' UNION ALL '||
6089                           ' SELECT '||l_final_view_col_list||
6090                           ' FROM '||p_tp_agv_name||' '||l_tp_agv_alias||
6091                           ' WHERE NOT EXISTS ( SELECT ''X'' '||
6092                           '                      FROM '||p_item_attr_agv_name||' '||l_item_agv_alias||
6093                           '                     WHERE INVENTORY_ITEM_ID = '||l_tp_agv_alias||'.INVENTORY_ITEM_ID '||
6094                           '                       AND ORGANIZATION_ID = '||l_tp_agv_alias||'.MASTER_ORGANIZATION_ID ) '||
6095                           '  UNION ALL '||
6096                           ' SELECT '||l_final_view_col_list||
6097                           '   FROM (SELECT NULL PARTY_SITE_ID, '||l_item_agv_alias||'.* , '||
6098                           '                '||l_item_agv_alias||'.ORGANIZATION_ID MASTER_ORGANIZATION_ID '||
6099                           '           FROM '||p_item_attr_agv_name||'  '||l_item_agv_alias||
6100                           '          WHERE EXISTS ( SELECT ''X'' '||
6101                           '                               FROM '||p_tp_agv_name||' '||l_tp_agv_alias||
6102                           '                              WHERE INVENTORY_ITEM_ID = '||l_item_agv_alias||'.INVENTORY_ITEM_ID '||
6103                           '                                AND MASTER_ORGANIZATION_ID = '||l_item_agv_alias||'.ORGANIZATION_ID '||
6104                           '                            ) '||
6105                           '        ) ';
6106 
6107 
6108 
6109     END IF;
6110 
6111 
6112     --bugfix 11907422 for 12.2 AD_DDL changes
6113     --EXECUTE IMMEDIATE l_final_view_sql;
6114       h_x := FND_INSTALLATION.Get_App_Info('FND', h_status, h_industry, fnd_apps_schema);
6115 	 --bug 12392423, hard code APPS as second parameter
6116      AD_DDL.DO_DDL(fnd_apps_schema, 'APPS',ad_ddl.create_view,l_final_view_sql, p_final_agv_name);
6117 
6118 
6119     x_return_status := FND_API.G_RET_STS_SUCCESS;
6120 
6121 EXCEPTION
6122  WHEN OTHERS THEN
6123 
6124       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6125       x_msg_data := SQLERRM;
6126 
6127 END  GENERATE_GTIN_TP_ATTRS_VIEW;
6128 
6129 PROCEDURE  process_attribute_defaulting(p_item_attr_def_tab   IN OUT NOCOPY SYSTEM.EGO_ITEM_ATTR_DEFAULT_TABLE
6130                                        ,p_gdsn_enabled        IN         VARCHAR2
6131                                        ,p_commit              IN         VARCHAR2
6132                                        ,x_return_status       OUT NOCOPY VARCHAR2
6133                                        ,x_msg_data            OUT NOCOPY VARCHAR2
6134                                        ,x_msg_count           OUT NOCOPY  NUMBER)
6135 
6136 IS
6137 
6138 l_error_code VARCHAR2(2000);
6139 l_msg_count NUMBER;
6140 l_msg_data VARCHAR2(2000);
6141 l_failed_row_id_list  VARCHAR2(2000);
6142 
6143 l_pk_column_name_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
6144 l_class_code_name_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
6145 l_data_level_values EGO_COL_NAME_VALUE_PAIR_ARRAY;
6146 l_inventory_item_id  NUMBER;
6147 l_organization_id NUMBER;
6148 l_revision_id NUMBER;
6149 l_object_name VARCHAR2(10);
6150 l_application_id NUMBER;
6151 l_catalog_group_id NUMBER;
6152 l_additional_class_Code_list VARCHAR2(32000);
6153 l_attribute_group_type VARCHAR2(20);
6154 l_record_first NUMBER;
6155 l_record_last  NUMBER;
6156 l_return_status VARCHAR2(10);
6157 l_commit VARCHAR2(2);
6158 l_attr_groups_to_exclude VARCHAR2(2000);
6159 
6160 CURSOR attr_default_recs IS
6161      SELECT A.ORGANIZATION_ID          ORGANIZATION_ID
6162            ,A.INVENTORY_ITEM_ID        INVENTORY_ITEM_ID
6163            ,A.REVISION_ID              REVISION_ID
6164            ,A.APPLICATION_ID           APPLICATION_ID
6165            ,A.ITEM_CATALOG_GROUP_ID    ITEM_CATALOG_GROUP_ID
6166            ,A.OBJECT_NAME              OBJECT_NAME
6167            ,A.ATTRIBUTE_GROUP_TYPE     ATTRIBUTE_GROUP_TYPE
6168      FROM THE (SELECT CAST(p_item_attr_def_tab AS "SYSTEM".EGO_ITEM_ATTR_DEFAULT_TABLE)
6169                 FROM dual) A
6170      ORDER BY INVENTORY_ITEM_ID;
6171 
6172    BEGIN
6173       x_return_status := l_return_status;
6174       x_msg_count     := 0;
6175 
6176       l_record_first := p_item_attr_def_tab.FIRST;
6177       l_record_last  := p_item_attr_def_tab.LAST;
6178       FOR attr_default_rec IN attr_default_recs LOOP
6179         l_inventory_item_id  := attr_default_rec.INVENTORY_ITEM_ID;
6180         l_organization_id := attr_default_rec.ORGANIZATION_ID;
6181         l_revision_id := attr_default_rec.REVISION_ID;
6182         l_object_name := attr_default_rec.OBJECT_NAME;
6183         l_application_id := attr_default_rec.APPLICATION_ID;
6184         l_catalog_group_id := attr_default_rec.ITEM_CATALOG_GROUP_ID;
6185         l_attribute_group_type := attr_default_rec.ATTRIBUTE_GROUP_TYPE;
6186         l_commit := p_commit;
6187         l_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY
6188           ( EGO_COL_NAME_VALUE_PAIR_OBJ('INVENTORY_ITEM_ID', TO_CHAR(attr_default_rec.INVENTORY_ITEM_ID))
6189           , EGO_COL_NAME_VALUE_PAIR_OBJ('ORGANIZATION_ID', TO_CHAR(attr_default_rec.ORGANIZATION_ID)));
6190 
6191         l_class_code_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY
6192           (EGO_COL_NAME_VALUE_PAIR_OBJ('ITEM_CATALOG_GROUP_ID', to_char(attr_default_rec.ITEM_CATALOG_GROUP_ID)));
6193 
6194         l_data_level_values := EGO_COL_NAME_VALUE_PAIR_ARRAY
6195           (EGO_COL_NAME_VALUE_PAIR_OBJ('REVISION_ID', to_char(attr_default_rec.REVISION_ID)));
6196 
6197         Get_Related_Class_Codes ( p_classification_code      => l_catalog_group_id,
6198                                  x_related_class_codes_list => l_additional_class_Code_list);
6199         IF l_additional_class_Code_list IS NULL  THEN
6200            l_additional_class_Code_list := '-1';
6201          ELSE
6202            l_additional_class_Code_list := l_additional_class_Code_list|| ','||l_catalog_group_id||',-1';
6203         END IF;
6204         IF p_gdsn_enabled = 'N' THEN
6205 
6206            l_attr_groups_to_exclude := 'SELECT ATTR_GROUP_ID  FROM '||
6207                                  ' EGO_FND_DSC_FLX_CTX_EXT WHERE DESCRIPTIVE_FLEX_CONTEXT_CODE ' ||
6208                ' LIKE ''EGOINT_GDSN%'' AND APPLICATION_ID = 431 ' ||
6209                ' AND DESCRIPTIVE_FLEXFIELD_NAME = ''EGO_ITEMMGMT_GROUP'' ' ;
6210         END IF;
6211         EGO_USER_ATTRS_DATA_PVT.Apply_Default_Vals_For_Entity
6212                    ( p_object_name                   => l_object_name
6213                     ,p_application_id                => l_application_id
6214                     ,p_attr_group_type               => l_attribute_group_type
6215                     ,p_attr_groups_to_exclude        => l_attr_groups_to_exclude
6216                     ,p_pk_column_name_value_pairs    => l_pk_column_name_value_pairs
6217                     ,p_class_code_name_value_pairs   => l_class_code_name_value_pairs
6218                     ,p_data_level_values             => l_data_level_values
6219                     ,p_additional_class_Code_list    => l_additional_class_Code_list
6220                     ,p_init_error_handler            => 'T'
6221                     ,p_init_fnd_msg_list             => 'T'
6222                     ,p_log_errors                    => 'T'
6223                     ,p_add_errors_to_fnd_stack       => 'T'
6224                     ,P_commit                        => l_commit
6225                     ,x_failed_row_id_list            => l_failed_row_id_list
6226                     ,x_return_status                 => l_return_status
6227                     ,x_errorcode                     => l_error_code
6228                     ,x_msg_count                     => l_msg_count
6229                     ,x_msg_data                      => l_msg_data
6230                    );
6231         x_return_status := l_return_status ;
6232       END LOOP;
6233  EXCEPTION
6234    WHEN OTHERS THEN
6235      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6236      x_msg_data := SQLERRM;
6237 
6238 END process_attribute_defaulting;
6239 
6240 
6241 -- -----------------------------------------------------------------------------
6242 --  API Name:       Process_Serial_Tag_Assignments
6243 --
6244 --  Description: API to create or delete Serial Tagging Assignments for
6245 --               Item or Template.
6246 --
6247 -- -----------------------------------------------------------------------------
6248 PROCEDURE Process_Serial_Tag_Assignments (
6249       p_api_version                 IN  NUMBER
6250      ,p_init_msg_list               IN  VARCHAR2
6251      ,p_commit                      IN  VARCHAR2
6252      ,p_inventory_item_id           IN  NUMBER
6253      ,p_organization_id             IN  NUMBER
6254      ,p_template_id                 IN  NUMBER
6255      ,p_serial_tag_assignments      IN  EGO_SERIAL_TAG_ASSIGN_TABLE
6256      ,x_return_status               OUT NOCOPY VARCHAR2
6257      ,x_msg_count                   OUT NOCOPY NUMBER
6258      ,x_msg_data                    OUT NOCOPY VARCHAR2
6259 
6260       ) IS
6261 
6262   l_curr_serial_tag_assign_rec      EGO_SERIAL_TAG_ASSIGN_OBJ;
6263   l_operation_type                  VARCHAR2(30);
6264   l_transaction_type_name           VARCHAR2(80);
6265   l_transaction_type_id             NUMBER;
6266   l_exists                          VARCHAR2(3);
6267   l_api_name                        VARCHAR2(60) := 'Process_Serial_Tag_Assignments';
6268   l_serial_exists                   NUMBER;
6269   l_validate                        VARCHAR2(30);
6270 
6271 BEGIN
6272 
6273   --
6274   -- Savepoint
6275   --
6276   SAVEPOINT Process_Serial_Tag_Assign;
6277 
6278   --
6279   -- Initialize message list
6280   --
6281   IF FND_API.To_Boolean(p_init_msg_list) THEN
6282     FND_MSG_PUB.Initialize;
6283   END IF;
6284 
6285   x_return_status := FND_API.G_RET_STS_SUCCESS;
6286 
6287   --
6288   -- Validate id's
6289   --
6290   IF ( (  p_inventory_item_id IS NULL
6291           AND p_template_id   IS NOT NULL)
6292         OR
6293         ( p_organization_id        IS NOT NULL
6294           AND p_inventory_item_id  IS NOT NULL
6295           AND p_template_id        IS NULL)
6296       )
6297   THEN
6298     --
6299     -- Validate the Id's
6300     --
6301     IF (p_template_id is not null) THEN
6302 
6303       BEGIN
6304         select 'x'
6305         into l_validate
6306         from mtl_item_templates
6307         where template_id = p_template_id;
6308       EXCEPTION
6309       WHEN NO_DATA_FOUND THEN
6310         fnd_message.set_name('INV','INV_TEMPLATE_ERROR');
6311         fnd_msg_pub.Add;
6312         RAISE FND_API.G_EXC_ERROR;
6313       WHEN OTHERS THEN
6314         null;
6315       END;
6316 
6317     ELSIF (p_inventory_item_id is not null) THEN
6318 
6319       BEGIN
6320         select 'x'
6321         into l_validate
6322         from mtl_system_items_b
6323         where inventory_item_id = p_inventory_item_id
6324         and organization_id = p_organization_id;
6325       EXCEPTION
6326       WHEN NO_DATA_FOUND THEN
6327         fnd_message.set_name('INV','INV_INVALID_ITEM_ORG');
6328         fnd_msg_pub.Add;
6329         RAISE FND_API.G_EXC_ERROR;
6330       WHEN OTHERS THEN
6331         null;
6332       END;
6333 
6334     END IF;
6335 
6336   ELSE
6337 
6338    fnd_message.set_name('INV','INV_ST_INVALID_COMBINATION');
6339    fnd_msg_pub.Add;
6340    RAISE FND_API.G_EXC_ERROR;
6341 
6342   END IF;
6343 
6344   FOR j IN p_serial_tag_assignments.FIRST.. p_serial_tag_assignments.LAST
6345   LOOP
6346 
6347     l_curr_serial_tag_assign_rec := p_serial_tag_assignments(j);
6348 
6349     l_operation_type        := l_curr_serial_tag_assign_rec.OPERATION_TYPE;
6350     l_transaction_type_id   := l_curr_serial_tag_assign_rec.TRANSACTION_TYPE_ID;
6351     l_transaction_type_name := l_curr_serial_tag_assign_rec.TRANSACTION_TYPE_NAME;
6352     l_exists                := 'N';
6353 
6354     IF (l_operation_type = 'CREATE') THEN
6355 
6356       --
6357       -- Check for duplicates
6358       --
6359       BEGIN
6360 
6361         IF p_template_id IS NULL THEN
6362 
6363           select 'Y'
6364           into   l_exists
6365           from   mtl_serial_tagging_assignments
6366           where  organization_id     = p_organization_id
6367           and    inventory_item_id   = p_inventory_item_id
6368           and    transaction_type_id = l_transaction_type_id;
6369 
6370         ELSE
6371 
6372           select 'Y'
6373           into   l_exists
6374           from   mtl_serial_tagging_assignments
6375           where  nvl(organization_id,-1) = nvl(p_organization_id,-1)
6376           and    template_id         = p_template_id
6377           and    transaction_type_id = l_transaction_type_id;
6378 
6379         END IF;
6380 
6381         IF l_exists = 'Y' THEN
6382           fnd_message.set_name('INV','INV_ALREADY_EXISTS');
6383           fnd_message.set_token('ENTITY',l_transaction_type_name,FALSE);
6384           fnd_msg_pub.Add;
6385           RAISE FND_API.G_EXC_ERROR;
6386         END IF;
6387 
6388       EXCEPTION
6389       WHEN NO_DATA_FOUND THEN
6390         null;
6391       END;
6392 
6393       --
6394       -- Insert the data
6395       --
6396       INSERT INTO MTL_SERIAL_TAGGING_ASSIGNMENTS
6397       (
6398          organization_id
6399         ,inventory_item_id
6400         ,template_id
6401         ,transaction_type_id
6402         ,created_by
6403         ,creation_date
6404         ,last_updated_by
6405         ,last_update_date
6406         ,last_update_login
6407         ,context
6408       )
6409       VALUES
6410       (
6411          p_organization_id
6412         ,p_inventory_item_id
6413         ,p_template_id
6414         ,l_transaction_type_id
6415         ,fnd_global.user_id
6416         ,sysdate
6417         ,fnd_global.user_id
6418         ,sysdate
6419         ,fnd_global.login_id
6420         ,null
6421        );
6422 
6423 
6424     ELSIF (l_operation_type = 'DELETE') THEN
6425 
6426       --
6427       -- Check if transactions exist
6428       --
6429 
6430       IF (p_template_id is null) THEN
6431 
6432         IF (l_transaction_type_id = 93) THEN
6433 
6434           BEGIN
6435             select 'Y'
6436             into   l_exists
6437             from   dual
6438             where  exists( select 1
6439                      from   mtl_material_transactions_temp
6440                      where  organization_id     = p_organization_id
6441                      and    inventory_item_id   = p_inventory_item_id
6442                      and    transaction_type_id in (93,94))
6443             or     exists( select 1
6444                      from   mtl_transactions_interface
6445                      where  organization_id     = p_organization_id
6446                      and    inventory_item_id     = p_inventory_item_id
6447                      and    transaction_type_id in (93,94));
6448 
6449           EXCEPTION
6450           WHEN NO_DATA_FOUND THEN
6451             null;
6452           END;
6453 
6454         ELSIF (l_transaction_type_id = 35) THEN
6455 
6456           BEGIN
6457             select 'Y'
6458             into   l_exists
6459             from   dual
6460             where  exists( select 1
6461                      from   mtl_material_transactions_temp
6462                      where  organization_id     = p_organization_id
6463                      and    inventory_item_id   = p_inventory_item_id
6464                      and    transaction_type_id in (35,43))
6465             or     exists( select 1
6466                      from   mtl_transactions_interface
6467                      where  organization_id     = p_organization_id
6468                      and    inventory_item_id     = p_inventory_item_id
6469                      and    transaction_type_id in (35,43));
6470 
6471           EXCEPTION
6472           WHEN NO_DATA_FOUND THEN
6473             null;
6474           END;
6475 
6476         ELSIF (l_transaction_type_id = 36) THEN
6477 
6478           BEGIN
6479             select 'Y'
6480             into l_exists
6481             from rcv_transactions_interface
6482             where from_organization_id = p_organization_id
6483             and item_id = p_inventory_item_id
6484             and transaction_type in ('RETURN TO RECEIVING','RETURN TO VENDOR')
6485             and receipt_source_code = 'VENDOR';
6486           EXCEPTION
6487           WHEN NO_DATA_FOUND THEN
6488             null;
6489           END;
6490 
6491         END IF;
6492 
6493         IF l_exists = 'Y' THEN
6494           FND_MESSAGE.SET_NAME('INV','INV_PENDING_TXNS_EXISTS');
6495           fnd_message.set_token('ENTITY',l_transaction_type_name,FALSE);
6496           fnd_msg_pub.Add;
6497           RAISE FND_API.G_EXC_ERROR;
6498         END IF;
6499 
6500       END IF;
6501 
6502       --
6503       -- Delete the data
6504       --
6505       IF p_template_id is null THEN
6506 
6507         DELETE FROM  MTL_SERIAL_TAGGING_ASSIGNMENTS
6508         WHERE  organization_id     = p_organization_id
6509         AND    inventory_item_id   = p_inventory_item_id
6510         AND    transaction_type_id = l_transaction_type_id;
6511 
6512       ELSE
6513 
6514         DELETE FROM  MTL_SERIAL_TAGGING_ASSIGNMENTS
6515         WHERE  nvl(organization_id,-1) = nvl(p_organization_id,-1)
6516         AND    template_id         = p_template_id
6517         AND    transaction_type_id = l_transaction_type_id;
6518 
6519       END IF;
6520 
6521     END IF;
6522 
6523   END LOOP;
6524 
6525   --
6526   -- Update mtl_system_items_b
6527   --
6528 
6529   IF ( p_template_id is null ) THEN
6530 
6531     l_serial_exists := inv_serial_number_pub.is_serial_tagged
6532                        (p_inventory_item_id => p_inventory_item_id,
6533                         p_organization_id   => p_organization_id);
6534 
6535     IF (l_serial_exists = 2 ) THEN
6536 
6537       UPDATE MTL_SYSTEM_ITEMS_B
6538       SET serial_tagging_flag = 'Y'
6539       WHERE inventory_item_id = p_inventory_item_id
6540       AND organization_id = p_organization_id
6541       AND nvl(serial_tagging_flag,'N') = 'N';
6542 
6543     ELSE
6544 
6545       UPDATE MTL_SYSTEM_ITEMS_B
6546       SET serial_tagging_flag = 'N'
6547       WHERE inventory_item_id = p_inventory_item_id
6548       AND organization_id = p_organization_id
6549       AND serial_tagging_flag = 'Y';
6550 
6551     END IF;
6552 
6553   END IF;
6554 
6555   -- commit data
6556   IF FND_API.To_Boolean( p_commit ) THEN
6557     COMMIT;
6558   END IF;
6559 
6560 EXCEPTION
6561   WHEN FND_API.G_EXC_ERROR THEN
6562     ROLLBACK TO Process_Serial_Tag_Assign;
6563     code_debug(l_api_name||' returning expected error ');
6564 
6565     x_return_status := FND_API.G_RET_STS_ERROR;
6566     FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6567                              ,p_count   => x_msg_count
6568                              ,p_data    => x_msg_data);
6569   WHEN OTHERS THEN
6570     ROLLBACK TO Process_Serial_Tag_Assign;
6571     x_return_status :=  FND_API.G_RET_STS_UNEXP_ERROR;
6572 
6573     FND_MESSAGE.Set_Name(G_APP_NAME, G_PLSQL_ERR);
6574     FND_MESSAGE.Set_Token(G_PKG_NAME_TOKEN, G_PKG_NAME);
6575     FND_MESSAGE.Set_Token(G_API_NAME_TOKEN, l_api_name);
6576     FND_MESSAGE.Set_Token(G_SQL_ERR_MSG_TOKEN, SQLERRM);
6577     FND_MSG_PUB.Add;
6578     FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6579                              ,p_count   => x_msg_count
6580                              ,p_data    => x_msg_data);
6581 
6582     code_debug(' EXCEPTION in '||l_api_name||' : ' ||x_msg_data );
6583 
6584 END Process_Serial_Tag_Assignments;
6585 
6586 END EGO_ITEM_PVT;