DBA Data[Home] [Help]

PACKAGE BODY: APPS.GR_TECHNICAL_PARAMETERS

Source


1 PACKAGE BODY GR_TECHNICAL_PARAMETERS AS
2 /*$Header: GRPTECHB.pls 120.3 2005/11/16 12:09:10 pbamb noship $*/
3 
4 PROCEDURE Get_Tech_Parm_Data
5 				(p_commit IN VARCHAR2,
6 				 p_api_version IN NUMBER,
7 				 p_organization_id IN NUMBER,
8 				 p_property_id IN VARCHAR2,
9 				 p_inventory_item_id IN NUMBER,
10 				 p_label_code IN VARCHAR2,
11 				 x_value OUT NOCOPY VARCHAR2,
12 				 x_return_status OUT NOCOPY VARCHAR2,
13 				 x_msg_data OUT  NOCOPY VARCHAR2)
14 	IS
15 /* Alpha Variables */
16 L_API_NAME			CONSTANT VARCHAR2(30) := 'Get Tech Parm Data';
17 L_TEXT_DATA			VARCHAR2(80);
18 L_UNIT_CODE			VARCHAR2(4);
19 L_RETURN_STATUS			VARCHAR2(1) := 'S';
20 L_MSG_DATA			VARCHAR2(2000);
21 L_VALUE				VARCHAR2(240);
22 L_CHECK_FOR_VALUE		VARCHAR2(3);
23 L_TECH_PARM			VARCHAR2(1);
24 L_ORGN_CODE			VARCHAR2(4) := FND_PROFILE.Value('GEMMS_DEFAULT_ORGN');
25 
26 /*   Numeric Variables */
27 L_API_VERSION	  		CONSTANT NUMBER := 1.0;
28 L_ORACLE_ERROR	  		NUMBER;
29 L_BOOLEAN_DATA			NUMBER(5);
30 L_NUM_DATA			NUMBER;
31 L_QCASSY_TYP_ID			NUMBER(15);
32 L_MSG_COUNT			NUMBER;
33 L_ITEM_ID			NUMBER;
34 
35 /*   Exceptions */
36 NO_TECH_PARM_FOUND		EXCEPTION;
37 INCOMPATIBLE_API_VERSION_ERROR	EXCEPTION;
38 
39 /* Declare cursors */
40 
41 CURSOR Cur_get_description IS
42 	SELECT	label_description
43 	FROM	gr_labels_tl
44 	WHERE	label_code = p_label_code
45 	AND   	language   = userenv('LANG');
46 X_desc		Cur_get_description%ROWTYPE;
47 
48 CURSOR c_get_lab_techparm IS
49 	SELECT	data_type, qcassy_typ_id, lm_unit_code, lowerbound_num,
50 		upperbound_num, lowerbound_char, upperbound_char, organization_id, tech_parm_id
51 	FROM 	lm_tech_hdr
52 	WHERE	organization_id = p_organization_id
53 	AND	tech_parm_name = X_desc.label_description;
54 LocalLabRecord		c_get_lab_techparm%ROWTYPE;
55 
56         --<Bug 4724991 consider global technical parameters>
57 CURSOR c_get_lab_techparm_global IS
58         SELECT 	data_type, qcassy_typ_id, lm_unit_code, lowerbound_num,
59 		upperbound_num, lowerbound_char, upperbound_char, organization_id, tech_parm_id
60 	FROM	lm_tech_hdr
61 	WHERE	organization_id  IS NULL
62 	AND	tech_parm_name = X_desc.label_description;
63 
64 /*  B2564522 Changed the cursor to incorporatethe QM changes*/
65 CURSOR c_get_specs IS
66 	SELECT	b.min_value_num, b.max_value_num, b.target_value_num, b.target_value_char, q.test_unit
67 	FROM 	gmd_spec_tests_b b, gmd_inventory_spec_vrs v, gmd_specifications_b s, gmd_qc_tests_b q
68     WHERE	b.test_id = LocalLabRecord.qcassy_typ_id
69 	AND 	s.inventory_item_id = p_inventory_item_id
70     AND  	b.spec_id = v.spec_id
71     AND  	s.spec_id = b.spec_id
72     AND	    q.test_id = b.test_id
73 	AND	   (v.organization_id = p_organization_id OR v.organization_id IS NULL)
74 	AND	   v.lot_number IS NULL
75 	AND	   v.subinventory IS NULL;
76 LocalSpecsRecord		c_get_specs%ROWTYPE;
77 
78 
79 CURSOR Cur_get_num(p_TECH_PARM_ID NUMBER) IS
80 	SELECT 	num_data
81 	FROM	lm_item_dat
82 	WHERE	organization_id = p_organization_id
83 	AND	tech_parm_name = X_desc.label_description
84 	AND	inventory_item_id = p_inventory_item_id
85         AND tech_parm_id = p_TECH_PARM_ID;
86 X_num_data		Cur_get_num%ROWTYPE;
87 
88 CURSOR Cur_get_text(p_TECH_PARM_ID NUMBER) IS
89 	SELECT	text_data
90 	FROM 	lm_item_dat
91  	WHERE	organization_id = p_organization_id
92 	AND	tech_parm_name = X_desc.label_description
93 	AND	inventory_item_id = p_inventory_item_id
94         AND tech_parm_id = p_TECH_PARM_ID;
95 X_text_data		Cur_get_text%ROWTYPE;
96 
97 CURSOR Cur_get_boolean(p_TECH_PARM_ID NUMBER) IS
98 	SELECT	boolean_data
99 	FROM	lm_item_dat
100  	WHERE	organization_id = p_organization_id
101 	AND	tech_parm_name = X_desc.label_description
102 	AND	inventory_item_id = p_inventory_item_id
103         AND tech_parm_id = p_TECH_PARM_ID;
104 X_boolean_data	Cur_get_boolean%ROWTYPE;
105 
106 CURSOR Cur_get_techparm IS
107 	SELECT 	tech_parm
108 	FROM	gr_labels_b
109 	WHERE	label_code = p_label_code;
110 LocalTechParmRecord	Cur_get_techparm%ROWTYPE;
111 
112 BEGIN
113 
114 /*     	Initialization Routine */
115 
116    SAVEPOINT Get_Tech_Parm_Data;
117    x_msg_data := NULL;
118 
119 /*	Now call the check API versions procedure */
120 
121    IF NOT FND_API.Compatible_API_Call
122 			     		(l_api_version,
123 			      		 p_api_version,
124 			      		 l_api_name,
125 			      		 g_pkg_name) THEN
126       RAISE Incompatible_API_version_error;
127    END IF;
128 
129 /*
130 **		Set return status to successful
131 */
132    x_return_status := FND_API.G_RET_STS_SUCCESS;
133 
134    l_check_for_value := 'YES';
135 
136 	OPEN Cur_get_description;
137 	FETCH Cur_get_description INTO X_desc;
138 
139 	IF Cur_get_description%NOTFOUND THEN
140             	RAISE No_Tech_Parm_Found;
141 	END IF;
142 
143    OPEN c_get_lab_techparm;
144    FETCH c_get_lab_techparm INTO LocalLabRecord;
145    IF c_get_lab_techparm%FOUND THEN
146 	  WHILE c_get_lab_techparm%FOUND LOOP
147 
148 	/* If we are looking at a numeric value */
149 	    IF (c_get_lab_techparm%FOUND and LocalLabRecord.data_type NOT IN (0,2,3,4)) THEN
150 	/* If it is not a QC assay */
151 		IF LocalLabRecord.qcassy_typ_id IS NULL THEN
152 		 IF p_property_id = 'LOW' THEN
153 			l_value := TO_CHAR(LocalLabRecord.lowerbound_num);
154 		   ELSIF p_property_id = 'HIGH' THEN
155 			l_value := TO_CHAR(LocalLabRecord.upperbound_num);
156 		   ELSIF p_property_id = 'VALUE' and l_check_for_value = 'YES' THEN
157 			OPEN Cur_get_num(LocalLabRecord.tech_parm_id);
158 			FETCH Cur_get_num INTO X_num_data;
159 			IF Cur_get_num%FOUND THEN
160 			 	l_value := TO_CHAR(X_num_data.num_data);
161 			END IF;
162 			CLOSE Cur_get_num;
163 		   ELSIF p_property_id = 'UNIT' THEN
164 			l_value := LocalLabRecord.lm_unit_code;
165 		   END IF;
166  	/* This is a QC assay  B2564522 - changed the values for the correct columns from new table*/
167 		ELSE
168 		   OPEN c_get_specs;
169 		   FETCH c_get_specs INTO LocalSpecsRecord;
170 		   WHILE c_get_specs%FOUND LOOP
171 		    IF p_property_id = 'LOW' THEN
172 		   	l_value := TO_CHAR(LocalSpecsRecord.min_value_num);
173 		    ELSIF p_property_id = 'HIGH' THEN
174 			l_value := TO_CHAR(LocalSpecsRecord.max_value_num);
175 		    ELSIF p_property_id = 'VALUE' THEN
176 			l_value := TO_CHAR(LocalSpecsRecord.target_value_num);
177 		    ELSIF p_property_id = 'UNIT' THEN
178 			l_value := LocalSpecsRecord.test_unit;
179 		    END IF;
180 		    FETCH c_get_specs INTO LocalSpecsRecord;
181 		   END LOOP;
182 		   CLOSE c_get_specs;
183 		END IF;
184 
185 	/* If it is a character value */
186 	   ELSIF LocalLabRecord.data_type = 0 THEN
187 	   	IF p_property_id = 'LW_CHR' THEN
188 		   	l_value := LocalLabRecord.lowerbound_char;
189 		END IF;
190 	   	IF p_property_id = 'HI_CHR' THEN
191 			l_value := LocalLabRecord.upperbound_char;
192 		END IF;
193 		IF p_property_id = 'VALUE' THEN
194 	/* If it is not a QC assay and we have an item id */
195 			IF LocalLabRecord.qcassy_typ_id IS NULL and l_check_for_value = 'YES' THEN
196 			   OPEN Cur_get_text(LocalLabRecord.tech_parm_id);
197 			   FETCH Cur_get_text INTO X_text_data;
198 			   IF Cur_get_text%FOUND THEN
199 				l_value := X_text_data.text_data;
200 			   END IF;
201 			   CLOSE Cur_get_text;
202 	/* If it is a QC assay B2564522 - changed the text to target_value_char*/
203 			ELSIF LocalLabRecord.qcassy_typ_id IS NOT NULL THEN
204 				OPEN c_get_specs;
205 				FETCH c_get_specs INTO LocalSpecsRecord;
206 				IF c_get_specs%FOUND THEN
207 					l_value := LocalSpecsRecord.target_value_char;
208 				END IF;
209 				CLOSE c_get_specs;
210 			END IF;
211 		ELSIF p_property_id = 'UNIT' THEN
212 			l_value := LocalLabRecord.lm_unit_code;
213 
214 		END IF;
215 	/* If this is a list and we are looking for the item technical data */
216 	   ELSIF LocalLabRecord.data_type = 2  and l_check_for_value = 'YES' THEN
217 		/* Not a qc assay */
218 	     IF p_property_id = 'VALUE' THEN
219 		IF LocalLabRecord.qcassy_typ_id IS NULL THEN
220 		   OPEN Cur_get_text(LocalLabRecord.tech_parm_id);
221 		   FETCH Cur_get_text INTO X_text_data;
222 			IF Cur_get_text%FOUND THEN
223 				l_value := X_text_data.text_data;
224 			END IF;
225 		   CLOSE Cur_get_text;
226 		   /* A qc assay  B2564522 - changed text_spec to target_value_char*/
227 		ELSIF LocalLabRecord.qcassy_typ_id IS NOT NULL THEN
228 			OPEN c_get_specs;
229 			FETCH c_get_specs INTO LocalSpecsRecord;
230 			IF c_get_specs%FOUND THEN
231 				l_value := LocalSpecsRecord.target_value_char;
232 			END IF;
233 			CLOSE c_get_specs;
234 		END IF;
235 		/* QM  B2564522 - changed qcunit_code to test_unit*/
236 	      ELSIF p_property_id = 'UNIT' THEN
237 	        OPEN c_get_specs;
238 		FETCH c_get_specs INTO LocalSpecsRecord;
239 		IF c_get_specs%FOUND THEN
240 			l_value := LocalSpecsRecord.test_unit;
241 		END IF;
242 		CLOSE c_get_specs;
243 	      END IF;
244 	/*If this is a boolean and we are looking for the item technical data */
245 	   ELSIF LocalLabRecord.data_type = 3 and p_property_id = 'VALUE' and l_check_for_value = 'YES' THEN
246 		OPEN Cur_get_boolean(LocalLabRecord.tech_parm_id);
247 		FETCH Cur_get_boolean INTO X_boolean_data;
248 		IF Cur_get_boolean%FOUND THEN
249 		   	l_value := TO_CHAR(X_boolean_data.boolean_data);
250 		END IF;
251 		CLOSE Cur_get_boolean;
252 	   END IF;
253 	   FETCH c_get_lab_techparm INTO LocalLabRecord;
254 	   END LOOP;
255    ELSE
256 
257      OPEN c_get_lab_techparm_global;
258      FETCH c_get_lab_techparm_global INTO LocalLabRecord;
259      WHILE c_get_lab_techparm_global%FOUND LOOP
260 	/* If we are looking at a numeric value */
261 	    IF (c_get_lab_techparm_global%FOUND and LocalLabRecord.data_type NOT IN (0,2,3,4)) THEN
262 	/* If it is not a QC assay */
263 		IF LocalLabRecord.qcassy_typ_id IS NULL THEN
264 		 IF p_property_id = 'LOW' THEN
265 			l_value := TO_CHAR(LocalLabRecord.lowerbound_num);
266 		   ELSIF p_property_id = 'HIGH' THEN
267 			l_value := TO_CHAR(LocalLabRecord.upperbound_num);
268 		   ELSIF p_property_id = 'VALUE' and l_check_for_value = 'YES' THEN
269 			OPEN Cur_get_num(LocalLabRecord.tech_parm_id);
270 			FETCH Cur_get_num INTO X_num_data;
271 			IF Cur_get_num%FOUND THEN
272 			 	l_value := TO_CHAR(X_num_data.num_data);
273 			END IF;
274 			CLOSE Cur_get_num;
275 		   ELSIF p_property_id = 'UNIT' THEN
276 			l_value := LocalLabRecord.lm_unit_code;
277 		   END IF;
278  	/* This is a QC assay  B2564522 - changed the values for the correct columns from new table*/
279 		ELSE
280 		   OPEN c_get_specs;
281 		   FETCH c_get_specs INTO LocalSpecsRecord;
282 		   WHILE c_get_specs%FOUND LOOP
283 		    IF p_property_id = 'LOW' THEN
284 		   	l_value := TO_CHAR(LocalSpecsRecord.min_value_num);
285 		    ELSIF p_property_id = 'HIGH' THEN
286 			l_value := TO_CHAR(LocalSpecsRecord.max_value_num);
287 		    ELSIF p_property_id = 'VALUE' THEN
288 			l_value := TO_CHAR(LocalSpecsRecord.target_value_num);
289 		    ELSIF p_property_id = 'UNIT' THEN
290 			l_value := LocalSpecsRecord.test_unit;
291 		    END IF;
292 		    FETCH c_get_specs INTO LocalSpecsRecord;
293 		   END LOOP;
294 		   CLOSE c_get_specs;
295 		END IF;
296 
297 	/* If it is a character value */
298 	   ELSIF LocalLabRecord.data_type = 0 THEN
299 	   	IF p_property_id = 'LW_CHR' THEN
300 		   	l_value := LocalLabRecord.lowerbound_char;
301 		END IF;
302 	   	IF p_property_id = 'HI_CHR' THEN
303 			l_value := LocalLabRecord.upperbound_char;
304 		END IF;
305 		IF p_property_id = 'VALUE' THEN
306 	/* If it is not a QC assay and we have an item id */
307 			IF LocalLabRecord.qcassy_typ_id IS NULL and l_check_for_value = 'YES' THEN
308 			   OPEN Cur_get_text(LocalLabRecord.tech_parm_id);
309 			   FETCH Cur_get_text INTO X_text_data;
310 			   IF Cur_get_text%FOUND THEN
311 				l_value := X_text_data.text_data;
312 			   END IF;
313 			   CLOSE Cur_get_text;
314 	/* If it is a QC assay B2564522 - changed the text to target_value_char*/
315 			ELSIF LocalLabRecord.qcassy_typ_id IS NOT NULL THEN
316 				OPEN c_get_specs;
317 				FETCH c_get_specs INTO LocalSpecsRecord;
318 				IF c_get_specs%FOUND THEN
319 					l_value := LocalSpecsRecord.target_value_char;
320 				END IF;
321 				CLOSE c_get_specs;
322 			END IF;
323 		ELSIF p_property_id = 'UNIT' THEN
324 			l_value := LocalLabRecord.lm_unit_code;
325 
326 		END IF;
327 	/* If this is a list and we are looking for the item technical data */
328 	   ELSIF LocalLabRecord.data_type = 2  and l_check_for_value = 'YES' THEN
329 		/* Not a qc assay */
330 	     IF p_property_id = 'VALUE' THEN
331 		IF LocalLabRecord.qcassy_typ_id IS NULL THEN
332 		   OPEN Cur_get_text(LocalLabRecord.tech_parm_id);
333 		   FETCH Cur_get_text INTO X_text_data;
334 			IF Cur_get_text%FOUND THEN
335 				l_value := X_text_data.text_data;
336 			END IF;
337 		   CLOSE Cur_get_text;
338 		   /* A qc assay  B2564522 - changed text_spec to target_value_char*/
339 		ELSIF LocalLabRecord.qcassy_typ_id IS NOT NULL THEN
340 			OPEN c_get_specs;
341 			FETCH c_get_specs INTO LocalSpecsRecord;
342 			IF c_get_specs%FOUND THEN
343 				l_value := LocalSpecsRecord.target_value_char;
344 			END IF;
345 			CLOSE c_get_specs;
346 		END IF;
347 		/* QM  B2564522 - changed qcunit_code to test_unit*/
348 	      ELSIF p_property_id = 'UNIT' THEN
349 	        OPEN c_get_specs;
350 		FETCH c_get_specs INTO LocalSpecsRecord;
351 		IF c_get_specs%FOUND THEN
352 			l_value := LocalSpecsRecord.test_unit;
353 		END IF;
354 		CLOSE c_get_specs;
355 	      END IF;
356 	/*If this is a boolean and we are looking for the item technical data */
357 	   ELSIF LocalLabRecord.data_type = 3 and p_property_id = 'VALUE' and l_check_for_value = 'YES' THEN
358 		OPEN Cur_get_boolean(LocalLabRecord.tech_parm_id);
359 		FETCH Cur_get_boolean INTO X_boolean_data;
360 		IF Cur_get_boolean%FOUND THEN
361 		   	l_value := TO_CHAR(X_boolean_data.boolean_data);
362 		END IF;
363 		CLOSE Cur_get_boolean;
364 	   END IF;
365 	   FETCH c_get_lab_techparm_global INTO LocalLabRecord;
366 	   END LOOP;
367    END IF;
368    IF c_get_lab_techparm%ISOPEN THEN
369       CLOSE c_get_lab_techparm;
370    END IF;
371 
372    CLOSE Cur_get_description;
373 
374    IF c_get_lab_techparm_global%ISOPEN THEN
375      CLOSE c_get_lab_techparm_global;
376    END IF;
377 
378 
379  X_value := l_value;
380 
381 EXCEPTION
382 	WHEN No_Tech_Parm_Found THEN
383 		ROLLBACK TO SAVEPOINT Get_Tech_Parm_Data;
384 		  FND_MESSAGE.SET_NAME('GR', 'GR_VALID_TECHPARM');
385 		  APP_EXCEPTION.RAISE_EXCEPTION;
386 
387 	WHEN Incompatible_API_version_error THEN
388       		ROLLBACK TO SAVEPOINT Get_Tech_Parm_Data;
389         	  FND_MESSAGE.SET_NAME('GR', 'GR_API_VERSION_ERROR');
390         	  FND_MESSAGE.SET_TOKEN('VERSION', p_api_version,FALSE);
391 		  APP_EXCEPTION.RAISE_EXCEPTION;
392 
393 	WHEN OTHERS THEN
394 		ROLLBACK TO SAVEPOINT Get_Tech_Parm_Data;
395 		  l_oracle_error := SQLCODE;
396 		  l_msg_data := SUBSTR(SQLERRM, 1, 200);
397 		  FND_MESSAGE.SET_NAME('GR', 'GR_UNEXPECTED_ERROR');
398         	  FND_MESSAGE.SET_TOKEN('TEXT', l_msg_data, FALSE);
399 		  APP_EXCEPTION.RAISE_EXCEPTION;
400 
401 END Get_Tech_Parm_Data;
402 
403 END GR_TECHNICAL_PARAMETERS;