DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_WORK_TYPE_UTILS

Source


1 PACKAGE BODY PA_WORK_TYPE_UTILS AS
2 /* $Header: PARWUTLB.pls 120.2 2005/11/03 04:00:51 sunkalya noship $ */
3 
4 -- ----------------------------------------------------------------------------
5 --  PROCEDURE
6 --              Check_Work_Type_Name_or_ID
7 --  PURPOSE
8 --              This procedure does the following
9 --              If work type name is passed converts it to the id
10 --              If id is passed, based on the check_id_flag validates it
11 --  HISTORY
12 --   19-Jul-2000      nchouhan  Created
13 -- ----------------------------------------------------------------------------
14 procedure Check_Work_Type_Name_or_ID
15       ( p_work_type_id       IN  pa_work_types_v.work_type_id%TYPE
16        ,p_name               IN  pa_work_types_v.name%TYPE
17        ,p_check_id_flag      IN  VARCHAR2
18        ,x_work_type_id       OUT NOCOPY pa_work_types_v.work_type_id%TYPE
19        ,x_return_status      OUT NOCOPY VARCHAR2
20        ,x_error_message_code OUT NOCOPY VARCHAR2)
21 IS
22 BEGIN
23    -- Set the error stack
24    pa_debug.set_err_stack('PA_WORK_TYPE_UTILS.Check_Work_Type_Name_or_ID');
25 
26    IF p_work_type_id IS NOT NULL THEN
27        -- Validate ID based on the check id flag
28        IF p_check_id_flag = 'Y' THEN
29            SELECT work_type_id
30            INTO   x_work_type_id
31            FROM   pa_work_types_b --pa_work_types_v changed pa_work_types_v to pa_work_types_b for performance issues. Refer Bug:4668829
32            WHERE  work_type_id = p_work_type_id
33              AND TRUNC(SYSDATE) BETWEEN start_date_active
34                                     AND NVL(end_date_active,TRUNC(SYSDATE));
35         ELSE
36             x_work_type_id := p_work_type_id;
37         END IF;
38    ELSE
39         -- Validate Name
40         SELECT work_type_id
41         INTO   x_work_type_id
42         FROM   pa_work_types_v
43         WHERE  name = p_name
44           AND TRUNC(SYSDATE) BETWEEN start_date_active
45                                  AND NVL(end_date_active,TRUNC(SYSDATE));
46    END IF;
47 
48    x_return_status := FND_API.G_RET_STS_SUCCESS;
49    pa_debug.reset_err_stack; -- Reset error stack
50 
51 EXCEPTION
52    WHEN NO_DATA_FOUND THEN
53        x_return_status := FND_API.G_RET_STS_ERROR;
54        x_error_message_code := 'PA_WORK_TYPE_INVALID_AMBIGOUS';
55        x_work_type_id := Null;
56        pa_debug.reset_err_stack; -- Reset error stack
57 
58    WHEN TOO_MANY_ROWS THEN
59        x_return_status := FND_API.G_RET_STS_ERROR;
60        x_error_message_code := 'PA_WORK_TYPE_INVALID_AMBIGOUS';
61        x_work_type_id := Null;
62        pa_debug.reset_err_stack; -- Reset error stack
63 
64    WHEN OTHERS THEN
65        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
66        x_error_message_code := Null;
67        x_work_type_id := Null;
68        Raise;
69 
70 END Check_Work_Type_Name_or_ID;
71 
72 -- ----------------------------------------------------------------------------
73 --  PROCEDURE
74 --              Check_Work_Type
75 --  PURPOSE
76 --              This procedure does the following
77 --               It checks the work_type :
78 --               If Project is Indirect project then
79 --               only non-billable work-types can be assigned to it.
80 --               If Project is not Indirect project then
81 --               all work types are O.K.
82 --
83 --  HISTORY
84 --   28-Nov-2000      nmishra  Created
85 --
86 -- ----------------------------------------------------------------------------
87 --
88 procedure Check_Work_Type
89       ( p_work_type_id       IN  pa_work_types_v.work_type_id%TYPE
90        ,p_project_id         IN  pa_projects.project_id%TYPE
91        ,p_task_id            IN  pa_tasks.task_id%TYPE
92        ,x_return_status      OUT NOCOPY VARCHAR2
93        ,x_error_message_code OUT NOCOPY VARCHAR2)
94 IS
95 BEGIN
96  DECLARE
97  l_proj_typ_class_code 	pa_project_types.project_type_class_code%TYPE;
98  l_project_id  pa_projects.project_id%TYPE;
99  l_project_type pa_project_types.project_type%TYPE;
100  l_flag	 varchar2(1);
101  CURSOR Get_Project_type_class_cur IS
102  SELECT p.project_type_class_code
103  FROM pa_project_types p
104  WHERE p.project_type = l_project_type;
105  CURSOR Get_Project_type IS
106  SELECT a.project_type
107  FROM pa_projects a
108  WHERE a.project_id = l_project_id;
109  CURSOR Get_Project_id IS
110  SELECT t.project_id
111  FROM pa_tasks t
112  WHERE t.task_id = p_task_id;
113  CURSOR work_type_cur IS
114  SELECT  w.BILLABLE_CAPITALIZABLE_FLAG
115  FROM pa_work_types_b w  -- changed pa_work_types_v to pa_work_types_b for performance issue. Refer Bug: 4668829
116  WHERE w.work_type_id = p_work_type_id;
117 
118  l_proj_type_rec  Get_Project_type_class_cur%ROWTYPE;
119  l_proj_rec Get_Project_type%ROWTYPE;
120  l_proj_task_rec  Get_Project_id%ROWTYPE;
121  l_work_type_rec work_type_cur%ROWTYPE;
122  BEGIN
123    -- Set the error stack
124 --   pa_debug.set_err_stack('PA_WORK_TYPE_UTILS.Check_Work_Type_Name_or_ID');
125    IF p_work_type_id IS NOT NULL THEN
126    IF (p_project_id IS NOT NULL AND p_task_id IS NULL)
127 	  OR (p_project_id IS NOT NULL  AND p_task_id IS NOT NULL)  THEN
128 		l_project_id := p_project_id;
129 		OPEN Get_Project_type;
130 		LOOP
131 		FETCH Get_Project_type INTO l_proj_rec	;
132 		IF Get_Project_type%NOTFOUND THEN
133    		  EXIT;
134    		ELSE
135 		 l_project_type := l_proj_rec.project_type;
136 		 OPEN Get_Project_type_class_cur;
137 		 LOOP
138 		 FETCH Get_Project_type_class_cur INTO l_proj_type_rec;
139 		  IF Get_Project_type_class_cur%NOTFOUND THEN
140 		  EXIT;
141 		  ELSE
142 		   l_proj_typ_class_code:= l_proj_type_rec.project_type_class_code;
143 		  END IF;
144 		  END LOOP;
145 		  CLOSE Get_Project_type_class_cur;
146 		END IF;
147 		END LOOP;
148 		CLOSE Get_Project_type;
149    ELSIF (p_project_id IS NULL AND p_task_id IS NOT NULL) THEN
150 		OPEN Get_Project_id;
151 		LOOP
152 		FETCH Get_Project_id INTO l_proj_task_rec;
153 		IF Get_Project_id%NOTFOUND THEN
154    		  EXIT;
155    		ELSE
156 			l_project_id := l_proj_task_rec.project_id;
157 			OPEN Get_Project_type;
158 			LOOP
159 			FETCH Get_Project_type INTO l_proj_rec;
160 			IF Get_Project_type%NOTFOUND THEN
161    			  EXIT;
162    			ELSE
163 				l_project_type:= l_proj_rec.project_type;
164 				OPEN Get_Project_type_class_cur;
165 				LOOP
166 				FETCH Get_Project_type_class_cur INTO l_proj_type_rec;
167 				IF Get_Project_type_class_cur%NOTFOUND THEN
168 					EXIT;
169 				ELSE
170 				l_proj_typ_class_code:= l_proj_type_rec.project_type_class_code;
171 				END IF;
172 				END LOOP;
173 				CLOSE Get_Project_type_class_cur;
174 			END IF;
175 		END LOOP;
176 		CLOSE Get_Project_type;
177 		END IF;
178 		END LOOP;
179 		CLOSE Get_Project_id;
180 	END IF;
181 	OPEN work_type_cur;
182 	LOOP
183 	FETCH work_type_cur INTO l_work_type_rec;
184 	IF work_type_cur%NOTFOUND THEN
185 		EXIT;
186 	ELSE
187 		l_flag := l_work_type_rec.BILLABLE_CAPITALIZABLE_FLAG;
188 	END IF;
189 	END LOOP;
190 	CLOSE work_type_cur;
191 
192 IF  l_proj_typ_class_code = 'INDIRECT'
193     THEN
194          IF l_flag = 'Y' THEN
195          	x_return_status := FND_API.G_RET_STS_ERROR;
196 		x_error_message_code := 'PA_WORK_TYPE_INVALID';
197          END IF;
198 END IF;
199 ELSE
200 	x_return_status := FND_API.G_RET_STS_ERROR;
201 	x_error_message_code := 'PA_WORK_TYPE_INVALID';
202 END IF;
203 
204    x_return_status := FND_API.G_RET_STS_SUCCESS;
205    pa_debug.reset_err_stack; -- Reset error stack
206 
207 
208 EXCEPTION
209    WHEN NO_DATA_FOUND THEN
210        x_return_status := FND_API.G_RET_STS_ERROR;
211        x_error_message_code := 'PA_WORK_TYPE_INVALID';
212        pa_debug.reset_err_stack; -- Reset error stack
213 
214    WHEN TOO_MANY_ROWS THEN
215        x_return_status := FND_API.G_RET_STS_ERROR;
216        x_error_message_code := 'PA_WORK_TYPE_INVALID';
217        pa_debug.reset_err_stack; -- Reset error stack
218 
219    WHEN OTHERS THEN
220        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
221        x_error_message_code := Null;
222        Raise;
223 END;
224 END Check_Work_Type;
225 END PA_WORK_TYPE_UTILS ;