DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`itemShelvingSale_reallocate`( vItemShelvingFk INT(10), vItemFk INT(10), vSectorFk INT ) BEGIN /** * Elimina reservas de un itemShelving e intenta reservar en otra ubicación * * @param vItemShelvingFk Id itemShelving * @param vItemFk Id del artículo * @param vSectorFk Id del sector */ DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; RESIGNAL; END; START TRANSACTION; UPDATE itemShelving SET visible = 0, available = 0 WHERE id = vItemShelvingFk AND itemFk = vItemFk; SELECT iss.id FROM itemShelvingSale iss JOIN itemShelving ish ON ish.id = iss.itemShelvingFk WHERE iss.itemShelvingFk = vItemShelvingFk AND iss.itemFk = vItemFk AND NOT iss.isPicked FOR UPDATE; INSERT INTO itemShelvingSaleReserve (saleFk, vSectorFk) SELECT DISTINCT iss.saleFk FROM itemShelvingSale iss JOIN itemShelving ish ON ish.id = iss.itemShelvingFk WHERE iss.itemShelvingFk = vItemShelvingFk AND ish.itemFk = vItemFk AND NOT iss.isPicked; DELETE iss FROM itemShelvingSale iss JOIN itemShelving ish ON ish.id = iss.itemShelvingFk WHERE iss.itemShelvingFk = vItemShelvingFk AND ish.itemFk = vItemFk AND NOT iss.isPicked; COMMIT; CALL itemShelvingSale_doReserve(); END$$ DELIMITER ;