DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addBySaleGroup`(
	vSaleGroupFk INT(11)
)
BEGIN
/**
 * Reserva cantidades con ubicaciones para el contenido de una preparación previa
 * a través del saleGroup
 *
 * @param vSaleGroupFk Identificador de saleGroup
 */
	DECLARE vDone BOOL DEFAULT FALSE;
	DECLARE vSaleFk INT;
	DECLARE vSectorFk INT;
	DECLARE vSales CURSOR FOR 
		SELECT s.id
			FROM saleGroupDetail sgd
				JOIN sale s ON sgd.saleFk = s.id
				JOIN saleTracking str ON str.saleFk = s.id
				JOIN `state` st ON st.id = str.stateFk
					AND st.code = 'PREVIOUS_PREPARATION'
				LEFT JOIN itemShelvingSale iss ON iss.saleFk = s.id
			WHERE sgd.saleGroupFk = vSaleGroupFk
				AND str.workerFk = account.myUser_getId()
				AND iss.id IS NULL;

	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	SELECT sectorFk INTO vSectorFk
		FROM operator
		WHERE workerFk = account.myUser_getId();

	OPEN vSales;
	l: LOOP
		SET vDone = FALSE;
		FETCH vSales INTO vSaleFk;

		IF vDone THEN
			LEAVE l;
		END IF;

		CALL itemShelvingSale_addBySale(vSaleFk, vSectorFk);
	END LOOP;
	CLOSE vSales;
END$$
DELIMITER ;