DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_VALIDATE_MODIFIERS

Source


1 PACKAGE BODY QP_Validate_Modifiers AS
2 /* $Header: QPXLMLLB.pls 120.3.12000000.2 2007/04/26 04:59:24 rassharm ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'QP_Validate_Modifiers';
7 
8 --  Procedure Entity
9 
10 PROCEDURE Entity
11 (   x_return_status                 OUT NOCOPY VARCHAR2
12 ,   p_MODIFIERS_rec                 IN  QP_Modifiers_PUB.Modifiers_Rec_Type
13 ,   p_old_MODIFIERS_rec             IN  QP_Modifiers_PUB.Modifiers_Rec_Type :=
14                                         QP_Modifiers_PUB.G_MISS_MODIFIERS_REC
15 )
16 IS
17 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
18 l_organization_id             NUMBER;
19 l_context_flag                VARCHAR2(1);
20 l_attribute_flag              VARCHAR2(1);
21 l_value_flag                  VARCHAR2(1);
22 l_datatype                    VARCHAR2(1);
23 l_precedence                  NUMBER;
24 l_dummy_1                     VARCHAR2(1);
25 l_dummy_3                     VARCHAR2(1);
26 l_charge_type_subtype         VARCHAR2(1);
27 l_dummy_2                     VARCHAR2(3);
28 l_dummy_4                     VARCHAR2(3);
29 l_dummy_5                     NUMBER;
30 l_error_code                  NUMBER;
31 l_uom_code                    VARCHAR2(3);
32 l_list_type_code              VARCHAR2(30);
33 l_ask_for_flag                VARCHAR2(1);
34 l_start_date_active           DATE;
35 l_end_date_active             DATE;
36 l_phase_sequence              NUMBER;
37 l_primary_list_line_type_code VARCHAR2(30);
38 l_qp_accrual_uom_class        VARCHAR2(10);
39 l_qp_status                   VARCHAR2(1);
40 l_gsa_indicator               VARCHAR2(1);
41 l_arithmetic_operator         VARCHAR2(30);
42 l_list_line_type_code         VARCHAR2(30); -- Bug 2862465
43 l_qualification_ind           NUMBER; -- Bug 2862465
44 l_phase_price_evt             VARCHAR2(1):='N'; --Bug 2724502
45 l_phase_freeze_set            VARCHAR2(1):='N'; --Bug 1748272
46 l_modifier_level_code	      VARCHAR2(30); --Bug 2835156
47 l_rltd_exist                  VARCHAR2(1); --Bug 2835156
48 l_profile_pte_code            qp_list_headers_b.pte_code%type:=fnd_profile.value('QP_PRICING_TRANSACTION_ENTITY');
49 l_profile_source_system_code  qp_list_headers_b.source_system_code%type := fnd_profile.value('QP_SOURCE_SYSTEM_CODE');
50 
51 BEGIN
52 
53 oe_debug_pub.add('BEGIN Entity in QPXLMLLB');
54 
55     -- Check whether Source System Code matches
56     -- mkarya for bug 1728764, Prevent update of Trade Management Data in QP
57     QP_UTIL.Check_Source_System_Code
58                             (p_list_header_id => p_MODIFIERS_rec.list_header_id,
59                              p_list_line_id   => p_MODIFIERS_rec.list_line_id,
60                              x_return_status  => l_return_status
61                             );
62 
63     --  Check required attributes.
64 
65     IF  p_MODIFIERS_rec.list_line_id IS NULL
66     THEN
67 
68         l_return_status := FND_API.G_RET_STS_ERROR;
69 
70         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
71         THEN
72 
73             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
74             FND_MESSAGE.SET_TOKEN('ATTRIBUTE','list line id');
75             OE_MSG_PUB.Add;
76 
77         END IF;
78 
79     END IF;
80 
81     --
82     --  Check rest of required attributes here.
83     --
84 
85 
86     IF p_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_UPDATE
87     THEN
88 
89        IF  p_old_MODIFIERS_rec.list_line_type_code IS NOT NULL
90        AND p_old_MODIFIERS_rec.list_line_type_code <> FND_API.G_MISS_CHAR
91        AND p_old_MODIFIERS_rec.list_line_type_code <> p_MODIFIERS_rec.list_line_type_code
92 	  THEN
93 
94         l_return_status := FND_API.G_RET_STS_ERROR;
95 
96         FND_MESSAGE.SET_NAME('QP','QP_CANNOT_UPDATE_LIST_LINE_TYP');
97         OE_MSG_PUB.Add;
98 
99        END IF;
100 
101        IF  p_old_MODIFIERS_rec.modifier_level_code IS NOT NULL
102        AND p_old_MODIFIERS_rec.modifier_level_code <> FND_API.G_MISS_CHAR
103        AND p_old_MODIFIERS_rec.modifier_level_code <> p_MODIFIERS_rec.modifier_level_code
104 	  THEN
105 
106         l_return_status := FND_API.G_RET_STS_ERROR;
107 
108         FND_MESSAGE.SET_NAME('QP','QP_CANNOT_UPDATE_MOD_LVL');
109         OE_MSG_PUB.Add;
110 
111        END IF;
112 
113        IF  p_old_MODIFIERS_rec.list_line_no IS NOT NULL
114        AND p_old_MODIFIERS_rec.list_line_no <> FND_API.G_MISS_CHAR
115        AND p_old_MODIFIERS_rec.list_line_no <> p_MODIFIERS_rec.list_line_no
116 	  THEN
117 
118         l_return_status := FND_API.G_RET_STS_ERROR;
119 
120         FND_MESSAGE.SET_NAME('QP','QP_CANNOT_UPDATE_LIST_LINE_NO');
121         OE_MSG_PUB.Add;
122 
123        END IF;
124        IF  (p_old_MODIFIERS_rec.proration_type_code IS NOT NULL  OR
125             p_old_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE')
126        AND nvl(p_old_MODIFIERS_rec.proration_type_code,'X') <> nvl(p_MODIFIERS_rec.proration_type_code,'X')
127           THEN
128 
129         l_return_status := FND_API.G_RET_STS_ERROR;
130 
131         FND_MESSAGE.SET_NAME('QP','QP_CANNOT_UPDATE_ATTRIBUTE');
132         FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Proration Type Code');
133 
134         OE_MSG_PUB.Add;
135 
136        END IF;
137      END IF;
138 
139 
140 	IF  p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
141 
142         BEGIN
143 
144 
145 	    SELECT LIST_TYPE_CODE, ASK_FOR_FLAG, START_DATE_ACTIVE, END_DATE_ACTIVE,GSA_INDICATOR
146 	    INTO   l_list_type_code, l_ask_for_flag, l_start_date_active, l_end_date_active, l_gsa_indicator
147          FROM   QP_LIST_HEADERS_B
148          WHERE  LIST_HEADER_ID = p_MODIFIERS_rec.list_header_id;
149 
150          EXCEPTION
151           WHEN NO_DATA_FOUND THEN
152           null;
153 
154        END;
155 
156      END IF;
157 
158 
159 oe_debug_pub.add('11');
160 
161 /*   List Line Type Code is mandatory and these are the types applicable for Modifiers  */
162 
163      IF  p_MODIFIERS_rec.list_line_type_code IS NULL
164      THEN
165 
166 oe_debug_pub.add('list line type code manda');
167         l_return_status := FND_API.G_RET_STS_ERROR;
168 
169             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
170             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('LIST_LINE_TYPE_CODE'));  -- Fix For Bug-1974413
171             OE_MSG_PUB.Add;
172 
173      END IF;
174 
175   IF  l_gsa_indicator IS NULL
176   THEN
177 
178      l_qp_status := QP_UTIL.GET_QP_STATUS;
179 
180      IF     ( l_qp_status = 'I' AND
181               p_MODIFIERS_rec.list_line_type_code <> 'DIS' AND
182               p_MODIFIERS_rec.list_line_type_code <> 'CIE' AND
183               p_MODIFIERS_rec.list_line_type_code <> 'OID' AND
184               p_MODIFIERS_rec.list_line_type_code <> 'PRG' AND
185               p_MODIFIERS_rec.list_line_type_code <> 'RLTD' AND
186               p_MODIFIERS_rec.list_line_type_code <> 'TSN' AND
187               p_MODIFIERS_rec.list_line_type_code <> 'SUR' AND
188               p_MODIFIERS_rec.list_line_type_code <> 'PBH' AND
189               p_MODIFIERS_rec.list_line_type_code <> 'PMR' AND
190               p_MODIFIERS_rec.list_line_type_code <> 'FREIGHT_CHARGE' AND
191               p_MODIFIERS_rec.list_line_type_code <> 'IUE' )
192      THEN
193 
194 
195 oe_debug_pub.add('list line type code invalid');
196         l_return_status := FND_API.G_RET_STS_ERROR;
197 
198         FND_MESSAGE.SET_NAME('QP','QP_INVALID_LIST_LINE_TYPE');
199         OE_MSG_PUB.Add;
200 
201      END IF;
202 
203 -- For bug 2363065, raise the error in basic pricing if not called from FTE
204 	IF  p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
205        IF     ( l_qp_status = 'S' AND
206                 QP_MOD_LOADER_PUB.G_PROCESS_LST_REQ_TYPE <> 'FTE' AND
207                  p_MODIFIERS_rec.list_line_type_code <> 'DIS' AND
208                  p_MODIFIERS_rec.list_line_type_code <> 'PBH' AND
209                  p_MODIFIERS_rec.list_line_type_code <> 'SUR' AND
210                  p_MODIFIERS_rec.list_line_type_code <> 'FREIGHT_CHARGE')
211        THEN
212 
213 
214 oe_debug_pub.add('list line type code invalid');
215            l_return_status := FND_API.G_RET_STS_ERROR;
216 
217            FND_MESSAGE.SET_NAME('QP','QP_INVALID_LIST_LINE_TYPE');
218            OE_MSG_PUB.Add;
219 
220         END IF;
221       END IF;
222 
223   END IF;
224 
225    IF  p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
226     IF    l_gsa_indicator = 'Y'
227     AND   p_MODIFIERS_rec.list_line_type_code <> 'DIS'
228     THEN
229 
230            l_return_status := FND_API.G_RET_STS_ERROR;
231 
232            FND_MESSAGE.SET_NAME('QP','QP_INVALID_LIST_LINE_TYPE');
233            OE_MSG_PUB.Add;
234 
235     END IF;
236    END IF;
237 
238 
239 	IF  p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
240        IF  p_MODIFIERS_rec.from_rltd_modifier_id IS NOT NULL
241        AND  p_MODIFIERS_rec.to_rltd_modifier_id IS NOT NULL
242 	  THEN
243 
244          BEGIN
245 	      SELECT LIST_LINE_TYPE_CODE
246 	      INTO   l_primary_list_line_type_code
247 	      FROM   QP_LIST_LINES
248 	      WHERE  LIST_LINE_ID = p_MODIFIERS_rec.from_rltd_modifier_id;
249 
250          EXCEPTION
251 	      WHEN NO_DATA_FOUND THEN
252            null;
253 
254          END;
255 
256        END IF;
257 
258 /*   Validate that the Modifier type period is within the the Modifier period */
259 
260        IF    l_start_date_active IS NOT NULL
261        AND   p_MODIFIERS_rec.start_date_active IS NOT NULL
262        AND   p_MODIFIERS_rec.start_date_active < l_start_date_active
263 	  THEN
264 
265             l_return_status := FND_API.G_RET_STS_ERROR;
266             FND_MESSAGE.SET_NAME('QP','QP_MOD_DATES_WITHIN_MODLIST');
267             OE_MSG_PUB.Add;
268 
269        END IF;
270 
271        IF    l_end_date_active IS NOT NULL
272        AND   p_MODIFIERS_rec.end_date_active IS NOT NULL
273        AND   p_MODIFIERS_rec.end_date_active > l_end_date_active
274 	  THEN
275 
276             l_return_status := FND_API.G_RET_STS_ERROR;
277             FND_MESSAGE.SET_NAME('QP','QP_MOD_DATES_WITHIN_MODLIST');
278             OE_MSG_PUB.Add;
279 
280        END IF;
281 
282        IF    l_start_date_active IS NOT NULL
283        AND   p_MODIFIERS_rec.end_date_active IS NOT NULL
284        AND   p_MODIFIERS_rec.end_date_active < l_start_date_active
285 	  THEN
286 
287             l_return_status := FND_API.G_RET_STS_ERROR;
288             FND_MESSAGE.SET_NAME('QP','QP_MOD_DATES_WITHIN_MODLIST');
289             OE_MSG_PUB.Add;
290 
291        END IF;
292 
293        IF    l_end_date_active IS NOT NULL
294        AND   p_MODIFIERS_rec.start_date_active IS NOT NULL
295        AND   p_MODIFIERS_rec.start_date_active > l_end_date_active
296 	  THEN
297 
298             l_return_status := FND_API.G_RET_STS_ERROR;
299             FND_MESSAGE.SET_NAME('QP','QP_MOD_DATES_WITHIN_MODLIST');
300             OE_MSG_PUB.Add;
301 
302        END IF;
303 	END IF; -- list_line_type_code <> 'PMR'
304 
305 
306 /*   The only list_line_type_code applicable for CHARGES is FREIGHT_CHARGE  */
307 
308      IF   (l_list_type_code = 'CHARGES'
309      AND  p_MODIFIERS_rec.list_line_type_code <> 'FREIGHT_CHARGE')
310      OR   (p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE'
311      AND  l_list_type_code <> 'CHARGES')
312 	THEN
313 
314             l_return_status := FND_API.G_RET_STS_ERROR;
315             FND_MESSAGE.SET_NAME('QP','QP_FRT_CHRG_ALLOW_CHRGS');
316             OE_MSG_PUB.Add;
317 
318      END IF;
319 
320 /*   If Ask_For_Flag is entered, list_line_no is mandatory for these list types  */
321 
322      IF ( p_MODIFIERS_rec.list_line_type_code = 'DIS' OR
323           p_MODIFIERS_rec.list_line_type_code = 'SUR' OR
324           p_MODIFIERS_rec.list_line_type_code = 'OID' OR
325           p_MODIFIERS_rec.list_line_type_code = 'PRG' OR
326           p_MODIFIERS_rec.list_line_type_code = 'IUE' OR
327           p_MODIFIERS_rec.list_line_type_code = 'TSN' OR
328           p_MODIFIERS_rec.list_line_type_code = 'PBH' ) AND
329 	     p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
330           p_MODIFIERS_rec.list_line_no IS NULL AND
331           l_ask_for_flag = 'Y'
332 
333      THEN
334           l_return_status := FND_API.G_RET_STS_ERROR;
335 
336             FND_MESSAGE.SET_NAME('QP','QP_LIST_NO_MAND_IF_ASK_FOR');
337             OE_MSG_PUB.Add;
338 
339 	END IF;
340 
341 /*   List_line_no is mandatory for Coupon Issue  */
342 
343      IF   p_MODIFIERS_rec.list_line_type_code = 'CIE'  AND
344 	     p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
345           p_MODIFIERS_rec.list_line_no IS NULL
346 
347      THEN
348           l_return_status := FND_API.G_RET_STS_ERROR;
349 
350             FND_MESSAGE.SET_NAME('QP','QP_LIST_NO_MAND_FOR_CIE');
351             OE_MSG_PUB.Add;
352 
353 	END IF;
354 
355 --dbms_output.put_line('1');
356 oe_debug_pub.add('22');
357 
358 /*   Automatic Flag is mandatory for these Modifier types */
359 
360      IF ( p_MODIFIERS_rec.list_line_type_code = 'DIS' OR
361           p_MODIFIERS_rec.list_line_type_code = 'SUR' OR
362           p_MODIFIERS_rec.list_line_type_code = 'OID' OR
363           p_MODIFIERS_rec.list_line_type_code = 'PRG' OR
364           p_MODIFIERS_rec.list_line_type_code = 'CIE' OR
365           p_MODIFIERS_rec.list_line_type_code = 'IUE' OR
366           p_MODIFIERS_rec.list_line_type_code = 'TSN' OR
367           p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE' OR
368           p_MODIFIERS_rec.list_line_type_code = 'PBH' ) AND
369 	     p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
370           p_MODIFIERS_rec.automatic_flag is NULL
371 
372      THEN
373 oe_debug_pub.add('auto flag mand');
374           l_return_status := FND_API.G_RET_STS_ERROR;
375 
376             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
377             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('AUTOMATIC_FLAG'));   -- Fix For Bug-1974413
378             OE_MSG_PUB.Add;
379 
380 	END IF;
381 
382 	IF  p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
383        IF  p_MODIFIERS_rec.automatic_flag IS NOT NULL
384        AND  p_MODIFIERS_rec.automatic_flag <> 'Y'
385 	  AND  p_MODIFIERS_rec.automatic_flag <> 'N'
386        THEN
387 
388 oe_debug_pub.add('auto flag invalid');
389           l_return_status := FND_API.G_RET_STS_ERROR;
390 
391           FND_MESSAGE.SET_NAME('QP','QP_AUTO_FLAG_Y_OR_N');
392           OE_MSG_PUB.Add;
393 
394 	  END IF;
395 
396 /* Automatic flag is mandatory for all Benefit lines   */
397 
398        IF   p_MODIFIERS_rec.list_line_type_code <> 'RLTD'
399        AND  p_MODIFIERS_rec.rltd_modifier_grp_type IS NOT NULL
400        AND  p_MODIFIERS_rec.automatic_flag IS NULL
401        THEN
402 
403           l_return_status := FND_API.G_RET_STS_ERROR;
404 
405 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
406           FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('AUTOMATIC_FLAG'));  -- Fix For Bug-1974413
407           OE_MSG_PUB.Add;
408 
409        END IF;
410 
411 /*   Automatic Flag must be Y for OID, PRG, CIE and PBH   */
412 
413      IF ( p_MODIFIERS_rec.list_line_type_code = 'OID' OR
414           --p_MODIFIERS_rec.list_line_type_code = 'PBH' OR -- changes made by spgopal to allow manual breaks bug 1407684
415           p_MODIFIERS_rec.list_line_type_code = 'PRG' OR
416           p_MODIFIERS_rec.list_line_type_code = 'CIE' ) AND
417 	     p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
418           p_MODIFIERS_rec.automatic_flag <> 'Y'
419 
420      THEN
421 
422           l_return_status := FND_API.G_RET_STS_ERROR;
423 
424             FND_MESSAGE.SET_NAME('QP','QP_AUTO_FLAG_MUST_BE_Y');
425             OE_MSG_PUB.Add;
426 
427 	END IF;
428 
429 /*   Only Discount, Surcharge and Freight Charge can be manual or automatic. Other Discount types can always be automatic   */
430 /* changes by spgopal bug 1407648 manual overrideable price breaks are allowed R11 functionality*/
431 
432      IF ( p_MODIFIERS_rec.list_line_type_code <> 'DIS' AND
433           p_MODIFIERS_rec.list_line_type_code <> 'SUR' AND
434           p_MODIFIERS_rec.list_line_type_code <> 'PBH' AND
435           p_MODIFIERS_rec.list_line_type_code <> 'FREIGHT_CHARGE' AND
436           p_MODIFIERS_rec.automatic_flag = 'N' )
437 
438      THEN
439 
440           l_return_status := FND_API.G_RET_STS_ERROR;
441 
442             FND_MESSAGE.SET_NAME('QP','QP_DIS_SUR_FREIGHT_MANUAL');
443             OE_MSG_PUB.Add;
444 
445 	END IF;
446 
447      END IF; -- list_line_type_code <> 'PMR'
448 
449 --dbms_output.put_line('2');
450 oe_debug_pub.add('33');
451 
452 /*   Modifier Level Code is mandatory for all list lines except for Price Modifier and related*/
453 
454 	IF  p_MODIFIERS_rec.list_line_type_code <> 'PMR'
455 	AND  p_MODIFIERS_rec.list_line_type_code <> 'RLTD'
456 	THEN
457        IF  p_MODIFIERS_rec.modifier_level_code IS NULL
458        THEN
459 
460 oe_debug_pub.add('modifier level manda');
461           l_return_status := FND_API.G_RET_STS_ERROR;
462 
463             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
464             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('MODIFIER_LEVEL_CODE')); --Fix For Bug-1974413
465             OE_MSG_PUB.Add;
466 
467 
468 	  ELSIF (p_MODIFIERS_rec.modifier_level_code = 'ORDER'
469 			AND p_MODIFIERS_rec.pricing_group_sequence IS NOT NULL
470                            AND QP_UTIL.get_qp_status = 'I') THEN
471  		--Order level modifiers must have null pricing group sequence(bucket)
472 		--added on request by jholla due to invoicing problems in OM for orde
473 		--level modifiers
474                /* Bug 1957062 Check Bypassed for Basic Pricing */
475 
476           l_return_status := FND_API.G_RET_STS_ERROR;
477           FND_MESSAGE.SET_NAME('QP','QP_ORD_LVL_NULL_BUCKET');
478           OE_MSG_PUB.Add;
479 
480 
481 /*   Modifier Level Code can be LINE, ORDER or LINEGROUP  */
482 
483        ELSIF  ( p_MODIFIERS_rec.modifier_level_code <> 'LINE'  AND
484                 p_MODIFIERS_rec.modifier_level_code <> 'ORDER' AND
485                 p_MODIFIERS_rec.modifier_level_code <> 'LINEGROUP' )
486        THEN
487 
488 oe_debug_pub.add('modifier level invalid');
489           l_return_status := FND_API.G_RET_STS_ERROR;
490 
491           FND_MESSAGE.SET_NAME('QP','QP_MOD_LVL_LN_LNGRP_OR_ORD');
492           OE_MSG_PUB.Add;
493 
494 	  END IF;
495 
496 /*   Modifier Level Code can be LINE or ORDER for list line type of Freight Charge and Terms Substitution */
497 
498        IF   ( p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE'
499 	  OR     p_MODIFIERS_rec.list_line_type_code = 'TSN')
500 	  AND    p_MODIFIERS_rec.modifier_level_code <> 'LINE'
501 	  AND    p_MODIFIERS_rec.modifier_level_code <> 'ORDER'
502        THEN
503 
504           l_return_status := FND_API.G_RET_STS_ERROR;
505 
506           FND_MESSAGE.SET_NAME('QP','QP_MOD_LVL_LN_OR_ORD');
507           OE_MSG_PUB.Add;
508 
509 	  END IF;
510 
511 /*   Modifier Level Code can be LINE or LINEGROUP for list line type of Price Break Header and Other Item Discount */
512 
513        IF     ( p_MODIFIERS_rec.list_line_type_code = 'PBH'
514 	  OR       p_MODIFIERS_rec.list_line_type_code = 'OID')
515        AND      p_MODIFIERS_rec.modifier_level_code <> 'LINE'
516 	  AND      p_MODIFIERS_rec.modifier_level_code <> 'LINEGROUP'
517        THEN
518 
519           l_return_status := FND_API.G_RET_STS_ERROR;
520 
521           IF QP_UTIL.get_qp_status = 'I' THEN
522 	      FND_MESSAGE.SET_NAME('QP','QP_MOD_LVL_LN_OR_LNGRP');
523 	  ELSE
524 	      FND_MESSAGE.SET_NAME('QP','QP_MOD_LVL_LN');
525 	  END IF;
526           OE_MSG_PUB.Add;
527 
528 	  END IF;
529 
530 /*   Modifier Level Code can be LINE for list line type of Item Upgrade  */
531 
532        IF       p_MODIFIERS_rec.list_line_type_code = 'IUE'
533        AND      p_MODIFIERS_rec.modifier_level_code <> 'LINE'
534 			 THEN
535 
536           l_return_status := FND_API.G_RET_STS_ERROR;
537 
538           FND_MESSAGE.SET_NAME('QP','QP_MOD_LVL_LN');
539           OE_MSG_PUB.Add;
540 
541 	  END IF;
542 
543 /*   Modifier Level Code can be LINE for GSA discounts */
544 
545        IF  l_gsa_indicator = 'Y'
546        AND p_MODIFIERS_rec.modifier_level_code <> 'LINE'
547        THEN
548 
549           l_return_status := FND_API.G_RET_STS_ERROR;
550 
551           FND_MESSAGE.SET_NAME('QP','QP_MOD_LVL_LN');
552           OE_MSG_PUB.Add;
553 
554 	  END IF;
555 
556     END IF; -- list_line_type_code <> 'PMR' and list_line_type_code <> 'RLTD'
557 
558 
559     IF  (p_MODIFIERS_rec.list_line_type_code = 'DIS' OR
560          p_MODIFIERS_rec.list_line_type_code = 'SUR' OR
561          p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE') AND
562          p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
563          p_MODIFIERS_rec.operand IS NULL AND
564          p_MODIFIERS_rec.price_by_formula_id IS NULL
565     THEN
566 
567 oe_debug_pub.add('arith op mand');
568           l_return_status := FND_API.G_RET_STS_ERROR;
569 
570             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
571             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRICE_BY_FORMULA_ID')); -- Fix For Bug-1974413
572             OE_MSG_PUB.Add;
573 
574     END IF;
575 
576 /* Arithmetic Operator is mandatory for these Qualifier list lines */
577 
578 oe_debug_pub.add('44');
579 	IF  p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
580        IF  (p_MODIFIERS_rec.list_line_type_code = 'DIS' OR
581             p_MODIFIERS_rec.list_line_type_code = 'SUR' OR
582             p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE') AND
583             p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
584             p_MODIFIERS_rec.arithmetic_operator IS NULL
585        THEN
586 
587 oe_debug_pub.add('arith op mand');
588           l_return_status := FND_API.G_RET_STS_ERROR;
589 
590             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
591             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('ARITHMETIC_OPERATOR')); -- Fix For Bug-1974413
592             OE_MSG_PUB.Add;
593 
594        END IF;
595 
596 /* Arithmetic Operator is mandatory for these Benefit list lines */
597 
598             oe_debug_pub.add('list line = '||p_MODIFIERS_rec.list_line_type_code);
599             oe_debug_pub.add('group type = '||p_MODIFIERS_rec.rltd_modifier_grp_type);
600             oe_debug_pub.add('arithme oper = '||p_MODIFIERS_rec.arithmetic_operator);
601 
602 
603        IF   p_MODIFIERS_rec.list_line_type_code <> 'PRG'  AND
604             p_MODIFIERS_rec.list_line_type_code <> 'RLTD' AND
605             p_MODIFIERS_rec.list_line_type_code <> 'CIE' AND
606             p_MODIFIERS_rec.rltd_modifier_grp_type IS NOT NULL AND
607             p_MODIFIERS_rec.arithmetic_operator IS NULL
608        THEN
609 
610 oe_debug_pub.add('arith op mand');
611           l_return_status := FND_API.G_RET_STS_ERROR;
612 
613             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
614             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('ARITHMETIC_OPERATOR')); -- Fix For Bug-1974413
615             OE_MSG_PUB.Add;
616 
617        END IF;
618 
619 /* For Order level discounts, only lumpsum is allowed for Freight Charge     */
620 
621        IF   p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE'  AND
622             p_MODIFIERS_rec.modifier_level_code = 'ORDER' AND
623             p_MODIFIERS_rec.arithmetic_operator <> 'LUMPSUM'
624        THEN
625 
626 oe_debug_pub.add('arith op mand');
627           l_return_status := FND_API.G_RET_STS_ERROR;
628 
629             FND_MESSAGE.SET_NAME('QP','QP_LUMPSUM_FOR_ORDER');
630             OE_MSG_PUB.Add;
631 
632        END IF;
633 
634 /*   Arithmetic Operators applicable  for list line type FREIGHT_CHARGE are % and AMT modified by spgopal also lumpsum for freight charge at line level*/
635 
636        IF  ( p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE' AND
637             p_MODIFIERS_rec.modifier_level_code <> 'ORDER' AND
638                 p_MODIFIERS_rec.arithmetic_operator <> '%' AND
639                 p_MODIFIERS_rec.arithmetic_operator <> 'LUMPSUM' AND
640                 p_MODIFIERS_rec.arithmetic_operator <> 'AMT' )
641        THEN
642 
643           l_return_status := FND_API.G_RET_STS_ERROR;
644 
645 	     FND_MESSAGE.SET_NAME('QP','QP_DIS_PERCNT_OR_AMT');
646           OE_MSG_PUB.Add;
647 
648        END IF;
649 
650 /* For Order level discounts, only % is allowed for all discounts except for Freight Charge     */
651 
652        IF   p_MODIFIERS_rec.list_line_type_code <> 'FREIGHT_CHARGE'  AND
653             p_MODIFIERS_rec.modifier_level_code = 'ORDER' AND
654             p_MODIFIERS_rec.arithmetic_operator <> '%'
655        THEN
656 
657 oe_debug_pub.add('arith op mand');
658           l_return_status := FND_API.G_RET_STS_ERROR;
659 
660             FND_MESSAGE.SET_NAME('QP','QP_PERCENT_FOR_ORDER');
661             OE_MSG_PUB.Add;
662 
663        END IF;
664 
665 /* Operand is mandatory for these Benefit list lines */
666 
667             oe_debug_pub.add('list line = '||p_MODIFIERS_rec.list_line_type_code);
668             oe_debug_pub.add('group type = '||p_MODIFIERS_rec.rltd_modifier_grp_type);
669             oe_debug_pub.add('operand = '||to_char(p_MODIFIERS_rec.operand));
670             oe_debug_pub.add('formula = '||to_char(p_MODIFIERS_rec.price_by_formula_id));
671 
672        IF   p_MODIFIERS_rec.list_line_type_code <> 'PRG' AND
673             p_MODIFIERS_rec.list_line_type_code <> 'RLTD' AND
674             p_MODIFIERS_rec.list_line_type_code <> 'CIE' AND
675             p_MODIFIERS_rec.rltd_modifier_grp_type IS NOT NULL AND
676             p_MODIFIERS_rec.operand IS NULL AND
677             p_MODIFIERS_rec.price_by_formula_id IS NULL
678        THEN
679 
680 oe_debug_pub.add('arith op mand');
681           l_return_status := FND_API.G_RET_STS_ERROR;
682 
683             FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
684             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRICE_BY_FORMULA_ID')); -- Fix For Bug-1974413
685             OE_MSG_PUB.Add;
686 
687        END IF;
688 
689 
690 /*   Arithmetic Operator can only be NEWPRICE for GSA Discounts   */
691 
692        IF  l_gsa_indicator = 'Y'
693        AND p_MODIFIERS_rec.arithmetic_operator <> 'NEWPRICE'
694 	  THEN
695 
696           l_return_status := FND_API.G_RET_STS_ERROR;
697 
698 	     FND_MESSAGE.SET_NAME('QP','QP_GSA_NEWPRICE_ONLY');
699           OE_MSG_PUB.Add;
700 
701        END IF;
702 
703 /*   Arithmetic Operator can be %, AMT or NEWPRICE  */
704 
705        IF  ( p_MODIFIERS_rec.arithmetic_operator IS NOT NULL AND
706                 p_MODIFIERS_rec.arithmetic_operator <> '%'  AND
707                 p_MODIFIERS_rec.arithmetic_operator <> 'AMT' AND
708                 p_MODIFIERS_rec.arithmetic_operator <> 'NEWPRICE' AND
709 		p_MODIFIERS_rec.arithmetic_operator <> 'BREAKUNIT_PRICE' AND
710 		p_MODIFIERS_rec.arithmetic_operator <> 'BLOCK_PRICE' AND
711                 p_MODIFIERS_rec.arithmetic_operator <> 'LUMPSUM' )
712        THEN
713 
714 oe_debug_pub.add('arith op invalid');
715           l_return_status := FND_API.G_RET_STS_ERROR;
716 
717           FND_MESSAGE.SET_NAME('QP','QP_DIS_PERCNT_AMT_OR_NEWPRICE');
718           OE_MSG_PUB.Add;
719 
720         END IF;
721 	END IF; -- list_line_type_code <> 'PMR'
722 
723 --dbms_output.put_line('4');
724 
725 /* Override Flag is mandatory for these Qualifier list lines */
726 
727 	IF  p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
728 
729      IF ( p_MODIFIERS_rec.list_line_type_code = 'DIS' OR
730           p_MODIFIERS_rec.list_line_type_code = 'SUR' OR
731           p_MODIFIERS_rec.list_line_type_code = 'OID' OR
732           p_MODIFIERS_rec.list_line_type_code = 'PRG' OR
733           p_MODIFIERS_rec.list_line_type_code = 'IUE' OR
734           p_MODIFIERS_rec.list_line_type_code = 'TSN' OR
735           p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE' OR
736           p_MODIFIERS_rec.list_line_type_code = 'PBH' ) AND
737 	     p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
738           p_MODIFIERS_rec.override_flag is NULL
739 
740      THEN
741 
742 
743 oe_debug_pub.add('list line type code invalid');
744         l_return_status := FND_API.G_RET_STS_ERROR;
745 
746 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
747         FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('OVERRIDE_FLAG')); -- Fix For Bug-1974413
748         OE_MSG_PUB.Add;
749 
750      END IF;
751 
752 /*   Override Flag can be Y or N   */
753 
754      IF  ( p_MODIFIERS_rec.override_flag IS NOT NULL AND
755            p_MODIFIERS_rec.override_flag <> 'Y' AND
756            p_MODIFIERS_rec.override_flag <> 'N' )
757      THEN
758 
759 oe_debug_pub.add('override flag invalid');
760           l_return_status := FND_API.G_RET_STS_ERROR;
761 
762           FND_MESSAGE.SET_NAME('QP','QP_OVERRIDE_FLAG_Y_OR_N');
763           OE_MSG_PUB.Add;
764 
765 	END IF;
766 
767 /* Override flag is mandatory for all Benefit lines   */
768 
769      IF   p_MODIFIERS_rec.list_line_type_code <> 'RLTD'
770      AND  p_MODIFIERS_rec.rltd_modifier_grp_type IS NOT NULL
771      AND  p_MODIFIERS_rec.override_flag IS NULL
772      THEN
773 
774           l_return_status := FND_API.G_RET_STS_ERROR;
775 
776 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
777           FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('OVERRIDE_FLAG'));  -- Fix For Bug-1974413
778           OE_MSG_PUB.Add;
779 
780      END IF;
781 
782 /*   Override Flag must be N for OID, PRG, CIE */
783 
784      IF ( p_MODIFIERS_rec.list_line_type_code = 'OID' OR
785         --  p_MODIFIERS_rec.list_line_type_code = 'PBH' OR -- changed by spgopal
786           p_MODIFIERS_rec.list_line_type_code = 'PRG' OR
787           p_MODIFIERS_rec.list_line_type_code = 'CIE' ) AND
788 	     p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
789           p_MODIFIERS_rec.override_flag <> 'N'
790 
791      THEN
792 
793           l_return_status := FND_API.G_RET_STS_ERROR;
794 
795             FND_MESSAGE.SET_NAME('QP','QP_OVERRIDE_FLAG_MUST_BE_N');
796             OE_MSG_PUB.Add;
797 
798 
799 	END IF;
800 
801 
802 /* PBH modifiers can be manual and overrideable
803    changes made by spgopal for bug 1407684	*/
804 
805 /* Print on invoice Flag is mandatory for these Qualifier list lines */
806 
807      IF ( p_MODIFIERS_rec.list_line_type_code = 'DIS' OR
808           p_MODIFIERS_rec.list_line_type_code = 'SUR' OR
809           p_MODIFIERS_rec.list_line_type_code = 'OID' OR
810           p_MODIFIERS_rec.list_line_type_code = 'PRG' OR
811           p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE' OR
812           p_MODIFIERS_rec.list_line_type_code = 'PBH' ) AND
813 	     p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
814           p_MODIFIERS_rec.print_on_invoice_flag is NULL
815 
816      THEN
817 
818 
819 oe_debug_pub.add('list line type code invalid');
820         l_return_status := FND_API.G_RET_STS_ERROR;
821 
822 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
823         FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRINT_ON_INVOICE_FLAG'));  -- Fix For Bug-1974413
824         OE_MSG_PUB.Add;
825 
826      END IF;
827 
828 /*   Prine on Invoice Flag can be Y or N   */
829 
830      IF  ( p_MODIFIERS_rec.print_on_invoice_flag IS NOT NULL AND
831            p_MODIFIERS_rec.print_on_invoice_flag <> 'Y' AND
832            p_MODIFIERS_rec.print_on_invoice_flag <> 'N' )
833      THEN
834 
835 oe_debug_pub.add('print flag invalid');
836           l_return_status := FND_API.G_RET_STS_ERROR;
837 
838           FND_MESSAGE.SET_NAME('QP','QP_PRNT_INV_FLAG_Y_OR_N');
839           OE_MSG_PUB.Add;
840 
841 	END IF;
842 
843 
844 	END IF; --If list_line_type_code <> 'PMR'
845 
846 --dbms_output.put_line('5');
847 
848 /*   End Date must be after the Start Date    */
849 
850       IF  nvl( p_MODIFIERS_rec.start_date_active,to_date('01/01/1951','mm/dd/yyyy')) >
851           nvl( p_MODIFIERS_rec.end_date_active,to_date('12/31/9999','mm/dd/yyyy'))
852       THEN
853 
854 oe_debug_pub.add('start date after end date');
855         l_return_status := FND_API.G_RET_STS_ERROR;
856 
857         FND_MESSAGE.SET_NAME('QP','QP_STRT_DATE_BFR_END_DATE');
858         OE_MSG_PUB.Add;
859 
860       END IF;
861 
862 --dbms_output.put_line('6');
863 
864 /*   Substitution Context, Attribute and Value is mandatory for list line type of Term Substitution  */
865 
866     IF  p_MODIFIERS_rec.list_line_type_code = 'TSN'
867     THEN
868 
869       IF  p_MODIFIERS_rec.substitution_context IS NULL
870       OR  p_MODIFIERS_rec.substitution_attribute IS NULL
871       OR  p_MODIFIERS_rec.substitution_value IS NULL
872       THEN
873 
874 oe_debug_pub.add('sub con, attr, value mand');
875         l_return_status := FND_API.G_RET_STS_ERROR;
876 
877 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
878         FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Terms Attr and Terms Value');
879         OE_MSG_PUB.Add;
880 
881       END IF;
882 
883 oe_debug_pub.add('before valida subs');
884  oe_debug_pub.add('context = '||p_MODIFIERS_rec.substitution_context);
885  oe_debug_pub.add('attr = '||p_MODIFIERS_rec.substitution_attribute);
886  oe_debug_pub.add('value = '||p_MODIFIERS_rec.substitution_value);
887 
888 /*   Validating the Substitution Context, Attribute and Value  */
889 
890        QP_UTIL.validate_qp_flexfield(flexfield_name     =>'QP_ATTR_DEFNS_QUALIFIER'
891 						 ,context         =>p_MODIFIERS_rec.substitution_context
892 						 ,attribute       =>p_MODIFIERS_rec.substitution_attribute
893 						 ,value           =>p_MODIFIERS_rec.substitution_value
894                                ,application_short_name         => 'QP'
895 						 ,context_flag                   =>l_context_flag
896 						 ,attribute_flag                 =>l_attribute_flag
897 						 ,value_flag                     =>l_value_flag
898 						 ,datatype                       =>l_datatype
899 						 ,precedence                      =>l_precedence
900 						 ,error_code                     =>l_error_code
901 						 );
902 
903 oe_debug_pub.add('error code = '||to_char(l_error_code));
904 
905        If (l_context_flag = 'N'  AND l_error_code = 7)       --  invalid context
906 	  Then
907 		  l_return_status := FND_API.G_RET_STS_ERROR;
908 
909             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
910             THEN
911 
912                FND_MESSAGE.SET_NAME('QP','QP_INVALID_SUBSTITUTION_CONT'  );
913                OE_MSG_PUB.Add;
914             END IF;
915 
916        End If;
917 
918        If (l_attribute_flag = 'N'  AND l_error_code = 8)       --  invalid attribute
919 	  Then
920 		  l_return_status := FND_API.G_RET_STS_ERROR;
921 
922             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
923             THEN
924 
925                FND_MESSAGE.SET_NAME('QP','QP_INVALID_SUBSTITUTION_ATTR'  );
926                OE_MSG_PUB.Add;
927             END IF;
928 
929        End If;
930 
931        If (l_value_flag = 'N'  AND l_error_code = 9)       --  invalid value
932 	  Then
933 		  l_return_status := FND_API.G_RET_STS_ERROR;
934 
935             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
936             THEN
937 
938                FND_MESSAGE.SET_NAME('QP','QP_INVALID_SUBSTITUTION_VALUE'  );
939                OE_MSG_PUB.Add;
940             END IF;
941 
942        End If;
943 
944     END IF; --list_line_type_code = 'TSN'
945 
946 --dbms_output.put_line('7');
947 
948 /*   Inventory Item Id, Organization Id, Related Item Id and Relationship Type are mandatory for list line typr of Item Upgrade */
949 
950 oe_debug_pub.add('inven item = '|| p_MODIFIERS_rec.inventory_item_id);
951 oe_debug_pub.add('org = '|| p_MODIFIERS_rec.organization_id);
952 oe_debug_pub.add('related item = '|| p_MODIFIERS_rec.related_item_id);
953 oe_debug_pub.add('relate = '|| p_MODIFIERS_rec.relationship_type_id);
954 
955     IF  p_MODIFIERS_rec.list_line_type_code = 'IUE'
956     THEN
957 
958       IF  p_MODIFIERS_rec.inventory_item_id IS NULL
959       OR  p_MODIFIERS_rec.organization_id IS NULL
960       OR  p_MODIFIERS_rec.related_item_id IS NULL
961       OR  p_MODIFIERS_rec.relationship_type_id IS NULL
962       THEN
963 
964 oe_debug_pub.add('itm , org, related item and rrelationship type manda');
965         l_return_status := FND_API.G_RET_STS_ERROR;
966 
967 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
968         FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Prod Attr Value and Upgrade Item');
969         OE_MSG_PUB.Add;
970 
971       ELSE
972 
973 	   BEGIN
974 
975 /*   Validating Inventory Item Id, Organization Id, Related Item Id and Relationship Type */
976 
977 	   select 'X'
978 	   into   l_dummy_3
979 	   from   mtl_related_items_all_v
980         where  inventory_item_id = p_MODIFIERS_rec.inventory_item_id
981         and    organization_id = p_MODIFIERS_rec.organization_id
982         and    related_item_id = p_MODIFIERS_rec.related_item_id
983         and    relationship_type_id = 14;
984 
985         EXCEPTION
986 	   WHEN NO_DATA_FOUND THEN
987 oe_debug_pub.add('item upgrade data is invalid');
988 
989         l_return_status := FND_API.G_RET_STS_ERROR;
990 
991         FND_MESSAGE.SET_NAME('QP','QP_INVALID_ITEM_UPGRD');
992         OE_MSG_PUB.Add;
993 
994         END;
995 
996       END IF;
997 
998     END IF; --list_line_type_code = 'IUE'
999 
1000 oe_debug_pub.add('55');
1001 --dbms_output.put_line('55');
1002 
1003 --dbms_output.put_line('8');
1004 
1005 /*  THE CODE BELOW CHANGED BY SPGOPAL === 05/15/00  FOR REASONS AS MENTIONED  */
1006 
1007 /*   Formula is applicable only at line level for list line type of Discount, Surcharge and Freight Charge*/
1008 /*Formula is applicable for order level freight charge, fix for bug 1527285*/
1009 
1010     IF  p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
1011       IF  p_MODIFIERS_rec.price_by_formula_id IS NOT NULL
1012 	 THEN
1013         IF p_MODIFIERS_rec.modifier_level_code IN ('ORDER', 'LINE')
1014 	   AND p_MODIFIERS_rec.list_line_type_code NOT IN ('DIS', 'SUR', 'FREIGHT_CHARGE') THEN
1015 
1016 	   --dbms_output.put_line('formula id is applicable with DIS,SUR ');
1017         l_return_status := FND_API.G_RET_STS_ERROR;
1018 
1019 	   FND_MESSAGE.SET_NAME('QP','QP_DIS_SUR_OR_FRT_FOR_FORMULA');
1020         OE_MSG_PUB.Add;
1021 
1022         END IF;
1023 
1024   /* The Get Condition of OID and PRG cannot have formula attached to it  */
1025 
1026         IF   ((l_primary_list_line_type_code = 'OID'
1027         OR   l_primary_list_line_type_code = 'PRG')
1028         AND  p_MODIFIERS_rec.rltd_modifier_grp_type = 'BENEFIT')
1029         THEN
1030 
1031            l_return_status := FND_API.G_RET_STS_ERROR;
1032 
1033            FND_MESSAGE.SET_NAME('QP','QP_FORMULA_NOT_IN_GET');
1034            OE_MSG_PUB.Add;
1035 
1036        END IF;
1037 
1038 /*  THE CODE BELOW CHANGED BY SPGOPAL === 05/15/00  FOR REASONS AS MENTIONED  */
1039 
1040 
1041 /*   The Arithmetic Operators applicable when a Formula is given are % and AMT and new price. New price was added to fix bug 1530483
1042 There is a problem with Freight Charge set up. Freight Charge modifier type requires arithmetic operator LUMPSUM in addition to % and AMT
1043 */
1044 
1045         IF  p_MODIFIERS_rec.arithmetic_operator <> '%'
1046         AND p_MODIFIERS_rec.arithmetic_operator <> 'AMT'
1047         AND p_MODIFIERS_rec.arithmetic_operator <> 'LUMPSUM'
1048 	   AND p_MODIFIERS_rec.arithmetic_operator <> 'NEWPRICE'
1049         THEN
1050 
1051 	   --dbms_output.put_line('arith op can be % or AMT with formula');
1052 oe_debug_pub.add('arith oper % or AMT invalid');
1053           l_return_status := FND_API.G_RET_STS_ERROR;
1054 
1055 	     FND_MESSAGE.SET_NAME('QP','QP_DIS_PERCNT_OR_AMT');
1056           OE_MSG_PUB.Add;
1057 
1058         END IF;
1059 
1060 --dbms_output.put_line('9');
1061 
1062 	   BEGIN
1063 
1064 /*   Validating the Formula   */
1065 
1066 	   select 'X'
1067 	   into   l_dummy_1
1068 	   from   qp_price_formulas_b
1069 	   where  price_formula_id = p_MODIFIERS_rec.price_by_formula_id;
1070 -- mkarya for bug 1906545, formula and operand are no more mutually exclusive
1071 -- also formula having a line with line type 'LP' is also allowed
1072 /*
1073 	   and    not exists ( select price_formula_line_type_code
1074 					   from   qp_price_formula_lines
1075 					   where  price_formula_id = p_MODIFIERS_rec.price_by_formula_id
1076 					   and    price_formula_line_type_code = 'LP' );
1077 */
1078         EXCEPTION
1079 	   WHEN NO_DATA_FOUND THEN
1080 	   --dbms_output.put_line('invalid formula id');
1081 oe_debug_pub.add('formula id is invalid');
1082 
1083         l_return_status := FND_API.G_RET_STS_ERROR;
1084 
1085         FND_MESSAGE.SET_NAME('QP','QP_FORMULA_NOT_FOUND');
1086         OE_MSG_PUB.Add;
1087 
1088         END;
1089       END IF; --price_by_formula_id IS NOT NULL
1090 
1091 /*   Operand is not allowed when a Formula is given     */
1092 -- mkarya for bug 1906545, formula and operand are no more mutually exclusive
1093 /*
1094       IF  p_MODIFIERS_rec.price_by_formula_id IS NOT NULL
1095       AND  p_MODIFIERS_rec.operand IS NOT NULL
1096 	 THEN
1097 
1098 	   --dbms_output.put_line('no operand if formula is given = '|| to_char(p_MODIFIERS_rec.operand));
1099           l_return_status := FND_API.G_RET_STS_ERROR;
1100 
1101           FND_MESSAGE.SET_NAME('QP','QP_OPERAND_OR_FORMULA');
1102           OE_MSG_PUB.Add;
1103       END IF;
1104 */
1105 
1106 oe_debug_pub.add('77');
1107     END IF; --If list_line_type_code <> 'PMR'
1108 
1109 /*   Price Break Type Code is mandatory for list line type of Price Break Header */
1110 
1111     IF  p_MODIFIERS_rec.list_line_type_code = 'PBH'
1112     THEN
1113 
1114       IF  p_MODIFIERS_rec.price_break_type_code IS NULL
1115       THEN
1116 
1117 oe_debug_pub.add('price brek type is manda');
1118         l_return_status := FND_API.G_RET_STS_ERROR;
1119 
1120 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1121         FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRICE_BREAK_TYPE_CODE'));  --Fix For Bug-1974413
1122         OE_MSG_PUB.Add;
1123 
1124       END IF;
1125 
1126     END IF; --list_line_type_code = 'PBH'
1127 --dbms_output.put_line('10');
1128 
1129 /*   Valid values of Price Break Type Code are Point,Range and RECURRING     */
1130 
1131     IF p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
1132       IF  p_MODIFIERS_rec.price_break_type_code IS NOT NULL
1133       AND p_MODIFIERS_rec.price_break_type_code <> 'POINT'
1134       AND p_MODIFIERS_rec.price_break_type_code <> 'RANGE'
1135       AND p_MODIFIERS_rec.price_break_type_code <> 'RECURRING'
1136       THEN
1137 
1138 oe_debug_pub.add('price brek type can be point or range');
1139         l_return_status := FND_API.G_RET_STS_ERROR;
1140 
1141 	   FND_MESSAGE.SET_NAME('QP','QP_PRCBRK_POINT_OR_RANGE');
1142         OE_MSG_PUB.Add;
1143 
1144       END IF;
1145 
1146 
1147 /* Recurring allowed only for these Qualifier list line types  */
1148 
1149       IF  p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL THEN
1150         IF ( p_MODIFIERS_rec.list_line_type_code <> 'DIS' AND
1151           p_MODIFIERS_rec.list_line_type_code <> 'SUR' AND
1152           p_MODIFIERS_rec.list_line_type_code <> 'PRG' AND
1153           p_MODIFIERS_rec.list_line_type_code <> 'CIE') AND
1154           p_MODIFIERS_rec.price_break_type_code = 'RECURRING'
1155 
1156         THEN
1157 
1158           l_return_status := FND_API.G_RET_STS_ERROR;
1159 
1160           FND_MESSAGE.SET_NAME('QP','QP_RECURRING_NOT_ALLOWED');
1161           OE_MSG_PUB.Add;
1162 
1163         END IF;
1164       END IF;
1165 
1166 /* Lumpsum is mandatory for DIS and SUR Qualifier list lines if they are recurring */
1167 
1168       IF ( p_MODIFIERS_rec.list_line_type_code = 'DIS' OR
1169            p_MODIFIERS_rec.list_line_type_code = 'SUR') AND
1170            p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
1171            p_MODIFIERS_rec.price_break_type_code = 'RECURRING' AND
1172            p_MODIFIERS_rec.arithmetic_operator <> 'LUMPSUM'
1173 
1174       THEN
1175 
1176         l_return_status := FND_API.G_RET_STS_ERROR;
1177 
1178         FND_MESSAGE.SET_NAME('QP','QP_LUMPSUM_RECUR_DIS_SUR');
1179         OE_MSG_PUB.Add;
1180 
1181       END IF;
1182 
1183 /* The only price break types allowed for a Qualifier list line are Point and Recurring */
1184 
1185       IF   p_MODIFIERS_rec.price_break_type_code IS NOT NULL
1186 	 THEN
1187         IF p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
1188            p_MODIFIERS_rec.list_line_type_code <> 'PBH' AND
1189            p_MODIFIERS_rec.price_break_type_code <> 'POINT' AND
1190            p_MODIFIERS_rec.price_break_type_code <> 'RECURRING'
1191 
1192         THEN
1193 
1194           l_return_status := FND_API.G_RET_STS_ERROR;
1195 
1196           FND_MESSAGE.SET_NAME('QP','QP_BREAK_TYPE_POINT_OR_RECUR');
1197           OE_MSG_PUB.Add;
1198 
1199         END IF;
1200       END IF;
1201 
1202 /* The only price break types allowed for Price Break child lines are Point and Range */
1203 
1204       IF   p_MODIFIERS_rec.price_break_type_code IS NOT NULL
1205 	 THEN
1206         IF l_primary_list_line_type_code = 'PBH'AND
1207            p_MODIFIERS_rec.price_break_type_code <> 'POINT' AND
1208            p_MODIFIERS_rec.price_break_type_code <> 'RANGE'
1209 
1210         THEN
1211 
1212           l_return_status := FND_API.G_RET_STS_ERROR;
1213 
1214           FND_MESSAGE.SET_NAME('QP','QP_BREAK_TYPE_POINT_OR_RANGE');
1215           OE_MSG_PUB.Add;
1216 
1217         END IF;
1218       END IF;
1219 
1220 /* Recurring not allowed on Benefit list line  Except Coupons (Bug - 2037842)  */
1221 
1222       IF p_MODIFIERS_rec.list_line_type_code <> 'RLTD' AND
1223          (p_MODIFIERS_rec.rltd_modifier_grp_type IS NOT NULL AND
1224         p_MODIFIERS_rec.rltd_modifier_grp_type <> 'COUPON') -- Bug 2037842
1225          AND
1226          p_MODIFIERS_rec.price_break_type_code = 'RECURRING'
1227 
1228       THEN
1229 
1230           l_return_status := FND_API.G_RET_STS_ERROR;
1231 
1232           FND_MESSAGE.SET_NAME('QP','QP_RECURRING_NOT_ALLOWED');
1233           OE_MSG_PUB.Add;
1234 
1235       END IF;
1236     END IF; --list_line_type_code <> 'PMR'
1237 
1238 --dbms_output.put_line('11');
1239 oe_debug_pub.add('88');
1240 
1241 /*   Product Precedence is mandatory for the  Primary discount lines of type Other Item Discount, Price Break Header and Item Upgrade */
1242 
1243     IF    p_MODIFIERS_rec.list_line_type_code <> 'PMR'
1244     AND   p_MODIFIERS_rec.list_line_type_code <> 'RLTD'
1245     THEN
1246       IF   p_MODIFIERS_rec.list_line_type_code = 'OID'
1247       OR   p_MODIFIERS_rec.list_line_type_code = 'PBH'
1248       OR   p_MODIFIERS_rec.list_line_type_code = 'IUE'
1249       THEN
1250 
1251         IF   p_MODIFIERS_rec.product_precedence IS NULL
1252         THEN
1253 
1254 oe_debug_pub.add('prece 11 ');
1255 	   --dbms_output.put_line('product precedence is mandatory for primary');
1256           l_return_status := FND_API.G_RET_STS_ERROR;
1257 
1258 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1259           FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRODUCT_PRECEDENCE'));  -- Fix For Bug-1974413
1260           OE_MSG_PUB.Add;
1261 
1262         END IF;
1263 
1264       END IF;
1265 
1266     END IF;
1267 
1268 oe_debug_pub.add('99');
1269 
1270 /* Benefit Price List is mandatory for the benefit DIS line of PRG    */
1271 oe_debug_pub.add('benefit = '||to_char( p_MODIFIERS_rec.benefit_price_list_line_id));
1272 
1273     IF   p_MODIFIERS_rec.list_line_type_code = 'DIS'
1274     AND  l_primary_list_line_type_code = 'PRG'
1275     AND  p_MODIFIERS_rec.benefit_price_list_line_id IS NULL
1276     THEN
1277 
1278           l_return_status := FND_API.G_RET_STS_ERROR;
1279 
1280 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1281           FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Get Price');
1282           OE_MSG_PUB.Add;
1283 
1284     END IF;
1285 
1286 /* JULIN (2738479): PRG benefit price list lines cannot be based on lines whose arithmetic_operator is BLOCK_PRICE or PERCENT_PRICE. */
1287 /* jhkuo (2853657,2862465): PRG benefit price list lines now cannot be based on any service items
1288    or any price break headers (and child lines).
1289 */
1290 
1291 oe_debug_pub.add('benefit = '||to_char( p_MODIFIERS_rec.benefit_price_list_line_id));
1292 
1293     IF   l_primary_list_line_type_code = 'PRG'
1294     AND  p_MODIFIERS_rec.benefit_price_list_line_id IS NOT NULL
1295     THEN
1296 
1297       select arithmetic_operator, list_line_type_code, qualification_ind
1298       into   l_arithmetic_operator, l_list_line_type_code, l_qualification_ind
1299       from   qp_list_lines
1300       where  list_line_id = p_MODIFIERS_rec.benefit_price_list_line_id;
1301 
1302       IF l_arithmetic_operator = 'PERCENT_PRICE' OR
1303          l_list_line_type_code = 'PBH' OR
1304          (l_list_line_type_code <> 'PBH' AND l_qualification_ind NOT IN (2,4,6,8,10,12,14,20,22,28,30))
1305       THEN
1306         l_return_status := FND_API.G_RET_STS_ERROR;
1307         FND_MESSAGE.SET_NAME('QP','QP_INVALID_GET_PRICE_LIST_LINE');
1308         OE_MSG_PUB.Add;
1309       END IF;
1310 
1311 
1312     END IF;
1313 
1314 --dbms_output.put_line('12');
1315 
1316 /*   If a Price Break Header,Coupon Issue and Discount is accrued, it is mandatory to give Expiration Date or both Number of Expiration Periods and Expiration Period UOM  */
1317 
1318     IF   p_MODIFIERS_rec.list_line_type_code = 'CIE'
1319     OR  (p_MODIFIERS_rec.list_line_type_code = 'DIS'
1320     AND  p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL )
1321     THEN
1322 
1323  	 IF   p_MODIFIERS_rec.accrual_flag = 'Y'
1324 	 THEN
1325 
1326 
1327         IF   p_MODIFIERS_rec.expiration_date IS NOT NULL
1328 	   THEN
1329 
1330          IF   p_MODIFIERS_rec.number_expiration_periods IS NOT NULL
1331          OR   p_MODIFIERS_rec.expiration_period_uom IS NOT NULL
1332 	    THEN
1333 
1334 	   --dbms_output.put_line('either exp date or other 2 values');
1335           l_return_status := FND_API.G_RET_STS_ERROR;
1336 
1337 	     FND_MESSAGE.SET_NAME('QP','QP_EXP_DATE_OR_EXP_PERIODS');
1338           OE_MSG_PUB.Add;
1339 
1340          END IF;
1341         END IF;
1342 
1343 /*   Number Expiratiob Periods and Expiration Peirod UOM must both be entered */
1344 
1345         IF   ((p_MODIFIERS_rec.number_expiration_periods IS NOT NULL
1346         AND   p_MODIFIERS_rec.expiration_period_uom IS NULL )
1347 	   OR
1348              ( p_MODIFIERS_rec.number_expiration_periods IS NULL
1349         AND   p_MODIFIERS_rec.expiration_period_uom IS NOT NULL ))
1350 	   THEN
1351 
1352 	   --dbms_output.put_line('all these 3 values are mandatory');
1353           l_return_status := FND_API.G_RET_STS_ERROR;
1354 
1355 	     FND_MESSAGE.SET_NAME('QP','QP_EXP_UOM_NUM_STRTDT_MAND');
1356           OE_MSG_PUB.Add;
1357 
1358         END IF;
1359 
1360         IF p_MODIFIERS_rec.expiration_period_uom IS NOT NULL
1361 	   THEN
1362 
1363 	    BEGIN
1364 
1365 /*   Validating Expiration Period UOM */
1366 
1367       	   select uom_code
1368 	        into   l_uom_code
1369 	        from   mtl_units_of_measure
1370 	        where  uom_class = 'Time'
1371 	        and    uom_code  = p_MODIFIERS_rec.expiration_period_uom;
1372 
1373          EXCEPTION
1374 	     WHEN NO_DATA_FOUND THEN
1375 	   --dbms_output.put_line('invalid exp uom');
1376           l_return_status := FND_API.G_RET_STS_ERROR;
1377 
1378           FND_MESSAGE.SET_NAME('QP','QP_INVALID_PERIOD_UOM');
1379           OE_MSG_PUB.Add;
1380 
1381          END;
1382 
1383         END IF;
1384       END IF; --Accrual_flag = 'Y'
1385    END IF;
1386 
1387 --dbms_output.put_line('13');
1388 
1389 /*   Estimated GL value is applicable only for Coupons, Item Upgrade, Terms Substitution and Other Item Discount */
1390      IF p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
1391        IF   p_MODIFIERS_rec.list_line_type_code <> 'CIE'
1392        AND   p_MODIFIERS_rec.list_line_type_code <> 'IUE'
1393        AND   p_MODIFIERS_rec.list_line_type_code <> 'TSN'
1394        AND   p_MODIFIERS_rec.list_line_type_code <> 'OID'   --Added for the bug 2589815
1395        AND  p_MODIFIERS_rec.estim_gl_value IS NOT NULL
1396 
1397        THEN
1398 
1399 	   --dbms_output.put_line('estim gl value only for coupons');
1400           l_return_status := FND_API.G_RET_STS_ERROR;
1401 
1402 	     FND_MESSAGE.SET_NAME('QP','QP_GL_VAL_FOR_CIE_IUE_TSN');
1403           OE_MSG_PUB.Add;
1404 
1405        END IF;
1406      END IF; -- list_line_type_code <> 'PMR'
1407 
1408 
1409 /*   For Accruals, it is mandatory to give Estimated Accrual Rate  */
1410 
1411       IF    p_MODIFIERS_rec.accrual_flag = 'Y'
1412       AND   p_MODIFIERS_rec.estim_accrual_rate IS NULL
1413 
1414       THEN
1415 
1416 	   --dbms_output.put_line('estim accrual rate is mand for coupons or accrual');
1417           l_return_status := FND_API.G_RET_STS_ERROR;
1418 
1419 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1420           FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('ESTIM_ACCRUAL_RATE'));  -- Fix For Bug-1974413
1421           OE_MSG_PUB.Add;
1422 
1423       END IF;
1424 
1425 /*   Charge Type and Charge Subtype are mandatory for list line type of Freight Charge */
1426 
1427       IF    p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE'
1428 	 THEN
1429 
1430         IF    p_MODIFIERS_rec.charge_type_code IS NULL
1431 	   THEN
1432 
1433 	   --dbms_output.put_line('charge tyep and subtype mand for freight charge');
1434           l_return_status := FND_API.G_RET_STS_ERROR;
1435 
1436 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1437           FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Charge Name');
1438           OE_MSG_PUB.Add;
1439 
1440         END IF;
1441 
1442 	    BEGIN
1443 
1444 /*    Validating Charge Type and Charge Subtype
1445       Added the validation for freight and spl. charges Bug#4562869   */
1446         IF (l_profile_pte_code = 'PO' and l_profile_source_system_code = 'PO') THEN
1447 
1448                         SELECT'X'
1449                         INTO l_charge_type_subtype
1450                         FROM pon_cost_factors_vl
1451                         WHERE  price_element_type_id > 0
1452                         AND nvl(enabled_flag,'Y') <> 'N'
1453                         AND to_char(price_element_type_id) =  p_MODIFIERS_rec.charge_type_code;
1454 
1455         else
1456       	    select 'X'
1457 	        into   l_charge_type_subtype
1458 	        from   fnd_lookup_values lkp1, qp_lookups lkp2
1459 	        where  lkp1.lookup_code = lkp2.lookup_type(+)
1460 		   and    lkp1.enabled_flag = 'Y'
1461 		   and    TRUNC(sysdate)
1462 		   between TRUNC(nvl(lkp1.start_date_active, sysdate))
1463 		   and     TRUNC(nvl(lkp1.end_date_active, sysdate))
1464 		   and    (lkp2.enabled_flag = 'Y' or lkp2.enabled_flag IS NULL)
1465 		   and     TRUNC(sysdate)
1466 		   between TRUNC(nvl(lkp2.start_date_active, sysdate))
1467 		   and     TRUNC(nvl(lkp2.end_date_active, sysdate))
1468 		   and     lkp1.lookup_code = p_MODIFIERS_rec.charge_type_code
1469 		   and     NVL(decode(lkp1.lookup_type,'FREIGHT_COST_TYPE',NULL,
1470 		           lkp2.lookup_code),'o')
1471 				 = NVL(p_MODIFIERS_rec.charge_subtype_code,'o')
1472 	                             and     lkp1.language = userenv('LANG')
1473 		   and     lkp1.security_group_id = 0
1474 		   and     ((lkp1.view_application_id = 661 and lkp1.lookup_type = 'FREIGHT_CHARGES_TYPE')
1475 				or (lkp1.view_application_id = 665 and lkp1.lookup_type = 'FREIGHT_COST_TYPE'));
1476         end if;
1477 
1478          EXCEPTION
1479 	     WHEN NO_DATA_FOUND THEN
1480 	   --dbms_output.put_line('invalid charge and subcharge type');
1481           l_return_status := FND_API.G_RET_STS_ERROR;
1482 
1483           FND_MESSAGE.SET_NAME('QP','QP_INVALID_CHARGE_TYPE_SUBTYPE');
1484           OE_MSG_PUB.Add;
1485 
1486          END;
1487 
1488       END IF;
1489 
1490 /*    For Primary list line types of Price Break Header and Discount, if it is an Accrual and Benefit UOM is given, Accrual Conversion Rate is mandatory  */
1491 
1492 	IF  (p_MODIFIERS_rec.list_line_type_code = 'PBH')
1493 	OR  (p_MODIFIERS_rec.list_line_type_code = 'DIS'
1494 	AND  p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL)
1495 	THEN
1496       IF    p_MODIFIERS_rec.benefit_uom_code IS NOT NULL
1497       AND   p_MODIFIERS_rec.accrual_flag = 'Y'
1498 	 THEN
1499 
1500         IF   p_MODIFIERS_rec.accrual_conversion_rate IS NULL
1501 
1502         THEN
1503 
1504 	   --dbms_output.put_line('accru conv rate mand');
1505           l_return_status := FND_API.G_RET_STS_ERROR;
1506 
1507 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1508           FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('ACCRUAL_CONVERSION_RATE'));  -- Fix For Bug-1974413
1509           OE_MSG_PUB.Add;
1510 
1511         END IF;
1512 
1513       END IF;
1514 
1515      END IF;
1516 
1517 oe_debug_pub.add('here9');
1518 /* If Discount is a Primary line with accrual, then if benefit quantity is entered, benefit UOM must be enetered and vice-versa */
1519 
1520        IF   ((p_MODIFIERS_rec.list_line_type_code = 'DIS'
1521        OR   p_MODIFIERS_rec.list_line_type_code = 'CIE' )
1522 	  AND  p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL
1523 	  AND  p_MODIFIERS_rec.accrual_flag = 'Y')
1524 	  THEN
1525 
1526          IF   (p_MODIFIERS_rec.benefit_uom_code IS NOT NULL
1527          AND  p_MODIFIERS_rec.benefit_qty IS NULL )
1528          OR   (p_MODIFIERS_rec.benefit_uom_code IS NULL
1529          AND  p_MODIFIERS_rec.benefit_qty IS NOT NULL )
1530          THEN
1531 
1532           l_return_status := FND_API.G_RET_STS_ERROR;
1533 
1534 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1535           --FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('BENEFIT_QTY')||'/'||
1536           --                            QP_PRC_UTIL.Get_Attribute_Name('BENEFIT_UOM_CODE')); -- Fix For Bug-1974413
1537           FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Quantity/UOM'); --Bug No 6010792
1538           OE_MSG_PUB.Add;
1539 
1540          END IF;
1541 
1542        END IF;
1543 
1544 /* Benefit qty is mandatory for the benefit DIS line of PRG    */
1545 
1546        IF   p_MODIFIERS_rec.list_line_type_code = 'DIS'
1547 	  AND  l_primary_list_line_type_code = 'PRG'
1548        AND  (p_MODIFIERS_rec.benefit_qty IS NULL
1549        OR    p_MODIFIERS_rec.benefit_uom_code IS NULL )
1550        THEN
1551 
1552           l_return_status := FND_API.G_RET_STS_ERROR;
1553 
1554 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1555           --FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('BENEFIT_QTY')||'/'||
1556            --                          QP_PRC_UTIL.Get_Attribute_Name('BENEFIT_UOM_CODE'));  -- Fix For Bug-1974413
1557            FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Quantity/UOM'); --Bug No 6010792
1558           OE_MSG_PUB.Add;
1559 
1560        END IF;
1561 
1562 /* Benefit qty is mandatory if benefit uom is entered, for the benefit DIS line of PBH    */
1563 
1564        IF   ((p_MODIFIERS_rec.list_line_type_code = 'DIS'
1565        OR   p_MODIFIERS_rec.list_line_type_code = 'SUR')
1566 	  AND  p_MODIFIERS_rec.accrual_flag = 'Y'
1567 	  AND  l_primary_list_line_type_code = 'PBH')
1568 	  THEN
1569 
1570          IF   (p_MODIFIERS_rec.benefit_uom_code IS NOT NULL
1571          AND  p_MODIFIERS_rec.benefit_qty IS NULL )
1572          OR   (p_MODIFIERS_rec.benefit_uom_code IS NULL
1573          AND  p_MODIFIERS_rec.benefit_qty IS NOT NULL )
1574          THEN
1575 
1576           l_return_status := FND_API.G_RET_STS_ERROR;
1577 
1578 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1579           --FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('BENEFIT_QTY')||'/'||
1580           --                                QP_PRC_UTIL.Get_Attribute_Name('BENEFIT_UOM_CODE')); -- Fix For Bug-1974413
1581           FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Quantity/UOM'); --Bug No 6010792
1582           OE_MSG_PUB.Add;
1583 
1584          END IF;
1585 
1586       END IF;
1587 
1588       IF p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
1589         IF  p_MODIFIERS_rec.benefit_uom_code IS NOT NULL
1590         THEN
1591 
1592           IF  p_MODIFIERS_rec.accrual_flag = 'Y'
1593           THEN
1594 
1595 	      BEGIN
1596 
1597  /*   Validating the Benefit UOM Code   */
1598 
1599     	      FND_PROFILE.GET('QP_ACCRUAL_UOM_CLASS',l_qp_accrual_uom_class);
1600 
1601 	       select uom_code
1602 	       into   l_dummy_4
1603 	       from   mtl_units_of_measure
1604 	       where  uom_code =  p_MODIFIERS_rec.benefit_uom_code
1605 		  and    uom_class = l_qp_accrual_uom_class;
1606 
1607            EXCEPTION
1608 	       WHEN NO_DATA_FOUND THEN
1609 	     --dbms_output.put_line('invalid bene uom');
1610             l_return_status := FND_API.G_RET_STS_ERROR;
1611 
1612             FND_MESSAGE.SET_NAME('QP','QP_INVALID_BENEFIT_UOM');
1613             OE_MSG_PUB.Add;
1614 
1615           END;
1616 
1617          ELSE
1618 
1619 	      BEGIN
1620 
1621 /*    Validating the Benefit UOM Code  */
1622 
1623 	       select count(*)
1624 	       into   l_dummy_5
1625 	       from   mtl_units_of_measure
1626 	       where  uom_code =  p_MODIFIERS_rec.benefit_uom_code;
1627 
1628            EXCEPTION
1629 	       WHEN NO_DATA_FOUND THEN
1630 	     --dbms_output.put_line('invalid bene uom');
1631             l_return_status := FND_API.G_RET_STS_ERROR;
1632 
1633             FND_MESSAGE.SET_NAME('QP','QP_INVALID_BENEFIT_UOM');
1634             OE_MSG_PUB.Add;
1635 
1636           END;
1637 
1638         END IF;
1639        END IF;
1640      END IF; --list_line_type_code <> 'PMR'
1641 
1642 /* Phase is mandatory for these Primary Modifier types */
1643 
1644 oe_debug_pub.add('here95');
1645      IF ( p_MODIFIERS_rec.list_line_type_code = 'OID' OR
1646           p_MODIFIERS_rec.list_line_type_code = 'SUR' OR
1647           p_MODIFIERS_rec.list_line_type_code = 'PRG' OR
1648           p_MODIFIERS_rec.list_line_type_code = 'DIS' OR
1649           p_MODIFIERS_rec.list_line_type_code = 'TSN' OR
1650           p_MODIFIERS_rec.list_line_type_code = 'CIE' OR
1651           p_MODIFIERS_rec.list_line_type_code = 'PBH' OR
1652           p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE' OR
1653           p_MODIFIERS_rec.list_line_type_code = 'IUE' ) AND
1654           p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
1655           p_MODIFIERS_rec.pricing_phase_id IS NULL
1656 		THEN
1657 
1658 	   --dbms_output.put_line('phase is mand');
1659           l_return_status := FND_API.G_RET_STS_ERROR;
1660 
1661 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1662           FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Phase');
1663           OE_MSG_PUB.Add;
1664 
1665       END IF;
1666 
1667 /* Phase is mandatory for all benefit list lines, except for RLTD  */
1668 
1669       IF    p_MODIFIERS_rec.list_line_type_code <> 'PMR' THEN
1670         IF    p_MODIFIERS_rec.list_line_type_code <> 'RLTD'
1671         AND   p_MODIFIERS_rec.rltd_modifier_grp_type IS NOT NULL
1672 	   AND   p_MODIFIERS_rec.pricing_phase_id IS NULL
1673         THEN
1674 
1675 	     --dbms_output.put_line('phase is mand');
1676           l_return_status := FND_API.G_RET_STS_ERROR;
1677 
1678 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1679           FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Phase');
1680           OE_MSG_PUB.Add;
1681 
1682         END IF;
1683 
1684 /* Validate the Phase from qp_pricing_phases table  */
1685 
1686      IF  p_MODIFIERS_rec.pricing_phase_id IS NOT NULL
1687      THEN
1688 	     BEGIN
1689 	  	  SELECT phase_sequence, nvl(modifier_level_code,'*')
1690 		  INTO   l_phase_sequence, l_modifier_level_code
1691 		  FROM   QP_PRICING_PHASES
1692 		  WHERE  nvl(LIST_TYPE_CODE,l_list_type_code) = l_list_type_code
1693 		  AND    nvl(LIST_LINE_TYPE_CODE,p_MODIFIERS_rec.list_line_type_code) =
1694 		         p_MODIFIERS_rec.list_line_type_code
1695 		  AND    nvl(MODIFIER_LEVEL_CODE,p_MODIFIERS_rec.modifier_level_code) =
1696 		         p_MODIFIERS_rec.modifier_level_code
1697 		  AND	((p_MODIFIERS_rec.LIST_LINE_TYPE_CODE = 'OID' and nvl(MODIFIER_LEVEL_CODE, '*') <> 'LINE')
1698 			 or p_MODIFIERS_rec.LIST_LINE_TYPE_CODE <> 'OID')
1699 		  AND    PRICING_PHASE_ID = p_MODIFIERS_rec.pricing_phase_id;
1700 
1701           EXCEPTION
1702 	       WHEN NO_DATA_FOUND THEN
1703             l_return_status := FND_API.G_RET_STS_ERROR;
1704 
1705             FND_MESSAGE.SET_NAME('QP','QP_INVALID_PHASE');
1706             OE_MSG_PUB.Add;
1707 
1708           END;
1709 
1710 /* Additional buy products are not allowed for a PRG, with line phase*/
1711 
1712 	  IF p_MODIFIERS_rec.LIST_LINE_TYPE_CODE = 'RLTD' AND
1713 	     p_MODIFIERS_rec.RLTD_MODIFIER_GRP_TYPE = 'QUALIFIER' AND
1714 	     l_modifier_level_code = 'LINE' THEN
1715 	 /*    BEGIN
1716 	  	  SELECT phase_sequence
1717 		  INTO   l_phase_sequence
1718 		  FROM   QP_PRICING_PHASES
1719 		  WHERE  PRICING_PHASE_ID = p_MODIFIERS_rec.pricing_phase_id
1720 		  AND	 nvl(MODIFIER_LEVEL_CODE, '*') <> 'LINE';
1721              EXCEPTION
1722 	       WHEN NO_DATA_FOUND THEN */
1723                   l_return_status := FND_API.G_RET_STS_ERROR;
1724                   FND_MESSAGE.SET_NAME('QP','QP_INVALID_PHASE_RLTD');
1725                   OE_MSG_PUB.Add;
1726 	  --   END;
1727 	  END IF;
1728 
1729 /* If Additional buy products exists for a PRG,the phase cannot be changed to line phase*/
1730 
1731 	 IF p_MODIFIERS_rec.LIST_LINE_TYPE_CODE = 'PRG' AND
1732 	    l_modifier_level_code = 'LINE' THEN
1733 		BEGIN
1734 		  select  'Y'
1735 		  into    l_rltd_exist
1736 		  from    qp_rltd_modifiers
1737 		  where   from_rltd_modifier_id = p_MODIFIERS_rec.list_line_id
1738 		  and     rltd_modifier_grp_type = 'QUALIFIER'
1739 		  and     rownum = 1;
1740 		EXCEPTION
1741 		 WHEN NO_DATA_FOUND THEN
1742 			l_rltd_exist := 'N';
1743 		END;
1744 		IF l_rltd_exist = 'Y' THEN
1745                   l_return_status := FND_API.G_RET_STS_ERROR;
1746                   FND_MESSAGE.SET_NAME('QP','QP_INVALID_PHASE_RLTD');
1747                   OE_MSG_PUB.Add;
1748 		END IF;
1749 	 END IF;
1750 
1751 /* Phase with event PRICING should not be attached to modifier types PRG/IUE/OID/TSN/CIE -- Bug#2724502 */
1752 
1753           IF (p_MODIFIERS_rec.list_line_type_code IN ('PRG','IUE','OID','CIE','TSN')) THEN
1754            begin
1755              select 'Y' into l_phase_price_evt
1756               from qp_event_phases
1757              where pricing_event_code = 'PRICE'
1758                and pricing_phase_id = p_MODIFIERS_rec.PRICING_PHASE_ID;
1759            exception
1760              WHEN no_data_found THEN
1761                   NULL;
1762            end;
1763 
1764            IF l_phase_price_evt = 'Y' THEN
1765               l_return_status := FND_API.G_RET_STS_ERROR;
1766 
1767               FND_MESSAGE.SET_NAME('QP','QP_PHASE_PRICE_EVT_ERROR');
1768               OE_MSG_PUB.Add;
1769 
1770            END IF;
1771           END IF;
1772 
1773 /* Phase with FREE_OVERRIDE_FLAG set to 'Y' should not be attached to modifier type PRG -- Bug#1748272 */
1774 
1775           IF (p_MODIFIERS_rec.list_line_type_code = 'PRG') THEN
1776            begin
1777              select 'Y' into l_phase_freeze_set
1778               from qp_pricing_phases
1779              where nvl(user_freeze_override_flag,freeze_override_flag) = 'Y'
1780                and pricing_phase_id = p_MODIFIERS_rec.PRICING_PHASE_ID;
1781            exception
1782              WHEN no_data_found THEN
1783                   NULL;
1784            end;
1785 
1786            IF l_phase_freeze_set = 'Y' THEN
1787               l_return_status := FND_API.G_RET_STS_ERROR;
1788 
1789               FND_MESSAGE.SET_NAME('QP','QP_PHASE_FREEZE_ERROR');
1790               OE_MSG_PUB.Add;
1791 
1792            END IF;
1793           END IF;
1794 
1795 /* Only Phase 10 is allowed for GSA Discounts    */
1796 
1797           IF   l_gsa_indicator = 'Y'
1798 	     AND  l_phase_sequence <> 10
1799           THEN
1800 
1801              l_return_status := FND_API.G_RET_STS_ERROR;
1802 
1803              FND_MESSAGE.SET_NAME('QP','QP_INVALID_PHASE');
1804              OE_MSG_PUB.Add;
1805 
1806           END IF;
1807 
1808      END IF;
1809 
1810 
1811 /* Accrual not allowed for these Modifier types */
1812 
1813           oe_debug_pub.add('line type = '||p_MODIFIERS_rec.list_line_type_code);
1814           oe_debug_pub.add('accrual flag = '||p_MODIFIERS_rec.accrual_flag);
1815 
1816      IF ( p_MODIFIERS_rec.list_line_type_code = 'OID' OR
1817           p_MODIFIERS_rec.list_line_type_code = 'SUR' OR
1818           p_MODIFIERS_rec.list_line_type_code = 'PRG' OR
1819           p_MODIFIERS_rec.list_line_type_code = 'RLTD' OR
1820           p_MODIFIERS_rec.list_line_type_code = 'TSN' OR
1821           p_MODIFIERS_rec.list_line_type_code = 'PMR' OR
1822           p_MODIFIERS_rec.list_line_type_code = 'FREIGHT_CHARGE' OR
1823           p_MODIFIERS_rec.list_line_type_code = 'IUE' ) AND
1824           p_MODIFIERS_rec.accrual_flag = 'Y'
1825 
1826      THEN
1827 
1828 
1829 oe_debug_pub.add('list line type code invalid');
1830         l_return_status := FND_API.G_RET_STS_ERROR;
1831 
1832         FND_MESSAGE.SET_NAME('QP','QP_ACCRUALS_NOT_ALLOWED');
1833         OE_MSG_PUB.Add;
1834 
1835      END IF;
1836 
1837 /* Accruals not allowed for GSA Discounts   */
1838 
1839      IF   l_gsa_indicator = 'Y'
1840      AND  p_MODIFIERS_rec.accrual_flag = 'Y'
1841      THEN
1842 
1843         l_return_status := FND_API.G_RET_STS_ERROR;
1844 
1845         FND_MESSAGE.SET_NAME('QP','QP_ACCRUALS_NOT_ALLOWED');
1846         OE_MSG_PUB.Add;
1847 
1848      END IF;
1849 
1850 /* Accrual is mandatory for Coupon issue */
1851 
1852      IF   p_MODIFIERS_rec.list_line_type_code = 'CIE'
1853 	AND  p_MODIFIERS_rec.accrual_flag <> 'Y'
1854 
1855      THEN
1856 
1857         l_return_status := FND_API.G_RET_STS_ERROR;
1858 
1859         FND_MESSAGE.SET_NAME('QP','QP_ACCRUALS_MAND_FOR_CIE');
1860         OE_MSG_PUB.Add;
1861 
1862      END IF;
1863 
1864 /* Accrual flag must be Y when accrual related fields are entered
1865 
1866 oe_debug_pub.add('HERE');
1867 oe_debug_pub.add('exp date = '||to_char(p_MODIFIERS_rec.expiration_date));
1868 
1869 	IF  (( p_MODIFIERS_rec.benefit_qty IS NOT NULL
1870 	OR  p_MODIFIERS_rec.benefit_uom_code IS NOT NULL
1871 	OR  p_MODIFIERS_rec.expiration_date IS NOT NULL
1872 	OR  p_MODIFIERS_rec.expiration_period_start_date IS NOT NULL
1873 	OR  p_MODIFIERS_rec.number_expiration_periods IS NOT NULL
1874 	OR  p_MODIFIERS_rec.expiration_period_uom IS NOT NULL
1875 	OR  p_MODIFIERS_rec.rebate_trxn_type_code IS NOT NULL
1876 	OR  p_MODIFIERS_rec.estim_accrual_rate IS NOT NULL
1877 	OR  p_MODIFIERS_rec.accrual_conversion_rate IS NOT NULL )
1878 	AND  p_MODIFIERS_rec.accrual_flag = 'N')
1879      THEN
1880 
1881         l_return_status := FND_API.G_RET_STS_ERROR;
1882 
1883         FND_MESSAGE.SET_NAME('QP','QP_ACCRUAL_COLUMNS');
1884         OE_MSG_PUB.Add;
1885 
1886      END IF;
1887 
1888 */
1889 
1890 /* Accrual is allowed only if the benefit line type of Price Break is a Discount */
1891 
1892      IF   p_MODIFIERS_rec.rltd_modifier_grp_type = 'PRICE BREAK' AND
1893           p_MODIFIERS_rec.accrual_flag = 'Y' AND
1894           p_MODIFIERS_rec.list_line_type_code <> 'DIS'
1895 
1896      THEN
1897 
1898 oe_debug_pub.add('list line type code invalid');
1899         l_return_status := FND_API.G_RET_STS_ERROR;
1900 
1901         FND_MESSAGE.SET_NAME('QP','QP_ACCRUALS_FOR_DIS_ONLY');
1902 
1903         OE_MSG_PUB.Add;
1904 
1905      END IF;
1906 
1907 /* Proration is mandatory for these Primary Modifier types */
1908 
1909      IF ( p_MODIFIERS_rec.list_line_type_code = 'DIS' OR
1910           p_MODIFIERS_rec.list_line_type_code = 'SUR' OR
1911           p_MODIFIERS_rec.list_line_type_code = 'PRG' OR
1912           p_MODIFIERS_rec.list_line_type_code = 'OID') AND
1913           p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
1914           p_MODIFIERS_rec.proration_type_code  IS NULL
1915 
1916      THEN
1917 
1918 
1919 oe_debug_pub.add('proration 11111');
1920         l_return_status := FND_API.G_RET_STS_ERROR;
1921 
1922 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1923         FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRORATION_TYPE_CODE')); -- Fix For Bug-1974413
1924         OE_MSG_PUB.Add;
1925 
1926      END IF;
1927 
1928 /* Proration type code must be 'N' for GSA Discounts   */
1929 
1930      IF   l_gsa_indicator = 'Y'
1931 	AND  p_MODIFIERS_rec.proration_type_code <> 'N'
1932      THEN
1933 
1934         l_return_status := FND_API.G_RET_STS_ERROR;
1935 
1936 	   FND_MESSAGE.SET_NAME('QP','QP_GSA_PRORATION_ALWAYS_N');
1937         OE_MSG_PUB.Add;
1938 
1939      END IF;
1940 
1941      IF ( p_MODIFIERS_rec.list_line_type_code = 'IUE' OR
1942           p_MODIFIERS_rec.list_line_type_code = 'TSN') AND
1943           p_MODIFIERS_rec.estim_gl_value IS NOT NULL AND
1944           p_MODIFIERS_rec.proration_type_code  IS NULL
1945 
1946      THEN
1947 
1948 
1949 oe_debug_pub.add('list line type code invalid');
1950         l_return_status := FND_API.G_RET_STS_ERROR;
1951 
1952 	   FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1953         FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRORATION_TYPE_CODE')); -- Fix For Bug-1974413
1954         OE_MSG_PUB.Add;
1955 
1956      END IF;
1957 
1958 
1959   /* If the Primary line is a CIE, OID or PRG, proration type code is mandatory  */
1960 
1961      IF  (l_primary_list_line_type_code = 'CIE'
1962      OR   l_primary_list_line_type_code = 'OID'
1963      OR   l_primary_list_line_type_code = 'PRG')
1964      AND   p_MODIFIERS_rec.proration_type_code IS NULL
1965      THEN
1966 
1967 oe_debug_pub.add('proration 22222');
1968         l_return_status := FND_API.G_RET_STS_ERROR;
1969 
1970         FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1971         FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRORATION_TYPE_CODE'));  -- Fix For Bug-1974413
1972         OE_MSG_PUB.Add;
1973 
1974     END IF;
1975 
1976   /* If the Primary line is a Price Break Header and the Child lines are DIS or SUR, proration type code is mandatory  */
1977 
1978      IF   l_primary_list_line_type_code = 'PBH'
1979      AND  ( p_MODIFIERS_rec.list_line_type_code = 'DIS'
1980      OR   p_MODIFIERS_rec.list_line_type_code = 'SUR')
1981      AND  p_MODIFIERS_rec.rltd_modifier_grp_type IS NOT NULL
1982      AND   p_MODIFIERS_rec.proration_type_code IS NULL
1983      THEN
1984 
1985         l_return_status := FND_API.G_RET_STS_ERROR;
1986 
1987         FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
1988         FND_MESSAGE.SET_TOKEN('ATTRIBUTE',QP_PRC_UTIL.Get_Attribute_Name('PRORATION_TYPE_CODE')); -- Fix For Bug-1974413
1989         OE_MSG_PUB.Add;
1990 
1991     END IF;
1992 
1993   /* If the Primary line is a Coupon Issue, the Child lines must be DIS or PRG  */
1994 
1995      IF   l_primary_list_line_type_code = 'CIE'
1996      AND  p_MODIFIERS_rec.list_line_type_code <> 'DIS'
1997      AND  p_MODIFIERS_rec.list_line_type_code <> 'PRG'
1998      THEN
1999 
2000         l_return_status := FND_API.G_RET_STS_ERROR;
2001 
2002         FND_MESSAGE.SET_NAME('QP','QP_CIE_CHILD_DIS_OR_PRG');
2003         OE_MSG_PUB.Add;
2004 
2005     END IF;
2006 
2007   /* If the Primary line is a Price Break Header, the child lines must be DIS or SUR */
2008 
2009 --dbms_output.put_line('BUY = '||l_primary_list_line_type_code);
2010 --dbms_output.put_line('GET = '||p_MODIFIERS_rec.list_line_type_code);
2011 
2012      IF   l_primary_list_line_type_code = 'PBH'
2013      AND  p_MODIFIERS_rec.list_line_type_code <> 'PBH'
2014      AND  p_MODIFIERS_rec.list_line_type_code <> 'DIS'
2015      AND  p_MODIFIERS_rec.list_line_type_code <> 'SUR'
2016      THEN
2017 
2018         l_return_status := FND_API.G_RET_STS_ERROR;
2019 
2020         FND_MESSAGE.SET_NAME('QP','QP_PBH_CHILD_DIS_OR_SUR');
2021         OE_MSG_PUB.Add;
2022 
2023     END IF;
2024 
2025 /* Pricing Group Sequence is --not-- mandatory for these Primary Modifier types */
2026 /*commented out this validation as the engine does not need this to be mandatory11.5.3+  spgopal*/
2027 
2028 /*
2029      IF ( p_MODIFIERS_rec.list_line_type_code = 'OID' OR
2030           p_MODIFIERS_rec.list_line_type_code = 'SUR' OR
2031           p_MODIFIERS_rec.list_line_type_code = 'PRG' OR
2032           p_MODIFIERS_rec.list_line_type_code = 'DIS' OR
2033           p_MODIFIERS_rec.list_line_type_code = 'PBH') AND
2034           p_MODIFIERS_rec.rltd_modifier_grp_type IS NULL AND
2035           p_MODIFIERS_rec.modifier_level_code <> 'ORDER' AND
2036           p_MODIFIERS_rec.automatic_flag = 'Y' AND
2037           p_MODIFIERS_rec.pricing_group_sequence IS NULL
2038 		THEN
2039 
2040           l_return_status := FND_API.G_RET_STS_ERROR;
2041 
2042 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
2043           FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Bucket');
2044           OE_MSG_PUB.Add;
2045 
2046       END IF;
2047 	 */
2048 
2049 /* Pricing Group Sequence must be 1 for GSA Discounts   */
2050 
2051       IF    l_gsa_indicator = 'Y'
2052 	 AND   p_MODIFIERS_rec.pricing_group_sequence <> 1
2053       THEN
2054 
2055           l_return_status := FND_API.G_RET_STS_ERROR;
2056 
2057 	     FND_MESSAGE.SET_NAME('QP','QP_GSA_BUCKET_VALUE_1');
2058           OE_MSG_PUB.Add;
2059 
2060       END IF;
2061 
2062 /* Pricing Group Sequence is --not-- mandatory for all Benefit list lines   */
2063 /*commented out this validation as the engine does not need this to be mandatory11.5.3+  spgopal*/
2064 
2065 /*
2066       IF    p_MODIFIERS_rec.list_line_type_code <> 'RLTD'
2067       AND   p_MODIFIERS_rec.rltd_modifier_grp_type IS NOT NULL
2068 	 AND   p_MODIFIERS_rec.rltd_modifier_grp_type <> 'PRICE BREAK'
2069 	 AND   p_MODIFIERS_rec.pricing_group_sequence IS NULL
2070       THEN
2071 
2072 	   --dbms_output.put_line('phase is mand');
2073           l_return_status := FND_API.G_RET_STS_ERROR;
2074 
2075 	     FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
2076           FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Bucket');
2077           OE_MSG_PUB.Add;
2078 
2079       END IF;
2080 	 */
2081 
2082 /* Pricing Group Sequence must be NULL for manual discounts before packJ and for basic pricing     */
2083 
2084 
2085 	 IF    p_MODIFIERS_rec.automatic_flag = 'N'
2086 	 AND   p_MODIFIERS_rec.pricing_group_sequence IS NOT NULL
2087 	 AND   (QP_Code_Control.Get_Code_Release_Level < '110510'
2088                 OR
2089 		QP_UTIL.get_qp_status <> 'I'
2090 		OR
2091 		fnd_profile.value ('QP_MANUAL_MODIFIER_BUCKET') <> 'Y'
2092 	        )
2093          THEN
2094 
2095           l_return_status := FND_API.G_RET_STS_ERROR;
2096 
2097 	     FND_MESSAGE.SET_NAME('QP','QP_MANUAL_DIS_BUCKET_NULL');
2098           OE_MSG_PUB.Add;
2099 
2100       END IF;
2101 
2102 
2103 /* Incompatibility Group Code must be Level 1 for GSA Discounts   */
2104 
2105       IF    l_gsa_indicator = 'Y'
2106 	 AND   p_MODIFIERS_rec.incompatibility_grp_code IS NOT NULL
2107 	 AND   p_MODIFIERS_rec.incompatibility_grp_code <> 'LVL 1'
2108       THEN
2109 
2110           l_return_status := FND_API.G_RET_STS_ERROR;
2111 
2112 	     FND_MESSAGE.SET_NAME('QP','QP_GSA_INCOMP_ALWAYS_LVL1');
2113           OE_MSG_PUB.Add;
2114 
2115       END IF;
2116 
2117 
2118 oe_debug_pub.add('here10');
2119     END IF; -- If list_line_type_code <> 'PMR'
2120     --  Return Error if a required attribute is missing.
2121 
2122     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2123 
2124 oe_debug_pub.add('before raise');
2125         RAISE FND_API.G_EXC_ERROR;
2126 
2127     END IF;
2128 
2129     IF  p_MODIFIERS_rec.accum_attribute IS NOT NULL THEN
2130         QP_UTIL.validate_attribute_name(p_application_short_name => 'QP'
2131                          ,p_flexfield_name    => 'QP_ATTR_DEFNS_PRICING'
2132                          ,p_context_name      => 'VOLUME'
2133                          ,p_attribute_name    => p_MODIFIERS_rec.accum_attribute
2134   		 	          ,p_error_code        => l_error_code);
2135 
2136         IF (l_error_code <> 0 )       --  invalid context
2137 	    THEN
2138 		  l_return_status := FND_API.G_RET_STS_ERROR;
2139 
2140             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
2141             THEN
2142 
2143                FND_MESSAGE.SET_NAME('QP','QP_INVALID_ACCUM_ATTRIBUTE');
2144                OE_MSG_PUB.Add;
2145             END IF;
2146 	END IF;
2147     END IF;
2148 
2149 
2150     --
2151     --  Check conditionally required attributes here.
2152     --
2153 
2154     --
2155     --  Validate attribute dependencies here.
2156     --
2157 
2158 
2159     --  Done validating entity
2160 
2161     x_return_status := l_return_status;
2162 
2163 -- Start Bug 2091362, bug2119287
2164 
2165 l_qp_status := QP_UTIL.GET_QP_STATUS;
2166 
2167 IF (fnd_profile.value('QP_ALLOW_DUPLICATE_MODIFIERS') <> 'Y'
2168 AND (l_qp_status = 'S' OR l_gsa_indicator = 'Y')) THEN
2169 
2170    oe_debug_pub.add('about to log a request to check duplicate modifier list lines ');
2171 
2172    QP_DELAYED_REQUESTS_PVT.Log_Request
2173     ( p_entity_code		=> QP_GLOBALS.G_ENTITY_ALL
2174 ,     p_entity_id		=> p_modifiers_rec.list_line_id
2175 ,   p_requesting_entity_code	=> QP_GLOBALS.G_ENTITY_ALL
2176 ,   p_requesting_entity_id	=> p_modifiers_rec.list_line_id
2177 ,   p_request_type		=> QP_GLOBALS.G_DUPLICATE_MODIFIER_LINES
2178 ,   p_param1			=> p_modifiers_rec.list_header_id
2179 ,   p_param2			=> fnd_date.date_to_canonical(p_modifiers_rec.start_date_active)	--2752265
2180 ,   p_param3			=> fnd_date.date_to_canonical(p_modifiers_rec.end_date_active)		--2752265
2181 ,   p_param4            => NULL
2182 ,   p_param5            => NULL
2183 ,   p_param6            => NULL
2184 ,   x_return_status		=> l_return_status
2185 );
2186 
2187     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2188 
2189 	  oe_debug_pub.add('failed in logging delayed request for Duplicate Modifiers ');
2190 
2191         RAISE FND_API.G_EXC_ERROR;
2192 
2193     END IF;
2194 
2195   oe_debug_pub.add('after logging delayed request ');
2196 
2197 END IF;
2198 
2199 -- end bug2091362
2200 
2201 
2202 oe_debug_pub.add('END Entity in QPXLMLLB');
2203 
2204 EXCEPTION
2205 
2206     WHEN FND_API.G_EXC_ERROR THEN
2207 
2208 oe_debug_pub.add('EXP error');
2209         x_return_status := FND_API.G_RET_STS_ERROR;
2210 
2211     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2212 
2213 oe_debug_pub.add('EXP unexpected');
2214         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2215 
2216     WHEN OTHERS THEN
2217 
2218 oe_debug_pub.add('EXP others');
2219 oe_debug_pub.add('error =' || sqlerrm);
2220         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2221 
2222         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2223         THEN
2224             OE_MSG_PUB.Add_Exc_Msg
2225             (   G_PKG_NAME
2226             ,   'Entity'
2227             );
2228         END IF;
2229 
2230 END Entity;
2231 
2232 --  Procedure Attributes
2233 
2234 PROCEDURE Attributes
2235 (   x_return_status                 OUT NOCOPY VARCHAR2
2236 ,   p_MODIFIERS_rec                 IN  QP_Modifiers_PUB.Modifiers_Rec_Type
2237 ,   p_old_MODIFIERS_rec             IN  QP_Modifiers_PUB.Modifiers_Rec_Type :=
2238                                         QP_Modifiers_PUB.G_MISS_MODIFIERS_REC
2239 )
2240 IS
2241 BEGIN
2242 
2243 oe_debug_pub.add('BEGIN Attributes in QPXLMLLB');
2244     x_return_status := FND_API.G_RET_STS_SUCCESS;
2245 
2246     /* changes to fix bug # 1724169 */
2247 
2248        IF FND_PROFILE.VALUE('QP_NEGATIVE_PRICING') = 'N' AND p_MODIFIERS_rec.operand < 0 THEN
2249             FND_MESSAGE.SET_NAME('QP','OE_PR_NEGATIVE_AMOUNT');
2250             OE_MSG_PUB.Add;
2251             x_return_status := FND_API.G_RET_STS_ERROR;
2252        END IF;
2253 
2254 
2255 
2256     --  Validate MODIFIERS attributes
2257 
2258     IF  p_MODIFIERS_rec.arithmetic_operator IS NOT NULL AND
2259         (   p_MODIFIERS_rec.arithmetic_operator <>
2260             p_old_MODIFIERS_rec.arithmetic_operator OR
2261             p_old_MODIFIERS_rec.arithmetic_operator IS NULL )
2262     THEN
2263         IF NOT QP_Validate.Arithmetic_Operator(p_MODIFIERS_rec.arithmetic_operator) THEN
2264             x_return_status := FND_API.G_RET_STS_ERROR;
2265         END IF;
2266     END IF;
2267 oe_debug_pub.add('here3');
2268 
2269     IF  p_MODIFIERS_rec.automatic_flag IS NOT NULL AND
2270         (   p_MODIFIERS_rec.automatic_flag <>
2271             p_old_MODIFIERS_rec.automatic_flag OR
2272             p_old_MODIFIERS_rec.automatic_flag IS NULL )
2273     THEN
2274         IF NOT QP_Validate.Automatic(p_MODIFIERS_rec.automatic_flag) THEN
2275             x_return_status := FND_API.G_RET_STS_ERROR;
2276         END IF;
2277     END IF;
2278 
2279 /*    IF  p_MODIFIERS_rec.base_qty IS NOT NULL AND
2280         (   p_MODIFIERS_rec.base_qty <>
2281             p_old_MODIFIERS_rec.base_qty OR
2282             p_old_MODIFIERS_rec.base_qty IS NULL )
2283     THEN
2284         IF NOT QP_Validate.Base_Qty(p_MODIFIERS_rec.base_qty) THEN
2285             x_return_status := FND_API.G_RET_STS_ERROR;
2286         END IF;
2287     END IF;
2288 */
2289     IF  p_MODIFIERS_rec.pricing_phase_id IS NOT NULL AND
2290         (   p_MODIFIERS_rec.pricing_phase_id <>
2291             p_old_MODIFIERS_rec.pricing_phase_id OR
2292             p_old_MODIFIERS_rec.pricing_phase_id IS NULL )
2293     THEN
2294         IF NOT QP_Validate.Pricing_Phase(p_MODIFIERS_rec.pricing_phase_id) THEN
2295             x_return_status := FND_API.G_RET_STS_ERROR;
2296         END IF;
2297     END IF;
2298 
2299 oe_debug_pub.add('here4');
2300 /*    IF  p_MODIFIERS_rec.base_uom_code IS NOT NULL AND
2301         (   p_MODIFIERS_rec.base_uom_code <>
2302             p_old_MODIFIERS_rec.base_uom_code OR
2303             p_old_MODIFIERS_rec.base_uom_code IS NULL )
2304     THEN
2305         IF NOT QP_Validate.Base_Uom(p_MODIFIERS_rec.base_uom_code) THEN
2306             x_return_status := FND_API.G_RET_STS_ERROR;
2307         END IF;
2308     END IF;
2309 */
2310     IF  p_MODIFIERS_rec.comments IS NOT NULL AND
2311         (   p_MODIFIERS_rec.comments <>
2312             p_old_MODIFIERS_rec.comments OR
2313             p_old_MODIFIERS_rec.comments IS NULL )
2314     THEN
2315         IF NOT QP_Validate.Comments(p_MODIFIERS_rec.comments) THEN
2316             x_return_status := FND_API.G_RET_STS_ERROR;
2317         END IF;
2318     END IF;
2319 
2320     IF  p_MODIFIERS_rec.created_by IS NOT NULL AND
2321         (   p_MODIFIERS_rec.created_by <>
2322             p_old_MODIFIERS_rec.created_by OR
2323             p_old_MODIFIERS_rec.created_by IS NULL )
2324     THEN
2325         IF NOT QP_Validate.Created_By(p_MODIFIERS_rec.created_by) THEN
2326             x_return_status := FND_API.G_RET_STS_ERROR;
2327         END IF;
2328     END IF;
2329 
2330     IF  p_MODIFIERS_rec.creation_date IS NOT NULL AND
2331         (   p_MODIFIERS_rec.creation_date <>
2332             p_old_MODIFIERS_rec.creation_date OR
2333             p_old_MODIFIERS_rec.creation_date IS NULL )
2334     THEN
2335         IF NOT QP_Validate.Creation_Date(p_MODIFIERS_rec.creation_date) THEN
2336             x_return_status := FND_API.G_RET_STS_ERROR;
2337         END IF;
2338     END IF;
2339 
2340     IF  p_MODIFIERS_rec.effective_period_uom IS NOT NULL AND
2341         (   p_MODIFIERS_rec.effective_period_uom <>
2342             p_old_MODIFIERS_rec.effective_period_uom OR
2343             p_old_MODIFIERS_rec.effective_period_uom IS NULL )
2344     THEN
2345         IF NOT QP_Validate.Effective_Period_Uom(p_MODIFIERS_rec.effective_period_uom) THEN
2346             x_return_status := FND_API.G_RET_STS_ERROR;
2347         END IF;
2348     END IF;
2349 
2350     IF  p_MODIFIERS_rec.end_date_active IS NOT NULL AND
2351         (   p_MODIFIERS_rec.end_date_active <>
2352             p_old_MODIFIERS_rec.end_date_active OR
2353             p_old_MODIFIERS_rec.end_date_active IS NULL )
2354     THEN
2355         IF NOT QP_Validate.End_Date_Active(p_MODIFIERS_rec.end_date_active) THEN
2356             x_return_status := FND_API.G_RET_STS_ERROR;
2357         END IF;
2358     END IF;
2359 
2360     IF  p_MODIFIERS_rec.estim_accrual_rate IS NOT NULL AND
2361         (   p_MODIFIERS_rec.estim_accrual_rate <>
2362             p_old_MODIFIERS_rec.estim_accrual_rate OR
2363             p_old_MODIFIERS_rec.estim_accrual_rate IS NULL )
2364     THEN
2365         IF NOT QP_Validate.Estim_Accrual_Rate(p_MODIFIERS_rec.estim_accrual_rate) THEN
2366             x_return_status := FND_API.G_RET_STS_ERROR;
2367         END IF;
2368     END IF;
2369 
2370     IF  p_MODIFIERS_rec.generate_using_formula_id IS NOT NULL AND
2371         (   p_MODIFIERS_rec.generate_using_formula_id <>
2372             p_old_MODIFIERS_rec.generate_using_formula_id OR
2373             p_old_MODIFIERS_rec.generate_using_formula_id IS NULL )
2374     THEN
2375         IF NOT QP_Validate.Generate_Using_Formula(p_MODIFIERS_rec.generate_using_formula_id) THEN
2376             x_return_status := FND_API.G_RET_STS_ERROR;
2377         END IF;
2378     END IF;
2379 
2380 /*    IF  p_MODIFIERS_rec.gl_class_id IS NOT NULL AND
2381         (   p_MODIFIERS_rec.gl_class_id <>
2382             p_old_MODIFIERS_rec.gl_class_id OR
2383             p_old_MODIFIERS_rec.gl_class_id IS NULL )
2384     THEN
2385         IF NOT QP_Validate.Gl_Class(p_MODIFIERS_rec.gl_class_id) THEN
2386             x_return_status := FND_API.G_RET_STS_ERROR;
2387         END IF;
2388     END IF;
2389 */
2390     IF  p_MODIFIERS_rec.inventory_item_id IS NOT NULL AND
2391         (   p_MODIFIERS_rec.inventory_item_id <>
2392             p_old_MODIFIERS_rec.inventory_item_id OR
2393             p_old_MODIFIERS_rec.inventory_item_id IS NULL )
2394     THEN
2395         IF NOT QP_Validate.Inventory_Item(p_MODIFIERS_rec.inventory_item_id) THEN
2396             x_return_status := FND_API.G_RET_STS_ERROR;
2397         END IF;
2398     END IF;
2399 
2400     IF  p_MODIFIERS_rec.last_updated_by IS NOT NULL AND
2401         (   p_MODIFIERS_rec.last_updated_by <>
2402             p_old_MODIFIERS_rec.last_updated_by OR
2403             p_old_MODIFIERS_rec.last_updated_by IS NULL )
2404     THEN
2405         IF NOT QP_Validate.Last_Updated_By(p_MODIFIERS_rec.last_updated_by) THEN
2406             x_return_status := FND_API.G_RET_STS_ERROR;
2407         END IF;
2408     END IF;
2409 
2410     IF  p_MODIFIERS_rec.last_update_date IS NOT NULL AND
2411         (   p_MODIFIERS_rec.last_update_date <>
2412             p_old_MODIFIERS_rec.last_update_date OR
2413             p_old_MODIFIERS_rec.last_update_date IS NULL )
2414     THEN
2415         IF NOT QP_Validate.Last_Update_Date(p_MODIFIERS_rec.last_update_date) THEN
2416             x_return_status := FND_API.G_RET_STS_ERROR;
2417         END IF;
2418     END IF;
2419 
2420     IF  p_MODIFIERS_rec.last_update_login IS NOT NULL AND
2421         (   p_MODIFIERS_rec.last_update_login <>
2422             p_old_MODIFIERS_rec.last_update_login OR
2423             p_old_MODIFIERS_rec.last_update_login IS NULL )
2424     THEN
2425         IF NOT QP_Validate.Last_Update_Login(p_MODIFIERS_rec.last_update_login) THEN
2426             x_return_status := FND_API.G_RET_STS_ERROR;
2427         END IF;
2428     END IF;
2429 
2430 oe_debug_pub.add('here5');
2431     IF  p_MODIFIERS_rec.list_header_id IS NOT NULL AND
2432         (   p_MODIFIERS_rec.list_header_id <>
2433             p_old_MODIFIERS_rec.list_header_id OR
2434             p_old_MODIFIERS_rec.list_header_id IS NULL )
2435     THEN
2436         IF NOT QP_Validate.List_Header(p_MODIFIERS_rec.list_header_id) THEN
2437             x_return_status := FND_API.G_RET_STS_ERROR;
2438         END IF;
2439     END IF;
2440 
2441     IF  p_MODIFIERS_rec.list_line_id IS NOT NULL AND
2442         (   p_MODIFIERS_rec.list_line_id <>
2443             p_old_MODIFIERS_rec.list_line_id OR
2444             p_old_MODIFIERS_rec.list_line_id IS NULL )
2445     THEN
2446         IF NOT QP_Validate.List_Line(p_MODIFIERS_rec.list_line_id) THEN
2447             x_return_status := FND_API.G_RET_STS_ERROR;
2448         END IF;
2449     END IF;
2450 
2451     IF  p_MODIFIERS_rec.list_line_type_code IS NOT NULL AND
2452         (   p_MODIFIERS_rec.list_line_type_code <>
2453             p_old_MODIFIERS_rec.list_line_type_code OR
2454             p_old_MODIFIERS_rec.list_line_type_code IS NULL )
2455     THEN
2456         IF NOT QP_Validate.List_Line_Type(p_MODIFIERS_rec.list_line_type_code) THEN
2457             x_return_status := FND_API.G_RET_STS_ERROR;
2458         END IF;
2459     END IF;
2460 
2461     IF  p_MODIFIERS_rec.list_price IS NOT NULL AND
2462         (   p_MODIFIERS_rec.list_price <>
2463             p_old_MODIFIERS_rec.list_price OR
2464             p_old_MODIFIERS_rec.list_price IS NULL )
2465     THEN
2466         IF NOT QP_Validate.List_Price(p_MODIFIERS_rec.list_price) THEN
2467             x_return_status := FND_API.G_RET_STS_ERROR;
2468         END IF;
2469     END IF;
2470 
2471 /*    IF  p_MODIFIERS_rec.list_price_uom_code IS NOT NULL AND
2472         (   p_MODIFIERS_rec.list_price_uom_code <>
2473             p_old_MODIFIERS_rec.list_price_uom_code OR
2474             p_old_MODIFIERS_rec.list_price_uom_code IS NULL )
2475     THEN
2476         IF NOT QP_Validate.List_Price_Uom(p_MODIFIERS_rec.list_price_uom_code) THEN
2477             x_return_status := FND_API.G_RET_STS_ERROR;
2478         END IF;
2479     END IF;
2480 */
2481     IF  p_MODIFIERS_rec.modifier_level_code IS NOT NULL AND
2482         (   p_MODIFIERS_rec.modifier_level_code <>
2483             p_old_MODIFIERS_rec.modifier_level_code OR
2484             p_old_MODIFIERS_rec.modifier_level_code IS NULL )
2485     THEN
2486         IF NOT QP_Validate.Modifier_Level(p_MODIFIERS_rec.modifier_level_code) THEN
2487             x_return_status := FND_API.G_RET_STS_ERROR;
2488         END IF;
2489     END IF;
2490 
2491 /*    IF  p_MODIFIERS_rec.new_price IS NOT NULL AND
2492         (   p_MODIFIERS_rec.new_price <>
2493             p_old_MODIFIERS_rec.new_price OR
2494             p_old_MODIFIERS_rec.new_price IS NULL )
2495     THEN
2496         IF NOT QP_Validate.New_Price(p_MODIFIERS_rec.new_price) THEN
2497             x_return_status := FND_API.G_RET_STS_ERROR;
2498         END IF;
2499     END IF;
2500 */
2501     IF  p_MODIFIERS_rec.number_effective_periods IS NOT NULL AND
2502         (   p_MODIFIERS_rec.number_effective_periods <>
2503             p_old_MODIFIERS_rec.number_effective_periods OR
2504             p_old_MODIFIERS_rec.number_effective_periods IS NULL )
2505     THEN
2506         IF NOT QP_Validate.Number_Effective_Periods(p_MODIFIERS_rec.number_effective_periods) THEN
2507             x_return_status := FND_API.G_RET_STS_ERROR;
2508         END IF;
2509     END IF;
2510 
2511 oe_debug_pub.add('here6');
2512     IF  p_MODIFIERS_rec.operand IS NOT NULL AND
2513         (   p_MODIFIERS_rec.operand <>
2514             p_old_MODIFIERS_rec.operand OR
2515             p_old_MODIFIERS_rec.operand IS NULL )
2516     THEN
2517 oe_debug_pub.add('here7');
2518         IF NOT QP_Validate.Operand(p_MODIFIERS_rec.operand) THEN
2519 oe_debug_pub.add('here8');
2520             x_return_status := FND_API.G_RET_STS_ERROR;
2521         END IF;
2522     END IF;
2523 
2524 oe_debug_pub.add('here9');
2525     IF  p_MODIFIERS_rec.organization_id IS NOT NULL AND
2526         (   p_MODIFIERS_rec.organization_id <>
2527             p_old_MODIFIERS_rec.organization_id OR
2528             p_old_MODIFIERS_rec.organization_id IS NULL )
2529     THEN
2530         IF NOT QP_Validate.Organization(p_MODIFIERS_rec.organization_id) THEN
2531             x_return_status := FND_API.G_RET_STS_ERROR;
2532         END IF;
2533     END IF;
2534 
2535 oe_debug_pub.add('here10');
2536     IF  p_MODIFIERS_rec.override_flag IS NOT NULL AND
2537         (   p_MODIFIERS_rec.override_flag <>
2538             p_old_MODIFIERS_rec.override_flag OR
2539             p_old_MODIFIERS_rec.override_flag IS NULL )
2540     THEN
2541         IF NOT QP_Validate.Override(p_MODIFIERS_rec.override_flag) THEN
2542             x_return_status := FND_API.G_RET_STS_ERROR;
2543         END IF;
2544     END IF;
2545 
2546 oe_debug_pub.add('here11');
2547     IF  p_MODIFIERS_rec.percent_price IS NOT NULL AND
2548         (   p_MODIFIERS_rec.percent_price <>
2549             p_old_MODIFIERS_rec.percent_price OR
2550             p_old_MODIFIERS_rec.percent_price IS NULL )
2551     THEN
2552         IF NOT QP_Validate.Percent_Price(p_MODIFIERS_rec.percent_price) THEN
2553             x_return_status := FND_API.G_RET_STS_ERROR;
2554         END IF;
2555     END IF;
2556 
2557     IF  p_MODIFIERS_rec.price_break_type_code IS NOT NULL AND
2558         (   p_MODIFIERS_rec.price_break_type_code <>
2559             p_old_MODIFIERS_rec.price_break_type_code OR
2560             p_old_MODIFIERS_rec.price_break_type_code IS NULL )
2561     THEN
2562         IF NOT QP_Validate.Price_Break_Type(p_MODIFIERS_rec.price_break_type_code) THEN
2563             x_return_status := FND_API.G_RET_STS_ERROR;
2564         END IF;
2565     END IF;
2566 
2567     IF  p_MODIFIERS_rec.price_by_formula_id IS NOT NULL AND
2568         (   p_MODIFIERS_rec.price_by_formula_id <>
2569             p_old_MODIFIERS_rec.price_by_formula_id OR
2570             p_old_MODIFIERS_rec.price_by_formula_id IS NULL )
2571     THEN
2572         IF NOT QP_Validate.Price_By_Formula(p_MODIFIERS_rec.price_by_formula_id) THEN
2573             x_return_status := FND_API.G_RET_STS_ERROR;
2574         END IF;
2575     END IF;
2576 
2577     IF  p_MODIFIERS_rec.primary_uom_flag IS NOT NULL AND
2578         (   p_MODIFIERS_rec.primary_uom_flag <>
2579             p_old_MODIFIERS_rec.primary_uom_flag OR
2580             p_old_MODIFIERS_rec.primary_uom_flag IS NULL )
2581     THEN
2582         IF NOT QP_Validate.Primary_Uom(p_MODIFIERS_rec.primary_uom_flag) THEN
2583             x_return_status := FND_API.G_RET_STS_ERROR;
2584         END IF;
2585     END IF;
2586 
2587     IF  p_MODIFIERS_rec.print_on_invoice_flag IS NOT NULL AND
2588         (   p_MODIFIERS_rec.print_on_invoice_flag <>
2589             p_old_MODIFIERS_rec.print_on_invoice_flag OR
2590             p_old_MODIFIERS_rec.print_on_invoice_flag IS NULL )
2591     THEN
2592         IF NOT QP_Validate.Print_On_Invoice(p_MODIFIERS_rec.print_on_invoice_flag) THEN
2593             x_return_status := FND_API.G_RET_STS_ERROR;
2594         END IF;
2595     END IF;
2596 
2597     IF  p_MODIFIERS_rec.program_application_id IS NOT NULL AND
2598         (   p_MODIFIERS_rec.program_application_id <>
2599             p_old_MODIFIERS_rec.program_application_id OR
2600             p_old_MODIFIERS_rec.program_application_id IS NULL )
2601     THEN
2602         IF NOT QP_Validate.Program_Application(p_MODIFIERS_rec.program_application_id) THEN
2603             x_return_status := FND_API.G_RET_STS_ERROR;
2604         END IF;
2605     END IF;
2606 
2607     IF  p_MODIFIERS_rec.program_id IS NOT NULL AND
2608         (   p_MODIFIERS_rec.program_id <>
2609             p_old_MODIFIERS_rec.program_id OR
2610             p_old_MODIFIERS_rec.program_id IS NULL )
2611     THEN
2612         IF NOT QP_Validate.Program(p_MODIFIERS_rec.program_id) THEN
2613             x_return_status := FND_API.G_RET_STS_ERROR;
2614         END IF;
2615     END IF;
2616 
2617     IF  p_MODIFIERS_rec.program_update_date IS NOT NULL AND
2618         (   p_MODIFIERS_rec.program_update_date <>
2619             p_old_MODIFIERS_rec.program_update_date OR
2620             p_old_MODIFIERS_rec.program_update_date IS NULL )
2621     THEN
2622         IF NOT QP_Validate.Program_Update_Date(p_MODIFIERS_rec.program_update_date) THEN
2623             x_return_status := FND_API.G_RET_STS_ERROR;
2624         END IF;
2625     END IF;
2626 
2627 /*    IF  p_MODIFIERS_rec.rebate_subtype_code IS NOT NULL AND
2628         (   p_MODIFIERS_rec.rebate_subtype_code <>
2629             p_old_MODIFIERS_rec.rebate_subtype_code OR
2630             p_old_MODIFIERS_rec.rebate_subtype_code IS NULL )
2631     THEN
2632         IF NOT QP_Validate.Rebate_Subtype(p_MODIFIERS_rec.rebate_subtype_code) THEN
2633             x_return_status := FND_API.G_RET_STS_ERROR;
2634         END IF;
2635     END IF;
2636 */
2637     IF  p_MODIFIERS_rec.rebate_trxn_type_code IS NOT NULL AND
2638         (   p_MODIFIERS_rec.rebate_trxn_type_code <>
2639             p_old_MODIFIERS_rec.rebate_trxn_type_code OR
2640             p_old_MODIFIERS_rec.rebate_trxn_type_code IS NULL )
2641     THEN
2642         IF NOT QP_Validate.Rebate_Transaction_Type(p_MODIFIERS_rec.rebate_trxn_type_code) THEN
2643             x_return_status := FND_API.G_RET_STS_ERROR;
2644         END IF;
2645     END IF;
2646 
2647     IF  p_MODIFIERS_rec.related_item_id IS NOT NULL AND
2648         (   p_MODIFIERS_rec.related_item_id <>
2649             p_old_MODIFIERS_rec.related_item_id OR
2650             p_old_MODIFIERS_rec.related_item_id IS NULL )
2651     THEN
2652         IF NOT QP_Validate.Related_Item(p_MODIFIERS_rec.related_item_id) THEN
2653             x_return_status := FND_API.G_RET_STS_ERROR;
2654         END IF;
2655     END IF;
2656 
2657     IF  p_MODIFIERS_rec.relationship_type_id IS NOT NULL AND
2658         (   p_MODIFIERS_rec.relationship_type_id <>
2659             p_old_MODIFIERS_rec.relationship_type_id OR
2660             p_old_MODIFIERS_rec.relationship_type_id IS NULL )
2661     THEN
2662         IF NOT QP_Validate.Relationship_Type(p_MODIFIERS_rec.relationship_type_id) THEN
2663             x_return_status := FND_API.G_RET_STS_ERROR;
2664         END IF;
2665     END IF;
2666 
2667     IF  p_MODIFIERS_rec.reprice_flag IS NOT NULL AND
2668         (   p_MODIFIERS_rec.reprice_flag <>
2669             p_old_MODIFIERS_rec.reprice_flag OR
2670             p_old_MODIFIERS_rec.reprice_flag IS NULL )
2671     THEN
2672         IF NOT QP_Validate.Reprice(p_MODIFIERS_rec.reprice_flag) THEN
2673             x_return_status := FND_API.G_RET_STS_ERROR;
2674         END IF;
2675     END IF;
2676 
2677     IF  p_MODIFIERS_rec.request_id IS NOT NULL AND
2678         (   p_MODIFIERS_rec.request_id <>
2679             p_old_MODIFIERS_rec.request_id OR
2680             p_old_MODIFIERS_rec.request_id IS NULL )
2681     THEN
2682         IF NOT QP_Validate.Request(p_MODIFIERS_rec.request_id) THEN
2683             x_return_status := FND_API.G_RET_STS_ERROR;
2684         END IF;
2685     END IF;
2686 
2687     IF  p_MODIFIERS_rec.revision IS NOT NULL AND
2688         (   p_MODIFIERS_rec.revision <>
2689             p_old_MODIFIERS_rec.revision OR
2690             p_old_MODIFIERS_rec.revision IS NULL )
2691     THEN
2692         IF NOT QP_Validate.Revision(p_MODIFIERS_rec.revision) THEN
2693             x_return_status := FND_API.G_RET_STS_ERROR;
2694         END IF;
2695     END IF;
2696 
2697     IF  p_MODIFIERS_rec.revision_date IS NOT NULL AND
2698         (   p_MODIFIERS_rec.revision_date <>
2699             p_old_MODIFIERS_rec.revision_date OR
2700             p_old_MODIFIERS_rec.revision_date IS NULL )
2701     THEN
2702         IF NOT QP_Validate.Revision_Date(p_MODIFIERS_rec.revision_date) THEN
2703             x_return_status := FND_API.G_RET_STS_ERROR;
2704         END IF;
2705     END IF;
2706 
2707     IF  p_MODIFIERS_rec.revision_reason_code IS NOT NULL AND
2708         (   p_MODIFIERS_rec.revision_reason_code <>
2709             p_old_MODIFIERS_rec.revision_reason_code OR
2710             p_old_MODIFIERS_rec.revision_reason_code IS NULL )
2711     THEN
2712         IF NOT QP_Validate.Revision_Reason(p_MODIFIERS_rec.revision_reason_code) THEN
2713             x_return_status := FND_API.G_RET_STS_ERROR;
2714         END IF;
2715     END IF;
2716 
2717     IF  p_MODIFIERS_rec.start_date_active IS NOT NULL AND
2718         (   p_MODIFIERS_rec.start_date_active <>
2719             p_old_MODIFIERS_rec.start_date_active OR
2720             p_old_MODIFIERS_rec.start_date_active IS NULL )
2721     THEN
2722         IF NOT QP_Validate.Start_Date_Active(p_MODIFIERS_rec.start_date_active) THEN
2723             x_return_status := FND_API.G_RET_STS_ERROR;
2724         END IF;
2725     END IF;
2726 
2727     IF  p_MODIFIERS_rec.substitution_attribute IS NOT NULL AND
2728         (   p_MODIFIERS_rec.substitution_attribute <>
2729             p_old_MODIFIERS_rec.substitution_attribute OR
2730             p_old_MODIFIERS_rec.substitution_attribute IS NULL )
2731     THEN
2732         IF NOT QP_Validate.Substitution_Attribute(p_MODIFIERS_rec.substitution_attribute) THEN
2733             x_return_status := FND_API.G_RET_STS_ERROR;
2734         END IF;
2735     END IF;
2736 
2737     IF  p_MODIFIERS_rec.substitution_context IS NOT NULL AND
2738         (   p_MODIFIERS_rec.substitution_context <>
2739             p_old_MODIFIERS_rec.substitution_context OR
2740             p_old_MODIFIERS_rec.substitution_context IS NULL )
2741     THEN
2742         IF NOT QP_Validate.Substitution_Context(p_MODIFIERS_rec.substitution_context) THEN
2743             x_return_status := FND_API.G_RET_STS_ERROR;
2744         END IF;
2745     END IF;
2746 
2747     IF  p_MODIFIERS_rec.substitution_value IS NOT NULL AND
2748         (   p_MODIFIERS_rec.substitution_value <>
2749             p_old_MODIFIERS_rec.substitution_value OR
2750             p_old_MODIFIERS_rec.substitution_value IS NULL )
2751     THEN
2752         IF NOT QP_Validate.Substitution_Value(p_MODIFIERS_rec.substitution_value) THEN
2753             x_return_status := FND_API.G_RET_STS_ERROR;
2754         END IF;
2755     END IF;
2756 
2757     IF  p_MODIFIERS_rec.accrual_flag IS NOT NULL AND
2758         (   p_MODIFIERS_rec.accrual_flag <>
2759             p_old_MODIFIERS_rec.accrual_flag OR
2760             p_old_MODIFIERS_rec.accrual_flag IS NULL )
2761     THEN
2762         IF NOT QP_Validate.Accrual_Flag(p_MODIFIERS_rec.accrual_flag) THEN
2763             x_return_status := FND_API.G_RET_STS_ERROR;
2764         END IF;
2765     END IF;
2766 
2767     IF  p_MODIFIERS_rec.pricing_group_sequence IS NOT NULL AND
2768         (   p_MODIFIERS_rec.pricing_group_sequence <>
2769             p_old_MODIFIERS_rec.pricing_group_sequence OR
2770             p_old_MODIFIERS_rec.pricing_group_sequence IS NULL )
2771     THEN
2772         IF NOT QP_Validate.Pricing_Group_Sequence(p_MODIFIERS_rec.pricing_group_sequence) THEN
2773             x_return_status := FND_API.G_RET_STS_ERROR;
2774         END IF;
2775     END IF;
2776 oe_debug_pub.add('here12');
2777     IF  p_MODIFIERS_rec.incompatibility_grp_code IS NOT NULL AND
2778         (   p_MODIFIERS_rec.incompatibility_grp_code <>
2779             p_old_MODIFIERS_rec.incompatibility_grp_code OR
2780             p_old_MODIFIERS_rec.incompatibility_grp_code IS NULL )
2781     THEN
2782         IF NOT QP_Validate.Incompatibility_Grp_Code(p_MODIFIERS_rec.incompatibility_grp_code) THEN
2783             x_return_status := FND_API.G_RET_STS_ERROR;
2784         END IF;
2785     END IF;
2786 
2787 oe_debug_pub.add('here13');
2788     IF  p_MODIFIERS_rec.list_line_no IS NOT NULL AND
2789         (   p_MODIFIERS_rec.list_line_no <>
2790             p_old_MODIFIERS_rec.list_line_no OR
2791             p_old_MODIFIERS_rec.list_line_no IS NULL )
2792     THEN
2793         IF NOT QP_Validate.List_Line_No(p_MODIFIERS_rec.list_line_no) THEN
2794             x_return_status := FND_API.G_RET_STS_ERROR;
2795         END IF;
2796     END IF;
2797 
2798     IF  p_MODIFIERS_rec.product_precedence IS NOT NULL AND
2799         (   p_MODIFIERS_rec.product_precedence <>
2800             p_old_MODIFIERS_rec.product_precedence OR
2801             p_old_MODIFIERS_rec.product_precedence IS NULL )
2802     THEN
2803         IF NOT QP_Validate.Product_Precedence(p_MODIFIERS_rec.product_precedence) THEN
2804             x_return_status := FND_API.G_RET_STS_ERROR;
2805         END IF;
2806     END IF;
2807 
2808     IF  p_MODIFIERS_rec.expiration_period_start_date IS NOT NULL AND
2809         (   p_MODIFIERS_rec.expiration_period_start_date <>
2810             p_old_MODIFIERS_rec.expiration_period_start_date OR
2811             p_old_MODIFIERS_rec.expiration_period_start_date IS NULL )
2812     THEN
2813         IF NOT QP_Validate.Exp_Period_Start_Date(p_MODIFIERS_rec.expiration_period_start_date) THEN
2814             x_return_status := FND_API.G_RET_STS_ERROR;
2815         END IF;
2816     END IF;
2817 
2818     IF  p_MODIFIERS_rec.number_expiration_periods IS NOT NULL AND
2819         (   p_MODIFIERS_rec.number_expiration_periods <>
2820             p_old_MODIFIERS_rec.number_expiration_periods OR
2821             p_old_MODIFIERS_rec.number_expiration_periods IS NULL )
2822     THEN
2823         IF NOT QP_Validate.Number_Expiration_Periods(p_MODIFIERS_rec.number_expiration_periods) THEN
2824             x_return_status := FND_API.G_RET_STS_ERROR;
2825         END IF;
2826     END IF;
2827 
2828     IF  p_MODIFIERS_rec.number_expiration_periods IS NOT NULL AND
2829         (   p_MODIFIERS_rec.number_expiration_periods <>
2830             p_old_MODIFIERS_rec.number_expiration_periods OR
2831             p_old_MODIFIERS_rec.number_expiration_periods IS NULL )
2832     THEN
2833         IF NOT QP_Validate.Number_Expiration_Periods(p_MODIFIERS_rec.number_expiration_periods) THEN
2834             x_return_status := FND_API.G_RET_STS_ERROR;
2835         END IF;
2836     END IF;
2837 
2838     IF  p_MODIFIERS_rec.expiration_period_uom IS NOT NULL AND
2839         (   p_MODIFIERS_rec.expiration_period_uom <>
2840             p_old_MODIFIERS_rec.expiration_period_uom OR
2841             p_old_MODIFIERS_rec.expiration_period_uom IS NULL )
2842     THEN
2843         IF NOT QP_Validate.Expiration_Period_Uom(p_MODIFIERS_rec.expiration_period_uom) THEN
2844             x_return_status := FND_API.G_RET_STS_ERROR;
2845         END IF;
2846     END IF;
2847 
2848     IF  p_MODIFIERS_rec.expiration_date IS NOT NULL AND
2849         (   p_MODIFIERS_rec.expiration_date <>
2850             p_old_MODIFIERS_rec.expiration_date OR
2851             p_old_MODIFIERS_rec.expiration_date IS NULL )
2852     THEN
2853         IF NOT QP_Validate.Expiration_Date(p_MODIFIERS_rec.expiration_date) THEN
2854             x_return_status := FND_API.G_RET_STS_ERROR;
2855         END IF;
2856     END IF;
2857 
2858     IF  p_MODIFIERS_rec.estim_gl_value IS NOT NULL AND
2859         (   p_MODIFIERS_rec.estim_gl_value <>
2860             p_old_MODIFIERS_rec.estim_gl_value OR
2861             p_old_MODIFIERS_rec.estim_gl_value IS NULL )
2862     THEN
2863         IF NOT QP_Validate.Estim_Gl_Value(p_MODIFIERS_rec.estim_gl_value) THEN
2864             x_return_status := FND_API.G_RET_STS_ERROR;
2865         END IF;
2866     END IF;
2867 
2868     IF  p_MODIFIERS_rec.benefit_price_list_line_id IS NOT NULL AND
2869         (   p_MODIFIERS_rec.benefit_price_list_line_id <>
2870             p_old_MODIFIERS_rec.benefit_price_list_line_id OR
2871             p_old_MODIFIERS_rec.benefit_price_list_line_id IS NULL )
2872     THEN
2873         IF NOT QP_Validate.Ben_Price_List_Line(p_MODIFIERS_rec.benefit_price_list_line_id) THEN
2874             x_return_status := FND_API.G_RET_STS_ERROR;
2875         END IF;
2876     END IF;
2877 
2878 /*    IF  p_MODIFIERS_rec.recurring_flag IS NOT NULL AND
2879         (   p_MODIFIERS_rec.recurring_flag <>
2880             p_old_MODIFIERS_rec.recurring_flag OR
2881             p_old_MODIFIERS_rec.recurring_flag IS NULL )
2882     THEN
2883         IF NOT QP_Validate.Recurring(p_MODIFIERS_rec.recurring_flag) THEN
2884             x_return_status := FND_API.G_RET_STS_ERROR;
2885         END IF;
2886     END IF;
2887 */
2888     IF  p_MODIFIERS_rec.benefit_limit IS NOT NULL AND
2889         (   p_MODIFIERS_rec.benefit_limit <>
2890             p_old_MODIFIERS_rec.benefit_limit OR
2891             p_old_MODIFIERS_rec.benefit_limit IS NULL )
2892     THEN
2893         IF NOT QP_Validate.Benefit_Limit(p_MODIFIERS_rec.benefit_limit) THEN
2894             x_return_status := FND_API.G_RET_STS_ERROR;
2895         END IF;
2896     END IF;
2897 
2898     IF  p_MODIFIERS_rec.charge_type_code IS NOT NULL AND
2899         (   p_MODIFIERS_rec.charge_type_code <>
2900             p_old_MODIFIERS_rec.charge_type_code OR
2901             p_old_MODIFIERS_rec.charge_type_code IS NULL )
2902     THEN
2903         IF NOT QP_Validate.Charge_Type(p_MODIFIERS_rec.charge_type_code) THEN
2904             x_return_status := FND_API.G_RET_STS_ERROR;
2905         END IF;
2906     END IF;
2907 
2908     IF  p_MODIFIERS_rec.charge_subtype_code IS NOT NULL AND
2909         (   p_MODIFIERS_rec.charge_subtype_code <>
2910             p_old_MODIFIERS_rec.charge_subtype_code OR
2911             p_old_MODIFIERS_rec.charge_subtype_code IS NULL )
2912     THEN
2913         IF NOT QP_Validate.Charge_Subtype(p_MODIFIERS_rec.charge_subtype_code) THEN
2914             x_return_status := FND_API.G_RET_STS_ERROR;
2915         END IF;
2916     END IF;
2917 
2918     IF  p_MODIFIERS_rec.benefit_qty IS NOT NULL AND
2919         (   p_MODIFIERS_rec.benefit_qty <>
2920             p_old_MODIFIERS_rec.benefit_qty OR
2921             p_old_MODIFIERS_rec.benefit_qty IS NULL )
2922     THEN
2923         IF NOT QP_Validate.Benefit_Qty(p_MODIFIERS_rec.benefit_qty) THEN
2924             x_return_status := FND_API.G_RET_STS_ERROR;
2925         END IF;
2926     END IF;
2927 
2928     IF  p_MODIFIERS_rec.benefit_uom_code IS NOT NULL AND
2929         (   p_MODIFIERS_rec.benefit_uom_code <>
2930             p_old_MODIFIERS_rec.benefit_uom_code OR
2931             p_old_MODIFIERS_rec.benefit_uom_code IS NULL )
2932     THEN
2933         IF NOT QP_Validate.Benefit_Uom(p_MODIFIERS_rec.benefit_uom_code) THEN
2934             x_return_status := FND_API.G_RET_STS_ERROR;
2935         END IF;
2936     END IF;
2937 
2938     IF  p_MODIFIERS_rec.accrual_conversion_rate IS NOT NULL AND
2939         (   p_MODIFIERS_rec.accrual_conversion_rate <>
2940             p_old_MODIFIERS_rec.accrual_conversion_rate OR
2941             p_old_MODIFIERS_rec.accrual_conversion_rate IS NULL )
2942     THEN
2943         IF NOT QP_Validate.Accrual_Conversion_Rate(p_MODIFIERS_rec.accrual_conversion_rate) THEN
2944             x_return_status := FND_API.G_RET_STS_ERROR;
2945         END IF;
2946     END IF;
2947 
2948     IF  p_MODIFIERS_rec.proration_type_code IS NOT NULL AND
2949         (   p_MODIFIERS_rec.proration_type_code <>
2950             p_old_MODIFIERS_rec.proration_type_code OR
2951             p_old_MODIFIERS_rec.proration_type_code IS NULL )
2952     THEN
2953         IF NOT QP_Validate.Proration_Type(p_MODIFIERS_rec.proration_type_code) THEN
2954             x_return_status := FND_API.G_RET_STS_ERROR;
2955         END IF;
2956     END IF;
2957 
2958     IF  p_MODIFIERS_rec.from_rltd_modifier_id IS NOT NULL AND
2959         (   p_MODIFIERS_rec.from_rltd_modifier_id <>
2960             p_old_MODIFIERS_rec.from_rltd_modifier_id OR
2961             p_old_MODIFIERS_rec.from_rltd_modifier_id IS NULL )
2962     THEN
2963         IF NOT QP_Validate.From_Rltd_Modifier(p_MODIFIERS_rec.from_rltd_modifier_id) THEN
2964             x_return_status := FND_API.G_RET_STS_ERROR;
2965         END IF;
2966     END IF;
2967 
2968     IF  p_MODIFIERS_rec.to_rltd_modifier_id IS NOT NULL AND
2969         (   p_MODIFIERS_rec.to_rltd_modifier_id <>
2970             p_old_MODIFIERS_rec.to_rltd_modifier_id OR
2971             p_old_MODIFIERS_rec.to_rltd_modifier_id IS NULL )
2972     THEN
2973         IF NOT QP_Validate.To_Rltd_Modifier(p_MODIFIERS_rec.to_rltd_modifier_id) THEN
2974             x_return_status := FND_API.G_RET_STS_ERROR;
2975         END IF;
2976     END IF;
2977 
2978     IF  p_MODIFIERS_rec.rltd_modifier_grp_no IS NOT NULL AND
2979         (   p_MODIFIERS_rec.rltd_modifier_grp_no <>
2980             p_old_MODIFIERS_rec.rltd_modifier_grp_no OR
2981             p_old_MODIFIERS_rec.rltd_modifier_grp_no IS NULL )
2982     THEN
2983         IF NOT QP_Validate.Rltd_Modifier_Grp_No(p_MODIFIERS_rec.rltd_modifier_grp_no) THEN
2984             x_return_status := FND_API.G_RET_STS_ERROR;
2985         END IF;
2986     END IF;
2987 
2988     IF  p_MODIFIERS_rec.rltd_modifier_grp_type IS NOT NULL AND
2989         (   p_MODIFIERS_rec.rltd_modifier_grp_type <>
2990             p_old_MODIFIERS_rec.rltd_modifier_grp_type OR
2991             p_old_MODIFIERS_rec.rltd_modifier_grp_type IS NULL )
2992     THEN
2993         IF NOT QP_Validate.Rltd_Modifier_Grp_Type(p_MODIFIERS_rec.rltd_modifier_grp_type) THEN
2994             x_return_status := FND_API.G_RET_STS_ERROR;
2995         END IF;
2996     END IF;
2997 
2998 --Item Amount
2999     IF  p_MODIFIERS_rec.net_amount_flag IS NOT NULL AND
3000         (   p_MODIFIERS_rec.net_amount_flag <>
3001             p_old_MODIFIERS_rec.net_amount_flag OR
3002             p_old_MODIFIERS_rec.net_amount_flag IS NULL )
3003     THEN
3004         IF NOT QP_Validate.Net_Amount(p_MODIFIERS_rec.net_amount_flag) THEN
3005             x_return_status := FND_API.G_RET_STS_ERROR;
3006         END IF;
3007     END IF;
3008 
3009 -- Accumulation of range breaks
3010     IF  p_MODIFIERS_rec.accum_attribute IS NOT NULL AND
3011         (   p_MODIFIERS_rec.accum_attribute <>
3012             p_old_MODIFIERS_rec.accum_attribute OR
3013             p_old_MODIFIERS_rec.accum_attribute IS NULL )
3014     THEN
3015         IF NOT QP_Validate.Accum_Attribute(p_MODIFIERS_rec.accum_attribute) THEN
3016             x_return_status := FND_API.G_RET_STS_ERROR;
3017         END IF;
3018     END IF;
3019 
3020 
3021 
3022 oe_debug_pub.add('here14');
3023     IF  (p_MODIFIERS_rec.attribute1 IS NOT NULL AND
3024         (   p_MODIFIERS_rec.attribute1 <>
3025             p_old_MODIFIERS_rec.attribute1 OR
3026             p_old_MODIFIERS_rec.attribute1 IS NULL ))
3027     OR  (p_MODIFIERS_rec.attribute10 IS NOT NULL AND
3028         (   p_MODIFIERS_rec.attribute10 <>
3029             p_old_MODIFIERS_rec.attribute10 OR
3030             p_old_MODIFIERS_rec.attribute10 IS NULL ))
3031     OR  (p_MODIFIERS_rec.attribute11 IS NOT NULL AND
3032         (   p_MODIFIERS_rec.attribute11 <>
3033             p_old_MODIFIERS_rec.attribute11 OR
3034             p_old_MODIFIERS_rec.attribute11 IS NULL ))
3035     OR  (p_MODIFIERS_rec.attribute12 IS NOT NULL AND
3036         (   p_MODIFIERS_rec.attribute12 <>
3037             p_old_MODIFIERS_rec.attribute12 OR
3038             p_old_MODIFIERS_rec.attribute12 IS NULL ))
3039     OR  (p_MODIFIERS_rec.attribute13 IS NOT NULL AND
3040         (   p_MODIFIERS_rec.attribute13 <>
3041             p_old_MODIFIERS_rec.attribute13 OR
3042             p_old_MODIFIERS_rec.attribute13 IS NULL ))
3043     OR  (p_MODIFIERS_rec.attribute14 IS NOT NULL AND
3044         (   p_MODIFIERS_rec.attribute14 <>
3045             p_old_MODIFIERS_rec.attribute14 OR
3046             p_old_MODIFIERS_rec.attribute14 IS NULL ))
3047     OR  (p_MODIFIERS_rec.attribute15 IS NOT NULL AND
3048         (   p_MODIFIERS_rec.attribute15 <>
3049             p_old_MODIFIERS_rec.attribute15 OR
3050             p_old_MODIFIERS_rec.attribute15 IS NULL ))
3051     OR  (p_MODIFIERS_rec.attribute2 IS NOT NULL AND
3052         (   p_MODIFIERS_rec.attribute2 <>
3053             p_old_MODIFIERS_rec.attribute2 OR
3054             p_old_MODIFIERS_rec.attribute2 IS NULL ))
3055     OR  (p_MODIFIERS_rec.attribute3 IS NOT NULL AND
3056         (   p_MODIFIERS_rec.attribute3 <>
3057             p_old_MODIFIERS_rec.attribute3 OR
3058             p_old_MODIFIERS_rec.attribute3 IS NULL ))
3059     OR  (p_MODIFIERS_rec.attribute4 IS NOT NULL AND
3060         (   p_MODIFIERS_rec.attribute4 <>
3061             p_old_MODIFIERS_rec.attribute4 OR
3062             p_old_MODIFIERS_rec.attribute4 IS NULL ))
3063     OR  (p_MODIFIERS_rec.attribute5 IS NOT NULL AND
3064         (   p_MODIFIERS_rec.attribute5 <>
3065             p_old_MODIFIERS_rec.attribute5 OR
3066             p_old_MODIFIERS_rec.attribute5 IS NULL ))
3067     OR  (p_MODIFIERS_rec.attribute6 IS NOT NULL AND
3068         (   p_MODIFIERS_rec.attribute6 <>
3069             p_old_MODIFIERS_rec.attribute6 OR
3070             p_old_MODIFIERS_rec.attribute6 IS NULL ))
3071     OR  (p_MODIFIERS_rec.attribute7 IS NOT NULL AND
3072         (   p_MODIFIERS_rec.attribute7 <>
3073             p_old_MODIFIERS_rec.attribute7 OR
3074             p_old_MODIFIERS_rec.attribute7 IS NULL ))
3075     OR  (p_MODIFIERS_rec.attribute8 IS NOT NULL AND
3076         (   p_MODIFIERS_rec.attribute8 <>
3077             p_old_MODIFIERS_rec.attribute8 OR
3078             p_old_MODIFIERS_rec.attribute8 IS NULL ))
3079     OR  (p_MODIFIERS_rec.attribute9 IS NOT NULL AND
3080         (   p_MODIFIERS_rec.attribute9 <>
3081             p_old_MODIFIERS_rec.attribute9 OR
3082             p_old_MODIFIERS_rec.attribute9 IS NULL ))
3083     OR  (p_MODIFIERS_rec.context IS NOT NULL AND
3084         (   p_MODIFIERS_rec.context <>
3085             p_old_MODIFIERS_rec.context OR
3086             p_old_MODIFIERS_rec.context IS NULL ))
3087     THEN
3088 
3089     --  These calls are temporarily commented out
3090 
3091 /*
3092         FND_FLEX_DESC_VAL.Set_Column_Value
3093         (   column_name                   => 'ATTRIBUTE1'
3094         ,   column_value                  => p_MODIFIERS_rec.attribute1
3095         );
3096         FND_FLEX_DESC_VAL.Set_Column_Value
3097         (   column_name                   => 'ATTRIBUTE10'
3098         ,   column_value                  => p_MODIFIERS_rec.attribute10
3099         );
3100         FND_FLEX_DESC_VAL.Set_Column_Value
3101         (   column_name                   => 'ATTRIBUTE11'
3102         ,   column_value                  => p_MODIFIERS_rec.attribute11
3103         );
3104         FND_FLEX_DESC_VAL.Set_Column_Value
3105         (   column_name                   => 'ATTRIBUTE12'
3106         ,   column_value                  => p_MODIFIERS_rec.attribute12
3107         );
3108         FND_FLEX_DESC_VAL.Set_Column_Value
3109         (   column_name                   => 'ATTRIBUTE13'
3110         ,   column_value                  => p_MODIFIERS_rec.attribute13
3111         );
3112         FND_FLEX_DESC_VAL.Set_Column_Value
3113         (   column_name                   => 'ATTRIBUTE14'
3114         ,   column_value                  => p_MODIFIERS_rec.attribute14
3115         );
3116         FND_FLEX_DESC_VAL.Set_Column_Value
3117         (   column_name                   => 'ATTRIBUTE15'
3118         ,   column_value                  => p_MODIFIERS_rec.attribute15
3119         );
3120         FND_FLEX_DESC_VAL.Set_Column_Value
3121         (   column_name                   => 'ATTRIBUTE2'
3122         ,   column_value                  => p_MODIFIERS_rec.attribute2
3123         );
3124         FND_FLEX_DESC_VAL.Set_Column_Value
3125         (   column_name                   => 'ATTRIBUTE3'
3126         ,   column_value                  => p_MODIFIERS_rec.attribute3
3127         );
3128         FND_FLEX_DESC_VAL.Set_Column_Value
3129         (   column_name                   => 'ATTRIBUTE4'
3130         ,   column_value                  => p_MODIFIERS_rec.attribute4
3131         );
3132         FND_FLEX_DESC_VAL.Set_Column_Value
3133         (   column_name                   => 'ATTRIBUTE5'
3134         ,   column_value                  => p_MODIFIERS_rec.attribute5
3135         );
3136         FND_FLEX_DESC_VAL.Set_Column_Value
3137         (   column_name                   => 'ATTRIBUTE6'
3138         ,   column_value                  => p_MODIFIERS_rec.attribute6
3139         );
3140         FND_FLEX_DESC_VAL.Set_Column_Value
3141         (   column_name                   => 'ATTRIBUTE7'
3142         ,   column_value                  => p_MODIFIERS_rec.attribute7
3143         );
3144         FND_FLEX_DESC_VAL.Set_Column_Value
3145         (   column_name                   => 'ATTRIBUTE8'
3146         ,   column_value                  => p_MODIFIERS_rec.attribute8
3147         );
3148         FND_FLEX_DESC_VAL.Set_Column_Value
3149         (   column_name                   => 'ATTRIBUTE9'
3150         ,   column_value                  => p_MODIFIERS_rec.attribute9
3151         );
3152         FND_FLEX_DESC_VAL.Set_Column_Value
3153         (   column_name                   => 'CONTEXT'
3154         ,   column_value                  => p_MODIFIERS_rec.context
3155         );
3156 */
3157 
3158         --  Validate descriptive flexfield.
3159 
3160         IF NOT QP_Validate.Desc_Flex( 'MODIFIERS' ) THEN
3161             x_return_status := FND_API.G_RET_STS_ERROR;
3162         END IF;
3163 
3164     END IF;
3165 
3166     --  Done validating attributes
3167 
3168 oe_debug_pub.add('END Attributes in QPXLMLLB');
3169 
3170 EXCEPTION
3171 
3172     WHEN FND_API.G_EXC_ERROR THEN
3173 
3174         x_return_status := FND_API.G_RET_STS_ERROR;
3175 
3176     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3177 
3178         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3179 
3180     WHEN OTHERS THEN
3181 
3182         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3183 
3184         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3185         THEN
3186             OE_MSG_PUB.Add_Exc_Msg
3187             (   G_PKG_NAME
3188             ,   'Attributes'
3189             );
3190         END IF;
3191 
3192 oe_debug_pub.add('EXP Attributes in QPXLMLLB');
3193 END Attributes;
3194 
3195 --  Procedure Entity_Delete
3196 
3197 PROCEDURE Entity_Delete
3198 (   x_return_status                 OUT NOCOPY VARCHAR2
3199 ,   p_MODIFIERS_rec                 IN  QP_Modifiers_PUB.Modifiers_Rec_Type
3200 )
3201 IS
3202 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
3203 BEGIN
3204 
3205 oe_debug_pub.add('BEGIN Entity_Delete in QPXLMLLB');
3206 
3207     --  Validate entity delete.
3208 
3209     NULL;
3210     -- Check whether Source System Code matches
3211     -- mkarya for bug 1728764, Prevent update of Trade Management Data in QP
3212     QP_UTIL.Check_Source_System_Code
3213                             (p_list_header_id => p_MODIFIERS_rec.list_header_id,
3214                              p_list_line_id   => p_MODIFIERS_rec.list_line_id,
3215                              x_return_status  => l_return_status
3216                             );
3217 
3218     --  Done.
3219 
3220     x_return_status := l_return_status;
3221 
3222 oe_debug_pub.add('BEGIN Entity_Delete in QPXLMLLB');
3223 
3224 EXCEPTION
3225 
3226     WHEN FND_API.G_EXC_ERROR THEN
3227 
3228         x_return_status := FND_API.G_RET_STS_ERROR;
3229 
3230     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3231 
3232         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3233 
3234     WHEN OTHERS THEN
3235 
3236         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3237 
3238         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3239         THEN
3240             OE_MSG_PUB.Add_Exc_Msg
3241             (   G_PKG_NAME
3242             ,   'Entity_Delete'
3243             );
3244         END IF;
3245 
3246 END Entity_Delete;
3247 
3248 END QP_Validate_Modifiers;