-- IDEMPIERE-4083 currency rate by document or by transaction -- Fix wrong pl/sql functions CREATE OR REPLACE FUNCTION currencyConvertInvoice( p_c_invoice_id in number, p_currency_to_id in number, p_amt in number DEFAULT NULL, p_conversiondate in date DEFAULT NULL) RETURN number AS v_GrandTotal NUMBER; v_ConversionType_ID NUMBER; v_Client_ID NUMBER; v_Org_ID NUMBER; v_Currency_ID NUMBER; v_CurrencyRate NUMBER; v_DateAcct DATE; v_BaseCurrency_ID NUMBER; v_IsOverrideCurrencyRate CHAR(1); BEGIN SELECT AD_Client_ID, AD_Org_ID, DateAcct, C_Currency_ID, C_ConversionType_ID, CurrencyRate, GrandTotal, IsOverrideCurrencyRate INTO v_Client_ID, v_Org_ID, v_DateAcct, v_Currency_ID, v_ConversionType_ID, v_CurrencyRate, v_GrandTotal, v_IsOverrideCurrencyRate FROM C_Invoice WHERE C_Invoice_ID=p_C_Invoice_ID; SELECT sc.C_Currency_ID INTO v_BaseCurrency_ID FROM AD_ClientInfo ci JOIN C_AcctSchema sc ON ci.C_AcctSchema1_ID=sc.C_AcctSchema_ID WHERE ci.AD_Client_ID=v_Client_ID; IF v_BaseCurrency_ID=p_Currency_To_id AND Coalesce(v_CurrencyRate,0) > 0 AND v_Currency_ID != p_Currency_To_id AND v_IsOverrideCurrencyRate='Y' THEN RETURN currencyRound(Coalesce(p_Amt,v_GrandTotal)*v_CurrencyRate, p_Currency_To_id, null); END IF; RETURN currencyConvert(Coalesce(p_Amt,v_GrandTotal), v_Currency_ID, p_Currency_To_id, Coalesce(p_conversionDate,v_DateAcct), v_ConversionType_ID, v_Client_ID, v_Org_ID); END currencyConvertInvoice; / CREATE OR REPLACE FUNCTION currencyConvertPayment ( p_C_Payment_ID IN NUMBER, p_Currency_To_id IN NUMBER, p_Amt IN NUMBER DEFAULT NULL, p_conversionDate IN DATE DEFAULT NULL ) RETURN NUMBER AS v_Rate NUMBER; v_PayAmt NUMBER; v_ConversionType_ID NUMBER; v_Client_ID NUMBER; v_Org_ID NUMBER; v_Currency_ID NUMBER; v_CurrencyRate NUMBER; v_ConvertedAmt NUMBER; v_DateAcct DATE; v_BaseCurrency_ID NUMBER; v_IsOverrideCurrencyRate Char(1); BEGIN SELECT AD_Client_ID, AD_Org_ID, DateAcct, C_Currency_ID, C_ConversionType_ID, CurrencyRate, ConvertedAmt, PayAmt, IsOverrideCurrencyRate INTO v_Client_ID, v_Org_ID, v_DateAcct, v_Currency_ID, v_ConversionType_ID, v_CurrencyRate, v_ConvertedAmt, v_PayAmt, v_IsOverrideCurrencyRate FROM C_Payment WHERE C_Payment_ID=p_C_Payment_ID; SELECT sc.C_Currency_ID INTO v_BaseCurrency_ID FROM AD_ClientInfo ci JOIN C_AcctSchema sc ON ci.C_AcctSchema1_ID=sc.C_AcctSchema_ID WHERE ci.AD_Client_ID=v_Client_ID; IF v_BaseCurrency_ID=p_Currency_To_id AND Coalesce(v_CurrencyRate,0) > 0 AND Coalesce(v_ConvertedAmt,0) != 0 AND v_Currency_ID != p_Currency_To_id AND v_IsOverrideCurrencyRate='Y' THEN IF p_Amt IS NULL THEN RETURN v_ConvertedAmt; ELSE RETURN currencyRound(p_Amt*v_CurrencyRate, p_Currency_To_id, null); END IF; END IF; RETURN currencyConvert(Coalesce(p_Amt,v_PayAmt), v_Currency_ID, p_Currency_To_id, Coalesce(p_conversionDate,v_DateAcct), v_ConversionType_ID, v_Client_ID, v_Org_ID); END currencyConvertPayment; / SELECT register_migration_script('202010031940_IDEMPIERE-4083.sql') FROM dual ;