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.7 2008/09/08 07:03:02 jputta 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 		    IF l_QUALIFIERS_rec.QUALIFIER_CONTEXT = 'MODLIST' AND
1198 				l_QUALIFIERS_rec.QUALIFIER_ATTRIBUTE =
1199 						'QUALIFIER_ATTRIBUTE3' THEN
1200 			QP_Qualifiers_Util.Update_Coupon_Row (l_QUALIFIERS_rec); ---Added for bug 7315016
1201 		    END IF;
1202 
1203                 ELSIF l_QUALIFIERS_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
1204 
1205                     l_QUALIFIERS_rec.creation_date := SYSDATE;
1206                     l_QUALIFIERS_rec.created_by    := FND_GLOBAL.USER_ID;
1207 
1208                     QP_Qualifiers_Util.Insert_Row (l_QUALIFIERS_rec);
1209 
1210                 END IF;
1211 
1212             END IF;
1213 
1214         END IF;
1215 
1216        END IF; /* if operation is create, update or delete */
1217 
1218         --  Load tables.
1219 
1220         l_QUALIFIERS_tbl(I)            := l_QUALIFIERS_rec;
1221         l_old_QUALIFIERS_tbl(I)        := l_old_QUALIFIERS_rec;
1222 
1223     --  For loop exception handler.
1224 
1225 
1226     EXCEPTION
1227 
1228         WHEN FND_API.G_EXC_ERROR THEN
1229 
1230             l_QUALIFIERS_rec.return_status := FND_API.G_RET_STS_ERROR;
1231             l_QUALIFIERS_tbl(I)            := l_QUALIFIERS_rec;
1232             l_old_QUALIFIERS_tbl(I)        := l_old_QUALIFIERS_rec;
1233 
1234             -- mkarya If process_price_list has been called from public package, then ONLY call
1235             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1236             if l_control_rec.called_from_ui = 'N' then
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_header_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.list_line_id,
1245 	          x_return_status => l_return_status );
1246 
1247  	       qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1248 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1249 	          p_entity_id => l_QUALIFIERS_rec.qualifier_id,
1250 	          x_return_status => l_return_status );
1251             end if;
1252 
1253         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1254 
1255             l_QUALIFIERS_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1256             l_QUALIFIERS_tbl(I)            := l_QUALIFIERS_rec;
1257             l_old_QUALIFIERS_tbl(I)        := l_old_QUALIFIERS_rec;
1258 
1259             -- mkarya If process_price_list has been called from public package, then ONLY call
1260             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1261             if l_control_rec.called_from_ui = 'N' then
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_header_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.list_line_id,
1270 	          x_return_status => l_return_status );
1271 
1272  	       qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1273 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1274 	          p_entity_id => l_QUALIFIERS_rec.qualifier_id,
1275 	          x_return_status => l_return_status );
1276             end if;
1277 
1278             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1279 
1280         WHEN OTHERS THEN
1281 
1282             l_QUALIFIERS_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1283             l_QUALIFIERS_tbl(I)            := l_QUALIFIERS_rec;
1284             l_old_QUALIFIERS_tbl(I)        := l_old_QUALIFIERS_rec;
1285 
1286             IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1287             THEN
1288                 oe_msg_pub.Add_Exc_Msg
1289                 (   G_PKG_NAME
1290                 ,   'Qualifierss'
1291                 );
1292             END IF;
1293 
1294             -- mkarya If process_price_list has been called from public package, then ONLY call
1295             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1296             if l_control_rec.called_from_ui = 'N' then
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_header_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.list_line_id,
1305 	          x_return_status => l_return_status );
1306 
1307  	       qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1308 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1309 	          p_entity_id => l_QUALIFIERS_rec.qualifier_id,
1310 	          x_return_status => l_return_status );
1311             end if;
1312 
1313             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1314 
1315     END;
1316     END LOOP;
1317 
1318     --  Load OUT parameters
1319 
1320     x_QUALIFIERS_tbl               := l_QUALIFIERS_tbl;
1321     x_old_QUALIFIERS_tbl           := l_old_QUALIFIERS_tbl;
1322 
1323 EXCEPTION
1324 
1325     WHEN FND_API.G_EXC_ERROR THEN
1326 
1327         RAISE;
1328 
1329     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1330 
1331 
1332         RAISE;
1333 
1334     WHEN OTHERS THEN
1335 
1336         IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1337         THEN
1338             oe_msg_pub.Add_Exc_Msg
1339             (   G_PKG_NAME
1340             ,   'Qualifierss'
1341             );
1342         END IF;
1343 
1344 
1345         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1346 
1347 END Qualifierss;
1348 
1349 
1350 
1351 --  Pricing_Attrs
1352 
1353 PROCEDURE Pricing_Attrs
1354 (   p_validation_level              IN  NUMBER
1355 ,   p_control_rec                   IN  QP_GLOBALS.Control_Rec_Type
1356 ,   p_PRICING_ATTR_tbl              IN  QP_Price_List_PUB.Pricing_Attr_Tbl_Type
1357 ,   p_old_PRICING_ATTR_tbl          IN  QP_Price_List_PUB.Pricing_Attr_Tbl_Type
1358 ,   x_PRICING_ATTR_tbl              OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Pricing_Attr_Tbl_Type
1359 ,   x_old_PRICING_ATTR_tbl          OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Pricing_Attr_Tbl_Type
1360 )
1361 IS
1362 l_return_status               VARCHAR2(1);
1363 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
1364 l_PRICING_ATTR_rec            QP_Price_List_PUB.Pricing_Attr_Rec_Type;
1365 l_p_PRICING_ATTR_rec          QP_Price_List_PUB.Pricing_Attr_Rec_Type;
1366 l_PRICING_ATTR_tbl            QP_Price_List_PUB.Pricing_Attr_Tbl_Type;
1367 l_old_PRICING_ATTR_rec        QP_Price_List_PUB.Pricing_Attr_Rec_Type;
1368 l_old_PRICING_ATTR_tbl        QP_Price_List_PUB.Pricing_Attr_Tbl_Type;
1369 l_pte_code                    VARCHAR2(30);
1370 l_source_system_code          VARCHAR2(30);
1371 l_saved_pte_code              VARCHAR2(30);
1372 l_saved_source_system_code    VARCHAR2(30);
1373 --Bug 4706180
1374 l_rltd_modifier_grp_type  VARCHAR2(30);
1375 
1376 BEGIN
1377 
1378   oe_debug_pub.add('entering pricing attrs');
1379 
1380     --Added for Bug 2444971 - Begin
1381     FND_PROFILE.GET('QP_PRICING_TRANSACTION_ENTITY', l_pte_code);
1382     FND_PROFILE.GET('QP_SOURCE_SYSTEM_CODE', l_source_system_code);
1383     --Added for Bug 2444971 - End
1384 
1385     --  Init local table variables.
1386 
1387     l_PRICING_ATTR_tbl             := p_PRICING_ATTR_tbl;
1388     l_old_PRICING_ATTR_tbl         := p_old_PRICING_ATTR_tbl;
1389 
1390   oe_debug_pub.add('before for loop ');
1391 
1392     FOR I IN 1..l_PRICING_ATTR_tbl.COUNT LOOP
1393     BEGIN
1394 
1395         --  Load local records.
1396 
1397         l_PRICING_ATTR_rec := l_PRICING_ATTR_tbl(I);
1398 
1399        --Fetch modfier group type (Bug 4706180) Start
1400        BEGIN
1401          SELECT RLTD_MODIFIER_GRP_TYPE
1402          INTO   l_rltd_modifier_grp_type
1403          FROM   qp_rltd_modifiers rm
1404          WHERE  rm.TO_RLTD_MODIFIER_ID = l_PRICING_ATTR_rec.list_line_id;
1405        EXCEPTION
1406          WHEN OTHERS THEN
1407           l_rltd_modifier_grp_type := '';
1408        END;
1409        --End
1410 
1411         -- If the 'value to' in the price break is equal to null and the value from is not null then
1412         -- make the 'value to' equal to 999999999999999 to accomodate a high value
1413         IF(l_Pricing_Attr_rec.pricing_attr_value_to IS NULL
1414             AND l_Pricing_Attr_rec.pricing_attr_value_from IS NOT NULL
1415             -- Bug 4706180
1416             AND l_rltd_modifier_grp_type = 'PRICE BREAK')
1417         THEN
1418             l_Pricing_Attr_rec.pricing_attr_value_to := '999999999999999';
1419         END IF;
1420 
1421         IF l_old_PRICING_ATTR_tbl.EXISTS(I) THEN
1422           oe_debug_pub.add('record already exists');
1423             l_old_PRICING_ATTR_rec := l_old_PRICING_ATTR_tbl(I);
1424         ELSE
1425             l_old_PRICING_ATTR_rec := QP_Price_List_PUB.G_MISS_PRICING_ATTR_REC;
1426         END IF;
1427 
1428         --  Load API control record
1429          oe_debug_pub.add('before init control rec');
1430 
1431         l_control_rec := QP_GLOBALS.Init_Control_Rec
1432         (   p_operation     => l_PRICING_ATTR_rec.operation
1433         ,   p_control_rec   => p_control_rec
1434         );
1435 
1436         --  Set record return status.
1437 
1438         l_PRICING_ATTR_rec.return_status := FND_API.G_RET_STS_SUCCESS;
1439 
1440         --  Prepare record.
1441 
1442         IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
1443 
1444            oe_debug_pub.add(' operation is create ');
1445 
1446             l_PRICING_ATTR_rec.db_flag := FND_API.G_FALSE;
1447 
1448             --  Set missing old record elements to NULL.
1449 
1450             l_old_PRICING_ATTR_rec :=
1451             Qp_pll_pricing_attr_Util.Convert_Miss_To_Null (l_old_PRICING_ATTR_rec);
1452 
1453         ELSIF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_UPDATE
1454         OR    l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_DELETE
1455         THEN
1456           oe_debug_pub.add('operation is update');
1457 
1458             l_PRICING_ATTR_rec.db_flag := FND_API.G_TRUE;
1459 
1460             --  Query Old if missing
1461 
1462             IF  l_old_PRICING_ATTR_rec.pricing_attribute_id = FND_API.G_MISS_NUM
1463             THEN
1464                    oe_debug_pub.add('query pricing attributes');
1465 
1466                 l_old_PRICING_ATTR_rec := Qp_pll_pricing_attr_Util.Query_Row
1467                 (   p_pricing_attribute_id        => l_PRICING_ATTR_rec.pricing_attribute_id
1468                 );
1469 
1470             ELSE
1471 
1472                 --  Set missing old record elements to NULL.
1473 
1474                 oe_debug_pub.add('set missing record elements to null');
1475                 l_old_PRICING_ATTR_rec :=
1476                 Qp_pll_pricing_attr_Util.Convert_Miss_To_Null (l_old_PRICING_ATTR_rec);
1477 
1478             END IF;
1479 
1480             --  Complete new record from old
1481 
1482            oe_debug_pub.add('complete new record from old');
1483 
1484 
1485             l_PRICING_ATTR_rec := Qp_pll_pricing_attr_Util.Complete_Record
1486             (   p_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1487             ,   p_old_PRICING_ATTR_rec        => l_old_PRICING_ATTR_rec
1488             );
1489 
1490             --Start of code added for Bug 2444971. Added for Patchset H
1491             BEGIN
1492               SELECT h.pte_code, h.source_system_code
1493               INTO   l_saved_pte_code, l_saved_source_system_code
1494               FROM   qp_list_headers_b h, qp_list_lines l
1495               WHERE  h.list_header_id = l.list_header_id
1496               AND    l.list_line_id = l_PRICING_ATTR_rec.list_line_id;
1497 
1498             EXCEPTION
1499               WHEN OTHERS THEN
1500                 NULL;
1501             END;
1502 
1503             IF l_saved_pte_code <> l_pte_code OR
1504                l_saved_source_system_code <> l_source_system_code
1505             THEN
1506 
1507               l_return_status := FND_API.G_RET_STS_ERROR;
1508               FND_MESSAGE.SET_NAME('QP', 'QP_PTE_SS_CODE_MISMATCH');
1509               FND_MESSAGE.SET_TOKEN('SOURCE_SYSTEM',l_saved_source_system_code);
1510               FND_MESSAGE.SET_TOKEN('PTE_CODE',l_saved_pte_code);
1511               OE_MSG_PUB.Add;
1512 
1513               RAISE FND_API.G_EXC_ERROR;
1514 
1515             END IF;
1516             --End of code added for Bug 2444971. Added for Patchset H
1517 
1518         END IF;
1519 
1520         --  Attribute level validation.
1521       IF ( l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_UPDATE
1522         or l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_CREATE
1523         or l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_DELETE ) THEN
1524 
1525         IF  l_control_rec.default_attributes
1526         OR  l_control_rec.change_attributes
1527         THEN
1528 
1529             IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
1530 
1531                 oe_debug_pub.add('validate the attributes');
1532 
1533                 QP_Validate_pll_pricing_attr.Attributes
1534                 (   x_return_status               => l_return_status
1535                 ,   p_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1536                 ,   p_old_PRICING_ATTR_rec        => l_old_PRICING_ATTR_rec
1537                 );
1538 
1539                 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1540                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1541                 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1542                     RAISE FND_API.G_EXC_ERROR;
1543                 END IF;
1544 
1545             END IF;
1546 
1547         END IF;
1548 
1549             --  Clear dependent attributes.
1550 
1551         IF  l_control_rec.change_attributes THEN
1552 
1553            oe_debug_pub.add('clear dependent attr1');
1554             l_p_PRICING_ATTR_rec := l_PRICING_ATTR_rec;
1555             Qp_pll_pricing_attr_Util.Clear_Dependent_Attr
1556             (   p_PRICING_ATTR_rec            => l_p_PRICING_ATTR_rec
1557             ,   p_old_PRICING_ATTR_rec        => l_old_PRICING_ATTR_rec
1558             ,   x_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1559             );
1560 
1561         END IF;
1562 
1563         --  Default missing attributes
1564 
1565         IF  l_control_rec.default_attributes
1566         OR  l_control_rec.change_attributes
1567         THEN
1568 
1569            oe_debug_pub.add('call attributes ');
1570              l_p_PRICING_ATTR_rec := l_PRICING_ATTR_rec;
1571             QP_Default_pll_pricing_attr.Attributes
1572             (   p_PRICING_ATTR_rec            => l_p_PRICING_ATTR_rec
1573             ,   x_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1574             );
1575 
1576         END IF;
1577 
1578         --Start of code added for Bug 2444971. Added for Patchset H
1579         IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_CREATE
1580         THEN
1581           BEGIN
1582             SELECT h.pte_code, h.source_system_code
1583             INTO   l_saved_pte_code, l_saved_source_system_code
1584             FROM   qp_list_headers_b h, qp_list_lines l
1585             WHERE  h.list_header_id = l.list_header_id
1586             AND    l.list_line_id = l_PRICING_ATTR_rec.list_line_id;
1587 
1588           EXCEPTION
1589             WHEN OTHERS THEN
1590               NULL;
1591           END;
1592 
1593           IF l_saved_pte_code <> l_pte_code OR
1594              l_saved_source_system_code <> l_source_system_code
1595           THEN
1596 
1597             l_return_status := FND_API.G_RET_STS_ERROR;
1598             FND_MESSAGE.SET_NAME('QP', 'QP_PTE_SS_CODE_MISMATCH');
1599             FND_MESSAGE.SET_TOKEN('SOURCE_SYSTEM',l_saved_source_system_code);
1600             FND_MESSAGE.SET_TOKEN('PTE_CODE',l_saved_pte_code);
1601             OE_MSG_PUB.Add;
1602 
1603             RAISE FND_API.G_EXC_ERROR;
1604 
1605           END IF;
1606 
1607         END IF; --operation is G_OPR_CREATE
1608         --End of code added for Bug 2444971. Added for Patchset H
1609 
1610         --  Apply attribute changes
1611 
1612         IF  l_control_rec.default_attributes
1613         OR  l_control_rec.change_attributes
1614         THEN
1615             l_p_PRICING_ATTR_rec := l_PRICING_ATTR_rec;
1616            oe_debug_pub.add('before calling apply attribute changes');
1617             Qp_pll_pricing_attr_Util.Apply_Attribute_Changes
1618             (   p_PRICING_ATTR_rec            => l_p_PRICING_ATTR_rec
1619             ,   p_old_PRICING_ATTR_rec        => l_old_PRICING_ATTR_rec
1620             ,   x_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1621             );
1622 
1623         END IF;
1624 
1625         --  Entity level validation.
1626 
1627         IF l_control_rec.validate_entity THEN
1628 
1629             IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
1630 
1631                 QP_Validate_pll_pricing_attr.Entity_Delete
1632                 (   x_return_status               => l_return_status
1633                 ,   p_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1634                 );
1635 
1636             ELSE
1637 
1638                 QP_Validate_pll_pricing_attr.Entity
1639                 (   x_return_status               => l_return_status
1640                 ,   p_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
1641                 ,   p_old_PRICING_ATTR_rec        => l_old_PRICING_ATTR_rec
1642                 );
1643 
1644             END IF;
1645 
1646             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1647                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1648             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1649                 RAISE FND_API.G_EXC_ERROR;
1650             END IF;
1651 
1652         END IF;
1653 
1654         IF l_control_rec.write_to_db THEN
1655                    l_p_PRICING_ATTR_rec := l_PRICING_ATTR_rec;
1656     	          QP_pll_PRICING_ATTR_UTIL.PRE_WRITE_PROCESS
1657                    ( p_Pricing_Attr_rec      => l_p_Pricing_Attr_rec
1658                    , p_old_Pricing_Attr_rec  => l_old_Pricing_Attr_rec
1659                    , x_Pricing_Attr_rec      => l_Pricing_Attr_rec);
1660 
1661         END IF;
1662 
1663         --  Step 4. Write to DB
1664 
1665         IF l_control_rec.write_to_db THEN
1666 
1667             IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
1668 
1669                 Qp_pll_pricing_attr_Util.Delete_Row
1670                 (   p_pricing_attribute_id        => l_PRICING_ATTR_rec.pricing_attribute_id
1671                 );
1672 
1673             ELSE
1674 
1675                 --  Get Who Information
1676 
1677                 l_PRICING_ATTR_rec.last_update_date := SYSDATE;
1678                 l_PRICING_ATTR_rec.last_updated_by := FND_GLOBAL.USER_ID;
1679                 l_PRICING_ATTR_rec.last_update_login := FND_GLOBAL.LOGIN_ID;
1680 
1681                 IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_UPDATE THEN
1682 
1683                    oe_debug_Pub.add('before update row');
1684                     Qp_pll_pricing_attr_Util.Update_Row (l_PRICING_ATTR_rec);
1685 
1686                 ELSIF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
1687 
1688                     l_PRICING_ATTR_rec.creation_date := SYSDATE;
1689                     l_PRICING_ATTR_rec.created_by  := FND_GLOBAL.USER_ID;
1690 
1691                    oe_debug_pub.add('before insert row');
1692 
1693                     Qp_pll_pricing_attr_Util.Insert_Row (l_PRICING_ATTR_rec);
1694 
1695                 END IF;
1696 
1697             END IF;
1698 
1699         END IF;
1700 
1701        END IF; /* if operation is create, update or delete */
1702 
1703         --  Load tables.
1704 
1705         l_PRICING_ATTR_tbl(I)          := l_PRICING_ATTR_rec;
1706         l_old_PRICING_ATTR_tbl(I)      := l_old_PRICING_ATTR_rec;
1707 
1708     --  For loop exception handler.
1709 
1710 
1711     EXCEPTION
1712 
1713         WHEN FND_API.G_EXC_ERROR THEN
1714 
1715             l_PRICING_ATTR_rec.return_status := FND_API.G_RET_STS_ERROR;
1716             l_PRICING_ATTR_tbl(I)          := l_PRICING_ATTR_rec;
1717             l_old_PRICING_ATTR_tbl(I)      := l_old_PRICING_ATTR_rec;
1718 
1719             -- mkarya If process_price_list has been called from public package, then ONLY call
1720             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1721             if l_control_rec.called_from_ui = 'N' then
1722  	       qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1723 		    (p_entity_code => QP_GLOBALS.G_ENTITY_PRICE_LIST_LINE,
1724 	          p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1725 	          x_return_status => l_return_status );
1726 
1727  	       qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1728 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1729 	          p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1730 	          x_return_status => l_return_status );
1731             end if;
1732 
1733         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1734 
1735             l_PRICING_ATTR_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1736             l_PRICING_ATTR_tbl(I)          := l_PRICING_ATTR_rec;
1737             l_old_PRICING_ATTR_tbl(I)      := l_old_PRICING_ATTR_rec;
1738 
1739             -- mkarya If process_price_list has been called from public package, then ONLY call
1740             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1741             if l_control_rec.called_from_ui = 'N' then
1742  	       qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1743 		    (p_entity_code => QP_GLOBALS.G_ENTITY_PRICE_LIST_LINE,
1744 	          p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1745 	          x_return_status => l_return_status );
1746 
1747  	       qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1748 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1749 	          p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1750 	          x_return_status => l_return_status );
1751             end if;
1752 
1753             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1754 
1755         WHEN OTHERS THEN
1756 
1757             l_PRICING_ATTR_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1758             l_PRICING_ATTR_tbl(I)          := l_PRICING_ATTR_rec;
1759             l_old_PRICING_ATTR_tbl(I)      := l_old_PRICING_ATTR_rec;
1760 
1761             IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1762             THEN
1763                 oe_msg_pub.Add_Exc_Msg
1764                 (   G_PKG_NAME
1765                 ,   'Pricing_Attrs'
1766                 );
1767             END IF;
1768 
1769             -- mkarya If process_price_list has been called from public package, then ONLY call
1770             -- qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1771             if l_control_rec.called_from_ui = 'N' then
1772  	       qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1773 		    (p_entity_code => QP_GLOBALS.G_ENTITY_PRICE_LIST_LINE,
1774 	          p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1775 	          x_return_status => l_return_status );
1776 
1777  	       qp_delayed_requests_pvt.delete_reqs_for_deleted_entity
1778 		    (p_entity_code => QP_GLOBALS.G_ENTITY_ALL,
1779 	          p_entity_id => l_PRICING_ATTR_rec.list_line_id,
1780 	          x_return_status => l_return_status );
1781             end if;
1782 
1783             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1784 
1785     END;
1786     END LOOP;
1787 
1788     --  Load OUT parameters
1789 
1790     x_PRICING_ATTR_tbl             := l_PRICING_ATTR_tbl;
1791     x_old_PRICING_ATTR_tbl         := l_old_PRICING_ATTR_tbl;
1792 
1793   oe_debug_pub.add('exiting pricing attrs');
1794 
1795 EXCEPTION
1796 
1797     WHEN FND_API.G_EXC_ERROR THEN
1798 
1799         RAISE;
1800 
1801     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1802 
1803 
1804         RAISE;
1805 
1806     WHEN OTHERS THEN
1807 
1808         IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1809         THEN
1810             oe_msg_pub.Add_Exc_Msg
1811             (   G_PKG_NAME
1812             ,   'Pricing_Attrs'
1813             );
1814         END IF;
1815 
1816 
1817         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1818 
1819 END Pricing_Attrs;
1820 
1821 --  Start of Comments
1822 --  API name    Process_Price_List
1823 --  Type        Private
1824 --  Function
1825 --
1826 --  Pre-reqs
1827 --
1828 --  Parameters
1829 --
1830 --  Version     Current version = 1.0
1831 --              Initial version = 1.0
1832 --
1833 --  Notes
1834 --
1835 --  End of Comments
1836 
1837 PROCEDURE Process_Price_List
1838 (   p_api_version_number            IN  NUMBER
1839 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
1840 ,   p_commit                        IN  VARCHAR2 := FND_API.G_FALSE
1841 ,   p_validation_level              IN  NUMBER := FND_API.G_VALID_LEVEL_FULL
1842 ,   p_control_rec                   IN  QP_GLOBALS.Control_Rec_Type :=
1843                                         QP_GLOBALS.G_MISS_CONTROL_REC
1844 ,   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1845 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
1846 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1847 ,   p_PRICE_LIST_rec                IN  QP_Price_List_PUB.Price_List_Rec_Type :=
1848                                         QP_Price_List_PUB.G_MISS_PRICE_LIST_REC
1849 ,   p_old_PRICE_LIST_rec            IN  QP_Price_List_PUB.Price_List_Rec_Type :=
1850                                         QP_Price_List_PUB.G_MISS_PRICE_LIST_REC
1851 ,   p_PRICE_LIST_LINE_tbl           IN  QP_Price_List_PUB.Price_List_Line_Tbl_Type :=
1852                                         QP_Price_List_PUB.G_MISS_PRICE_LIST_LINE_TBL
1853 ,   p_old_PRICE_LIST_LINE_tbl       IN  QP_Price_List_PUB.Price_List_Line_Tbl_Type :=
1854                                         QP_Price_List_PUB.G_MISS_PRICE_LIST_LINE_TBL
1855 ,   p_QUALIFIERS_tbl                IN  Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type :=
1856 					QP_Price_List_PUB.G_MISS_QUALIFIERS_TBL
1857                                         --Qp_Qualifier_Rules_Pub.G_MISS_QUALIFIERS_TBL  --2422176
1858 ,   p_old_QUALIFIERS_tbl            IN  Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type :=
1859 					QP_Price_List_PUB.G_MISS_QUALIFIERS_TBL
1860                                         --Qp_Qualifier_Rules_Pub.G_MISS_QUALIFIERS_TBL  --2422176
1861 ,   p_PRICING_ATTR_tbl              IN  QP_Price_List_PUB.Pricing_Attr_Tbl_Type :=
1862                                         QP_Price_List_PUB.G_MISS_PRICING_ATTR_TBL
1863 ,   p_old_PRICING_ATTR_tbl          IN  QP_Price_List_PUB.Pricing_Attr_Tbl_Type :=
1864                                         QP_Price_List_PUB.G_MISS_PRICING_ATTR_TBL
1865 ,   x_PRICE_LIST_rec                OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Price_List_Rec_Type
1866 ,   x_PRICE_LIST_LINE_tbl           OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Price_List_Line_Tbl_Type
1867 ,   x_QUALIFIERS_tbl                OUT NOCOPY /* file.sql.39 change */ Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type
1868 ,   x_PRICING_ATTR_tbl              OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Pricing_Attr_Tbl_Type
1869 )
1870 IS
1871 l_api_version_number          CONSTANT NUMBER := 1.0;
1872 l_api_name                    CONSTANT VARCHAR2(30):= 'Process_Price_List';
1873 l_return_status               VARCHAR2(1);
1874 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
1875 l_PRICE_LIST_rec              QP_Price_List_PUB.Price_List_Rec_Type := p_PRICE_LIST_rec;
1876 l_p_PRICE_LIST_rec            QP_Price_List_PUB.Price_List_Rec_Type := p_PRICE_LIST_rec;
1877 l_old_PRICE_LIST_rec          QP_Price_List_PUB.Price_List_Rec_Type := p_old_PRICE_LIST_rec;
1878 l_p_old_PRICE_LIST_rec        QP_Price_List_PUB.Price_List_Rec_Type := p_old_PRICE_LIST_rec;
1879 l_PRICE_LIST_LINE_rec         QP_Price_List_PUB.Price_List_Line_Rec_Type;
1880 l_PRICE_LIST_LINE_tbl         QP_Price_List_PUB.Price_List_Line_Tbl_Type;
1881 l_p_PRICE_LIST_LINE_tbl       QP_Price_List_PUB.Price_List_Line_Tbl_Type;
1882 l_old_PRICE_LIST_LINE_rec     QP_Price_List_PUB.Price_List_Line_Rec_Type;
1883 l_old_PRICE_LIST_LINE_tbl     QP_Price_List_PUB.Price_List_Line_Tbl_Type;
1884 l_p_old_PRICE_LIST_LINE_tbl   QP_Price_List_PUB.Price_List_Line_Tbl_Type;
1885 l_QUALIFIERS_rec              Qp_Qualifier_Rules_Pub.Qualifiers_Rec_Type;
1886 l_QUALIFIERS_tbl              Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type;
1887 l_p_QUALIFIERS_tbl            Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type;
1888 l_old_QUALIFIERS_rec          Qp_Qualifier_Rules_Pub.Qualifiers_Rec_Type;
1889 l_old_QUALIFIERS_tbl          Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type;
1890 l_p_old_QUALIFIERS_tbl        Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type;
1891 l_PRICING_ATTR_rec            QP_Price_List_PUB.Pricing_Attr_Rec_Type;
1892 l_PRICING_ATTR_tbl            QP_Price_List_PUB.Pricing_Attr_Tbl_Type;
1893 l_p_PRICING_ATTR_tbl          QP_Price_List_PUB.Pricing_Attr_Tbl_Type;
1894 l_old_PRICING_ATTR_rec        QP_Price_List_PUB.Pricing_Attr_Rec_Type;
1895 l_old_PRICING_ATTR_tbl        QP_Price_List_PUB.Pricing_Attr_Tbl_Type;
1896 l_p_old_PRICING_ATTR_tbl      QP_Price_List_PUB.Pricing_Attr_Tbl_Type;
1897 l_installed_status            VARCHAR2(1);
1898 -- Blanket Agreement
1899 l_qual_exists                 VARCHAR2(1) := 'N';
1900 BEGIN
1901 
1902    oe_debug_pub.add('entering process price list');
1903 
1904     --  Standard call to check for call compatibility
1905 
1906     IF NOT FND_API.Compatible_API_Call
1907            (   l_api_version_number
1908            ,   p_api_version_number
1909            ,   l_api_name
1910            ,   G_PKG_NAME
1911            )
1912     THEN
1913 	  oe_debug_pub.add('in unexpected error 1');
1914         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1915     END IF;
1916 
1917 
1918     oe_debug_Pub.add('process_Price_list 1');
1919     --  Initialize message list.
1920 
1921     IF FND_API.to_Boolean(p_init_msg_list) THEN
1922         oe_msg_pub.initialize;
1923     END IF;
1924 
1925    /* check for installation status ; if it's basic then this api
1926       is not available */
1927 
1928     l_installed_status := QP_UTIL.get_qp_status;
1929 
1930     IF l_installed_status = 'N' THEN
1931 
1932        l_return_status := FND_API.G_RET_STS_ERROR;
1933 	  FND_MESSAGE.SET_NAME('QP', 'QP_BASIC_PRICING_UNAVAILABLE');
1934 	  OE_MSG_PUB.Add;
1935        RAISE FND_API.G_EXC_ERROR;
1936 
1937     END IF;
1938 
1939       --  Init local table variables.
1940 
1941       l_PRICE_LIST_LINE_tbl          := p_PRICE_LIST_LINE_tbl;
1942       l_old_PRICE_LIST_LINE_tbl      := p_old_PRICE_LIST_LINE_tbl;
1943 
1944       --  Init local table variables.
1945 
1946       l_QUALIFIERS_tbl               := p_QUALIFIERS_tbl;
1947       l_old_QUALIFIERS_tbl           := p_old_QUALIFIERS_tbl;
1948 
1949       --  Init local table variables.
1950 
1951       l_PRICING_ATTR_tbl             := p_PRICING_ATTR_tbl;
1952       l_old_PRICING_ATTR_tbl         := p_old_PRICING_ATTR_tbl;
1953 
1954       --  Price_List
1955       oe_debug_Pub.add('process_Price_list 2');
1956       l_p_PRICE_LIST_rec := l_PRICE_LIST_rec;
1957       l_p_old_PRICE_LIST_rec := l_old_PRICE_LIST_rec;
1958       Price_List
1959       (   p_validation_level            => p_validation_level
1960       ,   p_control_rec                 => p_control_rec
1961       ,   p_PRICE_LIST_rec              => l_p_PRICE_LIST_rec
1962       ,   p_old_PRICE_LIST_rec          => l_p_old_PRICE_LIST_rec
1963       ,   x_PRICE_LIST_rec              => l_PRICE_LIST_rec
1964       ,   x_old_PRICE_LIST_rec          => l_old_PRICE_LIST_rec
1965       );
1966       oe_debug_Pub.add('process_Price_list 3');
1967 
1968       --  Perform PRICE_LIST group requests.
1969 
1970       IF p_control_rec.process AND
1971         (p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL OR
1972         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_PRICE_LIST)
1973       THEN
1974 
1975          QP_DELAYED_REQUESTS_PVT.Process_Request_for_Entity
1976             (p_entity_code   => QP_GLOBALS.G_ENTITY_PRICE_LIST
1977             ,p_delete        => FND_API.G_TRUE
1978             ,x_return_status => l_return_status
1979             );
1980          IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1981                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1982          ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1983                  RAISE FND_API.G_EXC_ERROR;
1984          END IF;
1985 
1986       END IF;
1987 
1988       --  Load parent key if missing and operation is create.
1989 
1990       FOR I IN 1..l_PRICE_LIST_LINE_tbl.COUNT LOOP
1991 
1992           l_PRICE_LIST_LINE_rec := l_PRICE_LIST_LINE_tbl(I);
1993 
1994           IF l_PRICE_LIST_LINE_rec.operation = QP_GLOBALS.G_OPR_CREATE
1995           AND (l_PRICE_LIST_LINE_rec.list_header_id IS NULL OR
1996               l_PRICE_LIST_LINE_rec.list_header_id = FND_API.G_MISS_NUM)
1997           THEN
1998 
1999             --  Copy parent_id.
2000 
2001             l_PRICE_LIST_LINE_tbl(I).list_header_id := l_PRICE_LIST_rec.list_header_id;
2002           END IF;
2003 
2004       END LOOP;
2005 
2006       --  Price_List_Lines
2007       oe_debug_Pub.add('process_Price_list 4');
2008       l_p_PRICE_LIST_LINE_tbl := l_PRICE_LIST_LINE_tbl;
2009       l_p_old_PRICE_LIST_LINE_tbl := l_old_PRICE_LIST_LINE_tbl;
2010       Price_List_Lines
2011       (   p_validation_level            => p_validation_level
2012       ,   p_control_rec                 => p_control_rec
2013       ,   p_PRICE_LIST_LINE_tbl         => l_p_PRICE_LIST_LINE_tbl
2014       ,   p_old_PRICE_LIST_LINE_tbl     => l_p_old_PRICE_LIST_LINE_tbl
2015       ,   x_PRICE_LIST_LINE_tbl         => l_PRICE_LIST_LINE_tbl
2016       ,   x_old_PRICE_LIST_LINE_tbl     => l_old_PRICE_LIST_LINE_tbl
2017       );
2018       oe_debug_Pub.add('process_Price_list 5');
2019 
2020       --  Perform PRICE_LIST_LINE group requests.
2021 
2022       IF p_control_rec.process AND
2023         (p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL OR
2024         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_PRICE_LIST_LINE)
2025       THEN
2026 
2027          QP_DELAYED_REQUESTS_PVT.Process_Request_for_Entity
2028             (p_entity_code   => QP_GLOBALS.G_ENTITY_PRICE_LIST_LINE
2029             ,p_delete        => FND_API.G_TRUE
2030             ,x_return_status => l_return_status
2031             );
2032          IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2033                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2034          ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2035                  RAISE FND_API.G_EXC_ERROR;
2036          END IF;
2037 
2038       END IF;
2039 
2040       --  Load parent key if missing and operation is create.
2041 
2042       FOR I IN 1..l_QUALIFIERS_tbl.COUNT LOOP
2043 
2044           l_QUALIFIERS_rec := l_QUALIFIERS_tbl(I);
2045 
2046           IF l_QUALIFIERS_rec.operation = QP_GLOBALS.G_OPR_CREATE
2047           AND (l_QUALIFIERS_rec.list_header_id IS NULL OR
2048               l_QUALIFIERS_rec.list_header_id = FND_API.G_MISS_NUM)
2049           THEN
2050 
2051             --  Copy parent_id.
2052 
2053             l_QUALIFIERS_tbl(I).list_header_id := l_PRICE_LIST_rec.list_header_id;
2054           END IF;
2055       END LOOP;
2056 
2057       --  Qualifierss
2058 
2059       oe_debug_Pub.add('process_Price_list 6');
2060       l_p_QUALIFIERS_tbl := l_QUALIFIERS_tbl;
2061       l_p_old_QUALIFIERS_tbl := l_old_QUALIFIERS_tbl;
2062       Qualifierss
2063       (   p_validation_level            => p_validation_level
2064       ,   p_control_rec                 => p_control_rec
2065       ,   p_QUALIFIERS_tbl              => l_p_QUALIFIERS_tbl
2066       ,   p_old_QUALIFIERS_tbl          => l_p_old_QUALIFIERS_tbl
2067       ,   x_QUALIFIERS_tbl              => l_QUALIFIERS_tbl
2068       ,   x_old_QUALIFIERS_tbl          => l_old_QUALIFIERS_tbl
2069       );
2070       oe_debug_Pub.add('process_Price_list 7');
2071 
2072 
2073       --  Perform QUALIFIERS group requests.
2074 
2075       IF p_control_rec.process AND
2076         (p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL OR
2077         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_QUALIFIERS)
2078       THEN
2079         oe_debug_pub.add('process_Price_List 12');
2080         NULL;
2081 
2082       END IF;
2083 
2084       --  Load parent key if missing and operation is create.
2085 
2086       FOR I IN 1..l_PRICING_ATTR_tbl.COUNT LOOP
2087 
2088           oe_debug_pub.add('process_Price_List 13');
2089           l_PRICING_ATTR_rec := l_PRICING_ATTR_tbl(I);
2090 
2091           IF l_PRICING_ATTR_rec.operation = QP_GLOBALS.G_OPR_CREATE
2092           AND (l_PRICING_ATTR_rec.list_line_id IS NULL OR
2093             l_PRICING_ATTR_rec.list_line_id = FND_API.G_MISS_NUM)
2094           THEN
2095 
2096           oe_debug_pub.add('process_Price_List 14');
2097             --  Check If parent exists.
2098 
2099               IF l_PRICE_LIST_LINE_tbl.EXISTS(l_PRICING_ATTR_rec.PRICE_LIST_LINE_index) THEN
2100 
2101                 --  Copy parent_id.
2102           oe_debug_pub.add('process_Price_List 15');
2103 
2104                 l_PRICING_ATTR_tbl(I).list_line_id := l_PRICE_LIST_LINE_tbl(l_PRICING_ATTR_rec.PRICE_LIST_LINE_index).list_line_id;
2105 
2106 
2107                 -- Copy list line's from_rltd_modifier_id to pricing attr's from_rltd_modifier_id
2108 
2109 		 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;
2110 
2111 
2112               ELSE
2113         oe_debug_pub.add('process_Price_List 16');
2114 
2115                 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_ERROR)
2116                 THEN
2117         oe_debug_pub.add('process_Price_List 17');
2118 
2119                     FND_MESSAGE.SET_NAME('QP','QP_API_INV_PARENT_INDEX');
2120         oe_debug_pub.add('process_Price_List 18');
2121                     FND_MESSAGE.SET_TOKEN('ENTITY_NAME','PRICING_ATTR');
2122         oe_debug_pub.add('process_Price_List 19');
2123                     FND_MESSAGE.SET_TOKEN('ENTITY_INDEX',I);
2124         oe_debug_pub.add('process_Price_List 20');
2125                     FND_MESSAGE.SET_TOKEN('PARENT_INDEX',l_PRICING_ATTR_rec.PRICE_LIST_LINE_index);
2126         oe_debug_pub.add('process_Price_List 21');
2127                     oe_msg_pub.Add;
2128 
2129 
2130                 END IF;
2131              END IF;
2132           END IF;
2133       END LOOP;
2134         oe_debug_pub.add('process_Price_List 22');
2135 
2136       --  Pricing_Attrs
2137       oe_debug_Pub.add('process_Price_list 8');
2138       l_p_PRICING_ATTR_tbl := l_PRICING_ATTR_tbl;
2139       l_p_old_PRICING_ATTR_tbl := l_old_PRICING_ATTR_tbl;
2140       Pricing_Attrs
2141       (   p_validation_level            => p_validation_level
2142       ,   p_control_rec                 => p_control_rec
2143       ,   p_PRICING_ATTR_tbl            => l_p_PRICING_ATTR_tbl
2144       ,   p_old_PRICING_ATTR_tbl        => l_p_old_PRICING_ATTR_tbl
2145       ,   x_PRICING_ATTR_tbl            => l_PRICING_ATTR_tbl
2146       ,   x_old_PRICING_ATTR_tbl        => l_old_PRICING_ATTR_tbl
2147       );
2148       oe_debug_Pub.add('process_Price_list 9');
2149 
2150       --  Perform PRICING_ATTR group requests.
2151 
2152       IF p_control_rec.process AND
2153         (p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL OR
2154         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_PRICING_ATTR)
2155       THEN
2156 
2157         NULL;
2158 
2159       END IF;
2160 
2161       --  Step 6. Perform Object group logic
2162 
2163       IF p_control_rec.process AND
2164         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL
2165       THEN
2166 
2167 	  oe_debug_pub.add('Ren: before processing delayed request');
2168 
2169         QP_DELAYED_REQUESTS_PVT.Process_Delayed_Requests(
2170                    x_return_status => l_return_status
2171           );
2172 
2173         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2174                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2175         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2176                   RAISE FND_API.G_EXC_ERROR;
2177         END IF;
2178 
2179 	   oe_debug_pub.add('Ren: after processing delayed request');
2180 
2181       END IF;
2182 
2183       --  Done processing, load OUT parameters.
2184 
2185       x_PRICE_LIST_rec               := l_PRICE_LIST_rec;
2186       x_PRICE_LIST_LINE_tbl          := l_PRICE_LIST_LINE_tbl;
2187       x_QUALIFIERS_tbl               := l_QUALIFIERS_tbl;
2188       x_PRICING_ATTR_tbl             := l_PRICING_ATTR_tbl;
2189 
2190       --  Clear API cache.
2191 
2192       IF p_control_rec.clear_api_cache THEN
2193 
2194         NULL;
2195 
2196       END IF;
2197 
2198       --  Clear API request tbl.
2199 
2200       IF p_control_rec.clear_api_requests THEN
2201 
2202         NULL;
2203 
2204       END IF;
2205 
2206       --  Derive return status.
2207 
2208       x_return_status := FND_API.G_RET_STS_SUCCESS;
2209 
2210       IF l_PRICE_LIST_rec.return_status = FND_API.G_RET_STS_ERROR THEN
2211         x_return_status := FND_API.G_RET_STS_ERROR;
2212       END IF;
2213 
2214       FOR I IN 1..l_PRICE_LIST_LINE_tbl.COUNT LOOP
2215 
2216           IF ( l_PRICE_LIST_LINE_tbl(I).return_status = FND_API.G_RET_STS_ERROR AND
2217           ( l_PRICE_LIST_LINE_rec.list_line_id  <>  FND_API.G_MISS_NUM  OR
2218                            l_PRICE_LIST_LINE_rec.list_line_id  <>  NULL )  ) THEN
2219             x_return_status := FND_API.G_RET_STS_ERROR;
2220           END IF;
2221 
2222       END LOOP;
2223 
2224       FOR I IN 1..l_QUALIFIERS_tbl.COUNT LOOP
2225 
2226           IF l_QUALIFIERS_tbl(I).return_status = FND_API.G_RET_STS_ERROR THEN
2227             x_return_status := FND_API.G_RET_STS_ERROR;
2228           END IF;
2229 
2230       END LOOP;
2231 
2232       FOR I IN 1..l_PRICING_ATTR_tbl.COUNT LOOP
2233 
2234           IF l_PRICING_ATTR_tbl(I).return_status = FND_API.G_RET_STS_ERROR THEN
2235             x_return_status := FND_API.G_RET_STS_ERROR;
2236           END IF;
2237 
2238       END LOOP;
2239 
2240     --  Get message count and data
2241     oe_debug_Pub.add('process_Price_list 11');
2242 
2243     oe_msg_pub.Count_And_Get
2244     (   p_count                       => x_msg_count
2245     ,   p_data                        => x_msg_data
2246     );
2247 
2248     -- Create blanket header qualifier
2249 
2250     IF (     p_control_rec.write_to_db --Bug#3309455
2251          AND x_PRICE_LIST_rec.operation = QP_GLOBALS.G_OPR_CREATE
2252          AND x_PRICE_LIST_rec.list_source_code = 'BSO'
2253          AND ( x_PRICE_LIST_rec.orig_system_header_ref <> NULL
2254             OR x_PRICE_LIST_rec.orig_system_header_ref <> FND_API.G_MISS_CHAR)
2255        )
2256     THEN
2257         oe_debug_pub.add('inside create qualifier for blanket modifier');
2258 
2259 	BEGIN
2260 	  select 'Y' into l_qual_exists
2261 	  from qp_qualifiers
2262 	  where list_header_id = x_PRICE_LIST_rec.list_header_id
2263 	   and qualifier_context = 'ORDER'
2264 	   and qualifier_attribute = 'QUALIFIER_ATTRIBUTE5'
2265 	   and qualifier_attr_value = x_PRICE_LIST_rec.orig_system_header_ref;
2266 	EXCEPTION
2267 	  WHEN NO_DATA_FOUND THEN
2268 	    l_qual_exists := 'N';
2269 	  WHEN OTHERS THEN NULL;
2270 	END;
2271 
2272 	IF l_qual_exists = 'N' THEN
2273 
2274 	         QP_Qualifier_Rules_PVT.Create_Blanket_Qualifier
2275 	           (   p_list_header_id            => x_PRICE_LIST_rec.list_header_id
2276 	           ,   p_old_list_header_id        => x_PRICE_LIST_rec.list_header_id
2277 	           ,   p_blanket_id                => to_number(x_PRICE_LIST_rec.orig_system_header_ref)
2278 	           ,   p_operation                 => QP_GLOBALS.G_OPR_CREATE
2279 	           ,   x_return_status             => l_return_status
2280 	           );
2281 
2282 	        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2283 	           oe_debug_pub.add('Unexp Error while creating blanket qualifier');
2284 		   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2285 	        ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2286 	           oe_debug_pub.add('Exp Error while creating blanket qualifier');
2287 	           RAISE FND_API.G_EXC_ERROR;
2288 		END IF;
2289 	END IF;
2290 
2291     END IF;
2292 
2293     oe_debug_pub.add('exiting process price list');
2294 
2295 
2296 EXCEPTION
2297 
2298     WHEN FND_API.G_EXC_ERROR THEN
2299 
2300         x_return_status := FND_API.G_RET_STS_ERROR;
2301 
2302         -- mkarya If process_price_list has been called from public package, then ONLY call clear_request
2303         if p_control_rec.called_from_ui = 'N' then
2304 	   qp_delayed_requests_pvt.Clear_Request
2305 		(x_return_status => l_return_status);
2306         end if;
2307 
2308         --  Get message count and data
2309 
2310         oe_msg_pub.Count_And_Get
2311         (   p_count                       => x_msg_count
2312         ,   p_data                        => x_msg_data
2313         );
2314 
2315     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2316 
2317         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2318 
2319         -- mkarya If process_price_list has been called from public package, then ONLY call clear_request
2320         if p_control_rec.called_from_ui = 'N' then
2321 	   qp_delayed_requests_pvt.Clear_Request
2322 		(x_return_status => l_return_status);
2323         end if;
2324 
2325         --  Get message count and data
2326 
2327         oe_msg_pub.Count_And_Get
2328         (   p_count                       => x_msg_count
2329         ,   p_data                        => x_msg_data
2330         );
2331 
2332 
2333     WHEN OTHERS THEN
2334 
2335         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2336 
2337         -- mkarya If process_price_list has been called from public package, then ONLY call clear_request
2338         if p_control_rec.called_from_ui = 'N' then
2339 	   qp_delayed_requests_pvt.Clear_Request
2340 		(x_return_status => l_return_status);
2341         end if;
2342 
2343         IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
2344         THEN
2345             oe_msg_pub.Add_Exc_Msg
2346             (   G_PKG_NAME
2347             ,   'Process_Price_List'
2348             );
2349         END IF;
2350 
2351         --  Get message count and data
2352 
2353         oe_msg_pub.Count_And_Get
2354         (   p_count                       => x_msg_count
2355         ,   p_data                        => x_msg_data
2356         );
2357 
2358 END Process_Price_List;
2359 
2360 --  Start of Comments
2361 --  API name    Lock_Price_List
2362 --  Type        Private
2363 --  Function
2364 --
2365 --  Pre-reqs
2366 --
2367 --  Parameters
2368 --
2369 --  Version     Current version = 1.0
2370 --              Initial version = 1.0
2371 --
2372 --  Notes
2373 --
2374 --  End of Comments
2375 
2376 PROCEDURE Lock_Price_List
2377 (   p_api_version_number            IN  NUMBER
2378 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
2379 ,   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2380 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
2381 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2382 ,   p_PRICE_LIST_rec                IN  QP_Price_List_PUB.Price_List_Rec_Type :=
2383                                         QP_Price_List_PUB.G_MISS_PRICE_LIST_REC
2384 ,   p_PRICE_LIST_LINE_tbl           IN  QP_Price_List_PUB.Price_List_Line_Tbl_Type :=
2385                                         QP_Price_List_PUB.G_MISS_PRICE_LIST_LINE_TBL
2386 ,   p_QUALIFIERS_tbl                IN  Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type :=
2387 					QP_Price_List_PUB.G_MISS_QUALIFIERS_TBL
2388                                         --Qp_Qualifier_Rules_Pub.G_MISS_QUALIFIERS_TBL  --2422176
2389 ,   p_PRICING_ATTR_tbl              IN  QP_Price_List_PUB.Pricing_Attr_Tbl_Type :=
2390                                         QP_Price_List_PUB.G_MISS_PRICING_ATTR_TBL
2391 ,   x_PRICE_LIST_rec                OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Price_List_Rec_Type
2392 ,   x_PRICE_LIST_LINE_tbl           OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Price_List_Line_Tbl_Type
2393 ,   x_QUALIFIERS_tbl                OUT NOCOPY /* file.sql.39 change */ Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type
2394 ,   x_PRICING_ATTR_tbl              OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Pricing_Attr_Tbl_Type
2395 )
2396 IS
2397 l_api_version_number          CONSTANT NUMBER := 1.0;
2398 l_api_name                    CONSTANT VARCHAR2(30):= 'Lock_Price_List';
2399 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
2400 l_PRICE_LIST_LINE_rec         QP_Price_List_PUB.Price_List_Line_Rec_Type;
2401 l_QUALIFIERS_rec              Qp_Qualifier_Rules_Pub.Qualifiers_Rec_Type;
2402 l_PRICING_ATTR_rec            QP_Price_List_PUB.Pricing_Attr_Rec_Type;
2403 BEGIN
2404 
2405     --  Standard call to check for call compatibility
2406 
2407     IF NOT FND_API.Compatible_API_Call
2408            (   l_api_version_number
2409            ,   p_api_version_number
2410            ,   l_api_name
2411            ,   G_PKG_NAME
2412            )
2413     THEN
2414         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2415     END IF;
2416 
2417     --  Initialize message list.
2418 
2419     IF FND_API.to_Boolean(p_init_msg_list) THEN
2420         oe_msg_pub.initialize;
2421     END IF;
2422 
2423     --  Set Savepoint
2424 
2425     SAVEPOINT Lock_Price_List_PVT;
2426 
2427     --  Lock PRICE_LIST
2428 
2429     IF p_PRICE_LIST_rec.operation = QP_GLOBALS.G_OPR_LOCK THEN
2430 
2431         QP_Price_List_Util.Lock_Row
2432         (   p_PRICE_LIST_rec              => p_PRICE_LIST_rec
2433         ,   x_PRICE_LIST_rec              => x_PRICE_LIST_rec
2434         ,   x_return_status               => l_return_status
2435         );
2436 
2437         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2438             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2439         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2440             RAISE FND_API.G_EXC_ERROR;
2441         END IF;
2442 
2443 
2444     END IF;
2445 
2446     --  Lock PRICE_LIST_LINE
2447 
2448     FOR I IN 1..p_PRICE_LIST_LINE_tbl.COUNT LOOP
2449 
2450         IF p_PRICE_LIST_LINE_tbl(I).operation = QP_GLOBALS.G_OPR_LOCK THEN
2451 
2452             QP_Price_List_Line_Util.Lock_Row
2453             (   p_PRICE_LIST_LINE_rec         => p_PRICE_LIST_LINE_tbl(I)
2454             ,   x_PRICE_LIST_LINE_rec         => l_PRICE_LIST_LINE_rec
2455             ,   x_return_status               => l_return_status
2456             );
2457 
2458             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2459                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2460             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2461                 RAISE FND_API.G_EXC_ERROR;
2462             END IF;
2463 
2464             x_PRICE_LIST_LINE_tbl(I)       := l_PRICE_LIST_LINE_rec;
2465 
2466         END IF;
2467 
2468     END LOOP;
2469 
2470     --  Lock QUALIFIERS
2471 
2472     FOR I IN 1..p_QUALIFIERS_tbl.COUNT LOOP
2473 
2474         IF p_QUALIFIERS_tbl(I).operation = QP_GLOBALS.G_OPR_LOCK THEN
2475 
2476             QP_Qualifiers_Util.Lock_Row
2477             (   p_QUALIFIERS_rec              => p_QUALIFIERS_tbl(I)
2478             ,   x_QUALIFIERS_rec              => l_QUALIFIERS_rec
2479             ,   x_return_status               => l_return_status
2480             );
2481 
2482 
2483             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2484                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2485             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2486                 RAISE FND_API.G_EXC_ERROR;
2487             END IF;
2488 
2489             x_QUALIFIERS_tbl(I)            := l_QUALIFIERS_rec;
2490 
2491         END IF;
2492 
2493     END LOOP;
2494 
2495     --  Lock PRICING_ATTR
2496 
2497     FOR I IN 1..p_PRICING_ATTR_tbl.COUNT LOOP
2498 
2499         IF p_PRICING_ATTR_tbl(I).operation = QP_GLOBALS.G_OPR_LOCK THEN
2500 
2501             Qp_pll_pricing_attr_Util.Lock_Row
2502             (   p_PRICING_ATTR_rec            => p_PRICING_ATTR_tbl(I)
2503             ,   x_PRICING_ATTR_rec            => l_PRICING_ATTR_rec
2504             ,   x_return_status               => l_return_status
2505             );
2506 
2507             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2508                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2509             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2510                 RAISE FND_API.G_EXC_ERROR;
2511             END IF;
2512 
2513             x_PRICING_ATTR_tbl(I)          := l_PRICING_ATTR_rec;
2514 
2515         END IF;
2516 
2517     END LOOP;
2518 
2519     --  Set return status
2520 
2521     x_return_status := FND_API.G_RET_STS_SUCCESS;
2522 
2523     --  Get message count and data
2524 
2525     oe_msg_pub.Count_And_Get
2526     (   p_count                       => x_msg_count
2527     ,   p_data                        => x_msg_data
2528     );
2529 
2530 
2531 EXCEPTION
2532 
2533     WHEN FND_API.G_EXC_ERROR THEN
2534 
2535         x_return_status := FND_API.G_RET_STS_ERROR;
2536 
2537         --  Get message count and data
2538 
2539         oe_msg_pub.Count_And_Get
2540         (   p_count                       => x_msg_count
2541         ,   p_data                        => x_msg_data
2542         );
2543 
2544         --  Rollback
2545 
2546         ROLLBACK TO Lock_Price_List_PVT;
2547 
2548     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2549 
2550         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2551 
2552         --  Get message count and data
2553 
2554         oe_msg_pub.Count_And_Get
2555         (   p_count                       => x_msg_count
2556         ,   p_data                        => x_msg_data
2557         );
2558 
2559         --  Rollback
2560 
2561         ROLLBACK TO Lock_Price_List_PVT;
2562 
2563     WHEN OTHERS THEN
2564 
2565         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2566 
2567         IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
2568         THEN
2569             oe_msg_pub.Add_Exc_Msg
2570             (   G_PKG_NAME
2571             ,   'Lock_Price_List'
2572             );
2573         END IF;
2574 
2575         --  Get message count and data
2576 
2577         oe_msg_pub.Count_And_Get
2578         (   p_count                       => x_msg_count
2579         ,   p_data                        => x_msg_data
2580         );
2581 
2582         --  Rollback
2583 
2584         ROLLBACK TO Lock_Price_List_PVT;
2585 
2586 END Lock_Price_List;
2587 
2588 --  Start of Comments
2589 --  API name    Get_Price_List
2590 --  Type        Private
2591 --  Function
2592 --
2593 --  Pre-reqs
2594 --
2595 --  Parameters
2596 --
2597 --  Version     Current version = 1.0
2598 --              Initial version = 1.0
2599 --
2600 --  Notes
2601 --
2602 --  End of Comments
2603 
2604 PROCEDURE Get_Price_List
2605 (   p_api_version_number            IN  NUMBER
2606 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
2607 ,   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2608 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
2609 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2610 ,   p_list_header_id                IN  NUMBER
2611 ,   x_PRICE_LIST_rec                OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Price_List_Rec_Type
2612 ,   x_PRICE_LIST_LINE_tbl           OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Price_List_Line_Tbl_Type
2613 ,   x_QUALIFIERS_tbl                OUT NOCOPY /* file.sql.39 change */ Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type
2614 ,   x_PRICING_ATTR_tbl              OUT NOCOPY /* file.sql.39 change */ QP_Price_List_PUB.Pricing_Attr_Tbl_Type
2615 )
2616 IS
2617 l_api_version_number          CONSTANT NUMBER := 1.0;
2618 l_api_name                    CONSTANT VARCHAR2(30):= 'Get_Price_List';
2619 l_PRICE_LIST_rec              QP_Price_List_PUB.Price_List_Rec_Type;
2620 l_PRICE_LIST_LINE_tbl         QP_Price_List_PUB.Price_List_Line_Tbl_Type;
2621 l_QUALIFIERS_tbl              Qp_Qualifier_Rules_Pub.Qualifiers_Tbl_Type;
2622 l_PRICING_ATTR_tbl            QP_Price_List_PUB.Pricing_Attr_Tbl_Type;
2623 l_x_PRICING_ATTR_tbl          QP_Price_List_PUB.Pricing_Attr_Tbl_Type;
2624 BEGIN
2625 
2626     --  Standard call to check for call compatibility
2627 
2628     IF NOT FND_API.Compatible_API_Call
2629            (   l_api_version_number
2630            ,   p_api_version_number
2631            ,   l_api_name
2632            ,   G_PKG_NAME
2633            )
2634     THEN
2635         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2636     END IF;
2637 
2638     --  Initialize message list.
2639 
2640     IF FND_API.to_Boolean(p_init_msg_list) THEN
2641         oe_msg_pub.initialize;
2642     END IF;
2643 
2644     --  Get PRICE_LIST ( parent = PRICE_LIST )
2645 
2646     l_PRICE_LIST_rec :=  QP_Price_List_Util.Query_Row
2647     (   p_list_header_id      => p_list_header_id
2648     );
2649 
2650         --  Get PRICE_LIST_LINE ( parent = PRICE_LIST )
2651 
2652         l_PRICE_LIST_LINE_tbl :=  QP_Price_List_Line_Util.Query_Rows
2653         (   p_list_header_id        => l_PRICE_LIST_rec.list_header_id
2654         );
2655 
2656 
2657         --  Loop over PRICE_LIST_LINE's children
2658 
2659         FOR I2 IN 1..l_PRICE_LIST_LINE_tbl.COUNT LOOP
2660 
2661             --  Get PRICING_ATTR ( parent = PRICE_LIST_LINE )
2662 
2663             l_PRICING_ATTR_tbl :=  Qp_pll_pricing_attr_Util.Query_Rows
2664             (   p_list_line_id            => l_PRICE_LIST_LINE_tbl(I2).list_line_id
2665             );
2666 
2667             FOR I3 IN 1..l_PRICING_ATTR_tbl.COUNT LOOP
2668                 l_PRICING_ATTR_tbl(I3).PRICE_LIST_LINE_Index := I2;
2669                 l_x_PRICING_ATTR_tbl
2670                 (l_x_PRICING_ATTR_tbl.COUNT + 1) := l_PRICING_ATTR_tbl(I3);
2671             END LOOP;
2672 
2673 
2674         END LOOP;
2675 
2676 
2677         --  Get QUALIFIERS ( parent = PRICE_LIST )
2678 
2679         l_QUALIFIERS_tbl :=  QP_Qualifiers_Util_Mod.Query_Rows
2680         (   p_list_header_id        => l_PRICE_LIST_rec.list_header_id
2681         );
2682 
2683 
2684 
2685     --  Load out parameters
2686 
2687     x_PRICE_LIST_rec               := l_PRICE_LIST_rec;
2688     x_PRICE_LIST_LINE_tbl          := l_PRICE_LIST_LINE_tbl;
2689     x_QUALIFIERS_tbl               := l_QUALIFIERS_tbl;
2690     x_PRICING_ATTR_tbl             := l_x_PRICING_ATTR_tbl;
2691 
2692     --  Set return status
2693 
2694     x_return_status := FND_API.G_RET_STS_SUCCESS;
2695 
2696     --  Get message count and data
2697 
2698     oe_msg_pub.Count_And_Get
2699     (   p_count                       => x_msg_count
2700     ,   p_data                        => x_msg_data
2701     );
2702 
2703 
2704 EXCEPTION
2705 
2706     WHEN FND_API.G_EXC_ERROR THEN
2707 
2708         x_return_status := FND_API.G_RET_STS_ERROR;
2709 
2710         --  Get message count and data
2711 
2712         oe_msg_pub.Count_And_Get
2713         (   p_count                       => x_msg_count
2714         ,   p_data                        => x_msg_data
2715         );
2716 
2717     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2718 
2719         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2720 
2721         --  Get message count and data
2722 
2723         oe_msg_pub.Count_And_Get
2724         (   p_count                       => x_msg_count
2725         ,   p_data                        => x_msg_data
2726         );
2727 
2728     WHEN OTHERS THEN
2729 
2730         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2731 
2732         IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
2733         THEN
2734             oe_msg_pub.Add_Exc_Msg
2735             (   G_PKG_NAME
2736             ,   'Get_Price_List'
2737             );
2738         END IF;
2739 
2740         --  Get message count and data
2741 
2742         oe_msg_pub.Count_And_Get
2743         (   p_count                       => x_msg_count
2744         ,   p_data                        => x_msg_data
2745         );
2746 
2747 END Get_Price_List;
2748 
2749 END QP_LIST_HEADERS_PVT;