DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_VALIDATE_PLL_PRICING_ATTR

Source


1 PACKAGE BODY QP_Validate_pll_pricing_attr AS
2 /* $Header: QPXLPLAB.pls 120.9.12010000.2 2008/10/15 14:08:29 jputta ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'Qp_Validate_pll_pricing_attr';
7 
8 --  Procedure Entity
9 
10 PROCEDURE Entity
11 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
12 ,   p_PRICING_ATTR_rec              IN  QP_Price_List_PUB.Pricing_Attr_Rec_Type
13 ,   p_old_PRICING_ATTR_rec          IN  QP_Price_List_PUB.Pricing_Attr_Rec_Type :=
14                                         QP_Price_List_PUB.G_MISS_PRICING_ATTR_REC
15 )
16 IS
17 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
18 l_revision VARCHAR2(30);
19 l_start_date_active DATE;
20 l_end_date_active DATE;
21 l_list_header_id NUMBER;
22 l_comparison_operator_code VARCHAR2(30);
23 l_error_code NUMBER;
24 l_precedence NUMBER;
25 l_datatype FND_FLEX_VALUE_SETS.Format_type%TYPE;
26 l_value_error                 VARCHAR2(1);
27 l_context_error               VARCHAR2(1);
28 l_attribute_error             VARCHAR2(1);
29 l_x_rows NUMBER := 0;
30 l_count  NUMBER := 0;
31 l_primary_uom_flag            VARCHAR2(1);
32 l_from_rltd_modifier_id  NUMBER;
33 
34 l_context_type                VARCHAR2(30);
35 l_sourcing_enabled            VARCHAR2(1);
36 l_sourcing_status             VARCHAR2(1);
37 l_sourcing_method             VARCHAR2(30);
38 
39 -- Modified by rassharm for Bug No 5457704
40 l_edate                       DATE;
41 l_sdate                       DATE;
42 l_min_date                    DATE;
43 l_max_date                    DATE;
44 
45 l_pte_code                    VARCHAR2(30);
46 l_ss_code                     VARCHAR2(30);
47 l_fna_name                    VARCHAR2(4000);
48 l_fna_desc                    VARCHAR2(489);
49 l_fna_valid                   BOOLEAN;
50 
51 l_dummy	varchar2(30);
52 l_continuous_price_break_flag     VARCHAR2(1); --Continuous Price Breaks
53 BEGIN
54 
55     --  Check required attributes.
56 
57     IF  p_PRICING_ATTR_rec.pricing_attribute_id IS NULL
58     THEN
59 
60         l_return_status := FND_API.G_RET_STS_ERROR;
61 
62         IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
63         THEN
64 
65             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
66             FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Pricing Attribute Id');
67             oe_msg_pub.Add;
68 
69         END IF;
70 
71     END IF;
72 
73 --5286339
74 
75  IF p_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_UPDATE
76     THEN
77 
78     IF  nvl(p_old_PRICING_ATTR_rec.PRODUCT_ATTRIBUTE_CONTEXT,'X') <>
79        nvl(p_PRICING_ATTR_rec.PRODUCT_ATTRIBUTE_CONTEXT,'X')
80          THEN
81        l_return_status := FND_API.G_RET_STS_ERROR;
82 
83        FND_MESSAGE.SET_NAME('QP','QP_CANNOT_UPDATE_ATTRIBUTE');
84        FND_MESSAGE.SET_TOKEN('ATTRIBUTE','product_attribute_context');
85        OE_MSG_PUB.Add;
86 
87     END IF;
88 
89    IF  nvl(p_old_PRICING_ATTR_rec.PRODUCT_ATTRIBUTE,'X') <>
90        nvl(p_PRICING_ATTR_rec.PRODUCT_ATTRIBUTE,'X')
91          THEN
92        l_return_status := FND_API.G_RET_STS_ERROR;
93 
94        FND_MESSAGE.SET_NAME('QP','QP_CANNOT_UPDATE_ATTRIBUTE');
95        FND_MESSAGE.SET_TOKEN('ATTRIBUTE','product_attribute');
96        OE_MSG_PUB.Add;
97 
98    END IF;
99 
100    IF  nvl(p_old_PRICING_ATTR_rec.PRODUCT_ATTR_VALUE,9999999) <>
101        nvl(p_PRICING_ATTR_rec.PRODUCT_ATTR_VALUE,9999999)
102          THEN
103        l_return_status := FND_API.G_RET_STS_ERROR;
104 
105        FND_MESSAGE.SET_NAME('QP','QP_CANNOT_UPDATE_ATTRIBUTE');
106        FND_MESSAGE.SET_TOKEN('ATTRIBUTE','product_attr_value');
107        OE_MSG_PUB.Add;
108 
109    END IF;
110 
111   END IF;
112 
113 --5286339
114 
115     IF p_PRICING_ATTR_rec.list_line_id IS NULL
116     THEN
117 	 l_return_status := FND_API.G_RET_STS_ERROR;
118 
119 	 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
120 	 THEN
121 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
122 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE','List Line Id');
123 	   oe_msg_pub.Add;
124       END IF;
125     END IF;
126 
127 /*    IF p_PRICING_ATTR_rec.list_header_id IS NULL
128     THEN
129 	 l_return_status := FND_API.G_RET_STS_ERROR;
130 
131 	 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
132 	 THEN
133 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
134 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE','List Header Id');
135 	   oe_msg_pub.Add;
136       END IF;
137     END IF;
138 */
139     IF p_PRICING_ATTR_rec.pricing_phase_id IS NULL
140     THEN
141 	 l_return_status := FND_API.G_RET_STS_ERROR;
142 
143 	 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
144 	 THEN
145 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
146 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Pricing Phase Id');
147 	   oe_msg_pub.Add;
148       END IF;
149     END IF;
150 
151     IF p_PRICING_ATTR_rec.excluder_flag IS NULL
152     THEN
153 	 l_return_status := FND_API.G_RET_STS_ERROR;
154 
155 	 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
156 	 THEN
157 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
158 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('EXCLUDER_FLAG'));  -- Fix For Bug-1974413
159 	   oe_msg_pub.Add;
160       END IF;
161     ELSE
162 
163       IF (p_PRICING_ATTR_rec.excluder_flag not in ( 'Y', 'y', 'N', 'n' ) )
164       THEN
165 	   l_return_status := FND_API.G_RET_STS_ERROR;
166 	   IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
167 	   THEN
168 		FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
169 		FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Excluder Flag');
170 		oe_msg_pub.Add;
171         END IF;
172       END IF;
173     END IF;
174 
175     IF p_PRICING_ATTR_rec.product_attribute_context IS NULL
176     THEN
177 	 l_return_status := FND_API.G_RET_STS_ERROR;
178 
179 	 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
180 	 THEN
181 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
182 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRODUCT_ATTRIBUTE_CONTEXT')); --Fix For Bug-1974413
183 	   oe_msg_pub.Add;
184       END IF;
185     END IF;
186 
187     IF p_PRICING_ATTR_rec.product_attribute IS NULL
188     THEN
189 	 l_return_status := FND_API.G_RET_STS_ERROR;
190 
191 	 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
192 	 THEN
193 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
194 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRODUCT_ATTRIBUTE')); -- Fix For Bug-1974413
195 	   oe_msg_pub.Add;
196       END IF;
197     END IF;
198 
199     IF p_PRICING_ATTR_rec.product_attr_value IS NULL
200     THEN
201 	 l_return_status := FND_API.G_RET_STS_ERROR;
202 
203 	 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
204 	 THEN
205 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
206 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRODUCT_ATTR_VALUE'));  -- Fix For Bug-1974413
207 	   oe_msg_pub.Add;
208       END IF;
209     END IF;
210 
211     IF p_PRICING_ATTR_rec.product_attribute_datatype IS NULL
212     THEN
213 	 l_return_status := FND_API.G_RET_STS_ERROR;
214 
215 	 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
216 	 THEN
217 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
218 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Product Attribute Datatype');
219 	   oe_msg_pub.Add;
220       END IF;
221     END IF;
222 
223     IF p_PRICING_ATTR_rec.product_uom_code IS NULL
224     THEN
225 	 l_return_status := FND_API.G_RET_STS_ERROR;
226 
227 	 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
228 	 THEN
229 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
230 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRODUCT_UOM_CODE'));  -- Fix For Bug-1974413
231 	   oe_msg_pub.Add;
232       END IF;
233     END IF;
234 
235     IF p_PRICING_ATTR_rec.attribute_grouping_no IS NULL
236     THEN
237 	 l_return_status := FND_API.G_RET_STS_ERROR;
238 
239 	 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
240 	 THEN
241 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
242 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('ATTRIBUTE_GROUPING_NO')); -- Fix For Bug-1974413
243 	   oe_msg_pub.Add;
244       END IF;
245     END IF;
246 
247     --
248     --  Check rest of required attributes here.
249     --
250 
251 
252     --  Return Error if a required attribute is missing.
253 
254     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
255 
256         RAISE FND_API.G_EXC_ERROR;
257 
258     END IF;
259 
260     --
261     --  Check conditionally required attributes here.
262     --
263    OE_Debug_Pub.add ( 'Geresh :: Price Line ID Check '|| p_PRICING_ATTR_rec.list_line_id ) ;
264 
265     -- Functional Area Validation for Hierarchical Categories (sfiresto)
266     IF p_PRICING_ATTR_rec.product_attribute_context = 'ITEM' AND
267        p_PRICING_ATTR_rec.product_attribute = 'PRICING_ATTRIBUTE2' THEN
268         BEGIN
269 
270           SELECT pte_code, source_system_code
271           INTO l_pte_code, l_ss_code
272           FROM qp_list_headers_b
273           WHERE list_header_id = p_PRICING_ATTR_rec.list_header_id;
274 
275           QP_UTIL.Get_Item_Cat_Info(
276              p_PRICING_ATTR_rec.product_attr_value,
277              l_pte_code,
278              l_ss_code,
279              l_fna_name,
280              l_fna_desc,
281              l_fna_valid);
282 
283           IF NOT l_fna_valid THEN
284 
285             l_return_status := FND_API.G_RET_STS_ERROR;
286 
287             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
288             THEN
289               FND_MESSAGE.set_name('QP', 'QP_INVALID_CAT_FUNC_PTE');
290               FND_MESSAGE.set_token('CATID', p_PRICING_ATTR_REC.product_attr_value);
291               FND_MESSAGE.set_token('PTE', l_pte_code);
292               FND_MESSAGE.set_token('SS', l_ss_code);
293               OE_MSG_PUB.Add;
294             END IF;
295 
296             RAISE FND_API.G_EXC_ERROR;
297 
298           END IF;
299 
300         END;
301     END IF;
302 
303     /* Duplicate Check */
304 
305     BEGIN
306 	 SELECT primary_uom_flag
307 	 INTO   l_primary_uom_flag
308 	 FROM   qp_list_lines
309 	 WHERE  list_line_id = p_PRICING_ATTR_rec.list_line_id;
310 
311     EXCEPTION
312 	 WHEN OTHERS THEN
313         l_return_status := FND_API.G_RET_STS_ERROR;
314     END;
315 
316 /* Modified by rassharm for Bug No 5457704 to include effective dates check for primary UOM */
317 
318     select start_date_active, end_date_active , revision, list_header_id
319     into l_start_date_active, l_end_date_active, l_revision, l_list_header_id
320     from qp_list_lines
321     where list_line_id = p_PRICING_ATTR_rec.list_line_id;
322 
323 
324     IF l_primary_uom_flag = 'Y'  AND p_PRICING_ATTR_rec.product_attribute <> 'PRICING_ATTRIBUTE3' THEN
325        l_count:=0;
326        for c1 in
327        (
328         select  b.list_line_id col2
329         from    qp_pricing_attributes b, qp_list_lines c
330         where 	b.list_line_id <> p_PRICING_ATTR_rec.list_line_id
331         and     b.list_line_id=c.list_line_id
332         and     c.primary_uom_flag='Y'
333         and     b.product_attribute_context = p_PRICING_ATTR_rec.product_attribute_context
334         and     b.product_attribute = p_PRICING_ATTR_rec.product_attribute
335         and     b.product_attr_value = p_PRICING_ATTR_rec.product_attr_value
336         and     b.list_header_id = p_PRICING_ATTR_rec.list_header_id
337 	AND     b.product_uom_code <> p_PRICING_ATTR_rec.product_uom_code  -- for bug 7135111
338        )
339        Loop
340        /*----------------------------------------------*/
341         l_min_date := to_date('01/01/1900', 'MM/DD/YYYY');
342         l_max_date := to_date('12/31/9999', 'MM/DD/YYYY');
343         /*--------------------------------------------*/
344         begin
345             SELECT  start_date_active, end_date_active
346 	        into  l_sdate, l_edate
347 	        from qp_list_lines
348 	        where list_line_id = c1.col2;
349 
350 	        exception
351 	        when no_data_found then
352             null;
353         end;
354 
355 
356         IF ( nvl(l_Start_Date_Active, l_min_date) <= nvl(l_sdate, l_min_date))
357             THEN
358             l_min_date := nvl(l_Start_Date_Active, l_min_date);
359             ELSE
360             l_min_date := nvl(l_sdate, l_min_date);
361         END IF;
362 
363         IF ( nvl(l_End_Date_Active, l_max_date) >= nvl(l_edate, l_max_date))
364             THEN
365             l_max_date := nvl(l_End_Date_Active, l_max_date);
366             ELSE
367             l_max_date := nvl(l_edate, l_max_date);
368          END IF;
369 
370 
371        if ( trunc(nvl(l_sdate, l_min_date)) between
372              trunc(nvl(l_Start_Date_Active, l_min_date))
373 		and trunc(nvl(l_End_Date_Active, l_max_date)) )
374 	  OR
375           ( trunc(nvl(l_edate, l_max_date)) between
376              trunc(nvl(l_Start_Date_Active, l_min_date))
377 	     and trunc(nvl(l_End_Date_Active, l_max_date)) )
378 
379           OR
380           ( trunc(nvl(l_sdate, l_min_date)) <=
381                    nvl(l_Start_Date_Active,l_min_date)
382             AND
383             trunc(nvl(l_edate, l_max_date)) >=
384                    nvl(l_End_Date_Active,l_max_date) )
385 
386        THEN
387          l_count:=1;
388          oe_debug_pub.add('Dates Overlapping' );
389          exit;
390        end if;
391 
392      end loop;
393 
394      IF l_count > 0 THEN
395 		l_return_status :=  FND_API.G_RET_STS_ERROR;
396 		IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR) THEN
397 		   FND_MESSAGE.SET_NAME('QP','QP_UNIQUE_PRIMARY_UOM');
398 		   OE_MSG_PUB.Add;
399              RAISE FND_API.G_EXC_ERROR;
400           END IF;
401 	  END IF;
402    END IF;
403 
404  /* End changes rassharm */
405 
406 
407    /*  (sfiresto) Moving Item validation and UOM validtion code from Attributes procedure to Entity
408     *  procedure for bug 4753707.
409     */
410 
411 --fix for bug 5390181
412 l_return_status := QP_UTIL.Validate_Item(p_PRICING_ATTR_rec.product_attribute_context,
413                       p_PRICING_ATTR_rec.product_attribute,
414                       p_PRICING_ATTR_rec.product_attr_value);
415 
416 /*
417 if (p_PRICING_ATTR_rec.product_attribute_context = 'ITEM') THEN
418         if (p_PRICING_ATTR_rec.product_attribute = 'PRICING_ATTRIBUTE1') THEN
419 			begin
420 
421 		      SELECT 'VALID' INTO l_dummy
422 			  FROM mtl_system_items_b
423 		      where inventory_item_id = p_PRICING_ATTR_rec.product_attr_value
424 			     AND customer_order_flag = 'Y'
425 				 and organization_id = fnd_profile.value('QP_ORGANIZATION_ID');
426 			exception
427 			  WHEN NO_DATA_FOUND THEN
428 
429 	                    IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
430                             THEN
431                               FND_MESSAGE.SET_NAME('QP','QP_ITEM_NOT_VALID');
432                               FND_MESSAGE.SET_TOKEN('ITEM_ID', p_PRICING_ATTR_rec.product_attr_value);
433                               OE_MSG_PUB.Add;
434                             END IF;
435                             RAISE FND_API.G_EXC_ERROR;
436 
437 		 	  when others then
438 			   null;
439 			end;
440 		end if;
441 end if;
442 -- inserted for validation with the mtl_system_items_b
443 */
444 
445 
446 --  Begin fix for bug#4039819
447     if (p_PRICING_ATTR_rec.product_attribute_context = 'ITEM') THEN
448         if (p_PRICING_ATTR_rec.product_attribute = 'PRICING_ATTRIBUTE1') THEN
449         begin
450 		select 'VALID' INTO l_dummy
451 		from mtl_item_uoms_view
452 		where uom_code = p_PRICING_ATTR_rec.product_uom_code
453 		and organization_id = fnd_profile.value('QP_ORGANIZATION_ID')
454 		and inventory_item_id = p_PRICING_ATTR_rec.product_attr_value
455                 and rownum = 1;
456 	exception
457 		WHEN NO_DATA_FOUND THEN
458                    IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
459                    THEN
460 		     FND_MESSAGE.SET_NAME('QP','QP_INVALID_PROD_UOM');
461 		     OE_MSG_PUB.Add;
462 		   END IF;
463                    RAISE FND_API.G_EXC_ERROR;
464 
465                 WHEN OTHERS THEN
466 		   null;
467 	end;
468 	-- Bug 6891094 :UOM validity check to be done only for new list lines and lines in which the UOM is updated.
469 	elsif (p_PRICING_ATTR_rec.product_attribute = 'PRICING_ATTRIBUTE2') THEN
470 		IF p_PRICING_ATTR_rec.product_uom_code IS NOT NULL AND
471 		( p_PRICING_ATTR_rec.product_uom_code <> p_old_PRICING_ATTR_rec.product_uom_code
472 		OR
473 		p_old_PRICING_ATTR_rec.product_uom_code IS NULL ) THEN
474 			  IF NOT QP_VALIDATE.Product_Uom(p_pricing_attr_rec.product_uom_code,
475                                          to_number(p_PRICING_ATTR_rec.product_attr_value),
476                                          p_PRICING_ATTR_rec.list_header_id) THEN
477 				 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR) THEN
478 					 FND_MESSAGE.SET_NAME('QP','QP_INVALID_PROD_UOM');
479 					 OE_MSG_PUB.Add;
480 				 END IF;
481 				 RAISE FND_API.G_EXC_ERROR;
482 		          END IF;
483 		END IF;
484 	-- End changes for bug 6891094
485   	/*
486 	 * Commented out for bug 4753707
487          *
488 	      begin
489 		SELECT 'VALID' INTO l_dummy
490 		FROM MTL_UNITS_OF_MEASURE_VL MTLUOM2
491 		WHERE
492 		  EXISTS
493 		    (
494 		    SELECT /*+no_unnest*--/ 1
495 		    FROM MTL_SYSTEM_ITEMS_B MTLITM1,
496 			 MTL_UOM_CONVERSIONS MTLUCV
497 		    WHERE MTLUOM2.UOM_CODE = MTLUCV.UOM_CODE
498                         AND MTLUOM2.UOM_CODE = p_PRICING_ATTR_rec.product_uom_code
499 			AND MTLITM1.organization_id = fnd_profile.value('QP_ORGANIZATION_ID')
500 			AND MTLITM1.inventory_item_id in
501 			(
502 		 	 SELECT inventory_item_id FROM mtl_item_categories
503 		 	 WHERE category_id = to_number(p_PRICING_ATTR_rec.product_attr_value)
504 		 	 AND organization_id = fnd_profile.value('QP_ORGANIZATION_ID')
505 			)
506 			AND NVL( MTLUCV.DISABLE_DATE, TRUNC(SYSDATE)+1 ) > TRUNC(SYSDATE)
507 			AND
508 			(
509 			    (
510 				MTLITM1.ALLOWED_UNITS_LOOKUP_CODE IN (1, 3)
511 				AND MTLUCV.INVENTORY_ITEM_ID = MTLITM1.INVENTORY_ITEM_ID
512 				OR
513 				(
514 				    MTLUCV.INVENTORY_ITEM_ID = 0
515 				    AND MTLUOM2.BASE_UOM_FLAG = 'Y'
516 				    AND MTLUOM2.UOM_CLASS = MTLUCV.UOM_CLASS
517 				    AND MTLUCV.UOM_CLASS IN
518 				    (
519 				    SELECT MTLPRI1.UOM_CLASS
520 				    FROM MTL_UNITS_OF_MEASURE MTLPRI1
521 				    WHERE MTLPRI1.UOM_CODE = MTLITM1.PRIMARY_UOM_CODE
522 				    )
523 				)
524 				OR
525 				(
526 				    MTLUCV.INVENTORY_ITEM_ID = 0
527 				    AND MTLUCV.UOM_CODE IN
528 				    (
529 				    SELECT MTLUCC1.TO_UOM_CODE
530 				    FROM MTL_UOM_CLASS_CONVERSIONS MTLUCC1
531 				    WHERE MTLUCC1.INVENTORY_ITEM_ID = MTLITM1.INVENTORY_ITEM_ID
532 				    AND NVL(MTLUCC1.DISABLE_DATE, TRUNC(SYSDATE)+1) > TRUNC(SYSDATE)
533 				    )
534 				)
535 			    )
536 			    OR
537 			    (
538 				MTLITM1.ALLOWED_UNITS_LOOKUP_CODE IN (2, 3)
539 				AND MTLUCV.INVENTORY_ITEM_ID = 0
540 				AND
541 				(
542 				    MTLUCV.UOM_CLASS IN
543 				    (
544 				    SELECT MTLUCC.TO_UOM_CLASS
545 				    FROM MTL_UOM_CLASS_CONVERSIONS MTLUCC
546 				    WHERE MTLUCC.INVENTORY_ITEM_ID = MTLITM1.INVENTORY_ITEM_ID
547 				    AND NVL(MTLUCC.DISABLE_DATE, TRUNC(SYSDATE)+1) > TRUNC(SYSDATE)
548 				    )
549 				    OR MTLUCV.UOM_CLASS =
550 				    (
551 				    SELECT MTLPRI.UOM_CLASS
552 				    FROM MTL_UNITS_OF_MEASURE MTLPRI
553 				    WHERE MTLPRI.UOM_CODE = MTLITM1.PRIMARY_UOM_CODE
554 				    )
555 				)
556 			    )
557 			)
558 		    )
559                     and rownum = 1;
560 	exception
561 		WHEN NO_DATA_FOUND THEN
562 		   x_return_status := FND_API.G_RET_STS_ERROR;
563 		   FND_MESSAGE.SET_NAME('QP','QP_INVALID_PROD_UOM');
564 		   OE_MSG_PUB.Add;
565                 WHEN OTHERS THEN
566 		   null;
567 	end;
568 	 *
569 	 */
570 	else
571 	begin
572 		select 'VALID' INTO l_dummy
573 		from MTL_UNITS_OF_MEASURE_VL
574 		where uom_code = p_PRICING_ATTR_rec.product_uom_code
575 		and rownum = 1;
576 	exception
577 		WHEN NO_DATA_FOUND THEN
578                    IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
579                    THEN
580                      FND_MESSAGE.SET_NAME('QP','QP_INVALID_PROD_UOM');
581                      OE_MSG_PUB.Add;
582 		   END IF;
583                    RAISE FND_API.G_EXC_ERROR;
584 
585                 WHEN OTHERS THEN
586 		   null;
587 	end;
588 	end if;
589     end if;
590 --  End fix for bug#4039819
591    /* (sfiresto) end movement of code from Attributes procedure to Entity procedure
592 
593 
594 /* modified IF condition by dhgupta for bug 1828734 */
595 /*
596     IF l_primary_uom_flag = 'Y'  AND p_PRICING_ATTR_rec.product_attribute <> 'PRICING_ATTRIBUTE3'THEN
597 
598        BEGIN
599          SELECT count(*)
600 	    INTO   l_count
601          FROM   qp_list_lines l, qp_pricing_attributes a
602          WHERE  l.list_line_id = a.list_line_id
603 	    AND    a.list_header_id = p_PRICING_ATTR_rec.list_header_id
604          AND    a.product_attribute_context =
605 			    p_PRICING_ATTR_rec.product_attribute_context
606          AND    a.product_attribute = p_PRICING_ATTR_rec.product_attribute
607          AND    a.product_attr_value = p_PRICING_ATTR_rec.product_attr_value
608 	    AND    a.product_uom_code <> p_PRICING_ATTR_rec.product_uom_code
609          AND    l.primary_uom_flag = 'Y';
610 
611 	  EXCEPTION
612          WHEN NO_DATA_FOUND THEN
613 		 l_count := 0;
614        END;
615 
616        IF l_count > 0 THEN
617 		l_return_status :=  FND_API.G_RET_STS_ERROR;
618 		IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR) THEN
619 		   FND_MESSAGE.SET_NAME('QP','QP_UNIQUE_PRIMARY_UOM');
620 		   OE_MSG_PUB.Add;
621              RAISE FND_API.G_EXC_ERROR;
622           END IF;
623 	  END IF;
624 
625     END IF;
626 
627     select start_date_active, end_date_active , revision, list_header_id
628     into l_start_date_active, l_end_date_active, l_revision, l_list_header_id
629     from qp_list_lines
630     where list_line_id = p_PRICING_ATTR_rec.list_line_id;
631 */
632    OE_Debug_Pub.add ( 'Geresh :: Value Set 1' || l_start_date_active || l_end_date_active );
633 
634    OE_Debug_Pub.add ( 'Geresh :: Value Set 2' || l_revision );
635 /*
636    if NOT( QP_CHECK_DUP_PRA.Check_Dup_Pra (
637 						l_start_date_active,
638 						l_end_date_active,
639 						l_revision,
640             				p_PRICING_ATTR_rec.list_line_id ,
641             				l_list_header_id ,
642 						l_x_rows )
643 		)   then
644 
645    OE_Debug_Pub.add ( 'Geresh :: Result ' || l_x_rows );
646 	if l_x_rows > 0 THEN
647 
648           IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
649         	THEN
650         		l_return_status := FND_API.G_RET_STS_ERROR;
651 			FND_MESSAGE.SET_NAME('QP','QP_DUP_PRICING_ATTR');
652 			OE_MSG_PUB.Add;
653 		end if;
654 	end if;
655 
656 
657    end if;
658 */
659 oe_debug_pub.add('G_CHECK_DUP_PRICELIST_LINES is '|| QP_GLOBALS.G_CHECK_DUP_PRICELIST_LINES); -- 5018856, 5024919
660 IF (QP_GLOBALS.G_CHECK_DUP_PRICELIST_LINES <> 'N' or QP_GLOBALS.G_CHECK_DUP_PRICELIST_LINES IS NULL)
661 THEN --5018856 , 5024919 only log request if not N or null
662    oe_debug_pub.add('about to log a request to check duplicate list lines ');
663 
664    QP_DELAYED_REQUESTS_PVT.Log_Request
665     ( p_entity_code		=> QP_GLOBALS.G_ENTITY_ALL
666 ,     p_entity_id		=> p_PRICING_ATTR_rec.list_line_id
667 ,   p_requesting_entity_code	=> QP_GLOBALS.G_ENTITY_PRICING_ATTR
668 ,   p_requesting_entity_id	=> p_PRICING_ATTR_rec.pricing_attribute_id
669 ,   p_request_type		=> QP_GLOBALS.G_DUPLICATE_LIST_LINES
670 ,   p_param1			=> l_list_header_id
671 ,   p_param2			=> fnd_date.date_to_canonical(l_start_date_active) 	--2739511
672 ,   p_param3			=> fnd_date.date_to_canonical(l_end_date_active)	--2739511
673 ,   p_param4			=> l_revision
674 ,   x_return_status		=> l_return_status
675 );
676 
677     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
678 
679 	  oe_debug_pub.add('failed in logging a delayed request ');
680 
681         RAISE FND_API.G_EXC_ERROR;
682 
683     END IF;
684 
685   oe_debug_pub.add('after logging delayed request ');
686 END IF;-- end IF QP_GLOBALS.G_CHECK_DUP_PRICELIST_LINES <> 'N' or null-- 5108856
687 
688   IF (p_Pricing_Attr_rec.pricing_attribute_context IS NOT NULL
689     OR p_Pricing_Attr_rec.pricing_attribute IS NOT NULL
690     OR p_Pricing_Attr_rec.pricing_attr_value_from IS NOT NULL
691     OR p_Pricing_Attr_rec.pricing_attr_value_to IS NOT NULL)
692   THEN
693     IF (p_Pricing_Attr_rec.pricing_attribute_context IS NULL
694 	 OR p_Pricing_Attr_rec.pricing_attribute IS NULL
695 	 OR p_Pricing_Attr_rec.comparison_operator_code IS NULL)
696     THEN
697 
698 	 l_return_status := FND_API.G_RET_STS_ERROR;
699 	 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
700 	 THEN
701 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
702 	   FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTRIBUTE_CONTEXT')||'/'||
703                                             QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTRIBUTE')||'/'||
704                                             QP_PRC_UTIL.Get_Attribute_Name('COMPARISON_OPERATOR_CODE')); -- Fix For Bug-1974413
705 	   OE_MSG_PUB.Add;
706       END IF;
707       RAISE FND_API.G_EXC_ERROR;
708     ELSE
709 
710 	 IF   ( p_Pricing_Attr_rec.comparison_operator_code = 'BETWEEN'
711 	   AND  p_Pricing_Attr_rec.pricing_attribute_datatype is NULL ) THEN
712 
713 		l_return_status := FND_API.G_RET_STS_ERROR;
714      	 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
715      	  THEN
716 	     	FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
717 	          FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Enter Required Values');
718 	          OE_MSG_PUB.Add;
719             END IF;
720 		  RAISE FND_API.G_EXC_ERROR;
721       END IF;
722 
723        QP_UTIL.validate_qp_flexfield(flexfield_name       =>'QP_ATTR_DEFNS_PRICING'
724 						 ,context                   =>p_Pricing_Attr_rec.pricing_attribute_context
725 						 ,attribute                 =>p_Pricing_Attr_rec.pricing_attribute
726 						 ,value                =>p_Pricing_Attr_rec.pricing_attr_value_from
727                                ,application_short_name         => 'QP'
728 						 ,context_flag                   =>l_context_error
729 						 ,attribute_flag                 =>l_attribute_error
730 						 ,value_flag                     =>l_value_error
731 						 ,datatype                       =>l_datatype
732 						 ,precedence                      =>l_precedence
733 						 ,error_code                     =>l_error_code
734 						 );
735 
736        If (l_context_error = 'N'  AND l_error_code = 7)       --  invalid context
737 	  Then
738 		  l_return_status := FND_API.G_RET_STS_ERROR;
739 
740             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
741             THEN
742 
743                FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
744                --FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
745                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTRIBUTE_CONTEXT')); --Fix For Bug-1974413
746 
747                OE_MSG_PUB.Add;
748             END IF;
749 
750            RAISE FND_API.G_EXC_ERROR;
751 
752        End If;
753 
754 
755        --dbms_output.put_line('for context '||l_return_status);
756 
757         --dbms_output.put_line('for context ,attribute,value,datatype,precedence');
758 
759 
760 
761        If l_attribute_error = 'N'   AND l_error_code = 8    --  invalid Attribute
762 	  Then
763 		  l_return_status := FND_API.G_RET_STS_ERROR;
764 
765             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
766             THEN
767 
768                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
769                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',' Attribute');
770                OE_MSG_PUB.Add;
771             END IF;
772 
773 		  RAISE FND_API.G_EXC_ERROR;
774 
775        End If;
776 
777 
778        --dbms_output.put_line('for attributr '||l_return_status);
779        oe_debug_pub.add('for context '||l_return_status);
780 
781 
782       --- validate qualifier_attr_value only if comparison operator is
783 	 --  '='
784 
785        IF p_Pricing_Attr_rec.comparison_operator_code = '=' Then
786 
787        If l_value_error = 'N'  AND l_error_code = 9      --  invalid value
788 	  Then
789 		  l_return_status := FND_API.G_RET_STS_ERROR;
790 
791             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
792             THEN
793 
794                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
795                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',' Value From ');
796                --OE_MSG_PUB.Add;
797                OE_MSG_PUB.Add;
798             END IF;
799 		  RAISE FND_API.G_EXC_ERROR;
800        End If;
801        END IF;
802 
803 
804        --dbms_output.put_line('for value,'||l_return_status);
805        oe_debug_pub.add('for value,'||l_return_status);
806 
807       --dbms_output.put_line('org precede '||p_QUALIFIERS_rec.qualifier_precedence);
808       --dbms_output.put_line('n precede '||l_precedence);
809 
810         --dbms_output.put_line('for precedence'||l_return_status);
811 
812        If p_Pricing_Attr_rec.pricing_attribute_datatype <> l_datatype   ---  invalid  datatype
813 	  Then
814 		  l_return_status := FND_API.G_RET_STS_ERROR;
815 
816             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
817             THEN
818                --FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
819                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
820                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Pricing Attribute Datatype ');
821                OE_MSG_PUB.Add;
822             END IF;
823 		  RAISE FND_API.G_EXC_ERROR;
824 
825        End If;
826 
827        IF p_Pricing_Attr_rec.pricing_attribute_context = 'VOLUME' AND
828 	     p_Pricing_Attr_rec.pricing_attribute = 'PRICING_ATTRIBUTE12'
829 		   --When Pricing Context is 'Volume' and Attribute is 'Item Amount'
830        THEN
831 		  l_return_status := FND_API.G_RET_STS_ERROR;
832 
833             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
834             THEN
835               FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
836               FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Pricing Attribute');
837               OE_MSG_PUB.Add;
838             END IF;
839 
840 		  RAISE FND_API.G_EXC_ERROR;
841 
842        END IF;
843 
844 
845        --dbms_output.put_line('for datatype,'||l_return_status);
846         oe_debug_pub.add('qualifier datatype,'||l_return_status);
847 
848 
849 
850    --validation for canonical form
851 
852      l_error_code:=QP_UTIL.validate_num_date(p_Pricing_Attr_rec.pricing_attribute_datatype, p_Pricing_Attr_rec.pricing_attr_value_from);
853 	IF l_error_code  <> 0  THEN
854 
855 		  l_return_status := FND_API.G_RET_STS_ERROR;
856 
857             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
858             THEN
859                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
860                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Value From ');
861                OE_MSG_PUB.Add;
862             END IF;
863 		  RAISE FND_API.G_EXC_ERROR;
864 
865      END IF;
866      --dbms_output.put_line('for cano of value from ,'||l_return_status);
867 
868    -- End of validation for canonical form on value from
869 
870    -- Validation for Value_To
871 
872 	 IF p_Pricing_Attr_rec.pricing_attribute_context IS NOT NULL AND
873 	    p_Pricing_Attr_rec.pricing_attribute IS NOT NULL AND
874 		  UPPER(p_Pricing_Attr_rec.comparison_operator_code) = 'BETWEEN' AND
875 		    (p_Pricing_Attr_rec.pricing_attr_value_to IS NULL OR
876 			p_Pricing_Attr_rec.pricing_attr_value_from IS NULL)
877       THEN
878 		 l_return_status := FND_API.G_RET_STS_ERROR;
879 
880 		 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
881 		 THEN
882 		   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
883 		   FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTR_VALUE_TO')||'/'||
884                                              QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTR_VALUE_FROM'));  -- Fix For Bug-1974413
885 		   OE_MSG_PUB.Add;
886            END IF;
887 		  RAISE FND_API.G_EXC_ERROR;
888       END IF;
889 
890 /* Added validation by dhgupta for bug # 1824227 */
891 
892          IF p_Pricing_Attr_rec.pricing_attribute_context IS NOT NULL AND
893             p_Pricing_Attr_rec.pricing_attribute IS NOT NULL AND
894                   UPPER(p_Pricing_Attr_rec.comparison_operator_code) <> 'BETWEEN' AND
895                         p_Pricing_Attr_rec.pricing_attr_value_from IS NULL
896       THEN
897                  l_return_status := FND_API.G_RET_STS_ERROR;
898 
899                  IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
900                  THEN
901                    FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
902                    FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTR_VALUE_FROM')); --Fix For Bug-1974413
903                    OE_MSG_PUB.Add;
904            END IF;
905                   RAISE FND_API.G_EXC_ERROR;
906       END IF;
907 
908 /* end changes for bug # 1824227 */
909 
910 
911 
912 	 l_error_code:=QP_UTIL.validate_num_date(p_Pricing_Attr_rec.pricing_attribute_datatype, p_Pricing_Attr_rec.pricing_attr_value_to);
913 
914 	 IF l_error_code  <> 0  THEN
915 	   l_return_status := FND_API.G_RET_STS_ERROR;
916 
917 	   IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
918 	   THEN
919 		FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
920 		FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Value To ');
921 		OE_MSG_PUB.Add;
922         END IF;
923 		  RAISE FND_API.G_EXC_ERROR;
924       END IF;
925 	 --here
926     END IF;
927   END IF;
928 
929   IF    ( p_Pricing_Attr_rec.pricing_attribute_context is not null
930 	or   p_Pricing_Attr_rec.pricing_attribute is not null ) then
931 
932     --
933     --  Validate attribute dependencies here.
934     --
935 
936     IF p_Pricing_Attr_rec.comparison_operator_code is null then
937 
938 		  l_return_status := FND_API.G_RET_STS_ERROR;
939 
940             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
941             THEN
942 
943                FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
944                --FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
945                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('COMPARISON_OPERATOR_CODE')); --Fix For Bug-1974413
946                OE_MSG_PUB.Add;
947             END IF;
948 
949 		  RAISE FND_API.G_EXC_ERROR;
950     ELSE
951 
952 
953       SELECT  lookup_code
954 	 INTO    l_comparison_operator_code
955 	 FROM    QP_LOOKUPS
956       WHERE   LOOKUP_TYPE = 'COMPARISON_OPERATOR'
957 	 AND     LOOKUP_CODE = UPPER(p_Pricing_Attr_rec.comparison_operator_code);
958 
959       If SQL%NOTFOUND
960 	 Then
961 
962 		  l_return_status := FND_API.G_RET_STS_ERROR;
963 
964             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
965             THEN
966 
967                FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
968                --FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
969                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('COMPARISON_OPERATOR_CODE')); -- Fix For Bug-1974413
970                OE_MSG_PUB.Add;
971             END IF;
972 
973             RAISE FND_API.G_EXC_ERROR;
974 
975        End If;
976 
977     END IF; /* comparison_operator_code is null */
978 
979   END IF; /* context or atttribute is not null */
980 
981 
982     --dbms_output.put_line('entity validation for compa2 '||l_return_status);
983     oe_debug_pub.add('entity validation for compa2 '||l_return_status);
984 
985 
986 
987      --Validate Qualifier_Context , Qualifier_attribute ,Qualifier_Attr Value
988 	--qualifier_datatype,qualifier_precedence
989 
990 
991       --dbms_output.put_line('for context ,attribute,value,datatype,precedence');
992 
993 /*  IF    ( p_Pricing_Attr_rec.pricing_attribute_context is not null
994 	or   p_Pricing_Attr_rec.pricing_attribute is not null
995 	or   p_Pricing_Attr_rec.pricing_attr_value_from is not null
996 	or   p_Pricing_Attr_rec.pricing_attr_value_to is not null) then
997 
998        QP_UTIL.validate_qp_flexfield(flexfield_name       =>'QP_ATTR_DEFNS_PRICING'
999 						 ,context                   =>p_Pricing_Attr_rec.pricing_attribute_context
1000 						 ,attribute                 =>p_Pricing_Attr_rec.pricing_attribute
1001 						 ,value                =>p_Pricing_Attr_rec.pricing_attr_value_from
1002                                ,application_short_name         => 'QP'
1003 						 ,context_flag                   =>l_context_error
1004 						 ,attribute_flag                 =>l_attribute_error
1005 						 ,value_flag                     =>l_value_error
1006 						 ,datatype                       =>l_datatype
1007 						 ,precedence                      =>l_precedence
1008 						 ,error_code                     =>l_error_code
1009 						 );
1010 
1011        If (l_context_error = 'N'  AND l_error_code = 7)       --  invalid context
1012 	  Then
1013 		  l_return_status := FND_API.G_RET_STS_ERROR;
1014 
1015             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1016             THEN
1017 
1018                FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
1019                --FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1020                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_name('PRICING_ATTRIBUTE_CONTEXT')); --Fix For Bug-1974413
1021                OE_MSG_PUB.Add;
1022             END IF;
1023 
1024            RAISE FND_API.G_EXC_ERROR;
1025 
1026        End If;
1027 
1028 
1029        --dbms_output.put_line('for context '||l_return_status);
1030 
1031         --dbms_output.put_line('for context ,attribute,value,datatype,precedence');
1032 
1033 
1034 
1035        If l_attribute_error = 'N'   AND l_error_code = 8    --  invalid Attribute
1036 	  Then
1037 		  l_return_status := FND_API.G_RET_STS_ERROR;
1038 
1039             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1040             THEN
1041 
1042                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1043                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',' Attribute');
1044                OE_MSG_PUB.Add;
1045             END IF;
1046 
1047 		  RAISE FND_API.G_EXC_ERROR;
1048 
1049        End If;
1050 
1051 
1052        --dbms_output.put_line('for attributr '||l_return_status);
1053        oe_debug_pub.add('for context '||l_return_status);
1054 
1055 
1056       --- validate qualifier_attr_value only if comparison operator is
1057 	 --  '='
1058 
1059        IF p_Pricing_Attr_rec.comparison_operator_code = '=' Then
1060 
1061        If l_value_error = 'N'  AND l_error_code = 9      --  invalid value
1062 	  Then
1063 		  l_return_status := FND_API.G_RET_STS_ERROR;
1064 
1065             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1066             THEN
1067 
1068                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1069                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',' Value From ');
1070                --OE_MSG_PUB.Add;
1071                OE_MSG_PUB.Add;
1072             END IF;
1073 		  RAISE FND_API.G_EXC_ERROR;
1074        End If;
1075        END IF;
1076 
1077 
1078        --dbms_output.put_line('for value,'||l_return_status);
1079        oe_debug_pub.add('for value,'||l_return_status);
1080 
1081       --dbms_output.put_line('org precede '||p_QUALIFIERS_rec.qualifier_precedence);
1082       --dbms_output.put_line('n precede '||l_precedence);
1083 
1084         --dbms_output.put_line('for precedence'||l_return_status);
1085 
1086        If p_Pricing_Attr_rec.pricing_attribute_datatype <> l_datatype   ---  invalid  datatype
1087 	  Then
1088 		  l_return_status := FND_API.G_RET_STS_ERROR;
1089 
1090             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1091             THEN
1092                --FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
1093                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1094                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Pricing Attribute Datatype ');
1095                OE_MSG_PUB.Add;
1096             END IF;
1097 		  RAISE FND_API.G_EXC_ERROR;
1098 
1099        End If;
1100 
1101 
1102 
1103        --dbms_output.put_line('for datatype,'||l_return_status);
1104         oe_debug_pub.add('qualifier datatype,'||l_return_status);
1105 
1106 
1107 
1108    --validation for canonical form
1109 
1110      l_error_code:=QP_UTIL.validate_num_date(p_Pricing_Attr_rec.pricing_attribute_datatype, p_Pricing_Attr_rec.pricing_attr_value_from);
1111 	IF l_error_code  <> 0  THEN
1112 
1113 		  l_return_status := FND_API.G_RET_STS_ERROR;
1114 
1115             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1116             THEN
1117                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1118                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Value From ');
1119                OE_MSG_PUB.Add;
1120             END IF;
1121 		  RAISE FND_API.G_EXC_ERROR;
1122 
1123      END IF;
1124      --dbms_output.put_line('for cano of value from ,'||l_return_status);
1125 
1126    -- End of validation for canonical form on value from
1127 
1128    -- Validation for Value_To
1129 
1130 	 IF p_Pricing_Attr_rec.pricing_attribute_context IS NOT NULL AND
1131 	    p_Pricing_Attr_rec.pricing_attribute IS NOT NULL AND
1132 		  UPPER(p_Pricing_Attr_rec.comparison_operator_code) = 'BETWEEN' AND
1133 		    (p_Pricing_Attr_rec.pricing_attr_value_to IS NULL AND
1134 			p_Pricing_Attr_rec.pricing_attr_value_from IS NULL)
1135       THEN
1136 		 l_return_status := FND_API.G_RET_STS_ERROR;
1137 
1138 		 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1139 		 THEN
1140 		   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
1141 		   FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTR_VALUE_TO')||'/'||
1142                                                   QP_PRC_UTIL.Get_Attribute_Name('PRICING_ATTR_VALUE_FROM')); --Fix For Bug-1974413
1143 		   OE_MSG_PUB.Add;
1144            END IF;
1145 		  RAISE FND_API.G_EXC_ERROR;
1146       END IF;
1147 
1148 	 l_error_code:=QP_UTIL.validate_num_date(p_Pricing_Attr_rec.pricing_attribute_datatype, p_Pricing_Attr_rec.pricing_attr_value_to);
1149 
1150 	 IF l_error_code  <> 0  THEN
1151 	   l_return_status := FND_API.G_RET_STS_ERROR;
1152 
1153 	   IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1154 	   THEN
1155 		FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1156 		FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Value To ');
1157 		OE_MSG_PUB.Add;
1158         END IF;
1159 		  RAISE FND_API.G_EXC_ERROR;
1160       END IF;
1161 
1162 end if;
1163 */
1164 /* if context, attribute, value_from or value_to is not null */
1165 
1166 	 -- End of validation for canonical form on value to
1167 
1168    OE_Debug_Pub.add ( 'before logging delayed request for Price Break Child Line ');
1169 
1170    /* First Delayed Request to ensure that only one price break pricing attribute
1171 	 is allowed for a given Price Break Header.
1172 	 Second Delayed Request to prevent overlapping Price Break Ranges for a given
1173 	 Price Break Header */
1174 
1175 	 BEGIN
1176 	   select from_rltd_modifier_id
1177 	   into   l_from_rltd_modifier_id
1178 	   from   qp_rltd_modifiers
1179 	   where  to_rltd_modifier_id = p_Pricing_Attr_rec.list_line_id;
1180 	 EXCEPTION
1181 	   WHEN OTHERS THEN
1182 		l_from_rltd_modifier_id := NULL;
1183 	 END;
1184 
1185 	 --Added to check whether the PBH is for continuous or
1186 	 --non-continuous price breaks
1187 	 BEGIN
1188 	   select continuous_price_break_flag
1189 	   into   l_continuous_price_break_flag
1190 	   from   qp_list_lines
1191 	   where  list_line_id = l_from_rltd_modifier_id;
1192 	 EXCEPTION
1193 	   WHEN OTHERS THEN
1194 	      l_continuous_price_break_flag := NULL;
1195 	 END;
1196 
1197 	 IF p_Pricing_Attr_rec.pricing_attribute_context = 'VOLUME' AND
1198 	    l_from_rltd_modifier_id IS NOT NULL
1199 	 THEN
1200    OE_Debug_Pub.add ( 'Logging delayed request for Price Break Child Line ');
1201         QP_DELAYED_REQUESTS_PVT.Log_Request
1202          (p_entity_code		=> QP_GLOBALS.G_ENTITY_ALL,
1203 	     p_entity_id		=> p_PRICING_ATTR_rec.list_line_id,
1204 	     p_requesting_entity_code	=> QP_GLOBALS.G_ENTITY_PRICING_ATTR,
1205           p_requesting_entity_id	=> p_PRICING_ATTR_rec.list_line_id,
1206 	     p_request_type		=> QP_GLOBALS.G_MULTIPLE_PRICE_BREAK_ATTRS,
1207 	     p_param1			=> l_from_rltd_modifier_id,
1208 	     x_return_status	=> l_return_status
1209 	    );
1210 
1211         QP_DELAYED_REQUESTS_PVT.Log_Request
1212          (p_entity_code		=> QP_GLOBALS.G_ENTITY_ALL,
1213 	     p_entity_id		=> p_PRICING_ATTR_rec.list_line_id,
1214 	     p_requesting_entity_code	=> QP_GLOBALS.G_ENTITY_PRICING_ATTR,
1215           p_requesting_entity_id	=> p_PRICING_ATTR_rec.list_line_id,
1216 	     p_request_type		=> QP_GLOBALS.G_OVERLAPPING_PRICE_BREAKS,
1217 	     p_param1			=> l_from_rltd_modifier_id,
1218 	     p_param2			=> l_continuous_price_break_flag,
1219 	     					--Added the param to call the validation
1220 						--function depending upon the break type
1221 	     x_return_status	=> l_return_status
1222 	    );
1223 
1224         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1225 	      oe_debug_pub.add('failed in logging a delayed request ');
1226            RAISE FND_API.G_EXC_ERROR;
1227         END IF;
1228 
1229 
1230 	 END IF; --IF Price Break Child Lines
1231 
1232 
1233     --Raise a warning if the Pricing/Product Attribute being used in setup
1234     --has a sourcing method of 'ATTRIBUTE MAPPING' but is not sourcing-enabled
1235     --or if its sourcing_status is not 'Y', i.e., the build sourcing conc.
1236     --program has to be run.
1237 
1238     IF QP_UTIL.Attrmgr_Installed = 'Y' THEN
1239 
1240       IF p_Pricing_Attr_rec.pricing_attribute_context IS NOT NULL AND
1241          p_Pricing_Attr_rec.pricing_attribute IS NOT NULL
1242       THEN
1243         QP_UTIL.Get_Context_Type('QP_ATTR_DEFNS_PRICING',
1244                                  p_Pricing_Attr_rec.pricing_attribute_context,
1245                                  l_context_type,
1246                                  l_error_code);
1247 
1248         IF l_error_code = 0 THEN --successfully returned context_type
1249 
1250           QP_UTIL.Get_Sourcing_Info(l_context_type,
1251                                   p_Pricing_Attr_rec.pricing_attribute_context,
1252                                   p_Pricing_Attr_rec.pricing_attribute,
1253                                   l_sourcing_enabled,
1254                                   l_sourcing_status,
1255                                   l_sourcing_method);
1256 
1257           IF l_sourcing_method = 'ATTRIBUTE MAPPING' THEN
1258 
1259             IF l_sourcing_enabled <> 'Y' THEN
1260 
1261               FND_MESSAGE.SET_NAME('QP','QP_ENABLE_SOURCING');
1262               FND_MESSAGE.SET_TOKEN('CONTEXT',
1263                                   p_Pricing_Attr_rec.pricing_attribute_context);
1264               FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1265                                   p_Pricing_Attr_rec.pricing_attribute);
1266               OE_MSG_PUB.Add;
1267 
1268             END IF;
1269 
1270             IF l_sourcing_status <> 'Y' THEN
1271 
1272               FND_MESSAGE.SET_NAME('QP','QP_BUILD_SOURCING_RULES');
1273               FND_MESSAGE.SET_TOKEN('CONTEXT',
1274                                   p_Pricing_Attr_rec.pricing_attribute_context);
1275               FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1276                                   p_Pricing_Attr_rec.pricing_attribute);
1277               OE_MSG_PUB.Add;
1278 
1279             END IF;
1280 
1281           END IF; --If sourcing_method = 'ATTRIBUTE MAPPING'
1282 
1283         END IF; --l_error_code = 0
1284 
1285       END IF;--If pricing_attribute_context and pricing_attribute are NOT NULL
1286 
1287     END IF; --If QP_UTIL.Attrmgr_Installed = 'Y'
1288 
1289     --  Done validating entity
1290 
1291     x_return_status := l_return_status;
1292 
1293 EXCEPTION
1294 
1295     WHEN NO_DATA_FOUND THEN
1296 
1297          x_return_status := FND_API.G_RET_STS_ERROR;
1298 
1299     WHEN FND_API.G_EXC_ERROR THEN
1300 
1301         x_return_status := FND_API.G_RET_STS_ERROR;
1302 
1303     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1304 
1305         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1306 
1307     WHEN OTHERS THEN
1308 
1309         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1310 
1311         IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1312         THEN
1313             oe_msg_pub.Add_Exc_Msg
1314             (   G_PKG_NAME
1315             ,   'Entity'
1316             );
1317         END IF;
1318 
1319 END Entity;
1320 
1321 --  Procedure Attributes
1322 
1323 PROCEDURE Attributes
1324 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1325 ,   p_PRICING_ATTR_rec              IN  QP_Price_List_PUB.Pricing_Attr_Rec_Type
1326 ,   p_old_PRICING_ATTR_rec          IN  QP_Price_List_PUB.Pricing_Attr_Rec_Type :=
1327                                         QP_Price_List_PUB.G_MISS_PRICING_ATTR_REC
1328 )
1329 IS
1330 l_pte_code varchar2(30);
1331 l_ss_code varchar2(30);
1332 BEGIN
1333 
1334     x_return_status := FND_API.G_RET_STS_SUCCESS;
1335 
1336     --  Validate PRICING_ATTR attributes
1337 
1338     IF  p_PRICING_ATTR_rec.accumulate_flag IS NOT NULL AND
1339         (   p_PRICING_ATTR_rec.accumulate_flag <>
1340             p_old_PRICING_ATTR_rec.accumulate_flag OR
1341             p_old_PRICING_ATTR_rec.accumulate_flag IS NULL )
1342     THEN
1343         IF NOT QP_Validate.Accumulate(p_PRICING_ATTR_rec.accumulate_flag) THEN
1344             x_return_status := FND_API.G_RET_STS_ERROR;
1345         END IF;
1346     END IF;
1347 
1348     IF  p_PRICING_ATTR_rec.attribute_grouping_no IS NOT NULL AND
1349         (   p_PRICING_ATTR_rec.attribute_grouping_no <>
1350             p_old_PRICING_ATTR_rec.attribute_grouping_no OR
1351             p_old_PRICING_ATTR_rec.attribute_grouping_no IS NULL )
1352     THEN
1353         IF NOT QP_Validate.Attribute_Grouping_No(p_PRICING_ATTR_rec.attribute_grouping_no) THEN
1354             x_return_status := FND_API.G_RET_STS_ERROR;
1355         END IF;
1356     END IF;
1357 
1358     IF  p_PRICING_ATTR_rec.created_by IS NOT NULL AND
1359         (   p_PRICING_ATTR_rec.created_by <>
1360             p_old_PRICING_ATTR_rec.created_by OR
1361             p_old_PRICING_ATTR_rec.created_by IS NULL )
1362     THEN
1363         IF NOT QP_Validate.Created_By(p_PRICING_ATTR_rec.created_by) THEN
1364             x_return_status := FND_API.G_RET_STS_ERROR;
1365         END IF;
1366     END IF;
1367 
1368     IF  p_PRICING_ATTR_rec.creation_date IS NOT NULL AND
1369         (   p_PRICING_ATTR_rec.creation_date <>
1370             p_old_PRICING_ATTR_rec.creation_date OR
1371             p_old_PRICING_ATTR_rec.creation_date IS NULL )
1372     THEN
1373         IF NOT QP_Validate.Creation_Date(p_PRICING_ATTR_rec.creation_date) THEN
1374             x_return_status := FND_API.G_RET_STS_ERROR;
1375         END IF;
1376     END IF;
1377 
1378     IF  p_PRICING_ATTR_rec.excluder_flag IS NOT NULL AND
1379         (   p_PRICING_ATTR_rec.excluder_flag <>
1380             p_old_PRICING_ATTR_rec.excluder_flag OR
1381             p_old_PRICING_ATTR_rec.excluder_flag IS NULL )
1382     THEN
1383         IF NOT QP_Validate.Excluder(p_PRICING_ATTR_rec.excluder_flag) THEN
1384             x_return_status := FND_API.G_RET_STS_ERROR;
1385         END IF;
1386     END IF;
1387 
1388     IF  p_PRICING_ATTR_rec.last_updated_by IS NOT NULL AND
1389         (   p_PRICING_ATTR_rec.last_updated_by <>
1390             p_old_PRICING_ATTR_rec.last_updated_by OR
1391             p_old_PRICING_ATTR_rec.last_updated_by IS NULL )
1392     THEN
1393         IF NOT QP_Validate.Last_Updated_By(p_PRICING_ATTR_rec.last_updated_by) THEN
1394             x_return_status := FND_API.G_RET_STS_ERROR;
1395         END IF;
1396     END IF;
1397 
1398     IF  p_PRICING_ATTR_rec.last_update_date IS NOT NULL AND
1399         (   p_PRICING_ATTR_rec.last_update_date <>
1400             p_old_PRICING_ATTR_rec.last_update_date OR
1401             p_old_PRICING_ATTR_rec.last_update_date IS NULL )
1402     THEN
1403         IF NOT QP_Validate.Last_Update_Date(p_PRICING_ATTR_rec.last_update_date) THEN
1404             x_return_status := FND_API.G_RET_STS_ERROR;
1405         END IF;
1406     END IF;
1407 
1408     IF  p_PRICING_ATTR_rec.last_update_login IS NOT NULL AND
1409         (   p_PRICING_ATTR_rec.last_update_login <>
1410             p_old_PRICING_ATTR_rec.last_update_login OR
1411             p_old_PRICING_ATTR_rec.last_update_login IS NULL )
1412     THEN
1413         IF NOT QP_Validate.Last_Update_Login(p_PRICING_ATTR_rec.last_update_login) THEN
1414             x_return_status := FND_API.G_RET_STS_ERROR;
1415         END IF;
1416     END IF;
1417 
1418     IF  p_PRICING_ATTR_rec.list_line_id IS NOT NULL AND
1419         (   p_PRICING_ATTR_rec.list_line_id <>
1420             p_old_PRICING_ATTR_rec.list_line_id OR
1421             p_old_PRICING_ATTR_rec.list_line_id IS NULL )
1422     THEN
1423         IF NOT QP_Validate.List_Line(p_PRICING_ATTR_rec.list_line_id) THEN
1424             x_return_status := FND_API.G_RET_STS_ERROR;
1425         END IF;
1426     END IF;
1427 
1428     IF  p_PRICING_ATTR_rec.pricing_attribute IS NOT NULL AND
1429         (   p_PRICING_ATTR_rec.pricing_attribute <>
1430             p_old_PRICING_ATTR_rec.pricing_attribute OR
1431             p_old_PRICING_ATTR_rec.pricing_attribute IS NULL )
1432     THEN
1433         IF NOT QP_Validate.Pricing_Attribute(p_PRICING_ATTR_rec.pricing_attribute) THEN
1434             x_return_status := FND_API.G_RET_STS_ERROR;
1435         END IF;
1436     END IF;
1437 
1438     IF  p_PRICING_ATTR_rec.pricing_attribute_context IS NOT NULL AND
1439         (   p_PRICING_ATTR_rec.pricing_attribute_context <>
1440             p_old_PRICING_ATTR_rec.pricing_attribute_context OR
1441             p_old_PRICING_ATTR_rec.pricing_attribute_context IS NULL )
1442     THEN
1443         IF NOT QP_Validate.Pricing_Attribute_Context(p_PRICING_ATTR_rec.pricing_attribute_context) THEN
1444             x_return_status := FND_API.G_RET_STS_ERROR;
1445         END IF;
1446     END IF;
1447 
1448     IF  p_PRICING_ATTR_rec.pricing_attribute_id IS NOT NULL AND
1449         (   p_PRICING_ATTR_rec.pricing_attribute_id <>
1450             p_old_PRICING_ATTR_rec.pricing_attribute_id OR
1451             p_old_PRICING_ATTR_rec.pricing_attribute_id IS NULL )
1452     THEN
1453         IF NOT QP_Validate.Pricing_Attribute(p_PRICING_ATTR_rec.pricing_attribute_id) THEN
1454             x_return_status := FND_API.G_RET_STS_ERROR;
1455         END IF;
1456     END IF;
1457 
1458     IF  p_PRICING_ATTR_rec.from_rltd_modifier_id IS NOT NULL AND
1459         (   p_PRICING_ATTR_rec.from_rltd_modifier_id <>
1460             p_old_PRICING_ATTR_rec.from_rltd_modifier_id OR
1461             p_old_PRICING_ATTR_rec.from_rltd_modifier_id IS NULL )
1462     THEN
1463         /*
1464         IF NOT QP_Validate.From_Rltd_Modifier_Id(p_PRICING_ATTR_rec.from_rltd_modifier_id) THEN
1465             x_return_status := FND_API.G_RET_STS_ERROR;
1466         END IF;
1467         */
1468         NULL;
1469 
1470     END IF;
1471 
1472     IF  p_PRICING_ATTR_rec.pricing_attr_value_from IS NOT NULL AND
1473         (   p_PRICING_ATTR_rec.pricing_attr_value_from <>
1474             p_old_PRICING_ATTR_rec.pricing_attr_value_from OR
1475             p_old_PRICING_ATTR_rec.pricing_attr_value_from IS NULL )
1476     THEN
1477         IF NOT QP_Validate.Pricing_Attr_Value_From(p_PRICING_ATTR_rec.pricing_attr_value_from) THEN
1478             x_return_status := FND_API.G_RET_STS_ERROR;
1479         END IF;
1480     END IF;
1481 
1482     IF  p_PRICING_ATTR_rec.pricing_attr_value_to IS NOT NULL AND
1483         (   p_PRICING_ATTR_rec.pricing_attr_value_to <>
1484             p_old_PRICING_ATTR_rec.pricing_attr_value_to OR
1485             p_old_PRICING_ATTR_rec.pricing_attr_value_to IS NULL )
1486     THEN
1487         IF NOT QP_Validate.Pricing_Attr_Value_To(p_PRICING_ATTR_rec.pricing_attr_value_to) THEN
1488             x_return_status := FND_API.G_RET_STS_ERROR;
1489         END IF;
1490     END IF;
1491 
1492     IF  p_PRICING_ATTR_rec.product_attribute IS NOT NULL AND
1493         (   p_PRICING_ATTR_rec.product_attribute <>
1494             p_old_PRICING_ATTR_rec.product_attribute OR
1495             p_old_PRICING_ATTR_rec.product_attribute IS NULL )
1496     THEN
1497         IF NOT QP_Validate.Product_Attribute(p_PRICING_ATTR_rec.product_attribute) THEN
1498             x_return_status := FND_API.G_RET_STS_ERROR;
1499         END IF;
1500     END IF;
1501 
1502     IF  p_PRICING_ATTR_rec.product_attribute_context IS NOT NULL AND
1503         (   p_PRICING_ATTR_rec.product_attribute_context <>
1504             p_old_PRICING_ATTR_rec.product_attribute_context OR
1505             p_old_PRICING_ATTR_rec.product_attribute_context IS NULL )
1506     THEN
1507         IF NOT QP_Validate.Product_Attribute_Context(p_PRICING_ATTR_rec.product_attribute_context) THEN
1508             x_return_status := FND_API.G_RET_STS_ERROR;
1509         END IF;
1510     END IF;
1511 
1512     IF  p_PRICING_ATTR_rec.product_attr_value IS NOT NULL AND
1513         (   p_PRICING_ATTR_rec.product_attr_value <>
1514             p_old_PRICING_ATTR_rec.product_attr_value OR
1515             p_old_PRICING_ATTR_rec.product_attr_value IS NULL )
1516     THEN
1517         IF NOT QP_Validate.Product_Attr_Value(p_PRICING_ATTR_rec.product_attr_value) THEN
1518             x_return_status := FND_API.G_RET_STS_ERROR;
1519         END IF;
1520     END IF;
1521 
1522     IF  p_PRICING_ATTR_rec.product_uom_code IS NOT NULL AND
1523         (   p_PRICING_ATTR_rec.product_uom_code <>
1524             p_old_PRICING_ATTR_rec.product_uom_code OR
1525             p_old_PRICING_ATTR_rec.product_uom_code IS NULL )
1526     THEN
1527         IF NOT QP_Validate.Product_Uom(p_PRICING_ATTR_rec.product_uom_code) THEN
1528             x_return_status := FND_API.G_RET_STS_ERROR;
1529         END IF;
1530     END IF;
1531 
1532     IF  p_PRICING_ATTR_rec.program_application_id IS NOT NULL AND
1533         (   p_PRICING_ATTR_rec.program_application_id <>
1534             p_old_PRICING_ATTR_rec.program_application_id OR
1535             p_old_PRICING_ATTR_rec.program_application_id IS NULL )
1536     THEN
1537         IF NOT QP_Validate.Program_Application(p_PRICING_ATTR_rec.program_application_id) THEN
1538             x_return_status := FND_API.G_RET_STS_ERROR;
1539         END IF;
1540     END IF;
1541 
1542     IF  p_PRICING_ATTR_rec.program_id IS NOT NULL AND
1543         (   p_PRICING_ATTR_rec.program_id <>
1544             p_old_PRICING_ATTR_rec.program_id OR
1545             p_old_PRICING_ATTR_rec.program_id IS NULL )
1546     THEN
1547         IF NOT QP_Validate.Program(p_PRICING_ATTR_rec.program_id) THEN
1548             x_return_status := FND_API.G_RET_STS_ERROR;
1549         END IF;
1550     END IF;
1551 
1552     IF  p_PRICING_ATTR_rec.program_update_date IS NOT NULL AND
1553         (   p_PRICING_ATTR_rec.program_update_date <>
1554             p_old_PRICING_ATTR_rec.program_update_date OR
1555             p_old_PRICING_ATTR_rec.program_update_date IS NULL )
1556     THEN
1557         IF NOT QP_Validate.Program_Update_Date(p_PRICING_ATTR_rec.program_update_date) THEN
1558             x_return_status := FND_API.G_RET_STS_ERROR;
1559         END IF;
1560     END IF;
1561 
1562     IF  p_PRICING_ATTR_rec.request_id IS NOT NULL AND
1563         (   p_PRICING_ATTR_rec.request_id <>
1564             p_old_PRICING_ATTR_rec.request_id OR
1565             p_old_PRICING_ATTR_rec.request_id IS NULL )
1566     THEN
1567         IF NOT QP_Validate.Request(p_PRICING_ATTR_rec.request_id) THEN
1568             x_return_status := FND_API.G_RET_STS_ERROR;
1569         END IF;
1570     END IF;
1571 
1572     IF  p_PRICING_ATTR_rec.comparison_operator_code IS NOT NULL AND
1573 	   (   p_PRICING_ATTR_rec.comparison_operator_code <>
1574 		  p_old_PRICING_ATTR_rec.comparison_operator_code OR
1575 		  p_old_PRICING_ATTR_rec.comparison_operator_code IS NULL )
1576     THEN
1577 	   IF NOT QP_Validate.comparison_operator(p_PRICING_ATTR_rec.comparison_operator_code) THEN
1578 		  x_return_status := FND_API.G_RET_STS_ERROR;
1579         END IF;
1580     END IF;
1581 
1582     IF  p_PRICING_ATTR_rec.pricing_attribute_datatype IS NOT NULL AND
1583 	   (   p_PRICING_ATTR_rec.pricing_attribute_datatype <>
1584 		  p_old_PRICING_ATTR_rec.pricing_attribute_datatype OR
1585 		  p_old_PRICING_ATTR_rec.pricing_attribute_datatype IS NULL )
1586     THEN
1587 	   IF NOT QP_Validate.Pricing_Attribute_Datatype(p_PRICING_ATTR_rec.pricing_attribute_datatype) THEN
1588 		  x_return_status := FND_API.G_RET_STS_ERROR;
1589         END IF;
1590     END IF;
1591 
1592     IF  p_PRICING_ATTR_rec.product_attribute_datatype IS NOT NULL AND
1593 	   (   p_PRICING_ATTR_rec.product_attribute_datatype <>
1594 		  p_old_PRICING_ATTR_rec.product_attribute_datatype OR
1595 		  p_old_PRICING_ATTR_rec.product_attribute_datatype IS NULL )
1596     THEN
1597 	   IF NOT QP_Validate.product_attribute_datatype(p_PRICING_ATTR_rec.product_attribute_datatype) THEN
1598 		  x_return_status := FND_API.G_RET_STS_ERROR;
1599         END IF;
1600     END IF;
1601 
1602 
1603     IF  (p_PRICING_ATTR_rec.attribute1 IS NOT NULL AND
1604         (   p_PRICING_ATTR_rec.attribute1 <>
1605             p_old_PRICING_ATTR_rec.attribute1 OR
1606             p_old_PRICING_ATTR_rec.attribute1 IS NULL ))
1607     OR  (p_PRICING_ATTR_rec.attribute10 IS NOT NULL AND
1608         (   p_PRICING_ATTR_rec.attribute10 <>
1609             p_old_PRICING_ATTR_rec.attribute10 OR
1610             p_old_PRICING_ATTR_rec.attribute10 IS NULL ))
1611     OR  (p_PRICING_ATTR_rec.attribute11 IS NOT NULL AND
1612         (   p_PRICING_ATTR_rec.attribute11 <>
1613             p_old_PRICING_ATTR_rec.attribute11 OR
1614             p_old_PRICING_ATTR_rec.attribute11 IS NULL ))
1615     OR  (p_PRICING_ATTR_rec.attribute12 IS NOT NULL AND
1616         (   p_PRICING_ATTR_rec.attribute12 <>
1617             p_old_PRICING_ATTR_rec.attribute12 OR
1618             p_old_PRICING_ATTR_rec.attribute12 IS NULL ))
1619     OR  (p_PRICING_ATTR_rec.attribute13 IS NOT NULL AND
1620         (   p_PRICING_ATTR_rec.attribute13 <>
1621             p_old_PRICING_ATTR_rec.attribute13 OR
1622             p_old_PRICING_ATTR_rec.attribute13 IS NULL ))
1623     OR  (p_PRICING_ATTR_rec.attribute14 IS NOT NULL AND
1624         (   p_PRICING_ATTR_rec.attribute14 <>
1625             p_old_PRICING_ATTR_rec.attribute14 OR
1626             p_old_PRICING_ATTR_rec.attribute14 IS NULL ))
1627     OR  (p_PRICING_ATTR_rec.attribute15 IS NOT NULL AND
1628         (   p_PRICING_ATTR_rec.attribute15 <>
1629             p_old_PRICING_ATTR_rec.attribute15 OR
1630             p_old_PRICING_ATTR_rec.attribute15 IS NULL ))
1631     OR  (p_PRICING_ATTR_rec.attribute2 IS NOT NULL AND
1632         (   p_PRICING_ATTR_rec.attribute2 <>
1633             p_old_PRICING_ATTR_rec.attribute2 OR
1634             p_old_PRICING_ATTR_rec.attribute2 IS NULL ))
1635     OR  (p_PRICING_ATTR_rec.attribute3 IS NOT NULL AND
1636         (   p_PRICING_ATTR_rec.attribute3 <>
1637             p_old_PRICING_ATTR_rec.attribute3 OR
1638             p_old_PRICING_ATTR_rec.attribute3 IS NULL ))
1639     OR  (p_PRICING_ATTR_rec.attribute4 IS NOT NULL AND
1640         (   p_PRICING_ATTR_rec.attribute4 <>
1641             p_old_PRICING_ATTR_rec.attribute4 OR
1642             p_old_PRICING_ATTR_rec.attribute4 IS NULL ))
1643     OR  (p_PRICING_ATTR_rec.attribute5 IS NOT NULL AND
1644         (   p_PRICING_ATTR_rec.attribute5 <>
1645             p_old_PRICING_ATTR_rec.attribute5 OR
1646             p_old_PRICING_ATTR_rec.attribute5 IS NULL ))
1647     OR  (p_PRICING_ATTR_rec.attribute6 IS NOT NULL AND
1648         (   p_PRICING_ATTR_rec.attribute6 <>
1649             p_old_PRICING_ATTR_rec.attribute6 OR
1650             p_old_PRICING_ATTR_rec.attribute6 IS NULL ))
1651     OR  (p_PRICING_ATTR_rec.attribute7 IS NOT NULL AND
1652         (   p_PRICING_ATTR_rec.attribute7 <>
1653             p_old_PRICING_ATTR_rec.attribute7 OR
1654             p_old_PRICING_ATTR_rec.attribute7 IS NULL ))
1655     OR  (p_PRICING_ATTR_rec.attribute8 IS NOT NULL AND
1656         (   p_PRICING_ATTR_rec.attribute8 <>
1657             p_old_PRICING_ATTR_rec.attribute8 OR
1658             p_old_PRICING_ATTR_rec.attribute8 IS NULL ))
1659     OR  (p_PRICING_ATTR_rec.attribute9 IS NOT NULL AND
1660         (   p_PRICING_ATTR_rec.attribute9 <>
1661             p_old_PRICING_ATTR_rec.attribute9 OR
1662             p_old_PRICING_ATTR_rec.attribute9 IS NULL ))
1663     OR  (p_PRICING_ATTR_rec.context IS NOT NULL AND
1664         (   p_PRICING_ATTR_rec.context <>
1665             p_old_PRICING_ATTR_rec.context OR
1666             p_old_PRICING_ATTR_rec.context IS NULL ))
1667     THEN
1668 
1669     --  These calls are temporarily commented out
1670 
1671 /*
1672         FND_FLEX_DESC_VAL.Set_Column_Value
1673         (   column_name                   => 'ATTRIBUTE1'
1674         ,   column_value                  => p_PRICING_ATTR_rec.attribute1
1675         );
1676         FND_FLEX_DESC_VAL.Set_Column_Value
1677         (   column_name                   => 'ATTRIBUTE10'
1678         ,   column_value                  => p_PRICING_ATTR_rec.attribute10
1679         );
1680         FND_FLEX_DESC_VAL.Set_Column_Value
1681         (   column_name                   => 'ATTRIBUTE11'
1682         ,   column_value                  => p_PRICING_ATTR_rec.attribute11
1683         );
1684         FND_FLEX_DESC_VAL.Set_Column_Value
1685         (   column_name                   => 'ATTRIBUTE12'
1686         ,   column_value                  => p_PRICING_ATTR_rec.attribute12
1687         );
1688         FND_FLEX_DESC_VAL.Set_Column_Value
1689         (   column_name                   => 'ATTRIBUTE13'
1690         ,   column_value                  => p_PRICING_ATTR_rec.attribute13
1691         );
1692         FND_FLEX_DESC_VAL.Set_Column_Value
1693         (   column_name                   => 'ATTRIBUTE14'
1694         ,   column_value                  => p_PRICING_ATTR_rec.attribute14
1695         );
1696         FND_FLEX_DESC_VAL.Set_Column_Value
1697         (   column_name                   => 'ATTRIBUTE15'
1698         ,   column_value                  => p_PRICING_ATTR_rec.attribute15
1699         );
1700         FND_FLEX_DESC_VAL.Set_Column_Value
1701         (   column_name                   => 'ATTRIBUTE2'
1702         ,   column_value                  => p_PRICING_ATTR_rec.attribute2
1703         );
1704         FND_FLEX_DESC_VAL.Set_Column_Value
1705         (   column_name                   => 'ATTRIBUTE3'
1706         ,   column_value                  => p_PRICING_ATTR_rec.attribute3
1707         );
1708         FND_FLEX_DESC_VAL.Set_Column_Value
1709         (   column_name                   => 'ATTRIBUTE4'
1710         ,   column_value                  => p_PRICING_ATTR_rec.attribute4
1711         );
1712         FND_FLEX_DESC_VAL.Set_Column_Value
1713         (   column_name                   => 'ATTRIBUTE5'
1714         ,   column_value                  => p_PRICING_ATTR_rec.attribute5
1715         );
1716         FND_FLEX_DESC_VAL.Set_Column_Value
1717         (   column_name                   => 'ATTRIBUTE6'
1718         ,   column_value                  => p_PRICING_ATTR_rec.attribute6
1719         );
1720         FND_FLEX_DESC_VAL.Set_Column_Value
1721         (   column_name                   => 'ATTRIBUTE7'
1722         ,   column_value                  => p_PRICING_ATTR_rec.attribute7
1723         );
1724         FND_FLEX_DESC_VAL.Set_Column_Value
1725         (   column_name                   => 'ATTRIBUTE8'
1726         ,   column_value                  => p_PRICING_ATTR_rec.attribute8
1727         );
1728         FND_FLEX_DESC_VAL.Set_Column_Value
1729         (   column_name                   => 'ATTRIBUTE9'
1730         ,   column_value                  => p_PRICING_ATTR_rec.attribute9
1731         );
1732         FND_FLEX_DESC_VAL.Set_Column_Value
1733         (   column_name                   => 'CONTEXT'
1734         ,   column_value                  => p_PRICING_ATTR_rec.context
1735         );
1736 */
1737 
1738         --  Validate descriptive flexfield.
1739 
1740         IF NOT QP_Validate.Desc_Flex( 'PRICING_ATTR' ) THEN
1741             x_return_status := FND_API.G_RET_STS_ERROR;
1742         END IF;
1743 
1744     END IF;
1745 
1746     --  Done validating attributes
1747 
1748 EXCEPTION
1749 
1750 
1751 
1752     WHEN FND_API.G_EXC_ERROR THEN
1753 
1754         x_return_status := FND_API.G_RET_STS_ERROR;
1755 
1756     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1757 
1758         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1759 
1760     WHEN OTHERS THEN
1761 
1762         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1763 
1764         IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1765         THEN
1766             oe_msg_pub.Add_Exc_Msg
1767             (   G_PKG_NAME
1768             ,   'Attributes'
1769             );
1770         END IF;
1771 
1772 END Attributes;
1773 
1774 --  Procedure Entity_Delete
1775 
1776 PROCEDURE Entity_Delete
1777 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1778 ,   p_PRICING_ATTR_rec              IN  QP_Price_List_PUB.Pricing_Attr_Rec_Type
1779 )
1780 IS
1781 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
1782 BEGIN
1783 
1784     --  Validate entity delete.
1785 
1786     NULL;
1787 
1788     --  Done.
1789 
1790     x_return_status := l_return_status;
1791 
1792 EXCEPTION
1793 
1794     WHEN FND_API.G_EXC_ERROR THEN
1795 
1796         x_return_status := FND_API.G_RET_STS_ERROR;
1797 
1798     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1799 
1800         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1801 
1802     WHEN OTHERS THEN
1803 
1804         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1805 
1806         IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1807         THEN
1808             oe_msg_pub.Add_Exc_Msg
1809             (   G_PKG_NAME
1810             ,   'Entity_Delete'
1811             );
1812         END IF;
1813 
1814 END Entity_Delete;
1815 
1816 
1817 /* Start Procedure */
1818 
1819 FUNCTION Check_Dup_Pra (   p_Start_Date_Active IN DATE
1820   				   , p_End_Date_Active IN DATE
1821 					   , p_Revision IN VARCHAR2
1822 					   , p_List_Line_ID IN NUMBER
1823 					   , p_List_Header_ID IN NUMBER
1824 					   , p_x_rows OUT NOCOPY NUMBER
1825 					   , p_x_revision OUT NOCOPY BOOLEAN
1826 					   , p_x_effdates OUT NOCOPY BOOLEAN
1827 					   , p_x_dup_sdate OUT NOCOPY DATE
1828 					   , p_x_dup_edate OUT NOCOPY DATE
1829 					 )
1830 RETURN BOOLEAN
1831 is
1832         l_attr_lines_count NUMBER;
1833 
1834 CURSOR get_rec(l_List_Line_ID NUMBER ) is
1835 select a.list_line_id col1, b.list_line_id col2
1836 from qp_pricing_attributes a, qp_pricing_attributes b
1837 where 	a.list_line_id = l_List_Line_ID
1838 and b.list_line_id <> l_List_Line_ID
1839 and not exists (select Null
1840                 from    qp_rltd_modifiers qrm
1841                 Where   qrm.to_rltd_modifier_id = b.list_line_id
1842                 and     qrm.rltd_modifier_grp_type = 'PRICE BREAK')
1843 and b.product_attribute_context = a.product_attribute_context
1844 and b.product_attribute = a.product_attribute
1845 and b.product_attr_value = a.product_attr_value
1846 and b.product_uom_code = a.product_uom_code   --2943344
1847 and nvl( b.pricing_attribute_context,' ') = nvl(a.pricing_attribute_context,' ')
1848 and nvl(b.pricing_attribute,' ') = nvl(a.pricing_attribute,' ')
1849 and nvl(b.pricing_attr_value_from,0) = nvl(a.pricing_attr_value_from,0)
1850 and nvl(b.pricing_attr_value_to,0) = nvl(a.pricing_attr_value_to,0)
1851 and nvl(b.comparison_operator_code,' ') = nvl(a.comparison_operator_code,' ')  --Added for 2128739; julin: added nvl
1852 and b.list_header_id = p_List_Header_Id
1853 and a.list_header_id = p_List_Header_Id
1854 group by a.list_line_id, b.list_line_id
1855 having count(b.list_line_id ) = l_attr_lines_count
1856 and count(b.list_line_id) = ( select count(*) from qp_pricing_attributes where list_line_id = b.list_line_id); --2326820
1857 
1858 
1859 
1860 l_count varchar2(2);
1861 l_min_date date := to_date('01/01/1900', 'MM/DD/YYYY');
1862 l_max_date date := to_date('12/31/9999', 'MM/DD/YYYY');
1863 l_sdate DATE := NULL;
1864 l_edate DATE := NULL;
1865 BEGIN
1866 
1867      select count(*)
1868      Into l_attr_lines_count
1869      from qp_pricing_attributes
1870      where list_line_id = p_List_Line_ID;
1871 
1872     for rec in get_rec(p_List_Line_ID)
1873     loop
1874 
1875 /*---------------- Bug 1951884-----------------*/
1876 l_min_date := to_date('01/01/1900', 'MM/DD/YYYY');
1877 l_max_date := to_date('12/31/9999', 'MM/DD/YYYY');
1878 /*--------------------------------------------*/
1879 	begin
1880 	    SELECT revision, start_date_active, end_date_active
1881 	    into l_count, l_sdate, l_edate
1882 	    from qp_list_lines
1883 	    where list_line_id = rec.col2;
1884 
1885 	    exception
1886 	    when no_data_found then null;
1887      end;
1888 
1889 	    if l_count = p_Revision then
1890 		p_x_revision := FALSE;
1891 	     RETURN FALSE;
1892 
1893 	    END IF;
1894 
1895 
1896       IF ( nvl(p_Start_Date_Active, l_min_date) <= nvl(l_sdate, l_min_date))
1897         THEN
1898             l_min_date := nvl(p_Start_Date_Active, l_min_date);
1899         ELSE
1900             l_min_date := nvl(l_sdate, l_min_date);
1901       END IF;
1902 
1903      IF ( nvl(p_End_Date_Active, l_max_date) >= nvl(l_edate, l_max_date))
1904         THEN
1905             l_max_date := nvl(p_End_Date_Active, l_max_date);
1906         ELSE
1907             l_max_date := nvl(l_edate, l_max_date);
1908       END IF;
1909 
1910 
1911 
1912        if ( trunc(nvl(l_sdate, l_min_date)) between
1913              trunc(nvl(p_Start_Date_Active, l_min_date))
1914 		and trunc(nvl(p_End_Date_Active, l_max_date)) )
1915 	  OR
1916           ( trunc(nvl(l_edate, l_max_date)) between
1917              trunc(nvl(p_Start_Date_Active, l_min_date))
1918 	     and trunc(nvl(p_End_Date_Active, l_max_date)) )
1919 
1920           OR
1921           ( trunc(nvl(l_sdate, l_min_date)) <=
1922                    nvl(p_Start_Date_Active,l_min_date)
1923             AND
1924             trunc(nvl(l_edate, l_max_date)) >=
1925                    nvl(p_End_Date_Active,l_max_date) )
1926 
1927        THEN
1928          p_x_dup_sdate := l_sdate;
1929          p_x_dup_edate := l_edate;
1930 
1931          oe_debug_pub.add('Dates Overlapping' );
1932          p_x_effdates := FALSE;
1933          RETURN FALSE;
1934        end if;
1935 
1936     end loop;
1937 
1938 
1939     p_x_rows := sql%rowcount;
1940     RETURN TRUE;
1941 
1942     EXCEPTION
1943     WHEN NO_DATA_FOUND THEN
1944       p_x_rows := sql%rowcount;
1945 		p_x_revision := TRUE;
1946 		p_x_effdates := TRUE;
1947 	 RETURN TRUE;
1948 
1949     WHEN OTHERS THEN
1950        p_x_rows := sql%rowcount;
1951 		p_x_revision := FALSE;
1952 		p_x_effdates := FALSE;
1953 	  RETURN FALSE;
1954 
1955 END Check_Dup_Pra;
1956 
1957 
1958 /* End ------------- */
1959 
1960 
1961 
1962 
1963 
1964 
1965 
1966 /* New Code Jan18 */
1967 FUNCTION Check_Line_Revision(   p_Revision IN VARCHAR2
1968 					   , p_List_Line_ID IN NUMBER
1969 					   , p_List_Header_ID IN NUMBER
1970 					   , p_x_rows OUT NOCOPY /* file.sql.39 change */ NUMBER
1971 					 )
1972 RETURN BOOLEAN
1973 IS
1974  l_dummy VARCHAR2(20);
1975  l_dummy1 VARCHAR2(20);
1976 BEGIN
1977 
1978 select a.list_line_id, b.list_line_id
1979 into l_dummy, l_dummy1
1980 from qp_pricing_attributes a, qp_pricing_attributes b, qp_list_lines c
1981 where 	a.list_line_id = p_List_Line_ID
1982 and b.list_line_id <> p_List_Line_ID
1983 and b.product_attribute_context = a.product_attribute_context
1984 and b.product_attribute = a.product_attribute
1985 and b.product_attr_value = a.product_attr_value
1986 -- and nvl(b.product_attribute_context,' ') = nvl(a.product_attribute_context,' ') ** bug 2813068 **
1987 -- and nvl(b.product_attribute,' ') = nvl(a.product_attribute,' ') ** bug 2813068 **
1988 -- and nvl(b.product_attr_value,' ') = nvl(a.product_attr_value,' ') ** bug 2813068 **
1989 and nvl(b.product_uom_code,' ') = nvl(a.product_uom_code,' ')
1990 and nvl(b.pricing_attribute_context,' ') = nvl(a.pricing_attribute_context,' ')
1991 and nvl(b.pricing_attribute,' ') = nvl(a.pricing_attribute,' ' )
1992 and nvl(b.pricing_attr_value_from,' ') = nvl(a.pricing_attr_value_from,' ')
1993 and nvl(b.pricing_attr_value_to,' ') = nvl(a.pricing_attr_value_to,' ')
1994 and b.comparison_operator_code = a.comparison_operator_code                 --Added for 2128739
1995 and a.list_line_id = c.list_line_id
1996 and nvl(c.revision,' ') = nvl(p_Revision,' ')
1997 group by a.list_line_id, b.list_line_id
1998 having count(b.list_line_id) = ( select count(*)
1999 					     from qp_pricing_attributes
2000 						where list_line_id = b.list_line_id)  ;
2001 
2002 
2003     p_x_rows := sql%rowcount;
2004 
2005     if p_x_rows <> 0 then
2006 	  RETURN FALSE;
2007     else
2008 	  RETURN TRUE;
2009     end if;
2010 
2011 
2012 	EXCEPTION
2013 	WHEN NO_DATA_FOUND THEN
2014     p_x_rows := sql%rowcount;
2015 	   RETURN TRUE;
2016 
2017 
2018 	WHEN OTHERS THEN
2019     p_x_rows := sql%rowcount;
2020 	  RETURN FALSE;
2021 
2022 
2023 
2024 END  Check_Line_Revision;
2025 
2026 
2027 FUNCTION Check_Line_EffDates( p_Start_Date_Active IN DATE
2028   					   , p_End_Date_Active IN DATE
2029 					   , p_Revision IN VARCHAR2
2030 					   , p_List_Line_ID IN NUMBER
2031 					   , p_List_Header_ID IN NUMBER
2032 					   , p_x_rows OUT NOCOPY /* file.sql.39 change */ NUMBER
2033 					 )
2034 RETURN BOOLEAN
2035 IS
2036 l_dummy VARCHAR2(20);
2037 l_dummy1 VARCHAR2(20);
2038 BEGIN
2039 
2040 select a.list_line_id, b.list_line_id
2041 into l_dummy, l_dummy1
2042 from qp_pricing_attributes a, qp_pricing_attributes b, qp_list_lines c
2043 where 	a.list_line_id = p_List_Line_ID
2044 and b.list_line_id <> p_List_Line_ID
2045 and b.product_attribute_context = a.product_attribute_context
2046 and b.product_attribute = a.product_attribute
2047 and b.product_attr_value = a.product_attr_value
2048 -- and nvl(b.product_attribute_context,' ') = nvl(a.product_attribute_context,' ') ** bug 2813068 **
2049 -- and nvl(b.product_attribute,' ') = nvl(a.product_attribute,' ') ** bug 2813068 **
2050 -- and nvl(b.product_attr_value,' ') = nvl(a.product_attr_value,' ') ** bug 2813068 **
2051 and nvl(b.product_uom_code,' ') = nvl(a.product_uom_code,' ')
2052 and nvl(b.pricing_attribute_context,' ') = nvl(a.pricing_attribute_context,' ')
2053 and nvl(b.pricing_attribute,' ') = nvl(a.pricing_attribute,' ' )
2054 and nvl(b.pricing_attr_value_from,' ') = nvl(a.pricing_attr_value_from,' ')
2055 and nvl(b.pricing_attr_value_to,' ') = nvl(a.pricing_attr_value_to,' ')
2056 and b.comparison_operator_code = a.comparison_operator_code                 --Added for 2128739
2057 and a.list_line_id = c.list_line_id
2058 and ( nvl(trunc(start_date_active),sysdate)  BETWEEN  nvl(to_date(to_char(p_Start_Date_Active,'DD/MM/YYYY'),'DD/MM/YYYY'), sysdate)
2059 and nvl(to_date(to_char(p_End_Date_Active,'DD/MM/YYYY'),'DD/MM/YYYY'), sysdate) OR
2060      nvl(trunc(end_date_active),sysdate) BETWEEN nvl(to_date(to_char(p_Start_Date_Active,'DD/MM/YYYY'),'DD/MM/YYYY'),sysdate )
2061 			and nvl(to_date(to_char(p_End_Date_Active,'DD/MM/YYYY'),'DD/MM/YYYY'), sysdate ) )
2062 group by a.list_line_id, b.list_line_id
2063 having count(b.list_line_id) = ( select count(*)
2064 					     from qp_pricing_attributes
2065 						where list_line_id = b.list_line_id)  ;
2066 
2067 
2068 
2069     p_x_rows := sql%rowcount;
2070 
2071     if p_x_rows <> 0 then
2072 	  RETURN FALSE;
2073     else
2074 	  RETURN TRUE;
2075     end if;
2076 
2077 
2078 	EXCEPTION
2079 	WHEN NO_DATA_FOUND THEN
2080     p_x_rows := sql%rowcount;
2081 	   RETURN TRUE;
2082 
2083 
2084 	WHEN OTHERS THEN
2085     p_x_rows := sql%rowcount;
2086 	  RETURN FALSE;
2087 
2088 
2089 
2090 END Check_Line_EffDates;
2091 
2092 
2093 END QP_Validate_pll_pricing_attr;