DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_MODIFIERS_PVT

Source


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