[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;