21: IS
22:
23: l_status VARCHAR2(1);
24: BEGIN
25: l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
26: IF l_debug = FND_API.G_TRUE THEN
27: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_insert_into_tmp = '
28: || l_insert_into_tmp);
29: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_price_formula_id = '
23: l_status VARCHAR2(1);
24: BEGIN
25: l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
26: IF l_debug = FND_API.G_TRUE THEN
27: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_insert_into_tmp = '
28: || l_insert_into_tmp);
29: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_price_formula_id = '
30: || l_price_formula_id);
31: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_operand_value = '
25: l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
26: IF l_debug = FND_API.G_TRUE THEN
27: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_insert_into_tmp = '
28: || l_insert_into_tmp);
29: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_price_formula_id = '
30: || l_price_formula_id);
31: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_operand_value = '
32: || l_operand_value);
33: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_pricing_effective_date = '
27: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_insert_into_tmp = '
28: || l_insert_into_tmp);
29: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_price_formula_id = '
30: || l_price_formula_id);
31: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_operand_value = '
32: || l_operand_value);
33: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_pricing_effective_date = '
34: || l_pricing_effective_date);
35: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_line_index = '
29: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_price_formula_id = '
30: || l_price_formula_id);
31: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_operand_value = '
32: || l_operand_value);
33: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_pricing_effective_date = '
34: || l_pricing_effective_date);
35: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_line_index = '
36: || l_line_index);
37: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_modifier_value = '
31: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_operand_value = '
32: || l_operand_value);
33: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_pricing_effective_date = '
34: || l_pricing_effective_date);
35: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_line_index = '
36: || l_line_index);
37: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_modifier_value = '
38: || l_modifier_value);
39: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_formula_based_value = '
33: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_pricing_effective_date = '
34: || l_pricing_effective_date);
35: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_line_index = '
36: || l_line_index);
37: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_modifier_value = '
38: || l_modifier_value);
39: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_formula_based_value = '
40: || l_formula_based_value);
41: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_return_status = '
35: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_line_index = '
36: || l_line_index);
37: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_modifier_value = '
38: || l_modifier_value);
39: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_formula_based_value = '
40: || l_formula_based_value);
41: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_return_status = '
42: || l_return_status);
43:
37: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_modifier_value = '
38: || l_modifier_value);
39: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_formula_based_value = '
40: || l_formula_based_value);
41: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - l_return_status = '
42: || l_return_status);
43:
44: END IF;
45: l_return_status := FND_API.G_RET_STS_SUCCESS;
75: qp_npreq_line_attrs_tmp lattr
76: WHERE
77: attribute_type IN ('PRICING', 'PRODUCT')
78: AND
79: pricing_status_code = QP_PREQ_GRP.G_STATUS_UNCHANGED
80: AND
81: EXISTS(
82: SELECT format_type
83: FROM fnd_flex_value_sets VSET,
112: qp_npreq_line_attrs_tmp lattr
113: WHERE
114: attribute_type IN ('PRICING', 'PRODUCT')
115: AND
116: pricing_status_code = QP_PREQ_GRP.G_STATUS_UNCHANGED
117: AND
118: NOT EXISTS(
119: SELECT format_type
120: FROM fnd_flex_value_sets VSET,
151: qp_npreq_line_attrs_tmp lattr
152: WHERE
153: attribute_type IN ('PRICING', 'PRODUCT')
154: AND
155: pricing_status_code = QP_PREQ_GRP.G_STATUS_UNCHANGED
156: AND
157: EXISTS(
158: SELECT format_type
159: FROM fnd_flex_value_sets vset
192: qp_npreq_line_attrs_tmp lattr
193: WHERE
194: attribute_type IN ('PRICING', 'PRODUCT')
195: AND
196: pricing_status_code = QP_PREQ_GRP.G_STATUS_UNCHANGED
197: AND
198: NOT EXISTS(
199: SELECT format_type
200: FROM fnd_flex_value_sets vset
238: END IF;
239:
240:
241: IF l_debug = FND_API.G_TRUE THEN
242: QP_PREQ_GRP.engine_debug('Formula return status: '||l_status);
243: QP_PREQ_GRP.engine_debug('Formula base rate: '|| l_formula_based_value);
244:
245: IF l_status IS NULL THEN
246: QP_PREQ_GRP.engine_debug('Formula return status is NULL');
239:
240:
241: IF l_debug = FND_API.G_TRUE THEN
242: QP_PREQ_GRP.engine_debug('Formula return status: '||l_status);
243: QP_PREQ_GRP.engine_debug('Formula base rate: '|| l_formula_based_value);
244:
245: IF l_status IS NULL THEN
246: QP_PREQ_GRP.engine_debug('Formula return status is NULL');
247: QP_PREQ_GRP.engine_debug('FND_API.G_RET_STS_ERROR: '||FND_API.G_RET_STS_ERROR);
242: QP_PREQ_GRP.engine_debug('Formula return status: '||l_status);
243: QP_PREQ_GRP.engine_debug('Formula base rate: '|| l_formula_based_value);
244:
245: IF l_status IS NULL THEN
246: QP_PREQ_GRP.engine_debug('Formula return status is NULL');
247: QP_PREQ_GRP.engine_debug('FND_API.G_RET_STS_ERROR: '||FND_API.G_RET_STS_ERROR);
248: null;
249: END IF;
250:
243: QP_PREQ_GRP.engine_debug('Formula base rate: '|| l_formula_based_value);
244:
245: IF l_status IS NULL THEN
246: QP_PREQ_GRP.engine_debug('Formula return status is NULL');
247: QP_PREQ_GRP.engine_debug('FND_API.G_RET_STS_ERROR: '||FND_API.G_RET_STS_ERROR);
248: null;
249: END IF;
250:
251: END IF;
253:
254: WHEN OTHERS THEN
255:
256: IF l_debug = FND_API.G_TRUE THEN
257: qp_preq_grp.engine_debug('QP_MULTI_CURRENCY_PVT.Process_Formula_API - OTHERS exception '
258: || SQLERRM);
259: END IF;
260: l_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
261:
377:
378: BEGIN
379:
380: --If there is a formula, then need to insert pricing attributes once for each run
381: l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
382: IF l_debug = FND_API.G_TRUE THEN
383: qp_preq_grp.engine_debug('Currency_Conversion_API - Enter');
384: END IF;
385:
379:
380: --If there is a formula, then need to insert pricing attributes once for each run
381: l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
382: IF l_debug = FND_API.G_TRUE THEN
383: qp_preq_grp.engine_debug('Currency_Conversion_API - Enter');
384: END IF;
385:
386: IF l_debug = FND_API.G_TRUE THEN
387: qp_preq_grp.engine_debug('Currency_Conversion_API - p_user_conversion_rate' || p_user_conversion_rate);
383: qp_preq_grp.engine_debug('Currency_Conversion_API - Enter');
384: END IF;
385:
386: IF l_debug = FND_API.G_TRUE THEN
387: qp_preq_grp.engine_debug('Currency_Conversion_API - p_user_conversion_rate' || p_user_conversion_rate);
388: qp_preq_grp.engine_debug('Currency_Conversion_API - p_user_conversion_type' || p_user_conversion_type);
389: qp_preq_grp.engine_debug('Currency_Conversion_API - p_function_currency' || p_function_currency);
390: qp_preq_grp.engine_debug('Currency_Conversion_API - p_rounding_flag' || p_rounding_flag);
391:
384: END IF;
385:
386: IF l_debug = FND_API.G_TRUE THEN
387: qp_preq_grp.engine_debug('Currency_Conversion_API - p_user_conversion_rate' || p_user_conversion_rate);
388: qp_preq_grp.engine_debug('Currency_Conversion_API - p_user_conversion_type' || p_user_conversion_type);
389: qp_preq_grp.engine_debug('Currency_Conversion_API - p_function_currency' || p_function_currency);
390: qp_preq_grp.engine_debug('Currency_Conversion_API - p_rounding_flag' || p_rounding_flag);
391:
392: END IF;
385:
386: IF l_debug = FND_API.G_TRUE THEN
387: qp_preq_grp.engine_debug('Currency_Conversion_API - p_user_conversion_rate' || p_user_conversion_rate);
388: qp_preq_grp.engine_debug('Currency_Conversion_API - p_user_conversion_type' || p_user_conversion_type);
389: qp_preq_grp.engine_debug('Currency_Conversion_API - p_function_currency' || p_function_currency);
390: qp_preq_grp.engine_debug('Currency_Conversion_API - p_rounding_flag' || p_rounding_flag);
391:
392: END IF;
393: OPEN c_currency_conversions;
386: IF l_debug = FND_API.G_TRUE THEN
387: qp_preq_grp.engine_debug('Currency_Conversion_API - p_user_conversion_rate' || p_user_conversion_rate);
388: qp_preq_grp.engine_debug('Currency_Conversion_API - p_user_conversion_type' || p_user_conversion_type);
389: qp_preq_grp.engine_debug('Currency_Conversion_API - p_function_currency' || p_function_currency);
390: qp_preq_grp.engine_debug('Currency_Conversion_API - p_rounding_flag' || p_rounding_flag);
391:
392: END IF;
393: OPEN c_currency_conversions;
394:
438: LIMIT rows;
439:
440:
441: IF l_debug = FND_API.G_TRUE THEN
442: qp_preq_grp.engine_debug('Currency_Conversion_API - record count = '||line_index_t.count);
443: END IF;
444: IF line_index_t.count > 0 THEN
445: --process every record in this fetch
446:
467: l_operand_value := NULL;
468: result_operand_value_t(J) := NULL;
469:
470: IF l_debug = FND_API.G_TRUE THEN
471: qp_preq_grp.engine_debug('Currency_Conversion_API - conversion_type = '||conversion_type_t(J));
472:
473: END IF;
474: IF conversion_type_t(J) = 'FIXED' THEN
475:
476: -- Use the fixed value
477: l_conversion_rate := fixed_value_t(J);
478:
479: IF l_debug = FND_API.G_TRUE THEN
480: qp_preq_grp.engine_debug('Currency_Conversion_API - FIXED l_conversion_rate = '
481: ||l_conversion_rate);
482: END IF;
483:
484: ELSIF conversion_type_t(J) = 'TRANSACTION' THEN
491:
492: -- Only when function and base currency are same, use the OM rate
493:
494: IF l_debug = FND_API.G_TRUE THEN
495: qp_preq_grp.engine_debug('Currency_Conversion_API - TRANSACTION function and base currency same ');
496: END IF;
497:
498: -- [julin/4099147] integrating apps users expect entered rate to
499: -- be from transaction currency to functional currency
498: -- [julin/4099147] integrating apps users expect entered rate to
499: -- be from transaction currency to functional currency
500: l_conversion_rate := 1/p_user_conversion_rate;
501: IF l_debug = FND_API.G_TRUE THEN
502: qp_preq_grp.engine_debug('Currency_Conversion_API - TRANSACTION l_conversion_rate = '
503: ||l_conversion_rate);
504:
505: END IF;
506: ELSE
505: END IF;
506: ELSE
507:
508: IF l_debug = FND_API.G_TRUE THEN
509: qp_preq_grp.engine_debug('Currency_Conversion_API - TRANSACTION function and base currency different ');
510: END IF;
511: -- Function and base currency not same, raise error
512: IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
513: FND_MESSAGE.SET_NAME('QP', 'QP_DIFF_FUNC_AND_BASE_CURR');
514: FND_MESSAGE.SET_TOKEN('BASE_CURR', base_currency_code_t(J));
515: FND_MESSAGE.SET_TOKEN('FUNC_CURR', p_function_currency);
516:
517: error_message_t(J) := FND_MESSAGE.GET;
518: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
519: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
520:
521: END IF;
522:
515: FND_MESSAGE.SET_TOKEN('FUNC_CURR', p_function_currency);
516:
517: error_message_t(J) := FND_MESSAGE.GET;
518: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
519: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
520:
521: END IF;
522:
523: RAISE FND_API.G_EXC_ERROR;
527: ELSIF p_user_conversion_type IS NOT NULL THEN
528: -- p_user_conversion_type <> 'USER' THEN
529:
530: IF l_debug = FND_API.G_TRUE THEN
531: qp_preq_grp.engine_debug('Currency_Conversion_API - x_from_currency = '||base_currency_code_t(J) );
532: qp_preq_grp.engine_debug('Currency_Conversion_API - x_to_currency = '|| to_currency_code_t(J));
533: qp_preq_grp.engine_debug('Currency_Conversion_API - x_conversion_date = '|| pricing_effective_date_t(J));
534: qp_preq_grp.engine_debug('Currency_Conversion_API - x_conversion_type = '|| p_user_conversion_type);
535:
528: -- p_user_conversion_type <> 'USER' THEN
529:
530: IF l_debug = FND_API.G_TRUE THEN
531: qp_preq_grp.engine_debug('Currency_Conversion_API - x_from_currency = '||base_currency_code_t(J) );
532: qp_preq_grp.engine_debug('Currency_Conversion_API - x_to_currency = '|| to_currency_code_t(J));
533: qp_preq_grp.engine_debug('Currency_Conversion_API - x_conversion_date = '|| pricing_effective_date_t(J));
534: qp_preq_grp.engine_debug('Currency_Conversion_API - x_conversion_type = '|| p_user_conversion_type);
535:
536: END IF;
529:
530: IF l_debug = FND_API.G_TRUE THEN
531: qp_preq_grp.engine_debug('Currency_Conversion_API - x_from_currency = '||base_currency_code_t(J) );
532: qp_preq_grp.engine_debug('Currency_Conversion_API - x_to_currency = '|| to_currency_code_t(J));
533: qp_preq_grp.engine_debug('Currency_Conversion_API - x_conversion_date = '|| pricing_effective_date_t(J));
534: qp_preq_grp.engine_debug('Currency_Conversion_API - x_conversion_type = '|| p_user_conversion_type);
535:
536: END IF;
537: -- use the functional conversion rate defined in GL(from base currency to order currency)
530: IF l_debug = FND_API.G_TRUE THEN
531: qp_preq_grp.engine_debug('Currency_Conversion_API - x_from_currency = '||base_currency_code_t(J) );
532: qp_preq_grp.engine_debug('Currency_Conversion_API - x_to_currency = '|| to_currency_code_t(J));
533: qp_preq_grp.engine_debug('Currency_Conversion_API - x_conversion_date = '|| pricing_effective_date_t(J));
534: qp_preq_grp.engine_debug('Currency_Conversion_API - x_conversion_type = '|| p_user_conversion_type);
535:
536: END IF;
537: -- use the functional conversion rate defined in GL(from base currency to order currency)
538: l_conversion_rate := gl_currency_api.get_rate_sql
543: ,x_conversion_type => p_user_conversion_type
544: );
545:
546: IF l_debug = FND_API.G_TRUE THEN
547: qp_preq_grp.engine_debug('Currency_Conversion_API - GL l_conversion_rate = '|| l_conversion_rate);
548: END IF;
549:
550: IF l_conversion_rate = -1 THEN
551:
557: FND_MESSAGE.SET_TOKEN('CONV_DATE', pricing_effective_date_t(J));
558: FND_MESSAGE.SET_TOKEN('CONV_TYPE', p_user_conversion_type);
559:
560: error_message_t(J) := FND_MESSAGE.GET;
561: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
562: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
563:
564: END IF;
565:
558: FND_MESSAGE.SET_TOKEN('CONV_TYPE', p_user_conversion_type);
559:
560: error_message_t(J) := FND_MESSAGE.GET;
561: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
562: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
563:
564: END IF;
565:
566: RAISE FND_API.G_EXC_ERROR;
571: IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
572: FND_MESSAGE.SET_NAME('QP','QP_INVALID_CURRENCY');
573:
574: error_message_t(J) := FND_MESSAGE.GET;
575: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
576: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
577:
578:
579: END IF;
572: FND_MESSAGE.SET_NAME('QP','QP_INVALID_CURRENCY');
573:
574: error_message_t(J) := FND_MESSAGE.GET;
575: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
576: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
577:
578:
579: END IF;
580:
585:
586: ELSE
587:
588: IF l_debug = FND_API.G_TRUE THEN
589: qp_preq_grp.engine_debug('Currency_Conversion_API - TRANSACTION no conversion type ');
590: END IF;
591: -- For 'TRANSACTION' conv, OM did not pass user conversion type, raise error
592: IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
593:
593:
594: FND_MESSAGE.SET_NAME('QP', 'QP_NO_USER_CONVTYPE_F_TRANSACT');
595:
596: error_message_t(J) := FND_MESSAGE.GET;
597: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
598: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
599:
600: END IF;
601:
594: FND_MESSAGE.SET_NAME('QP', 'QP_NO_USER_CONVTYPE_F_TRANSACT');
595:
596: error_message_t(J) := FND_MESSAGE.GET;
597: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
598: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
599:
600: END IF;
601:
602:
626:
627: IF l_formula_status <> FND_API.G_RET_STS_SUCCESS THEN
628:
629: IF l_debug = FND_API.G_TRUE THEN
630: qp_preq_grp.engine_debug('Currency_Conversion_API - FORMULA not success');
631: END IF;
632: -- Formula calculation failed, raise error
633: IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
634: FND_MESSAGE.SET_NAME('QP', 'QP_FORMULA_CALC_FAILURE');
633: IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
634: FND_MESSAGE.SET_NAME('QP', 'QP_FORMULA_CALC_FAILURE');
635:
636: error_message_t(J) := FND_MESSAGE.GET;
637: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
638: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
639:
640: END IF;
641:
634: FND_MESSAGE.SET_NAME('QP', 'QP_FORMULA_CALC_FAILURE');
635:
636: error_message_t(J) := FND_MESSAGE.GET;
637: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
638: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
639:
640: END IF;
641:
642: RAISE FND_API.G_EXC_ERROR;
652: -- Use the rate returned from the formula calculation
653: l_conversion_rate := l_formula_based_value;
654:
655: IF l_debug = FND_API.G_TRUE THEN
656: qp_preq_grp.engine_debug('Currency_Conversion_API - FORMULA l_conversion_rate'
657: || l_conversion_rate);
658: END IF;
659: --End of processing conversion type ='FORMULA'
660:
660:
661: ELSIF conversion_type_t(J) IS NULL THEN
662:
663: IF l_debug = FND_API.G_TRUE THEN
664: qp_preq_grp.engine_debug('Currency_Conversion_API - null conversion type');
665: END IF;
666: IF to_currency_code_t(J) = base_currency_code_t(J) THEN
667:
668: IF l_debug = FND_API.G_TRUE THEN
665: END IF;
666: IF to_currency_code_t(J) = base_currency_code_t(J) THEN
667:
668: IF l_debug = FND_API.G_TRUE THEN
669: qp_preq_grp.engine_debug('Currency_Conversion_API - null conversion type - curr matches');
670: END IF;
671: --There order currency and base currency are same, the conversion rate is 1
672:
673: l_conversion_rate := 1;
678: ELSE --All conversion types other than FIXED, TRANSACTION and FORMULA
679:
680: IF conversion_date_type_t(J) = 'FIXED' THEN
681: IF l_debug = FND_API.G_TRUE THEN
682: qp_preq_grp.engine_debug('Currency_Conversion_API - date type FIXED');
683: END IF;
684: l_conversion_date := conversion_date_t(J);
685: ELSE
686: l_conversion_date := pricing_effective_date_t(J);
694: ,x_conversion_type => conversion_type_t(J)
695: );
696:
697: IF l_debug = FND_API.G_TRUE THEN
698: qp_preq_grp.engine_debug('Currency_Conversion_API - GL2 l_conversion_rate'
699: || l_conversion_rate);
700: END IF;
701: IF l_conversion_rate = -1 THEN
702:
708: FND_MESSAGE.SET_TOKEN('CONV_DATE', l_conversion_date);
709: FND_MESSAGE.SET_TOKEN('CONV_TYPE', conversion_type_t(J));
710:
711: error_message_t(J) := FND_MESSAGE.GET;
712: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
713: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
714:
715: END IF;
716:
709: FND_MESSAGE.SET_TOKEN('CONV_TYPE', conversion_type_t(J));
710:
711: error_message_t(J) := FND_MESSAGE.GET;
712: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
713: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
714:
715: END IF;
716:
717: RAISE FND_API.G_EXC_ERROR;
722: IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
723: FND_MESSAGE.SET_NAME('QP','QP_INVALID_CURRENCY');
724:
725: error_message_t(J) := FND_MESSAGE.GET;
726: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
727: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
728:
729: END IF;
730:
723: FND_MESSAGE.SET_NAME('QP','QP_INVALID_CURRENCY');
724:
725: error_message_t(J) := FND_MESSAGE.GET;
726: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
727: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
728:
729: END IF;
730:
731: RAISE FND_API.G_EXC_ERROR;
738: --End of processing of conversion_rate
739:
740:
741: IF l_debug = FND_API.G_TRUE THEN
742: qp_preq_grp.engine_debug('Currency_Conversion_API - operand_value = '
743: || operand_value_t(J));
744: qp_preq_grp.engine_debug('Currency_Conversion_API - l_conversion_rate = '
745: || l_conversion_rate);
746:
740:
741: IF l_debug = FND_API.G_TRUE THEN
742: qp_preq_grp.engine_debug('Currency_Conversion_API - operand_value = '
743: || operand_value_t(J));
744: qp_preq_grp.engine_debug('Currency_Conversion_API - l_conversion_rate = '
745: || l_conversion_rate);
746:
747: END IF;
748: -- Bug 2929366 - removed the NVL so that if the operand is null,
751: --result_operand_value_t(J) := NVL(operand_value_t(J), 1) * l_conversion_rate;
752: result_operand_value_t(J) := operand_value_t(J) * l_conversion_rate;
753:
754: IF l_debug = FND_API.G_TRUE THEN
755: qp_preq_grp.engine_debug('Currency_Conversion_API - result_operand_value = '
756: || result_operand_value_t(J));
757: END IF;
758: -- Start processing Markup
759:
757: END IF;
758: -- Start processing Markup
759:
760: IF l_debug = FND_API.G_TRUE THEN
761: qp_preq_grp.engine_debug('Currency_Conversion_API - markup_value = '
762: || markup_value_t(J));
763: qp_preq_grp.engine_debug('Currency_Conversion_API - markup_formula_id = '
764: || markup_formula_id_t(J));
765: qp_preq_grp.engine_debug('Currency_Conversion_API - markup_operator = '
759:
760: IF l_debug = FND_API.G_TRUE THEN
761: qp_preq_grp.engine_debug('Currency_Conversion_API - markup_value = '
762: || markup_value_t(J));
763: qp_preq_grp.engine_debug('Currency_Conversion_API - markup_formula_id = '
764: || markup_formula_id_t(J));
765: qp_preq_grp.engine_debug('Currency_Conversion_API - markup_operator = '
766: || markup_operator_t(J));
767:
761: qp_preq_grp.engine_debug('Currency_Conversion_API - markup_value = '
762: || markup_value_t(J));
763: qp_preq_grp.engine_debug('Currency_Conversion_API - markup_formula_id = '
764: || markup_formula_id_t(J));
765: qp_preq_grp.engine_debug('Currency_Conversion_API - markup_operator = '
766: || markup_operator_t(J));
767:
768: END IF;
769: IF markup_value_t(J) IS NOT NULL and markup_formula_id_t(J) IS NULL THEN
772:
773: result_operand_value_t(J) := result_operand_value_t(J) +
774: (result_operand_value_t(J) * (markup_value_t(J) / 100));
775: IF l_debug = FND_API.G_TRUE THEN
776: qp_preq_grp.engine_debug('Currency_Conversion_API - markup % result_operand_value = '
777: || result_operand_value_t(J));
778:
779: END IF;
780: ELSIF markup_operator_t(J) = 'AMT' THEN
780: ELSIF markup_operator_t(J) = 'AMT' THEN
781:
782: result_operand_value_t(J) := result_operand_value_t(J) + markup_value_t(J);
783: IF l_debug = FND_API.G_TRUE THEN
784: qp_preq_grp.engine_debug('Currency_Conversion_API - markup AMT result_operand_value = '
785: || result_operand_value_t(J));
786: END IF;
787:
788: END IF;
792:
793:
794: IF markup_formula_id_t(J) IS NOT NULL THEN
795: IF l_debug = FND_API.G_TRUE THEN
796: qp_preq_grp.engine_debug('Currency_Conversion_API - markup formula NOT null ');
797: END IF;
798:
799: --call the process formula API
800:
813:
814: IF l_formula_status <> FND_API.G_RET_STS_SUCCESS THEN
815:
816: IF l_debug = FND_API.G_TRUE THEN
817: qp_preq_grp.engine_debug('Currency_Conversion_API - markup formula fails ');
818: END IF;
819: -- Formula calculation failed, raise error
820: IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
821: FND_MESSAGE.SET_NAME('QP', 'QP_FORMULA_CALC_FAILURE');
820: IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
821: FND_MESSAGE.SET_NAME('QP', 'QP_FORMULA_CALC_FAILURE');
822:
823: error_message_t(J) := FND_MESSAGE.GET;
824: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
825: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
826:
827: END IF;
828:
821: FND_MESSAGE.SET_NAME('QP', 'QP_FORMULA_CALC_FAILURE');
822:
823: error_message_t(J) := FND_MESSAGE.GET;
824: status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
825: lines_status_code_t(J) := QP_PREQ_GRP.G_STATUS_OTHER_ERRORS;
826:
827: END IF;
828:
829: RAISE FND_API.G_EXC_ERROR;
838: result_operand_value_t(J) := result_operand_value_t(J) +
839: (result_operand_value_t(J) * (l_formula_based_value/100));
840:
841: IF l_debug = FND_API.G_TRUE THEN
842: qp_preq_grp.engine_debug('Currency_Conversion_API - markup % result_operand_value = '
843: || result_operand_value_t(J));
844: END IF;
845: ELSIF markup_operator_t(J) = 'AMT' THEN
846:
845: ELSIF markup_operator_t(J) = 'AMT' THEN
846:
847: result_operand_value_t(J) := result_operand_value_t(J) + l_formula_based_value;
848: IF l_debug = FND_API.G_TRUE THEN
849: qp_preq_grp.engine_debug('Currency_Conversion_API - markup AMT result_operand_value = '
850: || result_operand_value_t(J));
851:
852: END IF;
853: END IF;
859:
860: -- l_conversion_rate := l_conversion_rate * Value returned from Rounding;
861: if p_rounding_flag = 'Y' then
862: IF l_debug = FND_API.G_TRUE THEN
863: qp_preq_grp.engine_debug('Currency_Conversion_API - p_rounding_flag = '
864: || p_rounding_flag);
865: END IF;
866: qp_util_pub.round_price(
867: P_OPERAND => result_operand_value_t(J)
876: );
877:
878: IF l_round_price_status <> 'S' THEN
879: IF l_debug = FND_API.G_TRUE THEN
880: qp_preq_grp.engine_debug('Currency_Conversion_API - round_price fails ');
881: END IF;
882:
883: -- Formula calculation failed, raise error
884: IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
891: RAISE FND_API.G_EXC_ERROR;
892:
893: END IF;
894: IF l_debug = FND_API.G_TRUE THEN
895: qp_preq_grp.engine_debug('Currency_Conversion_API - after rounding result_operand_value = '
896: || result_operand_value_t(J));
897:
898: END IF;
899: END IF; -- rounding flag
901: EXCEPTION
902:
903: WHEN FND_API.G_EXC_ERROR THEN
904: IF l_debug = FND_API.G_TRUE THEN
905: qp_preq_grp.engine_debug('Currency_Conversion_API - handle exception FND_API.G_EXC_ERROR');
906:
907: END IF;
908: NULL;
909:
917:
918: END IF; --IF line_index_t.count>0
919:
920: IF l_debug = FND_API.G_TRUE THEN
921: qp_preq_grp.engine_debug('Currency_Conversion_API - BEFORE updating the temp tables = ');
922: qp_preq_grp.engine_debug('Currency_Conversion_API - line_index_t.count' || line_index_t.count);
923: END IF;
924: --sql statement upd1
925: IF line_index_t.count > 0 THEN
918: END IF; --IF line_index_t.count>0
919:
920: IF l_debug = FND_API.G_TRUE THEN
921: qp_preq_grp.engine_debug('Currency_Conversion_API - BEFORE updating the temp tables = ');
922: qp_preq_grp.engine_debug('Currency_Conversion_API - line_index_t.count' || line_index_t.count);
923: END IF;
924: --sql statement upd1
925: IF line_index_t.count > 0 THEN
926:
924: --sql statement upd1
925: IF line_index_t.count > 0 THEN
926:
927: IF l_debug = FND_API.G_TRUE THEN
928: qp_preq_grp.engine_debug('Currency_Conversion_API - updating the temp tables = ');
929:
930: END IF;
931: FORALL K IN line_index_t.FIRST..line_index_t.LAST
932:
950:
951: END IF;
952:
953: IF l_debug = FND_API.G_TRUE THEN
954: qp_preq_grp.engine_debug('Currency_Conversion_API - after updating the temp tables ');
955:
956: END IF;
957: EXIT WHEN c_currency_conversions%NOTFOUND;
958:
987:
988: WHEN OTHERS THEN
989:
990: IF l_debug = FND_API.G_TRUE THEN
991: qp_preq_grp.engine_debug('Currency_Conversion_API - OTHERS exception SQLERRM' || SQLERRM);
992: END IF;
993: l_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
994:
995: IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1005: CLOSE c_currency_conversions;
1006: END IF;
1007:
1008: IF l_debug = FND_API.G_TRUE THEN
1009: qp_preq_grp.engine_debug('Currency_Conversion_API - End');
1010: END IF;
1011: END Currency_Conversion_Api;
1012:
1013: END QP_MULTI_CURRENCY_PVT;