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