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 REPLACE FUNCTION public . " Stk_F_UomConvert " ( p_quantity numeric , p_from_uom_id varchar , p_to_uom_id varchar )
2026-10-12 21:43:05 +00:00
RETURNS numeric
LANGUAGE plpgsql STABLE AS $ $
DECLARE v_from double precision ; v_to double precision ;
BEGIN
IF p_quantity IS NULL OR p_from_uom_id IS NULL OR p_to_uom_id IS NULL OR p_from_uom_id = p_to_uom_id THEN
RETURN p_quantity ;
END IF ;
SELECT CASE f . " Type " WHEN ' BiggerThanReference ' THEN f . " Ratio " WHEN ' SmallerThanReference ' THEN 1 . 0 / NULL IF ( f . " Ratio " , 0 ) ELSE 1 END ,
CASE t . " Type " WHEN ' BiggerThanReference ' THEN t . " Ratio " WHEN ' SmallerThanReference ' THEN 1 . 0 / NULL IF ( t . " Ratio " , 0 ) ELSE 1 END
INTO v_from , v_to
FROM " Adm_T_Uom " f
INNER JOIN " Adm_T_Uom " t ON t . " Id " = p_to_uom_id AND t . " UomCategoryId " = f . " UomCategoryId "
WHERE f . " Id " = p_from_uom_id ;
IF v_from IS NULL OR NULL IF ( v_to , 0 ) IS NULL THEN
RETURN p_quantity ;
END IF ;
RETURN ROUND ( ( p_quantity * v_from / v_to ) : : numeric , 4 ) ;
END ;
$ $ ;