DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_VALIDATE_CURR_DETAILS

Source


1 PACKAGE BODY QP_Validate_Curr_Details AS
2 /* $Header: QPXLCDTB.pls 120.3 2006/01/03 04:18:30 srashmi noship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'QP_Validate_Curr_Details';
7 
8 --  Procedure Entity
9 
10 PROCEDURE Entity
11 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
12 ,   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
13 ,   p_old_CURR_DETAILS_rec          IN  QP_Currency_PUB.Curr_Details_Rec_Type :=
14                                         QP_Currency_PUB.G_MISS_CURR_DETAILS_REC
15 )
16 IS
17 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
18 l_dummy_c                     VARCHAR2(1);
19 l_base_currency_code_s        QP_CURRENCY_LISTS_B.base_currency_code%TYPE;
20 l_default_start_date_d        DATE := to_date('01/01/1951','mm/dd/yyyy');
21 l_default_end_date_d          DATE := to_date('12/31/9999','mm/dd/yyyy');
22 l_context_flag                VARCHAR2(1);
23 l_attribute_flag              VARCHAR2(1);
24 l_value_flag                  VARCHAR2(1);
25 l_datatype                    VARCHAR2(1);
26 l_flexfield_name              VARCHAR2(30);
27 l_precedence                  NUMBER;
28 l_error_code                  NUMBER;
29 l_org_id                      PLS_INTEGER;
30 l_context_type                VARCHAR2(30);
31 l_sourcing_enabled            VARCHAR2(1);
32 l_sourcing_status             VARCHAR2(1);
33 l_sourcing_method             VARCHAR2(30);
34 
35 l_pte_code                    VARCHAR2(30);
36 l_ss_code                     VARCHAR2(30);
37 l_fna_name                    VARCHAR2(4000);
38 l_fna_desc                    VARCHAR2(489);
39 l_fna_valid                   BOOLEAN;
40 
41 CURSOR CURSOR_OVERLAP_CHECK(in_to_currency_code_s     QP_CURRENCY_DETAILS.to_currency_code%TYPE,
42 			   in_currency_header_id_n   QP_CURRENCY_DETAILS.currency_header_id%TYPE,
43 			   in_currency_detail_id_n   QP_CURRENCY_DETAILS.currency_detail_id%TYPE,
44 			   in_curr_attribute_type    QP_CURRENCY_DETAILS.curr_attribute_type%TYPE,
45 			   in_curr_attribute_context QP_CURRENCY_DETAILS.curr_attribute_context%TYPE,
46 			   in_curr_attribute         QP_CURRENCY_DETAILS.curr_attribute%TYPE,
47 			   in_curr_attribute_value   QP_CURRENCY_DETAILS.curr_attribute_value%TYPE
48 			   )
49 is
50 SELECT
51 trunc(start_date_active) start_date_active,
52 trunc(end_date_active) end_date_active
53 FROM QP_CURRENCY_DETAILS
54 WHERE to_currency_code = in_to_currency_code_s and
55       currency_header_id = in_currency_header_id_n and
56       currency_detail_id <> nvl(in_currency_detail_id_n, -99999) and
57       nvl(curr_attribute_type, '~EQUAL~') = nvl(in_curr_attribute_type, '~EQUAL~') and
58       nvl(curr_attribute_context, '~EQUAL~') = nvl(in_curr_attribute_context, '~EQUAL~') and
59       nvl(curr_attribute, '~EQUAL~') = nvl(in_curr_attribute, '~EQUAL~') and
60       nvl(curr_attribute_value, '~EQUAL~') = nvl(in_curr_attribute_value, '~EQUAL~');
61 
62 CURSOR CURSOR_PRECEDENCE_UNIQUENESS
63 			  (in_to_currency_code_s     QP_CURRENCY_DETAILS.to_currency_code%TYPE,
64 			   in_currency_header_id_n   QP_CURRENCY_DETAILS.currency_header_id%TYPE,
65 			   in_currency_detail_id_n   QP_CURRENCY_DETAILS.currency_detail_id%TYPE,
66 			   in_precedence             QP_CURRENCY_DETAILS.precedence%TYPE
67 			   )
68 is
69 SELECT
70 trunc(start_date_active) start_date_active,
71 trunc(end_date_active) end_date_active
72 FROM QP_CURRENCY_DETAILS
73 WHERE to_currency_code = in_to_currency_code_s and
74       currency_header_id = in_currency_header_id_n and
75       currency_detail_id <> nvl(in_currency_detail_id_n, -99999) and
76       nvl(precedence, -1) = in_precedence;
77 
78 BEGIN
79 
80     -- oe_debug_pub.add('Inside Details Entity L package');
81     --  Check required attributes.
82 
83     IF  p_CURR_DETAILS_rec.currency_detail_id IS NULL
84     THEN
85 
86         l_return_status := FND_API.G_RET_STS_ERROR;
87         -- oe_debug_pub.add('ERROR: currency_detail_id is NULL');
88 
89         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
90         THEN
91 
92             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
93             FND_MESSAGE.SET_TOKEN('ATTRIBUTE','currency_detail_id');
94             OE_MSG_PUB.Add;
95 
96         END IF;
97 
98     END IF;
99 
100     --
101     --  Check rest of required attributes here.
102     --
103     -- Below validations Added by Sunil Pandey
104 
105     --   End Date must be after the Start Date
106 
107       -- oe_debug_pub.add('VALIDATING start date after end date');
108       IF  nvl( p_CURR_DETAILS_rec.start_date_active,l_default_start_date_d) >
109           nvl( p_CURR_DETAILS_rec.end_date_active,l_default_end_date_d)
110       THEN
111 
112         l_return_status := FND_API.G_RET_STS_ERROR;
113 
114         FND_MESSAGE.SET_NAME('QP','QP_STRT_DATE_BFR_END_DATE');
115         OE_MSG_PUB.Add;
116         -- oe_debug_pub.add(' Start_date End_Date Check; G_MSG_CONTEXT_COUNT: '||OE_MSG_PUB.G_MSG_CONTEXT_COUNT);
117         -- oe_debug_pub.add(' Start_date End_Date Check; G_MSG_COUNT: '||OE_MSG_PUB.G_MSG_COUNT);
118         -- oe_debug_pub.add('ERROR: start_date is after end_date');
119         -- oe_debug_pub.add('.     start_date: '||NVL(p_CURR_DETAILS_rec.start_date_active, sysdate));
120         -- oe_debug_pub.add('.     end_date: '||NVL(p_CURR_DETAILS_rec.end_date_active, sysdate));
121         -- raise FND_API.G_EXC_ERROR;
122 
123       ELSE
124         -- Validate that only one active detail record exist at any point of time
125         BEGIN
126           -- oe_debug_pub.add('VALIDATE Uniqueness of to_currency_code');
127           For detail_rec in CURSOR_OVERLAP_CHECK
128    			   (p_CURR_DETAILS_rec.to_currency_code,
129    			    p_CURR_DETAILS_rec.currency_header_id,
130    			    p_CURR_DETAILS_rec.currency_detail_id,
131 			    p_CURR_DETAILS_rec.curr_attribute_type,
132 			    p_CURR_DETAILS_rec.curr_attribute_context,
133 			    p_CURR_DETAILS_rec.curr_attribute,
134 			    p_CURR_DETAILS_rec.curr_attribute_value)
135           LOOP
136              If  (
137    	       (nvl(trunc(p_CURR_DETAILS_rec.start_date_active), l_default_start_date_d) between
138    		  nvl(detail_rec.start_date_active, l_default_start_date_d) and
139    		  nvl(detail_rec.end_date_active,l_default_end_date_d)) OR
140 
141    	       (nvl(trunc(p_CURR_DETAILS_rec.end_date_active), l_default_end_date_d) between
142    		  nvl(detail_rec.start_date_active, l_default_start_date_d) and
143    		  nvl(detail_rec.end_date_active,l_default_end_date_d)) OR
144 
145    	       (nvl(trunc(p_CURR_DETAILS_rec.start_date_active), l_default_start_date_d) <=
146    		  nvl(detail_rec.start_date_active, l_default_start_date_d) and
147    	        nvl(trunc(p_CURR_DETAILS_rec.end_date_active), l_default_end_date_d) >=
148    		  nvl(detail_rec.end_date_active, l_default_end_date_d))
149                  )
150    	  then
151 
152                 l_return_status := FND_API.G_RET_STS_ERROR;
153                 FND_MESSAGE.SET_NAME('QP','QP_OVERLAP_NOT_ALLWD'); -- CHANGE MESG_CODE
154                 FND_MESSAGE.SET_TOKEN('CURRENCY_CODE',p_CURR_DETAILS_rec.to_currency_code);
155                 OE_MSG_PUB.Add;
156                 -- oe_debug_pub.add('ERROR: Multiple record(s) are active for the to_currency_code: '||p_CURR_DETAILS_rec.to_currency_code);
157                 -- oe_debug_pub.add('.     Form record start_date: '||NVL(p_CURR_DETAILS_rec.start_date_active, l_default_start_date_d));
158                 -- oe_debug_pub.add('.     Form record end_date: '||NVL(p_CURR_DETAILS_rec.end_date_active, l_default_end_date_d));
159                 -- oe_debug_pub.add('.     Existing record start_date: '||NVL(detail_rec.start_date_active, l_default_start_date_d));
160                 -- oe_debug_pub.add('.     Existing record end_date: '||NVL(detail_rec.end_date_active, l_default_end_date_d));
161 		exit;  -- Exit the loop
162 
163              End if;
164           END LOOP;
165 
166         END;
167       END IF;
168 
169       -- Validate detail records' to_currency_code
170       BEGIN
171         -- oe_debug_pub.add('VALIDATE Details to_currency_code');
172 
173         SELECT 'X'
174         INTO   l_dummy_c
175         FROM   fnd_currencies_vl
176         WHERE  enabled_flag = 'Y'
177         and    currency_flag = 'Y'
178         and    currency_code = p_CURR_DETAILS_rec.to_currency_code
179         and    trunc(sysdate) between nvl(start_date_active,trunc(sysdate))
180         and    nvl(end_date_active,trunc(sysdate));
181 
182       EXCEPTION
183       WHEN NO_DATA_FOUND THEN
184         l_return_status := FND_API.G_RET_STS_ERROR;
185         FND_MESSAGE.SET_NAME('QP','QP_INVALID_CURRENCY');
186         OE_MSG_PUB.Add;
187         -- oe_debug_pub.add('ERROR: Invalid To_Currency_Code');
188 
189       END;
190 
191       -- Validate detail records' price_formula
192       IF  (p_CURR_DETAILS_rec.price_formula_id IS NOT NULL and
193 	   p_CURR_DETAILS_rec.price_formula_id <> FND_API.G_MISS_NUM)
194       THEN
195         BEGIN
196           oe_debug_pub.add('VALIDATE Details price_formula');
197 
198           SELECT 'X'
199           INTO l_dummy_c
200           FROM qp_price_formulas_vl fh
201           WHERE trunc(sysdate) between nvl(fh.start_date_active, trunc(sysdate))
202           and nvl(fh.end_date_active, trunc(sysdate))
203           and fh.price_formula_id = p_CURR_DETAILS_rec.price_formula_id
204           and  not exists (Select 'x'
205                            From qp_price_formula_lines fl
206                            Where fl.price_formula_id = fh.price_formula_id
207                            and fl.PRICE_FORMULA_LINE_TYPE_CODE = 'PLL'
208                            and trunc(sysdate) between nvl(fl.start_date_active, trunc(sysdate))
209 			       and nvl(fl.end_date_active, trunc(sysdate)));
210 
211         EXCEPTION
212         WHEN NO_DATA_FOUND THEN
213           l_return_status := FND_API.G_RET_STS_ERROR;
214           FND_MESSAGE.SET_NAME('QP','QP_FORMULA_NOT_FOUND');
215           OE_MSG_PUB.Add;
216           oe_debug_pub.add('ERROR: Invalid price_formula_id');
217 
218         END;
219 
220         BEGIN
221           oe_debug_pub.add('VALIDATE - Details price_formula does not have line of type MV');
222 
223           SELECT 'X'
224           INTO l_dummy_c
225           FROM qp_price_formulas_vl fh
226           WHERE trunc(sysdate) between nvl(fh.start_date_active, trunc(sysdate))
227           and nvl(fh.end_date_active, trunc(sysdate))
228           and fh.price_formula_id = p_CURR_DETAILS_rec.price_formula_id
229           and  not exists (Select 'x'
230                            From qp_price_formula_lines fl
231                            Where fl.price_formula_id = fh.price_formula_id
232                            and fl.PRICE_FORMULA_LINE_TYPE_CODE = 'MV'
233                            and trunc(sysdate) between nvl(fl.start_date_active, trunc(sysdate))
234 			       and nvl(fl.end_date_active, trunc(sysdate)));
235 
236         EXCEPTION
237         WHEN NO_DATA_FOUND THEN
238           l_return_status := FND_API.G_RET_STS_ERROR;
239           FND_MESSAGE.SET_NAME('QP','QP_INVALID_FORMULA_FOR_PL');
240           OE_MSG_PUB.Add;
241           oe_debug_pub.add('ERROR: price_formula_id has MV as line type');
242 
243         END;
244       END IF;
245 
246       /*
247       -- Validate detail records' conditional columns
248       -- Markup value or formula should be present if operator is present
249       IF ((p_CURR_DETAILS_rec.markup_operator IS NOT NULL and
250 	   p_CURR_DETAILS_rec.markup_operator <> FND_API.G_MISS_CHAR) AND
251 	  (p_CURR_DETAILS_rec.markup_formula_id IS NULL AND
252 	   p_CURR_DETAILS_rec.markup_value IS NULL)
253          )
254       THEN
255          -- oe_debug_pub.add('ERROR: Markup Formula or Value should be provided if Markup Operator is present');
256          l_return_status := FND_API.G_RET_STS_ERROR;
257          FND_MESSAGE.SET_NAME('QP','Enter_Markup_FML_OR_Value');  -- CHANGE MESG_CODE
258          OE_MSG_PUB.Add;
259       END IF;
260 
261       -- Markup Operator should be present if either value or formula is present
262       IF ((p_CURR_DETAILS_rec.markup_operator IS NULL) AND
263 	  (p_CURR_DETAILS_rec.markup_formula_id IS NOT NULL OR
264 	   p_CURR_DETAILS_rec.markup_value IS NOT NULL)
265          )
266       THEN
267          -- oe_debug_pub.add('ERROR: Markup Formula or Value can be provided only if Markup Operator is present');
268          l_return_status := FND_API.G_RET_STS_ERROR;
269          FND_MESSAGE.SET_NAME('QP','First_Enter_Markup_OPRTR'); -- CHANGE MESG_CODE
270          OE_MSG_PUB.Add;
271       END IF;
272       */
273 
274       -- Validate detail records' markup_formula
275       IF  p_CURR_DETAILS_rec.markup_formula_id IS NOT NULL THEN
276         BEGIN
277           -- oe_debug_pub.add('VALIDATE Details markup_formula');
278 
279 	  /*
280           SELECT 'X'
281           INTO l_dummy_c
282           FROM qp_price_formulas_vl
283           WHERE trunc(sysdate) between nvl(start_date_active, trunc(sysdate))
284           and nvl(end_date_active, trunc(sysdate))
285           and price_formula_id = p_CURR_DETAILS_rec.markup_formula_id;
286 	  */
287 
288 	  -- Only those formulas which do not have a line component of type_code = 'PLL' can
289 	  -- be attached to a multi-currency list
290           SELECT 'X'
291           INTO l_dummy_c
292           FROM qp_price_formulas_vl fh
293           WHERE trunc(sysdate) between nvl(fh.start_date_active, trunc(sysdate))
294 	  and nvl(fh.end_date_active, trunc(sysdate))
295           and fh.price_formula_id = p_CURR_DETAILS_rec.markup_formula_id
296           and  not exists (Select 'x'
297                            From qp_price_formula_lines fl
298                            Where fl.price_formula_id = fh.price_formula_id
299                            and fl.PRICE_FORMULA_LINE_TYPE_CODE = 'PLL'
300                            and trunc(sysdate) between nvl(fl.start_date_active, trunc(sysdate))
301 			       and nvl(fl.end_date_active, trunc(sysdate)));
302 
303         EXCEPTION
304         WHEN NO_DATA_FOUND THEN
305           l_return_status := FND_API.G_RET_STS_ERROR;
306           FND_MESSAGE.SET_NAME('QP','QP_FORMULA_NOT_FOUND');
307           OE_MSG_PUB.Add;
308           -- oe_debug_pub.add('ERROR: Invalid markup_formula_id');
309 
310         END;
311       END IF;
312 
313       /*
314       -- Validate detail records' conversion_method
315       IF  p_CURR_DETAILS_rec.conversion_method IS NOT NULL THEN
316         BEGIN
317           -- oe_debug_pub.add('VALIDATE Details conversion_method');
318 
319           SELECT 'X'
320           INTO l_dummy_c
321           FROM qp_lookups
322           WHERE lookup_type = 'CONVERSION_METHOD'
323           and lookup_code = p_CURR_DETAILS_rec.conversion_method;
324 
325         EXCEPTION
326         WHEN NO_DATA_FOUND THEN
327           l_return_status := FND_API.G_RET_STS_ERROR;
328           FND_MESSAGE.SET_NAME('QP','Invalid_Conversion_Method'); -- CHANGE MESG_CODE
329           OE_MSG_PUB.Add;
330 
331         END;
332       END IF;
333       */
334 
335       -- Validate detail records' conversion_type
336       IF  p_CURR_DETAILS_rec.conversion_type IS NOT NULL THEN
337         BEGIN
338           -- oe_debug_pub.add('VALIDATE Details conversion_type');
339 
340 	  -- Check if the conversion_type exists in GL
341           SELECT 'X'
342           INTO l_dummy_c
343           FROM gl_daily_conversion_types
344           WHERE conversion_type = p_CURR_DETAILS_rec.conversion_type and
345 		conversion_type <> 'User';
346 
347         EXCEPTION
348         WHEN NO_DATA_FOUND THEN
349 	  Begin
350 	     -- If conversion_type is not in GL, then check if it is defined as lookup_code
351              SELECT 'X'
352              INTO l_dummy_c
353              FROM qp_lookups
354              WHERE lookup_type = 'CONVERSION_METHOD'
355              and lookup_code = p_CURR_DETAILS_rec.conversion_type
356 	     and enabled_flag = 'Y' and
357 	     trunc(sysdate) between
358 	     nvl(start_date_active, trunc(sysdate)) and nvl(end_date_active, trunc(sysdate));
359 
360 	  EXCEPTION
361 	  WHEN NO_DATA_FOUND THEN
362 	  -- If not found in either GL or lookup_code then raise error
363 
364              l_return_status := FND_API.G_RET_STS_ERROR;
365              FND_MESSAGE.SET_NAME('QP','QP_INVALID_CONV_TYPE'); -- CHANGE MESG_CODE
366              FND_MESSAGE.SET_TOKEN('CONVERSION_TYPE',p_CURR_DETAILS_rec.conversion_type);
367              OE_MSG_PUB.Add;
368              -- oe_debug_pub.add('ERROR: Invalid Conversion_Type passed');
369 	  End;
370         END;
371       END IF;
372 
373       -- Validate detail records' conversion_date_type
374       IF  p_CURR_DETAILS_rec.conversion_date_type IS NOT NULL THEN
375         BEGIN
376           -- oe_debug_pub.add('VALIDATE Details conversion_date_type');
377 
378           SELECT 'X'
379           INTO l_dummy_c
380           FROM qp_lookups
381           WHERE lookup_type = 'CONVERSION_DATE_TYPE'
382           and lookup_code = p_CURR_DETAILS_rec.conversion_date_type
383 	  and enabled_flag = 'Y' and
384 	  trunc(sysdate) between
385 	  nvl(start_date_active, trunc(sysdate)) and nvl(end_date_active, trunc(sysdate));
386 
387         EXCEPTION
388         WHEN NO_DATA_FOUND THEN
389           l_return_status := FND_API.G_RET_STS_ERROR;
390           FND_MESSAGE.SET_NAME('QP','QP_INVALID_CONV_DT_TYPE'); -- CHANGE MESG_CODE
391           FND_MESSAGE.SET_TOKEN('CONVERSION_DATE_TYPE',p_CURR_DETAILS_rec.conversion_date_type);
392           OE_MSG_PUB.Add;
393           -- oe_debug_pub.add('ERROR: Invalid conversion_date_type');
394 
395         END;
396       END IF;
397 
398       -- Validate detail records' markup_operator
399       IF  p_CURR_DETAILS_rec.markup_operator IS NOT NULL THEN
400         BEGIN
401           -- oe_debug_pub.add('VALIDATE Details markup_operator');
402 
403           SELECT 'X'
404           INTO l_dummy_c
405           FROM qp_lookups
406           WHERE lookup_type = 'MARKUP_OPERATOR'
407           and lookup_code = p_CURR_DETAILS_rec.markup_operator
408 	  and enabled_flag = 'Y' and
409 	  trunc(sysdate) between
410 	  nvl(start_date_active, trunc(sysdate)) and nvl(end_date_active, trunc(sysdate));
411 
412           -- Validate detail records' conditional columns
413           -- Markup value or formula should be present if operator is present
414           IF ((p_CURR_DETAILS_rec.markup_formula_id IS NULL AND
415 	       p_CURR_DETAILS_rec.markup_value IS NULL)
416              )
417           THEN
418              -- oe_debug_pub.add('ERROR: Markup Formula or Value should be provided if Markup Operator is present');
419              l_return_status := FND_API.G_RET_STS_ERROR;
420              FND_MESSAGE.SET_NAME('QP','QP_FRML_OR_VAL_REQD');  -- CHANGE MESG_CODE
421              OE_MSG_PUB.Add;
422           END IF;
423 
424         EXCEPTION
425         WHEN NO_DATA_FOUND THEN
426           l_return_status := FND_API.G_RET_STS_ERROR;
427           FND_MESSAGE.SET_NAME('QP','QP_INVALID_MARKUP_OPRTR');
428           FND_MESSAGE.SET_TOKEN('MARKUP_OPERATOR',p_CURR_DETAILS_rec.markup_operator);
429           OE_MSG_PUB.Add;
430           -- oe_debug_pub.add('ERROR: Invalid markup_operator');
431 
432         END;
433       ELSE
434 
435         -- Markup Operator should be present if either value or formula is present
436         IF ((p_CURR_DETAILS_rec.markup_formula_id IS NOT NULL OR
437 	     p_CURR_DETAILS_rec.markup_value IS NOT NULL)
438            )
439         THEN
440            -- oe_debug_pub.add('ERROR: Markup Formula or Value can be provided only if Markup Operator is present');
441            l_return_status := FND_API.G_RET_STS_ERROR;
442            FND_MESSAGE.SET_NAME('QP','QP_MARKUP_OPRTR_REQD'); -- CHANGE MESG_CODE
443            OE_MSG_PUB.Add;
444         END IF;
445       END IF;
446 
447      -- Below statements Validate detail records' conditionally required columns
448      BEGIN
449        -- oe_debug_pub.add('Validate Detail Record''s conditional columns for to_currency_code: '||p_CURR_DETAILS_rec.to_currency_code);
450        -- oe_debug_pub.add('Detail record''s hdr_id: '||p_CURR_DETAILS_rec.currency_header_id);
451        -- Get the header's base currency code
452        Begin
453            SELECT base_currency_code
454 	   INTO l_base_currency_code_s
455 	   FROM QP_CURRENCY_LISTS_B
456 	   WHERE currency_header_id = p_CURR_DETAILS_rec.currency_header_id;
457        Exception
458        When NO_DATA_FOUND THEN
459           l_return_status := FND_API.G_RET_STS_ERROR;
460           FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
461           FND_MESSAGE.SET_TOKEN('ATTRIBUTE','currency_header_id');
462           OE_MSG_PUB.Add;
463        END;
464 
465        -- oe_debug_pub.add('Header Currency Code: '||l_base_currency_code_s);
466        -- --oe_debug_pub.add('Conversion Method: '||p_CURR_DETAILS_rec.CONVERSION_METHOD);
467 
468        IF  (p_CURR_DETAILS_rec.to_currency_code = l_base_currency_code_s)
469        then
470 
471           -- oe_debug_pub.add('ERROR: To_Currency_Code can not be same as Base_Currency_Code');
472           l_return_status := FND_API.G_RET_STS_ERROR;
473           FND_MESSAGE.SET_NAME('QP','QP_TO_DIFFERENT_FROM_BASE'); -- CHANGE MESG_CODE
474           OE_MSG_PUB.Add;
475 
476 	  /* This validation is obsolete now
477 	  If  (--p_CURR_DETAILS_rec.CONVERSION_METHOD is NOT NULL OR
478 	       p_CURR_DETAILS_rec.FIXED_VALUE is NOT NULL OR
479 	       p_CURR_DETAILS_rec.PRICE_FORMULA_id is NOT NULL OR
480 	       p_CURR_DETAILS_rec.CONVERSION_TYPE is NOT NULL OR
481 	       p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE is NOT NULL OR
482 	       p_CURR_DETAILS_rec.CONVERSION_DATE is NOT NULL OR
483 	       p_CURR_DETAILS_rec.START_DATE_ACTIVE is NOT NULL OR
484 	       p_CURR_DETAILS_rec.END_DATE_ACTIVE is NOT NULL )
485           then
486 
487              -- oe_debug_pub.add('ERROR: Value is not allowed in the following fields when to_currency is same as base_currency: FIXED_VALUE, PRICE_FORMULA_id, CONVERSION_TYPE, CONVERSION_DATE_TYPE, CONVERSION_DATE, START_DATE_ACTIVE, END_DATE_ACTIVE');
488              l_return_status := FND_API.G_RET_STS_ERROR;
489              FND_MESSAGE.SET_NAME('QP','QP_VALUE_NOT_ALLWD_CURR'); -- CHANGE MESG_CODE
490              OE_MSG_PUB.Add;
491           End if;
492 	  */
493 
494        ELSE -- to_currency_code is different from base_currency_code
495 
496            --IF  (p_CURR_DETAILS_rec.CONVERSION_METHOD is NULL)
497            IF  (p_CURR_DETAILS_rec.CONVERSION_TYPE is NULL)
498            THEN
499 
500               -- oe_debug_pub.add('ERROR: CONVERSION_TYPE is required when to_currency_code is different from base_currency_code');
501               l_return_status := FND_API.G_RET_STS_ERROR;
502               FND_MESSAGE.SET_NAME('QP','QP_CONV_TYPE_REQD'); -- CHANGE MESG_CODE
503               OE_MSG_PUB.Add;
504 
505            ELSIF  (p_CURR_DETAILS_rec.CONVERSION_TYPE = 'TRANSACTION')
506            THEN
507                If (p_CURR_DETAILS_rec.FIXED_VALUE is NOT NULL OR
508                    p_CURR_DETAILS_rec.PRICE_FORMULA_id is not NULL OR
509                    p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE is not NULL OR
510                    p_CURR_DETAILS_rec.CONVERSION_DATE is not NULL)
511                then
512                   -- oe_debug_pub.add('ERROR: Value is not allowed in the following fields when Conversion_Type = ''TRANSACTION'': FIXED_VALUE, PRICE_FORMULA_id, CONVERSION_DATE_TYPE, CONVERSION_DATE');
513                   l_return_status := FND_API.G_RET_STS_ERROR;
514                   FND_MESSAGE.SET_NAME('QP','QP_VALUE_NOT_ALLWD_TXN'); -- CHANGE MESG_CODE
515                   OE_MSG_PUB.Add;
516                End If;
517 
518            ELSIF  (p_CURR_DETAILS_rec.CONVERSION_TYPE = 'FIXED')
519            THEN
520                If (p_CURR_DETAILS_rec.FIXED_VALUE is NULL)
521                then
522                   -- oe_debug_pub.add('ERROR: FIXED_VALUE is required ehen Conversion_Type is ''FIXED''');
523                   l_return_status := FND_API.G_RET_STS_ERROR;
524                   FND_MESSAGE.SET_NAME('QP','QP_FIXED_VALUE_REQD'); -- CHANGE MESG_CODE
525                   OE_MSG_PUB.Add;
526                End If;
527 
528                If (p_CURR_DETAILS_rec.PRICE_FORMULA_id is not NULL OR
529                    -- p_CURR_DETAILS_rec.CONVERSION_TYPE is not NULL OR
530                    p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE is not NULL OR
531                    p_CURR_DETAILS_rec.CONVERSION_DATE is not NULL)
532                then
533                   -- oe_debug_pub.add('ERROR: Value is not allowed in the following fields when Conversion_Type = ''FIXED'': PRICE_FORMULA_id, CONVERSION_DATE_TYPE, CONVERSION_DATE');
534                   l_return_status := FND_API.G_RET_STS_ERROR;
535                   FND_MESSAGE.SET_NAME('QP','QP_VALUE_NOT_ALLWD_FIXED'); -- CHANGE MESG_CODE
536                   OE_MSG_PUB.Add;
537                End If;
538            -- ELSIF (p_CURR_DETAILS_rec.CONVERSION_METHOD = 'GL')
539            ELSIF (p_CURR_DETAILS_rec.CONVERSION_TYPE NOT IN ('FIXED', 'FORMULA', 'TRANSACTION'))
540            THEN
541                --If (p_CURR_DETAILS_rec.CONVERSION_TYPE is NULL OR
542                If (p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE is NULL)
543                then
544                   -- oe_debug_pub.add('ERROR: CONVERSION_DATE_TYPE is required when Conversion_Type is Not ''FIXED'' or ''FORMULA'' or ''TRANSACTION''');
545                   l_return_status := FND_API.G_RET_STS_ERROR;
546                   FND_MESSAGE.SET_NAME('QP','QP_CONV_DT_TYPE_REQD'); -- CHANGE MESG_CODE
547                   OE_MSG_PUB.Add;
548                End If;
549 
550     	       If (p_CURR_DETAILS_rec.PRICE_FORMULA_id is not NULL  OR
551     	           p_CURR_DETAILS_rec.FIXED_VALUE is not NULL)
552     	       then
553                   -- oe_debug_pub.add('ERROR: Value is not allowed in the following fields when Conversion_Type is Not ''FIXED'' or ''FORMULA'': PRICE_FORMULA_id, FIXED_VALUE');
554                   l_return_status := FND_API.G_RET_STS_ERROR;
555                   FND_MESSAGE.SET_NAME('QP','QP_VALUE_NOT_ALLWD_GL'); -- CHANGE MESG_CODE
556                   OE_MSG_PUB.Add;
557     	       End If;
558 
559     	       if (p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE = 'FIXED')
560     	       then
561                   if (p_CURR_DETAILS_rec.CONVERSION_DATE is NULL) then
562                      -- oe_debug_pub.add('ERROR: CONVERSION_DATE is required when CONVERSION_TYPE is Not (''FIXED'' or ''FORMULA'' or ''TRANSACTION'') and CONVERSION_DATE_TYPE = ''FIXED''');
563                      l_return_status := FND_API.G_RET_STS_ERROR;
564                      FND_MESSAGE.SET_NAME('QP','QP_CONV_DT_REQUIRED'); -- CHANGE MESG_CODE
565                      OE_MSG_PUB.Add;
566                   End if;
567     	       Else
568                   if (p_CURR_DETAILS_rec.CONVERSION_DATE is NOT NULL) then
569                      -- oe_debug_pub.add('ERROR: CONVERSION_DATE is allowed only when CONVERSION_TYPE is Not (''FIXED'' or ''FORMULA'' or ''TRANSACTION'') and CONVERSION_DATE_TYPE <> ''FIXED''');
570                      l_return_status := FND_API.G_RET_STS_ERROR;
571                      FND_MESSAGE.SET_NAME('QP','QP_CONV_DT_NOT_ALLWD'); -- CHANGE MESG_CODE
572                      OE_MSG_PUB.Add;
573                   End if;
574 
575     	       End if;
576            ELSIF (p_CURR_DETAILS_rec.CONVERSION_TYPE = 'FORMULA')
577            THEN
578     	       If p_CURR_DETAILS_rec.PRICE_FORMULA_id is NULL then
579                   -- oe_debug_pub.add('ERROR: PRICE_FORMULA_id is required for Conversion_Type = ''FORMULA''');
580                   l_return_status := FND_API.G_RET_STS_ERROR;
581                   FND_MESSAGE.SET_NAME('QP','QP_PRICE_FORMULA_REQD'); -- CHANGE MESG_CODE
582                   OE_MSG_PUB.Add;
583     	       End If;
584 
585     	       If (p_CURR_DETAILS_rec.FIXED_VALUE is not NULL OR
586     	           p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE is not NULL OR
587     	           p_CURR_DETAILS_rec.CONVERSION_DATE is not NULL)
588     	       then
589                   -- oe_debug_pub.add('ERROR: Value is not allowed in the following fields when Conversion_Type = ''FORMULA'': FIXED_VALUE, CONVERSION_DATE_TYPE, CONVERSION_DATE');
590                   -- oe_debug_pub.add('.     FIXED VALUE: '||p_CURR_DETAILS_rec.FIXED_VALUE);
591                   l_return_status := FND_API.G_RET_STS_ERROR;
592                   FND_MESSAGE.SET_NAME('QP','QP_FVAL_OR_CONV_NOT_ALLWD'); -- CHANGE MESG_CODE
593                   OE_MSG_PUB.Add;
594     	       End If;
595            END IF; -- Conversion_Type
596        END IF; -- to_currency_code = base_currency_code
597 
598 
599       -- Validate detail records' CURR_ATTRIBUTE_TYPE
600       IF  p_CURR_DETAILS_rec.curr_attribute_type IS NOT NULL THEN
601         BEGIN
602           -- oe_debug_pub.add('VALIDATE Details curr_attribute_type');
603 
604           SELECT 'X'
605           INTO l_dummy_c
606           FROM qp_lookups
607           WHERE lookup_type = 'MULTI_CURR_ATTRIBUTE_TYPE'
608           and lookup_code = p_CURR_DETAILS_rec.curr_attribute_type
609 	  and enabled_flag = 'Y' and
610 	  trunc(sysdate) between
611 	  nvl(start_date_active, trunc(sysdate)) and nvl(end_date_active, trunc(sysdate));
612 
613         EXCEPTION
614         WHEN NO_DATA_FOUND THEN
615           l_return_status := FND_API.G_RET_STS_ERROR;
616           FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
617           FND_MESSAGE.SET_TOKEN('ATTRIBUTE','CURRENCY ATTRIBUTE TYPE');
618           OE_MSG_PUB.Add;
619           -- oe_debug_pub.add('ERROR: Invalid curr_attribute_type');
620 
621         END;
622       END IF;
623 
624 
625       -- Validate that either all the curr_attribute fields are NULL or all are not NOT NULL
626       IF ( p_CURR_DETAILS_rec.curr_attribute_type IS NOT NULL AND
627 	   p_CURR_DETAILS_rec.curr_attribute_context IS NOT NULL AND
628 	   p_CURR_DETAILS_rec.curr_attribute IS NOT NULL AND
629 	   p_CURR_DETAILS_rec.curr_attribute_value IS NOT NULL )
630       THEN
631 	 -- The below logic validates the Currency Context, Attribute, and Value passed
632 
633 	 If p_CURR_DETAILS_rec.curr_attribute_type = 'QUALIFIER' then
634 	    l_flexfield_name :=  'QP_ATTR_DEFNS_QUALIFIER';
635 	 Else
636 	    l_flexfield_name :=  'QP_ATTR_DEFNS_PRICING';
637 	 End if;
638 
639          QP_UTIL.validate_qp_flexfield(flexfield_name        => l_flexfield_name
640                                       ,context               => p_CURR_DETAILS_rec.curr_attribute_context
641                                       ,attribute             => p_CURR_DETAILS_rec.curr_attribute
642                                       ,value                 => p_CURR_DETAILS_rec.curr_attribute_value
643                                       ,application_short_name=> 'QP'
644                                       ,context_flag          =>l_context_flag
645                                       ,attribute_flag        =>l_attribute_flag
646                                       ,value_flag            =>l_value_flag
647                                       ,datatype              =>l_datatype
648                                       ,precedence            =>l_precedence
649                                       ,error_code            =>l_error_code
650                                       );
651 
652          If (l_context_flag = 'N'  AND l_error_code = 7)       --  invalid context
653          Then
654             l_return_status := FND_API.G_RET_STS_ERROR;
655 
656 	    If p_CURR_DETAILS_rec.curr_attribute_type = 'PRODUCT' then
657                FND_MESSAGE.SET_NAME('QP','QP_INVALID_PROD_CONTEXT'  );
658 	    ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'PRICING' then
659                FND_MESSAGE.SET_NAME('QP','QP_INVALID_PRICING_CONTEXT'  );
660 	    ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'QUALIFIER' then
661                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
662                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CONTEXT');
663             Else
664                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
665                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','CURRENCY ATTRIBUTE CONTEXT');
666             End if;
667 
668             OE_MSG_PUB.Add;
669          End If;
670 
671          If (l_attribute_flag = 'N'  AND l_error_code = 8)       --  invalid attribute
672          Then
673             l_return_status := FND_API.G_RET_STS_ERROR;
674 
675 	    If p_CURR_DETAILS_rec.curr_attribute_type = 'PRODUCT' then
676                FND_MESSAGE.SET_NAME('QP','QP_INVALID_PROD_ATTR'  );
677 	    ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'PRICING' then
678                FND_MESSAGE.SET_NAME('QP','QP_INVALID_PRICING_ATTR'  );
679 	    ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'QUALIFIER' then
680                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
681                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE');
682             Else
683                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
684                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','CURRENCY ATTRIBUTE');
685             End if;
686 
687             OE_MSG_PUB.Add;
688          End If;
689 
690          If (l_value_flag = 'N'  AND l_error_code = 9)       --  invalid value
691          Then
692             l_return_status := FND_API.G_RET_STS_ERROR;
693 
694 	    If p_CURR_DETAILS_rec.curr_attribute_type = 'PRODUCT' then
695                FND_MESSAGE.SET_NAME('QP','QP_INVALID_PROD_VALUE'  );
696 	    ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'PRICING' then
697                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE'  );
698                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','PRICING ATTRIBUTE VALUE');
699 	    ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'QUALIFIER' then
700                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE'  );
701                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE VALUE');
702             Else
703                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
704                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','ATTRIBUTE VALUE');
705             End if;
706 
707             OE_MSG_PUB.Add;
708          End If;
709 
710 
711 	 -- Precedence should be NOT NULL
712 	 If p_CURR_DETAILS_rec.precedence IS NULL
713 	 then
714             l_return_status := FND_API.G_RET_STS_ERROR;
715             FND_MESSAGE.SET_NAME('QP','QP_PRECEDENCE_REQD'); -- CHANGE MESG_CODE
716             OE_MSG_PUB.Add;
717             -- oe_debug_pub.add('ERROR: Precedence is required when Attribute type is not NULL');
718 	 End If;  -- precedence is null
719 
720 	 -- Validate the Inventory_item_id/category_id if the type is PRODUCT and attribute
721 	 -- is PA1/PA2
722 	 IF p_CURR_DETAILS_rec.curr_attribute_context = 'ITEM' AND
723 	    p_CURR_DETAILS_rec.curr_attribute_type = 'PRODUCT'
724 	 THEN
725             IF p_CURR_DETAILS_rec.curr_attribute = 'PRICING_ATTRIBUTE1' -- Item Number
726             THEN
727                l_org_id := QP_UTIL.Get_Item_Validation_Org;
728 
729      	       BEGIN
730      	          SELECT 'X'
731                   INTO l_dummy_c
732 	          FROM mtl_system_items_kfv
733                   WHERE  inventory_item_id = to_number(p_CURR_DETAILS_rec.curr_attribute_value) and
734                          organization_id = l_org_id;
735 
736                EXCEPTION
737 	             WHEN NO_DATA_FOUND THEN
738                   l_return_status := FND_API.G_RET_STS_ERROR;
739 
740                   FND_MESSAGE.SET_NAME('QP','QP_INVALID_ITEM');
741                   FND_MESSAGE.SET_TOKEN('ITEM_ID',p_CURR_DETAILS_rec.curr_attribute_value);
742                   OE_MSG_PUB.Add;
743                   --** oe_debug_pub.add('ERROR: Invalid Inventory_Item_id provided');
744 
745                END;
746 
747 	    END IF;  --Item Number
748 
749             IF p_CURR_DETAILS_rec.curr_attribute = 'PRICING_ATTRIBUTE2'  -- Item Category
750             THEN
751 
752      	     /*  BEGIN
753      	          SELECT 'X'
754                   INTO l_dummy_c
755                   FROM qp_item_categories_v
756                   WHERE  category_id = to_number(p_CURR_DETAILS_rec.curr_attribute_value) and
757                          ROWNUM = 1;
758 
759                EXCEPTION
760 	             WHEN NO_DATA_FOUND THEN
761                   l_return_status := FND_API.G_RET_STS_ERROR;
762 
763                   FND_MESSAGE.SET_NAME('QP','QP_INVALID_ITEM_CATEGORY');
764                   FND_MESSAGE.SET_TOKEN('CATEGORY_ID',p_CURR_DETAILS_rec.curr_attribute_value);
765                   OE_MSG_PUB.Add;
766                   --** oe_debug_pub.add('ERROR: Invalid Category_id provided');
767 
768                END;*/
769 
770                -- Functional Area validation for Hierarchical Categories (sfiresto)
771                BEGIN
772 
773                  l_pte_code := fnd_profile.value('QP_PRICING_TRANSACTION_ENTITY');
774                  l_ss_code := fnd_profile.value('QP_SOURCE_SYSTEM_CODE');
775 
776                  QP_UTIL.Get_Item_Cat_Info(
777                     p_CURR_DETAILS_rec.curr_attribute_value,
778                     l_pte_code,
779                     l_ss_code,
780                     l_fna_name,
781                     l_fna_desc,
782                     l_fna_valid);
783 
784                  IF NOT l_fna_valid THEN
785 
786                    l_return_status := FND_API.G_RET_STS_ERROR;
787 
788                    FND_MESSAGE.set_name('QP', 'QP_INVALID_CAT_FUNC_PTE');
789                    FND_MESSAGE.set_token('CATID', p_CURR_DETAILS_rec.curr_attribute_value);
790                    FND_MESSAGE.set_token('PTE', l_pte_code);
791                    FND_MESSAGE.set_token('SS', l_ss_code);
792                    OE_MSG_PUB.Add;
793 
794                  END IF;
795 
796                END;
797 
798             END IF;  -- Item Category
799 	 END IF; -- curr_attribute_context = 'ITEM'
800 
801       ELSIF ( p_CURR_DETAILS_rec.curr_attribute_type IS NOT NULL OR
802 	      p_CURR_DETAILS_rec.curr_attribute_context IS NOT NULL OR
803 	      p_CURR_DETAILS_rec.curr_attribute IS NOT NULL OR
804 	      p_CURR_DETAILS_rec.curr_attribute_value IS NOT NULL )
805       THEN
806       -- This elsif checks if any of the curr_attribute is not NULL. Since the above test failed
807       -- so at least one of these attributes is NULL.
808          l_return_status := FND_API.G_RET_STS_ERROR;
809          FND_MESSAGE.SET_NAME('QP','QP_CURR_ATTRS_REQD_OR_NULL'); -- CHANGE MESG_CODE
810          OE_MSG_PUB.Add;
811          -- oe_debug_pub.add('ERROR: All of the following fields should either be NULL or NOT NULL: CURR_ATTRIBUTE_TYPE, CURR_ATTRIBUTE_CONTEXT, CURR_ATTRIBUTE, CURR_ATTRIBUTE_VALUE');
812 
813       END IF;
814 
815       -- Validate correctness and uniqueness of precedence
816       IF p_CURR_DETAILS_rec.precedence is NOT NULL then
817 	 -- Validate that the prcedence is an integer
818 	 If ( (instr(to_char(p_CURR_DETAILS_rec.precedence), '.', 1) <> 0) OR
819               (p_CURR_DETAILS_rec.precedence < 0) )
820          then
821             l_return_status := FND_API.G_RET_STS_ERROR;
822             FND_MESSAGE.SET_NAME('QP','QP_INTEGER_REQUIRED');
823             FND_MESSAGE.SET_TOKEN('ENTITY','PRECEDENCE');
824             OE_MSG_PUB.Add;
825             -- oe_debug_pub.add('ERROR: Precedence should be a positive integer value');
826 	 Else
827            -- Validate that only one active detail record exist at any point of time
828            BEGIN
829                  -- oe_debug_pub.add('VALIDATE Uniqueness of to_currency_code');
830                  For detail_rec in CURSOR_PRECEDENCE_UNIQUENESS
831    			          (p_CURR_DETAILS_rec.to_currency_code,
832    			           p_CURR_DETAILS_rec.currency_header_id,
833    			           p_CURR_DETAILS_rec.currency_detail_id,
834 			           p_CURR_DETAILS_rec.precedence)
835                  LOOP
836                     If  (
837    	              (nvl(trunc(p_CURR_DETAILS_rec.start_date_active), l_default_start_date_d) between
838    		         nvl(detail_rec.start_date_active, l_default_start_date_d) and
839    		         nvl(detail_rec.end_date_active,l_default_end_date_d)) OR
840 
841    	              (nvl(trunc(p_CURR_DETAILS_rec.end_date_active), l_default_end_date_d) between
842    		         nvl(detail_rec.start_date_active, l_default_start_date_d) and
843    		         nvl(detail_rec.end_date_active,l_default_end_date_d)) OR
844 
845    	              (nvl(trunc(p_CURR_DETAILS_rec.start_date_active), l_default_start_date_d) <=
846    		         nvl(detail_rec.start_date_active, l_default_start_date_d) and
847    	               nvl(trunc(p_CURR_DETAILS_rec.end_date_active), l_default_end_date_d) >=
848    		         nvl(detail_rec.end_date_active, l_default_end_date_d))
849                         )
850                     then
851 
852                        l_return_status := FND_API.G_RET_STS_ERROR;
853                        FND_MESSAGE.SET_NAME('QP','QP_UNIQUE_PRECEDENCE'); -- CHANGE MESG_CODE
854                        OE_MSG_PUB.Add;
855                        -- oe_debug_pub.add('ERROR: Precedence should be unique for a to_currency_code within a given period');
856 		       exit;  -- Exit the loop
857                     End if;  -- date check
858                  END LOOP;
859 
860            END;
861 
862 	 End If;  -- precedence is an integer
863 
864       END IF;  -- precedence is not NULL
865 
866                  oe_debug_pub.add('ENTITY - before rounding_factor');
867       IF  p_CURR_DETAILS_rec.rounding_factor IS NOT NULL AND
868           p_CURR_DETAILS_rec.to_currency_code IS NOT NULL THEN
869              IF NOT QP_Validate.Rounding_Factor(p_CURR_DETAILS_rec.rounding_factor,
870                                                 p_CURR_DETAILS_rec.to_currency_code) THEN
871                  oe_debug_pub.add('ENTITY rounding_factor error occured');
872                  l_return_status := FND_API.G_RET_STS_ERROR;
873              END IF;
874       END IF;
875 
876                  oe_debug_pub.add('ENTITY - before selling rounding_factor');
877       IF  p_CURR_DETAILS_rec.selling_rounding_factor IS NOT NULL AND
878           p_CURR_DETAILS_rec.to_currency_code IS NOT NULL THEN
879              IF NOT QP_Validate.Rounding_Factor(p_CURR_DETAILS_rec.selling_rounding_factor,
880                                                 p_CURR_DETAILS_rec.to_currency_code) THEN
881                  oe_debug_pub.add('ENTITY selling_rounding_factor error occured');
882                  l_return_status := FND_API.G_RET_STS_ERROR;
883              END IF;
884       END IF;
885 
886       -- Bug 2293974 - rounding factor is mandatory
887       If (p_CURR_DETAILS_rec.selling_rounding_factor is NULL  or
888           p_CURR_DETAILS_rec.selling_rounding_factor = FND_API.G_MISS_NUM )
889       then
890           l_return_status := FND_API.G_RET_STS_ERROR;
891 
892           FND_MESSAGE.SET_NAME('QP','QP_RNDG_FACTOR_REQD');
893           oe_msg_pub.add;
894 
895       end if;
896 
897      END;
898      -- Above statements Validate detail records' conditionally required columns
899 
900      -- oe_debug_pub.add('G_MSG_CONTEXT_COUNT: '||OE_MSG_PUB.G_MSG_CONTEXT_COUNT);
901      -- oe_debug_pub.add('Coming Out of CDT L package');
902     -- Above validations Added by Sunil Pandey
903 
904 
905     --  Return Error if a required attribute is missing.
906 
907     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
908 
909         RAISE FND_API.G_EXC_ERROR;
910 
911     END IF;
912 
913     --
914     --  Check conditionally required attributes here.
915     --
916 
917 
918     --
919     --  Validate attribute dependencies here.
920     --
921     --Raise a warning if the Pricing/Product Attribute being used in setup
922     --has a sourcing method of 'ATTRIBUTE MAPPING' but is not sourcing-enabled
923     --or if its sourcing_status is not 'Y', i.e., the build sourcing conc.
924     --program has to be run.
925 
926     oe_debug_pub.add('Here 0000');
927   IF qp_util.attrmgr_installed = 'Y' THEN
928     oe_debug_pub.add('Here 1111');
929     IF p_CURR_DETAILS_rec.curr_attribute_context IS NOT NULL AND
930        p_CURR_DETAILS_rec.curr_attribute IS NOT NULL
931     THEN
932     oe_debug_pub.add('Here 2222');
933       If p_CURR_DETAILS_rec.curr_attribute_type = 'QUALIFIER' then
934          QP_UTIL.Get_Context_Type('QP_ATTR_DEFNS_QUALIFIER',
935                                   p_CURR_DETAILS_rec.curr_attribute_context,
936                                   l_context_type,
937                                   l_error_code);
938       else
939          QP_UTIL.Get_Context_Type('QP_ATTR_DEFNS_PRICING',
940                                   p_CURR_DETAILS_rec.curr_attribute_context,
941                                   l_context_type,
942                                   l_error_code);
943       End if;
944 
945       IF l_error_code = 0 THEN --successfully returned context_type
946 
947     oe_debug_pub.add('Here 3333');
948     oe_debug_pub.add('l_context_type = ' || l_context_type);
949     oe_debug_pub.add('p_CURR_DETAILS_rec.curr_attribute_context = ' || p_CURR_DETAILS_rec.curr_attribute_context);
950     oe_debug_pub.add('p_CURR_DETAILS_rec.curr_attribute = ' || p_CURR_DETAILS_rec.curr_attribute);
951         QP_UTIL.Get_Sourcing_Info(l_context_type,
952                                   p_CURR_DETAILS_rec.curr_attribute_context,
953                                   p_CURR_DETAILS_rec.curr_attribute,
954                                   l_sourcing_enabled,
955                                   l_sourcing_status,
956                                   l_sourcing_method);
957 
958     oe_debug_pub.add('l_sourcing_method = ' || l_sourcing_method);
959         IF l_sourcing_method = 'ATTRIBUTE MAPPING' THEN
960 
961     oe_debug_pub.add('Here 4444');
962           IF l_sourcing_enabled <> 'Y' THEN
963 
964     oe_debug_pub.add('Here 5555');
965             FND_MESSAGE.SET_NAME('QP','QP_ENABLE_SOURCING');
966             FND_MESSAGE.SET_TOKEN('CONTEXT',
967                                   p_CURR_DETAILS_rec.curr_attribute_context);
968             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
969                                   p_CURR_DETAILS_rec.curr_attribute);
970             OE_MSG_PUB.Add;
971 
972           END IF;
973 
974           IF l_sourcing_status <> 'Y' THEN
975 
976     oe_debug_pub.add('Here 6666');
977             FND_MESSAGE.SET_NAME('QP','QP_BUILD_SOURCING_RULES');
978             FND_MESSAGE.SET_TOKEN('CONTEXT',
979                                   p_CURR_DETAILS_rec.curr_attribute_context);
980             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
981                                   p_CURR_DETAILS_rec.curr_attribute);
982             OE_MSG_PUB.Add;
983 
984           END IF;
985 
986         END IF; --If sourcing_method = 'ATTRIBUTE MAPPING'
987 
988       END IF; --l_error_code = 0
989 
990     END IF;--If curr_attribute_context and curr_attribute are NOT NULL
991 
992   END IF; --qp_util.attrmgr_installed = 'Y'
993 
994 
995     --  Done validating entity
996 
997     x_return_status := l_return_status;
998 
999 EXCEPTION
1000 
1001     WHEN FND_API.G_EXC_ERROR THEN
1002 
1003         x_return_status := FND_API.G_RET_STS_ERROR;
1004 
1005     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1006 
1007         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1008 
1009     WHEN OTHERS THEN
1010 
1011         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1012 
1013         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1014         THEN
1015             OE_MSG_PUB.Add_Exc_Msg
1016             (   G_PKG_NAME
1017             ,   'Entity'
1018             );
1019         END IF;
1020 
1021 END Entity;
1022 
1023 --  Procedure Attributes
1024 
1025 PROCEDURE Attributes
1026 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1027 ,   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
1028 ,   p_old_CURR_DETAILS_rec          IN  QP_Currency_PUB.Curr_Details_Rec_Type :=
1029                                         QP_Currency_PUB.G_MISS_CURR_DETAILS_REC
1030 )
1031 IS
1032 BEGIN
1033 
1034     x_return_status := FND_API.G_RET_STS_SUCCESS;
1035 
1036     --  Validate CURR_DETAILS attributes
1037 
1038     IF  p_CURR_DETAILS_rec.conversion_date IS NOT NULL AND
1039         (   p_CURR_DETAILS_rec.conversion_date <>
1040             p_old_CURR_DETAILS_rec.conversion_date OR
1041             p_old_CURR_DETAILS_rec.conversion_date IS NULL )
1042     THEN
1043         IF NOT QP_Validate.Conversion_Date(p_CURR_DETAILS_rec.conversion_date) THEN
1044             x_return_status := FND_API.G_RET_STS_ERROR;
1045         END IF;
1046     END IF;
1047 
1048     IF  p_CURR_DETAILS_rec.conversion_date_type IS NOT NULL AND
1049         (   p_CURR_DETAILS_rec.conversion_date_type <>
1050             p_old_CURR_DETAILS_rec.conversion_date_type OR
1051             p_old_CURR_DETAILS_rec.conversion_date_type IS NULL )
1052     THEN
1053         IF NOT QP_Validate.Conversion_Date_Type(p_CURR_DETAILS_rec.conversion_date_type) THEN
1054             x_return_status := FND_API.G_RET_STS_ERROR;
1055         END IF;
1056     END IF;
1057 
1058     /*
1059     IF  p_CURR_DETAILS_rec.conversion_method IS NOT NULL AND
1060         (   p_CURR_DETAILS_rec.conversion_method <>
1061             p_old_CURR_DETAILS_rec.conversion_method OR
1062             p_old_CURR_DETAILS_rec.conversion_method IS NULL )
1063     THEN
1064         IF NOT QP_Validate.Conversion_Method(p_CURR_DETAILS_rec.conversion_method) THEN
1065             x_return_status := FND_API.G_RET_STS_ERROR;
1066         END IF;
1067     END IF;
1068     */
1069 
1070     IF  p_CURR_DETAILS_rec.conversion_type IS NOT NULL AND
1071         (   p_CURR_DETAILS_rec.conversion_type <>
1072             p_old_CURR_DETAILS_rec.conversion_type OR
1073             p_old_CURR_DETAILS_rec.conversion_type IS NULL )
1074     THEN
1075         IF NOT QP_Validate.Conversion_Type(p_CURR_DETAILS_rec.conversion_type) THEN
1076             x_return_status := FND_API.G_RET_STS_ERROR;
1077         END IF;
1078     END IF;
1079 
1080     IF  p_CURR_DETAILS_rec.created_by IS NOT NULL AND
1081         (   p_CURR_DETAILS_rec.created_by <>
1082             p_old_CURR_DETAILS_rec.created_by OR
1083             p_old_CURR_DETAILS_rec.created_by IS NULL )
1084     THEN
1085         IF NOT QP_Validate.Created_By(p_CURR_DETAILS_rec.created_by) THEN
1086             x_return_status := FND_API.G_RET_STS_ERROR;
1087         END IF;
1088     END IF;
1089 
1090     IF  p_CURR_DETAILS_rec.creation_date IS NOT NULL AND
1091         (   p_CURR_DETAILS_rec.creation_date <>
1092             p_old_CURR_DETAILS_rec.creation_date OR
1093             p_old_CURR_DETAILS_rec.creation_date IS NULL )
1094     THEN
1095         IF NOT QP_Validate.Creation_Date(p_CURR_DETAILS_rec.creation_date) THEN
1096             x_return_status := FND_API.G_RET_STS_ERROR;
1097         END IF;
1098     END IF;
1099 
1100     IF  p_CURR_DETAILS_rec.currency_detail_id IS NOT NULL AND
1101         (   p_CURR_DETAILS_rec.currency_detail_id <>
1102             p_old_CURR_DETAILS_rec.currency_detail_id OR
1103             p_old_CURR_DETAILS_rec.currency_detail_id IS NULL )
1104     THEN
1105         IF NOT QP_Validate.Currency_Detail(p_CURR_DETAILS_rec.currency_detail_id) THEN
1106             x_return_status := FND_API.G_RET_STS_ERROR;
1107         END IF;
1108     END IF;
1109 
1110     IF  p_CURR_DETAILS_rec.currency_header_id IS NOT NULL AND
1111         (   p_CURR_DETAILS_rec.currency_header_id <>
1112             p_old_CURR_DETAILS_rec.currency_header_id OR
1113             p_old_CURR_DETAILS_rec.currency_header_id IS NULL )
1114     THEN
1115         IF NOT QP_Validate.Currency_Header(p_CURR_DETAILS_rec.currency_header_id) THEN
1116             x_return_status := FND_API.G_RET_STS_ERROR;
1117         END IF;
1118     END IF;
1119 
1120     IF  p_CURR_DETAILS_rec.end_date_active IS NOT NULL AND
1121         (   p_CURR_DETAILS_rec.end_date_active <>
1122             p_old_CURR_DETAILS_rec.end_date_active OR
1123             p_old_CURR_DETAILS_rec.end_date_active IS NULL )
1124     THEN
1125         IF NOT QP_Validate.End_Date_Active(p_CURR_DETAILS_rec.end_date_active) THEN
1126             x_return_status := FND_API.G_RET_STS_ERROR;
1127         END IF;
1128     END IF;
1129 
1130     IF  p_CURR_DETAILS_rec.fixed_value IS NOT NULL AND
1131         (   p_CURR_DETAILS_rec.fixed_value <>
1132             p_old_CURR_DETAILS_rec.fixed_value OR
1133             p_old_CURR_DETAILS_rec.fixed_value IS NULL )
1134     THEN
1135         IF NOT QP_Validate.Fixed_Value(p_CURR_DETAILS_rec.fixed_value) THEN
1136             x_return_status := FND_API.G_RET_STS_ERROR;
1137         END IF;
1138     END IF;
1139 
1140     IF  p_CURR_DETAILS_rec.last_updated_by IS NOT NULL AND
1141         (   p_CURR_DETAILS_rec.last_updated_by <>
1142             p_old_CURR_DETAILS_rec.last_updated_by OR
1143             p_old_CURR_DETAILS_rec.last_updated_by IS NULL )
1144     THEN
1145         IF NOT QP_Validate.Last_Updated_By(p_CURR_DETAILS_rec.last_updated_by) THEN
1146             x_return_status := FND_API.G_RET_STS_ERROR;
1147         END IF;
1148     END IF;
1149 
1150     IF  p_CURR_DETAILS_rec.last_update_date IS NOT NULL AND
1151         (   p_CURR_DETAILS_rec.last_update_date <>
1152             p_old_CURR_DETAILS_rec.last_update_date OR
1153             p_old_CURR_DETAILS_rec.last_update_date IS NULL )
1154     THEN
1155         IF NOT QP_Validate.Last_Update_Date(p_CURR_DETAILS_rec.last_update_date) THEN
1156             x_return_status := FND_API.G_RET_STS_ERROR;
1157         END IF;
1158     END IF;
1159 
1160     IF  p_CURR_DETAILS_rec.last_update_login IS NOT NULL AND
1161         (   p_CURR_DETAILS_rec.last_update_login <>
1162             p_old_CURR_DETAILS_rec.last_update_login OR
1163             p_old_CURR_DETAILS_rec.last_update_login IS NULL )
1164     THEN
1165         IF NOT QP_Validate.Last_Update_Login(p_CURR_DETAILS_rec.last_update_login) THEN
1166             x_return_status := FND_API.G_RET_STS_ERROR;
1167         END IF;
1168     END IF;
1169 
1170     IF  p_CURR_DETAILS_rec.markup_formula_id IS NOT NULL AND
1171         (   p_CURR_DETAILS_rec.markup_formula_id <>
1172             p_old_CURR_DETAILS_rec.markup_formula_id OR
1173             p_old_CURR_DETAILS_rec.markup_formula_id IS NULL )
1174     THEN
1175         IF NOT QP_Validate.Markup_Formula(p_CURR_DETAILS_rec.markup_formula_id) THEN
1176             x_return_status := FND_API.G_RET_STS_ERROR;
1177         END IF;
1178     END IF;
1179 
1180     IF  p_CURR_DETAILS_rec.markup_operator IS NOT NULL AND
1181         (   p_CURR_DETAILS_rec.markup_operator <>
1182             p_old_CURR_DETAILS_rec.markup_operator OR
1183             p_old_CURR_DETAILS_rec.markup_operator IS NULL )
1184     THEN
1185         IF NOT QP_Validate.Markup_Operator(p_CURR_DETAILS_rec.markup_operator) THEN
1186             x_return_status := FND_API.G_RET_STS_ERROR;
1187         END IF;
1188     END IF;
1189 
1190     IF  p_CURR_DETAILS_rec.markup_value IS NOT NULL AND
1191         (   p_CURR_DETAILS_rec.markup_value <>
1192             p_old_CURR_DETAILS_rec.markup_value OR
1193             p_old_CURR_DETAILS_rec.markup_value IS NULL )
1194     THEN
1195         IF NOT QP_Validate.Markup_Value(p_CURR_DETAILS_rec.markup_value) THEN
1196             x_return_status := FND_API.G_RET_STS_ERROR;
1197         END IF;
1198     END IF;
1199 
1200     IF  p_CURR_DETAILS_rec.price_formula_id IS NOT NULL AND
1201         (   p_CURR_DETAILS_rec.price_formula_id <>
1202             p_old_CURR_DETAILS_rec.price_formula_id OR
1203             p_old_CURR_DETAILS_rec.price_formula_id IS NULL )
1204     THEN
1205         IF NOT QP_Validate.Price_Formula(p_CURR_DETAILS_rec.price_formula_id) THEN
1206             x_return_status := FND_API.G_RET_STS_ERROR;
1207         END IF;
1208     END IF;
1209 
1210     IF  p_CURR_DETAILS_rec.program_application_id IS NOT NULL AND
1211         (   p_CURR_DETAILS_rec.program_application_id <>
1212             p_old_CURR_DETAILS_rec.program_application_id OR
1213             p_old_CURR_DETAILS_rec.program_application_id IS NULL )
1214     THEN
1215         IF NOT QP_Validate.Program_Application(p_CURR_DETAILS_rec.program_application_id) THEN
1216             x_return_status := FND_API.G_RET_STS_ERROR;
1217         END IF;
1218     END IF;
1219 
1220     IF  p_CURR_DETAILS_rec.program_id IS NOT NULL AND
1221         (   p_CURR_DETAILS_rec.program_id <>
1222             p_old_CURR_DETAILS_rec.program_id OR
1223             p_old_CURR_DETAILS_rec.program_id IS NULL )
1224     THEN
1225         IF NOT QP_Validate.Program(p_CURR_DETAILS_rec.program_id) THEN
1226             x_return_status := FND_API.G_RET_STS_ERROR;
1227         END IF;
1228     END IF;
1229 
1230     IF  p_CURR_DETAILS_rec.program_update_date IS NOT NULL AND
1231         (   p_CURR_DETAILS_rec.program_update_date <>
1232             p_old_CURR_DETAILS_rec.program_update_date OR
1233             p_old_CURR_DETAILS_rec.program_update_date IS NULL )
1234     THEN
1235         IF NOT QP_Validate.Program_Update_Date(p_CURR_DETAILS_rec.program_update_date) THEN
1236             x_return_status := FND_API.G_RET_STS_ERROR;
1237         END IF;
1238     END IF;
1239 
1240     IF  p_CURR_DETAILS_rec.request_id IS NOT NULL AND
1241         (   p_CURR_DETAILS_rec.request_id <>
1242             p_old_CURR_DETAILS_rec.request_id OR
1243             p_old_CURR_DETAILS_rec.request_id IS NULL )
1244     THEN
1245         IF NOT QP_Validate.Request(p_CURR_DETAILS_rec.request_id) THEN
1246             x_return_status := FND_API.G_RET_STS_ERROR;
1247         END IF;
1248     END IF;
1249 
1250     IF  p_CURR_DETAILS_rec.rounding_factor IS NOT NULL AND
1251         (   p_CURR_DETAILS_rec.rounding_factor <>
1252             p_old_CURR_DETAILS_rec.rounding_factor OR
1253             p_old_CURR_DETAILS_rec.rounding_factor IS NULL )
1254     THEN
1255         IF NOT QP_Validate.Rounding_Factor(p_CURR_DETAILS_rec.rounding_factor) THEN
1256             x_return_status := FND_API.G_RET_STS_ERROR;
1257         END IF;
1258     END IF;
1259 
1260     IF  p_CURR_DETAILS_rec.selling_rounding_factor IS NOT NULL AND
1261         (   p_CURR_DETAILS_rec.selling_rounding_factor <>
1262             p_old_CURR_DETAILS_rec.selling_rounding_factor OR
1263             p_old_CURR_DETAILS_rec.selling_rounding_factor IS NULL )
1264     THEN
1265         IF NOT QP_Validate.Rounding_Factor(p_CURR_DETAILS_rec.selling_rounding_factor) THEN
1266             x_return_status := FND_API.G_RET_STS_ERROR;
1267         END IF;
1268     END IF;
1269 
1270     IF  p_CURR_DETAILS_rec.start_date_active IS NOT NULL AND
1271         (   p_CURR_DETAILS_rec.start_date_active <>
1272             p_old_CURR_DETAILS_rec.start_date_active OR
1273             p_old_CURR_DETAILS_rec.start_date_active IS NULL )
1274     THEN
1275         IF NOT QP_Validate.Start_Date_Active(p_CURR_DETAILS_rec.start_date_active) THEN
1276             x_return_status := FND_API.G_RET_STS_ERROR;
1277         END IF;
1278     END IF;
1279 
1280     IF  p_CURR_DETAILS_rec.to_currency_code IS NOT NULL AND
1281         (   p_CURR_DETAILS_rec.to_currency_code <>
1282             p_old_CURR_DETAILS_rec.to_currency_code OR
1283             p_old_CURR_DETAILS_rec.to_currency_code IS NULL )
1284     THEN
1285         IF NOT QP_Validate.To_Currency(p_CURR_DETAILS_rec.to_currency_code) THEN
1286             x_return_status := FND_API.G_RET_STS_ERROR;
1287         END IF;
1288     END IF;
1289 
1290     IF  p_CURR_DETAILS_rec.curr_attribute_type IS NOT NULL AND
1291         (   p_CURR_DETAILS_rec.curr_attribute_type <>
1292             p_old_CURR_DETAILS_rec.curr_attribute_type OR
1293             p_old_CURR_DETAILS_rec.curr_attribute_type IS NULL )
1294     THEN
1295         IF NOT QP_Validate.Curr_Attribute_Type(p_CURR_DETAILS_rec.curr_attribute_type) THEN
1296             x_return_status := FND_API.G_RET_STS_ERROR;
1297         END IF;
1298     END IF;
1299 
1300     IF  p_CURR_DETAILS_rec.curr_attribute_context IS NOT NULL AND
1301         (   p_CURR_DETAILS_rec.curr_attribute_context <>
1302             p_old_CURR_DETAILS_rec.curr_attribute_context OR
1303             p_old_CURR_DETAILS_rec.curr_attribute_context IS NULL )
1304     THEN
1305         IF NOT QP_Validate.Curr_Attribute_Context(p_CURR_DETAILS_rec.curr_attribute_context) THEN
1306             x_return_status := FND_API.G_RET_STS_ERROR;
1307         END IF;
1308     END IF;
1309 
1310     IF  p_CURR_DETAILS_rec.curr_attribute IS NOT NULL AND
1311         (   p_CURR_DETAILS_rec.curr_attribute <>
1312             p_old_CURR_DETAILS_rec.curr_attribute OR
1313             p_old_CURR_DETAILS_rec.curr_attribute IS NULL )
1314     THEN
1315         IF NOT QP_Validate.Curr_Attribute(p_CURR_DETAILS_rec.curr_attribute) THEN
1316             x_return_status := FND_API.G_RET_STS_ERROR;
1317         END IF;
1318     END IF;
1319 
1320     IF  p_CURR_DETAILS_rec.curr_attribute_value IS NOT NULL AND
1321         (   p_CURR_DETAILS_rec.curr_attribute_value <>
1322             p_old_CURR_DETAILS_rec.curr_attribute_value OR
1323             p_old_CURR_DETAILS_rec.curr_attribute_value IS NULL )
1324     THEN
1325         IF NOT QP_Validate.Curr_Attribute_Value(p_CURR_DETAILS_rec.curr_attribute_value) THEN
1326             x_return_status := FND_API.G_RET_STS_ERROR;
1327         END IF;
1328     END IF;
1329 
1330     IF  p_CURR_DETAILS_rec.precedence IS NOT NULL AND
1331         (   p_CURR_DETAILS_rec.precedence <>
1332             p_old_CURR_DETAILS_rec.precedence OR
1333             p_old_CURR_DETAILS_rec.precedence IS NULL )
1334     THEN
1335         IF NOT QP_Validate.Precedence(p_CURR_DETAILS_rec.precedence) THEN
1336             x_return_status := FND_API.G_RET_STS_ERROR;
1337         END IF;
1338     END IF;
1339 
1340     IF  (p_CURR_DETAILS_rec.attribute1 IS NOT NULL AND
1341         (   p_CURR_DETAILS_rec.attribute1 <>
1342             p_old_CURR_DETAILS_rec.attribute1 OR
1343             p_old_CURR_DETAILS_rec.attribute1 IS NULL ))
1344     OR  (p_CURR_DETAILS_rec.attribute10 IS NOT NULL AND
1345         (   p_CURR_DETAILS_rec.attribute10 <>
1346             p_old_CURR_DETAILS_rec.attribute10 OR
1347             p_old_CURR_DETAILS_rec.attribute10 IS NULL ))
1348     OR  (p_CURR_DETAILS_rec.attribute11 IS NOT NULL AND
1349         (   p_CURR_DETAILS_rec.attribute11 <>
1350             p_old_CURR_DETAILS_rec.attribute11 OR
1351             p_old_CURR_DETAILS_rec.attribute11 IS NULL ))
1352     OR  (p_CURR_DETAILS_rec.attribute12 IS NOT NULL AND
1353         (   p_CURR_DETAILS_rec.attribute12 <>
1354             p_old_CURR_DETAILS_rec.attribute12 OR
1355             p_old_CURR_DETAILS_rec.attribute12 IS NULL ))
1356     OR  (p_CURR_DETAILS_rec.attribute13 IS NOT NULL AND
1357         (   p_CURR_DETAILS_rec.attribute13 <>
1358             p_old_CURR_DETAILS_rec.attribute13 OR
1359             p_old_CURR_DETAILS_rec.attribute13 IS NULL ))
1360     OR  (p_CURR_DETAILS_rec.attribute14 IS NOT NULL AND
1361         (   p_CURR_DETAILS_rec.attribute14 <>
1362             p_old_CURR_DETAILS_rec.attribute14 OR
1363             p_old_CURR_DETAILS_rec.attribute14 IS NULL ))
1364     OR  (p_CURR_DETAILS_rec.attribute15 IS NOT NULL AND
1365         (   p_CURR_DETAILS_rec.attribute15 <>
1366             p_old_CURR_DETAILS_rec.attribute15 OR
1367             p_old_CURR_DETAILS_rec.attribute15 IS NULL ))
1368     OR  (p_CURR_DETAILS_rec.attribute2 IS NOT NULL AND
1369         (   p_CURR_DETAILS_rec.attribute2 <>
1370             p_old_CURR_DETAILS_rec.attribute2 OR
1371             p_old_CURR_DETAILS_rec.attribute2 IS NULL ))
1372     OR  (p_CURR_DETAILS_rec.attribute3 IS NOT NULL AND
1373         (   p_CURR_DETAILS_rec.attribute3 <>
1374             p_old_CURR_DETAILS_rec.attribute3 OR
1375             p_old_CURR_DETAILS_rec.attribute3 IS NULL ))
1376     OR  (p_CURR_DETAILS_rec.attribute4 IS NOT NULL AND
1377         (   p_CURR_DETAILS_rec.attribute4 <>
1378             p_old_CURR_DETAILS_rec.attribute4 OR
1379             p_old_CURR_DETAILS_rec.attribute4 IS NULL ))
1380     OR  (p_CURR_DETAILS_rec.attribute5 IS NOT NULL AND
1381         (   p_CURR_DETAILS_rec.attribute5 <>
1382             p_old_CURR_DETAILS_rec.attribute5 OR
1383             p_old_CURR_DETAILS_rec.attribute5 IS NULL ))
1384     OR  (p_CURR_DETAILS_rec.attribute6 IS NOT NULL AND
1385         (   p_CURR_DETAILS_rec.attribute6 <>
1386             p_old_CURR_DETAILS_rec.attribute6 OR
1387             p_old_CURR_DETAILS_rec.attribute6 IS NULL ))
1388     OR  (p_CURR_DETAILS_rec.attribute7 IS NOT NULL AND
1389         (   p_CURR_DETAILS_rec.attribute7 <>
1390             p_old_CURR_DETAILS_rec.attribute7 OR
1391             p_old_CURR_DETAILS_rec.attribute7 IS NULL ))
1392     OR  (p_CURR_DETAILS_rec.attribute8 IS NOT NULL AND
1393         (   p_CURR_DETAILS_rec.attribute8 <>
1394             p_old_CURR_DETAILS_rec.attribute8 OR
1395             p_old_CURR_DETAILS_rec.attribute8 IS NULL ))
1396     OR  (p_CURR_DETAILS_rec.attribute9 IS NOT NULL AND
1397         (   p_CURR_DETAILS_rec.attribute9 <>
1398             p_old_CURR_DETAILS_rec.attribute9 OR
1399             p_old_CURR_DETAILS_rec.attribute9 IS NULL ))
1400     OR  (p_CURR_DETAILS_rec.context IS NOT NULL AND
1401         (   p_CURR_DETAILS_rec.context <>
1402             p_old_CURR_DETAILS_rec.context OR
1403             p_old_CURR_DETAILS_rec.context IS NULL ))
1404     THEN
1405 
1406     --  These calls are temporarily commented out
1407 
1408 /*
1409         FND_FLEX_DESC_VAL.Set_Column_Value
1410         (   column_name                   => 'ATTRIBUTE1'
1411         ,   column_value                  => p_CURR_DETAILS_rec.attribute1
1412         );
1413         FND_FLEX_DESC_VAL.Set_Column_Value
1414         (   column_name                   => 'ATTRIBUTE10'
1415         ,   column_value                  => p_CURR_DETAILS_rec.attribute10
1416         );
1417         FND_FLEX_DESC_VAL.Set_Column_Value
1418         (   column_name                   => 'ATTRIBUTE11'
1419         ,   column_value                  => p_CURR_DETAILS_rec.attribute11
1420         );
1421         FND_FLEX_DESC_VAL.Set_Column_Value
1422         (   column_name                   => 'ATTRIBUTE12'
1423         ,   column_value                  => p_CURR_DETAILS_rec.attribute12
1424         );
1425         FND_FLEX_DESC_VAL.Set_Column_Value
1426         (   column_name                   => 'ATTRIBUTE13'
1427         ,   column_value                  => p_CURR_DETAILS_rec.attribute13
1428         );
1429         FND_FLEX_DESC_VAL.Set_Column_Value
1430         (   column_name                   => 'ATTRIBUTE14'
1431         ,   column_value                  => p_CURR_DETAILS_rec.attribute14
1432         );
1433         FND_FLEX_DESC_VAL.Set_Column_Value
1434         (   column_name                   => 'ATTRIBUTE15'
1435         ,   column_value                  => p_CURR_DETAILS_rec.attribute15
1436         );
1437         FND_FLEX_DESC_VAL.Set_Column_Value
1438         (   column_name                   => 'ATTRIBUTE2'
1439         ,   column_value                  => p_CURR_DETAILS_rec.attribute2
1440         );
1441         FND_FLEX_DESC_VAL.Set_Column_Value
1442         (   column_name                   => 'ATTRIBUTE3'
1443         ,   column_value                  => p_CURR_DETAILS_rec.attribute3
1444         );
1445         FND_FLEX_DESC_VAL.Set_Column_Value
1446         (   column_name                   => 'ATTRIBUTE4'
1447         ,   column_value                  => p_CURR_DETAILS_rec.attribute4
1448         );
1449         FND_FLEX_DESC_VAL.Set_Column_Value
1450         (   column_name                   => 'ATTRIBUTE5'
1451         ,   column_value                  => p_CURR_DETAILS_rec.attribute5
1452         );
1453         FND_FLEX_DESC_VAL.Set_Column_Value
1454         (   column_name                   => 'ATTRIBUTE6'
1455         ,   column_value                  => p_CURR_DETAILS_rec.attribute6
1456         );
1457         FND_FLEX_DESC_VAL.Set_Column_Value
1458         (   column_name                   => 'ATTRIBUTE7'
1459         ,   column_value                  => p_CURR_DETAILS_rec.attribute7
1460         );
1461         FND_FLEX_DESC_VAL.Set_Column_Value
1462         (   column_name                   => 'ATTRIBUTE8'
1463         ,   column_value                  => p_CURR_DETAILS_rec.attribute8
1464         );
1465         FND_FLEX_DESC_VAL.Set_Column_Value
1466         (   column_name                   => 'ATTRIBUTE9'
1467         ,   column_value                  => p_CURR_DETAILS_rec.attribute9
1468         );
1469         FND_FLEX_DESC_VAL.Set_Column_Value
1470         (   column_name                   => 'CONTEXT'
1471         ,   column_value                  => p_CURR_DETAILS_rec.context
1472         );
1473 */
1474 
1475         --  Validate descriptive flexfield.
1476 
1477         IF NOT QP_Validate.Desc_Flex( 'CURR_DETAILS' ) THEN
1478             x_return_status := FND_API.G_RET_STS_ERROR;
1479         END IF;
1480 
1481     END IF;
1482 
1483     --  Done validating attributes
1484 
1485 EXCEPTION
1486 
1487     WHEN FND_API.G_EXC_ERROR THEN
1488 
1489         x_return_status := FND_API.G_RET_STS_ERROR;
1490 
1491     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1492 
1493         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1494 
1495     WHEN OTHERS THEN
1496 
1497         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1498 
1499         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1500         THEN
1501             OE_MSG_PUB.Add_Exc_Msg
1502             (   G_PKG_NAME
1503             ,   'Attributes'
1504             );
1505         END IF;
1506 
1507 END Attributes;
1508 
1509 --  Procedure Entity_Delete
1510 
1511 PROCEDURE Entity_Delete
1512 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1513 ,   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
1514 )
1515 IS
1516 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
1517 BEGIN
1518 
1519     --  Validate entity delete.
1520 
1521     NULL;
1522 
1523     --  Done.
1524 
1525     x_return_status := l_return_status;
1526 
1527 EXCEPTION
1528 
1529     WHEN FND_API.G_EXC_ERROR THEN
1530 
1531         x_return_status := FND_API.G_RET_STS_ERROR;
1532 
1533     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1534 
1535         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1536 
1537     WHEN OTHERS THEN
1538 
1539         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1540 
1541         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1542         THEN
1543             OE_MSG_PUB.Add_Exc_Msg
1544             (   G_PKG_NAME
1545             ,   'Entity_Delete'
1546             );
1547         END IF;
1548 
1549 END Entity_Delete;
1550 
1551 END QP_Validate_Curr_Details;