DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_VALIDATE_MODIFIERS

Source


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