Created
January 23, 2020 06:17
-
-
Save Tyralion/f4bf683a75dd9d78bd4d985fce6fc696 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE OR REPLACE FUNCTION item_price( | |
uid integer, -- ид клиента | |
item items, -- товары | |
markup numeric -- пользовательская наценка на товары | |
) RETURNS numeric | |
AS $BODY$ | |
DECLARE | |
val numeric; | |
fix_val numeric; | |
max_price numeric; | |
prid varchar(255); | |
iprice varchar(255); | |
i numeric; | |
BEGIN | |
-- | |
-- По заданным у товара критериям: | |
-- 1. ID-товара в 1С | |
-- 2. ID-номеклатурной группы | |
-- 3. ID-ценовой группы | |
-- 4. Общая цена | |
-- выбираем цену из списка цен | |
-- | |
SELECT prices.value, prices.fix_value, prices.price_id | |
INTO val, fix_val, prid | |
FROM prices | |
WHERE prices.user_id = uid AND | |
prices.price_rule_id IN ( | |
item.va_item_id, | |
item.va_price_group, | |
item.va_nom_group, | |
'' | |
) | |
ORDER BY prices.price_type DESC | |
LIMIT 1; | |
-- Если ничего не найдено то, возвращаем 0 | |
IF NOT FOUND THEN | |
RETURN 0; | |
ELSE | |
-- Если у правила цен указано фиксированная цена то, возвращаем ее | |
-- (с учетом пользовательской наценки) | |
IF fix_val > 0 THEN | |
RETURN (fix_val * (1 + markup/100)); | |
ELSE | |
-- иначе выбираем из списка цен у товара нужную цену... | |
iprice := item.prices->>prid; | |
-- если ничего не выбрано то, вовзращаем 0 | |
IF iprice IS NULL THEN | |
RETURN 0; | |
ELSE | |
-- если выбрана базовая цена, выбран % то, вычисляем итоговую цену | |
-- (с учетом пользовательской наценки) | |
RETURN ( | |
iprice::numeric * (1 + val/100 + markup/100) | |
); | |
END IF; | |
END IF; | |
END IF; | |
END; | |
$BODY$ | |
LANGUAGE 'plpgsql'; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment