1 package body BSC_SCORECARD_PUB as
2 /* $Header: BSCPTABB.pls 120.6 2007/12/10 11:19:39 bijain ship $ */
3 /*
4 +======================================================================================+
5 | Copyright (c) 2001 Oracle Corporation, Redwood Shores, CA, USA |
6 | All rights reserved. |
7 +======================================================================================+
8 | FILENAME |
9 | BSCPTABB.pls |
10 | |
11 | Creation Date: |
12 | October 22, 2001 |
13 | |
14 | Creator: |
15 | Mario-Jair Campos |
16 | |
17 | Description: |
18 | Public Body version |
19 | This package creates a BSC Scorecard/Tab. |
20 | |
21 | 20-MAR-03 PWALI for bug #2843082 |
22 | 24-JUL-03 Adeulgao fixed bug#3047536 granted access of tabs to BSC_PMD_USER |
23 | 15-DEC-03 Aditya Rao removed Dynamic SQLs for Bug #3236356 |
24 | 10-MAR-04 jxyu Modified for enhancement #3493589 |
25 | 06-MAY-04 ADRAO added code to handle BIS_DBI_ADMIN responsibility |
26 | 18-MAY-04 adrao Modified PL/SQL records and CRUD to accept SHORT_NAME |
27 | 20-JUL-04 adrao added PMU Responsibility for all S2E KPIs created from |
28 | Configure Region link from any responsibility. Bug#3775876 |
29 | 10-SEP-04 adrao modified Create_Tab_User_Access for Bug#3877636 |
30 | 13-JUL-05 akoduri Bug #4368221 Added the function Get_Custom_View_Name |
31 | 12-AGU-05 Kyadamak Bug#4462346 Modified function Check_Tab_UserAccess() |
32 | 23-AUG-05 visuri Added Validate_Scorecard_Revoke(),Chk_Child_Scd_Has_Access() |
33 | Validate_Scorecard_Access() for bug 4103395 |
34 | 01-SEP-05 Aditya Rao fixed Bug#4563456 in API Create_Tab_Access () |
35 | 02-NOV-07 bijain BugFix 6340598 |
36 +======================================================================================+
37 */
38
39 G_PKG_NAME CONSTANT varchar2(30) := 'BSC_SCORECARD_PUB';
40
41
42 --New procedure with OUT parameter
43 procedure Create_Tab(
44 p_commit IN varchar2 := FND_API.G_FALSE
45 ,p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
46 ,x_Bsc_Tab_Entity_Rec OUT NOCOPY BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
47 ,x_return_status OUT NOCOPY varchar2
48 ,x_msg_count OUT NOCOPY number
49 ,x_msg_data OUT NOCOPY varchar2
50 ) is
51
52 l_Bsc_Tab_Entity_Rec BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec;
53
54 begin
55 FND_MSG_PUB.Initialize;
56 x_return_status := FND_API.G_RET_STS_SUCCESS;
57 -- Assign all values in the passed "Record" parameter to the locally defined
58 -- "Record" variable.
59 l_Bsc_Tab_Entity_Rec := p_Bsc_Tab_Entity_Rec;
60
61 -- Check that this Tab name does not exist.
62 if l_Bsc_Tab_Entity_Rec.Bsc_Tab_Name is not null then
63 if BSC_SCORECARD_PVT.Validate_Tab(l_Bsc_Tab_Entity_Rec.Bsc_Tab_Name) > 0 then
64 FND_MESSAGE.SET_NAME('BSC','BSC_TAB_NAME_EXISTS');
65 FND_MESSAGE.SET_TOKEN('BSC_TAB', l_Bsc_Tab_Entity_Rec.Bsc_Tab_Name);
66 FND_MSG_PUB.ADD;
67 RAISE FND_API.G_EXC_ERROR;
68 end if;
69 end if;
70
71 -- Get the next id available for the current Tab.
72 -- Bug #3236356
73 SELECT (NVL(MAX(TAB_ID), 0) + 1)
74 INTO l_Bsc_Tab_Entity_Rec.Bsc_Tab_Id
75 FROM BSC_TABS_B;
76
77 --DBMS_OUTPUT.PUT_LINE('tab _id ==============' || l_Bsc_Tab_Entity_Rec.Bsc_Tab_Id);
78
79 -- If tab name is null then assign default name.
80 if l_Bsc_Tab_Entity_Rec.Bsc_Tab_Name is null then
81 l_Bsc_Tab_Entity_Rec.Bsc_Tab_Name := BSC_APPS.GET_LOOKUP_VALUE('BSC_UI_BUILDER', 'TAB')|| ' ' || l_Bsc_Tab_Entity_Rec.Bsc_Tab_Id;
82 end if;
83
84 -- Bug #3236356
85 SELECT (NVL(MAX(TAB_INDEX), 0) + 1)
86 INTO l_Bsc_Tab_Entity_Rec.Bsc_Tab_Index
87 FROM BSC_TABS_B;
88 -- The Tab needs an Index (location within BSC Tabs) get the next index.
89
90
91
92 --DBMS_OUTPUT.PUT_LINE('parent tab id==============' || l_Bsc_Tab_Entity_Rec.Bsc_Parent_Tab_Id);
93 --DBMS_OUTPUT.PUT_LINE('tab index ==============' || l_Bsc_Tab_Entity_Rec.Bsc_Tab_Index);
94 --DBMS_OUTPUT.PUT_LINE('tab name ==============' || l_Bsc_Tab_Entity_Rec.Bsc_Tab_Name);
95
96
97
98 BSC_SCORECARD_PVT.Create_Tab( p_commit
99 ,l_Bsc_Tab_Entity_Rec
100 ,x_return_status
101 ,x_msg_count
102 ,x_msg_data);
103 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
104 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
105 END IF;
106
107 IF(l_Bsc_Tab_Entity_Rec.Bsc_Short_Name is NULL) THEN
108 Create_Tab_Access( p_commit
109 ,l_Bsc_Tab_Entity_Rec
110 ,x_return_status
111 ,x_msg_count
112 ,x_msg_data);
113 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
114 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
115 END IF;
116
117 -- Role-based scorecard security.
118 -- Initally, grant admin access to scorecard creater, and view access to all other designers.
119 Create_Tab_Grants( p_commit
120 ,l_Bsc_Tab_Entity_Rec
121 ,x_return_status
122 ,x_msg_count
123 ,x_msg_data);
124
125 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
126 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
127 END IF;
128 END IF;
129 x_Bsc_Tab_Entity_Rec := l_Bsc_Tab_Entity_Rec;
130
131 EXCEPTION
132 WHEN FND_API.G_EXC_ERROR THEN
133 IF (x_msg_data IS NULL) THEN
134 FND_MSG_PUB.Count_And_Get
135 ( p_encoded => FND_API.G_FALSE
136 , p_count => x_msg_count
137 , p_data => x_msg_data
138 );
139 END IF;
140 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
141 x_return_status := FND_API.G_RET_STS_ERROR;
142 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
143 IF (x_msg_data IS NULL) THEN
144 FND_MSG_PUB.Count_And_Get
145 ( p_encoded => FND_API.G_FALSE
146 , p_count => x_msg_count
147 , p_data => x_msg_data
148 );
149 END IF;
150 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
151 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
152 WHEN NO_DATA_FOUND THEN
153 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
154 IF (x_msg_data IS NOT NULL) THEN
155 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Create_Tab with parameter x_Bsc_Tab_Entity_Rec ';
156 ELSE
157 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Create_Tab with parameter x_Bsc_Tab_Entity_Rec ';
158 END IF;
159 --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
160 WHEN OTHERS THEN
161 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
162 IF (x_msg_data IS NOT NULL) THEN
163 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Create_Tab with parameter x_Bsc_Tab_Entity_Rec ';
164 ELSE
165 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Create_Tab with parameter x_Bsc_Tab_Entity_Rec ';
166 END IF;
167 --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
168
169 end Create_Tab;
170
171
172 /************************************************************************************
173 ************************************************************************************/
174 --Modified procedure without OUT parameter
175 procedure Create_Tab(
176 p_commit IN varchar2 := FND_API.G_FALSE
177 ,p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
178 ,x_return_status OUT NOCOPY varchar2
179 ,x_msg_count OUT NOCOPY number
180 ,x_msg_data OUT NOCOPY varchar2
181 ) is
182
183 l_Bsc_Tab_Entity_Rec BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec;
184 l_Bsc_Tab_Entity_Rec_Out BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec;
185
186 begin
187 FND_MSG_PUB.Initialize;
188 x_return_status := FND_API.G_RET_STS_SUCCESS;
189 l_Bsc_Tab_Entity_Rec := p_Bsc_Tab_Entity_Rec;
190
191 BSC_SCORECARD_PUB.Create_Tab(
192 p_commit => p_commit
193 ,p_Bsc_Tab_Entity_Rec => l_Bsc_Tab_Entity_Rec
194 ,x_Bsc_Tab_Entity_Rec => l_Bsc_Tab_Entity_Rec_Out
195 ,x_return_status => x_return_status
196 ,x_msg_count => x_msg_count
197 ,x_msg_data => x_msg_data
198 );
199 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
200 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
201 END IF;
202
203
204 EXCEPTION
205 WHEN FND_API.G_EXC_ERROR THEN
206 IF (x_msg_data IS NULL) THEN
207 FND_MSG_PUB.Count_And_Get
208 ( p_encoded => FND_API.G_FALSE
209 , p_count => x_msg_count
210 , p_data => x_msg_data
211 );
212 END IF;
213 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
214 x_return_status := FND_API.G_RET_STS_ERROR;
215 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
216 IF (x_msg_data IS NULL) THEN
217 FND_MSG_PUB.Count_And_Get
218 ( p_encoded => FND_API.G_FALSE
219 , p_count => x_msg_count
220 , p_data => x_msg_data
221 );
222 END IF;
223 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
224 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
225 WHEN NO_DATA_FOUND THEN
226 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
227 IF (x_msg_data IS NOT NULL) THEN
228 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Create_Tab ';
229 ELSE
230 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Create_Tab ';
231 END IF;
232 --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
233 WHEN OTHERS THEN
234 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
235 IF (x_msg_data IS NOT NULL) THEN
236 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Create_Tab ';
237 ELSE
238 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Create_Tab ';
239 END IF;
240 --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
241
242 end Create_Tab;
243
244
245 /************************************************************************************
246 ************************************************************************************/
247 --new procedure. Initializing the Tab Entity record.
248 procedure Initialize_Tab_Entity_Rec(
249 p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
250 ,x_Bsc_Tab_Entity_Rec OUT NOCOPY BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
251 ,x_return_status OUT NOCOPY varchar2
252 ,x_msg_count OUT NOCOPY number
253 ,x_msg_data OUT NOCOPY varchar2
254 ) is
255
256 begin
257 FND_MSG_PUB.Initialize;
258 x_return_status := FND_API.G_RET_STS_SUCCESS;
259
260 x_Bsc_Tab_Entity_Rec := p_Bsc_Tab_Entity_Rec;
261
262 --set some default values
263 x_Bsc_Tab_Entity_Rec.Bsc_Kpi_Model := 1;
264 x_Bsc_Tab_Entity_Rec.Bsc_Bsc_Model := 0;
265 x_Bsc_Tab_Entity_Rec.Bsc_Default_Model := 0;
266 x_Bsc_Tab_Entity_Rec.Bsc_Created_By := 0;
267 x_Bsc_Tab_Entity_Rec.Bsc_Csf_Id := 0;
268 x_Bsc_Tab_Entity_Rec.Bsc_Csf_Type := 0;
269 x_Bsc_Tab_Entity_Rec.Bsc_Intermediate_Flag := 0;
270 x_Bsc_Tab_Entity_Rec.Bsc_Language := 'US';
271 x_Bsc_Tab_Entity_Rec.Bsc_Last_Updated_By := 0;
272 x_Bsc_Tab_Entity_Rec.Bsc_Last_Update_Login := 0;
273 x_Bsc_Tab_Entity_Rec.Bsc_Source_Language := 'US';
274
275
276 EXCEPTION
277 WHEN OTHERS THEN
278 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
279 IF (x_msg_data IS NOT NULL) THEN
280 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Initialize_Tab_Entity_Rec ';
281 ELSE
282 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Initialize_Tab_Entity_Rec ';
283 END IF;
284 RAISE;
285 end Initialize_Tab_Entity_Rec;
286
287
288 /************************************************************************************
289 ************************************************************************************/
290
291 procedure Retrieve_Tab(
292 p_commit IN varchar2 := FND_API.G_FALSE
293 ,p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
294 ,x_Bsc_Tab_Entity_Rec IN OUT NOCOPY BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
295 ,x_return_status OUT NOCOPY varchar2
296 ,x_msg_count OUT NOCOPY number
297 ,x_msg_data OUT NOCOPY varchar2
298 ) is
299
300 begin
301 FND_MSG_PUB.Initialize;
302 x_return_status := FND_API.G_RET_STS_SUCCESS;
303 BSC_SCORECARD_PVT.Retrieve_Tab( p_commit
304 ,p_Bsc_Tab_Entity_Rec
305 ,x_Bsc_Tab_Entity_Rec
306 ,x_return_status
307 ,x_msg_count
308 ,x_msg_data);
309
310 EXCEPTION
311 WHEN FND_API.G_EXC_ERROR THEN
312 IF (x_msg_data IS NULL) THEN
313 FND_MSG_PUB.Count_And_Get
314 ( p_encoded => FND_API.G_FALSE
315 , p_count => x_msg_count
316 , p_data => x_msg_data
317 );
318 END IF;
319 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
320 x_return_status := FND_API.G_RET_STS_ERROR;
321 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
322 IF (x_msg_data IS NULL) THEN
323 FND_MSG_PUB.Count_And_Get
324 ( p_encoded => FND_API.G_FALSE
325 , p_count => x_msg_count
326 , p_data => x_msg_data
327 );
328 END IF;
329 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
330 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
331 WHEN NO_DATA_FOUND THEN
332 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
333 IF (x_msg_data IS NOT NULL) THEN
334 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Retrieve_Tab ';
335 ELSE
336 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Retrieve_Tab ';
337 END IF;
338 --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
339 WHEN OTHERS THEN
340 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
341 IF (x_msg_data IS NOT NULL) THEN
342 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Retrieve_Tab ';
343 ELSE
344 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Retrieve_Tab ';
345 END IF;
346 --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
347
348 end Retrieve_Tab;
349
350 /************************************************************************************
351 ************************************************************************************/
352
353 procedure Update_Tab(
354 p_commit IN varchar2 := FND_API.G_FALSE
355 ,p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
356 ,x_return_status OUT NOCOPY varchar2
357 ,x_msg_count OUT NOCOPY number
358 ,x_msg_data OUT NOCOPY varchar2
359 ) is
360
361 begin
362 FND_MSG_PUB.Initialize;
363 x_return_status := FND_API.G_RET_STS_SUCCESS;
364 BSC_SCORECARD_PVT.Update_Tab( p_commit
365 ,p_Bsc_Tab_Entity_Rec
366 ,x_return_status
367 ,x_msg_count
368 ,x_msg_data);
369
370 EXCEPTION
371 WHEN FND_API.G_EXC_ERROR THEN
372 IF (x_msg_data IS NULL) THEN
373 FND_MSG_PUB.Count_And_Get
374 ( p_encoded => FND_API.G_FALSE
375 , p_count => x_msg_count
376 , p_data => x_msg_data
377 );
378 END IF;
379 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
380 x_return_status := FND_API.G_RET_STS_ERROR;
381 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
382 IF (x_msg_data IS NULL) THEN
383 FND_MSG_PUB.Count_And_Get
384 ( p_encoded => FND_API.G_FALSE
385 , p_count => x_msg_count
386 , p_data => x_msg_data
387 );
388 END IF;
389 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
390 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
391 WHEN NO_DATA_FOUND THEN
392 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
393 IF (x_msg_data IS NOT NULL) THEN
394 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Update_Tab ';
395 ELSE
396 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Update_Tab ';
397 END IF;
398 --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
399 WHEN OTHERS THEN
400 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
401 IF (x_msg_data IS NOT NULL) THEN
402 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Update_Tab ';
403 ELSE
404 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Update_Tab ';
405 END IF;
406 --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
407
408 end Update_Tab;
409
410 /************************************************************************************
411 ************************************************************************************/
412
413 procedure Delete_Tab(
414 p_commit IN varchar2 := FND_API.G_FALSE
415 ,p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
416 ,x_return_status OUT NOCOPY varchar2
417 ,x_msg_count OUT NOCOPY number
418 ,x_msg_data OUT NOCOPY varchar2
419 ) is
420
421 begin
422 FND_MSG_PUB.Initialize;
423 x_return_status := FND_API.G_RET_STS_SUCCESS;
424 BSC_SCORECARD_PVT.Delete_Tab( p_commit
425 ,p_Bsc_Tab_Entity_Rec
426 ,x_return_status
427 ,x_msg_count
428 ,x_msg_data);
429
430 EXCEPTION
431 WHEN FND_API.G_EXC_ERROR THEN
432 IF (x_msg_data IS NULL) THEN
433 FND_MSG_PUB.Count_And_Get
434 ( p_encoded => FND_API.G_FALSE
435 , p_count => x_msg_count
436 , p_data => x_msg_data
437 );
438 END IF;
439 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
440 x_return_status := FND_API.G_RET_STS_ERROR;
441 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
442 IF (x_msg_data IS NULL) THEN
443 FND_MSG_PUB.Count_And_Get
444 ( p_encoded => FND_API.G_FALSE
445 , p_count => x_msg_count
446 , p_data => x_msg_data
447 );
448 END IF;
449 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
450 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
451 WHEN NO_DATA_FOUND THEN
452 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
453 IF (x_msg_data IS NOT NULL) THEN
454 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Delete_Tab ';
455 ELSE
456 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Delete_Tab ';
457 END IF;
458 --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
459 WHEN OTHERS THEN
460 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
461 IF (x_msg_data IS NOT NULL) THEN
462 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Delete_Tab ';
463 ELSE
464 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Delete_Tab ';
465 END IF;
466 --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
467
468 end Delete_Tab;
469 /************************************************************************************
470 Function : Create_Tab_Access_For_Resp
471 Description : This function will assign a scorecard to a given responsibility
472 ***********************************************************************************/
473 PROCEDURE Create_Tab_Access_For_Resp(
474 p_Resposibility_Key IN VARCHAR2
475 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
476 ,p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
477 ,x_return_status OUT NOCOPY VARCHAR2
478 ,x_msg_count OUT NOCOPY NUMBER
479 ,x_msg_data OUT NOCOPY VARCHAR2
480 )IS
481 l_Bsc_Tab_Entity_Rec BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec;
482 l_Count NUMBER;
483
484 CURSOR c_Resp_Ids IS
485 SELECT responsibility_id
486 FROM fnd_responsibility
487 WHERE INSTR(','||p_Resposibility_Key||',',','||responsibility_key||',') > 0;
488
489 BEGIN
490 FND_MSG_PUB.Initialize;
491 x_return_status := FND_API.G_RET_STS_SUCCESS;
492 l_Bsc_Tab_Entity_Rec := p_Bsc_Tab_Entity_Rec;
493
494 FOR CD IN c_Resp_Ids LOOP
495 SELECT COUNT(1)
496 INTO l_Count
497 FROM bsc_user_tab_access
498 WHERE tab_id = p_Bsc_Tab_Entity_Rec.Bsc_Tab_Id
499 AND responsibility_id = CD.responsibility_id;
500 --dbms_output.put_line(' resp id :-' || CD.responsibility_id);
501 l_Bsc_Tab_Entity_Rec.Bsc_Responsibility_Id := CD.responsibility_id;
502
503 IF(l_Count = 0) THEN
504 --dbms_output.put_line(' calling create tab_access for resp id :-' || l_Bsc_Tab_Entity_Rec.Bsc_Responsibility_Id);
505 BSC_SCORECARD_PVT.Create_Tab_Access
506 ( p_commit
507 , l_Bsc_Tab_Entity_Rec
508 , x_return_status
509 , x_msg_count
510 , x_msg_data
511 );
512 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
513 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
514 END IF;
515 END IF;
516
517 END LOOP;
518
519 --dbms_output.put_line(' end loop:-' );
520
521 EXCEPTION
522 WHEN FND_API.G_EXC_ERROR THEN
523 IF (x_msg_data IS NULL) THEN
524 FND_MSG_PUB.Count_And_Get
525 ( p_encoded => FND_API.G_FALSE
526 , p_count => x_msg_count
527 , p_data => x_msg_data
528 );
529 END IF;
530 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
531 x_return_status := FND_API.G_RET_STS_ERROR;
532 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
533 IF (x_msg_data IS NULL) THEN
534 FND_MSG_PUB.Count_And_Get
535 ( p_encoded => FND_API.G_FALSE
536 , p_count => x_msg_count
537 , p_data => x_msg_data
538 );
539 END IF;
540 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
541 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
542 WHEN NO_DATA_FOUND THEN
543 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
544 IF (x_msg_data IS NOT NULL) THEN
545 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Create_Tab_Access_For_Resp ';
546 ELSE
547 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Create_Tab_Access_For_Resp ';
548 END IF;
549 --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
550 WHEN OTHERS THEN
551 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
552 IF (x_msg_data IS NOT NULL) THEN
553 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Create_Tab_Access_For_Resp ';
554 ELSE
555 x_msg_data := SQLERRM||' AT BSC_SCORECARD_PUB.Create_Tab_Access_For_Resp ';
556 END IF;
557 END Create_Tab_Access_For_Resp;
558
559
560 /************************************************************************************
561 ************************************************************************************/
562
563 PROCEDURE Create_Tab_Access(
564 p_commit IN VARCHAR2 := FND_API.G_FALSE
565 ,p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
566 ,x_return_status OUT NOCOPY VARCHAR2
567 ,x_msg_count OUT NOCOPY NUMBER
568 ,x_msg_data OUT NOCOPY VARCHAR2
569 ) IS
570
571 l_Bsc_Tab_Entity_Rec BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec;
572 l_Responsibility_Key FND_RESPONSIBILITY.RESPONSIBILITY_KEY%TYPE;
573 l_Comma_Sep_Resp_Key VARCHAR2(32000):= NULL;
574 l_Tab_Short_Name BSC_TABS_B.SHORT_NAME%TYPE := NULL;
575
576 BEGIN
577 FND_MSG_PUB.Initialize;
578 x_return_status := FND_API.G_RET_STS_SUCCESS;
579 l_Bsc_Tab_Entity_Rec := p_Bsc_Tab_Entity_Rec;
580
581 BEGIN
582 SELECT T.SHORT_NAME
583 INTO l_Tab_Short_Name
584 FROM BSC_TABS_B T
585 WHERE T.TAB_ID = l_Bsc_Tab_Entity_Rec.Bsc_Tab_Id;
586 EXCEPTION
587 WHEN NO_DATA_FOUND THEN
588 l_Tab_Short_Name := NULL;
589 END;
590
591 -- added for Bug#4563456
592 l_Responsibility_Key := BSC_UTILITY.Get_Responsibility_Key;
593
594 IF UPPER(l_Responsibility_Key) = 'BSC_DESIGNER' OR upper(l_Responsibility_Key) = 'BSC_MANAGER' OR l_Tab_Short_Name IS NOT NULL THEN
595 l_Comma_Sep_Resp_Key := l_Comma_Sep_Resp_Key ||','||
596 bsc_utility.c_BSC_Manager ||','||
597 bsc_utility.c_BSC_DESIGNER ||','||
598 bsc_utility.c_BSC_PMD_USER ||','||
599 bsc_utility.c_BIS_BID_RESP ||','||
600 bsc_utility.c_BIS_DBI_ADMIN||','||
601 l_Responsibility_Key;
602 ELSE
603 l_Comma_Sep_Resp_Key := l_Responsibility_Key;
604 END IF;
605
606 Create_Tab_Access_For_Resp
607 ( p_Resposibility_Key => l_Comma_Sep_Resp_Key
608 , p_commit => p_commit
609 , p_Bsc_Tab_Entity_Rec => l_Bsc_Tab_Entity_Rec
610 , x_return_status => x_return_status
611 , x_msg_count => x_msg_count
612 , x_msg_data => x_msg_data
613 );
614 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
615 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
616 END IF;
617
618 EXCEPTION
619 WHEN FND_API.G_EXC_ERROR THEN
620 IF (x_msg_data IS NULL) THEN
621 FND_MSG_PUB.Count_And_Get
622 ( p_encoded => FND_API.G_FALSE
623 , p_count => x_msg_count
624 , p_data => x_msg_data
625 );
626 END IF;
627 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
628 x_return_status := FND_API.G_RET_STS_ERROR;
629 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
630 IF (x_msg_data IS NULL) THEN
631 FND_MSG_PUB.Count_And_Get
632 ( p_encoded => FND_API.G_FALSE
633 , p_count => x_msg_count
634 , p_data => x_msg_data
635 );
636 END IF;
637 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
638 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
639 WHEN NO_DATA_FOUND THEN
640 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
641 IF (x_msg_data IS NOT NULL) THEN
642 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Create_Tab_Access ';
643 ELSE
644 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Create_Tab_Access ';
645 END IF;
646 --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
647 WHEN OTHERS THEN
648 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
649 IF (x_msg_data IS NOT NULL) THEN
650 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Create_Tab_Access ';
651 ELSE
652 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Create_Tab_Access ';
653 END IF;
654 --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
655
656 end Create_Tab_Access;
657
658 /************************************************************************************
659 ************************************************************************************/
660
661 procedure Create_Tab_Grants(
662 p_commit IN varchar2 := FND_API.G_FALSE
663 ,p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
664 ,x_return_status OUT NOCOPY varchar2
665 ,x_msg_count OUT NOCOPY number
666 ,x_msg_data OUT NOCOPY varchar2
667 ) is
668
669 l_Bsc_Tab_Entity_Rec BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec;
670
671 l_responsibility_key varchar2(30);
672
673 begin
674 FND_MSG_PUB.Initialize;
675 x_return_status := FND_API.G_RET_STS_SUCCESS;
676 -- set local record equal to the one passed.
677 l_Bsc_Tab_Entity_Rec := p_Bsc_Tab_Entity_Rec;
678
679 -- Insert the record for the current responsibility.
680 BSC_SCORECARD_PVT.Create_Tab_Grants( p_commit
681 ,l_Bsc_Tab_Entity_Rec
682 ,x_return_status
683 ,x_msg_count
684 ,x_msg_data);
685
686 EXCEPTION
687 WHEN FND_API.G_EXC_ERROR THEN
688 IF (x_msg_data IS NULL) THEN
689 FND_MSG_PUB.Count_And_Get
690 ( p_encoded => FND_API.G_FALSE
691 , p_count => x_msg_count
692 , p_data => x_msg_data
693 );
694 END IF;
695 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
696 x_return_status := FND_API.G_RET_STS_ERROR;
697 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
698 IF (x_msg_data IS NULL) THEN
699 FND_MSG_PUB.Count_And_Get
700 ( p_encoded => FND_API.G_FALSE
701 , p_count => x_msg_count
702 , p_data => x_msg_data
703 );
704 END IF;
705 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
706 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
707 WHEN NO_DATA_FOUND THEN
708 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
709 IF (x_msg_data IS NOT NULL) THEN
710 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Create_Tab_Grants ';
711 ELSE
712 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Create_Tab_Grants ';
713 END IF;
714 --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
715 WHEN OTHERS THEN
716 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
717 IF (x_msg_data IS NOT NULL) THEN
718 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Create_Tab_Grants ';
719 ELSE
720 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Create_Tab_Grants ';
721 END IF;
722 --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
723
724 end Create_Tab_Grants;
725
726 /************************************************************************************
727 ************************************************************************************/
728
729 procedure Update_System_Time_Stamp(
730 p_commit IN varchar2 := FND_API.G_FALSE
731 ,p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
732 ,x_return_status OUT NOCOPY varchar2
733 ,x_msg_count OUT NOCOPY number
734 ,x_msg_data OUT NOCOPY varchar2
735 ) is
736
737 begin
738 FND_MSG_PUB.Initialize;
739 x_return_status := FND_API.G_RET_STS_SUCCESS;
740 BSC_SCORECARD_PVT.Update_System_Time_Stamp( p_commit
741 ,p_Bsc_Tab_Entity_Rec
742 ,x_return_status
743 ,x_msg_count
744 ,x_msg_data);
745
746 EXCEPTION
747 WHEN FND_API.G_EXC_ERROR THEN
748 IF (x_msg_data IS NULL) THEN
749 FND_MSG_PUB.Count_And_Get
750 ( p_encoded => FND_API.G_FALSE
751 , p_count => x_msg_count
752 , p_data => x_msg_data
753 );
754 END IF;
755 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
756 x_return_status := FND_API.G_RET_STS_ERROR;
757 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
758 IF (x_msg_data IS NULL) THEN
759 FND_MSG_PUB.Count_And_Get
760 ( p_encoded => FND_API.G_FALSE
761 , p_count => x_msg_count
762 , p_data => x_msg_data
763 );
764 END IF;
765 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
766 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
767 WHEN NO_DATA_FOUND THEN
768 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
769 IF (x_msg_data IS NOT NULL) THEN
770 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Update_System_Time_Stamp ';
771 ELSE
772 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Update_System_Time_Stamp ';
773 END IF;
774 --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
775 WHEN OTHERS THEN
776 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
777 IF (x_msg_data IS NOT NULL) THEN
778 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Update_System_Time_Stamp ';
779 ELSE
780 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Update_System_Time_Stamp ';
781 END IF;
782 --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
783
784 end Update_System_Time_Stamp;
785
786 /************************************************************************************
787 ************************************************************************************/
788
789 procedure Update_Tab_Time_Stamp(
790 p_commit IN varchar2 := FND_API.G_FALSE
791 ,p_Bsc_Tab_Entity_Rec IN BSC_SCORECARD_PUB.Bsc_Tab_Entity_Rec
792 ,x_return_status OUT NOCOPY varchar2
793 ,x_msg_count OUT NOCOPY number
794 ,x_msg_data OUT NOCOPY varchar2
795 ) is
796
797 begin
798 FND_MSG_PUB.Initialize;
799 x_return_status := FND_API.G_RET_STS_SUCCESS;
800 BSC_SCORECARD_PVT.Update_Tab_Time_Stamp( p_commit
801 ,p_Bsc_Tab_Entity_Rec
802 ,x_return_status
803 ,x_msg_count
804 ,x_msg_data);
805
806 EXCEPTION
807 WHEN FND_API.G_EXC_ERROR THEN
808 IF (x_msg_data IS NULL) THEN
809 FND_MSG_PUB.Count_And_Get
810 ( p_encoded => FND_API.G_FALSE
811 , p_count => x_msg_count
812 , p_data => x_msg_data
813 );
814 END IF;
815 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_ERROR '||x_msg_data);
816 x_return_status := FND_API.G_RET_STS_ERROR;
817 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
818 IF (x_msg_data IS NULL) THEN
819 FND_MSG_PUB.Count_And_Get
820 ( p_encoded => FND_API.G_FALSE
821 , p_count => x_msg_count
822 , p_data => x_msg_data
823 );
824 END IF;
825 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
826 --DBMS_OUTPUT.PUT_LINE('EXCEPTION FND_API.G_EXC_UNEXPECTED_ERROR '||x_msg_data);
827 WHEN NO_DATA_FOUND THEN
828 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
829 IF (x_msg_data IS NOT NULL) THEN
830 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Update_Tab_Time_Stamp ';
831 ELSE
832 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Update_Tab_Time_Stamp ';
833 END IF;
834 --DBMS_OUTPUT.PUT_LINE('EXCEPTION NO_DATA_FOUND '||x_msg_data);
835 WHEN OTHERS THEN
836 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
837 IF (x_msg_data IS NOT NULL) THEN
838 x_msg_data := x_msg_data||' -> BSC_SCORECARD_PUB.Update_Tab_Time_Stamp ';
839 ELSE
840 x_msg_data := SQLERRM||' at BSC_SCORECARD_PUB.Update_Tab_Time_Stamp ';
841 END IF;
842 --DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS '||x_msg_data);
843
844 end Update_Tab_Time_Stamp;
845
846 /************************************************************************************ 392
847 ************************************************************************************/
848
849 function is_child_tab_of(
850 p_child_tab_id IN number
851 ,p_parent_tab_id IN number
852 ) return varchar2 is
853
854 l_tab_parent number;
855 l_tab_child number;
856 l_return_value varchar2(10);
857
858 begin
859
860 --DBMS_OUTPUT.PUT_LINE('Begin is_child_tab_of' );
861 --DBMS_OUTPUT.PUT_LINE(' is_child_tab_of p_child_tab_id = ' || p_child_tab_id );
862 --DBMS_OUTPUT.PUT_LINE(' is_child_tab_of p_parent_tab_id = ' || p_parent_tab_id );
863 l_return_value := FND_API.G_FALSE;
864
865 l_tab_child := p_child_tab_id;
866 while l_tab_child is not null loop
867 select PARENT_TAB_ID into l_tab_parent
868 from BSC_TABS_VL where TAB_ID = l_tab_child;
869 --DBMS_OUTPUT.PUT_LINE(' is_child_tab_of l_tab_parent = ' || l_tab_parent );
870
871 if l_tab_parent is not null then
872 if l_tab_parent = p_parent_tab_id then
873 l_return_value := FND_API.G_TRUE;
874 exit;
875 end if;
876 end if;
877 l_tab_child := l_tab_parent;
878 end loop;
879
880 --DBMS_OUTPUT.PUT_LINE('is_child_tab_of x_return_status = ' || x_return_status );
881 --DBMS_OUTPUT.PUT_LINE('End is_child_tab_of' );
882
883 return l_return_value;
884
885 EXCEPTION
886 WHEN OTHERS THEN
887 return l_return_value;
888
889 end is_child_tab_of;
890 /**************************************************************************
891 Check_Tab_UserAccess_Func_Only checks the accessibility of the user
892 for the function passed, without taking into account the user responsibility
893 **************************************************************************/
894
895 FUNCTION Check_Tab_UserAccess_Func_Only(
896 p_tab_id IN NUMBER
897 ,p_user_name IN VARCHAR2
898 ,p_user_access IN VARCHAR2
899 )return VARCHAR2 IS
900
901 l_isaccess boolean ;
902 l_function_id NUMBER;
903 l_count NUMBER;
904 l_user_name VARCHAR2(256);
905
906 BEGIN
907
908 IF(p_user_name IS NULL) THEN
909 l_user_name := FND_GLOBAL.USER_NAME;
910 ELSE
911 l_user_name := p_user_name;
912 END IF;
913
914 SELECT function_id INTO l_function_id
915 FROM fnd_form_functions
916 WHERE function_name= p_user_access;
917
918 SELECT COUNT(GNT.grant_guid)
919 INTO l_count
920 FROM FND_GRANTS GNT,
921 FND_OBJECTS b,
922 FND_MENUS m,
923 FND_MENU_ENTRIES e
924 WHERE GNT.PROGRAM_NAME = 'BSC_PMD_GRANTS'
925 AND b.OBJ_NAME = 'BSC_TAB'
926 AND GNT.OBJECT_ID = b.OBJECT_ID
927 AND GNT.INSTANCE_PK1_VALUE = to_char(p_tab_id)
928 AND ( GNT.GRANTEE_TYPE = 'USER' AND GNT.GRANTEE_KEY = UPPER(l_user_name))
929 AND GNT.START_DATE <= sysdate
930 AND (GNT.END_DATE IS NULL OR GNT.END_DATE >= sysdate )
931 AND m.MENU_ID = GNT.MENU_ID
932 AND e.MENU_ID = m.MENU_ID
933 AND e.function_id = l_function_id;
934
935 IF(l_count = 0) THEN
936 RETURN 'N';
937 ELSE
938 RETURN 'Y';
939 END IF;
940 END Check_Tab_UserAccess_Func_Only;
941
942
943 /************************************************************************************
944 Function : CheckTabViewAccess
945 Description : This fucntion will validate if particular user has BSC_SCORECARD_VIEWER
946 access.If yes then it return 'Y'.It means the user can only view
947 the scorecards and its contents. He cannot do any upadte/delete
948 operations.
949 Input parameters : p_tab_id,p_user_name
950 output : 'Y' indicating user has View Acces otherwsie not.He comes under
951 designer and administrator access. so he can do update , view and delete
952 operations
953 ***********************************************************************************/
954 FUNCTION Check_Tab_UserAccess(
955 p_tab_id IN NUMBER
956 ,p_user_name IN VARCHAR2
957 ,p_user_access IN VARCHAR2
958 )return VARCHAR2 IS
959
960 l_isaccess boolean ;
961 l_function_id NUMBER;
962 l_count NUMBER;
963 l_user_name VARCHAR2(256);
964 l_resp_id NUMBER;
965 l_resp_count NUMBER:=0;
966
967 BEGIN
968 -- Default the user name if not passed in.
969 l_resp_id:= FND_GLOBAL.RESP_ID;
970 IF(p_user_name IS NULL) THEN
971 l_user_name := FND_GLOBAL.USER_NAME;
972 ELSE
973 l_user_name := p_user_name;
974 END IF;
975
976 SELECT function_id INTO l_function_id
977 FROM fnd_form_functions
978 WHERE function_name= p_user_access;
979
980 SELECT COUNT(GNT.grant_guid)
981 INTO l_count
982 FROM FND_GRANTS GNT,
983 FND_OBJECTS b,
984 FND_MENUS m,
985 FND_MENU_ENTRIES e
986 WHERE GNT.PROGRAM_NAME = 'BSC_PMD_GRANTS'
987 AND b.OBJ_NAME = 'BSC_TAB'
988 AND GNT.OBJECT_ID = b.OBJECT_ID
989 AND GNT.INSTANCE_PK1_VALUE = to_char(p_tab_id)
990 AND ( GNT.GRANTEE_TYPE = 'USER' AND GNT.GRANTEE_KEY = UPPER(l_user_name))
991 AND GNT.START_DATE <= sysdate
992 AND (GNT.END_DATE IS NULL OR GNT.END_DATE >= sysdate )
993 AND m.MENU_ID = GNT.MENU_ID
994 AND e.MENU_ID = m.MENU_ID
995 AND e.function_id = l_function_id;
996
997 SELECT COUNT(1)
998 INTO l_resp_count
999 FROM bsc_user_tab_access
1000 WHERE tab_id = p_tab_id
1001 AND responsibility_id =l_resp_id
1002 AND (SYSDATE BETWEEN NVL(start_date, SYSDATE) AND NVL(end_date, SYSDATE));
1003 --Scorecard security is both at user , responsibility levels
1004 -- So while deciding to show up scorecard or not we need to consider responsibility also
1005 IF(l_count = 0 OR l_resp_count = 0) THEN
1006 RETURN 'N';
1007 ELSE
1008 RETURN 'Y';
1009 END IF;
1010 END Check_Tab_UserAccess;
1011
1012 /***********************************************************************
1013 Validate_Scorecard_Access ensures that if a scorecard is added in the
1014 access list for a particular user, then all its parent scorecards have
1015 atleast 'User' access for that scorecard.
1016
1017 It returns comma separated list of names for tabs which need to be added
1018 in the user's access list.
1019 ************************************************************************/
1020 PROCEDURE Validate_Scorecard_Access (
1021 p_tab_id IN NUMBER
1022 ,p_user_name IN VARCHAR2
1023 ,x_par_tab_name OUT NOCOPY VARCHAR2
1024 ,x_par_tabname_list OUT NOCOPY VARCHAR2
1025 ) IS
1026 l_parent_tab_id bsc_tabs_vl.tab_id%TYPE;
1027 l_parent_tab_id1 bsc_tabs_vl.tab_id%TYPE;
1028 l_par_tabname_list VARCHAR2(4000);
1029 l_name bsc_tabs_vl.name%TYPE;
1030 BEGIN
1031
1032 SELECT parent_tab_id,name
1033 INTO l_parent_tab_id, x_par_tab_name
1034 FROM bsc_tabs_vl
1035 WHERE tab_id = p_tab_id;
1036
1037 WHILE (l_parent_tab_id IS NOT NULL) LOOP
1038 IF(Check_Tab_UserAccess_Func_Only(l_parent_tab_id, p_user_name, 'BSC_SCORECARD_ACCESS_VIEW' ) = 'N') THEN
1039
1040 SELECT name
1041 INTO l_name
1042 FROM BSC_TABS_VL
1043 WHERE tab_id = l_parent_tab_id;
1044
1045 IF (l_par_tabname_list IS NULL) THEN
1046 l_par_tabname_list := l_name;
1047
1048 ELSE
1049 l_par_tabname_list := l_par_tabname_list ||', '|| l_name;
1050
1051 END IF;
1052 END IF;
1053
1054 l_parent_tab_id1 := l_parent_tab_id;
1055
1056 SELECT parent_tab_id
1057 INTO l_parent_tab_id
1058 FROM bsc_tabs_b
1059 WHERE tab_id = l_parent_tab_id1;
1060
1061 END LOOP;
1062
1063 x_par_tabname_list := l_par_tabname_list;
1064
1065 END Validate_Scorecard_Access;
1066
1067
1068 /***********************************************************************
1069 Chk_Child_Scd_Has_Access returns list of all children of current
1070 scorecard, for which the current user has access
1071 ************************************************************************/
1072
1073 FUNCTION Chk_Child_Scd_Has_Access(
1074 p_tab_id IN NUMBER
1075 ,p_user IN VARCHAR2
1076 ) RETURN VARCHAR2 IS
1077
1078 CURSOR c_chid_scorecards IS
1079 SELECT tab_id,name
1080 FROM bsc_tabs_vl
1081 WHERE parent_tab_id = p_tab_id;
1082
1083 l_tablist_name VARCHAR2(4000);
1084 l_return_tablist VARCHAR2(4000);
1085
1086 BEGIN
1087
1088 FOR cd IN c_chid_scorecards LOOP
1089
1090 IF (BSC_SCORECARD_PUB.Check_Tab_UserAccess_Func_Only(cd.tab_id,p_user,'BSC_SCORECARD_ACCESS_VIEW') ='Y') THEN
1091
1092 IF (l_tablist_name IS NULL) THEN
1093 l_tablist_name := cd.name ;
1094 ELSE
1095 l_tablist_name := l_tablist_name ||', '||cd.name;
1096 END IF;
1097 END IF;
1098
1099 l_return_tablist := Chk_Child_Scd_Has_Access(cd.tab_id,p_user);
1100
1101 IF (l_return_tablist IS NOT NULL) THEN
1102
1103 IF (l_tablist_name IS NULL) THEN
1104 l_tablist_name := l_return_tablist ;
1105 ELSE
1106 l_tablist_name := l_tablist_name ||', '||l_return_tablist;
1107 END IF;
1108 END IF;
1109 END LOOP;
1110
1111 RETURN l_tablist_name;
1112
1113 END Chk_Child_Scd_Has_Access;
1114
1115 /********************************************************************
1116 Validate_Scorecard_Revoke() ensures that if a scorecard access has to
1117 be revoked, then there is no other scorecard which is a child of the
1118 current scorecard for which the user still has access
1119 *******************************************************************/
1120
1121 PROCEDURE Validate_Scorecard_Revoke (
1122 p_grant_guids IN VARCHAR2
1123 ,x_chd_tabname_list OUT NOCOPY VARCHAR2
1124 ) IS
1125
1126 l_grant_guids VARCHAR2(32000);
1127 l_grantee_key FND_GRANTS.GRANTEE_KEY%TYPE;
1128 l_tab_id FND_GRANTS.INSTANCE_PK1_VALUE%TYPE;
1129 l_single_grant_guid FND_GRANTS.GRANT_GUID%TYPE;
1130 l_tablist_name VARCHAR2(4000);
1131 l_check_children VARCHAR2(4000);
1132 l_check_child BSC_TABS_VL.NAME%TYPE;
1133
1134 BEGIN
1135 l_grant_guids := p_grant_guids;
1136
1137 WHILE (BSC_SCORECARD_PVT.Is_More( p_grant_uids => l_grant_guids
1138 , p_grant_uid => l_single_grant_guid)) LOOP
1139
1140 SELECT grantee_key,instance_pk1_value
1141 INTO l_grantee_key, l_tab_id
1142 FROM fnd_grants
1143 WHERE grant_guid = l_single_grant_guid;
1144
1145 l_check_children := Chk_Child_Scd_Has_Access(l_tab_id,l_grantee_key);
1146
1147 IF (l_tablist_name IS NULL AND l_check_children IS NOT NULL) THEN
1148 l_tablist_name := l_check_children;
1149
1150 ELSIF (l_check_children IS NOT NULL) THEN
1151 WHILE (BSC_SCORECARD_PVT.Is_More( p_grant_uids => l_check_children
1152 , p_grant_uid => l_check_child)) LOOP
1153 IF(INSTR(', '||l_tablist_name||', ',', '||l_check_child||', ') = 0) THEN
1154 l_tablist_name := l_tablist_name ||', '||l_check_child;
1155
1156 END IF;
1157 END LOOP;
1158 END IF;
1159 END LOOP;
1160
1161 x_chd_tabname_list := l_tablist_name;
1162
1163 END Validate_Scorecard_Revoke;
1164 /*********************************************************************
1165 Function : is_Tab_Ordering_Enabled
1166 Description : This function will check if ordering of the scorecards
1167 is enabled or not
1168
1169 1.Check if the p_tab_id is null.if yes then it means that it is called from
1170 the root VO of the Hgrid page.
1171 If null then do verify if any of the parent_tabs are having update access.
1172 if no then return false whcih will disbale the re-ordering button
1173 on the top of the VO.
1174
1175 2.IF not null then check if it having the child or not.
1176 if not then return empty it means re-ordering is not to be shown.
1177 3. if it is the parent then verify if all the childs are having the update access.
1178 if all the childs are having the update access then only the reordering button should be enabled.
1179 else it will be disabled.
1180 /********************************************************************/
1181
1182
1183 FUNCTION is_Tab_Ordering_Enabled(
1184 p_tab_id IN NUMBER
1185 ,p_user_name IN VARCHAR2
1186 )RETURN VARCHAR2 IS
1187
1188 CURSOR c_root_tab_ids IS
1189 SELECT tab_id
1190 FROM BSC_TABS_VL
1191 WHERE PARENT_TAB_ID IS NULL;
1192
1193
1194
1195 CURSOR c_child_tab_ids IS
1196 SELECT tab_id
1197 FROM BSC_TABS_VL
1198 WHERE PARENT_TAB_ID = p_tab_id;
1199
1200 l_istaborderEnabled VARCHAR2(3);
1201
1202 BEGIN
1203 l_istaborderEnabled := 'N';
1204
1205 IF(p_tab_id IS NULL) THEN
1206 FOR root_tabs IN c_root_tab_ids LOOP
1207 l_istaborderEnabled := BSC_SCORECARD_PUB.Check_Tab_UserAccess
1208 (
1209 p_tab_id => root_tabs.tab_id
1210 ,p_user_name => p_user_name
1211 ,p_user_access => 'BSC_SCORECARD_ACCESS_UPDATE'
1212 );
1213 EXIT WHEN (l_istaborderEnabled<>'Y');
1214 END LOOP;
1215 ELSE
1216 FOR child_tabs IN c_child_tab_ids LOOP
1217 l_istaborderEnabled := BSC_SCORECARD_PUB.Check_Tab_UserAccess
1218 (
1219 p_tab_id => child_tabs.tab_id
1220 ,p_user_name => p_user_name
1221 ,p_user_access => 'BSC_SCORECARD_ACCESS_UPDATE'
1222 );
1223 EXIT WHEN (l_istaborderEnabled<>'Y');
1224 END LOOP;
1225 END IF;
1226
1227 RETURN l_istaborderEnabled;
1228
1229 END is_Tab_Ordering_Enabled;
1230
1231
1232 end BSC_SCORECARD_PUB;