DBA Data[Home] [Help]

PACKAGE BODY: APPS.AMV_USER_PVT

Source


1 PACKAGE BODY amv_user_pvt AS
2 /*  $Header: amvvusrb.pls 120.1 2005/06/29 10:43:09 appldev ship $ */
3 -- * * * USER BLOCK API * * *
4 --
5 -- NAME
6 --   AMV_USER_PVT
7 --
8 -- HISTORY
9 --   11/04/1999        PWU        CREATED
10 --
11 --   06/30/2000        SHITIJ VATSA   UPDATED
12 --
13 --   12/26/2002		KALYAN 	      Modified pls refer the bug# 2709045,272331
14 --
15 --                     (svatsa)       Made the following changes for Territory Privilege Integration
16 --                                    1. Modified the API Get_RoleIDArray to support Territory Intg
17 --                                    2. Modified the API Get_Role to support Territory Intg
18 --
19 --	12/21/00		MADESAI	MODIFIED DELETE_GROUP API to add code to delete
20 --                            from amv_c_channels when a Group is deleted.
21 --
22 --	8/20/03		SHARMA	replaced email by username in find resource proc
23 --
24 --
25 G_PKG_NAME      CONSTANT VARCHAR2(30) := 'AMV_USER_PVT';
26 G_FILE_NAME     CONSTANT VARCHAR2(12) := 'amvvusrb.pls';
27 --
28 G_RESOURCE_ROLE_CODE CONSTANT VARCHAR2(30) := 'RS_INDIVIDUAL';
29 G_GROUP_ROLE_CODE    CONSTANT VARCHAR2(30) := 'RS_GROUP';
30 -- Debug mode
31 G_DEBUG boolean := FALSE;
32 --G_DEBUG boolean := TRUE;
33 --
34 --
35 TYPE    CursorType    IS REF CURSOR;
36 --
37 --
38 ----------------------------- Private Portinon ---------------------------------
39 --------------------------------------------------------------------------------
40 FUNCTION Get_RoleId
41 (
42     p_role_code  VARCHAR2
43 ) return NUMBER;
44 PROCEDURE Add_Access_Helper
45 (
46     p_access_obj          IN  AMV_ACCESS_OBJ_TYPE,
47     x_return_status       OUT NOCOPY VARCHAR2,
48     x_access_id           OUT NOCOPY NUMBER
49 );
50 PROCEDURE Update_Access_Helper
51 (
52     p_access_obj          IN  AMV_ACCESS_OBJ_TYPE,
53     x_return_status       OUT NOCOPY VARCHAR2
54 );
55 --------------------------------------------------------------------------------
56 FUNCTION Get_RoleId
57 (
58     p_role_code  VARCHAR2
59 ) return NUMBER AS
60 --
61 CURSOR  Get_MES_Role_Id_csr (p_role_code IN VARCHAR2) IS
62 Select
63     role_id
64 From jtf_rs_roles_vl
65 Where role_code = p_role_code
66 And   role_type_code = G_MES_ROLE_TYPE_NAME
67 ;
68 l_role_id   number := FND_API.G_MISS_NUM;
69 BEGIN
70      OPEN  Get_MES_Role_Id_csr(p_role_code);
71      FETCH Get_MES_Role_Id_csr INTO l_role_id;
72      CLOSE Get_MES_Role_Id_csr;
73      return  l_role_id;
74 END Get_RoleId;
75 --------------------------------------------------------------------------------
76 FUNCTION Get_Role(p_resource_id IN NUMBER, p_resource_type IN VARCHAR2)
77 RETURN STRING AS
78 l_return_str    VARCHAR2(7) := '';
79 l_temp          NUMBER;
80 
81 CURSOR check_role_csr(p_role_code IN VARCHAR2) IS
82 Select
83      rol.role_id
84 From jtf_rs_roles_vl rol, jtf_rs_role_relations_vl rel
85 Where rol.role_id = rel.role_id
86 And rel.role_resource_id = p_resource_id
87 And rel.role_resource_type = p_resource_type
88 And rol.role_type_code = G_MES_ROLE_TYPE_NAME
89 And rol.role_code = p_role_code;
90 
91 BEGIN
92    OPEN check_role_csr(G_ADMINISTRTOR_CODE);
93    FETCH check_role_csr INTO l_temp;
94    IF (check_role_csr%FOUND) THEN
95       l_return_str := l_return_str || 'T';
96    ELSE
97       l_return_str := l_return_str || 'F';
98    END IF;
99    CLOSE check_role_csr;
100 
101    OPEN check_role_csr(G_CAN_PUBLISH_CODE);
102    FETCH check_role_csr INTO l_temp;
103    IF (check_role_csr%FOUND) THEN
104       l_return_str := l_return_str || 'T';
105    ELSE
106       l_return_str := l_return_str || 'F';
107    END IF;
108    CLOSE check_role_csr;
109 
110    OPEN check_role_csr(G_CAN_APPROVE_CODE);
111    FETCH check_role_csr INTO l_temp;
112    IF (check_role_csr%FOUND) THEN
113       l_return_str := l_return_str || 'T';
114    ELSE
115       l_return_str := l_return_str || 'F';
116    END IF;
117    CLOSE check_role_csr;
118 
119    OPEN check_role_csr(G_CAN_SETUP_CHANNEL_CODE);
120    FETCH check_role_csr INTO l_temp;
121    IF (check_role_csr%FOUND) THEN
122       l_return_str := l_return_str || 'T';
123    ELSE
124       l_return_str := l_return_str || 'F';
125    END IF;
126    CLOSE check_role_csr;
127 
128    OPEN check_role_csr(G_CAN_SETUP_CATEGORY_CODE);
129    FETCH check_role_csr INTO l_temp;
130    IF (check_role_csr%FOUND) THEN
131       l_return_str := l_return_str || 'T';
132    ELSE
133       l_return_str := l_return_str || 'F';
134    END IF;
135    CLOSE check_role_csr;
136 
137    OPEN check_role_csr(G_CAN_SETUP_DIST_CODE);
138    FETCH check_role_csr INTO l_temp;
139    IF (check_role_csr%FOUND) THEN
140       l_return_str := l_return_str || 'T';
141    ELSE
142       l_return_str := l_return_str || 'F';
143    END IF;
144    CLOSE check_role_csr;
145 
146 -- Begin : Territory Integration
147 -- 07/06/2000 svatsa
148    OPEN check_role_csr(G_CAN_SETUP_TERRITORY_CODE);
149    FETCH check_role_csr INTO l_temp;
150    IF (check_role_csr%FOUND) THEN
151       l_return_str := l_return_str || 'T';
152    ELSE
153       l_return_str := l_return_str || 'F';
154    END IF;
155    CLOSE check_role_csr;
156 -- End : Territory Integration
157 
158    RETURN l_return_str;
159 --dbms_output.put_line('l_return_str'||l_return_str);
160 EXCEPTION
161     WHEN OTHERS THEN
162        l_return_str := 'FFFFFFF';
163        RETURN l_return_str;
164 END Get_Role;
165 --------------------------------------------------------------------------------
166 PROCEDURE Get_RoleIDArray
167 (p_role_code_array IN  VARCHAR2,
168  x_role_id_varray  OUT NOCOPY AMV_NUMBER_VARRAY_TYPE
169 ) AS
170 l_str     VARCHAR2(1);
171 l_index   NUMBER := 1;
172 BEGIN
173     x_role_id_varray := AMV_NUMBER_VARRAY_TYPE();
174     l_str := substr(p_role_code_array, 1, 1);
175     IF (l_str = 'T') THEN
176        x_role_id_varray.extend;
177        x_role_id_varray(l_index) := Get_RoleId(G_ADMINISTRTOR_CODE);
178        l_index := l_index + 1;
179     END IF;
180     l_str := substr(p_role_code_array, 2, 1);
181     IF (l_str = 'T') THEN
182        x_role_id_varray.extend;
183        x_role_id_varray(l_index) := Get_RoleId(G_CAN_PUBLISH_CODE);
184        l_index := l_index + 1;
185     END IF;
186     l_str := substr(p_role_code_array, 3, 1);
187     IF (l_str = 'T') THEN
188        x_role_id_varray.extend;
189        x_role_id_varray(l_index) := Get_RoleId(G_CAN_APPROVE_CODE);
190        l_index := l_index + 1;
191     END IF;
192     l_str := substr(p_role_code_array, 4, 1);
193     IF (l_str = 'T') THEN
194        x_role_id_varray.extend;
195        x_role_id_varray(l_index) := Get_RoleId(G_CAN_SETUP_CHANNEL_CODE);
196        l_index := l_index + 1;
197     END IF;
198     l_str := substr(p_role_code_array, 5, 1);
199     IF (l_str = 'T') THEN
200        x_role_id_varray.extend;
201        x_role_id_varray(l_index) := Get_RoleId(G_CAN_SETUP_CATEGORY_CODE);
202        l_index := l_index + 1;
203     END IF;
204     l_str := substr(p_role_code_array, 6, 1);
205     IF (l_str = 'T') THEN
206        x_role_id_varray.extend;
207        x_role_id_varray(l_index) := Get_RoleId(G_CAN_SETUP_DIST_CODE);
208        l_index := l_index + 1;
209     END IF;
210 
211     -- Begin : Territory Integration
212     -- 06/30/2000 svatsa
213     l_str := substr(p_role_code_array, 7, 1);
214     IF (l_str = 'T') THEN
215        x_role_id_varray.extend;
216        x_role_id_varray(l_index) := Get_RoleId(G_CAN_SETUP_TERRITORY_CODE);
217        l_index := l_index + 1;
218     END IF;
219     -- End : Territory Integration
220 
221 END Get_RoleIDArray;
222 --------------------------------------------------------------------------------
223 PROCEDURE Add_Access_Helper
224 (
225     p_access_obj      IN  AMV_ACCESS_OBJ_TYPE,
226     x_return_status   OUT NOCOPY VARCHAR2,
227     x_access_id       OUT NOCOPY NUMBER
228 ) AS
229 --
230 l_api_name             CONSTANT VARCHAR2(30) := 'Add_Access_helper';
231 l_current_user_id      NUMBER;
232 l_current_login_id     NUMBER;
233 l_current_resource_id  NUMBER;
234 l_current_user_status  VARCHAR2(30);
235 --
236 l_access_id            NUMBER;
237 l_date                 DATE;
238 l_access_obj           AMV_ACCESS_OBJ_TYPE;
239 --
240 CURSOR Get_IDandDate_csr is
241 Select amv_u_access_s.nextval, sysdate
242 From   Dual;
243 --
244 BEGIN
245     SAVEPOINT  Add_Access_helper_PVT;
246     -- Get the current (login) user id.
247     AMV_UTILITY_PVT.Get_UserInfo(
248        x_user_id     => l_current_user_id,
249        x_login_id    => l_current_login_id,
250        x_resource_id => l_current_resource_id,
251        x_user_status => l_current_user_status
252        );
253     -- This is to make database happy
254     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
255         l_current_login_id := -1;
256         l_current_user_id  := -1;
257         l_current_resource_id := -1;
258     END IF;
259     OPEN  Get_IDandDate_csr;
260     FETCH Get_IDandDate_csr INTO l_access_id, l_date;
261     CLOSE Get_IDandDate_csr;
262     l_access_obj := p_access_obj;
263     -- Maybe we add more checking on the passed object and make some change.
264     Insert into amv_u_access
265     (
266        ACCESS_ID,
267        OBJECT_VERSION_NUMBER,
268        CREATION_DATE,
269        CREATED_BY,
270        LAST_UPDATE_DATE,
271        LAST_UPDATED_BY,
272        LAST_UPDATE_LOGIN,
273        ACCESS_TO_TABLE_CODE,
274        ACCESS_TO_TABLE_RECORD_ID,
275        USER_OR_GROUP_ID,
276        USER_OR_GROUP_TYPE,
277        EFFECTIVE_START_DATE,
278        EXPIRATION_DATE,
279        CAN_VIEW_FLAG,
280        CAN_CREATE_FLAG,
281        CAN_DELETE_FLAG,
282        CAN_UPDATE_FLAG,
283        CAN_CREATE_DIST_RULE_FLAG,
284        CHL_APPROVER_FLAG,
285        CHL_REQUIRED_FLAG,
286        CHL_REQUIRED_NEED_NOTIF_FLAG
287     )
288     values
289     (
290        l_access_id,
291        1, --OBJECT_VERSION_NUMBER
292        l_date,
293        l_current_user_id,
294        l_date,
295        l_current_user_id,
296        l_current_login_id,
297        l_access_obj.ACCESS_TO_TABLE_CODE,
298        l_access_obj.ACCESS_TO_TABLE_RECORD_ID,
299        l_access_obj.USER_OR_GROUP_ID,
300        l_access_obj.USER_OR_GROUP_TYPE,
301        l_access_obj.EFFECTIVE_START_DATE,
302        l_access_obj.EXPIRATION_DATE,
303        l_access_obj.CAN_VIEW_FLAG,
304        l_access_obj.CAN_CREATE_FLAG,
305        l_access_obj.CAN_DELETE_FLAG,
306        l_access_obj.CAN_UPDATE_FLAG,
307        l_access_obj.CAN_CREATE_DIST_RULE_FLAG,
308        l_access_obj.CHL_APPROVER_FLAG,
309        l_access_obj.CHL_REQUIRED_FLAG,
310        l_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG
311     );
312     x_access_id   := l_access_id;
313     x_return_status := FND_API.G_RET_STS_SUCCESS;
314 EXCEPTION
315     WHEN OTHERS THEN
316         ROLLBACK TO  Add_Access_helper_PVT;
317         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
318         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
319            FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
320         END IF;
321 END Add_Access_helper;
322 --------------------------------------------------------------------------------
323 PROCEDURE Update_Access_helper
324 (
325     p_access_obj          IN  AMV_ACCESS_OBJ_TYPE,
326     x_return_status       OUT NOCOPY VARCHAR2
327 ) AS
328 --
329 l_api_name             CONSTANT VARCHAR2(30) := 'Update_Access_helper';
330 l_current_user_id      NUMBER;
331 l_current_login_id     NUMBER;
332 l_current_resource_id  NUMBER;
333 l_current_user_status  VARCHAR2(30);
334 --
335 l_access_id            NUMBER;
336 l_access_obj           AMV_ACCESS_OBJ_TYPE;
337 --
338 BEGIN
339     SAVEPOINT  Update_Access_helper_PVT;
340     -- Get the current (login) user id.
341     AMV_UTILITY_PVT.Get_UserInfo(
342        x_user_id     => l_current_user_id,
343        x_login_id    => l_current_login_id,
344        x_resource_id => l_current_resource_id,
345        x_user_status => l_current_user_status
346        );
347     -- This is to make database happy
348     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
349         l_current_login_id := -1;
350         l_current_user_id  := -1;
351         l_current_resource_id := -1;
352     END IF;
353     l_access_obj := p_access_obj;
354     -- Maybe we add more checking on the passed object and make some change.
355     Update amv_u_access
356     Set LAST_UPDATE_DATE  = sysdate,
357         LAST_UPDATED_BY   = l_current_user_id,
358         LAST_UPDATE_LOGIN = l_current_login_id,
359         OBJECT_VERSION_NUMBER = object_version_number + 1,
360         EFFECTIVE_START_DATE = decode(l_access_obj.effective_start_date,
361                                   FND_API.G_MISS_DATE, EFFECTIVE_START_DATE,
362                                   l_access_obj.effective_start_date),
363         EXPIRATION_DATE = decode(l_access_obj.expiration_date,
364                                 FND_API.G_MISS_DATE, EXPIRATION_DATE,
365                                 l_access_obj.expiration_date),
366         CAN_VIEW_FLAG = decode(l_access_obj.can_view_flag,
367                                FND_API.G_MISS_CHAR, CAN_VIEW_FLAG,
368                                l_access_obj.can_view_flag),
369         CAN_CREATE_FLAG = decode(l_access_obj.can_create_flag,
370                                FND_API.G_MISS_CHAR, CAN_CREATE_FLAG,
371                                l_access_obj.can_create_flag),
372         CAN_DELETE_FLAG = decode(l_access_obj.can_delete_flag,
373                                FND_API.G_MISS_CHAR, CAN_DELETE_FLAG,
374                                l_access_obj.can_delete_flag),
375         CAN_UPDATE_FLAG = decode(l_access_obj.can_update_flag,
376                                FND_API.G_MISS_CHAR, CAN_UPDATE_FLAG,
377                                l_access_obj.can_update_flag),
378         CAN_CREATE_DIST_RULE_FLAG  =
379                            decode(l_access_obj.can_create_dist_rule_flag,
380                            FND_API.G_MISS_CHAR, CAN_CREATE_DIST_RULE_FLAG,
381                            l_access_obj.can_create_dist_rule_flag),
382         CHL_APPROVER_FLAG = decode(l_access_obj.chl_approver_flag,
383                                FND_API.G_MISS_CHAR, CHL_APPROVER_FLAG,
384                                l_access_obj.chl_approver_flag),
385         CHL_REQUIRED_FLAG = decode(l_access_obj.chl_required_flag,
386                                FND_API.G_MISS_CHAR, CHL_REQUIRED_FLAG,
387                                l_access_obj.chl_required_flag),
388         CHL_REQUIRED_NEED_NOTIF_FLAG =
389                           decode(l_access_obj.chl_required_need_notif_flag,
390                           FND_API.G_MISS_CHAR, CHL_REQUIRED_NEED_NOTIF_FLAG,
391                           l_access_obj.chl_required_need_notif_flag)
392     where access_id = l_access_obj.access_id
393     ;--and object_version_number = l_access_obj.access_id.object_version_number;
394     IF (SQL%NOTFOUND) THEN
395        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
396           FND_MESSAGE.Set_Name('AMV', 'AMV_INVALID_ACCESS_ID');
397           FND_MESSAGE.Set_Token('ACCESS_ID', TO_CHAR(l_access_obj.access_id) );
398           FND_MSG_PUB.add;
399        END IF;
400        RAISE FND_API.G_EXC_ERROR;
401     END IF;
402     x_return_status := FND_API.G_RET_STS_SUCCESS;
403 EXCEPTION
404     WHEN OTHERS THEN
405         ROLLBACK TO  Update_Access_helper_PVT;
406         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
407         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
408            FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
409         END IF;
410 END Update_Access_helper;
411 --------------------------------------------------------------------------------
412 --------------------------------------------------------------------------------
413 PROCEDURE Get_ResourceId
414 (
415     p_api_version         IN  NUMBER,
416     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
417     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
418     x_return_status       OUT NOCOPY VARCHAR2,
419     x_msg_count           OUT NOCOPY NUMBER,
420     x_msg_data            OUT NOCOPY VARCHAR2,
421     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
422     p_user_id             IN  NUMBER   := FND_API.G_MISS_NUM,
423     x_resource_id         OUT NOCOPY NUMBER
424 )  AS
425 l_api_name             CONSTANT VARCHAR2(30) := 'Get_ResourceId';
426 l_api_version          CONSTANT NUMBER := 1.0;
427 l_current_user_id      NUMBER;
428 l_current_login_id     NUMBER;
429 l_current_resource_id  NUMBER;
430 l_current_user_status  VARCHAR2(30);
431 --
432 BEGIN
433     -- Standard call to check for call compatibility.
434     IF NOT FND_API.Compatible_API_Call (
435          l_api_version,
436          p_api_version,
437          l_api_name,
438          G_PKG_NAME) THEN
439         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
440     END IF;
441     --Initialize message list if p_init_msg_list is TRUE.
442     IF FND_API.To_Boolean (p_init_msg_list) THEN
443        FND_MSG_PUB.initialize;
444     END IF;
445     -- Initialize API return status to success
446     x_return_status := FND_API.G_RET_STS_SUCCESS;
447     -- Get the current (login) user id.
448     AMV_UTILITY_PVT.Get_UserInfo(
449        x_user_id     => l_current_user_id,
450        x_login_id    => l_current_login_id,
451        x_resource_id => l_current_resource_id,
452        x_user_status => l_current_user_status
453        );
454     IF (p_check_login_user = FND_API.G_TRUE) THEN
455        -- Check if user is login and has the required privilege.
456        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
457           -- User is not login.
458           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
459               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
460               FND_MSG_PUB.Add;
461           END IF;
462           RAISE  FND_API.G_EXC_ERROR;
463        END IF;
464     END IF;
465     IF (p_user_id = l_current_user_id) THEN
466        x_resource_id := l_current_resource_id;
467     ELSE
468        AMV_UTILITY_PVT.Get_ResourceId
469        (
470           p_user_id      => p_user_id,
471           x_resource_id  => x_resource_id
472        );
473     END IF;
474     --Standard call to get message count and if count=1, get the message
475     FND_MSG_PUB.Count_And_Get (
476        p_encoded => FND_API.G_FALSE,
477        p_count => x_msg_count,
478        p_data  => x_msg_data
479        );
480 EXCEPTION
481    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
482        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
483        -- Standard call to get message count and if count=1, get the message
484        FND_MSG_PUB.Count_And_Get (
485           p_encoded => FND_API.G_FALSE,
486           p_count => x_msg_count,
487           p_data  => x_msg_data
488           );
489    WHEN FND_API.G_EXC_ERROR THEN
490        x_return_status := FND_API.G_RET_STS_ERROR;
491        -- Standard call to get message count and if count=1, get the message
492        FND_MSG_PUB.Count_And_Get (
493           p_encoded => FND_API.G_FALSE,
494           p_count => x_msg_count,
495           p_data  => x_msg_data
496           );
497    WHEN OTHERS THEN
498        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
499        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
500           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
501        END IF;
502        -- Standard call to get message count and if count=1, get the message
503        FND_MSG_PUB.Count_And_Get (
504           p_encoded => FND_API.G_FALSE,
505           p_count => x_msg_count,
506           p_data  => x_msg_data
507           );
508 END Get_ResourceId;
509 --------------------------------------------------------------------------------
510 PROCEDURE Find_Resource
511 (
512     p_api_version          IN  NUMBER,
513     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
514     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
515     x_return_status        OUT NOCOPY VARCHAR2,
516     x_msg_count            OUT NOCOPY NUMBER,
517     x_msg_data             OUT NOCOPY VARCHAR2,
518     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
519     p_group_id             IN  NUMBER   := FND_API.G_MISS_NUM,
520     p_check_effective_date IN  VARCHAR2 := FND_API.G_TRUE,
521     p_user_name            IN  VARCHAR2 := FND_API.G_MISS_CHAR,
522     p_last_name            IN  VARCHAR2 := FND_API.G_MISS_CHAR,
523     p_first_name           IN  VARCHAR2 := FND_API.G_MISS_CHAR,
524     p_subset_request_obj   IN  AMV_REQUEST_OBJ_TYPE,
525     x_subset_return_obj    OUT NOCOPY AMV_RETURN_OBJ_TYPE,
526     x_resource_obj_array   OUT NOCOPY AMV_RESOURCE_OBJ_VARRAY
527 )  AS
528 l_api_name             CONSTANT VARCHAR2(30) := 'Find_Resource';
529 l_api_version          CONSTANT NUMBER := 1.0;
530 l_current_user_id      NUMBER;
531 l_current_login_id     NUMBER;
532 l_current_resource_id  NUMBER;
533 l_current_user_status  VARCHAR2(30);
534 --
535 l_cursor             CursorType;
536 l_sql_statement      VARCHAR2(2000);
537 l_sql_statement2     VARCHAR2(2000);
538 l_where_clause       VARCHAR2(2000);
539 l_total_count        NUMBER := 1;
540 l_fetch_count        NUMBER := 0;
541 l_start_with         NUMBER;
542 l_total_record_count NUMBER;
543 --
544 l_resource_id        NUMBER;
545 l_person_id          NUMBER;
546 l_user_name          VARCHAR2(80);
547 l_resource_name      VARCHAR2(80);
548 l_first_name         VARCHAR2(40);
549 l_last_name          VARCHAR2(40);
550 l_search             VARCHAR2(2000);
551 --
552 BEGIN
553     -- Standard call to check for call compatibility.
554     IF NOT FND_API.Compatible_API_Call (
555          l_api_version,
556          p_api_version,
557          l_api_name,
558          G_PKG_NAME) THEN
559         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
560     END IF;
561     --Initialize message list if p_init_msg_list is TRUE.
562     IF FND_API.To_Boolean (p_init_msg_list) THEN
563        FND_MSG_PUB.initialize;
564     END IF;
565     -- Initialize API return status to success
566     x_return_status := FND_API.G_RET_STS_SUCCESS;
567     -- Get the current (login) user id.
568     AMV_UTILITY_PVT.Get_UserInfo(
569        x_user_id     => l_current_user_id,
570        x_login_id    => l_current_login_id,
571        x_resource_id => l_current_resource_id,
572        x_user_status => l_current_user_status
573        );
574     IF (p_check_login_user = FND_API.G_TRUE) THEN
575        -- Check if user is login and has the required privilege.
576        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
577           -- User is not login.
578           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
579               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
580               FND_MSG_PUB.Add;
581           END IF;
582           RAISE  FND_API.G_EXC_ERROR;
583        END IF;
584     END IF;
585     -- This is to make database happy
586     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
587         l_current_login_id := -1;
588         l_current_user_id  := -1;
589         l_current_resource_id := -1;
590     END IF;
591     -- Now create SQL statement and find the results:
592     IF (p_group_id IS NULL OR p_group_id = FND_API.G_MISS_NUM) THEN
593        l_sql_statement :=
594           'Select ' ||
595               'r.source_id, ' ||
596               'r.resource_id, ' ||
597               's.user_name, ' ||
598 	      'r.resource_name, ' ||
599               'r.first_name, ' ||
600               'r.last_name ' ||
601               'From  amv_rs_all_res_extns_vl r,  jtf_rs_resource_extns s ';
602        l_sql_statement2 :=
603           'Select count(*) ' ||
604               'From  amv_rs_all_res_extns_vl r, jtf_rs_resource_extns s ';
605        l_where_clause := 'Where s.resource_id = r.resource_id ';
606     ELSE
607        l_sql_statement :=
608           'Select ' ||
609               'r.source_id, ' ||
610               'r.resource_id, ' ||
611               's.user_name, ' ||
612 	      'r.resource_name, ' ||
613               'r.first_name, ' ||
614               'r.last_name ' ||
615               'From  amv_rs_all_res_extns_vl r, jtf_rs_group_members m, jtf_rs_resource_extns s  ';
616        l_sql_statement2 :=
617           'Select count(*) ' ||
618               'From  amv_rs_all_res_extns_vl r, jtf_rs_group_members m, jtf_rs_resource_extns s  ';
619        l_where_clause :=
620          'Where m.resource_id = r.resource_id ' ||
621          'And s.resource_id = r.resource_id ' ||
622          'And m.delete_flag <> ''Y'' ' ||
623          'And m.group_id = ' || p_group_id || ' ';
624        IF (p_check_effective_date = FND_API.G_TRUE) THEN
625            l_sql_statement  := l_sql_statement  || ', jtf_rs_groups_vl g ';
626            l_sql_statement2 := l_sql_statement2 || ', jtf_rs_groups_vl g ';
627            l_where_clause := l_where_clause ||
628                'And g.group_id = ' || p_group_id || ' ' ||
629                --'And r.start_date_active < sysdate ' ||
630                --'And nvl(r.end_date_active, sysdate+1) > sysdate ' ||
631                'And g.start_date_active < sysdate ' ||
632                'And nvl(g.end_date_active, sysdate+1) > sysdate ';
633        END IF;
634     END IF;
635     IF (p_user_name IS NOT NULL AND p_user_name <> FND_API.G_MISS_CHAR) THEN
636         l_where_clause := l_where_clause ||
637           'And ( upper(s.user_name) Like upper(''' || p_user_name || ''') ' ||
638            'OR upper(r.resource_name) Like upper(''' || p_user_name || ''')' ||
639            'OR upper(r.first_name) Like upper(''' || p_user_name || ''') ' ||
640            'OR upper(r.last_name) Like upper(''' || p_user_name || ''') ) ';
641     END IF;
642 
643 
644     l_sql_statement := l_sql_statement ||
645          l_where_clause || 'ORDER BY r.last_name, r.first_name ';
646     l_sql_statement2 := l_sql_statement2 || l_where_clause;
647 
648     IF (G_DEBUG = TRUE) THEN
649          AMV_UTILITY_PVT.PRINT_DEBUG_MESSAGE(l_sql_statement);
650     END IF;
651     --Execute the SQL statements to get the total count:
652     IF (p_subset_request_obj.return_total_count_flag = FND_API.G_TRUE) THEN
653         OPEN  l_cursor FOR l_sql_statement2;
654         FETCH l_cursor INTO l_total_record_count;
655         CLOSE l_cursor;
656     END IF;
657 
658 
659     --Execute the SQL statements to get records
660     l_start_with := p_subset_request_obj.start_record_position;
661     x_resource_obj_array := AMV_RESOURCE_OBJ_VARRAY();
662     OPEN l_cursor FOR l_sql_statement;
663     LOOP
664        FETCH l_cursor INTO
665            l_person_id,
666            l_resource_id,
667            l_user_name,
668 	   l_resource_name,
669            l_first_name,
670            l_last_name;
671        EXIT WHEN l_cursor%NOTFOUND;
672        IF (l_start_with <= l_total_count AND
673            l_fetch_count < p_subset_request_obj.records_requested) THEN
674           l_fetch_count := l_fetch_count + 1;
675           x_resource_obj_array.extend;
676           x_resource_obj_array(l_fetch_count).resource_id := l_resource_id;
677           x_resource_obj_array(l_fetch_count).person_id := l_person_id;
678           x_resource_obj_array(l_fetch_count).user_name := l_user_name;
679 
680 	/* Check for null first/last name. If null, use resource_name */
681         IF (l_first_name IS NULL OR l_last_name IS NULL) THEN
682           x_resource_obj_array(l_fetch_count).first_name := l_resource_name;
683           x_resource_obj_array(l_fetch_count).last_name := '';
684 	ELSE
685           x_resource_obj_array(l_fetch_count).first_name := l_first_name;
686           x_resource_obj_array(l_fetch_count).last_name := l_last_name;
687 	END IF;
688 
689        END IF;
690        IF (l_fetch_count >= p_subset_request_obj.records_requested) THEN
691           exit;
692        END IF;
693        l_total_count := l_total_count + 1;
694     END LOOP;
695    CLOSE l_cursor;
696 
697    x_subset_return_obj.returned_record_count := l_fetch_count;
698    x_subset_return_obj.next_record_position := p_subset_request_obj.start_record_position + l_fetch_count;
699    x_subset_return_obj.total_record_count := l_total_record_count;
700 
701 /*
702    x_subset_return_obj := AMV_RETURN_OBJ_TYPE
703       (
704          l_fetch_count,
705          p_subset_request_obj.start_record_position + l_fetch_count,
706          l_total_record_count
707       );
708 */
709     --Standard call to get message count and if count=1, get the message
710     FND_MSG_PUB.Count_And_Get (
711        p_encoded => FND_API.G_FALSE,
712        p_count => x_msg_count,
713        p_data  => x_msg_data
714        );
715 EXCEPTION
716    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
717        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
718        -- Standard call to get message count and if count=1, get the message
719        FND_MSG_PUB.Count_And_Get (
720           p_encoded => FND_API.G_FALSE,
721           p_count => x_msg_count,
722           p_data  => x_msg_data
723           );
724    WHEN FND_API.G_EXC_ERROR THEN
725        x_return_status := FND_API.G_RET_STS_ERROR;
726        -- Standard call to get message count and if count=1, get the message
727        FND_MSG_PUB.Count_And_Get (
728           p_encoded => FND_API.G_FALSE,
729           p_count => x_msg_count,
730           p_data  => x_msg_data
731           );
732    WHEN OTHERS THEN
733        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
734        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
735           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
736        END IF;
737        -- Standard call to get message count and if count=1, get the message
738        FND_MSG_PUB.Count_And_Get (
739           p_encoded => FND_API.G_FALSE,
740           p_count => x_msg_count,
741           p_data  => x_msg_data
742           );
743 END Find_Resource;
744 --------------------------------------------------------------------------------
745 PROCEDURE Find_Resource
746 (
747     p_api_version          IN  NUMBER,
748     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
749     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
750     x_return_status        OUT NOCOPY VARCHAR2,
751     x_msg_count            OUT NOCOPY NUMBER,
752     x_msg_data             OUT NOCOPY VARCHAR2,
753     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
754     p_resource_id          IN  NUMBER   := FND_API.G_MISS_NUM,
755     p_resource_name        IN  VARCHAR2 := FND_API.G_MISS_CHAR,
756     p_subset_request_obj   IN  AMV_REQUEST_OBJ_TYPE,
757     x_subset_return_obj    OUT NOCOPY AMV_RETURN_OBJ_TYPE,
758     x_resource_obj_array   OUT NOCOPY AMV_RESOURCE_OBJ_VARRAY,
759     x_role_code_varray     OUT NOCOPY AMV_CHAR_VARRAY_TYPE
760 )  AS
761 l_api_name             CONSTANT VARCHAR2(30) := 'Find_Resource';
762 l_api_version          CONSTANT NUMBER := 1.0;
763 l_current_user_id      NUMBER;
764 l_current_login_id     NUMBER;
765 l_current_resource_id  NUMBER;
766 l_current_user_status  VARCHAR2(30);
767 --
768 l_cursor             CursorType;
769 l_sql_statement      VARCHAR2(2000);
770 l_sql_statement2     VARCHAR2(2000);
771 l_where_clause       VARCHAR2(2000);
772 l_total_count        NUMBER := 1;
773 l_fetch_count        NUMBER := 0;
774 l_start_with         NUMBER;
775 l_total_record_count NUMBER;
776 --
777 l_resource_id        NUMBER;
778 l_person_id          NUMBER;
779 l_user_name          VARCHAR2(80);
780 l_resource_name      VARCHAR2(80);
781 l_first_name         VARCHAR2(40);
782 l_last_name          VARCHAR2(40);
783 l_search             VARCHAR2(2000);
784 --
785 BEGIN
786 --dbms_output.put_line('Enter : Find_Resource');
787     -- Standard call to check for call compatibility.
788     IF NOT FND_API.Compatible_API_Call (
789          l_api_version,
790          p_api_version,
791          l_api_name,
792          G_PKG_NAME) THEN
793         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
794     END IF;
795     --Initialize message list if p_init_msg_list is TRUE.
796     IF FND_API.To_Boolean (p_init_msg_list) THEN
797        FND_MSG_PUB.initialize;
798     END IF;
799     -- Initialize API return status to success
800     x_return_status := FND_API.G_RET_STS_SUCCESS;
801     -- Get the current (login) user id.
802     AMV_UTILITY_PVT.Get_UserInfo(
803        x_user_id     => l_current_user_id,
804        x_login_id    => l_current_login_id,
805        x_resource_id => l_current_resource_id,
806        x_user_status => l_current_user_status
807        );
808     IF (p_check_login_user = FND_API.G_TRUE) THEN
809        -- Check if user is login and has the required privilege.
810        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
811           -- User is not login.
812           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
813               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
814               FND_MSG_PUB.Add;
815           END IF;
816           RAISE  FND_API.G_EXC_ERROR;
817        END IF;
818     END IF;
819     -- This is to make database happy
820     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
821         l_current_login_id := -1;
822         l_current_user_id  := -1;
823         l_current_resource_id := -1;
824     END IF;
825     -- Now create SQL statement and find the results:
826     l_sql_statement :=
827         'Select ' ||
828           'r.source_id, ' ||
829           'r.resource_id, ' ||
830           'r.email user_name, ' ||
831           'r.resource_name, ' ||
832 	  'r.first_name, ' ||
833           'r.last_name ' ||
834           'From  amv_rs_all_res_extns_vl r ';
835     l_sql_statement2 :=
836       'Select count(*) ' ||fnd_global.local_chr(10)||
837          'From  amv_rs_all_res_extns_vl r ';
838     --l_where_clause := 'Where r.start_date_active < sysdate ' ||
839     --        'And nvl(r.end_date_active, sysdate+1) > sysdate ';
840     IF ( p_resource_id = FND_API.G_MISS_NUM ) THEN
841         l_where_clause :=
842         'Where ( upper(r.email) Like upper(''' || p_resource_name ||''') ' ||
843         'OR upper(r.resource_name) Like upper('''||p_resource_name||''') ' ||
844         'OR upper(r.first_name) Like upper(''' || p_resource_name || ''') ' ||
845         'OR upper(r.last_name) Like upper(''' || p_resource_name || ''') ) ';
846     ELSE
847         l_where_clause := 'Where resource_id = ' || p_resource_id || ' ';
848 
849     END IF;
850     l_sql_statement := l_sql_statement ||fnd_global.local_chr(10)||
851                        l_where_clause  ||fnd_global.local_chr(10)|| 'ORDER BY r.last_name, r.first_name ';
852 
853     l_sql_statement2 := l_sql_statement2 ||fnd_global.local_chr(10)||l_where_clause;
854     IF (G_DEBUG = TRUE) THEN
855          AMV_UTILITY_PVT.PRINT_DEBUG_MESSAGE(l_sql_statement);
856     END IF;
857     --Execute the SQL statements to get the total count:
858 --dbms_output.put_line('l_sql_statement2 : '||l_sql_statement2);
859     IF (p_subset_request_obj.return_total_count_flag = FND_API.G_TRUE) THEN
860         OPEN  l_cursor FOR l_sql_statement2;
861         FETCH l_cursor INTO l_total_record_count;
862         CLOSE l_cursor;
863     END IF;
864     --Execute the SQL statements to get records
865 
866     l_start_with := p_subset_request_obj.start_record_position;
867     x_resource_obj_array := AMV_RESOURCE_OBJ_VARRAY();
868     x_role_code_varray := AMV_CHAR_VARRAY_TYPE();
869 --dbms_output.put_line('l_sql_statement : '||l_sql_statement);
870 
871 
872     OPEN l_cursor FOR l_sql_statement;
873 --dbms_output.put_line('Opened cursor');
874     LOOP
875 --dbms_output.put_line('Fetch cursor');
876        FETCH l_cursor INTO
877            l_person_id,
878            l_resource_id,
879            l_user_name,
880 	   l_resource_name,
881            l_first_name,
882            l_last_name;
883        EXIT WHEN l_cursor%NOTFOUND;
884        IF (l_start_with <= l_total_count AND
885            l_fetch_count < p_subset_request_obj.records_requested) THEN
886 --dbms_output.put_line('Inside IF cursor');
887           l_fetch_count := l_fetch_count + 1;
888           x_resource_obj_array.extend;
889           x_resource_obj_array(l_fetch_count).resource_id := l_resource_id;
890           x_resource_obj_array(l_fetch_count).person_id := l_person_id;
891           x_resource_obj_array(l_fetch_count).user_name := l_user_name;
892 
893         /* Check for null first/last name. If null, use resource_name */
894         IF (l_first_name IS NULL OR l_last_name IS NULL) THEN
895           x_resource_obj_array(l_fetch_count).first_name := l_resource_name;
896           x_resource_obj_array(l_fetch_count).last_name := '';
897 	ELSE
898           x_resource_obj_array(l_fetch_count).first_name := l_first_name;
899           x_resource_obj_array(l_fetch_count).last_name := l_last_name;
900 	END IF;
901 
902           --Get the user roles:
903           x_role_code_varray.extend;
904 --dbms_output.put_line('Getting Role');
905           x_role_code_varray(l_fetch_count) := Get_Role(l_resource_id, G_RESOURCE_ROLE_CODE);
906 --dbms_output.put_line('x_role_code_varray(l_fetch_count)'||x_role_code_varray(l_fetch_count));
907        END IF;
908        IF (l_fetch_count >= p_subset_request_obj.records_requested) THEN
909           exit;
910        END IF;
911        l_total_count := l_total_count + 1;
912 --dbms_output.put_line('Fetching Again');
913     END LOOP;
914    CLOSE l_cursor;
915 --dbms_output.put_line('Closed cursor');
916    x_subset_return_obj.returned_record_count := l_fetch_count;
917    x_subset_return_obj.next_record_position := p_subset_request_obj.start_record_position + l_fetch_count;
918    x_subset_return_obj.total_record_count := l_total_record_count;
919 
920 /*
921    x_subset_return_obj := AMV_RETURN_OBJ_TYPE
922       (
923          l_fetch_count,
924          p_subset_request_obj.start_record_position + l_fetch_count,
925          l_total_record_count
926       );
927 */
928     --Standard call to get message count and if count=1, get the message
929     FND_MSG_PUB.Count_And_Get (
930        p_encoded => FND_API.G_FALSE,
931        p_count => x_msg_count,
932        p_data  => x_msg_data
933        );
934 --dbms_output.put_line('Exit : Find_Resource');
935 EXCEPTION
936    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
937        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
938        -- Standard call to get message count and if count=1, get the message
939        FND_MSG_PUB.Count_And_Get (
940           p_encoded => FND_API.G_FALSE,
941           p_count => x_msg_count,
942           p_data  => x_msg_data
943           );
944    WHEN FND_API.G_EXC_ERROR THEN
945        x_return_status := FND_API.G_RET_STS_ERROR;
946        -- Standard call to get message count and if count=1, get the message
947        FND_MSG_PUB.Count_And_Get (
948           p_encoded => FND_API.G_FALSE,
949           p_count => x_msg_count,
950           p_data  => x_msg_data
951           );
952    WHEN OTHERS THEN
953        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
954        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
955           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
956        END IF;
957        -- Standard call to get message count and if count=1, get the message
958        FND_MSG_PUB.Count_And_Get (
959           p_encoded => FND_API.G_FALSE,
960           p_count => x_msg_count,
961           p_data  => x_msg_data
962           );
963 END Find_Resource;
964 --------------------------------------------------------------------------------
965 -------------------------- RESOURCE and GROUP ROLE HELPER ----------------------
966 --------------------------------------------------------------------------------
967 PROCEDURE Add_AssignRoleHelper
968 (
969     p_api_version         IN  NUMBER,
970     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
971     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
972     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
973     x_return_status       OUT NOCOPY VARCHAR2,
974     x_msg_count           OUT NOCOPY NUMBER,
975     x_msg_data            OUT NOCOPY VARCHAR2,
976     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
977     p_resource_id         IN  NUMBER,
978     p_resource_type       IN  VARCHAR2,
979     p_role_id             IN  NUMBER   := FND_API.G_MISS_NUM,
980     p_role_code           IN  VARCHAR2 := FND_API.G_MISS_CHAR
981 )  AS
982 l_api_name             CONSTANT VARCHAR2(30) := 'Add_AssignRoleHelper';
983 l_api_version          CONSTANT NUMBER := 1.0;
984 l_current_user_id      NUMBER;
985 l_current_login_id     NUMBER;
986 l_current_resource_id  NUMBER;
987 l_current_user_status  VARCHAR2(30);
988 --
989 l_admin_flag           VARCHAR2(1);
990 l_role_id              NUMBER;
991 l_role_code            VARCHAR2(30);
992 l_temp                 NUMBER;
993 l_date                 DATE;
994 --
995 CURSOR  Check_ResourceRole_csr IS
996 Select role_relate_id
997 From  jtf_rs_role_relations_vl
998 Where role_id = l_role_id
999 And   role_resource_id = p_resource_id
1000 And   role_resource_type = p_resource_type
1001 ;
1002 --
1003 BEGIN
1004 
1005     -- Standard call to check for call compatibility.
1006     SAVEPOINT  Add_AssignRoleHelper_Pvt;
1007     IF NOT FND_API.Compatible_API_Call (
1008          l_api_version,
1009          p_api_version,
1010          l_api_name,
1011          G_PKG_NAME) THEN
1012         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1013     END IF;
1014     --Initialize message list if p_init_msg_list is TRUE.
1015     IF FND_API.To_Boolean (p_init_msg_list) THEN
1016        FND_MSG_PUB.initialize;
1017     END IF;
1018     -- Initialize API return status to success
1019     x_return_status := FND_API.G_RET_STS_SUCCESS;
1020     -- Get the current (login) user id.
1021     AMV_UTILITY_PVT.Get_UserInfo(
1022        x_user_id     => l_current_user_id,
1023        x_login_id    => l_current_login_id,
1024        x_resource_id => l_current_resource_id,
1025        x_user_status => l_current_user_status
1026        );
1027     IF (p_check_login_user = FND_API.G_TRUE) THEN
1028        -- Check if user is login and has the required privilege.
1029        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
1030           -- User is not login.
1031           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1032               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
1033               FND_MSG_PUB.Add;
1034           END IF;
1035           RAISE  FND_API.G_EXC_ERROR;
1036        END IF;
1037        AMV_USER_PVT.Is_Administrator
1038        (
1039            p_api_version         => 1.0,
1040            x_return_status       => x_return_status,
1041            x_msg_count           => x_msg_count,
1042            x_msg_data            => x_msg_data,
1043            p_check_login_user    => FND_API.G_FALSE,
1044            p_resource_id         => l_current_resource_id,
1045            x_result_flag         => l_admin_flag
1046        );
1047        IF (l_admin_flag <> FND_API.G_TRUE) THEN
1048           -- User is not an administrator.
1049           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1050               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
1051               FND_MSG_PUB.Add;
1052           END IF;
1053           RAISE  FND_API.G_EXC_ERROR;
1054        END IF;
1055     END IF;
1056     -- This is to make database happy
1057     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
1058         l_current_login_id := -1;
1059         l_current_user_id  := -1;
1060     END IF;
1061     --
1062     IF (p_role_id = FND_API.G_MISS_NUM) THEN
1063         l_role_id := get_roleid(p_role_code);
1064     ELSE
1065         l_role_id := p_role_id;
1066     END IF;
1067     OPEN  Check_ResourceRole_csr;
1068     FETCH Check_ResourceRole_csr INTO l_temp;
1069     IF (Check_ResourceRole_csr%NOTFOUND) THEN
1070         CLOSE Check_ResourceRole_csr;
1071         IF (p_role_id = FND_API.G_MISS_NUM) THEN
1072             l_role_id := null;
1073         ELSE
1074             l_role_id := p_role_id;
1075         END IF;
1076         IF (p_role_code = FND_API.G_MISS_CHAR) THEN
1077             l_role_code := null;
1078         ELSE
1079             l_role_code := p_role_code;
1080         END IF;
1081 
1082 
1083         jtf_rs_role_relate_pub.create_resource_role_relate
1084         (
1085             p_api_version        => p_api_version,
1086             p_commit             => p_commit,
1087             p_role_resource_type => p_resource_type,
1088             p_role_resource_id   => p_resource_id,
1089             p_role_id            => l_role_id,
1090             p_role_code          => l_role_code,
1091             p_start_date_active  => sysdate,
1092             p_end_date_active    => null,
1093             x_return_status      => x_return_status,
1094             x_msg_count          => x_msg_count,
1095             x_msg_data           => x_msg_data,
1096             x_role_relate_id     => l_temp
1097         );
1098 
1099 
1100     ELSE
1101         CLOSE Check_ResourceRole_csr;
1102     END IF;
1103     --Standard call to get message count and if count=1, get the message
1104     FND_MSG_PUB.Count_And_Get (
1105        p_encoded => FND_API.G_FALSE,
1106        p_count => x_msg_count,
1107        p_data  => x_msg_data
1108        );
1109 EXCEPTION
1110    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1111        ROLLBACK TO  Add_AssignRoleHelper_Pvt;
1112        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1113        -- Standard call to get message count and if count=1, get the message
1114        FND_MSG_PUB.Count_And_Get (
1115           p_encoded => FND_API.G_FALSE,
1116           p_count => x_msg_count,
1117           p_data  => x_msg_data
1118           );
1119    WHEN FND_API.G_EXC_ERROR THEN
1120        ROLLBACK TO  Add_AssignRoleHelper_Pvt;
1121        x_return_status := FND_API.G_RET_STS_ERROR;
1122        -- Standard call to get message count and if count=1, get the message
1123        FND_MSG_PUB.Count_And_Get (
1124           p_encoded => FND_API.G_FALSE,
1125           p_count => x_msg_count,
1126           p_data  => x_msg_data
1127           );
1128    WHEN OTHERS THEN
1129        ROLLBACK TO  Add_AssignRoleHelper_Pvt;
1130        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1131        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1132           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1133        END IF;
1134        -- Standard call to get message count and if count=1, get the message
1135        FND_MSG_PUB.Count_And_Get (
1136           p_encoded => FND_API.G_FALSE,
1137           p_count => x_msg_count,
1138           p_data  => x_msg_data
1139           );
1140 END Add_AssignRoleHelper;
1141 --------------------------------------------------------------------------------
1142 PROCEDURE Remove_RoleHelper
1143 (
1144     p_api_version         IN  NUMBER,
1145     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
1146     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
1147     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
1148     x_return_status       OUT NOCOPY VARCHAR2,
1149     x_msg_count           OUT NOCOPY NUMBER,
1150     x_msg_data            OUT NOCOPY VARCHAR2,
1151     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
1152     p_resource_id         IN  NUMBER,
1153     p_resource_type       IN  VARCHAR2,
1154     p_role_id             IN  NUMBER
1155 )  AS
1156 l_api_name             CONSTANT VARCHAR2(30) := 'Remove_RoleHelper';
1157 l_api_version          CONSTANT NUMBER := 1.0;
1158 l_current_user_id      NUMBER;
1159 l_current_login_id     NUMBER;
1160 l_current_resource_id  NUMBER;
1161 l_current_user_status  VARCHAR2(30);
1162 --
1163 l_admin_flag           VARCHAR2(1);
1164 l_role_relate_id       NUMBER;
1165 l_version              NUMBER;
1166 --
1167 CURSOR  Check_ResourceRole_csr IS
1168 Select
1169       role_relate_id,
1170       object_version_number
1171 From  jtf_rs_role_relations
1172 Where role_id = p_role_id
1173 And   role_resource_id = p_resource_id
1174 And   role_resource_type = p_resource_type
1175 And   delete_flag <> 'Y'
1176 --And   role_type_code = G_MES_ROLE_TYPE_NAME
1177 ;
1178 BEGIN
1179     -- Standard call to check for call compatibility.
1180     SAVEPOINT  Remove_RoleHelper_Pvt;
1181     IF NOT FND_API.Compatible_API_Call (
1182          l_api_version,
1183          p_api_version,
1184          l_api_name,
1185          G_PKG_NAME) THEN
1186         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1187     END IF;
1188     --Initialize message list if p_init_msg_list is TRUE.
1189     IF FND_API.To_Boolean (p_init_msg_list) THEN
1190        FND_MSG_PUB.initialize;
1191     END IF;
1192     -- Initialize API return status to success
1193     x_return_status := FND_API.G_RET_STS_SUCCESS;
1194     -- Get the current (login) user id.
1195     AMV_UTILITY_PVT.Get_UserInfo(
1196        x_user_id     => l_current_user_id,
1197        x_login_id    => l_current_login_id,
1198        x_resource_id => l_current_resource_id,
1199        x_user_status => l_current_user_status
1200        );
1201     IF (p_check_login_user = FND_API.G_TRUE) THEN
1202        -- Check if user is login and has the required privilege.
1203        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
1204           -- User is not login.
1205           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1206               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
1207               FND_MSG_PUB.Add;
1208           END IF;
1209           RAISE  FND_API.G_EXC_ERROR;
1210        END IF;
1211        AMV_USER_PVT.Is_Administrator
1212        (
1213            p_api_version         => 1.0,
1214            x_return_status       => x_return_status,
1215            x_msg_count           => x_msg_count,
1216            x_msg_data            => x_msg_data,
1217            p_check_login_user    => FND_API.G_FALSE,
1218            p_resource_id         => l_current_resource_id,
1219            x_result_flag         => l_admin_flag
1220        );
1221        IF (l_admin_flag <> FND_API.G_TRUE) THEN
1222           -- User is not an administrator.
1223           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1224               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
1225               FND_MSG_PUB.Add;
1226           END IF;
1227           RAISE  FND_API.G_EXC_ERROR;
1228        END IF;
1229     END IF;
1230     -- This is to make database happy
1231     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
1232         l_current_login_id := -1;
1233         l_current_user_id  := -1;
1234     END IF;
1235     OPEN   Check_ResourceRole_csr;
1236     FETCH  Check_ResourceRole_csr INTO l_role_relate_id, l_version;
1237     IF (Check_ResourceRole_csr%NOTFOUND) THEN
1238        CLOSE Check_ResourceRole_csr;
1239        IF (p_resource_type = G_RESOURCE_ROLE_CODE) THEN
1240            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1241                FND_MESSAGE.Set_name('AMV','AMV_RESOURCE_NOT_HAS_ROLE');
1242                FND_MESSAGE.Set_Token('P_RESOURCE_ID', TO_CHAR(p_resource_id) );
1243                FND_MESSAGE.Set_Token('P_ROLE_ID', TO_CHAR(p_role_id) );
1244                FND_MSG_PUB.Add;
1245            END IF;
1246            RAISE  FND_API.G_EXC_ERROR;
1247        ELSIF (p_resource_type = G_GROUP_ROLE_CODE) THEN
1248            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1249                FND_MESSAGE.Set_name('AMV','AMV_GROUP_NOT_HAS_ROLE');
1250                FND_MESSAGE.Set_Token('P_GROUP_ID', TO_CHAR(p_resource_id) );
1251                FND_MESSAGE.Set_Token('P_ROLE_ID', TO_CHAR(p_role_id) );
1252                FND_MSG_PUB.Add;
1253            END IF;
1254            RAISE  FND_API.G_EXC_ERROR;
1255        END IF;
1256     END IF;
1257     CLOSE Check_ResourceRole_csr;
1258     jtf_rs_role_relate_pub.delete_resource_role_relate
1259     (
1260          p_api_version        => p_api_version,
1261          p_commit             => p_commit,
1262          p_role_relate_id     => l_role_relate_id,
1263          p_object_version_num => l_version,
1264          x_return_status      => x_return_status,
1265          x_msg_count          => x_msg_count,
1266          x_msg_data           => x_msg_data
1267     );
1268     --Standard call to get message count and if count=1, get the message
1269     FND_MSG_PUB.Count_And_Get (
1270        p_encoded => FND_API.G_FALSE,
1271        p_count => x_msg_count,
1272        p_data  => x_msg_data
1273        );
1274 EXCEPTION
1275    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1276        ROLLBACK TO  Remove_RoleHelper_Pvt;
1277        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1278        -- Standard call to get message count and if count=1, get the message
1279        FND_MSG_PUB.Count_And_Get (
1280           p_encoded => FND_API.G_FALSE,
1281           p_count => x_msg_count,
1282           p_data  => x_msg_data
1283           );
1284    WHEN FND_API.G_EXC_ERROR THEN
1285        ROLLBACK TO  Remove_RoleHelper_Pvt;
1286        x_return_status := FND_API.G_RET_STS_ERROR;
1287        -- Standard call to get message count and if count=1, get the message
1288        FND_MSG_PUB.Count_And_Get (
1289           p_encoded => FND_API.G_FALSE,
1290           p_count => x_msg_count,
1291           p_data  => x_msg_data
1292           );
1293    WHEN OTHERS THEN
1294        ROLLBACK TO  Remove_RoleHelper_Pvt;
1295        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1296        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1297           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1298        END IF;
1299        -- Standard call to get message count and if count=1, get the message
1300        FND_MSG_PUB.Count_And_Get (
1301           p_encoded => FND_API.G_FALSE,
1302           p_count => x_msg_count,
1303           p_data  => x_msg_data
1304           );
1305 END Remove_RoleHelper;
1306 --------------------------------------------------------------------------------
1307 -------------------------- RESOURCE ROLE ------------------------------------
1308 --------------------------------------------------------------------------------
1309 PROCEDURE Add_ResourceRole
1310 (
1311     p_api_version         IN  NUMBER,
1312     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
1313     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
1314     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
1315     x_return_status       OUT NOCOPY VARCHAR2,
1316     x_msg_count           OUT NOCOPY NUMBER,
1317     x_msg_data            OUT NOCOPY VARCHAR2,
1318     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
1319     p_resource_id         IN  NUMBER,
1320     p_role_id             IN  NUMBER   := FND_API.G_MISS_NUM,
1321     p_role_code           IN  VARCHAR2 := FND_API.G_MISS_CHAR
1322 ) IS
1323 BEGIN
1324     Add_AssignRoleHelper
1325     (
1326         p_api_version       => p_api_version,
1327         p_init_msg_list     => p_init_msg_list,
1328         p_commit            => p_commit,
1329         p_validation_level  => p_validation_level,
1330         x_return_status     => x_return_status,
1331         x_msg_count         => x_msg_count,
1332         x_msg_data          => x_msg_data,
1333         p_check_login_user  => p_check_login_user,
1334         p_resource_id       => p_resource_id,
1335         p_resource_type     => G_RESOURCE_ROLE_CODE,
1336         p_role_id           => p_role_id,
1337         p_role_code         => p_role_code
1338     );
1339 END Add_ResourceRole;
1340 --------------------------------------------------------------------------------
1341 PROCEDURE Add_ResourceRole
1342 (
1343     p_api_version         IN  NUMBER,
1344     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
1345     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
1346     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
1347     x_return_status       OUT NOCOPY VARCHAR2,
1348     x_msg_count           OUT NOCOPY NUMBER,
1349     x_msg_data            OUT NOCOPY VARCHAR2,
1350     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
1351     p_resource_id         IN  NUMBER,
1352     p_role_id_varray      IN  AMV_NUMBER_VARRAY_TYPE
1353 )  AS
1354 l_api_name             CONSTANT VARCHAR2(30) := 'Add_ResourceRole';
1355 l_api_version          CONSTANT NUMBER := 1.0;
1356 l_current_user_id      NUMBER;
1357 l_current_login_id     NUMBER;
1358 l_current_resource_id  NUMBER;
1359 l_current_user_status  VARCHAR2(30);
1360 --
1361 l_return_status        VARCHAR2(1);
1362 l_admin_flag           VARCHAR2(1);
1363 l_count                NUMBER;
1364 --
1365 BEGIN
1366     -- Standard call to check for call compatibility.
1367     SAVEPOINT  Add_ResourceRole_Pvt;
1368     IF NOT FND_API.Compatible_API_Call (
1369          l_api_version,
1370          p_api_version,
1371          l_api_name,
1372          G_PKG_NAME) THEN
1373         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1374     END IF;
1375     --Initialize message list if p_init_msg_list is TRUE.
1376     IF FND_API.To_Boolean (p_init_msg_list) THEN
1377        FND_MSG_PUB.initialize;
1378     END IF;
1379     -- Initialize API return status to success
1380     x_return_status := FND_API.G_RET_STS_SUCCESS;
1381     -- Get the current (login) user id.
1382     AMV_UTILITY_PVT.Get_UserInfo(
1383        x_user_id     => l_current_user_id,
1384        x_login_id    => l_current_login_id,
1385        x_resource_id => l_current_resource_id,
1386        x_user_status => l_current_user_status
1387        );
1388     IF (p_check_login_user = FND_API.G_TRUE) THEN
1389        -- Check if user is login and has the required privilege.
1390        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
1391           -- User is not login.
1392           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1393               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
1394               FND_MSG_PUB.Add;
1395           END IF;
1396           RAISE  FND_API.G_EXC_ERROR;
1397        END IF;
1398        AMV_USER_PVT.Is_Administrator
1399        (
1400            p_api_version         => 1.0,
1401            x_return_status       => x_return_status,
1402            x_msg_count           => x_msg_count,
1403            x_msg_data            => x_msg_data,
1404            p_check_login_user    => FND_API.G_FALSE,
1405            p_resource_id         => l_current_resource_id,
1406            x_result_flag         => l_admin_flag
1407        );
1408        IF (l_admin_flag <> FND_API.G_TRUE) THEN
1409           -- User is not an administrator.
1410           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1411               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
1412               FND_MSG_PUB.Add;
1413           END IF;
1414           RAISE  FND_API.G_EXC_ERROR;
1415        END IF;
1416     END IF;
1417     -- This is to make database happy
1418     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
1419         l_current_login_id := -1;
1420         l_current_user_id  := -1;
1421     END IF;
1422     -- Check if the resource id is valid
1423     IF (AMV_UTILITY_PVT.IS_RESOURCEIDVALID(p_resource_id) <> TRUE) THEN
1424        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1425            FND_MESSAGE.Set_name('AMV','AMV_INVALID_RESOURCE_ID');
1426            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_resource_id, -1) ) );
1427            FND_MSG_PUB.Add;
1428        END IF;
1429        RAISE  FND_API.G_EXC_ERROR;
1430     END IF;
1431     IF (p_role_id_varray IS NULL) THEN
1432         l_count := 0;
1433     ELSE
1434        l_count := p_role_id_varray.count;
1435     END IF;
1436     FOR i IN 1..l_count LOOP
1437         Add_ResourceRole
1438         (
1439             p_api_version         => p_api_version,
1440             p_commit              => p_commit,
1441             p_validation_level    => p_validation_level,
1442             x_return_status       => l_return_status,
1443             x_msg_count           => x_msg_count,
1444             x_msg_data            => x_msg_data,
1445             p_check_login_user    => FND_API.G_FALSE,
1446             p_resource_id         => p_resource_id,
1447             p_role_id             => p_role_id_varray(i)
1448         );
1449         IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1450            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1451         ELSIF (l_return_status = FND_API.G_RET_STS_ERROR AND
1452                x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1453            x_return_status := FND_API.G_RET_STS_ERROR;
1454         END IF;
1455     END LOOP;
1456     --Standard call to get message count and if count=1, get the message
1457     FND_MSG_PUB.Count_And_Get (
1458        p_encoded => FND_API.G_FALSE,
1459        p_count => x_msg_count,
1460        p_data  => x_msg_data
1461        );
1462 EXCEPTION
1463    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1464        ROLLBACK TO  Add_ResourceRole_Pvt;
1465        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1466        -- Standard call to get message count and if count=1, get the message
1467        FND_MSG_PUB.Count_And_Get (
1468           p_encoded => FND_API.G_FALSE,
1469           p_count => x_msg_count,
1470           p_data  => x_msg_data
1471           );
1472    WHEN FND_API.G_EXC_ERROR THEN
1473        ROLLBACK TO  Add_ResourceRole_Pvt;
1474        x_return_status := FND_API.G_RET_STS_ERROR;
1475        -- Standard call to get message count and if count=1, get the message
1476        FND_MSG_PUB.Count_And_Get (
1477           p_encoded => FND_API.G_FALSE,
1478           p_count => x_msg_count,
1479           p_data  => x_msg_data
1480           );
1481    WHEN OTHERS THEN
1482        ROLLBACK TO  Add_ResourceRole_Pvt;
1483        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1484        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1485           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1486        END IF;
1487        -- Standard call to get message count and if count=1, get the message
1488        FND_MSG_PUB.Count_And_Get (
1489           p_encoded => FND_API.G_FALSE,
1490           p_count => x_msg_count,
1491           p_data  => x_msg_data
1492           );
1493 END Add_ResourceRole;
1494 --------------------------------------------------------------------------------
1495 PROCEDURE Remove_ResourceRole
1496 (
1497     p_api_version         IN  NUMBER,
1498     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
1499     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
1500     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
1501     x_return_status       OUT NOCOPY VARCHAR2,
1502     x_msg_count           OUT NOCOPY NUMBER,
1503     x_msg_data            OUT NOCOPY VARCHAR2,
1504     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
1505     p_resource_id         IN  NUMBER,
1506     p_role_id             IN  NUMBER   := FND_API.G_MISS_NUM,
1507     p_role_code           IN  VARCHAR2 := FND_API.G_MISS_CHAR
1508 )  AS
1509 l_role_id         number;
1510 BEGIN
1511     IF (p_role_id = FND_API.G_MISS_NUM) THEN
1512         l_role_id := Get_RoleId(p_role_code);
1513     ELSE
1514         l_role_id := p_role_id;
1515     END IF;
1516     Remove_RoleHelper
1517     (
1518         p_api_version         => p_api_version,
1519         p_init_msg_list       => p_init_msg_list,
1520         p_commit              => p_commit,
1521         p_validation_level    => p_validation_level,
1522         x_return_status       => x_return_status,
1523         x_msg_count           => x_msg_count,
1524         x_msg_data            => x_msg_data,
1525         p_check_login_user    => p_check_login_user,
1526         p_resource_id         => p_resource_id,
1527         p_resource_type       => G_RESOURCE_ROLE_CODE,
1528         p_role_id             => l_role_id
1529     );
1530 END Remove_ResourceRole;
1531 --------------------------------------------------------------------------------
1532 PROCEDURE Remove_ResourceRole
1533 (
1534     p_api_version         IN  NUMBER,
1535     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
1536     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
1537     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
1538     x_return_status       OUT NOCOPY VARCHAR2,
1539     x_msg_count           OUT NOCOPY NUMBER,
1540     x_msg_data            OUT NOCOPY VARCHAR2,
1541     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
1542     p_resource_id         IN  NUMBER,
1543     p_role_id_varray      IN  AMV_NUMBER_VARRAY_TYPE := NULL
1544 )  AS
1545 l_api_name             CONSTANT VARCHAR2(30) := 'Remove_ResourceRole';
1546 l_api_version          CONSTANT NUMBER := 1.0;
1547 l_current_user_id      NUMBER;
1548 l_current_login_id     NUMBER;
1549 l_current_resource_id  NUMBER;
1550 l_current_user_status  VARCHAR2(30);
1551 --
1552 l_admin_flag           VARCHAR2(1);
1553 l_count                NUMBER;
1554 l_return_status        VARCHAR2(1);
1555 l_role_id_varray       AMV_NUMBER_VARRAY_TYPE;
1556 l_role_code_varray     AMV_CHAR_VARRAY_TYPE;
1557 --
1558 BEGIN
1559     -- Standard call to check for call compatibility.
1560     SAVEPOINT  Remove_ResourceRole_Pvt;
1561     IF NOT FND_API.Compatible_API_Call (
1562          l_api_version,
1563          p_api_version,
1564          l_api_name,
1565          G_PKG_NAME) THEN
1566         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1567     END IF;
1568     --Initialize message list if p_init_msg_list is TRUE.
1569     IF FND_API.To_Boolean (p_init_msg_list) THEN
1570        FND_MSG_PUB.initialize;
1571     END IF;
1572     -- Initialize API return status to success
1573     x_return_status := FND_API.G_RET_STS_SUCCESS;
1574     -- Get the current (login) user id.
1575     AMV_UTILITY_PVT.Get_UserInfo(
1576        x_user_id     => l_current_user_id,
1577        x_login_id    => l_current_login_id,
1578        x_resource_id => l_current_resource_id,
1579        x_user_status => l_current_user_status
1580        );
1581     IF (p_check_login_user = FND_API.G_TRUE) THEN
1582        -- Check if user is login and has the required privilege.
1583        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
1584           -- User is not login.
1585           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1586               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
1587               FND_MSG_PUB.Add;
1588           END IF;
1589           RAISE  FND_API.G_EXC_ERROR;
1590        END IF;
1591        AMV_USER_PVT.Is_Administrator
1592        (
1593            p_api_version         => 1.0,
1594            x_return_status       => x_return_status,
1595            x_msg_count           => x_msg_count,
1596            x_msg_data            => x_msg_data,
1597            p_check_login_user    => FND_API.G_FALSE,
1598            p_resource_id         => l_current_resource_id,
1599            x_result_flag         => l_admin_flag
1600        );
1601        IF (l_admin_flag <> FND_API.G_TRUE) THEN
1602           -- User is not an administrator.
1603           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1604               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
1605               FND_MSG_PUB.Add;
1606           END IF;
1607           RAISE  FND_API.G_EXC_ERROR;
1608        END IF;
1609     END IF;
1610     -- This is to make database happy
1611     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
1612         l_current_login_id := -1;
1613         l_current_user_id  := -1;
1614     END IF;
1615     -- Check if the resource id is valid
1616     IF (AMV_UTILITY_PVT.IS_RESOURCEIDVALID(p_resource_id) <> TRUE) THEN
1617        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1618            FND_MESSAGE.Set_name('AMV','AMV_INVALID_RESOURCE_ID');
1619            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_resource_id, -1) ) );
1620            FND_MSG_PUB.Add;
1621        END IF;
1622        RAISE  FND_API.G_EXC_ERROR;
1623     END IF;
1624     IF (p_role_id_varray IS NULL OR p_role_id_varray.count = 0) THEN
1625        Get_ResourceRoles
1626        (
1627            p_api_version          => p_api_version,
1628            x_return_status        => l_return_status,
1629            x_msg_count            => x_msg_count,
1630            x_msg_data             => x_msg_data,
1631            p_check_login_user     => FND_API.G_FALSE,
1632            p_resource_id          => p_resource_id,
1633            x_role_id_varray       => l_role_id_varray,
1634            x_role_code_varray     => l_role_code_varray
1635        );
1636        IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1637           l_count := l_role_id_varray.count;
1638        ELSE
1639           l_count := 0;
1640           x_return_status := l_return_status;
1641        END IF;
1642     ELSE
1643        l_count := p_role_id_varray.count;
1644        l_role_id_varray := p_role_id_varray;
1645     END IF;
1646 
1647     FOR i IN 1..l_count LOOP
1648         Remove_ResourceRole
1649         (
1650            p_api_version        => p_api_version,
1651            p_commit             => p_commit,
1652            p_validation_level   => p_validation_level,
1653            x_return_status      => l_return_status,
1654            x_msg_count          => x_msg_count,
1655            x_msg_data           => x_msg_data,
1656            p_check_login_user   => FND_API.G_FALSE,
1657            p_resource_id        => p_resource_id,
1658            p_role_id            => l_role_id_varray(i),
1659            p_role_code          => null
1660        );
1661        IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1662           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1663        ELSIF (l_return_status = FND_API.G_RET_STS_ERROR AND
1664               x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1665           x_return_status := FND_API.G_RET_STS_ERROR;
1666        END IF;
1667     END LOOP;
1668     --Standard call to get message count and if count=1, get the message
1669     FND_MSG_PUB.Count_And_Get (
1670        p_encoded => FND_API.G_FALSE,
1671        p_count => x_msg_count,
1672        p_data  => x_msg_data
1673        );
1674 EXCEPTION
1675    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1676        ROLLBACK TO  Remove_ResourceRole_Pvt;
1677        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1678        -- Standard call to get message count and if count=1, get the message
1679        FND_MSG_PUB.Count_And_Get (
1680           p_encoded => FND_API.G_FALSE,
1681           p_count => x_msg_count,
1682           p_data  => x_msg_data
1683           );
1684    WHEN FND_API.G_EXC_ERROR THEN
1685        ROLLBACK TO  Remove_ResourceRole_Pvt;
1686        x_return_status := FND_API.G_RET_STS_ERROR;
1687        -- Standard call to get message count and if count=1, get the message
1688        FND_MSG_PUB.Count_And_Get (
1689           p_encoded => FND_API.G_FALSE,
1690           p_count => x_msg_count,
1691           p_data  => x_msg_data
1692           );
1693    WHEN OTHERS THEN
1694        ROLLBACK TO  Remove_ResourceRole_Pvt;
1695        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1696        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1697           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1698        END IF;
1699        -- Standard call to get message count and if count=1, get the message
1700        FND_MSG_PUB.Count_And_Get (
1701           p_encoded => FND_API.G_FALSE,
1702           p_count => x_msg_count,
1703           p_data  => x_msg_data
1704           );
1705 END Remove_ResourceRole;
1706 --------------------------------------------------------------------------------
1707 PROCEDURE Replace_ResourceRole
1708 (
1709     p_api_version         IN  NUMBER,
1710     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
1711     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
1712     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
1713     x_return_status       OUT NOCOPY VARCHAR2,
1714     x_msg_count           OUT NOCOPY NUMBER,
1715     x_msg_data            OUT NOCOPY VARCHAR2,
1716     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
1717     p_resource_id         IN  NUMBER,
1718     p_role_code           IN  VARCHAR2
1719 ) AS
1720 l_role_id_array          AMV_NUMBER_VARRAY_TYPE;
1721 BEGIN
1722    Get_RoleIDArray (p_role_code, l_role_id_array);
1723    Replace_ResourceRole
1724    (
1725     p_api_version       => p_api_version,
1726     p_init_msg_list     => p_init_msg_list,
1727     p_commit            => p_commit,
1728     p_validation_level  => p_validation_level,
1729     x_return_status     => x_return_status,
1730     x_msg_count         => x_msg_count,
1731     x_msg_data          => x_msg_data,
1732     p_check_login_user  => p_check_login_user,
1733     p_resource_id       => p_resource_id,
1734     p_role_id_varray    => l_role_id_array
1735     );
1736 END Replace_ResourceRole;
1737 --------------------------------------------------------------------------------
1738 PROCEDURE Replace_ResourceRole
1739 (
1740     p_api_version         IN  NUMBER,
1741     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
1742     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
1743     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
1744     x_return_status       OUT NOCOPY VARCHAR2,
1745     x_msg_count           OUT NOCOPY NUMBER,
1746     x_msg_data            OUT NOCOPY VARCHAR2,
1747     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
1748     p_resource_id         IN  NUMBER,
1749     p_role_id_varray      IN  AMV_NUMBER_VARRAY_TYPE
1750 )  AS
1751 l_api_name             CONSTANT VARCHAR2(30) := 'Replace_ResourceRole';
1752 l_api_version          CONSTANT NUMBER := 1.0;
1753 l_current_user_id      NUMBER;
1754 l_current_login_id     NUMBER;
1755 l_current_resource_id  NUMBER;
1756 l_current_user_status  VARCHAR2(30);
1757 --
1758 l_count                NUMBER;
1759 l_temp                 NUMBER;
1760 l_return_status        VARCHAR2(1);
1761 l_date                 DATE;
1762 --
1763 BEGIN
1764     -- Standard call to check for call compatibility.
1765     SAVEPOINT  Replace_ResourceRole_Pvt;
1766     x_return_status := FND_API.G_RET_STS_SUCCESS;
1767     --Remove the existing roles
1768     Remove_ResourceRole
1769     (
1770         p_api_version      => p_api_version,
1771         p_init_msg_list    => p_init_msg_list,
1772 	--commit parameter was not passed before,refer bug#270945,2727331
1773 	p_commit           => p_commit,
1774         p_validation_level => p_validation_level,
1775         x_return_status    => l_return_status,
1776         x_msg_count        => x_msg_count,
1777         x_msg_data         => x_msg_data,
1778         p_check_login_user => p_check_login_user,
1779         p_resource_id      => p_resource_id,
1780         p_role_id_varray   => null
1781     );
1782     IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1783        RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1784     ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
1785        RAISE  FND_API.G_EXC_ERROR;
1786     END IF;
1787     -- Add new roles:
1788     Add_ResourceRole
1789     (
1790         p_api_version      => p_api_version,
1791         p_commit           => p_commit,
1792         p_validation_level => p_validation_level,
1793         x_return_status    => l_return_status,
1794         x_msg_count        => x_msg_count,
1795         x_msg_data         => x_msg_data,
1796         p_check_login_user => FND_API.G_FALSE,
1797         p_resource_id      => p_resource_id,
1798         p_role_id_varray   => p_role_id_varray
1799     );
1800     IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1801        RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1802     ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
1803        RAISE  FND_API.G_EXC_ERROR;
1804     END IF;
1805     --Standard call to get message count and if count=1, get the message
1806     FND_MSG_PUB.Count_And_Get (
1807        p_encoded => FND_API.G_FALSE,
1808        p_count => x_msg_count,
1809        p_data  => x_msg_data
1810        );
1811 EXCEPTION
1812    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1813        ROLLBACK TO  Replace_ResourceRole_Pvt;
1814        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1815        -- Standard call to get message count and if count=1, get the message
1816        FND_MSG_PUB.Count_And_Get (
1817           p_encoded => FND_API.G_FALSE,
1818           p_count => x_msg_count,
1819           p_data  => x_msg_data
1820           );
1821    WHEN FND_API.G_EXC_ERROR THEN
1822        ROLLBACK TO  Replace_ResourceRole_Pvt;
1823        x_return_status := FND_API.G_RET_STS_ERROR;
1824        -- Standard call to get message count and if count=1, get the message
1825        FND_MSG_PUB.Count_And_Get (
1826           p_encoded => FND_API.G_FALSE,
1827           p_count => x_msg_count,
1828           p_data  => x_msg_data
1829           );
1830    WHEN OTHERS THEN
1831        ROLLBACK TO  Replace_ResourceRole_Pvt;
1832        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1833        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1834           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1835        END IF;
1836        -- Standard call to get message count and if count=1, get the message
1837        FND_MSG_PUB.Count_And_Get (
1838           p_encoded => FND_API.G_FALSE,
1839           p_count => x_msg_count,
1840           p_data  => x_msg_data
1841           );
1842 END Replace_ResourceRole;
1843 --------------------------------------------------------------------------------
1844 PROCEDURE Get_ResourceRoles
1845 (
1846     p_api_version          IN  NUMBER,
1847     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
1848     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
1849     x_return_status        OUT NOCOPY VARCHAR2,
1850     x_msg_count            OUT NOCOPY NUMBER,
1851     x_msg_data             OUT NOCOPY VARCHAR2,
1852     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
1853     p_resource_id          IN  NUMBER   := FND_API.G_MISS_NUM,
1854     x_role_id_varray       OUT NOCOPY AMV_NUMBER_VARRAY_TYPE,
1855     x_role_code_varray     OUT NOCOPY AMV_CHAR_VARRAY_TYPE
1856 )  AS
1857 l_api_name             CONSTANT VARCHAR2(30) := 'Get_ResourceRoles';
1858 l_api_version          CONSTANT NUMBER := 1.0;
1859 l_current_user_id      NUMBER;
1860 l_current_login_id     NUMBER;
1861 l_current_resource_id  NUMBER;
1862 l_current_user_status  VARCHAR2(30);
1863 --
1864 l_count                NUMBER := 0;
1865 --
1866 CURSOR Get_ResourceRole_csr IS
1867 Select
1868      rol.role_code,
1869      rol.role_id
1870 From  jtf_rs_role_relations_vl rel, jtf_rs_roles_vl rol
1871 Where rel.role_resource_id = p_resource_id
1872 And   rel.role_resource_type = G_RESOURCE_ROLE_CODE
1873 And   rel.role_id = rol.role_id
1874 And   rol.role_type_code = G_MES_ROLE_TYPE_NAME
1875 Order by rol.role_code;
1876 --
1877 BEGIN
1878     -- Standard call to check for call compatibility.
1879     IF NOT FND_API.Compatible_API_Call (
1880          l_api_version,
1881          p_api_version,
1882          l_api_name,
1883          G_PKG_NAME) THEN
1884         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1885     END IF;
1886     --Initialize message list if p_init_msg_list is TRUE.
1887     IF FND_API.To_Boolean (p_init_msg_list) THEN
1888        FND_MSG_PUB.initialize;
1889     END IF;
1890     -- Initialize API return status to success
1891     x_return_status := FND_API.G_RET_STS_SUCCESS;
1892     x_role_id_varray   := AMV_NUMBER_VARRAY_TYPE();
1893     x_role_code_varray := AMV_CHAR_VARRAY_TYPE();
1894     -- Get the current (login) user id.
1895     AMV_UTILITY_PVT.Get_UserInfo(
1896        x_user_id     => l_current_user_id,
1897        x_login_id    => l_current_login_id,
1898        x_resource_id => l_current_resource_id,
1899        x_user_status => l_current_user_status
1900        );
1901     IF (p_check_login_user = FND_API.G_TRUE) THEN
1902        -- Check if user is login and has the required privilege.
1903        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
1904           -- User is not login.
1905           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1906               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
1907               FND_MSG_PUB.Add;
1908           END IF;
1909           RAISE  FND_API.G_EXC_ERROR;
1910        END IF;
1911     END IF;
1912     -- This is to make database happy
1913     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
1914         l_current_login_id := -1;
1915         l_current_user_id  := -1;
1916     END IF;
1917     -- Check if the resource id is valid
1918     IF (AMV_UTILITY_PVT.IS_RESOURCEIDVALID(p_resource_id) <> TRUE) THEN
1919        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1920            FND_MESSAGE.Set_name('AMV','AMV_INVALID_RESOURCE_ID');
1921            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_resource_id, -1) ) );
1922            FND_MSG_PUB.Add;
1923        END IF;
1924        RAISE  FND_API.G_EXC_ERROR;
1925     END IF;
1926     FOR csr1 IN  Get_ResourceRole_csr LOOP
1927        l_count := l_count + 1;
1928        x_role_id_varray.extend;
1929        x_role_code_varray.extend;
1930        x_role_id_varray(l_count) := csr1.role_id;
1931        x_role_code_varray(l_count) := csr1.role_code;
1932     END LOOP;
1933     --Standard call to get message count and if count=1, get the message
1934     FND_MSG_PUB.Count_And_Get (
1935        p_encoded => FND_API.G_FALSE,
1936        p_count => x_msg_count,
1937        p_data  => x_msg_data
1938        );
1939 EXCEPTION
1940    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1941        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1942        -- Standard call to get message count and if count=1, get the message
1943        FND_MSG_PUB.Count_And_Get (
1944           p_encoded => FND_API.G_FALSE,
1945           p_count => x_msg_count,
1946           p_data  => x_msg_data
1947           );
1948    WHEN FND_API.G_EXC_ERROR THEN
1949        x_return_status := FND_API.G_RET_STS_ERROR;
1950        -- Standard call to get message count and if count=1, get the message
1951        FND_MSG_PUB.Count_And_Get (
1952           p_encoded => FND_API.G_FALSE,
1953           p_count => x_msg_count,
1954           p_data  => x_msg_data
1955           );
1956    WHEN OTHERS THEN
1957        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1958        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1959           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1960        END IF;
1961        -- Standard call to get message count and if count=1, get the message
1962        FND_MSG_PUB.Count_And_Get (
1963           p_encoded => FND_API.G_FALSE,
1964           p_count => x_msg_count,
1965           p_data  => x_msg_data
1966           );
1967 END Get_ResourceRoles;
1968 --------------------------------------------------------------------------------
1969 PROCEDURE Check_ResourceRole
1970 (
1971     p_api_version          IN  NUMBER,
1972     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
1973     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
1974     x_return_status        OUT NOCOPY VARCHAR2,
1975     x_msg_count            OUT NOCOPY NUMBER,
1976     x_msg_data             OUT NOCOPY VARCHAR2,
1977     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
1978     p_resource_id          IN  NUMBER   := FND_API.G_MISS_NUM,
1979     p_role_id              IN  NUMBER,
1980     p_group_usage          IN VARCHAR2 := G_MES_GROUP_USAGE,
1981     p_include_group_flag   IN  VARCHAR2 := FND_API.G_TRUE,
1982     p_check_effective_date IN  VARCHAR2 := FND_API.G_TRUE,
1983     x_result_flag          OUT NOCOPY VARCHAR2
1984 )  AS
1985 l_api_name             CONSTANT VARCHAR2(30) := 'Check_ResourceRole';
1986 l_api_version          CONSTANT NUMBER := 1.0;
1987 l_current_user_id      NUMBER;
1988 l_current_login_id     NUMBER;
1989 l_current_resource_id  NUMBER;
1990 l_current_user_status  VARCHAR2(30);
1991 --
1992 l_resource_id          NUMBER;
1993 l_temp                 NUMBER;
1994 --
1995 CURSOR Get_ResourceRole_csr(p_res_id IN NUMBER) IS
1996 Select
1997      role_relate_id
1998 From  jtf_rs_role_relations_vl
1999 Where role_id = p_role_id
2000 And   role_resource_id = p_res_id
2001 And   role_resource_type = G_RESOURCE_ROLE_CODE
2002 ;
2003 --
2004 CURSOR Get_ResourceRole2_csr(p_res_id IN NUMBER) IS
2005 Select rel.role_relate_id
2006 From  jtf_rs_role_relations_vl rel
2007 ,     jtf_rs_resource_extns res
2008 Where rel.role_id = p_role_id
2009 And   rel.role_resource_id = p_res_id
2010 And   rel.role_resource_type = G_RESOURCE_ROLE_CODE
2011 And   res.resource_id = rel.role_resource_id
2012 And   rel.start_date_active < sysdate
2013 And   nvl(rel.end_date_active, sysdate+1) > sysdate
2014 And   res.start_date_active < sysdate
2015 And   nvl(res.end_date_active, sysdate+1) > sysdate
2016 ;
2017 --
2018 CURSOR Get_GroupRole_csr(p_res_id IN NUMBER) IS
2019 Select
2020      1
2021 From  dual
2022 Where exists
2023    (
2024      select r.role_id
2025      from jtf_rs_group_members m, jtf_rs_role_relations_vl r,
2026           jtf_rs_group_usages usg
2027      where m.resource_id = p_res_id
2028      and   m.delete_flag <> 'Y'
2029      and   m.group_id = r.role_resource_id
2030      and   r.role_resource_type = G_GROUP_ROLE_CODE
2031      and   r.role_id = p_role_id
2032      and   m.group_id = usg.group_id
2033      and   usg.usage = p_group_usage
2034    );
2035 --
2036 CURSOR Get_GroupRole2_csr(p_res_id IN NUMBER) IS
2037 Select
2038      1
2039 From  dual
2040 Where exists
2041    (
2042      select r.role_id
2043      from  jtf_rs_group_members m, jtf_rs_role_relations_vl r,
2044            jtf_rs_groups_vl g, jtf_rs_group_usages usg
2045      where m.resource_id = p_res_id
2046      and   m.delete_flag <> 'Y'
2047      and   m.group_id = r.role_resource_id
2048      and   r.role_id = p_role_id
2049      and   r.role_resource_type = G_GROUP_ROLE_CODE
2050      --and   r.role_type_code = G_MES_ROLE_TYPE_NAME
2051      and   r.start_date_active < sysdate
2052      and   nvl(r.end_date_active, sysdate+1) > sysdate
2053      and   g.group_id = m.group_id
2054      and   g.start_date_active < sysdate
2055      and   nvl(g.end_date_active, sysdate+1) > sysdate
2056      and   usg.group_id = g.group_id
2057      and   usg.usage = p_group_usage
2058    )
2059 ;
2060 --
2061 BEGIN
2062     -- Standard call to check for call compatibility.
2063     IF NOT FND_API.Compatible_API_Call (
2064          l_api_version,
2065          p_api_version,
2066          l_api_name,
2067          G_PKG_NAME) THEN
2068         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
2069     END IF;
2070     --Initialize message list if p_init_msg_list is TRUE.
2071     IF FND_API.To_Boolean (p_init_msg_list) THEN
2072        FND_MSG_PUB.initialize;
2073     END IF;
2074     -- Initialize API return status to success
2075     x_return_status := FND_API.G_RET_STS_SUCCESS;
2076     x_result_flag := FND_API.G_FALSE;
2077     -- Get the current (login) user id.
2078     AMV_UTILITY_PVT.Get_UserInfo(
2079        x_user_id     => l_current_user_id,
2080        x_login_id    => l_current_login_id,
2081        x_resource_id => l_current_resource_id,
2082        x_user_status => l_current_user_status
2083        );
2084     IF (p_check_login_user = FND_API.G_TRUE) THEN
2085        -- Check if user is login and has the required privilege.
2086        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
2087           -- User is not login.
2088           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2089               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
2090               FND_MSG_PUB.Add;
2091           END IF;
2092           RAISE  FND_API.G_EXC_ERROR;
2093        END IF;
2094     END IF;
2095     -- This is to make database happy
2096     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
2097         l_current_login_id := -1;
2098         l_current_user_id  := -1;
2099     END IF;
2100     --
2101     IF (p_resource_id IS NULL OR p_resource_id = FND_API.G_MISS_NUM) THEN
2102         l_resource_id := l_current_resource_id;
2103     ELSE
2104         l_resource_id := p_resource_id;
2105         -- Check if the resource id is valid
2106         IF (AMV_UTILITY_PVT.IS_RESOURCEIDVALID(p_resource_id) <> TRUE) THEN
2107            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2108                FND_MESSAGE.Set_name('AMV','AMV_INVALID_RESOURCE_ID');
2109                FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_resource_id, -1) ) );
2110                FND_MSG_PUB.Add;
2111            END IF;
2112            RAISE  FND_API.G_EXC_ERROR;
2113         END IF;
2114     END IF;
2115     IF (p_check_effective_date = FND_API.G_TRUE) THEN
2116         OPEN  Get_ResourceRole2_csr(l_resource_id);
2117         FETCH Get_ResourceRole2_csr INTO l_temp;
2118         IF (Get_ResourceRole2_csr%FOUND) THEN
2119            x_result_flag := FND_API.G_TRUE;
2120         ELSE
2121            x_result_flag := FND_API.G_FALSE;
2122         END IF;
2123         CLOSE Get_ResourceRole2_csr;
2124     ELSE
2125         OPEN  Get_ResourceRole_csr(l_resource_id);
2126         FETCH Get_ResourceRole_csr INTO l_temp;
2127         IF (Get_ResourceRole_csr%FOUND) THEN
2128            x_result_flag := FND_API.G_TRUE;
2129         ELSE
2130            x_result_flag := FND_API.G_FALSE;
2131         END IF;
2132         CLOSE Get_ResourceRole_csr;
2133     END IF;
2134 
2135     IF ( x_result_flag = FND_API.G_FALSE AND
2136         p_include_group_flag = FND_API.G_TRUE ) THEN
2137         IF (p_check_effective_date = FND_API.G_TRUE) THEN
2138             OPEN  Get_GroupRole2_csr(l_resource_id);
2139             FETCH Get_GroupRole2_csr INTO l_temp;
2140             IF (Get_GroupRole2_csr%FOUND) THEN
2141                 x_result_flag := FND_API.G_TRUE;
2142             END IF;
2143             CLOSE Get_GroupRole2_csr;
2144         ELSE
2145             OPEN  Get_GroupRole_csr(l_resource_id);
2146             FETCH Get_GroupRole_csr INTO l_temp;
2147             IF (Get_GroupRole_csr%FOUND) THEN
2148                 x_result_flag := FND_API.G_TRUE;
2149             END IF;
2150             CLOSE Get_GroupRole_csr;
2151         END IF;
2152     END IF;
2153     --Standard call to get message count and if count=1, get the message
2154     FND_MSG_PUB.Count_And_Get (
2155        p_encoded => FND_API.G_FALSE,
2156        p_count => x_msg_count,
2157        p_data  => x_msg_data
2158        );
2159 EXCEPTION
2160    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2161        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2162        -- Standard call to get message count and if count=1, get the message
2163        FND_MSG_PUB.Count_And_Get (
2164           p_encoded => FND_API.G_FALSE,
2165           p_count => x_msg_count,
2166           p_data  => x_msg_data
2167           );
2168    WHEN FND_API.G_EXC_ERROR THEN
2169        x_return_status := FND_API.G_RET_STS_ERROR;
2170        -- Standard call to get message count and if count=1, get the message
2171        FND_MSG_PUB.Count_And_Get (
2172           p_encoded => FND_API.G_FALSE,
2173           p_count => x_msg_count,
2174           p_data  => x_msg_data
2175           );
2176    WHEN OTHERS THEN
2177        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2178        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2179           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2180        END IF;
2181        -- Standard call to get message count and if count=1, get the message
2182        FND_MSG_PUB.Count_And_Get (
2183           p_encoded => FND_API.G_FALSE,
2184           p_count => x_msg_count,
2185           p_data  => x_msg_data
2186           );
2187 END Check_ResourceRole;
2188 --------------------------------------------------------------------------------
2189 PROCEDURE Is_Administrator
2190 (
2191     p_api_version         IN  NUMBER,
2192     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2193     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2194     x_return_status       OUT NOCOPY VARCHAR2,
2195     x_msg_count           OUT NOCOPY NUMBER,
2196     x_msg_data            OUT NOCOPY VARCHAR2,
2197     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2198     p_resource_id         IN  NUMBER   := FND_API.G_MISS_NUM,
2199     p_include_group_flag  IN  VARCHAR2 := FND_API.G_TRUE,
2200     x_result_flag         OUT NOCOPY VARCHAR2
2201 )  AS
2202 l_role_id    number;
2203 BEGIN
2204   l_role_id := Get_RoleId(G_ADMINISTRTOR_CODE);
2205   Check_ResourceRole
2206   (
2207     p_api_version => p_api_version,
2208     p_init_msg_list => p_init_msg_list,
2209     p_validation_level => p_validation_level,
2210     x_return_status => x_return_status,
2211     x_msg_count => x_msg_count,
2212     x_msg_data => x_msg_data,
2213     p_check_login_user => p_check_login_user,
2214     p_resource_id => p_resource_id,
2215     p_role_id => l_role_id,
2216     p_include_group_flag => p_include_group_flag,
2217     p_check_effective_date => FND_API.G_TRUE,
2218     x_result_flag => x_result_flag
2219   );
2220 END  Is_Administrator;
2221 --------------------------------------------------------------------------------
2222 PROCEDURE Can_PublishContent
2223 (
2224     p_api_version         IN  NUMBER,
2225     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2226     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2227     x_return_status       OUT NOCOPY VARCHAR2,
2228     x_msg_count           OUT NOCOPY NUMBER,
2229     x_msg_data            OUT NOCOPY VARCHAR2,
2230     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2231     p_resource_id         IN  NUMBER   := FND_API.G_MISS_NUM,
2232     p_include_group_flag  IN  VARCHAR2 := FND_API.G_TRUE,
2233     x_result_flag         OUT NOCOPY VARCHAR2
2234 )  AS
2235 l_role_id    number;
2236 BEGIN
2237   Is_Administrator
2238   (
2239     p_api_version,
2240     p_init_msg_list,
2241     p_validation_level,
2242     x_return_status,
2243     x_msg_count,
2244     x_msg_data,
2245     p_check_login_user,
2246     p_resource_id,
2247     p_include_group_flag,
2248     x_result_flag
2249   );
2250   IF (x_result_flag <> FND_API.G_TRUE) THEN
2251      l_role_id := Get_RoleId(G_CAN_PUBLISH_CODE);
2252      Check_ResourceRole
2253      (
2254        p_api_version => p_api_version,
2255        p_init_msg_list => p_init_msg_list,
2256        p_validation_level => p_validation_level,
2257        x_return_status => x_return_status,
2258        x_msg_count => x_msg_count,
2259        x_msg_data => x_msg_data,
2260        p_check_login_user => p_check_login_user,
2261        p_resource_id => p_resource_id,
2262        p_role_id => l_role_id,
2263        p_include_group_flag => p_include_group_flag,
2264        p_check_effective_date => FND_API.G_TRUE,
2265        x_result_flag => x_result_flag
2266      );
2267   END IF;
2268 END  Can_PublishContent;
2269 --------------------------------------------------------------------------------
2270 PROCEDURE Can_ApproveContent
2271 (
2272     p_api_version         IN  NUMBER,
2273     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2274     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2275     x_return_status       OUT NOCOPY VARCHAR2,
2276     x_msg_count           OUT NOCOPY NUMBER,
2277     x_msg_data            OUT NOCOPY VARCHAR2,
2278     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2279     p_resource_id         IN  NUMBER   := FND_API.G_MISS_NUM,
2280     p_include_group_flag  IN  VARCHAR2 := FND_API.G_TRUE,
2281     x_result_flag         OUT NOCOPY VARCHAR2
2282 )  AS
2283 l_role_id    number;
2284 BEGIN
2285   Is_Administrator
2286   (
2287     p_api_version,
2288     p_init_msg_list,
2289     p_validation_level,
2290     x_return_status,
2291     x_msg_count,
2292     x_msg_data,
2293     p_check_login_user,
2294     p_resource_id,
2295     p_include_group_flag,
2296     x_result_flag
2297   );
2298   IF (x_result_flag <> FND_API.G_TRUE) THEN
2299      l_role_id := Get_RoleId(G_CAN_APPROVE_CODE);
2300      Check_ResourceRole
2301      (
2302        p_api_version => p_api_version,
2303        p_init_msg_list => p_init_msg_list,
2304        p_validation_level => p_validation_level,
2305        x_return_status => x_return_status,
2306        x_msg_count => x_msg_count,
2307        x_msg_data => x_msg_data,
2308        p_check_login_user => p_check_login_user,
2309        p_resource_id => p_resource_id,
2310        p_role_id => l_role_id,
2311        p_include_group_flag => p_include_group_flag,
2312        p_check_effective_date => FND_API.G_TRUE,
2313        x_result_flag => x_result_flag
2314      );
2315   END IF;
2316 END  Can_ApproveContent;
2317 --------------------------------------------------------------------------------
2318 PROCEDURE Can_SetupChannel
2319 (
2320     p_api_version         IN  NUMBER,
2321     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2322     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2323     x_return_status       OUT NOCOPY VARCHAR2,
2324     x_msg_count           OUT NOCOPY NUMBER,
2325     x_msg_data            OUT NOCOPY VARCHAR2,
2326     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2327     p_resource_id         IN  NUMBER   := FND_API.G_MISS_NUM,
2328     p_include_group_flag  IN  VARCHAR2 := FND_API.G_TRUE,
2329     x_result_flag         OUT NOCOPY VARCHAR2
2330 )  AS
2331 l_role_id    number;
2332 BEGIN
2333   Is_Administrator
2334   (
2335     p_api_version,
2336     p_init_msg_list,
2337     p_validation_level,
2338     x_return_status,
2339     x_msg_count,
2340     x_msg_data,
2341     p_check_login_user,
2342     p_resource_id,
2343     p_include_group_flag,
2344     x_result_flag
2345   );
2346   IF (x_result_flag <> FND_API.G_TRUE) THEN
2347      l_role_id := Get_RoleId(G_CAN_SETUP_CHANNEL_CODE);
2348      Check_ResourceRole
2349      (
2350        p_api_version => p_api_version,
2351        p_init_msg_list => p_init_msg_list,
2352        p_validation_level => p_validation_level,
2353        x_return_status => x_return_status,
2354        x_msg_count => x_msg_count,
2355        x_msg_data => x_msg_data,
2356        p_check_login_user => p_check_login_user,
2357        p_resource_id => p_resource_id,
2358        p_role_id => l_role_id,
2359        p_include_group_flag => p_include_group_flag,
2360        p_check_effective_date => FND_API.G_TRUE,
2361        x_result_flag => x_result_flag
2362      );
2363   END IF;
2364 END  Can_SetupChannel;
2365 --------------------------------------------------------------------------------
2366 PROCEDURE Can_SetupCategory
2367 (
2368     p_api_version         IN  NUMBER,
2369     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2370     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2371     x_return_status       OUT NOCOPY VARCHAR2,
2372     x_msg_count           OUT NOCOPY NUMBER,
2373     x_msg_data            OUT NOCOPY VARCHAR2,
2374     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2375     p_resource_id         IN  NUMBER   := FND_API.G_MISS_NUM,
2376     p_include_group_flag  IN  VARCHAR2 := FND_API.G_TRUE,
2377     x_result_flag         OUT NOCOPY VARCHAR2
2378 )  AS
2379 l_role_id    number;
2380 BEGIN
2381   Is_Administrator
2382   (
2383     p_api_version,
2384     p_init_msg_list,
2385     p_validation_level,
2386     x_return_status,
2387     x_msg_count,
2388     x_msg_data,
2389     p_check_login_user,
2390     p_resource_id,
2391     p_include_group_flag,
2392     x_result_flag
2393   );
2394   IF (x_result_flag <> FND_API.G_TRUE) THEN
2395      l_role_id := Get_RoleId(G_CAN_SETUP_CATEGORY_CODE);
2396      Check_ResourceRole
2397      (
2398        p_api_version => p_api_version,
2399        p_init_msg_list => p_init_msg_list,
2400        p_validation_level => p_validation_level,
2401        x_return_status => x_return_status,
2402        x_msg_count => x_msg_count,
2403        x_msg_data => x_msg_data,
2404        p_check_login_user => p_check_login_user,
2405        p_resource_id => p_resource_id,
2406        p_role_id => l_role_id,
2407        p_include_group_flag => p_include_group_flag,
2408        p_check_effective_date => FND_API.G_TRUE,
2409        x_result_flag => x_result_flag
2410      );
2411   END IF;
2412 END  Can_SetupCategory;
2413 --------------------------------------------------------------------------------
2414 PROCEDURE Can_SetupDistRule
2415 (
2416     p_api_version         IN  NUMBER,
2417     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2418     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2419     x_return_status       OUT NOCOPY VARCHAR2,
2420     x_msg_count           OUT NOCOPY NUMBER,
2421     x_msg_data            OUT NOCOPY VARCHAR2,
2422     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2423     p_resource_id         IN  NUMBER   := FND_API.G_MISS_NUM,
2424     p_include_group_flag  IN  VARCHAR2 := FND_API.G_TRUE,
2425     x_result_flag         OUT NOCOPY VARCHAR2
2426 )  AS
2427 l_role_id    number;
2428 BEGIN
2429   Is_Administrator
2430   (
2431     p_api_version,
2432     p_init_msg_list,
2433     p_validation_level,
2434     x_return_status,
2435     x_msg_count,
2436     x_msg_data,
2437     p_check_login_user,
2438     p_resource_id,
2439     p_include_group_flag,
2440     x_result_flag
2441   );
2442   IF (x_result_flag <> FND_API.G_TRUE) THEN
2443      l_role_id := Get_RoleId(G_CAN_SETUP_DIST_CODE);
2444      Check_ResourceRole
2445      (
2446        p_api_version => p_api_version,
2447        p_init_msg_list => p_init_msg_list,
2448        p_validation_level => p_validation_level,
2449        x_return_status => x_return_status,
2450        x_msg_count => x_msg_count,
2451        x_msg_data => x_msg_data,
2452        p_check_login_user => p_check_login_user,
2453        p_resource_id => p_resource_id,
2454        p_role_id => l_role_id,
2455        p_include_group_flag => p_include_group_flag,
2456        p_check_effective_date => FND_API.G_TRUE,
2457        x_result_flag => x_result_flag
2458      );
2459   END IF;
2460 END  Can_SetupDistRule;
2461 --------------------------------------------------------------------------------
2462 ---------------------------------- GROUP ROLE  ---------------------------------
2463 --------------------------------------------------------------------------------
2464 PROCEDURE Add_GroupRole
2465 (
2466     p_api_version         IN  NUMBER,
2467     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2468     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
2469     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2470     x_return_status       OUT NOCOPY VARCHAR2,
2471     x_msg_count           OUT NOCOPY NUMBER,
2472     x_msg_data            OUT NOCOPY VARCHAR2,
2473     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2474     p_group_id            IN  NUMBER,
2475     p_role_id             IN  NUMBER   := FND_API.G_MISS_NUM,
2476     p_role_code           IN  VARCHAR2 := FND_API.G_MISS_CHAR
2477 ) AS
2478 BEGIN
2479     Add_AssignRoleHelper
2480     (
2481         p_api_version       => p_api_version,
2482         p_init_msg_list     => p_init_msg_list,
2483         p_commit            => p_commit,
2484         p_validation_level  => p_validation_level,
2485         x_return_status     => x_return_status,
2486         x_msg_count         => x_msg_count,
2487         x_msg_data          => x_msg_data,
2488         p_check_login_user  => p_check_login_user,
2489         p_resource_id       => p_group_id,
2490         p_resource_type     => G_GROUP_ROLE_CODE,
2491         p_role_id           => p_role_id,
2492         p_role_code         => p_role_code
2493     );
2494 END Add_GroupRole;
2495 --------------------------------------------------------------------------------
2496 PROCEDURE Add_GroupRole
2497 (
2498     p_api_version         IN  NUMBER,
2499     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2500     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
2501     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2502     x_return_status       OUT NOCOPY VARCHAR2,
2503     x_msg_count           OUT NOCOPY NUMBER,
2504     x_msg_data            OUT NOCOPY VARCHAR2,
2505     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2506     p_group_id            IN  NUMBER,
2507     p_role_id_varray      IN  AMV_NUMBER_VARRAY_TYPE
2508 )  AS
2509 l_api_name             CONSTANT VARCHAR2(30) := 'Add_GroupRole';
2510 l_api_version          CONSTANT NUMBER := 1.0;
2511 l_current_user_id      NUMBER;
2512 l_current_login_id     NUMBER;
2513 l_current_resource_id  NUMBER;
2514 l_current_user_status  VARCHAR2(30);
2515 --
2516 l_return_status        VARCHAR2(1);
2517 l_admin_flag           VARCHAR2(1);
2518 l_count                NUMBER;
2519 --
2520 --
2521 BEGIN
2522     -- Standard call to check for call compatibility.
2523     SAVEPOINT  Add_GroupRole_Pvt;
2524     IF NOT FND_API.Compatible_API_Call (
2525          l_api_version,
2526          p_api_version,
2527          l_api_name,
2528          G_PKG_NAME) THEN
2529         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
2530     END IF;
2531     --Initialize message list if p_init_msg_list is TRUE.
2532     IF FND_API.To_Boolean (p_init_msg_list) THEN
2533        FND_MSG_PUB.initialize;
2534     END IF;
2535     -- Initialize API return status to success
2536     x_return_status := FND_API.G_RET_STS_SUCCESS;
2537     -- Get the current (login) user id.
2538     AMV_UTILITY_PVT.Get_UserInfo(
2539        x_user_id     => l_current_user_id,
2540        x_login_id    => l_current_login_id,
2541        x_resource_id => l_current_resource_id,
2542        x_user_status => l_current_user_status
2543        );
2544     IF (p_check_login_user = FND_API.G_TRUE) THEN
2545        -- Check if user is login and has the required privilege.
2546        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
2547           -- User is not login.
2548           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2549               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
2550               FND_MSG_PUB.Add;
2551           END IF;
2552           RAISE  FND_API.G_EXC_ERROR;
2553        END IF;
2554        AMV_USER_PVT.Is_Administrator
2555        (
2556            p_api_version         => 1.0,
2557            x_return_status       => x_return_status,
2558            x_msg_count           => x_msg_count,
2559            x_msg_data            => x_msg_data,
2560            p_check_login_user    => FND_API.G_FALSE,
2561            p_resource_id         => l_current_resource_id,
2562            x_result_flag         => l_admin_flag
2563        );
2564        IF (l_admin_flag <> FND_API.G_TRUE) THEN
2565           -- User is not an administrator.
2566           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2567               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
2568               FND_MSG_PUB.Add;
2569           END IF;
2570           RAISE  FND_API.G_EXC_ERROR;
2571        END IF;
2572     END IF;
2573     -- This is to make database happy
2574     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
2575         l_current_login_id := -1;
2576         l_current_user_id  := -1;
2577     END IF;
2578     -- Check if the group id is valid
2579     IF (AMV_UTILITY_PVT.IS_GROUPIDVALID(p_group_id) <> TRUE) THEN
2580        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2581            FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_ID');
2582            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_group_id, -1) ) );
2583            FND_MSG_PUB.Add;
2584        END IF;
2585        RAISE  FND_API.G_EXC_ERROR;
2586     END IF;
2587 
2588     IF (p_role_id_varray IS NULL) THEN
2589         l_count := 0;
2590     ELSE
2591        l_count := p_role_id_varray.count;
2592     END IF;
2593     FOR i IN 1..l_count LOOP
2594         Add_GroupRole
2595         (
2596             p_api_version         => p_api_version,
2597             p_commit              => p_commit,
2598             p_validation_level    => p_validation_level,
2599             x_return_status       => l_return_status,
2600             x_msg_count           => x_msg_count,
2601             x_msg_data            => x_msg_data,
2602             p_check_login_user    => FND_API.G_FALSE,
2603             p_group_id            => p_group_id,
2604             p_role_id             => p_role_id_varray(i)
2605         );
2606         IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2607            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2608         ELSIF (l_return_status = FND_API.G_RET_STS_ERROR AND
2609                x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2610            x_return_status := FND_API.G_RET_STS_ERROR;
2611         END IF;
2612     END LOOP;
2613     --Standard call to get message count and if count=1, get the message
2614     FND_MSG_PUB.Count_And_Get (
2615        p_encoded => FND_API.G_FALSE,
2616        p_count => x_msg_count,
2617        p_data  => x_msg_data
2618        );
2619 EXCEPTION
2620    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2621        ROLLBACK TO  Add_GroupRole_Pvt;
2622        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2623        -- Standard call to get message count and if count=1, get the message
2624        FND_MSG_PUB.Count_And_Get (
2625           p_encoded => FND_API.G_FALSE,
2626           p_count => x_msg_count,
2627           p_data  => x_msg_data
2628           );
2629    WHEN FND_API.G_EXC_ERROR THEN
2630        ROLLBACK TO  Add_GroupRole_Pvt;
2631        x_return_status := FND_API.G_RET_STS_ERROR;
2632        -- Standard call to get message count and if count=1, get the message
2633        FND_MSG_PUB.Count_And_Get (
2634           p_encoded => FND_API.G_FALSE,
2635           p_count => x_msg_count,
2636           p_data  => x_msg_data
2637           );
2638    WHEN OTHERS THEN
2639        ROLLBACK TO  Add_GroupRole_Pvt;
2640        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2641        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2642           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2643        END IF;
2644        -- Standard call to get message count and if count=1, get the message
2645        FND_MSG_PUB.Count_And_Get (
2646           p_encoded => FND_API.G_FALSE,
2647           p_count => x_msg_count,
2648           p_data  => x_msg_data
2649           );
2650 END Add_GroupRole;
2651 --------------------------------------------------------------------------------
2652 PROCEDURE Remove_GroupRole
2653 (
2654     p_api_version         IN  NUMBER,
2655     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2656     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
2657     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2658     x_return_status       OUT NOCOPY VARCHAR2,
2659     x_msg_count           OUT NOCOPY NUMBER,
2660     x_msg_data            OUT NOCOPY VARCHAR2,
2661     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2662     p_group_id            IN  NUMBER,
2663     p_role_id             IN  NUMBER   := FND_API.G_MISS_NUM,
2664     p_role_code           IN  VARCHAR2 := FND_API.G_MISS_CHAR
2665 )  AS
2666 l_role_id         number;
2667 BEGIN
2668     IF (p_role_id = FND_API.G_MISS_NUM) THEN
2669         l_role_id := Get_RoleId(p_role_code);
2670     ELSE
2671         l_role_id := p_role_id;
2672     END IF;
2673     Remove_RoleHelper
2674     (
2675         p_api_version       => p_api_version,
2676         p_init_msg_list     => p_init_msg_list,
2677         p_commit            => p_commit,
2678         p_validation_level  => p_validation_level,
2679         x_return_status     => x_return_status,
2680         x_msg_count         => x_msg_count,
2681         x_msg_data          => x_msg_data,
2682         p_check_login_user  => p_check_login_user,
2683         p_resource_id       => p_group_id,
2684         p_resource_type     => G_GROUP_ROLE_CODE,
2685         p_role_id           => l_role_id
2686     );
2687 END Remove_GroupRole;
2688 --------------------------------------------------------------------------------
2689 PROCEDURE Remove_GroupRole
2690 (
2691     p_api_version         IN  NUMBER,
2692     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2693     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
2694     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2695     x_return_status       OUT NOCOPY VARCHAR2,
2696     x_msg_count           OUT NOCOPY NUMBER,
2697     x_msg_data            OUT NOCOPY VARCHAR2,
2698     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2699     p_group_id            IN  NUMBER,
2700     p_role_id_varray      IN  AMV_NUMBER_VARRAY_TYPE
2701 )  AS
2702 l_api_name             CONSTANT VARCHAR2(30) := 'Remove_GroupRole';
2703 l_api_version          CONSTANT NUMBER := 1.0;
2704 l_current_user_id      NUMBER;
2705 l_current_login_id     NUMBER;
2706 l_current_resource_id  NUMBER;
2707 l_current_user_status  VARCHAR2(30);
2708 --
2709 l_admin_flag           VARCHAR2(1);
2710 l_count                NUMBER;
2711 l_return_status        VARCHAR2(1);
2712 l_role_id_varray       AMV_NUMBER_VARRAY_TYPE;
2713 l_role_code_varray     AMV_CHAR_VARRAY_TYPE;
2714 --
2715 BEGIN
2716     -- Standard call to check for call compatibility.
2717     SAVEPOINT  Remove_GroupRole_Pvt;
2718     IF NOT FND_API.Compatible_API_Call (
2719          l_api_version,
2720          p_api_version,
2721          l_api_name,
2722          G_PKG_NAME) THEN
2723         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
2724     END IF;
2725     --Initialize message list if p_init_msg_list is TRUE.
2726     IF FND_API.To_Boolean (p_init_msg_list) THEN
2727        FND_MSG_PUB.initialize;
2728     END IF;
2729     -- Initialize API return status to success
2730     x_return_status := FND_API.G_RET_STS_SUCCESS;
2731     -- Get the current (login) user id.
2732     AMV_UTILITY_PVT.Get_UserInfo(
2733        x_user_id     => l_current_user_id,
2734        x_login_id    => l_current_login_id,
2735        x_resource_id => l_current_resource_id,
2736        x_user_status => l_current_user_status
2737        );
2738     IF (p_check_login_user = FND_API.G_TRUE) THEN
2739        -- Check if user is login and has the required privilege.
2740        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
2741           -- User is not login.
2742           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2743               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
2744               FND_MSG_PUB.Add;
2745           END IF;
2746           RAISE  FND_API.G_EXC_ERROR;
2747        END IF;
2748        AMV_USER_PVT.Is_Administrator
2749        (
2750            p_api_version         => 1.0,
2751            x_return_status       => x_return_status,
2752            x_msg_count           => x_msg_count,
2753            x_msg_data            => x_msg_data,
2754            p_check_login_user    => FND_API.G_FALSE,
2755            p_resource_id         => l_current_resource_id,
2756            x_result_flag         => l_admin_flag
2757        );
2758        IF (l_admin_flag <> FND_API.G_TRUE) THEN
2759           -- User is not an administrator.
2760           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2761               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
2762               FND_MSG_PUB.Add;
2763           END IF;
2764           RAISE  FND_API.G_EXC_ERROR;
2765        END IF;
2766     END IF;
2767     -- This is to make database happy
2768     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
2769         l_current_login_id := -1;
2770         l_current_user_id  := -1;
2771     END IF;
2772     -- Check if the Group id is valid
2773     IF (AMV_UTILITY_PVT.IS_GROUPIDVALID(p_group_id) <> TRUE) THEN
2774        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2775            FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_ID');
2776            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_group_id, -1) ) );
2777            FND_MSG_PUB.Add;
2778        END IF;
2779        RAISE  FND_API.G_EXC_ERROR;
2780     END IF;
2781     IF (p_role_id_varray IS NULL OR p_role_id_varray.count = 0) THEN
2782        Get_GroupRoles
2783        (
2784            p_api_version          => p_api_version,
2785            x_return_status        => l_return_status,
2786            x_msg_count            => x_msg_count,
2787            x_msg_data             => x_msg_data,
2788            p_check_login_user     => FND_API.G_FALSE,
2789            p_group_id             => p_group_id,
2790            p_check_effective_date => FND_API.G_FALSE,
2791            x_role_id_varray       => l_role_id_varray,
2792            x_role_code_varray     => l_role_code_varray
2793        );
2794        IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2795           l_count := l_role_id_varray.count;
2796        ELSE
2797           l_count := 0;
2798           x_return_status := l_return_status;
2799        END IF;
2800     ELSE
2801        l_count := p_role_id_varray.count;
2802        l_role_id_varray := p_role_id_varray;
2803     END IF;
2804     FOR i IN 1..l_count LOOP
2805         Remove_GroupRole
2806         (
2807            p_api_version        => p_api_version,
2808            p_commit             => p_commit,
2809            p_validation_level   => p_validation_level,
2810            x_return_status      => l_return_status,
2811            x_msg_count          => x_msg_count,
2812            x_msg_data           => x_msg_data,
2813            p_check_login_user   => FND_API.G_FALSE,
2814            p_group_id           => p_group_id,
2815            p_role_id            => l_role_id_varray(i),
2816            p_role_code          => null
2817        );
2818        IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2819           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2820        ELSIF (l_return_status = FND_API.G_RET_STS_ERROR AND
2821               x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2822           x_return_status := FND_API.G_RET_STS_ERROR;
2823        END IF;
2824     END LOOP;
2825     --Standard call to get message count and if count=1, get the message
2826     FND_MSG_PUB.Count_And_Get (
2827        p_encoded => FND_API.G_FALSE,
2828        p_count => x_msg_count,
2829        p_data  => x_msg_data
2830        );
2831 EXCEPTION
2832    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2833        ROLLBACK TO  Remove_GroupRole_Pvt;
2834        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2835        -- Standard call to get message count and if count=1, get the message
2836        FND_MSG_PUB.Count_And_Get (
2837           p_encoded => FND_API.G_FALSE,
2838           p_count => x_msg_count,
2839           p_data  => x_msg_data
2840           );
2841    WHEN FND_API.G_EXC_ERROR THEN
2842        ROLLBACK TO  Remove_GroupRole_Pvt;
2843        x_return_status := FND_API.G_RET_STS_ERROR;
2844        -- Standard call to get message count and if count=1, get the message
2845        FND_MSG_PUB.Count_And_Get (
2846           p_encoded => FND_API.G_FALSE,
2847           p_count => x_msg_count,
2848           p_data  => x_msg_data
2849           );
2850    WHEN OTHERS THEN
2851        ROLLBACK TO  Remove_GroupRole_Pvt;
2852        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2853        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2854           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2855        END IF;
2856        -- Standard call to get message count and if count=1, get the message
2857        FND_MSG_PUB.Count_And_Get (
2858           p_encoded => FND_API.G_FALSE,
2859           p_count => x_msg_count,
2860           p_data  => x_msg_data
2861           );
2862 END Remove_GroupRole;
2863 --------------------------------------------------------------------------------
2864 PROCEDURE Replace_GroupRole
2865 (
2866     p_api_version         IN  NUMBER,
2867     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2868     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
2869     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2870     x_return_status       OUT NOCOPY VARCHAR2,
2871     x_msg_count           OUT NOCOPY NUMBER,
2872     x_msg_data            OUT NOCOPY VARCHAR2,
2873     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2874     p_group_id            IN  NUMBER,
2875     p_role_code           IN  VARCHAR2
2876 ) AS
2877 l_role_id_array          AMV_NUMBER_VARRAY_TYPE;
2878 BEGIN
2879    Get_RoleIDArray (p_role_code, l_role_id_array);
2880    Replace_GroupRole
2881    (
2882     p_api_version       => p_api_version,
2883     p_init_msg_list     => p_init_msg_list,
2884     p_commit            => p_commit,
2885     p_validation_level  => p_validation_level,
2886     x_return_status     => x_return_status,
2887     x_msg_count         => x_msg_count,
2888     x_msg_data          => x_msg_data,
2889     p_check_login_user  => p_check_login_user,
2890     p_group_id          => p_group_id,
2891     p_role_id_varray    => l_role_id_array
2892     );
2893 END Replace_GroupRole;
2894 --------------------------------------------------------------------------------
2895 PROCEDURE Replace_GroupRole
2896 (
2897     p_api_version         IN  NUMBER,
2898     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
2899     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
2900     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2901     x_return_status       OUT NOCOPY VARCHAR2,
2902     x_msg_count           OUT NOCOPY NUMBER,
2903     x_msg_data            OUT NOCOPY VARCHAR2,
2904     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
2905     p_group_id            IN  NUMBER,
2906     p_role_id_varray      IN  AMV_NUMBER_VARRAY_TYPE
2907 )  AS
2908 l_api_name             CONSTANT VARCHAR2(30) := 'Replace_GroupRole';
2909 l_api_version          CONSTANT NUMBER := 1.0;
2910 l_current_user_id      NUMBER;
2911 l_current_login_id     NUMBER;
2912 l_current_resource_id  NUMBER;
2913 l_current_user_status  VARCHAR2(30);
2914 --
2915 l_count                NUMBER;
2916 l_temp                 NUMBER;
2917 l_return_status        VARCHAR2(1);
2918 l_date                 DATE;
2919 --
2920 BEGIN
2921     -- Standard call to check for call compatibility.
2922     SAVEPOINT  Replace_GroupRole_Pvt;
2923     x_return_status := FND_API.G_RET_STS_SUCCESS;
2924     --Remove the existing roles
2925     --Remove the existing roles
2926     Remove_GroupRole
2927     (
2928         p_api_version      => p_api_version,
2929         p_init_msg_list    => p_init_msg_list,
2930         p_validation_level => p_validation_level,
2931         x_return_status    => l_return_status,
2932         x_msg_count        => x_msg_count,
2933         x_msg_data         => x_msg_data,
2934         p_check_login_user => p_check_login_user,
2935         p_group_id         => p_group_id,
2936         p_role_id_varray   => null
2937     );
2938     IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2939        RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
2940     ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
2941        RAISE  FND_API.G_EXC_ERROR;
2942     END IF;
2943     Add_GroupRole
2944     (
2945         p_api_version      => p_api_version,
2946         p_commit           => p_commit,
2947         p_validation_level => p_validation_level,
2948         x_return_status    => l_return_status,
2949         x_msg_count        => x_msg_count,
2950         x_msg_data         => x_msg_data,
2951         p_check_login_user => FND_API.G_FALSE,
2952         p_group_id         => p_group_id,
2953         p_role_id_varray   => p_role_id_varray
2954     );
2955     IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2956        RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
2957     ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
2958        RAISE  FND_API.G_EXC_ERROR;
2959     END IF;
2960     --Standard call to get message count and if count=1, get the message
2961     FND_MSG_PUB.Count_And_Get (
2962        p_encoded => FND_API.G_FALSE,
2963        p_count => x_msg_count,
2964        p_data  => x_msg_data
2965        );
2966 EXCEPTION
2967    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2968        ROLLBACK TO  Replace_GroupRole_Pvt;
2969        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2970        -- Standard call to get message count and if count=1, get the message
2971        FND_MSG_PUB.Count_And_Get (
2972           p_encoded => FND_API.G_FALSE,
2973           p_count => x_msg_count,
2974           p_data  => x_msg_data
2975           );
2976    WHEN FND_API.G_EXC_ERROR THEN
2977        ROLLBACK TO  Replace_GroupRole_Pvt;
2978        x_return_status := FND_API.G_RET_STS_ERROR;
2979        -- Standard call to get message count and if count=1, get the message
2980        FND_MSG_PUB.Count_And_Get (
2981           p_encoded => FND_API.G_FALSE,
2982           p_count => x_msg_count,
2983           p_data  => x_msg_data
2984           );
2985    WHEN OTHERS THEN
2986        ROLLBACK TO  Replace_GroupRole_Pvt;
2987        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2988        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2989           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2990        END IF;
2991        -- Standard call to get message count and if count=1, get the message
2992        FND_MSG_PUB.Count_And_Get (
2993           p_encoded => FND_API.G_FALSE,
2994           p_count => x_msg_count,
2995           p_data  => x_msg_data
2996           );
2997 END Replace_GroupRole;
2998 --------------------------------------------------------------------------------
2999 PROCEDURE Get_GroupRoles
3000 (
3001     p_api_version          IN  NUMBER,
3002     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
3003     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
3004     x_return_status        OUT NOCOPY VARCHAR2,
3005     x_msg_count            OUT NOCOPY NUMBER,
3006     x_msg_data             OUT NOCOPY VARCHAR2,
3007     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
3008     p_group_id             IN  NUMBER,
3009     p_check_effective_date IN  VARCHAR2 := FND_API.G_TRUE,
3010     x_role_id_varray       OUT NOCOPY AMV_NUMBER_VARRAY_TYPE,
3011     x_role_code_varray     OUT NOCOPY AMV_CHAR_VARRAY_TYPE
3012 )  AS
3013 l_api_name             CONSTANT VARCHAR2(30) := 'Get_GroupRoles';
3014 l_api_version          CONSTANT NUMBER := 1.0;
3015 l_current_user_id      NUMBER;
3016 l_current_login_id     NUMBER;
3017 l_current_resource_id  NUMBER;
3018 l_current_user_status  VARCHAR2(30);
3019 --
3020 l_count                NUMBER := 0;
3021 --
3022 CURSOR Get_GroupRole_csr IS
3023 Select
3024      rol.role_code,
3025      rol.role_id
3026 From  jtf_rs_role_relations_vl rel, jtf_rs_roles_vl rol
3027 Where rol.role_id = rel.role_id
3028 And   rel.role_resource_id = p_group_id
3029 And   rel.role_resource_type = G_GROUP_ROLE_CODE
3030 And   rol.role_type_code = G_MES_ROLE_TYPE_NAME
3031 Order by rol.role_code;
3032 --
3033 BEGIN
3034     -- Standard call to check for call compatibility.
3035     IF NOT FND_API.Compatible_API_Call (
3036          l_api_version,
3037          p_api_version,
3038          l_api_name,
3039          G_PKG_NAME) THEN
3040         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3041     END IF;
3042     --Initialize message list if p_init_msg_list is TRUE.
3043     IF FND_API.To_Boolean (p_init_msg_list) THEN
3044        FND_MSG_PUB.initialize;
3045     END IF;
3046     -- Initialize API return status to success
3047     x_return_status := FND_API.G_RET_STS_SUCCESS;
3048     x_role_id_varray   := AMV_NUMBER_VARRAY_TYPE();
3049     x_role_code_varray := AMV_CHAR_VARRAY_TYPE();
3050     -- Get the current (login) user id.
3051     AMV_UTILITY_PVT.Get_UserInfo(
3052        x_user_id     => l_current_user_id,
3053        x_login_id    => l_current_login_id,
3054        x_resource_id => l_current_resource_id,
3055        x_user_status => l_current_user_status
3056        );
3057     IF (p_check_login_user = FND_API.G_TRUE) THEN
3058        -- Check if user is login and has the required privilege.
3059        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
3060           -- User is not login.
3061           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3062               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
3063               FND_MSG_PUB.Add;
3064           END IF;
3065           RAISE  FND_API.G_EXC_ERROR;
3066        END IF;
3067     END IF;
3068     -- This is to make database happy
3069     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
3070         l_current_login_id := -1;
3071         l_current_user_id  := -1;
3072     END IF;
3073     -- Check if the group id is valid
3074     IF (AMV_UTILITY_PVT.IS_GROUPIDVALID(p_group_id) <> TRUE) THEN
3075        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3076            FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_ID');
3077            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_group_id, -1) ) );
3078            FND_MSG_PUB.Add;
3079        END IF;
3080        RAISE  FND_API.G_EXC_ERROR;
3081     END IF;
3082     FOR csr1 IN  Get_GroupRole_csr LOOP
3083        l_count := l_count + 1;
3084        x_role_id_varray.extend;
3085        x_role_code_varray.extend;
3086        x_role_id_varray(l_count) := csr1.role_id;
3087        x_role_code_varray(l_count) := csr1.role_code;
3088     END LOOP;
3089     --Standard call to get message count and if count=1, get the message
3090     FND_MSG_PUB.Count_And_Get (
3091        p_encoded => FND_API.G_FALSE,
3092        p_count => x_msg_count,
3093        p_data  => x_msg_data
3094        );
3095 EXCEPTION
3096    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3097        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3098        -- Standard call to get message count and if count=1, get the message
3099        FND_MSG_PUB.Count_And_Get (
3100           p_encoded => FND_API.G_FALSE,
3101           p_count => x_msg_count,
3102           p_data  => x_msg_data
3103           );
3104    WHEN FND_API.G_EXC_ERROR THEN
3105        x_return_status := FND_API.G_RET_STS_ERROR;
3106        -- Standard call to get message count and if count=1, get the message
3107        FND_MSG_PUB.Count_And_Get (
3108           p_encoded => FND_API.G_FALSE,
3109           p_count => x_msg_count,
3110           p_data  => x_msg_data
3111           );
3112    WHEN OTHERS THEN
3113        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3114        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3115           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3116        END IF;
3117        -- Standard call to get message count and if count=1, get the message
3118        FND_MSG_PUB.Count_And_Get (
3119           p_encoded => FND_API.G_FALSE,
3120           p_count => x_msg_count,
3121           p_data  => x_msg_data
3122           );
3123 END Get_GroupRoles;
3124 --------------------------------------------------------------------------------
3125 --------------------------------------------------------------------------------
3126 PROCEDURE Check_GroupRole
3127 (
3128     p_api_version          IN  NUMBER,
3129     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
3130     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
3131     x_return_status        OUT NOCOPY VARCHAR2,
3132     x_msg_count            OUT NOCOPY NUMBER,
3133     x_msg_data             OUT NOCOPY VARCHAR2,
3134     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
3135     p_group_id             IN  NUMBER,
3136     p_role_id              IN  NUMBER,
3137     p_check_effective_date IN  VARCHAR2 := FND_API.G_TRUE,
3138     x_result_flag          OUT NOCOPY VARCHAR2
3139 )  AS
3140 l_api_name             CONSTANT VARCHAR2(30) := 'Check_GroupRole';
3141 l_api_version          CONSTANT NUMBER := 1.0;
3142 l_current_user_id      NUMBER;
3143 l_current_login_id     NUMBER;
3144 l_current_resource_id  NUMBER;
3145 l_current_user_status  VARCHAR2(30);
3146 --
3147 l_temp                 NUMBER;
3148 --
3149 CURSOR Get_GroupRole_csr IS
3150 Select
3151      role_relate_id
3152 From  jtf_rs_role_relations_vl
3153 Where role_id = p_role_id
3154 And   role_resource_id = p_group_id
3155 And   role_resource_type = G_GROUP_ROLE_CODE
3156 ;
3157 --
3158 CURSOR Get_GroupRole2_csr IS
3159 Select
3160      r.role_relate_id
3161 From  jtf_rs_role_relations_vl r, jtf_rs_groups_vl g
3162 Where r.role_id = p_role_id
3163 And   r.role_resource_id = p_group_id
3164 And   r.role_resource_type = G_GROUP_ROLE_CODE
3165 And   r.start_date_active < sysdate
3166 And   nvl(r.end_date_active, sysdate-1) < sysdate
3167 And   g.group_id = p_group_id
3168 And   g.start_date_active < sysdate
3169 And   nvl(g.end_date_active, sysdate-1) < sysdate;
3170 --
3171 BEGIN
3172     -- Standard call to check for call compatibility.
3173     IF NOT FND_API.Compatible_API_Call (
3174          l_api_version,
3175          p_api_version,
3176          l_api_name,
3177          G_PKG_NAME) THEN
3178         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3179     END IF;
3180     --Initialize message list if p_init_msg_list is TRUE.
3181     IF FND_API.To_Boolean (p_init_msg_list) THEN
3182        FND_MSG_PUB.initialize;
3183     END IF;
3184     -- Initialize API return status to success
3185     x_return_status := FND_API.G_RET_STS_SUCCESS;
3186     x_result_flag := FND_API.G_FALSE;
3187     -- Get the current (login) user id.
3188     AMV_UTILITY_PVT.Get_UserInfo(
3189        x_user_id     => l_current_user_id,
3190        x_login_id    => l_current_login_id,
3191        x_resource_id => l_current_resource_id,
3192        x_user_status => l_current_user_status
3193        );
3194     IF (p_check_login_user = FND_API.G_TRUE) THEN
3195        -- Check if user is login and has the required privilege.
3196        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
3197           -- User is not login.
3198           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3199               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
3200               FND_MSG_PUB.Add;
3201           END IF;
3202           RAISE  FND_API.G_EXC_ERROR;
3203        END IF;
3204     END IF;
3205     -- Check if the resource id is valid
3206     IF (AMV_UTILITY_PVT.IS_GROUPIDVALID(p_group_id) <> TRUE) THEN
3207        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3208            FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_ID');
3209            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_group_id, -1) ) );
3210            FND_MSG_PUB.Add;
3211        END IF;
3212        RAISE  FND_API.G_EXC_ERROR;
3213     END IF;
3214     IF (p_check_effective_date = FND_API.G_TRUE) THEN
3215         OPEN  Get_GroupRole2_csr;
3216         FETCH Get_GroupRole2_csr INTO l_temp;
3217         IF (Get_GroupRole2_csr%FOUND) THEN
3218            x_result_flag := FND_API.G_TRUE;
3219         ELSE
3220            x_result_flag := FND_API.G_FALSE;
3221         END IF;
3222         CLOSE Get_GroupRole2_csr;
3223     ELSE
3224         OPEN  Get_GroupRole_csr;
3225         FETCH Get_GroupRole_csr INTO l_temp;
3226         IF (Get_GroupRole_csr%FOUND) THEN
3227            x_result_flag := FND_API.G_TRUE;
3228         ELSE
3229            x_result_flag := FND_API.G_FALSE;
3230         END IF;
3231         CLOSE Get_GroupRole_csr;
3232     END IF;
3233     --Standard call to get message count and if count=1, get the message
3234     FND_MSG_PUB.Count_And_Get (
3235        p_encoded => FND_API.G_FALSE,
3236        p_count => x_msg_count,
3237        p_data  => x_msg_data
3238        );
3239 EXCEPTION
3240    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3241        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3242        -- Standard call to get message count and if count=1, get the message
3243        FND_MSG_PUB.Count_And_Get (
3244           p_encoded => FND_API.G_FALSE,
3245           p_count => x_msg_count,
3246           p_data  => x_msg_data
3247           );
3248    WHEN FND_API.G_EXC_ERROR THEN
3249        x_return_status := FND_API.G_RET_STS_ERROR;
3250        -- Standard call to get message count and if count=1, get the message
3251        FND_MSG_PUB.Count_And_Get (
3252           p_encoded => FND_API.G_FALSE,
3253           p_count => x_msg_count,
3254           p_data  => x_msg_data
3255           );
3256    WHEN OTHERS THEN
3257        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3258        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3259           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3260        END IF;
3261        -- Standard call to get message count and if count=1, get the message
3262        FND_MSG_PUB.Count_And_Get (
3263           p_encoded => FND_API.G_FALSE,
3264           p_count => x_msg_count,
3265           p_data  => x_msg_data
3266           );
3267 END Check_GroupRole;
3268 --------------------------------------------------------------------------------
3269 ---------------------------------------- GROUP ---------------------------------
3270 --------------------------------------------------------------------------------
3271 PROCEDURE Add_Group
3272 (
3273     p_api_version         IN  NUMBER,
3274     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
3275     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
3276     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
3277     x_return_status       OUT NOCOPY VARCHAR2,
3278     x_msg_count           OUT NOCOPY NUMBER,
3279     x_msg_data            OUT NOCOPY VARCHAR2,
3280     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
3281     p_group_name          IN  VARCHAR2,
3282     p_group_desc          IN  VARCHAR2 := NULL,
3283     p_group_usage         IN  VARCHAR2,
3284     p_email_address       IN  VARCHAR2 := NULL,
3285     p_start_date          IN  DATE     := NULL,
3286     p_end_date            IN  DATE     := NULL,
3287     x_group_id            OUT NOCOPY NUMBER
3288 )  AS
3289 l_api_name             CONSTANT VARCHAR2(30) := 'Add_Group';
3290 l_api_version          CONSTANT NUMBER := 1.0;
3291 l_current_user_id      NUMBER;
3292 l_current_login_id     NUMBER;
3293 l_current_resource_id  NUMBER;
3294 l_current_user_status  VARCHAR2(30);
3295 --
3296 l_admin_flag           VARCHAR2(1);
3297 l_group_id             NUMBER;
3298 l_usage_id             NUMBER;
3299 l_group_number         NUMBER;
3300 l_channel_id           NUMBER;
3301 l_channel_record       AMV_CHANNEL_PVT.AMV_CHANNEL_OBJ_TYPE;
3302 l_start_date           DATE;
3303 l_end_date             DATE;
3304 l_group_desc           VARCHAR2(2000);
3305 l_email_address        VARCHAR2(2000);
3306 --
3307 CURSOR Check_Group_csr IS
3308 Select g.group_id
3309 From  jtf_rs_groups_vl g, jtf_rs_group_usages usg
3310 Where g.group_name = p_group_name
3311 And   g.start_date_active < sysdate
3312 And   nvl(g.end_date_active, sysdate+1) > sysdate
3313 And   usg.group_id = g.group_id
3314 And   usg.usage = p_group_usage
3315 ;
3316 --
3317 BEGIN
3318     -- Standard call to check for call compatibility.
3319     SAVEPOINT  Add_Group_Pvt;
3320     IF NOT FND_API.Compatible_API_Call (
3321          l_api_version,
3322          p_api_version,
3323          l_api_name,
3324          G_PKG_NAME) THEN
3325         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3326     END IF;
3327     --Initialize message list if p_init_msg_list is TRUE.
3328     IF FND_API.To_Boolean (p_init_msg_list) THEN
3329        FND_MSG_PUB.initialize;
3330     END IF;
3331     -- Initialize API return status to success
3332     x_return_status := FND_API.G_RET_STS_SUCCESS;
3333     -- Get the current (login) user id.
3334     AMV_UTILITY_PVT.Get_UserInfo(
3335        x_user_id     => l_current_user_id,
3336        x_login_id    => l_current_login_id,
3337        x_resource_id => l_current_resource_id,
3338        x_user_status => l_current_user_status
3339        );
3340 
3341     IF (p_check_login_user = FND_API.G_TRUE) THEN
3342        -- Check if user is login and has the required privilege.
3343        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
3344           -- User is not login.
3345           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3346               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
3347               FND_MSG_PUB.Add;
3348           END IF;
3349           RAISE  FND_API.G_EXC_ERROR;
3350        END IF;
3351        AMV_USER_PVT.Is_Administrator
3352        (
3353            p_api_version         => 1.0,
3354            x_return_status       => x_return_status,
3355            x_msg_count           => x_msg_count,
3356            x_msg_data            => x_msg_data,
3357            p_check_login_user    => FND_API.G_FALSE,
3358            p_resource_id         => l_current_resource_id,
3359            x_result_flag         => l_admin_flag
3360        );
3361        IF (l_admin_flag <> FND_API.G_TRUE) THEN
3362           -- User is not an administrator.
3363           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3364               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
3365               FND_MSG_PUB.Add;
3366           END IF;
3367           RAISE  FND_API.G_EXC_ERROR;
3368        END IF;
3369     END IF;
3370     -- This is to make database happy
3371     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
3372         l_current_login_id := -1;
3373         l_current_user_id  := -1;
3374     END IF;
3375     -- Check if the group name is unique
3376     OPEN  Check_Group_csr;
3377     FETCH Check_Group_csr INTO l_group_id;
3378     IF (Check_Group_csr%FOUND) THEN
3379        CLOSE Check_Group_csr;
3380        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3381            FND_MESSAGE.Set_name('AMV','AMV_DUPLICATE_GROUP_NAME');
3382            FND_MESSAGE.Set_Token('NAME', p_group_name );
3383            FND_MSG_PUB.Add;
3384        END IF;
3385        RAISE  FND_API.G_EXC_ERROR;
3386     ELSE
3387        CLOSE Check_Group_csr;
3388     END IF;
3389     IF (p_start_date is null OR p_start_date = FND_API.G_MISS_DATE) THEN
3390        l_start_date := sysdate;
3391     ELSE
3392        l_start_date := p_start_date;
3393     END IF;
3394     IF (p_end_date is null OR p_end_date = FND_API.G_MISS_DATE) THEN
3395        l_end_date := null;
3396     ELSE
3397        l_end_date := p_end_date;
3398     END IF;
3399     IF (p_group_desc is null OR p_group_desc = FND_API.G_MISS_CHAR) THEN
3400        l_group_desc := null;
3401     ELSE
3402        l_group_desc := p_group_desc;
3403     END IF;
3404     IF (p_email_address is null OR p_email_address = FND_API.G_MISS_CHAR) THEN
3405        l_email_address := null;
3406     ELSE
3407        l_email_address := p_email_address;
3408     END IF;
3409     jtf_rs_groups_pub.create_resource_group
3410     (
3411        p_api_version        => 1.0,
3412        p_commit             => FND_API.G_FALSE,
3413        p_group_name         => p_group_name,
3414        p_group_desc         => l_group_desc,
3415        p_email_address      => l_email_address,
3416        p_start_date_active  => l_start_date,
3417        p_end_date_active    => l_end_date,
3418        x_return_status      => x_return_status,
3419        x_msg_count          => x_msg_count,
3420        x_msg_data           => x_msg_data,
3421        x_group_id           => x_group_id,
3422        x_group_number       => l_group_number
3423     );
3424     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3425        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3426     ELSIF (x_return_status = FND_API.G_RET_STS_ERROR ) THEN
3427        RAISE  FND_API.G_EXC_ERROR;
3428     END IF;
3429     -- Add group usage.
3430    jtf_rs_group_usages_pub.create_group_usage
3431    (
3432       p_api_version        => 1.0,
3433       p_group_id           => x_group_id,
3434       p_group_number       => l_group_number,
3435       p_usage              => p_group_usage,
3436       x_return_status      => x_return_status,
3437       x_msg_count          => x_msg_count,
3438       x_msg_data           => x_msg_data,
3439       x_group_usage_id     => l_usage_id
3440    );
3441     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3442        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3443     ELSIF (x_return_status = FND_API.G_RET_STS_ERROR ) THEN
3444        RAISE  FND_API.G_EXC_ERROR;
3445     END IF;
3446     -- create group channel
3447 
3448     l_channel_record.channel_id := FND_API.G_MISS_NUM;
3449     l_channel_record.object_version_number := FND_API.G_MISS_NUM;
3450     l_channel_record.channel_name := FND_API.G_MISS_CHAR;
3451     l_channel_record.description := FND_API.G_MISS_CHAR;
3452     l_channel_record.channel_type := 'GROUP';
3453     l_channel_record.channel_category_id := FND_API.G_MISS_NUM;
3454     l_channel_record.status := 'ACTIVE';
3455     l_channel_record.owner_user_id := l_current_resource_id;
3456     l_channel_record.default_approver_user_id := l_current_resource_id;
3457     l_channel_record.effective_start_date := l_start_date;
3458     l_channel_record.expiration_date := l_end_date;
3459     l_channel_record.access_level_type := 'PRIVATE';
3460     l_channel_record.pub_need_approval_flag := FND_API.G_MISS_CHAR;
3461     l_channel_record.sub_need_approval_flag := FND_API.G_MISS_CHAR;
3462     l_channel_record.match_on_all_criteria_flag := FND_API.G_MISS_CHAR;
3463     l_channel_record.match_on_keyword_flag := FND_API.G_MISS_CHAR;
3464     l_channel_record.match_on_author_flag := FND_API.G_MISS_CHAR;
3465     l_channel_record.match_on_perspective_flag := FND_API.G_MISS_CHAR;
3466     l_channel_record.match_on_item_type_flag := FND_API.G_MISS_CHAR;
3467     l_channel_record.match_on_content_type_flag := FND_API.G_MISS_CHAR;
3468     l_channel_record.match_on_time_flag := FND_API.G_MISS_CHAR;
3469     l_channel_record.application_id := 520;
3470     l_channel_record.external_access_flag := FND_API.G_MISS_CHAR;
3471     l_channel_record.item_match_count := FND_API.G_MISS_NUM;
3472     l_channel_record.last_match_time := FND_API.G_MISS_DATE;
3473     l_channel_record.notification_interval_type := FND_API.G_MISS_CHAR;
3474     l_channel_record.last_notification_time := FND_API.G_MISS_DATE;
3475     l_channel_record.attribute_category := FND_API.G_MISS_CHAR;
3476     l_channel_record.attribute1 := FND_API.G_MISS_CHAR;
3477     l_channel_record.attribute2 := FND_API.G_MISS_CHAR;
3478     l_channel_record.attribute3 := FND_API.G_MISS_CHAR;
3479     l_channel_record.attribute4 := FND_API.G_MISS_CHAR;
3480     l_channel_record.attribute5 := FND_API.G_MISS_CHAR;
3481     l_channel_record.attribute6 := FND_API.G_MISS_CHAR;
3482     l_channel_record.attribute7 := FND_API.G_MISS_CHAR;
3483     l_channel_record.attribute8 := FND_API.G_MISS_CHAR;
3484     l_channel_record.attribute9 := FND_API.G_MISS_CHAR;
3485     l_channel_record.attribute10 := FND_API.G_MISS_CHAR;
3486     l_channel_record.attribute11 := FND_API.G_MISS_CHAR;
3487     l_channel_record.attribute12 := FND_API.G_MISS_CHAR;
3488     l_channel_record.attribute13 := FND_API.G_MISS_CHAR;
3489     l_channel_record.attribute14 := FND_API.G_MISS_CHAR;
3490     l_channel_record.attribute15 := FND_API.G_MISS_CHAR;
3491 
3492 /*
3493    l_channel_record := AMV_CHANNEL_OBJ_TYPE
3494       (
3495          FND_API.G_MISS_NUM, --CHANNEL_ID
3496          FND_API.G_MISS_NUM, --OBJECT_VERSION_NUMBER
3497          FND_API.G_MISS_CHAR, --CHANNEL_NAME
3498          FND_API.G_MISS_CHAR, --DESCRIPTION
3499          'GROUP', --CHANNEL_TYPE
3500          FND_API.G_MISS_NUM, --CHANNEL_CATEGORY_ID
3501          'ACTIVE', --STATUS
3502          l_current_resource_id, --OWNER_USER_ID
3503          l_current_resource_id, --DEFAULT_APPROVER_USER_ID
3504          l_start_date, --EFFECTIVE_START_DATE
3505          l_end_date,   --EXPIRATION_DATE
3506          'PRIVATE', --ACCESS_LEVEL_TYPE
3507          FND_API.G_MISS_CHAR, --PUB_NEED_APPROVAL_FLAG
3508          FND_API.G_MISS_CHAR, --SUB_NEED_APPROVAL_FLAG
3509          FND_API.G_MISS_CHAR, --MATCH_ON_ALL_CRITERIA_FLAG
3510          FND_API.G_MISS_CHAR, --MATCH_ON_KEYWORD_FLAG
3511          FND_API.G_MISS_CHAR, --MATCH_ON_AUTHOR_FLAG
3512          FND_API.G_MISS_CHAR, --MATCH_ON_PERSPECTIVE_FLAG
3513          FND_API.G_MISS_CHAR, --MATCH_ON_ITEM_TYPE_FLAG
3514          FND_API.G_MISS_CHAR, --MATCH_ON_CONTENT_TYPE_FLAG
3515          FND_API.G_MISS_CHAR, --MATCH_ON_TIME_FLAG
3516          520,
3517          FND_API.G_MISS_CHAR, --EXTERNAL_ACCESS_FLAG
3518          FND_API.G_MISS_NUM, --ITEM_MATCH_COUNT
3519          FND_API.G_MISS_DATE, --LAST_MATCH_TIME
3520          FND_API.G_MISS_CHAR, --NOTIFICATION_INTERVAL_TYPE
3521          FND_API.G_MISS_DATE, --LAST_NOTIFICATION_TIME
3522          FND_API.G_MISS_CHAR, --ATTRIBUTE_CATEGORY
3523          FND_API.G_MISS_CHAR, --ATTRIBUTE1
3524          FND_API.G_MISS_CHAR, --ATTRIBUTE2
3525          FND_API.G_MISS_CHAR, --ATTRIBUTE3
3526          FND_API.G_MISS_CHAR, --ATTRIBUTE4
3527          FND_API.G_MISS_CHAR, --ATTRIBUTE5
3528          FND_API.G_MISS_CHAR, --ATTRIBUTE6
3529          FND_API.G_MISS_CHAR, --ATTRIBUTE7
3530          FND_API.G_MISS_CHAR, --ATTRIBUTE8
3531          FND_API.G_MISS_CHAR, --ATTRIBUTE9
3532          FND_API.G_MISS_CHAR, --ATTRIBUTE10
3533          FND_API.G_MISS_CHAR, --ATTRIBUTE11
3534          FND_API.G_MISS_CHAR, --ATTRIBUTE12
3535          FND_API.G_MISS_CHAR, --ATTRIBUTE13
3536          FND_API.G_MISS_CHAR, --ATTRIBUTE14
3537          FND_API.G_MISS_CHAR  --ATTRIBUTE15
3538       );
3539 */
3540     amv_channel_pvt.Add_GroupChannel
3541     (
3542        p_api_version        => p_api_version,
3543        x_return_status      => x_return_status,
3544        x_msg_count          => x_msg_count,
3545        x_msg_data           => x_msg_data,
3546        p_check_login_user   => p_check_login_user,
3547        p_group_id           => x_group_id,
3548        p_channel_record     => l_channel_record,
3549        x_channel_id         => l_channel_id
3550     );
3551     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3552        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3553     ELSIF (x_return_status = FND_API.G_RET_STS_ERROR ) THEN
3554        RAISE  FND_API.G_EXC_ERROR;
3555     END IF;
3556     IF FND_API.To_Boolean ( p_commit ) THEN
3557         COMMIT WORK;
3558     END IF;
3559     --Standard call to get message count and if count=1, get the message
3560     FND_MSG_PUB.Count_And_Get (
3561        p_encoded => FND_API.G_FALSE,
3562        p_count => x_msg_count,
3563        p_data  => x_msg_data
3564        );
3565 EXCEPTION
3566    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3567        ROLLBACK TO  Add_Group_Pvt;
3568        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3569        -- Standard call to get message count and if count=1, get the message
3570        FND_MSG_PUB.Count_And_Get (
3571           p_encoded => FND_API.G_FALSE,
3572           p_count => x_msg_count,
3573           p_data  => x_msg_data
3574           );
3575    WHEN FND_API.G_EXC_ERROR THEN
3576        ROLLBACK TO  Add_Group_Pvt;
3577        x_return_status := FND_API.G_RET_STS_ERROR;
3578        -- Standard call to get message count and if count=1, get the message
3579        FND_MSG_PUB.Count_And_Get (
3580           p_encoded => FND_API.G_FALSE,
3581           p_count => x_msg_count,
3582           p_data  => x_msg_data
3583           );
3584    WHEN OTHERS THEN
3585        ROLLBACK TO  Add_Group_Pvt;
3586        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3587        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3588           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3589        END IF;
3590        -- Standard call to get message count and if count=1, get the message
3591        FND_MSG_PUB.Count_And_Get (
3592           p_encoded => FND_API.G_FALSE,
3593           p_count => x_msg_count,
3594           p_data  => x_msg_data
3595           );
3596 END Add_Group;
3597 --------------------------------------------------------------------------------
3598 PROCEDURE Update_Group
3599 (
3600     p_api_version         IN  NUMBER,
3601     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
3602     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
3603     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
3604     x_return_status       OUT NOCOPY VARCHAR2,
3605     x_msg_count           OUT NOCOPY NUMBER,
3606     x_msg_data            OUT NOCOPY VARCHAR2,
3607     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
3608     p_group_id            IN  NUMBER,
3609     p_new_group_name      IN  VARCHAR2 := FND_API.G_MISS_CHAR,
3610     p_new_group_desc      IN  VARCHAR2 := FND_API.G_MISS_CHAR,
3611     p_group_usage         IN  VARCHAR2 := G_MES_GROUP_USAGE,
3612     p_email_address       IN  VARCHAR2 := FND_API.G_MISS_CHAR,
3613     p_new_start_date      IN  DATE     := FND_API.G_MISS_DATE,
3614     p_new_end_date        IN  DATE     := FND_API.G_MISS_DATE
3615 )  AS
3616 l_api_name             CONSTANT VARCHAR2(30) := 'Update_Group';
3617 l_api_version          CONSTANT NUMBER := 1.0;
3618 l_current_user_id      NUMBER;
3619 l_current_login_id     NUMBER;
3620 l_current_resource_id  NUMBER;
3621 l_current_user_status  VARCHAR2(30);
3622 --
3623 l_admin_flag           VARCHAR2(1);
3624 l_group_id             NUMBER;
3625 l_group_number         VARCHAR2(30) := null; -- dummy
3626 l_object_version_num   NUMBER;
3627 l_channel_id           NUMBER;
3628 --
3629 CURSOR Get_Version_csr IS
3630 Select object_version_number
3631 From  jtf_rs_groups_vl
3632 Where group_id = p_group_id
3633 ;
3634 CURSOR Check_Group_csr(p_name IN VARCHAR2) IS
3635 Select g.group_id
3636 From  jtf_rs_groups_vl g, jtf_rs_group_usages usg
3637 Where g.group_name = p_name
3638 And   usg.group_id = g.group_id
3639 And   usg.usage = p_group_usage
3640 ;
3641 CURSOR Get_GroupChannelId(p_g_id IN NUMBER) IS
3642 Select subscribing_to_id channel_id
3643 From amv_u_my_channels
3644 Where user_or_group_id = p_g_id
3645 And user_or_group_type = G_GROUP_ARC_TYPE
3646 And subscribing_to_type = G_CHAN_ARC_TYPE
3647 And subscription_reason_type = 'ENFORCED'
3648 ;
3649 --
3650 BEGIN
3651     -- Standard call to check for call compatibility.
3652     SAVEPOINT  Update_Group_Pvt;
3653     IF NOT FND_API.Compatible_API_Call (
3654          l_api_version,
3655          p_api_version,
3656          l_api_name,
3657          G_PKG_NAME) THEN
3658         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3659     END IF;
3660     --Initialize message list if p_init_msg_list is TRUE.
3661     IF FND_API.To_Boolean (p_init_msg_list) THEN
3662        FND_MSG_PUB.initialize;
3663     END IF;
3664     -- Initialize API return status to success
3665     x_return_status := FND_API.G_RET_STS_SUCCESS;
3666     -- Get the current (login) user id.
3667     AMV_UTILITY_PVT.Get_UserInfo(
3668        x_user_id     => l_current_user_id,
3669        x_login_id    => l_current_login_id,
3670        x_resource_id => l_current_resource_id,
3671        x_user_status => l_current_user_status
3672        );
3673     IF (p_check_login_user = FND_API.G_TRUE) THEN
3674        -- Check if user is login and has the required privilege.
3675        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
3676           -- User is not login.
3677           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3678               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
3679               FND_MSG_PUB.Add;
3680           END IF;
3681           RAISE  FND_API.G_EXC_ERROR;
3682        END IF;
3683        AMV_USER_PVT.Is_Administrator
3684        (
3685            p_api_version         => 1.0,
3686            x_return_status       => x_return_status,
3687            x_msg_count           => x_msg_count,
3688            x_msg_data            => x_msg_data,
3689            p_check_login_user    => FND_API.G_FALSE,
3690            p_resource_id         => l_current_resource_id,
3691            x_result_flag         => l_admin_flag
3692        );
3693        IF (l_admin_flag <> FND_API.G_TRUE) THEN
3694           -- User is not an administrator.
3695           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3696               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
3697               FND_MSG_PUB.Add;
3698           END IF;
3699           RAISE  FND_API.G_EXC_ERROR;
3700        END IF;
3701     END IF;
3702     -- This is to make database happy
3703     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
3704         l_current_login_id := -1;
3705         l_current_user_id  := -1;
3706     END IF;
3707     -- Check if the group id is valid
3708     IF (AMV_UTILITY_PVT.IS_GROUPIDVALID(p_group_id) <> TRUE) THEN
3709        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3710            FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_ID');
3711            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_group_id, -1) ) );
3712            FND_MSG_PUB.Add;
3713        END IF;
3714        RAISE  FND_API.G_EXC_ERROR;
3715     END IF;
3716     -- Check if the group name is unique
3717     IF (p_new_group_name <> FND_API.G_MISS_CHAR) THEN
3718         OPEN  Check_Group_csr(p_new_group_name);
3719         FETCH Check_Group_csr INTO l_group_id;
3720         IF (Check_Group_csr%FOUND) THEN
3721            CLOSE Check_Group_csr;
3722            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3723                FND_MESSAGE.Set_name('AMV','AMV_DUPLICATE_GROUP_NAME');
3724                FND_MESSAGE.Set_Token('NAME', p_new_group_name );
3725                FND_MSG_PUB.Add;
3726            END IF;
3727            RAISE  FND_API.G_EXC_ERROR;
3728         ELSE
3729            CLOSE Check_Group_csr;
3730         END IF;
3731     END IF;
3732     OPEN  Get_Version_csr;
3733     FETCH Get_Version_csr INTO l_object_version_num;
3734     CLOSE Get_Version_csr;
3735     jtf_rs_groups_pub.update_resource_group
3736     (
3737        p_api_version        => p_api_version,
3738        p_group_id           => p_group_id,
3739        p_group_number       => null,
3740        p_group_name         => p_new_group_name,
3741        p_group_desc         => p_new_group_desc,
3742        p_email_address      => p_email_address,
3743        p_start_date_active  => p_new_start_date,
3744        p_end_date_active    => p_new_end_date,
3745        p_object_version_num => l_object_version_num,
3746        x_return_status      => x_return_status,
3747        x_msg_count          => x_msg_count,
3748        x_msg_data           => x_msg_data
3749     );
3750     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3751        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3752     ELSIF (x_return_status = FND_API.G_RET_STS_ERROR ) THEN
3753        RAISE  FND_API.G_EXC_ERROR;
3754     END IF;
3755     IF (p_new_start_date  <> FND_API.G_MISS_DATE OR
3756         p_new_end_date    <> FND_API.G_MISS_DATE OR
3757         p_new_group_name  <> FND_API.G_MISS_CHAR) THEN
3758         OPEN  Get_GroupChannelId(p_group_id);
3759         FETCH Get_GroupChannelId Into l_channel_id;
3760         IF (Get_GroupChannelId%FOUND) THEN
3761             CLOSE Get_GroupChannelId;
3762             IF (p_new_start_date  <> FND_API.G_MISS_DATE OR
3763                 p_new_end_date    <> FND_API.G_MISS_DATE) THEN
3764                update amv_c_channels_b set
3765                    EFFECTIVE_START_DATE = DECODE(p_new_start_date,
3766                                                  FND_API.G_MISS_DATE,
3767                                                  EFFECTIVE_START_DATE,
3768                                                  p_new_start_date),
3769                    EXPIRATION_DATE = DECODE(p_new_start_date,
3770                                             FND_API.G_MISS_DATE,
3771                                             EXPIRATION_DATE,
3772                                             p_new_start_date),
3773                    LAST_UPDATE_DATE = sysdate,
3774                    LAST_UPDATED_BY = l_current_user_id,
3775                    LAST_UPDATE_LOGIN = l_current_login_id,
3776                    OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1
3777                where CHANNEL_ID = l_channel_id;
3778             END IF;
3779             IF (p_new_group_name  <> FND_API.G_MISS_CHAR) THEN
3780                update amv_c_channels_tl set
3781                    CHANNEL_NAME = p_new_group_name,
3782                    LAST_UPDATE_DATE = sysdate,
3783                    LAST_UPDATED_BY = l_current_user_id,
3784                    LAST_UPDATE_LOGIN = l_current_login_id,
3785                    SOURCE_LANG = userenv('LANG')
3786                where CHANNEL_ID = l_channel_id
3787                and  userenv('LANG') in (LANGUAGE, SOURCE_LANG);
3788             END IF;
3789         ELSE
3790             CLOSE Get_GroupChannelId;
3791         END IF;
3792     END IF;
3793     IF FND_API.To_Boolean ( p_commit ) THEN
3794         COMMIT WORK;
3795     END IF;
3796     --Standard call to get message count and if count=1, get the message
3797     FND_MSG_PUB.Count_And_Get (
3798        p_encoded => FND_API.G_FALSE,
3799        p_count => x_msg_count,
3800        p_data  => x_msg_data
3801        );
3802 EXCEPTION
3803    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3804        ROLLBACK TO  Update_Group_Pvt;
3805        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3806        -- Standard call to get message count and if count=1, get the message
3807        FND_MSG_PUB.Count_And_Get (
3808           p_encoded => FND_API.G_FALSE,
3809           p_count => x_msg_count,
3810           p_data  => x_msg_data
3811           );
3812    WHEN FND_API.G_EXC_ERROR THEN
3813        ROLLBACK TO  Update_Group_Pvt;
3814        x_return_status := FND_API.G_RET_STS_ERROR;
3815        -- Standard call to get message count and if count=1, get the message
3816        FND_MSG_PUB.Count_And_Get (
3817           p_encoded => FND_API.G_FALSE,
3818           p_count => x_msg_count,
3819           p_data  => x_msg_data
3820           );
3821    WHEN OTHERS THEN
3822        ROLLBACK TO  Update_Group_Pvt;
3823        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3824        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3825           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3826        END IF;
3827        -- Standard call to get message count and if count=1, get the message
3828        FND_MSG_PUB.Count_And_Get (
3829           p_encoded => FND_API.G_FALSE,
3830           p_count => x_msg_count,
3831           p_data  => x_msg_data
3832           );
3833 END Update_Group;
3834 --------------------------------------------------------------------------------
3835 PROCEDURE Delete_Group
3836 (
3837     p_api_version         IN  NUMBER,
3838     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
3839     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
3840     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
3841     x_return_status       OUT NOCOPY VARCHAR2,
3842     x_msg_count           OUT NOCOPY NUMBER,
3843     x_msg_data            OUT NOCOPY VARCHAR2,
3844     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
3845     p_group_id            IN  NUMBER   := FND_API.G_MISS_NUM,
3846     p_group_name          IN  VARCHAR2 := FND_API.G_MISS_CHAR
3847 )  AS
3848 l_api_name             CONSTANT VARCHAR2(30) := 'Delete_Group';
3849 l_api_version          CONSTANT NUMBER := 1.0;
3850 l_current_user_id      NUMBER;
3851 l_current_login_id     NUMBER;
3852 l_current_resource_id  NUMBER;
3853 l_current_user_status  VARCHAR2(30);
3854 --
3855 l_admin_flag           VARCHAR2(1);
3856 l_group_id             NUMBER;
3857 l_channel_id		   NUMBER;
3858 --
3859 CURSOR Get_GroupID_csr(p_name IN VARCHAR2) IS
3860 Select group_id
3861 From jtf_rs_groups_vl
3862 Where group_name = p_name
3863 ;
3864 CURSOR Get_ChannelID_csr(p_grp_id IN NUMBER) IS
3865  SELECT CHANNEL_ID
3866  FROM AMV_C_CHANNELS_TL
3867  WHERE LANGUAGE = userenv('LANG') and
3868 	  CHANNEL_NAME = (select group_name from
3869  jtf_rs_groups_tl where group_id = p_grp_id and language = userenv('LANG'));
3870 
3871 --
3872 BEGIN
3873     SAVEPOINT Delete_Group_Pvt;
3874     IF NOT FND_API.Compatible_API_Call (
3875          l_api_version,
3876          p_api_version,
3877          l_api_name,
3878          G_PKG_NAME) THEN
3879         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3880     END IF;
3881     --Initialize message list if p_init_msg_list is TRUE.
3882     IF FND_API.To_Boolean (p_init_msg_list) THEN
3883        FND_MSG_PUB.initialize;
3884     END IF;
3885 
3886     -- Initialize API return status to success
3887     x_return_status := FND_API.G_RET_STS_SUCCESS;
3888     -- Check if the group id is valid
3889     IF (p_group_id IS NOT NULL AND p_group_id <> FND_API.G_MISS_NUM) THEN
3890         IF (AMV_UTILITY_PVT.IS_GROUPIDVALID(p_group_id) <> TRUE) THEN
3891            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3892                FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_ID');
3893                FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_group_id, -1) ) );
3894                FND_MSG_PUB.Add;
3895            END IF;
3896            RAISE  FND_API.G_EXC_ERROR;
3897         ELSE
3898            l_group_id := p_group_id;
3899         END IF;
3900     ELSIF (p_group_name IS NOT NULL AND
3901            p_group_name <> FND_API.G_MISS_CHAR) THEN
3902         -- Check if the group name is valid
3903         OPEN  Get_GroupID_csr(p_group_name);
3904         FETCH Get_GroupID_csr INTO l_group_id;
3905         IF (Get_GroupID_csr%NOTFOUND) THEN
3906            CLOSE Get_GroupID_csr;
3907            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3908                FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_NAME');
3909                FND_MESSAGE.Set_Token('NAME', p_group_name );
3910                FND_MSG_PUB.Add;
3911            END IF;
3912            RAISE  FND_API.G_EXC_ERROR;
3913         ELSE
3914            CLOSE Get_GroupID_csr;
3915         END IF;
3916     ELSE
3917        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3918            FND_MESSAGE.Set_name('AMV','AMV_NO_GROUP_NAME_OR_ID');
3919            FND_MSG_PUB.Add;
3920        END IF;
3921        RAISE  FND_API.G_EXC_ERROR;
3922     END IF;
3923     --Now do the job.
3924     Delete from amv_u_access
3925     Where user_or_group_id = l_group_id
3926     And   User_OR_group_type = G_GROUP_ARC_TYPE;
3927     --
3928     Delete from amv_u_my_channels
3929     Where user_or_group_id = l_group_id
3930     And   User_OR_group_type = G_GROUP_ARC_TYPE;
3931 
3932          -- Remove channel from channels
3933      OPEN  Get_ChannelID_csr(l_group_id);
3934 
3935 	FETCH Get_ChannelID_csr INTO l_channel_id;
3936 	   IF (Get_ChannelID_csr%NOTFOUND) THEN
3937 		 raise no_data_found;
3938 	      CLOSE Get_ChannelID_csr;
3939 	   ELSE
3940            AMV_C_CHANNELS_PKG.DELETE_ROW(l_channel_id);
3941            CLOSE Get_ChannelID_csr;
3942 	   END IF;
3943 
3944     Update_Group
3945       (
3946          p_api_version         => p_api_version,
3947          p_init_msg_list       => p_init_msg_list,
3948          p_commit              => p_commit,
3949          p_validation_level    => p_validation_level,
3950          x_return_status       => x_return_status,
3951          x_msg_count           => x_msg_count,
3952          x_msg_data            => x_msg_data,
3953          p_check_login_user    => p_check_login_user,
3954          p_group_id            => l_group_id,
3955          p_new_group_name      => FND_API.G_MISS_CHAR,
3956          p_new_group_desc      => FND_API.G_MISS_CHAR,
3957          p_email_address       => FND_API.G_MISS_CHAR,
3958          p_new_start_date      => sysdate -2,
3959          p_new_end_date        => sysdate -1
3960       );
3961     --Standard call to get message count and if count=1, get the message
3962     FND_MSG_PUB.Count_And_Get (
3963        p_encoded => FND_API.G_FALSE,
3964        p_count => x_msg_count,
3965        p_data  => x_msg_data
3966        );
3967 EXCEPTION
3968    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3969        ROLLBACK TO  Delete_Group_Pvt;
3970        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3971        -- Standard call to get message count and if count=1, get the message
3972        FND_MSG_PUB.Count_And_Get (
3973           p_encoded => FND_API.G_FALSE,
3974           p_count => x_msg_count,
3975           p_data  => x_msg_data
3976           );
3977    WHEN FND_API.G_EXC_ERROR THEN
3978        ROLLBACK TO  Delete_Group_Pvt;
3979        x_return_status := FND_API.G_RET_STS_ERROR;
3980        -- Standard call to get message count and if count=1, get the message
3981        FND_MSG_PUB.Count_And_Get (
3982           p_encoded => FND_API.G_FALSE,
3983           p_count => x_msg_count,
3984           p_data  => x_msg_data
3985           );
3986    WHEN OTHERS THEN
3987        ROLLBACK TO  Delete_Group_Pvt;
3988        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3989        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3990           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
3991        END IF;
3992        -- Standard call to get message count and if count=1, get the message
3993        FND_MSG_PUB.Count_And_Get (
3994           p_encoded => FND_API.G_FALSE,
3995           p_count => x_msg_count,
3996           p_data  => x_msg_data
3997           );
3998 END Delete_Group;
3999 --------------------------------------------------------------------------------
4000 PROCEDURE Get_Group
4001 (
4002     p_api_version         IN  NUMBER,
4003     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
4004     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
4005     x_return_status       OUT NOCOPY VARCHAR2,
4006     x_msg_count           OUT NOCOPY NUMBER,
4007     x_msg_data            OUT NOCOPY VARCHAR2,
4008     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
4009     p_group_id            IN  NUMBER,
4010     x_group_obj           OUT NOCOPY AMV_GROUP_OBJ_TYPE
4011 )  AS
4012 l_api_name             CONSTANT VARCHAR2(30) := 'Get_GROUP';
4013 l_api_version          CONSTANT NUMBER := 1.0;
4014 l_current_user_id      NUMBER;
4015 l_current_login_id     NUMBER;
4016 l_current_resource_id  NUMBER;
4017 l_current_user_status  VARCHAR2(30);
4018 --
4019 CURSOR Get_GroupObj_csr IS
4020 Select
4021     group_id,
4022     group_name,
4023     object_version_number,
4024     email_address,
4025     group_desc,
4026     start_date_active,
4027     end_date_active
4028 From  jtf_rs_groups_vl
4029 Where group_id = p_group_id
4030 ;
4031 --
4032 l_group_info   Get_GroupObj_csr%ROWTYPE;
4033 BEGIN
4034     -- Standard call to check for call compatibility.
4035     IF NOT FND_API.Compatible_API_Call (
4036          l_api_version,
4037          p_api_version,
4038          l_api_name,
4039          G_PKG_NAME) THEN
4040         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4041     END IF;
4042     --Initialize message list if p_init_msg_list is TRUE.
4043     IF FND_API.To_Boolean (p_init_msg_list) THEN
4044        FND_MSG_PUB.initialize;
4045     END IF;
4046     -- Initialize API return status to success
4047     x_return_status := FND_API.G_RET_STS_SUCCESS;
4048     -- Get the current (login) user id.
4049     AMV_UTILITY_PVT.Get_UserInfo(
4050        x_user_id     => l_current_user_id,
4051        x_login_id    => l_current_login_id,
4052        x_resource_id => l_current_resource_id,
4053        x_user_status => l_current_user_status
4054        );
4055     IF (p_check_login_user = FND_API.G_TRUE) THEN
4056        -- Check if user is login and has the required privilege.
4057        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4058           -- User is not login.
4059           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4060               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
4061               FND_MSG_PUB.Add;
4062           END IF;
4063           RAISE  FND_API.G_EXC_ERROR;
4064        END IF;
4065     END IF;
4066     -- This is to make database happy
4067     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4068         l_current_login_id := -1;
4069         l_current_user_id  := -1;
4070     END IF;
4071     --
4072     OPEN  Get_GroupObj_csr;
4073     FETCH Get_GroupObj_csr INTO l_group_info;
4074     IF (Get_GroupObj_csr%FOUND) THEN
4075         CLOSE Get_GroupObj_csr;
4076 
4077         x_group_obj.group_id := l_group_info.group_id;
4078         x_group_obj.group_name := l_group_info.group_name;
4079         x_group_obj.object_version_number := l_group_info.object_version_number;
4080         x_group_obj.email_address := l_group_info.email_address;
4081         x_group_obj.description := l_group_info.group_desc;
4082         x_group_obj.effective_start_date := l_group_info.start_date_active;
4083         x_group_obj.expiration_date := l_group_info.end_date_active;
4084 
4085 /*
4086         x_group_obj :=  AMV_GROUP_OBJ_TYPE
4087                         (
4088                            l_group_info.group_id,
4089                            l_group_info.group_name,
4090                            l_group_info.object_version_number,
4091                            l_group_info.email_address,
4092                            l_group_info.group_desc,
4093                            l_group_info.start_date_active,
4094                            l_group_info.end_date_active
4095                         );
4096 */
4097     ELSE
4098         CLOSE Get_GroupObj_csr;
4099         RAISE  FND_API.G_EXC_ERROR;
4100     END IF;
4101     --Standard call to get message count and if count=1, get the message
4102     FND_MSG_PUB.Count_And_Get (
4103        p_encoded => FND_API.G_FALSE,
4104        p_count => x_msg_count,
4105        p_data  => x_msg_data
4106        );
4107 EXCEPTION
4108    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4109        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4110        -- Standard call to get message count and if count=1, get the message
4111        FND_MSG_PUB.Count_And_Get (
4112           p_encoded => FND_API.G_FALSE,
4113           p_count => x_msg_count,
4114           p_data  => x_msg_data
4115           );
4116    WHEN FND_API.G_EXC_ERROR THEN
4117        x_return_status := FND_API.G_RET_STS_ERROR;
4118        -- Standard call to get message count and if count=1, get the message
4119        FND_MSG_PUB.Count_And_Get (
4120           p_encoded => FND_API.G_FALSE,
4121           p_count => x_msg_count,
4122           p_data  => x_msg_data
4123           );
4124    WHEN OTHERS THEN
4125        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4126        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4127           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
4128        END IF;
4129        -- Standard call to get message count and if count=1, get the message
4130        FND_MSG_PUB.Count_And_Get (
4131           p_encoded => FND_API.G_FALSE,
4132           p_count => x_msg_count,
4133           p_data  => x_msg_data
4134           );
4135 END Get_Group;
4136 --------------------------------------------------------------------------------
4137 PROCEDURE Find_Group
4138 (
4139     p_api_version         IN  NUMBER,
4140     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
4141     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
4142     x_return_status       OUT NOCOPY VARCHAR2,
4143     x_msg_count           OUT NOCOPY NUMBER,
4144     x_msg_data            OUT NOCOPY VARCHAR2,
4145     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
4146     p_resource_id         IN  NUMBER   := FND_API.G_MISS_NUM,
4147     p_group_name          IN  VARCHAR2 := FND_API.G_MISS_CHAR,
4148     p_group_desc          IN  VARCHAR2 := FND_API.G_MISS_CHAR,
4149     p_group_email         IN  VARCHAR2 := FND_API.G_MISS_CHAR,
4150     p_group_usage         IN  VARCHAR2,
4151     p_subset_request_obj  IN  AMV_REQUEST_OBJ_TYPE,
4152     x_subset_return_obj   OUT NOCOPY AMV_RETURN_OBJ_TYPE,
4153     x_group_obj_array     OUT NOCOPY AMV_GROUP_OBJ_VARRAY
4154 )  AS
4155 l_api_name             CONSTANT VARCHAR2(30) := 'Find_Group';
4156 l_api_version          CONSTANT NUMBER := 1.0;
4157 l_current_user_id      NUMBER;
4158 l_current_login_id     NUMBER;
4159 l_current_resource_id  NUMBER;
4160 l_current_user_status  VARCHAR2(30);
4161 --
4162 l_cursor             CursorType;
4163 l_sql_statement      VARCHAR2(2000);
4164 l_sql_statement2     VARCHAR2(2000);
4165 l_where_clause       VARCHAR2(2000);
4166 l_total_count        NUMBER := 1;
4167 l_fetch_count        NUMBER := 0;
4168 l_start_with         NUMBER;
4169 l_total_record_count NUMBER;
4170 --
4171 l_group_id           NUMBER;
4172 l_group_name         VARCHAR2(80);
4173 l_group_version      NUMBER;
4174 l_group_email_addr   VARCHAR2(240);
4175 l_group_desc         VARCHAR2(2000);
4176 l_start_date         DATE;
4177 l_end_date           DATE;
4178 --
4179 BEGIN
4180     -- Standard call to check for call compatibility.
4181     IF NOT FND_API.Compatible_API_Call (
4182          l_api_version,
4183          p_api_version,
4184          l_api_name,
4185          G_PKG_NAME) THEN
4186         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4187     END IF;
4188     --Initialize message list if p_init_msg_list is TRUE.
4189     IF FND_API.To_Boolean (p_init_msg_list) THEN
4190        FND_MSG_PUB.initialize;
4191     END IF;
4192     -- Initialize API return status to success
4193     x_return_status := FND_API.G_RET_STS_SUCCESS;
4194     -- Get the current (login) user id.
4195     AMV_UTILITY_PVT.Get_UserInfo(
4196        x_user_id     => l_current_user_id,
4197        x_login_id    => l_current_login_id,
4198        x_resource_id => l_current_resource_id,
4199        x_user_status => l_current_user_status
4200        );
4201     IF (p_check_login_user = FND_API.G_TRUE) THEN
4202        -- Check if user is login and has the required privilege.
4203        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4204           -- User is not login.
4205           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4206               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
4207               FND_MSG_PUB.Add;
4208           END IF;
4209           RAISE  FND_API.G_EXC_ERROR;
4210        END IF;
4211     END IF;
4212     -- This is to make database happy
4213     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4214         l_current_login_id := -1;
4215         l_current_user_id  := -1;
4216     END IF;
4217     --
4218     -- Now create SQL statement and find the results:
4219     IF (p_resource_id IS NULL OR p_resource_id = FND_API.G_MISS_NUM) THEN
4220         l_sql_statement :=
4221            'Select ' ||
4222                'g.group_id, ' ||
4223                'g.group_name, ' ||
4224                'g.object_version_number, ' ||
4225                'g.email_address, ' ||
4226                'g.group_desc, ' ||
4227                'g.start_date_active, ' ||
4228                'g.end_date_active ' ||
4229                'From  jtf_rs_groups_vl g, jtf_rs_group_usages usg ';
4230         l_sql_statement2 :=
4231            'Select count(*) ' ||
4232                'From  jtf_rs_groups_vl g, jtf_rs_group_usages usg ';
4233         l_where_clause := 'Where g.start_date_active < sysdate  ' ||
4234                           'And nvl(g.end_date_active, sysdate+1) > sysdate ' ||
4235                           'And usg.group_id = g.group_id ' ||
4236                           'And usg.usage =  ''' || p_group_usage || ''' ';
4237     ELSE
4238         l_sql_statement :=
4239            'Select ' ||
4240                'g.group_id, ' ||
4241                'g.group_name, ' ||
4242                'g.object_version_number, ' ||
4243                'g.email_address, ' ||
4244                'g.group_desc, ' ||
4245                'g.start_date_active, ' ||
4246                'g.end_date_active ' ||
4247                'From  jtf_rs_groups_vl g, jtf_rs_group_members m, ' ||
4248                '      jtf_rs_group_usages usg ';
4249         l_sql_statement2 :=
4250            'Select count(*) ' ||
4251                'From  jtf_rs_groups_vl g, jtf_rs_group_members m, ' ||
4252                '      jtf_rs_group_usages usg ';
4253         l_where_clause := 'Where g.group_id = m.group_id ' ||
4254                           'And m.delete_flag <> ''Y'' ' ||
4255                           'And m.resource_id = ' || p_resource_id || ' ' ||
4256                           'And g.start_date_active < sysdate  ' ||
4257                           'And nvl(g.end_date_active, sysdate+1) > sysdate ' ||
4258                           'And usg.group_id = g.group_id ' ||
4259                           'And usg.usage = ''' || p_group_usage || ''' ';
4260     END IF;
4261     IF (p_group_name IS NOT NULL AND
4262         p_group_name <> FND_API.G_MISS_CHAR) THEN
4263         l_where_clause := l_where_clause ||
4264              'And g.group_name like ''' || p_group_name || ''' ';
4265     END IF;
4266     IF (p_group_desc IS NOT NULL AND
4267         p_group_desc <> FND_API.G_MISS_CHAR) THEN
4268         l_where_clause := l_where_clause ||
4269              'And g.group_desc Like ''' || p_group_desc || ''' ';
4270     END IF;
4271     IF (p_group_email IS NOT NULL AND
4272         p_group_email <> FND_API.G_MISS_CHAR) THEN
4273         l_where_clause := l_where_clause ||
4274              'And g.email_address Like ''' || p_group_email || ''' ';
4275     END IF;
4276     l_sql_statement := l_sql_statement ||
4277          l_where_clause || 'ORDER BY g.group_name ';
4278     l_sql_statement2 := l_sql_statement2 ||
4279          l_where_clause;
4280     IF (G_DEBUG = TRUE) THEN
4281          AMV_UTILITY_PVT.PRINT_DEBUG_MESSAGE(l_sql_statement);
4282     END IF;
4283     --Execute the SQL statements to get the total count:
4284     IF (p_subset_request_obj.return_total_count_flag = FND_API.G_TRUE) THEN
4285         OPEN  l_cursor FOR l_sql_statement2;
4286         FETCH l_cursor INTO l_total_record_count;
4287         CLOSE l_cursor;
4288     END IF;
4289     --Execute the SQL statements to get records
4290     l_start_with := p_subset_request_obj.start_record_position;
4291     x_group_obj_array := AMV_GROUP_OBJ_VARRAY();
4292     OPEN l_cursor FOR l_sql_statement;
4293     LOOP
4294        FETCH l_cursor INTO
4295            l_group_id,
4296            l_group_name,
4297            l_group_version,
4298            l_group_email_addr,
4299            l_group_desc,
4300            l_start_date,
4301            l_end_date;
4302        EXIT WHEN l_cursor%NOTFOUND;
4303        IF (l_start_with <= l_total_count AND
4304            l_fetch_count < p_subset_request_obj.records_requested) THEN
4305           l_fetch_count := l_fetch_count + 1;
4306           x_group_obj_array.extend;
4307           x_group_obj_array(l_fetch_count).group_id := l_group_id;
4308           x_group_obj_array(l_fetch_count).group_name := l_group_name;
4309           x_group_obj_array(l_fetch_count).object_version_number := l_group_version;
4310           x_group_obj_array(l_fetch_count).email_address := l_group_email_addr;
4311           x_group_obj_array(l_fetch_count).description := l_group_desc;
4312           x_group_obj_array(l_fetch_count).effective_start_date := l_start_date;
4313           x_group_obj_array(l_fetch_count).expiration_date := l_end_date;
4314 
4315 /*
4316           x_group_obj_array(l_fetch_count) :=
4317             AMV_GROUP_OBJ_TYPE
4318             (
4319                l_group_id,
4320                l_group_name,
4321                l_group_version,
4322                l_group_email_addr,
4323                l_group_desc,
4324                l_start_date,
4325                l_end_date
4326             );
4327 */
4328        END IF;
4329        IF (l_fetch_count >= p_subset_request_obj.records_requested) THEN
4330           exit;
4331        END IF;
4332        l_total_count := l_total_count + 1;
4333     END LOOP;
4334     CLOSE l_cursor;
4335 
4336     x_subset_return_obj.returned_record_count := l_fetch_count;
4337     x_subset_return_obj.next_record_position := p_subset_request_obj.start_record_position + l_fetch_count;
4338     x_subset_return_obj.total_record_count := l_total_record_count;
4339 
4340 /*
4341     x_subset_return_obj := AMV_RETURN_OBJ_TYPE
4342       (
4343          l_fetch_count,
4344          p_subset_request_obj.start_record_position + l_fetch_count,
4345          l_total_record_count
4346       );
4347 */
4348     --Standard call to get message count and if count=1, get the message
4349     FND_MSG_PUB.Count_And_Get (
4350        p_encoded => FND_API.G_FALSE,
4351        p_count => x_msg_count,
4352        p_data  => x_msg_data
4353        );
4354 EXCEPTION
4355    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4356        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4357        -- Standard call to get message count and if count=1, get the message
4358        FND_MSG_PUB.Count_And_Get (
4359           p_encoded => FND_API.G_FALSE,
4360           p_count => x_msg_count,
4361           p_data  => x_msg_data
4362           );
4363    WHEN FND_API.G_EXC_ERROR THEN
4364        x_return_status := FND_API.G_RET_STS_ERROR;
4365        -- Standard call to get message count and if count=1, get the message
4366        FND_MSG_PUB.Count_And_Get (
4367           p_encoded => FND_API.G_FALSE,
4368           p_count => x_msg_count,
4369           p_data  => x_msg_data
4370           );
4371    WHEN OTHERS THEN
4372        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4373        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4374           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
4375        END IF;
4376        -- Standard call to get message count and if count=1, get the message
4377        FND_MSG_PUB.Count_And_Get (
4378           p_encoded => FND_API.G_FALSE,
4379           p_count => x_msg_count,
4380           p_data  => x_msg_data
4381           );
4382 END Find_Group;
4383 --------------------------------------------------------------------------------
4384 PROCEDURE Find_Group
4385 (
4386     p_api_version         IN  NUMBER,
4387     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
4388     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
4389     x_return_status       OUT NOCOPY VARCHAR2,
4390     x_msg_count           OUT NOCOPY NUMBER,
4391     x_msg_data            OUT NOCOPY VARCHAR2,
4392     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
4393     p_group_id            IN  NUMBER   := FND_API.G_MISS_NUM,
4394     p_group_name          IN  VARCHAR2 := FND_API.G_MISS_CHAR,
4395     p_group_usage         IN VARCHAR2,
4396     p_subset_request_obj  IN  AMV_REQUEST_OBJ_TYPE,
4397     x_subset_return_obj   OUT NOCOPY AMV_RETURN_OBJ_TYPE,
4398     x_group_obj_array     OUT NOCOPY AMV_GROUP_OBJ_VARRAY,
4399     x_role_code_varray    OUT NOCOPY AMV_CHAR_VARRAY_TYPE
4400 ) AS
4401 l_api_name             CONSTANT VARCHAR2(30) := 'Find_Group';
4402 l_api_version          CONSTANT NUMBER := 1.0;
4403 l_current_user_id      NUMBER;
4404 l_current_login_id     NUMBER;
4405 l_current_resource_id  NUMBER;
4406 l_current_user_status  VARCHAR2(30);
4407 --
4408 l_cursor             CursorType;
4409 l_sql_statement      VARCHAR2(2000);
4410 l_sql_statement2     VARCHAR2(2000);
4411 l_where_clause       VARCHAR2(2000);
4412 l_total_count        NUMBER := 1;
4413 l_fetch_count        NUMBER := 0;
4414 l_start_with         NUMBER;
4415 l_total_record_count NUMBER;
4416 --
4417 l_group_id           NUMBER;
4418 l_group_name         VARCHAR2(80);
4419 l_group_version      NUMBER;
4420 l_group_email_addr   VARCHAR2(240);
4421 l_group_desc         VARCHAR2(2000);
4422 l_start_date         DATE;
4423 l_end_date           DATE;
4424 --
4425 BEGIN
4426     -- Standard call to check for call compatibility.
4427     IF NOT FND_API.Compatible_API_Call (
4428          l_api_version,
4429          p_api_version,
4430          l_api_name,
4431          G_PKG_NAME) THEN
4432         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4433     END IF;
4434     --Initialize message list if p_init_msg_list is TRUE.
4435     IF FND_API.To_Boolean (p_init_msg_list) THEN
4436        FND_MSG_PUB.initialize;
4437     END IF;
4438     -- Initialize API return status to success
4439     x_return_status := FND_API.G_RET_STS_SUCCESS;
4440     -- Get the current (login) user id.
4441     AMV_UTILITY_PVT.Get_UserInfo(
4442        x_user_id     => l_current_user_id,
4443        x_login_id    => l_current_login_id,
4444        x_resource_id => l_current_resource_id,
4445        x_user_status => l_current_user_status
4446        );
4447     IF (p_check_login_user = FND_API.G_TRUE) THEN
4448        -- Check if user is login and has the required privilege.
4449        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4450           -- User is not login.
4451           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4452               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
4453               FND_MSG_PUB.Add;
4454           END IF;
4455           RAISE  FND_API.G_EXC_ERROR;
4456        END IF;
4457     END IF;
4458     -- This is to make database happy
4459     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4460         l_current_login_id := -1;
4461         l_current_user_id  := -1;
4462     END IF;
4463     --
4464     -- Now create SQL statement and find the results:
4465     l_sql_statement :=
4466        'Select ' ||
4467            'g.group_id, ' ||
4468            'g.group_name, ' ||
4469            'g.object_version_number, ' ||
4470            'g.email_address, ' ||
4471            'g.group_desc, ' ||
4472            'g.start_date_active, ' ||
4473            'g.end_date_active ' ||
4474            'From  jtf_rs_groups_vl g, jtf_rs_group_usages usg ';
4475     l_sql_statement2 :=
4476        'Select count(*) ' ||
4477            'From  jtf_rs_groups_vl g, jtf_rs_group_usages usg ';
4478     l_where_clause := 'Where g.start_date_active < sysdate  ' ||
4479                       'And nvl(g.end_date_active, sysdate+1) > sysdate ' ||
4480                       'And usg.group_id = g.group_id ' ||
4481 				  'And usg.usage = ''' || p_group_usage || ''' ';
4482     IF (p_group_id = FND_API.G_MISS_NUM) THEN
4483         l_where_clause := l_where_clause ||
4484              'And g.group_name like ''' || p_group_name || ''' ';
4485     ELSE
4486         l_where_clause := l_where_clause ||
4487              'And g.group_id = ' || p_group_id || ' ';
4488     END IF;
4489     l_sql_statement := l_sql_statement ||
4490          l_where_clause || 'ORDER BY g.group_name ';
4491     l_sql_statement2 := l_sql_statement2 ||
4492          l_where_clause;
4493     IF (G_DEBUG = TRUE) THEN
4494          AMV_UTILITY_PVT.PRINT_DEBUG_MESSAGE(l_sql_statement);
4495     END IF;
4496     --Execute the SQL statements to get the total count:
4497     IF (p_subset_request_obj.return_total_count_flag = FND_API.G_TRUE) THEN
4498         OPEN  l_cursor FOR l_sql_statement2;
4499         FETCH l_cursor INTO l_total_record_count;
4500         CLOSE l_cursor;
4501     END IF;
4502     --Execute the SQL statements to get records
4503     l_start_with := p_subset_request_obj.start_record_position;
4504     x_group_obj_array := AMV_GROUP_OBJ_VARRAY();
4505     x_role_code_varray := AMV_CHAR_VARRAY_TYPE();
4506     OPEN l_cursor FOR l_sql_statement;
4507     LOOP
4508        FETCH l_cursor INTO
4509            l_group_id,
4510            l_group_name,
4511            l_group_version,
4512            l_group_email_addr,
4513            l_group_desc,
4514            l_start_date,
4515            l_end_date;
4516        EXIT WHEN l_cursor%NOTFOUND;
4517        IF (l_start_with <= l_total_count AND
4518            l_fetch_count < p_subset_request_obj.records_requested) THEN
4519           l_fetch_count := l_fetch_count + 1;
4520           x_group_obj_array.extend;
4521           x_group_obj_array(l_fetch_count).group_id := l_group_id;
4522           x_group_obj_array(l_fetch_count).group_name := l_group_name;
4523           x_group_obj_array(l_fetch_count).object_version_number := l_group_version;
4524           x_group_obj_array(l_fetch_count).email_address := l_group_email_addr;
4525           x_group_obj_array(l_fetch_count).description := l_group_desc;
4526           x_group_obj_array(l_fetch_count).effective_start_date := l_start_date;
4527           x_group_obj_array(l_fetch_count).expiration_date := l_end_date;
4528 
4529 /*
4530           x_group_obj_array(l_fetch_count) :=
4531             AMV_GROUP_OBJ_TYPE
4532             (
4533                l_group_id,
4534                l_group_name,
4535                l_group_version,
4536                l_group_email_addr,
4537                l_group_desc,
4538                l_start_date,
4539                l_end_date
4540             );
4541 */
4542 
4543           --Get group roles:
4544           x_role_code_varray.extend;
4545           x_role_code_varray(l_fetch_count) :=
4546               Get_Role(l_group_id, G_GROUP_ROLE_CODE);
4547        END IF;
4548        IF (l_fetch_count >= p_subset_request_obj.records_requested) THEN
4549           exit;
4550        END IF;
4551        l_total_count := l_total_count + 1;
4552     END LOOP;
4553     CLOSE l_cursor;
4554     x_subset_return_obj.returned_record_count := l_fetch_count;
4555     x_subset_return_obj.next_record_position := p_subset_request_obj.start_record_position + l_fetch_count;
4556     x_subset_return_obj.total_record_count := l_total_record_count;
4557 
4558 /*
4559     x_subset_return_obj := AMV_RETURN_OBJ_TYPE
4560       (
4561          l_fetch_count,
4562          p_subset_request_obj.start_record_position + l_fetch_count,
4563          l_total_record_count
4564       );
4565 */
4566     --Standard call to get message count and if count=1, get the message
4567     FND_MSG_PUB.Count_And_Get (
4568        p_encoded => FND_API.G_FALSE,
4569        p_count => x_msg_count,
4570        p_data  => x_msg_data
4571        );
4572 EXCEPTION
4573    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4574        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4575        -- Standard call to get message count and if count=1, get the message
4576        FND_MSG_PUB.Count_And_Get (
4577           p_encoded => FND_API.G_FALSE,
4578           p_count => x_msg_count,
4579           p_data  => x_msg_data
4580           );
4581    WHEN FND_API.G_EXC_ERROR THEN
4582        x_return_status := FND_API.G_RET_STS_ERROR;
4583        -- Standard call to get message count and if count=1, get the message
4584        FND_MSG_PUB.Count_And_Get (
4585           p_encoded => FND_API.G_FALSE,
4586           p_count => x_msg_count,
4587           p_data  => x_msg_data
4588           );
4589    WHEN OTHERS THEN
4590        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4591        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4592           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
4593        END IF;
4594        -- Standard call to get message count and if count=1, get the message
4595        FND_MSG_PUB.Count_And_Get (
4596           p_encoded => FND_API.G_FALSE,
4597           p_count => x_msg_count,
4598           p_data  => x_msg_data
4599           );
4600 END Find_Group;
4601 --------------------------------------------------------------------------------
4602 --------------------------- GROUP MEMBERSHIP  ----------------------------------
4603 --------------------------------------------------------------------------------
4604 PROCEDURE Add_GroupMember
4605 (
4606     p_api_version         IN  NUMBER,
4607     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
4608     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
4609     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
4610     x_return_status       OUT NOCOPY VARCHAR2,
4611     x_msg_count           OUT NOCOPY NUMBER,
4612     x_msg_data            OUT NOCOPY VARCHAR2,
4613     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
4614     p_group_id            IN  NUMBER,
4615     p_resource_id         IN  NUMBER
4616 )  AS
4617 l_api_name             CONSTANT VARCHAR2(30) := 'Add_GroupMember';
4618 l_api_version          CONSTANT NUMBER := 1.0;
4619 l_current_user_id      NUMBER;
4620 l_current_login_id     NUMBER;
4621 l_current_resource_id  NUMBER;
4622 l_current_user_status  VARCHAR2(30);
4623 --
4624 l_admin_flag           VARCHAR2(1);
4625 l_temp                 NUMBER;
4626 --
4627 CURSOR  Check_GroupMember_csr IS
4628 Select group_member_id
4629 From jtf_rs_group_members
4630 Where resource_id = p_resource_id
4631 And   group_id = p_group_id
4632 And   delete_flag <> 'Y';
4633 --
4634 --
4635 BEGIN
4636     -- Standard call to check for call compatibility.
4637     SAVEPOINT  Add_GroupMember_Pvt;
4638     IF NOT FND_API.Compatible_API_Call (
4639          l_api_version,
4640          p_api_version,
4641          l_api_name,
4642          G_PKG_NAME) THEN
4643         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4644     END IF;
4645     --Initialize message list if p_init_msg_list is TRUE.
4646     IF FND_API.To_Boolean (p_init_msg_list) THEN
4647        FND_MSG_PUB.initialize;
4648     END IF;
4649     -- Initialize API return status to success
4650     x_return_status := FND_API.G_RET_STS_SUCCESS;
4651     -- Get the current (login) user id.
4652     AMV_UTILITY_PVT.Get_UserInfo(
4653        x_user_id     => l_current_user_id,
4654        x_login_id    => l_current_login_id,
4655        x_resource_id => l_current_resource_id,
4656        x_user_status => l_current_user_status
4657        );
4658     IF (p_check_login_user = FND_API.G_TRUE) THEN
4659        -- Check if user is login and has the required privilege.
4660        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4661           -- User is not login.
4662           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4663               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
4664               FND_MSG_PUB.Add;
4665           END IF;
4666           RAISE  FND_API.G_EXC_ERROR;
4667        END IF;
4668        AMV_USER_PVT.Is_Administrator
4669        (
4670            p_api_version         => 1.0,
4671            x_return_status       => x_return_status,
4672            x_msg_count           => x_msg_count,
4673            x_msg_data            => x_msg_data,
4674            p_check_login_user    => FND_API.G_FALSE,
4675            p_resource_id         => l_current_resource_id,
4676            x_result_flag         => l_admin_flag
4677        );
4678        IF (l_admin_flag <> FND_API.G_TRUE) THEN
4679           -- User is not an administrator.
4680           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4681               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
4682               FND_MSG_PUB.Add;
4683           END IF;
4684           RAISE  FND_API.G_EXC_ERROR;
4685        END IF;
4686     END IF;
4687     -- This is to make database happy
4688     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4689         l_current_login_id := -1;
4690         l_current_user_id  := -1;
4691     END IF;
4692     -- Check if the group id is valid
4693     IF (AMV_UTILITY_PVT.IS_GROUPIDVALID(p_group_id) <> TRUE) THEN
4694        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4695            FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_ID');
4696            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_group_id, -1) ) );
4697            FND_MSG_PUB.Add;
4698        END IF;
4699        RAISE  FND_API.G_EXC_ERROR;
4700     END IF;
4701      -- Check if the resource id is valid
4702     IF (AMV_UTILITY_PVT.IS_RESOURCEIDVALID(p_resource_id) <> TRUE) THEN
4703        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4704            FND_MESSAGE.Set_name('AMV','AMV_INVALID_RESOURCE_ID');
4705            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_resource_id, -1) ) );
4706            FND_MSG_PUB.Add;
4707        END IF;
4708        RAISE  FND_API.G_EXC_ERROR;
4709     END IF;
4710     --
4711     OPEN  Check_GroupMember_csr;
4712     FETCH  Check_GroupMember_csr INTO l_temp;
4713     IF (Check_GroupMember_csr%NOTFOUND) THEN
4714        CLOSE Check_GroupMember_csr;
4715        jtf_rs_group_members_pub.create_resource_group_members
4716        (
4717           p_api_version        => 1.0,
4718           p_commit             => p_commit,
4719           p_group_id           => p_group_id,
4720           p_group_number       => null,
4721           p_resource_id        => p_resource_id,
4722           p_resource_number    => null,
4723           x_return_status      => x_return_status,
4724           x_msg_count          => x_msg_count,
4725           x_msg_data           => x_msg_data,
4726           x_group_member_id    => l_temp
4727        );
4728     ELSE
4729         CLOSE Check_groupMember_csr;
4730     END IF;
4731     --Standard call to get message count and if count=1, get the message
4732     FND_MSG_PUB.Count_And_Get (
4733        p_encoded => FND_API.G_FALSE,
4734        p_count => x_msg_count,
4735        p_data  => x_msg_data
4736        );
4737 EXCEPTION
4738    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4739        ROLLBACK TO  Add_groupMember_Pvt;
4740        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4741        -- Standard call to get message count and if count=1, get the message
4742        FND_MSG_PUB.Count_And_Get (
4743           p_encoded => FND_API.G_FALSE,
4744           p_count => x_msg_count,
4745           p_data  => x_msg_data
4746           );
4747    WHEN FND_API.G_EXC_ERROR THEN
4748        ROLLBACK TO  Add_groupMember_Pvt;
4749        x_return_status := FND_API.G_RET_STS_ERROR;
4750        -- Standard call to get message count and if count=1, get the message
4751        FND_MSG_PUB.Count_And_Get (
4752           p_encoded => FND_API.G_FALSE,
4753           p_count => x_msg_count,
4754           p_data  => x_msg_data
4755           );
4756    WHEN OTHERS THEN
4757        ROLLBACK TO  Add_groupMember_Pvt;
4758        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4759        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4760           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
4761        END IF;
4762        -- Standard call to get message count and if count=1, get the message
4763        FND_MSG_PUB.Count_And_Get (
4764           p_encoded => FND_API.G_FALSE,
4765           p_count => x_msg_count,
4766           p_data  => x_msg_data
4767           );
4768 END Add_groupMember;
4769 --------------------------------------------------------------------------------
4770 PROCEDURE Add_GroupMember
4771 (
4772     p_api_version         IN  NUMBER,
4773     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
4774     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
4775     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
4776     x_return_status       OUT NOCOPY VARCHAR2,
4777     x_msg_count           OUT NOCOPY NUMBER,
4778     x_msg_data            OUT NOCOPY VARCHAR2,
4779     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
4780     p_group_id            IN  NUMBER,
4781     p_resource_id_varray  IN  AMV_NUMBER_VARRAY_TYPE
4782 )  AS
4783 l_api_name             CONSTANT VARCHAR2(30) := 'Add_GroupMember';
4784 l_api_version          CONSTANT NUMBER := 1.0;
4785 l_current_user_id      NUMBER;
4786 l_current_login_id     NUMBER;
4787 l_current_resource_id  NUMBER;
4788 l_current_user_status  VARCHAR2(30);
4789 --
4790 l_admin_flag           VARCHAR2(1);
4791 l_return_status       VARCHAR2(1);
4792 l_msg_count           NUMBER;
4793 l_msg_data            VARCHAR2(2000);
4794 l_temp                 NUMBER;
4795 --
4796 BEGIN
4797     -- Standard call to check for call compatibility.
4798     SAVEPOINT  Add_GroupMember_Pvt;
4799     IF NOT FND_API.Compatible_API_Call (
4800          l_api_version,
4801          p_api_version,
4802          l_api_name,
4803          G_PKG_NAME) THEN
4804         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4805     END IF;
4806     --Initialize message list if p_init_msg_list is TRUE.
4807     IF FND_API.To_Boolean (p_init_msg_list) THEN
4808        FND_MSG_PUB.initialize;
4809     END IF;
4810     -- Initialize API return status to success
4811     x_return_status := FND_API.G_RET_STS_SUCCESS;
4812     -- Get the current (login) user id.
4813     AMV_UTILITY_PVT.Get_UserInfo(
4814        x_user_id     => l_current_user_id,
4815        x_login_id    => l_current_login_id,
4816        x_resource_id => l_current_resource_id,
4817        x_user_status => l_current_user_status
4818        );
4819     IF (p_check_login_user = FND_API.G_TRUE) THEN
4820        -- Check if user is login and has the required privilege.
4821        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4822           -- User is not login.
4823           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4824               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
4825               FND_MSG_PUB.Add;
4826           END IF;
4827           RAISE  FND_API.G_EXC_ERROR;
4828        END IF;
4829        AMV_USER_PVT.Is_Administrator
4830        (
4831            p_api_version         => 1.0,
4832            x_return_status       => x_return_status,
4833            x_msg_count           => x_msg_count,
4834            x_msg_data            => x_msg_data,
4835            p_check_login_user    => FND_API.G_FALSE,
4836            p_resource_id         => l_current_resource_id,
4837            x_result_flag         => l_admin_flag
4838        );
4839        IF (l_admin_flag <> FND_API.G_TRUE) THEN
4840           -- User is not an administrator.
4841           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4842               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
4843               FND_MSG_PUB.Add;
4844           END IF;
4845           RAISE  FND_API.G_EXC_ERROR;
4846        END IF;
4847     END IF;
4848     -- This is to make database happy
4849     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4850         l_current_login_id := -1;
4851         l_current_user_id  := -1;
4852     END IF;
4853     -- Check if the group id is valid
4854     IF (AMV_UTILITY_PVT.IS_GROUPIDVALID(p_group_id) <> TRUE) THEN
4855        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4856            FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_ID');
4857            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_group_id, -1) ) );
4858            FND_MSG_PUB.Add;
4859        END IF;
4860        RAISE  FND_API.G_EXC_ERROR;
4861     END IF;
4862     FOR i IN 1..p_resource_id_varray.count LOOP
4863         Add_GroupMember
4864           (
4865               p_api_version         => p_api_version,
4866               p_commit              => p_commit,
4867               p_validation_level    => p_validation_level,
4868               x_return_status       => l_return_status,
4869               x_msg_count           => x_msg_count,
4870               x_msg_data            => x_msg_data,
4871               p_check_login_user    => FND_API.G_FALSE,
4872               p_group_id            => p_group_id,
4873               p_resource_id         => p_resource_id_varray(i)
4874           );
4875        IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4876           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4877        ELSIF (l_return_status = FND_API.G_RET_STS_ERROR AND
4878               x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4879           x_return_status := FND_API.G_RET_STS_ERROR;
4880        END IF;
4881     END LOOP;
4882     --Standard call to get message count and if count=1, get the message
4883     FND_MSG_PUB.Count_And_Get (
4884        p_encoded => FND_API.G_FALSE,
4885        p_count => x_msg_count,
4886        p_data  => x_msg_data
4887        );
4888 EXCEPTION
4889    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4890        ROLLBACK TO  Add_groupMember_Pvt;
4891        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4892        -- Standard call to get message count and if count=1, get the message
4893        FND_MSG_PUB.Count_And_Get (
4894           p_encoded => FND_API.G_FALSE,
4895           p_count => x_msg_count,
4896           p_data  => x_msg_data
4897           );
4898    WHEN FND_API.G_EXC_ERROR THEN
4899        ROLLBACK TO  Add_groupMember_Pvt;
4900        x_return_status := FND_API.G_RET_STS_ERROR;
4901        -- Standard call to get message count and if count=1, get the message
4902        FND_MSG_PUB.Count_And_Get (
4903           p_encoded => FND_API.G_FALSE,
4904           p_count => x_msg_count,
4905           p_data  => x_msg_data
4906           );
4907    WHEN OTHERS THEN
4908        ROLLBACK TO  Add_groupMember_Pvt;
4909        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4910        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4911           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
4912        END IF;
4913        -- Standard call to get message count and if count=1, get the message
4914        FND_MSG_PUB.Count_And_Get (
4915           p_encoded => FND_API.G_FALSE,
4916           p_count => x_msg_count,
4917           p_data  => x_msg_data
4918           );
4919 END Add_groupMember;
4920 --------------------------------------------------------------------------------
4921 PROCEDURE Remove_GroupMember
4922 (
4923     p_api_version         IN  NUMBER,
4924     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
4925     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
4926     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
4927     x_return_status       OUT NOCOPY VARCHAR2,
4928     x_msg_count           OUT NOCOPY NUMBER,
4929     x_msg_data            OUT NOCOPY VARCHAR2,
4930     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
4931     p_group_id            IN  NUMBER,
4932     p_resource_id         IN  NUMBER
4933 )  AS
4934 l_api_name             CONSTANT VARCHAR2(30) := 'Remove_GroupMember';
4935 l_api_version          CONSTANT NUMBER := 1.0;
4936 l_current_user_id      NUMBER;
4937 l_current_login_id     NUMBER;
4938 l_current_resource_id  NUMBER;
4939 l_current_user_status  VARCHAR2(30);
4940 --
4941 l_admin_flag           VARCHAR2(1);
4942 l_version              NUMBER;
4943 --
4944 CURSOR  Check_GroupMember_csr IS
4945 Select object_version_number
4946 From jtf_rs_group_members
4947 Where resource_id = p_resource_id
4948 And   group_id = p_group_id
4949 And   delete_flag <> 'Y';
4950 --
4951 BEGIN
4952     -- Standard call to check for call compatibility.
4953     SAVEPOINT  Remove_GroupMember_Pvt;
4954     IF NOT FND_API.Compatible_API_Call (
4955          l_api_version,
4956          p_api_version,
4957          l_api_name,
4958          G_PKG_NAME) THEN
4959         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4960     END IF;
4961     --Initialize message list if p_init_msg_list is TRUE.
4962     IF FND_API.To_Boolean (p_init_msg_list) THEN
4963        FND_MSG_PUB.initialize;
4964     END IF;
4965     -- Initialize API return status to success
4966     x_return_status := FND_API.G_RET_STS_SUCCESS;
4967     -- Get the current (login) user id.
4968     AMV_UTILITY_PVT.Get_UserInfo(
4969        x_user_id     => l_current_user_id,
4970        x_login_id    => l_current_login_id,
4971        x_resource_id => l_current_resource_id,
4972        x_user_status => l_current_user_status
4973        );
4974     IF (p_check_login_user = FND_API.G_TRUE) THEN
4975        -- Check if user is login and has the required privilege.
4976        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
4977           -- User is not login.
4978           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4979               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
4980               FND_MSG_PUB.Add;
4981           END IF;
4982           RAISE  FND_API.G_EXC_ERROR;
4983        END IF;
4984        AMV_USER_PVT.Is_Administrator
4985        (
4986            p_api_version         => 1.0,
4987            x_return_status       => x_return_status,
4988            x_msg_count           => x_msg_count,
4989            x_msg_data            => x_msg_data,
4990            p_check_login_user    => FND_API.G_FALSE,
4991            p_resource_id         => l_current_resource_id,
4992            x_result_flag         => l_admin_flag
4993        );
4994        IF (l_admin_flag <> FND_API.G_TRUE) THEN
4995           -- User is not an administrator.
4996           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4997               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
4998               FND_MSG_PUB.Add;
4999           END IF;
5000           RAISE  FND_API.G_EXC_ERROR;
5001        END IF;
5002     END IF;
5003     -- This is to make database happy
5004     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
5005         l_current_login_id := -1;
5006         l_current_user_id  := -1;
5007     END IF;
5008     OPEN  Check_GroupMember_csr;
5009     FETCH  Check_GroupMember_csr INTO l_version;
5010     IF (Check_GroupMember_csr%FOUND) THEN
5011        CLOSE Check_GroupMember_csr;
5012        jtf_rs_group_members_pub.delete_resource_group_members
5013        (
5014           p_api_version        => 1.0,
5015           p_commit             => p_commit,
5016           p_group_id           => p_group_id,
5017           p_group_number       => null,
5018           p_resource_id        => p_resource_id,
5019           p_resource_number    => null,
5020           p_object_version_num => l_version,
5021           x_return_status      => x_return_status,
5022           x_msg_count          => x_msg_count,
5023           x_msg_data           => x_msg_data
5024        );
5025     ELSE
5026         CLOSE Check_groupMember_csr;
5027     END IF;
5028     --Standard call to get message count and if count=1, get the message
5029     FND_MSG_PUB.Count_And_Get (
5030        p_encoded => FND_API.G_FALSE,
5031        p_count => x_msg_count,
5032        p_data  => x_msg_data
5033        );
5034 EXCEPTION
5035    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5036        ROLLBACK TO  Remove_GroupMember_Pvt;
5037        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5038        -- Standard call to get message count and if count=1, get the message
5039        FND_MSG_PUB.Count_And_Get (
5040           p_encoded => FND_API.G_FALSE,
5041           p_count => x_msg_count,
5042           p_data  => x_msg_data
5043           );
5044    WHEN FND_API.G_EXC_ERROR THEN
5045        ROLLBACK TO  Remove_GroupMember_Pvt;
5046        x_return_status := FND_API.G_RET_STS_ERROR;
5047        -- Standard call to get message count and if count=1, get the message
5048        FND_MSG_PUB.Count_And_Get (
5049           p_encoded => FND_API.G_FALSE,
5050           p_count => x_msg_count,
5051           p_data  => x_msg_data
5052           );
5053    WHEN OTHERS THEN
5054        ROLLBACK TO  Remove_GroupMember_Pvt;
5055        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5056        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5057           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
5058        END IF;
5059        -- Standard call to get message count and if count=1, get the message
5060        FND_MSG_PUB.Count_And_Get (
5061           p_encoded => FND_API.G_FALSE,
5062           p_count => x_msg_count,
5063           p_data  => x_msg_data
5064           );
5065 END Remove_GroupMember;
5066 --------------------------------------------------------------------------------
5067 PROCEDURE Remove_GroupMember
5068 (
5069     p_api_version         IN  NUMBER,
5070     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
5071     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
5072     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
5073     x_return_status       OUT NOCOPY VARCHAR2,
5074     x_msg_count           OUT NOCOPY NUMBER,
5075     x_msg_data            OUT NOCOPY VARCHAR2,
5076     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
5077     p_group_id            IN  NUMBER,
5078     p_resource_id_varray  IN  AMV_NUMBER_VARRAY_TYPE
5079 )  AS
5080 l_api_name             CONSTANT VARCHAR2(30) := 'Remove_GroupMember';
5081 l_api_version          CONSTANT NUMBER := 1.0;
5082 l_current_user_id      NUMBER;
5083 l_current_login_id     NUMBER;
5084 l_current_resource_id  NUMBER;
5085 l_current_user_status  VARCHAR2(30);
5086 --
5087 l_admin_flag           VARCHAR2(1);
5088 l_return_status        VARCHAR2(1);
5089 l_msg_count            NUMBER;
5090 l_msg_data             VARCHAR2(2000);
5091 l_temp                 NUMBER;
5092 l_count                NUMBER;
5093 --
5094 BEGIN
5095     -- Standard call to check for call compatibility.
5096     SAVEPOINT  Remove_GroupMember_Pvt;
5097     IF NOT FND_API.Compatible_API_Call (
5098          l_api_version,
5099          p_api_version,
5100          l_api_name,
5101          G_PKG_NAME) THEN
5102         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5103     END IF;
5104     --Initialize message list if p_init_msg_list is TRUE.
5105     IF FND_API.To_Boolean (p_init_msg_list) THEN
5106        FND_MSG_PUB.initialize;
5107     END IF;
5108     -- Initialize API return status to success
5109     x_return_status := FND_API.G_RET_STS_SUCCESS;
5110     -- Get the current (login) user id.
5111     AMV_UTILITY_PVT.Get_UserInfo(
5112        x_user_id     => l_current_user_id,
5113        x_login_id    => l_current_login_id,
5114        x_resource_id => l_current_resource_id,
5115        x_user_status => l_current_user_status
5116        );
5117     IF (p_check_login_user = FND_API.G_TRUE) THEN
5118        -- Check if user is login and has the required privilege.
5119        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
5120           -- User is not login.
5121           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5122               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
5123               FND_MSG_PUB.Add;
5124           END IF;
5125           RAISE  FND_API.G_EXC_ERROR;
5126        END IF;
5127        AMV_USER_PVT.Is_Administrator
5128        (
5129            p_api_version         => 1.0,
5130            x_return_status       => x_return_status,
5131            x_msg_count           => x_msg_count,
5132            x_msg_data            => x_msg_data,
5133            p_check_login_user    => FND_API.G_FALSE,
5134            p_resource_id         => l_current_resource_id,
5135            x_result_flag         => l_admin_flag
5136        );
5137        IF (l_admin_flag <> FND_API.G_TRUE) THEN
5138           -- User is not an administrator.
5139           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5140               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
5141               FND_MSG_PUB.Add;
5142           END IF;
5143           RAISE  FND_API.G_EXC_ERROR;
5144        END IF;
5145     END IF;
5146     -- This is to make database happy
5147     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
5148         l_current_login_id := -1;
5149         l_current_user_id  := -1;
5150     END IF;
5151     -- Check if the group id is valid
5152     IF (AMV_UTILITY_PVT.IS_GROUPIDVALID(p_group_id) <> TRUE) THEN
5153        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5154            FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_ID');
5155            FND_MESSAGE.Set_Token('ID', TO_CHAR( NVL(p_group_id, -1) ) );
5156            FND_MSG_PUB.Add;
5157        END IF;
5158        RAISE  FND_API.G_EXC_ERROR;
5159     END IF;
5160     IF (p_resource_id_varray IS NULL) THEN
5161         l_count := 0;
5162     ELSE
5163         l_count := p_resource_id_varray.count;
5164     END IF;
5165     FOR i IN 1..l_count LOOP
5166         Remove_GroupMember
5167         (
5168             p_api_version         => p_api_version,
5169             p_commit              => p_commit,
5170             p_validation_level    => p_validation_level,
5171             x_return_status       => l_return_status,
5172             x_msg_count           => x_msg_count,
5173             x_msg_data            => x_msg_data,
5174             p_check_login_user    => FND_API.G_FALSE,
5175             p_resource_id         => p_resource_id_varray(i),
5176             p_group_id            => p_group_id
5177         );
5178         IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5179            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5180         ELSIF (l_return_status = FND_API.G_RET_STS_ERROR AND
5181                x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
5182            x_return_status := FND_API.G_RET_STS_ERROR;
5183         END IF;
5184     END LOOP;
5185     --Standard call to get message count and if count=1, get the message
5186     FND_MSG_PUB.Count_And_Get (
5187        p_encoded => FND_API.G_FALSE,
5188        p_count => x_msg_count,
5189        p_data  => x_msg_data
5190        );
5191 EXCEPTION
5192    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5193        ROLLBACK TO  Remove_GroupMember_Pvt;
5194        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5195        -- Standard call to get message count and if count=1, get the message
5196        FND_MSG_PUB.Count_And_Get (
5197           p_encoded => FND_API.G_FALSE,
5198           p_count => x_msg_count,
5199           p_data  => x_msg_data
5200           );
5201    WHEN FND_API.G_EXC_ERROR THEN
5202        ROLLBACK TO  Remove_GroupMember_Pvt;
5203        x_return_status := FND_API.G_RET_STS_ERROR;
5204        -- Standard call to get message count and if count=1, get the message
5205        FND_MSG_PUB.Count_And_Get (
5206           p_encoded => FND_API.G_FALSE,
5207           p_count => x_msg_count,
5208           p_data  => x_msg_data
5209           );
5210    WHEN OTHERS THEN
5211        ROLLBACK TO  Remove_GroupMember_Pvt;
5212        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5213        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5214           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
5215        END IF;
5216        -- Standard call to get message count and if count=1, get the message
5217        FND_MSG_PUB.Count_And_Get (
5218           p_encoded => FND_API.G_FALSE,
5219           p_count => x_msg_count,
5220           p_data  => x_msg_data
5221           );
5222 END Remove_GroupMember;
5223 --------------------------------------------------------------------------------
5224 PROCEDURE Check_GroupMember
5225 (
5226     p_api_version          IN  NUMBER,
5227     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
5228     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
5229     x_return_status        OUT NOCOPY VARCHAR2,
5230     x_msg_count            OUT NOCOPY NUMBER,
5231     x_msg_data             OUT NOCOPY VARCHAR2,
5232     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
5233     p_group_id             IN  NUMBER,
5234     p_resource_id          IN  NUMBER,
5235     x_result_flag          OUT NOCOPY VARCHAR2
5236 )  AS
5237 l_api_name             CONSTANT VARCHAR2(30) := 'Check_GroupMember';
5238 l_api_version          CONSTANT NUMBER := 1.0;
5239 l_current_user_id      NUMBER;
5240 l_current_login_id     NUMBER;
5241 l_current_resource_id  NUMBER;
5242 l_current_user_status  VARCHAR2(30);
5243 --
5244 l_temp                 NUMBER;
5245 --
5246 CURSOR  Check_GroupMember_csr IS
5247 Select m.group_member_id
5248 From jtf_rs_group_members m, jtf_rs_groups_vl g
5249 Where m.resource_id = p_resource_id
5250 And   m.group_id = p_group_id
5251 And   m.delete_flag <> 'Y'
5252 And   g.group_id = p_group_id
5253 And   g.start_date_active < sysdate
5254 And   nvl(g.end_date_active, sysdate+1) > sysdate
5255 ;
5256 --
5257 BEGIN
5258     -- Standard call to check for call compatibility.
5259     SAVEPOINT  Add_GroupMember_Pvt;
5260     IF NOT FND_API.Compatible_API_Call (
5261          l_api_version,
5262          p_api_version,
5263          l_api_name,
5264          G_PKG_NAME) THEN
5265         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5266     END IF;
5267     --Initialize message list if p_init_msg_list is TRUE.
5268     IF FND_API.To_Boolean (p_init_msg_list) THEN
5269        FND_MSG_PUB.initialize;
5270     END IF;
5271     -- Initialize API return status to success
5272     x_return_status := FND_API.G_RET_STS_SUCCESS;
5273     x_result_flag := FND_API.G_FALSE;
5274     -- Get the current (login) user id.
5275     AMV_UTILITY_PVT.Get_UserInfo(
5276        x_user_id     => l_current_user_id,
5277        x_login_id    => l_current_login_id,
5278        x_resource_id => l_current_resource_id,
5279        x_user_status => l_current_user_status
5280        );
5281     IF (p_check_login_user = FND_API.G_TRUE) THEN
5282        -- Check if user is login and has the required privilege.
5283        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
5284           -- User is not login.
5285           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5286               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
5287               FND_MSG_PUB.Add;
5288           END IF;
5289           RAISE  FND_API.G_EXC_ERROR;
5290        END IF;
5291     END IF;
5292     OPEN  Check_GroupMember_csr;
5293     FETCH  Check_GroupMember_csr INTO l_temp;
5294     IF (Check_GroupMember_csr%FOUND) THEN
5295        x_result_flag := FND_API.G_TRUE;
5296     END IF;
5297     CLOSE Check_groupMember_csr;
5298     --Standard call to get message count and if count=1, get the message
5299     FND_MSG_PUB.Count_And_Get (
5300        p_encoded => FND_API.G_FALSE,
5301        p_count => x_msg_count,
5302        p_data  => x_msg_data
5303        );
5304 EXCEPTION
5305    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5306        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5307        -- Standard call to get message count and if count=1, get the message
5308        FND_MSG_PUB.Count_And_Get (
5309           p_encoded => FND_API.G_FALSE,
5310           p_count => x_msg_count,
5311           p_data  => x_msg_data
5312           );
5313    WHEN FND_API.G_EXC_ERROR THEN
5314        x_return_status := FND_API.G_RET_STS_ERROR;
5315        -- Standard call to get message count and if count=1, get the message
5316        FND_MSG_PUB.Count_And_Get (
5317           p_encoded => FND_API.G_FALSE,
5318           p_count => x_msg_count,
5319           p_data  => x_msg_data
5320           );
5321    WHEN OTHERS THEN
5322        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5323        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5324           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
5325        END IF;
5326        -- Standard call to get message count and if count=1, get the message
5327        FND_MSG_PUB.Count_And_Get (
5328           p_encoded => FND_API.G_FALSE,
5329           p_count => x_msg_count,
5330           p_data  => x_msg_data
5331           );
5332 END Check_GroupMember;
5333 --------------------------------------------------------------------------------
5334 ----------------------------------   ACCESS   ----------------------------------
5335 --------------------------------------------------------------------------------
5336 PROCEDURE Update_Access
5337 (
5338     p_api_version         IN  NUMBER,
5339     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
5340     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
5341     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
5342     x_return_status       OUT NOCOPY VARCHAR2,
5343     x_msg_count           OUT NOCOPY NUMBER,
5344     x_msg_data            OUT NOCOPY VARCHAR2,
5345     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
5346     p_access_obj          IN  AMV_ACCESS_OBJ_TYPE
5347 ) AS
5348 l_api_name             CONSTANT VARCHAR2(30) := 'Update_Access';
5349 l_api_version          CONSTANT NUMBER := 1.0;
5350 l_current_user_id      NUMBER;
5351 l_current_login_id     NUMBER;
5352 l_current_resource_id  NUMBER;
5353 l_current_user_status  VARCHAR2(30);
5354 --
5355 l_admin_flag           VARCHAR2(1);
5356 l_access_obj           AMV_ACCESS_OBJ_TYPE := p_access_obj;
5357 l_temp                 NUMBER;
5358 --
5359 CURSOR  Get_AccessId_csr IS
5360 Select access_id
5361 From  amv_u_access
5362 Where user_or_group_id = l_access_obj.user_or_group_id
5363 And   user_or_group_type = l_access_obj.user_or_group_type
5364 And   access_to_table_record_id = l_access_obj.access_to_table_record_id
5365 And   access_to_table_code = l_access_obj.access_to_table_code;
5366 --
5367 BEGIN
5368     -- Standard call to check for call compatibility.
5369     SAVEPOINT  Update_Access_Pvt;
5370     IF NOT FND_API.Compatible_API_Call (
5371          l_api_version,
5372          p_api_version,
5373          l_api_name,
5374          G_PKG_NAME) THEN
5375         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5376     END IF;
5377     --Initialize message list if p_init_msg_list is TRUE.
5378     IF FND_API.To_Boolean (p_init_msg_list) THEN
5379        FND_MSG_PUB.initialize;
5380     END IF;
5381     -- Initialize API return status to success
5382     x_return_status := FND_API.G_RET_STS_SUCCESS;
5383     -- Get the current (login) user id.
5384     AMV_UTILITY_PVT.Get_UserInfo(
5385        x_user_id     => l_current_user_id,
5386        x_login_id    => l_current_login_id,
5387        x_resource_id => l_current_resource_id,
5388        x_user_status => l_current_user_status
5389        );
5390     IF (p_check_login_user = FND_API.G_TRUE) THEN
5391        -- Check if user is login and has the required privilege.
5392        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
5393           -- User is not login.
5394           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5395               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
5396               FND_MSG_PUB.Add;
5397           END IF;
5398           RAISE  FND_API.G_EXC_ERROR;
5399        END IF;
5400        -- We might not need this one.
5401        AMV_USER_PVT.Is_Administrator
5402        (
5403            p_api_version         => 1.0,
5404            x_return_status       => x_return_status,
5405            x_msg_count           => x_msg_count,
5406            x_msg_data            => x_msg_data,
5407            p_check_login_user    => FND_API.G_FALSE,
5408            p_resource_id         => l_current_resource_id,
5409            x_result_flag         => l_admin_flag
5410        );
5411        IF (l_admin_flag <> FND_API.G_TRUE) THEN
5412           -- User is not an administrator.
5413           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5414               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
5415               FND_MSG_PUB.Add;
5416           END IF;
5417           RAISE  FND_API.G_EXC_ERROR;
5418        END IF;
5419     END IF;
5420     -- This is to make database happy
5421     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
5422         l_current_login_id := -1;
5423         l_current_user_id  := -1;
5424     END IF;
5425     IF (l_access_obj.access_id IS NULL) THEN
5426        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5427            FND_MESSAGE.Set_name('AMV','AMV_NULL_ACCESS_OBJ');
5428            FND_MSG_PUB.Add;
5429        END IF;
5430        RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5431     END IF;
5432 
5433     OPEN   Get_AccessId_csr;
5434     FETCH  Get_AccessId_csr INTO l_temp;
5435     IF (Get_AccessId_csr%FOUND) THEN
5436        CLOSE Get_AccessId_csr;
5437        l_access_obj.access_id := l_temp;
5438     ELSE
5439        CLOSE Get_AccessId_csr;
5440        l_access_obj.access_id := FND_API.G_MISS_NUM;
5441     END IF;
5442     IF (l_access_obj.access_id = FND_API.G_MISS_NUM) THEN
5443         IF (l_access_obj.user_or_group_type = G_GROUP_ARC_TYPE) THEN
5444            -- Check if the Group id is valid
5445            IF (AMV_UTILITY_PVT.IS_GROUPIDVALID(l_access_obj.user_or_group_id)
5446               <> TRUE) THEN
5447               IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5448                   FND_MESSAGE.Set_name('AMV','AMV_INVALID_GROUP_ID');
5449                   FND_MESSAGE.Set_Token('ID',
5450                      TO_CHAR( NVL(l_access_obj.user_or_group_id,-1)) );
5451                   FND_MSG_PUB.Add;
5452               END IF;
5453               RAISE  FND_API.G_EXC_ERROR;
5454            END IF;
5455         ELSIF (l_access_obj.user_or_group_type = G_USER_ARC_TYPE) THEN
5456            -- Check if the resource id is valid
5457            IF (AMV_UTILITY_PVT.IS_RESOURCEIDVALID(l_access_obj.user_or_group_id)
5458                <> TRUE) THEN
5459               IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5460                   FND_MESSAGE.Set_name('AMV','AMV_INVALID_RESOURCE_ID');
5461                   FND_MESSAGE.Set_Token('ID',
5462                      TO_CHAR( NVL(l_access_obj.user_or_group_id,-1)) );
5463                   FND_MSG_PUB.Add;
5464               END IF;
5465               RAISE  FND_API.G_EXC_ERROR;
5466            END IF;
5467         ELSE
5468            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5469                FND_MESSAGE.Set_name('AMV','AMV_WRONG_ACCESS_USER_TYPE');
5470                FND_MSG_PUB.Add;
5471            END IF;
5472            RAISE  FND_API.G_EXC_ERROR;
5473         END IF;
5474         IF (l_access_obj.access_to_table_code = G_ITEM_ARC_TYPE) THEN
5475            -- Check if the item id is valid
5476            IF (AMV_UTILITY_PVT.IS_ITEMIDVALID(
5477                  l_access_obj.access_to_table_record_id) <> TRUE) THEN
5478               IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5479                   FND_MESSAGE.Set_name('AMV','AMV_INVALID_ITEM_ID');
5480                   FND_MESSAGE.Set_Token('ID',
5481                      TO_CHAR( NVL(l_access_obj.access_to_table_record_id,-1)) );
5482                   FND_MSG_PUB.Add;
5483               END IF;
5484               RAISE  FND_API.G_EXC_ERROR;
5485            END IF;
5486         ELSIF (l_access_obj.access_to_table_code = G_CHAN_ARC_TYPE) THEN
5487            -- Check if the channel id is valid
5488            IF (AMV_UTILITY_PVT.IS_CHANNELIDVALID(
5489                  l_access_obj.access_to_table_record_id) <> TRUE) THEN
5490               IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5491                   FND_MESSAGE.Set_name('AMV','AMV_INVALID_CHANEL_ID');
5492                   FND_MESSAGE.Set_Token('ID',
5493                      TO_CHAR( NVL(l_access_obj.access_to_table_record_id,-1)) );
5494                   FND_MSG_PUB.Add;
5495               END IF;
5496               RAISE  FND_API.G_EXC_ERROR;
5497            END IF;
5498         ELSIF (l_access_obj.access_to_table_code = G_CATE_ARC_TYPE) THEN
5499            -- Check if the category id is valid
5500            IF (AMV_UTILITY_PVT.IS_CATEGORYIDVALID(
5501                  l_access_obj.access_to_table_record_id) <> TRUE) THEN
5502               IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5503                   FND_MESSAGE.Set_name('AMV','AMV_INVALID_CATEGORY_ID');
5504                   FND_MESSAGE.Set_Token('ID',
5505                      TO_CHAR( NVL(l_access_obj.access_to_table_record_id,-1)) );
5506                   FND_MSG_PUB.Add;
5507               END IF;
5508               RAISE  FND_API.G_EXC_ERROR;
5509            END IF;
5510         ELSIF (l_access_obj.access_to_table_code = G_APPL_ARC_TYPE) THEN
5511            -- Check if the application id is valid
5512            IF (AMV_UTILITY_PVT.IS_APPLIDVALID(
5513                  l_access_obj.access_to_table_record_id) <> TRUE) THEN
5514               IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5515                   FND_MESSAGE.Set_name('AMV','AMV_INVALID_APPLICATION_ID');
5516                   FND_MESSAGE.Set_Token('ID',
5517                      TO_CHAR( NVL(l_access_obj.access_to_table_record_id,-1)) );
5518                   FND_MSG_PUB.Add;
5519               END IF;
5520               RAISE  FND_API.G_EXC_ERROR;
5521            END IF;
5522         ELSE
5523            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5524                FND_MESSAGE.Set_name('AMV','AMV_WRONG_ACCESS_TABLE_TYPE');
5525                FND_MSG_PUB.Add;
5526            END IF;
5527            RAISE  FND_API.G_EXC_ERROR;
5528         END IF;
5529         IF (l_access_obj.effective_start_date = FND_API.G_MISS_DATE
5530             OR l_access_obj.effective_start_date IS NULL) THEN
5531             l_access_obj.effective_start_date := sysdate;
5532         END IF;
5533         IF (l_access_obj.expiration_date = FND_API.G_MISS_DATE) THEN
5534             l_access_obj.expiration_date := null;
5535         END IF;
5536         IF (l_access_obj.can_view_flag IS NULL OR
5537             l_access_obj.can_view_flag <> FND_API.G_TRUE) THEN
5538             l_access_obj.can_view_flag := FND_API.G_FALSE;
5539         END IF;
5540         IF (l_access_obj.can_create_flag IS NULL OR
5541             l_access_obj.can_create_flag <> FND_API.G_TRUE) THEN
5542             l_access_obj.can_create_flag := FND_API.G_FALSE;
5543         END IF;
5544         IF (l_access_obj.can_delete_flag IS NULL OR
5545             l_access_obj.can_delete_flag <> FND_API.G_TRUE) THEN
5546             l_access_obj.can_delete_flag := FND_API.G_FALSE;
5547         END IF;
5548         IF (l_access_obj.can_update_flag IS NULL OR
5549             l_access_obj.can_update_flag <> FND_API.G_TRUE) THEN
5550             l_access_obj.can_update_flag := FND_API.G_FALSE;
5551         END IF;
5552         IF (l_access_obj.can_create_dist_rule_flag IS NULL OR
5553             l_access_obj.can_create_dist_rule_flag <> FND_API.G_TRUE) THEN
5554             l_access_obj.can_create_dist_rule_flag := FND_API.G_FALSE;
5555         END IF;
5556         IF (l_access_obj.chl_approver_flag IS NULL OR
5557             l_access_obj.chl_approver_flag <> FND_API.G_TRUE) THEN
5558             l_access_obj.chl_approver_flag := FND_API.G_FALSE;
5559         END IF;
5560         IF (l_access_obj.chl_required_flag IS NULL OR
5561             l_access_obj.chl_required_flag <> FND_API.G_TRUE) THEN
5562             l_access_obj.chl_required_flag := FND_API.G_FALSE;
5563         END IF;
5564         IF (l_access_obj.chl_required_need_notif_flag IS NULL OR
5565             l_access_obj.chl_required_need_notif_flag <> FND_API.G_TRUE) THEN
5566             l_access_obj.chl_required_need_notif_flag := FND_API.G_FALSE;
5567         END IF;
5568         --Now let the helper do the real job.
5569         Add_Access_helper
5570         (
5571             p_access_obj     => l_access_obj,
5572             x_return_status  => x_return_status,
5573             x_access_id      => l_temp
5574         );
5575     ELSE
5576         IF (l_access_obj.effective_start_date IS NULL) THEN
5577             l_access_obj.effective_start_date := FND_API.G_MISS_DATE;
5578         END IF;
5579         IF (l_access_obj.can_view_flag IS NULL) THEN
5580             l_access_obj.can_view_flag := FND_API.G_MISS_CHAR;
5581         END IF;
5582         IF (l_access_obj.can_create_flag IS NULL) THEN
5583             l_access_obj.can_create_flag := FND_API.G_MISS_CHAR;
5584         END IF;
5585         IF (l_access_obj.can_delete_flag IS NULL) THEN
5586             l_access_obj.can_delete_flag := FND_API.G_MISS_CHAR;
5587         END IF;
5588         IF (l_access_obj.can_update_flag IS NULL) THEN
5589             l_access_obj.can_update_flag := FND_API.G_MISS_CHAR;
5590         END IF;
5591         IF (l_access_obj.can_create_dist_rule_flag IS NULL ) THEN
5592             l_access_obj.can_create_dist_rule_flag := FND_API.G_MISS_CHAR;
5593         END IF;
5594         IF (l_access_obj.chl_approver_flag IS NULL ) THEN
5595             l_access_obj.chl_approver_flag := FND_API.G_MISS_CHAR;
5596         END IF;
5597         IF (l_access_obj.chl_required_flag IS NULL ) THEN
5598             l_access_obj.chl_required_flag := FND_API.G_MISS_CHAR;
5599         END IF;
5600         IF (l_access_obj.chl_required_need_notif_flag IS NULL ) THEN
5601             l_access_obj.chl_required_need_notif_flag := FND_API.G_MISS_CHAR;
5602         END IF;
5603         --Now let the helper do the real job.
5604         Update_Access_helper
5605         (
5606             p_access_obj     => l_access_obj,
5607             x_return_status  => x_return_status
5608         );
5609     END IF;
5610     IF FND_API.To_Boolean ( p_commit ) THEN
5611         COMMIT WORK;
5612     END IF;
5613     --Standard call to get message count and if count=1, get the message
5614     FND_MSG_PUB.Count_And_Get (
5615        p_encoded => FND_API.G_FALSE,
5616        p_count => x_msg_count,
5617        p_data  => x_msg_data
5618        );
5619 EXCEPTION
5620    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5621        ROLLBACK TO  Update_Access_Pvt;
5622        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5623        -- Standard call to get message count and if count=1, get the message
5624        FND_MSG_PUB.Count_And_Get (
5625           p_encoded => FND_API.G_FALSE,
5626           p_count => x_msg_count,
5627           p_data  => x_msg_data
5628           );
5629    WHEN FND_API.G_EXC_ERROR THEN
5630        ROLLBACK TO  Update_Access_Pvt;
5631        x_return_status := FND_API.G_RET_STS_ERROR;
5632        -- Standard call to get message count and if count=1, get the message
5633        FND_MSG_PUB.Count_And_Get (
5634           p_encoded => FND_API.G_FALSE,
5635           p_count => x_msg_count,
5636           p_data  => x_msg_data
5637           );
5638    WHEN OTHERS THEN
5639        ROLLBACK TO  Update_Access_Pvt;
5640        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5641        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5642           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
5643        END IF;
5644        -- Standard call to get message count and if count=1, get the message
5645        FND_MSG_PUB.Count_And_Get (
5646           p_encoded => FND_API.G_FALSE,
5647           p_count => x_msg_count,
5648           p_data  => x_msg_data
5649           );
5650 END Update_Access;
5651 --------------------------------------------------------------------------------
5652 PROCEDURE Update_Access
5653 (
5654     p_api_version         IN  NUMBER,
5655     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
5656     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
5657     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
5658     x_return_status       OUT NOCOPY VARCHAR2,
5659     x_msg_count           OUT NOCOPY NUMBER,
5660     x_msg_data            OUT NOCOPY VARCHAR2,
5661     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
5662     p_access_obj_array    IN  AMV_ACCESS_OBJ_VARRAY
5663 ) AS
5664 l_api_name             CONSTANT VARCHAR2(30) := 'Update_Access';
5665 l_api_version          CONSTANT NUMBER := 1.0;
5666 l_current_user_id      NUMBER;
5667 l_current_login_id     NUMBER;
5668 l_current_resource_id  NUMBER;
5669 l_current_user_status  VARCHAR2(30);
5670 --
5671 l_return_status        VARCHAR2(1);
5672 l_count                NUMBER;
5673 l_admin_flag           VARCHAR2(1);
5674 --
5675 BEGIN
5676     -- Standard call to check for call compatibility.
5677     SAVEPOINT  Update_Access_Pvt;
5678     IF NOT FND_API.Compatible_API_Call (
5679          l_api_version,
5680          p_api_version,
5681          l_api_name,
5682          G_PKG_NAME) THEN
5683         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5684     END IF;
5685     --Initialize message list if p_init_msg_list is TRUE.
5686     IF FND_API.To_Boolean (p_init_msg_list) THEN
5687        FND_MSG_PUB.initialize;
5688     END IF;
5689     -- Initialize API return status to success
5690     x_return_status := FND_API.G_RET_STS_SUCCESS;
5691     -- Get the current (login) user id.
5692     AMV_UTILITY_PVT.Get_UserInfo(
5693        x_user_id     => l_current_user_id,
5694        x_login_id    => l_current_login_id,
5695        x_resource_id => l_current_resource_id,
5696        x_user_status => l_current_user_status
5697        );
5698     IF (p_check_login_user = FND_API.G_TRUE) THEN
5699        -- Check if user is login and has the required privilege.
5700        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
5701           -- User is not login.
5702           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5703               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
5704               FND_MSG_PUB.Add;
5705           END IF;
5706           RAISE  FND_API.G_EXC_ERROR;
5707        END IF;
5708        -- We might not need this one.
5709        AMV_USER_PVT.Is_Administrator
5710        (
5711            p_api_version         => 1.0,
5712            x_return_status       => x_return_status,
5713            x_msg_count           => x_msg_count,
5714            x_msg_data            => x_msg_data,
5715            p_check_login_user    => FND_API.G_FALSE,
5716            p_resource_id         => l_current_resource_id,
5717            x_result_flag         => l_admin_flag
5718        );
5719        IF (l_admin_flag <> FND_API.G_TRUE) THEN
5720           -- User is not an administrator.
5721           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5722               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_HAVE_PRIVILEGE');
5723               FND_MSG_PUB.Add;
5724           END IF;
5725           RAISE  FND_API.G_EXC_ERROR;
5726        END IF;
5727     END IF;
5728     -- This is to make database happy
5729     IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
5730         l_current_login_id := -1;
5731         l_current_user_id  := -1;
5732     END IF;
5733     IF (p_access_obj_array IS NULL) THEN
5734         l_count := 0;
5735     ELSE
5736        l_count := p_access_obj_array.count;
5737     END IF;
5738     FOR i IN 1..l_count LOOP
5739        Update_Access
5740        (
5741            p_api_version         => p_api_version,
5742            p_commit              => p_commit,
5743            p_validation_level    => p_validation_level,
5744            x_return_status       => l_return_status,
5745            x_msg_count           => x_msg_count,
5746            x_msg_data            => x_msg_data,
5747            p_check_login_user    => FND_API.G_FALSE,
5748            p_access_obj          => p_access_obj_array(i)
5749        );
5750        IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5751           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5752        ELSIF (l_return_status = FND_API.G_RET_STS_ERROR AND
5753               x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
5754           x_return_status := FND_API.G_RET_STS_ERROR;
5755        END IF;
5756     END LOOP;
5757     --Standard call to get message count and if count=1, get the message
5758     FND_MSG_PUB.Count_And_Get (
5759        p_encoded => FND_API.G_FALSE,
5760        p_count => x_msg_count,
5761        p_data  => x_msg_data
5762        );
5763 EXCEPTION
5764    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5765        ROLLBACK TO  Update_Access_Pvt;
5766        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5767        -- Standard call to get message count and if count=1, get the message
5768        FND_MSG_PUB.Count_And_Get (
5769           p_encoded => FND_API.G_FALSE,
5770           p_count => x_msg_count,
5771           p_data  => x_msg_data
5772           );
5773    WHEN FND_API.G_EXC_ERROR THEN
5774        ROLLBACK TO  Update_Access_Pvt;
5775        x_return_status := FND_API.G_RET_STS_ERROR;
5776        -- Standard call to get message count and if count=1, get the message
5777        FND_MSG_PUB.Count_And_Get (
5778           p_encoded => FND_API.G_FALSE,
5779           p_count => x_msg_count,
5780           p_data  => x_msg_data
5781           );
5782    WHEN OTHERS THEN
5783        ROLLBACK TO  Update_Access_Pvt;
5784        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5785        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5786           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
5787        END IF;
5788        -- Standard call to get message count and if count=1, get the message
5789        FND_MSG_PUB.Count_And_Get (
5790           p_encoded => FND_API.G_FALSE,
5791           p_count => x_msg_count,
5792           p_data  => x_msg_data
5793           );
5794 END Update_Access;
5795 --------------------------------------------------------------------------------
5796 PROCEDURE Update_ResourceApplAccess
5797 (
5798     p_api_version         IN  NUMBER,
5799     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
5800     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
5801     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
5802     x_return_status       OUT NOCOPY VARCHAR2,
5803     x_msg_count           OUT NOCOPY NUMBER,
5804     x_msg_data            OUT NOCOPY VARCHAR2,
5805     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
5806     p_resource_id         IN  NUMBER,
5807     p_application_id      IN  NUMBER,
5808     p_access_flag_obj     IN  AMV_ACCESS_FLAG_OBJ_TYPE
5809 ) AS
5810 l_access_obj      AMV_ACCESS_OBJ_TYPE;
5811 BEGIN
5812 
5813    l_access_obj.ACCESS_ID := FND_API.G_MISS_NUM;
5814    l_access_obj.OBJECT_VERSION_NUMBER := 1;
5815    l_access_obj.ACCESS_TO_TABLE_CODE := p_application_id;
5816    l_access_obj.ACCESS_TO_TABLE_RECORD_ID := G_APPL_ARC_TYPE;
5817    l_access_obj.USER_OR_GROUP_ID := p_resource_id;
5818    l_access_obj.USER_OR_GROUP_TYPE := G_USER_ARC_TYPE;
5819    l_access_obj.EFFECTIVE_START_DATE := sysdate;
5820    l_access_obj.EXPIRATION_DATE := null;
5821    l_access_obj.CAN_VIEW_FLAG := p_access_flag_obj.can_view_flag;
5822    l_access_obj.CAN_CREATE_FLAG := p_access_flag_obj.can_create_flag;
5823    l_access_obj.CAN_DELETE_FLAG := p_access_flag_obj.can_delete_flag;
5824    l_access_obj.CAN_UPDATE_FLAG := p_access_flag_obj.can_update_flag;
5825    l_access_obj.CAN_CREATE_DIST_RULE_FLAG := p_access_flag_obj.can_create_dist_rule_flag;
5826    l_access_obj.CHL_APPROVER_FLAG := p_access_flag_obj.chl_approver_flag;
5827    l_access_obj.CHL_REQUIRED_FLAG := p_access_flag_obj.chl_required_flag;
5828    l_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG := p_access_flag_obj.chl_required_need_notif_flag;
5829 /*
5830    l_access_obj := AMV_ACCESS_OBJ_TYPE
5831                    (
5832                      FND_API.G_MISS_NUM,
5833                      1,
5834                      p_application_id,
5835                      G_APPL_ARC_TYPE,
5836                      p_resource_id,
5837                      G_USER_ARC_TYPE,
5838                      sysdate,
5839                      null,
5840                      p_access_flag_obj.can_view_flag,
5841                      p_access_flag_obj.can_create_flag,
5842                      p_access_flag_obj.can_delete_flag,
5843                      p_access_flag_obj.can_update_flag,
5844                      p_access_flag_obj.can_create_dist_rule_flag,
5845                      p_access_flag_obj.chl_approver_flag,
5846                      p_access_flag_obj.chl_required_flag,
5847                      p_access_flag_obj.chl_required_need_notif_flag
5848                    );
5849 */
5850     Update_Access
5851     (
5852         p_api_version         => p_api_version,
5853         p_init_msg_list       => p_init_msg_list,
5854         p_commit              => p_commit,
5855         p_validation_level    => p_validation_level,
5856         x_return_status       => x_return_status,
5857         x_msg_count           => x_msg_count,
5858         x_msg_data            => x_msg_data,
5859         p_check_login_user    => p_check_login_user,
5860         p_access_obj          => l_access_obj
5861     );
5862 END Update_ResourceApplAccess;
5863 --------------------------------------------------------------------------------
5864 PROCEDURE Update_ResourceChanAccess
5865 (
5866     p_api_version         IN  NUMBER,
5867     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
5868     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
5869     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
5870     x_return_status       OUT NOCOPY VARCHAR2,
5871     x_msg_count           OUT NOCOPY NUMBER,
5872     x_msg_data            OUT NOCOPY VARCHAR2,
5873     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
5874     p_resource_id         IN  NUMBER,
5875     p_channel_id          IN  NUMBER,
5876     p_access_flag_obj     IN  AMV_ACCESS_FLAG_OBJ_TYPE
5877 ) AS
5878 l_access_obj      AMV_ACCESS_OBJ_TYPE;
5879 BEGIN
5880    l_access_obj.ACCESS_ID := FND_API.G_MISS_NUM;
5881    l_access_obj.OBJECT_VERSION_NUMBER := 1;
5882    l_access_obj.ACCESS_TO_TABLE_CODE := p_channel_id;
5883    l_access_obj.ACCESS_TO_TABLE_RECORD_ID := G_CHAN_ARC_TYPE;
5884    l_access_obj.USER_OR_GROUP_ID := p_resource_id;
5885    l_access_obj.USER_OR_GROUP_TYPE := G_USER_ARC_TYPE;
5886    l_access_obj.EFFECTIVE_START_DATE := sysdate;
5887    l_access_obj.EXPIRATION_DATE := null;
5888    l_access_obj.CAN_VIEW_FLAG := p_access_flag_obj.can_view_flag;
5889    l_access_obj.CAN_CREATE_FLAG := p_access_flag_obj.can_create_flag;
5890    l_access_obj.CAN_DELETE_FLAG := p_access_flag_obj.can_delete_flag;
5891    l_access_obj.CAN_UPDATE_FLAG := p_access_flag_obj.can_update_flag;
5892    l_access_obj.CAN_CREATE_DIST_RULE_FLAG := p_access_flag_obj.can_create_dist_rule_flag;
5893    l_access_obj.CHL_APPROVER_FLAG := p_access_flag_obj.chl_approver_flag;
5894    l_access_obj.CHL_REQUIRED_FLAG := p_access_flag_obj.chl_required_flag;
5895    l_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG := p_access_flag_obj.chl_required_need_notif_flag;
5896 
5897 /*
5898    l_access_obj := AMV_ACCESS_OBJ_TYPE
5899                    (
5900                      FND_API.G_MISS_NUM,
5901                      1,
5902                      p_channel_id,
5903                      G_CHAN_ARC_TYPE,
5904                      p_resource_id,
5905                      G_USER_ARC_TYPE,
5906                      sysdate,
5907                      null,
5908                      p_access_flag_obj.can_view_flag,
5909                      p_access_flag_obj.can_create_flag,
5910                      p_access_flag_obj.can_delete_flag,
5911                      p_access_flag_obj.can_update_flag,
5912                      p_access_flag_obj.can_create_dist_rule_flag,
5913                      p_access_flag_obj.chl_approver_flag,
5914                      p_access_flag_obj.chl_required_flag,
5915                      p_access_flag_obj.chl_required_need_notif_flag
5916                    );
5917 */
5918     Update_Access
5919     (
5920         p_api_version         => p_api_version,
5921         p_init_msg_list       => p_init_msg_list,
5922         p_commit              => p_commit,
5923         p_validation_level    => p_validation_level,
5924         x_return_status       => x_return_status,
5925         x_msg_count           => x_msg_count,
5926         x_msg_data            => x_msg_data,
5927         p_check_login_user    => p_check_login_user,
5928         p_access_obj          => l_access_obj
5929     );
5930 END Update_ResourceChanAccess;
5931 --------------------------------------------------------------------------------
5932 PROCEDURE Update_ResourceCateAccess
5933 (
5934     p_api_version         IN  NUMBER,
5935     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
5936     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
5937     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
5938     x_return_status       OUT NOCOPY VARCHAR2,
5939     x_msg_count           OUT NOCOPY NUMBER,
5940     x_msg_data            OUT NOCOPY VARCHAR2,
5941     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
5942     p_resource_id         IN  NUMBER,
5943     p_category_id         IN  NUMBER,
5944     p_access_flag_obj     IN  AMV_ACCESS_FLAG_OBJ_TYPE
5945 ) AS
5946 l_access_obj      AMV_ACCESS_OBJ_TYPE;
5947 BEGIN
5948    l_access_obj.ACCESS_ID := FND_API.G_MISS_NUM;
5949    l_access_obj.OBJECT_VERSION_NUMBER := 1;
5950    l_access_obj.ACCESS_TO_TABLE_CODE := p_category_id;
5951    l_access_obj.ACCESS_TO_TABLE_RECORD_ID := G_CATE_ARC_TYPE;
5952    l_access_obj.USER_OR_GROUP_ID := p_resource_id;
5953    l_access_obj.USER_OR_GROUP_TYPE := G_USER_ARC_TYPE;
5954    l_access_obj.EFFECTIVE_START_DATE := sysdate;
5955    l_access_obj.EXPIRATION_DATE := null;
5956    l_access_obj.CAN_VIEW_FLAG := p_access_flag_obj.can_view_flag;
5957    l_access_obj.CAN_CREATE_FLAG := p_access_flag_obj.can_create_flag;
5958    l_access_obj.CAN_DELETE_FLAG := p_access_flag_obj.can_delete_flag;
5959    l_access_obj.CAN_UPDATE_FLAG := p_access_flag_obj.can_update_flag;
5960    l_access_obj.CAN_CREATE_DIST_RULE_FLAG := p_access_flag_obj.can_create_dist_rule_flag;
5961    l_access_obj.CHL_APPROVER_FLAG := p_access_flag_obj.chl_approver_flag;
5962    l_access_obj.CHL_REQUIRED_FLAG := p_access_flag_obj.chl_required_flag;
5963    l_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG := p_access_flag_obj.chl_required_need_notif_flag;
5964 
5965 /*
5966    l_access_obj := AMV_ACCESS_OBJ_TYPE
5967                    (
5968                      FND_API.G_MISS_NUM,
5969                      1,
5970                      p_category_id,
5971                      G_CATE_ARC_TYPE,
5972                      p_resource_id,
5973                      G_USER_ARC_TYPE,
5974                      sysdate,
5975                      null,
5976                      p_access_flag_obj.can_view_flag,
5977                      p_access_flag_obj.can_create_flag,
5978                      p_access_flag_obj.can_delete_flag,
5979                      p_access_flag_obj.can_update_flag,
5980                      p_access_flag_obj.can_create_dist_rule_flag,
5981                      p_access_flag_obj.chl_approver_flag,
5982                      p_access_flag_obj.chl_required_flag,
5983                      p_access_flag_obj.chl_required_need_notif_flag
5984                    );
5985 */
5986     Update_Access
5987     (
5988         p_api_version         => p_api_version,
5989         p_init_msg_list       => p_init_msg_list,
5990         p_commit              => p_commit,
5991         p_validation_level    => p_validation_level,
5992         x_return_status       => x_return_status,
5993         x_msg_count           => x_msg_count,
5994         x_msg_data            => x_msg_data,
5995         p_check_login_user    => p_check_login_user,
5996         p_access_obj          => l_access_obj
5997     );
5998 END Update_ResourceCateAccess;
5999 --------------------------------------------------------------------------------
6000 PROCEDURE Update_ResourceItemAccess
6001 (
6002     p_api_version         IN  NUMBER,
6003     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
6004     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
6005     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6006     x_return_status       OUT NOCOPY VARCHAR2,
6007     x_msg_count           OUT NOCOPY NUMBER,
6008     x_msg_data            OUT NOCOPY VARCHAR2,
6009     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
6010     p_resource_id         IN  NUMBER,
6011     p_item_id             IN  NUMBER,
6012     p_access_flag_obj     IN  AMV_ACCESS_FLAG_OBJ_TYPE
6013 ) AS
6014 l_access_obj      AMV_ACCESS_OBJ_TYPE;
6015 BEGIN
6016    l_access_obj.ACCESS_ID := FND_API.G_MISS_NUM;
6017    l_access_obj.OBJECT_VERSION_NUMBER := 1;
6018    l_access_obj.ACCESS_TO_TABLE_CODE := p_item_id;
6019    l_access_obj.ACCESS_TO_TABLE_RECORD_ID := G_ITEM_ARC_TYPE;
6020    l_access_obj.USER_OR_GROUP_ID := p_resource_id;
6021    l_access_obj.USER_OR_GROUP_TYPE := G_USER_ARC_TYPE;
6022    l_access_obj.EFFECTIVE_START_DATE := sysdate;
6023    l_access_obj.EXPIRATION_DATE := null;
6024    l_access_obj.CAN_VIEW_FLAG := p_access_flag_obj.can_view_flag;
6025    l_access_obj.CAN_CREATE_FLAG := p_access_flag_obj.can_create_flag;
6026    l_access_obj.CAN_DELETE_FLAG := p_access_flag_obj.can_delete_flag;
6027    l_access_obj.CAN_UPDATE_FLAG := p_access_flag_obj.can_update_flag;
6028    l_access_obj.CAN_CREATE_DIST_RULE_FLAG := p_access_flag_obj.can_create_dist_rule_flag;
6029    l_access_obj.CHL_APPROVER_FLAG := p_access_flag_obj.chl_approver_flag;
6030    l_access_obj.CHL_REQUIRED_FLAG := p_access_flag_obj.chl_required_flag;
6031    l_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG := p_access_flag_obj.chl_required_need_notif_flag;
6032 
6033 /*
6034    l_access_obj := AMV_ACCESS_OBJ_TYPE
6035                    (
6036                      FND_API.G_MISS_NUM,
6037                      1,
6038                      p_item_id,
6039                      G_ITEM_ARC_TYPE,
6040                      p_resource_id,
6041                      G_USER_ARC_TYPE,
6042                      sysdate,
6043                      null,
6044                      p_access_flag_obj.can_view_flag,
6045                      p_access_flag_obj.can_create_flag,
6046                      p_access_flag_obj.can_delete_flag,
6047                      p_access_flag_obj.can_update_flag,
6048                      p_access_flag_obj.can_create_dist_rule_flag,
6049                      p_access_flag_obj.chl_approver_flag,
6050                      p_access_flag_obj.chl_required_flag,
6051                      p_access_flag_obj.chl_required_need_notif_flag
6052                    );
6053 */
6054     Update_Access
6055     (
6056         p_api_version         => p_api_version,
6057         p_init_msg_list       => p_init_msg_list,
6058         p_commit              => p_commit,
6059         p_validation_level    => p_validation_level,
6060         x_return_status       => x_return_status,
6061         x_msg_count           => x_msg_count,
6062         x_msg_data            => x_msg_data,
6063         p_check_login_user    => p_check_login_user,
6064         p_access_obj          => l_access_obj
6065     );
6066 END Update_ResourceItemAccess;
6067 --------------------------------------------------------------------------------
6068 PROCEDURE Update_GroupApplAccess
6069 (
6070     p_api_version         IN  NUMBER,
6071     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
6072     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
6073     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6074     x_return_status       OUT NOCOPY VARCHAR2,
6075     x_msg_count           OUT NOCOPY NUMBER,
6076     x_msg_data            OUT NOCOPY VARCHAR2,
6077     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
6078     p_resource_id         IN  NUMBER,
6079     p_group_id            IN  NUMBER,
6080     p_application_id      IN  NUMBER,
6081     p_access_flag_obj     IN  AMV_ACCESS_FLAG_OBJ_TYPE
6082 ) AS
6083 l_access_obj      AMV_ACCESS_OBJ_TYPE;
6084 BEGIN
6085    l_access_obj.ACCESS_ID := FND_API.G_MISS_NUM;
6086    l_access_obj.OBJECT_VERSION_NUMBER := 1;
6087    l_access_obj.ACCESS_TO_TABLE_CODE := p_application_id;
6088    l_access_obj.ACCESS_TO_TABLE_RECORD_ID := G_APPL_ARC_TYPE;
6089    l_access_obj.USER_OR_GROUP_ID := p_group_id;
6090    l_access_obj.USER_OR_GROUP_TYPE := G_GROUP_ARC_TYPE;
6091    l_access_obj.EFFECTIVE_START_DATE := sysdate;
6092    l_access_obj.EXPIRATION_DATE := null;
6093    l_access_obj.CAN_VIEW_FLAG := p_access_flag_obj.can_view_flag;
6094    l_access_obj.CAN_CREATE_FLAG := p_access_flag_obj.can_create_flag;
6095    l_access_obj.CAN_DELETE_FLAG := p_access_flag_obj.can_delete_flag;
6096    l_access_obj.CAN_UPDATE_FLAG := p_access_flag_obj.can_update_flag;
6097    l_access_obj.CAN_CREATE_DIST_RULE_FLAG := p_access_flag_obj.can_create_dist_rule_flag;
6098    l_access_obj.CHL_APPROVER_FLAG := p_access_flag_obj.chl_approver_flag;
6099    l_access_obj.CHL_REQUIRED_FLAG := p_access_flag_obj.chl_required_flag;
6100    l_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG := p_access_flag_obj.chl_required_need_notif_flag;
6101 
6102 /*
6103    l_access_obj := AMV_ACCESS_OBJ_TYPE
6104                    (
6105                      FND_API.G_MISS_NUM,
6106                      1,
6107                      p_application_id,
6108                      G_APPL_ARC_TYPE,
6109                      p_group_id,
6110                      G_GROUP_ARC_TYPE,
6111                      sysdate,
6112                      null,
6113                      p_access_flag_obj.can_view_flag,
6114                      p_access_flag_obj.can_create_flag,
6115                      p_access_flag_obj.can_delete_flag,
6116                      p_access_flag_obj.can_update_flag,
6117                      p_access_flag_obj.can_create_dist_rule_flag,
6118                      p_access_flag_obj.chl_approver_flag,
6119                      p_access_flag_obj.chl_required_flag,
6120                      p_access_flag_obj.chl_required_need_notif_flag
6121                    );
6122 */
6123     Update_Access
6124     (
6125         p_api_version         => p_api_version,
6126         p_init_msg_list       => p_init_msg_list,
6127         p_commit              => p_commit,
6128         p_validation_level    => p_validation_level,
6129         x_return_status       => x_return_status,
6130         x_msg_count           => x_msg_count,
6131         x_msg_data            => x_msg_data,
6132         p_check_login_user    => p_check_login_user,
6133         p_access_obj          => l_access_obj
6134     );
6135 END Update_GroupApplAccess;
6136 --------------------------------------------------------------------------------
6137 PROCEDURE Update_GroupChanAccess
6138 (
6139     p_api_version         IN  NUMBER,
6140     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
6141     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
6142     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6143     x_return_status       OUT NOCOPY VARCHAR2,
6144     x_msg_count           OUT NOCOPY NUMBER,
6145     x_msg_data            OUT NOCOPY VARCHAR2,
6146     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
6147     p_group_id            IN  NUMBER,
6148     p_channel_id          IN  NUMBER,
6149     p_access_flag_obj     IN  AMV_ACCESS_FLAG_OBJ_TYPE
6150 ) AS
6151 l_access_obj      AMV_ACCESS_OBJ_TYPE;
6152 BEGIN
6153    l_access_obj.ACCESS_ID := FND_API.G_MISS_NUM;
6154    l_access_obj.OBJECT_VERSION_NUMBER := 1;
6155    l_access_obj.ACCESS_TO_TABLE_CODE := p_channel_id;
6156    l_access_obj.ACCESS_TO_TABLE_RECORD_ID := G_CHAN_ARC_TYPE;
6157    l_access_obj.USER_OR_GROUP_ID := p_group_id;
6158    l_access_obj.USER_OR_GROUP_TYPE := G_GROUP_ARC_TYPE;
6159    l_access_obj.EFFECTIVE_START_DATE := sysdate;
6160    l_access_obj.EXPIRATION_DATE := null;
6161    l_access_obj.CAN_VIEW_FLAG := p_access_flag_obj.can_view_flag;
6162    l_access_obj.CAN_CREATE_FLAG := p_access_flag_obj.can_create_flag;
6163    l_access_obj.CAN_DELETE_FLAG := p_access_flag_obj.can_delete_flag;
6164    l_access_obj.CAN_UPDATE_FLAG := p_access_flag_obj.can_update_flag;
6165    l_access_obj.CAN_CREATE_DIST_RULE_FLAG := p_access_flag_obj.can_create_dist_rule_flag;
6166    l_access_obj.CHL_APPROVER_FLAG := p_access_flag_obj.chl_approver_flag;
6167    l_access_obj.CHL_REQUIRED_FLAG := p_access_flag_obj.chl_required_flag;
6168    l_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG := p_access_flag_obj.chl_required_need_notif_flag;
6169 
6170 /*
6171    l_access_obj := AMV_ACCESS_OBJ_TYPE
6172                    (
6173                      FND_API.G_MISS_NUM,
6174                      1,
6175                      p_channel_id,
6176                      G_CHAN_ARC_TYPE,
6177                      p_group_id,
6178                      G_GROUP_ARC_TYPE,
6179                      sysdate,
6180                      null,
6181                      p_access_flag_obj.can_view_flag,
6182                      p_access_flag_obj.can_create_flag,
6183                      p_access_flag_obj.can_delete_flag,
6184                      p_access_flag_obj.can_update_flag,
6185                      p_access_flag_obj.can_create_dist_rule_flag,
6186                      p_access_flag_obj.chl_approver_flag,
6187                      p_access_flag_obj.chl_required_flag,
6188                      p_access_flag_obj.chl_required_need_notif_flag
6189                    );
6190 */
6191     Update_Access
6192     (
6193         p_api_version         => p_api_version,
6194         p_init_msg_list       => p_init_msg_list,
6195         p_commit              => p_commit,
6196         p_validation_level    => p_validation_level,
6197         x_return_status       => x_return_status,
6198         x_msg_count           => x_msg_count,
6199         x_msg_data            => x_msg_data,
6200         p_check_login_user    => p_check_login_user,
6201         p_access_obj          => l_access_obj
6202     );
6203 END Update_GroupChanAccess;
6204 --------------------------------------------------------------------------------
6205 PROCEDURE Update_GroupCateAccess
6206 (
6207     p_api_version         IN  NUMBER,
6208     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
6209     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
6210     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6211     x_return_status       OUT NOCOPY VARCHAR2,
6212     x_msg_count           OUT NOCOPY NUMBER,
6213     x_msg_data            OUT NOCOPY VARCHAR2,
6214     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
6215     p_group_id            IN  NUMBER,
6216     p_category_id         IN  NUMBER,
6217     p_access_flag_obj     IN  AMV_ACCESS_FLAG_OBJ_TYPE
6218 ) AS
6219 l_access_obj      AMV_ACCESS_OBJ_TYPE;
6220 BEGIN
6221    l_access_obj.ACCESS_ID := FND_API.G_MISS_NUM;
6222    l_access_obj.OBJECT_VERSION_NUMBER := 1;
6223    l_access_obj.ACCESS_TO_TABLE_CODE := p_category_id;
6224    l_access_obj.ACCESS_TO_TABLE_RECORD_ID := G_CATE_ARC_TYPE;
6225    l_access_obj.USER_OR_GROUP_ID := p_group_id;
6226    l_access_obj.USER_OR_GROUP_TYPE := G_GROUP_ARC_TYPE;
6227    l_access_obj.EFFECTIVE_START_DATE := sysdate;
6228    l_access_obj.EXPIRATION_DATE := null;
6229    l_access_obj.CAN_VIEW_FLAG := p_access_flag_obj.can_view_flag;
6230    l_access_obj.CAN_CREATE_FLAG := p_access_flag_obj.can_create_flag;
6231    l_access_obj.CAN_DELETE_FLAG := p_access_flag_obj.can_delete_flag;
6232    l_access_obj.CAN_UPDATE_FLAG := p_access_flag_obj.can_update_flag;
6233    l_access_obj.CAN_CREATE_DIST_RULE_FLAG := p_access_flag_obj.can_create_dist_rule_flag;
6234    l_access_obj.CHL_APPROVER_FLAG := p_access_flag_obj.chl_approver_flag;
6235    l_access_obj.CHL_REQUIRED_FLAG := p_access_flag_obj.chl_required_flag;
6236    l_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG := p_access_flag_obj.chl_required_need_notif_flag;
6237 
6238 /*
6239    l_access_obj := AMV_ACCESS_OBJ_TYPE
6240                    (
6241                      FND_API.G_MISS_NUM,
6242                      1,
6243                      p_category_id,
6244                      G_CATE_ARC_TYPE,
6245                      p_group_id,
6246                      G_GROUP_ARC_TYPE,
6247                      sysdate,
6248                      null,
6249                      p_access_flag_obj.can_view_flag,
6250                      p_access_flag_obj.can_create_flag,
6251                      p_access_flag_obj.can_delete_flag,
6252                      p_access_flag_obj.can_update_flag,
6253                      p_access_flag_obj.can_create_dist_rule_flag,
6254                      p_access_flag_obj.chl_approver_flag,
6255                      p_access_flag_obj.chl_required_flag,
6256                      p_access_flag_obj.chl_required_need_notif_flag
6257                    );
6258 */
6259     Update_Access
6260     (
6261         p_api_version         => p_api_version,
6262         p_init_msg_list       => p_init_msg_list,
6263         p_commit              => p_commit,
6264         p_validation_level    => p_validation_level,
6265         x_return_status       => x_return_status,
6266         x_msg_count           => x_msg_count,
6267         x_msg_data            => x_msg_data,
6268         p_check_login_user    => p_check_login_user,
6269         p_access_obj          => l_access_obj
6270     );
6271 END Update_GroupCateAccess;
6272 --------------------------------------------------------------------------------
6273 PROCEDURE Update_GroupItemAccess
6274 (
6275     p_api_version         IN  NUMBER,
6276     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
6277     p_commit              IN  VARCHAR2 := FND_API.G_FALSE,
6278     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6279     x_return_status       OUT NOCOPY VARCHAR2,
6280     x_msg_count           OUT NOCOPY NUMBER,
6281     x_msg_data            OUT NOCOPY VARCHAR2,
6282     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
6283     p_group_id            IN  NUMBER,
6284     p_item_id             IN  NUMBER,
6285     p_access_flag_obj     IN  AMV_ACCESS_FLAG_OBJ_TYPE
6286 ) AS
6287 l_access_obj      AMV_ACCESS_OBJ_TYPE;
6288 BEGIN
6289    l_access_obj.ACCESS_ID := FND_API.G_MISS_NUM;
6290    l_access_obj.OBJECT_VERSION_NUMBER := 1;
6291    l_access_obj.ACCESS_TO_TABLE_CODE := p_item_id;
6292    l_access_obj.ACCESS_TO_TABLE_RECORD_ID := G_ITEM_ARC_TYPE;
6293    l_access_obj.USER_OR_GROUP_ID := p_group_id;
6294    l_access_obj.USER_OR_GROUP_TYPE := G_GROUP_ARC_TYPE;
6295    l_access_obj.EFFECTIVE_START_DATE := sysdate;
6296    l_access_obj.EXPIRATION_DATE := null;
6297    l_access_obj.CAN_VIEW_FLAG := p_access_flag_obj.can_view_flag;
6298    l_access_obj.CAN_CREATE_FLAG := p_access_flag_obj.can_create_flag;
6299    l_access_obj.CAN_DELETE_FLAG := p_access_flag_obj.can_delete_flag;
6300    l_access_obj.CAN_UPDATE_FLAG := p_access_flag_obj.can_update_flag;
6301    l_access_obj.CAN_CREATE_DIST_RULE_FLAG := p_access_flag_obj.can_create_dist_rule_flag;
6302    l_access_obj.CHL_APPROVER_FLAG := p_access_flag_obj.chl_approver_flag;
6303    l_access_obj.CHL_REQUIRED_FLAG := p_access_flag_obj.chl_required_flag;
6304    l_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG := p_access_flag_obj.chl_required_need_notif_flag;
6305 
6306 /*
6307    l_access_obj := AMV_ACCESS_OBJ_TYPE
6308                    (
6309                      FND_API.G_MISS_NUM,
6310                      1,
6311                      p_item_id,
6312                      G_ITEM_ARC_TYPE,
6313                      p_group_id,
6314                      G_GROUP_ARC_TYPE,
6315                      sysdate,
6316                      null,
6317                      p_access_flag_obj.can_view_flag,
6318                      p_access_flag_obj.can_create_flag,
6319                      p_access_flag_obj.can_delete_flag,
6320                      p_access_flag_obj.can_update_flag,
6321                      p_access_flag_obj.can_create_dist_rule_flag,
6322                      p_access_flag_obj.chl_approver_flag,
6323                      p_access_flag_obj.chl_required_flag,
6324                      p_access_flag_obj.chl_required_need_notif_flag
6325                    );
6326 */
6327     Update_Access
6328     (
6329         p_api_version         => p_api_version,
6330         p_init_msg_list       => p_init_msg_list,
6331         p_commit              => p_commit,
6332         p_validation_level    => p_validation_level,
6333         x_return_status       => x_return_status,
6334         x_msg_count           => x_msg_count,
6335         x_msg_data            => x_msg_data,
6336         p_check_login_user    => p_check_login_user,
6337         p_access_obj          => l_access_obj
6338     );
6339 END Update_GroupItemAccess;
6340 --------------------------------------------------------------------------------
6341 --------------------------------------------------------------------------------
6342 PROCEDURE Get_ChannelAccess
6343 (
6344     p_api_version          IN  NUMBER,
6345     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
6346     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6347     x_return_status        OUT NOCOPY VARCHAR2,
6348     x_msg_count            OUT NOCOPY NUMBER,
6349     x_msg_data             OUT NOCOPY VARCHAR2,
6350     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
6351     p_user_or_group_id     IN  NUMBER,
6352     p_user_or_group_type   IN  VARCHAR2,
6353     x_channel_name_varray  OUT NOCOPY AMV_CHAR_VARRAY_TYPE,
6354     x_access_obj_varray    OUT NOCOPY AMV_ACCESS_OBJ_VARRAY
6355 ) AS
6356 l_api_name             CONSTANT VARCHAR2(30) := 'Get_ChannelAccess';
6357 l_api_version          CONSTANT NUMBER := 1.0;
6358 l_current_user_id      NUMBER;
6359 l_current_login_id     NUMBER;
6360 l_current_resource_id  NUMBER;
6361 l_current_user_status  VARCHAR2(30);
6362 l_count                NUMBER;
6363 --
6364 CURSOR Get_ChannelAccess_csr IS
6365 Select
6366    C.CHANNEL_NAME,
6367    U.ACCESS_TO_TABLE_RECORD_ID,
6368    U.ACCESS_ID,
6369    U.OBJECT_VERSION_NUMBER,
6370    U.EFFECTIVE_START_DATE,
6371    U.EXPIRATION_DATE,
6372    U.CAN_VIEW_FLAG,
6373    U.CAN_CREATE_FLAG,
6374    U.CAN_DELETE_FLAG,
6375    U.CAN_UPDATE_FLAG,
6376    U.CAN_CREATE_DIST_RULE_FLAG,
6377    U.CHL_APPROVER_FLAG,
6378    U.CHL_REQUIRED_FLAG,
6379    U.CHL_REQUIRED_NEED_NOTIF_FLAG
6380 From  amv_u_access u, amv_c_channels_vl c
6381 Where u.user_or_group_id = p_user_or_group_id
6382 And   u.user_or_group_type = p_user_or_group_type
6383 And   access_to_table_code = G_CHAN_ARC_TYPE
6384 And   u.access_to_table_record_id = c.channel_id;
6385 --
6386 BEGIN
6387     -- Standard call to check for call compatibility.
6388     IF NOT FND_API.Compatible_API_Call (
6389          l_api_version,
6390          p_api_version,
6391          l_api_name,
6392          G_PKG_NAME) THEN
6393         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
6394     END IF;
6395     --Initialize message list if p_init_msg_list is TRUE.
6396     IF FND_API.To_Boolean (p_init_msg_list) THEN
6397        FND_MSG_PUB.initialize;
6398     END IF;
6399     -- Initialize API return status to success
6400     x_return_status := FND_API.G_RET_STS_SUCCESS;
6401     -- Get the current (login) user id.
6402     AMV_UTILITY_PVT.Get_UserInfo(
6403        x_user_id     => l_current_user_id,
6404        x_login_id    => l_current_login_id,
6405        x_resource_id => l_current_resource_id,
6406        x_user_status => l_current_user_status
6407        );
6408     IF (p_check_login_user = FND_API.G_TRUE) THEN
6409        -- Check if user is login and has the required privilege.
6410        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
6411           -- User is not login.
6412           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6413               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
6414               FND_MSG_PUB.Add;
6415           END IF;
6416           RAISE  FND_API.G_EXC_ERROR;
6417        END IF;
6418     END IF;
6419     x_channel_name_varray := AMV_CHAR_VARRAY_TYPE();
6420     x_access_obj_varray   := AMV_ACCESS_OBJ_VARRAY();
6421     l_count := 0;
6422     FOR  cur IN Get_ChannelAccess_csr LOOP
6423         l_count := l_count + 1;
6424         x_channel_name_varray.extend;
6425         x_channel_name_varray(l_count) := cur.CHANNEL_NAME;
6426 
6427         x_access_obj_varray.extend;
6428         x_access_obj_varray(l_count).ACCESS_ID := cur.ACCESS_ID;
6429         x_access_obj_varray(l_count).OBJECT_VERSION_NUMBER := cur.OBJECT_VERSION_NUMBER;
6430         x_access_obj_varray(l_count).ACCESS_TO_TABLE_CODE := G_CHAN_ARC_TYPE;
6431         x_access_obj_varray(l_count).ACCESS_TO_TABLE_RECORD_ID := cur.ACCESS_TO_TABLE_RECORD_ID;
6432         x_access_obj_varray(l_count).USER_OR_GROUP_ID := p_user_or_group_id;
6433         x_access_obj_varray(l_count).USER_OR_GROUP_TYPE := p_user_or_group_type;
6434         x_access_obj_varray(l_count).EFFECTIVE_START_DATE := cur.EFFECTIVE_START_DATE;
6435         x_access_obj_varray(l_count).EXPIRATION_DATE := cur.EXPIRATION_DATE;
6436         x_access_obj_varray(l_count).CAN_VIEW_FLAG := cur.CAN_VIEW_FLAG;
6437         x_access_obj_varray(l_count).CAN_CREATE_FLAG := cur.CAN_CREATE_FLAG;
6438         x_access_obj_varray(l_count).CAN_DELETE_FLAG := cur.CAN_DELETE_FLAG;
6439         x_access_obj_varray(l_count).CAN_UPDATE_FLAG := cur.CAN_UPDATE_FLAG;
6440         x_access_obj_varray(l_count).CAN_CREATE_DIST_RULE_FLAG := cur.CAN_CREATE_DIST_RULE_FLAG;
6441         x_access_obj_varray(l_count).CHL_APPROVER_FLAG := cur.CHL_APPROVER_FLAG;
6442         x_access_obj_varray(l_count).CHL_REQUIRED_FLAG := cur.CHL_REQUIRED_FLAG;
6443         x_access_obj_varray(l_count).CHL_REQUIRED_NEED_NOTIF_FLAG := cur.CHL_REQUIRED_NEED_NOTIF_FLAG;
6444 /*
6445         x_access_obj_varray(l_count) := AMV_ACCESS_OBJ_TYPE(
6446           cur.ACCESS_ID,
6447           cur.OBJECT_VERSION_NUMBER,
6448           G_CHAN_ARC_TYPE,
6449           cur.ACCESS_TO_TABLE_RECORD_ID,
6450           p_user_or_group_id,
6451           p_user_or_group_type,
6452           cur.EFFECTIVE_START_DATE,
6453           cur.EXPIRATION_DATE,
6454           cur.CAN_VIEW_FLAG,
6455           cur.CAN_CREATE_FLAG,
6456           cur.CAN_DELETE_FLAG,
6457           cur.CAN_UPDATE_FLAG,
6458           cur.CAN_CREATE_DIST_RULE_FLAG,
6459           cur.CHL_APPROVER_FLAG,
6460           cur.CHL_REQUIRED_FLAG,
6461           cur.CHL_REQUIRED_NEED_NOTIF_FLAG
6462           );
6463 */
6464     END LOOP;
6465     --Standard call to get message count and if count=1, get the message
6466     FND_MSG_PUB.Count_And_Get (
6467        p_encoded => FND_API.G_FALSE,
6468        p_count => x_msg_count,
6469        p_data  => x_msg_data
6470        );
6471 EXCEPTION
6472    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6473        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6474        -- Standard call to get message count and if count=1, get the message
6475        FND_MSG_PUB.Count_And_Get (
6476           p_encoded => FND_API.G_FALSE,
6477           p_count => x_msg_count,
6478           p_data  => x_msg_data
6479           );
6480    WHEN FND_API.G_EXC_ERROR THEN
6481        x_return_status := FND_API.G_RET_STS_ERROR;
6482        -- Standard call to get message count and if count=1, get the message
6483        FND_MSG_PUB.Count_And_Get (
6484           p_encoded => FND_API.G_FALSE,
6485           p_count => x_msg_count,
6486           p_data  => x_msg_data
6487           );
6488    WHEN OTHERS THEN
6489        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6490        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6491           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
6492        END IF;
6493        -- Standard call to get message count and if count=1, get the message
6494        FND_MSG_PUB.Count_And_Get (
6495           p_encoded => FND_API.G_FALSE,
6496           p_count => x_msg_count,
6497           p_data  => x_msg_data
6498           );
6499 END Get_ChannelAccess;
6500 --------------------------------------------------------------------------------
6501 PROCEDURE Get_AccessPerChannel
6502 (
6503     p_api_version          IN  NUMBER,
6504     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
6505     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6506     x_return_status        OUT NOCOPY VARCHAR2,
6507     x_msg_count            OUT NOCOPY NUMBER,
6508     x_msg_data             OUT NOCOPY VARCHAR2,
6509     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
6510     p_channel_id           IN  NUMBER,
6511     p_user_or_group_type   IN  VARCHAR2,
6512     x_name_varray          OUT NOCOPY AMV_CHAR_VARRAY_TYPE,
6513     x_access_obj_varray    OUT NOCOPY AMV_ACCESS_OBJ_VARRAY
6514 ) AS
6515 l_api_name             CONSTANT VARCHAR2(30) := 'Get_AccessPerChannel';
6516 l_api_version          CONSTANT NUMBER := 1.0;
6517 l_current_user_id      NUMBER;
6518 l_current_login_id     NUMBER;
6519 l_current_resource_id  NUMBER;
6520 l_current_user_status  VARCHAR2(30);
6521 l_count                NUMBER;
6522 --
6523 CURSOR Get_GroupAccessPerChannel_csr IS
6524 Select
6525    G.GROUP_NAME NAME,
6526    U.USER_OR_GROUP_ID,
6527    U.USER_OR_GROUP_TYPE,
6528    U.ACCESS_TO_TABLE_RECORD_ID,
6529    U.ACCESS_TO_TABLE_CODE,
6530    U.ACCESS_ID,
6531    U.OBJECT_VERSION_NUMBER,
6532    U.EFFECTIVE_START_DATE,
6533    U.EXPIRATION_DATE,
6534    U.CAN_VIEW_FLAG,
6535    U.CAN_CREATE_FLAG,
6536    U.CAN_DELETE_FLAG,
6537    U.CAN_UPDATE_FLAG,
6538    U.CAN_CREATE_DIST_RULE_FLAG,
6539    U.CHL_APPROVER_FLAG,
6540    U.CHL_REQUIRED_FLAG,
6541    U.CHL_REQUIRED_NEED_NOTIF_FLAG
6542 From  amv_u_access u, jtf_rs_groups_vl g
6543 Where u.user_or_group_id = g.group_id
6544 And   u.user_or_group_type = G_GROUP_ARC_TYPE
6545 And   access_to_table_code = G_CHAN_ARC_TYPE
6546 And   u.access_to_table_record_id = p_channel_id;
6547 --
6548 CURSOR Get_UserAccessPerChannel_csr IS
6549 Select
6550    R.LAST_NAME || ', ' || R.FIRST_NAME NAME,
6551    U.USER_OR_GROUP_ID,
6552    U.USER_OR_GROUP_TYPE,
6553    U.ACCESS_TO_TABLE_RECORD_ID,
6554    U.ACCESS_TO_TABLE_CODE,
6555    U.ACCESS_ID,
6556    U.OBJECT_VERSION_NUMBER,
6557    U.EFFECTIVE_START_DATE,
6558    U.EXPIRATION_DATE,
6559    U.CAN_VIEW_FLAG,
6560    U.CAN_CREATE_FLAG,
6561    U.CAN_DELETE_FLAG,
6562    U.CAN_UPDATE_FLAG,
6563    U.CAN_CREATE_DIST_RULE_FLAG,
6564    U.CHL_APPROVER_FLAG,
6565    U.CHL_REQUIRED_FLAG,
6566    U.CHL_REQUIRED_NEED_NOTIF_FLAG
6567 From  amv_u_access u, amv_rs_all_res_extns_vl r
6568 Where u.user_or_group_id = r.resource_id
6569 And   u.user_or_group_type = G_USER_ARC_TYPE
6570 And   access_to_table_code = G_CHAN_ARC_TYPE
6571 And   u.access_to_table_record_id = p_channel_id;
6572 --
6573 BEGIN
6574     -- Standard call to check for call compatibility.
6575     IF NOT FND_API.Compatible_API_Call (
6576          l_api_version,
6577          p_api_version,
6578          l_api_name,
6579          G_PKG_NAME) THEN
6580         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
6581     END IF;
6582     --Initialize message list if p_init_msg_list is TRUE.
6583     IF FND_API.To_Boolean (p_init_msg_list) THEN
6584        FND_MSG_PUB.initialize;
6585     END IF;
6586     -- Initialize API return status to success
6587     x_return_status := FND_API.G_RET_STS_SUCCESS;
6588     -- Get the current (login) user id.
6589     AMV_UTILITY_PVT.Get_UserInfo(
6590        x_user_id     => l_current_user_id,
6591        x_login_id    => l_current_login_id,
6592        x_resource_id => l_current_resource_id,
6593        x_user_status => l_current_user_status
6594        );
6595     IF (p_check_login_user = FND_API.G_TRUE) THEN
6596        -- Check if user is login and has the required privilege.
6597        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
6598           -- User is not login.
6599           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6600               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
6601               FND_MSG_PUB.Add;
6602           END IF;
6603           RAISE  FND_API.G_EXC_ERROR;
6604        END IF;
6605     END IF;
6606     x_name_varray := AMV_CHAR_VARRAY_TYPE();
6607     x_access_obj_varray   := AMV_ACCESS_OBJ_VARRAY();
6608     l_count := 0;
6609     IF (p_user_or_group_type = G_GROUP_ARC_TYPE) THEN
6610         FOR  cur IN Get_GroupAccessPerChannel_csr LOOP
6611             l_count := l_count + 1;
6612             x_name_varray.extend;
6613             x_name_varray(l_count) := cur.NAME;
6614 
6615             x_access_obj_varray.extend;
6616             x_access_obj_varray(l_count).ACCESS_ID := cur.ACCESS_ID;
6617             x_access_obj_varray(l_count).OBJECT_VERSION_NUMBER := cur.OBJECT_VERSION_NUMBER;
6618             x_access_obj_varray(l_count).ACCESS_TO_TABLE_CODE := cur.ACCESS_TO_TABLE_CODE;
6619             x_access_obj_varray(l_count).ACCESS_TO_TABLE_RECORD_ID := cur.ACCESS_TO_TABLE_RECORD_ID;
6620             x_access_obj_varray(l_count).USER_OR_GROUP_ID := cur.USER_OR_GROUP_ID;
6621             x_access_obj_varray(l_count).USER_OR_GROUP_TYPE := cur.USER_OR_GROUP_TYPE;
6622             x_access_obj_varray(l_count).EFFECTIVE_START_DATE := cur.EFFECTIVE_START_DATE;
6623             x_access_obj_varray(l_count).EXPIRATION_DATE := cur.EXPIRATION_DATE;
6624             x_access_obj_varray(l_count).CAN_VIEW_FLAG := cur.CAN_VIEW_FLAG;
6625             x_access_obj_varray(l_count).CAN_CREATE_FLAG := cur.CAN_CREATE_FLAG;
6626             x_access_obj_varray(l_count).CAN_DELETE_FLAG := cur.CAN_DELETE_FLAG;
6627             x_access_obj_varray(l_count).CAN_UPDATE_FLAG := cur.CAN_UPDATE_FLAG;
6628             x_access_obj_varray(l_count).CAN_CREATE_DIST_RULE_FLAG := cur.CAN_CREATE_DIST_RULE_FLAG;
6629             x_access_obj_varray(l_count).CHL_APPROVER_FLAG := cur.CHL_APPROVER_FLAG;
6630             x_access_obj_varray(l_count).CHL_REQUIRED_FLAG := cur.CHL_REQUIRED_FLAG;
6631             x_access_obj_varray(l_count).CHL_REQUIRED_NEED_NOTIF_FLAG := cur.CHL_REQUIRED_NEED_NOTIF_FLAG;
6632 
6633 /*
6634             x_access_obj_varray(l_count) := AMV_ACCESS_OBJ_TYPE(
6635               cur.ACCESS_ID,
6636               cur.OBJECT_VERSION_NUMBER,
6637               cur.ACCESS_TO_TABLE_CODE,
6638               cur.ACCESS_TO_TABLE_RECORD_ID,
6639               cur.USER_OR_GROUP_ID,
6640               cur.USER_OR_GROUP_TYPE,
6641               cur.EFFECTIVE_START_DATE,
6642               cur.EXPIRATION_DATE,
6643               cur.CAN_VIEW_FLAG,
6644               cur.CAN_CREATE_FLAG,
6645               cur.CAN_DELETE_FLAG,
6646               cur.CAN_UPDATE_FLAG,
6647               cur.CAN_CREATE_DIST_RULE_FLAG,
6648               cur.CHL_APPROVER_FLAG,
6649               cur.CHL_REQUIRED_FLAG,
6650               cur.CHL_REQUIRED_NEED_NOTIF_FLAG
6651               );
6652 */
6653         END LOOP;
6654     ELSIF ( p_user_or_group_type = G_USER_ARC_TYPE) THEN
6655         FOR  cur IN Get_UserAccessPerChannel_csr LOOP
6656             l_count := l_count + 1;
6657             x_name_varray.extend;
6658             x_name_varray(l_count) := cur.NAME;
6659 
6660             x_access_obj_varray.extend;
6661             x_access_obj_varray(l_count).ACCESS_ID := cur.ACCESS_ID;
6662             x_access_obj_varray(l_count).OBJECT_VERSION_NUMBER := cur.OBJECT_VERSION_NUMBER;
6663             x_access_obj_varray(l_count).ACCESS_TO_TABLE_CODE := cur.ACCESS_TO_TABLE_CODE;
6664             x_access_obj_varray(l_count).ACCESS_TO_TABLE_RECORD_ID := cur.ACCESS_TO_TABLE_RECORD_ID;
6665             x_access_obj_varray(l_count).USER_OR_GROUP_ID := cur.USER_OR_GROUP_ID;
6666             x_access_obj_varray(l_count).USER_OR_GROUP_TYPE := cur.USER_OR_GROUP_TYPE;
6667             x_access_obj_varray(l_count).EFFECTIVE_START_DATE := cur.EFFECTIVE_START_DATE;
6668             x_access_obj_varray(l_count).EXPIRATION_DATE := cur.EXPIRATION_DATE;
6669             x_access_obj_varray(l_count).CAN_VIEW_FLAG := cur.CAN_VIEW_FLAG;
6670             x_access_obj_varray(l_count).CAN_CREATE_FLAG := cur.CAN_CREATE_FLAG;
6671             x_access_obj_varray(l_count).CAN_DELETE_FLAG := cur.CAN_DELETE_FLAG;
6672             x_access_obj_varray(l_count).CAN_UPDATE_FLAG := cur.CAN_UPDATE_FLAG;
6673             x_access_obj_varray(l_count).CAN_CREATE_DIST_RULE_FLAG := cur.CAN_CREATE_DIST_RULE_FLAG;
6674             x_access_obj_varray(l_count).CHL_APPROVER_FLAG := cur.CHL_APPROVER_FLAG;
6675             x_access_obj_varray(l_count).CHL_REQUIRED_FLAG := cur.CHL_REQUIRED_FLAG;
6676             x_access_obj_varray(l_count).CHL_REQUIRED_NEED_NOTIF_FLAG := cur.CHL_REQUIRED_NEED_NOTIF_FLAG;
6677 /*
6678             x_access_obj_varray(l_count) := AMV_ACCESS_OBJ_TYPE(
6679               cur.ACCESS_ID,
6680               cur.OBJECT_VERSION_NUMBER,
6681               cur.ACCESS_TO_TABLE_CODE,
6682               cur.ACCESS_TO_TABLE_RECORD_ID,
6683               cur.USER_OR_GROUP_ID,
6684               cur.USER_OR_GROUP_TYPE,
6685               cur.EFFECTIVE_START_DATE,
6686               cur.EXPIRATION_DATE,
6687               cur.CAN_VIEW_FLAG,
6688               cur.CAN_CREATE_FLAG,
6689               cur.CAN_DELETE_FLAG,
6690               cur.CAN_UPDATE_FLAG,
6691               cur.CAN_CREATE_DIST_RULE_FLAG,
6692               cur.CHL_APPROVER_FLAG,
6693               cur.CHL_REQUIRED_FLAG,
6694               cur.CHL_REQUIRED_NEED_NOTIF_FLAG
6695               );
6696 */
6697         END LOOP;
6698     END IF;
6699     --Standard call to get message count and if count=1, get the message
6700     FND_MSG_PUB.Count_And_Get (
6701        p_encoded => FND_API.G_FALSE,
6702        p_count => x_msg_count,
6703        p_data  => x_msg_data
6704        );
6705 EXCEPTION
6706    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6707        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6708        -- Standard call to get message count and if count=1, get the message
6709        FND_MSG_PUB.Count_And_Get (
6710           p_encoded => FND_API.G_FALSE,
6711           p_count => x_msg_count,
6712           p_data  => x_msg_data
6713           );
6714    WHEN FND_API.G_EXC_ERROR THEN
6715        x_return_status := FND_API.G_RET_STS_ERROR;
6716        -- Standard call to get message count and if count=1, get the message
6717        FND_MSG_PUB.Count_And_Get (
6718           p_encoded => FND_API.G_FALSE,
6719           p_count => x_msg_count,
6720           p_data  => x_msg_data
6721           );
6722    WHEN OTHERS THEN
6723        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6724        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6725           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
6726        END IF;
6727        -- Standard call to get message count and if count=1, get the message
6728        FND_MSG_PUB.Count_And_Get (
6729           p_encoded => FND_API.G_FALSE,
6730           p_count => x_msg_count,
6731           p_data  => x_msg_data
6732           );
6733 END Get_AccessPerChannel;
6734 --------------------------------------------------------------------------------
6735 --------------------------------------------------------------------------------
6736 PROCEDURE Get_BusinessObjectAccess
6737 (
6738     p_api_version          IN  NUMBER,
6739     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
6740     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6741     x_return_status        OUT NOCOPY VARCHAR2,
6742     x_msg_count            OUT NOCOPY NUMBER,
6743     x_msg_data             OUT NOCOPY VARCHAR2,
6744     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
6745     p_user_or_group_id     IN  NUMBER,
6746     p_user_or_group_type   IN  VARCHAR2,
6747     p_business_object_id   IN  NUMBER,
6748     p_business_object_type IN  VARCHAR2,
6749     x_access_obj           OUT NOCOPY AMV_ACCESS_OBJ_TYPE
6750 ) AS
6751 l_api_name             CONSTANT VARCHAR2(30) := 'Get_BusinessObjectAccess';
6752 l_api_version          CONSTANT NUMBER := 1.0;
6753 l_current_user_id      NUMBER;
6754 l_current_login_id     NUMBER;
6755 l_current_resource_id  NUMBER;
6756 l_current_user_status  VARCHAR2(30);
6757 --
6758 CURSOR Get_Access_csr IS
6759 Select
6760    ACCESS_ID,
6761    OBJECT_VERSION_NUMBER,
6762    EFFECTIVE_START_DATE,
6763    EXPIRATION_DATE,
6764    CAN_VIEW_FLAG,
6765    CAN_CREATE_FLAG,
6766    CAN_DELETE_FLAG,
6767    CAN_UPDATE_FLAG,
6768    CAN_CREATE_DIST_RULE_FLAG,
6769    CHL_APPROVER_FLAG,
6770    CHL_REQUIRED_FLAG,
6771    CHL_REQUIRED_NEED_NOTIF_FLAG
6772 From  amv_u_access
6773 Where user_or_group_id = p_user_or_group_id
6774 And   user_or_group_type = p_user_or_group_type
6775 And   access_to_table_record_id = p_business_object_id
6776 And   access_to_table_code = p_business_object_type;
6777 --
6778 BEGIN
6779     -- Standard call to check for call compatibility.
6780     IF NOT FND_API.Compatible_API_Call (
6781          l_api_version,
6782          p_api_version,
6783          l_api_name,
6784          G_PKG_NAME) THEN
6785         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
6786     END IF;
6787     --Initialize message list if p_init_msg_list is TRUE.
6788     IF FND_API.To_Boolean (p_init_msg_list) THEN
6789        FND_MSG_PUB.initialize;
6790     END IF;
6791     -- Initialize API return status to success
6792     x_return_status := FND_API.G_RET_STS_SUCCESS;
6793 
6794     x_access_obj.ACCESS_ID := FND_API.G_MISS_NUM;
6795     x_access_obj.OBJECT_VERSION_NUMBER := -1;
6796     x_access_obj.ACCESS_TO_TABLE_CODE := p_business_object_type;
6797     x_access_obj.ACCESS_TO_TABLE_RECORD_ID := p_business_object_id;
6798     x_access_obj.USER_OR_GROUP_ID := p_user_or_group_id;
6799     x_access_obj.USER_OR_GROUP_TYPE := p_user_or_group_type;
6800     x_access_obj.EFFECTIVE_START_DATE := null;
6801     x_access_obj.EXPIRATION_DATE := null;
6802     x_access_obj.CAN_VIEW_FLAG := FND_API.G_FALSE;
6803     x_access_obj.CAN_CREATE_FLAG := FND_API.G_FALSE;
6804     x_access_obj.CAN_DELETE_FLAG := FND_API.G_FALSE;
6805     x_access_obj.CAN_UPDATE_FLAG := FND_API.G_FALSE;
6806     x_access_obj.CAN_CREATE_DIST_RULE_FLAG := FND_API.G_FALSE;
6807     x_access_obj.CHL_APPROVER_FLAG := FND_API.G_FALSE;
6808     x_access_obj.CHL_REQUIRED_FLAG := FND_API.G_FALSE;
6809     x_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG := FND_API.G_FALSE;
6810 
6811 /*
6812     x_access_obj := AMV_ACCESS_OBJ_TYPE
6813                     (
6814                        FND_API.G_MISS_NUM,
6815                        -1,
6816                        p_business_object_type,
6817                        p_business_object_id,
6818                        p_user_or_group_id,
6819                        p_user_or_group_type,
6820                        null,
6821                        null,
6822                        FND_API.G_FALSE,
6823                        FND_API.G_FALSE,
6824                        FND_API.G_FALSE,
6825                        FND_API.G_FALSE,
6826                        FND_API.G_FALSE,
6827                        FND_API.G_FALSE,
6828                        FND_API.G_FALSE,
6829                        FND_API.G_FALSE
6830                     );
6831 */
6832     -- Get the current (login) user id.
6833     AMV_UTILITY_PVT.Get_UserInfo(
6834        x_user_id     => l_current_user_id,
6835        x_login_id    => l_current_login_id,
6836        x_resource_id => l_current_resource_id,
6837        x_user_status => l_current_user_status
6838        );
6839     IF (p_check_login_user = FND_API.G_TRUE) THEN
6840        -- Check if user is login and has the required privilege.
6841        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
6842           -- User is not login.
6843           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6844               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
6845               FND_MSG_PUB.Add;
6846           END IF;
6847           RAISE  FND_API.G_EXC_ERROR;
6848        END IF;
6849     END IF;
6850     OPEN  Get_Access_csr;
6851     FETCH Get_Access_csr INTO
6852           x_access_obj.ACCESS_ID,
6853           x_access_obj.OBJECT_VERSION_NUMBER,
6854           x_access_obj.EFFECTIVE_START_DATE,
6855           x_access_obj.EXPIRATION_DATE,
6856           x_access_obj.CAN_VIEW_FLAG,
6857           x_access_obj.CAN_CREATE_FLAG,
6858           x_access_obj.CAN_DELETE_FLAG,
6859           x_access_obj.CAN_UPDATE_FLAG,
6860           x_access_obj.CAN_CREATE_DIST_RULE_FLAG,
6861           x_access_obj.CHL_APPROVER_FLAG,
6862           x_access_obj.CHL_REQUIRED_FLAG,
6863           x_access_obj.CHL_REQUIRED_NEED_NOTIF_FLAG;
6864     CLOSE Get_Access_csr;
6865     --Standard call to get message count and if count=1, get the message
6866     FND_MSG_PUB.Count_And_Get (
6867        p_encoded => FND_API.G_FALSE,
6868        p_count => x_msg_count,
6869        p_data  => x_msg_data
6870        );
6871 EXCEPTION
6872    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6873        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6874        -- Standard call to get message count and if count=1, get the message
6875        FND_MSG_PUB.Count_And_Get (
6876           p_encoded => FND_API.G_FALSE,
6877           p_count => x_msg_count,
6878           p_data  => x_msg_data
6879           );
6880    WHEN FND_API.G_EXC_ERROR THEN
6881        x_return_status := FND_API.G_RET_STS_ERROR;
6882        -- Standard call to get message count and if count=1, get the message
6883        FND_MSG_PUB.Count_And_Get (
6884           p_encoded => FND_API.G_FALSE,
6885           p_count => x_msg_count,
6886           p_data  => x_msg_data
6887           );
6888    WHEN OTHERS THEN
6889        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6890        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6891           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
6892        END IF;
6893        -- Standard call to get message count and if count=1, get the message
6894        FND_MSG_PUB.Count_And_Get (
6895           p_encoded => FND_API.G_FALSE,
6896           p_count => x_msg_count,
6897           p_data  => x_msg_data
6898           );
6899 END Get_BusinessObjectAccess;
6900 --------------------------------------------------------------------------------
6901 PROCEDURE Get_BusinessObjectAccess
6902 (
6903     p_api_version          IN  NUMBER,
6904     p_init_msg_list        IN  VARCHAR2 := FND_API.G_FALSE,
6905     p_validation_level     IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6906     x_return_status        OUT NOCOPY VARCHAR2,
6907     x_msg_count            OUT NOCOPY NUMBER,
6908     x_msg_data             OUT NOCOPY VARCHAR2,
6909     p_check_login_user     IN  VARCHAR2 := FND_API.G_TRUE,
6910     p_include_group_flag   IN  VARCHAR2 := FND_API.G_TRUE,
6911     p_check_effective_date IN  VARCHAR2 := FND_API.G_TRUE,
6912     p_user_or_group_id     IN  NUMBER,
6913     p_user_or_group_type   IN  VARCHAR2,
6914     p_business_object_id   IN  NUMBER,
6915     p_business_object_type IN  VARCHAR2,
6916     x_access_flag_obj      OUT NOCOPY AMV_ACCESS_FLAG_OBJ_TYPE
6917 ) AS
6918 l_api_name             CONSTANT VARCHAR2(30) := 'Get_BusinessObjectAccess';
6919 l_api_version          CONSTANT NUMBER := 1.0;
6920 l_current_user_id      NUMBER;
6921 l_current_login_id     NUMBER;
6922 l_current_resource_id  NUMBER;
6923 l_current_user_status  VARCHAR2(30);
6924 --
6925 l_start_date           DATE;
6926 l_end_date             DATE;
6927 --
6928 CURSOR Get_ChannelEffDate_csr(p_id IN NUMBER) IS
6929 Select
6930    effective_start_date,
6931    expiration_date
6932 From  amv_c_channels_b
6933 Where channel_id = p_id;
6934 --
6935 CURSOR Get_ItemEffDate_csr(p_id IN NUMBER) IS
6936 Select
6937    actual_avail_from_date effective_start_date,
6938    actual_avail_to_date   expiration_date
6939 From  ams_deliverables_all_b
6940 Where deliverable_id = p_id;
6941 --
6942 CURSOR Get_Access_csr IS
6943 Select
6944    CAN_VIEW_FLAG,
6945    CAN_CREATE_FLAG,
6946    CAN_DELETE_FLAG,
6947    CAN_UPDATE_FLAG,
6948    CAN_CREATE_DIST_RULE_FLAG,
6949    CHL_APPROVER_FLAG,
6950    CHL_REQUIRED_FLAG,
6951    CHL_REQUIRED_NEED_NOTIF_FLAG
6952 From  amv_u_access
6953 Where user_or_group_id = p_user_or_group_id
6954 And   user_or_group_type = p_user_or_group_type
6955 And   access_to_table_record_id = p_business_object_id
6956 And   access_to_table_code = p_business_object_type;
6957 --
6958 CURSOR Get_ResourceAccess_csr IS
6959 Select A.CAN_VIEW_FLAG,
6960    	  A.CAN_CREATE_FLAG,
6961    	  A.CAN_DELETE_FLAG,
6962    	  A.CAN_UPDATE_FLAG,
6963    	  A.CAN_CREATE_DIST_RULE_FLAG,
6964    	  A.CHL_APPROVER_FLAG,
6965    	  A.CHL_REQUIRED_FLAG,
6966    	  A.CHL_REQUIRED_NEED_NOTIF_FLAG
6967 From  amv_u_access a
6968 ,     jtf_rs_resource_extns r
6969 Where a.user_or_group_id = p_user_or_group_id
6970 And   a.user_or_group_type = G_USER_ARC_TYPE
6971 And   a.access_to_table_record_id = p_business_object_id
6972 And   a.access_to_table_code = p_business_object_type
6973 And   nvl(a.effective_start_date, sysdate-1) < sysdate
6974 And   nvl(a.expiration_date, sysdate+1) > sysdate
6975 And   r.resource_id = a.user_or_group_id
6976 --And   r.active_flag = 'Y'
6977 ;
6978 --
6979 CURSOR Get_GroupAccess_csr IS
6980 Select
6981    A.CAN_VIEW_FLAG,
6982    A.CAN_CREATE_FLAG,
6983    A.CAN_DELETE_FLAG,
6984    A.CAN_UPDATE_FLAG,
6985    A.CAN_CREATE_DIST_RULE_FLAG,
6986    A.CHL_APPROVER_FLAG,
6987    A.CHL_REQUIRED_FLAG,
6988    A.CHL_REQUIRED_NEED_NOTIF_FLAG
6989 From  amv_u_access a,  jtf_rs_groups_vl g
6990 Where a.user_or_group_id = p_user_or_group_id
6991 And   a.user_or_group_type = G_GROUP_ARC_TYPE
6992 And   a.access_to_table_record_id = p_business_object_id
6993 And   a.access_to_table_code = p_business_object_type
6994 And   nvl(a.effective_start_date, sysdate-1) < sysdate
6995 And   nvl(a.expiration_date, sysdate+1) > sysdate
6996 And   g.group_id = a.user_or_group_id
6997 And   nvl(g.start_date_active, sysdate-1) < sysdate
6998 And   nvl(g.end_date_active, sysdate+1) > sysdate;
6999 --
7000 CURSOR Get_AllGroupAccess_csr IS
7001 Select
7002    A.CAN_VIEW_FLAG,
7003    A.CAN_CREATE_FLAG,
7004    A.CAN_DELETE_FLAG,
7005    A.CAN_UPDATE_FLAG,
7006    A.CAN_CREATE_DIST_RULE_FLAG,
7007    A.CHL_APPROVER_FLAG,
7008    A.CHL_REQUIRED_FLAG,
7009    A.CHL_REQUIRED_NEED_NOTIF_FLAG
7010 From  amv_u_access a, jtf_rs_group_members m
7011 Where a.access_to_table_record_id = p_business_object_id
7012 And   a.access_to_table_code = p_business_object_type
7013 And   a.user_or_group_type = G_GROUP_ARC_TYPE
7014 And   a.user_or_group_id = m.group_id
7015 And   m.resource_id = p_user_or_group_id;
7016 --
7017 CURSOR Get_AllGroupAccess2_csr IS
7018 Select
7019    A.CAN_VIEW_FLAG,
7020    A.CAN_CREATE_FLAG,
7021    A.CAN_DELETE_FLAG,
7022    A.CAN_UPDATE_FLAG,
7023    A.CAN_CREATE_DIST_RULE_FLAG,
7024    A.CHL_APPROVER_FLAG,
7025    A.CHL_REQUIRED_FLAG,
7026    A.CHL_REQUIRED_NEED_NOTIF_FLAG
7027 From  amv_u_access a, jtf_rs_group_members m, jtf_rs_groups_vl g
7028 Where a.access_to_table_record_id = p_business_object_id
7029 And   a.access_to_table_code =p_business_object_type
7030 And   nvl(a.effective_start_date, sysdate-1) < sysdate
7031 And   nvl(a.expiration_date, sysdate+1) > sysdate
7032 And   a.user_or_group_type = G_GROUP_ARC_TYPE
7033 And   a.user_or_group_id = m.group_id
7034 And   m.resource_id = p_user_or_group_id
7035 --And   nvl(m.start_date_active, sysdate-1) < sysdate
7036 --And   nvl(m.end_date_active, sysdate+1) > sysdate
7037 And   g.group_id = m.group_id
7038 And   nvl(g.start_date_active, sysdate-1) < sysdate
7039 And   nvl(g.end_date_active, sysdate+1) > sysdate;
7040 --
7041 BEGIN
7042     -- Standard call to check for call compatibility.
7043     IF NOT FND_API.Compatible_API_Call (
7044          l_api_version,
7045          p_api_version,
7046          l_api_name,
7047          G_PKG_NAME) THEN
7048         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
7049     END IF;
7050     --Initialize message list if p_init_msg_list is TRUE.
7051     IF FND_API.To_Boolean (p_init_msg_list) THEN
7052        FND_MSG_PUB.initialize;
7053     END IF;
7054     -- Initialize API return status to success
7055     x_return_status := FND_API.G_RET_STS_SUCCESS;
7056 
7057     x_access_flag_obj.CAN_VIEW_FLAG := FND_API.G_FALSE;
7058     x_access_flag_obj.CAN_CREATE_FLAG := FND_API.G_FALSE;
7059     x_access_flag_obj.CAN_DELETE_FLAG := FND_API.G_FALSE;
7060     x_access_flag_obj.CAN_UPDATE_FLAG := FND_API.G_FALSE;
7061     x_access_flag_obj.CAN_CREATE_DIST_RULE_FLAG := FND_API.G_FALSE;
7062     x_access_flag_obj.CHL_APPROVER_FLAG := FND_API.G_FALSE;
7063     x_access_flag_obj.CHL_REQUIRED_FLAG := FND_API.G_FALSE;
7064     x_access_flag_obj.CHL_REQUIRED_NEED_NOTIF_FLAG := FND_API.G_FALSE;
7065 
7066 /*
7067     x_access_flag_obj := AMV_ACCESS_FLAG_OBJ_TYPE
7068                          (
7069                             FND_API.G_FALSE,
7070                             FND_API.G_FALSE,
7071                             FND_API.G_FALSE,
7072                             FND_API.G_FALSE,
7073                             FND_API.G_FALSE,
7074                             FND_API.G_FALSE,
7075                             FND_API.G_FALSE,
7076                             FND_API.G_FALSE
7077                          );
7078 */
7079     -- Get the current (login) user id.
7080     AMV_UTILITY_PVT.Get_UserInfo(
7081        x_user_id     => l_current_user_id,
7082        x_login_id    => l_current_login_id,
7083        x_resource_id => l_current_resource_id,
7084        x_user_status => l_current_user_status
7085        );
7086     IF (p_check_login_user = FND_API.G_TRUE) THEN
7087        -- Check if user is login and has the required privilege.
7088        IF (l_current_login_id = FND_API.G_MISS_NUM) THEN
7089           -- User is not login.
7090           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7091               FND_MESSAGE.Set_name('AMV','AMV_USER_NOT_LOGIN');
7092               FND_MSG_PUB.Add;
7093           END IF;
7094           RAISE  FND_API.G_EXC_ERROR;
7095        END IF;
7096     END IF;
7097     -- Check the effective date for the business object:
7098     -- Application, channel, category, and item
7099     IF (p_check_effective_date = FND_API.G_TRUE) THEN
7100        IF (p_business_object_type = G_ITEM_ARC_TYPE) THEN
7101           l_start_date := sysdate+1;
7102           l_end_date := sysdate-1;
7103           OPEN  Get_ItemEffDate_csr(p_business_object_id);
7104           FETCH Get_ItemEffDate_csr INTO l_start_date, l_end_date;
7105           CLOSE Get_ItemEffDate_csr;
7106           IF (l_start_date > sysdate OR l_end_date < sysdate) THEN
7107           --Standard call to get message count and if count=1, get the message
7108               FND_MSG_PUB.Count_And_Get (
7109                   p_encoded => FND_API.G_FALSE,
7110                   p_count => x_msg_count,
7111                   p_data  => x_msg_data
7112               );
7113               return;
7114           END IF;
7115        ELSIF (p_business_object_type = G_CHAN_ARC_TYPE) THEN
7116           l_start_date := sysdate+1;
7117           l_end_date := sysdate-1;
7118           OPEN  Get_ChannelEffDate_csr(p_business_object_id);
7119           FETCH Get_ChannelEffDate_csr INTO l_start_date, l_end_date;
7120           CLOSE Get_ChannelEffDate_csr;
7121           IF (l_start_date > sysdate OR l_end_date < sysdate) THEN
7122           --Standard call to get message count and if count=1, get the message
7123               FND_MSG_PUB.Count_And_Get (
7124                   p_encoded => FND_API.G_FALSE,
7125                   p_count => x_msg_count,
7126                   p_data  => x_msg_data
7127               );
7128               return;
7129           END IF;
7130        ELSIF (p_business_object_type = G_CATE_ARC_TYPE) THEN
7131           null; -- There are no effective date in category
7132        ELSIF (p_business_object_type = G_APPL_ARC_TYPE) THEN
7133           null; -- There are no effective date in application
7134        END IF;
7135     END IF; --IF (p_check_effective_date = FND_API.G_TRUE)
7136     --
7137     IF (p_check_effective_date = FND_API.G_TRUE) THEN
7138        IF (p_user_or_group_type = G_GROUP_ARC_TYPE) THEN
7139           OPEN  Get_GroupAccess_csr;
7140           FETCH Get_GroupAccess_csr INTO
7141                 x_access_flag_obj.CAN_VIEW_FLAG,
7142                 x_access_flag_obj.CAN_CREATE_FLAG,
7143                 x_access_flag_obj.CAN_DELETE_FLAG,
7144                 x_access_flag_obj.CAN_UPDATE_FLAG,
7145                 x_access_flag_obj.CAN_CREATE_DIST_RULE_FLAG,
7146                 x_access_flag_obj.CHL_APPROVER_FLAG,
7147                 x_access_flag_obj.CHL_REQUIRED_FLAG,
7148                 x_access_flag_obj.CHL_REQUIRED_NEED_NOTIF_FLAG;
7149           CLOSE Get_GroupAccess_csr;
7150        ELSIF (p_user_or_group_type = G_USER_ARC_TYPE) THEN
7151           OPEN  Get_ResourceAccess_csr;
7152           FETCH Get_ResourceAccess_csr INTO
7153                 x_access_flag_obj.CAN_VIEW_FLAG,
7154                 x_access_flag_obj.CAN_CREATE_FLAG,
7155                 x_access_flag_obj.CAN_DELETE_FLAG,
7156                 x_access_flag_obj.CAN_UPDATE_FLAG,
7157                 x_access_flag_obj.CAN_CREATE_DIST_RULE_FLAG,
7158                 x_access_flag_obj.CHL_APPROVER_FLAG,
7159                 x_access_flag_obj.CHL_REQUIRED_FLAG,
7160                 x_access_flag_obj.CHL_REQUIRED_NEED_NOTIF_FLAG;
7161           CLOSE Get_ResourceAccess_csr;
7162           IF (p_include_group_flag = FND_API.G_TRUE) THEN
7163              FOR csr1 IN Get_AllGroupAccess2_csr LOOP
7164                 IF (csr1.CAN_VIEW_FLAG = FND_API.G_TRUE) THEN
7165                     x_access_flag_obj.CAN_VIEW_FLAG := FND_API.G_TRUE;
7166                 END IF;
7167                 IF (csr1.CAN_CREATE_FLAG = FND_API.G_TRUE) THEN
7168                     x_access_flag_obj.CAN_CREATE_FLAG := FND_API.G_TRUE;
7169                 END IF;
7170                 IF (csr1.CAN_DELETE_FLAG = FND_API.G_TRUE) THEN
7171                     x_access_flag_obj.CAN_DELETE_FLAG := FND_API.G_TRUE;
7172                 END IF;
7173                 IF (csr1.CAN_UPDATE_FLAG = FND_API.G_TRUE) THEN
7174                     x_access_flag_obj.CAN_UPDATE_FLAG := FND_API.G_TRUE;
7175                 END IF;
7176                 IF (csr1.CAN_CREATE_DIST_RULE_FLAG = FND_API.G_TRUE) THEN
7177                     x_access_flag_obj.CAN_CREATE_DIST_RULE_FLAG :=
7178                        FND_API.G_TRUE;
7179                 END IF;
7180                 IF (csr1.CHL_APPROVER_FLAG = FND_API.G_TRUE) THEN
7181                     x_access_flag_obj.CHL_APPROVER_FLAG := FND_API.G_TRUE;
7182                 END IF;
7183                 IF (csr1.CHL_REQUIRED_FLAG = FND_API.G_TRUE) THEN
7184                     x_access_flag_obj.CHL_REQUIRED_FLAG := FND_API.G_TRUE;
7185                 END IF;
7186                 IF (csr1.CHL_REQUIRED_NEED_NOTIF_FLAG = FND_API.G_TRUE) THEN
7187                     x_access_flag_obj.CHL_REQUIRED_NEED_NOTIF_FLAG :=
7188                        FND_API.G_TRUE;
7189                 END IF;
7190              END LOOP;
7191           END IF; --IF (p_include_group_flag = FND_API.G_TRUE)
7192        END IF; --ELSIF (p_user_or_group_type = G_USER_ARC_TYPE)
7193     ELSE
7194        OPEN  Get_Access_csr;
7195        FETCH Get_Access_csr INTO
7196              x_access_flag_obj.CAN_VIEW_FLAG,
7197              x_access_flag_obj.CAN_CREATE_FLAG,
7198              x_access_flag_obj.CAN_DELETE_FLAG,
7199              x_access_flag_obj.CAN_UPDATE_FLAG,
7200              x_access_flag_obj.CAN_CREATE_DIST_RULE_FLAG,
7201              x_access_flag_obj.CHL_APPROVER_FLAG,
7202              x_access_flag_obj.CHL_REQUIRED_FLAG,
7203              x_access_flag_obj.CHL_REQUIRED_NEED_NOTIF_FLAG;
7204        CLOSE Get_Access_csr;
7205        --
7206        IF (p_user_or_group_type = G_USER_ARC_TYPE AND
7207           p_include_group_flag  = FND_API.G_TRUE) THEN
7208           FOR csr1 IN Get_AllGroupAccess_csr LOOP
7209              IF (csr1.CAN_VIEW_FLAG = FND_API.G_TRUE) THEN
7210                  x_access_flag_obj.CAN_VIEW_FLAG := FND_API.G_TRUE;
7211              END IF;
7212              IF (csr1.CAN_CREATE_FLAG = FND_API.G_TRUE) THEN
7213                  x_access_flag_obj.CAN_CREATE_FLAG := FND_API.G_TRUE;
7214              END IF;
7215              IF (csr1.CAN_DELETE_FLAG = FND_API.G_TRUE) THEN
7216                  x_access_flag_obj.CAN_DELETE_FLAG := FND_API.G_TRUE;
7217              END IF;
7218              IF (csr1.CAN_UPDATE_FLAG = FND_API.G_TRUE) THEN
7219                  x_access_flag_obj.CAN_UPDATE_FLAG := FND_API.G_TRUE;
7220              END IF;
7221              IF (csr1.CAN_CREATE_DIST_RULE_FLAG = FND_API.G_TRUE) THEN
7222                  x_access_flag_obj.CAN_CREATE_DIST_RULE_FLAG := FND_API.G_TRUE;
7223              END IF;
7224              IF (csr1.CHL_APPROVER_FLAG = FND_API.G_TRUE) THEN
7225                  x_access_flag_obj.CHL_APPROVER_FLAG := FND_API.G_TRUE;
7226              END IF;
7227              IF (csr1.CHL_REQUIRED_FLAG = FND_API.G_TRUE) THEN
7228                  x_access_flag_obj.CHL_REQUIRED_FLAG := FND_API.G_TRUE;
7229              END IF;
7230              IF (csr1.CHL_REQUIRED_NEED_NOTIF_FLAG = FND_API.G_TRUE) THEN
7231                  x_access_flag_obj.CHL_REQUIRED_NEED_NOTIF_FLAG :=
7232                     FND_API.G_TRUE;
7233              END IF;
7234           END LOOP;
7235        END IF;
7236     END IF; --IF (p_check_effective_date = FND_API.G_TRUE)
7237     --Standard call to get message count and if count=1, get the message
7238     FND_MSG_PUB.Count_And_Get (
7239        p_encoded => FND_API.G_FALSE,
7240        p_count => x_msg_count,
7241        p_data  => x_msg_data
7242        );
7243 EXCEPTION
7244    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7245        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7246        -- Standard call to get message count and if count=1, get the message
7247        FND_MSG_PUB.Count_And_Get (
7248           p_encoded => FND_API.G_FALSE,
7249           p_count => x_msg_count,
7250           p_data  => x_msg_data
7251           );
7252    WHEN FND_API.G_EXC_ERROR THEN
7253        x_return_status := FND_API.G_RET_STS_ERROR;
7254        -- Standard call to get message count and if count=1, get the message
7255        FND_MSG_PUB.Count_And_Get (
7256           p_encoded => FND_API.G_FALSE,
7257           p_count => x_msg_count,
7258           p_data  => x_msg_data
7259           );
7260    WHEN OTHERS THEN
7261        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7262        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7263           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
7264        END IF;
7265        -- Standard call to get message count and if count=1, get the message
7266        FND_MSG_PUB.Count_And_Get (
7267           p_encoded => FND_API.G_FALSE,
7268           p_count => x_msg_count,
7269           p_data  => x_msg_data
7270           );
7271 END Get_BusinessObjectAccess;
7272 --------------------------------------------------------------------------------
7273 PROCEDURE Get_ResourceApplAccess
7274 (
7275     p_api_version         IN  NUMBER,
7276     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
7277     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
7278     x_return_status       OUT NOCOPY VARCHAR2,
7279     x_msg_count           OUT NOCOPY NUMBER,
7280     x_msg_data            OUT NOCOPY VARCHAR2,
7281     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
7282     p_include_group_flag  IN  VARCHAR2 := FND_API.G_TRUE,
7283     p_resource_id         IN  NUMBER,
7284     p_application_id      IN  NUMBER,
7285     x_access_flag_obj     OUT NOCOPY AMV_ACCESS_FLAG_OBJ_TYPE
7286 ) AS
7287 BEGIN
7288     Get_BusinessObjectAccess
7289     (
7290         p_api_version         => p_api_version,
7291         p_init_msg_list       => p_init_msg_list,
7292         p_validation_level    => p_validation_level,
7293         x_return_status       => x_return_status,
7294         x_msg_count           => x_msg_count,
7295         x_msg_data            => x_msg_data,
7296         p_check_login_user    => p_check_login_user,
7297         p_include_group_flag  => p_include_group_flag,
7298         p_user_or_group_id    => p_resource_id,
7299         p_user_or_group_type  => G_USER_ARC_TYPE,
7300         p_business_object_id  => p_application_id,
7301         p_business_object_type => G_APPL_ARC_TYPE,
7302         x_access_flag_obj     => x_access_flag_obj
7303     );
7304 
7305 END Get_ResourceApplAccess;
7306 --------------------------------------------------------------------------------
7307 PROCEDURE Get_ResourceChanAccess
7308 (
7309     p_api_version         IN  NUMBER,
7310     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
7311     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
7312     x_return_status       OUT NOCOPY VARCHAR2,
7313     x_msg_count           OUT NOCOPY NUMBER,
7314     x_msg_data            OUT NOCOPY VARCHAR2,
7315     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
7316     p_include_group_flag  IN  VARCHAR2 := FND_API.G_TRUE,
7317     p_resource_id         IN  NUMBER,
7318     p_channel_id          IN  NUMBER,
7319     x_access_flag_obj     OUT NOCOPY AMV_ACCESS_FLAG_OBJ_TYPE
7320 ) AS
7321 BEGIN
7322     Get_BusinessObjectAccess
7323     (
7324         p_api_version         => p_api_version,
7325         p_init_msg_list       => p_init_msg_list,
7326         p_validation_level    => p_validation_level,
7327         x_return_status       => x_return_status,
7328         x_msg_count           => x_msg_count,
7329         x_msg_data            => x_msg_data,
7330         p_check_login_user    => p_check_login_user,
7331         p_include_group_flag  => p_include_group_flag,
7332         p_user_or_group_id    => p_resource_id,
7333         p_user_or_group_type  => G_USER_ARC_TYPE,
7334         p_business_object_id  => p_channel_id,
7335         p_business_object_type => G_CHAN_ARC_TYPE,
7336         x_access_flag_obj     => x_access_flag_obj
7337     );
7338 END Get_ResourceChanAccess;
7339 --------------------------------------------------------------------------------
7340 PROCEDURE Get_ResourceCateAccess
7341 (
7342     p_api_version         IN  NUMBER,
7343     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
7344     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
7345     x_return_status       OUT NOCOPY VARCHAR2,
7346     x_msg_count           OUT NOCOPY NUMBER,
7347     x_msg_data            OUT NOCOPY VARCHAR2,
7348     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
7349     p_include_group_flag  IN  VARCHAR2 := FND_API.G_TRUE,
7350     p_resource_id         IN  NUMBER,
7351     p_category_id         IN  NUMBER,
7352     x_access_flag_obj     OUT NOCOPY AMV_ACCESS_FLAG_OBJ_TYPE
7353 ) AS
7354 BEGIN
7355     Get_BusinessObjectAccess
7356     (
7357         p_api_version         => p_api_version,
7358         p_init_msg_list       => p_init_msg_list,
7359         p_validation_level    => p_validation_level,
7360         x_return_status       => x_return_status,
7361         x_msg_count           => x_msg_count,
7362         x_msg_data            => x_msg_data,
7363         p_check_login_user    => p_check_login_user,
7364         p_include_group_flag  => p_include_group_flag,
7365         p_user_or_group_id    => p_resource_id,
7366         p_user_or_group_type  => G_USER_ARC_TYPE,
7367         p_business_object_id  => p_category_id,
7368         p_business_object_type => G_CATE_ARC_TYPE,
7369         x_access_flag_obj     => x_access_flag_obj
7370     );
7371 END Get_ResourceCateAccess;
7372 --------------------------------------------------------------------------------
7373 PROCEDURE Get_ResourceItemAccess
7374 (
7375     p_api_version         IN  NUMBER,
7376     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
7377     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
7378     x_return_status       OUT NOCOPY VARCHAR2,
7379     x_msg_count           OUT NOCOPY NUMBER,
7380     x_msg_data            OUT NOCOPY VARCHAR2,
7381     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
7382     p_include_group_flag  IN  VARCHAR2 := FND_API.G_TRUE,
7383     p_resource_id         IN  NUMBER,
7384     p_item_id             IN  NUMBER,
7385     x_access_flag_obj     OUT NOCOPY AMV_ACCESS_FLAG_OBJ_TYPE
7386 ) AS
7387 BEGIN
7388     Get_BusinessObjectAccess
7389     (
7390         p_api_version         => p_api_version,
7391         p_init_msg_list       => p_init_msg_list,
7392         p_validation_level    => p_validation_level,
7393         x_return_status       => x_return_status,
7394         x_msg_count           => x_msg_count,
7395         x_msg_data            => x_msg_data,
7396         p_check_login_user    => p_check_login_user,
7397         p_include_group_flag  => p_include_group_flag,
7398         p_user_or_group_id    => p_resource_id,
7399         p_user_or_group_type  => G_USER_ARC_TYPE,
7400         p_business_object_id  => p_item_id,
7401         p_business_object_type => G_ITEM_ARC_TYPE,
7402         x_access_flag_obj     => x_access_flag_obj
7403     );
7404 END Get_ResourceItemAccess;
7405 --------------------------------------------------------------------------------
7406 PROCEDURE Get_GroupApplAccess
7407 (
7408     p_api_version         IN  NUMBER,
7409     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
7410     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
7411     x_return_status       OUT NOCOPY VARCHAR2,
7412     x_msg_count           OUT NOCOPY NUMBER,
7413     x_msg_data            OUT NOCOPY VARCHAR2,
7414     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
7415     p_group_id            IN  NUMBER,
7416     p_application_id      IN  NUMBER,
7417     x_access_flag_obj     OUT NOCOPY AMV_ACCESS_FLAG_OBJ_TYPE
7418 ) AS
7419 BEGIN
7420     Get_BusinessObjectAccess
7421     (
7422         p_api_version         => p_api_version,
7423         p_init_msg_list       => p_init_msg_list,
7424         p_validation_level    => p_validation_level,
7425         x_return_status       => x_return_status,
7426         x_msg_count           => x_msg_count,
7427         x_msg_data            => x_msg_data,
7428         p_check_login_user    => p_check_login_user,
7429         p_include_group_flag  => FND_API.G_FALSE,
7430         p_user_or_group_id    => p_group_id,
7431         p_user_or_group_type  => G_GROUP_ARC_TYPE,
7432         p_business_object_id  => p_application_id,
7433         p_business_object_type => G_APPL_ARC_TYPE,
7434         x_access_flag_obj     => x_access_flag_obj
7435     );
7436 END Get_GroupApplAccess;
7437 --------------------------------------------------------------------------------
7438 PROCEDURE Get_GroupChanAccess
7439 (
7440     p_api_version         IN  NUMBER,
7441     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
7442     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
7443     x_return_status       OUT NOCOPY VARCHAR2,
7444     x_msg_count           OUT NOCOPY NUMBER,
7445     x_msg_data            OUT NOCOPY VARCHAR2,
7446     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
7447     p_group_id            IN  NUMBER,
7448     p_channel_id          IN  NUMBER,
7449     x_access_flag_obj     OUT NOCOPY AMV_ACCESS_FLAG_OBJ_TYPE
7450 ) AS
7451 BEGIN
7452     Get_BusinessObjectAccess
7453     (
7454         p_api_version         => p_api_version,
7455         p_init_msg_list       => p_init_msg_list,
7456         p_validation_level    => p_validation_level,
7457         x_return_status       => x_return_status,
7458         x_msg_count           => x_msg_count,
7459         x_msg_data            => x_msg_data,
7460         p_check_login_user    => p_check_login_user,
7461         p_include_group_flag  => FND_API.G_FALSE,
7462         p_user_or_group_id    => p_group_id,
7463         p_user_or_group_type  => G_GROUP_ARC_TYPE,
7464         p_business_object_id  => p_channel_id,
7465         p_business_object_type => G_CHAN_ARC_TYPE,
7466         x_access_flag_obj     => x_access_flag_obj
7467     );
7468 END Get_GroupChanAccess;
7469 --------------------------------------------------------------------------------
7470 PROCEDURE Get_GroupCateAccess
7471 (
7472     p_api_version         IN  NUMBER,
7473     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
7474     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
7475     x_return_status       OUT NOCOPY VARCHAR2,
7476     x_msg_count           OUT NOCOPY NUMBER,
7477     x_msg_data            OUT NOCOPY VARCHAR2,
7478     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
7479     p_group_id            IN  NUMBER,
7480     p_category_id         IN  NUMBER,
7481     x_access_flag_obj     OUT NOCOPY AMV_ACCESS_FLAG_OBJ_TYPE
7482 ) AS
7483 BEGIN
7484     Get_BusinessObjectAccess
7485     (
7486         p_api_version         => p_api_version,
7487         p_init_msg_list       => p_init_msg_list,
7488         p_validation_level    => p_validation_level,
7489         x_return_status       => x_return_status,
7490         x_msg_count           => x_msg_count,
7491         x_msg_data            => x_msg_data,
7492         p_check_login_user    => p_check_login_user,
7493         p_include_group_flag  => FND_API.G_FALSE,
7494         p_user_or_group_id    => p_group_id,
7495         p_user_or_group_type  => G_GROUP_ARC_TYPE,
7496         p_business_object_id  => p_category_id,
7497         p_business_object_type => G_CATE_ARC_TYPE,
7498         x_access_flag_obj     => x_access_flag_obj
7499     );
7500 END Get_GroupCateAccess;
7501 --------------------------------------------------------------------------------
7502 PROCEDURE Get_ResourceItemAccess
7503 (
7504     p_api_version         IN  NUMBER,
7505     p_init_msg_list       IN  VARCHAR2 := FND_API.G_FALSE,
7506     p_validation_level    IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
7507     x_return_status       OUT NOCOPY VARCHAR2,
7508     x_msg_count           OUT NOCOPY NUMBER,
7509     x_msg_data            OUT NOCOPY VARCHAR2,
7510     p_check_login_user    IN  VARCHAR2 := FND_API.G_TRUE,
7511     p_group_id            IN  NUMBER,
7512     p_item_id             IN  NUMBER,
7513     x_access_flag_obj     OUT NOCOPY AMV_ACCESS_FLAG_OBJ_TYPE
7514 ) AS
7515 BEGIN
7516     Get_BusinessObjectAccess
7517     (
7518         p_api_version         => p_api_version,
7519         p_init_msg_list       => p_init_msg_list,
7520         p_validation_level    => p_validation_level,
7521         x_return_status       => x_return_status,
7522         x_msg_count           => x_msg_count,
7523         x_msg_data            => x_msg_data,
7524         p_check_login_user    => p_check_login_user,
7525         p_include_group_flag  => FND_API.G_FALSE,
7526         p_user_or_group_id    => p_group_id,
7527         p_user_or_group_type  => G_GROUP_ARC_TYPE,
7528         p_business_object_id  => p_item_id,
7529         p_business_object_type => G_ITEM_ARC_TYPE,
7530         x_access_flag_obj     => x_access_flag_obj
7531     );
7532 END Get_ResourceItemAccess;
7533 --------------------------------------------------------------------------------
7534 END amv_user_pvt;