salix/db/routines/vn2008/procedures/compresTriggerBeforeUpdate.sql

37 lines
1.4 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`compresTriggerBeforeUpdate`(vOldEntrada INT, vNewEntrada INT, oldItem INT,
newItem INT, newNoVincular BOOLEAN, newCompra INT)
BEGIN
DECLARE newWarehouse INTEGER;
DECLARE hasToRecalculate BOOLEAN;
IF newNoVincular = FALSE THEN
IF oldItem <> newItem OR vOldEntrada <> vNewEntrada THEN
SELECT Id_Compra INTO hasToRecalculate FROM travel t
JOIN Entradas e ON e.travel_id = t.id
JOIN vn.lastBuy lb ON lb.id = newCompra
WHERE e.Id_Entrada = vOldEntrada LIMIT 1;
IF hasToRecalculate THEN
SELECT warehouse_id INTO newWarehouse FROM travel t
JOIN Entradas e ON t.id = e.travel_id
WHERE e.Id_Entrada = vOldEntrada;
CALL vn.lastBuyRefresh(newWarehouse);
END IF;
END IF;
IF vOldEntrada <> vNewEntrada THEN
UPDATE Entradas oldEntrada
JOIN travel oldTravel ON oldEntrada.travel_id = oldtravel.id
JOIN Entradas newEntrada ON newEntrada.Id_Entrada = vNewEntrada
JOIN travel newTravel ON newTravel.id = newEntrada.travel_id
JOIN vn.lastBuy lb ON newItem = lb.item AND newTravel.warehouse_id = lb.warehouse
SET lb.id = newCompra
WHERE oldEntrada.Id_Entrada = vOldEntrada AND oldTravel.warehouse_id <> newTravel.warehouse_id
AND newTravel.landing > lb.landing AND newTravel.landing <= util.VN_CURDATE();
END IF;
END IF;
END$$
DELIMITER ;