59 lines
1.4 KiB
MySQL
59 lines
1.4 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`entry_getCommission`(vTravelFk INT,
|
||
|
vCurrencyFk INT,
|
||
|
vSupplierFk INT
|
||
|
)
|
||
|
RETURNS int(11)
|
||
|
NOT DETERMINISTIC
|
||
|
READS SQL DATA
|
||
|
BEGIN
|
||
|
DECLARE vCommission INT;
|
||
|
DECLARE vCurrentCommission INT;
|
||
|
DECLARE vIsCurrencyUsd INT;
|
||
|
DECLARE vLastEntryFk INT;
|
||
|
|
||
|
SELECT count(*) INTO vIsCurrencyUsd
|
||
|
FROM currency c
|
||
|
WHERE c.code = 'USD' AND id = vCurrencyFk;
|
||
|
|
||
|
IF NOT vIsCurrencyUsd THEN
|
||
|
|
||
|
SELECT e.id INTO vLastEntryFk
|
||
|
FROM vn.entry e
|
||
|
JOIN vn.travel tr ON tr.id = e.travelFk
|
||
|
WHERE e.supplierFk = vSupplierFk
|
||
|
ORDER BY tr.landed DESC
|
||
|
LIMIT 1;
|
||
|
|
||
|
IF vLastEntryFk THEN
|
||
|
|
||
|
SELECT commission INTO vCurrentCommission
|
||
|
FROM vn.entry
|
||
|
WHERE id = vLastEntryFk;
|
||
|
|
||
|
ELSE
|
||
|
|
||
|
SELECT commission INTO vCurrentCommission
|
||
|
FROM supplier s
|
||
|
WHERE s.id = vSupplierFk;
|
||
|
|
||
|
END IF;
|
||
|
|
||
|
RETURN vCurrentCommission;
|
||
|
|
||
|
ELSE
|
||
|
|
||
|
SELECT ROUND(-100 * (1 - (1 / r.value))) INTO vCommission
|
||
|
FROM travel t
|
||
|
LEFT JOIN referenceCurrent r ON r.currencyFk = vCurrencyFk AND r.`dated` <= t.shipped
|
||
|
WHERE t.id = vTravelFk
|
||
|
ORDER BY r.`dated` DESC
|
||
|
LIMIT 1;
|
||
|
|
||
|
RETURN IFNULL(vCommission, 0);
|
||
|
|
||
|
END IF;
|
||
|
|
||
|
END$$
|
||
|
DELIMITER ;
|