DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelving_transfer`(
	vItemShelvingFk INT, 
	vShelvingFk VARCHAR(10)
)
BEGIN
/**
 * Transfiere producto de una ubicación a otra, fusionando si coincide el
 * packing y la fecha.
 *
 * @param vItemShelvingFk Identificador de itemShelving
 * @param vShelvingFk Identificador de shelving
 */
	DECLARE vNewItemShelvingFk INT DEFAULT 0;

	SELECT MAX(ish.id)
		INTO vNewItemShelvingFk
		FROM itemShelving ish
			JOIN (
				SELECT
					itemFk,
					packing,
					created,
					buyFk
					FROM itemShelving
					WHERE id = vItemShelvingFk
			) ish2 ON ish2.itemFk = ish.itemFk
				AND ish2.packing = ish.packing
				AND date(ish2.created) = date(ish.created)
				AND ish2.buyFk = ish.buyFk
		WHERE ish.shelvingFk = vShelvingFk COLLATE utf8_unicode_ci;

	IF vNewItemShelvingFk THEN
		UPDATE itemShelving ish
				JOIN itemShelving ish2 ON ish2.id = vItemShelvingFk
			SET ish.visible = ish.visible + ish2.visible
			WHERE ish.id = vNewItemShelvingFk;

		DELETE FROM itemShelving
			WHERE id = vItemShelvingFk;
	ELSE
		UPDATE itemShelving
			SET shelvingFk = vShelvingFk
			WHERE id = vItemShelvingFk;
	END IF;
	SELECT true;
END$$
DELIMITER ;