1 PACKAGE BODY QP_Validate_Curr_Details AS
2 /* $Header: QPXLCDTB.pls 120.3 2006/01/03 04:18:30 srashmi noship $ */
3
4 -- Global constant holding the package name
5
6 G_PKG_NAME CONSTANT VARCHAR2(30) := 'QP_Validate_Curr_Details';
7
8 -- Procedure Entity
9
10 PROCEDURE Entity
11 ( x_return_status OUT NOCOPY /* file.sql.39 change */ VARCHAR2
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 )
16 IS
17 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
18 l_dummy_c VARCHAR2(1);
19 l_base_currency_code_s QP_CURRENCY_LISTS_B.base_currency_code%TYPE;
20 l_default_start_date_d DATE := to_date('01/01/1951','mm/dd/yyyy');
21 l_default_end_date_d DATE := to_date('12/31/9999','mm/dd/yyyy');
22 l_context_flag VARCHAR2(1);
23 l_attribute_flag VARCHAR2(1);
24 l_value_flag VARCHAR2(1);
25 l_datatype VARCHAR2(1);
26 l_flexfield_name VARCHAR2(30);
27 l_precedence NUMBER;
28 l_error_code NUMBER;
29 l_org_id PLS_INTEGER;
30 l_context_type VARCHAR2(30);
31 l_sourcing_enabled VARCHAR2(1);
32 l_sourcing_status VARCHAR2(1);
33 l_sourcing_method VARCHAR2(30);
34
35 l_pte_code VARCHAR2(30);
36 l_ss_code VARCHAR2(30);
37 l_fna_name VARCHAR2(4000);
38 l_fna_desc VARCHAR2(489);
39 l_fna_valid BOOLEAN;
40
41 CURSOR CURSOR_OVERLAP_CHECK(in_to_currency_code_s QP_CURRENCY_DETAILS.to_currency_code%TYPE,
42 in_currency_header_id_n QP_CURRENCY_DETAILS.currency_header_id%TYPE,
43 in_currency_detail_id_n QP_CURRENCY_DETAILS.currency_detail_id%TYPE,
44 in_curr_attribute_type QP_CURRENCY_DETAILS.curr_attribute_type%TYPE,
45 in_curr_attribute_context QP_CURRENCY_DETAILS.curr_attribute_context%TYPE,
46 in_curr_attribute QP_CURRENCY_DETAILS.curr_attribute%TYPE,
47 in_curr_attribute_value QP_CURRENCY_DETAILS.curr_attribute_value%TYPE
48 )
49 is
50 SELECT
51 trunc(start_date_active) start_date_active,
52 trunc(end_date_active) end_date_active
53 FROM QP_CURRENCY_DETAILS
54 WHERE to_currency_code = in_to_currency_code_s and
55 currency_header_id = in_currency_header_id_n and
56 currency_detail_id <> nvl(in_currency_detail_id_n, -99999) and
57 nvl(curr_attribute_type, '~EQUAL~') = nvl(in_curr_attribute_type, '~EQUAL~') and
58 nvl(curr_attribute_context, '~EQUAL~') = nvl(in_curr_attribute_context, '~EQUAL~') and
59 nvl(curr_attribute, '~EQUAL~') = nvl(in_curr_attribute, '~EQUAL~') and
60 nvl(curr_attribute_value, '~EQUAL~') = nvl(in_curr_attribute_value, '~EQUAL~');
61
62 CURSOR CURSOR_PRECEDENCE_UNIQUENESS
63 (in_to_currency_code_s QP_CURRENCY_DETAILS.to_currency_code%TYPE,
64 in_currency_header_id_n QP_CURRENCY_DETAILS.currency_header_id%TYPE,
65 in_currency_detail_id_n QP_CURRENCY_DETAILS.currency_detail_id%TYPE,
66 in_precedence QP_CURRENCY_DETAILS.precedence%TYPE
67 )
68 is
69 SELECT
70 trunc(start_date_active) start_date_active,
71 trunc(end_date_active) end_date_active
72 FROM QP_CURRENCY_DETAILS
73 WHERE to_currency_code = in_to_currency_code_s and
74 currency_header_id = in_currency_header_id_n and
75 currency_detail_id <> nvl(in_currency_detail_id_n, -99999) and
76 nvl(precedence, -1) = in_precedence;
77
78 BEGIN
79
80 -- oe_debug_pub.add('Inside Details Entity L package');
81 -- Check required attributes.
82
83 IF p_CURR_DETAILS_rec.currency_detail_id IS NULL
84 THEN
85
86 l_return_status := FND_API.G_RET_STS_ERROR;
87 -- oe_debug_pub.add('ERROR: currency_detail_id is NULL');
88
89 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
90 THEN
91
92 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
93 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','currency_detail_id');
94 OE_MSG_PUB.Add;
95
96 END IF;
97
98 END IF;
99
100 --
101 -- Check rest of required attributes here.
102 --
103 -- Below validations Added by Sunil Pandey
104
105 -- End Date must be after the Start Date
106
107 -- oe_debug_pub.add('VALIDATING start date after end date');
108 IF nvl( p_CURR_DETAILS_rec.start_date_active,l_default_start_date_d) >
109 nvl( p_CURR_DETAILS_rec.end_date_active,l_default_end_date_d)
110 THEN
111
112 l_return_status := FND_API.G_RET_STS_ERROR;
113
114 FND_MESSAGE.SET_NAME('QP','QP_STRT_DATE_BFR_END_DATE');
115 OE_MSG_PUB.Add;
116 -- oe_debug_pub.add(' Start_date End_Date Check; G_MSG_CONTEXT_COUNT: '||OE_MSG_PUB.G_MSG_CONTEXT_COUNT);
117 -- oe_debug_pub.add(' Start_date End_Date Check; G_MSG_COUNT: '||OE_MSG_PUB.G_MSG_COUNT);
118 -- oe_debug_pub.add('ERROR: start_date is after end_date');
119 -- oe_debug_pub.add('. start_date: '||NVL(p_CURR_DETAILS_rec.start_date_active, sysdate));
120 -- oe_debug_pub.add('. end_date: '||NVL(p_CURR_DETAILS_rec.end_date_active, sysdate));
121 -- raise FND_API.G_EXC_ERROR;
122
123 ELSE
124 -- Validate that only one active detail record exist at any point of time
125 BEGIN
126 -- oe_debug_pub.add('VALIDATE Uniqueness of to_currency_code');
127 For detail_rec in CURSOR_OVERLAP_CHECK
128 (p_CURR_DETAILS_rec.to_currency_code,
129 p_CURR_DETAILS_rec.currency_header_id,
130 p_CURR_DETAILS_rec.currency_detail_id,
131 p_CURR_DETAILS_rec.curr_attribute_type,
132 p_CURR_DETAILS_rec.curr_attribute_context,
133 p_CURR_DETAILS_rec.curr_attribute,
134 p_CURR_DETAILS_rec.curr_attribute_value)
135 LOOP
136 If (
137 (nvl(trunc(p_CURR_DETAILS_rec.start_date_active), l_default_start_date_d) between
138 nvl(detail_rec.start_date_active, l_default_start_date_d) and
139 nvl(detail_rec.end_date_active,l_default_end_date_d)) OR
140
141 (nvl(trunc(p_CURR_DETAILS_rec.end_date_active), l_default_end_date_d) between
142 nvl(detail_rec.start_date_active, l_default_start_date_d) and
143 nvl(detail_rec.end_date_active,l_default_end_date_d)) OR
144
145 (nvl(trunc(p_CURR_DETAILS_rec.start_date_active), l_default_start_date_d) <=
146 nvl(detail_rec.start_date_active, l_default_start_date_d) and
147 nvl(trunc(p_CURR_DETAILS_rec.end_date_active), l_default_end_date_d) >=
148 nvl(detail_rec.end_date_active, l_default_end_date_d))
149 )
150 then
151
152 l_return_status := FND_API.G_RET_STS_ERROR;
153 FND_MESSAGE.SET_NAME('QP','QP_OVERLAP_NOT_ALLWD'); -- CHANGE MESG_CODE
154 FND_MESSAGE.SET_TOKEN('CURRENCY_CODE',p_CURR_DETAILS_rec.to_currency_code);
155 OE_MSG_PUB.Add;
156 -- oe_debug_pub.add('ERROR: Multiple record(s) are active for the to_currency_code: '||p_CURR_DETAILS_rec.to_currency_code);
157 -- oe_debug_pub.add('. Form record start_date: '||NVL(p_CURR_DETAILS_rec.start_date_active, l_default_start_date_d));
158 -- oe_debug_pub.add('. Form record end_date: '||NVL(p_CURR_DETAILS_rec.end_date_active, l_default_end_date_d));
159 -- oe_debug_pub.add('. Existing record start_date: '||NVL(detail_rec.start_date_active, l_default_start_date_d));
160 -- oe_debug_pub.add('. Existing record end_date: '||NVL(detail_rec.end_date_active, l_default_end_date_d));
161 exit; -- Exit the loop
162
163 End if;
164 END LOOP;
165
166 END;
167 END IF;
168
169 -- Validate detail records' to_currency_code
170 BEGIN
171 -- oe_debug_pub.add('VALIDATE Details to_currency_code');
172
173 SELECT 'X'
174 INTO l_dummy_c
175 FROM fnd_currencies_vl
176 WHERE enabled_flag = 'Y'
177 and currency_flag = 'Y'
178 and currency_code = p_CURR_DETAILS_rec.to_currency_code
179 and trunc(sysdate) between nvl(start_date_active,trunc(sysdate))
180 and nvl(end_date_active,trunc(sysdate));
181
182 EXCEPTION
183 WHEN NO_DATA_FOUND THEN
184 l_return_status := FND_API.G_RET_STS_ERROR;
185 FND_MESSAGE.SET_NAME('QP','QP_INVALID_CURRENCY');
186 OE_MSG_PUB.Add;
187 -- oe_debug_pub.add('ERROR: Invalid To_Currency_Code');
188
189 END;
190
191 -- Validate detail records' price_formula
192 IF (p_CURR_DETAILS_rec.price_formula_id IS NOT NULL and
193 p_CURR_DETAILS_rec.price_formula_id <> FND_API.G_MISS_NUM)
194 THEN
195 BEGIN
196 oe_debug_pub.add('VALIDATE Details price_formula');
197
198 SELECT 'X'
199 INTO l_dummy_c
200 FROM qp_price_formulas_vl fh
201 WHERE trunc(sysdate) between nvl(fh.start_date_active, trunc(sysdate))
202 and nvl(fh.end_date_active, trunc(sysdate))
203 and fh.price_formula_id = p_CURR_DETAILS_rec.price_formula_id
204 and not exists (Select 'x'
205 From qp_price_formula_lines fl
206 Where fl.price_formula_id = fh.price_formula_id
207 and fl.PRICE_FORMULA_LINE_TYPE_CODE = 'PLL'
208 and trunc(sysdate) between nvl(fl.start_date_active, trunc(sysdate))
209 and nvl(fl.end_date_active, trunc(sysdate)));
210
211 EXCEPTION
212 WHEN NO_DATA_FOUND THEN
213 l_return_status := FND_API.G_RET_STS_ERROR;
214 FND_MESSAGE.SET_NAME('QP','QP_FORMULA_NOT_FOUND');
215 OE_MSG_PUB.Add;
216 oe_debug_pub.add('ERROR: Invalid price_formula_id');
217
218 END;
219
220 BEGIN
221 oe_debug_pub.add('VALIDATE - Details price_formula does not have line of type MV');
222
223 SELECT 'X'
224 INTO l_dummy_c
225 FROM qp_price_formulas_vl fh
226 WHERE trunc(sysdate) between nvl(fh.start_date_active, trunc(sysdate))
227 and nvl(fh.end_date_active, trunc(sysdate))
228 and fh.price_formula_id = p_CURR_DETAILS_rec.price_formula_id
229 and not exists (Select 'x'
230 From qp_price_formula_lines fl
231 Where fl.price_formula_id = fh.price_formula_id
232 and fl.PRICE_FORMULA_LINE_TYPE_CODE = 'MV'
233 and trunc(sysdate) between nvl(fl.start_date_active, trunc(sysdate))
234 and nvl(fl.end_date_active, trunc(sysdate)));
235
236 EXCEPTION
237 WHEN NO_DATA_FOUND THEN
238 l_return_status := FND_API.G_RET_STS_ERROR;
239 FND_MESSAGE.SET_NAME('QP','QP_INVALID_FORMULA_FOR_PL');
240 OE_MSG_PUB.Add;
241 oe_debug_pub.add('ERROR: price_formula_id has MV as line type');
242
243 END;
244 END IF;
245
246 /*
247 -- Validate detail records' conditional columns
248 -- Markup value or formula should be present if operator is present
249 IF ((p_CURR_DETAILS_rec.markup_operator IS NOT NULL and
250 p_CURR_DETAILS_rec.markup_operator <> FND_API.G_MISS_CHAR) AND
251 (p_CURR_DETAILS_rec.markup_formula_id IS NULL AND
252 p_CURR_DETAILS_rec.markup_value IS NULL)
253 )
254 THEN
255 -- oe_debug_pub.add('ERROR: Markup Formula or Value should be provided if Markup Operator is present');
256 l_return_status := FND_API.G_RET_STS_ERROR;
257 FND_MESSAGE.SET_NAME('QP','Enter_Markup_FML_OR_Value'); -- CHANGE MESG_CODE
258 OE_MSG_PUB.Add;
259 END IF;
260
261 -- Markup Operator should be present if either value or formula is present
262 IF ((p_CURR_DETAILS_rec.markup_operator IS NULL) AND
263 (p_CURR_DETAILS_rec.markup_formula_id IS NOT NULL OR
264 p_CURR_DETAILS_rec.markup_value IS NOT NULL)
265 )
266 THEN
267 -- oe_debug_pub.add('ERROR: Markup Formula or Value can be provided only if Markup Operator is present');
268 l_return_status := FND_API.G_RET_STS_ERROR;
269 FND_MESSAGE.SET_NAME('QP','First_Enter_Markup_OPRTR'); -- CHANGE MESG_CODE
270 OE_MSG_PUB.Add;
271 END IF;
272 */
273
274 -- Validate detail records' markup_formula
275 IF p_CURR_DETAILS_rec.markup_formula_id IS NOT NULL THEN
276 BEGIN
277 -- oe_debug_pub.add('VALIDATE Details markup_formula');
278
279 /*
280 SELECT 'X'
281 INTO l_dummy_c
282 FROM qp_price_formulas_vl
283 WHERE trunc(sysdate) between nvl(start_date_active, trunc(sysdate))
284 and nvl(end_date_active, trunc(sysdate))
285 and price_formula_id = p_CURR_DETAILS_rec.markup_formula_id;
286 */
287
288 -- Only those formulas which do not have a line component of type_code = 'PLL' can
289 -- be attached to a multi-currency list
290 SELECT 'X'
291 INTO l_dummy_c
292 FROM qp_price_formulas_vl fh
293 WHERE trunc(sysdate) between nvl(fh.start_date_active, trunc(sysdate))
294 and nvl(fh.end_date_active, trunc(sysdate))
295 and fh.price_formula_id = p_CURR_DETAILS_rec.markup_formula_id
296 and not exists (Select 'x'
297 From qp_price_formula_lines fl
298 Where fl.price_formula_id = fh.price_formula_id
299 and fl.PRICE_FORMULA_LINE_TYPE_CODE = 'PLL'
300 and trunc(sysdate) between nvl(fl.start_date_active, trunc(sysdate))
301 and nvl(fl.end_date_active, trunc(sysdate)));
302
303 EXCEPTION
304 WHEN NO_DATA_FOUND THEN
305 l_return_status := FND_API.G_RET_STS_ERROR;
306 FND_MESSAGE.SET_NAME('QP','QP_FORMULA_NOT_FOUND');
307 OE_MSG_PUB.Add;
308 -- oe_debug_pub.add('ERROR: Invalid markup_formula_id');
309
310 END;
311 END IF;
312
313 /*
314 -- Validate detail records' conversion_method
315 IF p_CURR_DETAILS_rec.conversion_method IS NOT NULL THEN
316 BEGIN
317 -- oe_debug_pub.add('VALIDATE Details conversion_method');
318
319 SELECT 'X'
320 INTO l_dummy_c
321 FROM qp_lookups
322 WHERE lookup_type = 'CONVERSION_METHOD'
323 and lookup_code = p_CURR_DETAILS_rec.conversion_method;
324
325 EXCEPTION
326 WHEN NO_DATA_FOUND THEN
327 l_return_status := FND_API.G_RET_STS_ERROR;
328 FND_MESSAGE.SET_NAME('QP','Invalid_Conversion_Method'); -- CHANGE MESG_CODE
329 OE_MSG_PUB.Add;
330
331 END;
332 END IF;
333 */
334
335 -- Validate detail records' conversion_type
336 IF p_CURR_DETAILS_rec.conversion_type IS NOT NULL THEN
337 BEGIN
338 -- oe_debug_pub.add('VALIDATE Details conversion_type');
339
340 -- Check if the conversion_type exists in GL
341 SELECT 'X'
342 INTO l_dummy_c
343 FROM gl_daily_conversion_types
344 WHERE conversion_type = p_CURR_DETAILS_rec.conversion_type and
345 conversion_type <> 'User';
346
347 EXCEPTION
348 WHEN NO_DATA_FOUND THEN
349 Begin
350 -- If conversion_type is not in GL, then check if it is defined as lookup_code
351 SELECT 'X'
352 INTO l_dummy_c
353 FROM qp_lookups
354 WHERE lookup_type = 'CONVERSION_METHOD'
355 and lookup_code = p_CURR_DETAILS_rec.conversion_type
356 and enabled_flag = 'Y' and
357 trunc(sysdate) between
358 nvl(start_date_active, trunc(sysdate)) and nvl(end_date_active, trunc(sysdate));
359
360 EXCEPTION
361 WHEN NO_DATA_FOUND THEN
362 -- If not found in either GL or lookup_code then raise error
363
364 l_return_status := FND_API.G_RET_STS_ERROR;
365 FND_MESSAGE.SET_NAME('QP','QP_INVALID_CONV_TYPE'); -- CHANGE MESG_CODE
366 FND_MESSAGE.SET_TOKEN('CONVERSION_TYPE',p_CURR_DETAILS_rec.conversion_type);
367 OE_MSG_PUB.Add;
368 -- oe_debug_pub.add('ERROR: Invalid Conversion_Type passed');
369 End;
370 END;
371 END IF;
372
373 -- Validate detail records' conversion_date_type
374 IF p_CURR_DETAILS_rec.conversion_date_type IS NOT NULL THEN
375 BEGIN
376 -- oe_debug_pub.add('VALIDATE Details conversion_date_type');
377
378 SELECT 'X'
379 INTO l_dummy_c
380 FROM qp_lookups
381 WHERE lookup_type = 'CONVERSION_DATE_TYPE'
382 and lookup_code = p_CURR_DETAILS_rec.conversion_date_type
383 and enabled_flag = 'Y' and
384 trunc(sysdate) between
385 nvl(start_date_active, trunc(sysdate)) and nvl(end_date_active, trunc(sysdate));
386
387 EXCEPTION
388 WHEN NO_DATA_FOUND THEN
389 l_return_status := FND_API.G_RET_STS_ERROR;
390 FND_MESSAGE.SET_NAME('QP','QP_INVALID_CONV_DT_TYPE'); -- CHANGE MESG_CODE
391 FND_MESSAGE.SET_TOKEN('CONVERSION_DATE_TYPE',p_CURR_DETAILS_rec.conversion_date_type);
392 OE_MSG_PUB.Add;
393 -- oe_debug_pub.add('ERROR: Invalid conversion_date_type');
394
395 END;
396 END IF;
397
398 -- Validate detail records' markup_operator
399 IF p_CURR_DETAILS_rec.markup_operator IS NOT NULL THEN
400 BEGIN
401 -- oe_debug_pub.add('VALIDATE Details markup_operator');
402
403 SELECT 'X'
404 INTO l_dummy_c
405 FROM qp_lookups
406 WHERE lookup_type = 'MARKUP_OPERATOR'
407 and lookup_code = p_CURR_DETAILS_rec.markup_operator
408 and enabled_flag = 'Y' and
409 trunc(sysdate) between
410 nvl(start_date_active, trunc(sysdate)) and nvl(end_date_active, trunc(sysdate));
411
412 -- Validate detail records' conditional columns
413 -- Markup value or formula should be present if operator is present
414 IF ((p_CURR_DETAILS_rec.markup_formula_id IS NULL AND
415 p_CURR_DETAILS_rec.markup_value IS NULL)
416 )
417 THEN
418 -- oe_debug_pub.add('ERROR: Markup Formula or Value should be provided if Markup Operator is present');
419 l_return_status := FND_API.G_RET_STS_ERROR;
420 FND_MESSAGE.SET_NAME('QP','QP_FRML_OR_VAL_REQD'); -- CHANGE MESG_CODE
421 OE_MSG_PUB.Add;
422 END IF;
423
424 EXCEPTION
425 WHEN NO_DATA_FOUND THEN
426 l_return_status := FND_API.G_RET_STS_ERROR;
427 FND_MESSAGE.SET_NAME('QP','QP_INVALID_MARKUP_OPRTR');
428 FND_MESSAGE.SET_TOKEN('MARKUP_OPERATOR',p_CURR_DETAILS_rec.markup_operator);
429 OE_MSG_PUB.Add;
430 -- oe_debug_pub.add('ERROR: Invalid markup_operator');
431
432 END;
433 ELSE
434
435 -- Markup Operator should be present if either value or formula is present
436 IF ((p_CURR_DETAILS_rec.markup_formula_id IS NOT NULL OR
437 p_CURR_DETAILS_rec.markup_value IS NOT NULL)
438 )
439 THEN
440 -- oe_debug_pub.add('ERROR: Markup Formula or Value can be provided only if Markup Operator is present');
441 l_return_status := FND_API.G_RET_STS_ERROR;
442 FND_MESSAGE.SET_NAME('QP','QP_MARKUP_OPRTR_REQD'); -- CHANGE MESG_CODE
443 OE_MSG_PUB.Add;
444 END IF;
445 END IF;
446
447 -- Below statements Validate detail records' conditionally required columns
448 BEGIN
449 -- oe_debug_pub.add('Validate Detail Record''s conditional columns for to_currency_code: '||p_CURR_DETAILS_rec.to_currency_code);
450 -- oe_debug_pub.add('Detail record''s hdr_id: '||p_CURR_DETAILS_rec.currency_header_id);
451 -- Get the header's base currency code
452 Begin
453 SELECT base_currency_code
454 INTO l_base_currency_code_s
455 FROM QP_CURRENCY_LISTS_B
456 WHERE currency_header_id = p_CURR_DETAILS_rec.currency_header_id;
457 Exception
458 When NO_DATA_FOUND THEN
459 l_return_status := FND_API.G_RET_STS_ERROR;
460 FND_MESSAGE.SET_NAME('QP','QP_ATTRIBUTE_REQUIRED');
461 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','currency_header_id');
462 OE_MSG_PUB.Add;
463 END;
464
465 -- oe_debug_pub.add('Header Currency Code: '||l_base_currency_code_s);
466 -- --oe_debug_pub.add('Conversion Method: '||p_CURR_DETAILS_rec.CONVERSION_METHOD);
467
468 IF (p_CURR_DETAILS_rec.to_currency_code = l_base_currency_code_s)
469 then
470
471 -- oe_debug_pub.add('ERROR: To_Currency_Code can not be same as Base_Currency_Code');
472 l_return_status := FND_API.G_RET_STS_ERROR;
473 FND_MESSAGE.SET_NAME('QP','QP_TO_DIFFERENT_FROM_BASE'); -- CHANGE MESG_CODE
474 OE_MSG_PUB.Add;
475
476 /* This validation is obsolete now
477 If (--p_CURR_DETAILS_rec.CONVERSION_METHOD is NOT NULL OR
478 p_CURR_DETAILS_rec.FIXED_VALUE is NOT NULL OR
479 p_CURR_DETAILS_rec.PRICE_FORMULA_id is NOT NULL OR
480 p_CURR_DETAILS_rec.CONVERSION_TYPE is NOT NULL OR
481 p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE is NOT NULL OR
482 p_CURR_DETAILS_rec.CONVERSION_DATE is NOT NULL OR
483 p_CURR_DETAILS_rec.START_DATE_ACTIVE is NOT NULL OR
484 p_CURR_DETAILS_rec.END_DATE_ACTIVE is NOT NULL )
485 then
486
487 -- oe_debug_pub.add('ERROR: Value is not allowed in the following fields when to_currency is same as base_currency: FIXED_VALUE, PRICE_FORMULA_id, CONVERSION_TYPE, CONVERSION_DATE_TYPE, CONVERSION_DATE, START_DATE_ACTIVE, END_DATE_ACTIVE');
488 l_return_status := FND_API.G_RET_STS_ERROR;
489 FND_MESSAGE.SET_NAME('QP','QP_VALUE_NOT_ALLWD_CURR'); -- CHANGE MESG_CODE
490 OE_MSG_PUB.Add;
491 End if;
492 */
493
494 ELSE -- to_currency_code is different from base_currency_code
495
496 --IF (p_CURR_DETAILS_rec.CONVERSION_METHOD is NULL)
497 IF (p_CURR_DETAILS_rec.CONVERSION_TYPE is NULL)
498 THEN
499
500 -- oe_debug_pub.add('ERROR: CONVERSION_TYPE is required when to_currency_code is different from base_currency_code');
501 l_return_status := FND_API.G_RET_STS_ERROR;
502 FND_MESSAGE.SET_NAME('QP','QP_CONV_TYPE_REQD'); -- CHANGE MESG_CODE
503 OE_MSG_PUB.Add;
504
505 ELSIF (p_CURR_DETAILS_rec.CONVERSION_TYPE = 'TRANSACTION')
506 THEN
507 If (p_CURR_DETAILS_rec.FIXED_VALUE is NOT NULL OR
508 p_CURR_DETAILS_rec.PRICE_FORMULA_id is not NULL OR
509 p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE is not NULL OR
510 p_CURR_DETAILS_rec.CONVERSION_DATE is not NULL)
511 then
512 -- oe_debug_pub.add('ERROR: Value is not allowed in the following fields when Conversion_Type = ''TRANSACTION'': FIXED_VALUE, PRICE_FORMULA_id, CONVERSION_DATE_TYPE, CONVERSION_DATE');
513 l_return_status := FND_API.G_RET_STS_ERROR;
514 FND_MESSAGE.SET_NAME('QP','QP_VALUE_NOT_ALLWD_TXN'); -- CHANGE MESG_CODE
515 OE_MSG_PUB.Add;
516 End If;
517
518 ELSIF (p_CURR_DETAILS_rec.CONVERSION_TYPE = 'FIXED')
519 THEN
520 If (p_CURR_DETAILS_rec.FIXED_VALUE is NULL)
521 then
522 -- oe_debug_pub.add('ERROR: FIXED_VALUE is required ehen Conversion_Type is ''FIXED''');
523 l_return_status := FND_API.G_RET_STS_ERROR;
524 FND_MESSAGE.SET_NAME('QP','QP_FIXED_VALUE_REQD'); -- CHANGE MESG_CODE
525 OE_MSG_PUB.Add;
526 End If;
527
528 If (p_CURR_DETAILS_rec.PRICE_FORMULA_id is not NULL OR
529 -- p_CURR_DETAILS_rec.CONVERSION_TYPE is not NULL OR
530 p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE is not NULL OR
531 p_CURR_DETAILS_rec.CONVERSION_DATE is not NULL)
532 then
533 -- oe_debug_pub.add('ERROR: Value is not allowed in the following fields when Conversion_Type = ''FIXED'': PRICE_FORMULA_id, CONVERSION_DATE_TYPE, CONVERSION_DATE');
534 l_return_status := FND_API.G_RET_STS_ERROR;
535 FND_MESSAGE.SET_NAME('QP','QP_VALUE_NOT_ALLWD_FIXED'); -- CHANGE MESG_CODE
536 OE_MSG_PUB.Add;
537 End If;
538 -- ELSIF (p_CURR_DETAILS_rec.CONVERSION_METHOD = 'GL')
539 ELSIF (p_CURR_DETAILS_rec.CONVERSION_TYPE NOT IN ('FIXED', 'FORMULA', 'TRANSACTION'))
540 THEN
541 --If (p_CURR_DETAILS_rec.CONVERSION_TYPE is NULL OR
542 If (p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE is NULL)
543 then
544 -- oe_debug_pub.add('ERROR: CONVERSION_DATE_TYPE is required when Conversion_Type is Not ''FIXED'' or ''FORMULA'' or ''TRANSACTION''');
545 l_return_status := FND_API.G_RET_STS_ERROR;
546 FND_MESSAGE.SET_NAME('QP','QP_CONV_DT_TYPE_REQD'); -- CHANGE MESG_CODE
547 OE_MSG_PUB.Add;
548 End If;
549
550 If (p_CURR_DETAILS_rec.PRICE_FORMULA_id is not NULL OR
551 p_CURR_DETAILS_rec.FIXED_VALUE is not NULL)
552 then
553 -- oe_debug_pub.add('ERROR: Value is not allowed in the following fields when Conversion_Type is Not ''FIXED'' or ''FORMULA'': PRICE_FORMULA_id, FIXED_VALUE');
554 l_return_status := FND_API.G_RET_STS_ERROR;
555 FND_MESSAGE.SET_NAME('QP','QP_VALUE_NOT_ALLWD_GL'); -- CHANGE MESG_CODE
556 OE_MSG_PUB.Add;
557 End If;
558
559 if (p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE = 'FIXED')
560 then
561 if (p_CURR_DETAILS_rec.CONVERSION_DATE is NULL) then
562 -- oe_debug_pub.add('ERROR: CONVERSION_DATE is required when CONVERSION_TYPE is Not (''FIXED'' or ''FORMULA'' or ''TRANSACTION'') and CONVERSION_DATE_TYPE = ''FIXED''');
563 l_return_status := FND_API.G_RET_STS_ERROR;
564 FND_MESSAGE.SET_NAME('QP','QP_CONV_DT_REQUIRED'); -- CHANGE MESG_CODE
565 OE_MSG_PUB.Add;
566 End if;
567 Else
568 if (p_CURR_DETAILS_rec.CONVERSION_DATE is NOT NULL) then
569 -- oe_debug_pub.add('ERROR: CONVERSION_DATE is allowed only when CONVERSION_TYPE is Not (''FIXED'' or ''FORMULA'' or ''TRANSACTION'') and CONVERSION_DATE_TYPE <> ''FIXED''');
570 l_return_status := FND_API.G_RET_STS_ERROR;
571 FND_MESSAGE.SET_NAME('QP','QP_CONV_DT_NOT_ALLWD'); -- CHANGE MESG_CODE
572 OE_MSG_PUB.Add;
573 End if;
574
575 End if;
576 ELSIF (p_CURR_DETAILS_rec.CONVERSION_TYPE = 'FORMULA')
577 THEN
578 If p_CURR_DETAILS_rec.PRICE_FORMULA_id is NULL then
579 -- oe_debug_pub.add('ERROR: PRICE_FORMULA_id is required for Conversion_Type = ''FORMULA''');
580 l_return_status := FND_API.G_RET_STS_ERROR;
581 FND_MESSAGE.SET_NAME('QP','QP_PRICE_FORMULA_REQD'); -- CHANGE MESG_CODE
582 OE_MSG_PUB.Add;
583 End If;
584
585 If (p_CURR_DETAILS_rec.FIXED_VALUE is not NULL OR
586 p_CURR_DETAILS_rec.CONVERSION_DATE_TYPE is not NULL OR
587 p_CURR_DETAILS_rec.CONVERSION_DATE is not NULL)
588 then
589 -- oe_debug_pub.add('ERROR: Value is not allowed in the following fields when Conversion_Type = ''FORMULA'': FIXED_VALUE, CONVERSION_DATE_TYPE, CONVERSION_DATE');
590 -- oe_debug_pub.add('. FIXED VALUE: '||p_CURR_DETAILS_rec.FIXED_VALUE);
591 l_return_status := FND_API.G_RET_STS_ERROR;
592 FND_MESSAGE.SET_NAME('QP','QP_FVAL_OR_CONV_NOT_ALLWD'); -- CHANGE MESG_CODE
593 OE_MSG_PUB.Add;
594 End If;
595 END IF; -- Conversion_Type
596 END IF; -- to_currency_code = base_currency_code
597
598
599 -- Validate detail records' CURR_ATTRIBUTE_TYPE
600 IF p_CURR_DETAILS_rec.curr_attribute_type IS NOT NULL THEN
601 BEGIN
602 -- oe_debug_pub.add('VALIDATE Details curr_attribute_type');
603
604 SELECT 'X'
605 INTO l_dummy_c
606 FROM qp_lookups
607 WHERE lookup_type = 'MULTI_CURR_ATTRIBUTE_TYPE'
608 and lookup_code = p_CURR_DETAILS_rec.curr_attribute_type
609 and enabled_flag = 'Y' and
610 trunc(sysdate) between
611 nvl(start_date_active, trunc(sysdate)) and nvl(end_date_active, trunc(sysdate));
612
613 EXCEPTION
614 WHEN NO_DATA_FOUND THEN
615 l_return_status := FND_API.G_RET_STS_ERROR;
616 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
617 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','CURRENCY ATTRIBUTE TYPE');
618 OE_MSG_PUB.Add;
619 -- oe_debug_pub.add('ERROR: Invalid curr_attribute_type');
620
621 END;
622 END IF;
623
624
625 -- Validate that either all the curr_attribute fields are NULL or all are not NOT NULL
626 IF ( p_CURR_DETAILS_rec.curr_attribute_type IS NOT NULL AND
627 p_CURR_DETAILS_rec.curr_attribute_context IS NOT NULL AND
628 p_CURR_DETAILS_rec.curr_attribute IS NOT NULL AND
629 p_CURR_DETAILS_rec.curr_attribute_value IS NOT NULL )
630 THEN
631 -- The below logic validates the Currency Context, Attribute, and Value passed
632
633 If p_CURR_DETAILS_rec.curr_attribute_type = 'QUALIFIER' then
634 l_flexfield_name := 'QP_ATTR_DEFNS_QUALIFIER';
635 Else
636 l_flexfield_name := 'QP_ATTR_DEFNS_PRICING';
637 End if;
638
639 QP_UTIL.validate_qp_flexfield(flexfield_name => l_flexfield_name
640 ,context => p_CURR_DETAILS_rec.curr_attribute_context
641 ,attribute => p_CURR_DETAILS_rec.curr_attribute
642 ,value => p_CURR_DETAILS_rec.curr_attribute_value
643 ,application_short_name=> 'QP'
644 ,context_flag =>l_context_flag
645 ,attribute_flag =>l_attribute_flag
646 ,value_flag =>l_value_flag
647 ,datatype =>l_datatype
648 ,precedence =>l_precedence
649 ,error_code =>l_error_code
650 );
651
652 If (l_context_flag = 'N' AND l_error_code = 7) -- invalid context
653 Then
654 l_return_status := FND_API.G_RET_STS_ERROR;
655
656 If p_CURR_DETAILS_rec.curr_attribute_type = 'PRODUCT' then
657 FND_MESSAGE.SET_NAME('QP','QP_INVALID_PROD_CONTEXT' );
658 ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'PRICING' then
659 FND_MESSAGE.SET_NAME('QP','QP_INVALID_PRICING_CONTEXT' );
660 ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'QUALIFIER' then
661 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
662 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE CONTEXT');
663 Else
664 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
665 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','CURRENCY ATTRIBUTE CONTEXT');
666 End if;
667
668 OE_MSG_PUB.Add;
669 End If;
670
671 If (l_attribute_flag = 'N' AND l_error_code = 8) -- invalid attribute
672 Then
673 l_return_status := FND_API.G_RET_STS_ERROR;
674
675 If p_CURR_DETAILS_rec.curr_attribute_type = 'PRODUCT' then
676 FND_MESSAGE.SET_NAME('QP','QP_INVALID_PROD_ATTR' );
677 ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'PRICING' then
678 FND_MESSAGE.SET_NAME('QP','QP_INVALID_PRICING_ATTR' );
679 ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'QUALIFIER' then
680 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
681 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE');
682 Else
683 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
684 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','CURRENCY ATTRIBUTE');
685 End if;
686
687 OE_MSG_PUB.Add;
688 End If;
689
690 If (l_value_flag = 'N' AND l_error_code = 9) -- invalid value
691 Then
692 l_return_status := FND_API.G_RET_STS_ERROR;
693
694 If p_CURR_DETAILS_rec.curr_attribute_type = 'PRODUCT' then
695 FND_MESSAGE.SET_NAME('QP','QP_INVALID_PROD_VALUE' );
696 ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'PRICING' then
697 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE' );
698 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','PRICING ATTRIBUTE VALUE');
699 ElsIf p_CURR_DETAILS_rec.curr_attribute_type = 'QUALIFIER' then
700 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE' );
701 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','QUALIFIER ATTRIBUTE VALUE');
702 Else
703 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ATTRIBUTE');
704 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','ATTRIBUTE VALUE');
705 End if;
706
707 OE_MSG_PUB.Add;
708 End If;
709
710
711 -- Precedence should be NOT NULL
712 If p_CURR_DETAILS_rec.precedence IS NULL
713 then
714 l_return_status := FND_API.G_RET_STS_ERROR;
715 FND_MESSAGE.SET_NAME('QP','QP_PRECEDENCE_REQD'); -- CHANGE MESG_CODE
716 OE_MSG_PUB.Add;
717 -- oe_debug_pub.add('ERROR: Precedence is required when Attribute type is not NULL');
718 End If; -- precedence is null
719
720 -- Validate the Inventory_item_id/category_id if the type is PRODUCT and attribute
721 -- is PA1/PA2
722 IF p_CURR_DETAILS_rec.curr_attribute_context = 'ITEM' AND
723 p_CURR_DETAILS_rec.curr_attribute_type = 'PRODUCT'
724 THEN
725 IF p_CURR_DETAILS_rec.curr_attribute = 'PRICING_ATTRIBUTE1' -- Item Number
726 THEN
727 l_org_id := QP_UTIL.Get_Item_Validation_Org;
728
729 BEGIN
730 SELECT 'X'
731 INTO l_dummy_c
732 FROM mtl_system_items_kfv
733 WHERE inventory_item_id = to_number(p_CURR_DETAILS_rec.curr_attribute_value) and
734 organization_id = l_org_id;
735
736 EXCEPTION
737 WHEN NO_DATA_FOUND THEN
738 l_return_status := FND_API.G_RET_STS_ERROR;
739
740 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ITEM');
741 FND_MESSAGE.SET_TOKEN('ITEM_ID',p_CURR_DETAILS_rec.curr_attribute_value);
742 OE_MSG_PUB.Add;
743 --** oe_debug_pub.add('ERROR: Invalid Inventory_Item_id provided');
744
745 END;
746
747 END IF; --Item Number
748
749 IF p_CURR_DETAILS_rec.curr_attribute = 'PRICING_ATTRIBUTE2' -- Item Category
750 THEN
751
752 /* BEGIN
753 SELECT 'X'
754 INTO l_dummy_c
755 FROM qp_item_categories_v
756 WHERE category_id = to_number(p_CURR_DETAILS_rec.curr_attribute_value) and
757 ROWNUM = 1;
758
759 EXCEPTION
760 WHEN NO_DATA_FOUND THEN
761 l_return_status := FND_API.G_RET_STS_ERROR;
762
763 FND_MESSAGE.SET_NAME('QP','QP_INVALID_ITEM_CATEGORY');
764 FND_MESSAGE.SET_TOKEN('CATEGORY_ID',p_CURR_DETAILS_rec.curr_attribute_value);
765 OE_MSG_PUB.Add;
766 --** oe_debug_pub.add('ERROR: Invalid Category_id provided');
767
768 END;*/
769
770 -- Functional Area validation for Hierarchical Categories (sfiresto)
771 BEGIN
772
773 l_pte_code := fnd_profile.value('QP_PRICING_TRANSACTION_ENTITY');
774 l_ss_code := fnd_profile.value('QP_SOURCE_SYSTEM_CODE');
775
776 QP_UTIL.Get_Item_Cat_Info(
777 p_CURR_DETAILS_rec.curr_attribute_value,
778 l_pte_code,
779 l_ss_code,
780 l_fna_name,
781 l_fna_desc,
782 l_fna_valid);
783
784 IF NOT l_fna_valid THEN
785
786 l_return_status := FND_API.G_RET_STS_ERROR;
787
788 FND_MESSAGE.set_name('QP', 'QP_INVALID_CAT_FUNC_PTE');
789 FND_MESSAGE.set_token('CATID', p_CURR_DETAILS_rec.curr_attribute_value);
790 FND_MESSAGE.set_token('PTE', l_pte_code);
791 FND_MESSAGE.set_token('SS', l_ss_code);
792 OE_MSG_PUB.Add;
793
794 END IF;
795
796 END;
797
798 END IF; -- Item Category
799 END IF; -- curr_attribute_context = 'ITEM'
800
801 ELSIF ( p_CURR_DETAILS_rec.curr_attribute_type IS NOT NULL OR
802 p_CURR_DETAILS_rec.curr_attribute_context IS NOT NULL OR
803 p_CURR_DETAILS_rec.curr_attribute IS NOT NULL OR
804 p_CURR_DETAILS_rec.curr_attribute_value IS NOT NULL )
805 THEN
806 -- This elsif checks if any of the curr_attribute is not NULL. Since the above test failed
807 -- so at least one of these attributes is NULL.
808 l_return_status := FND_API.G_RET_STS_ERROR;
809 FND_MESSAGE.SET_NAME('QP','QP_CURR_ATTRS_REQD_OR_NULL'); -- CHANGE MESG_CODE
810 OE_MSG_PUB.Add;
811 -- oe_debug_pub.add('ERROR: All of the following fields should either be NULL or NOT NULL: CURR_ATTRIBUTE_TYPE, CURR_ATTRIBUTE_CONTEXT, CURR_ATTRIBUTE, CURR_ATTRIBUTE_VALUE');
812
813 END IF;
814
815 -- Validate correctness and uniqueness of precedence
816 IF p_CURR_DETAILS_rec.precedence is NOT NULL then
817 -- Validate that the prcedence is an integer
818 If ( (instr(to_char(p_CURR_DETAILS_rec.precedence), '.', 1) <> 0) OR
819 (p_CURR_DETAILS_rec.precedence < 0) )
820 then
821 l_return_status := FND_API.G_RET_STS_ERROR;
822 FND_MESSAGE.SET_NAME('QP','QP_INTEGER_REQUIRED');
823 FND_MESSAGE.SET_TOKEN('ENTITY','PRECEDENCE');
824 OE_MSG_PUB.Add;
825 -- oe_debug_pub.add('ERROR: Precedence should be a positive integer value');
826 Else
827 -- Validate that only one active detail record exist at any point of time
828 BEGIN
829 -- oe_debug_pub.add('VALIDATE Uniqueness of to_currency_code');
830 For detail_rec in CURSOR_PRECEDENCE_UNIQUENESS
831 (p_CURR_DETAILS_rec.to_currency_code,
832 p_CURR_DETAILS_rec.currency_header_id,
833 p_CURR_DETAILS_rec.currency_detail_id,
834 p_CURR_DETAILS_rec.precedence)
835 LOOP
836 If (
837 (nvl(trunc(p_CURR_DETAILS_rec.start_date_active), l_default_start_date_d) between
838 nvl(detail_rec.start_date_active, l_default_start_date_d) and
839 nvl(detail_rec.end_date_active,l_default_end_date_d)) OR
840
841 (nvl(trunc(p_CURR_DETAILS_rec.end_date_active), l_default_end_date_d) between
842 nvl(detail_rec.start_date_active, l_default_start_date_d) and
843 nvl(detail_rec.end_date_active,l_default_end_date_d)) OR
844
845 (nvl(trunc(p_CURR_DETAILS_rec.start_date_active), l_default_start_date_d) <=
846 nvl(detail_rec.start_date_active, l_default_start_date_d) and
847 nvl(trunc(p_CURR_DETAILS_rec.end_date_active), l_default_end_date_d) >=
848 nvl(detail_rec.end_date_active, l_default_end_date_d))
849 )
850 then
851
852 l_return_status := FND_API.G_RET_STS_ERROR;
853 FND_MESSAGE.SET_NAME('QP','QP_UNIQUE_PRECEDENCE'); -- CHANGE MESG_CODE
854 OE_MSG_PUB.Add;
855 -- oe_debug_pub.add('ERROR: Precedence should be unique for a to_currency_code within a given period');
856 exit; -- Exit the loop
857 End if; -- date check
858 END LOOP;
859
860 END;
861
862 End If; -- precedence is an integer
863
864 END IF; -- precedence is not NULL
865
866 oe_debug_pub.add('ENTITY - before rounding_factor');
867 IF p_CURR_DETAILS_rec.rounding_factor IS NOT NULL AND
868 p_CURR_DETAILS_rec.to_currency_code IS NOT NULL THEN
869 IF NOT QP_Validate.Rounding_Factor(p_CURR_DETAILS_rec.rounding_factor,
870 p_CURR_DETAILS_rec.to_currency_code) THEN
871 oe_debug_pub.add('ENTITY rounding_factor error occured');
872 l_return_status := FND_API.G_RET_STS_ERROR;
873 END IF;
874 END IF;
875
876 oe_debug_pub.add('ENTITY - before selling rounding_factor');
877 IF p_CURR_DETAILS_rec.selling_rounding_factor IS NOT NULL AND
878 p_CURR_DETAILS_rec.to_currency_code IS NOT NULL THEN
879 IF NOT QP_Validate.Rounding_Factor(p_CURR_DETAILS_rec.selling_rounding_factor,
880 p_CURR_DETAILS_rec.to_currency_code) THEN
881 oe_debug_pub.add('ENTITY selling_rounding_factor error occured');
882 l_return_status := FND_API.G_RET_STS_ERROR;
883 END IF;
884 END IF;
885
886 -- Bug 2293974 - rounding factor is mandatory
887 If (p_CURR_DETAILS_rec.selling_rounding_factor is NULL or
888 p_CURR_DETAILS_rec.selling_rounding_factor = FND_API.G_MISS_NUM )
889 then
890 l_return_status := FND_API.G_RET_STS_ERROR;
891
892 FND_MESSAGE.SET_NAME('QP','QP_RNDG_FACTOR_REQD');
893 oe_msg_pub.add;
894
895 end if;
896
897 END;
898 -- Above statements Validate detail records' conditionally required columns
899
900 -- oe_debug_pub.add('G_MSG_CONTEXT_COUNT: '||OE_MSG_PUB.G_MSG_CONTEXT_COUNT);
901 -- oe_debug_pub.add('Coming Out of CDT L package');
902 -- Above validations Added by Sunil Pandey
903
904
905 -- Return Error if a required attribute is missing.
906
907 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
908
909 RAISE FND_API.G_EXC_ERROR;
910
911 END IF;
912
913 --
914 -- Check conditionally required attributes here.
915 --
916
917
918 --
919 -- Validate attribute dependencies here.
920 --
921 --Raise a warning if the Pricing/Product Attribute being used in setup
922 --has a sourcing method of 'ATTRIBUTE MAPPING' but is not sourcing-enabled
923 --or if its sourcing_status is not 'Y', i.e., the build sourcing conc.
924 --program has to be run.
925
926 oe_debug_pub.add('Here 0000');
927 IF qp_util.attrmgr_installed = 'Y' THEN
928 oe_debug_pub.add('Here 1111');
929 IF p_CURR_DETAILS_rec.curr_attribute_context IS NOT NULL AND
930 p_CURR_DETAILS_rec.curr_attribute IS NOT NULL
931 THEN
932 oe_debug_pub.add('Here 2222');
933 If p_CURR_DETAILS_rec.curr_attribute_type = 'QUALIFIER' then
934 QP_UTIL.Get_Context_Type('QP_ATTR_DEFNS_QUALIFIER',
935 p_CURR_DETAILS_rec.curr_attribute_context,
936 l_context_type,
937 l_error_code);
938 else
939 QP_UTIL.Get_Context_Type('QP_ATTR_DEFNS_PRICING',
940 p_CURR_DETAILS_rec.curr_attribute_context,
941 l_context_type,
942 l_error_code);
943 End if;
944
945 IF l_error_code = 0 THEN --successfully returned context_type
946
947 oe_debug_pub.add('Here 3333');
948 oe_debug_pub.add('l_context_type = ' || l_context_type);
949 oe_debug_pub.add('p_CURR_DETAILS_rec.curr_attribute_context = ' || p_CURR_DETAILS_rec.curr_attribute_context);
950 oe_debug_pub.add('p_CURR_DETAILS_rec.curr_attribute = ' || p_CURR_DETAILS_rec.curr_attribute);
951 QP_UTIL.Get_Sourcing_Info(l_context_type,
952 p_CURR_DETAILS_rec.curr_attribute_context,
953 p_CURR_DETAILS_rec.curr_attribute,
954 l_sourcing_enabled,
955 l_sourcing_status,
956 l_sourcing_method);
957
958 oe_debug_pub.add('l_sourcing_method = ' || l_sourcing_method);
959 IF l_sourcing_method = 'ATTRIBUTE MAPPING' THEN
960
961 oe_debug_pub.add('Here 4444');
962 IF l_sourcing_enabled <> 'Y' THEN
963
964 oe_debug_pub.add('Here 5555');
965 FND_MESSAGE.SET_NAME('QP','QP_ENABLE_SOURCING');
966 FND_MESSAGE.SET_TOKEN('CONTEXT',
967 p_CURR_DETAILS_rec.curr_attribute_context);
968 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
969 p_CURR_DETAILS_rec.curr_attribute);
970 OE_MSG_PUB.Add;
971
972 END IF;
973
974 IF l_sourcing_status <> 'Y' THEN
975
976 oe_debug_pub.add('Here 6666');
977 FND_MESSAGE.SET_NAME('QP','QP_BUILD_SOURCING_RULES');
978 FND_MESSAGE.SET_TOKEN('CONTEXT',
979 p_CURR_DETAILS_rec.curr_attribute_context);
980 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
981 p_CURR_DETAILS_rec.curr_attribute);
982 OE_MSG_PUB.Add;
983
984 END IF;
985
986 END IF; --If sourcing_method = 'ATTRIBUTE MAPPING'
987
988 END IF; --l_error_code = 0
989
990 END IF;--If curr_attribute_context and curr_attribute are NOT NULL
991
992 END IF; --qp_util.attrmgr_installed = 'Y'
993
994
995 -- Done validating entity
996
997 x_return_status := l_return_status;
998
999 EXCEPTION
1000
1001 WHEN FND_API.G_EXC_ERROR THEN
1002
1003 x_return_status := FND_API.G_RET_STS_ERROR;
1004
1005 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1006
1007 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1008
1009 WHEN OTHERS THEN
1010
1011 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1012
1013 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1014 THEN
1015 OE_MSG_PUB.Add_Exc_Msg
1016 ( G_PKG_NAME
1017 , 'Entity'
1018 );
1019 END IF;
1020
1021 END Entity;
1022
1023 -- Procedure Attributes
1024
1025 PROCEDURE Attributes
1026 ( x_return_status OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1027 , p_CURR_DETAILS_rec IN QP_Currency_PUB.Curr_Details_Rec_Type
1028 , p_old_CURR_DETAILS_rec IN QP_Currency_PUB.Curr_Details_Rec_Type :=
1029 QP_Currency_PUB.G_MISS_CURR_DETAILS_REC
1030 )
1031 IS
1032 BEGIN
1033
1034 x_return_status := FND_API.G_RET_STS_SUCCESS;
1035
1036 -- Validate CURR_DETAILS attributes
1037
1038 IF p_CURR_DETAILS_rec.conversion_date IS NOT NULL AND
1039 ( p_CURR_DETAILS_rec.conversion_date <>
1040 p_old_CURR_DETAILS_rec.conversion_date OR
1041 p_old_CURR_DETAILS_rec.conversion_date IS NULL )
1042 THEN
1043 IF NOT QP_Validate.Conversion_Date(p_CURR_DETAILS_rec.conversion_date) THEN
1044 x_return_status := FND_API.G_RET_STS_ERROR;
1045 END IF;
1046 END IF;
1047
1048 IF p_CURR_DETAILS_rec.conversion_date_type IS NOT NULL AND
1049 ( p_CURR_DETAILS_rec.conversion_date_type <>
1050 p_old_CURR_DETAILS_rec.conversion_date_type OR
1051 p_old_CURR_DETAILS_rec.conversion_date_type IS NULL )
1052 THEN
1053 IF NOT QP_Validate.Conversion_Date_Type(p_CURR_DETAILS_rec.conversion_date_type) THEN
1054 x_return_status := FND_API.G_RET_STS_ERROR;
1055 END IF;
1056 END IF;
1057
1058 /*
1059 IF p_CURR_DETAILS_rec.conversion_method IS NOT NULL AND
1060 ( p_CURR_DETAILS_rec.conversion_method <>
1061 p_old_CURR_DETAILS_rec.conversion_method OR
1062 p_old_CURR_DETAILS_rec.conversion_method IS NULL )
1063 THEN
1064 IF NOT QP_Validate.Conversion_Method(p_CURR_DETAILS_rec.conversion_method) THEN
1065 x_return_status := FND_API.G_RET_STS_ERROR;
1066 END IF;
1067 END IF;
1068 */
1069
1070 IF p_CURR_DETAILS_rec.conversion_type IS NOT NULL AND
1071 ( p_CURR_DETAILS_rec.conversion_type <>
1072 p_old_CURR_DETAILS_rec.conversion_type OR
1073 p_old_CURR_DETAILS_rec.conversion_type IS NULL )
1074 THEN
1075 IF NOT QP_Validate.Conversion_Type(p_CURR_DETAILS_rec.conversion_type) THEN
1076 x_return_status := FND_API.G_RET_STS_ERROR;
1077 END IF;
1078 END IF;
1079
1080 IF p_CURR_DETAILS_rec.created_by IS NOT NULL AND
1081 ( p_CURR_DETAILS_rec.created_by <>
1082 p_old_CURR_DETAILS_rec.created_by OR
1083 p_old_CURR_DETAILS_rec.created_by IS NULL )
1084 THEN
1085 IF NOT QP_Validate.Created_By(p_CURR_DETAILS_rec.created_by) THEN
1086 x_return_status := FND_API.G_RET_STS_ERROR;
1087 END IF;
1088 END IF;
1089
1090 IF p_CURR_DETAILS_rec.creation_date IS NOT NULL AND
1091 ( p_CURR_DETAILS_rec.creation_date <>
1092 p_old_CURR_DETAILS_rec.creation_date OR
1093 p_old_CURR_DETAILS_rec.creation_date IS NULL )
1094 THEN
1095 IF NOT QP_Validate.Creation_Date(p_CURR_DETAILS_rec.creation_date) THEN
1096 x_return_status := FND_API.G_RET_STS_ERROR;
1097 END IF;
1098 END IF;
1099
1100 IF p_CURR_DETAILS_rec.currency_detail_id IS NOT NULL AND
1101 ( p_CURR_DETAILS_rec.currency_detail_id <>
1102 p_old_CURR_DETAILS_rec.currency_detail_id OR
1103 p_old_CURR_DETAILS_rec.currency_detail_id IS NULL )
1104 THEN
1105 IF NOT QP_Validate.Currency_Detail(p_CURR_DETAILS_rec.currency_detail_id) THEN
1106 x_return_status := FND_API.G_RET_STS_ERROR;
1107 END IF;
1108 END IF;
1109
1110 IF p_CURR_DETAILS_rec.currency_header_id IS NOT NULL AND
1111 ( p_CURR_DETAILS_rec.currency_header_id <>
1112 p_old_CURR_DETAILS_rec.currency_header_id OR
1113 p_old_CURR_DETAILS_rec.currency_header_id IS NULL )
1114 THEN
1115 IF NOT QP_Validate.Currency_Header(p_CURR_DETAILS_rec.currency_header_id) THEN
1116 x_return_status := FND_API.G_RET_STS_ERROR;
1117 END IF;
1118 END IF;
1119
1120 IF p_CURR_DETAILS_rec.end_date_active IS NOT NULL AND
1121 ( p_CURR_DETAILS_rec.end_date_active <>
1122 p_old_CURR_DETAILS_rec.end_date_active OR
1123 p_old_CURR_DETAILS_rec.end_date_active IS NULL )
1124 THEN
1125 IF NOT QP_Validate.End_Date_Active(p_CURR_DETAILS_rec.end_date_active) THEN
1126 x_return_status := FND_API.G_RET_STS_ERROR;
1127 END IF;
1128 END IF;
1129
1130 IF p_CURR_DETAILS_rec.fixed_value IS NOT NULL AND
1131 ( p_CURR_DETAILS_rec.fixed_value <>
1132 p_old_CURR_DETAILS_rec.fixed_value OR
1133 p_old_CURR_DETAILS_rec.fixed_value IS NULL )
1134 THEN
1135 IF NOT QP_Validate.Fixed_Value(p_CURR_DETAILS_rec.fixed_value) THEN
1136 x_return_status := FND_API.G_RET_STS_ERROR;
1137 END IF;
1138 END IF;
1139
1140 IF p_CURR_DETAILS_rec.last_updated_by IS NOT NULL AND
1141 ( p_CURR_DETAILS_rec.last_updated_by <>
1142 p_old_CURR_DETAILS_rec.last_updated_by OR
1143 p_old_CURR_DETAILS_rec.last_updated_by IS NULL )
1144 THEN
1145 IF NOT QP_Validate.Last_Updated_By(p_CURR_DETAILS_rec.last_updated_by) THEN
1146 x_return_status := FND_API.G_RET_STS_ERROR;
1147 END IF;
1148 END IF;
1149
1150 IF p_CURR_DETAILS_rec.last_update_date IS NOT NULL AND
1151 ( p_CURR_DETAILS_rec.last_update_date <>
1152 p_old_CURR_DETAILS_rec.last_update_date OR
1153 p_old_CURR_DETAILS_rec.last_update_date IS NULL )
1154 THEN
1155 IF NOT QP_Validate.Last_Update_Date(p_CURR_DETAILS_rec.last_update_date) THEN
1156 x_return_status := FND_API.G_RET_STS_ERROR;
1157 END IF;
1158 END IF;
1159
1160 IF p_CURR_DETAILS_rec.last_update_login IS NOT NULL AND
1161 ( p_CURR_DETAILS_rec.last_update_login <>
1162 p_old_CURR_DETAILS_rec.last_update_login OR
1163 p_old_CURR_DETAILS_rec.last_update_login IS NULL )
1164 THEN
1165 IF NOT QP_Validate.Last_Update_Login(p_CURR_DETAILS_rec.last_update_login) THEN
1166 x_return_status := FND_API.G_RET_STS_ERROR;
1167 END IF;
1168 END IF;
1169
1170 IF p_CURR_DETAILS_rec.markup_formula_id IS NOT NULL AND
1171 ( p_CURR_DETAILS_rec.markup_formula_id <>
1172 p_old_CURR_DETAILS_rec.markup_formula_id OR
1173 p_old_CURR_DETAILS_rec.markup_formula_id IS NULL )
1174 THEN
1175 IF NOT QP_Validate.Markup_Formula(p_CURR_DETAILS_rec.markup_formula_id) THEN
1176 x_return_status := FND_API.G_RET_STS_ERROR;
1177 END IF;
1178 END IF;
1179
1180 IF p_CURR_DETAILS_rec.markup_operator IS NOT NULL AND
1181 ( p_CURR_DETAILS_rec.markup_operator <>
1182 p_old_CURR_DETAILS_rec.markup_operator OR
1183 p_old_CURR_DETAILS_rec.markup_operator IS NULL )
1184 THEN
1185 IF NOT QP_Validate.Markup_Operator(p_CURR_DETAILS_rec.markup_operator) THEN
1186 x_return_status := FND_API.G_RET_STS_ERROR;
1187 END IF;
1188 END IF;
1189
1190 IF p_CURR_DETAILS_rec.markup_value IS NOT NULL AND
1191 ( p_CURR_DETAILS_rec.markup_value <>
1192 p_old_CURR_DETAILS_rec.markup_value OR
1193 p_old_CURR_DETAILS_rec.markup_value IS NULL )
1194 THEN
1195 IF NOT QP_Validate.Markup_Value(p_CURR_DETAILS_rec.markup_value) THEN
1196 x_return_status := FND_API.G_RET_STS_ERROR;
1197 END IF;
1198 END IF;
1199
1200 IF p_CURR_DETAILS_rec.price_formula_id IS NOT NULL AND
1201 ( p_CURR_DETAILS_rec.price_formula_id <>
1202 p_old_CURR_DETAILS_rec.price_formula_id OR
1203 p_old_CURR_DETAILS_rec.price_formula_id IS NULL )
1204 THEN
1205 IF NOT QP_Validate.Price_Formula(p_CURR_DETAILS_rec.price_formula_id) THEN
1206 x_return_status := FND_API.G_RET_STS_ERROR;
1207 END IF;
1208 END IF;
1209
1210 IF p_CURR_DETAILS_rec.program_application_id IS NOT NULL AND
1211 ( p_CURR_DETAILS_rec.program_application_id <>
1212 p_old_CURR_DETAILS_rec.program_application_id OR
1213 p_old_CURR_DETAILS_rec.program_application_id IS NULL )
1214 THEN
1215 IF NOT QP_Validate.Program_Application(p_CURR_DETAILS_rec.program_application_id) THEN
1216 x_return_status := FND_API.G_RET_STS_ERROR;
1217 END IF;
1218 END IF;
1219
1220 IF p_CURR_DETAILS_rec.program_id IS NOT NULL AND
1221 ( p_CURR_DETAILS_rec.program_id <>
1222 p_old_CURR_DETAILS_rec.program_id OR
1223 p_old_CURR_DETAILS_rec.program_id IS NULL )
1224 THEN
1225 IF NOT QP_Validate.Program(p_CURR_DETAILS_rec.program_id) THEN
1226 x_return_status := FND_API.G_RET_STS_ERROR;
1227 END IF;
1228 END IF;
1229
1230 IF p_CURR_DETAILS_rec.program_update_date IS NOT NULL AND
1231 ( p_CURR_DETAILS_rec.program_update_date <>
1232 p_old_CURR_DETAILS_rec.program_update_date OR
1233 p_old_CURR_DETAILS_rec.program_update_date IS NULL )
1234 THEN
1235 IF NOT QP_Validate.Program_Update_Date(p_CURR_DETAILS_rec.program_update_date) THEN
1236 x_return_status := FND_API.G_RET_STS_ERROR;
1237 END IF;
1238 END IF;
1239
1240 IF p_CURR_DETAILS_rec.request_id IS NOT NULL AND
1241 ( p_CURR_DETAILS_rec.request_id <>
1242 p_old_CURR_DETAILS_rec.request_id OR
1243 p_old_CURR_DETAILS_rec.request_id IS NULL )
1244 THEN
1245 IF NOT QP_Validate.Request(p_CURR_DETAILS_rec.request_id) THEN
1246 x_return_status := FND_API.G_RET_STS_ERROR;
1247 END IF;
1248 END IF;
1249
1250 IF p_CURR_DETAILS_rec.rounding_factor IS NOT NULL AND
1251 ( p_CURR_DETAILS_rec.rounding_factor <>
1252 p_old_CURR_DETAILS_rec.rounding_factor OR
1253 p_old_CURR_DETAILS_rec.rounding_factor IS NULL )
1254 THEN
1255 IF NOT QP_Validate.Rounding_Factor(p_CURR_DETAILS_rec.rounding_factor) THEN
1256 x_return_status := FND_API.G_RET_STS_ERROR;
1257 END IF;
1258 END IF;
1259
1260 IF p_CURR_DETAILS_rec.selling_rounding_factor IS NOT NULL AND
1261 ( p_CURR_DETAILS_rec.selling_rounding_factor <>
1262 p_old_CURR_DETAILS_rec.selling_rounding_factor OR
1263 p_old_CURR_DETAILS_rec.selling_rounding_factor IS NULL )
1264 THEN
1265 IF NOT QP_Validate.Rounding_Factor(p_CURR_DETAILS_rec.selling_rounding_factor) THEN
1266 x_return_status := FND_API.G_RET_STS_ERROR;
1267 END IF;
1268 END IF;
1269
1270 IF p_CURR_DETAILS_rec.start_date_active IS NOT NULL AND
1271 ( p_CURR_DETAILS_rec.start_date_active <>
1272 p_old_CURR_DETAILS_rec.start_date_active OR
1273 p_old_CURR_DETAILS_rec.start_date_active IS NULL )
1274 THEN
1275 IF NOT QP_Validate.Start_Date_Active(p_CURR_DETAILS_rec.start_date_active) THEN
1276 x_return_status := FND_API.G_RET_STS_ERROR;
1277 END IF;
1278 END IF;
1279
1280 IF p_CURR_DETAILS_rec.to_currency_code IS NOT NULL AND
1281 ( p_CURR_DETAILS_rec.to_currency_code <>
1282 p_old_CURR_DETAILS_rec.to_currency_code OR
1283 p_old_CURR_DETAILS_rec.to_currency_code IS NULL )
1284 THEN
1285 IF NOT QP_Validate.To_Currency(p_CURR_DETAILS_rec.to_currency_code) THEN
1286 x_return_status := FND_API.G_RET_STS_ERROR;
1287 END IF;
1288 END IF;
1289
1290 IF p_CURR_DETAILS_rec.curr_attribute_type IS NOT NULL AND
1291 ( p_CURR_DETAILS_rec.curr_attribute_type <>
1292 p_old_CURR_DETAILS_rec.curr_attribute_type OR
1293 p_old_CURR_DETAILS_rec.curr_attribute_type IS NULL )
1294 THEN
1295 IF NOT QP_Validate.Curr_Attribute_Type(p_CURR_DETAILS_rec.curr_attribute_type) THEN
1296 x_return_status := FND_API.G_RET_STS_ERROR;
1297 END IF;
1298 END IF;
1299
1300 IF p_CURR_DETAILS_rec.curr_attribute_context IS NOT NULL AND
1301 ( p_CURR_DETAILS_rec.curr_attribute_context <>
1302 p_old_CURR_DETAILS_rec.curr_attribute_context OR
1303 p_old_CURR_DETAILS_rec.curr_attribute_context IS NULL )
1304 THEN
1305 IF NOT QP_Validate.Curr_Attribute_Context(p_CURR_DETAILS_rec.curr_attribute_context) THEN
1306 x_return_status := FND_API.G_RET_STS_ERROR;
1307 END IF;
1308 END IF;
1309
1310 IF p_CURR_DETAILS_rec.curr_attribute IS NOT NULL AND
1311 ( p_CURR_DETAILS_rec.curr_attribute <>
1312 p_old_CURR_DETAILS_rec.curr_attribute OR
1313 p_old_CURR_DETAILS_rec.curr_attribute IS NULL )
1314 THEN
1315 IF NOT QP_Validate.Curr_Attribute(p_CURR_DETAILS_rec.curr_attribute) THEN
1316 x_return_status := FND_API.G_RET_STS_ERROR;
1317 END IF;
1318 END IF;
1319
1320 IF p_CURR_DETAILS_rec.curr_attribute_value IS NOT NULL AND
1321 ( p_CURR_DETAILS_rec.curr_attribute_value <>
1322 p_old_CURR_DETAILS_rec.curr_attribute_value OR
1323 p_old_CURR_DETAILS_rec.curr_attribute_value IS NULL )
1324 THEN
1325 IF NOT QP_Validate.Curr_Attribute_Value(p_CURR_DETAILS_rec.curr_attribute_value) THEN
1326 x_return_status := FND_API.G_RET_STS_ERROR;
1327 END IF;
1328 END IF;
1329
1330 IF p_CURR_DETAILS_rec.precedence IS NOT NULL AND
1331 ( p_CURR_DETAILS_rec.precedence <>
1332 p_old_CURR_DETAILS_rec.precedence OR
1333 p_old_CURR_DETAILS_rec.precedence IS NULL )
1334 THEN
1335 IF NOT QP_Validate.Precedence(p_CURR_DETAILS_rec.precedence) THEN
1336 x_return_status := FND_API.G_RET_STS_ERROR;
1337 END IF;
1338 END IF;
1339
1340 IF (p_CURR_DETAILS_rec.attribute1 IS NOT NULL AND
1341 ( p_CURR_DETAILS_rec.attribute1 <>
1342 p_old_CURR_DETAILS_rec.attribute1 OR
1343 p_old_CURR_DETAILS_rec.attribute1 IS NULL ))
1344 OR (p_CURR_DETAILS_rec.attribute10 IS NOT NULL AND
1345 ( p_CURR_DETAILS_rec.attribute10 <>
1346 p_old_CURR_DETAILS_rec.attribute10 OR
1347 p_old_CURR_DETAILS_rec.attribute10 IS NULL ))
1348 OR (p_CURR_DETAILS_rec.attribute11 IS NOT NULL AND
1349 ( p_CURR_DETAILS_rec.attribute11 <>
1350 p_old_CURR_DETAILS_rec.attribute11 OR
1351 p_old_CURR_DETAILS_rec.attribute11 IS NULL ))
1352 OR (p_CURR_DETAILS_rec.attribute12 IS NOT NULL AND
1353 ( p_CURR_DETAILS_rec.attribute12 <>
1354 p_old_CURR_DETAILS_rec.attribute12 OR
1355 p_old_CURR_DETAILS_rec.attribute12 IS NULL ))
1356 OR (p_CURR_DETAILS_rec.attribute13 IS NOT NULL AND
1357 ( p_CURR_DETAILS_rec.attribute13 <>
1358 p_old_CURR_DETAILS_rec.attribute13 OR
1359 p_old_CURR_DETAILS_rec.attribute13 IS NULL ))
1360 OR (p_CURR_DETAILS_rec.attribute14 IS NOT NULL AND
1361 ( p_CURR_DETAILS_rec.attribute14 <>
1362 p_old_CURR_DETAILS_rec.attribute14 OR
1363 p_old_CURR_DETAILS_rec.attribute14 IS NULL ))
1364 OR (p_CURR_DETAILS_rec.attribute15 IS NOT NULL AND
1365 ( p_CURR_DETAILS_rec.attribute15 <>
1366 p_old_CURR_DETAILS_rec.attribute15 OR
1367 p_old_CURR_DETAILS_rec.attribute15 IS NULL ))
1368 OR (p_CURR_DETAILS_rec.attribute2 IS NOT NULL AND
1369 ( p_CURR_DETAILS_rec.attribute2 <>
1370 p_old_CURR_DETAILS_rec.attribute2 OR
1371 p_old_CURR_DETAILS_rec.attribute2 IS NULL ))
1372 OR (p_CURR_DETAILS_rec.attribute3 IS NOT NULL AND
1373 ( p_CURR_DETAILS_rec.attribute3 <>
1374 p_old_CURR_DETAILS_rec.attribute3 OR
1375 p_old_CURR_DETAILS_rec.attribute3 IS NULL ))
1376 OR (p_CURR_DETAILS_rec.attribute4 IS NOT NULL AND
1377 ( p_CURR_DETAILS_rec.attribute4 <>
1378 p_old_CURR_DETAILS_rec.attribute4 OR
1379 p_old_CURR_DETAILS_rec.attribute4 IS NULL ))
1380 OR (p_CURR_DETAILS_rec.attribute5 IS NOT NULL AND
1381 ( p_CURR_DETAILS_rec.attribute5 <>
1382 p_old_CURR_DETAILS_rec.attribute5 OR
1383 p_old_CURR_DETAILS_rec.attribute5 IS NULL ))
1384 OR (p_CURR_DETAILS_rec.attribute6 IS NOT NULL AND
1385 ( p_CURR_DETAILS_rec.attribute6 <>
1386 p_old_CURR_DETAILS_rec.attribute6 OR
1387 p_old_CURR_DETAILS_rec.attribute6 IS NULL ))
1388 OR (p_CURR_DETAILS_rec.attribute7 IS NOT NULL AND
1389 ( p_CURR_DETAILS_rec.attribute7 <>
1390 p_old_CURR_DETAILS_rec.attribute7 OR
1391 p_old_CURR_DETAILS_rec.attribute7 IS NULL ))
1392 OR (p_CURR_DETAILS_rec.attribute8 IS NOT NULL AND
1393 ( p_CURR_DETAILS_rec.attribute8 <>
1394 p_old_CURR_DETAILS_rec.attribute8 OR
1395 p_old_CURR_DETAILS_rec.attribute8 IS NULL ))
1396 OR (p_CURR_DETAILS_rec.attribute9 IS NOT NULL AND
1397 ( p_CURR_DETAILS_rec.attribute9 <>
1398 p_old_CURR_DETAILS_rec.attribute9 OR
1399 p_old_CURR_DETAILS_rec.attribute9 IS NULL ))
1400 OR (p_CURR_DETAILS_rec.context IS NOT NULL AND
1401 ( p_CURR_DETAILS_rec.context <>
1402 p_old_CURR_DETAILS_rec.context OR
1403 p_old_CURR_DETAILS_rec.context IS NULL ))
1404 THEN
1405
1406 -- These calls are temporarily commented out
1407
1408 /*
1409 FND_FLEX_DESC_VAL.Set_Column_Value
1410 ( column_name => 'ATTRIBUTE1'
1411 , column_value => p_CURR_DETAILS_rec.attribute1
1412 );
1413 FND_FLEX_DESC_VAL.Set_Column_Value
1414 ( column_name => 'ATTRIBUTE10'
1415 , column_value => p_CURR_DETAILS_rec.attribute10
1416 );
1417 FND_FLEX_DESC_VAL.Set_Column_Value
1418 ( column_name => 'ATTRIBUTE11'
1419 , column_value => p_CURR_DETAILS_rec.attribute11
1420 );
1421 FND_FLEX_DESC_VAL.Set_Column_Value
1422 ( column_name => 'ATTRIBUTE12'
1423 , column_value => p_CURR_DETAILS_rec.attribute12
1424 );
1425 FND_FLEX_DESC_VAL.Set_Column_Value
1426 ( column_name => 'ATTRIBUTE13'
1427 , column_value => p_CURR_DETAILS_rec.attribute13
1428 );
1429 FND_FLEX_DESC_VAL.Set_Column_Value
1430 ( column_name => 'ATTRIBUTE14'
1431 , column_value => p_CURR_DETAILS_rec.attribute14
1432 );
1433 FND_FLEX_DESC_VAL.Set_Column_Value
1434 ( column_name => 'ATTRIBUTE15'
1435 , column_value => p_CURR_DETAILS_rec.attribute15
1436 );
1437 FND_FLEX_DESC_VAL.Set_Column_Value
1438 ( column_name => 'ATTRIBUTE2'
1439 , column_value => p_CURR_DETAILS_rec.attribute2
1440 );
1441 FND_FLEX_DESC_VAL.Set_Column_Value
1442 ( column_name => 'ATTRIBUTE3'
1443 , column_value => p_CURR_DETAILS_rec.attribute3
1444 );
1445 FND_FLEX_DESC_VAL.Set_Column_Value
1446 ( column_name => 'ATTRIBUTE4'
1447 , column_value => p_CURR_DETAILS_rec.attribute4
1448 );
1449 FND_FLEX_DESC_VAL.Set_Column_Value
1450 ( column_name => 'ATTRIBUTE5'
1451 , column_value => p_CURR_DETAILS_rec.attribute5
1452 );
1453 FND_FLEX_DESC_VAL.Set_Column_Value
1454 ( column_name => 'ATTRIBUTE6'
1455 , column_value => p_CURR_DETAILS_rec.attribute6
1456 );
1457 FND_FLEX_DESC_VAL.Set_Column_Value
1458 ( column_name => 'ATTRIBUTE7'
1459 , column_value => p_CURR_DETAILS_rec.attribute7
1460 );
1461 FND_FLEX_DESC_VAL.Set_Column_Value
1462 ( column_name => 'ATTRIBUTE8'
1463 , column_value => p_CURR_DETAILS_rec.attribute8
1464 );
1465 FND_FLEX_DESC_VAL.Set_Column_Value
1466 ( column_name => 'ATTRIBUTE9'
1467 , column_value => p_CURR_DETAILS_rec.attribute9
1468 );
1469 FND_FLEX_DESC_VAL.Set_Column_Value
1470 ( column_name => 'CONTEXT'
1471 , column_value => p_CURR_DETAILS_rec.context
1472 );
1473 */
1474
1475 -- Validate descriptive flexfield.
1476
1477 IF NOT QP_Validate.Desc_Flex( 'CURR_DETAILS' ) THEN
1478 x_return_status := FND_API.G_RET_STS_ERROR;
1479 END IF;
1480
1481 END IF;
1482
1483 -- Done validating attributes
1484
1485 EXCEPTION
1486
1487 WHEN FND_API.G_EXC_ERROR THEN
1488
1489 x_return_status := FND_API.G_RET_STS_ERROR;
1490
1491 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1492
1493 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1494
1495 WHEN OTHERS THEN
1496
1497 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1498
1499 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1500 THEN
1501 OE_MSG_PUB.Add_Exc_Msg
1502 ( G_PKG_NAME
1503 , 'Attributes'
1504 );
1505 END IF;
1506
1507 END Attributes;
1508
1509 -- Procedure Entity_Delete
1510
1511 PROCEDURE Entity_Delete
1512 ( x_return_status OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1513 , p_CURR_DETAILS_rec IN QP_Currency_PUB.Curr_Details_Rec_Type
1514 )
1515 IS
1516 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
1517 BEGIN
1518
1519 -- Validate entity delete.
1520
1521 NULL;
1522
1523 -- Done.
1524
1525 x_return_status := l_return_status;
1526
1527 EXCEPTION
1528
1529 WHEN FND_API.G_EXC_ERROR THEN
1530
1531 x_return_status := FND_API.G_RET_STS_ERROR;
1532
1533 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1534
1535 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1536
1537 WHEN OTHERS THEN
1538
1539 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1540
1541 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1542 THEN
1543 OE_MSG_PUB.Add_Exc_Msg
1544 ( G_PKG_NAME
1545 , 'Entity_Delete'
1546 );
1547 END IF;
1548
1549 END Entity_Delete;
1550
1551 END QP_Validate_Curr_Details;