Some sqlj to pgplsql translations.
replaces org.compiere.sqlj.Currency class Both badly commented and tested. Making commit for others to test.
This commit is contained in:
parent
3a75ad0a50
commit
09f00b0bc9
|
@ -0,0 +1,34 @@
|
|||
CREATE OR REPLACE FUNCTION currencybase(
|
||||
IN NUMERIC, -- $1 p_Amount
|
||||
IN INTEGER, -- $2 p_C_CurrencyFrom_ID
|
||||
IN TIMESTAMP WITH TIME ZONE, -- $3 p_ConversionDate
|
||||
IN INTEGER, -- $4 p_AD_Client_ID
|
||||
IN INTEGER -- $5 p_AD_Org_ID
|
||||
) RETURNS NUMERIC
|
||||
AS $$
|
||||
DECLARE
|
||||
currency_to INTEGER;
|
||||
BEGIN
|
||||
IF $1 IS NULL OR $2 IS NULL THEN
|
||||
RETURN NULL;
|
||||
END IF;
|
||||
|
||||
IF $1 = 0 THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
/*Finds out org's default currency*/
|
||||
SELECT ac.C_Currency_ID
|
||||
INTO currency_to
|
||||
FROM AD_ClientInfo AS ci
|
||||
INNER JOIN C_AcctSchema AS ac
|
||||
ON (ci.C_AcctSchema1_ID = ac.C_AcctSchema_ID)
|
||||
WHERE ci.AD_Client_ID = $4;
|
||||
IF currency_to IS NULL THEN
|
||||
RETURN NULL;
|
||||
END IF;
|
||||
IF $2 = currency_to THEN
|
||||
RETURN $1;
|
||||
END IF;
|
||||
RETURN currencyconvert($1, $2, currency_to, $3,0,$4,$5);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
|
@ -0,0 +1,28 @@
|
|||
|
||||
CREATE OR REPLACE FUNCTION currencyconvert(
|
||||
IN NUMERIC, -- $1 amount to convert
|
||||
IN INTEGER, -- $2 from currency id
|
||||
IN INTEGER, -- $3 to currency id
|
||||
IN TIMESTAMP WITH TIME ZONE, -- $4 conversion date
|
||||
IN INTEGER, -- $5 conversion type id
|
||||
IN INTEGER, -- $6 client id
|
||||
IN INTEGER -- $7 org id
|
||||
) RETURNS numeric AS
|
||||
$$
|
||||
DECLARE
|
||||
rate NUMERIC;
|
||||
BEGIN
|
||||
IF $1 IS NULL OR $2 IS NULL OR $3 IS NULL THEN
|
||||
RETURN NULL;
|
||||
END IF;
|
||||
IF $1 = 0 OR $2 = $3 THEN
|
||||
RETURN $1;
|
||||
END IF;
|
||||
rate := currencyrate($2,$3,$4,$5,$6,$7);
|
||||
IF rate IS NULL THEN
|
||||
RETURN NULL;
|
||||
END IF;
|
||||
RETURN currencyround((rate * $1), $3, FALSE);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
CREATE OR REPLACE FUNCTION currencyrate(
|
||||
IN INTEGER, -- $1 currency from id
|
||||
IN INTEGER, -- $2 currency to id
|
||||
IN timestamp with time zone, -- $3 conversiondate
|
||||
IN INTEGER, -- $4 conversiontype id
|
||||
IN INTEGER, -- $5 client id
|
||||
IN INTEGER -- $6 org id
|
||||
) RETURNS NUMERIC AS
|
||||
$$
|
||||
DECLARE
|
||||
conversion_type_id INTEGER;
|
||||
conversion_date DATE;
|
||||
rate NUMERIC;
|
||||
BEGIN
|
||||
IF $1 = $2 THEN
|
||||
RETURN 1;
|
||||
END IF;
|
||||
conversion_type_id = COALESCE($4, 0);
|
||||
conversion_date = CAST($3 AS DATE);
|
||||
rate = NULL;
|
||||
IF conversion_type_id = 0 THEN
|
||||
SELECT C_ConversionType_ID
|
||||
INTO conversion_type_id
|
||||
FROM C_ConversionType
|
||||
WHERE IsDefault = 'Y' AND AD_Client_ID IN (0, $5);
|
||||
END IF;
|
||||
SELECT t.MultiplyRate
|
||||
INTO rate
|
||||
FROM C_Conversion_Rate AS t
|
||||
WHERE t.C_Currency_ID = $1
|
||||
AND t.C_Currency_To = $2
|
||||
AND date_trunc('day',t.ValidFrom) <= $3
|
||||
AND date_trunc('day',t.ValidTo) >= $3
|
||||
AND t.AD_Client_ID IN (0,$5)
|
||||
AND t.AD_Org_ID IN (0, $6)
|
||||
ORDER BY AD_Client_ID DESC, AD_Org_ID DESC, ValidFrom DESC
|
||||
LIMIT 1;
|
||||
return rate;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
|
@ -0,0 +1,27 @@
|
|||
CREATE OR REPLACE FUNCTION currencyround (
|
||||
IN NUMERIC, -- $1 amount
|
||||
IN INTEGER, -- $2 Currency_ID
|
||||
IN BOOLEAN -- $3 Costing
|
||||
) RETURNS NUMERIC AS
|
||||
$$
|
||||
DECLARE
|
||||
precision INTEGER;
|
||||
BEGIN
|
||||
IF $1 IS NULL OR $2 IS NULL THEN
|
||||
RETURN $1;
|
||||
END IF;
|
||||
IF COALESCE($3,FALSE) THEN
|
||||
SELECT t.CostingPrecision
|
||||
INTO precision
|
||||
FROM C_Currency AS t
|
||||
WHERE C_Currency_ID = $2;
|
||||
ELSE
|
||||
SELECT t.stdprecision
|
||||
INTO precision
|
||||
FROM C_Currency AS t
|
||||
WHERE C_Currency_ID = $2;
|
||||
END IF;
|
||||
RETURN ROUND($1, precision);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
Loading…
Reference in New Issue