DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_ALLOC_UTILS

Source


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