DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_ALLOC_UTILS

Source


1 PACKAGE BODY PA_ALLOC_UTILS AS
2 /* $Header: PAXALUTB.pls 120.1.12010000.3 2009/11/30 12:30:37 rrambati ship $ */
3 
4 ------------------------------------------------------------------------
5 ---  is_resource_in_rules
6 -----This function returns 'Y' if a resource list member is used in allocations
7 ------------------------------------------------------------------------
8 FUNCTION Is_resource_in_rules(p_resource_list_member_id IN NUMBER)
9                                            RETURN VARCHAR2
10 IS
11 
12 CURSOR  C_resource_list_member IS
13  SELECT '1'
14  FROM dual
15  WHERE EXISTS (SELECT 'Y'
16                 FROM  PA_ALLOC_RESOURCES  RE
17                 WHERE  RE.RESOURCE_LIST_MEMBER_ID=P_resource_list_member_id
18                )
19       OR EXISTS
20                (SELECT 'Y'
21                FROM   PA_ALLOC_RUN_SOURCE_DET SRC
22                WHERE SRC.RESOURCE_LIST_MEMBER_ID=P_resource_list_member_id
23                )
24        OR EXISTS
25                (SELECT 'Y'
26                FROM   PA_ALLOC_RUN_BASIS_DET BASIS
27                WHERE BASIS.RESOURCE_LIST_MEMBER_ID=P_resource_list_member_id
28                );
29 v_ret_code varchar2(1) ;
30 v_dummy  varchar2(1);
31 
32 BEGIN
33   v_ret_code := 'N';
34 
35   OPEN  C_resource_list_member ;
36   FETCH  C_resource_list_member INTO v_dummy;
37   IF  C_resource_list_member%FOUND THEN
38      v_ret_code := 'Y' ;
39   END IF;
40   CLOSE  C_resource_list_member;
41   RETURN v_ret_code;
42 
43 EXCEPTION
44   WHEN NO_DATA_FOUND THEN
45      v_ret_code := 'N' ;
46      Return v_ret_code ;
47   WHEN OTHERS THEN
48   RAISE;
49 END  is_resource_in_rules ;
50 
51 ------------------------------------------------------------------------
52 ---  is_resource_list_in_rules
53 ---- This function returns 'Y' if a resouce list is used in allocations
54 ------------------------------------------------------------------------
55 FUNCTION  is_resource_list_in_rules(p_resource_list_id IN NUMBER)
56                                                  RETURN varchar2 IS
57 CURSOR  C_resource_list IS
58  SELECT '1'
59  FROM dual
60  WHERE EXISTS (SELECT 'Y'
61                FROM  PA_ALLOC_RULES_ALL PAL /* Bug 4185336 Changed PA_ALLOC_RULES to PA_ALLOC_RULES_ALL */
62                WHERE  PAL.BASIS_RESOURCE_LIST_ID=P_resource_list_id
63                 OR    PAL.ALLOC_RESOURCE_LIST_ID=P_resource_list_id
64                )
65       OR EXISTS
66                (SELECT 'Y'
67                FROM  PA_ALLOC_RUNS_ALL PAR
68                WHERE  PAR.BASIS_RESOURCE_LIST_ID=P_resource_list_id
69                 OR    PAR.ALLOC_RESOURCE_LIST_ID=P_resource_list_id
70                );
71 v_ret_code varchar2(1) ;
72 v_dummy  varchar2(1);
73 
74 BEGIN
75   v_ret_code := 'N';
76 
77   OPEN  C_resource_list ;
78   FETCH  C_resource_list INTO v_dummy;
79   IF  C_resource_list%FOUND THEN
80      v_ret_code := 'Y' ;
81   END IF;
82   CLOSE  C_resource_list;
83   RETURN v_ret_code;
84 
85 EXCEPTION
86   WHEN NO_DATA_FOUND THEN
87      v_ret_code := 'N' ;
88      Return v_ret_code ;
89   WHEN OTHERS THEN
90   RAISE;
91 END  is_resource_list_in_rules ;
92 
93 
94 ------------------------------------------------------------------------
95 ---  is_project_in_allocations
96 ---- This function returns 'Y' if a project is used in allocations
97 ------------------------------------------------------------------------
98 FUNCTION Is_project_in_allocations(p_project_id IN NUMBER)
99                                            RETURN VARCHAR2
100 IS
101 
102 CURSOR C_project_in_allocations is
103  SELECT '1'
104  FROM dual
105  WHERE EXISTS (SELECT 'Y'
106                FROM  PA_ALLOC_TXN_DETAILS TXN
107                WHERE TXN.project_id=p_project_id)
108       OR EXISTS
109                (SELECT 'Y'
110                FROM  PA_ALLOC_RULES_ALL  RULES
111                WHERE RULES.offset_project_id=p_project_id)
112       OR EXISTS
113                (SELECT 'Y'
114                FROM  PA_ALLOC_SOURCE_LINES SRCL
115                WHERE SRCL.project_id=p_project_id)
116       OR EXISTS
117               ( SELECT 'Y'
118                FROM  PA_ALLOC_TARGET_LINES TGTL
119                WHERE TGTL.project_id=p_project_id)
120       OR EXISTS
121                (SELECT 'Y'
122                FROM   PA_ALLOC_RUN_SOURCES  RSRC
123                WHERE  RSRC.project_id=p_project_id)
124       OR EXISTS
125                (SELECT 'Y'
126                FROM PA_ALLOC_RUN_TARGETS RTGT
127                WHERE  RTGT.project_id=p_project_id);
128 
129 v_ret_code varchar2(1) ;
130 v_dummy  varchar2(1);
131 
132 BEGIN
133 
134   v_ret_code := 'N';
135 
136   OPEN  C_project_in_allocations;
137   FETCH C_project_in_allocations INTO v_dummy;
138   IF C_project_in_allocations%FOUND THEN
139      v_ret_code := 'Y' ;
140   END IF;
141   CLOSE C_project_in_allocations;
142   RETURN v_ret_code;
143 
144 EXCEPTION
145   WHEN NO_DATA_FOUND THEN
146      v_ret_code := 'N' ;
147      Return v_ret_code ;
148   WHEN OTHERS THEN
149   RAISE;
150 END  is_project_in_allocations;
151 
152 
153 
154 ------------------------------------------------------------------------
155 ---  is_task_in_allocations
156 ---- This function returns 'Y' if a task is used in allocations
157 ------------------------------------------------------------------------
158 FUNCTION Is_task_in_allocations(p_task_id IN NUMBER)
159                                            RETURN VARCHAR2
160 IS
161 /***
162 CURSOR C_subtasks is
163  select task_id
164  from pa_tasks
165  CONNECT BY PRIOR TASK_ID = PARENT_TASK_ID
166  START WITH TASK_ID = p_task_id;
167  ***/
168 
169 CURSOR C_task_in_alloc_rule(x_task_id IN NUMBER) is
170               SELECT 'Y'
171                FROM  PA_ALLOC_RULES_ALL RULES
172                WHERE RULES.offset_task_id=x_task_id;
173 /* Commented for bug 8929749
174 CURSOR C_task_in_alloc_src_line(x_task_id IN NUMBER) is
175                SELECT 'Y'
176                FROM  PA_ALLOC_SOURCE_LINES SRCL
177                WHERE SRCL.task_id=x_task_id;
178 */
179 CURSOR C_task_in_alloc_tgt_line(x_task_id IN NUMBER) is
180                SELECT 'Y'
181                FROM  PA_ALLOC_TARGET_LINES TGTL
182                WHERE TGTL.task_id=x_task_id;
183 CURSOR C_task_in_alloc_txn(x_task_id IN NUMBER) is
184                SELECT 'Y'
185                FROM  PA_ALLOC_TXN_DETAILS TXN
186                WHERE TXN.task_id=x_task_id;
187 /* Commented for bug 8929749
188 CURSOR C_task_in_alloc_run_src(x_task_id IN NUMBER) is
189                SELECT 'Y'
190                FROM   PA_ALLOC_RUN_SOURCES RSRC
191                WHERE  RSRC.task_id=x_task_id;
192 */
193 CURSOR C_task_in_alloc_run_tgt(x_task_id IN NUMBER) is
194                SELECT 'Y'
195                FROM PA_ALLOC_RUN_TARGETS RTGT
196                WHERE  RTGT.task_id=x_task_id;
197 
198 v_ret_code varchar2(1) := 'N';
199 
200 BEGIN
201 
202  /**
203   v_ret_code := 'N';
204   For subtasks_rec in C_subtasks LOOP
205     OPEN  C_task_in_allocations(p_task_id);
206     FETCH C_task_in_allocations INTO v_dummy;
207     IF C_task_in_allocations%FOUND THEN
208       v_ret_code := 'Y' ;
209       close  C_task_in_allocations;
210       return  v_ret_code;
211     END IF;
212     CLOSE C_task_in_allocations;
213   END LOOP;
214   **/
215   open C_task_in_alloc_rule(p_task_id);
216   fetch C_task_in_alloc_rule into v_ret_code;
217   close C_task_in_alloc_rule;
218 /* Commented for bug 8929749
219   if (v_ret_code = 'N') then
220     open C_task_in_alloc_src_line(p_task_id);
221     fetch C_task_in_alloc_src_line into v_ret_code;
222     close C_task_in_alloc_src_line;
223   else
224     RETURN v_ret_code;
225   end if;
226 */
227   if (v_ret_code = 'N') then
228     open C_task_in_alloc_tgt_line(p_task_id);
229     fetch C_task_in_alloc_tgt_line into v_ret_code;
230     close C_task_in_alloc_tgt_line;
231   else
232     RETURN v_ret_code;
233   end if;
234 
235   if (v_ret_code = 'N') then
236     open C_task_in_alloc_txn(p_task_id);
237     fetch C_task_in_alloc_txn into v_ret_code;
238     close C_task_in_alloc_txn;
239   else
240     RETURN v_ret_code;
241   end if;
242 /* Commented for bug 8929749
243   if (v_ret_code = 'N') then
244     open C_task_in_alloc_run_src(p_task_id);
245     fetch C_task_in_alloc_run_src into v_ret_code;
246     close C_task_in_alloc_run_src;
247   else
248     RETURN v_ret_code;
249   end if;
250 */
251   if (v_ret_code = 'N') then
252     open C_task_in_alloc_run_tgt(p_task_id);
253     fetch C_task_in_alloc_run_tgt into v_ret_code;
254     close C_task_in_alloc_run_tgt;
255   else
256     RETURN v_ret_code;
257   end if;
258 
259     RETURN v_ret_code;
260 
261 EXCEPTION
262   WHEN NO_DATA_FOUND THEN
263      v_ret_code := 'N' ;
264      Return v_ret_code ;
265   WHEN OTHERS THEN
266   RAISE;
267 END  is_task_in_allocations;
268 
269 ------------------------------------------------------------------------
270 ---  is_task_lowest_in_allocations
271 ---  This function returns 'Y' if a task is used as target or offset, or if
272 ---- a task is a non top level task and used as source in allocations
273 ------------------------------------------------------------------------
274 -- All target tasks and offset tasks should be lowest level tasks, subtasks are not
275 --allowed to be created for them. For a given task, if it  exists in any target or
276 --offset related table,no subtask is allowed to be created for this task.
277 --Source tasks can be top level tasks or lowest level tasks.For a given task,
278 --if it exists in any source related table and it is not a top level task, no subtask is allowed
279 --to be created for this task.
280 
281 
282 FUNCTION Is_task_lowest_in_allocations(p_task_id IN NUMBER)
283                                            RETURN VARCHAR2
284 IS
285 
286 CURSOR  C_task_in_targets_offsets IS
287  SELECT '1'
288  FROM dual
289  WHERE EXISTS (SELECT '1'
290                FROM  PA_ALLOC_TXN_DETAILS TXN
291                WHERE TXN.task_id=p_task_id)
292       OR EXISTS
293               ( SELECT '1'
294                FROM  PA_ALLOC_RULES_ALL RULES
295                WHERE RULES.offset_task_id=p_task_id)
296       OR EXISTS
297                (SELECT '1'
298                FROM  PA_ALLOC_TARGET_LINES TGTL
299                WHERE TGTL.task_id=p_task_id)
300       OR EXISTS
301                (SELECT '1'
302                FROM PA_ALLOC_RUN_TARGETS RTGT
303                WHERE  RTGT.task_id=p_task_id);
304 
305 CURSOR  C_task_in_sources IS
306  SELECT '1'
307  FROM dual
308  WHERE EXISTS (SELECT '1'
309                FROM  PA_ALLOC_SOURCE_LINES SRCL
310                WHERE SRCL.task_id=p_task_id)
311        OR EXISTS
312               ( SELECT '1'
313                FROM  PA_ALLOC_RUN_SOURCES RSRC
314                WHERE RSRC.task_id=p_task_id);
315 
316 CURSOR C_top_task(p_tsk_id IN NUMBER) IS
317  SELECT top_task_id
318  FROM pa_tasks
319  WHERE task_id=p_tsk_id;
320 
321 
322 v_ret_code varchar2(1) ;
323 v_dummy varchar2(1);
324 v_top_task_id number;
325 
326 
327 BEGIN
328 
329   v_ret_code := 'N';
330   OPEN  C_top_task(p_task_id);
331   FETCH C_top_task INTO v_top_task_id;
332   CLOSE C_top_task;
333 
334   OPEN  C_task_in_targets_offsets;
335   FETCH C_task_in_targets_offsets INTO v_dummy;
336   IF C_task_in_targets_offsets%FOUND THEN
337          v_ret_code := 'Y';
338  END IF;
339 
340   /* Bug# 8834708
341      This check is not required while creating a sub task for a task.
342      Though we have data in alloc run sources, it does not cause any issue
343      unless there is expenditure for the task being passed to this procedure.
344      Since we are checking the existance of expenditure even before calling this
345      API, it is fine to relax this validation and allow creating sub task though
346      the task referred in the sources table.
347   ELSE
348     OPEN  C_task_in_sources;
349     FETCH C_task_in_sources INTO v_dummy;
350     IF C_task_in_sources%FOUND THEN
351     IF (v_top_task_id <> p_task_id) THEN
352            v_ret_code := 'Y';
353        END IF;
354     END IF;
355     CLOSE C_task_in_sources;
356   END IF; */
357   CLOSE  C_task_in_targets_offsets;
358 
359   RETURN v_ret_code;
360 
361 EXCEPTION
362   WHEN NO_DATA_FOUND THEN
363      v_ret_code := 'N' ;
364      RETURN v_ret_code ;
365   WHEN OTHERS THEN
366   RAISE;
367 END  is_task_lowest_in_allocations;
368 
369 
370 
371 ------------------------------------------------------------------------
372 --- Is_Budget_Type_In_allocations
373 ---- This function returns 'Y' if a budget_type is used in allocations
374 ------------------------------------------------------------------------
375 FUNCTION  Is_Budget_Type_In_allocations(p_budget_type_code IN varchar2)
376                                                  RETURN varchar2
377 is
378 CURSOR C_budget_type_in_allocations is
379  SELECT '1'
380  FROM dual
381  WHERE EXISTS (SELECT 'Y'
382                FROM  PA_ALLOC_RULES_ALL
383                WHERE basis_budget_type_code=p_budget_type_code)
384       OR EXISTS
385                (SELECT 'Y'
386                FROM  PA_ALLOC_RUNS_ALL
387                WHERE basis_budget_type_code=p_budget_type_code);
388 
389 v_ret_code varchar2(1) ;
390 v_dummy  varchar2(1);
391 
392 BEGIN
393 
394   v_ret_code := 'N';
395 
396   OPEN  C_budget_type_in_allocations;
397   FETCH C_budget_type_in_allocations INTO v_dummy;
398   IF C_budget_type_in_allocations%FOUND THEN
399      v_ret_code := 'Y' ;
400   END IF;
401   CLOSE C_budget_type_in_allocations;
402   RETURN v_ret_code;
403 
404 EXCEPTION
405   WHEN NO_DATA_FOUND THEN
406      v_ret_code := 'N' ;
407      Return v_ret_code ;
408   WHEN OTHERS THEN
409   RAISE;
410 end Is_Budget_Type_In_allocations;
411 
412 /*
413 ------------------------------------------------------------------------
414 --- Is_Bem_In_allocations
415 ---- This function returns 'Y' if a budget entry method is used in allocations
416 ------------------------------------------------------------------------
417 FUNCTION  Is_Bem_In_allocations(p_bem_code IN varchar2)
418                                                  RETURN varchar2
419 is
420 
421  CURSOR C_Bem_in_allocations is
422  SELECT '1'
423  FROM dual
424  WHERE EXISTS (SELECT 'Y'
425                FROM  PA_ALLOC_RULES_ALL
426                WHERE basis_budget_entry_method_code=p_bem_code)
427       OR EXISTS
428                (SELECT 'Y'
429                FROM  PA_ALLOC_RUNS_ALL
430                WHERE basis_budget_entry_method_code=p_bem_code);
431 
432 v_ret_code varchar2(1) ;
433 v_dummy  varchar2(1);
434 
435 BEGIN
436 
437   v_ret_code := 'N';
438 
439   open C_Bem_in_allocations;
440   FETCH C_Bem_in_allocations into v_dummy;
441   IF C_Bem_in_allocations%FOUND THEN
442      v_ret_code := 'Y' ;
443   END IF;
444   CLOSE C_Bem_in_allocations;
445   RETURN v_ret_code;
446 
447 EXCEPTION
448   WHEN NO_DATA_FOUND THEN
449      v_ret_code := 'N' ;
450      Return v_ret_code ;
451   WHEN OTHERS THEN
452   RAISE;
453 end Is_Bem_In_allocations;*/
454 
455 
456 /*
457  API Name : Is_RBS_In_Rules
458  API Desc : Return 'Y' if RBS is used in Allocations.
459  API Created Date : 19-Mar-04
460  API Created By : Vthakkar
461 */
462 FUNCTION Is_RBS_In_Rules ( P_RBS_ID IN pa_rbs_headers_v.RBS_HEADER_ID%Type ) RETURN VARCHAR2
463 IS
464 	l_exists Varchar2(1) := 'N';
465 BEGIN
466 	/* Checking PA_ALLOC_RULES_ALL */
467 	Begin
468 		Select 'Y' into l_exists
469 		  from pa_alloc_rules_all /* Bug 4185336 Changed from pa_alloc_rules to pa_alloc_rules_all */
470 		 where
471 			  (
472 				(	ALLOC_RESOURCE_STRUCT_TYPE  = 'RBS'
473 					and
474 					Alloc_resource_list_id = P_RBS_ID
475 				)
476 				or
477 				(
478 					BASIS_RESOURCE_STRUCT_TYPE  = 'RBS'
479 					and
480 					BASIS_resource_list_id = P_RBS_ID
481 				)
482 			  )
483 		   and rownum = 1;
484 		   Return l_exists ;
485 	Exception
486 		When No_Data_Found Then
487 			l_exists := 'N';
488 	End;
489 	/* Checking PA_ALLOC_RUNS_ALL */
490 	Begin
491 		Select 'Y' into l_exists
492 		  from pa_alloc_runs_all  /* Bug 4185336 Changed from pa_alloc_rules to pa_alloc_rules_all */
493 		 where (
494 				(	ALLOC_RESOURCE_STRUCT_TYPE  = 'RBS'
495 					and
496 					Alloc_resource_list_id = P_RBS_ID
497 				)
498 				or
499 				(
500 					BASIS_RESOURCE_STRUCT_TYPE  = 'RBS'
501 					and
502 					BASIS_resource_list_id = P_RBS_ID
503 				)
504 			  )
505 		   and rownum = 1;
506 		   Return l_exists ;
507 	Exception
508 		When No_Data_Found Then
509 			l_exists := 'N';
510 	End;
511 	Return l_exists;
512 END Is_RBS_In_Rules ;
513 /*
514  API Name : Is_RBS_In_Rules
515 
516  API Desc : Return 'Y' if RBS Element is used in Allocations.
517  API Created Date : 19-Mar-04
518  API Created By : Vthakkar
519 */
520 FUNCTION Is_RBS_Element_In_Rules ( P_RBS_ELEMENT_ID IN pa_rbs_elements.RBS_ELEMENT_ID%type ) RETURN
521 VARCHAR2
522 
523 IS
524 	l_exists Varchar2(1) := 'N';
525 BEGIN
526 	Begin
527 		Select 'Y' into l_exists
528 		  From PA_ALLOC_RULES_ALL par, PA_ALLOC_RESOURCES pr
529 		 Where par.rule_id = pr.rule_id
530 		   and pr.RESOURCE_LIST_MEMBER_ID = P_RBS_ELEMENT_ID
531 		   and decode (pr.member_type , 'S' , par.ALLOC_RESOURCE_STRUCT_TYPE  ,
532 										'B' , par.BASIS_RESOURCE_STRUCT_TYPE
533 					  ) = 'RBS'
534 		   and rownum = 1;
535 		   Return l_exists ;
536 	Exception
537 		When No_Data_Found Then
538 			l_exists := 'N';
539 
540 	End;
541 	Begin
542 		Select 'Y' into l_exists
543 		  From pa_alloc_runs_all par, PA_ALLOC_RUN_SOURCE_DET pars
544 		 Where par.run_id = pars.run_id
545 		   and par.rule_id = pars.rule_id
546 		   and RESOURCE_LIST_MEMBER_ID = P_RBS_ELEMENT_ID
547 		   and par.ALLOC_RESOURCE_STRUCT_TYPE  = 'RBS'
548 		   and rownum = 1;
549 		   Return l_exists ;
550 	Exception
551 		When No_Data_Found Then
552 			l_exists := 'N';
553 	End;
554 	Begin
555 		Select 'Y' into l_exists
556 		  From pa_alloc_runs_all par, PA_ALLOC_RUN_BASIS_DET pars
557 		 Where par.run_id = pars.run_id
558 		   and par.rule_id = pars.rule_id
559 		   and RESOURCE_LIST_MEMBER_ID = P_RBS_ELEMENT_ID
560 		   and par.BASIS_RESOURCE_STRUCT_TYPE  = 'RBS'
561 		   and rownum = 1;
562 		   Return l_exists ;
563 
564 	Exception
565 		When No_Data_Found Then
566 			l_exists := 'N';
567 	End;
568 	Return l_exists ;
569 END Is_RBS_Element_In_Rules;
570 /*
571  API Name : Resource_Name
572  API Desc : This function will be return the name of the resource id depending upon the Allocation T
573 ype and
574 
575 			If Resource ID is member of Resource List or RBS Structure.
576  API Created Date : 19-Mar-04
577  API Created By : Vthakkar
578 */
579 Function Resource_Name (
580 						p_alloc_type    IN	 Varchar2 ,
581 						p_resource_id	IN   pa_rbs_elements.RBS_ELEMENT_ID%type   ,
582 						p_rule_id		IN   pa_alloc_rules.rule_id%type
583 					   ) Return Varchar2
584 IS
585 	l_source_res_struct_type	pa_alloc_rules_all.ALLOC_RESOURCE_STRUCT_TYPE%type;
586 	l_basis_res_struct_type		pa_alloc_rules_all.BASIS_RESOURCE_STRUCT_TYPE%type;
587 
588 	x_name						varchar2(4000);
589 BEGIN
590 	If p_resource_id Is Null Then
591 		Return Null;
592 	End If;
593 	Select ALLOC_RESOURCE_STRUCT_TYPE ,
594 		   BASIS_RESOURCE_STRUCT_TYPE
595 	  Into l_source_res_struct_type ,
596 	 	   l_basis_res_struct_type
597       From pa_alloc_rules_all
598 	 Where Rule_ID = p_Rule_Id;
599 	If p_alloc_type In ('SOURCE' , 'S') Then
600 		If l_source_res_struct_type  = 'RL' Then
601 			select prlm.alias
602 			  Into X_name
603 		 	  from pa_resource_list_members prlm
604 		   	 where prlm.resource_list_member_id = p_resource_id;
605 		Elsif l_source_res_struct_type  = 'RBS' Then
606 			Select pa_alloc_utils.Get_Resource_Name_TL (RBS_ELEMENT_NAME_ID)
607 			  Into X_name
608 			  From pa_rbs_elements
609 		 	 Where rbs_element_id = p_resource_id
610 			   And rownum = 1;
611 
612 		End If;
613 	ElsIf p_alloc_type In ('BASIS', 'B' ) Then
614 		If l_basis_res_struct_type  = 'RL' Then
615 			select prlm.alias
616 			  Into X_name
617 		 	  from pa_resource_list_members prlm
618 		   	 where prlm.resource_list_member_id = p_resource_id;
619 		Elsif l_basis_res_struct_type  = 'RBS' Then
620 			select pa_alloc_utils.Get_Resource_Name_TL (RBS_ELEMENT_NAME_ID)
621 			  Into X_name
622 			  from pa_rbs_elements
623 		 	 where rbs_element_id = p_resource_id
624 			   and rownum = 1;
625 		End If;
626 	End If;
627 	Return X_name;
628 END Resource_Name ;
629 /*
630  API Name : ASSOCIATE_RBS_TO_ALLOC_RULE
631  API Desc : This procedure will be update the new element id to the allocation rules's source resource list member's id
632 			and basis resource list member's id when new version of RBS is created
633  API Created Date : 02-Apr-04
634  API Created By : Vthakkar
635 
636  History :
637 
638 	07-JAN-2005 VTHAKKAR Changed the API for bug 4107924
639 
640 */
641 Procedure ASSOCIATE_RBS_TO_ALLOC_RULE (
642 										p_rbs_header_id		IN NUMBER    ,
643 										p_rbs_version_id	IN NUMBER	 ,
644 										x_return_status     OUT NOCOPY VARCHAR2 ,
645 										x_error_code        OUT NOCOPY VARCHAR2
646 									  )
647 IS
648 	CURSOR LV_ALLOC_CUR IS SELECT * FROM PA_ALLOC_RULES_ALL
649 	                        WHERE alloc_resource_list_id = p_rbs_header_id
650 							   OR basis_resource_list_id = p_rbs_header_id;
651 BEGIN
652 
653 	x_return_status := FND_API.G_RET_STS_SUCCESS;
654 
655 	/* Changed the API for Bug 4107924 */
656 	FOR ALLOC_CUR IN LV_ALLOC_CUR
657 	LOOP
658 
659 		/* Source Update */
660 
661 		IF NVL(ALLOC_CUR.alloc_resource_struct_type,'RL') = 'RBS' and ALLOC_CUR.alloc_resource_list_id = p_rbs_header_id
662 		   and NVL(ALLOC_CUR.ALLOC_RBS_VERSION,0) < p_rbs_version_id Then
663 
664 			Update pa_alloc_rules_all
665 			   Set alloc_rbs_version = p_rbs_version_id
666 			 Where RULE_ID = ALLOC_CUR.RULE_ID;
667 
668 			Update pa_alloc_resources ARS
669 			   Set resource_list_member_id = (
670 											select new.rbs_element_id
671 											  from pa_rbs_elements new
672 												  ,pa_rbs_elements old
673 											 where new.element_identifier = old.element_identifier
674 											   and old.rbs_version_Id     = ALLOC_CUR.alloc_rbs_version
675 											   and new.rbs_version_Id     = p_rbs_version_id
676 											   and old.rbs_element_id     = ars.resource_list_member_id
677 											   and new.user_created_flag = 'N'
678 										  )
679 			 Where ARS.RULE_ID = ALLOC_CUR.RULE_ID
680 			   AND ARS.MEMBER_TYPE = 'S';
681 
682 
683 		END IF;
684 
685 		/* Basis Update */
686 
687 		IF NVL(ALLOC_CUR.basis_resource_struct_type,'RL') = 'RBS' and ALLOC_CUR.basis_resource_list_id = p_rbs_header_id
688 		   and NVL(ALLOC_CUR.BASIS_RBS_VERSION,0) < p_rbs_version_id Then
689 
690 			Update pa_alloc_rules_all
691 			   Set basis_rbs_version = p_rbs_version_id
692 			 Where RULE_ID = ALLOC_CUR.RULE_ID;
693 
694 			Update pa_alloc_resources ARS
695 			   Set resource_list_member_id = (
696 										select new.rbs_element_id
697 										  from pa_rbs_elements new
698 											  ,pa_rbs_elements old
699 					                     where new.element_identifier = old.element_identifier
700 									       and old.rbs_version_Id     = ALLOC_CUR.basis_rbs_version
701 										   and new.rbs_version_Id     = p_rbs_version_id
702 	                                       and old.rbs_element_id     = ars.resource_list_member_id
703 										   and new.user_created_flag = 'N'
704 									  )
705 			  Where ARS.RULE_ID = ALLOC_CUR.RULE_ID
706 			    AND ARS.MEMBER_TYPE = 'B';
707 
708 		END IF;
709 
710 	END LOOP;
711 
712 	/* Commenting out the code for bug 4107924
713 	Update pa_alloc_resources ARS
714 	   Set resource_list_member_id = (
715 									 select new.rbs_element_id
716 		                               from pa_rbs_elements new
717 			                               ,pa_rbs_elements old
718 				                           ,pa_alloc_rules_all ar
719 					                  where ar.alloc_resource_list_id = p_rbs_header_id
720 						                and decode ( ars.member_type ,
721 														'S' , nvl(ar.alloc_resource_struct_type,'RL') ,
722 														'B' , nvl(ar.basis_resource_struct_type,'RL')
723 													) = 'RBS'
724 							            and ar.rule_id = ars.rule_id
725 									    and new.element_identifier = old.element_identifier
726 									    and old.rbs_version_Id     = ar.alloc_rbs_version
727 										and new.rbs_version_Id     = p_rbs_version_id
728 	                                    and old.rbs_element_id     = ars.resource_list_member_id
729 									  )
730 	  Where Exists (
731 					 select 1
732 					   From pa_alloc_rules_all arl
733 					  Where arl.Rule_Id = Ars.Rule_Id
734 						ANd decode ( ars.member_type ,
735 										'S' , nvl(arl.alloc_resource_struct_type,'RL') ,
736 										'B' , nvl(arl.basis_resource_struct_type,'RL')
737 								   ) = 'RBS'
738 				   );
739 	Update pa_alloc_rules_all
740 	   Set alloc_rbs_version = p_rbs_version_id
741 	 Where nvl(alloc_resource_struct_type,'RL') = 'RBS'
742 	   And alloc_resource_list_id = p_rbs_header_id;
743 	Update pa_alloc_rules_all
744 	   Set basis_rbs_version = p_rbs_version_id
745 	 Where nvl(basis_resource_struct_type,'RL') = 'RBS'
746 	   And basis_resource_list_id = p_rbs_header_id;
747 
748 	 End of commeting code for bug 4107924
749 
750 	*/
751 
752 EXCEPTION
753  WHEN OTHERS THEN
754     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
755     x_error_code := to_char(sqlcode);
756 END ASSOCIATE_RBS_TO_ALLOC_RULE;
757 /*
758  API Name : RESOURCE_LIST_NAME
759  API Desc : This function will return name of Resource List or Resource Breakdown Structure Header N
760 ame depending Upon
761 
762 			Rule contains Resource List or Resource Structure.
763  API Created Date : 06-Apr-04
764  API Created By : Vthakkar
765 */
766 Function RESOURCE_LIST_NAME (
767 							 p_resource_list_id In Number ,
768 							 p_resource_struct_type in Varchar2
769 						    ) Return Varchar2
770 Is
771 	X_Resource_List_Name Varchar2(4000);
772 Begin
773 		If Nvl(p_Resource_Struct_Type,'RL') = 'RL' Then
774 			Select Name
775 
776 			  Into X_Resource_List_Name
777  			  From pa_resource_lists_v
778 			 Where RESOURCE_LIST_ID = p_resource_list_id;
779 		Elsif Nvl(p_Resource_Struct_Type,'RL') = 'RBS' Then
780 			Select Name
781 			  Into X_Resource_List_Name
782  			  From pa_rbs_headers_v
783 			 Where RBS_HEADER_ID = p_resource_list_id;
784 		End If;
785 		Return X_Resource_List_Name;
786 Exception
787 	When Others Then
788 		Return Null;
789 End;
790 /*
791  API Name : GET_CONCATENATED_NAME
792  API Desc : This function will return name of Resource List Member attached with parent member name
793 like e.g self.parent
794 
795  API Created Date : 03-May-04
796  API Created By : Vthakkar
797 */
798 Function GET_CONCATENATED_NAME (p_resource_id in Number , p_struct_type in Varchar2 ) Return
799 
800 Varchar2 Is
801 	X_Resource_Name		Varchar2(10000);
802 	l_self_name			pa_resource_list_members.alias%type;
803 	l_parent_name		pa_resource_list_members.alias%type;
804 	l_element_name Varchar2(240);
805     l_count        Number;
806 	Cursor C_Member_Name
807 	  Is Select slf.alias , prt.alias
808 	  from pa_resource_list_members slf , pa_resource_list_members prt
809 	 Where prt.resource_list_member_id (+) = slf.parent_member_id
810 	   and slf.resource_list_member_id     = p_resource_id;
811    Cursor c_element_name
812 	   IS SELECT pa_alloc_utils.Get_Resource_Name_TL(ele.rbs_element_name_id) Resource_Name
813 	        FROM pa_rbs_elements ele
814 	     CONNECT BY PRIOR ele.parent_element_id = ele.rbs_element_id
815 		   START WITH ele.rbs_element_id = p_resource_id
816 		   ORDER BY ele.rbs_level DESC;
817 Begin
818 	If p_resource_id is Null Then
819 		Return Null;
820 	End If;
821 	If p_struct_type = 'RL' Then
822 		Open C_Member_Name;
823 
824 		Fetch C_Member_Name into l_self_name , l_parent_name;
825 		If C_Member_Name%Found Then
826 			X_Resource_Name := l_self_name;
827 			If l_parent_name Is Not Null Then
828 				X_Resource_Name := X_Resource_Name  || '.' || l_parent_name;
829 			End If;
830 		End If;
831 		Close C_Member_Name;
832 	ElsIf p_struct_type = 'RBS' Then
833 		OPEN c_element_name;
834 		   LOOP
835 		       FETCH c_element_name INTO l_element_name;
836 			   EXIT WHEN c_element_name%NOTFOUND;
837 		       l_count := c_element_name%ROWCOUNT;
838 		       /*********************************************
839 			       * If Count is 1 just assing the l_element_name to the
840 			       * X_Resource_Name.
841 		       ***************************************************/
842 		       IF l_count = 1 THEN
843 				    X_Resource_Name := l_element_name;
844 		       ELSE
845 		       /*********************************************
846 			       * If Count > 1 just assing the l_element_name to the
847 
848 			       * X_Resource_Name.
849 		       ***************************************************/
850 					X_Resource_Name := X_Resource_Name ||'.'|| l_element_name;
851 		       END IF;
852 		    END LOOP;
853 		CLOSE c_element_name;
854 	End If;
855 	Return X_Resource_Name;
856 Exception
857 	When Others Then
858 		Return Null;
859 End GET_CONCATENATED_NAME;
860 /*
861  API Name : Get_Rbs_Version_Name
862  API Desc : This function will return name of RBS Version Name provided rbs_version_id
863  API Created Date : 11-May-2004
864  API Created By : Vthakkar
865 */
866 Function Get_Rbs_Version_Name (p_rbs_ver_id in Number) Return Varchar2
867 Is
868 	X_Rbs_Ver_Name pa_rbs_versions_v.NAME%TYPE;
869 Begin
870 	If p_rbs_ver_id Is Null Then
871 
872 		Return Null;
873 	End If;
874 	Select Name
875 	  Into X_Rbs_Ver_Name
876 	  From pa_rbs_versions_v
877 	 Where Rbs_Version_Id = P_Rbs_Ver_Id;
878 	Return (X_Rbs_Ver_Name);
879 Exception
880 	When Others Then
881 		Return Null;
882 End Get_Rbs_Version_Name ;
883 /*
884  API Name : Get_Resource_Name_TL
885  API Desc : This function will return name of RBS Name translated in the respective language
886  API Created Date : 13-May-2004
887  API Created By : Vthakkar
888 */
889 Function Get_Resource_Name_TL ( p_rbs_element_name_id in Number ) Return Varchar2
890 Is
891 	x_resource_name Varchar2(240);
892 Begin
893 	If p_rbs_element_name_id  Is Null Then
894 		Return Null;
895 
896 	End If;
897 	Select resource_name
898 	  Into x_resource_name
899 	  From pa_rbs_element_names_tl
900 	 Where rbs_element_name_id = p_rbs_element_name_id
901 	   and language = USERENV('LANG'); /* Added for bug 3960634 */
902 	Return x_resource_name;
903 Exception
904 	When Others Then
905   	   Return Null;
906 End Get_Resource_Name_TL;
907 
908 
909 END pa_alloc_utils ;