DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_VALIDATE_QUALIFIERS

Source


1 PACKAGE BODY QP_Validate_Qualifiers AS
2 /* $Header: QPXLQPQB.pls 120.2.12010000.2 2009/04/28 17:07:10 dnema ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'QP_Validate_Qualifiers';
7 
8 /*
9    Function added for bug8359572.
10    It will return true if a qualifier already exist at the same level, having same context,
11    attribute, comparison operator, value from and value to as the input qualifier.
12 */
13 
14 Function Check_Duplicate_Qualifier (
15   p_QUALIFIERS_rec                IN  QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type
16   )
17 RETURN BOOLEAN
18 IS
19 l_count                       NUMBER := 0;
20 BEGIN
21 
22    IF p_QUALIFIERS_rec.qualifier_rule_id <> FND_API.G_MISS_NUM
23      OR p_QUALIFIERS_rec.qualifier_rule_id IS NOT NULL
24    THEN
25        SELECT 1 INTO l_count
26        FROM DUAL
27        WHERE EXISTS( SELECT qualifier_id
28                      FROM qp_qualifiers
29                      WHERE qualifier_rule_id = p_QUALIFIERS_rec.qualifier_rule_id
30                        AND qualifier_grouping_no = p_QUALIFIERS_rec.qualifier_grouping_no
31           	       AND qualifier_context = p_QUALIFIERS_rec.qualifier_context
32 		       AND qualifier_attribute = p_QUALIFIERS_rec.qualifier_attribute
33 		       AND qualifier_attr_value = p_QUALIFIERS_rec.qualifier_attr_value
34 		       AND COMPARISON_OPERATOR_CODE = p_QUALIFIERS_rec.comparison_operator_code
35 		       AND nvl(QUALIFIER_ATTR_VALUE_TO,FND_API.G_MISS_NUM) =
36 		                    nvl(p_QUALIFIERS_rec.qualifier_attr_value_to,FND_API.G_MISS_NUM)
37 		       AND qualifier_id <> p_QUALIFIERS_rec.qualifier_id );
38    ELSE
39       SELECT 1 INTO l_count
40       FROM DUAL
41       WHERE EXISTS ( SELECT qualifier_id
42                      FROM qp_qualifiers
43                      WHERE list_header_id = p_QUALIFIERS_rec.list_header_id
44                         AND qualifier_grouping_no = p_QUALIFIERS_rec.qualifier_grouping_no
45             	        AND qualifier_context = p_QUALIFIERS_rec.qualifier_context
46                         AND qualifier_attribute =  p_QUALIFIERS_rec.qualifier_attribute
47 	                AND qualifier_attr_value = p_QUALIFIERS_rec.qualifier_attr_value
48                         AND COMPARISON_OPERATOR_CODE = p_QUALIFIERS_rec.comparison_operator_code
49                         AND nvl(QUALIFIER_ATTR_VALUE_TO,FND_API.G_MISS_NUM) =
50 			        nvl(p_QUALIFIERS_rec.qualifier_attr_value_to,FND_API.G_MISS_NUM)
51                         AND qualifier_rule_id is null
52 	                AND list_line_id = p_QUALIFIERS_rec.list_line_id
53 	                AND qualifier_id <> p_QUALIFIERS_rec.qualifier_id );
54    END IF;
55 
56    RETURN TRUE;
57 
58 EXCEPTION
59     WHEN NO_DATA_FOUND THEN
60 
61        RETURN FALSE;
62 
63     WHEN OTHERS THEN
64 
65         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
66         THEN
67             OE_MSG_PUB.Add_Exc_Msg
68             (   G_PKG_NAME
69             ,   'Check_Duplicate_Qualifier'
70             );
71         END IF;
72 
73 	RAISE FND_API.G_EXC_ERROR;
74 
75 END Check_Duplicate_Qualifier;
76 
77 
78 FUNCTION Check_Duplicate_Start_date(p_qualifier_grouping_no  IN number,
79 							p_start_date  IN  date,
80 							p_qualifier_rule_id  IN number,
81 							p_qualifier_id IN number)RETURN BOOLEAN IS
82 CURSOR c_QualifierStartDate(p_qualifier_grouping_no  number,
83 					   p_start_date    date,
84                             p_qualifier_rule_id  number,
85 					   p_qualifier_id  number) is
86          SELECT 'CHANGED'
87 	    FROM  QP_QUALIFIERS
88 	    WHERE  qualifier_rule_id     =    p_qualifier_rule_id
89 	    AND    qualifier_grouping_no =    p_qualifier_grouping_no
90 	    AND    start_date_active    <>   p_start_date
91 	    AND    qualifier_id         <>   p_qualifier_id;
92 
93 
94 l_status VARCHAR2(30);
95 
96 BEGIN
97 
98          OPEN c_QualifierStartDate(p_qualifier_grouping_no,
99 							p_start_date,
100 							p_qualifier_rule_id,
101 							p_qualifier_id);
102          FETCH c_QualifierStartDate INTO l_status;
103 	    CLOSE c_QualifierStartDate;
104 
105 	    IF l_status = 'CHANGED' then
106 
107 		  RETURN TRUE;
108 
109          ELSE
110 
111 		  RETURN FALSE;
112 
113          End If;
114 
115 END check_duplicate_start_date;
116 
117 
118 FUNCTION Check_Duplicate_End_Date(p_qualifier_grouping_no  IN number,
119 							p_end_date  IN  date,
120 							p_qualifier_rule_id  IN number,
121 							p_qualifier_id  IN number)RETURN BOOLEAN IS
122 CURSOR c_QualifierEndDate(p_qualifier_grouping_no  number,
123 					   p_end_date    date,
124                             p_qualifier_rule_id  number,
125 					   p_qualifier_id number ) is
126          SELECT 'CHANGED'
127 	    FROM  QP_QUALIFIERS
128 	    WHERE  qualifier_rule_id     =    p_qualifier_rule_id
129 	    AND    qualifier_grouping_no =    p_qualifier_grouping_no
130 	    AND    end_date_active    <>   p_end_date
131 	    AND    qualifier_id <> p_qualifier_id;
132 
133 
134 l_status VARCHAR2(30);
135 
136 BEGIN
137 
138          OPEN c_QualifierEndDate(p_qualifier_grouping_no,
139 							p_end_date,
140 							p_qualifier_rule_id,
141 							p_qualifier_id);
142          FETCH c_QualifierEndDate INTO l_status;
143 	    CLOSE c_QualifierEndDate;
144 
145 	    IF l_status = 'CHANGED' then
146 
147 		  RETURN TRUE;
148 
149          ELSE
150 
151 		  RETURN FALSE;
152 
153          End If;
154 
155 END check_duplicate_end_date;
156 
157 
158 --  Procedure Entity
159 
160 PROCEDURE Entity
161 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
162 ,   p_QUALIFIERS_rec                IN  QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type
163 ,   p_old_QUALIFIERS_rec            IN  QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type :=
164                                         QP_Qualifier_Rules_PUB.G_MISS_QUALIFIERS_REC
165 )
166 IS
167 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
168 l_qualifier_id                NUMBER;
169 l_qualifier_rule_id           NUMBER;
170 l_comparison_operator_code    VARCHAR2(30);
171 l_error_code                  NUMBER;
172 l_precedence                   NUMBER;
173 l_datatype                    FND_FLEX_VALUE_SETS.Format_type%TYPE;
174 l_value_error                 VARCHAR2(1);
175 l_context_error               VARCHAR2(1);
176 l_attribute_error             VARCHAR2(1);
177 l_list_header_id              NUMBER;
178 l_list_line_id                NUMBER;
179 l_gsa_indicator               VARCHAR2(1);
180 l_customer_gsa_indicator      VARCHAR2(1);
181 l_list_type_code              VARCHAR2(30) := '';
182 
183 l_context_type                VARCHAR2(30);
184 l_sourcing_enabled            VARCHAR2(1);
185 l_sourcing_status             VARCHAR2(1);
186 l_sourcing_method             VARCHAR2(30);
187 
188 l_modifier_level_code         VARCHAR2(30);
189 l_segment_level               VARCHAR2(30);
190 x_attribute_code              VARCHAR2(80);
191 x_segment_name                VARCHAR2(30);
192 
193 -- start 2091362
194 p_attr_count number;
195 p_product_attribute_context VARCHAR2(30);
196 p_product_attribute VARCHAR2(240);
197 p_product_attr_value VARCHAR2(240);
198 l_qp_status VARCHAR2(1);
199 l_start_date_active DATE;
200 l_end_date_active DATE;
201 l_list_header_id_1 NUMBER;
202 -- end bug2091362
203 
204 BEGIN
205 
206     -- Check whether Source System Code matches
207     -- mkarya for bug 1728764, Prevent update of Trade Management Data in QP
208     QP_UTIL.Check_Source_System_Code
209                             (p_list_header_id => p_QUALIFIERS_rec.list_header_id,
210                              p_list_line_id   => p_QUALIFIERS_rec.list_line_id,
211                              x_return_status  => l_return_status
212                             );
213 
214     --  Check required attributes.
215 
216 
217    --dbms_output.put_line('entity validation for qualifier id');
218    oe_debug_pub.add('entity validation for qualifier id');
219    oe_debug_pub.add('entity validation for qualifier id'||p_QUALIFIERS_rec.qualifier_id);
220 
221 
222 
223 
224     IF  p_QUALIFIERS_rec.qualifier_id IS NULL
225     THEN
226 
227         l_return_status := FND_API.G_RET_STS_ERROR;
228 
229         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
230         THEN
231 
232             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
233             FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Qualifier Id');
234             OE_MSG_PUB.Add;
235 
236         END IF;
237 
238     END IF;
239 
240    --dbms_output.put_line('entity validation for qualifier id status '|| l_return_status);
241    oe_debug_pub.add('entity null validation for qualifier id status '|| l_return_status);
242    --dbms_output.put_line('entity validation for qualifier grouping no');
243    oe_debug_pub.add('entity validation for qualifier grouping no');
244 
245 
246 
247 
248     --
249     --  Check rest of required attributes here.
250     --
251 
252 
253 
254     IF  p_QUALIFIERS_rec.qualifier_grouping_no IS NULL
255     THEN
256 
257         l_return_status := FND_API.G_RET_STS_ERROR;
258 
259         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
260         THEN
261 
262             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
263             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('QUALIFIER_GROUPING_NO'));  -- Fix For Bug-1974413
264             OE_MSG_PUB.Add;
265 
266         END IF;
267 
268     END IF;
269 
270 
271    --oe_debug_pub.add('entity  null validation for qualifier group id status '|| l_return_status);
272 --dbms_output.put_line('entity validation for qualifier group id status '|| l_return_status);
273 
274    --dbms_output.put_line('entity validation for qualifier attr_value');
275 
276    --oe_debug_pub.add('entity validation for attr_value with value as  '
277 	--				|| p_QUALIFIERS_rec.qualifier_attr_value);
278 
279 
280     -- qualifier_attr_value can be null when the operator is
281     --'Between'.This is to proivde 'less than ' functionality
282     -- using 'between ' operator.
283     --fix for the bug 1253121.
284 
285     IF  p_QUALIFIERS_rec.comparison_operator_code <> 'BETWEEN' AND
286         p_QUALIFIERS_rec.qualifier_attr_value IS NULL
287     THEN
288 
289         l_return_status := FND_API.G_RET_STS_ERROR;
290 
291         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
292         THEN
293 
294             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
295             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('QUALIFIER_ATTR_VALUE'));  -- Fix FOr Bug-1974413
296             OE_MSG_PUB.Add;
297 
298         END IF;
299 
300     END IF;
301 
302 
303 
304 
305    --dbms_output.put_line('entity validation for qualifier attr value  '|| l_return_status);
306    oe_debug_pub.add('entity validation for qualifier attr value  '|| l_return_status);
307 
308 
309    --dbms_output.put_line('entity validation for qualifier attribute');
310 
311 
312 
313 
314     IF  p_QUALIFIERS_rec.qualifier_attribute IS NULL
315     THEN
316 
317         l_return_status := FND_API.G_RET_STS_ERROR;
318 
319         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
320         THEN
321 
322             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
323             FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Attribute');
324             OE_MSG_PUB.Add;
325 
326         END IF;
327 
328     END IF;
329 
330 
331 
332     --dbms_output.put_line('entity validation for qualifier attr   '|| l_return_status);
333     oe_debug_pub.add('entity  null validation for qualifier attr   '|| l_return_status);
334 
335 
336 
337    --dbms_output.put_line('entity validation for qualifier context');
338 
339 
340 
341    IF  p_QUALIFIERS_rec.qualifier_context IS NULL
342     THEN
343 
344         l_return_status := FND_API.G_RET_STS_ERROR;
345 
346         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
347         THEN
348 
349             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
350             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('QUALIFIER_CONTEXT'));  -- Fix For Bug-1974413
351             OE_MSG_PUB.Add;
352 
353         END IF;
354 
355     END IF;
356 
357 
358     --dbms_output.put_line('entity  null validation for qualifier context   '|| l_return_status);
359     oe_debug_pub.add('entity validation for qualifier context   '|| l_return_status);
360    --dbms_output.put_line('entity validation for comparison operator ');
361 
362 
363 
364 
365     IF  p_QUALIFIERS_rec.comparison_operator_code IS NULL
366 
367     THEN
368 
369         l_return_status := FND_API.G_RET_STS_ERROR;
370 
371         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
372         THEN
373 
374             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
375             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('COMPARISON_OPERATOR_CODE'));  -- Fix For Bug-1974413
376             OE_MSG_PUB.Add;
377 
378         END IF;
379 
380     END IF;
381 
382 
383 
384 
385    --dbms_output.put_line('entity validation for compari '|| l_return_status);
386    oe_debug_pub.add('entity validation for compari '|| l_return_status);
387    --dbms_output.put_line('entity validation for excluder flag operator ');
388 
389 /* Added for bug2368511 */
390 
391     IF  p_QUALIFIERS_rec.list_line_id IS NULL
392 
393     THEN
394 
395         l_return_status := FND_API.G_RET_STS_ERROR;
396 
397         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
398         THEN
399 
400             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
401             FND_MESSAGE.SET_TOKEN('ATTRIBUTE','List Line Id');
402             OE_MSG_PUB.Add;
403 
404         END IF;
405 
406     END IF;
407 
408    oe_debug_pub.add('entity validation for List Line Id '|| l_return_status);
409 
410 
411     IF  p_QUALIFIERS_rec.excluder_flag IS NULL
412     THEN
413 
414         l_return_status := FND_API.G_RET_STS_ERROR;
415 
416         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
417         THEN
418 
419             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
420             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('EXCLUDER_FLAG'));  -- FIx For Bug-1974413
421             OE_MSG_PUB.Add;
422 
423         END IF;
424 
425     END IF;
426 
427 
428 
429 
430    --dbms_output.put_line('entity validation for excluder '|| l_return_status);
431    oe_debug_pub.add('entity validation for excluder '|| l_return_status);
432     --  Return Error if a required attribute is missing.
433 
434 
435 
436     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
437 
438         RAISE FND_API.G_EXC_ERROR;
439 
440     END IF;
441 
442 
443     -- Check for duplicate qualifier bug8359572
444 
445     IF Check_Duplicate_Qualifier(p_QUALIFIERS_rec)
446     THEN
447 
448         l_return_status := FND_API.G_RET_STS_ERROR;
449 
450         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
451         THEN
452 
453             FND_MESSAGE.SET_NAME('QP','QP_DUPL_QUAL_EXISTS');
454 
455             FND_MESSAGE.SET_TOKEN('CONTEXT',
456                QP_UTIL.Get_Context('QP_ATTR_DEFNS_QUALIFIER',p_QUALIFIERS_rec.qualifier_context));
457 
458             QP_UTIL.Get_Attribute_Code('QP_ATTR_DEFNS_QUALIFIER',
459                              p_QUALIFIERS_rec.qualifier_context,
460                              p_QUALIFIERS_rec.qualifier_attribute,
461                              x_attribute_code,
462                              x_segment_name);
463             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',x_attribute_code);
464             FND_MESSAGE.SET_TOKEN('QUAL_GRPNG_NO',p_QUALIFIERS_rec.qualifier_grouping_no);
465 
466             OE_MSG_PUB.Add;
467 
468         END IF;
469     END IF;
470 
471     -- Changes for bug 8359572 ends.
472 
473     --
474     --  Check conditionally required attributes here.
475     --
476 
477 
478     --
479     --  Validate attribute dependencies here.
480     --
481      IF p_QUALIFIERS_rec.list_header_id IS NOT NULL
482 	THEN
483 	  BEGIN
484          select list_type_code
485 	    into   l_list_type_code
486 	    from   qp_list_headers_b
487 	    where  list_header_id = p_QUALIFIERS_rec.list_header_id;
488        EXCEPTION
489          WHEN OTHERS THEN
490 	      l_list_type_code := '';
491 	  END;
492      END IF;
493 
494      IF p_QUALIFIERS_rec.qualifier_context = 'VOLUME' AND
495 	   p_QUALIFIERS_rec.qualifier_attribute = 'QUALIFIER_ATTRIBUTE10'  AND
496 	   l_list_type_code in ('PRL', 'AGR')
497 	   -- Qualifier Attr 'Order Amount' under the 'Volume' Qualfier context
498 	THEN
499          l_return_status := FND_API.G_RET_STS_ERROR;
500 
501          IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
502          THEN
503            FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
504            FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Qualifier Attribute');
505            OE_MSG_PUB.Add;
506          END IF;
507 	END IF;
508 
509      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
510          RAISE FND_API.G_EXC_ERROR;
511      END IF;
512 
513     --  Validate start_date active and end_date active
514 	   --end date active must be greater than start date active
515 
516    --dbms_output.put_line('entity validation for start-date ');
517 
518 
519 
520         /*IF nvl(p_QUALIFIERS_rec.end_date_active,
521 			  TO_DATE('01-01-1999','MM-DD-YYYY')) <
522            nvl(p_QUALIFIERS_rec.start_date_active,
523 			  TO_DATE('01-01-1955','MM-DD-YYYY'))*/
524         IF nvl(p_QUALIFIERS_rec.end_date_active,
525 			p_QUALIFIERS_rec.start_date_active ) <
526            nvl(p_QUALIFIERS_rec.start_date_active,
527 			  p_QUALIFIERS_rec.end_date_active)
528         THEN
529            l_return_status := FND_API.G_RET_STS_ERROR;
530 
531            IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
532            THEN
533 
534              FND_MESSAGE.SET_NAME('QP','QP_STRT_DATE_BFR_END_DATE');
535              --FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Start Date active');
536              OE_MSG_PUB.Add;
537 
538            END IF;
539 
540         END IF;
541 
542 
543    --dbms_output.put_line('entity validation for start_date '||l_return_status);
544    oe_debug_pub.add('entity validation for start_date '||l_return_status);
545    --dbms_output.put_line('entity validation for value to ');
546 
547 
548 
549     --Validate Qualifier_attr_value_to and Qualifier_attr_value
550       -- if comparison operator code is BETWEEN then both
551 	 --qualifier attr_value _to or qualifier_attr_value are required
552 	 -- for all other operators ,qualifier_attr_value_to  must be null.
553 
554       IF UPPER(p_QUALIFIERS_rec.comparison_operator_code) = 'BETWEEN' AND
555 		    (p_QUALIFIERS_rec.qualifier_attr_value_to IS NULL OR
556 		     p_QUALIFIERS_rec.qualifier_attr_value IS NULL)
557       THEN
558            l_return_status := FND_API.G_RET_STS_ERROR;
559 
560            IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
561            THEN
562 
563              FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
564              FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('QUALIFIER_ATTR_VALUE_TO')||'/'||
565                                             QP_PRC_UTIL.Get_Attribute_Name('QUALIFIER_ATTR_VALUE'));   -- Fix For Bug-1974413
566              OE_MSG_PUB.Add;
567 
568            END IF;
569 
570       END IF;
571 
572 
573    --validation for canonical form for value to
574 
575      l_error_code:=QP_UTIL.validate_num_date(p_QUALIFIERS_rec.qualifier_datatype,
576 								     p_QUALIFIERS_rec.qualifier_attr_value_to);
577 	IF l_error_code  <> 0  THEN
578 
579 		  l_return_status := FND_API.G_RET_STS_ERROR;
580 
581             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
582             THEN
583                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
584                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Value To ');
585                OE_MSG_PUB.Add;
586             END IF;
587 
588      END IF;
589 
590    -- End of validation for canonical form on value to
591 
592 
593 
594    --dbms_output.put_line('entity validation for value to '||l_return_status);
595    oe_debug_pub.add('entity validation for value to '||l_return_status);
596 
597 
598 
599     --Other Validations
600 
601 
602     --validate for start_date active to the same within a group for a qualifier rule id
603 
604       If Check_Duplicate_start_date(p_QUALIFIERS_rec.qualifier_grouping_no,
605 							 p_QUALIFIERS_rec.start_date_active,
606 							 p_QUALIFIERS_rec.qualifier_rule_id,
607 							 p_QUALIFIERS_rec.qualifier_id) THEN
608          l_return_status := FND_API.G_RET_STS_ERROR;
609 
610 	    IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
611 	    Then
612               FND_MESSAGE.SET_NAME('QP','QP_DATE_WITHIN_GRPNO_REQ_SAME');
613 		    FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'Start Date Active');
614 		    OE_MSG_PUB.Add;
615          END IF;
616 	  END IF;
617 
618 
619       If Check_Duplicate_end_date(p_QUALIFIERS_rec.qualifier_grouping_no,
620 							 p_QUALIFIERS_rec.end_date_active,
621 							 p_QUALIFIERS_rec.qualifier_rule_id,
622 							 p_QUALIFIERS_rec.qualifier_id) THEN
623          l_return_status := FND_API.G_RET_STS_ERROR;
624 
625 	    IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
626 	    Then
627               FND_MESSAGE.SET_NAME('QP','QP_DATE_WITHIN_GRPNO_REQ_SAME');
628 		    FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'End Date Active');
629 		    OE_MSG_PUB.Add;
630          END IF;
631 	  END IF;
632 
633 
634 
635 
636 
637 
638 
639 
640 
641 
642 
643 
644 
645 
646 
647 
648 
649     --Validate Qualifier Id for duplicate values.
650 
651 
652    --dbms_output.put_line('entity validation for duplicate id' ||p_QUALIFIERS_rec.qualifier_id);
653 
654 
655 
656      /* SELECT  qualifier_id
657       INTO    l_qualifier_id
658 	 FROM    QP_QUALIFIERS
659       WHERE   qualifier_id = p_QUALIFIERS_rec.qualifier_id;
660 
661    If  SQL%NOTFOUND
662 	 Then
663             null;
664    Else
665 		  l_return_status := FND_API.G_RET_STS_ERROR;
666         --dbms_output.put_line('entity validation for duplicaet id '||l_return_status);
667 
668             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
669             THEN
670 
671                FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
672               -- FND_MESSAGE.SET_NAME('QP','QP_DUPLICATE_ATTRIBUTE');
673                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Qualifier Id');
674                OE_MSG_PUB.Add;
675             END IF;
676 
677    End If;*/
678 
679    --dbms_output.put_line('entity validation for duplicaet id '||l_return_status);
680    oe_debug_pub.add('entity validation for duplicaet id '||l_return_status);
681 
682 
683 
684 
685      --Validate Comparison Operator Code for Valid Values.
686 
687      --dbms_output.put_line('entity validation for compar 2 ');
688 
689 
690 
691       SELECT  lookup_code
692 	 INTO    l_comparison_operator_code
693 	 FROM    QP_LOOKUPS
694       WHERE   LOOKUP_TYPE = 'COMPARISON_OPERATOR'
695 	 AND     LOOKUP_CODE = UPPER(p_QUALIFIERS_rec.comparison_operator_code);
696 
697       If SQL%NOTFOUND
698 	 Then
699 
700 		  l_return_status := FND_API.G_RET_STS_ERROR;
701 
702             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
703             THEN
704 
705                FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
706                --FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
707                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('COMPARISON_OPERATOR_CODE'));  -- Fix For Bug-1974413
708                OE_MSG_PUB.Add;
709             END IF;
710 
711        End If;
712 
713 
714     --dbms_output.put_line('entity validation for compa2 '||l_return_status);
715     oe_debug_pub.add('entity validation for compa2 '||l_return_status);
716 
717 
718 
719      --Validate Qualifier_Context , Qualifier_attribute ,Qualifier_Attr Value
720 	--qualifier_datatype,qualifier_precedence
721 
722 
723       --dbms_output.put_line('for context ,attribute,value,datatype,precedence');
724 
725  if  (p_QUALIFIERS_rec.qualifier_datatype = 'X'  and  p_QUALIFIERS_rec.comparison_operator_code = 'BETWEEN'  )  THEN
726 
727   IF  fnd_date.canonical_to_date(p_QUALIFIERS_rec.qualifier_attr_value_to) <
728                           fnd_date.canonical_to_date(p_QUALIFIERS_rec.qualifier_attr_value)
729         THEN
730 
731                   l_return_status := FND_API.G_RET_STS_ERROR;
732 
733                      IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
734                     THEN
735                             FND_MESSAGE.SET_NAME('QP','QP_STRT_DATE_BFR_END_DATE');
736                            OE_MSG_PUB.Add;
737 
738                      END IF;
739 
740    END IF;
741 
742 END IF;
743 
744        QP_UTIL.validate_qp_flexfield(flexfield_name       =>'QP_ATTR_DEFNS_QUALIFIER'
745 						 ,context                   =>p_QUALIFIERS_rec.qualifier_context
746 						 ,attribute                 =>p_QUALIFIERS_rec.qualifier_attribute
747 						 ,value                =>p_QUALIFIERS_rec.qualifier_attr_value
748                                ,application_short_name         => 'QP'
749 						 ,context_flag                   =>l_context_error
750 						 ,attribute_flag                 =>l_attribute_error
751 						 ,value_flag                     =>l_value_error
752 						 ,datatype                       =>l_datatype
753 						 ,precedence                      =>l_precedence
754 						 ,error_code                     =>l_error_code
755 						 );
756 
757        If (l_context_error = 'N'  AND l_error_code = 7)       --  invalid context
758 	  Then
759 		  l_return_status := FND_API.G_RET_STS_ERROR;
760 
761             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
762             THEN
763 
764                FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
765                --FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
766                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('QUALIFIER_CONTEXT'));  -- Fix For Bug-1974413
767                OE_MSG_PUB.Add;
768             END IF;
769 
770        End If;
771 
772 
773        --dbms_output.put_line('for context '||l_return_status);
774 
775         --dbms_output.put_line('for context ,attribute,value,datatype,precedence');
776 
777 
778 
779        If l_attribute_error = 'N'   AND l_error_code = 8    --  invalid Attribute
780 	  Then
781 		  l_return_status := FND_API.G_RET_STS_ERROR;
782 
783             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
784             THEN
785 
786                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
787                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',' Attribute');
788                OE_MSG_PUB.Add;
789             END IF;
790 
791        End If;
792 
793 
794        --dbms_output.put_line('for attributr '||l_return_status);
795        oe_debug_pub.add('for context '||l_return_status);
796 
797 
798       --- validate qualifier_attr_value only if comparison operator is
799 	 --  '='
800 
801        IF p_QUALIFIERS_rec.comparison_operator_code = '=' Then
802 
803        If l_value_error = 'N'  AND l_error_code = 9      --  invalid value
804 	  Then
805 		  l_return_status := FND_API.G_RET_STS_ERROR;
806 
807             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
808             THEN
809 
810                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
811                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',' Value From ');
812                --OE_MSG_PUB.Add;
813                OE_MSG_PUB.Add;
814             END IF;
815        End If;
816        END IF;
817 
818       --- Validation for GSA Discounts - Customer must be GSA
819 
820        IF  p_QUALIFIERS_rec.qualifier_context = 'CUSTOMER'
821        AND p_QUALIFIERS_rec.qualifier_attribute = 'QUALIFIER_ATTRIBUTE2'
822        AND p_QUALIFIERS_rec.list_header_id IS NOT NULL
823 	  THEN
824 
825 		oe_debug_pub.add('attcching');
826           BEGIN
827 
828   	       select gsa_indicator
829 	       into   l_gsa_indicator
830 	       from   qp_list_headers_b
831 	       where  list_header_id = p_QUALIFIERS_rec.list_header_id;
832 
833 		  IF nvl(l_gsa_indicator,'N') = 'Y'
834 		  THEN
835 
836 		oe_debug_pub.add('GSA = Y');
837   	          select decode(party.party_type,'ORGANIZATION',party.gsa_indicator_flag,'N')
838 	          into   l_customer_gsa_indicator
839 	          from   hz_cust_accounts cust_acct,hz_parties party
840 	          where  cust_acct.party_id = party.party_id and
841                     cust_acct.cust_account_id = to_number(p_QUALIFIERS_rec.qualifier_attr_value);
842 
843                IF SQL%NOTFOUND
844 			THEN
845 
846 		oe_debug_pub.add('customer GSA not found');
847 		         l_return_status := FND_API.G_RET_STS_ERROR;
848 
849                    IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
850                    THEN
851 
852                       FND_MESSAGE.SET_NAME('QP','QP_INVALID_GSA_CUSTOMER');
853                       OE_MSG_PUB.Add;
854 
855                    END IF;
856 
857                ELSIF nvl(l_customer_gsa_indicator,'N') <> 'Y'
858 			THEN
859 
860 		oe_debug_pub.add('customer GSA = '||l_customer_gsa_indicator);
861 		         l_return_status := FND_API.G_RET_STS_ERROR;
862 
863                    IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
864                    THEN
865 
866                       FND_MESSAGE.SET_NAME('QP','QP_INVALID_GSA_CUSTOMER');
867                       OE_MSG_PUB.Add;
868 
869                    END IF;
870 
871 		     END IF;
872 
873 		   END IF;
874 
875           EXCEPTION
876 	       when no_data_found then
877 		oe_debug_pub.add('exception GSA indicator in header is null');
878 	       null;
879 
880           END;
881 
882 	   END IF;
883 
884        --dbms_output.put_line('for value,'||l_return_status);
885        oe_debug_pub.add('for value,'||l_return_status);
886 
887       --dbms_output.put_line('org precede '||p_QUALIFIERS_rec.qualifier_precedence);
888       --dbms_output.put_line('n precede '||l_precedence);
889         oe_debug_pub.add('org precede '||p_QUALIFIERS_rec.qualifier_precedence);
890         oe_debug_pub.add('n precede '||l_precedence);
891 
892        /*If p_QUALIFIERS_rec.qualifier_precedence <>  l_precedence  ---  invalid  precedence
893 	  Then
894 		  l_return_status := FND_API.G_RET_STS_ERROR;
895 
896             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
897             THEN
898 
899                --FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
900                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
901                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('QUALIFIER_PRECEDENCE'));  -- Fix For Bug-1974413
902                OE_MSG_PUB.Add;
903             END IF;
904 
905 
906        End If;*/
907 
908 
909 
910         --dbms_output.put_line('for precedence'||l_return_status);
911 
912 
913 
914        If p_QUALIFIERS_rec.qualifier_datatype <> l_datatype   ---  invalid qualifier datatype
915 	  Then
916 		  l_return_status := FND_API.G_RET_STS_ERROR;
917 
918             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
919             THEN
920                --FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
921                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
922                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Qualifier Datatype ');
923                OE_MSG_PUB.Add;
924             END IF;
925 
926        End If;
927 
928 
929 
930        --dbms_output.put_line('for datatype,'||l_return_status);
931         oe_debug_pub.add('qualifier datatype,'||l_return_status);
932 
933 
934 
935    --validation for canonical form
936 
937      l_error_code:=QP_UTIL.validate_num_date(p_QUALIFIERS_rec.qualifier_datatype,
938 								     p_QUALIFIERS_rec.qualifier_attr_value);
939 	IF l_error_code  <> 0  THEN
940 
941 		  l_return_status := FND_API.G_RET_STS_ERROR;
942 
943             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
944             THEN
945                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
946                FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Value From ');
947                OE_MSG_PUB.Add;
948             END IF;
949 
950      END IF;
951      --dbms_output.put_line('for cano of value from ,'||l_return_status);
952 
953    -- End of validation for canonical form on value from
954 
955 
956     --  Validate qualifier rule id when not null
957 
958 
959 
960        /* IF p_QUALIFIERS_rec.qualifier_rule_id IS NOT NULL
961 	   THEN
962              SELECT    qualifier_rule_id
963 	        INTO      l_qualifier_rule_id
964 	        FROM      QP_QUALIFIER_RULES
965 	        WHERE     qualifier_rule_id = p_QUALIFIERS_rec.qualifier_rule_id;
966 
967              If  SQL%NOTFOUND
968              Then
969 		          l_return_status := FND_API.G_RET_STS_ERROR;
970 
971                     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
972                     THEN
973                        FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
974                       -- FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
975                        FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Qualifier qualifier rule id ');
976                        OE_MSG_PUB.Add;
977                     END IF;
978              End If;
979          END IF;*/
980 
981 
982 
983 
984     --  Validate created from rule id when not null
985 
986   /*      IF p_QUALIFIERS_rec.created_from_rule_id IS NOT NULL
987 	   THEN
988              SELECT    qualifier_rule_id
989 	        INTO      l_qualifier_rule_id
990 	        FROM      QP_QUALIFIER_RULES
991 	        WHERE     qualifier_rule_id = p_QUALIFIERS_rec.created_from_rule_id;
992 
993              If  SQL%NOTFOUND
994              Then
995 		          l_return_status := FND_API.G_RET_STS_ERROR;
996 
997                     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
998                     THEN
999                        FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
1000                        --FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1001                        FND_MESSAGE.SET_TOKEN('ATTRIBUTE','created from  rule id ');
1002                        OE_MSG_PUB.Add;
1003                     END IF;
1004              End If;
1005          END IF;*/
1006 
1007 
1008 
1009     --  Validate list header  id when not null
1010 
1011    /*     IF p_QUALIFIERS_rec.list_header_id IS NOT NULL
1012 	   THEN
1013              SELECT    list_header_id
1014 	        INTO      l_list_header_id
1015 	        FROM      QP_LIST_HEADERS_B
1016 	        WHERE     list_header_id = p_QUALIFIERS_rec.list_header_id;
1017 
1018              If  SQL%NOTFOUND
1019              Then
1020 		          l_return_status := FND_API.G_RET_STS_ERROR;
1021 
1022                     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1023                     THEN
1024                        FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
1025                        --FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1026                        FND_MESSAGE.SET_TOKEN('ATTRIBUTE','List Header id ');
1027                        OE_MSG_PUB.Add;
1028                     END IF;
1029              End If;
1030          END IF;  */
1031 
1032 
1033 
1034     --  Validate list line  id when not null
1035 
1036 /*        IF p_QUALIFIERS_rec.list_line_id IS NOT NULL
1037 	   THEN
1038              SELECT    list_line_id
1039 	        INTO      l_list_line_id
1040 	        FROM      QP_LIST_LINES
1041 	        WHERE     list_line_id = p_QUALIFIERS_rec.list_line_id;
1042 
1043              If  SQL%NOTFOUND
1044              Then
1045 		          l_return_status := FND_API.G_RET_STS_ERROR;
1046 
1047                     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1048                     THEN
1049                        FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED'  );
1050                        --FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
1051                        FND_MESSAGE.SET_TOKEN('ATTRIBUTE','List Line id ');
1052                        OE_MSG_PUB.Add;
1053                     END IF;
1054              End If;
1055          END IF;  */
1056 
1057 
1058     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1059 
1060         RAISE FND_API.G_EXC_ERROR;
1061 
1062     END IF;
1063 
1064 --- start bug2091362
1065 l_qp_status := QP_UTIL.GET_QP_STATUS;
1066 
1067 IF (fnd_profile.value('QP_ALLOW_DUPLICATE_MODIFIERS') <> 'Y'
1068     and p_qualifiers_rec.list_line_id <> -1
1069     and l_qp_status = 'S') THEN
1070 
1071 select start_date_active, end_date_active , list_header_id
1072 into l_start_date_active, l_end_date_active, l_list_header_id_1
1073 from qp_list_lines
1074 where list_line_id = p_qualifiers_rec.list_line_id;
1075 
1076    OE_Debug_Pub.add ( 'Value Set 1' || l_start_date_active || l_end_date_active );
1077 
1078 --   oe_debug_pub.add('about to delete a request to check duplicate modifier list lines without product attribute');
1079 
1080 QP_delayed_requests_pvt.Delete_Request
1081 (   p_entity_code => QP_GLOBALS.G_ENTITY_ALL
1082 ,   p_entity_id    =>  p_qualifiers_rec.list_line_id
1083 ,   p_request_Type =>  QP_GLOBALS.G_DUPLICATE_MODIFIER_LINES
1084 ,   x_return_status		=> l_return_status
1085 );
1086 
1087     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1088 
1089 	  oe_debug_pub.add('failed in logging a delayed request ');
1090 
1091         RAISE FND_API.G_EXC_ERROR;
1092 
1093     END IF;
1094 
1095 /* After deleting request if any log a new request to check duplicate modifier list lines with product attribute */
1096 
1097    oe_debug_pub.add('about to log a request to check duplicate modifier list lines with product attribute');
1098 
1099 select count(*) into p_attr_count
1100 from qp_pricing_attributes
1101 where list_line_id = p_qualifiers_rec.list_line_id;
1102 
1103  IF p_attr_count = 0 THEN
1104 
1105     QP_DELAYED_REQUESTS_PVT.Log_Request
1106     ( p_entity_code		=> QP_GLOBALS.G_ENTITY_ALL
1107 ,     p_entity_id		=> p_qualifiers_rec.list_line_id
1108 ,   p_requesting_entity_code	=> QP_GLOBALS.G_ENTITY_ALL
1109 ,   p_requesting_entity_id	=> p_qualifiers_rec.list_line_id
1110 ,   p_request_type		=> QP_GLOBALS.G_DUPLICATE_MODIFIER_LINES
1111 ,   p_param1			=> l_list_header_id_1
1112 ,   p_param2			=> fnd_date.date_to_canonical(l_start_date_active)		--2752265
1113 ,   p_param3			=> fnd_date.date_to_canonical(l_end_date_active)		--2752265
1114 ,   p_param4            => NULL
1115 ,   p_param5            => NULL
1116 ,   p_param6            => NULL
1117 ,   x_return_status		=> l_return_status
1118 );
1119 
1120     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1121 
1122 	  oe_debug_pub.add('failed in logging a delayed request ');
1123 
1124         RAISE FND_API.G_EXC_ERROR;
1125 
1126     END IF;
1127 
1128  ELSE
1129 
1130  Select product_attribute_context, product_attribute, product_attr_value
1131  into p_product_attribute_context, p_product_attribute, p_product_attr_value
1132  from qp_pricing_attributes
1133  where list_line_id =  p_qualifiers_rec.list_line_id
1134  and rownum < 2;
1135 
1136        QP_DELAYED_REQUESTS_PVT.Log_Request
1137     ( p_entity_code		=> QP_GLOBALS.G_ENTITY_ALL
1138 ,     p_entity_id		=> p_qualifiers_rec.list_line_id
1139 ,   p_requesting_entity_code	=> QP_GLOBALS.G_ENTITY_ALL
1140 ,   p_requesting_entity_id	=> p_qualifiers_rec.list_line_id
1141 ,   p_request_type		=> QP_GLOBALS.G_DUPLICATE_MODIFIER_LINES
1142 ,   p_param1			=> l_list_header_id_1
1143 ,   p_param2			=> fnd_date.date_to_canonical(l_start_date_active)		--2752265
1144 ,   p_param3			=> fnd_date.date_to_canonical(l_end_date_active)		--2752265
1145 ,   p_param4            => p_product_attribute_context
1146 ,   p_param5            => p_product_attribute
1147 ,   p_param6            => p_product_attr_value
1148 ,   x_return_status		=> l_return_status
1149 );
1150 
1151     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1152 
1153 	  oe_debug_pub.add('failed in logging a delayed request for duplicate modifiers');
1154 
1155         RAISE FND_API.G_EXC_ERROR;
1156 
1157     END IF;
1158  END IF;
1159   oe_debug_pub.add('after logging delayed request from qualfiers ');
1160 END IF;
1161 
1162 
1163 
1164   --- end bug2091362
1165 
1166 
1167     --Raise a warning if the Qualifier Attribute being used in setup
1168     --has a sourcing method of 'ATTRIBUTE MAPPING' but is not sourcing-enabled
1169     --or if its sourcing_status is not 'Y', i.e., the build sourcing conc.
1170     --program has to be run.
1171 
1172   IF qp_util.attrmgr_installed = 'Y' THEN
1173 
1174     IF p_Qualifiers_rec.qualifier_context IS NOT NULL AND
1175        p_Qualifiers_rec.qualifier_attribute IS NOT NULL
1176     THEN
1177       QP_UTIL.Get_Context_Type('QP_ATTR_DEFNS_QUALIFIER',
1178                                p_Qualifiers_rec.qualifier_context,
1179                                l_context_type,
1180                                l_error_code);
1181 
1182       IF l_error_code = 0 THEN --successfully returned context_type
1183 
1184         QP_UTIL.Get_Sourcing_Info(l_context_type,
1185                                   p_Qualifiers_rec.qualifier_context,
1186                                   p_Qualifiers_rec.qualifier_attribute,
1187                                   l_sourcing_enabled,
1188                                   l_sourcing_status,
1189                                   l_sourcing_method);
1190 
1191         IF l_sourcing_method = 'ATTRIBUTE MAPPING' THEN
1192 
1193           IF l_sourcing_enabled <> 'Y' THEN
1194 
1195             FND_MESSAGE.SET_NAME('QP','QP_ENABLE_SOURCING');
1196             FND_MESSAGE.SET_TOKEN('CONTEXT',
1197                                   p_Qualifiers_rec.qualifier_context);
1198             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1199                                   p_Qualifiers_rec.qualifier_attribute);
1200             OE_MSG_PUB.Add;
1201 
1202           END IF;
1203 
1204           IF l_sourcing_status <> 'Y' THEN
1205 
1206             IF NOT (
1207                p_qualifiers_rec.qualifier_context= 'MODLIST' AND
1208                p_qualifiers_rec.qualifier_attribute = 'QUALIFIER_ATTRIBUTE10')
1209             THEN
1210               FND_MESSAGE.SET_NAME('QP','QP_BUILD_SOURCING_RULES');
1211               FND_MESSAGE.SET_TOKEN('CONTEXT',
1212                                     p_Qualifiers_rec.qualifier_context);
1213               FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1214                                     p_Qualifiers_rec.qualifier_attribute);
1215               OE_MSG_PUB.Add;
1216             END IF;
1217 
1218           END IF;
1219 
1220         END IF; --If sourcing_method = 'ATTRIBUTE MAPPING'
1221 
1222       END IF; --l_error_code = 0
1223 
1224     END IF;--If qualifier_context and qualifier_attribute are NOT NULL
1225 
1226     -- Giri, validate that qualifiers attached to Price Lists are or type LINE/BOTH
1227     IF p_qualifiers_rec.list_header_id is not null and
1228        l_list_type_code in ('PRL', 'AGR') THEN
1229        IF p_Qualifiers_rec.qualifier_context IS NOT NULL AND
1230           p_Qualifiers_rec.qualifier_attribute IS NOT NULL THEN
1231           l_segment_level := qp_util.get_segment_level(p_qualifiers_rec.list_header_id
1232                                                       ,p_Qualifiers_rec.qualifier_context
1233                                                       ,p_Qualifiers_rec.qualifier_attribute
1234                                                       );
1235           IF l_segment_level = 'ORDER' THEN
1236              l_return_status := FND_API.G_RET_STS_ERROR;
1237              IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR) THEN
1238                 qp_util. Get_Attribute_Code(p_FlexField_Name => 'QP_ATTR_DEFNS_QUALIFIER',
1239                          p_Context_Name      =>  p_Qualifiers_rec.qualifier_context,
1240                          p_attribute         =>  p_Qualifiers_rec.qualifier_attribute,
1241                          x_attribute_code    =>  x_attribute_code,
1242                          x_segment_name      =>  x_segment_name);
1243                  -- The level of attribute (?) ? is not compatible for Price Lists
1244                  FND_MESSAGE.SET_NAME('QP','QP_SEGMENT_NOT_ALLOWED_FOR_PL');
1245                  FND_MESSAGE.SET_TOKEN('ATTRIBUTE', x_attribute_code);
1246                  FND_MESSAGE.SET_TOKEN('SEGMENT_LEVEL', l_segment_level);
1247                  OE_MSG_PUB.Add;
1248              END IF;
1249           END IF;
1250        END IF;
1251     END IF;
1252 
1253     -- mkarya, validate that line level qualifiers attached to modifier match the modifier level
1254     -- Changes for attribute manager
1255 
1256       if p_qualifiers_rec.list_header_id is not null and
1257          p_qualifiers_rec.list_line_id <> -1 and
1258          l_list_type_code not in ('PRL', 'AGR') then
1259 
1260            IF p_Qualifiers_rec.qualifier_context IS NOT NULL AND
1261               p_Qualifiers_rec.qualifier_attribute IS NOT NULL
1262            THEN
1263               select modifier_level_code
1264                 into l_modifier_level_code
1265                 from qp_list_lines
1266                where list_header_id = p_qualifiers_rec.list_header_id
1267                  and list_line_id = p_qualifiers_rec.list_line_id;
1268 
1269               l_segment_level := qp_util.get_segment_level(p_qualifiers_rec.list_header_id
1270                                                            ,p_Qualifiers_rec.qualifier_context
1271                                                            ,p_Qualifiers_rec.qualifier_attribute
1272                                                            );
1273               if ((l_modifier_level_code in ('LINE', 'LINEGROUP') and l_segment_level = 'ORDER')
1274                    OR
1275                   (l_modifier_level_code = 'ORDER' and l_segment_level = 'LINE')) then
1276 
1277 		l_return_status := FND_API.G_RET_STS_ERROR;
1278                 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR) THEN
1279                     qp_util. Get_Attribute_Code(p_FlexField_Name => 'QP_ATTR_DEFNS_QUALIFIER',
1280                              p_Context_Name      =>  p_Qualifiers_rec.qualifier_context,
1281                              p_attribute         =>  p_Qualifiers_rec.qualifier_attribute,
1282                              x_attribute_code    =>  x_attribute_code,
1283                              x_segment_name      =>  x_segment_name);
1284                     -- The level of attribute (?) ? is not compatible with modifier level ?.
1285                     FND_MESSAGE.SET_NAME('QP','QP_SEGMENT_NOT_ALLOWED');
1286                     FND_MESSAGE.SET_TOKEN('ATTRIBUTE', x_attribute_code);
1287                     FND_MESSAGE.SET_TOKEN('SEGMENT_LEVEL', l_segment_level);
1288                     FND_MESSAGE.SET_TOKEN('MODIFIER_LEVEL', l_modifier_level_code);
1289                     OE_MSG_PUB.Add;
1290                 END IF; -- check_msg_level
1291 
1292               end if; -- compare modifier_level and segment_level
1293 
1294            END IF;--If qualifier_context and qualifier_attribute are NOT NULL
1295 
1296       end if; -- if line level qualifier attached to modifier
1297 
1298   END IF; -- attribute manager installed
1299 
1300     --  Done validating entity
1301 
1302     x_return_status := l_return_status;
1303 
1304 EXCEPTION
1305 
1306     WHEN FND_API.G_EXC_ERROR THEN
1307 
1308         x_return_status := FND_API.G_RET_STS_ERROR;
1309 
1310     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1311 
1312         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1313 
1314     WHEN OTHERS THEN
1315 
1316         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1317 
1318         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1319         THEN
1320             OE_MSG_PUB.Add_Exc_Msg
1321             (   G_PKG_NAME
1322             ,   'Entity'
1323             );
1324         END IF;
1325 
1326 END Entity;
1327 
1328 --  Procedure Attributes
1329 
1330 PROCEDURE Attributes
1331 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1332 ,   p_QUALIFIERS_rec                IN  QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type
1333 ,   p_old_QUALIFIERS_rec            IN  QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type :=
1334                                         QP_Qualifier_Rules_PUB.G_MISS_QUALIFIERS_REC
1335 )
1336 IS
1337 BEGIN
1338 
1339     x_return_status := FND_API.G_RET_STS_SUCCESS;
1340 
1341     --  Validate QUALIFIERS attributes
1342 
1343 
1344     --dbms_output.put_line('comparison operator');
1345     --dbms_output.put_line('comparison operators is '||nvl(p_QUALIFIERS_rec.comparison_operator_code,'c'));
1346 
1347 
1348     IF  p_QUALIFIERS_rec.comparison_operator_code IS NOT NULL AND
1349         (   p_QUALIFIERS_rec.comparison_operator_code <>
1350             p_old_QUALIFIERS_rec.comparison_operator_code OR
1351             p_old_QUALIFIERS_rec.comparison_operator_code IS NULL )
1352     THEN
1353 
1354     --dbms_output.put_line(' inside if not null comparison operator');
1355         IF NOT QP_Validate.Comparison_Operator(p_QUALIFIERS_rec.comparison_operator_code) THEN
1356             x_return_status := FND_API.G_RET_STS_ERROR;
1357         END IF;
1358     END IF;
1359 
1360 
1361     --dbms_output.put_line('comparison status is '||x_return_status);
1362 
1363 
1364     --dbms_output.put_line('created_by ');
1365 
1366     IF  p_QUALIFIERS_rec.created_by IS NOT NULL AND
1367         (   p_QUALIFIERS_rec.created_by <>
1368             p_old_QUALIFIERS_rec.created_by OR
1369             p_old_QUALIFIERS_rec.created_by IS NULL )
1370     THEN
1371         IF NOT QP_Validate.Created_By(p_QUALIFIERS_rec.created_by) THEN
1372             x_return_status := FND_API.G_RET_STS_ERROR;
1373         END IF;
1374     END IF;
1375     --dbms_output.put_line('status is '||x_return_status);
1376 
1377 
1378 
1379     --dbms_output.put_line('create from rule ');
1380 
1381     IF  p_QUALIFIERS_rec.created_from_rule_id IS NOT NULL AND
1382         (   p_QUALIFIERS_rec.created_from_rule_id <>
1383             p_old_QUALIFIERS_rec.created_from_rule_id OR
1384             p_old_QUALIFIERS_rec.created_from_rule_id IS NULL )
1385     THEN
1386         IF NOT QP_Validate.Created_From_Rule(p_QUALIFIERS_rec.created_from_rule_id) THEN
1387             x_return_status := FND_API.G_RET_STS_ERROR;
1388         END IF;
1389     END IF;
1390 
1391     --dbms_output.put_line(' created from status is '||x_return_status);
1392 
1393 
1394 
1395     --dbms_output.put_line('validating creation date');
1396 
1397     IF  p_QUALIFIERS_rec.creation_date IS NOT NULL AND
1398         (   p_QUALIFIERS_rec.creation_date <>
1399             p_old_QUALIFIERS_rec.creation_date OR
1400             p_old_QUALIFIERS_rec.creation_date IS NULL )
1401     THEN
1402         IF NOT QP_Validate.Creation_Date(p_QUALIFIERS_rec.creation_date) THEN
1403             x_return_status := FND_API.G_RET_STS_ERROR;
1404         END IF;
1405     END IF;
1406     --dbms_output.put_line('status is '||x_return_status);
1407 
1408 
1409 
1410     --dbms_output.put_line('validating end date');
1411 
1412     IF  p_QUALIFIERS_rec.end_date_active IS NOT NULL AND
1413         (   p_QUALIFIERS_rec.end_date_active <>
1414             p_old_QUALIFIERS_rec.end_date_active OR
1415             p_old_QUALIFIERS_rec.end_date_active IS NULL )
1416     THEN
1417         IF NOT QP_Validate.End_Date_Active(p_QUALIFIERS_rec.end_date_active) THEN
1418             x_return_status := FND_API.G_RET_STS_ERROR;
1419         END IF;
1420     END IF;
1421     --dbms_output.put_line('end adate status is '||x_return_status);
1422 
1423 
1424 
1425     --dbms_output.put_line('validating excluder flag ');
1426 
1427     IF  p_QUALIFIERS_rec.excluder_flag IS NOT NULL AND
1428         (   p_QUALIFIERS_rec.excluder_flag <>
1429             p_old_QUALIFIERS_rec.excluder_flag OR
1430             p_old_QUALIFIERS_rec.excluder_flag IS NULL )
1431     THEN
1432         IF NOT QP_Validate.Excluder(p_QUALIFIERS_rec.excluder_flag) THEN
1433             x_return_status := FND_API.G_RET_STS_ERROR;
1434         END IF;
1435     END IF;
1436     --dbms_output.put_line(' excluder flag status is '||x_return_status);
1437 
1438 
1439 
1440     --dbms_output.put_line('validating lat_updated by ');
1441 
1442     IF  p_QUALIFIERS_rec.last_updated_by IS NOT NULL AND
1443         (   p_QUALIFIERS_rec.last_updated_by <>
1444             p_old_QUALIFIERS_rec.last_updated_by OR
1445             p_old_QUALIFIERS_rec.last_updated_by IS NULL )
1446     THEN
1447         IF NOT QP_Validate.Last_Updated_By(p_QUALIFIERS_rec.last_updated_by) THEN
1448             x_return_status := FND_API.G_RET_STS_ERROR;
1449         END IF;
1450     END IF;
1451     --dbms_output.put_line('status is '||x_return_status);
1452 
1453 
1454 
1455     --dbms_output.put_line('validating lat_update date ');
1456 
1457     IF  p_QUALIFIERS_rec.last_update_date IS NOT NULL AND
1458         (   p_QUALIFIERS_rec.last_update_date <>
1459             p_old_QUALIFIERS_rec.last_update_date OR
1460             p_old_QUALIFIERS_rec.last_update_date IS NULL )
1461     THEN
1462         IF NOT QP_Validate.Last_Update_Date(p_QUALIFIERS_rec.last_update_date) THEN
1463             x_return_status := FND_API.G_RET_STS_ERROR;
1464         END IF;
1465     END IF;
1466     --dbms_output.put_line('status is '||x_return_status);
1467 
1468 
1469 
1470     --dbms_output.put_line('validating lat_update login ');
1471 
1472     IF  p_QUALIFIERS_rec.last_update_login IS NOT NULL AND
1473         (   p_QUALIFIERS_rec.last_update_login <>
1474             p_old_QUALIFIERS_rec.last_update_login OR
1475             p_old_QUALIFIERS_rec.last_update_login IS NULL )
1476     THEN
1477         IF NOT QP_Validate.Last_Update_Login(p_QUALIFIERS_rec.last_update_login) THEN
1478             x_return_status := FND_API.G_RET_STS_ERROR;
1479         END IF;
1480     END IF;
1481     --dbms_output.put_line('status is '||x_return_status);
1482 
1483 
1484 
1485     --dbms_output.put_line('validating list_header_id ');
1486 
1487     IF  p_QUALIFIERS_rec.list_header_id IS NOT NULL AND
1488         (   p_QUALIFIERS_rec.list_header_id <>
1489             p_old_QUALIFIERS_rec.list_header_id OR
1490             p_old_QUALIFIERS_rec.list_header_id IS NULL )
1491     THEN
1492         IF NOT QP_Validate.List_Header(p_QUALIFIERS_rec.list_header_id) THEN
1493             x_return_status := FND_API.G_RET_STS_ERROR;
1494         END IF;
1495     END IF;
1496     --dbms_output.put_line('status is '||x_return_status);
1497 
1498 
1499 
1500     --dbms_output.put_line('validating list_line id  ');
1501 
1502     IF  p_QUALIFIERS_rec.list_line_id IS NOT NULL AND
1503         (   p_QUALIFIERS_rec.list_line_id <>
1504             p_old_QUALIFIERS_rec.list_line_id OR
1505             p_old_QUALIFIERS_rec.list_line_id IS NULL )
1506     THEN
1507         IF NOT QP_Validate.List_Line(p_QUALIFIERS_rec.list_line_id) THEN
1508             x_return_status := FND_API.G_RET_STS_ERROR;
1509         END IF;
1510     END IF;
1511     --dbms_output.put_line('status is '||x_return_status);
1512 
1513 
1514 
1515 
1516     --dbms_output.put_line('validating program application id  ');
1517 
1518     IF  p_QUALIFIERS_rec.program_application_id IS NOT NULL AND
1519         (   p_QUALIFIERS_rec.program_application_id <>
1520             p_old_QUALIFIERS_rec.program_application_id OR
1521             p_old_QUALIFIERS_rec.program_application_id IS NULL )
1522     THEN
1523         IF NOT QP_Validate.Program_Application(p_QUALIFIERS_rec.program_application_id) THEN
1524             x_return_status := FND_API.G_RET_STS_ERROR;
1525         END IF;
1526     END IF;
1527     --dbms_output.put_line('status is '||x_return_status);
1528 
1529 
1530 
1531 
1532     --dbms_output.put_line('validating program  id  ');
1533 
1534     IF  p_QUALIFIERS_rec.program_id IS NOT NULL AND
1535         (   p_QUALIFIERS_rec.program_id <>
1536             p_old_QUALIFIERS_rec.program_id OR
1537             p_old_QUALIFIERS_rec.program_id IS NULL )
1538     THEN
1539         IF NOT QP_Validate.Program(p_QUALIFIERS_rec.program_id) THEN
1540             x_return_status := FND_API.G_RET_STS_ERROR;
1541         END IF;
1542     END IF;
1543     --dbms_output.put_line('status is '||x_return_status);
1544 
1545 
1546 
1547     --dbms_output.put_line('validating update date  ');
1548 
1549     IF  p_QUALIFIERS_rec.program_update_date IS NOT NULL AND
1550         (   p_QUALIFIERS_rec.program_update_date <>
1551             p_old_QUALIFIERS_rec.program_update_date OR
1552             p_old_QUALIFIERS_rec.program_update_date IS NULL )
1553     THEN
1554         IF NOT QP_Validate.Program_Update_Date(p_QUALIFIERS_rec.program_update_date) THEN
1555             x_return_status := FND_API.G_RET_STS_ERROR;
1556         END IF;
1557     END IF;
1558     --dbms_output.put_line('status is '||x_return_status);
1559 
1560 
1561 
1562     --dbms_output.put_line('validating qualifier_attribute  ');
1563 
1564     IF  p_QUALIFIERS_rec.qualifier_attribute IS NOT NULL AND
1565         (   p_QUALIFIERS_rec.qualifier_attribute <>
1566             p_old_QUALIFIERS_rec.qualifier_attribute OR
1567             p_old_QUALIFIERS_rec.qualifier_attribute IS NULL )
1568     THEN
1569         IF NOT QP_Validate.Qualifier_Attribute(p_QUALIFIERS_rec.qualifier_attribute) THEN
1570             x_return_status := FND_API.G_RET_STS_ERROR;
1571         END IF;
1572     END IF;
1573     --dbms_output.put_line(' attribute status is '||x_return_status);
1574 
1575 
1576 
1577     --dbms_output.put_line('validating qualifier_attribute val ');
1578 
1579     IF  p_QUALIFIERS_rec.qualifier_attr_value IS NOT NULL AND
1580         (   p_QUALIFIERS_rec.qualifier_attr_value <>
1581             p_old_QUALIFIERS_rec.qualifier_attr_value OR
1582             p_old_QUALIFIERS_rec.qualifier_attr_value IS NULL )
1583     THEN
1584         IF NOT QP_Validate.Qualifier_Attr_Value(p_QUALIFIERS_rec.qualifier_attr_value) THEN
1585             x_return_status := FND_API.G_RET_STS_ERROR;
1586         END IF;
1587     END IF;
1588     --dbms_output.put_line(' attr value status is '||x_return_status);
1589 
1590 
1591 
1592     --dbms_output.put_line('validating qualifier_attribute valto  ');
1593 
1594     IF  p_QUALIFIERS_rec.qualifier_attr_value_to IS NOT NULL AND
1595         (   p_QUALIFIERS_rec.qualifier_attr_value_to <>
1596             p_old_QUALIFIERS_rec.qualifier_attr_value_to OR
1597             p_old_QUALIFIERS_rec.qualifier_attr_value_to IS NULL )
1598     THEN
1599        IF NOT QP_Validate.Qualifier_Attr_Value_to(p_QUALIFIERS_rec.qualifier_attr_value_to) THEN
1600             x_return_status := FND_API.G_RET_STS_ERROR;
1601         END IF;
1602     END IF;
1603     --dbms_output.put_line(' attr_value to status is '||x_return_status);
1604 
1605 
1606 
1607 
1608     --dbms_output.put_line('validating qualifier_context  ');
1609 
1610     IF  p_QUALIFIERS_rec.qualifier_context IS NOT NULL AND
1611         (   p_QUALIFIERS_rec.qualifier_context <>
1612             p_old_QUALIFIERS_rec.qualifier_context OR
1613             p_old_QUALIFIERS_rec.qualifier_context IS NULL )
1614     THEN
1615         IF NOT QP_Validate.Qualifier_Context(p_QUALIFIERS_rec.qualifier_context) THEN
1616             x_return_status := FND_API.G_RET_STS_ERROR;
1617         END IF;
1618     END IF;
1619     --dbms_output.put_line(' context status is '||x_return_status);
1620 
1621 
1622 
1623     --dbms_output.put_line('validating qualifier_datatype  ');
1624 
1625     IF  p_QUALIFIERS_rec.qualifier_datatype IS NOT NULL AND
1626         (   p_QUALIFIERS_rec.qualifier_datatype <>
1627             p_old_QUALIFIERS_rec.qualifier_datatype OR
1628             p_old_QUALIFIERS_rec.qualifier_datatype IS NULL )
1629     THEN
1630         IF NOT QP_Validate.Qualifier_Datatype(p_QUALIFIERS_rec.qualifier_datatype) THEN
1631             x_return_status := FND_API.G_RET_STS_ERROR;
1632         END IF;
1633     END IF;
1634     --dbms_output.put_line(' data type status is '||x_return_status);
1635 
1636     /*IF  p_QUALIFIERS_rec.qualifier_date_format IS NOT NULL AND
1637         (   p_QUALIFIERS_rec.qualifier_date_format <>
1638             p_old_QUALIFIERS_rec.qualifier_date_format OR
1639             p_old_QUALIFIERS_rec.qualifier_date_format IS NULL )
1640     THEN
1641         IF NOT QP_Validate.Qualifier_Date_Format(p_QUALIFIERS_rec.qualifier_date_format) THEN
1642             x_return_status := FND_API.G_RET_STS_ERROR;
1643         END IF;
1644     END IF;*/
1645 
1646 
1647 
1648 
1649     --dbms_output.put_line('validating qualifier_gruouping  ');
1650 
1651 
1652 
1653     IF  p_QUALIFIERS_rec.qualifier_grouping_no <> -1 AND
1654         (   p_QUALIFIERS_rec.qualifier_grouping_no <>
1655             p_old_QUALIFIERS_rec.qualifier_grouping_no OR
1656             p_old_QUALIFIERS_rec.qualifier_grouping_no = -1 )
1657     THEN
1658         IF NOT QP_Validate.Qualifier_Grouping_No(p_QUALIFIERS_rec.qualifier_grouping_no) THEN
1659             x_return_status := FND_API.G_RET_STS_ERROR;
1660         END IF;
1661     END IF;
1662     --dbms_output.put_line(' gropuing status is '||x_return_status);
1663 
1664 
1665 
1666     --dbms_output.put_line('validating qualifier_id  ');
1667 
1668     IF  p_QUALIFIERS_rec.qualifier_id IS NOT NULL AND
1669         (   p_QUALIFIERS_rec.qualifier_id <>
1670             p_old_QUALIFIERS_rec.qualifier_id OR
1671             p_old_QUALIFIERS_rec.qualifier_id IS NULL )
1672     THEN
1673         IF NOT QP_Validate.Qualifier(p_QUALIFIERS_rec.qualifier_id) THEN
1674             x_return_status := FND_API.G_RET_STS_ERROR;
1675         END IF;
1676     END IF;
1677     --dbms_output.put_line(' qualiifer id status is '||x_return_status);
1678 
1679 
1680 
1681 
1682     /*IF  p_QUALIFIERS_rec.qualifier_number_format IS NOT NULL AND
1683         (   p_QUALIFIERS_rec.qualifier_number_format <>
1684             p_old_QUALIFIERS_rec.qualifier_number_format OR
1685             p_old_QUALIFIERS_rec.qualifier_number_format IS NULL )
1686     THEN
1687         IF NOT QP_Validate.Qualifier_Number_Format(p_QUALIFIERS_rec.qualifier_number_format) THEN
1688             x_return_status := FND_API.G_RET_STS_ERROR;
1689         END IF;
1690     END IF;*/
1691 
1692 
1693 
1694     --dbms_output.put_line('validating qualifier_precedence  ');
1695 
1696     IF  p_QUALIFIERS_rec.qualifier_precedence IS NOT NULL AND
1697         (   p_QUALIFIERS_rec.qualifier_precedence <>
1698             p_old_QUALIFIERS_rec.qualifier_precedence OR
1699             p_old_QUALIFIERS_rec.qualifier_precedence IS NULL )
1700     THEN
1701         IF NOT QP_Validate.Qualifier_Precedence(p_QUALIFIERS_rec.qualifier_precedence) THEN
1702             x_return_status := FND_API.G_RET_STS_ERROR;
1703         END IF;
1704     END IF;
1705     --dbms_output.put_line(' precedence status is '||x_return_status);
1706 
1707 
1708 
1709 
1710     --dbms_output.put_line('validating qualifier rule id  ');
1711 
1712 
1713 
1714     IF  p_QUALIFIERS_rec.qualifier_rule_id IS NOT NULL AND
1715         (   p_QUALIFIERS_rec.qualifier_rule_id <>
1716             p_old_QUALIFIERS_rec.qualifier_rule_id OR
1717             p_old_QUALIFIERS_rec.qualifier_rule_id IS NULL )
1718     THEN
1719         IF NOT QP_Validate.Qualifier_Rule(p_QUALIFIERS_rec.qualifier_rule_id) THEN
1720             x_return_status := FND_API.G_RET_STS_ERROR;
1721         END IF;
1722     END IF;
1723     --dbms_output.put_line(' qualifier rule  id status is '||x_return_status);
1724 
1725 
1726     --dbms_output.put_line('validating request id  ');
1727 
1728     IF  p_QUALIFIERS_rec.request_id IS NOT NULL AND
1729         (   p_QUALIFIERS_rec.request_id <>
1730             p_old_QUALIFIERS_rec.request_id OR
1731             p_old_QUALIFIERS_rec.request_id IS NULL )
1732     THEN
1733         IF NOT QP_Validate.Request(p_QUALIFIERS_rec.request_id) THEN
1734             x_return_status := FND_API.G_RET_STS_ERROR;
1735         END IF;
1736     END IF;
1737     --dbms_output.put_line('status is '||x_return_status);
1738 
1739 
1740     --dbms_output.put_line('validating date active   ');
1741 
1742     IF  p_QUALIFIERS_rec.start_date_active IS NOT NULL AND
1743         (   p_QUALIFIERS_rec.start_date_active <>
1744             p_old_QUALIFIERS_rec.start_date_active OR
1745             p_old_QUALIFIERS_rec.start_date_active IS NULL )
1746     THEN
1747         IF NOT QP_Validate.Start_Date_Active(p_QUALIFIERS_rec.start_date_active) THEN
1748             x_return_status := FND_API.G_RET_STS_ERROR;
1749         END IF;
1750     END IF;
1751     --dbms_output.put_line('status is '||x_return_status);
1752 -- Added for TCA
1753     IF  p_QUALIFIERS_rec.qualify_hier_descendent_flag IS NOT NULL AND
1754         (   p_QUALIFIERS_rec.qualify_hier_descendent_flag <>
1755             p_old_QUALIFIERS_rec.qualify_hier_descendent_flag OR
1756             p_old_QUALIFIERS_rec.qualify_hier_descendent_flag IS NULL )
1757     THEN
1758         IF NOT QP_Validate.Qualify_Hier_Descendent_Flag(p_QUALIFIERS_rec.qualify_hier_descendent_flag) THEN
1759             x_return_status := FND_API.G_RET_STS_ERROR;
1760         END IF;
1761     END IF;
1762 
1763 
1764     IF  (p_QUALIFIERS_rec.attribute1 IS NOT NULL AND
1765         (   p_QUALIFIERS_rec.attribute1 <>
1766             p_old_QUALIFIERS_rec.attribute1 OR
1767             p_old_QUALIFIERS_rec.attribute1 IS NULL ))
1768     OR  (p_QUALIFIERS_rec.attribute10 IS NOT NULL AND
1769         (   p_QUALIFIERS_rec.attribute10 <>
1770             p_old_QUALIFIERS_rec.attribute10 OR
1771             p_old_QUALIFIERS_rec.attribute10 IS NULL ))
1772     OR  (p_QUALIFIERS_rec.attribute11 IS NOT NULL AND
1773         (   p_QUALIFIERS_rec.attribute11 <>
1774             p_old_QUALIFIERS_rec.attribute11 OR
1775             p_old_QUALIFIERS_rec.attribute11 IS NULL ))
1776     OR  (p_QUALIFIERS_rec.attribute12 IS NOT NULL AND
1777         (   p_QUALIFIERS_rec.attribute12 <>
1778             p_old_QUALIFIERS_rec.attribute12 OR
1779             p_old_QUALIFIERS_rec.attribute12 IS NULL ))
1780     OR  (p_QUALIFIERS_rec.attribute13 IS NOT NULL AND
1781         (   p_QUALIFIERS_rec.attribute13 <>
1782             p_old_QUALIFIERS_rec.attribute13 OR
1783             p_old_QUALIFIERS_rec.attribute13 IS NULL ))
1784     OR  (p_QUALIFIERS_rec.attribute14 IS NOT NULL AND
1785         (   p_QUALIFIERS_rec.attribute14 <>
1786             p_old_QUALIFIERS_rec.attribute14 OR
1787             p_old_QUALIFIERS_rec.attribute14 IS NULL ))
1788     OR  (p_QUALIFIERS_rec.attribute15 IS NOT NULL AND
1789         (   p_QUALIFIERS_rec.attribute15 <>
1790             p_old_QUALIFIERS_rec.attribute15 OR
1791             p_old_QUALIFIERS_rec.attribute15 IS NULL ))
1792     OR  (p_QUALIFIERS_rec.attribute2 IS NOT NULL AND
1793         (   p_QUALIFIERS_rec.attribute2 <>
1794             p_old_QUALIFIERS_rec.attribute2 OR
1795             p_old_QUALIFIERS_rec.attribute2 IS NULL ))
1796     OR  (p_QUALIFIERS_rec.attribute3 IS NOT NULL AND
1797         (   p_QUALIFIERS_rec.attribute3 <>
1798             p_old_QUALIFIERS_rec.attribute3 OR
1799             p_old_QUALIFIERS_rec.attribute3 IS NULL ))
1800     OR  (p_QUALIFIERS_rec.attribute4 IS NOT NULL AND
1801         (   p_QUALIFIERS_rec.attribute4 <>
1802             p_old_QUALIFIERS_rec.attribute4 OR
1803             p_old_QUALIFIERS_rec.attribute4 IS NULL ))
1804     OR  (p_QUALIFIERS_rec.attribute5 IS NOT NULL AND
1805         (   p_QUALIFIERS_rec.attribute5 <>
1806             p_old_QUALIFIERS_rec.attribute5 OR
1807             p_old_QUALIFIERS_rec.attribute5 IS NULL ))
1808     OR  (p_QUALIFIERS_rec.attribute6 IS NOT NULL AND
1809         (   p_QUALIFIERS_rec.attribute6 <>
1810             p_old_QUALIFIERS_rec.attribute6 OR
1811             p_old_QUALIFIERS_rec.attribute6 IS NULL ))
1812     OR  (p_QUALIFIERS_rec.attribute7 IS NOT NULL AND
1813         (   p_QUALIFIERS_rec.attribute7 <>
1814             p_old_QUALIFIERS_rec.attribute7 OR
1815             p_old_QUALIFIERS_rec.attribute7 IS NULL ))
1816     OR  (p_QUALIFIERS_rec.attribute8 IS NOT NULL AND
1817         (   p_QUALIFIERS_rec.attribute8 <>
1818             p_old_QUALIFIERS_rec.attribute8 OR
1819             p_old_QUALIFIERS_rec.attribute8 IS NULL ))
1820     OR  (p_QUALIFIERS_rec.attribute9 IS NOT NULL AND
1821         (   p_QUALIFIERS_rec.attribute9 <>
1822             p_old_QUALIFIERS_rec.attribute9 OR
1823             p_old_QUALIFIERS_rec.attribute9 IS NULL ))
1824     OR  (p_QUALIFIERS_rec.context IS NOT NULL AND
1825         (   p_QUALIFIERS_rec.context <>
1826             p_old_QUALIFIERS_rec.context OR
1827             p_old_QUALIFIERS_rec.context IS NULL ))
1828     THEN
1829 
1830     --  These calls are temporarily commented out
1831 
1832 /*
1833         FND_FLEX_DESC_VAL.Set_Column_Value
1834         (   column_name                   => 'ATTRIBUTE1'
1835         ,   column_value                  => p_QUALIFIERS_rec.attribute1
1836         );
1837         FND_FLEX_DESC_VAL.Set_Column_Value
1838         (   column_name                   => 'ATTRIBUTE10'
1839         ,   column_value                  => p_QUALIFIERS_rec.attribute10
1840         );
1841         FND_FLEX_DESC_VAL.Set_Column_Value
1842         (   column_name                   => 'ATTRIBUTE11'
1843         ,   column_value                  => p_QUALIFIERS_rec.attribute11
1844         );
1845         FND_FLEX_DESC_VAL.Set_Column_Value
1846         (   column_name                   => 'ATTRIBUTE12'
1847         ,   column_value                  => p_QUALIFIERS_rec.attribute12
1848         );
1849         FND_FLEX_DESC_VAL.Set_Column_Value
1850         (   column_name                   => 'ATTRIBUTE13'
1851         ,   column_value                  => p_QUALIFIERS_rec.attribute13
1852         );
1853         FND_FLEX_DESC_VAL.Set_Column_Value
1854         (   column_name                   => 'ATTRIBUTE14'
1855         ,   column_value                  => p_QUALIFIERS_rec.attribute14
1856         );
1857         FND_FLEX_DESC_VAL.Set_Column_Value
1858         (   column_name                   => 'ATTRIBUTE15'
1859         ,   column_value                  => p_QUALIFIERS_rec.attribute15
1860         );
1861         FND_FLEX_DESC_VAL.Set_Column_Value
1862         (   column_name                   => 'ATTRIBUTE2'
1863         ,   column_value                  => p_QUALIFIERS_rec.attribute2
1864         );
1865         FND_FLEX_DESC_VAL.Set_Column_Value
1866         (   column_name                   => 'ATTRIBUTE3'
1867         ,   column_value                  => p_QUALIFIERS_rec.attribute3
1868         );
1869         FND_FLEX_DESC_VAL.Set_Column_Value
1870         (   column_name                   => 'ATTRIBUTE4'
1871         ,   column_value                  => p_QUALIFIERS_rec.attribute4
1872         );
1873         FND_FLEX_DESC_VAL.Set_Column_Value
1874         (   column_name                   => 'ATTRIBUTE5'
1875         ,   column_value                  => p_QUALIFIERS_rec.attribute5
1876         );
1877         FND_FLEX_DESC_VAL.Set_Column_Value
1878         (   column_name                   => 'ATTRIBUTE6'
1879         ,   column_value                  => p_QUALIFIERS_rec.attribute6
1880         );
1881         FND_FLEX_DESC_VAL.Set_Column_Value
1882         (   column_name                   => 'ATTRIBUTE7'
1883         ,   column_value                  => p_QUALIFIERS_rec.attribute7
1884         );
1885         FND_FLEX_DESC_VAL.Set_Column_Value
1886         (   column_name                   => 'ATTRIBUTE8'
1887         ,   column_value                  => p_QUALIFIERS_rec.attribute8
1888         );
1889         FND_FLEX_DESC_VAL.Set_Column_Value
1890         (   column_name                   => 'ATTRIBUTE9'
1891         ,   column_value                  => p_QUALIFIERS_rec.attribute9
1892         );
1893         FND_FLEX_DESC_VAL.Set_Column_Value
1894         (   column_name                   => 'CONTEXT'
1895         ,   column_value                  => p_QUALIFIERS_rec.context
1896         );
1897 */
1898 
1899         --  Validate descriptive flexfield.
1900 
1901     --dbms_output.put_line('validating flex   ');
1902         IF NOT QP_Validate.Desc_Flex( 'QP_QUALIFIERS' ) THEN
1903             x_return_status := FND_API.G_RET_STS_ERROR;
1904         END IF;
1905     --dbms_output.put_line('status is '||x_return_status);
1906 
1907     END IF;
1908 
1909     --  Done validating attributes
1910 
1911 EXCEPTION
1912 
1913     WHEN FND_API.G_EXC_ERROR THEN
1914 
1915         x_return_status := FND_API.G_RET_STS_ERROR;
1916 
1917     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1918 
1919         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1920 
1921     WHEN OTHERS THEN
1922 
1923         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1924 
1925         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1926         THEN
1927             OE_MSG_PUB.Add_Exc_Msg
1928             (   G_PKG_NAME
1929             ,   'Attributes'
1930             );
1931         END IF;
1932 
1933 END Attributes;
1934 
1935 --  Procedure Entity_Delete
1936 
1937 PROCEDURE Entity_Delete
1938 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1939 ,   p_QUALIFIERS_rec                IN  QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type
1940 )
1941 IS
1942 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
1943 BEGIN
1944 
1945     --  Validate entity delete.
1946 
1947     NULL;
1948     -- Check whether Source System Code matches
1949     -- mkarya for bug 1728764, Prevent update of Trade Management Data in QP
1950     QP_UTIL.Check_Source_System_Code
1951                             (p_list_header_id => p_QUALIFIERS_rec.list_header_id,
1952                              p_list_line_id   => p_QUALIFIERS_rec.list_line_id,
1953                              x_return_status  => l_return_status
1954                             );
1955 
1956     --  Done.
1957 
1958     x_return_status := l_return_status;
1959 
1960 EXCEPTION
1961 
1962     WHEN FND_API.G_EXC_ERROR THEN
1963 
1964         x_return_status := FND_API.G_RET_STS_ERROR;
1965 
1966     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1967 
1968         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1969 
1970     WHEN OTHERS THEN
1971 
1972         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1973 
1974         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1975         THEN
1976             OE_MSG_PUB.Add_Exc_Msg
1977             (   G_PKG_NAME
1978             ,   'Entity_Delete'
1979             );
1980         END IF;
1981 
1982 END Entity_Delete;
1983 
1984 END QP_Validate_Qualifiers;