[Home] [Help]
PACKAGE BODY: APPS.PA_PM_FUNCTION_SECURITY_PUB
Source
1 PACKAGE BODY PA_PM_FUNCTION_SECURITY_PUB AS
2 /*$Header: PAPMFSPB.pls 120.2 2005/08/19 16:42:38 mwasowic ship $*/
3
4 g_module_name VARCHAR2(100) := 'pa.plsql.PA_PM_FUNCTION_SECURITY_PUB';
5
6 PROCEDURE check_function_security
7 (p_api_version_number IN NUMBER,
8 p_responsibility_id IN NUMBER,
9 p_function_name IN VARCHAR2,
10 p_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
11 p_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12 p_return_status OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
13 p_function_allowed OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
14
15 --CURSOR l_fnd_function_csr IS
16 --SELECT 'x'
17 --FROM fnd_form_functions ff,
18 -- fnd_resp_functions fr
19 --WHERE ff.function_name = p_function_name
20 --AND ff.function_id = fr.action_id
21 --AND fr.responsibility_id = p_responsibility_id;
22
23 l_dummy VARCHAR2(1);
24 l_api_version_number CONSTANT NUMBER := 1.0;
25 l_api_name CONSTANT VARCHAR2(30):=
26 'check_function_security';
27 l_return_status VARCHAR2(1);
28 l_function_allowed VARCHAR2(1) := NULL;
29
30 --bug2442069
31 l_object_type VARCHAR2(12) := NULL;
32 --bug 2442069
33
34 BEGIN
35 -- The caching logic for checking the function security would not let the
36 -- initialisation of x_return_status happen. Hence moved this up
37 p_return_status := FND_API.G_RET_STS_SUCCESS;
38
39 -- Included call to Check_Global_Vars, to check for global variables and
40 -- see if check_function_security procedure has already been called once.
41 -- This way, we are avoiding multiple calls to this procedure
42 -- check_function_security S Sanckar 09-Jul-99
43
44 Check_Global_Vars ( p_function_name => p_function_name,
45 p_function_allowed => p_function_allowed,
46 p_found_or_not => G_found_or_not);
47
48 IF G_found_or_not = 'N' THEN
49
50
51 -- Standard Api compatibility call
52 IF NOT FND_API.Compatible_API_Call ( l_api_version_number ,
53 p_api_version_number ,
54 l_api_name ,
55 G_PKG_NAME )
56 THEN
57 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
58 END IF;
59
60 --p_return_status := FND_API.G_RET_STS_SUCCESS; Moved this above
61
62 -- function security is enforced in Applications by excluding
63 -- a function from a given responsibility. Hence, if we get a
64 -- row for the cursor , then the function is not allowed
65
66 /* Commented out the following code for bug 2442069 and replaced the logic. Please see below.
67
68 IF fnd_function.test(p_function_name) THEN
69 p_function_allowed := 'Y';
70 l_function_allowed := 'Y';
71 ELSE
72 p_function_allowed := 'N';
73 l_function_allowed := 'N';
74 END IF;*/
75
76 --Added the following code replacing the above logic to incorporate advanced proejct security
77 --bug 2442069
78 IF PA_INTERFACE_UTILS_PUB.G_ADVANCED_PROJ_SEC_FLAG = 'N'
79 THEN
80
81 -- -- dbms_output.put_line( 'Default Function Security is enforced! ' );
82 IF fnd_function.test(p_function_name) THEN
83 p_function_allowed := 'Y';
84 l_function_allowed := 'Y';
85 ELSE
86 p_function_allowed := 'N';
87 l_function_allowed := 'N';
88 END IF;
89 ELSE
90 -- -- dbms_output.put_line( 'WATCH Advanced Project Security is enforced! ' );
91 IF PA_INTERFACE_UTILS_PUB.G_PROJECt_ID IS NULL
92 THEN
93 l_object_type := null;
94 ELSE
95 l_object_type := 'PA_PROJECTS';
96 END IF;
97 IF PA_SECURITY_PVT.CHECK_USER_PRIVILEGE(
98 p_privilege => p_function_name
99 ,p_object_name => l_object_type
100 ,p_object_key => PA_INTERFACE_UTILS_PUB.G_PROJECt_ID
101 ) = 'T'
102 THEN
103 p_function_allowed := 'Y';
104 l_function_allowed := 'Y';
105 ELSE
106 p_function_allowed := 'N';
107 l_function_allowed := 'N';
108 END IF;
109 END IF;
110 --bug 2442069
111
112 -- OPEN l_fnd_function_csr;
113 -- FETCH l_fnd_function_csr INTO l_dummy;
114 -- IF l_fnd_function_csr%FOUND THEN
115 -- p_function_allowed := 'N';
116 -- ELSE
117 -- p_function_allowed := 'Y';
118 -- END IF;
119 -- CLOSE l_fnd_function_csr;
120
121 -- Included call to Set_Global_Vars, to set the global variables
122 -- which are used in checking if check_function_security procedure has
123 -- already been called. This way, we are avoiding multiple calls to
124 -- this procedure check_function_security S Sanckar 09-Jul-99
125
126 Set_Global_Vars ( p_function_name => p_function_name,
127 p_function_allowed => l_function_allowed);
128
129 -- dbms_output.put_line('x return status is '||p_return_status);
130
131 END IF; /* End of G_found_or_not IF condition */
132
133 -- dbms_output.put_line('x return status is '||p_return_status);
134
135 EXCEPTION
136
137 WHEN FND_API.G_EXC_ERROR
138 THEN
139
140 p_return_status := FND_API.G_RET_STS_ERROR;
141
142 FND_MSG_PUB.Count_And_Get
143 ( p_count => p_msg_count ,
144 p_data => p_msg_data );
145
146 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
147 THEN
148 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
149
150 FND_MSG_PUB.Count_And_Get
151 ( p_count => p_msg_count ,
152 p_data => p_msg_data );
153
154 WHEN OTHERS
155 THEN
156
157 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
158
159 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
160 THEN
161 FND_MSG_PUB.add_exc_msg
162 ( p_pkg_name => G_PKG_NAME
163 , p_procedure_name => l_api_name );
164
165 END IF;
166
167 FND_MSG_PUB.Count_And_Get
168 ( p_count => p_msg_count ,
169 p_data => p_msg_data );
170
171 END check_function_security;
172
173 -- New Procedure added to use global variables and thus avoid
174 -- repeated calls to Check_Function_Security S Sanckar 09-Jul-99
175
176 PROCEDURE Check_Global_Vars
177 (p_function_name IN VARCHAR2,
178 p_function_allowed OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
179 p_found_or_not OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
180
181 BEGIN
182
183 p_found_or_not := 'N';
184
185 IF p_function_name = 'PA_PM_CREATE_PROJECT' AND
186 G_Create_Project IS NOT NULL THEN
187 p_function_allowed := G_Create_Project;
188 p_found_or_not := 'Y';
189 RETURN;
190 END IF;
191
192 IF p_function_name = 'PA_PM_UPDATE_PROJECT' AND
193 G_Update_Project IS NOT NULL THEN
194 p_function_allowed := G_Update_Project;
195 p_found_or_not := 'Y';
196 RETURN;
197 END IF;
198
199 IF p_function_name = 'PA_PM_DELETE_PROJECT' AND
200 G_Delete_Project IS NOT NULL THEN
201 p_function_allowed := G_Delete_Project;
202 p_found_or_not := 'Y';
203 RETURN;
204 END IF;
205
206 IF p_function_name = 'PA_PM_UPDATE_PROJ_PROGRESS' AND
207 G_Update_Proj_Progress IS NOT NULL THEN
208 p_function_allowed := G_Update_Proj_Progress;
209 p_found_or_not := 'Y';
210 RETURN;
211 END IF;
212
213 IF p_function_name = 'PA_PM_ADD_TASK' AND
214 G_Add_Task IS NOT NULL THEN
215 p_function_allowed := G_Add_Task;
216 p_found_or_not := 'Y';
217 RETURN;
218 END IF;
219
220 IF p_function_name = 'PA_PM_UPDATE_TASK' AND
221 G_Update_Task IS NOT NULL THEN
222 p_function_allowed := G_Update_Task;
223 p_found_or_not := 'Y';
224 RETURN;
225 END IF;
226
227 IF p_function_name = 'PA_PM_MODIFY_TOP_TASK' AND
228 G_Modify_Top_Task IS NOT NULL THEN
229 p_function_allowed := G_Modify_Top_Task;
230 p_found_or_not := 'Y';
231 RETURN;
232 END IF;
233
234 IF p_function_name = 'PA_PM_DELETE_TASK' AND
235 G_Delete_Task IS NOT NULL THEN
236 p_function_allowed := G_Delete_Task;
237 p_found_or_not := 'Y';
238 RETURN;
239 END IF;
240
241 IF p_function_name = 'PA_PM_CREATE_DRAFT_BUDGET' AND
242 G_Create_Draft_Budget IS NOT NULL THEN
243 p_function_allowed := G_Create_Draft_Budget;
244 p_found_or_not := 'Y';
245 RETURN;
246 END IF;
247
248 IF p_function_name = 'PA_PM_UPDATE_BUDGET' AND
249 G_Update_Budget IS NOT NULL THEN
250 p_function_allowed := G_Update_Budget;
251 p_found_or_not := 'Y';
252 RETURN;
253 END IF;
254
255 IF p_function_name = 'PA_PM_BASELINE_BUDGET' AND
256 G_Baseline_Budget IS NOT NULL THEN
257 p_function_allowed := G_Baseline_Budget;
258 p_found_or_not := 'Y';
259 RETURN;
260 END IF;
261
262 IF p_function_name = 'PA_PM_DELETE_DRAFT_BUDGET' AND
263 G_Delete_Draft_Budget IS NOT NULL THEN
264 p_function_allowed := G_Delete_Draft_Budget;
265 p_found_or_not := 'Y';
266 RETURN;
267 END IF;
268
269 IF p_function_name = 'PA_PM_ADD_BUDGET_LINE' AND
270 G_Add_Budget_Line IS NOT NULL THEN
271 p_function_allowed := G_Add_Budget_Line;
272 p_found_or_not := 'Y';
273 RETURN;
274 END IF;
275
276 IF p_function_name = 'PA_PM_UPDATE_BUDGET_LINE' AND
277 G_Update_Budget_Line IS NOT NULL THEN
278 p_function_allowed := G_Update_Budget_Line;
279 p_found_or_not := 'Y';
280 RETURN;
281 END IF;
282
283 IF p_function_name = 'PA_PM_DELETE_BUDGET_LINE' AND
284 G_Delete_Budget_Line IS NOT NULL THEN
285 p_function_allowed := G_Delete_Budget_Line;
286 p_found_or_not := 'Y';
287 RETURN;
288 END IF;
289
290 IF p_function_name = 'PA_PM_UPDATE_EARNED_VALUE' AND
291 G_Update_Earned_Value IS NOT NULL THEN
292 p_function_allowed := G_Update_Earned_Value;
293 p_found_or_not := 'Y';
294 RETURN;
295 END IF;
296
297 IF p_function_name = 'PA_PM_CREATE_RESOURCE_LIST' AND
298 G_Create_Res_List IS NOT NULL THEN
299 p_function_allowed := G_Create_Res_List;
300 p_found_or_not := 'Y';
301 RETURN;
302 END IF;
303
304 IF p_function_name = 'PA_PM_UPDATE_RESOURCE_LIST' AND
305 G_Update_Res_List IS NOT NULL THEN
306 p_function_allowed := G_Update_Res_List;
307 p_found_or_not := 'Y';
308 RETURN;
309 END IF;
310
311 IF p_function_name = 'PA_PM_DELETE_RESOURCE_LIST' AND
312 G_Delete_Res_List IS NOT NULL THEN
313 p_function_allowed := G_Delete_Res_List;
314 p_found_or_not := 'Y';
315 RETURN;
316 END IF;
317
318 IF p_function_name = 'PA_PM_ADD_RESOURCE_LIST_MEMBER' AND
319 G_Add_Res_List_Member IS NOT NULL THEN
320 p_function_allowed := G_Add_Res_List_Member;
321 p_found_or_not := 'Y';
322 RETURN;
323 END IF;
324
325 IF p_function_name = 'PA_PM_UPD_RESOURCE_LIST_MEMBER' AND
326 G_Update_Res_List_Member IS NOT NULL THEN
327 p_function_allowed := G_Update_Res_List_Member;
328 p_found_or_not := 'Y';
329 RETURN;
330 END IF;
331
332 IF p_function_name = 'PA_PM_DEL_RESOURCE_LIST_MEMBER' AND
333 G_Delete_Res_List_Member IS NOT NULL THEN
334 p_function_allowed := G_Delete_Res_List_Member;
335 p_found_or_not := 'Y';
336 RETURN;
337 END IF;
338
339 IF p_function_name = 'PA_AF_CREATE_AGREEMENT' AND
340 G_Create_Agreement IS NOT NULL THEN
341 p_function_allowed := G_Create_Agreement;
342 p_found_or_not := 'Y';
343 RETURN;
344 END IF;
345
346 IF p_function_name = 'PA_AF_DELETE_AGREEMENT' AND
347 G_Delete_Agreement IS NOT NULL THEN
348 p_function_allowed := G_Delete_Agreement;
349 p_found_or_not := 'Y';
350 RETURN;
351 END IF;
352
353
354 IF p_function_name = 'PA_AF_UPDATE_AGREEMENT' AND
355 G_Update_Agreement IS NOT NULL THEN
356 p_function_allowed := G_Update_Agreement;
357 p_found_or_not := 'Y';
358 RETURN;
359 END IF;
360
361 IF p_function_name = 'PA_AF_ADD_FUNDING' AND
362 G_Add_Funding IS NOT NULL THEN
363 p_function_allowed := G_Add_Funding;
364 p_found_or_not := 'Y';
365 RETURN;
366 END IF;
367
368 IF p_function_name = 'PA_AF_DELETE_FUNDING' AND
369 G_Delete_Funding IS NOT NULL THEN
370 p_function_allowed := G_Delete_Funding;
371 p_found_or_not := 'Y';
372 RETURN;
373 END IF;
374
375 IF p_function_name = 'PA_AF_UPDATE_FUNDING' AND
376 G_Update_Funding IS NOT NULL THEN
377 p_function_allowed := G_Update_Funding;
378 p_found_or_not := 'Y';
379 RETURN;
380 END IF;
381
382 IF p_function_name = 'PA_AF_INIT_AGREEMENT' AND
383 G_Init_Agreement IS NOT NULL THEN
384 p_function_allowed := G_Init_Agreement;
385 p_found_or_not := 'Y';
386 RETURN;
387 END IF;
388
389 IF p_function_name = 'PA_AF_LOAD_AGREEMENT' AND
390 G_Load_Agreement IS NOT NULL THEN
391 p_function_allowed := G_Load_Agreement;
392 p_found_or_not := 'Y';
393 RETURN;
394 END IF;
395
396 IF p_function_name = 'PA_AF_LOAD_FUNDING' AND
397 G_Load_Funding IS NOT NULL THEN
398 p_function_allowed := G_Load_Funding;
399 p_found_or_not := 'Y';
400 RETURN;
401 END IF;
402
403 IF p_function_name = 'PA_AF_EXE_CRE_AGMT' AND
404 G_Exe_Cre_Agmt IS NOT NULL THEN
405 p_function_allowed := G_Exe_Cre_Agmt;
406 p_found_or_not := 'Y';
407 RETURN;
408 END IF;
409
410 IF p_function_name = 'PA_AF_EXE_UPD_AGMT' AND
411 G_Exe_Upd_Agmt IS NOT NULL THEN
412 p_function_allowed := G_Exe_Upd_Agmt;
413 p_found_or_not := 'Y';
414 RETURN;
415 END IF;
416
417 IF p_function_name = 'PA_AF_FETCH_FUNDING' AND
418 G_Fetch_Funding IS NOT NULL THEN
419 p_function_allowed := G_Fetch_Funding;
420 p_found_or_not := 'Y';
421 RETURN;
422 END IF;
423
424 IF p_function_name = 'PA_AF_CLR_AGREEMENT' AND
425 G_Clear_Agreement IS NOT NULL THEN
426 p_function_allowed := G_Clear_Agreement;
427 p_found_or_not := 'Y';
428 RETURN;
429 END IF;
430
431 IF p_function_name = 'PA_AF_DEL_AGMT_OK' AND
432 G_Check_Del_Agmt_Ok IS NOT NULL THEN
433 p_function_allowed := G_Check_Del_Agmt_Ok;
434 p_found_or_not := 'Y';
435 RETURN;
436 END IF;
437
438 IF p_function_name = 'PA_AF_ADD_FUND_OK' AND
439 G_Check_Add_Fund_Ok IS NOT NULL THEN
440 p_function_allowed := G_Check_Add_Fund_Ok;
441 p_found_or_not := 'Y';
442 RETURN;
443 END IF;
444
445 IF p_function_name = 'PA_AF_DEL_FUND_OK' AND
446 G_Check_Del_Fund_Ok IS NOT NULL THEN
447 p_function_allowed := G_Check_Del_Fund_Ok;
448 p_found_or_not := 'Y';
449 RETURN;
450 END IF;
451
452 IF p_function_name = 'PA_AF_UPD_FUND_OK' AND
453 G_Check_Upd_Fund_Ok IS NOT NULL THEN
454 p_function_allowed := G_Check_Upd_Fund_Ok;
455 p_found_or_not := 'Y';
456 RETURN;
457 END IF;
458
459 /* Start of code for bug #4317792 */
460
461 IF p_function_name = 'PA_FP_APP_BDGT_MNT_COST_PLAN' AND
462 G_FP_Maintain_AC_Plan IS NOT NULL THEN
463 p_function_allowed := G_FP_Maintain_AC_Plan;
464 p_found_or_not := 'Y';
465 RETURN;
466 END IF;
467
468 IF p_function_name = 'PA_FP_BDGT_MNT_COST_PLAN' AND
469 G_FP_Maintain_C_Plan IS NOT NULL THEN
470 p_function_allowed := G_FP_Maintain_C_Plan;
471 p_found_or_not := 'Y';
472 RETURN;
473 END IF;
474
475 IF p_function_name = 'PA_FP_FCST_MNT_COST_PLAN' AND
476 G_FP_Maintain_FC_Plan IS NOT NULL THEN
477 p_function_allowed := G_FP_Maintain_FC_Plan;
478 p_found_or_not := 'Y';
479 RETURN;
480 END IF;
481
482 IF p_function_name = 'PA_FP_APP_BDGT_MNT_REV_PLAN' AND
483 G_FP_Maintain_AR_Plan IS NOT NULL THEN
484 p_function_allowed := G_FP_Maintain_AR_Plan;
485 p_found_or_not := 'Y';
486 RETURN;
487 END IF;
488
489 IF p_function_name = 'PA_FP_BDGT_MNT_REV_PLAN' AND
490 G_FP_Maintain_R_Plan IS NOT NULL THEN
491 p_function_allowed := G_FP_Maintain_R_Plan;
492 p_found_or_not := 'Y';
493 RETURN;
494 END IF;
495
496 IF p_function_name = 'PA_FP_FCST_MNT_REV_PLAN' AND
497 G_FP_Maintain_FR_Plan IS NOT NULL THEN
498 p_function_allowed := G_FP_Maintain_FR_Plan;
499 p_found_or_not := 'Y';
500 RETURN;
501 END IF;
502
503 IF p_function_name = 'PA_FP_APP_BDGT_BSLN_COST_PLAN' AND
504 G_FP_Baseline_AC_Plan IS NOT NULL THEN
505 p_function_allowed := G_FP_Baseline_AC_Plan;
506 p_found_or_not := 'Y';
507 RETURN;
508 END IF;
509
510 IF p_function_name = 'PA_FP_BDGT_BSLN_COST_PLAN' AND
511 G_FP_Baseline_C_Plan IS NOT NULL THEN
512 p_function_allowed := G_FP_Baseline_C_Plan;
513 p_found_or_not := 'Y';
514 RETURN;
515 END IF;
516
517 IF p_function_name = 'PA_FP_FCST_BSLN_COST_PLAN' AND
518 G_FP_Baseline_FC_Plan IS NOT NULL THEN
519 p_function_allowed := G_FP_Baseline_FC_Plan;
520 p_found_or_not := 'Y';
521 RETURN;
522 END IF;
523
524 IF p_function_name = 'PA_FP_APP_BDGT_BSLN_REV_PLAN' AND
525 G_FP_Baseline_AR_Plan IS NOT NULL THEN
526 p_function_allowed := G_FP_Baseline_AR_Plan;
527 p_found_or_not := 'Y';
528 RETURN;
529 END IF;
530
531 IF p_function_name = 'PA_FP_BDGT_BSLN_REV_PLAN' AND
532 G_FP_Baseline_R_Plan IS NOT NULL THEN
533 p_function_allowed := G_FP_Baseline_R_Plan;
534 p_found_or_not := 'Y';
535 RETURN;
536 END IF;
537
538 IF p_function_name = 'PA_FP_FCST_BSLN_REV_PLAN' AND
539 G_FP_Baseline_FR_Plan IS NOT NULL THEN
540 p_function_allowed := G_FP_Baseline_FR_Plan;
541 p_found_or_not := 'Y';
542 RETURN;
543 END IF;
544
545 IF p_function_name = 'PA_FP_APP_BDGT_MNT_PLAN_LINES' AND
546 G_FP_Maintain_AC_AR_Plan_Lines IS NOT NULL THEN
547 p_function_allowed := G_FP_Maintain_AC_AR_Plan_Lines;
548 p_found_or_not := 'Y';
549 RETURN;
550 END IF;
551
552 IF p_function_name = 'PA_FP_BDGT_MNT_PLAN_LINES' AND
553 G_FP_Maintain_Plan_Lines IS NOT NULL THEN
554 p_function_allowed := G_FP_Maintain_Plan_Lines;
555 p_found_or_not := 'Y';
556 RETURN;
557 END IF;
558
559 IF p_function_name = 'PA_FP_FCST_MNT_PLAN_LINES' AND
560 G_FP_Maintain_FC_FR_Plan_Lines IS NOT NULL THEN
561 p_function_allowed := G_FP_Maintain_FC_FR_Plan_Lines;
562 p_found_or_not := 'Y';
563 RETURN;
564 END IF;
565
566 /* End of code for bug #4317792 */
567
568 END Check_Global_Vars;
569
570
571 -- New Procedure added to set global variables and thus avoid
572 -- repeated calls to Check_Function_Security S Sanckar 09-Jul-99
573
574 PROCEDURE Set_Global_Vars
575 (p_function_name IN VARCHAR2,
576 p_function_allowed IN VARCHAR2) IS
577
578 BEGIN
579
580 IF p_function_name = 'PA_PM_CREATE_PROJECT' THEN
581 G_Create_Project := p_function_allowed;
582 RETURN;
583 END IF;
584
585 IF p_function_name = 'PA_PM_UPDATE_PROJECT' THEN
586 G_Update_Project := p_function_allowed;
587 RETURN;
588 END IF;
589
590 IF p_function_name = 'PA_PM_DELETE_PROJECT' THEN
591 G_Delete_Project := p_function_allowed;
592 RETURN;
593 END IF;
594
595 IF p_function_name = 'PA_PM_UPDATE_PROJ_PROGRESS' THEN
596 G_Update_Proj_Progress := p_function_allowed;
597 RETURN;
598 END IF;
599
600 IF p_function_name = 'PA_PM_ADD_TASK' THEN
601 G_Add_Task := p_function_allowed;
602 RETURN;
603 END IF;
604
605 IF p_function_name = 'PA_PM_UPDATE_TASK' THEN
606 G_Update_Task := p_function_allowed;
607 RETURN;
608 END IF;
609
610 IF p_function_name = 'PA_PM_MODIFY_TOP_TASK' THEN
611 G_Modify_Top_Task := p_function_allowed;
612 RETURN;
613 END IF;
614
615 IF p_function_name = 'PA_PM_DELETE_TASK' THEN
616 G_Delete_Task := p_function_allowed;
617 RETURN;
618 END IF;
619
620 IF p_function_name = 'PA_PM_CREATE_DRAFT_BUDGET' THEN
621 G_Create_Draft_Budget := p_function_allowed;
622 RETURN;
623 END IF;
624
625 IF p_function_name = 'PA_PM_UPDATE_BUDGET' THEN
626 G_Update_Budget := p_function_allowed;
627 RETURN;
628 END IF;
629
630 IF p_function_name = 'PA_PM_BASELINE_BUDGET' THEN
631 G_Baseline_Budget := p_function_allowed;
632 RETURN;
633 END IF;
634
635 IF p_function_name = 'PA_PM_DELETE_DRAFT_BUDGET' THEN
636 G_Delete_Draft_Budget := p_function_allowed;
637 RETURN;
638 END IF;
639
640 IF p_function_name = 'PA_PM_ADD_BUDGET_LINE' THEN
641 G_Add_Budget_Line := p_function_allowed;
642 RETURN;
643 END IF;
644
645 IF p_function_name = 'PA_PM_UPDATE_BUDGET_LINE' THEN
646 G_Update_Budget_Line := p_function_allowed;
647 RETURN;
648 END IF;
649
650 IF p_function_name = 'PA_PM_DELETE_BUDGET_LINE' THEN
651 G_Delete_Budget_Line := p_function_allowed;
652 RETURN;
653 END IF;
654
655 IF p_function_name = 'PA_PM_UPDATE_EARNED_VALUE' THEN
656 G_Update_Earned_Value := p_function_allowed;
657 RETURN;
658 END IF;
659
660 IF p_function_name = 'PA_PM_CREATE_RESOURCE_LIST' THEN
661 G_Create_Res_List := p_function_allowed;
662 RETURN;
663 END IF;
664
665 IF p_function_name = 'PA_PM_UPDATE_RESOURCE_LIST' THEN
666 G_Update_Res_List := p_function_allowed;
667 RETURN;
668 END IF;
669
670 IF p_function_name = 'PA_PM_DELETE_RESOURCE_LIST' THEN
671 G_Delete_Res_List := p_function_allowed;
672 RETURN;
673 END IF;
674
675 IF p_function_name = 'PA_PM_ADD_RESOURCE_LIST_MEMBER' THEN
676 G_Add_Res_List_Member := p_function_allowed;
677 RETURN;
678 END IF;
679
680 IF p_function_name = 'PA_PM_UPD_RESOURCE_LIST_MEMBER' THEN
681 G_Update_Res_List_Member := p_function_allowed;
682 RETURN;
683 END IF;
684
685 IF p_function_name = 'PA_PM_DEL_RESOURCE_LIST_MEMBER' THEN
686 G_Delete_Res_List_Member := p_function_allowed;
687 RETURN;
688 END IF;
689
690 IF p_function_name = 'PA_AF_CREATE_AGREEMENT' THEN
691 G_Create_Agreement:= p_function_allowed ;
692 RETURN;
693 END IF;
694
695 IF p_function_name = 'PA_AF_DELETE_AGREEMENT' THEN
696 G_Delete_Agreement := p_function_allowed ;
697 RETURN;
698 END IF;
699
700
701 IF p_function_name = 'PA_AF_UPDATE_AGREEMENT' THEN
702 G_Update_Agreement := p_function_allowed ;
703 RETURN;
704 END IF;
705
706 IF p_function_name = 'PA_AF_ADD_FUNDING' THEN
707 G_Add_Funding := p_function_allowed;
708 RETURN;
709 END IF;
710
711 IF p_function_name = 'PA_AF_DELETE_FUNDING' THEN
712 G_Delete_Funding := p_function_allowed ;
713 RETURN;
714 END IF;
715
716 IF p_function_name = 'PA_AF_UPDATE_FUNDING' THEN
717 G_Update_Funding := p_function_allowed ;
718 RETURN;
719 END IF;
720
721 IF p_function_name = 'PA_AF_INIT_AGREEMENT' THEN
722 G_Init_Agreement := p_function_allowed ;
723 RETURN;
724 END IF;
725
726 IF p_function_name = 'PA_AF_LOAD_AGREEMENT' THEN
727 G_Load_Agreement := p_function_allowed ;
728 RETURN;
729 END IF;
730
731 IF p_function_name = 'PA_AF_LOAD_FUNDING' THEN
732 G_Load_Funding := p_function_allowed ;
733 RETURN;
734 END IF;
735
736 IF p_function_name = 'PA_AF_EXE_CRE_AGMT' THEN
737 G_Exe_Cre_Agmt := p_function_allowed ;
738 RETURN;
739 END IF;
740
741 IF p_function_name = 'PA_AF_EXE_UPD_AGMT' THEN
742 G_Exe_Upd_Agmt := p_function_allowed ;
743 RETURN;
744 END IF;
745
746 IF p_function_name = 'PA_AF_FETCH_FUNDING' THEN
747 G_Fetch_Funding := p_function_allowed ;
748 RETURN;
749 END IF;
750
751 IF p_function_name = 'PA_AF_CLR_AGREEMENT' THEN
752 G_Clear_Agreement := p_function_allowed ;
753 RETURN;
754 END IF;
755
756 IF p_function_name = 'PA_AF_DEL_AGMT_OK' THEN
757 G_Check_Del_Agmt_Ok := p_function_allowed;
758 RETURN;
759 END IF;
760
761 IF p_function_name = 'PA_AF_ADD_FUND_OK' THEN
762 G_Check_Add_Fund_Ok := p_function_allowed;
763 RETURN;
764 END IF;
765
766 IF p_function_name = 'PA_AF_DEL_FUND_OK' THEN
767 G_Check_Del_Fund_Ok := p_function_allowed ;
768 RETURN;
769 END IF;
770
771 IF p_function_name = 'PA_AF_UPD_FUND_OK' THEN
772 G_Check_Upd_Fund_Ok := p_function_allowed ;
773 RETURN;
774 END IF;
775
776 /* Start of code for bug #4317792 */
777
778 IF p_function_name = 'PA_FP_APP_BDGT_MNT_COST_PLAN' THEN
779 G_FP_Maintain_AC_Plan := p_function_allowed ;
780 RETURN;
781 END IF;
782
783 IF p_function_name = 'PA_FP_BDGT_MNT_COST_PLAN' THEN
784 G_FP_Maintain_C_Plan := p_function_allowed ;
785 RETURN;
786 END IF;
787
788 IF p_function_name = 'PA_FP_FCST_MNT_COST_PLAN' THEN
789 G_FP_Maintain_FC_Plan := p_function_allowed ;
790 RETURN;
791 END IF;
792
793 IF p_function_name = 'PA_FP_APP_BDGT_MNT_REV_PLAN' THEN
794 G_FP_Maintain_AR_Plan := p_function_allowed ;
795 RETURN;
796 END IF;
797
798 IF p_function_name = 'PA_FP_BDGT_MNT_REV_PLAN' THEN
799 G_FP_Maintain_R_Plan := p_function_allowed ;
800 RETURN;
801 END IF;
802
803 IF p_function_name = 'PA_FP_FCST_MNT_REV_PLAN' THEN
804 G_FP_Maintain_FR_Plan := p_function_allowed ;
805 RETURN;
806 END IF;
807
808 IF p_function_name = 'PA_FP_APP_BDGT_BSLN_COST_PLAN' THEN
809 G_FP_Baseline_AC_Plan := p_function_allowed ;
810 RETURN;
811 END IF;
812
813 IF p_function_name = 'PA_FP_BDGT_BSLN_COST_PLAN' THEN
814 G_FP_Baseline_C_Plan := p_function_allowed ;
815 RETURN;
816 END IF;
817
818 IF p_function_name = 'PA_FP_FCST_BSLN_COST_PLAN' THEN
819 G_FP_Baseline_FC_Plan := p_function_allowed ;
820 RETURN;
821 END IF;
822
823 IF p_function_name = 'PA_FP_APP_BDGT_BSLN_REV_PLAN' THEN
824 G_FP_Baseline_AR_Plan := p_function_allowed ;
825 RETURN;
826 END IF;
827
828 IF p_function_name = 'PA_FP_BDGT_BSLN_REV_PLAN' THEN
829 G_FP_Baseline_R_Plan := p_function_allowed ;
830 RETURN;
831 END IF;
832
833 IF p_function_name = 'PA_FP_FCST_BSLN_REV_PLAN' THEN
834 G_FP_Baseline_FR_Plan := p_function_allowed ;
835 RETURN;
836 END IF;
837
838 IF p_function_name = 'PA_FP_APP_BDGT_MNT_PLAN_LINES' THEN
839 G_FP_Maintain_AC_AR_Plan_Lines := p_function_allowed ;
840 RETURN;
841 END IF;
842
843 IF p_function_name = 'PA_FP_BDGT_MNT_PLAN_LINES' THEN
844 G_FP_Maintain_Plan_Lines := p_function_allowed ;
845 RETURN;
846 END IF;
847
848 IF p_function_name = 'PA_FP_FCST_MNT_PLAN_LINES' THEN
849 G_FP_Maintain_FC_FR_Plan_Lines := p_function_allowed ;
850 RETURN;
851 END IF;
852
853 /* End of code for bug #4317792 */
854
855 END Set_Global_Vars;
856
857
858 /*
859 This procedure is a wrapper for all the project and function security related
860 actions. This procedure does the following :
861 1. Initializes the security variables
862 2. Checks if the user has QUERY and UPDATE permissions on the given project
863 3. For the given function name whether function security exists or not.
864 If any of the checks fail, 'F' is returned and if the user has all the required
865 permissions / function security, 'T' is returned.
866 This API is called from all BUDGETS AMG APIs.
867
868 This procedure internally calls:
869 1. pa_security.initialize
870 2. pa_security.allow_query
871 3. check_function_security
872
873 Created : 25-Dec-2002 bvarnasi
874 15-Sep-03 vejayara As part of PCS changes, the function security check is done based
875 on the plan type. Refer bug for more details
876 */
877
878 PROCEDURE CHECK_BUDGET_SECURITY (
879 p_api_version_number IN NUMBER,
880 p_project_id IN PA_PROJECTS_ALL.PROJECT_ID%TYPE,
881 p_fin_plan_type_id IN PA_FIN_PLAN_TYPES_B.FIN_PLAN_TYPE_ID%TYPE,
882 p_calling_context IN VARCHAR2,
883 p_function_name IN VARCHAR2,
884 p_version_type IN VARCHAR2,
885 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
886 x_ret_code OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
887
888 l_api_version_number CONSTANT NUMBER := 1.0;
889 l_api_name CONSTANT VARCHAR2(30):= 'CHECK_BUDGET_SECURITY';
890
891 l_module_name VARCHAR2(100);
892 p_pa_debug_mode VARCHAR2(1);
893
894 l_resp_id NUMBER;
895 l_user_id NUMBER;
896
897 l_cost_ret_status VARCHAR2(1);
898 l_rev_ret_status VARCHAR2(1);
899
900 l_ret_code VARCHAR2(1);
901 l_msg_count NUMBER := 0;
902 l_msg_data VARCHAR2(2000);
903 l_debug_mode VARCHAR2(1);
904 l_function_is_allowed CONSTANT VARCHAR2(1):='Y';
905 l_function_not_allowed CONSTANT VARCHAR2(1):='N';
906 l_plan_class VARCHAR2(2000); /* Return value of a function */
907 l_function_name VARCHAR2(2000);
908
909 BEGIN
910 /* Set module name and other standard things like setting error stack etc. */
911 x_return_status := FND_API.G_RET_STS_SUCCESS;
912
913 l_module_name := g_module_name;
914 p_pa_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
915
916
917 IF p_pa_debug_mode = 'Y' THEN
918 pa_debug.set_curr_function( p_function => 'CHECK_BUDGET_SECURITY',
919 p_debug_mode => l_debug_mode );
920 END IF;
921
922 IF p_pa_debug_mode = 'Y' THEN
923 pa_debug.set_process('PLSQL','LOG',p_pa_debug_mode);
924 pa_debug.g_err_stage := 'Validating input parameters ';
925 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
926 END IF;
927
928 -- Validate input parameters
929 IF p_project_id IS NULL THEN
930 IF p_pa_debug_mode = 'Y' THEN
931 pa_debug.g_err_stage := 'Project Id can not be null';
932 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
933 END IF;
934 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
935 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
936 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
937 END IF;
938
939 IF p_calling_context IS NULL THEN
940 IF p_pa_debug_mode = 'Y' THEN
941 pa_debug.g_err_stage := 'Calling Context can not be null';
942 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
943 END IF;
944 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
945 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
946 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
947 END IF;
948
949 IF p_function_name IS NULL THEN
950 IF p_pa_debug_mode = 'Y' THEN
951 pa_debug.g_err_stage := 'Function Name can not be null';
952 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
953 END IF;
954 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
955 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
956 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
957 END IF;
958
959 -- dbms_output.put_line('validateing ver type');
960 IF p_calling_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN THEN
961
962 IF p_fin_plan_type_id IS NULL THEN /* Bug 3139924 */
963 IF p_pa_debug_mode = 'Y' THEN
964 pa_debug.g_err_stage := 'Plan Type Id can not be null';
965 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
966 END IF;
967 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
968 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
969 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
970 END IF;
971
972 IF p_version_type IS NULL THEN
973 IF p_pa_debug_mode = 'Y' THEN
974 pa_debug.g_err_stage := 'Version Type can not be null for calling context : '||
975 p_calling_context;
976 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
977 END IF;
978 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
979 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
980 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
981 ELSIF p_version_type NOT IN (PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST,
982 PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE,
983 PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL) THEN
984 IF p_pa_debug_mode = 'Y' THEN
985 pa_debug.g_err_stage := 'Version Type '|| p_version_type ||' is invalid. ';
986 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
987 END IF;
988 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
989 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
990 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
991 END IF;
992 END IF;
993 -- dbms_output.put_line('after validateing ver type');
994 /* Validations of input parameters are over */
995 /* Get the responsibility and user id and initialize security variables */
996
997 l_resp_id := FND_GLOBAL.Resp_id;
998 l_user_id := FND_GLOBAL.User_id;
999
1000 IF p_pa_debug_mode = 'Y' THEN
1001 pa_debug.g_err_stage := 'Responsibility Id: '|| l_resp_id ||' User Id: '||l_user_id||
1002 ' Project Id: '||p_project_id;
1003 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1004 END IF;
1005
1006 -- Set the project Id into the global variable, this is reference by the
1007 -- API CHECK_FUNCTION_SECURITY
1008 PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := p_project_id;
1009
1010 pa_security.initialize (X_user_id => l_user_id,
1011 X_calling_module => p_function_name);
1012 -- Check if the user has QUERY and UPDATE permissions on the project
1013
1014 IF pa_security.allow_query (x_project_id => p_project_id ) = 'N' THEN
1015 IF p_pa_debug_mode = 'Y' THEN
1016 pa_debug.g_err_stage := 'Query Permission does not exist for project id '||p_project_id;
1017 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1018 END IF;
1019
1020 pa_utils.add_message(
1021 p_app_short_name => 'PA',
1022 p_msg_name => 'PA_PR_SECURITY_ENFORCED_AMG');
1023
1024 RAISE FND_API.G_EXC_ERROR;
1025 ELSIF pa_security.allow_update (x_project_id => p_project_id ) = 'N' THEN
1026 IF p_pa_debug_mode = 'Y' THEN
1027 pa_debug.g_err_stage := 'Update Permission does not exist for project id '||p_project_id;
1028 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1029 END IF;
1030
1031 pa_utils.add_message(
1032 p_app_short_name => 'PA',
1033 p_msg_name => 'PA_PR_SECURITY_ENFORCED_AMG');
1034
1035 RAISE FND_API.G_EXC_ERROR;
1036 END IF;
1037
1038 IF p_pa_debug_mode = 'Y' THEN
1039 pa_debug.g_err_stage := 'Checking Function Securrity for '||p_function_name||
1040 ' in '||p_calling_context||' module.';
1041 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1042 END IF;
1043 -- dbms_output.put_line('validateing ver type 2');
1044
1045 -- Now check if the user has FUNCTION SECURITY on the function passed
1046 -- for BUDGETs Model
1047
1048 IF p_calling_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET THEN
1049
1050 IF p_function_name = 'PA_PM_CREATE_DRAFT_BUDGET' THEN
1051 -- dbms_output.put_line('before checking for PA_PM_CREATE_DRAFT_BUDGET x_return_status'
1052 --||x_return_status);
1053 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1054 p_api_version_number => p_api_version_number,
1055 p_responsibility_id => l_resp_id,
1056 p_function_name => 'PA_PM_CREATE_DRAFT_BUDGET',
1057 p_msg_count => l_msg_count,
1058 p_msg_data => l_msg_data,
1059 p_return_status => x_return_status,
1060 p_function_allowed => l_ret_code);
1061
1062 -- dbms_output.put_line('after checking for PA_PM_CREATE_DRAFT_BUDGET');
1063 -- dbms_output.put_line('x_return_status is '||x_return_status);
1064 -- dbms_output.put_line('l_ret_code is '||l_ret_code);
1065
1066 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1067 l_ret_code = l_function_is_allowed THEN
1068 x_ret_code := l_function_is_allowed;
1069 ELSE
1070 x_ret_code := l_function_not_allowed;
1071 pa_utils.add_message(
1072 p_app_short_name => 'PA',
1073 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
1074 /* 3377434 Modified message name PA_PR_SECURITY_ENFORCED_AMG to
1075 PA_FUNCTION_SECURITY_ENFORCED above*/
1076 END IF;
1077
1078 IF p_pa_debug_mode = 'Y' THEN
1079 pa_debug.g_err_stage := 'PA_PM_CREATE_DRAFT_BUDGET : '||x_ret_code;
1080 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1081 END IF;
1082
1083 --Changes for bug 3182963
1084 IF p_pa_debug_mode = 'Y' THEN
1085 pa_debug.reset_curr_function;
1086 END IF;
1087
1088 RETURN;
1089
1090 ELSIF p_function_name = 'PA_PM_DELETE_DRAFT_BUDGET' THEN
1091 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1092 p_api_version_number => p_api_version_number,
1093 p_responsibility_id => l_resp_id,
1094 p_function_name => 'PA_PM_DELETE_DRAFT_BUDGET',
1095 p_msg_count => l_msg_count,
1096 p_msg_data => l_msg_data,
1097 p_return_status => x_return_status,
1098 p_function_allowed => l_ret_code);
1099
1100 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1101 l_ret_code = l_function_is_allowed THEN
1102
1103 x_ret_code := l_function_is_allowed;
1104
1105 ELSE
1106 x_ret_code := l_function_not_allowed;
1107 pa_utils.add_message(
1108 p_app_short_name => 'PA',
1109 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
1110 /* 3377434 Modified message name PA_PR_SECURITY_ENFORCED_AMG to
1111 PA_FUNCTION_SECURITY_ENFORCED above*/
1112 END IF;
1113
1114 IF p_pa_debug_mode = 'Y' THEN
1115 pa_debug.g_err_stage := 'PA_PM_DELETE_DRAFT_BUDGET : '||x_ret_code;
1116 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1117 END IF;
1118
1119 --Changes for bug 3182963
1120 IF p_pa_debug_mode = 'Y' THEN
1121 pa_debug.reset_curr_function;
1122 END IF;
1123
1124 RETURN;
1125
1126 ELSIF p_function_name = 'PA_PM_UPDATE_BUDGET' THEN
1127
1128 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1129 p_api_version_number => p_api_version_number,
1130 p_responsibility_id => l_resp_id,
1131 p_function_name => 'PA_PM_UPDATE_BUDGET',
1132 p_msg_count => l_msg_count,
1133 p_msg_data => l_msg_data,
1134 p_return_status => x_return_status,
1135 p_function_allowed => l_ret_code);
1136
1137 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1138 l_ret_code = l_function_is_allowed THEN
1139
1140 x_ret_code := l_function_is_allowed;
1141 ELSE
1142 x_ret_code := l_function_not_allowed;
1143 pa_utils.add_message(
1144 p_app_short_name => 'PA',
1145 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
1146 /* 3377434 Modified message name PA_PR_SECURITY_ENFORCED_AMG to
1147 PA_FUNCTION_SECURITY_ENFORCED above*/
1148 END IF;
1149
1150 IF p_pa_debug_mode = 'Y' THEN
1151 pa_debug.g_err_stage := 'PA_PM_UPDATE_BUDGET : '||x_ret_code;
1152 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1153 END IF;
1154
1155 --Changes for bug 3182963
1156 IF p_pa_debug_mode = 'Y' THEN
1157 pa_debug.reset_curr_function;
1158 END IF;
1159
1160 RETURN;
1161
1162 ELSIF p_function_name = 'PA_PM_ADD_BUDGET_LINE' THEN
1163 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1164 p_api_version_number => p_api_version_number,
1165 p_responsibility_id => l_resp_id,
1166 p_function_name => 'PA_PM_ADD_BUDGET_LINE',
1167 p_msg_count => l_msg_count,
1168 p_msg_data => l_msg_data,
1169 p_return_status => x_return_status,
1170 p_function_allowed => l_ret_code);
1171
1172 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1173 l_ret_code = l_function_is_allowed THEN
1174 x_ret_code := l_function_is_allowed;
1175 ELSE
1176 x_ret_code := l_function_not_allowed;
1177 pa_utils.add_message(
1178 p_app_short_name => 'PA',
1179 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
1180 /* 3377434 Modified message name PA_PR_SECURITY_ENFORCED_AMG to
1181 PA_FUNCTION_SECURITY_ENFORCED above*/
1182 END IF;
1183
1184 IF p_pa_debug_mode = 'Y' THEN
1185 pa_debug.g_err_stage := 'PA_PM_ADD_BUDGET_LINE : '||x_ret_code;
1186 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1187 END IF;
1188
1189 --Changes for bug 3182963
1190 IF p_pa_debug_mode = 'Y' THEN
1191 pa_debug.reset_curr_function;
1192 END IF;
1193
1194 RETURN;
1195
1196 ELSIF p_function_name = 'PA_PM_DELETE_BUDGET_LINE' THEN
1197
1198 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1199 p_api_version_number => p_api_version_number,
1200 p_responsibility_id => l_resp_id,
1201 p_function_name => 'PA_PM_DELETE_BUDGET_LINE',
1202 p_msg_count => l_msg_count,
1203 p_msg_data => l_msg_data,
1204 p_return_status => x_return_status,
1205 p_function_allowed => l_ret_code);
1206
1207 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1208 l_ret_code = l_function_is_allowed THEN
1209
1210 x_ret_code := l_function_is_allowed;
1211 ELSE
1212 x_ret_code := l_function_not_allowed;
1213 pa_utils.add_message(
1214 p_app_short_name => 'PA',
1215 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
1216 /* 3377434 Modified message name PA_PR_SECURITY_ENFORCED_AMG to
1217 PA_FUNCTION_SECURITY_ENFORCED above*/
1218 END IF;
1219
1220 IF p_pa_debug_mode = 'Y' THEN
1221 pa_debug.g_err_stage := 'PA_PM_DELETE_BUDGET_LINE : '||x_ret_code;
1222 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1223 END IF;
1224
1225 --Changes for bug 3182963
1226 IF p_pa_debug_mode = 'Y' THEN
1227 pa_debug.reset_curr_function;
1228 END IF;
1229
1230 RETURN;
1231
1232 ELSIF p_function_name = 'PA_PM_UPDATE_BUDGET_LINE' THEN
1233 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1234 p_api_version_number => p_api_version_number,
1235 p_responsibility_id => l_resp_id,
1236 p_function_name => 'PA_PM_UPDATE_BUDGET_LINE',
1237 p_msg_count => l_msg_count,
1238 p_msg_data => l_msg_data,
1239 p_return_status => x_return_status,
1240 p_function_allowed => l_ret_code);
1241
1242 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1243 l_ret_code = l_function_is_allowed THEN
1244 x_ret_code := l_function_is_allowed;
1245 ELSE
1246 x_ret_code := l_function_not_allowed;
1247 pa_utils.add_message(
1248 p_app_short_name => 'PA',
1249 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
1250 /* 3377434 Modified message name PA_PR_SECURITY_ENFORCED_AMG to
1251 PA_FUNCTION_SECURITY_ENFORCED above*/
1252 END IF;
1253
1254 IF p_pa_debug_mode = 'Y' THEN
1255 pa_debug.g_err_stage := 'PA_PM_UPDATE_BUDGET_LINE : '||x_ret_code;
1256 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1257 END IF;
1258
1259 --Changes for bug 3182963
1260 IF p_pa_debug_mode = 'Y' THEN
1261 pa_debug.reset_curr_function;
1262 END IF;
1263
1264 RETURN;
1265
1266 ELSIF p_function_name = 'PA_PM_BASELINE_BUDGET' THEN
1267 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1268 p_api_version_number => p_api_version_number,
1269 p_responsibility_id => l_resp_id,
1270 p_function_name => 'PA_PM_BASELINE_BUDGET',
1271 p_msg_count => l_msg_count,
1272 p_msg_data => l_msg_data,
1273 p_return_status => x_return_status,
1274 p_function_allowed => l_ret_code);
1275
1276 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND l_ret_code = l_function_is_allowed
1277 THEN
1278 x_ret_code := l_function_is_allowed;
1279 ELSE
1280 x_ret_code := l_function_not_allowed;
1281 pa_utils.add_message(
1282 p_app_short_name => 'PA',
1283 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
1284 /* 3377434 Modified message name PA_PR_SECURITY_ENFORCED_AMG to
1285 PA_FUNCTION_SECURITY_ENFORCED above*/
1286 END IF;
1287
1288 IF p_pa_debug_mode = 'Y' THEN
1289 pa_debug.g_err_stage := 'PA_PM_BASELINE_BUDGET : '||x_ret_code;
1290 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1291 END IF;
1292
1293 --Changes for bug 3182963
1294 IF p_pa_debug_mode = 'Y' THEN
1295 pa_debug.reset_curr_function;
1296 END IF;
1297
1298 RETURN;
1299
1300 ELSIF p_function_name = 'CALCULATE_AMOUNTS' THEN
1301 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1302 p_api_version_number => p_api_version_number,
1303 p_responsibility_id => l_resp_id,
1304 p_function_name => 'CALCULATE_AMOUNTS',
1305 p_msg_count => l_msg_count,
1306 p_msg_data => l_msg_data,
1307 p_return_status => x_return_status,
1308 p_function_allowed => l_ret_code);
1309
1310 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND l_ret_code = l_function_is_allowed
1311 THEN
1312 x_ret_code := l_function_is_allowed;
1313 ELSE
1314 x_ret_code := l_function_not_allowed;
1315 pa_utils.add_message(
1316 p_app_short_name => 'PA',
1317 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
1318 /* 3377434 Modified message name PA_PR_SECURITY_ENFORCED_AMG to
1319 PA_FUNCTION_SECURITY_ENFORCED above*/
1320 END IF;
1321
1322 IF p_pa_debug_mode = 'Y' THEN
1323 pa_debug.g_err_stage := 'CALCULATE_AMOUNTS : '||x_ret_code;
1324 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1325 END IF;
1326
1327 --Changes for bug 3182963
1328 IF p_pa_debug_mode = 'Y' THEN
1329 pa_debug.reset_curr_function;
1330 END IF;
1331
1332 RETURN;
1333
1334 --Bug 4224464: Added the following elsif blocks to check function security
1335 --for PA_BUDGET_PUB.delete_baseline_budget AMG api.
1336 --Secuity check for deleting Approved Baseline Budget (Cost or Revenue)
1337 ELSIF p_function_name = 'PA_FP_DEL_BSLN_APPRVD_BDGT' THEN
1338 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1339 p_api_version_number => p_api_version_number,
1340 p_responsibility_id => l_resp_id,
1341 p_function_name => 'PA_FP_DEL_BSLN_APPRVD_BDGT',
1342 p_msg_count => l_msg_count,
1343 p_msg_data => l_msg_data,
1344 p_return_status => x_return_status,
1345 p_function_allowed => l_ret_code);
1346
1347 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND l_ret_code = l_function_is_allowed
1348 THEN
1349 x_ret_code := l_function_is_allowed;
1350 ELSE
1351 x_ret_code := l_function_not_allowed;
1352 pa_utils.add_message(
1353 p_app_short_name => 'PA',
1354 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
1355 END IF;
1356
1357 IF p_pa_debug_mode = 'Y' THEN
1358 pa_debug.g_err_stage := 'PA_FP_DEL_BSLN_APPRVD_BDGT : '||x_ret_code;
1359 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1360 END IF;
1361
1362 IF p_pa_debug_mode = 'Y' THEN
1363 pa_debug.reset_curr_function;
1364 END IF;
1365
1366 RETURN;
1367
1368 --Secuity check for deleting Baseline Budget (not approved Cost or Revenue)
1369 ELSIF p_function_name = 'PA_FP_DEL_BSLN_BDGT' THEN
1370 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1371 p_api_version_number => p_api_version_number,
1372 p_responsibility_id => l_resp_id,
1373 p_function_name => 'PA_FP_DEL_BSLN_BDGT',
1374 p_msg_count => l_msg_count,
1375 p_msg_data => l_msg_data,
1376 p_return_status => x_return_status,
1377 p_function_allowed => l_ret_code);
1378
1379 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND l_ret_code = l_function_is_allowed
1380 THEN
1381 x_ret_code := l_function_is_allowed;
1382 ELSE
1383 x_ret_code := l_function_not_allowed;
1384 pa_utils.add_message(
1385 p_app_short_name => 'PA',
1386 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
1387 END IF;
1388
1389 IF p_pa_debug_mode = 'Y' THEN
1390 pa_debug.g_err_stage := 'PA_FP_DEL_BSLN_BDGT : '||x_ret_code;
1391 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1392 END IF;
1393
1394 IF p_pa_debug_mode = 'Y' THEN
1395 pa_debug.reset_curr_function;
1396 END IF;
1397
1398 RETURN;
1399 --Bug 4224464: End of changes
1400
1401 ELSE -- Unhandled functions security - Hence throw invalid arg exception
1402 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
1403 END IF;-- End of function security checks for BUDGETs model
1404
1405 ELSIF p_calling_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN THEN
1406
1407 /* Derive the plan class of the plan type */
1408
1409 l_plan_class := pa_fin_plan_type_global.plantype_to_planclass(
1410 p_project_id => p_project_id,
1411 p_fin_plan_type_id => p_fin_plan_type_id);
1412
1413 IF l_plan_class = 'INVALID_PLAN_TYPE' THEN
1414
1415 IF p_pa_debug_mode = 'Y' THEN
1416 pa_debug.g_err_stage := 'Error while retrieving the plan class. Invalid plan type ..';
1417 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1418 END IF;
1419 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1420 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1421 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
1422
1423 END IF;
1424
1425 IF p_pa_debug_mode = 'Y' THEN
1426
1427 pa_debug.g_err_stage := 'Checking function security for FinPlan module. ' ||
1428 'Plan Class:' || l_plan_class || ' : ' ||
1429 'Version Type: ' || p_version_type || ' : ' ||
1430 'Function Name: ' || p_function_name;
1431
1432 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1433
1434 END IF;
1435
1436 -- dbms_output.put_line('validateing ver type 6');
1437
1438 IF p_function_name = 'PA_PM_CREATE_DRAFT_BUDGET' OR
1439 p_function_name = 'PA_PM_DELETE_DRAFT_BUDGET' OR
1440 p_function_name = 'PA_PM_UPDATE_BUDGET' OR
1441 p_function_name = 'PA_PM_ADD_BUDGET_LINE' OR
1442 p_function_name = 'PA_PM_DELETE_BUDGET_LINE' OR
1443 p_function_name = 'PA_PM_UPDATE_BUDGET_LINE' THEN
1444
1445 -- In case of FINPLAN, check fn security for COST or ALL version
1446
1447 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST OR
1448 p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1449
1450 IF l_plan_class = 'APPROVED_BUDGET' THEN
1451
1452 l_function_name := 'PA_FP_APP_BDGT_MNT_COST_PLAN';
1453
1454 ELSIF l_plan_class = 'NON_APPROVED_BUDGET' THEN
1455
1456 l_function_name := 'PA_FP_BDGT_MNT_COST_PLAN';
1457
1458 ELSIF l_plan_class = 'FORECAST' THEN
1459
1460 l_function_name := 'PA_FP_FCST_MNT_COST_PLAN';
1461
1462 ELSE
1463
1464 IF p_pa_debug_mode = 'Y' THEN
1465 pa_debug.g_err_stage := 'Error while retrieving the plan class. ' ||
1466 'Invalid plan type ..';
1467 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1468 END IF;
1469 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1470 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1471 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
1472
1473 END IF;
1474
1475 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1476 p_api_version_number => p_api_version_number,
1477 p_responsibility_id => l_resp_id,
1478 p_function_name => l_function_name,
1479 p_msg_count => l_msg_count,
1480 p_msg_data => l_msg_data,
1481 p_return_status => x_return_status,
1482 p_function_allowed => l_ret_code);
1483
1484 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1485 l_ret_code = l_function_is_allowed THEN
1486 l_cost_ret_status := l_function_is_allowed;
1487 x_ret_code := l_function_is_allowed;
1488 ELSE
1489 l_cost_ret_status := l_function_not_allowed;
1490 x_ret_code := l_function_not_allowed;
1491 END IF;
1492
1493 IF p_pa_debug_mode = 'Y' THEN
1494 pa_debug.g_err_stage := 'status : '||l_ret_code;
1495 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1496 END IF;
1497
1498 END IF;
1499
1500 -- In case of FINPLAN, check fn security for REVENUE or ALL version
1501
1502 --We should NOT use ELSIF here as we want this block also to be executed
1503 --when p_version_type is ALL.
1504
1505 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE OR
1506 p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1507
1508 IF l_plan_class = 'APPROVED_BUDGET' THEN
1509
1510 l_function_name := 'PA_FP_APP_BDGT_MNT_REV_PLAN';
1511
1512 ELSIF l_plan_class = 'NON_APPROVED_BUDGET' THEN
1513
1514 l_function_name := 'PA_FP_BDGT_MNT_REV_PLAN';
1515
1516 ELSIF l_plan_class = 'FORECAST' THEN
1517
1518 l_function_name := 'PA_FP_FCST_MNT_REV_PLAN';
1519
1520 ELSE
1521
1522 IF p_pa_debug_mode = 'Y' THEN
1523 pa_debug.g_err_stage := 'Error while retrieving the plan class. ' ||
1524 'Invalid plan type ..';
1525 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1526 END IF;
1527 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1528 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1529 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
1530
1531 END IF;
1532
1533 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1534 p_api_version_number => p_api_version_number,
1535 p_responsibility_id => l_resp_id,
1536 p_function_name => l_function_name,
1537 p_msg_count => l_msg_count,
1538 p_msg_data => l_msg_data,
1539 p_return_status => x_return_status,
1540 p_function_allowed => l_ret_code);
1541
1542 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1543 l_ret_code = l_function_is_allowed THEN
1544 l_rev_ret_status := l_function_is_allowed;
1545 x_ret_code := l_function_is_allowed;
1546 ELSE
1547 l_rev_ret_status := l_function_not_allowed;
1548 x_ret_code := l_function_not_allowed;
1549 END IF;
1550
1551 IF p_pa_debug_mode = 'Y' THEN
1552 pa_debug.g_err_stage := 'status : '||l_ret_code;
1553 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1554 END IF;
1555
1556 END IF;
1557
1558 -- In case of FINPLAN, check fn security for ALL version
1559 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1560
1561 IF l_cost_ret_status = l_function_is_allowed OR
1562 l_rev_ret_status = l_function_is_allowed THEN
1563 l_ret_code := l_function_is_allowed;
1564 x_ret_code := l_function_is_allowed;
1565 ELSE
1566 l_ret_code := l_function_not_allowed;
1567 x_ret_code := l_function_not_allowed;
1568 END IF;
1569
1570 IF p_pa_debug_mode = 'Y' THEN
1571 pa_debug.g_err_stage := 'status : '||l_ret_code;
1572 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1573 END IF;
1574
1575 END IF; -- Comparision for ALL version_type ends
1576
1577 ELSIF p_function_name = 'PA_PM_BASELINE_BUDGET' THEN
1578
1579 -- In case of FINPLAN, check fn security for COST or ALL version
1580
1581 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST OR
1582 p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1583
1584 IF l_plan_class = 'APPROVED_BUDGET' THEN
1585
1586 l_function_name := 'PA_FP_APP_BDGT_BSLN_COST_PLAN';
1587
1588 ELSIF l_plan_class = 'NON_APPROVED_BUDGET' THEN
1589
1590 l_function_name := 'PA_FP_BDGT_BSLN_COST_PLAN';
1591
1592 ELSIF l_plan_class = 'FORECAST' THEN
1593
1594 l_function_name := 'PA_FP_FCST_BSLN_COST_PLAN';
1595
1596 ELSE
1597
1598 IF p_pa_debug_mode = 'Y' THEN
1599 pa_debug.g_err_stage := 'Error while retrieving the plan class.' ||
1600 'Invalid plan type ..';
1601 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1602 END IF;
1603 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1604 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1605 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
1606
1607 END IF;
1608
1609 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1610 p_api_version_number => p_api_version_number,
1611 p_responsibility_id => l_resp_id,
1612 p_function_name => l_function_name,
1613 p_msg_count => l_msg_count,
1614 p_msg_data => l_msg_data,
1615 p_return_status => x_return_status,
1616 p_function_allowed => l_ret_code);
1617
1618 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1619 l_ret_code = l_function_is_allowed THEN
1620 l_cost_ret_status := l_function_is_allowed;
1621 x_ret_code := l_function_is_allowed;
1622 ELSE
1623 l_cost_ret_status := l_function_not_allowed;
1624 x_ret_code := l_function_not_allowed;
1625 END IF;
1626
1627 IF p_pa_debug_mode = 'Y' THEN
1628 pa_debug.g_err_stage := 'status : '||l_ret_code;
1629 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1630 END IF;
1631
1632 END IF;
1633
1634 --In case of FINPLAN, check fn security for REVENUE or ALL version
1635 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE OR
1636 p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1637
1638 IF l_plan_class = 'APPROVED_BUDGET' THEN
1639
1640 l_function_name := 'PA_FP_APP_BDGT_BSLN_REV_PLAN';
1641
1642 ELSIF l_plan_class = 'NON_APPROVED_BUDGET' THEN
1643
1644 l_function_name := 'PA_FP_BDGT_BSLN_REV_PLAN';
1645
1646 ELSIF l_plan_class = 'FORECAST' THEN
1647
1648 l_function_name := 'PA_FP_FCST_BSLN_REV_PLAN';
1649
1650 ELSE
1651
1652 IF p_pa_debug_mode = 'Y' THEN
1653 pa_debug.g_err_stage := 'Error while retrieving the plan class. ' ||
1654 'Invalid plan type ..';
1655 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1656 END IF;
1657
1658 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1659 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1660 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
1661
1662 END IF;
1663
1664 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1665 p_api_version_number => p_api_version_number,
1666 p_responsibility_id => l_resp_id,
1667 p_function_name => l_function_name,
1668 p_msg_count => l_msg_count,
1669 p_msg_data => l_msg_data,
1670 p_return_status => x_return_status,
1671 p_function_allowed => l_ret_code);
1672
1673 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1674 l_ret_code = l_function_is_allowed THEN
1675 l_rev_ret_status := l_function_is_allowed;
1676 x_ret_code := l_function_is_allowed;
1677 ELSE
1678 l_rev_ret_status := l_function_not_allowed;
1679 x_ret_code := l_function_not_allowed;
1680 END IF;
1681
1682 IF p_pa_debug_mode = 'Y' THEN
1683 pa_debug.g_err_stage := 'status : '||l_ret_code;
1684 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1685 END IF;
1686
1687 END IF;
1688
1689 --In case of FINPLAN, check fn security for ALL version
1690 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1691
1692 IF l_cost_ret_status = l_function_is_allowed OR
1693 l_rev_ret_status = l_function_is_allowed THEN
1694 l_ret_code := l_function_is_allowed;
1695 x_ret_code := l_function_is_allowed;
1696 ELSE
1697 l_ret_code := l_function_not_allowed;
1698 x_ret_code := l_function_not_allowed;
1699 END IF;
1700
1701 IF p_pa_debug_mode = 'Y' THEN
1702 pa_debug.g_err_stage := 'status : '||l_ret_code;
1703 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1704 END IF;
1705
1706 END IF; -- Comparision for ALL version_type ends
1707
1708 ELSIF p_function_name = 'CALCULATE_AMOUNTS' THEN
1709
1710 IF l_plan_class = 'APPROVED_BUDGET' THEN
1711
1712 l_function_name := 'PA_FP_APP_BDGT_MNT_PLAN_LINES';
1713
1714 ELSIF l_plan_class = 'NON_APPROVED_BUDGET' THEN
1715
1716 l_function_name := 'PA_FP_BDGT_MNT_PLAN_LINES';
1717
1718 ELSIF l_plan_class = 'FORECAST' THEN
1719
1720 l_function_name := 'PA_FP_FCST_MNT_PLAN_LINES';
1721
1722 ELSE
1723
1724 IF p_pa_debug_mode = 'Y' THEN
1725 pa_debug.g_err_stage := 'Error while retrieving the plan class.' ||
1726 'Invalid plan type ..';
1727 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1728 END IF;
1729 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1730 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1731 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
1732
1733 END IF;
1734
1735 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1736 p_api_version_number => p_api_version_number,
1737 p_responsibility_id => l_resp_id,
1738 p_function_name => l_function_name,
1739 p_msg_count => l_msg_count,
1740 p_msg_data => l_msg_data,
1741 p_return_status => x_return_status,
1742 p_function_allowed => l_ret_code);
1743
1744 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1745 l_ret_code = l_function_is_allowed THEN
1746 l_ret_code := l_function_is_allowed;
1747 x_ret_code := l_function_is_allowed;
1748 ELSE
1749 l_ret_code := l_function_not_allowed;
1750 x_ret_code := l_function_not_allowed;
1751 END IF;
1752
1753 IF p_pa_debug_mode = 'Y' THEN
1754 pa_debug.g_err_stage := 'status : '||l_ret_code;
1755 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1756 END IF;
1757
1758 --Bug 4224464: Added the following elsif block to check function security
1759 --for PA_BUDGET_PUB.delete_baseline_budget AMG api.
1760 ELSIF p_function_name = 'PA_PM_DELETE_BASELINE_BUDGET' THEN
1761
1762 IF l_plan_class = 'APPROVED_BUDGET' THEN
1763
1764 l_function_name := 'PA_FP_DEL_BSLN_APPRVD_BDGT';
1765
1766 ELSIF l_plan_class = 'NON_APPROVED_BUDGET' THEN
1767
1768 l_function_name := 'PA_FP_DEL_BSLN_BDGT';
1769
1770 ELSIF l_plan_class = 'FORECAST' THEN
1771
1772 l_function_name := 'PA_FP_DEL_APPRVD_FCST';
1773
1774 ELSE
1775
1776 IF p_pa_debug_mode = 'Y' THEN
1777 pa_debug.g_err_stage := 'Error while retrieving the plan class.' ||
1778 'Invalid plan type ..';
1779 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1780 END IF;
1781 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1782 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1783 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
1784
1785 END IF;
1786
1787 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1788 p_api_version_number => p_api_version_number,
1789 p_responsibility_id => l_resp_id,
1790 p_function_name => l_function_name,
1791 p_msg_count => l_msg_count,
1792 p_msg_data => l_msg_data,
1793 p_return_status => x_return_status,
1794 p_function_allowed => l_ret_code);
1795
1796 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1797 l_ret_code = l_function_is_allowed THEN
1798 l_ret_code := l_function_is_allowed;
1799 x_ret_code := l_function_is_allowed;
1800 ELSE
1801 l_ret_code := l_function_not_allowed;
1802 x_ret_code := l_function_not_allowed;
1803 END IF;
1804
1805 IF p_pa_debug_mode = 'Y' THEN
1806 pa_debug.g_err_stage := 'status : '||l_ret_code;
1807 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1808 END IF;
1809 --Bug 4224464: End of changes
1810
1811 -- Bug 3986129: FP.M Web ADI Dev. Inculded the following checks
1812 -- for editing of change order versions and forecasr versions
1813 ELSIF p_function_name = 'PA_PM_UPDATE_CHG_DOC' THEN -- for maintaing CI versions
1814
1815 -- check fn security for COST or ALL version
1816
1817 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST OR
1818 p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1819
1820 l_function_name := 'PA_FP_MNT_CHG_DOC_COST_FIN_IMP';
1821
1822 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1823 p_api_version_number => p_api_version_number,
1824 p_responsibility_id => l_resp_id,
1825 p_function_name => l_function_name,
1826 p_msg_count => l_msg_count,
1827 p_msg_data => l_msg_data,
1828 p_return_status => x_return_status,
1829 p_function_allowed => l_ret_code);
1830
1831 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1832 l_ret_code = l_function_is_allowed THEN
1833 l_cost_ret_status := l_function_is_allowed;
1834 x_ret_code := l_function_is_allowed;
1835 ELSE
1836 l_cost_ret_status := l_function_not_allowed;
1837 x_ret_code := l_function_not_allowed;
1838 END IF;
1839
1840 IF p_pa_debug_mode = 'Y' THEN
1841 pa_debug.g_err_stage := 'status : '||l_ret_code;
1842 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1843 END IF;
1844
1845 END IF;
1846
1847 --In case of FINPLAN, check fn security for REVENUE or ALL version
1848 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE OR
1849 p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1850 l_function_name := 'PA_FP_MNT_CHG_DOC_REV_FIN_IMP';
1851
1852 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1853 p_api_version_number => p_api_version_number,
1854 p_responsibility_id => l_resp_id,
1855 p_function_name => l_function_name,
1856 p_msg_count => l_msg_count,
1857 p_msg_data => l_msg_data,
1858 p_return_status => x_return_status,
1859 p_function_allowed => l_ret_code);
1860
1861 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1862 l_ret_code = l_function_is_allowed THEN
1863 l_rev_ret_status := l_function_is_allowed;
1864 x_ret_code := l_function_is_allowed;
1865 ELSE
1866 l_rev_ret_status := l_function_not_allowed;
1867 x_ret_code := l_function_not_allowed;
1868 END IF;
1869
1870 IF p_pa_debug_mode = 'Y' THEN
1871 pa_debug.g_err_stage := 'status : '||l_ret_code;
1872 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1873 END IF;
1874
1875 END IF;
1876
1877 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1878
1879 IF l_cost_ret_status = l_function_is_allowed OR
1880 l_rev_ret_status = l_function_is_allowed THEN
1881 l_ret_code := l_function_is_allowed;
1882 x_ret_code := l_function_is_allowed;
1883 ELSE
1884 l_ret_code := l_function_not_allowed;
1885 x_ret_code := l_function_not_allowed;
1886 END IF;
1887
1888 IF p_pa_debug_mode = 'Y' THEN
1889 pa_debug.g_err_stage := 'status : '||l_ret_code;
1890 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1891 END IF;
1892
1893 END IF; -- Comparision for ALL version_type ends
1894
1895 ELSIF p_function_name = 'PA_PM_SUBMIT_BUDGET' THEN -- submit privilege for budget/forecasts
1896
1897 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST OR
1898 p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1899
1900 IF l_plan_class = 'APPROVED_BUDGET' THEN
1901
1902 l_function_name := 'PA_FP_APP_BDGT_SUB_COST_PLAN';
1903
1904 ELSIF l_plan_class = 'NON_APPROVED_BUDGET' THEN
1905
1906 l_function_name := 'PA_FP_BDGT_SUB_COST_PLAN';
1907
1908 ELSIF l_plan_class = 'FORECAST' THEN
1909
1910 l_function_name := 'PA_FP_FCST_SUB_COST_PLAN';
1911
1912 ELSE
1913
1914 IF p_pa_debug_mode = 'Y' THEN
1915 pa_debug.g_err_stage := 'Error while retrieving the plan class.' ||
1916 'Invalid plan type ..';
1917 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1918 END IF;
1919 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1920 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1921 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
1922
1923 END IF;
1924
1925 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1926 p_api_version_number => p_api_version_number,
1927 p_responsibility_id => l_resp_id,
1928 p_function_name => l_function_name,
1929 p_msg_count => l_msg_count,
1930 p_msg_data => l_msg_data,
1931 p_return_status => x_return_status,
1932 p_function_allowed => l_ret_code);
1933
1934 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1935 l_ret_code = l_function_is_allowed THEN
1936 l_cost_ret_status := l_function_is_allowed;
1937 x_ret_code := l_function_is_allowed;
1938 ELSE
1939 l_cost_ret_status := l_function_not_allowed;
1940 x_ret_code := l_function_not_allowed;
1941 END IF;
1942
1943 IF p_pa_debug_mode = 'Y' THEN
1944 pa_debug.g_err_stage := 'status : '||l_ret_code;
1945 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1946 END IF;
1947
1948 END IF;
1949
1950 --In case of FINPLAN, check fn security for REVENUE or ALL version
1951 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE OR
1952 p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
1953
1954 IF l_plan_class = 'APPROVED_BUDGET' THEN
1955
1956 l_function_name := 'PA_FP_APP_BDGT_SUB_REV_PLAN';
1957
1958 ELSIF l_plan_class = 'NON_APPROVED_BUDGET' THEN
1959
1960 l_function_name := 'PA_FP_BDGT_SUB_REV_PLAN';
1961
1962 ELSIF l_plan_class = 'FORECAST' THEN
1963
1964 l_function_name := 'PA_FP_FCST_SUB_REV_PLAN';
1965
1966 ELSE
1967
1968 IF p_pa_debug_mode = 'Y' THEN
1969 pa_debug.g_err_stage := 'Error while retrieving the plan class. ' ||
1970 'Invalid plan type ..';
1971 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
1972 END IF;
1973
1974 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1975 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1976 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
1977
1978 END IF;
1979
1980 PA_PM_FUNCTION_SECURITY_PUB.check_function_security(
1981 p_api_version_number => p_api_version_number,
1982 p_responsibility_id => l_resp_id,
1983 p_function_name => l_function_name,
1984 p_msg_count => l_msg_count,
1985 p_msg_data => l_msg_data,
1986 p_return_status => x_return_status,
1987 p_function_allowed => l_ret_code);
1988
1989 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
1990 l_ret_code = l_function_is_allowed THEN
1991 l_rev_ret_status := l_function_is_allowed;
1992 x_ret_code := l_function_is_allowed;
1993 ELSE
1994 l_rev_ret_status := l_function_not_allowed;
1995 x_ret_code := l_function_not_allowed;
1996 END IF;
1997
1998 IF p_pa_debug_mode = 'Y' THEN
1999 pa_debug.g_err_stage := 'status : '||l_ret_code;
2000 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
2001 END IF;
2002
2003 END IF;
2004
2005 --In case of FINPLAN, check fn security for ALL version
2006 IF p_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL THEN
2007
2008 IF l_cost_ret_status = l_function_is_allowed OR
2009 l_rev_ret_status = l_function_is_allowed THEN
2010 l_ret_code := l_function_is_allowed;
2011 x_ret_code := l_function_is_allowed;
2012 ELSE
2013 l_ret_code := l_function_not_allowed;
2014 x_ret_code := l_function_not_allowed;
2015 END IF;
2016
2017 IF p_pa_debug_mode = 'Y' THEN
2018 pa_debug.g_err_stage := 'status : '||l_ret_code;
2019 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
2020 END IF;
2021
2022 END IF; -- Comparision for ALL version_type ends
2023
2024 ELSE -- if the function passed doesnot match any value compared
2025 IF p_pa_debug_mode = 'Y' THEN
2026 pa_debug.g_err_stage := 'Invalid function name passed';
2027 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
2028 END IF;
2029 pa_utils.add_message
2030 (p_app_short_name => 'PA',
2031 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
2032 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2033
2034 END IF; -- end of processing for various function calls
2035 -- Bug 3986129: FP.M Web ADI changes ends
2036
2037 IF x_ret_code = l_function_not_allowed THEN
2038 pa_utils.add_message(
2039 p_app_short_name => 'PA',
2040 p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
2041 /* 3377434 Modified message name PA_PR_SECURITY_ENFORCED_AMG to
2042 PA_FUNCTION_SECURITY_ENFORCED above*/
2043 END IF;
2044
2045 ELSE -- End of ELSE block where p_calling_context = FINPLAN is checked.
2046
2047 IF p_pa_debug_mode = 'Y' THEN
2048 pa_debug.g_err_stage := 'Unhandled case of p_calling_context '||p_calling_context;
2049 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
2050 END IF;
2051
2052 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
2053
2054 END IF;
2055
2056 --Changes for bug 3182963
2057 IF p_pa_debug_mode = 'Y' THEN
2058 pa_debug.reset_curr_function;
2059 END IF;
2060
2061 -- Exception handling
2062 EXCEPTION
2063 WHEN PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC THEN
2064 l_ret_code :=l_function_not_allowed;
2065 x_ret_code := l_function_not_allowed;
2066 x_return_status := FND_API.G_RET_STS_ERROR;
2067
2068 --Changes for bug 3182963
2069 IF p_pa_debug_mode = 'Y' THEN
2070 pa_debug.reset_curr_function;
2071 END IF;
2072
2073 RETURN;
2074
2075 WHEN FND_API.G_EXC_ERROR THEN
2076 l_ret_code :=l_function_not_allowed;
2077 x_ret_code := l_function_not_allowed;
2078 x_return_status := FND_API.G_RET_STS_ERROR;
2079
2080 --Changes for bug 3182963
2081 IF p_pa_debug_mode = 'Y' THEN
2082 pa_debug.reset_curr_function;
2083 END IF;
2084
2085 RETURN;
2086
2087 WHEN OTHERS THEN
2088 l_ret_code :=l_function_not_allowed;
2089 x_ret_code := l_function_not_allowed;
2090 x_return_status := FND_API.G_RET_STS_ERROR;
2091 IF p_pa_debug_mode = 'Y' THEN
2092 pa_debug.g_err_stage := 'Unexpected Exception: '||sqlerrm;
2093 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
2094 END IF;
2095
2096 --Changes for bug 3182963
2097 IF p_pa_debug_mode = 'Y' THEN
2098 pa_debug.reset_curr_function;
2099 END IF;
2100
2101 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2102
2103 END CHECK_BUDGET_SECURITY;
2104
2105 END PA_PM_FUNCTION_SECURITY_PUB;