DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_LIST_HEADERS_PVT

Source


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