DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_MODIFIERS_PVT

Source


1 PACKAGE BODY QP_Modifiers_PVT AS
2 /* $Header: QPXVMLSB.pls 120.7.12020000.3 2012/12/11 11:12:04 dnema ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'QP_Modifiers_PVT';
7 
8 
9 --- added by svdeshmu
10 
11 PROCEDURE  Get_Parent_List_Line_Id
12 (  p_child_list_line_id IN NUMBER
13  , x_parent_list_line_id out NOCOPY /* file.sql.39 change */ number
14  , x_list_line_type_code out NOCOPY /* file.sql.39 change */ varchar2
15  , x_status  out NOCOPY /* file.sql.39 change */ varchar2
16  ) IS
17 
18  cursor c_parent_list_line_id(p_child_list_line_id in number) is
19   SELECT from_rltd_modifier_id
20   FROM   QP_RLTD_MODIFIERS
21   WHERE  to_rltd_modifier_id = p_child_list_line_id;
22 
23  cursor c_parent_list_line_type_code(p_parent_list_line_id in number) is
24   SELECT list_line_type_code
25   FROM   QP_LIST_LINES
26   WHERE list_line_id = p_parent_list_line_id;
27 
28 
29   BEGIN
30 
31     OPEN  c_parent_list_line_id(p_child_list_line_id);
32     FETCH c_parent_list_line_id into x_parent_list_line_id;
33 
34     /* Added for 2634375 */
35     IF c_parent_list_line_id%notfound then
36         x_status :='F';
37     ELSE
38         x_status :='T';
39     END IF;
40 
41     CLOSE c_parent_list_line_id;
42 
43     --Commented out for 2634375
44 /*
45     IF SQL%NOTFOUND THEN
46 
47          x_status := 'F';
48     ELSE
49 
50          x_status := 'T';
51 */
52    IF x_status='T' then  --2634375
53          OPEN c_parent_list_line_type_code(x_parent_list_line_id);
54          FETCH c_parent_list_line_type_code into x_list_line_type_code;
55          CLOSE c_parent_list_line_type_code;
56 
57 
58     END IF;
59 
60  EXCEPTION
61 
62 	 WHEN NO_DATA_FOUND then
63 
64 		x_status := 'F';
65 
66  END Get_Parent_List_Line_Id;
67 
68 
69 --- end of additions by svdeshmu
70 
71 
72 --  Modifier_List
73 
74 PROCEDURE Modifier_List
75 (   p_validation_level              IN  NUMBER
76 ,   p_control_rec                   IN  QP_GLOBALS.Control_Rec_Type
77 ,   p_MODIFIER_LIST_rec             IN  QP_Modifiers_PUB.Modifier_List_Rec_Type
78 ,   p_old_MODIFIER_LIST_rec         IN  QP_Modifiers_PUB.Modifier_List_Rec_Type
79 ,   x_MODIFIER_LIST_rec             OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Modifier_List_Rec_Type
80 ,   x_old_MODIFIER_LIST_rec         OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Modifier_List_Rec_Type
81 )
82 IS
83 l_return_status               VARCHAR2(1);
84 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
85 l_MODIFIER_LIST_rec           QP_Modifiers_PUB.Modifier_List_Rec_Type := p_MODIFIER_LIST_rec;
86 l_p_MODIFIER_LIST_rec         QP_Modifiers_PUB.Modifier_List_Rec_Type := p_MODIFIER_LIST_rec;
87 l_old_MODIFIER_LIST_rec       QP_Modifiers_PUB.Modifier_List_Rec_Type := p_old_MODIFIER_LIST_rec;
88 BEGIN
89 
90     oe_debug_pub.add('BEGIN modifier list in Private');
91     --dbms_output.put_line('BEGIN modifier list in Private');
92 
93     --  Load API control record
94 
95     l_control_rec := QP_GLOBALS.Init_Control_Rec
96     (   p_operation     => l_MODIFIER_LIST_rec.operation
97     ,   p_control_rec   => p_control_rec
98     );
99 
100     --  Set record return status.
101 
102     l_MODIFIER_LIST_rec.return_status := FND_API.G_RET_STS_SUCCESS;
103 
104     --added for moac for BSA --fix for bug 4748511
105     if l_MODIFIER_LIST_rec.operation in (QP_GLOBALS.G_OPR_CREATE, QP_GLOBALS.G_OPR_UPDATE)
106     and l_control_rec.called_from_ui = 'N'
107     and l_MODIFIER_LIST_rec.list_source_code IS NOT NULL
108     --bug14758481
109     --and l_MODIFIER_LIST_rec.global_flag = 'N'
110      and (NVL(l_MODIFIER_LIST_rec.global_flag,'N') = 'N'
111          OR l_MODIFIER_LIST_rec.global_flag = FND_API.G_MISS_CHAR)
112     and nvl(QP_SECURITY.security_on, 'N') = 'N' then
113       l_MODIFIER_LIST_rec.global_flag := 'Y';
114       l_MODIFIER_LIST_rec.org_id := null;
115     end if;
116 
117     --  Prepare record.
118 
119     oe_debug_pub.add('Operation'||l_MODIFIER_LIST_rec.operation);
120     --dbms_output.put_line('Operation'||l_MODIFIER_LIST_rec.operation);
121     IF l_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
122 
123     oe_debug_pub.add('Private 01');
124     --dbms_output.put_line('Private 01');
125         l_MODIFIER_LIST_rec.db_flag := FND_API.G_FALSE;
126 
127         --  Set missing old record elements to NULL.
128 
129         l_old_MODIFIER_LIST_rec :=
130         QP_Modifier_List_Util.Convert_Miss_To_Null (l_old_MODIFIER_LIST_rec);
131 
132     oe_debug_pub.add('Private 02');
133     --dbms_output.put_line('Private 02');
134     ELSIF l_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_UPDATE
135     OR    l_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_DELETE
136     THEN
137 OE_Debug_Pub.add('update on header');
138     --dbms_output.put_line('update on header');
139         l_MODIFIER_LIST_rec.db_flag := FND_API.G_TRUE;
140 
141         --  Query Old if missing
142 
143         IF  l_old_MODIFIER_LIST_rec.list_header_id = FND_API.G_MISS_NUM
144         THEN
145 
146 OE_Debug_Pub.add('query'||to_char(l_modifier_list_rec.list_header_id));
147 --dbms_output.put_line('query'||to_char(l_modifier_list_rec.list_header_id));
148             l_old_MODIFIER_LIST_rec := QP_Modifier_List_Util.Query_Row
149             (   p_list_header_id              => l_MODIFIER_LIST_rec.list_header_id
150             );
151 
152 OE_Debug_Pub.add('query'||l_modifier_list_rec.version_no);
153         ELSE
154 
155             --  Set missing old record elements to NULL.
156 
157             l_old_MODIFIER_LIST_rec :=
158             QP_Modifier_List_Util.Convert_Miss_To_Null (l_old_MODIFIER_LIST_rec);
159 
160         END IF;
161 
162         --  Complete new record from old
163 
164         l_MODIFIER_LIST_rec := QP_Modifier_List_Util.Complete_Record
165         (   p_MODIFIER_LIST_rec           => l_MODIFIER_LIST_rec
166         ,   p_old_MODIFIER_LIST_rec       => l_old_MODIFIER_LIST_rec
167         );
168 OE_Debug_Pub.add('query'||l_modifier_list_rec.version_no);
169 
170     END IF;
171 
172     --  Attribute level validation.
173 
174     oe_debug_pub.add('Private 03');
175 
176     --dbms_output.put_line('just before if');
177 
178     IF l_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_CREATE
179     OR    l_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_UPDATE
180     OR    l_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
181 
182     oe_debug_pub.add('in Private 03');
183     IF  l_control_rec.default_attributes
184     OR  l_control_rec.change_attributes
185     THEN
186 
187     oe_debug_pub.add('if Private 03');
188         IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
189 
190     oe_debug_pub.add('2if Private 03');
191 OE_Debug_Pub.add('query'||l_modifier_list_rec.version_no);
192             QP_Validate_Modifier_List.Attributes
193             (   x_return_status               => l_return_status
194             ,   p_MODIFIER_LIST_rec           => l_MODIFIER_LIST_rec
195             ,   p_old_MODIFIER_LIST_rec       => l_old_MODIFIER_LIST_rec
196             );
197 
198 OE_Debug_Pub.add('query'||l_modifier_list_rec.version_no);
199             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
200                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
201             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
202                 RAISE FND_API.G_EXC_ERROR;
203             END IF;
204 
205         END IF;
206 
207     END IF;
208 
209     oe_debug_pub.add('Private 04');
210         --  Clear dependent attributes.
211 
212     IF  l_control_rec.change_attributes THEN
213 
214 OE_Debug_Pub.add('query'||l_modifier_list_rec.version_no);
215        l_p_MODIFIER_LIST_rec := l_MODIFIER_LIST_rec;
216         QP_Modifier_List_Util.Clear_Dependent_Attr
217         (   p_MODIFIER_LIST_rec           => l_p_MODIFIER_LIST_rec
218         ,   p_old_MODIFIER_LIST_rec       => l_old_MODIFIER_LIST_rec
219         ,   x_MODIFIER_LIST_rec           => l_MODIFIER_LIST_rec
220         );
221 
222 OE_Debug_Pub.add('query'||l_modifier_list_rec.version_no);
223     END IF;
224 
225     oe_debug_pub.add('Private 05');
226     --  Default missing attributes
227 
228     IF  l_control_rec.default_attributes
229     OR  l_control_rec.change_attributes
230     THEN
231 
232     oe_debug_pub.add('Private 05');
233         l_p_MODIFIER_LIST_rec := l_MODIFIER_LIST_rec;
234         QP_Default_Modifier_List.Attributes
235         (   p_MODIFIER_LIST_rec           => l_p_MODIFIER_LIST_rec
236         ,   x_MODIFIER_LIST_rec           => l_MODIFIER_LIST_rec
237         );
238 
239     END IF;
240 
241     oe_debug_pub.add('Private 05.1');
242     --  Apply attribute changes
243 
244     IF  l_control_rec.default_attributes
245     OR  l_control_rec.change_attributes
246     THEN
247 
248 OE_Debug_Pub.add('query'||l_modifier_list_rec.version_no);
249         l_p_MODIFIER_LIST_rec := l_MODIFIER_LIST_rec;
250         QP_Modifier_List_Util.Apply_Attribute_Changes
251         (   p_MODIFIER_LIST_rec           => l_p_MODIFIER_LIST_rec
252         ,   p_old_MODIFIER_LIST_rec       => l_old_MODIFIER_LIST_rec
253         ,   x_MODIFIER_LIST_rec           => l_MODIFIER_LIST_rec
254         );
255 
256 OE_Debug_Pub.add('query'||l_modifier_list_rec.version_no);
257     END IF;
258 
259     --  Entity level validation.
260 
261     IF l_control_rec.validate_entity THEN
262 
263         IF l_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
264 
265             QP_Validate_Modifier_List.Entity_Delete
266             (   x_return_status               => l_return_status
267             ,   p_MODIFIER_LIST_rec           => l_MODIFIER_LIST_rec
268             );
269 
270         ELSE
271 
272     oe_debug_pub.add('Private 06');
273             QP_Validate_Modifier_List.Entity
274             (   x_return_status               => l_return_status
275             ,   p_MODIFIER_LIST_rec           => l_MODIFIER_LIST_rec
276             ,   p_old_MODIFIER_LIST_rec       => l_old_MODIFIER_LIST_rec
277             );
278 OE_Debug_Pub.add('query'||l_modifier_list_rec.version_no);
279 null;
280 
281         END IF;
282 
283         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
284             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
285         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
286             RAISE FND_API.G_EXC_ERROR;
287         END IF;
288 
289     END IF;
290 
291     --  Step 4. Write to DB
292 
293     oe_debug_pub.add('Private 07');
294     IF l_control_rec.write_to_db THEN
295 
296         IF l_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
297 
298             FND_MESSAGE.SET_NAME('QP','QP_CANNOT_DELETE_MODIFIER');
299             OE_MSG_PUB.Add;
300 
301             RAISE FND_API.G_EXC_ERROR;
302 /*
303             QP_Modifier_List_Util.Delete_Row
304             (   p_list_header_id              => l_MODIFIER_LIST_rec.list_header_id
305             );
306 */
307         ELSE
308 
309             --  Get Who Information
310 
311             l_MODIFIER_LIST_rec.last_update_date := SYSDATE;
312             l_MODIFIER_LIST_rec.last_updated_by := FND_GLOBAL.USER_ID;
313             l_MODIFIER_LIST_rec.last_update_login := FND_GLOBAL.LOGIN_ID;
314 
315             IF l_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_UPDATE THEN
316 
317 OE_Debug_Pub.add('query'||p_modifier_list_rec.version_no);
318                 QP_Modifier_List_Util.Update_Row (l_MODIFIER_LIST_rec);
319 
320             ELSIF l_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
321 
322                 l_MODIFIER_LIST_rec.creation_date := SYSDATE;
323                 l_MODIFIER_LIST_rec.created_by := FND_GLOBAL.USER_ID;
324 
325                 QP_Modifier_List_Util.Insert_Row (l_MODIFIER_LIST_rec);
326 
327             END IF;
328 
329         END IF;
330 
331     END IF;
332 
333    END IF; -- For Operation create, update or delete
334 
335 
336     --  Load OUT parameters
337 
338     x_MODIFIER_LIST_rec            := l_MODIFIER_LIST_rec;
339     x_old_MODIFIER_LIST_rec        := l_old_MODIFIER_LIST_rec;
340 
341     oe_debug_pub.add('END modifier list in Private');
342     --dbms_output.put_line('END modifier list in Private');
343 EXCEPTION
344 
345     WHEN FND_API.G_EXC_ERROR THEN
346 
347         l_MODIFIER_LIST_rec.return_status := FND_API.G_RET_STS_ERROR;
348         x_MODIFIER_LIST_rec            := l_MODIFIER_LIST_rec;
349         x_old_MODIFIER_LIST_rec        := l_old_MODIFIER_LIST_rec;
350 
351         oe_debug_pub.add('manoj - value of called_from_ui before delete_reqs_for_deleted_entity = ' || l_control_rec.called_from_ui);
352         -- mkarya If process_modifiers has been called from public package, then ONLY call
353         -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
354         if l_control_rec.called_from_ui = 'N' then
355            qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
356 		(p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
357 		 p_entity_id => l_MODIFIER_LIST_rec.list_header_id,
358 		 x_return_status => l_return_status );
359         end if;
360 
361         RAISE;
362 
363     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
364 
365         l_MODIFIER_LIST_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
366         x_MODIFIER_LIST_rec            := l_MODIFIER_LIST_rec;
367         x_old_MODIFIER_LIST_rec        := l_old_MODIFIER_LIST_rec;
368 
369         -- mkarya If process_modifiers has been called from public package, then ONLY call
370         -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
371         if l_control_rec.called_from_ui = 'N' then
372            qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
373 		(p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
374 		 p_entity_id => l_MODIFIER_LIST_rec.list_header_id,
375 		 x_return_status => l_return_status );
376         end if;
377 
378         RAISE;
379 
380     WHEN OTHERS THEN
381 
382         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
383         THEN
384             OE_MSG_PUB.Add_Exc_Msg
385             (   G_PKG_NAME
386             ,   'Modifier_List'
387             );
388         END IF;
389 
390         l_MODIFIER_LIST_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
391         x_MODIFIER_LIST_rec            := l_MODIFIER_LIST_rec;
392         x_old_MODIFIER_LIST_rec        := l_old_MODIFIER_LIST_rec;
393 
394         -- mkarya If process_modifiers has been called from public package, then ONLY call
395         -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
396         if l_control_rec.called_from_ui = 'N' then
397            qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
398 		(p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
399 		 p_entity_id => l_MODIFIER_LIST_rec.list_header_id,
400 		 x_return_status => l_return_status );
401         end if;
402 
403         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
404 
405 END Modifier_List;
406 
407 --  Modifierss
408 
409 PROCEDURE Modifierss
410 (   p_validation_level              IN  NUMBER
411 ,   p_control_rec                   IN  QP_GLOBALS.Control_Rec_Type
412 ,   p_MODIFIERS_tbl                 IN  QP_Modifiers_PUB.Modifiers_Tbl_Type
413 ,   p_old_MODIFIERS_tbl             IN  QP_Modifiers_PUB.Modifiers_Tbl_Type
414 ,   x_MODIFIERS_tbl                 OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Modifiers_Tbl_Type
415 ,   x_old_MODIFIERS_tbl             OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Modifiers_Tbl_Type
416 )
417 IS
418 l_return_status               VARCHAR2(1);
419 l_rltd_modifiers_s            NUMBER;
420 l_to_rltd_modifier_id         NUMBER;
421 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
422 l_MODIFIERS_rec               QP_Modifiers_PUB.Modifiers_Rec_Type;
423 l_p_MODIFIERS_rec             QP_Modifiers_PUB.Modifiers_Rec_Type;
424 l_MODIFIERS_tbl               QP_Modifiers_PUB.Modifiers_Tbl_Type;
425 l_old_MODIFIERS_rec           QP_Modifiers_PUB.Modifiers_Rec_Type;
426 l_old_MODIFIERS_tbl           QP_Modifiers_PUB.Modifiers_Tbl_Type;
427 l_product_attribute			varchar2(30) := null;
428 l_product_attr_value		varchar2(240) := null;
429 l_pricing_phase_id			number;
430 
431 BEGIN
432 
433     oe_debug_pub.add('BEGIN modifierss in Private');
434     --dbms_output.put_line('BEGIN modifierss in Private');
435     --  Init local table variables.
436 
437     l_MODIFIERS_tbl                := p_MODIFIERS_tbl;
438     l_old_MODIFIERS_tbl            := p_old_MODIFIERS_tbl;
439 
440     FOR I IN 1..l_MODIFIERS_tbl.COUNT LOOP
441     BEGIN
442 
443         l_MODIFIERS_rec := l_MODIFIERS_tbl(I);
444 
445 	--hw
446 	-- delayed request for changed lines
447 	if QP_PERF_PVT.enabled = 'Y' then
448 	if (l_MODIFIERS_rec.operation = OE_GLOBALS.G_OPR_CREATE
449 		and (l_MODIFIERS_rec.list_line_type_code in ('OID', 'PRG', 'RLTD')
450 			or l_MODIFIERS_rec.modifier_level_code = 'LINEGROUP'
451 			or (l_MODIFIERS_rec.rltd_modifier_grp_type = 'BENEFIT'
452 				and l_MODIFIERS_rec.list_line_type_code = 'DIS'))) then
453 
454  		qp_delayed_requests_pvt.log_request(
455           	p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
456        	  	p_entity_id => l_MODIFIERS_rec.list_line_id,
457           	p_requesting_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
458           	p_requesting_entity_id => l_MODIFIERS_rec.list_line_id,
459           	p_request_type => QP_GLOBALS.G_UPDATE_CHANGED_LINES_ADD,
460        	  	p_param1 => l_MODIFIERS_rec.pricing_phase_id,
461        	  	p_param2 => l_MODIFIERS_rec.list_header_id,
462           	x_return_status => l_return_status);
463 
464 	end if;
465 	end if;
466 
467         --  Load local records.
468 
469         IF l_old_MODIFIERS_tbl.EXISTS(I) THEN
470             l_old_MODIFIERS_rec := l_old_MODIFIERS_tbl(I);
471         ELSE
472             l_old_MODIFIERS_rec := QP_Modifiers_PUB.G_MISS_MODIFIERS_REC;
473         END IF;
474 
475         --  Load API control record
476 
477         l_control_rec := QP_GLOBALS.Init_Control_Rec
478         (   p_operation     => l_MODIFIERS_rec.operation
479         ,   p_control_rec   => p_control_rec
480         );
481 
482         --  Set record return status.
483 
484         l_MODIFIERS_rec.return_status  := FND_API.G_RET_STS_SUCCESS;
485 
486         --  Prepare record.
487 
488         IF l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
489 
490             l_MODIFIERS_rec.db_flag := FND_API.G_FALSE;
491 
492             --  Set missing old record elements to NULL.
493 
494             l_old_MODIFIERS_rec :=
495             QP_Modifiers_Util.Convert_Miss_To_Null (l_old_MODIFIERS_rec);
496 
497         ELSIF l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_UPDATE
498         OR    l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_DELETE
499         THEN
500 
501             l_MODIFIERS_rec.db_flag := FND_API.G_TRUE;
502 
503             --  Query Old if missing
504 
505             IF  l_old_MODIFIERS_rec.list_line_id = FND_API.G_MISS_NUM
506             THEN
507 
508                 l_old_MODIFIERS_rec := QP_Modifiers_Util.Query_Row
509                 (   p_list_line_id                => l_MODIFIERS_rec.list_line_id
510                 );
511 
512             ELSE
513 
514                 --  Set missing old record elements to NULL.
515 
516                 l_old_MODIFIERS_rec :=
517                 QP_Modifiers_Util.Convert_Miss_To_Null (l_old_MODIFIERS_rec);
518 
519             END IF;
520 
521             --  Complete new record from old
522 
523             l_MODIFIERS_rec := QP_Modifiers_Util.Complete_Record
524             (   p_MODIFIERS_rec               => l_MODIFIERS_rec
525             ,   p_old_MODIFIERS_rec           => l_old_MODIFIERS_rec
526             );
527 
528         END IF;
529 
530         --  Attribute level validation.
531 
532     IF l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_CREATE
533     OR    l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_UPDATE
534     OR    l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
535 
536         IF  l_control_rec.default_attributes
537         OR  l_control_rec.change_attributes
538         THEN
539 
540             IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
541 
542                 QP_Validate_Modifiers.Attributes
543                 (   x_return_status               => l_return_status
544                 ,   p_MODIFIERS_rec               => l_MODIFIERS_rec
545                 ,   p_old_MODIFIERS_rec           => l_old_MODIFIERS_rec
546                 );
547 
548                 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
549                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
550                 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
551                     RAISE FND_API.G_EXC_ERROR;
552                 END IF;
553 
554             END IF;
555 
556         END IF;
557 
558 --dbms_output.put_line('here 1');
559             --  Clear dependent attributes.
560 
561         IF  l_control_rec.change_attributes THEN
562             l_p_MODIFIERS_rec := l_MODIFIERS_rec;
563             QP_Modifiers_Util.Clear_Dependent_Attr
564             (   p_MODIFIERS_rec               => l_p_MODIFIERS_rec
565             ,   p_old_MODIFIERS_rec           => l_old_MODIFIERS_rec
566             ,   x_MODIFIERS_rec               => l_MODIFIERS_rec
567             );
568 
569         END IF;
570 
571         --  Default missing attributes
572 
573     oe_debug_pub.add('from id = '|| to_char(l_MODIFIERS_rec.from_rltd_modifier_id) );
574         IF  l_control_rec.default_attributes
575         OR  l_control_rec.change_attributes
576         THEN
577 
578     oe_debug_pub.add('before default atributeeee');
579             l_p_MODIFIERS_rec := l_MODIFIERS_rec;
580             QP_Default_Modifiers.Attributes
581             (   p_MODIFIERS_rec               => l_p_MODIFIERS_rec
582             ,   x_MODIFIERS_rec               => l_MODIFIERS_rec
583             );
584 
585         END IF;
586 
587     oe_debug_pub.add('after from id = '|| to_char(l_MODIFIERS_rec.from_rltd_modifier_id) );
588 --dbms_output.put_line('here 2');
589         --  Apply attribute changes
590 
591         IF  l_control_rec.default_attributes
592         OR  l_control_rec.change_attributes
593         THEN
594             l_p_MODIFIERS_rec := l_MODIFIERS_rec;
595             QP_Modifiers_Util.Apply_Attribute_Changes
596             (   p_MODIFIERS_rec               => l_p_MODIFIERS_rec
597             ,   p_old_MODIFIERS_rec           => l_old_MODIFIERS_rec
598             ,   x_MODIFIERS_rec               => l_MODIFIERS_rec
599             );
600 
601         END IF;
602 
603         --  Entity level validation.
604 
605     oe_debug_pub.add('after apply from id = '|| to_char(l_MODIFIERS_rec.from_rltd_modifier_id) );
606 --dbms_output.put_line('here 3');
607         IF l_control_rec.validate_entity THEN
608 
609             IF l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
610 
611                 QP_Validate_Modifiers.Entity_Delete
612                 (   x_return_status               => l_return_status
613                 ,   p_MODIFIERS_rec               => l_MODIFIERS_rec
614                 );
615 
616             ELSE
617 
618 -- Vivek
619 
620 		    --dbms_output.put_line('before if');
621 
622 		   IF ((l_MODIFIERS_rec.modifier_parent_index IS NOT NULL)
623 		   AND (l_MODIFIERS_rec.modifier_parent_index <> FND_API.G_MISS_NUM)
624 		   AND l_MODIFIERS_rec.list_line_type_code not in ('PBH', 'OID','PRG')
625 		   AND l_MODIFIERS_tbl(l_MODIFIERS_rec.modifier_parent_index).list_line_type_code IN ('PBH', 'OID', 'PRG')) THEN
626 
627 		    --dbms_output.put_line('inside if');
628 		    oe_debug_pub.add('in if');
629 
630 		   	l_MODIFIERS_rec.from_rltd_modifier_id :=
631 			l_MODIFIERS_tbl(l_MODIFIERS_rec.modifier_parent_index).list_line_id;
632 
633 		        l_MODIFIERS_rec.to_rltd_modifier_id := l_MODIFIERS_rec.list_line_id;
634 
635                    ELSIF   l_MODIFIERS_rec.list_line_type_code = 'CIE'
636                    THEN
637 
638                        l_MODIFIERS_rec.rltd_modifier_grp_type := 'COUPON';
639 		       l_MODIFIERS_rec.from_rltd_modifier_id := l_MODIFIERS_rec.list_line_id;
640 
641 			ELSIF l_MODIFIERS_rec.modifier_parent_index IS NULL OR
642 				l_MODIFIERS_rec.modifier_parent_index = FND_API.G_MISS_NUM THEN
643 			--added this else clause for CRM requirement bug 1615344
644 
645 		    --dbms_output.put_line('inside elsif');
646 			l_MODIFIERS_rec.to_rltd_modifier_id := l_MODIFIERS_rec.list_line_id;
647                    END IF;
648 
649 		    --dbms_output.put_line('after elsif');
650 -- Vivek
651 
652                 QP_Validate_Modifiers.Entity
653                 (   x_return_status               => l_return_status
654                 ,   p_MODIFIERS_rec               => l_MODIFIERS_rec
655                 ,   p_old_MODIFIERS_rec           => l_old_MODIFIERS_rec
656                 );
657 			 null;
658 
659             END IF;
660 
661     oe_debug_pub.add('after entity del from id = '|| to_char(l_MODIFIERS_rec.from_rltd_modifier_id) );
662             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
663                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
664             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
665                 RAISE FND_API.G_EXC_ERROR;
666             END IF;
667 
668         END IF;
669 
670 
671         IF l_control_rec.write_to_db THEN
672 		oe_debug_pub.add('Pre-write modifierss');
673            null;
674                                   l_p_MODIFIERS_rec := l_MODIFIERS_rec;
675 				   QP_MODIFIERS_UTIL.PRE_WRITE_PROCESS
676 					( p_MODIFIERS_rec      => l_p_MODIFIERS_rec
677 					, p_old_MODIFIERS_rec  => l_old_MODIFIERS_rec
678 					, x_MODIFIERS_rec      => l_MODIFIERS_rec);
679 	   END IF;
680 
681 
682 
683 
684         --  Step 4. Write to DB
685 --dbms_output.put_line('here 4');
686     oe_debug_pub.add('after step 4 from id = '|| to_char(l_MODIFIERS_rec.from_rltd_modifier_id) );
687         IF l_control_rec.write_to_db THEN
688 
689             IF l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
690 
691     oe_debug_pub.add('from id = '|| to_char(l_MODIFIERS_rec.from_rltd_modifier_id) );
692               IF  l_MODIFIERS_rec.from_rltd_modifier_id = FND_API.G_MISS_NUM
693 		    AND l_MODIFIERS_rec.list_line_type_code <> 'PMR'
694 
695 		    THEN
696 
697                  FND_MESSAGE.SET_NAME('QP','QP_CANNOT_DELETE_MODIFIER_LIST');
698                  OE_MSG_PUB.Add;
699 
700                  RAISE FND_API.G_EXC_ERROR;
701               ELSE
702 
703     oe_debug_pub.add('just before deleteee');
704                 QP_Modifiers_Util.Delete_Row
705                 (   p_list_line_id                => l_MODIFIERS_rec.list_line_id
706                 );
707 
708               --- Code for delete ends here. Log delayed service request here.
709                qp_delayed_requests_PVT.log_request(
710                  p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
711                  p_param1 => l_modifiers_rec.list_header_id,
712    	            p_entity_id  => l_modifiers_rec.list_line_id,
713                  p_requesting_entity_code=> QP_GLOBALS.G_ENTITY_MODIFIERS,
714                  p_requesting_entity_id => l_modifiers_rec.list_line_id,
715                  p_request_type =>QP_GLOBALS.G_MAINTAIN_LIST_HEADER_PHASES,
716                  x_return_status => l_return_status);
717 
718               END IF;
719 
720             ELSE
721 
722 --dbms_output.put_line('oper = ' || l_MODIFIERS_rec.operation);
723                 --  Get Who Information
724 
725                 l_MODIFIERS_rec.last_update_date := SYSDATE;
726                 l_MODIFIERS_rec.last_updated_by := FND_GLOBAL.USER_ID;
727                 l_MODIFIERS_rec.last_update_login := FND_GLOBAL.LOGIN_ID;
728 
729                 IF l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_UPDATE THEN
730 
731                     QP_Modifiers_Util.Update_Row (l_MODIFIERS_rec);
732 
733                     -- julin (3411436): updating qp_rltd_modifiers
734                     IF   l_MODIFIERS_rec.from_rltd_modifier_id IS NOT NULL
735                     AND  l_MODIFIERS_rec.list_line_id IS NOT NULL
736                     AND  l_MODIFIERS_rec.rltd_modifier_grp_no  IS NOT NULL
737                     AND  l_MODIFIERS_rec.rltd_modifier_grp_type  IS NOT NULL
738 				THEN
739 
740 
741                     oe_debug_pub.add('just before update');
742 
743                                 QP_RLTD_MODIFIER_PVT.Update_Row(
744                                l_MODIFIERS_rec.RLTD_MODIFIER_ID
745 						 , l_MODIFIERS_rec.creation_date
746                                , l_MODIFIERS_rec.created_by
747                                , l_MODIFIERS_rec.last_update_date
748                                , l_MODIFIERS_rec.last_updated_by
749                                , l_MODIFIERS_rec.last_update_login
750                                , l_MODIFIERS_rec.rltd_modifier_grp_no
751                                , l_MODIFIERS_rec.from_rltd_modifier_id
752 						 , l_MODIFIERS_rec.to_rltd_modifier_id
753                                , l_MODIFIERS_rec.rltd_modifier_grp_type
754                                , null
755                                , null
756                                , null
757                                , null
758                                , null
759                                , null
760                                , null
761                                , null
762                                , null
763                                , null
764                                , null
765                                , null
766                                , null
767                                , null
768                                , null
769                                , null
770                                );
771 
772                qp_delayed_requests_PVT.log_request(
773                  p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
774    	         p_entity_id  => l_modifiers_rec.list_line_id,
775                  p_requesting_entity_code=> QP_GLOBALS.G_ENTITY_MODIFIERS,
776                  p_requesting_entity_id => l_modifiers_rec.list_line_id,
777                  p_request_type =>QP_GLOBALS.G_UPDATE_LINE_QUAL_IND,
778                  x_return_status => l_return_status);
779 
780                      END IF;
781 
782                 ELSIF l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
783 
784                     l_MODIFIERS_rec.creation_date  := SYSDATE;
785                     l_MODIFIERS_rec.created_by     := FND_GLOBAL.USER_ID;
786 
787 --dbms_output.put_line('just before insert');
788              oe_debug_pub.add('list before  = ' || to_char(l_MODIFIERS_rec.list_line_id));
789              oe_debug_pub.add('to before = ' || to_char(l_MODIFIERS_rec.to_rltd_modifier_id));
790                     QP_Modifiers_Util.Insert_Row (l_MODIFIERS_rec);
791 
792                 oe_debug_pub.add('from id= '||to_char(l_MODIFIERS_rec.from_rltd_modifier_id));
793                 oe_debug_pub.add('grp no= '||to_char(l_MODIFIERS_rec.rltd_modifier_grp_no));
794 
795 
796 -- For Coupon Issue, the to_rltd_modifier_id is the list_line_id of the benefit modifier.
797 -- So, to_rltd_modifier_id is passed from the form to the BOI. For all other types of
798 -- modifiers, the to_rltd_modifier_id is the same as the list_line_id of the current
799 -- record. This is a CRM requirement
800 /*
801                     IF   l_MODIFIERS_rec.list_line_type_code = 'CIE'
802                     THEN
803 
804                        l_MODIFIERS_rec.rltd_modifier_grp_type := 'COUPON';
805 --				   l_to_rltd_modifier_id := l_MODIFIERS_rec.to_rltd_modifier_id;
806 
807                     ELSE
808 
809 				   l_MODIFIERS_rec.to_rltd_modifier_id := l_MODIFIERS_rec.list_line_id;
810 
811                     END IF;
812 
813              oe_debug_pub.add('list type = ' || l_MODIFIERS_rec.list_line_type_code);
814              oe_debug_pub.add('from = ' || to_char(l_MODIFIERS_rec.from_rltd_modifier_id));
815              oe_debug_pub.add('list after  = ' || to_char(l_MODIFIERS_rec.list_line_id));
816              oe_debug_pub.add('to after = ' || to_char(l_MODIFIERS_rec.to_rltd_modifier_id));
817              oe_debug_pub.add('grp_no = ' || to_char(l_MODIFIERS_rec.rltd_modifier_grp_no));
818              oe_debug_pub.add('grp_type = ' || l_MODIFIERS_rec.rltd_modifier_grp_type);
819              oe_debug_pub.add('parent index = ' || l_MODIFIERS_rec.modifier_parent_index);
820 
821 
822 
823 		   IF ((l_MODIFIERS_rec.modifier_parent_index IS NOT NULL)
824 		   AND (l_MODIFIERS_rec.modifier_parent_index <> FND_API.G_MISS_NUM)
825 		   AND l_MODIFIERS_rec.list_line_type_code not in ('PBH', 'OID','PRG')
826 		   AND l_MODIFIERS_tbl(l_MODIFIERS_rec.modifier_parent_index).list_line_type_code IN ('PBH', 'OID', 'PRG')) THEN
827 
828 		    --dbms_output.put_line('inside if');
829 		    oe_debug_pub.add('in if');
830 
831 		   		l_MODIFIERS_rec.from_rltd_modifier_id :=
832 					l_MODIFIERS_tbl(l_MODIFIERS_rec.modifier_parent_index).list_line_id;
833 
834 		   END IF;
835 */
836   		--dbms_output.put_line('type  = '||l_MODIFIERS_rec.list_line_type_code);
837   		--dbms_output.put_line('from pri = '||to_char(l_MODIFIERS_rec.from_rltd_modifier_id));
838 
839 
840                 oe_debug_pub.add('before insert');
841 
842                     IF   l_MODIFIERS_rec.from_rltd_modifier_id IS NOT NULL
843                     AND  l_MODIFIERS_rec.list_line_id IS NOT NULL
844                     AND  l_MODIFIERS_rec.rltd_modifier_grp_no  IS NOT NULL
845                     AND  l_MODIFIERS_rec.rltd_modifier_grp_type  IS NOT NULL
846 				THEN
847 
848 				select QP_RLTD_MODIFIERS_S.nextval
849 				into   l_rltd_modifiers_s from dual;
850 
851 
852                 oe_debug_pub.add('just before insert');
853                 --dbms_output.put_line('just before insert in rltd'||nvl(to_char(l_MODIFIERS_rec.to_rltd_modifier_id), 'aaa'));
854 
855                                 QP_RLTD_MODIFIER_PVT.Insert_Row(
856                                 l_rltd_modifiers_s
857 						 , l_MODIFIERS_rec.creation_date
858                                , l_MODIFIERS_rec.created_by
859                                , l_MODIFIERS_rec.last_update_date
860                                , l_MODIFIERS_rec.last_updated_by
861                                , l_MODIFIERS_rec.last_update_login
862                                , l_MODIFIERS_rec.rltd_modifier_grp_no
863                                , l_MODIFIERS_rec.from_rltd_modifier_id
864 						 , l_MODIFIERS_rec.to_rltd_modifier_id
865                                , l_MODIFIERS_rec.rltd_modifier_grp_type
866                                , null
867                                , null
868                                , null
869                                , null
870                                , null
871                                , null
872                                , null
873                                , null
874                                , null
875                                , null
876                                , null
877                                , null
878                                , null
879                                , null
880                                , null
881                                , null
882                                );
883 
884                qp_delayed_requests_PVT.log_request(
885                  p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
886    	         p_entity_id  => l_modifiers_rec.list_line_id,
887                  p_requesting_entity_code=> QP_GLOBALS.G_ENTITY_MODIFIERS,
888                  p_requesting_entity_id => l_modifiers_rec.list_line_id,
889                  p_request_type =>QP_GLOBALS.G_UPDATE_LINE_QUAL_IND,
890                  x_return_status => l_return_status);
891 
892                      END IF; -- related lines
893 
894                  END IF; -- G_OPR_CREATE
895               --- Code for update an create ends here. Log delayed servuce request here.
896 
897                  qp_delayed_requests_PVT.log_request(
898                    p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
899    	              p_entity_id  => l_modifiers_rec.list_line_id,
900                    p_param1 => l_modifiers_rec.list_header_id,
901                    p_requesting_entity_code=> QP_GLOBALS.G_ENTITY_MODIFIERS,
902                    p_requesting_entity_id => l_modifiers_rec.list_line_id,
903                    p_request_type =>QP_GLOBALS.G_MAINTAIN_LIST_HEADER_PHASES,
904                    x_return_status => l_return_status);
905 
906                  END IF;
907 
908         END IF;
909 
910     END IF; -- For Operation Create, Update or Delete
911 
912         --  Load tables.
913 
914         l_MODIFIERS_tbl(I)             := l_MODIFIERS_rec;
915         l_old_MODIFIERS_tbl(I)         := l_old_MODIFIERS_rec;
916 
917     --  For loop exception handler.
918 
919 
920     EXCEPTION
921 
922         WHEN FND_API.G_EXC_ERROR THEN
923 
924             l_MODIFIERS_rec.return_status  := FND_API.G_RET_STS_ERROR;
925             l_MODIFIERS_tbl(I)             := l_MODIFIERS_rec;
926             l_old_MODIFIERS_tbl(I)         := l_old_MODIFIERS_rec;
927 
928             -- mkarya If process_modifiers has been called from public package, then ONLY call
929             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
930             if l_control_rec.called_from_ui = 'N' then
931                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
932 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
933 			p_entity_id => l_MODIFIERS_rec.list_line_id,
934 			x_return_status => l_return_status );
935 
936                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
937 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
938 			p_entity_id => l_MODIFIERS_rec.list_line_id,
939 			x_return_status => l_return_status );
940 
941                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
942 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
943 			p_entity_id => l_MODIFIERS_rec.list_header_id,
944 			x_return_status => l_return_status );
945 
946                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
947 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
948 			p_entity_id => l_MODIFIERS_rec.list_line_id,
949 			x_return_status => l_return_status );
950             end if;
951 
952             -- mkarya for bug 1728764, so that the exception is handled by the calling function.
953             RAISE;
954 
955         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
956 
957             l_MODIFIERS_rec.return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
958             l_MODIFIERS_tbl(I)             := l_MODIFIERS_rec;
959             l_old_MODIFIERS_tbl(I)         := l_old_MODIFIERS_rec;
960 
961             -- mkarya If process_modifiers has been called from public package, then ONLY call
962             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
963             if l_control_rec.called_from_ui = 'N' then
964                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
965 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
966 			p_entity_id => l_MODIFIERS_rec.list_line_id,
967 			x_return_status => l_return_status );
968 
969                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
970 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
971 			p_entity_id => l_MODIFIERS_rec.list_line_id,
972 			x_return_status => l_return_status );
973 
974                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
975 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
976 			p_entity_id => l_MODIFIERS_rec.list_header_id,
977 			x_return_status => l_return_status );
978 
979                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
980 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
981 			p_entity_id => l_MODIFIERS_rec.list_line_id,
982 			x_return_status => l_return_status );
983             end if;
984 
985             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
986 
987         WHEN OTHERS THEN
988 
989             l_MODIFIERS_rec.return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
990             l_MODIFIERS_tbl(I)             := l_MODIFIERS_rec;
991             l_old_MODIFIERS_tbl(I)         := l_old_MODIFIERS_rec;
992 
993             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
994             THEN
995                 OE_MSG_PUB.Add_Exc_Msg
996                 (   G_PKG_NAME
997                 ,   'Modifierss'
998                 );
999             END IF;
1000 
1001             -- mkarya If process_modifiers has been called from public package, then ONLY call
1002             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1003             if l_control_rec.called_from_ui = 'N' then
1004                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1005 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1006 			p_entity_id => l_MODIFIERS_rec.list_line_id,
1007 			x_return_status => l_return_status );
1008 
1009                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1010 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
1011 			p_entity_id => l_MODIFIERS_rec.list_line_id,
1012 			x_return_status => l_return_status );
1013 
1014                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1015 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
1016 			p_entity_id => l_MODIFIERS_rec.list_header_id,
1017 			x_return_status => l_return_status );
1018 
1019                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1020 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
1021 			p_entity_id => l_MODIFIERS_rec.list_line_id,
1022 			x_return_status => l_return_status );
1023             end if;
1024 
1025             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1026 
1027     END;
1028     END LOOP;
1029 
1030     --  Load OUT parameters
1031 
1032     x_MODIFIERS_tbl                := l_MODIFIERS_tbl;
1033     x_old_MODIFIERS_tbl            := l_old_MODIFIERS_tbl;
1034 
1035     oe_debug_pub.add('END modifierss in Private');
1036 EXCEPTION
1037 
1038     WHEN FND_API.G_EXC_ERROR THEN
1039 
1040         RAISE;
1041 
1042     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1043 
1044 
1045         RAISE;
1046 
1047     WHEN OTHERS THEN
1048 
1049         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1050         THEN
1051             OE_MSG_PUB.Add_Exc_Msg
1052             (   G_PKG_NAME
1053             ,   'Modifierss'
1054             );
1055         END IF;
1056 
1057 
1058         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1059 
1060 END Modifierss;
1061 
1062 --  Qualifierss
1063 
1064 PROCEDURE Qualifierss
1065 (   p_validation_level              IN  NUMBER
1066 ,   p_control_rec                   IN  QP_GLOBALS.Control_Rec_Type
1067 ,   p_QUALIFIERS_tbl                IN  QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type
1068 ,   p_old_QUALIFIERS_tbl            IN  QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type
1069 ,   x_QUALIFIERS_tbl                OUT NOCOPY /* file.sql.39 change */ QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type
1070 ,   x_old_QUALIFIERS_tbl            OUT NOCOPY /* file.sql.39 change */ QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type
1071 )
1072 IS
1073 l_return_status               VARCHAR2(1);
1074 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
1075 l_QUALIFIERS_rec              QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
1076 l_p_QUALIFIERS_rec            QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
1077 l_QUALIFIERS_tbl              QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
1078 l_old_QUALIFIERS_rec          QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
1079 l_old_QUALIFIERS_tbl          QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
1080 BEGIN
1081 
1082     oe_debug_pub.add('BEGIN qualifierss in Private');
1083     --  Init local table variables.
1084 
1085     l_QUALIFIERS_tbl               := p_QUALIFIERS_tbl;
1086     l_old_QUALIFIERS_tbl           := p_old_QUALIFIERS_tbl;
1087 
1088     FOR I IN 1..l_QUALIFIERS_tbl.COUNT LOOP
1089     BEGIN
1090 
1091         --  Load local records.
1092 
1093         l_QUALIFIERS_rec := l_QUALIFIERS_tbl(I);
1094 
1095         IF l_old_QUALIFIERS_tbl.EXISTS(I) THEN
1096             l_old_QUALIFIERS_rec := l_old_QUALIFIERS_tbl(I);
1097         ELSE
1098             l_old_QUALIFIERS_rec := QP_Qualifier_Rules_PUB.G_MISS_QUALIFIERS_REC;
1099         END IF;
1100 
1101         --  Load API control record
1102 
1103         l_control_rec := QP_GLOBALS.Init_Control_Rec
1104         (   p_operation     => l_QUALIFIERS_rec.operation
1105         ,   p_control_rec   => p_control_rec
1106         );
1107 
1108         --  Set record return status.
1109 
1110         l_QUALIFIERS_rec.return_status := FND_API.G_RET_STS_SUCCESS;
1111 
1112         --  Prepare record.
1113 
1114         IF l_QUALIFIERS_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
1115 
1116     oe_debug_pub.add('test01');
1117             l_QUALIFIERS_rec.db_flag := FND_API.G_FALSE;
1118 
1119             --  Set missing old record elements to NULL.
1120 
1121             l_old_QUALIFIERS_rec :=
1122             QP_Qualifiers_Util.Convert_Miss_To_Null (l_old_QUALIFIERS_rec);
1123 
1124         ELSIF l_QUALIFIERS_rec.operation = QP_GLOBALS.G_OPR_UPDATE
1125         OR    l_QUALIFIERS_rec.operation = QP_GLOBALS.G_OPR_DELETE
1126         THEN
1127 
1128             l_QUALIFIERS_rec.db_flag := FND_API.G_TRUE;
1129 
1130             --  Query Old if missing
1131 
1132             IF  l_old_QUALIFIERS_rec.qualifier_id = FND_API.G_MISS_NUM
1133             THEN
1134 
1135                 l_old_QUALIFIERS_rec := QP_Qualifiers_Util.Query_Row
1136                 (   p_qualifier_id                => l_QUALIFIERS_rec.qualifier_id
1137                 );
1138 
1139             ELSE
1140 
1141                 --  Set missing old record elements to NULL.
1142 
1143                 l_old_QUALIFIERS_rec :=
1144                 QP_Qualifiers_Util.Convert_Miss_To_Null (l_old_QUALIFIERS_rec);
1145 
1146             END IF;
1147 
1148             --  Complete new record from old
1149 
1150     oe_debug_pub.add('before complete rec ');
1151             l_QUALIFIERS_rec := QP_Qualifiers_Util.Complete_Record
1152             (   p_QUALIFIERS_rec              => l_QUALIFIERS_rec
1153             ,   p_old_QUALIFIERS_rec          => l_old_QUALIFIERS_rec
1154             );
1155 
1156         END IF;
1157 
1158         --  Attribute level validation.
1159 
1160         IF  l_control_rec.default_attributes
1161         OR  l_control_rec.change_attributes
1162         THEN
1163 
1164             IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
1165 
1166     oe_debug_pub.add('before validate qual');
1167                 QP_Validate_Qualifiers.Attributes
1168                 (   x_return_status               => l_return_status
1169                 ,   p_QUALIFIERS_rec              => l_QUALIFIERS_rec
1170                 ,   p_old_QUALIFIERS_rec          => l_old_QUALIFIERS_rec
1171                 );
1172 
1173     oe_debug_pub.add('after validate qual');
1174                 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1175                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1176                 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1177                     RAISE FND_API.G_EXC_ERROR;
1178                 END IF;
1179 
1180             END IF;
1181 
1182         END IF;
1183 
1184     oe_debug_pub.add('before util clear');
1185             --  Clear dependent attributes.
1186 
1187         IF  l_control_rec.change_attributes THEN
1188 
1189     oe_debug_pub.add('before clear depen');
1190             l_p_QUALIFIERS_rec := l_QUALIFIERS_rec;
1191             QP_Qualifiers_Util.Clear_Dependent_Attr
1192             (   p_QUALIFIERS_rec              => l_p_QUALIFIERS_rec
1193             ,   p_old_QUALIFIERS_rec          => l_old_QUALIFIERS_rec
1194             ,   x_QUALIFIERS_rec              => l_QUALIFIERS_rec
1195             );
1196 
1197         END IF;
1198 
1199     oe_debug_pub.add('before default attrib');
1200         --  Default missing attributes
1201 
1202         IF  l_control_rec.default_attributes
1203         OR  l_control_rec.change_attributes
1204         THEN
1205             l_p_QUALIFIERS_rec := l_QUALIFIERS_rec;
1206             QP_Default_Qualifiers.Attributes
1207             (   p_QUALIFIERS_rec              => l_p_QUALIFIERS_rec
1208             ,   x_QUALIFIERS_rec              => l_QUALIFIERS_rec
1209             );
1210 
1211         END IF;
1212 
1213         --  Apply attribute changes
1214 
1215     oe_debug_pub.add('before util');
1216         IF  l_control_rec.default_attributes
1217         OR  l_control_rec.change_attributes
1218         THEN
1219              l_p_QUALIFIERS_rec := l_QUALIFIERS_rec;
1220             QP_Qualifiers_Util.Apply_Attribute_Changes
1221             (   p_QUALIFIERS_rec              => l_p_QUALIFIERS_rec
1222             ,   p_old_QUALIFIERS_rec          => l_old_QUALIFIERS_rec
1223             ,   x_QUALIFIERS_rec              => l_QUALIFIERS_rec
1224             );
1225 
1226         END IF;
1227 
1228         --  Entity level validation.
1229 
1230         IF l_control_rec.validate_entity THEN
1231 
1232             IF l_QUALIFIERS_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
1233 
1234                 QP_Validate_Qualifiers.Entity_Delete
1235                 (   x_return_status               => l_return_status
1236                 ,   p_QUALIFIERS_rec              => l_QUALIFIERS_rec
1237                 );
1238 
1239             ELSE
1240 
1241     oe_debug_pub.add('before entity validate');
1242                 QP_Validate_Qualifiers.Entity
1243                 (   x_return_status               => l_return_status
1244                 ,   p_QUALIFIERS_rec              => l_QUALIFIERS_rec
1245                 ,   p_old_QUALIFIERS_rec          => l_old_QUALIFIERS_rec
1246                 );
1247 
1248             END IF;
1249     oe_debug_pub.add('after entity validate');
1250 
1251             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1252                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1253             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1254                 RAISE FND_API.G_EXC_ERROR;
1255             END IF;
1256     oe_debug_pub.add('after entity validate end if');
1257 
1258         END IF;
1259 
1260         --  Step 3.5. Perform action which need to be performed before
1261         --            writing to the DB (like Scheduling).
1262 
1263         IF l_control_rec.write_to_db THEN
1264                    l_p_QUALIFIERS_rec := l_QUALIFIERS_rec;
1265     	          QP_QUALIFIERS_UTIL.PRE_WRITE_PROCESS
1266                    ( p_QUALIFIERS_rec      => l_p_QUALIFIERS_rec
1267                    , p_old_QUALIFIERS_rec  => l_old_QUALIFIERS_rec
1268                    , x_QUALIFIERS_rec      => l_QUALIFIERS_rec);
1269 
1270         END IF;
1271 
1272         --  Step 4. Write to DB
1273 
1274         IF l_control_rec.write_to_db THEN
1275 
1276             IF l_QUALIFIERS_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
1277 
1278                 QP_Qualifiers_Util.Delete_Row
1279                 (   p_qualifier_id                => l_QUALIFIERS_rec.qualifier_id
1280                 );
1281 
1282             ELSE
1283 
1284                 --  Get Who Information
1285 
1286                 l_QUALIFIERS_rec.last_update_date := SYSDATE;
1287                 l_QUALIFIERS_rec.last_updated_by := FND_GLOBAL.USER_ID;
1288                 l_QUALIFIERS_rec.last_update_login := FND_GLOBAL.LOGIN_ID;
1289 
1290                 IF l_QUALIFIERS_rec.operation = QP_GLOBALS.G_OPR_UPDATE THEN
1291 
1292                     QP_Qualifiers_Util.Update_Row (l_QUALIFIERS_rec);
1293 
1294                 ELSIF l_QUALIFIERS_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
1295 
1296                     l_QUALIFIERS_rec.creation_date := SYSDATE;
1297                     l_QUALIFIERS_rec.created_by    := FND_GLOBAL.USER_ID;
1298 
1299     oe_debug_pub.add('util . Insert');
1300                     QP_Qualifiers_Util.Insert_Row (l_QUALIFIERS_rec);
1301 
1302                 END IF;
1303 
1304             END IF;
1305 
1306         END IF;
1307 
1308         --  Load tables.
1309 
1310         l_QUALIFIERS_tbl(I)            := l_QUALIFIERS_rec;
1311         l_old_QUALIFIERS_tbl(I)        := l_old_QUALIFIERS_rec;
1312 
1313     --  For loop exception handler.
1314 
1315 
1316     EXCEPTION
1317 
1318         WHEN FND_API.G_EXC_ERROR THEN
1319 
1320             l_QUALIFIERS_rec.return_status := FND_API.G_RET_STS_ERROR;
1321             l_QUALIFIERS_tbl(I)            := l_QUALIFIERS_rec;
1322             l_old_QUALIFIERS_tbl(I)        := l_old_QUALIFIERS_rec;
1323 
1324             -- mkarya If process_modifiers has been called from public package, then ONLY call
1325             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1326             if l_control_rec.called_from_ui = 'N' then
1327                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1328 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1329 			p_entity_id => l_QUALIFIERS_rec.list_header_id,
1330 			x_return_status => l_return_status );
1331 
1332                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1333 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1334 			p_entity_id => l_QUALIFIERS_rec.list_line_id,
1335 			x_return_status => l_return_status );
1336 
1337                qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1338 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1339 			p_entity_id => l_QUALIFIERS_rec.qualifier_id,
1340 			x_return_status => l_return_status );
1341             end if;
1342 
1343             -- mkarya for bug 1728764, so that the exception is handled by the calling function.
1344             RAISE;
1345 
1346         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1347 
1348             l_QUALIFIERS_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1349             l_QUALIFIERS_tbl(I)            := l_QUALIFIERS_rec;
1350             l_old_QUALIFIERS_tbl(I)        := l_old_QUALIFIERS_rec;
1351 
1352             -- mkarya If process_modifiers has been called from public package, then ONLY call
1353             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1354             if l_control_rec.called_from_ui = 'N' then
1355                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1356 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1357 			p_entity_id => l_QUALIFIERS_rec.list_header_id,
1358 			x_return_status => l_return_status );
1359 
1360                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1361 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1362 			p_entity_id => l_QUALIFIERS_rec.list_line_id,
1363 			x_return_status => l_return_status );
1364 
1365                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1366 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1367 			p_entity_id => l_QUALIFIERS_rec.qualifier_id,
1368 			x_return_status => l_return_status );
1369             end if;
1370 
1371             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1372 
1373         WHEN OTHERS THEN
1374 
1375             l_QUALIFIERS_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1376             l_QUALIFIERS_tbl(I)            := l_QUALIFIERS_rec;
1377             l_old_QUALIFIERS_tbl(I)        := l_old_QUALIFIERS_rec;
1378 
1379             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1380             THEN
1381                 OE_MSG_PUB.Add_Exc_Msg
1382                 (   G_PKG_NAME
1383                 ,   'Qualifierss'
1384                 );
1385             END IF;
1386 
1387             -- mkarya If process_modifiers has been called from public package, then ONLY call
1388             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1389             if l_control_rec.called_from_ui = 'N' then
1390                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1391 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1392 			p_entity_id => l_QUALIFIERS_rec.list_header_id,
1393 			x_return_status => l_return_status );
1394 
1395                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1396 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1397 			p_entity_id => l_QUALIFIERS_rec.list_line_id,
1398 			x_return_status => l_return_status );
1399 
1400                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1401 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1402 			p_entity_id => l_QUALIFIERS_rec.qualifier_id,
1403 			x_return_status => l_return_status );
1404             end if;
1405 
1406             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1407 
1408     oe_debug_pub.add('exp loop ');
1409     END;
1410     END LOOP;
1411 
1412     --  Load OUT parameters
1413 
1414     x_QUALIFIERS_tbl               := l_QUALIFIERS_tbl;
1415     x_old_QUALIFIERS_tbl           := l_old_QUALIFIERS_tbl;
1416 
1417     oe_debug_pub.add('END qualifierss in Private');
1418 EXCEPTION
1419 
1420     WHEN FND_API.G_EXC_ERROR THEN
1421 
1422         RAISE;
1423 
1424     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1425 
1426 
1427         RAISE;
1428 
1429     WHEN OTHERS THEN
1430 
1431         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1432         THEN
1433             OE_MSG_PUB.Add_Exc_Msg
1434             (   G_PKG_NAME
1435             ,   'Qualifierss'
1436             );
1437         END IF;
1438 
1439 
1440         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1441 
1442     oe_debug_pub.add('EXP qualifierss in Private');
1443 END Qualifierss;
1444 
1445 --  Pricing_Attrs
1446 
1447 PROCEDURE Pricing_Attrs
1448 (   p_validation_level              IN  NUMBER
1449 ,   p_control_rec                   IN  QP_GLOBALS.Control_Rec_Type
1450 ,   p_PRICING_ATTR_tbl              IN  QP_Modifiers_PUB.Pricing_Attr_Tbl_Type
1451 ,   p_old_PRICING_ATTR_tbl          IN  QP_Modifiers_PUB.Pricing_Attr_Tbl_Type
1452 ,   x_PRICING_ATTR_tbl              OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Pricing_Attr_Tbl_Type
1453 ,   x_old_PRICING_ATTR_tbl          OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Pricing_Attr_Tbl_Type
1454 )
1455 IS
1456 
1457  --- added by svdeshmu
1458 
1459 l_status varchar2(1);
1460 l_parent_list_line_id  number;
1461 l_list_line_type_code varchar2(30);
1462 
1463 
1464  ---  end of additions  by svdeshmu
1465 
1466 
1467 l_return_status               VARCHAR2(1);
1468 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
1469 l_PRICING_ATTR_rec            QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
1470 l_p_PRICING_ATTR_rec          QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
1471 l_PRICING_ATTR_tbl            QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
1472 l_old_PRICING_ATTR_rec        QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
1473 l_old_PRICING_ATTR_tbl        QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
1474 l_continuous_price_break_flag     VARCHAR2(1); --Continuous Price Breaks
1475 BEGIN
1476 
1477     oe_debug_pub.add('BEGIN pricing_attrs in Private');
1478     --  Init local table variables.
1479 
1480     l_PRICING_ATTR_tbl             := p_PRICING_ATTR_tbl;
1481     l_old_PRICING_ATTR_tbl         := p_old_PRICING_ATTR_tbl;
1482 
1483     FOR I IN 1..l_PRICING_ATTR_tbl.COUNT LOOP
1484     BEGIN
1485 
1486         --  Load local records.
1487 
1488         l_PRICING_ATTR_rec := l_PRICING_ATTR_tbl(I);
1489 
1490         IF l_old_PRICING_ATTR_tbl.EXISTS(I) THEN
1491             l_old_PRICING_ATTR_rec := l_old_PRICING_ATTR_tbl(I);
1492         ELSE
1493             l_old_PRICING_ATTR_rec := QP_Modifiers_PUB.G_MISS_PRICING_ATTR_REC;
1494         END IF;
1495 
1496         --  Load API control record
1497 
1498         l_control_rec := QP_GLOBALS.Init_Control_Rec
1499         (   p_operation     => l_PRICING_ATTR_rec.operation
1500         ,   p_control_rec   => p_control_rec
1501         );
1502 
1503         --  Set record return status.
1504 
1505         l_PRICING_ATTR_rec.return_status := FND_API.G_RET_STS_SUCCESS;
1506 
1507         --  Prepare record.
1508 
1509     oe_debug_pub.add('oper = '|| l_PRICING_ATTR_rec.operation );
1510 
1511         IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
1512 
1513             l_PRICING_ATTR_rec.db_flag := FND_API.G_FALSE;
1514 
1515             --  Set missing old record elements to NULL.
1516 
1517             l_old_PRICING_ATTR_rec :=
1518             QP_Pricing_Attr_Util.Convert_Miss_To_Null (l_old_PRICING_ATTR_rec);
1519 
1520         ELSIF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_UPDATE
1521         OR    l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_DELETE
1522         THEN
1523 
1524             l_PRICING_ATTR_rec.db_flag := FND_API.G_TRUE;
1525 
1526             --  Query Old if missing
1527 
1528             IF  l_old_PRICING_ATTR_rec.pricing_attribute_id = FND_API.G_MISS_NUM
1529             THEN
1530 
1531     oe_debug_pub.add('before query');
1532                 l_old_PRICING_ATTR_rec := QP_Pricing_Attr_Util.Query_Row
1533                 (   p_pricing_attribute_id        => l_PRICING_ATTR_rec.pricing_attribute_id
1534                 );
1535 
1536             ELSE
1537 
1538                 --  Set missing old record elements to NULL.
1539 
1540                 l_old_PRICING_ATTR_rec :=
1541                 QP_Pricing_Attr_Util.Convert_Miss_To_Null (l_old_PRICING_ATTR_rec);
1542 
1543             END IF;
1544 
1545             --  Complete new record from old
1546 
1547     oe_debug_pub.add('1111');
1548             l_PRICING_ATTR_rec := QP_Pricing_Attr_Util.Complete_Record
1549             (   p_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1550             ,   p_old_PRICING_ATTR_rec        => l_old_PRICING_ATTR_rec
1551             );
1552 
1553         END IF;
1554 
1555         --  Attribute level validation.
1556 
1557     oe_debug_pub.add('2222');
1558     IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_CREATE
1559     OR    l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_UPDATE
1560     OR    l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
1561 
1562 
1563    --- added by svdeshmu
1564 
1565           oe_debug_pub.add('calling get_parent from apply attribute');
1566           oe_debug_pub.add('with child as'||l_pricing_attr_rec.list_line_id);
1567             Get_Parent_List_Line_Id
1568 		  (  p_child_list_line_id =>l_PRICING_ATTR_REC.list_line_id
1569 		   , x_parent_list_line_id =>l_parent_list_line_id
1570 		   , x_list_line_type_code =>l_list_line_type_code
1571 		   , x_status =>l_status
1572 		  );
1573           oe_debug_pub.add('status of get_parent is'||l_status);
1574 
1575           IF l_status  = 'T' AND l_list_line_type_code = 'PBH' THEN
1576 
1577 	     oe_debug_pub.add('calling log request for ob from private ');
1578 	     oe_debug_pub.add('list_line_id is '||l_parent_list_line_id);
1579 	     oe_debug_pub.add(' pr  is '||l_PRICING_ATTR_REC.list_line_id);
1580 
1581           --Added to check whether the PBH is for continuous or
1582           --non-continuous price breaks
1583           BEGIN
1584             select continuous_price_break_flag
1585             into   l_continuous_price_break_flag
1586             from   qp_list_lines
1587             where  list_line_id = l_parent_list_line_id;
1588           EXCEPTION
1589             WHEN OTHERS THEN
1590                l_continuous_price_break_flag := NULL;
1591           END;
1592 
1593             qp_delayed_requests_PVT.log_request
1594 	       (  p_entity_code => QP_GLOBALS.G_ENTITY_PRICING_ATTR
1595 		   , p_entity_id  => l_PRICING_ATTR_REC.list_line_id
1596 	        , p_param1 =>l_parent_list_line_id
1597 		, p_param2 => l_continuous_price_break_flag
1598 				--Added the param to call the validation
1599 				--function depending upon the break type
1600              , p_requesting_entity_code=> QP_GLOBALS.G_ENTITY_PRICING_ATTR
1601              , p_requesting_entity_id => l_PRICING_ATTR_REC.list_line_id
1602              , p_request_type =>QP_GLOBALS.G_OVERLAPPING_PRICE_BREAKS
1603 	        , x_return_status => l_return_status);
1604 
1605 	     END IF;
1606   -- end of additions by svdeshmu
1607 
1608 
1609         IF  l_control_rec.default_attributes
1610         OR  l_control_rec.change_attributes
1611         THEN
1612 
1613             IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
1614 
1615                 QP_Validate_Pricing_Attr.Attributes
1616                 (   x_return_status               => l_return_status
1617                 ,   p_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1618                 ,   p_old_PRICING_ATTR_rec        => l_old_PRICING_ATTR_rec
1619                 );
1620 
1621                 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1622                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1623                 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1624                     RAISE FND_API.G_EXC_ERROR;
1625                 END IF;
1626 
1627             END IF;
1628 
1629         END IF;
1630 
1631     oe_debug_pub.add('3333');
1632             --  Clear dependent attributes.
1633 
1634         IF  l_control_rec.change_attributes THEN
1635             l_p_PRICING_ATTR_rec := l_PRICING_ATTR_rec;
1636             QP_Pricing_Attr_Util.Clear_Dependent_Attr
1637             (   p_PRICING_ATTR_rec            => l_p_PRICING_ATTR_rec
1638             ,   p_old_PRICING_ATTR_rec        => l_old_PRICING_ATTR_rec
1639             ,   x_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1640             );
1641 
1642         END IF;
1643 
1644         --  Default missing attributes
1645 
1646         IF  l_control_rec.default_attributes
1647         OR  l_control_rec.change_attributes
1648         THEN
1649                l_p_PRICING_ATTR_rec := l_PRICING_ATTR_rec;
1650             QP_Default_Pricing_Attr.Attributes
1651             (   p_PRICING_ATTR_rec            => l_p_PRICING_ATTR_rec
1652             ,   x_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1653             );
1654 
1655         END IF;
1656 
1657         --  Apply attribute changes
1658 
1659     oe_debug_pub.add('4444');
1660         IF  l_control_rec.default_attributes
1661         OR  l_control_rec.change_attributes
1662         THEN
1663 
1664     oe_debug_pub.add('7777');
1665              l_p_PRICING_ATTR_rec := l_PRICING_ATTR_rec;
1666             QP_Pricing_Attr_Util.Apply_Attribute_Changes
1667             (   p_PRICING_ATTR_rec            => l_p_PRICING_ATTR_rec
1668             ,   p_old_PRICING_ATTR_rec        => l_old_PRICING_ATTR_rec
1669             ,   x_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1670             );
1671 
1672         END IF;
1673 
1674         --  Entity level validation.
1675 
1676     oe_debug_pub.add('5555');
1677         IF l_control_rec.validate_entity THEN
1678 
1679             IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
1680 
1681                 QP_Validate_Pricing_Attr.Entity_Delete
1682                 (   x_return_status               => l_return_status
1683                 ,   p_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1684                 );
1685 
1686             ELSE
1687 		  null;
1688 
1689                 QP_Validate_Pricing_Attr.Entity
1690                 (   x_return_status               => l_return_status
1691                 ,   p_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1692                 ,   p_old_PRICING_ATTR_rec        => l_old_PRICING_ATTR_rec
1693                 );
1694 			 null;
1695 
1696             END IF;
1697 
1698             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1699                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1700             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1701                 RAISE FND_API.G_EXC_ERROR;
1702             END IF;
1703 
1704         END IF;
1705 
1706         IF l_control_rec.write_to_db THEN
1707                  l_p_PRICING_ATTR_rec := l_PRICING_ATTR_rec;
1708     	          QP_PRICING_ATTR_UTIL.PRE_WRITE_PROCESS
1709                    ( p_Pricing_Attr_rec      => l_p_Pricing_Attr_rec
1710                    , p_old_Pricing_Attr_rec  => l_old_Pricing_Attr_rec
1711                    , x_Pricing_Attr_rec      => l_Pricing_Attr_rec);
1712 
1713         END IF;
1714 
1715         --  Step 4. Write to DB
1716 
1717     oe_debug_pub.add('6666');
1718         IF l_control_rec.write_to_db THEN
1719 
1720             IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
1721 
1722      --added by svdeshmu
1723 
1724 
1725 	    --[5069539] Added the check to skip this block when the call is from
1726 	    --UI. The validation for existing break lines is done in the form
1727 	    --itself. This is required because newly inserted break lines must be
1728 	    --allowed for deletion before saving.
1729 	    IF p_control_rec.called_from_ui = 'N' THEN
1730 		-- bug 3563355 start
1731                 Declare
1732 
1733                         x_rltd_modifier_grp_type varchar2(30);
1734 
1735                 Begin
1736 
1737                         SELECT null INTO x_rltd_modifier_grp_type
1738                         FROM qp_rltd_modifiers
1739                         WHERE to_rltd_modifier_id = l_PRICING_ATTR_rec.list_line_id
1740                         AND rltd_modifier_grp_type = 'PRICE BREAK'
1741                         AND ROWNUM = 1;
1742 
1743                         FND_MESSAGE.SET_NAME('QP','QP_CANNOT_DELETE_DETAIL_LINES');
1744                         OE_MSG_PUB.Add;
1745                         RAISE FND_API.G_EXC_ERROR;
1746 
1747 
1748                 Exception
1749 
1750                         WHEN NO_DATA_FOUND THEN
1751                         Null;
1752                 End;
1753                 -- bug 3563355 end
1754 	    END IF;
1755 
1756            oe_debug_pub.add('calling get_parent from QPXVMLSB while delete');
1757            oe_debug_pub.add('with child as'||l_pricing_attr_rec.list_line_id);
1758             Get_Parent_List_Line_Id
1759 		  (  p_child_list_line_id =>l_PRICING_ATTR_REC.list_line_id
1760 		   , x_parent_list_line_id =>l_parent_list_line_id
1761 		   , x_list_line_type_code =>l_list_line_type_code
1762 		   , x_status =>l_status
1763 		  );
1764 
1765            oe_debug_pub.add('status of get_parent is'||l_status);
1766 
1767            IF l_status  = 'T' THEN
1768 
1769 	      oe_debug_pub.add('calling log request for ob from private ');
1770 	      oe_debug_pub.add('list_line_id is '||l_parent_list_line_id);
1771            qp_delayed_requests_PVT.log_request
1772 		 (  p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS
1773 		  , p_entity_id  => l_parent_list_line_id
1774 	       , p_param1 =>l_list_line_type_code
1775             , p_requesting_entity_code=> QP_GLOBALS.G_ENTITY_MODIFIERS
1776             , p_requesting_entity_id => l_parent_list_line_id
1777             , p_request_type =>QP_GLOBALS.G_VALIDATE_LINES_FOR_CHILD
1778 	       , x_return_status => l_return_status
1779 		 );
1780           END IF;
1781 
1782 
1783     -- end of additions by svdeshmu
1784 
1785 
1786 
1787     oe_debug_pub.add('7777');
1788                 QP_Pricing_Attr_Util.Delete_Row
1789                 (   p_pricing_attribute_id        => l_PRICING_ATTR_rec.pricing_attribute_id
1790                 );
1791 
1792             ELSE
1793 
1794                 --  Get Who Information
1795 
1796                 l_PRICING_ATTR_rec.last_update_date := SYSDATE;
1797                 l_PRICING_ATTR_rec.last_updated_by := FND_GLOBAL.USER_ID;
1798                 l_PRICING_ATTR_rec.last_update_login := FND_GLOBAL.LOGIN_ID;
1799 
1800                 IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_UPDATE THEN
1801 
1802                     QP_Pricing_Attr_Util.Update_Row (l_PRICING_ATTR_rec);
1803 
1804                 ELSIF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
1805 
1806                     l_PRICING_ATTR_rec.creation_date := SYSDATE;
1807                     l_PRICING_ATTR_rec.created_by  := FND_GLOBAL.USER_ID;
1808 oe_debug_pub.add(to_char(l_PRICING_ATTR_rec.attribute_grouping_no)||'attr_grp');
1809                     QP_Pricing_Attr_Util.Insert_Row (l_PRICING_ATTR_rec);
1810 
1811                 END IF;
1812 
1813             END IF;
1814 
1815         END IF;
1816 
1817     END IF; -- For Operation Create, Update or Delete
1818         --  Load tables.
1819 
1820         l_PRICING_ATTR_tbl(I)          := l_PRICING_ATTR_rec;
1821         l_old_PRICING_ATTR_tbl(I)      := l_old_PRICING_ATTR_rec;
1822 
1823     --  For loop exception handler.
1824 
1825 
1826     EXCEPTION
1827 
1828 	   WHEN NO_DATA_FOUND THEN
1829 	   null;
1830 
1831         WHEN FND_API.G_EXC_ERROR THEN
1832 
1833             l_PRICING_ATTR_rec.return_status := FND_API.G_RET_STS_ERROR;
1834             l_PRICING_ATTR_tbl(I)          := l_PRICING_ATTR_rec;
1835             l_old_PRICING_ATTR_tbl(I)      := l_old_PRICING_ATTR_rec;
1836 
1837         oe_debug_pub.add('manoj - value of called_from_ui before delete_reqs_for_deleted_entity = ' || l_control_rec.called_from_ui);
1838         --dbms_output.put_line('manoj - pricing_attr- value of called_from_ui before delete_reqs_for_deleted_entity = ' || l_control_rec.called_from_ui);
1839             -- mkarya If process_modifiers has been called from public package, then ONLY call
1840             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1841             if l_control_rec.called_from_ui = 'N' then
1842                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1843 		    (p_entity_code => QP_GLOBALS.G_ENTITY_PRICING_ATTR,
1844 			p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1845 			x_return_status => l_return_status );
1846 
1847                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1848 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
1849 			p_entity_id => l_parent_list_line_id,
1850 			x_return_status => l_return_status );
1851 
1852                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1853 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
1854 			p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1855 			x_return_status => l_return_status );
1856 
1857                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1858 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1859 			p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1860 			x_return_status => l_return_status );
1861             end if;
1862 
1863             -- mkarya for bug 1728764, so that the exception is handled by the calling function.
1864             RAISE;
1865 
1866         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1867 
1868             l_PRICING_ATTR_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1869             l_PRICING_ATTR_tbl(I)          := l_PRICING_ATTR_rec;
1870             l_old_PRICING_ATTR_tbl(I)      := l_old_PRICING_ATTR_rec;
1871 
1872             -- mkarya If process_modifiers has been called from public package, then ONLY call
1873             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1874             if l_control_rec.called_from_ui = 'N' then
1875                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1876 		    (p_entity_code => QP_GLOBALS.G_ENTITY_PRICING_ATTR,
1877 			p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1878 			x_return_status => l_return_status );
1879 
1880                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1881 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
1882 			p_entity_id => l_parent_list_line_id,
1883 			x_return_status => l_return_status );
1884 
1885                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1886 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
1887 			p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1888 			x_return_status => l_return_status );
1889 
1890                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1891 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1892 			p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1893 			x_return_status => l_return_status );
1894             end if;
1895 
1896             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1897 
1898         WHEN OTHERS THEN
1899 
1900             l_PRICING_ATTR_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1901             l_PRICING_ATTR_tbl(I)          := l_PRICING_ATTR_rec;
1902             l_old_PRICING_ATTR_tbl(I)      := l_old_PRICING_ATTR_rec;
1903 
1904             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1905             THEN
1906                 OE_MSG_PUB.Add_Exc_Msg
1907                 (   G_PKG_NAME
1908                 ,   'Pricing_Attrs'
1909                 );
1910             END IF;
1911 
1912             -- mkarya If process_modifiers has been called from public package, then ONLY call
1913             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1914             if l_control_rec.called_from_ui = 'N' then
1915                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1916 		    (p_entity_code => QP_GLOBALS.G_ENTITY_PRICING_ATTR,
1917 			p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1918 			x_return_status => l_return_status );
1919 
1920                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1921 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
1922 			p_entity_id => l_parent_list_line_id,
1923 			x_return_status => l_return_status );
1924 
1925                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1926 		    (p_entity_code => QP_GLOBALS.G_ENTITY_MODIFIERS,
1927 			p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1928 			x_return_status => l_return_status );
1929 
1930                 qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1931 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1932 			p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1933 			x_return_status => l_return_status );
1934             end if;
1935 
1936             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1937 
1938     END;
1939     END LOOP;
1940 
1941     --  Load OUT parameters
1942 
1943     x_PRICING_ATTR_tbl             := l_PRICING_ATTR_tbl;
1944     x_old_PRICING_ATTR_tbl         := l_old_PRICING_ATTR_tbl;
1945 
1946     oe_debug_pub.add('END pricing_attrs in Private');
1947 EXCEPTION
1948 
1949     WHEN FND_API.G_EXC_ERROR THEN
1950 
1951         RAISE;
1952 
1953     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1954 
1955 
1956         RAISE;
1957 
1958     WHEN OTHERS THEN
1959 
1960         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1961         THEN
1962             OE_MSG_PUB.Add_Exc_Msg
1963             (   G_PKG_NAME
1964             ,   'Pricing_Attrs'
1965             );
1966         END IF;
1967 
1968 
1969         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1970 
1971 END Pricing_Attrs;
1972 
1973 --  Start of Comments
1974 --  API name    Process_Modifiers
1975 --  Type        Private
1976 --  Function
1977 --
1978 --  Pre-reqs
1979 --
1980 --  Parameters
1981 --
1982 --  Version     Current version = 1.0
1983 --              Initial version = 1.0
1984 --
1985 --  Notes
1986 --
1987 --  End of Comments
1988 
1989 PROCEDURE Process_Modifiers
1990 (   p_api_version_number            IN  NUMBER
1991 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
1992 ,   p_commit                        IN  VARCHAR2 := FND_API.G_FALSE
1993 ,   p_validation_level              IN  NUMBER := FND_API.G_VALID_LEVEL_FULL
1994 ,   p_control_rec                   IN  QP_GLOBALS.Control_Rec_Type :=
1995                                         QP_GLOBALS.G_MISS_CONTROL_REC
1996 ,   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1997 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
1998 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1999 ,   p_MODIFIER_LIST_rec             IN  QP_Modifiers_PUB.Modifier_List_Rec_Type :=
2000                                         QP_Modifiers_PUB.G_MISS_MODIFIER_LIST_REC
2001 ,   p_old_MODIFIER_LIST_rec         IN  QP_Modifiers_PUB.Modifier_List_Rec_Type :=
2002                                         QP_Modifiers_PUB.G_MISS_MODIFIER_LIST_REC
2003 ,   p_MODIFIERS_tbl                 IN  QP_Modifiers_PUB.Modifiers_Tbl_Type :=
2004                                         QP_Modifiers_PUB.G_MISS_MODIFIERS_TBL
2005 ,   p_old_MODIFIERS_tbl             IN  QP_Modifiers_PUB.Modifiers_Tbl_Type :=
2006                                         QP_Modifiers_PUB.G_MISS_MODIFIERS_TBL
2007 ,   p_QUALIFIERS_tbl                IN  QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type :=
2008                                         QP_Qualifier_Rules_PUB.G_MISS_QUALIFIERS_TBL
2009 ,   p_old_QUALIFIERS_tbl            IN  QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type :=
2010                                         QP_Qualifier_Rules_PUB.G_MISS_QUALIFIERS_TBL
2011 ,   p_PRICING_ATTR_tbl              IN  QP_Modifiers_PUB.Pricing_Attr_Tbl_Type :=
2012                                         QP_Modifiers_PUB.G_MISS_PRICING_ATTR_TBL
2013 ,   p_old_PRICING_ATTR_tbl          IN  QP_Modifiers_PUB.Pricing_Attr_Tbl_Type :=
2014                                         QP_Modifiers_PUB.G_MISS_PRICING_ATTR_TBL
2015 ,   x_MODIFIER_LIST_rec             OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Modifier_List_Rec_Type
2016 ,   x_MODIFIERS_tbl                 OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Modifiers_Tbl_Type
2017 ,   x_QUALIFIERS_tbl                OUT NOCOPY /* file.sql.39 change */ QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type
2018 ,   x_PRICING_ATTR_tbl              OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Pricing_Attr_Tbl_Type
2019 )
2020 IS
2021 l_api_version_number          CONSTANT NUMBER := 1.0;
2022 l_list_type_code              VARCHAR2(30);
2023 l_api_name                    CONSTANT VARCHAR2(30):= 'Process_Modifiers';
2024 l_return_status               VARCHAR2(1);
2025 l_qp_status                   VARCHAR2(1);
2026 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
2027 l_MODIFIER_LIST_rec           QP_Modifiers_PUB.Modifier_List_Rec_Type := p_MODIFIER_LIST_rec;
2028 l_p_MODIFIER_LIST_rec         QP_Modifiers_PUB.Modifier_List_Rec_Type := p_MODIFIER_LIST_rec;
2029 l_old_MODIFIER_LIST_rec       QP_Modifiers_PUB.Modifier_List_Rec_Type := p_old_MODIFIER_LIST_rec;
2030 l_p_old_MODIFIER_LIST_rec     QP_Modifiers_PUB.Modifier_List_Rec_Type := p_old_MODIFIER_LIST_rec;
2031 l_MODIFIERS_rec               QP_Modifiers_PUB.Modifiers_Rec_Type;
2032 l_MODIFIERS_tbl               QP_Modifiers_PUB.Modifiers_Tbl_Type;
2033 l_p_MODIFIERS_tbl             QP_Modifiers_PUB.Modifiers_Tbl_Type;
2034 l_old_MODIFIERS_rec           QP_Modifiers_PUB.Modifiers_Rec_Type;
2035 l_old_MODIFIERS_tbl           QP_Modifiers_PUB.Modifiers_Tbl_Type;
2036 l_p_old_MODIFIERS_tbl         QP_Modifiers_PUB.Modifiers_Tbl_Type;
2037 l_QUALIFIERS_rec              QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
2038 l_QUALIFIERS_tbl              QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
2039 l_p_QUALIFIERS_tbl            QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
2040 l_old_QUALIFIERS_rec          QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
2041 l_old_QUALIFIERS_tbl          QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
2042 l_p_old_QUALIFIERS_tbl        QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
2043 l_PRICING_ATTR_rec            QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
2044 l_PRICING_ATTR_tbl            QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
2045 l_p_PRICING_ATTR_tbl          QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
2046 l_old_PRICING_ATTR_rec        QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
2047 l_old_PRICING_ATTR_tbl        QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
2048 l_p_old_PRICING_ATTR_tbl      QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
2049 NO_UPDATE_PRIVILEGE           EXCEPTION;
2050 
2051 -- Blanket Agreement
2052 l_qual_exists                 VARCHAR2(1) := 'N';
2053 BEGIN
2054 
2055     oe_debug_pub.add('BEGIN process_modifiers in Private');
2056     --dbms_output.put_line('BEGIN process_modifiers in Private');
2057     --  Standard call to check for call compatibility
2058 
2059     IF NOT FND_API.Compatible_API_Call
2060            (   l_api_version_number
2061            ,   p_api_version_number
2062            ,   l_api_name
2063            ,   G_PKG_NAME
2064            )
2065     THEN
2066         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2067     END IF;
2068 
2069     --  Initialize message list.
2070 
2071     IF FND_API.to_Boolean(p_init_msg_list) THEN
2072         OE_MSG_PUB.initialize;
2073     END IF;
2074 
2075     -- BOI not available when QP not installed
2076 
2077     l_qp_status := QP_UTIL.GET_QP_STATUS;
2078 
2079     IF l_qp_status = 'N'
2080     THEN
2081 
2082         l_return_status := FND_API.G_RET_STS_ERROR;
2083         FND_MESSAGE.SET_NAME('QP','QP_PRICING_NOT_INSTALLED');
2084         OE_MSG_PUB.Add;
2085         RAISE FND_API.G_EXC_ERROR;
2086 
2087     END IF;
2088 
2089     IF p_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_UPDATE THEN
2090        -- Check the security privilege
2091        IF QP_security.check_function( p_function_name => QP_Security.G_FUNCTION_UPDATE,
2092                                     p_instance_type => QP_Security.G_MODIFIER_OBJECT,
2093                                     p_instance_pk1  => p_MODIFIER_LIST_rec.list_header_id) = 'F'
2094        THEN
2095          fnd_message.set_name('QP', 'QP_NO_PRIVILEGE');
2096          fnd_message.set_token('PRICING_OBJECT', 'Modifier List');
2097          oe_msg_pub.Add;
2098 
2099          RAISE NO_UPDATE_PRIVILEGE;
2100 
2101        END IF;  -- end of check security privilege
2102     END IF;
2103 
2104 
2105     --  Init local table variables.
2106 
2107     oe_debug_pub.add('Operation in pvt'||l_MODIFIER_LIST_rec.operation);
2108     l_MODIFIERS_tbl                := p_MODIFIERS_tbl;
2109     l_old_MODIFIERS_tbl            := p_old_MODIFIERS_tbl;
2110 
2111     --  Init local table variables.
2112 
2113     l_QUALIFIERS_tbl               := p_QUALIFIERS_tbl;
2114     l_old_QUALIFIERS_tbl           := p_old_QUALIFIERS_tbl;
2115 
2116     --  Init local table variables.
2117 
2118     l_PRICING_ATTR_tbl             := p_PRICING_ATTR_tbl;
2119     l_old_PRICING_ATTR_tbl         := p_old_PRICING_ATTR_tbl;
2120 
2121     --  Modifier_List
2122 
2123     oe_debug_pub.add('list type1= '|| l_MODIFIER_LIST_rec.list_type_code);
2124     l_p_MODIFIER_LIST_rec := l_MODIFIER_LIST_rec;
2125     l_p_old_MODIFIER_LIST_rec := l_old_MODIFIER_LIST_rec;
2126     Modifier_List
2127     (   p_validation_level            => p_validation_level
2128     ,   p_control_rec                 => p_control_rec
2129     ,   p_MODIFIER_LIST_rec           => l_p_MODIFIER_LIST_rec
2130     ,   p_old_MODIFIER_LIST_rec       => l_p_old_MODIFIER_LIST_rec
2131     ,   x_MODIFIER_LIST_rec           => l_MODIFIER_LIST_rec
2132     ,   x_old_MODIFIER_LIST_rec       => l_old_MODIFIER_LIST_rec
2133     );
2134 
2135     --  Perform MODIFIER_LIST group requests.
2136 
2137     IF p_control_rec.process AND
2138         (p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL OR
2139         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_MODIFIER_LIST)
2140     THEN
2141 
2142        -- FOR QUALIFICATION_IND
2143        QP_DELAYED_REQUESTS_PVT.Process_Request_for_Entity
2144           (p_entity_code   => QP_GLOBALS.G_ENTITY_MODIFIER_LIST
2145           ,p_delete        => FND_API.G_TRUE
2146           ,x_return_status => l_return_status
2147           );
2148        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2149                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2150        ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2151                  RAISE FND_API.G_EXC_ERROR;
2152        END IF;
2153 --      NULL;
2154 
2155     END IF;
2156 
2157     oe_debug_pub.add('list type2= '|| l_MODIFIER_LIST_rec.list_type_code);
2158     --dbms_output.put_line('load parent key');
2159     --  Load parent key if missing and operation is create.
2160 
2161     FOR I IN 1..l_MODIFIERS_tbl.COUNT LOOP
2162 
2163         l_MODIFIERS_rec := l_MODIFIERS_tbl(I);
2164 
2165         IF l_MODIFIERS_rec.operation = QP_GLOBALS.G_OPR_CREATE
2166         AND (l_MODIFIERS_rec.list_header_id IS NULL OR
2167             l_MODIFIERS_rec.list_header_id = FND_API.G_MISS_NUM)
2168         THEN
2169 
2170             --  Copy parent_id.
2171 
2172             l_MODIFIERS_tbl(I).list_header_id := l_MODIFIER_LIST_rec.list_header_id;
2173         END IF;
2174 
2175         --ER 11828647
2176   	l_MODIFIERS_tbl(I).print_on_invoice_flag := NULL;
2177 
2178     END LOOP;
2179 
2180     --  Modifierss
2181 
2182     oe_debug_pub.add('list type3= '|| l_MODIFIER_LIST_rec.list_type_code);
2183     l_p_MODIFIERS_tbl := l_MODIFIERS_tbl;
2184     l_p_old_MODIFIERS_tbl := l_old_MODIFIERS_tbl;
2185     Modifierss
2186     (   p_validation_level            => p_validation_level
2187     ,   p_control_rec                 => p_control_rec
2188     ,   p_MODIFIERS_tbl               => l_p_MODIFIERS_tbl
2189     ,   p_old_MODIFIERS_tbl           => l_p_old_MODIFIERS_tbl
2190     ,   x_MODIFIERS_tbl               => l_MODIFIERS_tbl
2191     ,   x_old_MODIFIERS_tbl           => l_old_MODIFIERS_tbl
2192     );
2193 
2194     --  Perform MODIFIERS group requests.
2195 
2196     IF p_control_rec.process AND
2197         (p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL OR
2198         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_MODIFIERS)
2199     THEN
2200 oe_debug_pub.add('here1');
2201         --NULL;
2202 
2203        -- FOR QUALIFICATION_IND
2204        QP_DELAYED_REQUESTS_PVT.Process_Request_for_Entity
2205           (p_entity_code   => QP_GLOBALS.G_ENTITY_MODIFIERS
2206           ,p_delete        => FND_API.G_TRUE
2207           ,x_return_status => l_return_status
2208           );
2209        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2210                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2211        ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2212                  RAISE FND_API.G_EXC_ERROR;
2213        END IF;
2214 
2215     END IF;
2216 
2217     oe_debug_pub.add('list type4= '|| l_MODIFIER_LIST_rec.list_type_code);
2218     --  Load parent key if missing and operation is create.
2219 
2220     FOR I IN 1..l_QUALIFIERS_tbl.COUNT LOOP
2221 
2222 oe_debug_pub.add('here2');
2223         l_QUALIFIERS_rec := l_QUALIFIERS_tbl(I);
2224 
2225         IF l_QUALIFIERS_rec.operation = QP_GLOBALS.G_OPR_CREATE
2226         AND (l_QUALIFIERS_rec.list_header_id IS NULL OR
2227             l_QUALIFIERS_rec.list_header_id = FND_API.G_MISS_NUM)
2228         THEN
2229 
2230 oe_debug_pub.add('here3');
2231             --  Copy parent_id.
2232 
2233             l_QUALIFIERS_tbl(I).list_header_id := l_MODIFIER_LIST_rec.list_header_id;
2234         END IF;
2235     END LOOP;
2236 
2237     --  Qualifierss
2238     l_p_QUALIFIERS_tbl := l_QUALIFIERS_tbl;
2239     l_p_old_QUALIFIERS_tbl := l_old_QUALIFIERS_tbl;
2240     Qualifierss
2241     (   p_validation_level            => p_validation_level
2242     ,   p_control_rec                 => p_control_rec
2243     ,   p_QUALIFIERS_tbl              => l_p_QUALIFIERS_tbl
2244     ,   p_old_QUALIFIERS_tbl          => l_p_old_QUALIFIERS_tbl
2245     ,   x_QUALIFIERS_tbl              => l_QUALIFIERS_tbl
2246     ,   x_old_QUALIFIERS_tbl          => l_old_QUALIFIERS_tbl
2247     );
2248 
2249     --  Perform QUALIFIERS group requests.
2250 
2251 oe_debug_pub.add('here4');
2252     IF p_control_rec.process AND
2253         (p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL OR
2254         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_QUALIFIERS)
2255     THEN
2256 
2257 oe_debug_pub.add('here5');
2258        -- FOR CHECK_SEGMENT_LEVEL_IN_GROUP
2259        QP_DELAYED_REQUESTS_PVT.Process_Request_for_Entity
2260           (p_entity_code   => QP_GLOBALS.G_ENTITY_QUALIFIERS
2261           ,p_delete        => FND_API.G_TRUE
2262           ,x_return_status => l_return_status
2263           );
2264        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2265                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2266        ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2267                  RAISE FND_API.G_EXC_ERROR;
2268        END IF;
2269 
2270         NULL;
2271 
2272     END IF;
2273 
2274     --  Load parent key if missing and operation is create.
2275 
2276     FOR I IN 1..l_PRICING_ATTR_tbl.COUNT LOOP
2277 
2278         l_PRICING_ATTR_rec := l_PRICING_ATTR_tbl(I);
2279 
2280 oe_debug_pub.add(to_char(l_PRICING_ATTR_rec.attribute_grouping_no)||'attr_grp_no');
2281         IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_CREATE
2282         AND (l_PRICING_ATTR_rec.list_line_id IS NULL OR
2283             l_PRICING_ATTR_rec.list_line_id = FND_API.G_MISS_NUM)
2284         THEN
2285 
2286 oe_debug_pub.add('here6');
2287 oe_debug_pub.add(to_char(l_PRICING_ATTR_rec.attribute_grouping_no)||'attr_grp_no');
2288 oe_debug_pub.add(to_char(l_PRICING_ATTR_rec.MODIFIERS_index));
2289             --  Check If parent exists.
2290 
2291             IF l_MODIFIERS_tbl.EXISTS(l_PRICING_ATTR_rec.MODIFIERS_index) THEN
2292 
2293                 --  Copy parent_id.
2294 
2295 oe_debug_pub.add('if here6');
2296                 l_PRICING_ATTR_tbl(I).list_line_id := l_MODIFIERS_tbl(l_PRICING_ATTR_rec.MODIFIERS_index).list_line_id;
2297 
2298             ELSE
2299 
2300 oe_debug_pub.add('else if here6');
2301                 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
2302                 THEN
2303 
2304                     FND_MESSAGE.SET_NAME('QP','QP_API_INV_PARENT_INDEX');
2305                     FND_MESSAGE.SET_TOKEN('ENTITY_NAME','PRICING_ATTR');
2306                     FND_MESSAGE.SET_TOKEN('ENTITY_INDEX',I);
2307                     FND_MESSAGE.SET_TOKEN('PARENT_INDEX',l_PRICING_ATTR_rec.MODIFIERS_index);
2308                     OE_MSG_PUB.Add;
2309 
2310                 END IF;
2311             END IF;
2312             END IF;
2313     END LOOP;
2314     --  Pricing_Attrs
2315 
2316 oe_debug_pub.add('pricing attrhere6');
2317    l_p_PRICING_ATTR_tbl := l_PRICING_ATTR_tbl;
2318    l_p_old_PRICING_ATTR_tbl := l_old_PRICING_ATTR_tbl;
2319     Pricing_Attrs
2320     (   p_validation_level            => p_validation_level
2321     ,   p_control_rec                 => p_control_rec
2322     ,   p_PRICING_ATTR_tbl            => l_p_PRICING_ATTR_tbl
2323     ,   p_old_PRICING_ATTR_tbl        => l_p_old_PRICING_ATTR_tbl
2324     ,   x_PRICING_ATTR_tbl            => l_PRICING_ATTR_tbl
2325     ,   x_old_PRICING_ATTR_tbl        => l_old_PRICING_ATTR_tbl
2326     );
2327 
2328 oe_debug_pub.add('after pricing attrhere6');
2329     --  Perform PRICING_ATTR group requests.
2330 
2331     IF p_control_rec.process AND
2332         (p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL OR
2333         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_PRICING_ATTR)
2334     THEN
2335 
2336 
2337        QP_DELAYED_REQUESTS_PVT.Process_Request_for_Entity
2338           (p_entity_code   => QP_GLOBALS.G_ENTITY_PRICING_ATTR
2339           ,p_delete        => FND_API.G_TRUE
2340           ,x_return_status => l_return_status
2341           );
2342        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2343                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2344        ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2345                  RAISE FND_API.G_EXC_ERROR;
2346        END IF;
2347      --   NULL;
2348 
2349     END IF;
2350 
2351     oe_debug_pub.add('list type5= '|| l_MODIFIER_LIST_rec.list_type_code);
2352     oe_debug_pub.add('before last if');
2353     --  Step 6. Perform Object group logic
2354 
2355     IF p_control_rec.process AND
2356         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL
2357     THEN
2358        -- FOR QUALIFICATION_IND
2359        QP_DELAYED_REQUESTS_PVT.Process_Delayed_Requests
2360           (
2361             x_return_status => l_return_status
2362           );
2363        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2364                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2365        ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2366                  RAISE FND_API.G_EXC_ERROR;
2367        END IF;
2368 /*
2369      oe_debug_pub.add('calling process_request');
2370      QP_delayed_requests_pvt.process_request_for_entity(p_entity_code =>QP_GLOBALS.G_ENTITY_MODIFIER_LIST,
2371 									x_return_status=>l_return_status);
2372 
2373      oe_debug_pub.add('return status after calling  process_request' || l_return_status);
2374 
2375             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2376                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2377             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2378                 RAISE FND_API.G_EXC_ERROR;
2379             END IF;
2380 
2381 */
2382         NULL;
2383 
2384     END IF;
2385 
2386     -- start bug2091362, bug2119287
2387     Declare
2388     l_qp_status VARCHAR2(1);
2389 
2390     Begin
2391     l_qp_status := QP_UTIL.GET_QP_STATUS;
2392 
2393     IF (fnd_profile.value('QP_ALLOW_DUPLICATE_MODIFIERS') <> 'Y'
2394         AND (l_qp_status = 'S' OR l_MODIFIER_LIST_rec.gsa_indicator = 'Y')) THEN
2395 
2396 
2397           IF p_control_rec.process AND
2398             p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL
2399         THEN
2400     oe_debug_pub.add('Before processing delayed request for duplicate modifiers');
2401            -- FOR Duplicate Modifier Lines
2402            QP_DELAYED_REQUESTS_PVT.Process_Delayed_Requests
2403               (
2404                 x_return_status => l_return_status
2405               );
2406 
2407            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2408                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2409            ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2410                      RAISE FND_API.G_EXC_ERROR;
2411            END IF;
2412     oe_debug_pub.add('After processing delayed request for duplicate modifiers');
2413 
2414         END IF;
2415     ELSE
2416 
2417        NULL;
2418 
2419     END IF;
2420 
2421     END;
2422 
2423     -- end bug2091362
2424 
2425 
2426     oe_debug_pub.add('list type6= '|| l_MODIFIER_LIST_rec.list_type_code);
2427 
2428 
2429     oe_debug_pub.add('before validation');
2430     oe_debug_pub.add('oper = '|| l_MODIFIERS_rec.operation);
2431     oe_debug_pub.add('list type = '|| l_MODIFIER_LIST_rec.list_type_code);
2432     oe_debug_pub.add('Modifier type  = '|| l_MODIFIERS_rec.list_line_type_code);
2433 
2434     --  Done processing, load OUT parameters.
2435 
2436     x_MODIFIER_LIST_rec            := l_MODIFIER_LIST_rec;
2437     x_MODIFIERS_tbl                := l_MODIFIERS_tbl;
2438     x_QUALIFIERS_tbl               := l_QUALIFIERS_tbl;
2439     x_PRICING_ATTR_tbl             := l_PRICING_ATTR_tbl;
2440 
2441     --  Clear API cache.
2442 
2443     IF p_control_rec.clear_api_cache THEN
2444 
2445         NULL;
2446 
2447     END IF;
2448 
2449     --  Clear API request tbl.
2450 
2451     IF p_control_rec.clear_api_requests THEN
2452 
2453         NULL;
2454 
2455     END IF;
2456 
2457     --  Derive return status.
2458 
2459     x_return_status := FND_API.G_RET_STS_SUCCESS;
2460 
2461     IF l_MODIFIER_LIST_rec.return_status = FND_API.G_RET_STS_ERROR THEN
2462         x_return_status := FND_API.G_RET_STS_ERROR;
2463     END IF;
2464 
2465     FOR I IN 1..l_MODIFIERS_tbl.COUNT LOOP
2466 
2467         IF l_MODIFIERS_tbl(I).return_status = FND_API.G_RET_STS_ERROR THEN
2468             x_return_status := FND_API.G_RET_STS_ERROR;
2469         END IF;
2470 
2471     END LOOP;
2472 
2473     FOR I IN 1..l_QUALIFIERS_tbl.COUNT LOOP
2474 
2475         IF l_QUALIFIERS_tbl(I).return_status = FND_API.G_RET_STS_ERROR THEN
2476             x_return_status := FND_API.G_RET_STS_ERROR;
2477         END IF;
2478 
2479     END LOOP;
2480 
2481     FOR I IN 1..l_PRICING_ATTR_tbl.COUNT LOOP
2482 
2483         IF l_PRICING_ATTR_tbl(I).return_status = FND_API.G_RET_STS_ERROR THEN
2484             x_return_status := FND_API.G_RET_STS_ERROR;
2485         END IF;
2486 
2487     END LOOP;
2488 
2489     --  Get message count and data
2490 
2491     OE_MSG_PUB.Count_And_Get
2492     (   p_count                       => x_msg_count
2493     ,   p_data                        => x_msg_data
2494     );
2495 
2496     -- Create blanket header qualifier
2497 
2498     IF (     p_control_rec.write_to_db --Bug#3309455
2499          AND x_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_CREATE
2500          AND x_MODIFIER_LIST_rec.list_source_code = 'BSO'
2501          AND ( x_MODIFIER_LIST_rec.orig_system_header_ref <> NULL
2502             OR x_MODIFIER_LIST_rec.orig_system_header_ref <> FND_API.G_MISS_CHAR)
2503        )
2504     THEN
2505         oe_debug_pub.add('inside create qualifier for blanket modifier');
2506 
2507 	BEGIN
2508 	  select 'Y' into l_qual_exists
2509 	  from qp_qualifiers
2510 	  where list_header_id = x_MODIFIER_LIST_rec.list_header_id
2511 	   and qualifier_context = 'ORDER'
2512 	   and qualifier_attribute = 'QUALIFIER_ATTRIBUTE5'
2513 	   and qualifier_attr_value = x_MODIFIER_LIST_rec.orig_system_header_ref;
2514 	EXCEPTION
2515 	  WHEN NO_DATA_FOUND THEN
2516 	    l_qual_exists := 'N';
2517 	  WHEN OTHERS THEN NULL;
2518 	END;
2519 
2520 	IF l_qual_exists = 'N' THEN
2521 
2522 		QP_Qualifier_Rules_PVT.Create_Blanket_Qualifier
2523 	           (   p_list_header_id            => x_MODIFIER_LIST_rec.list_header_id
2524 	           ,   p_old_list_header_id        => x_MODIFIER_LIST_rec.list_header_id
2525 	           ,   p_blanket_id                => to_number(x_MODIFIER_LIST_rec.orig_system_header_ref)
2526 	           ,   p_operation                 => QP_GLOBALS.G_OPR_CREATE
2527 	           ,   x_return_status             => l_return_status
2528 		   );
2529 
2530 	         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2531 	           oe_debug_pub.add('Unexp Error while creating blanket qualifier');
2532 	           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2533 	         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2534 	           oe_debug_pub.add('Exp Error while creating blanket qualifier');
2535 	           RAISE FND_API.G_EXC_ERROR;
2536 	         END IF;
2537 	END IF;
2538 
2539     END IF;
2540 
2541     oe_debug_pub.add('END process_modifiers in Private');
2542 
2543 EXCEPTION
2544 
2545     WHEN FND_API.G_EXC_ERROR THEN
2546 
2547         x_return_status := FND_API.G_RET_STS_ERROR;
2548         oe_debug_pub.add('manoj - value of called_from_ui before clear_request = ' || p_control_rec.called_from_ui);
2549         --dbms_output.put_line('manoj - value of called_from_ui before clear_request = ' || p_control_rec.called_from_ui);
2550         -- mkarya If process_modifiers has been called from public package, then ONLY call clear_request
2551         if p_control_rec.called_from_ui = 'N' then
2552            qp_delayed_requests_pvt.Clear_Request
2553 		(x_return_status =>  l_return_status);
2554         end if;
2555 
2556         --  Get message count and data
2557 
2558         OE_MSG_PUB.Count_And_Get
2559         (   p_count                       => x_msg_count
2560         ,   p_data                        => x_msg_data
2561         );
2562 
2563     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2564 
2565         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2566 
2567         -- mkarya If process_modifiers has been called from public package, then ONLY call clear_request
2568         if p_control_rec.called_from_ui = 'N' then
2569            qp_delayed_requests_pvt.Clear_Request
2570 		(x_return_status =>  l_return_status);
2571         end if;
2572 
2573         --  Get message count and data
2574 
2575         OE_MSG_PUB.Count_And_Get
2576         (   p_count                       => x_msg_count
2577         ,   p_data                        => x_msg_data
2578         );
2579 
2580     WHEN NO_UPDATE_PRIVILEGE THEN
2581         x_return_status := FND_API.G_RET_STS_SUCCESS;
2582 
2583         --  Get message count and data
2584 
2585         oe_msg_pub.Count_And_Get
2586         (   p_count                       => x_msg_count
2587         ,   p_data                        => x_msg_data
2588         );
2589 
2590     WHEN OTHERS THEN
2591 
2592         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2593 
2594         -- mkarya If process_modifiers has been called from public package, then ONLY call clear_request
2595         if p_control_rec.called_from_ui = 'N' then
2596            qp_delayed_requests_pvt.Clear_Request
2597 		(x_return_status =>  l_return_status);
2598         end if;
2599 
2600         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2601         THEN
2602             OE_MSG_PUB.Add_Exc_Msg
2603             (   G_PKG_NAME
2604             ,   'Process_Modifiers'
2605             );
2606         END IF;
2607 
2608         --  Get message count and data
2609 
2610         OE_MSG_PUB.Count_And_Get
2611         (   p_count                       => x_msg_count
2612         ,   p_data                        => x_msg_data
2613         );
2614 
2615     oe_debug_pub.add('EXP process_modifiers in Private');
2616 END Process_Modifiers;
2617 
2618 --  Start of Comments
2619 --  API name    Lock_Modifiers
2620 --  Type        Private
2621 --  Function
2622 --
2623 --  Pre-reqs
2624 --
2625 --  Parameters
2626 --
2627 --  Version     Current version = 1.0
2628 --              Initial version = 1.0
2629 --
2630 --  Notes
2631 --
2632 --  End of Comments
2633 
2634 PROCEDURE Lock_Modifiers
2635 (   p_api_version_number            IN  NUMBER
2636 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
2637 ,   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2638 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
2639 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2640 ,   p_MODIFIER_LIST_rec             IN  QP_Modifiers_PUB.Modifier_List_Rec_Type :=
2641                                         QP_Modifiers_PUB.G_MISS_MODIFIER_LIST_REC
2642 ,   p_MODIFIERS_tbl                 IN  QP_Modifiers_PUB.Modifiers_Tbl_Type :=
2643                                         QP_Modifiers_PUB.G_MISS_MODIFIERS_TBL
2644 ,   p_QUALIFIERS_tbl                IN  QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type :=
2645                                         QP_Qualifier_Rules_PUB.G_MISS_QUALIFIERS_TBL
2646 ,   p_PRICING_ATTR_tbl              IN  QP_Modifiers_PUB.Pricing_Attr_Tbl_Type :=
2647                                         QP_Modifiers_PUB.G_MISS_PRICING_ATTR_TBL
2648 ,   x_MODIFIER_LIST_rec             OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Modifier_List_Rec_Type
2649 ,   x_MODIFIERS_tbl                 OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Modifiers_Tbl_Type
2650 ,   x_QUALIFIERS_tbl                OUT NOCOPY /* file.sql.39 change */ QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type
2651 ,   x_PRICING_ATTR_tbl              OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Pricing_Attr_Tbl_Type
2652 )
2653 IS
2654 l_api_version_number          CONSTANT NUMBER := 1.0;
2655 l_api_name                    CONSTANT VARCHAR2(30):= 'Lock_Modifiers';
2656 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
2657 l_MODIFIERS_rec               QP_Modifiers_PUB.Modifiers_Rec_Type;
2658 l_QUALIFIERS_rec              QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
2659 l_PRICING_ATTR_rec            QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
2660 BEGIN
2661 
2662     oe_debug_pub.add('BEGIN lock_modifiers in Private');
2663     --  Standard call to check for call compatibility
2664 
2665     IF NOT FND_API.Compatible_API_Call
2666            (   l_api_version_number
2667            ,   p_api_version_number
2668            ,   l_api_name
2669            ,   G_PKG_NAME
2670            )
2671     THEN
2672         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2673     END IF;
2674 
2675     --  Initialize message list.
2676 
2677     IF FND_API.to_Boolean(p_init_msg_list) THEN
2678         OE_MSG_PUB.initialize;
2679     END IF;
2680 
2681     --  Set Savepoint
2682 
2683     SAVEPOINT Lock_Modifiers_PVT;
2684 
2685     --  Lock MODIFIER_LIST
2686 
2687     IF p_MODIFIER_LIST_rec.operation = QP_GLOBALS.G_OPR_LOCK THEN
2688 
2689         QP_Modifier_List_Util.Lock_Row
2690         (   p_MODIFIER_LIST_rec           => p_MODIFIER_LIST_rec
2691         ,   x_MODIFIER_LIST_rec           => x_MODIFIER_LIST_rec
2692         ,   x_return_status               => l_return_status
2693         );
2694 
2695         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2696             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2697         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2698             RAISE FND_API.G_EXC_ERROR;
2699         END IF;
2700 
2701 
2702     END IF;
2703 
2704     --  Lock MODIFIERS
2705 
2706     FOR I IN 1..p_MODIFIERS_tbl.COUNT LOOP
2707 
2708         IF p_MODIFIERS_tbl(I).operation = QP_GLOBALS.G_OPR_LOCK THEN
2709 
2710             QP_Modifiers_Util.Lock_Row
2711             (   p_MODIFIERS_rec               => p_MODIFIERS_tbl(I)
2712             ,   x_MODIFIERS_rec               => l_MODIFIERS_rec
2713             ,   x_return_status               => l_return_status
2714             );
2715 
2716             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2717                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2718             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2719                 RAISE FND_API.G_EXC_ERROR;
2720             END IF;
2721 
2722             x_MODIFIERS_tbl(I)             := l_MODIFIERS_rec;
2723 
2724         END IF;
2725 
2726     END LOOP;
2727 
2728     --  Lock QUALIFIERS
2729 
2730     FOR I IN 1..p_QUALIFIERS_tbl.COUNT LOOP
2731 
2732         IF p_QUALIFIERS_tbl(I).operation = QP_GLOBALS.G_OPR_LOCK THEN
2733 
2734             QP_Qualifiers_Util.Lock_Row
2735             (   p_QUALIFIERS_rec              => p_QUALIFIERS_tbl(I)
2736             ,   x_QUALIFIERS_rec              => l_QUALIFIERS_rec
2737             ,   x_return_status               => l_return_status
2738             );
2739 
2740             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2741                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2742             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2743                 RAISE FND_API.G_EXC_ERROR;
2744             END IF;
2745 
2746             x_QUALIFIERS_tbl(I)            := l_QUALIFIERS_rec;
2747 
2748         END IF;
2749 
2750     END LOOP;
2751 
2752     --  Lock PRICING_ATTR
2753 
2754     FOR I IN 1..p_PRICING_ATTR_tbl.COUNT LOOP
2755 
2756         IF p_PRICING_ATTR_tbl(I).operation = QP_GLOBALS.G_OPR_LOCK THEN
2757 
2758             QP_Pricing_Attr_Util.Lock_Row
2759             (   p_PRICING_ATTR_rec            => p_PRICING_ATTR_tbl(I)
2760             ,   x_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
2761             ,   x_return_status               => l_return_status
2762             );
2763 
2764             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2765                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2766             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2767                 RAISE FND_API.G_EXC_ERROR;
2768             END IF;
2769 
2770             x_PRICING_ATTR_tbl(I)          := l_PRICING_ATTR_rec;
2771 
2772         END IF;
2773 
2774     END LOOP;
2775 
2776     --  Set return status
2777 
2778     x_return_status := FND_API.G_RET_STS_SUCCESS;
2779 
2780     --  Get message count and data
2781 
2782     OE_MSG_PUB.Count_And_Get
2783     (   p_count                       => x_msg_count
2784     ,   p_data                        => x_msg_data
2785     );
2786 
2787     oe_debug_pub.add('END lock_modifiers in Private');
2788 
2789 EXCEPTION
2790 
2791     WHEN FND_API.G_EXC_ERROR THEN
2792 
2793         x_return_status := FND_API.G_RET_STS_ERROR;
2794 
2795         --  Get message count and data
2796 
2797         OE_MSG_PUB.Count_And_Get
2798         (   p_count                       => x_msg_count
2799         ,   p_data                        => x_msg_data
2800         );
2801 
2802         --  Rollback
2803 
2804         ROLLBACK TO Lock_Modifiers_PVT;
2805 
2806     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2807 
2808         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2809 
2810         --  Get message count and data
2811 
2812         OE_MSG_PUB.Count_And_Get
2813         (   p_count                       => x_msg_count
2814         ,   p_data                        => x_msg_data
2815         );
2816 
2817         --  Rollback
2818 
2819         ROLLBACK TO Lock_Modifiers_PVT;
2820 
2821     WHEN OTHERS THEN
2822 
2823         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2824 
2825         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2826         THEN
2827             OE_MSG_PUB.Add_Exc_Msg
2828             (   G_PKG_NAME
2829             ,   'Lock_Modifiers'
2830             );
2831         END IF;
2832 
2833         --  Get message count and data
2834 
2835         OE_MSG_PUB.Count_And_Get
2836         (   p_count                       => x_msg_count
2837         ,   p_data                        => x_msg_data
2838         );
2839 
2840         --  Rollback
2841 
2842         ROLLBACK TO Lock_Modifiers_PVT;
2843 
2844 END Lock_Modifiers;
2845 
2846 --  Start of Comments
2847 --  API name    Get_Modifiers
2848 --  Type        Private
2849 --  Function
2850 --
2851 --  Pre-reqs
2852 --
2853 --  Parameters
2854 --
2855 --  Version     Current version = 1.0
2856 --              Initial version = 1.0
2857 --
2858 --  Notes
2859 --
2860 --  End of Comments
2861 
2862 PROCEDURE Get_Modifiers
2863 (   p_api_version_number            IN  NUMBER
2864 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
2865 ,   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2866 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
2867 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2868 ,   p_list_header_id                IN  NUMBER
2869 ,   x_MODIFIER_LIST_rec             OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Modifier_List_Rec_Type
2870 ,   x_MODIFIERS_tbl                 OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Modifiers_Tbl_Type
2871 ,   x_QUALIFIERS_tbl                OUT NOCOPY /* file.sql.39 change */ QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type
2872 ,   x_PRICING_ATTR_tbl              OUT NOCOPY /* file.sql.39 change */ QP_Modifiers_PUB.Pricing_Attr_Tbl_Type
2873 )
2874 IS
2875 l_api_version_number          CONSTANT NUMBER := 1.0;
2876 l_api_name                    CONSTANT VARCHAR2(30):= 'Get_Modifiers';
2877 l_MODIFIER_LIST_rec           QP_Modifiers_PUB.Modifier_List_Rec_Type;
2878 l_MODIFIERS_tbl               QP_Modifiers_PUB.Modifiers_Tbl_Type;
2879 l_QUALIFIERS_tbl              QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
2880 l_PRICING_ATTR_tbl            QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
2881 l_x_PRICING_ATTR_tbl          QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
2882 BEGIN
2883 
2884     oe_debug_pub.add('BEGIN get_modifiers in Private');
2885     --  Standard call to check for call compatibility
2886 
2887     IF NOT FND_API.Compatible_API_Call
2888            (   l_api_version_number
2889            ,   p_api_version_number
2890            ,   l_api_name
2891            ,   G_PKG_NAME
2892            )
2893     THEN
2894         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2895     END IF;
2896 
2897     --  Initialize message list.
2898 
2899     IF FND_API.to_Boolean(p_init_msg_list) THEN
2900         OE_MSG_PUB.initialize;
2901     END IF;
2902 
2903     --  Get MODIFIER_LIST ( parent = MODIFIER_LIST )
2904 
2905     l_MODIFIER_LIST_rec :=  QP_Modifier_List_Util.Query_Row
2906     (   p_list_header_id      => p_list_header_id
2907     );
2908 
2909         --  Get MODIFIERS ( parent = MODIFIER_LIST )
2910 
2911         l_MODIFIERS_tbl :=  QP_Modifiers_Util.Query_Rows
2912         (   p_list_header_id        => l_MODIFIER_LIST_rec.list_header_id
2913         );
2914 
2915 
2916         --  Loop over MODIFIERS's children
2917 
2918         FOR I2 IN 1..l_MODIFIERS_tbl.COUNT LOOP
2919 
2920             --  Get PRICING_ATTR ( parent = MODIFIERS )
2921 
2922             l_PRICING_ATTR_tbl :=  QP_Pricing_Attr_Util.Query_Rows
2923             (   p_list_line_id            => l_MODIFIERS_tbl(I2).list_line_id
2924             );
2925 
2926             FOR I3 IN 1..l_PRICING_ATTR_tbl.COUNT LOOP
2927                 l_PRICING_ATTR_tbl(I3).MODIFIERS_Index := I2;
2928                 l_x_PRICING_ATTR_tbl
2929                 (l_x_PRICING_ATTR_tbl.COUNT + 1) := l_PRICING_ATTR_tbl(I3);
2930             END LOOP;
2931 
2932 
2933         END LOOP;
2934 
2935 
2936         --  Get QUALIFIERS ( parent = MODIFIER_LIST )
2937 
2938         l_QUALIFIERS_tbl :=  QP_Qualifiers_Util_Mod.Query_Rows
2939         (   p_list_header_id        => l_MODIFIER_LIST_rec.list_header_id
2940          );
2941 
2942 
2943     --  Load out parameters
2944 
2945     x_MODIFIER_LIST_rec            := l_MODIFIER_LIST_rec;
2946     x_MODIFIERS_tbl                := l_MODIFIERS_tbl;
2947     x_QUALIFIERS_tbl               := l_QUALIFIERS_tbl;
2948     x_PRICING_ATTR_tbl             := l_x_PRICING_ATTR_tbl;
2949 
2950     --  Set return status
2951 
2952     x_return_status := FND_API.G_RET_STS_SUCCESS;
2953 
2954     --  Get message count and data
2955 
2956     OE_MSG_PUB.Count_And_Get
2957     (   p_count                       => x_msg_count
2958     ,   p_data                        => x_msg_data
2959     );
2960 
2961 
2962 EXCEPTION
2963 
2964     WHEN FND_API.G_EXC_ERROR THEN
2965 
2966         x_return_status := FND_API.G_RET_STS_ERROR;
2967 
2968         --  Get message count and data
2969 
2970         OE_MSG_PUB.Count_And_Get
2971         (   p_count                       => x_msg_count
2972         ,   p_data                        => x_msg_data
2973         );
2974 
2975     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2976 
2977         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2978 
2979         --  Get message count and data
2980 
2981         OE_MSG_PUB.Count_And_Get
2982         (   p_count                       => x_msg_count
2983         ,   p_data                        => x_msg_data
2984         );
2985 
2986     WHEN OTHERS THEN
2987 
2988         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2989 
2990         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2991         THEN
2992             OE_MSG_PUB.Add_Exc_Msg
2993             (   G_PKG_NAME
2994             ,   'Get_Modifiers'
2995             );
2996         END IF;
2997 
2998         --  Get message count and data
2999 
3000         OE_MSG_PUB.Count_And_Get
3001         (   p_count                       => x_msg_count
3002         ,   p_data                        => x_msg_data
3003         );
3004 
3005     oe_debug_pub.add('END get_modifiers in Private');
3006 END Get_Modifiers;
3007 
3008 END QP_Modifiers_PVT;