25 lines
1.1 KiB
Transact-SQL
25 lines
1.1 KiB
Transact-SQL
-- Miktarı bir ölçü biriminden diğerine çevirir (aynı kategori içinde, Adm_T_Uom.Type + Ratio).
|
||
-- Referans birim 1; büyük birim 1 birim = Ratio referans; küçük birim Ratio birim = 1 referans. Kategori farklıysa ya da birim yoksa miktar aynen döner.
|
||
CREATE OR ALTER FUNCTION [dbo].[Stk_F_UomConvert]
|
||
(
|
||
@Quantity decimal(18, 4),
|
||
@FromUomId nvarchar(64),
|
||
@ToUomId nvarchar(64)
|
||
)
|
||
RETURNS decimal(18, 4)
|
||
AS
|
||
BEGIN
|
||
IF @Quantity IS NULL OR @FromUomId IS NULL OR @ToUomId IS NULL OR @FromUomId = @ToUomId
|
||
RETURN @Quantity;
|
||
|
||
DECLARE @From float, @To float;
|
||
SELECT @From = CASE f.Type WHEN 'BiggerThanReference' THEN f.Ratio WHEN 'SmallerThanReference' THEN 1.0 / NULLIF(f.Ratio, 0) ELSE 1 END,
|
||
@To = CASE t.Type WHEN 'BiggerThanReference' THEN t.Ratio WHEN 'SmallerThanReference' THEN 1.0 / NULLIF(t.Ratio, 0) ELSE 1 END
|
||
FROM Adm_T_Uom f
|
||
INNER JOIN Adm_T_Uom t ON t.Id = @ToUomId AND t.UomCategoryId = f.UomCategoryId
|
||
WHERE f.Id = @FromUomId;
|
||
|
||
IF @From IS NULL OR NULLIF(@To, 0) IS NULL
|
||
RETURN @Quantity;
|
||
RETURN ROUND(@Quantity * @From / @To, 4);
|
||
END
|