DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_CURR_DETAILS_UTIL

Source


1 PACKAGE BODY QP_Curr_Details_Util AS
2 /* $Header: QPXUCDTB.pls 120.1.12010000.2 2008/10/19 08:40:54 hmohamme ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'QP_Curr_Details_Util';
7 
8 --  Procedure Clear_Dependent_Attr
9 
10 PROCEDURE Clear_Dependent_Attr
11 (   p_attr_id                       IN  NUMBER := FND_API.G_MISS_NUM
12 ,   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
13 ,   p_old_CURR_DETAILS_rec          IN  QP_Currency_PUB.Curr_Details_Rec_Type :=
14                                         QP_Currency_PUB.G_MISS_CURR_DETAILS_REC
15 ,   x_CURR_DETAILS_rec              OUT NOCOPY /* file.sql.39 change */ QP_Currency_PUB.Curr_Details_Rec_Type
16 )
17 IS
18 l_index                       NUMBER := 0;
19 l_src_attr_tbl                QP_GLOBALS.NUMBER_Tbl_Type;
20 l_dep_attr_tbl                QP_GLOBALS.NUMBER_Tbl_Type;
21 BEGIN
22 
23     --  Load out record
24 
25     x_CURR_DETAILS_rec := p_CURR_DETAILS_rec;
26 
27     --  If attr_id is missing compare old and new records and for
28     --  every changed attribute clear its dependent fields.
29 
30     IF p_attr_id = FND_API.G_MISS_NUM THEN
31 
32         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute1,p_old_CURR_DETAILS_rec.attribute1)
33         THEN
34             l_index := l_index + 1;
35             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE1;
36         END IF;
37 
38         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute10,p_old_CURR_DETAILS_rec.attribute10)
39         THEN
40             l_index := l_index + 1;
41             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE10;
42         END IF;
43 
44         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute11,p_old_CURR_DETAILS_rec.attribute11)
45         THEN
46             l_index := l_index + 1;
47             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE11;
48         END IF;
49 
50         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute12,p_old_CURR_DETAILS_rec.attribute12)
51         THEN
52             l_index := l_index + 1;
53             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE12;
54         END IF;
55 
56         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute13,p_old_CURR_DETAILS_rec.attribute13)
57         THEN
58             l_index := l_index + 1;
59             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE13;
60         END IF;
61 
62         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute14,p_old_CURR_DETAILS_rec.attribute14)
63         THEN
64             l_index := l_index + 1;
65             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE14;
66         END IF;
67 
68         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute15,p_old_CURR_DETAILS_rec.attribute15)
69         THEN
70             l_index := l_index + 1;
71             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE15;
72         END IF;
73 
74         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute2,p_old_CURR_DETAILS_rec.attribute2)
75         THEN
76             l_index := l_index + 1;
77             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE2;
78         END IF;
79 
80         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute3,p_old_CURR_DETAILS_rec.attribute3)
81         THEN
82             l_index := l_index + 1;
83             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE3;
84         END IF;
85 
86         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute4,p_old_CURR_DETAILS_rec.attribute4)
87         THEN
88             l_index := l_index + 1;
89             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE4;
90         END IF;
91 
92         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute5,p_old_CURR_DETAILS_rec.attribute5)
93         THEN
94             l_index := l_index + 1;
95             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE5;
96         END IF;
97 
98         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute6,p_old_CURR_DETAILS_rec.attribute6)
99         THEN
100             l_index := l_index + 1;
101             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE6;
102         END IF;
103 
104         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute7,p_old_CURR_DETAILS_rec.attribute7)
105         THEN
106             l_index := l_index + 1;
107             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE7;
108         END IF;
109 
110         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute8,p_old_CURR_DETAILS_rec.attribute8)
111         THEN
112             l_index := l_index + 1;
113             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE8;
114         END IF;
115 
116         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute9,p_old_CURR_DETAILS_rec.attribute9)
117         THEN
118             l_index := l_index + 1;
119             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE9;
120         END IF;
121 
122         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.context,p_old_CURR_DETAILS_rec.context)
123         THEN
124             l_index := l_index + 1;
125             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CONTEXT;
126         END IF;
127 
128         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_date,p_old_CURR_DETAILS_rec.conversion_date)
129         THEN
130             l_index := l_index + 1;
131             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CONVERSION_DATE;
132         END IF;
133 
134         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_date_type,p_old_CURR_DETAILS_rec.conversion_date_type)
135         THEN
136             l_index := l_index + 1;
137             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CONVERSION_DATE_TYPE;
138         END IF;
139 
140 	/*
141         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_method,p_old_CURR_DETAILS_rec.conversion_method)
142         THEN
143             l_index := l_index + 1;
144             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CONVERSION_METHOD;
145         END IF;
146 	*/
147 
148         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_type,p_old_CURR_DETAILS_rec.conversion_type)
149         THEN
150             l_index := l_index + 1;
151             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CONVERSION_TYPE;
152         END IF;
153 
154         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.created_by,p_old_CURR_DETAILS_rec.created_by)
155         THEN
156             l_index := l_index + 1;
157             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CREATED_BY;
158         END IF;
159 
160         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.creation_date,p_old_CURR_DETAILS_rec.creation_date)
161         THEN
162             l_index := l_index + 1;
163             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CREATION_DATE;
164         END IF;
165 
166         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.currency_detail_id,p_old_CURR_DETAILS_rec.currency_detail_id)
167         THEN
168             l_index := l_index + 1;
169             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURRENCY_DETAIL;
170         END IF;
171 
172         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.currency_header_id,p_old_CURR_DETAILS_rec.currency_header_id)
173         THEN
174             l_index := l_index + 1;
175             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURRENCY_HEADER;
176         END IF;
177 
178         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.end_date_active,p_old_CURR_DETAILS_rec.end_date_active)
179         THEN
180             l_index := l_index + 1;
181             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_END_DATE_ACTIVE;
182         END IF;
183 
184         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.fixed_value,p_old_CURR_DETAILS_rec.fixed_value)
185         THEN
186             l_index := l_index + 1;
187             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_FIXED_VALUE;
188         END IF;
189 
190         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.last_updated_by,p_old_CURR_DETAILS_rec.last_updated_by)
191         THEN
192             l_index := l_index + 1;
193             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_LAST_UPDATED_BY;
194         END IF;
195 
196         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.last_update_date,p_old_CURR_DETAILS_rec.last_update_date)
197         THEN
198             l_index := l_index + 1;
199             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_LAST_UPDATE_DATE;
200         END IF;
201 
202         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.last_update_login,p_old_CURR_DETAILS_rec.last_update_login)
203         THEN
204             l_index := l_index + 1;
205             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_LAST_UPDATE_LOGIN;
206         END IF;
207 
208         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.markup_formula_id,p_old_CURR_DETAILS_rec.markup_formula_id)
209         THEN
210             l_index := l_index + 1;
211             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_MARKUP_FORMULA;
212         END IF;
213 
214         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.markup_operator,p_old_CURR_DETAILS_rec.markup_operator)
215         THEN
216             l_index := l_index + 1;
217             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_MARKUP_OPERATOR;
218         END IF;
219 
220         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.markup_value,p_old_CURR_DETAILS_rec.markup_value)
221         THEN
222             l_index := l_index + 1;
223             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_MARKUP_VALUE;
224         END IF;
225 
226         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.price_formula_id,p_old_CURR_DETAILS_rec.price_formula_id)
227         THEN
228             l_index := l_index + 1;
229             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_PRICE_FORMULA;
230         END IF;
231 
232         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.program_application_id,p_old_CURR_DETAILS_rec.program_application_id)
233         THEN
234             l_index := l_index + 1;
235             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_PROGRAM_APPLICATION;
236         END IF;
237 
238         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.program_id,p_old_CURR_DETAILS_rec.program_id)
239         THEN
240             l_index := l_index + 1;
241             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_PROGRAM;
242         END IF;
243 
244         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.program_update_date,p_old_CURR_DETAILS_rec.program_update_date)
245         THEN
246             l_index := l_index + 1;
247             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_PROGRAM_UPDATE_DATE;
248         END IF;
249 
250         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.request_id,p_old_CURR_DETAILS_rec.request_id)
251         THEN
252             l_index := l_index + 1;
253             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_REQUEST;
254         END IF;
255 
256         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.rounding_factor,p_old_CURR_DETAILS_rec.rounding_factor)
257         THEN
258             l_index := l_index + 1;
259             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ROUNDING_FACTOR;
260         END IF;
261 
262         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.selling_rounding_factor,
263                                 p_old_CURR_DETAILS_rec.selling_rounding_factor)
264         THEN
265             l_index := l_index + 1;
266             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_SELLING_ROUNDING_FACTOR;
267         END IF;
268 
269         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.start_date_active,p_old_CURR_DETAILS_rec.start_date_active)
270         THEN
271             l_index := l_index + 1;
272             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_START_DATE_ACTIVE;
273         END IF;
274 
275         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.to_currency_code,p_old_CURR_DETAILS_rec.to_currency_code)
276         THEN
277             l_index := l_index + 1;
278             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_TO_CURRENCY;
279         END IF;
280 
281         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute_type,p_old_CURR_DETAILS_rec.curr_attribute_type)
282         THEN
283             l_index := l_index + 1;
284             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURR_ATTRIBUTE_TYPE;
285         END IF;
286 
287         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute_context,p_old_CURR_DETAILS_rec.curr_attribute_context)
288         THEN
289             l_index := l_index + 1;
290             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURR_ATTRIBUTE_CONTEXT;
291         END IF;
292 
293         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute,p_old_CURR_DETAILS_rec.curr_attribute)
294         THEN
295             l_index := l_index + 1;
296             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURR_ATTRIBUTE;
297         END IF;
298 
299         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute_value,p_old_CURR_DETAILS_rec.curr_attribute_value)
300         THEN
301             l_index := l_index + 1;
302             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURR_ATTRIBUTE_VALUE;
303         END IF;
304 
305         IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.precedence,p_old_CURR_DETAILS_rec.precedence)
306         THEN
307             l_index := l_index + 1;
308             l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_PRECEDENCE;
309         END IF;
310 
311     ELSIF p_attr_id = G_ATTRIBUTE1 THEN
312         l_index := l_index + 1;
313         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE1;
314     ELSIF p_attr_id = G_ATTRIBUTE10 THEN
315         l_index := l_index + 1;
316         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE10;
317     ELSIF p_attr_id = G_ATTRIBUTE11 THEN
318         l_index := l_index + 1;
319         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE11;
320     ELSIF p_attr_id = G_ATTRIBUTE12 THEN
321         l_index := l_index + 1;
322         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE12;
323     ELSIF p_attr_id = G_ATTRIBUTE13 THEN
324         l_index := l_index + 1;
325         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE13;
326     ELSIF p_attr_id = G_ATTRIBUTE14 THEN
327         l_index := l_index + 1;
328         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE14;
329     ELSIF p_attr_id = G_ATTRIBUTE15 THEN
330         l_index := l_index + 1;
331         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE15;
332     ELSIF p_attr_id = G_ATTRIBUTE2 THEN
333         l_index := l_index + 1;
334         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE2;
335     ELSIF p_attr_id = G_ATTRIBUTE3 THEN
336         l_index := l_index + 1;
337         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE3;
338     ELSIF p_attr_id = G_ATTRIBUTE4 THEN
339         l_index := l_index + 1;
340         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE4;
341     ELSIF p_attr_id = G_ATTRIBUTE5 THEN
342         l_index := l_index + 1;
343         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE5;
347     ELSIF p_attr_id = G_ATTRIBUTE7 THEN
344     ELSIF p_attr_id = G_ATTRIBUTE6 THEN
345         l_index := l_index + 1;
346         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE6;
348         l_index := l_index + 1;
349         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE7;
350     ELSIF p_attr_id = G_ATTRIBUTE8 THEN
351         l_index := l_index + 1;
352         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE8;
353     ELSIF p_attr_id = G_ATTRIBUTE9 THEN
354         l_index := l_index + 1;
355         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ATTRIBUTE9;
356     ELSIF p_attr_id = G_CONTEXT THEN
357         l_index := l_index + 1;
358         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CONTEXT;
359     ELSIF p_attr_id = G_CONVERSION_DATE THEN
360         l_index := l_index + 1;
361         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CONVERSION_DATE;
362     ELSIF p_attr_id = G_CONVERSION_DATE_TYPE THEN
363         l_index := l_index + 1;
364         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CONVERSION_DATE_TYPE;
365     -- ELSIF p_attr_id = G_CONVERSION_METHOD THEN
366         -- l_index := l_index + 1;
367         -- l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CONVERSION_METHOD;
368     ELSIF p_attr_id = G_CONVERSION_TYPE THEN
369         l_index := l_index + 1;
370         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CONVERSION_TYPE;
371     ELSIF p_attr_id = G_CREATED_BY THEN
372         l_index := l_index + 1;
373         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CREATED_BY;
374     ELSIF p_attr_id = G_CREATION_DATE THEN
375         l_index := l_index + 1;
376         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CREATION_DATE;
377     ELSIF p_attr_id = G_CURRENCY_DETAIL THEN
378         l_index := l_index + 1;
379         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURRENCY_DETAIL;
380     ELSIF p_attr_id = G_CURRENCY_HEADER THEN
381         l_index := l_index + 1;
382         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURRENCY_HEADER;
383     ELSIF p_attr_id = G_END_DATE_ACTIVE THEN
384         l_index := l_index + 1;
385         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_END_DATE_ACTIVE;
386     ELSIF p_attr_id = G_FIXED_VALUE THEN
387         l_index := l_index + 1;
388         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_FIXED_VALUE;
389     ELSIF p_attr_id = G_LAST_UPDATED_BY THEN
390         l_index := l_index + 1;
391         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_LAST_UPDATED_BY;
392     ELSIF p_attr_id = G_LAST_UPDATE_DATE THEN
393         l_index := l_index + 1;
394         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_LAST_UPDATE_DATE;
395     ELSIF p_attr_id = G_LAST_UPDATE_LOGIN THEN
396         l_index := l_index + 1;
397         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_LAST_UPDATE_LOGIN;
398     ELSIF p_attr_id = G_MARKUP_FORMULA THEN
399         l_index := l_index + 1;
400         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_MARKUP_FORMULA;
401     ELSIF p_attr_id = G_MARKUP_OPERATOR THEN
402         l_index := l_index + 1;
403         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_MARKUP_OPERATOR;
404     ELSIF p_attr_id = G_MARKUP_VALUE THEN
405         l_index := l_index + 1;
406         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_MARKUP_VALUE;
407     ELSIF p_attr_id = G_PRICE_FORMULA THEN
408         l_index := l_index + 1;
409         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_PRICE_FORMULA;
410     ELSIF p_attr_id = G_PROGRAM_APPLICATION THEN
411         l_index := l_index + 1;
412         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_PROGRAM_APPLICATION;
413     ELSIF p_attr_id = G_PROGRAM THEN
414         l_index := l_index + 1;
415         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_PROGRAM;
416     ELSIF p_attr_id = G_PROGRAM_UPDATE_DATE THEN
417         l_index := l_index + 1;
418         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_PROGRAM_UPDATE_DATE;
419     ELSIF p_attr_id = G_REQUEST THEN
420         l_index := l_index + 1;
421         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_REQUEST;
422     ELSIF p_attr_id = G_ROUNDING_FACTOR THEN
423         l_index := l_index + 1;
424         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_ROUNDING_FACTOR;
425     ELSIF p_attr_id = G_SELLING_ROUNDING_FACTOR THEN
426         l_index := l_index + 1;
427         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_SELLING_ROUNDING_FACTOR;
428     ELSIF p_attr_id = G_START_DATE_ACTIVE THEN
429         l_index := l_index + 1;
430         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_START_DATE_ACTIVE;
431     ELSIF p_attr_id = G_TO_CURRENCY THEN
432         l_index := l_index + 1;
433         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_TO_CURRENCY;
434     ELSIF p_attr_id = G_CURR_ATTRIBUTE_TYPE THEN
435         l_index := l_index + 1;
436         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURR_ATTRIBUTE_TYPE;
437     ELSIF p_attr_id = G_CURR_ATTRIBUTE_CONTEXT THEN
438         l_index := l_index + 1;
439         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURR_ATTRIBUTE_CONTEXT;
440     ELSIF p_attr_id = G_CURR_ATTRIBUTE THEN
441         l_index := l_index + 1;
442         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURR_ATTRIBUTE;
443     ELSIF p_attr_id = G_CURR_ATTRIBUTE_VALUE THEN
444         l_index := l_index + 1;
445         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_CURR_ATTRIBUTE_VALUE;
446     ELSIF p_attr_id = G_PRECEDENCE THEN
447         l_index := l_index + 1;
451 END Clear_Dependent_Attr;
448         l_src_attr_tbl(l_index) := QP_CURR_DETAILS_UTIL.G_PRECEDENCE;
449     END IF;
450 
452 
453 --  Procedure Apply_Attribute_Changes
454 
455 PROCEDURE Apply_Attribute_Changes
456 (   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
457 ,   p_old_CURR_DETAILS_rec          IN  QP_Currency_PUB.Curr_Details_Rec_Type :=
458                                         QP_Currency_PUB.G_MISS_CURR_DETAILS_REC
459 ,   x_CURR_DETAILS_rec              OUT NOCOPY /* file.sql.39 change */ QP_Currency_PUB.Curr_Details_Rec_Type
460 )
461 IS
462   l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
463 BEGIN
464 
465     --  Load out NOCOPY record
466 
467     x_CURR_DETAILS_rec := p_CURR_DETAILS_rec;
468 
469     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute1,p_old_CURR_DETAILS_rec.attribute1)
470     THEN
471         NULL;
472     END IF;
473 
474     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute10,p_old_CURR_DETAILS_rec.attribute10)
475     THEN
476         NULL;
477     END IF;
478 
479     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute11,p_old_CURR_DETAILS_rec.attribute11)
480     THEN
481         NULL;
482     END IF;
483 
484     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute12,p_old_CURR_DETAILS_rec.attribute12)
485     THEN
486         NULL;
487     END IF;
488 
489     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute13,p_old_CURR_DETAILS_rec.attribute13)
490     THEN
491         NULL;
492     END IF;
493 
494     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute14,p_old_CURR_DETAILS_rec.attribute14)
495     THEN
496         NULL;
497     END IF;
498 
499     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute15,p_old_CURR_DETAILS_rec.attribute15)
500     THEN
501         NULL;
502     END IF;
503 
504     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute2,p_old_CURR_DETAILS_rec.attribute2)
505     THEN
506         NULL;
507     END IF;
508 
509     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute3,p_old_CURR_DETAILS_rec.attribute3)
510     THEN
511         NULL;
512     END IF;
513 
514     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute4,p_old_CURR_DETAILS_rec.attribute4)
515     THEN
516         NULL;
517     END IF;
518 
519     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute5,p_old_CURR_DETAILS_rec.attribute5)
520     THEN
521         NULL;
522     END IF;
523 
524     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute6,p_old_CURR_DETAILS_rec.attribute6)
525     THEN
526         NULL;
527     END IF;
528 
529     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute7,p_old_CURR_DETAILS_rec.attribute7)
530     THEN
531         NULL;
532     END IF;
533 
534     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute8,p_old_CURR_DETAILS_rec.attribute8)
535     THEN
536         NULL;
537     END IF;
538 
539     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute9,p_old_CURR_DETAILS_rec.attribute9)
540     THEN
541         NULL;
542     END IF;
543 
544     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.context,p_old_CURR_DETAILS_rec.context)
545     THEN
546         NULL;
547     END IF;
548 
549     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_date,p_old_CURR_DETAILS_rec.conversion_date)
550     THEN
551         NULL;
552     END IF;
553 
554     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_date_type,p_old_CURR_DETAILS_rec.conversion_date_type)
555     THEN
556         NULL;
557     END IF;
558 
559     /*
560     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_method,p_old_CURR_DETAILS_rec.conversion_method)
561     THEN
562         NULL;
563     END IF;
564     */
565 
566     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_type,p_old_CURR_DETAILS_rec.conversion_type)
567     THEN
568         NULL;
569     END IF;
570 
571     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.created_by,p_old_CURR_DETAILS_rec.created_by)
572     THEN
573         NULL;
574     END IF;
575 
576     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.creation_date,p_old_CURR_DETAILS_rec.creation_date)
577     THEN
578         NULL;
579     END IF;
580 
581     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.currency_detail_id,p_old_CURR_DETAILS_rec.currency_detail_id)
582     THEN
583         NULL;
584     END IF;
585 
586     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.currency_header_id,p_old_CURR_DETAILS_rec.currency_header_id)
587     THEN
588         NULL;
589     END IF;
590 
591     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.end_date_active,p_old_CURR_DETAILS_rec.end_date_active)
592     THEN
593         NULL;
594     END IF;
595 
596     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.fixed_value,p_old_CURR_DETAILS_rec.fixed_value)
597     THEN
598         NULL;
599     END IF;
600 
601     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.last_updated_by,p_old_CURR_DETAILS_rec.last_updated_by)
602     THEN
603         NULL;
604     END IF;
605 
606     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.last_update_date,p_old_CURR_DETAILS_rec.last_update_date)
607     THEN
611     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.last_update_login,p_old_CURR_DETAILS_rec.last_update_login)
608         NULL;
609     END IF;
610 
612     THEN
613         NULL;
614     END IF;
615 
616     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.markup_formula_id,p_old_CURR_DETAILS_rec.markup_formula_id)
617     THEN
618         NULL;
619     END IF;
620 
621     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.markup_operator,p_old_CURR_DETAILS_rec.markup_operator)
622     THEN
623         NULL;
624     END IF;
625 
626     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.markup_value,p_old_CURR_DETAILS_rec.markup_value)
627     THEN
628         NULL;
629     END IF;
630 
631     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.price_formula_id,p_old_CURR_DETAILS_rec.price_formula_id)
632     THEN
633         NULL;
634     END IF;
635 
636     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.program_application_id,p_old_CURR_DETAILS_rec.program_application_id)
637     THEN
638         NULL;
639     END IF;
640 
641     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.program_id,p_old_CURR_DETAILS_rec.program_id)
642     THEN
643         NULL;
644     END IF;
645 
646     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.program_update_date,p_old_CURR_DETAILS_rec.program_update_date)
647     THEN
648         NULL;
649     END IF;
650 
651     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.request_id,p_old_CURR_DETAILS_rec.request_id)
652     THEN
653         NULL;
654     END IF;
655 
656     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.rounding_factor,p_old_CURR_DETAILS_rec.rounding_factor)
657     THEN
658         NULL;
659     END IF;
660 
661     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.selling_rounding_factor,
662                             p_old_CURR_DETAILS_rec.selling_rounding_factor)
663     THEN
664          oe_debug_pub.add('Logging a request to validate unique selling rounding factor');
665 
666          qp_delayed_requests_PVT.log_request(
667                  p_entity_code => QP_GLOBALS.G_ENTITY_CURR_DETAILS,
668                  p_entity_id  => p_CURR_DETAILS_rec.currency_header_id,
669                  p_param1  => p_CURR_DETAILS_rec.to_currency_code,
670                  p_request_unique_key1 => p_CURR_DETAILS_rec.to_currency_code,
671                  p_requesting_entity_code=> QP_GLOBALS.G_ENTITY_CURR_DETAILS,
672                  p_requesting_entity_id => p_CURR_DETAILS_rec.currency_header_id,
673                  p_request_type =>QP_GLOBALS.G_VALIDATE_SELLING_ROUNDING,
674                  x_return_status => l_return_status);
675     END IF;
676 
677     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.start_date_active,p_old_CURR_DETAILS_rec.start_date_active)
678     THEN
679         NULL;
680     END IF;
681 
682     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.to_currency_code,p_old_CURR_DETAILS_rec.to_currency_code)
683     THEN
684         NULL;
685     END IF;
686 
687     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute_type,p_old_CURR_DETAILS_rec.curr_attribute_type)
688     THEN
689         NULL;
690     END IF;
691 
692     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute_context,p_old_CURR_DETAILS_rec.curr_attribute_context)
693     THEN
694         NULL;
695     END IF;
696 
697     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute,p_old_CURR_DETAILS_rec.curr_attribute)
698     THEN
699         NULL;
700     END IF;
701 
702     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute_value,p_old_CURR_DETAILS_rec.curr_attribute_value)
703     THEN
704         NULL;
705     END IF;
706 
707     IF NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.precedence,p_old_CURR_DETAILS_rec.precedence)
708     THEN
709         NULL;
710     END IF;
711 
712  /*
713     Changes for bug 7494395
714     Updating used_in_setup flag of attribute to 'Y' if it is 'N'.
715  */
716 
717         IF p_CURR_DETAILS_rec.curr_attribute IS NOT NULL AND
718   	   p_CURR_DETAILS_rec.curr_attribute_type IS NOT NULL AND
719 	   p_CURR_DETAILS_rec.curr_attribute_context IS NOT NULL
720         THEN
721 
722 		update qp_pte_segments d set used_in_setup='Y'
723 		where nvl(used_in_setup,'N')='N' and
724 		exists
725 		(select 'x'
726 		from qp_segments_b a,qp_prc_contexts_b b
727 		where a.segment_mapping_column = p_CURR_DETAILS_rec.curr_attribute
728 		and   a.segment_id             = d.segment_id
729 		and   a.prc_context_id         = b.prc_context_id
730 		and   b.prc_context_type       = p_CURR_DETAILS_rec.curr_attribute_type
731 		and   b.prc_context_code       = p_CURR_DETAILS_rec.curr_attribute_context);
732 
733 	END IF;
734 
735 END Apply_Attribute_Changes;
736 
737 --  Function Complete_Record
738 
739 FUNCTION Complete_Record
740 (   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
741 ,   p_old_CURR_DETAILS_rec          IN  QP_Currency_PUB.Curr_Details_Rec_Type
742 ) RETURN QP_Currency_PUB.Curr_Details_Rec_Type
743 IS
744 l_CURR_DETAILS_rec            QP_Currency_PUB.Curr_Details_Rec_Type := p_CURR_DETAILS_rec;
745 BEGIN
746 
747     IF l_CURR_DETAILS_rec.attribute1 = FND_API.G_MISS_CHAR THEN
751     IF l_CURR_DETAILS_rec.attribute10 = FND_API.G_MISS_CHAR THEN
748         l_CURR_DETAILS_rec.attribute1 := p_old_CURR_DETAILS_rec.attribute1;
749     END IF;
750 
752         l_CURR_DETAILS_rec.attribute10 := p_old_CURR_DETAILS_rec.attribute10;
753     END IF;
754 
755     IF l_CURR_DETAILS_rec.attribute11 = FND_API.G_MISS_CHAR THEN
756         l_CURR_DETAILS_rec.attribute11 := p_old_CURR_DETAILS_rec.attribute11;
757     END IF;
758 
759     IF l_CURR_DETAILS_rec.attribute12 = FND_API.G_MISS_CHAR THEN
760         l_CURR_DETAILS_rec.attribute12 := p_old_CURR_DETAILS_rec.attribute12;
761     END IF;
762 
763     IF l_CURR_DETAILS_rec.attribute13 = FND_API.G_MISS_CHAR THEN
764         l_CURR_DETAILS_rec.attribute13 := p_old_CURR_DETAILS_rec.attribute13;
765     END IF;
766 
767     IF l_CURR_DETAILS_rec.attribute14 = FND_API.G_MISS_CHAR THEN
768         l_CURR_DETAILS_rec.attribute14 := p_old_CURR_DETAILS_rec.attribute14;
769     END IF;
770 
771     IF l_CURR_DETAILS_rec.attribute15 = FND_API.G_MISS_CHAR THEN
772         l_CURR_DETAILS_rec.attribute15 := p_old_CURR_DETAILS_rec.attribute15;
773     END IF;
774 
775     IF l_CURR_DETAILS_rec.attribute2 = FND_API.G_MISS_CHAR THEN
776         l_CURR_DETAILS_rec.attribute2 := p_old_CURR_DETAILS_rec.attribute2;
777     END IF;
778 
779     IF l_CURR_DETAILS_rec.attribute3 = FND_API.G_MISS_CHAR THEN
780         l_CURR_DETAILS_rec.attribute3 := p_old_CURR_DETAILS_rec.attribute3;
781     END IF;
782 
783     IF l_CURR_DETAILS_rec.attribute4 = FND_API.G_MISS_CHAR THEN
784         l_CURR_DETAILS_rec.attribute4 := p_old_CURR_DETAILS_rec.attribute4;
785     END IF;
786 
787     IF l_CURR_DETAILS_rec.attribute5 = FND_API.G_MISS_CHAR THEN
788         l_CURR_DETAILS_rec.attribute5 := p_old_CURR_DETAILS_rec.attribute5;
789     END IF;
790 
791     IF l_CURR_DETAILS_rec.attribute6 = FND_API.G_MISS_CHAR THEN
792         l_CURR_DETAILS_rec.attribute6 := p_old_CURR_DETAILS_rec.attribute6;
793     END IF;
794 
795     IF l_CURR_DETAILS_rec.attribute7 = FND_API.G_MISS_CHAR THEN
796         l_CURR_DETAILS_rec.attribute7 := p_old_CURR_DETAILS_rec.attribute7;
797     END IF;
798 
799     IF l_CURR_DETAILS_rec.attribute8 = FND_API.G_MISS_CHAR THEN
800         l_CURR_DETAILS_rec.attribute8 := p_old_CURR_DETAILS_rec.attribute8;
801     END IF;
802 
803     IF l_CURR_DETAILS_rec.attribute9 = FND_API.G_MISS_CHAR THEN
804         l_CURR_DETAILS_rec.attribute9 := p_old_CURR_DETAILS_rec.attribute9;
805     END IF;
806 
807     IF l_CURR_DETAILS_rec.context = FND_API.G_MISS_CHAR THEN
808         l_CURR_DETAILS_rec.context := p_old_CURR_DETAILS_rec.context;
809     END IF;
810 
811     IF l_CURR_DETAILS_rec.conversion_date = FND_API.G_MISS_DATE THEN
812         l_CURR_DETAILS_rec.conversion_date := p_old_CURR_DETAILS_rec.conversion_date;
813     END IF;
814 
815     IF l_CURR_DETAILS_rec.conversion_date_type = FND_API.G_MISS_CHAR THEN
816         l_CURR_DETAILS_rec.conversion_date_type := p_old_CURR_DETAILS_rec.conversion_date_type;
817     END IF;
818 
819     /*
820     IF l_CURR_DETAILS_rec.conversion_method = FND_API.G_MISS_CHAR THEN
821         l_CURR_DETAILS_rec.conversion_method := p_old_CURR_DETAILS_rec.conversion_method;
822     END IF;
823     */
824 
825     IF l_CURR_DETAILS_rec.conversion_type = FND_API.G_MISS_CHAR THEN
826         l_CURR_DETAILS_rec.conversion_type := p_old_CURR_DETAILS_rec.conversion_type;
827     END IF;
828 
829     IF l_CURR_DETAILS_rec.created_by = FND_API.G_MISS_NUM THEN
830         l_CURR_DETAILS_rec.created_by := p_old_CURR_DETAILS_rec.created_by;
831     END IF;
832 
833     IF l_CURR_DETAILS_rec.creation_date = FND_API.G_MISS_DATE THEN
834         l_CURR_DETAILS_rec.creation_date := p_old_CURR_DETAILS_rec.creation_date;
835     END IF;
836 
837     IF l_CURR_DETAILS_rec.currency_detail_id = FND_API.G_MISS_NUM THEN
838         l_CURR_DETAILS_rec.currency_detail_id := p_old_CURR_DETAILS_rec.currency_detail_id;
839     END IF;
840 
841     IF l_CURR_DETAILS_rec.currency_header_id = FND_API.G_MISS_NUM THEN
842         l_CURR_DETAILS_rec.currency_header_id := p_old_CURR_DETAILS_rec.currency_header_id;
843     END IF;
844 
845     IF l_CURR_DETAILS_rec.end_date_active = FND_API.G_MISS_DATE THEN
846         l_CURR_DETAILS_rec.end_date_active := p_old_CURR_DETAILS_rec.end_date_active;
847     END IF;
848 
849     IF l_CURR_DETAILS_rec.fixed_value = FND_API.G_MISS_NUM THEN
850         l_CURR_DETAILS_rec.fixed_value := p_old_CURR_DETAILS_rec.fixed_value;
851     END IF;
852 
853     IF l_CURR_DETAILS_rec.last_updated_by = FND_API.G_MISS_NUM THEN
854         l_CURR_DETAILS_rec.last_updated_by := p_old_CURR_DETAILS_rec.last_updated_by;
855     END IF;
856 
857     IF l_CURR_DETAILS_rec.last_update_date = FND_API.G_MISS_DATE THEN
858         l_CURR_DETAILS_rec.last_update_date := p_old_CURR_DETAILS_rec.last_update_date;
859     END IF;
860 
861     IF l_CURR_DETAILS_rec.last_update_login = FND_API.G_MISS_NUM THEN
862         l_CURR_DETAILS_rec.last_update_login := p_old_CURR_DETAILS_rec.last_update_login;
863     END IF;
864 
865     IF l_CURR_DETAILS_rec.markup_formula_id = FND_API.G_MISS_NUM THEN
866         l_CURR_DETAILS_rec.markup_formula_id := p_old_CURR_DETAILS_rec.markup_formula_id;
867     END IF;
868 
869     IF l_CURR_DETAILS_rec.markup_operator = FND_API.G_MISS_CHAR THEN
873     IF l_CURR_DETAILS_rec.markup_value = FND_API.G_MISS_NUM THEN
870         l_CURR_DETAILS_rec.markup_operator := p_old_CURR_DETAILS_rec.markup_operator;
871     END IF;
872 
874         l_CURR_DETAILS_rec.markup_value := p_old_CURR_DETAILS_rec.markup_value;
875     END IF;
876 
877     IF l_CURR_DETAILS_rec.price_formula_id = FND_API.G_MISS_NUM THEN
878         l_CURR_DETAILS_rec.price_formula_id := p_old_CURR_DETAILS_rec.price_formula_id;
879     END IF;
880 
881     IF l_CURR_DETAILS_rec.program_application_id = FND_API.G_MISS_NUM THEN
882         l_CURR_DETAILS_rec.program_application_id := p_old_CURR_DETAILS_rec.program_application_id;
883     END IF;
884 
885     IF l_CURR_DETAILS_rec.program_id = FND_API.G_MISS_NUM THEN
886         l_CURR_DETAILS_rec.program_id := p_old_CURR_DETAILS_rec.program_id;
887     END IF;
888 
889     IF l_CURR_DETAILS_rec.program_update_date = FND_API.G_MISS_DATE THEN
890         l_CURR_DETAILS_rec.program_update_date := p_old_CURR_DETAILS_rec.program_update_date;
891     END IF;
892 
893     IF l_CURR_DETAILS_rec.request_id = FND_API.G_MISS_NUM THEN
894         l_CURR_DETAILS_rec.request_id := p_old_CURR_DETAILS_rec.request_id;
895     END IF;
896 
897     IF l_CURR_DETAILS_rec.rounding_factor = FND_API.G_MISS_NUM THEN
898         l_CURR_DETAILS_rec.rounding_factor := p_old_CURR_DETAILS_rec.rounding_factor;
899     END IF;
900 
901     IF l_CURR_DETAILS_rec.selling_rounding_factor = FND_API.G_MISS_NUM THEN
902         l_CURR_DETAILS_rec.selling_rounding_factor := p_old_CURR_DETAILS_rec.selling_rounding_factor;
903     END IF;
904 
905     IF l_CURR_DETAILS_rec.start_date_active = FND_API.G_MISS_DATE THEN
906         l_CURR_DETAILS_rec.start_date_active := p_old_CURR_DETAILS_rec.start_date_active;
907     END IF;
908 
909     IF l_CURR_DETAILS_rec.to_currency_code = FND_API.G_MISS_CHAR THEN
910         l_CURR_DETAILS_rec.to_currency_code := p_old_CURR_DETAILS_rec.to_currency_code;
911     END IF;
912 
913     IF l_CURR_DETAILS_rec.curr_attribute_type = FND_API.G_MISS_CHAR THEN
914         l_CURR_DETAILS_rec.curr_attribute_type := p_old_CURR_DETAILS_rec.curr_attribute_type;
915     END IF;
916 
917     IF l_CURR_DETAILS_rec.curr_attribute_context = FND_API.G_MISS_CHAR THEN
918         l_CURR_DETAILS_rec.curr_attribute_context := p_old_CURR_DETAILS_rec.curr_attribute_context;
919     END IF;
920 
921     IF l_CURR_DETAILS_rec.curr_attribute = FND_API.G_MISS_CHAR THEN
922         l_CURR_DETAILS_rec.curr_attribute := p_old_CURR_DETAILS_rec.curr_attribute;
923     END IF;
924 
925     IF l_CURR_DETAILS_rec.curr_attribute_value = FND_API.G_MISS_CHAR THEN
926         l_CURR_DETAILS_rec.curr_attribute_value := p_old_CURR_DETAILS_rec.curr_attribute_value;
927     END IF;
928 
929     IF l_CURR_DETAILS_rec.precedence = FND_API.G_MISS_NUM THEN
930         l_CURR_DETAILS_rec.precedence := p_old_CURR_DETAILS_rec.precedence;
931     END IF;
932 
933     RETURN l_CURR_DETAILS_rec;
934 
935 END Complete_Record;
936 
937 --  Function Convert_Miss_To_Null
938 
939 FUNCTION Convert_Miss_To_Null
940 (   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
941 ) RETURN QP_Currency_PUB.Curr_Details_Rec_Type
942 IS
943 l_CURR_DETAILS_rec            QP_Currency_PUB.Curr_Details_Rec_Type := p_CURR_DETAILS_rec;
944 BEGIN
945 
946     IF l_CURR_DETAILS_rec.attribute1 = FND_API.G_MISS_CHAR THEN
947         l_CURR_DETAILS_rec.attribute1 := NULL;
948     END IF;
949 
950     IF l_CURR_DETAILS_rec.attribute10 = FND_API.G_MISS_CHAR THEN
951         l_CURR_DETAILS_rec.attribute10 := NULL;
952     END IF;
953 
954     IF l_CURR_DETAILS_rec.attribute11 = FND_API.G_MISS_CHAR THEN
955         l_CURR_DETAILS_rec.attribute11 := NULL;
956     END IF;
957 
958     IF l_CURR_DETAILS_rec.attribute12 = FND_API.G_MISS_CHAR THEN
959         l_CURR_DETAILS_rec.attribute12 := NULL;
960     END IF;
961 
962     IF l_CURR_DETAILS_rec.attribute13 = FND_API.G_MISS_CHAR THEN
963         l_CURR_DETAILS_rec.attribute13 := NULL;
964     END IF;
965 
966     IF l_CURR_DETAILS_rec.attribute14 = FND_API.G_MISS_CHAR THEN
967         l_CURR_DETAILS_rec.attribute14 := NULL;
968     END IF;
969 
970     IF l_CURR_DETAILS_rec.attribute15 = FND_API.G_MISS_CHAR THEN
971         l_CURR_DETAILS_rec.attribute15 := NULL;
972     END IF;
973 
974     IF l_CURR_DETAILS_rec.attribute2 = FND_API.G_MISS_CHAR THEN
975         l_CURR_DETAILS_rec.attribute2 := NULL;
976     END IF;
977 
978     IF l_CURR_DETAILS_rec.attribute3 = FND_API.G_MISS_CHAR THEN
979         l_CURR_DETAILS_rec.attribute3 := NULL;
980     END IF;
981 
982     IF l_CURR_DETAILS_rec.attribute4 = FND_API.G_MISS_CHAR THEN
983         l_CURR_DETAILS_rec.attribute4 := NULL;
984     END IF;
985 
986     IF l_CURR_DETAILS_rec.attribute5 = FND_API.G_MISS_CHAR THEN
987         l_CURR_DETAILS_rec.attribute5 := NULL;
988     END IF;
989 
990     IF l_CURR_DETAILS_rec.attribute6 = FND_API.G_MISS_CHAR THEN
991         l_CURR_DETAILS_rec.attribute6 := NULL;
992     END IF;
993 
994     IF l_CURR_DETAILS_rec.attribute7 = FND_API.G_MISS_CHAR THEN
995         l_CURR_DETAILS_rec.attribute7 := NULL;
996     END IF;
997 
998     IF l_CURR_DETAILS_rec.attribute8 = FND_API.G_MISS_CHAR THEN
999         l_CURR_DETAILS_rec.attribute8 := NULL;
1000     END IF;
1001 
1005 
1002     IF l_CURR_DETAILS_rec.attribute9 = FND_API.G_MISS_CHAR THEN
1003         l_CURR_DETAILS_rec.attribute9 := NULL;
1004     END IF;
1006     IF l_CURR_DETAILS_rec.context = FND_API.G_MISS_CHAR THEN
1007         l_CURR_DETAILS_rec.context := NULL;
1008     END IF;
1009 
1010     IF l_CURR_DETAILS_rec.conversion_date = FND_API.G_MISS_DATE THEN
1011         l_CURR_DETAILS_rec.conversion_date := NULL;
1012     END IF;
1013 
1014     IF l_CURR_DETAILS_rec.conversion_date_type = FND_API.G_MISS_CHAR THEN
1015         l_CURR_DETAILS_rec.conversion_date_type := NULL;
1016     END IF;
1017 
1018     /*
1019     IF l_CURR_DETAILS_rec.conversion_method = FND_API.G_MISS_CHAR THEN
1020         l_CURR_DETAILS_rec.conversion_method := NULL;
1021     END IF;
1022     */
1023 
1024     IF l_CURR_DETAILS_rec.conversion_type = FND_API.G_MISS_CHAR THEN
1025         l_CURR_DETAILS_rec.conversion_type := NULL;
1026     END IF;
1027 
1028     IF l_CURR_DETAILS_rec.created_by = FND_API.G_MISS_NUM THEN
1029         l_CURR_DETAILS_rec.created_by := NULL;
1030     END IF;
1031 
1032     IF l_CURR_DETAILS_rec.creation_date = FND_API.G_MISS_DATE THEN
1033         l_CURR_DETAILS_rec.creation_date := NULL;
1034     END IF;
1035 
1036     IF l_CURR_DETAILS_rec.currency_detail_id = FND_API.G_MISS_NUM THEN
1037         l_CURR_DETAILS_rec.currency_detail_id := NULL;
1038     END IF;
1039 
1040     IF l_CURR_DETAILS_rec.currency_header_id = FND_API.G_MISS_NUM THEN
1041         l_CURR_DETAILS_rec.currency_header_id := NULL;
1042     END IF;
1043 
1044     IF l_CURR_DETAILS_rec.end_date_active = FND_API.G_MISS_DATE THEN
1045         l_CURR_DETAILS_rec.end_date_active := NULL;
1046     END IF;
1047 
1048     IF l_CURR_DETAILS_rec.fixed_value = FND_API.G_MISS_NUM THEN
1049         l_CURR_DETAILS_rec.fixed_value := NULL;
1050     END IF;
1051 
1052     IF l_CURR_DETAILS_rec.last_updated_by = FND_API.G_MISS_NUM THEN
1053         l_CURR_DETAILS_rec.last_updated_by := NULL;
1054     END IF;
1055 
1056     IF l_CURR_DETAILS_rec.last_update_date = FND_API.G_MISS_DATE THEN
1057         l_CURR_DETAILS_rec.last_update_date := NULL;
1058     END IF;
1059 
1060     IF l_CURR_DETAILS_rec.last_update_login = FND_API.G_MISS_NUM THEN
1061         l_CURR_DETAILS_rec.last_update_login := NULL;
1062     END IF;
1063 
1064     IF l_CURR_DETAILS_rec.markup_formula_id = FND_API.G_MISS_NUM THEN
1065         l_CURR_DETAILS_rec.markup_formula_id := NULL;
1066     END IF;
1067 
1068     IF l_CURR_DETAILS_rec.markup_operator = FND_API.G_MISS_CHAR THEN
1069         l_CURR_DETAILS_rec.markup_operator := NULL;
1070     END IF;
1071 
1072     IF l_CURR_DETAILS_rec.markup_value = FND_API.G_MISS_NUM THEN
1073         l_CURR_DETAILS_rec.markup_value := NULL;
1074     END IF;
1075 
1076     IF l_CURR_DETAILS_rec.price_formula_id = FND_API.G_MISS_NUM THEN
1077         l_CURR_DETAILS_rec.price_formula_id := NULL;
1078     END IF;
1079 
1080     IF l_CURR_DETAILS_rec.program_application_id = FND_API.G_MISS_NUM THEN
1081         l_CURR_DETAILS_rec.program_application_id := NULL;
1082     END IF;
1083 
1084     IF l_CURR_DETAILS_rec.program_id = FND_API.G_MISS_NUM THEN
1085         l_CURR_DETAILS_rec.program_id := NULL;
1086     END IF;
1087 
1088     IF l_CURR_DETAILS_rec.program_update_date = FND_API.G_MISS_DATE THEN
1089         l_CURR_DETAILS_rec.program_update_date := NULL;
1090     END IF;
1091 
1092     IF l_CURR_DETAILS_rec.request_id = FND_API.G_MISS_NUM THEN
1093         l_CURR_DETAILS_rec.request_id := NULL;
1094     END IF;
1095 
1096     IF l_CURR_DETAILS_rec.rounding_factor = FND_API.G_MISS_NUM THEN
1097         l_CURR_DETAILS_rec.rounding_factor := NULL;
1098     END IF;
1099 
1100     IF l_CURR_DETAILS_rec.selling_rounding_factor = FND_API.G_MISS_NUM THEN
1101         l_CURR_DETAILS_rec.selling_rounding_factor := NULL;
1102     END IF;
1103 
1104     IF l_CURR_DETAILS_rec.start_date_active = FND_API.G_MISS_DATE THEN
1105         l_CURR_DETAILS_rec.start_date_active := NULL;
1106     END IF;
1107 
1108     IF l_CURR_DETAILS_rec.to_currency_code = FND_API.G_MISS_CHAR THEN
1109         l_CURR_DETAILS_rec.to_currency_code := NULL;
1110     END IF;
1111 
1112     IF l_CURR_DETAILS_rec.curr_attribute_type = FND_API.G_MISS_CHAR THEN
1113         l_CURR_DETAILS_rec.curr_attribute_type := NULL;
1114     END IF;
1115 
1116     IF l_CURR_DETAILS_rec.curr_attribute_context = FND_API.G_MISS_CHAR THEN
1117         l_CURR_DETAILS_rec.curr_attribute_context := NULL;
1118     END IF;
1119 
1120     IF l_CURR_DETAILS_rec.curr_attribute = FND_API.G_MISS_CHAR THEN
1121         l_CURR_DETAILS_rec.curr_attribute := NULL;
1122     END IF;
1123 
1124     IF l_CURR_DETAILS_rec.curr_attribute_value = FND_API.G_MISS_CHAR THEN
1125         l_CURR_DETAILS_rec.curr_attribute_value := NULL;
1126     END IF;
1127 
1128     IF l_CURR_DETAILS_rec.precedence = FND_API.G_MISS_NUM THEN
1129         l_CURR_DETAILS_rec.precedence := NULL;
1130     END IF;
1131 
1132     RETURN l_CURR_DETAILS_rec;
1133 
1134 END Convert_Miss_To_Null;
1135 
1136 --  Procedure Update_Row
1137 
1138 PROCEDURE Update_Row
1139 (   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
1140 )
1141 IS
1142 BEGIN
1143 
1144     UPDATE  QP_CURRENCY_DETAILS
1148     ,       ATTRIBUTE12                    = p_CURR_DETAILS_rec.attribute12
1145     SET     ATTRIBUTE1                     = p_CURR_DETAILS_rec.attribute1
1146     ,       ATTRIBUTE10                    = p_CURR_DETAILS_rec.attribute10
1147     ,       ATTRIBUTE11                    = p_CURR_DETAILS_rec.attribute11
1149     ,       ATTRIBUTE13                    = p_CURR_DETAILS_rec.attribute13
1150     ,       ATTRIBUTE14                    = p_CURR_DETAILS_rec.attribute14
1151     ,       ATTRIBUTE15                    = p_CURR_DETAILS_rec.attribute15
1152     ,       ATTRIBUTE2                     = p_CURR_DETAILS_rec.attribute2
1153     ,       ATTRIBUTE3                     = p_CURR_DETAILS_rec.attribute3
1154     ,       ATTRIBUTE4                     = p_CURR_DETAILS_rec.attribute4
1155     ,       ATTRIBUTE5                     = p_CURR_DETAILS_rec.attribute5
1156     ,       ATTRIBUTE6                     = p_CURR_DETAILS_rec.attribute6
1157     ,       ATTRIBUTE7                     = p_CURR_DETAILS_rec.attribute7
1158     ,       ATTRIBUTE8                     = p_CURR_DETAILS_rec.attribute8
1159     ,       ATTRIBUTE9                     = p_CURR_DETAILS_rec.attribute9
1160     ,       CONTEXT                        = p_CURR_DETAILS_rec.context
1161     ,       CONVERSION_DATE                = p_CURR_DETAILS_rec.conversion_date
1162     ,       CONVERSION_DATE_TYPE           = p_CURR_DETAILS_rec.conversion_date_type
1163     -- ,       CONVERSION_METHOD              = p_CURR_DETAILS_rec.conversion_method
1164     ,       CONVERSION_TYPE                = p_CURR_DETAILS_rec.conversion_type
1165     ,       CREATED_BY                     = p_CURR_DETAILS_rec.created_by
1166     ,       CREATION_DATE                  = p_CURR_DETAILS_rec.creation_date
1167     ,       CURRENCY_DETAIL_ID             = p_CURR_DETAILS_rec.currency_detail_id
1168     ,       CURRENCY_HEADER_ID             = p_CURR_DETAILS_rec.currency_header_id
1169     ,       END_DATE_ACTIVE                = p_CURR_DETAILS_rec.end_date_active
1170     ,       FIXED_VALUE                    = p_CURR_DETAILS_rec.fixed_value
1171     ,       LAST_UPDATED_BY                = p_CURR_DETAILS_rec.last_updated_by
1172     ,       LAST_UPDATE_DATE               = p_CURR_DETAILS_rec.last_update_date
1173     ,       LAST_UPDATE_LOGIN              = p_CURR_DETAILS_rec.last_update_login
1174     ,       MARKUP_FORMULA_ID              = p_CURR_DETAILS_rec.markup_formula_id
1175     ,       MARKUP_OPERATOR                = p_CURR_DETAILS_rec.markup_operator
1176     ,       MARKUP_VALUE                   = p_CURR_DETAILS_rec.markup_value
1177     ,       PRICE_FORMULA_ID               = p_CURR_DETAILS_rec.price_formula_id
1178     ,       PROGRAM_APPLICATION_ID         = p_CURR_DETAILS_rec.program_application_id
1179     ,       PROGRAM_ID                     = p_CURR_DETAILS_rec.program_id
1180     ,       PROGRAM_UPDATE_DATE            = p_CURR_DETAILS_rec.program_update_date
1181     ,       REQUEST_ID                     = p_CURR_DETAILS_rec.request_id
1182     ,       ROUNDING_FACTOR                = p_CURR_DETAILS_rec.rounding_factor
1183     ,       SELLING_ROUNDING_FACTOR        = p_CURR_DETAILS_rec.selling_rounding_factor
1184     ,       START_DATE_ACTIVE              = p_CURR_DETAILS_rec.start_date_active
1185     ,       TO_CURRENCY_CODE               = p_CURR_DETAILS_rec.to_currency_code
1186     ,       CURR_ATTRIBUTE_TYPE            = p_CURR_DETAILS_rec.curr_attribute_type
1187     ,       CURR_ATTRIBUTE_CONTEXT         = p_CURR_DETAILS_rec.curr_attribute_context
1188     ,       CURR_ATTRIBUTE                 = p_CURR_DETAILS_rec.curr_attribute
1189     ,       CURR_ATTRIBUTE_VALUE           = p_CURR_DETAILS_rec.curr_attribute_value
1190     ,       PRECEDENCE                     = p_CURR_DETAILS_rec.precedence
1191     WHERE   CURRENCY_DETAIL_ID = p_CURR_DETAILS_rec.currency_detail_id
1192     ;
1193 
1194 EXCEPTION
1195 
1196     WHEN OTHERS THEN
1197 
1198         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1199         THEN
1200             OE_MSG_PUB.Add_Exc_Msg
1201             (   G_PKG_NAME
1202             ,   'Update_Row'
1203             );
1204         END IF;
1205 
1206         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1207 
1208 END Update_Row;
1209 
1210 --  Procedure Insert_Row
1211 
1212 PROCEDURE Insert_Row
1213 (   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
1214 )
1215 IS
1216 BEGIN
1217 
1218     INSERT  INTO QP_CURRENCY_DETAILS
1219     (       ATTRIBUTE1
1220     ,       ATTRIBUTE10
1221     ,       ATTRIBUTE11
1222     ,       ATTRIBUTE12
1223     ,       ATTRIBUTE13
1224     ,       ATTRIBUTE14
1225     ,       ATTRIBUTE15
1226     ,       ATTRIBUTE2
1227     ,       ATTRIBUTE3
1228     ,       ATTRIBUTE4
1229     ,       ATTRIBUTE5
1230     ,       ATTRIBUTE6
1231     ,       ATTRIBUTE7
1232     ,       ATTRIBUTE8
1233     ,       ATTRIBUTE9
1234     ,       CONTEXT
1235     ,       CONVERSION_DATE
1236     ,       CONVERSION_DATE_TYPE
1237     -- ,       CONVERSION_METHOD
1238     ,       CONVERSION_TYPE
1239     ,       CREATED_BY
1240     ,       CREATION_DATE
1241     ,       CURRENCY_DETAIL_ID
1242     ,       CURRENCY_HEADER_ID
1243     ,       END_DATE_ACTIVE
1244     ,       FIXED_VALUE
1245     ,       LAST_UPDATED_BY
1246     ,       LAST_UPDATE_DATE
1247     ,       LAST_UPDATE_LOGIN
1248     ,       MARKUP_FORMULA_ID
1249     ,       MARKUP_OPERATOR
1250     ,       MARKUP_VALUE
1251     ,       PRICE_FORMULA_ID
1252     ,       PROGRAM_APPLICATION_ID
1253     ,       PROGRAM_ID
1254     ,       PROGRAM_UPDATE_DATE
1258     ,       START_DATE_ACTIVE
1255     ,       REQUEST_ID
1256     ,       ROUNDING_FACTOR
1257     ,       SELLING_ROUNDING_FACTOR
1259     ,       TO_CURRENCY_CODE
1260     ,       CURR_ATTRIBUTE_TYPE
1261     ,       CURR_ATTRIBUTE_CONTEXT
1262     ,       CURR_ATTRIBUTE
1263     ,       CURR_ATTRIBUTE_VALUE
1264     ,       PRECEDENCE
1265     )
1266     VALUES
1267     (       p_CURR_DETAILS_rec.attribute1
1268     ,       p_CURR_DETAILS_rec.attribute10
1269     ,       p_CURR_DETAILS_rec.attribute11
1270     ,       p_CURR_DETAILS_rec.attribute12
1271     ,       p_CURR_DETAILS_rec.attribute13
1272     ,       p_CURR_DETAILS_rec.attribute14
1273     ,       p_CURR_DETAILS_rec.attribute15
1274     ,       p_CURR_DETAILS_rec.attribute2
1275     ,       p_CURR_DETAILS_rec.attribute3
1276     ,       p_CURR_DETAILS_rec.attribute4
1277     ,       p_CURR_DETAILS_rec.attribute5
1278     ,       p_CURR_DETAILS_rec.attribute6
1279     ,       p_CURR_DETAILS_rec.attribute7
1280     ,       p_CURR_DETAILS_rec.attribute8
1281     ,       p_CURR_DETAILS_rec.attribute9
1282     ,       p_CURR_DETAILS_rec.context
1283     ,       p_CURR_DETAILS_rec.conversion_date
1284     ,       p_CURR_DETAILS_rec.conversion_date_type
1285     -- ,       p_CURR_DETAILS_rec.conversion_method
1286     ,       p_CURR_DETAILS_rec.conversion_type
1287     ,       p_CURR_DETAILS_rec.created_by
1288     ,       p_CURR_DETAILS_rec.creation_date
1289     ,       p_CURR_DETAILS_rec.currency_detail_id
1290     ,       p_CURR_DETAILS_rec.currency_header_id
1291     ,       p_CURR_DETAILS_rec.end_date_active
1292     ,       p_CURR_DETAILS_rec.fixed_value
1293     ,       p_CURR_DETAILS_rec.last_updated_by
1294     ,       p_CURR_DETAILS_rec.last_update_date
1295     ,       p_CURR_DETAILS_rec.last_update_login
1296     ,       p_CURR_DETAILS_rec.markup_formula_id
1297     ,       p_CURR_DETAILS_rec.markup_operator
1298     ,       p_CURR_DETAILS_rec.markup_value
1299     ,       p_CURR_DETAILS_rec.price_formula_id
1300     ,       p_CURR_DETAILS_rec.program_application_id
1301     ,       p_CURR_DETAILS_rec.program_id
1302     ,       p_CURR_DETAILS_rec.program_update_date
1303     ,       p_CURR_DETAILS_rec.request_id
1304     ,       p_CURR_DETAILS_rec.rounding_factor
1305     ,       p_CURR_DETAILS_rec.selling_rounding_factor
1306     ,       p_CURR_DETAILS_rec.start_date_active
1307     ,       p_CURR_DETAILS_rec.to_currency_code
1308     ,       p_CURR_DETAILS_rec.curr_attribute_type
1309     ,       p_CURR_DETAILS_rec.curr_attribute_context
1310     ,       p_CURR_DETAILS_rec.curr_attribute
1311     ,       p_CURR_DETAILS_rec.curr_attribute_value
1312     ,       p_CURR_DETAILS_rec.precedence
1313     );
1314 
1315 EXCEPTION
1316 
1317     WHEN OTHERS THEN
1318 
1319         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1320         THEN
1321             OE_MSG_PUB.Add_Exc_Msg
1322             (   G_PKG_NAME
1323             ,   'Insert_Row'
1324             );
1325         END IF;
1326 
1327         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1328 
1329 END Insert_Row;
1330 
1331 --  Procedure Delete_Row
1332 
1333 PROCEDURE Delete_Row
1334 (   p_currency_detail_id            IN  NUMBER
1335 )
1336 IS
1337 BEGIN
1338 
1339     DELETE  FROM QP_CURRENCY_DETAILS
1340     WHERE   CURRENCY_DETAIL_ID = p_currency_detail_id
1341     ;
1342 
1343 EXCEPTION
1344 
1345     WHEN OTHERS THEN
1346 
1347         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1348         THEN
1349             OE_MSG_PUB.Add_Exc_Msg
1350             (   G_PKG_NAME
1351             ,   'Delete_Row'
1352             );
1353         END IF;
1354 
1355         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1356 
1357 END Delete_Row;
1358 
1359 --  Function Query_Row
1360 
1361 FUNCTION Query_Row
1362 (   p_currency_detail_id            IN  NUMBER
1363 ) RETURN QP_Currency_PUB.Curr_Details_Rec_Type
1364 IS
1365 BEGIN
1366 
1367     RETURN Query_Rows
1368         (   p_currency_detail_id          => p_currency_detail_id
1369         )(1);
1370 
1371 END Query_Row;
1372 
1373 --  Function Query_Rows
1374 
1375 --
1376 
1377 FUNCTION Query_Rows
1378 (   p_currency_detail_id            IN  NUMBER :=
1379                                         FND_API.G_MISS_NUM
1380 ,   p_currency_header_id            IN  NUMBER :=
1381                                         FND_API.G_MISS_NUM
1382 ) RETURN QP_Currency_PUB.Curr_Details_Tbl_Type
1383 IS
1384 l_CURR_DETAILS_rec            QP_Currency_PUB.Curr_Details_Rec_Type;
1385 l_CURR_DETAILS_tbl            QP_Currency_PUB.Curr_Details_Tbl_Type;
1386 
1387 CURSOR l_CURR_DETAILS_csr IS
1388     SELECT  ATTRIBUTE1
1389     ,       ATTRIBUTE10
1390     ,       ATTRIBUTE11
1391     ,       ATTRIBUTE12
1392     ,       ATTRIBUTE13
1393     ,       ATTRIBUTE14
1394     ,       ATTRIBUTE15
1395     ,       ATTRIBUTE2
1396     ,       ATTRIBUTE3
1397     ,       ATTRIBUTE4
1398     ,       ATTRIBUTE5
1399     ,       ATTRIBUTE6
1400     ,       ATTRIBUTE7
1401     ,       ATTRIBUTE8
1402     ,       ATTRIBUTE9
1403     ,       CONTEXT
1404     ,       CONVERSION_DATE
1405     ,       CONVERSION_DATE_TYPE
1409     ,       CREATION_DATE
1406     -- ,       CONVERSION_METHOD
1407     ,       CONVERSION_TYPE
1408     ,       CREATED_BY
1410     ,       CURRENCY_DETAIL_ID
1411     ,       CURRENCY_HEADER_ID
1412     ,       END_DATE_ACTIVE
1413     ,       FIXED_VALUE
1414     ,       LAST_UPDATED_BY
1415     ,       LAST_UPDATE_DATE
1416     ,       LAST_UPDATE_LOGIN
1417     ,       MARKUP_FORMULA_ID
1418     ,       MARKUP_OPERATOR
1419     ,       MARKUP_VALUE
1420     ,       PRICE_FORMULA_ID
1421     ,       PROGRAM_APPLICATION_ID
1422     ,       PROGRAM_ID
1423     ,       PROGRAM_UPDATE_DATE
1424     ,       REQUEST_ID
1425     ,       ROUNDING_FACTOR
1426     ,       SELLING_ROUNDING_FACTOR
1427     ,       START_DATE_ACTIVE
1428     ,       TO_CURRENCY_CODE
1429     ,       CURR_ATTRIBUTE_TYPE
1430     ,       CURR_ATTRIBUTE_CONTEXT
1431     ,       CURR_ATTRIBUTE
1432     ,       CURR_ATTRIBUTE_VALUE
1433     ,       PRECEDENCE
1434     FROM    QP_CURRENCY_DETAILS
1435     WHERE ( CURRENCY_DETAIL_ID = p_currency_detail_id
1436     )
1437     OR (    CURRENCY_HEADER_ID = p_currency_header_id
1438     );
1439 
1440 BEGIN
1441 
1442     IF
1443     (p_currency_detail_id IS NOT NULL
1444      AND
1445      p_currency_detail_id <> FND_API.G_MISS_NUM)
1446     AND
1447     (p_currency_header_id IS NOT NULL
1448      AND
1449      p_currency_header_id <> FND_API.G_MISS_NUM)
1450     THEN
1451             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1452             THEN
1453                 OE_MSG_PUB.Add_Exc_Msg
1454                 (   G_PKG_NAME
1455                 ,   'Query Rows'
1456                 ,   'Keys are mutually exclusive: currency_detail_id = '|| p_currency_detail_id || ', currency_header_id = '|| p_currency_header_id
1457                 );
1458             END IF;
1459 
1460         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1461 
1462     END IF;
1463 
1464 
1465     --  Loop over fetched records
1466 
1467     FOR l_implicit_rec IN l_CURR_DETAILS_csr LOOP
1468 
1469         l_CURR_DETAILS_rec.attribute1  := l_implicit_rec.ATTRIBUTE1;
1470         l_CURR_DETAILS_rec.attribute10 := l_implicit_rec.ATTRIBUTE10;
1471         l_CURR_DETAILS_rec.attribute11 := l_implicit_rec.ATTRIBUTE11;
1472         l_CURR_DETAILS_rec.attribute12 := l_implicit_rec.ATTRIBUTE12;
1473         l_CURR_DETAILS_rec.attribute13 := l_implicit_rec.ATTRIBUTE13;
1474         l_CURR_DETAILS_rec.attribute14 := l_implicit_rec.ATTRIBUTE14;
1475         l_CURR_DETAILS_rec.attribute15 := l_implicit_rec.ATTRIBUTE15;
1476         l_CURR_DETAILS_rec.attribute2  := l_implicit_rec.ATTRIBUTE2;
1477         l_CURR_DETAILS_rec.attribute3  := l_implicit_rec.ATTRIBUTE3;
1478         l_CURR_DETAILS_rec.attribute4  := l_implicit_rec.ATTRIBUTE4;
1479         l_CURR_DETAILS_rec.attribute5  := l_implicit_rec.ATTRIBUTE5;
1480         l_CURR_DETAILS_rec.attribute6  := l_implicit_rec.ATTRIBUTE6;
1481         l_CURR_DETAILS_rec.attribute7  := l_implicit_rec.ATTRIBUTE7;
1482         l_CURR_DETAILS_rec.attribute8  := l_implicit_rec.ATTRIBUTE8;
1483         l_CURR_DETAILS_rec.attribute9  := l_implicit_rec.ATTRIBUTE9;
1484         l_CURR_DETAILS_rec.context     := l_implicit_rec.CONTEXT;
1485         l_CURR_DETAILS_rec.conversion_date := l_implicit_rec.CONVERSION_DATE;
1486         l_CURR_DETAILS_rec.conversion_date_type := l_implicit_rec.CONVERSION_DATE_TYPE;
1487         -- l_CURR_DETAILS_rec.conversion_method := l_implicit_rec.CONVERSION_METHOD;
1488         l_CURR_DETAILS_rec.conversion_type := l_implicit_rec.CONVERSION_TYPE;
1489         l_CURR_DETAILS_rec.created_by  := l_implicit_rec.CREATED_BY;
1490         l_CURR_DETAILS_rec.creation_date := l_implicit_rec.CREATION_DATE;
1491         l_CURR_DETAILS_rec.currency_detail_id := l_implicit_rec.CURRENCY_DETAIL_ID;
1492         l_CURR_DETAILS_rec.currency_header_id := l_implicit_rec.CURRENCY_HEADER_ID;
1493         l_CURR_DETAILS_rec.end_date_active := l_implicit_rec.END_DATE_ACTIVE;
1494         l_CURR_DETAILS_rec.fixed_value := l_implicit_rec.FIXED_VALUE;
1495         l_CURR_DETAILS_rec.last_updated_by := l_implicit_rec.LAST_UPDATED_BY;
1496         l_CURR_DETAILS_rec.last_update_date := l_implicit_rec.LAST_UPDATE_DATE;
1497         l_CURR_DETAILS_rec.last_update_login := l_implicit_rec.LAST_UPDATE_LOGIN;
1498         l_CURR_DETAILS_rec.markup_formula_id := l_implicit_rec.MARKUP_FORMULA_ID;
1499         l_CURR_DETAILS_rec.markup_operator := l_implicit_rec.MARKUP_OPERATOR;
1500         l_CURR_DETAILS_rec.markup_value := l_implicit_rec.MARKUP_VALUE;
1501         l_CURR_DETAILS_rec.price_formula_id := l_implicit_rec.PRICE_FORMULA_ID;
1502         l_CURR_DETAILS_rec.program_application_id := l_implicit_rec.PROGRAM_APPLICATION_ID;
1503         l_CURR_DETAILS_rec.program_id  := l_implicit_rec.PROGRAM_ID;
1504         l_CURR_DETAILS_rec.program_update_date := l_implicit_rec.PROGRAM_UPDATE_DATE;
1505         l_CURR_DETAILS_rec.request_id  := l_implicit_rec.REQUEST_ID;
1506         l_CURR_DETAILS_rec.rounding_factor := l_implicit_rec.ROUNDING_FACTOR;
1507         l_CURR_DETAILS_rec.selling_rounding_factor := l_implicit_rec.SELLING_ROUNDING_FACTOR;
1508         l_CURR_DETAILS_rec.start_date_active := l_implicit_rec.START_DATE_ACTIVE;
1509         l_CURR_DETAILS_rec.to_currency_code := l_implicit_rec.TO_CURRENCY_CODE;
1510         l_CURR_DETAILS_rec.curr_attribute_type := l_implicit_rec.CURR_ATTRIBUTE_TYPE;
1511         l_CURR_DETAILS_rec.curr_attribute_context := l_implicit_rec.CURR_ATTRIBUTE_CONTEXT;
1515 
1512         l_CURR_DETAILS_rec.curr_attribute := l_implicit_rec.CURR_ATTRIBUTE;
1513         l_CURR_DETAILS_rec.curr_attribute_value := l_implicit_rec.CURR_ATTRIBUTE_VALUE;
1514         l_CURR_DETAILS_rec.precedence := l_implicit_rec.PRECEDENCE;
1516         l_CURR_DETAILS_tbl(l_CURR_DETAILS_tbl.COUNT + 1) := l_CURR_DETAILS_rec;
1517 
1518     END LOOP;
1519 
1520 
1521     --  PK sent and no rows found
1522 
1523     IF
1524     (p_currency_detail_id IS NOT NULL
1525      AND
1526      p_currency_detail_id <> FND_API.G_MISS_NUM)
1527     AND
1528     (l_CURR_DETAILS_tbl.COUNT = 0)
1529     THEN
1530         RAISE NO_DATA_FOUND;
1531     END IF;
1532 
1533 
1534     --  Return fetched table
1535 
1536     RETURN l_CURR_DETAILS_tbl;
1537 
1538 EXCEPTION
1539 
1540     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1541 
1542         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1543 
1544     WHEN OTHERS THEN
1545 
1546         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1547         THEN
1548             OE_MSG_PUB.Add_Exc_Msg
1549             (   G_PKG_NAME
1550             ,   'Query_Rows'
1551             );
1552         END IF;
1553 
1554         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1555 
1556 END Query_Rows;
1557 
1558 --  Procedure       lock_Row
1559 --
1560 
1561 PROCEDURE Lock_Row
1562 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1563 ,   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
1564 ,   x_CURR_DETAILS_rec              OUT NOCOPY /* file.sql.39 change */ QP_Currency_PUB.Curr_Details_Rec_Type
1565 )
1566 IS
1567 l_CURR_DETAILS_rec            QP_Currency_PUB.Curr_Details_Rec_Type;
1568 BEGIN
1569 
1570     SELECT  ATTRIBUTE1
1571     ,       ATTRIBUTE10
1572     ,       ATTRIBUTE11
1573     ,       ATTRIBUTE12
1574     ,       ATTRIBUTE13
1575     ,       ATTRIBUTE14
1576     ,       ATTRIBUTE15
1577     ,       ATTRIBUTE2
1578     ,       ATTRIBUTE3
1579     ,       ATTRIBUTE4
1580     ,       ATTRIBUTE5
1581     ,       ATTRIBUTE6
1582     ,       ATTRIBUTE7
1583     ,       ATTRIBUTE8
1584     ,       ATTRIBUTE9
1585     ,       CONTEXT
1586     ,       CONVERSION_DATE
1587     ,       CONVERSION_DATE_TYPE
1588     -- ,       CONVERSION_METHOD
1589     ,       CONVERSION_TYPE
1590     ,       CREATED_BY
1591     ,       CREATION_DATE
1592     ,       CURRENCY_DETAIL_ID
1593     ,       CURRENCY_HEADER_ID
1594     ,       END_DATE_ACTIVE
1595     ,       FIXED_VALUE
1596     ,       LAST_UPDATED_BY
1597     ,       LAST_UPDATE_DATE
1598     ,       LAST_UPDATE_LOGIN
1599     ,       MARKUP_FORMULA_ID
1600     ,       MARKUP_OPERATOR
1601     ,       MARKUP_VALUE
1602     ,       PRICE_FORMULA_ID
1603     ,       PROGRAM_APPLICATION_ID
1604     ,       PROGRAM_ID
1605     ,       PROGRAM_UPDATE_DATE
1606     ,       REQUEST_ID
1607     ,       ROUNDING_FACTOR
1608     ,       SELLING_ROUNDING_FACTOR
1609     ,       START_DATE_ACTIVE
1610     ,       TO_CURRENCY_CODE
1611     ,       CURR_ATTRIBUTE_TYPE
1612     ,       CURR_ATTRIBUTE_CONTEXT
1613     ,       CURR_ATTRIBUTE
1614     ,       CURR_ATTRIBUTE_VALUE
1615     ,       PRECEDENCE
1616     INTO    l_CURR_DETAILS_rec.attribute1
1617     ,       l_CURR_DETAILS_rec.attribute10
1618     ,       l_CURR_DETAILS_rec.attribute11
1619     ,       l_CURR_DETAILS_rec.attribute12
1620     ,       l_CURR_DETAILS_rec.attribute13
1621     ,       l_CURR_DETAILS_rec.attribute14
1622     ,       l_CURR_DETAILS_rec.attribute15
1623     ,       l_CURR_DETAILS_rec.attribute2
1624     ,       l_CURR_DETAILS_rec.attribute3
1625     ,       l_CURR_DETAILS_rec.attribute4
1626     ,       l_CURR_DETAILS_rec.attribute5
1627     ,       l_CURR_DETAILS_rec.attribute6
1628     ,       l_CURR_DETAILS_rec.attribute7
1629     ,       l_CURR_DETAILS_rec.attribute8
1630     ,       l_CURR_DETAILS_rec.attribute9
1631     ,       l_CURR_DETAILS_rec.context
1632     ,       l_CURR_DETAILS_rec.conversion_date
1633     ,       l_CURR_DETAILS_rec.conversion_date_type
1634     -- ,       l_CURR_DETAILS_rec.conversion_method
1635     ,       l_CURR_DETAILS_rec.conversion_type
1636     ,       l_CURR_DETAILS_rec.created_by
1637     ,       l_CURR_DETAILS_rec.creation_date
1638     ,       l_CURR_DETAILS_rec.currency_detail_id
1639     ,       l_CURR_DETAILS_rec.currency_header_id
1640     ,       l_CURR_DETAILS_rec.end_date_active
1641     ,       l_CURR_DETAILS_rec.fixed_value
1642     ,       l_CURR_DETAILS_rec.last_updated_by
1643     ,       l_CURR_DETAILS_rec.last_update_date
1644     ,       l_CURR_DETAILS_rec.last_update_login
1645     ,       l_CURR_DETAILS_rec.markup_formula_id
1646     ,       l_CURR_DETAILS_rec.markup_operator
1647     ,       l_CURR_DETAILS_rec.markup_value
1648     ,       l_CURR_DETAILS_rec.price_formula_id
1649     ,       l_CURR_DETAILS_rec.program_application_id
1650     ,       l_CURR_DETAILS_rec.program_id
1651     ,       l_CURR_DETAILS_rec.program_update_date
1652     ,       l_CURR_DETAILS_rec.request_id
1653     ,       l_CURR_DETAILS_rec.rounding_factor
1654     ,       l_CURR_DETAILS_rec.selling_rounding_factor
1655     ,       l_CURR_DETAILS_rec.start_date_active
1656     ,       l_CURR_DETAILS_rec.to_currency_code
1657     ,       l_CURR_DETAILS_rec.curr_attribute_type
1658     ,       l_CURR_DETAILS_rec.curr_attribute_context
1662     FROM    QP_CURRENCY_DETAILS
1659     ,       l_CURR_DETAILS_rec.curr_attribute
1660     ,       l_CURR_DETAILS_rec.curr_attribute_value
1661     ,       l_CURR_DETAILS_rec.precedence
1663     WHERE   CURRENCY_DETAIL_ID = p_CURR_DETAILS_rec.currency_detail_id
1664         FOR UPDATE NOWAIT;
1665 
1666     --  Row locked. Compare IN attributes to DB attributes.
1667 
1668     IF  QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute1,
1669                          l_CURR_DETAILS_rec.attribute1)
1670     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute10,
1671                          l_CURR_DETAILS_rec.attribute10)
1672     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute11,
1673                          l_CURR_DETAILS_rec.attribute11)
1674     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute12,
1675                          l_CURR_DETAILS_rec.attribute12)
1676     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute13,
1677                          l_CURR_DETAILS_rec.attribute13)
1678     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute14,
1679                          l_CURR_DETAILS_rec.attribute14)
1680     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute15,
1681                          l_CURR_DETAILS_rec.attribute15)
1682     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute2,
1683                          l_CURR_DETAILS_rec.attribute2)
1684     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute3,
1685                          l_CURR_DETAILS_rec.attribute3)
1686     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute4,
1687                          l_CURR_DETAILS_rec.attribute4)
1688     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute5,
1689                          l_CURR_DETAILS_rec.attribute5)
1690     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute6,
1691                          l_CURR_DETAILS_rec.attribute6)
1692     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute7,
1693                          l_CURR_DETAILS_rec.attribute7)
1694     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute8,
1695                          l_CURR_DETAILS_rec.attribute8)
1696     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.attribute9,
1697                          l_CURR_DETAILS_rec.attribute9)
1698     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.context,
1699                          l_CURR_DETAILS_rec.context)
1700     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_date,
1701                          l_CURR_DETAILS_rec.conversion_date)
1702     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_date_type,
1703                          l_CURR_DETAILS_rec.conversion_date_type)
1704     -- AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_method,
1705                          -- l_CURR_DETAILS_rec.conversion_method)
1706     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.conversion_type,
1707                          l_CURR_DETAILS_rec.conversion_type)
1708     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.created_by,
1709                          l_CURR_DETAILS_rec.created_by)
1710     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.creation_date,
1711                          l_CURR_DETAILS_rec.creation_date)
1712     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.currency_detail_id,
1713                          l_CURR_DETAILS_rec.currency_detail_id)
1714     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.currency_header_id,
1715                          l_CURR_DETAILS_rec.currency_header_id)
1716     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.end_date_active,
1717                          l_CURR_DETAILS_rec.end_date_active)
1718     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.fixed_value,
1719                          l_CURR_DETAILS_rec.fixed_value)
1720     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.last_updated_by,
1721                          l_CURR_DETAILS_rec.last_updated_by)
1722     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.last_update_date,
1723                          l_CURR_DETAILS_rec.last_update_date)
1724     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.last_update_login,
1725                          l_CURR_DETAILS_rec.last_update_login)
1726     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.markup_formula_id,
1727                          l_CURR_DETAILS_rec.markup_formula_id)
1728     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.markup_operator,
1729                          l_CURR_DETAILS_rec.markup_operator)
1730     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.markup_value,
1731                          l_CURR_DETAILS_rec.markup_value)
1732     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.price_formula_id,
1733                          l_CURR_DETAILS_rec.price_formula_id)
1734     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.program_application_id,
1735                          l_CURR_DETAILS_rec.program_application_id)
1736     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.program_id,
1737                          l_CURR_DETAILS_rec.program_id)
1738     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.program_update_date,
1739                          l_CURR_DETAILS_rec.program_update_date)
1740     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.request_id,
1741                          l_CURR_DETAILS_rec.request_id)
1742     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.rounding_factor,
1743                          l_CURR_DETAILS_rec.rounding_factor)
1744     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.selling_rounding_factor,
1745                          l_CURR_DETAILS_rec.selling_rounding_factor)
1746     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.start_date_active,
1747                          l_CURR_DETAILS_rec.start_date_active)
1748     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.to_currency_code,
1749                          l_CURR_DETAILS_rec.to_currency_code)
1750     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute_type,
1751                          l_CURR_DETAILS_rec.curr_attribute_type)
1755                          l_CURR_DETAILS_rec.curr_attribute)
1752     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute_context,
1753                          l_CURR_DETAILS_rec.curr_attribute_context)
1754     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute,
1756     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.curr_attribute_value,
1757                          l_CURR_DETAILS_rec.curr_attribute_value)
1758     AND QP_GLOBALS.Equal(p_CURR_DETAILS_rec.precedence,
1759                          l_CURR_DETAILS_rec.precedence)
1760     THEN
1761 
1762         --  Row has not changed. Set out parameter.
1763 
1764         x_CURR_DETAILS_rec             := l_CURR_DETAILS_rec;
1765 
1766         --  Set return status
1767 
1768         x_return_status                := FND_API.G_RET_STS_SUCCESS;
1769         x_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_SUCCESS;
1770 
1771     ELSE
1772 
1773         --  Row has changed by another user.
1774 
1775         x_return_status                := FND_API.G_RET_STS_ERROR;
1776         x_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_ERROR;
1777 
1778         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1779         THEN
1780 
1781             FND_MESSAGE.SET_NAME('QP','OE_LOCK_ROW_CHANGED');
1782             OE_MSG_PUB.Add;
1783 
1784         END IF;
1785 
1786     END IF;
1787 
1788 EXCEPTION
1789 
1790     WHEN NO_DATA_FOUND THEN
1791 
1792         x_return_status                := FND_API.G_RET_STS_ERROR;
1793         x_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_ERROR;
1794 
1795         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1796         THEN
1797 
1798             FND_MESSAGE.SET_NAME('QP','OE_LOCK_ROW_DELETED');
1799             OE_MSG_PUB.Add;
1800 
1801         END IF;
1802     WHEN APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION THEN
1803 
1804         x_return_status                := FND_API.G_RET_STS_ERROR;
1805         x_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_ERROR;
1806 
1807         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
1808         THEN
1809 
1810             FND_MESSAGE.SET_NAME('QP','OE_LOCK_ROW_ALREADY_LOCKED');
1811             OE_MSG_PUB.Add;
1812 
1813         END IF;
1814     WHEN OTHERS THEN
1815 
1816         x_return_status                := FND_API.G_RET_STS_UNEXP_ERROR;
1817         x_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1818 
1819         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1820         THEN
1821             OE_MSG_PUB.Add_Exc_Msg
1822             (   G_PKG_NAME
1823             ,   'Lock_Row'
1824             );
1825         END IF;
1826 
1827 END Lock_Row;
1828 
1829 --  Function Get_Values
1830 
1831 FUNCTION Get_Values
1832 (   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
1833 ,   p_old_CURR_DETAILS_rec          IN  QP_Currency_PUB.Curr_Details_Rec_Type :=
1834                                         QP_Currency_PUB.G_MISS_CURR_DETAILS_REC
1835 ) RETURN QP_Currency_PUB.Curr_Details_Val_Rec_Type
1836 IS
1837 l_CURR_DETAILS_val_rec        QP_Currency_PUB.Curr_Details_Val_Rec_Type;
1838 BEGIN
1839 
1840     IF p_CURR_DETAILS_rec.currency_detail_id IS NOT NULL AND
1841         p_CURR_DETAILS_rec.currency_detail_id <> FND_API.G_MISS_NUM AND
1842         NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.currency_detail_id,
1843         p_old_CURR_DETAILS_rec.currency_detail_id)
1844     THEN
1845         l_CURR_DETAILS_val_rec.currency_detail := QP_Id_To_Value.Currency_Detail
1846         (   p_currency_detail_id          => p_CURR_DETAILS_rec.currency_detail_id
1847         );
1848     END IF;
1849 
1850     IF p_CURR_DETAILS_rec.currency_header_id IS NOT NULL AND
1851         p_CURR_DETAILS_rec.currency_header_id <> FND_API.G_MISS_NUM AND
1852         NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.currency_header_id,
1853         p_old_CURR_DETAILS_rec.currency_header_id)
1854     THEN
1855         l_CURR_DETAILS_val_rec.currency_header := QP_Id_To_Value.Currency_Header
1856         (   p_currency_header_id          => p_CURR_DETAILS_rec.currency_header_id
1857         );
1858     END IF;
1859 
1860     IF p_CURR_DETAILS_rec.markup_formula_id IS NOT NULL AND
1861         p_CURR_DETAILS_rec.markup_formula_id <> FND_API.G_MISS_NUM AND
1862         NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.markup_formula_id,
1863         p_old_CURR_DETAILS_rec.markup_formula_id)
1864     THEN
1865         l_CURR_DETAILS_val_rec.markup_formula := QP_Id_To_Value.Markup_Formula
1866         (   p_markup_formula_id           => p_CURR_DETAILS_rec.markup_formula_id
1867         );
1868     END IF;
1869 
1870     IF p_CURR_DETAILS_rec.price_formula_id IS NOT NULL AND
1871         p_CURR_DETAILS_rec.price_formula_id <> FND_API.G_MISS_NUM AND
1872         NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.price_formula_id,
1873         p_old_CURR_DETAILS_rec.price_formula_id)
1874     THEN
1875         l_CURR_DETAILS_val_rec.price_formula := QP_Id_To_Value.Price_Formula
1876         (   p_price_formula_id            => p_CURR_DETAILS_rec.price_formula_id
1877         );
1878     END IF;
1879 
1880     IF p_CURR_DETAILS_rec.to_currency_code IS NOT NULL AND
1881         p_CURR_DETAILS_rec.to_currency_code <> FND_API.G_MISS_CHAR AND
1882         NOT QP_GLOBALS.Equal(p_CURR_DETAILS_rec.to_currency_code,
1883         p_old_CURR_DETAILS_rec.to_currency_code)
1884     THEN
1888     END IF;
1885         l_CURR_DETAILS_val_rec.to_currency := QP_Id_To_Value.To_Currency
1886         (   p_to_currency_code            => p_CURR_DETAILS_rec.to_currency_code
1887         );
1889 
1890     RETURN l_CURR_DETAILS_val_rec;
1891 
1892 END Get_Values;
1893 
1894 --  Function Get_Ids
1895 
1896 FUNCTION Get_Ids
1897 (   p_CURR_DETAILS_rec              IN  QP_Currency_PUB.Curr_Details_Rec_Type
1898 ,   p_CURR_DETAILS_val_rec          IN  QP_Currency_PUB.Curr_Details_Val_Rec_Type
1899 ) RETURN QP_Currency_PUB.Curr_Details_Rec_Type
1900 IS
1901 l_CURR_DETAILS_rec            QP_Currency_PUB.Curr_Details_Rec_Type;
1902 BEGIN
1903 
1904     --  initialize  return_status.
1905 
1906     l_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_SUCCESS;
1907 
1908     --  initialize l_CURR_DETAILS_rec.
1909 
1910     l_CURR_DETAILS_rec := p_CURR_DETAILS_rec;
1911 
1912     IF  p_CURR_DETAILS_val_rec.currency_detail <> FND_API.G_MISS_CHAR
1913     THEN
1914 
1915         IF p_CURR_DETAILS_rec.currency_detail_id <> FND_API.G_MISS_NUM THEN
1916 
1917             l_CURR_DETAILS_rec.currency_detail_id := p_CURR_DETAILS_rec.currency_detail_id;
1918 
1919             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_SUCCESS)
1920             THEN
1921 
1922                 FND_MESSAGE.SET_NAME('QP','FND_BOTH_VAL_AND_ID_EXIST');
1923                 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','currency_detail');
1924                 OE_MSG_PUB.Add;
1925 
1926             END IF;
1927 
1928         ELSE
1929 
1930             l_CURR_DETAILS_rec.currency_detail_id := QP_Value_To_Id.currency_detail
1931             (   p_currency_detail             => p_CURR_DETAILS_val_rec.currency_detail
1932             );
1933 
1934             IF l_CURR_DETAILS_rec.currency_detail_id = FND_API.G_MISS_NUM THEN
1935                 l_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_ERROR;
1936             END IF;
1937 
1938         END IF;
1939 
1940     END IF;
1941 
1942     IF  p_CURR_DETAILS_val_rec.currency_header <> FND_API.G_MISS_CHAR
1943     THEN
1944 
1945         IF p_CURR_DETAILS_rec.currency_header_id <> FND_API.G_MISS_NUM THEN
1946 
1947             l_CURR_DETAILS_rec.currency_header_id := p_CURR_DETAILS_rec.currency_header_id;
1948 
1949             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_SUCCESS)
1950             THEN
1951 
1952                 FND_MESSAGE.SET_NAME('QP','FND_BOTH_VAL_AND_ID_EXIST');
1953                 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','currency_header');
1954                 OE_MSG_PUB.Add;
1955 
1956             END IF;
1957 
1958         ELSE
1959 
1960             l_CURR_DETAILS_rec.currency_header_id := QP_Value_To_Id.currency_header
1961             (   p_currency_header             => p_CURR_DETAILS_val_rec.currency_header
1962             );
1963 
1964             IF l_CURR_DETAILS_rec.currency_header_id = FND_API.G_MISS_NUM THEN
1965                 l_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_ERROR;
1966             END IF;
1967 
1968         END IF;
1969 
1970     END IF;
1971 
1972     IF  p_CURR_DETAILS_val_rec.markup_formula <> FND_API.G_MISS_CHAR
1973     THEN
1974 
1975         IF p_CURR_DETAILS_rec.markup_formula_id <> FND_API.G_MISS_NUM THEN
1976 
1977             l_CURR_DETAILS_rec.markup_formula_id := p_CURR_DETAILS_rec.markup_formula_id;
1978 
1979             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_SUCCESS)
1980             THEN
1981 
1982                 FND_MESSAGE.SET_NAME('QP','FND_BOTH_VAL_AND_ID_EXIST');
1983                 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','markup_formula');
1984                 OE_MSG_PUB.Add;
1985 
1986             END IF;
1987 
1988         ELSE
1989 
1990             l_CURR_DETAILS_rec.markup_formula_id := QP_Value_To_Id.markup_formula
1991             (   p_markup_formula              => p_CURR_DETAILS_val_rec.markup_formula
1992             );
1993 
1994             IF l_CURR_DETAILS_rec.markup_formula_id = FND_API.G_MISS_NUM THEN
1995                 l_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_ERROR;
1996             END IF;
1997 
1998         END IF;
1999 
2000     END IF;
2001 
2002     IF  p_CURR_DETAILS_val_rec.price_formula <> FND_API.G_MISS_CHAR
2003     THEN
2004 
2005         IF p_CURR_DETAILS_rec.price_formula_id <> FND_API.G_MISS_NUM THEN
2006 
2007             l_CURR_DETAILS_rec.price_formula_id := p_CURR_DETAILS_rec.price_formula_id;
2008 
2009             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_SUCCESS)
2010             THEN
2011 
2012                 FND_MESSAGE.SET_NAME('QP','FND_BOTH_VAL_AND_ID_EXIST');
2013                 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','price_formula');
2014                 OE_MSG_PUB.Add;
2015 
2016             END IF;
2017 
2018         ELSE
2019 
2020             l_CURR_DETAILS_rec.price_formula_id := QP_Value_To_Id.price_formula
2021             (   p_price_formula               => p_CURR_DETAILS_val_rec.price_formula
2022             );
2023 
2024             IF l_CURR_DETAILS_rec.price_formula_id = FND_API.G_MISS_NUM THEN
2025                 l_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_ERROR;
2026             END IF;
2027 
2028         END IF;
2029 
2030     END IF;
2031 
2032     IF  p_CURR_DETAILS_val_rec.to_currency <> FND_API.G_MISS_CHAR
2033     THEN
2034 
2035         IF p_CURR_DETAILS_rec.to_currency_code <> FND_API.G_MISS_CHAR THEN
2036 
2037             l_CURR_DETAILS_rec.to_currency_code := p_CURR_DETAILS_rec.to_currency_code;
2038 
2039             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_SUCCESS)
2040             THEN
2041 
2042                 FND_MESSAGE.SET_NAME('QP','FND_BOTH_VAL_AND_ID_EXIST');
2043                 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','to_currency');
2044                 OE_MSG_PUB.Add;
2045 
2046             END IF;
2047 
2048         ELSE
2049 
2050             l_CURR_DETAILS_rec.to_currency_code := QP_Value_To_Id.to_currency
2051             (   p_to_currency                 => p_CURR_DETAILS_val_rec.to_currency
2052             );
2053 
2054             IF l_CURR_DETAILS_rec.to_currency_code = FND_API.G_MISS_CHAR THEN
2055                 l_CURR_DETAILS_rec.return_status := FND_API.G_RET_STS_ERROR;
2056             END IF;
2057 
2058         END IF;
2059 
2060     END IF;
2061 
2062 
2063     RETURN l_CURR_DETAILS_rec;
2064 
2065 END Get_Ids;
2066 
2067 END QP_Curr_Details_Util;