DBA Data[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;