DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_QP_FORM_PRICING_ATTR

Source


1 PACKAGE BODY QP_QP_Form_Pricing_Attr AS
2 /* $Header: QPXFPRAB.pls 120.5 2008/06/10 10:25:54 kdurgasi ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'QP_QP_Form_Pricing_Attr';
7 
8 --  Global variables holding cached record.
9 
10 g_PRICING_ATTR_rec            QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
11 g_db_PRICING_ATTR_rec         QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
12 
13 --  Forward declaration of procedures maintaining entity record cache.
14 
15 PROCEDURE Write_PRICING_ATTR
16 (   p_PRICING_ATTR_rec              IN  QP_Modifiers_PUB.Pricing_Attr_Rec_Type
17 ,   p_db_record                     IN  BOOLEAN := FALSE
18 );
19 
20 FUNCTION Get_PRICING_ATTR
21 (   p_db_record                     IN  BOOLEAN := FALSE
22 ,   p_pricing_attribute_id          IN  NUMBER
23 )
24 RETURN QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
25 
26 PROCEDURE Clear_PRICING_ATTR;
27 
28 --  Global variable holding performed operations.
29 
30 g_opr__tbl                    QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
31 
32 --  Procedure : Default_Attributes
33 --
34 
35 PROCEDURE Default_Attributes
36 (   p_list_line_id                  IN  NUMBER
37 ,   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
38 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
39 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
40 ,   x_accumulate_flag               OUT NOCOPY /* file.sql.39 change */ VARCHAR2
41 ,   x_attribute1                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
42 ,   x_attribute10                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
43 ,   x_attribute11                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
44 ,   x_attribute12                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
45 ,   x_attribute13                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
46 ,   x_attribute14                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
47 ,   x_attribute15                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
48 ,   x_attribute2                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
49 ,   x_attribute3                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
50 ,   x_attribute4                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
51 ,   x_attribute5                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
52 ,   x_attribute6                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
53 ,   x_attribute7                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
54 ,   x_attribute8                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
55 ,   x_attribute9                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
56 ,   x_attribute_grouping_no         OUT NOCOPY /* file.sql.39 change */ NUMBER
57 ,   x_context                       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
58 ,   x_excluder_flag                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
59 ,   x_list_line_id                  OUT NOCOPY /* file.sql.39 change */ NUMBER
60 ,   x_pricing_attribute             OUT NOCOPY /* file.sql.39 change */ VARCHAR2
61 ,   x_pricing_attribute_context     OUT NOCOPY /* file.sql.39 change */ VARCHAR2
62 ,   x_pricing_attribute_id          OUT NOCOPY /* file.sql.39 change */ NUMBER
63 ,   x_pricing_attr_value_from       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
64 ,   x_pricing_attr_value_to         OUT NOCOPY /* file.sql.39 change */ VARCHAR2
65 ,   x_product_attribute             OUT NOCOPY /* file.sql.39 change */ VARCHAR2
66 ,   x_product_attribute_context     OUT NOCOPY /* file.sql.39 change */ VARCHAR2
67 ,   x_product_attr_value            OUT NOCOPY /* file.sql.39 change */ VARCHAR2
68 ,   x_product_uom_code              OUT NOCOPY /* file.sql.39 change */ VARCHAR2
69 ,   x_accumulate                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
70 ,   x_excluder                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
71 ,   x_list_line                     OUT NOCOPY /* file.sql.39 change */ VARCHAR2
72 ,   x_product_uom                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
73 ,   x_product_attribute_datatype    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
74 ,   x_pricing_attribute_datatype    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
75 ,   x_comparison_operator_code      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
76 )
77 IS
78 l_PRICING_ATTR_rec            QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
79 l_PRICING_ATTR_val_rec        QP_Modifiers_PUB.Pricing_Attr_Val_Rec_Type;
80 l_PRICING_ATTR_tbl            QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
81 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
82 l_return_status               VARCHAR2(1);
83 l_x_MODIFIER_LIST_rec         QP_Modifiers_PUB.Modifier_List_Rec_Type;
84 l_x_MODIFIERS_rec             QP_Modifiers_PUB.Modifiers_Rec_Type;
85 l_x_MODIFIERS_tbl             QP_Modifiers_PUB.Modifiers_Tbl_Type;
86 l_x_QUALIFIERS_rec            QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
87 l_x_QUALIFIERS_tbl            QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
88 l_x_PRICING_ATTR_rec          QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
89 l_x_PRICING_ATTR_tbl          QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
90 BEGIN
91 
92 oe_debug_pub.add('BEGIN Default_Attributes in QPXFPRAB');
93 
94     --  Set control flags.
95 
96     l_control_rec.controlled_operation := TRUE;
97     l_control_rec.default_attributes   := TRUE;
98 
99     l_control_rec.change_attributes    := FALSE;
100     l_control_rec.validate_entity      := FALSE;
101     l_control_rec.write_to_DB          := FALSE;
102     l_control_rec.process              := FALSE;
103 
104     --  Instruct API to retain its caches
105 
106     l_control_rec.clear_api_cache      := FALSE;
107     l_control_rec.clear_api_requests   := FALSE;
108 
109     --  Load IN parameters if any exist
110 
111     l_PRICING_ATTR_rec.list_line_id              := p_list_line_id;
112 
113 
114     --  Defaulting of flex values is currently done by the form.
115     --  Set flex attributes to NULL in order to avoid defaulting them.
116 
117     l_PRICING_ATTR_rec.attribute1                 := NULL;
118     l_PRICING_ATTR_rec.attribute10                := NULL;
119     l_PRICING_ATTR_rec.attribute11                := NULL;
120     l_PRICING_ATTR_rec.attribute12                := NULL;
121     l_PRICING_ATTR_rec.attribute13                := NULL;
122     l_PRICING_ATTR_rec.attribute14                := NULL;
123     l_PRICING_ATTR_rec.attribute15                := NULL;
124     l_PRICING_ATTR_rec.attribute2                 := NULL;
125     l_PRICING_ATTR_rec.attribute3                 := NULL;
126     l_PRICING_ATTR_rec.attribute4                 := NULL;
127     l_PRICING_ATTR_rec.attribute5                 := NULL;
128     l_PRICING_ATTR_rec.attribute6                 := NULL;
129     l_PRICING_ATTR_rec.attribute7                 := NULL;
130     l_PRICING_ATTR_rec.attribute8                 := NULL;
131     l_PRICING_ATTR_rec.attribute9                 := NULL;
132     l_PRICING_ATTR_rec.context                    := NULL;
133 
134     --  Set Operation to Create
135 
136     l_PRICING_ATTR_rec.operation := QP_GLOBALS.G_OPR_CREATE;
137 
138     --  Populate PRICING_ATTR table
139 
140 oe_debug_pub.add(to_char(l_PRICING_ATTR_rec.attribute_grouping_no)||'attr_grp_no QPXFPRAB');
141     l_PRICING_ATTR_tbl(1) := l_PRICING_ATTR_rec;
142 
143     --  Call QP_Modifiers_PVT.Process_MODIFIERS
144 
145     QP_Modifiers_PVT.Process_MODIFIERS
146     (   p_api_version_number          => 1.0
147     ,   p_init_msg_list               => FND_API.G_TRUE
148     ,   x_return_status               => l_return_status
149     ,   x_msg_count                   => x_msg_count
150     ,   x_msg_data                    => x_msg_data
151     ,   p_control_rec                 => l_control_rec
152     ,   p_PRICING_ATTR_tbl            => l_PRICING_ATTR_tbl
153     ,   x_MODIFIER_LIST_rec           => l_x_MODIFIER_LIST_rec
154     ,   x_MODIFIERS_tbl               => l_x_MODIFIERS_tbl
155     ,   x_QUALIFIERS_tbl              => l_x_QUALIFIERS_tbl
156     ,   x_PRICING_ATTR_tbl            => l_x_PRICING_ATTR_tbl
157     );
158 
159     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
160         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
161     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
162         RAISE FND_API.G_EXC_ERROR;
163     END IF;
164 
165 
166     --  Unload out tbl
167 
168     l_x_PRICING_ATTR_rec := l_x_PRICING_ATTR_tbl(1);
169 
170     --  Load OUT parameters.
171 
172     x_accumulate_flag              := l_x_PRICING_ATTR_rec.accumulate_flag;
173     x_attribute1                   := l_x_PRICING_ATTR_rec.attribute1;
174     x_attribute10                  := l_x_PRICING_ATTR_rec.attribute10;
175     x_attribute11                  := l_x_PRICING_ATTR_rec.attribute11;
176     x_attribute12                  := l_x_PRICING_ATTR_rec.attribute12;
177     x_attribute13                  := l_x_PRICING_ATTR_rec.attribute13;
178     x_attribute14                  := l_x_PRICING_ATTR_rec.attribute14;
179     x_attribute15                  := l_x_PRICING_ATTR_rec.attribute15;
180     x_attribute2                   := l_x_PRICING_ATTR_rec.attribute2;
181     x_attribute3                   := l_x_PRICING_ATTR_rec.attribute3;
182     x_attribute4                   := l_x_PRICING_ATTR_rec.attribute4;
183     x_attribute5                   := l_x_PRICING_ATTR_rec.attribute5;
184     x_attribute6                   := l_x_PRICING_ATTR_rec.attribute6;
185     x_attribute7                   := l_x_PRICING_ATTR_rec.attribute7;
186     x_attribute8                   := l_x_PRICING_ATTR_rec.attribute8;
187     x_attribute9                   := l_x_PRICING_ATTR_rec.attribute9;
188     x_attribute_grouping_no        := l_x_PRICING_ATTR_rec.attribute_grouping_no;
189     x_context                      := l_x_PRICING_ATTR_rec.context;
190     x_excluder_flag                := l_x_PRICING_ATTR_rec.excluder_flag;
191     x_list_line_id                 := l_x_PRICING_ATTR_rec.list_line_id;
192     x_pricing_attribute            := l_x_PRICING_ATTR_rec.pricing_attribute;
193     x_pricing_attribute_context    := l_x_PRICING_ATTR_rec.pricing_attribute_context;
194     x_pricing_attribute_id         := l_x_PRICING_ATTR_rec.pricing_attribute_id;
195     x_pricing_attr_value_from      := l_x_PRICING_ATTR_rec.pricing_attr_value_from;
196     x_pricing_attr_value_to        := l_x_PRICING_ATTR_rec.pricing_attr_value_to;
197     x_product_attribute            := l_x_PRICING_ATTR_rec.product_attribute;
198     x_product_attribute_context    := l_x_PRICING_ATTR_rec.product_attribute_context;
199     x_product_attr_value           := l_x_PRICING_ATTR_rec.product_attr_value;
200     x_product_uom_code             := l_x_PRICING_ATTR_rec.product_uom_code;
201     x_product_attribute_datatype   := l_x_PRICING_ATTR_rec.product_attribute_datatype;
202     x_pricing_attribute_datatype   := l_x_PRICING_ATTR_rec.pricing_attribute_datatype;
203     x_comparison_operator_code     := l_x_PRICING_ATTR_rec.comparison_operator_code;
204 
205     --  Load display out parameters if any
206 
207     l_PRICING_ATTR_val_rec := QP_Pricing_Attr_Util.Get_Values
208     (   p_PRICING_ATTR_rec            => l_x_PRICING_ATTR_rec
209     );
210     x_accumulate                   := l_PRICING_ATTR_val_rec.accumulate;
211     x_excluder                     := l_PRICING_ATTR_val_rec.excluder;
212     x_list_line                    := l_PRICING_ATTR_val_rec.list_line;
213     x_product_uom                  := l_PRICING_ATTR_val_rec.product_uom;
214 
215     --  Write to cache.
216     --  Set db_flag to False before writing to cache
217 
218     l_x_PRICING_ATTR_rec.db_flag := FND_API.G_FALSE;
219 
220     Write_PRICING_ATTR
221     (   p_PRICING_ATTR_rec            => l_x_PRICING_ATTR_rec
222     );
223 
224     --  Set return status.
225 
226     x_return_status := FND_API.G_RET_STS_SUCCESS;
227 
228     --  Get message count and data
229 
230     OE_MSG_PUB.Count_And_Get
231     (   p_count                       => x_msg_count
232     ,   p_data                        => x_msg_data
233     );
234 
235 
236 oe_debug_pub.add('END Default_Attributes in QPXFPRAB');
237 
238 EXCEPTION
239 
240     WHEN FND_API.G_EXC_ERROR THEN
241 
242         x_return_status := FND_API.G_RET_STS_ERROR;
243 
244         --  Get message count and data
245 
246         OE_MSG_PUB.Count_And_Get
247         (   p_count                       => x_msg_count
248         ,   p_data                        => x_msg_data
249         );
250 
251     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
252 
253         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
254 
255         --  Get message count and data
256 
257         OE_MSG_PUB.Count_And_Get
258         (   p_count                       => x_msg_count
259         ,   p_data                        => x_msg_data
260         );
261 
262     WHEN OTHERS THEN
263 
264         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
265 
266         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
267         THEN
268             OE_MSG_PUB.Add_Exc_Msg
269             (   G_PKG_NAME
270             ,   'Default_Attributes'
271             );
272         END IF;
273 
274         --  Get message count and data
275 
276         OE_MSG_PUB.Count_And_Get
277         (   p_count                       => x_msg_count
278         ,   p_data                        => x_msg_data
279         );
280 
281 END Default_Attributes;
282 
283 --  Procedure   :   Change_Attribute
284 --
285 
286 PROCEDURE Change_Attribute
287 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
288 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
289 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
290 ,   p_pricing_attribute_id          IN  NUMBER
291 ,   p_attr_id                       IN  NUMBER
292 ,   p_attr_value                    IN  VARCHAR2
293 ,   p_attribute1                    IN  VARCHAR2
294 ,   p_attribute10                   IN  VARCHAR2
295 ,   p_attribute11                   IN  VARCHAR2
296 ,   p_attribute12                   IN  VARCHAR2
297 ,   p_attribute13                   IN  VARCHAR2
298 ,   p_attribute14                   IN  VARCHAR2
299 ,   p_attribute15                   IN  VARCHAR2
300 ,   p_attribute2                    IN  VARCHAR2
301 ,   p_attribute3                    IN  VARCHAR2
302 ,   p_attribute4                    IN  VARCHAR2
303 ,   p_attribute5                    IN  VARCHAR2
304 ,   p_attribute6                    IN  VARCHAR2
305 ,   p_attribute7                    IN  VARCHAR2
306 ,   p_attribute8                    IN  VARCHAR2
307 ,   p_attribute9                    IN  VARCHAR2
308 ,   p_context                       IN  VARCHAR2
309 ,   x_accumulate_flag               OUT NOCOPY /* file.sql.39 change */ VARCHAR2
310 ,   x_attribute1                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
311 ,   x_attribute10                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
312 ,   x_attribute11                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
313 ,   x_attribute12                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
314 ,   x_attribute13                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
315 ,   x_attribute14                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
316 ,   x_attribute15                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
317 ,   x_attribute2                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
318 ,   x_attribute3                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
319 ,   x_attribute4                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
320 ,   x_attribute5                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
321 ,   x_attribute6                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
322 ,   x_attribute7                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
323 ,   x_attribute8                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
324 ,   x_attribute9                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
325 ,   x_attribute_grouping_no         OUT NOCOPY /* file.sql.39 change */ NUMBER
326 ,   x_context                       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
327 ,   x_excluder_flag                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
328 ,   x_list_line_id                  OUT NOCOPY /* file.sql.39 change */ NUMBER
329 ,   x_pricing_attribute             OUT NOCOPY /* file.sql.39 change */ VARCHAR2
330 ,   x_pricing_attribute_context     OUT NOCOPY /* file.sql.39 change */ VARCHAR2
331 ,   x_pricing_attribute_id          OUT NOCOPY /* file.sql.39 change */ NUMBER
332 ,   x_pricing_attr_value_from       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
333 ,   x_pricing_attr_value_to         OUT NOCOPY /* file.sql.39 change */ VARCHAR2
334 ,   x_product_attribute             OUT NOCOPY /* file.sql.39 change */ VARCHAR2
335 ,   x_product_attribute_context     OUT NOCOPY /* file.sql.39 change */ VARCHAR2
336 ,   x_product_attr_value            OUT NOCOPY /* file.sql.39 change */ VARCHAR2
337 ,   x_product_uom_code              OUT NOCOPY /* file.sql.39 change */ VARCHAR2
338 ,   x_accumulate                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
339 ,   x_excluder                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
340 ,   x_list_line                     OUT NOCOPY /* file.sql.39 change */ VARCHAR2
341 ,   x_product_uom                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
342 ,   x_product_attribute_datatype    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
343 ,   x_pricing_attribute_datatype    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
344 ,   x_comparison_operator_code      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
345 )
346 IS
347 l_PRICING_ATTR_rec            QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
348 l_old_PRICING_ATTR_rec        QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
349 l_PRICING_ATTR_val_rec        QP_Modifiers_PUB.Pricing_Attr_Val_Rec_Type;
350 l_PRICING_ATTR_tbl            QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
351 l_old_PRICING_ATTR_tbl        QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
352 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
353 l_return_status               VARCHAR2(1);
354 l_x_MODIFIER_LIST_rec         QP_Modifiers_PUB.Modifier_List_Rec_Type;
355 l_x_MODIFIERS_rec             QP_Modifiers_PUB.Modifiers_Rec_Type;
356 l_x_MODIFIERS_tbl             QP_Modifiers_PUB.Modifiers_Tbl_Type;
357 l_x_QUALIFIERS_rec            QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
358 l_x_QUALIFIERS_tbl            QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
359 l_x_PRICING_ATTR_rec          QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
360 l_x_PRICING_ATTR_tbl          QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
361 BEGIN
362 
363 oe_debug_pub.add('BEGIN Change_Attribute in QPXFPRAB');
364 
365     --  Set control flags.
366 
367     l_control_rec.controlled_operation := TRUE;
368     l_control_rec.change_attributes    := TRUE;
369 
370     l_control_rec.default_attributes   := FALSE;
371     l_control_rec.validate_entity      := FALSE;
372     l_control_rec.write_to_DB          := FALSE;
373     l_control_rec.process              := FALSE;
374 
375     --  Instruct API to retain its caches
376 
377     l_control_rec.clear_api_cache      := FALSE;
378     l_control_rec.clear_api_requests   := FALSE;
379 
380     --  Read PRICING_ATTR from cache
381     OE_Debug_PUB.add('here');
382 
383     l_PRICING_ATTR_rec := Get_PRICING_ATTR
384     (   p_db_record                   => FALSE
385     ,   p_pricing_attribute_id        => p_pricing_attribute_id
386     );
387 
388     OE_Debug_PUB.add('here1');
389     l_old_PRICING_ATTR_rec         := l_PRICING_ATTR_rec;
390 
391     IF p_attr_id = QP_Pricing_Attr_Util.G_ACCUMULATE THEN
392         l_PRICING_ATTR_rec.accumulate_flag := p_attr_value;
393     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE_GROUPING_NO THEN
394         l_PRICING_ATTR_rec.attribute_grouping_no := TO_NUMBER(p_attr_value);
395     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_EXCLUDER THEN
396         l_PRICING_ATTR_rec.excluder_flag := p_attr_value;
397     OE_Debug_PUB.add(p_attr_value||'exclude here1');
398     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_LIST_LINE THEN
399         l_PRICING_ATTR_rec.list_line_id := TO_NUMBER(p_attr_value);
400     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRICING_ATTRIBUTE THEN
401     OE_Debug_PUB.add(p_attr_id||'attr_value'||QP_Pricing_attr_Util.G_PRICING_ATTRIBUTE);
402         l_PRICING_ATTR_rec.pricing_attribute := p_attr_value;
403     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRICING_ATTRIBUTE_CONTEXT THEN
404         l_PRICING_ATTR_rec.pricing_attribute_context := p_attr_value;
405     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRICING_ATTRIBUTE THEN
406         l_PRICING_ATTR_rec.pricing_attribute_id := TO_NUMBER(p_attr_value);
407     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRICING_ATTR_VALUE_FROM THEN
408         l_PRICING_ATTR_rec.pricing_attr_value_from := p_attr_value;
409     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRICING_ATTR_VALUE_TO THEN
410         l_PRICING_ATTR_rec.pricing_attr_value_to := p_attr_value;
411     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRODUCT_ATTRIBUTE THEN
412         l_PRICING_ATTR_rec.product_attribute := p_attr_value;
413     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRODUCT_ATTRIBUTE_CONTEXT THEN
414         l_PRICING_ATTR_rec.product_attribute_context := p_attr_value;
415     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRODUCT_ATTR_VALUE THEN
416         l_PRICING_ATTR_rec.product_attr_value := p_attr_value;
417     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRODUCT_UOM THEN
418         l_PRICING_ATTR_rec.product_uom_code := p_attr_value;
419     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRODUCT_ATTRIBUTE_DATATYPE THEN
420         l_PRICING_ATTR_rec.product_attribute_datatype := p_attr_value;
421     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_PRICING_ATTRIBUTE_DATATYPE THEN
422         l_PRICING_ATTR_rec.pricing_attribute_datatype := p_attr_value;
423     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_COMPARISON_OPERATOR THEN
424         l_PRICING_ATTR_rec.comparison_operator_code := p_attr_value;
425     ELSIF p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE1
426     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE10
427     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE11
428     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE12
429     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE13
430     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE14
431     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE15
432     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE2
433     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE3
434     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE4
435     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE5
436     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE6
437     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE7
438     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE8
439     OR     p_attr_id = QP_Pricing_Attr_Util.G_ATTRIBUTE9
440     OR     p_attr_id = QP_Pricing_Attr_Util.G_CONTEXT
441     THEN
442 
443         l_PRICING_ATTR_rec.attribute1  := p_attribute1;
444         l_PRICING_ATTR_rec.attribute10 := p_attribute10;
445         l_PRICING_ATTR_rec.attribute11 := p_attribute11;
446         l_PRICING_ATTR_rec.attribute12 := p_attribute12;
447         l_PRICING_ATTR_rec.attribute13 := p_attribute13;
448         l_PRICING_ATTR_rec.attribute14 := p_attribute14;
449         l_PRICING_ATTR_rec.attribute15 := p_attribute15;
450         l_PRICING_ATTR_rec.attribute2  := p_attribute2;
451         l_PRICING_ATTR_rec.attribute3  := p_attribute3;
452         l_PRICING_ATTR_rec.attribute4  := p_attribute4;
453         l_PRICING_ATTR_rec.attribute5  := p_attribute5;
454         l_PRICING_ATTR_rec.attribute6  := p_attribute6;
455         l_PRICING_ATTR_rec.attribute7  := p_attribute7;
456         l_PRICING_ATTR_rec.attribute8  := p_attribute8;
457         l_PRICING_ATTR_rec.attribute9  := p_attribute9;
458         l_PRICING_ATTR_rec.context     := p_context;
459 
460     ELSE
461 
462         --  Unexpected error, unrecognized attribute
463 
464         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
465         THEN
466             OE_MSG_PUB.Add_Exc_Msg
467             (   G_PKG_NAME
468             ,   'Change_Attribute'
469             ,   'Unrecognized attribute'
470             );
471         END IF;
472 
473         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
474 
475     END IF;
476 
477     OE_Debug_PUB.add('operation');
478     --  Set Operation.
479 
480     IF FND_API.To_Boolean(l_PRICING_ATTR_rec.db_flag) THEN
481         l_PRICING_ATTR_rec.operation := QP_GLOBALS.G_OPR_UPDATE;
482     ELSE
483         l_PRICING_ATTR_rec.operation := QP_GLOBALS.G_OPR_CREATE;
484     END IF;
485 
486     --  Populate PRICING_ATTR table
487 
488     l_PRICING_ATTR_tbl(1) := l_PRICING_ATTR_rec;
489     l_old_PRICING_ATTR_tbl(1) := l_old_PRICING_ATTR_rec;
490 
491     --  Call QP_Modifiers_PVT.Process_MODIFIERS
492 
493     OE_Debug_PUB.add('process mod');
494     QP_Modifiers_PVT.Process_MODIFIERS
495     (   p_api_version_number          => 1.0
496     ,   p_init_msg_list               => FND_API.G_TRUE
497     ,   p_validation_level            => FND_API.G_VALID_LEVEL_NONE
498     ,   x_return_status               => l_return_status
499     ,   x_msg_count                   => x_msg_count
500     ,   x_msg_data                    => x_msg_data
501     ,   p_control_rec                 => l_control_rec
502     ,   p_PRICING_ATTR_tbl            => l_PRICING_ATTR_tbl
503     ,   p_old_PRICING_ATTR_tbl        => l_old_PRICING_ATTR_tbl
504     ,   x_MODIFIER_LIST_rec           => l_x_MODIFIER_LIST_rec
505     ,   x_MODIFIERS_tbl               => l_x_MODIFIERS_tbl
506     ,   x_QUALIFIERS_tbl              => l_x_QUALIFIERS_tbl
507     ,   x_PRICING_ATTR_tbl            => l_x_PRICING_ATTR_tbl
508     );
509 
510     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
511         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
512     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
513         RAISE FND_API.G_EXC_ERROR;
514     END IF;
515 
516 
517     OE_Debug_PUB.add('after process mod');
518     --  Unload out tbl
519 
520     l_x_PRICING_ATTR_rec := l_x_PRICING_ATTR_tbl(1);
521 
522     --  Init OUT parameters to missing.
523 
524     x_accumulate_flag              := FND_API.G_MISS_CHAR;
525     x_attribute1                   := FND_API.G_MISS_CHAR;
526     x_attribute10                  := FND_API.G_MISS_CHAR;
527     x_attribute11                  := FND_API.G_MISS_CHAR;
528     x_attribute12                  := FND_API.G_MISS_CHAR;
529     x_attribute13                  := FND_API.G_MISS_CHAR;
530     x_attribute14                  := FND_API.G_MISS_CHAR;
531     x_attribute15                  := FND_API.G_MISS_CHAR;
532     x_attribute2                   := FND_API.G_MISS_CHAR;
533     x_attribute3                   := FND_API.G_MISS_CHAR;
534     x_attribute4                   := FND_API.G_MISS_CHAR;
535     x_attribute5                   := FND_API.G_MISS_CHAR;
536     x_attribute6                   := FND_API.G_MISS_CHAR;
537     x_attribute7                   := FND_API.G_MISS_CHAR;
538     x_attribute8                   := FND_API.G_MISS_CHAR;
539     x_attribute9                   := FND_API.G_MISS_CHAR;
540     x_attribute_grouping_no        := FND_API.G_MISS_NUM;
541     x_context                      := FND_API.G_MISS_CHAR;
542     x_excluder_flag                := FND_API.G_MISS_CHAR;
543     x_list_line_id                 := FND_API.G_MISS_NUM;
544     x_pricing_attribute            := FND_API.G_MISS_CHAR;
545     x_pricing_attribute_context    := FND_API.G_MISS_CHAR;
546     x_pricing_attribute_id         := FND_API.G_MISS_NUM;
547     x_pricing_attr_value_from      := FND_API.G_MISS_CHAR;
548     x_pricing_attr_value_to        := FND_API.G_MISS_CHAR;
549     x_product_attribute            := FND_API.G_MISS_CHAR;
550     x_product_attribute_context    := FND_API.G_MISS_CHAR;
551     x_product_attr_value           := FND_API.G_MISS_CHAR;
552     x_product_uom_code             := FND_API.G_MISS_CHAR;
553     x_accumulate                   := FND_API.G_MISS_CHAR;
554     x_excluder                     := FND_API.G_MISS_CHAR;
555     x_list_line                    := FND_API.G_MISS_CHAR;
556     x_product_uom                  := FND_API.G_MISS_CHAR;
557     x_product_attribute_datatype   := FND_API.G_MISS_CHAR;
558     x_pricing_attribute_datatype   := FND_API.G_MISS_CHAR;
559     x_comparison_operator_code     := FND_API.G_MISS_CHAR;
560 
561     --  Load display out parameters if any
562 
563     l_PRICING_ATTR_val_rec := QP_Pricing_Attr_Util.Get_Values
564     (   p_PRICING_ATTR_rec            => l_x_PRICING_ATTR_rec
565     ,   p_old_PRICING_ATTR_rec        => l_PRICING_ATTR_rec
566     );
567 
568     --  Return changed attributes.
569 
570     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.accumulate_flag,
571                             l_PRICING_ATTR_rec.accumulate_flag)
572     THEN
573         x_accumulate_flag := l_x_PRICING_ATTR_rec.accumulate_flag;
574         x_accumulate := l_PRICING_ATTR_val_rec.accumulate;
575     END IF;
576 
577     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute1,
578                             l_PRICING_ATTR_rec.attribute1)
579     THEN
580         x_attribute1 := l_x_PRICING_ATTR_rec.attribute1;
581     END IF;
582 
583     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute10,
584                             l_PRICING_ATTR_rec.attribute10)
585     THEN
586         x_attribute10 := l_x_PRICING_ATTR_rec.attribute10;
587     END IF;
588 
589     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute11,
590                             l_PRICING_ATTR_rec.attribute11)
591     THEN
592         x_attribute11 := l_x_PRICING_ATTR_rec.attribute11;
593     END IF;
594 
595     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute12,
596                             l_PRICING_ATTR_rec.attribute12)
597     THEN
598         x_attribute12 := l_x_PRICING_ATTR_rec.attribute12;
599     END IF;
600 
601     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute13,
602                             l_PRICING_ATTR_rec.attribute13)
603     THEN
604         x_attribute13 := l_x_PRICING_ATTR_rec.attribute13;
605     END IF;
606 
607     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute14,
608                             l_PRICING_ATTR_rec.attribute14)
609     THEN
610         x_attribute14 := l_x_PRICING_ATTR_rec.attribute14;
611     END IF;
612 
613     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute15,
614                             l_PRICING_ATTR_rec.attribute15)
615     THEN
616         x_attribute15 := l_x_PRICING_ATTR_rec.attribute15;
617     END IF;
618 
619     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute2,
620                             l_PRICING_ATTR_rec.attribute2)
621     THEN
622         x_attribute2 := l_x_PRICING_ATTR_rec.attribute2;
623     END IF;
624 
625     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute3,
626                             l_PRICING_ATTR_rec.attribute3)
627     THEN
628         x_attribute3 := l_x_PRICING_ATTR_rec.attribute3;
629     END IF;
630 
631     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute4,
632                             l_PRICING_ATTR_rec.attribute4)
633     THEN
634         x_attribute4 := l_x_PRICING_ATTR_rec.attribute4;
635     END IF;
636 
637     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute5,
638                             l_PRICING_ATTR_rec.attribute5)
639     THEN
640         x_attribute5 := l_x_PRICING_ATTR_rec.attribute5;
641     END IF;
642 
643     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute6,
644                             l_PRICING_ATTR_rec.attribute6)
645     THEN
646         x_attribute6 := l_x_PRICING_ATTR_rec.attribute6;
647     END IF;
648 
649     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute7,
650                             l_PRICING_ATTR_rec.attribute7)
651     THEN
652         x_attribute7 := l_x_PRICING_ATTR_rec.attribute7;
653     END IF;
654 
655     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute8,
656                             l_PRICING_ATTR_rec.attribute8)
657     THEN
658         x_attribute8 := l_x_PRICING_ATTR_rec.attribute8;
659     END IF;
660 
661     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute9,
662                             l_PRICING_ATTR_rec.attribute9)
663     THEN
664         x_attribute9 := l_x_PRICING_ATTR_rec.attribute9;
665     END IF;
666 
667     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.attribute_grouping_no,
668                             l_PRICING_ATTR_rec.attribute_grouping_no)
669     THEN
670         x_attribute_grouping_no := l_x_PRICING_ATTR_rec.attribute_grouping_no;
671     END IF;
672 
673     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.context,
674                             l_PRICING_ATTR_rec.context)
675     THEN
676         x_context := l_x_PRICING_ATTR_rec.context;
677     END IF;
678 
679     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.excluder_flag,
680                             l_PRICING_ATTR_rec.excluder_flag)
681     THEN
682         x_excluder_flag := l_x_PRICING_ATTR_rec.excluder_flag;
683         x_excluder := l_PRICING_ATTR_val_rec.excluder;
684     END IF;
685 
686     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.list_line_id,
687                             l_PRICING_ATTR_rec.list_line_id)
688     THEN
689         x_list_line_id := l_x_PRICING_ATTR_rec.list_line_id;
690         x_list_line := l_PRICING_ATTR_val_rec.list_line;
691     END IF;
692 
693     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.pricing_attribute,
694                             l_PRICING_ATTR_rec.pricing_attribute)
695     THEN
696         x_pricing_attribute := l_x_PRICING_ATTR_rec.pricing_attribute;
697     END IF;
698 
699     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.pricing_attribute_context,
700                             l_PRICING_ATTR_rec.pricing_attribute_context)
701     THEN
702         x_pricing_attribute_context := l_x_PRICING_ATTR_rec.pricing_attribute_context;
703     END IF;
704 
705 /*  IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.pricing_attribute_id,
706                             l_PRICING_ATTR_rec.pricing_attribute_id)
707     THEN
708         x_pricing_attribute_id := l_x_PRICING_ATTR_rec.pricing_attribute_id;
709         x_pricing_attribute := l_PRICING_ATTR_val_rec.pricing_attribute;
710     END IF;
711 */
712     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.pricing_attr_value_from,
713                             l_PRICING_ATTR_rec.pricing_attr_value_from)
714     THEN
715         x_pricing_attr_value_from := l_x_PRICING_ATTR_rec.pricing_attr_value_from;
716     END IF;
717 
718     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.pricing_attr_value_to,
719                             l_PRICING_ATTR_rec.pricing_attr_value_to)
720     THEN
721         x_pricing_attr_value_to := l_x_PRICING_ATTR_rec.pricing_attr_value_to;
722     END IF;
723 
724     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.product_attribute,
725                             l_PRICING_ATTR_rec.product_attribute)
726     THEN
727         x_product_attribute := l_x_PRICING_ATTR_rec.product_attribute;
728     END IF;
729 
730     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.product_attribute_context,
731                             l_PRICING_ATTR_rec.product_attribute_context)
732     THEN
733         x_product_attribute_context := l_x_PRICING_ATTR_rec.product_attribute_context;
734     END IF;
735 
736     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.product_attr_value,
737                             l_PRICING_ATTR_rec.product_attr_value)
738     THEN
739         x_product_attr_value := l_x_PRICING_ATTR_rec.product_attr_value;
740     END IF;
741 
742     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.product_uom_code,
743                             l_PRICING_ATTR_rec.product_uom_code)
744     THEN
745         x_product_uom_code := l_x_PRICING_ATTR_rec.product_uom_code;
746         x_product_uom := l_PRICING_ATTR_val_rec.product_uom;
747     END IF;
748 
749     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.product_attribute_datatype,
750                             l_PRICING_ATTR_rec.product_attribute_datatype)
751     THEN
752         x_product_attribute_datatype := l_x_PRICING_ATTR_rec.product_attribute_datatype;
753     END IF;
754 
755     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.pricing_attribute_datatype,
756                             l_PRICING_ATTR_rec.pricing_attribute_datatype)
757     THEN
758         x_pricing_attribute_datatype := l_x_PRICING_ATTR_rec.pricing_attribute_datatype;
759     END IF;
760 
761     IF NOT QP_GLOBALS.Equal(l_x_PRICING_ATTR_rec.comparison_operator_code,
762                             l_PRICING_ATTR_rec.comparison_operator_code)
763     THEN
764         x_comparison_operator_code := l_x_PRICING_ATTR_rec.comparison_operator_code;
765     END IF;
766 
767 
768     --  Write to cache.
769 
770     Write_PRICING_ATTR
771     (   p_PRICING_ATTR_rec            => l_x_PRICING_ATTR_rec
772     );
773 
774     --  Set return status.
775 
776     x_return_status := FND_API.G_RET_STS_SUCCESS;
777 
778     --  Get message count and data
779 
780     OE_MSG_PUB.Count_And_Get
781     (   p_count                       => x_msg_count
782     ,   p_data                        => x_msg_data
783     );
784 
785 oe_debug_pub.add('END Change_Attribute in QPXFPRAB');
786 
787 EXCEPTION
788 
789     WHEN FND_API.G_EXC_ERROR THEN
790 
791         x_return_status := FND_API.G_RET_STS_ERROR;
792 
793         --  Get message count and data
794 
795         OE_MSG_PUB.Count_And_Get
796         (   p_count                       => x_msg_count
797         ,   p_data                        => x_msg_data
798         );
799 
800     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
801 
802         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
803 
804         --  Get message count and data
805 
806         OE_MSG_PUB.Count_And_Get
807         (   p_count                       => x_msg_count
808         ,   p_data                        => x_msg_data
809         );
810 
811     WHEN OTHERS THEN
812 
813         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
814 
815         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
816         THEN
817             OE_MSG_PUB.Add_Exc_Msg
818             (   G_PKG_NAME
819             ,   'Change_Attribute'
820             );
821         END IF;
822 
823         --  Get message count and data
824 
825         OE_MSG_PUB.Count_And_Get
826         (   p_count                       => x_msg_count
827         ,   p_data                        => x_msg_data
828         );
829 
830 END Change_Attribute;
831 
832 --  Procedure       Validate_And_Write
833 --
834 
835 PROCEDURE Validate_And_Write
836 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
837 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
838 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
839 ,   p_pricing_attribute_id          IN  NUMBER
840 ,   x_creation_date                 OUT NOCOPY /* file.sql.39 change */ DATE
841 ,   x_created_by                    OUT NOCOPY /* file.sql.39 change */ NUMBER
842 ,   x_last_update_date              OUT NOCOPY /* file.sql.39 change */ DATE
843 ,   x_last_updated_by               OUT NOCOPY /* file.sql.39 change */ NUMBER
844 ,   x_last_update_login             OUT NOCOPY /* file.sql.39 change */ NUMBER
845 )
846 IS
847 l_PRICING_ATTR_rec            QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
848 l_old_PRICING_ATTR_rec        QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
849 l_PRICING_ATTR_tbl            QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
850 l_old_PRICING_ATTR_tbl        QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
851 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
852 l_return_status               VARCHAR2(1);
853 l_x_MODIFIER_LIST_rec         QP_Modifiers_PUB.Modifier_List_Rec_Type;
854 l_x_MODIFIERS_rec             QP_Modifiers_PUB.Modifiers_Rec_Type;
855 l_x_MODIFIERS_tbl             QP_Modifiers_PUB.Modifiers_Tbl_Type;
856 l_x_QUALIFIERS_rec            QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
857 l_x_QUALIFIERS_tbl            QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
858 l_x_PRICING_ATTR_rec          QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
859 l_x_PRICING_ATTR_tbl          QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
860 BEGIN
861 
862 oe_debug_pub.add('BEGIN Validate_And_Write in QPXFPRAB');
863 
864     --  Set control flags.
865 
866     l_control_rec.controlled_operation := TRUE;
867     l_control_rec.validate_entity      := TRUE;
868     l_control_rec.write_to_DB          := TRUE;
869 
870     l_control_rec.default_attributes   := FALSE;
871     l_control_rec.change_attributes    := FALSE;
872     l_control_rec.process              := FALSE;
873 
874     --  Instruct API to retain its caches
875 
876     l_control_rec.clear_api_cache      := FALSE;
877     l_control_rec.clear_api_requests   := FALSE;
878 
879     --  Read PRICING_ATTR from cache
880 
881     l_old_PRICING_ATTR_rec := Get_PRICING_ATTR
882     (   p_db_record                   => TRUE
883     ,   p_pricing_attribute_id        => p_pricing_attribute_id
884     );
885 
886     l_PRICING_ATTR_rec := Get_PRICING_ATTR
887     (   p_db_record                   => FALSE
888     ,   p_pricing_attribute_id        => p_pricing_attribute_id
889     );
890 
891     --  Set Operation.
892 
893     IF FND_API.To_Boolean(l_PRICING_ATTR_rec.db_flag) THEN
894         l_PRICING_ATTR_rec.operation := QP_GLOBALS.G_OPR_UPDATE;
895     ELSE
896         l_PRICING_ATTR_rec.operation := QP_GLOBALS.G_OPR_CREATE;
897     END IF;
898 
899     --  Populate PRICING_ATTR table
900 
901     l_PRICING_ATTR_tbl(1) := l_PRICING_ATTR_rec;
902     l_old_PRICING_ATTR_tbl(1) := l_old_PRICING_ATTR_rec;
903 
904     --  Call QP_Modifiers_PVT.Process_MODIFIERS
905 
906     QP_Modifiers_PVT.Process_MODIFIERS
907     (   p_api_version_number          => 1.0
908     ,   p_init_msg_list               => FND_API.G_TRUE
909     ,   x_return_status               => l_return_status
910     ,   x_msg_count                   => x_msg_count
911     ,   x_msg_data                    => x_msg_data
912     ,   p_control_rec                 => l_control_rec
913     ,   p_PRICING_ATTR_tbl            => l_PRICING_ATTR_tbl
914     ,   p_old_PRICING_ATTR_tbl        => l_old_PRICING_ATTR_tbl
915     ,   x_MODIFIER_LIST_rec           => l_x_MODIFIER_LIST_rec
916     ,   x_MODIFIERS_tbl               => l_x_MODIFIERS_tbl
917     ,   x_QUALIFIERS_tbl              => l_x_QUALIFIERS_tbl
918     ,   x_PRICING_ATTR_tbl            => l_x_PRICING_ATTR_tbl
919     );
920 
921     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
922         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
923     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
924         RAISE FND_API.G_EXC_ERROR;
925     END IF;
926 
927 
928     --  Load OUT parameters.
929 
930     l_x_PRICING_ATTR_rec := l_x_PRICING_ATTR_tbl(1);
931 
932     x_creation_date                := l_x_PRICING_ATTR_rec.creation_date;
933     x_created_by                   := l_x_PRICING_ATTR_rec.created_by;
934     x_last_update_date             := l_x_PRICING_ATTR_rec.last_update_date;
935     x_last_updated_by              := l_x_PRICING_ATTR_rec.last_updated_by;
936     x_last_update_login            := l_x_PRICING_ATTR_rec.last_update_login;
937 
938     --  Clear PRICING_ATTR record cache
939 
940     Clear_PRICING_ATTR;
941 
942     --  Keep track of performed operations.
943 
944     l_old_PRICING_ATTR_rec.operation := l_PRICING_ATTR_rec.operation;
945 
946 
947     --  Set return status.
948 
949     x_return_status := FND_API.G_RET_STS_SUCCESS;
950 
951     --  Get message count and data
952 
953     OE_MSG_PUB.Count_And_Get
954     (   p_count                       => x_msg_count
955     ,   p_data                        => x_msg_data
956     );
957 
958 oe_debug_pub.add('END Validate_And_Write in QPXFPRAB');
959 
960 EXCEPTION
961 
962     WHEN FND_API.G_EXC_ERROR THEN
963 
964         x_return_status := FND_API.G_RET_STS_ERROR;
965 
966         --  Get message count and data
967 
968         OE_MSG_PUB.Count_And_Get
969         (   p_count                       => x_msg_count
970         ,   p_data                        => x_msg_data
971         );
972 
973     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
974 
975         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
976 
977         --  Get message count and data
978 
979         OE_MSG_PUB.Count_And_Get
980         (   p_count                       => x_msg_count
981         ,   p_data                        => x_msg_data
982         );
983 
984     WHEN OTHERS THEN
985 
986         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
987 
988         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
989         THEN
990             OE_MSG_PUB.Add_Exc_Msg
991             (   G_PKG_NAME
992             ,   'Validate_And_Write'
993             );
994         END IF;
995 
996         --  Get message count and data
997 
998         OE_MSG_PUB.Count_And_Get
999         (   p_count                       => x_msg_count
1000         ,   p_data                        => x_msg_data
1001         );
1002 
1003 END Validate_And_Write;
1004 
1005 --  Procedure       Delete_Row
1006 --
1007 
1008 PROCEDURE Delete_Row
1009 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1010 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
1011 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1012 ,   p_pricing_attribute_id          IN  NUMBER
1013 )
1014 IS
1015 l_PRICING_ATTR_rec            QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
1016 l_PRICING_ATTR_tbl            QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
1017 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
1018 l_return_status               VARCHAR2(1);
1019 l_x_MODIFIER_LIST_rec         QP_Modifiers_PUB.Modifier_List_Rec_Type;
1020 l_x_MODIFIERS_rec             QP_Modifiers_PUB.Modifiers_Rec_Type;
1021 l_x_MODIFIERS_tbl             QP_Modifiers_PUB.Modifiers_Tbl_Type;
1022 l_x_QUALIFIERS_rec            QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
1023 l_x_QUALIFIERS_tbl            QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
1024 l_x_PRICING_ATTR_rec          QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
1025 l_x_PRICING_ATTR_tbl          QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
1026 BEGIN
1027 
1028 oe_debug_pub.add('BEGIN Delete_Row in QPXFPRAB');
1029 
1030     --  Set control flags.
1031 
1032     l_control_rec.controlled_operation := TRUE;
1033     l_control_rec.validate_entity      := TRUE;
1034     l_control_rec.write_to_DB          := TRUE;
1035 
1036     l_control_rec.default_attributes   := FALSE;
1037     l_control_rec.change_attributes    := FALSE;
1038     l_control_rec.process              := FALSE;  -- Changed back to false. Regression bug of 5261328
1039 
1040     --  Instruct API to retain its caches
1041 
1042     l_control_rec.clear_api_cache      := FALSE;
1043     l_control_rec.clear_api_requests   := FALSE;
1044 
1045     --  Read DB record from cache
1046 
1047     l_PRICING_ATTR_rec := Get_PRICING_ATTR
1048     (   p_db_record                   => TRUE
1049     ,   p_pricing_attribute_id        => p_pricing_attribute_id
1050     );
1051 
1052     --  Set Operation.
1053 
1054     l_PRICING_ATTR_rec.operation := QP_GLOBALS.G_OPR_DELETE;
1055 
1056     --  Populate PRICING_ATTR table
1057 
1058     l_PRICING_ATTR_tbl(1) := l_PRICING_ATTR_rec;
1059 
1060     --  Call QP_Modifiers_PVT.Process_MODIFIERS
1061           qp_delayed_requests_PVT.log_request(
1062                  p_entity_code => QP_GLOBALS.G_ENTITY_Price_List_Line,
1063                  p_entity_id  => l_PRICING_ATTR_rec.list_line_id,
1064                  p_requesting_entity_code=> QP_GLOBALS.G_ENTITY_Price_List_Line,
1065                  p_requesting_entity_id => l_PRICING_ATTR_rec.list_line_id,
1066                  p_request_type =>QP_GLOBALS.G_UPDATE_LINE_QUAL_IND,
1067                  x_return_status => l_return_status);
1068 
1069     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1070 
1071           oe_debug_pub.add('failed in logging a delayed request in delete_row ');
1072 
1073         RAISE FND_API.G_EXC_ERROR;
1074 
1075     END IF;
1076 
1077 
1078     QP_Modifiers_PVT.Process_MODIFIERS
1079     (   p_api_version_number          => 1.0
1080     ,   p_init_msg_list               => FND_API.G_TRUE
1081     ,   x_return_status               => l_return_status
1082     ,   x_msg_count                   => x_msg_count
1083     ,   x_msg_data                    => x_msg_data
1084     ,   p_control_rec                 => l_control_rec
1085     ,   p_PRICING_ATTR_tbl            => l_PRICING_ATTR_tbl
1086     ,   x_MODIFIER_LIST_rec           => l_x_MODIFIER_LIST_rec
1087     ,   x_MODIFIERS_tbl               => l_x_MODIFIERS_tbl
1088     ,   x_QUALIFIERS_tbl              => l_x_QUALIFIERS_tbl
1089     ,   x_PRICING_ATTR_tbl            => l_x_PRICING_ATTR_tbl
1090     );
1091 
1092     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1093         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1094     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1095         RAISE FND_API.G_EXC_ERROR;
1096     END IF;
1097 
1098 
1099     --  Clear PRICING_ATTR record cache
1100 
1101     Clear_PRICING_ATTR;
1102 
1103     --  Set return status.
1104 
1105     x_return_status := FND_API.G_RET_STS_SUCCESS;
1106 
1107     --  Get message count and data
1108 
1109     OE_MSG_PUB.Count_And_Get
1110     (   p_count                       => x_msg_count
1111     ,   p_data                        => x_msg_data
1112     );
1113 
1114 oe_debug_pub.add('END Delete_Row in QPXFPRAB');
1115 
1116 EXCEPTION
1117 
1118     WHEN FND_API.G_EXC_ERROR THEN
1119 
1120         x_return_status := FND_API.G_RET_STS_ERROR;
1121 
1122         --  Get message count and data
1123 
1124         OE_MSG_PUB.Count_And_Get
1125         (   p_count                       => x_msg_count
1126         ,   p_data                        => x_msg_data
1127         );
1128 
1129     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1130 
1131         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1132 
1133         --  Get message count and data
1134 
1135         OE_MSG_PUB.Count_And_Get
1136         (   p_count                       => x_msg_count
1137         ,   p_data                        => x_msg_data
1138         );
1139 
1140     WHEN OTHERS THEN
1141 
1142         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1143 
1144         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1145         THEN
1146             OE_MSG_PUB.Add_Exc_Msg
1147             (   G_PKG_NAME
1148             ,   'Delete_Row'
1149             );
1150         END IF;
1151 
1152         --  Get message count and data
1153 
1154         OE_MSG_PUB.Count_And_Get
1155         (   p_count                       => x_msg_count
1156         ,   p_data                        => x_msg_data
1157         );
1158 
1159 END Delete_Row;
1160 
1161 --  Procedure       Process_Entity
1162 --
1163 
1164 PROCEDURE Process_Entity
1165 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1166 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
1167 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1168 )
1169 IS
1170 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
1171 l_return_status               VARCHAR2(1);
1172 l_x_MODIFIER_LIST_rec         QP_Modifiers_PUB.Modifier_List_Rec_Type;
1173 l_x_MODIFIERS_rec             QP_Modifiers_PUB.Modifiers_Rec_Type;
1174 l_x_MODIFIERS_tbl             QP_Modifiers_PUB.Modifiers_Tbl_Type;
1175 l_x_QUALIFIERS_rec            QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
1176 l_x_QUALIFIERS_tbl            QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
1177 l_x_PRICING_ATTR_rec          QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
1178 l_x_PRICING_ATTR_tbl          QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
1179 BEGIN
1180 
1181 oe_debug_pub.add('BEGIN Process_Entity in QPXFPRAB');
1182 
1183     --  Set control flags.
1184 
1185     l_control_rec.controlled_operation := TRUE;
1186     l_control_rec.process              := TRUE;
1187     l_control_rec.process_entity       := QP_GLOBALS.G_ENTITY_PRICING_ATTR;
1188 
1189     l_control_rec.default_attributes   := FALSE;
1190     l_control_rec.change_attributes    := FALSE;
1191     l_control_rec.validate_entity      := FALSE;
1192     l_control_rec.write_to_DB          := FALSE;
1193 
1194     --  Instruct API to clear its request table
1195 
1196     l_control_rec.clear_api_cache      := FALSE;
1197     l_control_rec.clear_api_requests   := FALSE;
1198 
1199     --  Call QP_Modifiers_PVT.Process_MODIFIERS
1200 
1201     QP_Modifiers_PVT.Process_MODIFIERS
1202     (   p_api_version_number          => 1.0
1203     ,   p_init_msg_list               => FND_API.G_TRUE
1204     ,   x_return_status               => l_return_status
1205     ,   x_msg_count                   => x_msg_count
1206     ,   x_msg_data                    => x_msg_data
1207     ,   p_control_rec                 => l_control_rec
1208     ,   x_MODIFIER_LIST_rec           => l_x_MODIFIER_LIST_rec
1209     ,   x_MODIFIERS_tbl               => l_x_MODIFIERS_tbl
1210     ,   x_QUALIFIERS_tbl              => l_x_QUALIFIERS_tbl
1211     ,   x_PRICING_ATTR_tbl            => l_x_PRICING_ATTR_tbl
1212     );
1213 
1214     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1215         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1216     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1217         RAISE FND_API.G_EXC_ERROR;
1218     END IF;
1219 
1220 
1221     --  Set return status.
1222 
1223     x_return_status := FND_API.G_RET_STS_SUCCESS;
1224 
1225     --  Get message count and data
1226 
1227     OE_MSG_PUB.Count_And_Get
1228     (   p_count                       => x_msg_count
1229     ,   p_data                        => x_msg_data
1230     );
1231 
1232 oe_debug_pub.add('END Process_Entity in QPXFPRAB');
1233 
1234 EXCEPTION
1235 
1236     WHEN FND_API.G_EXC_ERROR THEN
1237 
1238         x_return_status := FND_API.G_RET_STS_ERROR;
1239 
1240         --  Get message count and data
1241 
1242         OE_MSG_PUB.Count_And_Get
1243         (   p_count                       => x_msg_count
1244         ,   p_data                        => x_msg_data
1245         );
1246 
1247     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1248 
1249         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1250 
1251         --  Get message count and data
1252 
1253         OE_MSG_PUB.Count_And_Get
1254         (   p_count                       => x_msg_count
1255         ,   p_data                        => x_msg_data
1256         );
1257 
1258     WHEN OTHERS THEN
1259 
1260         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1261 
1262         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1263         THEN
1264             OE_MSG_PUB.Add_Exc_Msg
1265             (   G_PKG_NAME
1266             ,   'Process_Entity'
1267             );
1268         END IF;
1269 
1270         --  Get message count and data
1271 
1272         OE_MSG_PUB.Count_And_Get
1273         (   p_count                       => x_msg_count
1274         ,   p_data                        => x_msg_data
1275         );
1276 
1277 END Process_Entity;
1278 
1279 --  Procedure       lock_Row
1280 --
1281 
1282 PROCEDURE Lock_Row
1283 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1284 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
1285 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1286 ,   p_accumulate_flag               IN  VARCHAR2
1287 ,   p_attribute1                    IN  VARCHAR2
1288 ,   p_attribute10                   IN  VARCHAR2
1289 ,   p_attribute11                   IN  VARCHAR2
1290 ,   p_attribute12                   IN  VARCHAR2
1291 ,   p_attribute13                   IN  VARCHAR2
1292 ,   p_attribute14                   IN  VARCHAR2
1293 ,   p_attribute15                   IN  VARCHAR2
1294 ,   p_attribute2                    IN  VARCHAR2
1295 ,   p_attribute3                    IN  VARCHAR2
1296 ,   p_attribute4                    IN  VARCHAR2
1297 ,   p_attribute5                    IN  VARCHAR2
1298 ,   p_attribute6                    IN  VARCHAR2
1299 ,   p_attribute7                    IN  VARCHAR2
1300 ,   p_attribute8                    IN  VARCHAR2
1301 ,   p_attribute9                    IN  VARCHAR2
1302 ,   p_attribute_grouping_no         IN  NUMBER
1303 ,   p_context                       IN  VARCHAR2
1304 ,   p_created_by                    IN  NUMBER
1305 ,   p_creation_date                 IN  DATE
1306 ,   p_excluder_flag                 IN  VARCHAR2
1307 ,   p_last_updated_by               IN  NUMBER
1308 ,   p_last_update_date              IN  DATE
1309 ,   p_last_update_login             IN  NUMBER
1310 ,   p_list_line_id                  IN  NUMBER
1311 ,   p_pricing_attribute             IN  VARCHAR2
1312 ,   p_pricing_attribute_context     IN  VARCHAR2
1313 ,   p_pricing_attribute_id          IN  NUMBER
1314 ,   p_pricing_attr_value_from       IN  VARCHAR2
1315 ,   p_pricing_attr_value_to         IN  VARCHAR2
1316 ,   p_product_attribute             IN  VARCHAR2
1317 ,   p_product_attribute_context     IN  VARCHAR2
1318 ,   p_product_attr_value            IN  VARCHAR2
1319 ,   p_product_uom_code              IN  VARCHAR2
1320 ,   p_program_application_id        IN  NUMBER
1321 ,   p_program_id                    IN  NUMBER
1322 ,   p_program_update_date           IN  DATE
1323 ,   p_request_id                    IN  NUMBER
1324 ,   p_product_attribute_datatype    IN  VARCHAR2
1325 ,   p_pricing_attribute_datatype    IN  VARCHAR2
1326 ,   p_comparison_operator_code      IN  VARCHAR2
1327 )
1328 IS
1329 l_return_status               VARCHAR2(1);
1330 l_PRICING_ATTR_rec            QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
1331 l_PRICING_ATTR_tbl            QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
1332 l_x_MODIFIER_LIST_rec         QP_Modifiers_PUB.Modifier_List_Rec_Type;
1333 l_x_MODIFIERS_rec             QP_Modifiers_PUB.Modifiers_Rec_Type;
1334 l_x_MODIFIERS_tbl             QP_Modifiers_PUB.Modifiers_Tbl_Type;
1335 l_x_QUALIFIERS_rec            QP_Qualifier_Rules_PUB.Qualifiers_Rec_Type;
1336 l_x_QUALIFIERS_tbl            QP_Qualifier_Rules_PUB.Qualifiers_Tbl_Type;
1337 l_x_PRICING_ATTR_rec          QP_Modifiers_PUB.Pricing_Attr_Rec_Type;
1338 l_x_PRICING_ATTR_tbl          QP_Modifiers_PUB.Pricing_Attr_Tbl_Type;
1339 BEGIN
1340 
1341 oe_debug_pub.add('BEGIN Lock_Row in QPXFPRAB');
1342 oe_debug_pub.add('BEGIN Lock_Row in QPXFPRAB');
1343 
1344     --  Load PRICING_ATTR record
1345 
1346     l_PRICING_ATTR_rec.accumulate_flag := p_accumulate_flag;
1347     l_PRICING_ATTR_rec.attribute1  := p_attribute1;
1348     l_PRICING_ATTR_rec.attribute10 := p_attribute10;
1349     l_PRICING_ATTR_rec.attribute11 := p_attribute11;
1350     l_PRICING_ATTR_rec.attribute12 := p_attribute12;
1351     l_PRICING_ATTR_rec.attribute13 := p_attribute13;
1352     l_PRICING_ATTR_rec.attribute14 := p_attribute14;
1353     l_PRICING_ATTR_rec.attribute15 := p_attribute15;
1354     l_PRICING_ATTR_rec.attribute2  := p_attribute2;
1355     l_PRICING_ATTR_rec.attribute3  := p_attribute3;
1356     l_PRICING_ATTR_rec.attribute4  := p_attribute4;
1357     l_PRICING_ATTR_rec.attribute5  := p_attribute5;
1358     l_PRICING_ATTR_rec.attribute6  := p_attribute6;
1359     l_PRICING_ATTR_rec.attribute7  := p_attribute7;
1360     l_PRICING_ATTR_rec.attribute8  := p_attribute8;
1361     l_PRICING_ATTR_rec.attribute9  := p_attribute9;
1362     l_PRICING_ATTR_rec.attribute_grouping_no := p_attribute_grouping_no;
1363     l_PRICING_ATTR_rec.context     := p_context;
1364     l_PRICING_ATTR_rec.created_by  := p_created_by;
1365     l_PRICING_ATTR_rec.creation_date := p_creation_date;
1366     l_PRICING_ATTR_rec.excluder_flag := p_excluder_flag;
1367     l_PRICING_ATTR_rec.last_updated_by := p_last_updated_by;
1368     l_PRICING_ATTR_rec.last_update_date := p_last_update_date;
1369     l_PRICING_ATTR_rec.last_update_login := p_last_update_login;
1370     l_PRICING_ATTR_rec.list_line_id := p_list_line_id;
1371     l_PRICING_ATTR_rec.pricing_attribute := p_pricing_attribute;
1372     l_PRICING_ATTR_rec.pricing_attribute_context := p_pricing_attribute_context;
1373     l_PRICING_ATTR_rec.pricing_attribute_id := p_pricing_attribute_id;
1374     l_PRICING_ATTR_rec.pricing_attr_value_from := p_pricing_attr_value_from;
1375     l_PRICING_ATTR_rec.pricing_attr_value_to := p_pricing_attr_value_to;
1376     l_PRICING_ATTR_rec.product_attribute := p_product_attribute;
1377     l_PRICING_ATTR_rec.product_attribute_context := p_product_attribute_context;
1378     l_PRICING_ATTR_rec.product_attr_value := p_product_attr_value;
1379     l_PRICING_ATTR_rec.product_uom_code := p_product_uom_code;
1380     l_PRICING_ATTR_rec.program_application_id := p_program_application_id;
1381     l_PRICING_ATTR_rec.program_id  := p_program_id;
1382     l_PRICING_ATTR_rec.program_update_date := p_program_update_date;
1383     l_PRICING_ATTR_rec.request_id  := p_request_id;
1384     l_PRICING_ATTR_rec.product_attribute_datatype  := p_product_attribute_datatype;
1385     l_PRICING_ATTR_rec.pricing_attribute_datatype  := p_pricing_attribute_datatype;
1386     l_PRICING_ATTR_rec.comparison_operator_code  := p_comparison_operator_code;
1387     l_PRICING_ATTR_rec.operation   := QP_GLOBALS.G_OPR_LOCK;
1388 
1389     --  Populate PRICING_ATTR table
1390 
1391     l_PRICING_ATTR_tbl(1) := l_PRICING_ATTR_rec;
1392 
1393     --  Call QP_Modifiers_PVT.Lock_MODIFIERS
1394 
1395     QP_Modifiers_PVT.Lock_MODIFIERS
1396     (   p_api_version_number          => 1.0
1397     ,   p_init_msg_list               => FND_API.G_TRUE
1398     ,   x_return_status               => l_return_status
1399     ,   x_msg_count                   => x_msg_count
1400     ,   x_msg_data                    => x_msg_data
1401     ,   p_PRICING_ATTR_tbl            => l_PRICING_ATTR_tbl
1402     ,   x_MODIFIER_LIST_rec           => l_x_MODIFIER_LIST_rec
1403     ,   x_MODIFIERS_tbl               => l_x_MODIFIERS_tbl
1404     ,   x_QUALIFIERS_tbl              => l_x_QUALIFIERS_tbl
1405     ,   x_PRICING_ATTR_tbl            => l_x_PRICING_ATTR_tbl
1406     );
1407 
1408     IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1409 
1410         --  Set DB flag and write record to cache.
1411 
1412         l_x_PRICING_ATTR_rec.db_flag := FND_API.G_TRUE;
1413 
1414         Write_PRICING_ATTR
1415         (   p_PRICING_ATTR_rec            => l_x_PRICING_ATTR_rec
1416         ,   p_db_record                   => TRUE
1417         );
1418 
1419     END IF;
1420 
1421     --  Set return status.
1422 
1423     x_return_status := l_return_status;
1424 
1425     --  Get message count and data
1426 
1427     OE_MSG_PUB.Count_And_Get
1428     (   p_count                       => x_msg_count
1429     ,   p_data                        => x_msg_data
1430     );
1431 
1432 
1433 oe_debug_pub.add('END Lock_Row in QPXFPRAB');
1434 
1435 EXCEPTION
1436 
1437     WHEN OTHERS THEN
1438 
1439         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1440         THEN
1441             OE_MSG_PUB.Add_Exc_Msg
1442             (   G_PKG_NAME
1443             ,   'Lock_Row'
1444             );
1445         END IF;
1446 
1447         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1448 
1449         --  Get message count and data
1450 
1451         OE_MSG_PUB.Count_And_Get
1452         (   p_count                       => x_msg_count
1453         ,   p_data                        => x_msg_data
1454         );
1455 
1456 
1457 
1458 END Lock_Row;
1459 
1460 --  Procedures maintaining PRICING_ATTR record cache.
1461 
1462 PROCEDURE Write_PRICING_ATTR
1463 (   p_PRICING_ATTR_rec              IN  QP_Modifiers_PUB.Pricing_Attr_Rec_Type
1464 ,   p_db_record                     IN  BOOLEAN := FALSE
1465 )
1466 IS
1467 BEGIN
1468 
1469 oe_debug_pub.add('BEGIN Write_PRICING_ATTR in QPXFPRAB');
1470 
1471     g_PRICING_ATTR_rec := p_PRICING_ATTR_rec;
1472 
1473     IF p_db_record THEN
1474 
1475         g_db_PRICING_ATTR_rec := p_PRICING_ATTR_rec;
1476 
1477     END IF;
1478 
1479 oe_debug_pub.add('END Write_PRICING_ATTR in QPXFPRAB');
1480 
1481 END Write_Pricing_Attr;
1482 
1483 FUNCTION Get_PRICING_ATTR
1484 (   p_db_record                     IN  BOOLEAN := FALSE
1485 ,   p_pricing_attribute_id          IN  NUMBER
1486 )
1487 RETURN QP_Modifiers_PUB.Pricing_Attr_Rec_Type
1488 IS
1489 BEGIN
1490 OE_Debug_PUB.Add('Begin Get_Pricing_Attr in QPXFPRAB');
1491 
1492     IF  p_pricing_attribute_id <> g_PRICING_ATTR_rec.pricing_attribute_id
1493     THEN
1494 
1495         --  Query row from DB
1496 
1497         g_PRICING_ATTR_rec := QP_Pricing_Attr_Util.Query_Row
1498         (   p_pricing_attribute_id        => p_pricing_attribute_id
1499         );
1500 
1501         g_PRICING_ATTR_rec.db_flag     := FND_API.G_TRUE;
1502 
1503         --  Load DB record
1504 
1505         g_db_PRICING_ATTR_rec          := g_PRICING_ATTR_rec;
1506 
1507     END IF;
1508 
1509     IF p_db_record THEN
1510 
1511 OE_Debug_PUB.Add('ENd Get_Pricing_Attr in QPXFPRAB');
1512         RETURN g_db_PRICING_ATTR_rec;
1513 
1514     ELSE
1515 
1516 OE_Debug_PUB.Add('else ENd Get_Pricing_Attr in QPXFPRAB');
1517         RETURN g_PRICING_ATTR_rec;
1518 
1519     END IF;
1520   EXCEPTION WHEN OTHERS THEN
1521         RETURN g_PRICING_ATTR_rec;
1522 
1523 END Get_Pricing_Attr;
1524 
1525 PROCEDURE Clear_Pricing_Attr
1526 IS
1527 BEGIN
1528 
1529 oe_debug_pub.add('BEGIN Clear_Pricing_Attr in QPXFPRAB');
1530     g_PRICING_ATTR_rec             := QP_Modifiers_PUB.G_MISS_PRICING_ATTR_REC;
1531     g_db_PRICING_ATTR_rec          := QP_Modifiers_PUB.G_MISS_PRICING_ATTR_REC;
1532 
1533 oe_debug_pub.add('END Clear_Pricing_Attr in QPXFPRAB');
1534 END Clear_Pricing_Attr;
1535 
1536 --for canonical datafix in tst115
1537 FUNCTION Get_DATATYPE
1538 (   p_flexfield_name               IN  VARCHAR2
1539 ,   p_Context                     	IN  QP_PRICING_ATTRIBUTES.Pricing_Attribute_Context%type
1540 ,   p_Attribute                    IN  QP_PRICING_ATTRIBUTES.Pricing_Attribute%Type
1541 )
1542 RETURN QP_PRICING_ATTRIBUTES.Pricing_Attribute_Datatype%Type IS
1543 x_Datatype 		QP_PRICING_ATTRIBUTES.Pricing_Attribute_Datatype%Type;
1544 l_Segment_Name 	VARCHAR2(240);
1545 l_vsid 			NUMBER;
1546 l_Validation_Type 	VARCHAR2(240);
1547 
1548 BEGIN
1549 
1550 	l_Segment_Name := Get_Segment_Name( p_flexfield_name
1551 				 			    , p_context
1552 				                   , p_attribute);
1553 
1554 	QP_UTIL.Get_Valueset_ID( p_flexfield_name
1555 					   , p_context
1556 					   , l_Segment_Name
1557 					   , l_vsid
1558 					   , x_datatype
1559 					   , l_validation_type);
1560 
1561 RETURN x_Datatype;
1562 
1563 EXCEPTION
1564 
1565 When NO_DATA_FOUND Then
1566 
1567 Return Null;
1568 
1569 When OTHERS Then
1570 
1571 Return Null;
1572 
1573 END Get_DATATYPE;
1574 
1575 
1576 
1577 
1578 
1579 FUNCTION Get_MEANING
1580 (   p_lookup_code                     IN  QP_LOOKUPS.lookup_code%type
1581  ,  p_lookup_type                     IN  QP_LOOKUPS.lookup_type%type
1582 )
1583 RETURN QP_LOOKUPS.Meaning%Type IS
1584 l_Meaning QP_LOOKUPS.Meaning%Type;
1585 BEGIN
1586 
1587 select meaning into l_Meaning from qp_lookups where
1588 lookup_code = p_lookup_code and lookup_type = p_lookup_type ;
1589 
1590 RETURN l_Meaning;
1591 
1592 EXCEPTION
1593 
1594 When NO_DATA_FOUND Then
1595 
1596 Return Null;
1597 
1598 When OTHERS Then
1599 
1600 Return Null;
1601 
1602 END Get_MEANING;
1603 
1604 FUNCTION Get_Pricing_Phase
1605 (   p_pricing_phase_id                     IN  QP_PRICING_PHASES.Pricing_Phase_ID%type
1606 )
1607 RETURN QP_PRICING_PHASES.Name%Type IS
1608 l_Pricing_Phase QP_PRICING_PHASES.Name%Type;
1609 BEGIN
1610 
1611 select name into l_Pricing_Phase from QP_Pricing_Phases where
1612 Pricing_Phase_Id = p_Pricing_Phase_Id;
1613 
1614 RETURN l_Pricing_Phase;
1615 
1616 EXCEPTION
1617 
1618 When NO_DATA_FOUND Then
1619 
1620 Return Null;
1621 
1622 When OTHERS Then
1623 
1624 Return Null;
1625 
1626 END Get_Pricing_Phase;
1627 
1628 FUNCTION Get_Charge_name
1629 (   p_list_header_id                       IN  qp_list_headers_b.list_header_id%type
1630 ,   p_Charge_Type_code                     IN  QP_CHARGE_LOOKUP.lookup_code%type
1631  ,  p_Charge_Subtype_code                  IN  QP_LOOKUPS.lookup_code%type
1632  ,  p_list_line_type_code                  IN  QP_LIST_LINES.list_line_type_code%type
1633 )
1634 RETURN QP_LOOKUPS.Meaning%Type IS
1635 l_Charge_Name QP_LOOKUPS.Meaning%Type;
1636 l_profile_source_system_code   qp_list_headers_b.source_system_code%type := fnd_profile.value('QP_SOURCE_SYSTEM_CODE');
1637 l_profile_pte_code             qp_list_headers_b.pte_code%type :=  fnd_profile.value('QP_PRICING_TRANSACTION_ENTITY');
1638 l_source_system_code   qp_list_headers_b.source_system_code%type;
1639 l_pte_code             qp_list_headers_b.pte_code%type;
1640 BEGIN
1641 
1642 IF p_list_line_type_code = 'FREIGHT_CHARGE' THEN
1643 
1644 /*  Added the validation for  freight and spl. charges Bug#4562869   */
1645     qp_util.get_pte_and_ss( p_list_header_id
1646                            ,l_pte_code
1647                            ,l_source_system_code
1648                          );
1649 
1650        IF  (  l_pte_code = 'PO' and l_source_system_code = 'PO' ) OR ( l_profile_source_system_code = 'PO' and
1651                     l_profile_pte_code = 'PO')  THEN
1652 
1653                     SELECT name
1654                     INTO l_charge_name
1655                     FROM pon_cost_factors_vl
1656                     WHERE price_element_type_id > 0
1657                     AND NVL(enabled_flag,'Y') <> 'N'
1658                     AND TO_CHAR(price_element_type_id) =  p_charge_type_code;
1659 
1660         ELSIF  (  l_pte_code <> 'PO' and l_source_system_code <> 'PO' ) OR ( l_profile_source_system_code <> 'PO' and
1661                     l_profile_pte_code <> 'PO') THEN
1662 
1663 /* changes made in select statement by dhgupta for bug 2047030 */
1664 /* LKP1 rewritten from qp_charge_lookup to fnd_lookup_values (plus additional
1665    where conditions of the qp_charge_lookup view definition) to get rid of
1666    non-mergable view, bug 4865226 */
1667 SELECT nvl(DECODE(lkp1.lookup_type,'FREIGHT_COST_TYPE',lkp1.meaning,lkp2.meaning),lkp1.meaning)
1668 	   INTO l_Charge_Name
1669 	   FROM  fnd_lookup_values LKP1, QP_LOOKUPS LKP2
1670 	   WHERE lkp1.language = userenv('LANG')
1671            and lkp1.security_group_id = 0
1672            and ((lkp1.view_application_id = 661 and
1673                  lkp1.lookup_type = 'FREIGHT_CHARGES_TYPE')
1674                 or
1675                 (lkp1.view_application_id = 665 and
1676                  lkp1.lookup_type = 'FREIGHT_COST_TYPE'))
1677            AND lkp1.lookup_code = lkp2.lookup_type(+)
1678 	   AND lkp1.enabled_flag = 'Y'
1679 	   AND sysdate BETWEEN NVL(lkp1.start_date_active,sysdate)
1680     	   AND NVL(lkp1.end_date_active,sysdate)
1681 	   AND (lkp2.enabled_flag = 'Y' OR lkp2.enabled_flag IS NULL)
1682 	   AND sysdate BETWEEN NVL(lkp2.start_date_active,sysdate)
1683 	   AND NVL(lkp2.end_date_active,sysdate)
1684 	   AND lkp1.lookup_code = p_Charge_Type_Code
1685 	   AND DECODE(lkp1.lookup_type,'FREIGHT_COST_TYPE','0',NVL(lkp2.lookup_code,0))
1686 	   = nvl(p_Charge_Subtype_Code, '0');
1687 
1688        ELSE
1689 
1690           l_Charge_Name := NULL;
1691 
1692           END IF;
1693 
1694 END IF;
1695 
1696 RETURN l_Charge_Name;
1697 
1698 EXCEPTION
1699 
1700 When NO_DATA_FOUND Then
1701 
1702 Return Null;
1703 
1704 When OTHERS Then
1705 
1706 Return Null;
1707 
1708 END Get_Charge_Name;
1709 
1710 FUNCTION Get_Formula
1711 (   p_Price_By_Formula_Id                     IN  QP_PRICE_FORMULAS_VL.Price_Formula_ID%type
1712 )
1713 RETURN QP_PRICE_FORMULAS_VL.Name%Type IS
1714 l_Price_By_Formula QP_PRICE_FORMULAS_VL.Name%Type;
1715 BEGIN
1716 
1717 select Name into l_Price_By_Formula from QP_Price_Formulas_Vl where
1718 Price_Formula_ID = p_Price_By_Formula_ID;
1719 
1720 RETURN l_Price_By_Formula;
1721 
1722 EXCEPTION
1723 
1724 When NO_DATA_FOUND Then
1725 
1726 Return Null;
1727 
1728 When OTHERS Then
1729 
1730 Return Null;
1731 
1732 END Get_Formula;
1733 
1734 FUNCTION Get_Expiration_Date
1735 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
1736 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
1737 )
1738 RETURN QP_LIST_LINES.Expiration_Date%Type IS
1739 l_Expiration_Date QP_LIST_LINES.Expiration_Date%Type;
1740 BEGIN
1741 
1742 select decode(p_modifier_type_code, ql.list_line_type_code, ql.Expiration_Date,
1743 Null) into l_Expiration_Date from QP_LIST_LINES ql where
1744 ql.list_line_id = p_list_line_id;
1745 
1746 RETURN l_Expiration_Date;
1747 
1748 EXCEPTION
1749 
1750 When NO_DATA_FOUND Then
1751 
1752 Return Null;
1753 
1754 When OTHERS Then
1755 
1756 Return Null;
1757 
1758 END Get_Expiration_Date;
1759 
1760 FUNCTION Get_Exp_Period_Start_Date
1761 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
1762 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
1763 )
1764 RETURN QP_LIST_LINES.Expiration_Period_Start_Date%Type IS
1765 l_Exp_Period_Start_Date QP_LIST_LINES.Expiration_Period_Start_Date%Type;
1766 BEGIN
1767 
1768 select decode(p_modifier_type_code, ql.list_line_type_code, ql.Expiration_Period_Start_Date,
1769 Null) into l_Exp_Period_Start_Date from QP_LIST_LINES ql where
1770 ql.list_line_id = p_list_line_id;
1771 
1772 RETURN l_Exp_Period_Start_Date;
1773 
1774 EXCEPTION
1775 
1776 When NO_DATA_FOUND Then
1777 
1778 Return Null;
1779 
1780 When OTHERS Then
1781 
1782 Return Null;
1783 
1784 END Get_Exp_Period_Start_Date;
1785 
1786 FUNCTION Get_Number_Expiration_Periods
1787 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
1788 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
1789 )
1790 RETURN QP_LIST_LINES.Number_Expiration_Periods%Type IS
1791 l_Number_Expiration_Periods QP_LIST_LINES.Number_Expiration_Periods%Type;
1792 BEGIN
1793 
1794 select decode(p_modifier_type_code, ql.list_line_type_code, ql.Number_Expiration_Periods,
1795 Null) into l_Number_Expiration_Periods from QP_LIST_LINES ql where
1796 ql.list_line_id = p_list_line_id;
1797 
1798 RETURN l_Number_Expiration_Periods;
1799 
1800 EXCEPTION
1801 
1802 When NO_DATA_FOUND Then
1803 
1804 Return Null;
1805 
1806 When OTHERS Then
1807 
1808 Return Null;
1809 
1810 END Get_Number_Expiration_Periods;
1811 
1812 FUNCTION Get_Expiration_Period_UOM
1813 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
1814 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
1815 )
1816 RETURN QP_LIST_LINES.Expiration_Period_UOM%Type IS
1817 l_Expiration_Period_UOM QP_LIST_LINES.Expiration_Period_UOM%Type;
1818 BEGIN
1819 
1820 select decode(p_modifier_type_code, ql.list_line_type_code, ql.Expiration_Period_UOM,
1821 Null) into l_Expiration_Period_UOM from QP_LIST_LINES ql where
1822 ql.list_line_id = p_list_line_id;
1823 
1824 RETURN l_Expiration_Period_UOM;
1825 
1826 EXCEPTION
1827 
1828 When NO_DATA_FOUND Then
1829 
1830 Return Null;
1831 
1832 When OTHERS Then
1833 
1834 Return Null;
1835 
1836 END Get_Expiration_Period_UOM;
1837 
1838 --changes for bug 1496839 to improve performance
1839 FUNCTION Get_Rebate_Txn_Type
1840 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
1841 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
1842 ,   p_list_line_type_code			IN QP_LIST_LINES.list_line_type_code%type
1843 ,   p_rebate_transaction_type_code		IN QP_LIST_LINES.REBATE_TRANSACTION_TYPE_CODE%type
1844 )
1845 RETURN QP_LOOKUPS.Meaning%Type IS
1846 l_Rebate_Txn_Type QP_LOOKUPS.Meaning%Type;
1847 BEGIN
1848 
1849 select decode(p_modifier_type_code, p_list_line_type_code,
1850 qlook.meaning, Null) into
1851 l_Rebate_Txn_Type from QP_LOOKUPS qlook where
1852 qlook.lookup_type = 'REBATE_TRANSACTION_TYPE_CODE' and
1853 qlook.lookup_code = p_rebate_transaction_type_code;
1854 
1855 /*
1856 select decode(p_modifier_type_code, ql.list_line_type_code,
1857 qlook.meaning, Null) into
1858 l_Rebate_Txn_Type from QP_LIST_LINES ql, QP_LOOKUPS qlook where
1859 ql.list_line_id = p_list_line_id and
1860 qlook.lookup_code = ql.rebate_transaction_type_code;
1861 */
1862 
1863 RETURN l_Rebate_Txn_Type;
1864 
1865 EXCEPTION
1866 
1867 When NO_DATA_FOUND Then
1868 
1869 Return Null;
1870 
1871 When OTHERS Then
1872 
1873 Return Null;
1874 
1875 END Get_Rebate_Txn_Type;
1876 
1877 FUNCTION Get_Benefit_Qty
1878 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
1879 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
1880 )
1881 RETURN QP_LIST_LINES.Benefit_Qty%Type IS
1882 l_Benefit_Qty QP_LIST_LINES.Benefit_Qty%Type;
1883 BEGIN
1884 
1885 select decode(p_modifier_type_code, ql.list_line_type_code, ql.Benefit_Qty,
1886 Null) into l_Benefit_Qty from QP_LIST_LINES ql where
1887 ql.list_line_id = p_list_line_id;
1888 
1889 RETURN l_Benefit_Qty;
1890 
1891 EXCEPTION
1892 
1893 When NO_DATA_FOUND Then
1894 
1895 Return Null;
1896 
1897 When OTHERS Then
1898 
1899 Return Null;
1900 
1901 END Get_Benefit_Qty;
1902 
1903 FUNCTION Get_Benefit_UOM_Code
1904 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
1905 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
1906 )
1907 RETURN QP_LIST_LINES.Benefit_UOM_Code%Type IS
1908 l_Benefit_UOM_Code QP_LIST_LINES.Benefit_UOM_Code%Type;
1909 BEGIN
1910 
1911 select decode(p_modifier_type_code, ql.list_line_type_code, ql.Benefit_UOM_Code,
1912 Null) into l_Benefit_UOM_Code from QP_LIST_LINES ql where
1913 ql.list_line_id = p_list_line_id;
1914 
1915 RETURN l_Benefit_UOM_Code;
1916 
1917 EXCEPTION
1918 
1919 When NO_DATA_FOUND Then
1920 
1921 Return Null;
1922 
1923 When OTHERS Then
1924 
1925 Return Null;
1926 
1927 END Get_Benefit_UOM_Code;
1928 
1929 PROCEDURE Get_Rltd_Modifier_Flds
1930 	(p_List_Line_Id IN QP_LIST_LINES.List_Line_ID%Type
1931 	,x_To_Rltd_Modifier_ID OUT NOCOPY /* file.sql.39 change */ NUMBER
1932 	,x_Rltd_Modifier_Grp_Type OUT NOCOPY /* file.sql.39 change */ NUMBER
1933 	,x_Rltd_Modifier_Grp_No OUT NOCOPY /* file.sql.39 change */ NUMBER
1934 	,x_Rltd_Modifier_ID OUT NOCOPY /* file.sql.39 change */ NUMBER
1935 	);
1936 
1937 PROCEDURE Get_Rltd_Modifier_Flds
1938 	(p_List_Line_Id IN QP_LIST_LINES.List_Line_ID%Type
1939 	,x_To_Rltd_Modifier_ID OUT NOCOPY /* file.sql.39 change */ NUMBER
1940 	,x_Rltd_Modifier_Grp_Type OUT NOCOPY /* file.sql.39 change */ NUMBER
1941 	,x_Rltd_Modifier_Grp_No OUT NOCOPY /* file.sql.39 change */ NUMBER
1942 	,x_Rltd_Modifier_ID OUT NOCOPY /* file.sql.39 change */ NUMBER
1943 	) IS
1944 
1945 l_List_Line_Id 			QP_LIST_LINES.List_Line_ID%Type;
1946 l_To_Rltd_Modifier_ID 		QP_RLTD_MODIFIERS.To_Rltd_Modifier_ID%Type;
1947 l_Rltd_Modifier_Grp_Type 	QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_Type%Type;
1948 l_Rltd_Modifier_Grp_No 		QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_No%Type;
1949 l_Rltd_Modifier_ID 			QP_RLTD_MODIFIERS.Rltd_Modifier_ID%Type;
1950 
1951 BEGIN
1952 
1953 select to_rltd_modifier_id,
1954 	rltd_modifier_grp_type, rltd_modifier_grp_no, rltd_modifier_id
1955 	into x_to_rltd_modifier_id,
1956 	x_rltd_modifier_grp_type, x_rltd_modifier_grp_no, x_rltd_modifier_id
1957 	from qp_rltd_modifiers
1958 	where
1959 	from_rltd_modifier_id = p_list_line_id;
1960 
1961 EXCEPTION
1962 
1963 When NO_DATA_FOUND Then
1964 
1965 Null;
1966 
1967 When OTHERS Then
1968 
1969 Null;
1970 
1971 END Get_Rltd_Modifier_Flds;
1972 
1973 FUNCTION Get_To_Rltd_Modifier_ID
1974 (   p_list_line_id 	 		IN QP_LIST_LINES.List_Line_ID%Type
1975 ,   p_modifier_type_code      IN  QP_LIST_LINES.list_line_type_code%type
1976 )
1977 RETURN QP_RLTD_MODIFIERS.To_Rltd_Modifier_ID%Type IS
1978 l_To_Rltd_Modifier_ID 		QP_RLTD_MODIFIERS.To_Rltd_Modifier_ID%Type;
1979 l_Rltd_Modifier_Grp_Type 	QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_Type%Type;
1980 l_Rltd_Modifier_Grp_No 		QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_No%Type;
1981 l_Rltd_Modifier_ID 			QP_RLTD_MODIFIERS.Rltd_Modifier_ID%Type;
1982 BEGIN
1983 
1984 	IF p_modifier_type_code = 'CIE' THEN
1985 	--only for coupon issue
1986 	Get_Rltd_Modifier_Flds(p_List_Line_ID
1987 				  , l_To_Rltd_Modifier_ID
1988 				  , l_Rltd_Modifier_Grp_Type
1989 				  , l_Rltd_Modifier_Grp_No
1990 				  , l_Rltd_Modifier_ID);
1991 	END IF;
1992 
1993 RETURN l_To_Rltd_Modifier_ID;
1994 
1995 EXCEPTION
1996 
1997 When NO_DATA_FOUND Then
1998 
1999 Return Null;
2000 
2001 When OTHERS Then
2002 
2003 Return Null;
2004 
2005 END Get_To_Rltd_Modifier_ID;
2006 
2007 FUNCTION Get_Rltd_Modifier_ID
2008 (   p_list_line_id 	 		IN QP_LIST_LINES.List_Line_ID%Type
2009 ,   p_modifier_type_code      IN  QP_LIST_LINES.list_line_type_code%type
2010 )
2011 RETURN QP_RLTD_MODIFIERS.Rltd_Modifier_ID%Type IS
2012 l_To_Rltd_Modifier_ID 		QP_RLTD_MODIFIERS.To_Rltd_Modifier_ID%Type;
2013 l_Rltd_Modifier_Grp_Type 	QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_Type%Type;
2014 l_Rltd_Modifier_Grp_No 		QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_No%Type;
2015 l_Rltd_Modifier_ID 			QP_RLTD_MODIFIERS.Rltd_Modifier_ID%Type;
2016 BEGIN
2017 
2018 	IF p_modifier_type_code = 'CIE' THEN
2019 	--only for coupon issue
2020 	Get_Rltd_Modifier_Flds(p_List_Line_ID
2021 				  , l_To_Rltd_Modifier_ID
2022 				  , l_Rltd_Modifier_Grp_Type
2023 				  , l_Rltd_Modifier_Grp_No
2024 				  , l_Rltd_Modifier_ID);
2025 	END IF;
2026 
2027 RETURN l_Rltd_Modifier_ID;
2028 
2029 EXCEPTION
2030 
2031 When NO_DATA_FOUND Then
2032 
2033 Return Null;
2034 
2035 When OTHERS Then
2036 
2037 Return Null;
2038 
2039 END Get_Rltd_Modifier_ID;
2040 
2041 FUNCTION Get_Rltd_Modifier_Grp_Type
2042 (   p_list_line_id 	 		IN QP_LIST_LINES.List_Line_ID%Type
2043 ,   p_modifier_type_code      IN  QP_LIST_LINES.list_line_type_code%type
2044 )
2045 RETURN QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_Type%Type IS
2046 l_To_Rltd_Modifier_ID 		QP_RLTD_MODIFIERS.To_Rltd_Modifier_ID%Type;
2047 l_Rltd_Modifier_Grp_Type 	QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_Type%Type;
2048 l_Rltd_Modifier_Grp_No 		QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_No%Type;
2049 l_Rltd_Modifier_ID 			QP_RLTD_MODIFIERS.Rltd_Modifier_ID%Type;
2050 BEGIN
2051 
2052 	IF p_modifier_type_code = 'CIE' THEN
2053 	--only for coupon issue
2054 	Get_Rltd_Modifier_Flds(p_List_Line_ID
2055 				  , l_To_Rltd_Modifier_ID
2056 				  , l_Rltd_Modifier_Grp_Type
2057 				  , l_Rltd_Modifier_Grp_No
2058 				  , l_Rltd_Modifier_ID);
2059 	END IF;
2060 
2061 RETURN l_Rltd_Modifier_Grp_Type;
2062 
2063 EXCEPTION
2064 
2065 When NO_DATA_FOUND Then
2066 
2067 Return Null;
2068 
2069 When OTHERS Then
2070 
2071 Return Null;
2072 
2073 END Get_Rltd_Modifier_Grp_Type;
2074 
2075 FUNCTION Get_Rltd_Modifier_Grp_No
2076 (   p_list_line_id 	 		IN QP_LIST_LINES.List_Line_ID%Type
2077 ,   p_modifier_type_code      IN  QP_LIST_LINES.list_line_type_code%type
2078 )
2079 RETURN QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_No%Type IS
2080 l_To_Rltd_Modifier_ID 		QP_RLTD_MODIFIERS.To_Rltd_Modifier_ID%Type;
2081 l_Rltd_Modifier_Grp_Type 	QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_Type%Type;
2082 l_Rltd_Modifier_Grp_No 		QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_No%Type;
2083 l_Rltd_Modifier_ID 			QP_RLTD_MODIFIERS.Rltd_Modifier_ID%Type;
2084 BEGIN
2085 
2086 	IF p_modifier_type_code = 'CIE' THEN
2087 	--only for coupon issue
2088 	Get_Rltd_Modifier_Flds(p_List_Line_ID
2089 				  , l_To_Rltd_Modifier_ID
2090 				  , l_Rltd_Modifier_Grp_Type
2091 				  , l_Rltd_Modifier_Grp_No
2092 				  , l_Rltd_Modifier_ID);
2093 	END IF;
2094 
2095 RETURN l_Rltd_Modifier_Grp_No;
2096 
2097 EXCEPTION
2098 
2099 When NO_DATA_FOUND Then
2100 
2101 Return Null;
2102 
2103 When OTHERS Then
2104 
2105 Return Null;
2106 
2107 END Get_Rltd_Modifier_Grp_No;
2108 
2109 
2110 FUNCTION Get_Benefit_list_Line_No
2111 (   p_list_line_id 	 		IN QP_LIST_LINES.List_Line_ID%Type
2112 ,   p_modifier_type_code      IN  QP_LIST_LINES.list_line_type_code%type
2113 )
2114 RETURN QP_LIST_LINES.List_Line_No%Type IS
2115 l_To_Rltd_Modifier_ID 		QP_RLTD_MODIFIERS.To_Rltd_Modifier_ID%Type;
2116 l_Rltd_Modifier_Grp_Type 	QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_Type%Type;
2117 l_Rltd_Modifier_Grp_No 		QP_RLTD_MODIFIERS.Rltd_Modifier_Grp_No%Type;
2118 l_Rltd_Modifier_ID 			QP_RLTD_MODIFIERS.Rltd_Modifier_ID%Type;
2119 l_Benefit_List_Line_No QP_LIST_LINES.List_Line_No%Type;
2120 BEGIN
2121 
2122 	IF p_modifier_type_code = 'CIE' THEN
2123 	--only for coupon issue
2124 	Get_Rltd_Modifier_Flds(p_List_Line_ID
2125 				  , l_To_Rltd_Modifier_ID
2126 				  , l_Rltd_Modifier_Grp_Type
2127 				  , l_Rltd_Modifier_Grp_No
2128 				  , l_Rltd_Modifier_ID);
2129 
2130 	select list_line_no into l_benefit_list_line_no from
2131 		qp_list_lines where list_line_id = l_to_rltd_modifier_id;
2132 
2133 	END IF;
2134 
2135 RETURN l_benefit_list_line_no;
2136 
2137 EXCEPTION
2138 
2139 When NO_DATA_FOUND Then
2140 
2141 Return Null;
2142 
2143 When OTHERS Then
2144 
2145 Return Null;
2146 
2147 END Get_Benefit_list_Line_No;
2148 
2149 
2150 
2151 /*
2152 FUNCTION Get_Benefit_List_Line_No
2153 (   p_to_rltd_modifier_id              IN  QP_RLTD_MODIFIERS.to_rltd_modifier_id%type
2154 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
2155 )
2156 RETURN QP_LIST_LINES.List_Line_No%Type IS
2157 l_Benefit_List_Line_No QP_LIST_LINES.List_Line_No%Type;
2158 BEGIN
2159 
2160 select decode(p_modifier_type_code, ql.list_line_type_code, ql.List_Line_No,
2161 Null) into l_Benefit_List_Line_No from QP_LIST_LINES ql  where
2162 ql.list_line_id = p_to_rltd_modifier_id;
2163 
2164 RETURN l_Benefit_List_Line_No;
2165 
2166 EXCEPTION
2167 
2168 When NO_DATA_FOUND Then
2169 
2170 Return Null;
2171 
2172 When OTHERS Then
2173 
2174 Return Null;
2175 
2176 END Get_Benefit_List_Line_No;
2177 */
2178 
2179 FUNCTION Get_Accrual_Flag
2180 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
2181 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
2182 )
2183 RETURN QP_LIST_LINES.Accrual_Flag%Type IS
2184 l_Accrual_Flag QP_LIST_LINES.Accrual_Flag%Type;
2185 BEGIN
2186 
2187 select decode(p_modifier_type_code, ql.list_line_type_code, ql.Accrual_Flag,
2188 Null) into l_Accrual_Flag from QP_LIST_LINES ql where
2189 ql.list_line_id = p_list_line_id;
2190 
2191 RETURN l_Accrual_Flag;
2192 
2193 EXCEPTION
2194 
2195 When NO_DATA_FOUND Then
2196 
2197 Return Null;
2198 
2199 When OTHERS Then
2200 
2201 Return Null;
2202 
2203 END Get_Accrual_Flag;
2204 
2205 FUNCTION Get_Accrual_Conversion_Rate
2206 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
2207 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
2208 )
2209 RETURN QP_LIST_LINES.Accrual_Conversion_Rate%Type IS
2210 l_Accrual_Conversion_Rate QP_LIST_LINES.Accrual_Conversion_Rate%Type;
2211 BEGIN
2212 
2213 select decode(p_modifier_type_code, ql.list_line_type_code,
2214 ql.Accrual_Conversion_Rate, Null) into l_Accrual_Conversion_Rate
2215 from QP_LIST_LINES ql where ql.list_line_id = p_list_line_id;
2216 
2217 RETURN l_Accrual_Conversion_Rate;
2218 
2219 EXCEPTION
2220 
2221 When NO_DATA_FOUND Then
2222 
2223 Return Null;
2224 
2225 When OTHERS Then
2226 
2227 Return Null;
2228 
2229 END Get_Accrual_Conversion_Rate;
2230 
2231 FUNCTION Get_Estim_Accrual_Rate
2232 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
2233 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
2234 )
2235 RETURN QP_LIST_LINES.Estim_Accrual_Rate%Type IS
2236 l_Estim_Accrual_Rate QP_LIST_LINES.Estim_Accrual_Rate%Type;
2237 BEGIN
2238 
2239 select decode(p_modifier_type_code, ql.list_line_type_code,
2240 ql.Estim_Accrual_Rate, Null) into l_Estim_Accrual_Rate from
2241 QP_LIST_LINES ql where ql.list_line_id = p_list_line_id;
2242 
2243 RETURN l_Estim_Accrual_Rate;
2244 
2245 EXCEPTION
2246 
2247 When NO_DATA_FOUND Then
2248 
2249 Return Null;
2250 
2251 When OTHERS Then
2252 
2253 Return Null;
2254 
2255 END Get_Estim_Accrual_Rate;
2256 
2257 --changes for bug 1496839 to improve performance
2258 FUNCTION Get_Break_Line_Type_Code
2259 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
2260 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
2261 )
2262 RETURN QP_LIST_LINES.List_Line_Type_Code%Type IS
2263 l_Break_Line_Type_Code QP_LIST_LINES.List_Line_Type_Code%Type;
2264 BEGIN
2265 
2266 IF p_modifier_type_code = 'PBH' then
2267 
2268 select ql.list_line_type_code into l_Break_Line_Type_Code
2269 from QP_LIST_LINES ql
2270 where ql.list_line_id = (select to_rltd_modifier_id from
2271 qp_rltd_modifiers where from_rltd_modifier_id = p_list_line_id and
2272 rownum < 2);
2273 
2274 ELSE
2275 
2276 l_break_line_type_code := null;
2277 
2278 END IF;
2279 
2280 RETURN l_Break_Line_Type_Code;
2281 
2282 EXCEPTION
2283 
2284 When NO_DATA_FOUND Then
2285 
2286 Return Null;
2287 
2288 When OTHERS Then
2289 
2290 Return Null;
2291 
2292 END Get_Break_Line_Type_Code;
2293 
2294 --changes for bug 1496839 to improve performance
2295 FUNCTION Get_Break_Line_Type
2296 (   p_list_line_id                     IN  QP_LIST_LINES.list_line_id%type
2297 ,   p_modifier_type_code               IN  QP_LIST_LINES.list_line_type_code%type
2298 ,   p_break_line_type_code			IN QP_LIST_LINES.list_line_type_code%type
2299 )
2300 RETURN QP_LOOKUPS.Meaning%Type IS
2301 l_Break_Line_Type QP_LOOKUPS.Meaning%Type;
2302 BEGIN
2303 
2304 IF p_modifier_type_code = 'PBH' then
2305 
2306 select qlook.Meaning into l_Break_Line_Type
2307 from qp_lookups qlook
2308 where qlook.lookup_type = 'LIST_LINE_TYPE_CODE' and
2309 qlook.lookup_code = p_break_line_type_code;
2310 
2311 
2312 /*
2313 select qlook.Meaning into l_Break_Line_Type
2314 from QP_LIST_LINES ql, qp_lookups qlook
2315 where qlook.lookup_code = ql.list_line_type_code and
2316 ql.list_line_id = (select to_rltd_modifier_id from
2317 qp_rltd_modifiers where from_rltd_modifier_id = p_list_line_id and
2318 rownum < 2);
2319 */
2320 
2321 ELSE
2322 
2323 l_break_line_type := null;
2324 
2325 END IF;
2326 
2327 RETURN l_Break_Line_Type;
2328 
2329 EXCEPTION
2330 
2331 When NO_DATA_FOUND Then
2332 
2333 Return Null;
2334 
2335 When OTHERS Then
2336 
2337 Return Null;
2338 
2339 END Get_Break_Line_Type;
2340 
2341 
2342   FUNCTION Get_Context(p_FlexField_Name  IN VARCHAR2
2343 				  ,p_context    IN VARCHAR2)RETURN VARCHAR2 IS
2344 /* commented for attribute manager change
2345   Flexfield FND_DFLEX.dflex_r;
2346   Flexinfo  FND_DFLEX.dflex_dr;
2347   Contexts  FND_DFLEX.contexts_dr;
2348 */
2349 
2350   x_context_code        VARCHAR2(240);
2351 
2352   BEGIN
2353   x_context_code := QP_UTIL.Get_Context(p_FlexField_Name
2354                                        ,p_context);
2355 
2356 /* commented for attribute manager change
2357   -- Call Flexapi to get contexts
2358 
2359   FND_DFLEX.get_flexfield('QP',p_FlexField_Name,Flexfield,Flexinfo);
2360   FND_DFLEX.get_contexts(Flexfield,Contexts);
2361 
2362 
2363   For i in 1..Contexts.ncontexts LOOP
2364 
2365     If(Contexts.is_enabled(i) AND (NOT (Contexts.is_global(i)))) Then
2366 
2367        If p_context = Contexts.context_code(i) Then
2368           x_context_code :=Contexts.context_name(i);
2369 		EXIT;
2370        End If;
2371 
2372     End if;
2373   End Loop;
2374 */
2375 
2376   RETURN x_context_code;
2377 
2378   END Get_Context;
2379 
2380 /*-------------------------------------------------------------------------
2381 CHANGED THIS PROCEDURE TO SHOW THE ID IF THE ATTRIBUTE IS INVALID OR
2382 THE ATTRIBUTE HAS BEEN DELETED.
2383 CHANGES MADE BASED ON SWATI'S CHANGES TO QP_CON_ATTR_PACKAGE IN QPXCORE
2384 -------------------------------------------------------------------------*/
2385 
2386 PROCEDURE Get_Attribute_Code(p_FlexField_Name 	IN VARCHAR2
2387                             ,p_Context_Name   	IN VARCHAR2
2388 				        ,p_attribute      	IN VARCHAR2
2389 					   ,p_attribute_col_name IN VARCHAR2
2390 					   ,x_attribute_code 	OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2391 					   ,x_segment_name   	OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2392 					   ) 	IS
2393 /* commented for attribute manager change
2394   Flexfield FND_DFLEX.dflex_r;
2395   Flexinfo  FND_DFLEX.dflex_dr;
2396   Contexts  FND_DFLEX.contexts_dr;
2397   segments  FND_DFLEX.segments_dr;
2398   i BINARY_INTEGER;
2399 
2400   VALID_ATTRIBUTE BOOLEAN := FALSE;
2401 */
2402 
2403 BEGIN
2404    QP_UTIL.Get_Attribute_Code(p_FlexField_Name
2405                              ,p_Context_Name
2406                              ,p_attribute
2407                              ,x_attribute_code
2408                              ,x_segment_name
2409                              );
2410 
2411 /* commented for attribute manager change
2412   FND_DFLEX.get_flexfield('QP',p_FlexField_Name,Flexfield,Flexinfo);
2413 
2414 	--removing  the check for the  enabled segments as well as per the upgrade
2415 	--requirement.
2416 	--While upgrading ,there may be some segments which were enabled in the
2417 	--past but disabled now.
2418 	--In such cases ,we still need to show the data in the post query.
2419 	--Hence commented out the call with 'TRUE' which looks only for enabled
2420 	--segments.
2421 	--And added 'FALSE' which reads all the segments.
2422 
2423 
2424   --FND_DFLEX.get_segments(FND_DFLEX.make_context(Flexfield,p_Context_Name),
2425           --            segments,TRUE);
2426   FND_DFLEX.get_segments(FND_DFLEX.make_context(Flexfield,p_Context_Name), segments,FALSE);
2427 
2428   For i in 1..segments.nsegments LOOP
2429 
2430     --removing  the check for the  enabled segments as well as per the upgrade
2431    --requirement.
2432   --While upgrading ,there may be some segments which were enabled in the past
2433   --but disabled now.
2434  --In such cases ,we still need to show the data in the post query.
2435 
2436     IF segments.is_enabled(i)  THEN
2437 
2438 	    IF segments.application_column_name(i) = p_attribute Then
2439 		  x_attribute_code := segments.row_prompt(i);
2440 		  x_segment_name   := segments.segment_name(i);
2441 		  VALID_ATTRIBUTE  := TRUE;
2442 		  EXIT;
2443          End if;
2444     END IF;
2445   END LOOP;
2446 
2447        --added to show invalid values brought in by upgrade.
2448 		IF NOT VALID_ATTRIBUTE THEN
2449 		--fnd_message.debug('invalid attr');
2450 		oe_debug_pub.add('invalid attr');
2451 			x_attribute_code  := p_attribute;
2452 			--Not applicable for database package; will handle in the UI
2453 			set_item_instance_property(
2454 			p_attribute_col_name
2455 			,CURRENT_RECORD
2456 			,VISUAL_ATTRIBUTE
2457 			,'DATA_RED');
2458 
2459 		END IF;
2460 	  -- end of additions for the upgrade.
2461 */
2462 
2463 
2464  END Get_Attribute_Code;
2465 
2466 FUNCTION Get_Attribute
2467 (   p_FlexField_Name IN VARCHAR2
2468 ,   p_Context_Name   IN VARCHAR2
2469 ,   p_attribute      IN VARCHAR2
2470 )
2471 RETURN VARCHAR2 IS
2472 l_product_attr VARCHAR2(240);
2473 l_prod_segment_name VARCHAR2(240);
2474 BEGIN
2475 
2476 	Get_Attribute_Code(p_FlexField_Name
2477 				  , p_context_name
2478 				  , p_attribute
2479 				  , NULL
2480 				  , l_product_attr
2481 				  , l_prod_segment_name);
2482 
2483 RETURN l_Product_attr;
2484 
2485 EXCEPTION
2486 
2487 When NO_DATA_FOUND Then
2488 
2489 Return Null;
2490 
2491 When OTHERS Then
2492 
2493 Return Null;
2494 
2495 END Get_Attribute;
2496 
2497 FUNCTION Get_Segment_name
2498 (   p_FlexField_Name IN VARCHAR2
2499 ,   p_Context_Name   IN VARCHAR2
2500 ,   p_attribute      IN VARCHAR2
2501 )
2502 RETURN VARCHAR2 IS
2503 l_product_attr VARCHAR2(240);
2504 l_prod_segment_name VARCHAR2(240);
2505 BEGIN
2506 
2507 	Get_Attribute_Code(p_FlexField_Name
2508 				  , p_context_name
2509 				  , p_attribute
2510 				  , NULL
2511 				  , l_product_attr
2512 				  , l_prod_segment_name);
2513 
2514 RETURN l_prod_segment_name;
2515 
2516 EXCEPTION
2517 
2518 When NO_DATA_FOUND Then
2519 
2520 Return Null;
2521 
2522 When OTHERS Then
2523 
2524 
2525 Return Null;
2526 
2527 END Get_Segment_name;
2528 
2529 /*-------------------------------------------------------------------------
2530 CHANGED THIS FUNCTION TO SHOW THE ID IF THE VALUE IS INVALID OR THE VALUE
2531 HAS BEEN DELETED FROM THE VALUE SET.
2532 CHANGES MADE BASED ON SWATI'S CHANGES TO QP_CON_ATTR_PACKAGE IN QPXCORE
2533 -------------------------------------------------------------------------*/
2534 
2535 
2536 FUNCTION Get_Attribute_Value(p_FlexField_Name       IN VARCHAR2
2537                             ,p_Context_Name         IN VARCHAR2
2538 		            	   ,p_attribute         	  IN VARCHAR2
2539 			    		   ,p_attr_value IN VARCHAR2
2540                             ,p_attribute_val_col_name   IN VARCHAR2 := NULL
2541                             ,p_comparison_operator_code IN VARCHAR2 := NULL
2542 			    		   ) RETURN VARCHAR2 IS
2543 
2544   Vset  FND_VSET.valueset_r;
2545   Fmt   FND_VSET.valueset_dr;
2546 
2547   Found BOOLEAN;
2548   Row   NUMBER;
2549   Value FND_VSET.value_dr;
2550 
2551 
2552 
2553   x_Format_Type Varchar2(1);
2554   x_Validation_Type Varchar2(1);
2555   x_Vsid  NUMBER;
2556 
2557 
2558   x_attr_value_code     VARCHAR2(240);
2559   l_segment_name	    VARCHAR2(240);
2560 
2561 
2562   l_attr_value     VARCHAR2(2000);
2563 
2564 
2565   Value_Valid_In_Valueset BOOLEAN := FALSE;
2566   l_id VARCHAR2(150);
2567   l_value VARCHAR2(150);
2568 
2569   BEGIN
2570   /* Added for 2332139 */
2571 
2572   IF p_FlexField_Name IS NULL OR p_Context_Name IS NULL OR p_attribute IS NULL THEN
2573      RETURN NULL;
2574   ELSE
2575 
2576 	l_segment_name := get_segment_name(p_flexfield_name,
2577 								p_context_name, p_attribute);
2578 
2579          QP_UTIL.get_valueset_id(p_FlexField_Name,p_Context_Name,
2580 								   l_Segment_Name,x_Vsid,
2581 								   x_Format_Type, x_Validation_Type);
2582 
2583 
2584 		l_attr_value := p_attr_value;
2585 
2586   -- if comparison operator is other than '=' then no need to get the
2587   -- meaning as the value itself will be stored in qualifier_attr_value
2588 
2589 
2590 --change made by spgopal. added parameter called p_comparison_operator_code
2591 --to generalise the code for all forms and packages
2592 
2593 	    If  nvl(p_comparison_operator_code, '0') <>  'BETWEEN' THEN
2594 
2595          		IF x_Validation_Type In('F' ,'I')  AND x_Vsid  IS NOT NULL THEN
2596 
2597 
2598 				IF x_Validation_Type = 'I' Then
2599 
2600             			FND_VSET.get_valueset(x_Vsid,Vset,Fmt);
2601             			FND_VSET.get_value_init(Vset,TRUE);
2602             			FND_VSET.get_value(Vset,Row,Found,Value);
2603 
2604 
2605             			IF Fmt.Has_Id Then --id is defined.Hence compare for id
2606 
2607                      		While(Found) Loop
2608 
2609 
2610                         		If  l_attr_value  = Value.id  Then
2611 
2612 	                       		x_attr_value_code  := Value.value;
2613                             		Value_Valid_In_Valueset := TRUE;
2614                             		EXIT;
2615                         		End If;
2616                         		FND_VSET.get_value(Vset,Row,Found,Value);
2617 
2618                      		End Loop;
2619             			Else      -- id not defined.Hence compare for value
2620 
2621                      		While(Found) Loop
2622 
2623                         		If  l_attr_value  = Value.value  Then
2624 
2625                             		x_attr_value_code  := l_attr_value;
2626 					   		Value_Valid_In_Valueset := TRUE;
2627                             		EXIT;
2628                         		End If;
2629                         		FND_VSET.get_value(Vset,Row,Found,Value);
2630 
2631                      		End Loop;
2632 
2633             			End If; ---end of Fmt.Has_Id
2634 
2635 
2636              			FND_VSET.get_value_end(Vset);
2637 
2638 				ELSIF x_Validation_Type = 'F' THEN
2639 
2640 					FND_VSET.get_valueset(x_Vsid,Vset,Fmt);
2641 
2642 					IF (QP_UTIL.value_exists_in_table(Vset.table_info,
2643 							l_attr_value,l_id,l_value)) THEN
2644 
2645 							IF Fmt.Has_Id Then
2646 							--id is defined. Hence compare id
2647 
2648 								IF l_attr_value = l_id Then
2649 
2650 									x_attr_value_code := l_value;
2651 									Value_Valid_In_Valueset := TRUE;
2652 								END IF;
2653 							ELSE
2654 								IF l_attr_value = l_value THEN
2655 									x_attr_value_code := l_attr_value;
2656 									Value_Valid_In_Valueset := TRUE;
2657 								END IF;
2658 							END IF; 	--End of Fmt.Has_ID
2659 					ELSE
2660 						Value_Valid_In_Valueset := FALSE;
2661 					END IF;
2662 				END IF;
2663 
2664 
2665         		ELSE -- if validation type is not F or I or valueset id is null (not defined)
2666 
2667              		x_attr_value_code := l_attr_value;
2668         		END IF;
2669    ELSE -- if comparison operator is 'between'
2670 
2671         x_attr_value_code  := l_attr_value;
2672    END IF;
2673 
2674 
2675  RETURN x_attr_value_code;
2676 END IF;
2677 END Get_Attribute_Value;
2678 
2679 
2680 
2681 FUNCTION Get_Attr_Value_To(p_FlexField_Name       IN VARCHAR2
2682                           ,p_Context_Name         IN VARCHAR2
2683 			  		 ,p_segment_name         IN VARCHAR2
2684 		          	 ,p_attr_value_To        IN VARCHAR2
2685 		          	 ) RETURN VARCHAR2 IS
2686 
2687   Vset  FND_VSET.valueset_r;
2688   Fmt   FND_VSET.valueset_dr;
2689 
2690   Found BOOLEAN;
2691   Row   NUMBER;
2692   Value FND_VSET.value_dr;
2693 
2694 
2695 
2696   x_Format_Type Varchar2(1);
2697   x_Validation_Type Varchar2(1);
2698   x_Vsid  NUMBER;
2699 
2700 
2701   x_attr_value_code     VARCHAR2(240);
2702   l_attr_value_to     VARCHAR2(2000);
2703 
2704   BEGIN
2705 
2706 
2707          QP_UTIL.get_valueset_id(p_FlexField_Name,p_Context_Name,
2708 	                             p_Segment_Name,x_Vsid,
2709                                  x_Format_Type, x_Validation_Type);
2710 /*
2711          IF x_Validation_Type In('F' ,'I')  AND x_Vsid  IS NOT NULL THEN
2712             FND_VSET.get_valueset(x_Vsid,Vset,Fmt);
2713             FND_VSET.get_value_init(Vset,TRUE);
2714             FND_VSET.get_value(Vset,Row,Found,Value);
2715 
2716             While(Found) Loop
2717 
2718              --fnd_message.debug(Value.value);
2719              --fnd_message.debug(Value.meaning);
2720              --fnd_message.debug(Value.id);
2721 
2722              If  p_attr_value_to  = Value.value  Then
2723 
2724 	            x_attr_value_code  := Value.Meaning;
2725                  EXIT;
2726              End If;
2727              FND_VSET.get_value(Vset,Row,Found,Value);
2728 
2729              End Loop;
2730              FND_VSET.get_value_end(Vset);
2731         ELSE
2732 
2733              x_attr_value_code := p_attr_value_to;
2734         END IF;
2735    --ELSE
2736 
2737    --     x_attr_value_code  := p_attr_value;
2738    --END IF;
2739         --fnd_message.debug(x_attr_value_code);
2740 */
2741 
2742 --this function is going to be used in the summary block of modifiers form.
2743 --the pricing context can only be VOLUME. so returning the value to directly
2744 --the post query of the block handles canonical conversion
2745 
2746 	x_attr_value_code := p_attr_value_to;
2747 
2748  RETURN x_attr_value_code;
2749 END Get_Attr_Value_to;
2750 
2751 
2752 
2753 
2754 
2755 --added by svdeshmu
2756 -- This procedure will be called from the client when the user
2757 -- clears a record
2758 Procedure Clear_Record
2759 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2760 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
2761 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
2762 ,   p_list_line_id                  IN  NUMBER
2763 )
2764 IS
2765 l_return_status                     Varchar2(30);
2766 BEGIN
2767      OE_MSG_PUB.initialize;
2768  	x_return_status := FND_API.G_RET_STS_SUCCESS;
2769      QP_DELAYED_REQUESTS_PVT.Delete_Reqs_for_Deleted_Entity(
2770 					p_entity_code  => QP_GLOBALS.G_ENTITY_PRICING_ATTR
2771 					,p_entity_id    => p_list_line_id
2772 				     ,x_return_status => l_return_status);
2773 
2774         OE_MSG_PUB.Count_And_Get
2775         (   p_count                       => x_msg_count
2776         ,   p_data                        => x_msg_data
2777         );
2778 
2779 -- Clear the controller cache
2780 	Clear_Pricing_Attr;
2781 
2782 EXCEPTION
2783     WHEN OTHERS THEN
2784         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2785         THEN
2786             OE_MSG_PUB.Add_Exc_Msg
2787             (   G_PKG_NAME
2788             ,   'Clear_Record'
2789             );
2790         END IF;
2791         --  Get message count and data
2792         OE_MSG_PUB.Count_And_Get
2793         (   p_count                       => x_msg_count
2794         ,   p_data                        => x_msg_data
2795         );
2796         x_return_status := FND_API.G_RET_STS_ERROR;
2797 
2798 END Clear_Record;
2799 
2800 
2801 --added by svdeshmu
2802 
2803 
2804 
2805 
2806 END QP_QP_Form_Pricing_Attr;