2026-10-12 21:43:05 +00:00
-- 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.
2026-10-19 14:35:08 +00:00
CREATE OR ALTER FUNCTION [ dbo ] . [ Stk_F_UomConvert ]
2026-10-12 21:43:05 +00:00
(
@ 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 / NULL IF ( f . Ratio , 0 ) ELSE 1 END ,
@ To = CASE t . Type WHEN ' BiggerThanReference ' THEN t . Ratio WHEN ' SmallerThanReference ' THEN 1 . 0 / NULL IF ( 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 NULL IF ( @ To , 0 ) IS NULL
RETURN @ Quantity ;
RETURN ROUND ( @ Quantity * @ From / @ To , 4 ) ;
END