[Home] [Help]
PACKAGE BODY: APPS.OKL_SETUPPQUALITYS_PVT
Source
1 PACKAGE BODY Okl_Setuppqualitys_Pvt AS
2 /* $Header: OKLRSPQB.pls 115.18 2004/04/02 01:22:19 sgorantl noship $ */
3
4 SUBTYPE qvev_rec_type IS Okl_Pdt_Qualitys_Pub.qvev_rec_type;
5 SUBTYPE qvev_tbl_type IS Okl_Pdt_Qualitys_Pub.qvev_tbl_type;
6 G_UNQS CONSTANT VARCHAR2(200) := 'OKL_NOT_UNIQUE'; --- CHG001
7 G_TABLE_TOKEN CONSTANT VARCHAR2(200) := 'OKL_TABLE_NAME'; --- CHG001
8
9 ---------------------------------------------------------------------------
10 -- PROCEDURE get_rec for: OKL_PDT_QUALITYS_V
11 ---------------------------------------------------------------------------
12 PROCEDURE get_rec (
13 p_pqyv_rec IN pqyv_rec_type,
14 x_no_data_found OUT NOCOPY BOOLEAN,
15 x_return_status OUT NOCOPY VARCHAR2,
16 x_pqyv_rec OUT NOCOPY pqyv_rec_type
17 ) IS
18 CURSOR okl_pqyv_pk_csr (p_id IN NUMBER) IS
19 SELECT
20 ID,
21 OBJECT_VERSION_NUMBER,
22 NAME,
23 DESCRIPTION,
24 LOCATION_YN,
25 FROM_DATE,
26 TO_DATE,
27 CREATED_BY,
28 CREATION_DATE,
29 LAST_UPDATED_BY,
30 LAST_UPDATE_DATE,
31 LAST_UPDATE_LOGIN
32 FROM Okl_Pdt_Qualitys_V
33 WHERE okl_pdt_qualitys_v.id = p_id;
34 l_okl_pqyv_pk okl_pqyv_pk_csr%ROWTYPE;
35 l_pqyv_rec pqyv_rec_type;
36 BEGIN
37 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
38 x_no_data_found := TRUE;
39 -- Get current database values
40 OPEN okl_pqyv_pk_csr (p_pqyv_rec.id);
41 FETCH okl_pqyv_pk_csr INTO
42 l_pqyv_rec.ID,
43 l_pqyv_rec.OBJECT_VERSION_NUMBER,
44 l_pqyv_rec.NAME,
45 l_pqyv_rec.DESCRIPTION,
46 l_pqyv_rec.LOCATION_YN,
47 l_pqyv_rec.FROM_DATE,
48 l_pqyv_rec.TO_DATE,
49 l_pqyv_rec.CREATED_BY,
50 l_pqyv_rec.CREATION_DATE,
51 l_pqyv_rec.LAST_UPDATED_BY,
52 l_pqyv_rec.LAST_UPDATE_DATE,
53 l_pqyv_rec.LAST_UPDATE_LOGIN;
54 x_no_data_found := okl_pqyv_pk_csr%NOTFOUND;
55 CLOSE okl_pqyv_pk_csr;
56 x_pqyv_rec := l_pqyv_rec;
57 EXCEPTION
58 WHEN OTHERS THEN
59 -- store SQL error message on message stack
60 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
61 p_msg_name => G_UNEXPECTED_ERROR,
62 p_token1 => G_SQLCODE_TOKEN,
63 p_token1_value => SQLCODE,
64 p_token2 => G_SQLERRM_TOKEN,
65 p_token2_value => SQLERRM);
66 -- notify UNEXPECTED error for calling API.
67 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
68
69 IF (okl_pqyv_pk_csr%ISOPEN) THEN
70 CLOSE okl_pqyv_pk_csr;
71 END IF;
72
73 END get_rec;
74
75 ---------------------------------------------------------------------------
76 -- PROCEDURE get_pqy_values for: OKL_PDT_QUALITYS
77 -- To fetch the valid values for the Product Quality.
78 ---------------------------------------------------------------------------
79 PROCEDURE get_pqy_values (p_upd_pqyv_rec IN pqyv_rec_type,
80 x_return_status OUT NOCOPY VARCHAR2,
81 x_count OUT NOCOPY NUMBER,
82 x_qvev_tbl OUT NOCOPY qvev_tbl_type
83 ) IS
84 CURSOR okl_qvev_fk_csr (p_qve_id IN Okl_pqy_values_V.id%TYPE) IS
85 SELECT qve.ID ID,
86 qve.FROM_DATE FROM_DATE,
87 qve.TO_DATE TO_DATE
88 FROM Okl_Pqy_Values_V qve
89 WHERE qve.pqy_id = p_qve_id
90 AND qve.TO_DATE IS NULL;
91
92 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
93 l_count NUMBER := 0;
94 l_qvev_tbl qvev_tbl_type;
95 i NUMBER := 0;
96
97 BEGIN
98 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
99
100 -- Get current database values
101 FOR okl_qve_rec IN okl_qvev_fk_csr(p_upd_pqyv_rec.id)
102 LOOP
103 l_qvev_tbl(l_count).ID := okl_qve_rec.ID;
104 l_qvev_tbl(l_count).TO_DATE := p_upd_pqyv_rec.TO_DATE;
105 l_count := l_count + 1;
106 END LOOP;
107
108 x_count := l_count;
109 x_qvev_tbl := l_qvev_tbl;
110
111 EXCEPTION
112 WHEN OTHERS THEN
113 -- store SQL error message on message stack
114 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
115 p_msg_name => G_UNEXPECTED_ERROR,
116 p_token1 => G_SQLCODE_TOKEN,
117 p_token1_value => SQLCODE,
118 p_token2 => G_SQLERRM_TOKEN,
119 p_token2_value => SQLERRM );
120 -- notify UNEXPECTED error for calling API.
121 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
122
123 IF (okl_qvev_fk_csr%ISOPEN) THEN
124 CLOSE okl_qvev_fk_csr;
125 END IF;
126
127 END get_pqy_values;
128
129 ---------------------------------------------------------------------------
130 -- PROCEDURE check_constraints for: OKL_PDT_QUALITYS_V
131 -- To verify whether the dates are valid for both PRODUCT TEMPLATE VALUE and
132 -- PRODUCT TEMPLATE QUALITY VALUE -- attached to it
133 ---------------------------------------------------------------------------
134
135 PROCEDURE Check_Constraints (
136 p_pqyv_rec IN pqyv_rec_type,
137 x_return_status OUT NOCOPY VARCHAR2,
138 x_valid OUT NOCOPY BOOLEAN
139 ) IS
140 CURSOR okl_pqy_constraints_csr (p_pqy_id IN Okl_Pdt_Qualitys_V.ID%TYPE,
141 p_from_date IN Okl_Pdt_Qualitys_V.FROM_DATE%TYPE,
142 p_to_date IN Okl_Pdt_Qualitys_V.TO_DATE%TYPE
143 ) IS
144 SELECT '1'
145 FROM Okl_Pqy_Values_V qve
146 WHERE qve.pqy_id = p_pqy_id
147 AND (qve.FROM_DATE < p_from_date OR
148 NVL(qve.TO_DATE, qve.FROM_DATE) > p_to_date)
149 UNION ALL
150 SELECT '2'
151 FROM OKL_pdt_pqys_V pdq
152 WHERE pdq.pqy_id = p_pqy_id
153 AND (pdq.FROM_DATE < p_from_date OR
154 NVL(pdq.TO_DATE, pdq.FROM_DATE) > p_to_date);
155
156 l_token_1 VARCHAR2(999);
157 l_token_2 VARCHAR2(999);
158 l_token_3 VARCHAR2(999);
159 l_token_4 VARCHAR2(999);
160 l_token_5 VARCHAR2(999);
161 l_check VARCHAR2(1) := '?';
162 l_row_not_found BOOLEAN := FALSE;
163
164 BEGIN
165 x_valid := TRUE;
166 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
167
168 l_token_1 := Okl_Accounting_Util.Get_Message_Token(p_region_code => 'OKL_LP_PRDQLTY_CRUPD',
169 p_attribute_code => 'OKL_PRODUCT_QUALITIES');
170
171 l_token_2 := Okl_Accounting_Util.Get_Message_Token(p_region_code => 'OKL_LP_PQVALS_CRUPD',
172 p_attribute_code => 'OKL_PRODUCT_QUALITY_VALUES');
173
174 l_token_3 := Okl_Accounting_Util.Get_Message_Token(p_region_code => 'OKL_LP_PDT_PQV_VAL_SUMRY',
175 p_attribute_code => 'OKL_PDT_QUALITY_VALUES');
176 l_token_5 := Okl_Accounting_Util.Get_Message_Token(p_region_code => 'OKL_LP_PDT_TMPL_PDT_QLTY_SUMRY',
177 p_attribute_code => 'OKL_PDT_TMPL_PDT_Q_SUMRY_TITLE');
178
179
180 l_token_4 := l_token_5 ||','||l_token_2;
181
182
183 -- Check for constraints dates in the case of update only
184 OPEN okl_pqy_constraints_csr(p_pqyv_rec.id,
185 p_pqyv_rec.from_date,
186 p_pqyv_rec.TO_DATE);
187
188 FETCH okl_pqy_constraints_csr INTO l_check;
189 l_row_not_found := okl_pqy_constraints_csr%NOTFOUND;
190 CLOSE okl_pqy_constraints_csr;
191
192 IF l_row_not_found = FALSE THEN
193 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
194 p_msg_name => G_DATES_MISMATCH,
195 p_token1 => G_PARENT_TABLE_TOKEN,
196 p_token1_value => l_token_1,
197 p_token2 => G_CHILD_TABLE_TOKEN,
198 p_token2_value => l_token_4);
199 x_valid := FALSE;
200 x_return_status := Okl_Api.G_RET_STS_ERROR;
201 END IF;
202
203 EXCEPTION
204 WHEN OTHERS THEN
205 -- store SQL error message on message stack
206 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
207 p_msg_name => G_UNEXPECTED_ERROR,
208 p_token1 => G_SQLCODE_TOKEN,
209 p_token1_value => SQLCODE,
210 p_token2 => G_SQLERRM_TOKEN,
211 p_token2_value => SQLERRM);
212 x_valid := FALSE;
213 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
214
215 IF (okl_pqy_constraints_csr%ISOPEN) THEN
216 CLOSE okl_pqy_constraints_csr;
217 END IF;
218
219 END Check_Constraints;
220
221
222 ---------------------------------------------------------------------------
223 -- PROCEDURE Validate _Name
224 ---------------------------------------------------------------------------
225 -- Start of comments
226 --
227 -- Procedure Name : Validate _Name
228 -- Description :
229 -- Business Rules :
230 -- Parameters :
231 -- Version : 1.0
232 -- End of comments
233 ---------------------------------------------------------------------------
234
235 PROCEDURE Validate_Name(
236 p_pqyv_rec IN OUT NOCOPY pqyv_rec_type,
237 x_return_status OUT NOCOPY VARCHAR2
238 ) IS
239 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
240 l_token_1 VARCHAR2(999);
241 BEGIN
242
243 l_token_1 := Okl_Accounting_Util.Get_Message_Token('OKL_LP_PRDQLTY_CRUPD','OKL_NAME');
244 IF p_pqyv_rec.name = Okl_Api.G_MISS_CHAR OR p_pqyv_rec.name IS NULL
245 THEN
246 Okl_Api.set_message(Okl_Pqy_Pvt.G_APP_NAME, Okl_Pqy_Pvt.G_REQUIRED_VALUE,Okl_Pqy_Pvt.G_COL_NAME_TOKEN,l_token_1);
247 x_return_status := Okl_Api.G_RET_STS_ERROR;
248 END IF;
249 p_pqyv_rec.name := Okl_Accounting_Util.okl_upper(p_pqyv_rec.name);
250 EXCEPTION
251 WHEN OTHERS THEN
252 Okl_Api.set_message(p_app_name =>Okl_Pqy_Pvt.G_APP_NAME,
253 p_msg_name =>Okl_Pqy_Pvt.G_UNEXPECTED_ERROR,
254 p_token1 =>Okl_Pqy_Pvt.G_SQL_SQLCODE_TOKEN,
255 p_token1_value =>SQLCODE,
256 p_token2 =>Okl_Pqy_Pvt.G_SQL_SQLERRM_TOKEN,
257 p_token2_value =>SQLERRM);
258 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
259
260 END Validate_Name;
261 ------end of Validate_Name-----------------------------------
262
263 --------------------------------------------------------------------------
264 -- PROCEDURE Validate _From_Date
265 ---------------------------------------------------------------------------
266 -- Start of comments
267 --
268 -- Procedure Name : Validate _From_Date
269 -- Description :
270 -- Business Rules :
271 -- Parameters :
272 -- Version : 1.0
273 -- End of comments
274 ---------------------------------------------------------------------------
275
276 PROCEDURE Validate_From_Date(
277 p_pqyv_rec IN pqyv_rec_type,
278 x_return_status OUT NOCOPY VARCHAR2
279 ) IS
280 l_token_1 VARCHAR2(999);
281 BEGIN
282 -- initialize return status
283 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
284
285 l_token_1 := Okl_Accounting_Util.Get_Message_Token('OKL_LP_PRDQLTY_CRUPD','OKL_EFFECTIVE_FROM');
286 IF p_pqyv_rec.from_date = Okl_Api.G_MISS_DATE OR p_pqyv_rec.from_date IS NULL
287 THEN
288 Okl_Api.set_message(Okl_Pqy_Pvt.G_APP_NAME, Okl_Pqy_Pvt.G_REQUIRED_VALUE,Okl_Pqy_Pvt.G_COL_NAME_TOKEN,l_token_1);
289 x_return_status := Okl_Api.G_RET_STS_ERROR;
290 END IF;
291 EXCEPTION
292 WHEN OTHERS THEN
293 Okl_Api.set_message(p_app_name =>Okl_Pqy_Pvt.G_APP_NAME,
294 p_msg_name =>Okl_Pqy_Pvt.G_UNEXPECTED_ERROR,
295 p_token1 =>Okl_Pqy_Pvt.G_SQL_SQLCODE_TOKEN,
296 p_token1_value =>SQLCODE,
297 p_token2 =>Okl_Pqy_Pvt.G_SQL_SQLERRM_TOKEN,
298 p_token2_value =>SQLERRM);
299 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
300
301 END Validate_From_Date;
302 ------end of Validate_From_Date-----------------------------------
303
304
305 ---------------------------------------------------------------------------
306 -- FUNCTION Validate_Attributes
307 ---------------------------------------------------------------------------
308 -- Start of comments
309 --
310 -- Procedure Name : Validate_Attributes
311 -- Description :
312 -- Business Rules :
313 -- Parameters :
314 -- Version : 1.0
315 -- End of comments
316 ---------------------------------------------------------------------------
317
318 FUNCTION Validate_Attributes(
319 p_pqyv_rec IN OUT NOCOPY pqyv_rec_type
320 ) RETURN VARCHAR IS
321 x_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
322 l_return_status VARCHAR2(1):= Okl_Api.G_RET_STS_SUCCESS;
323
324
325 BEGIN
326 --------CHECK FOR NAME------------------
327 Validate_Name (p_pqyv_rec,x_return_status);
328 IF x_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
329 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
330 -- need to leave
331 l_return_status := x_return_status;
332 RAISE G_EXCEPTION_HALT_PROCESSING;
333 ELSE
334 l_return_status := x_return_status;
335 END IF;
336 END IF;
337
338 -----CHECK FOR FROM_DATE----------------------------
339 Validate_From_Date (p_pqyv_rec,x_return_status);
340 IF x_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
341 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
342 -- need to leave
343 l_return_status := x_return_status;
344 RAISE G_EXCEPTION_HALT_PROCESSING;
345 ELSE
346 l_return_status := x_return_status;
347 END IF;
348
349 END IF;
350
351 RETURN(l_return_status);
352 EXCEPTION
353 WHEN G_EXCEPTION_HALT_PROCESSING THEN
354 -- just come out with return status
355 NULL;
356 RETURN (l_return_status);
357
358 WHEN OTHERS THEN
359 Okl_Api.set_message(p_app_name =>Okl_Pqy_Pvt.G_APP_NAME,
360 p_msg_name =>Okl_Pqy_Pvt.G_UNEXPECTED_ERROR,
361 p_token1 =>Okl_Pqy_Pvt.G_SQL_SQLCODE_TOKEN,
362 p_token1_value =>SQLCODE,
363 p_token2 =>Okl_Pqy_Pvt.G_SQL_SQLERRM_TOKEN,
364 p_token2_value =>SQLERRM);
365 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
366 RETURN(l_return_status);
367
368 END Validate_Attributes;
369
370 -----END OF VALIDATE ATTRIBUTES-------------------------
371
372
373 ---------------------------------------------------------------------------
374 -- FUNCTION defaults_to_actuals
375 -- This function creates an output record with changed information from the
376 -- input structure and unchanged details from the database
377 ---------------------------------------------------------------------------
378 FUNCTION defaults_to_actuals (
379 p_upd_pqyv_rec IN pqyv_rec_type,
380 p_db_pqyv_rec IN pqyv_rec_type
381 ) RETURN pqyv_rec_type IS
382 l_pqyv_rec pqyv_rec_type;
383 BEGIN
384
385 /* create a temporary record with all relevant details from db and upd records */
386 l_pqyv_rec := p_db_pqyv_rec;
387
388 IF p_upd_pqyv_rec.description <> Okl_Api.G_MISS_CHAR THEN
389 l_pqyv_rec.description := p_upd_pqyv_rec.description;
390 END IF;
391
392 IF p_upd_pqyv_rec.location_yn <> Okl_Api.G_MISS_CHAR THEN
393 l_pqyv_rec.location_yn := p_upd_pqyv_rec.location_yn;
394 END IF;
395
396 IF p_upd_pqyv_rec.from_date <> Okl_Api.G_MISS_DATE THEN
397 l_pqyv_rec.from_date := p_upd_pqyv_rec.from_date;
398 END IF;
399
400 IF p_upd_pqyv_rec.TO_DATE <> Okl_Api.G_MISS_DATE THEN
401 l_pqyv_rec.TO_DATE := p_upd_pqyv_rec.TO_DATE;
402 END IF;
403
404 RETURN l_pqyv_rec;
405 END defaults_to_actuals;
406
407 ---------------------------------------------------------------------------
408 -- PROCEDURE reorganize_inputs
409 -- This procedure is to reset the attributes in the input structure based
410 -- on the data from database
411 ---------------------------------------------------------------------------
412 PROCEDURE reorganize_inputs (
413 p_upd_pqyv_rec IN OUT NOCOPY pqyv_rec_type,
414 p_db_pqyv_rec IN pqyv_rec_type
415 ) IS
416 l_upd_pqyv_rec pqyv_rec_type;
417 l_db_pqyv_rec pqyv_rec_type;
418 BEGIN
419 /* create a temporary record with all relevant details from db and upd records */
420 l_upd_pqyv_rec := p_upd_pqyv_rec;
421 l_db_pqyv_rec := p_db_pqyv_rec;
422
423 IF l_upd_pqyv_rec.description = l_db_pqyv_rec.description THEN
424 l_upd_pqyv_rec.description := Okl_Api.G_MISS_CHAR;
425 END IF;
426
427 IF to_date(to_char(l_upd_pqyv_rec.from_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') = to_date(to_char(l_db_pqyv_rec.from_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') THEN
428 l_upd_pqyv_rec.from_date := Okl_Api.G_MISS_DATE;
429 END IF;
430
431 IF to_date(to_char(l_upd_pqyv_rec.TO_DATE, 'DD/MM/YYYY'), 'DD/MM/YYYY') = to_date(to_char(l_db_pqyv_rec.TO_DATE, 'DD/MM/YYYY'), 'DD/MM/YYYY') THEN
432 l_upd_pqyv_rec.TO_DATE := Okl_Api.G_MISS_DATE;
433 END IF;
434
435 IF l_upd_pqyv_rec.location_yn = l_db_pqyv_rec.location_yn THEN
436 l_upd_pqyv_rec.location_yn := Okl_Api.G_MISS_CHAR;
437 END IF;
438
439 p_upd_pqyv_rec := l_upd_pqyv_rec;
440
441 END reorganize_inputs;
442
443 -----------------------------------------------------------------------------
444 -- PROCEDURE check_updates
445 -- To verify whether the requested changes from the screen are valid or not
446 -----------------------------------------------------------------------------
447
448 PROCEDURE check_updates (
449 p_upd_pqyv_rec IN pqyv_rec_type,
450 p_db_pqyv_rec IN pqyv_rec_type,
451 p_pqyv_rec IN pqyv_rec_type,
452 x_return_status OUT NOCOPY VARCHAR2,
453 x_msg_data OUT NOCOPY VARCHAR2
454 ) IS
455 l_pqyv_rec pqyv_rec_type;
456 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
457 l_sysdate DATE := to_date(to_char(SYSDATE, 'DD/MM/YYYY'), 'DD/MM/YYYY');
458 l_valid BOOLEAN;
459 BEGIN
460 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
461 l_pqyv_rec := p_pqyv_rec;
462
463 /* check for start date greater than sysdate */
464 /*IF to_date(to_char(p_upd_pqyv_rec.from_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') <> to_date(to_char(Okl_Api.G_MISS_DATE, 'DD/MM/YYYY'), 'DD/MM/YYYY') AND
465 to_date(to_char(p_upd_pqyv_rec.from_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate THEN
466 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
467 p_msg_name => G_START_DATE);
468 x_return_status := Okl_Api.G_RET_STS_ERROR;
469 RAISE G_EXCEPTION_HALT_PROCESSING;
470 END IF;
471 */
472
473 /* check for the records with from and to dates less than sysdate */
474 /*IF to_date(to_char(p_upd_pqyv_rec.TO_DATE, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate THEN
475 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
476 p_msg_name => G_PAST_RECORDS);
477 x_return_status := Okl_Api.G_RET_STS_ERROR;
478 RAISE G_EXCEPTION_HALT_PROCESSING;
479 END IF;
480 */
481 /* if the start date is in the past, the start date cannot be
482 modified */
483 /*IF to_date(to_char(p_upd_pqyv_rec.from_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') <> to_date(to_char(Okl_Api.G_MISS_DATE, 'DD/MM/YYYY'), 'DD/MM/YYYY') AND
484 to_date(to_char(p_db_pqyv_rec.from_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') <= l_sysdate THEN
485 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
486 p_msg_name => G_NOT_ALLOWED,
487 p_token1 => G_COL_NAME_TOKEN,
488 p_token1_value => 'START_DATE');
489 x_return_status := Okl_Api.G_RET_STS_ERROR;
490 RAISE G_EXCEPTION_HALT_PROCESSING;
491 END IF;
492 */
493
494 IF l_pqyv_rec.from_date <> Okl_Api.G_MISS_DATE OR
495 l_pqyv_rec.TO_DATE <> Okl_Api.G_MISS_DATE THEN
496
497 /* call check_constraints */
498 Check_Constraints(p_pqyv_rec => l_pqyv_rec,
499 x_return_status => l_return_status,
500 x_valid => l_valid);
501
502 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
503 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
504 RAISE G_EXCEPTION_HALT_PROCESSING;
505 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) OR
506 (l_return_status = Okl_Api.G_RET_STS_SUCCESS AND
507 l_valid <> TRUE) THEN
508 x_return_status := Okl_Api.G_RET_STS_ERROR;
509 RAISE G_EXCEPTION_HALT_PROCESSING;
510 END IF;
511
512 END IF;
513
514 EXCEPTION
515 WHEN G_EXCEPTION_HALT_PROCESSING THEN
516 -- no processing necessary; validation can continue
517 -- with the next column
518 NULL;
519
520 WHEN OTHERS THEN
521 -- store SQL error message on message stack for caller
522 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
523 p_msg_name => G_UNEXPECTED_ERROR,
524 p_token1 => G_SQLCODE_TOKEN,
525 p_token1_value => SQLCODE,
526 p_token2 => G_SQLERRM_TOKEN,
527 p_token2_value => SQLERRM );
528 x_msg_data := 'Unexpected DATABASE Error';
529 -- notify caller of an UNEXPECTED error
530 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
531
532 END check_updates;
533
534 ---------------------------------------------------------------------------
535 -- PROCEDURE determine_action for: Okl_pdt_Qualitys_v
536 -- This function helps in determining the various checks to be performed
537 -- for the new/updated record.
538 ---------------------------------------------------------------------------
539 FUNCTION determine_action (
540 p_upd_pqyv_rec IN pqyv_rec_type,
541 p_db_pqyv_rec IN pqyv_rec_type,
542 p_date IN DATE
543 ) RETURN VARCHAR2 IS
544 l_action VARCHAR2(1);
545 l_sysdate DATE := to_date(to_char(SYSDATE, 'DD/MM/YYYY'), 'DD/MM/YYYY');
546 BEGIN
547 /* Scenario 1: Only description and/or descriptive flexfield changes */
548 IF p_upd_pqyv_rec.from_date = Okl_Api.G_MISS_DATE AND
549 p_upd_pqyv_rec.TO_DATE = Okl_Api.G_MISS_DATE THEN
550 l_action := '1';
551 /* Scenario 2: Changing the dates */
552 ELSE
553 l_action := '2';
554 END IF;
555 RETURN(l_action);
556 END determine_action;
557
558 ---------------------------------------------------------------------------
559 -- PROCEDURE copy_update_constraints for: OKL_PQY_QUALITYS_V
560 ---------------------------------------------------------------------------
561 PROCEDURE copy_update_constraints (p_api_version IN NUMBER,
562 p_init_msg_list IN VARCHAR2 DEFAULT Okl_Api.G_FALSE,
563 p_upd_pqyv_rec IN pqyv_rec_type,
564 x_return_status OUT NOCOPY VARCHAR2,
565 x_msg_count OUT NOCOPY NUMBER,
566 x_msg_data OUT NOCOPY VARCHAR2
567 ) IS
568 l_upd_pqyv_rec pqyv_rec_type; /* input copy */
569 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
570 l_ptv_count NUMBER := 0;
571 l_qvev_tbl qvev_tbl_type;
572 l_out_qvev_tbl qvev_tbl_type;
573
574 BEGIN
575 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
576 l_upd_pqyv_rec := p_upd_pqyv_rec;
577
578 /* Get Product Quality Values */
579 get_pqy_values(p_upd_pqyv_rec => l_upd_pqyv_rec,
580 x_return_status => l_return_status,
581 x_count => l_ptv_count,
582 x_qvev_tbl => l_qvev_tbl);
583
584 IF l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
585 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
586 RAISE G_EXCEPTION_HALT_PROCESSING;
587 END IF;
588
589 IF l_ptv_count > 0 THEN
590 Okl_Pdt_Qualitys_Pub.update_pdt_quality_vals(p_api_version => p_api_version,
591 p_init_msg_list => p_init_msg_list,
592 x_return_status => l_return_status,
593 x_msg_count => x_msg_count,
594 x_msg_data => x_msg_data,
595 p_qvev_tbl => l_qvev_tbl,
596 x_qvev_tbl => l_out_qvev_tbl);
597 END IF;
598
599 IF l_return_status = Okl_Api.G_RET_STS_ERROR THEN
600 x_return_status := Okl_Api.G_RET_STS_ERROR;
601 RAISE G_EXCEPTION_HALT_PROCESSING;
602 ELSIF l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
603 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
604 RAISE G_EXCEPTION_HALT_PROCESSING;
605 END IF;
606
607 EXCEPTION
608 WHEN G_EXCEPTION_HALT_PROCESSING THEN
609 -- no processing necessary; validation can continue
610 -- with the next column
611 NULL;
612
613 WHEN OTHERS THEN
614 -- store SQL error message on message stack
615 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
616 p_msg_name => G_UNEXPECTED_ERROR,
617 p_token1 => G_SQLCODE_TOKEN,
618 p_token1_value => SQLCODE,
619 p_token2 => G_SQLERRM_TOKEN,
620 p_token2_value => SQLERRM );
621 -- notify UNEXPECTED error for calling API.
622 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
623
624 END copy_update_constraints;
625
626 -----------------------------------------------------------------------------
627 -- PROCEDURE insert_pqualities for: Okl_pdt_Qualitys_v
628 -----------------------------------------------------------------------------
629
630 PROCEDURE insert_pqualitys(p_api_version IN NUMBER,
631 p_init_msg_list IN VARCHAR2 DEFAULT Okl_Api.G_FALSE,
632 x_return_status OUT NOCOPY VARCHAR2,
633 x_msg_count OUT NOCOPY NUMBER,
634 x_msg_data OUT NOCOPY VARCHAR2,
635 p_pqyv_rec IN pqyv_rec_type,
636 x_pqyv_rec OUT NOCOPY pqyv_rec_type
637 ) IS
638 CURSOR okl_pdt_quality_unique (p_unique OKL_PDT_QUALITYS_v.NAME%TYPE) IS
639 SELECT '1'
640 FROM OKL_PDT_QUALITYS_v
641 WHERE NAME = p_unique;
642
643 l_unique_key OKL_PDT_QUALITYS_v.NAME%TYPE;
644 l_row_found BOOLEAN := FALSE;
645 l_token_1 VARCHAR2(1999);
646 l_api_version CONSTANT NUMBER := 1;
647 l_api_name CONSTANT VARCHAR2(30) := 'insert_tqualities';
648 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
649 l_sysdate DATE := to_date(to_char(SYSDATE, 'DD/MM/YYYY'), 'DD/MM/YYYY');
650 l_valid BOOLEAN;
651 l_pqyv_rec pqyv_rec_type;
652 BEGIN
653 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
654
655 l_pqyv_rec := p_pqyv_rec;
656 l_return_status := Okl_Api.START_ACTIVITY(p_api_name => l_api_name,
657 p_pkg_name => G_PKG_NAME,
658 p_init_msg_list => p_init_msg_list,
659 l_api_version => l_api_version,
660 p_api_version => p_api_version,
661 p_api_type => '_PVT',
662 x_return_status => l_return_status);
663 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
664 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
665 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
666 RAISE Okl_Api.G_EXCEPTION_ERROR;
667 END IF;
668
669 l_return_status := Validate_Attributes(l_pqyv_rec);
670 --- If any errors happen abort API
671 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
672 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
673 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
674 RAISE Okl_Api.G_EXCEPTION_ERROR;
675 END IF;
676
677 l_token_1 := Okl_Accounting_Util.Get_Message_Token(p_region_code => 'OKL_LP_PRDQLTY_CRUPD',
678 p_attribute_code => 'OKL_PRODUCT_QUALITIES');
679
680 OPEN okl_pdt_quality_unique (Okl_Accounting_Util.okl_upper(p_pqyv_rec.name));
681 FETCH okl_pdt_quality_unique INTO l_unique_key;
682 l_row_found := okl_pdt_quality_unique%FOUND;
683 CLOSE okl_pdt_quality_unique;
684
685 IF l_row_found THEN
686 Okl_Api.set_message('OKL',G_UNQS,G_TABLE_TOKEN, l_token_1); ---CHG001
687 RAISE Okl_Api.G_EXCEPTION_ERROR;
688 END IF;
689
690 IF l_return_status = Okl_Api.G_RET_STS_ERROR THEN
691 RAISE Okl_Api.G_EXCEPTION_ERROR;
692 ELSIF l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
693 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
694 END IF;
695
696 IF (l_pqyv_rec.TO_DATE IS NOT NULL) AND (l_pqyv_rec.TO_DATE < l_pqyv_rec.from_date) THEN
697 Okl_Api.SET_MESSAGE(p_app_name => g_app_name
698 ,p_msg_name => Okl_Pqy_Pvt.g_to_date_error
699 ,p_token1 => Okl_Pqy_Pvt.g_col_name_token
700 ,p_token1_value => 'to_date');
701 x_return_status := Okl_Api.G_RET_STS_ERROR;
702 RAISE Okl_Api.G_EXCEPTION_ERROR;
703 END IF;
704
705 /* check for the records with start and end dates less than sysdate */
706 /*IF to_date(to_char(l_pqyv_rec.from_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate OR
707 to_date(to_char(l_pqyv_rec.TO_DATE, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate THEN
708 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
709 p_msg_name => G_PAST_RECORDS);
710 RAISE Okl_Api.G_EXCEPTION_ERROR;
711 END IF;
712 */
713 /* public api to insert tqualities */
714
715 Okl_Pdt_Qualitys_Pub.create_pdt_qualitys(p_api_version => p_api_version,
716 p_init_msg_list => p_init_msg_list,
717 x_return_status => l_return_status,
718 x_msg_count => x_msg_count,
719 x_msg_data => x_msg_data,
720 p_pqyv_rec => l_pqyv_rec,
721 x_pqyv_rec => x_pqyv_rec);
722
723 IF l_return_status = Okl_Api.G_RET_STS_ERROR THEN
724 RAISE Okl_Api.G_EXCEPTION_ERROR;
725 ELSIF l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
726 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
727 END IF;
728
729 Okl_Api.END_ACTIVITY(x_msg_count => x_msg_count,
730 x_msg_data => x_msg_data);
731 EXCEPTION
732 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
733 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(p_api_name => l_api_name,
734 p_pkg_name => G_PKG_NAME,
735 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
736 x_msg_count => x_msg_count,
737 x_msg_data => x_msg_data,
738 p_api_type => '_PVT');
739 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
740 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(p_api_name => l_api_name,
741 p_pkg_name => G_PKG_NAME,
742 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
743 x_msg_count => x_msg_count,
744 x_msg_data => x_msg_data,
745 p_api_type => '_PVT');
746 WHEN OTHERS THEN
747 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(p_api_name => l_api_name,
748 p_pkg_name => G_PKG_NAME,
749 p_exc_name => 'OTHERS',
750 x_msg_count => x_msg_count,
751 x_msg_data => x_msg_data,
752 p_api_type => '_PVT');
753
754 IF (okl_pdt_quality_unique%ISOPEN) THEN
755 CLOSE okl_pdt_quality_unique;
756 END IF;
757
758 END insert_pqualitys;
759
760 ---------------------------------------------------------------------------
761 -- PROCEDURE update_pqualities for: Okl_pdt_Qualitys_v
762 ---------------------------------------------------------------------------
763 PROCEDURE update_pqualitys(p_api_version IN NUMBER,
764 p_init_msg_list IN VARCHAR2 DEFAULT Okl_Api.G_FALSE,
765 x_return_status OUT NOCOPY VARCHAR2,
766 x_msg_count OUT NOCOPY NUMBER,
767 x_msg_data OUT NOCOPY VARCHAR2,
768 p_pqyv_rec IN pqyv_rec_type,
769 x_pqyv_rec OUT NOCOPY pqyv_rec_type
770 ) IS
771 l_api_version CONSTANT NUMBER := 1;
772 l_api_name CONSTANT VARCHAR2(30) := 'update_tqualities';
773 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
774 l_sysdate DATE := to_date(to_char(SYSDATE, 'DD/MM/YYYY'), 'DD/MM/YYYY');
775 l_valid BOOLEAN;
776 l_db_pqyv_rec pqyv_rec_type; /* database copy */
777 l_upd_pqyv_rec pqyv_rec_type; /* input copy */
778 l_pqyv_rec pqyv_rec_type; /* latest with the retained changes */
779 l_tmp_pqyv_rec pqyv_rec_type; /* for any other purposes */
780 l_no_data_found BOOLEAN := TRUE;
781 l_action VARCHAR2(1);
782 BEGIN
783 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
784
785 l_upd_pqyv_rec := p_pqyv_rec;
786
787 l_return_status := Okl_Api.START_ACTIVITY(p_api_name => l_api_name,
788 p_pkg_name => G_PKG_NAME,
789 p_init_msg_list => p_init_msg_list,
790 l_api_version => l_api_version,
791 p_api_version => p_api_version,
792 p_api_type => '_PVT',
793 x_return_status => l_return_status);
794 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
795 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
796 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
797 RAISE Okl_Api.G_EXCEPTION_ERROR;
798 END IF;
799
800 /* fetch old details from the database */
801 get_rec(p_pqyv_rec => l_upd_pqyv_rec,
802 x_return_status => l_return_status,
803 x_no_data_found => l_no_data_found,
804 x_pqyv_rec => l_db_pqyv_rec);
805
806 IF l_return_status <> Okl_Api.G_RET_STS_SUCCESS OR
807 l_no_data_found = TRUE THEN
808 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
809 END IF;
810
811 IF l_upd_pqyv_rec.TO_DATE <> Okl_Api.G_MISS_DATE THEN
812 /* update constraints */
813 copy_update_constraints(p_api_version => p_api_version,
814 p_init_msg_list => p_init_msg_list,
815 p_upd_pqyv_rec => l_upd_pqyv_rec,
816 x_return_status => l_return_status,
817 x_msg_count => x_msg_count,
818 x_msg_data => x_msg_data);
819
820 IF l_return_status = Okl_Api.G_RET_STS_ERROR THEN
821 RAISE Okl_Api.G_EXCEPTION_ERROR;
822 ELSIF l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
823 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
824 END IF;
825
826 END IF;
827
828 /* to reorganize the input accordingly */
829 reorganize_inputs(p_upd_pqyv_rec => l_upd_pqyv_rec,
830 p_db_pqyv_rec => l_db_pqyv_rec);
831
832 /* check for past records */
833 /*IF to_date(to_char(l_db_pqyv_rec.from_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate AND
834 to_date(to_char(l_db_pqyv_rec.TO_DATE, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate THEN
835 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
836 p_msg_name => G_PAST_RECORDS);
837 x_return_status := Okl_Api.G_RET_STS_ERROR;
838 RAISE Okl_Api.G_EXCEPTION_ERROR;
839 END IF;
840 */
841
842 IF (l_upd_pqyv_rec.TO_DATE = Okl_Api.G_MISS_DATE) then
843 l_upd_pqyv_rec.TO_DATE := p_pqyv_rec.to_date;
844 end if;
845
846 IF (l_upd_pqyv_rec.from_DATE = Okl_Api.G_MISS_DATE) then
847 l_upd_pqyv_rec.from_DATE := p_pqyv_rec.from_date;
848 end if;
849
850
851 IF (l_upd_pqyv_rec.TO_DATE IS NOT NULL) AND (l_upd_pqyv_rec.TO_DATE < l_upd_pqyv_rec.from_date) THEN
852 Okl_Api.SET_MESSAGE(p_app_name => g_app_name
853 ,p_msg_name => Okl_Pqy_Pvt.g_to_date_error
854 ,p_token1 => Okl_Pqy_Pvt.g_col_name_token
855 ,p_token1_value => 'to_date');
856 x_return_status := Okl_Api.G_RET_STS_ERROR;
857 RAISE Okl_Api.G_EXCEPTION_ERROR;
858 END IF;
859
860 /* check for start date greater than sysdate */
861 /*IF to_date(to_char(l_upd_pqyv_rec.from_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') <> to_date(to_char(Okl_Api.G_MISS_DATE, 'DD/MM/YYYY'), 'DD/MM/YYYY') AND
862 to_date(to_char(l_upd_pqyv_rec.from_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate THEN
863 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
864 p_msg_name => G_START_DATE);
865 RAISE Okl_Api.G_EXCEPTION_ERROR;
866 END IF;
867 */
868 /* determine how the processing to be done */
869 l_action := determine_action(p_upd_pqyv_rec => l_upd_pqyv_rec,
870 p_db_pqyv_rec => l_db_pqyv_rec,
871 p_date => l_sysdate);
872
873 /* Scenario 1: only changing description and descriptive flexfields */
874 IF l_action = '1' THEN
875 /* public api to update tqualities */
876 Okl_Pdt_Qualitys_Pub.update_pdt_qualitys(p_api_version => p_api_version,
877 p_init_msg_list => p_init_msg_list,
878 x_return_status => l_return_status,
879 x_msg_count => x_msg_count,
880 x_msg_data => x_msg_data,
881 p_pqyv_rec => l_upd_pqyv_rec,
882 x_pqyv_rec => x_pqyv_rec);
883
884 IF l_return_status = Okl_Api.G_RET_STS_ERROR THEN
885 RAISE Okl_Api.G_EXCEPTION_ERROR;
886 ELSIF l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
887 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
888 END IF;
889 /* Scenario 2: changing the dates */
890 ELSIF l_action = '2' THEN
891 /* create a temporary record with all relevant details from db and upd records */
892 l_pqyv_rec := defaults_to_actuals(p_upd_pqyv_rec => l_upd_pqyv_rec,
893 p_db_pqyv_rec => l_db_pqyv_rec);
894
895 check_updates(p_upd_pqyv_rec => l_upd_pqyv_rec,
896 p_db_pqyv_rec => l_db_pqyv_rec,
897 p_pqyv_rec => l_pqyv_rec,
898 x_return_status => l_return_status,
899 x_msg_data => x_msg_data);
900
901 IF l_return_status = Okl_Api.G_RET_STS_ERROR THEN
902 RAISE Okl_Api.G_EXCEPTION_ERROR;
903 ELSIF l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
904 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
905 END IF;
906
907 /* public api to update tqualities */
908 Okl_Pdt_Qualitys_Pub.update_pdt_qualitys(p_api_version => p_api_version,
909 p_init_msg_list => p_init_msg_list,
910 x_return_status => l_return_status,
911 x_msg_count => x_msg_count,
912 x_msg_data => x_msg_data,
913 p_pqyv_rec => l_upd_pqyv_rec,
914 x_pqyv_rec => x_pqyv_rec);
915
916 IF l_return_status = Okl_Api.G_RET_STS_ERROR THEN
917 RAISE Okl_Api.G_EXCEPTION_ERROR;
918 ELSIF l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
919 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
920 END IF;
921 END IF;
922
923 Okl_Api.END_ACTIVITY(x_msg_count => x_msg_count,
924 x_msg_data => x_msg_data);
925 EXCEPTION
926 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
927 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(p_api_name => l_api_name,
928 p_pkg_name => G_PKG_NAME,
929 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
930 x_msg_count => x_msg_count,
931 x_msg_data => x_msg_data,
932 p_api_type => '_PVT');
933 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
934 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(p_api_name => l_api_name,
935 p_pkg_name => G_PKG_NAME,
936 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
937 x_msg_count => x_msg_count,
938 x_msg_data => x_msg_data,
939 p_api_type => '_PVT');
940 WHEN OTHERS THEN
941 x_return_status := Okl_Api.HANDLE_EXCEPTIONS(p_api_name => l_api_name,
942 p_pkg_name => G_PKG_NAME,
943 p_exc_name => 'OTHERS',
944 x_msg_count => x_msg_count,
945 x_msg_data => x_msg_data,
946 p_api_type => '_PVT');
947
948 END update_pqualitys;
949 END Okl_Setuppqualitys_Pvt;