DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`sectorCollectionSaleGroup_add`(vSaleGroupFk INT, vSectorCollectionFk INT)
BEGIN
/**
 * Inserta un nuevo registro en vn.sectorCollectionSaleGroup 
 * Actualiza el usuario en vn.saleGroup y reemplaza los registros de vn.saleTracking
 * 
 * @param vSaleGroupFk Identificador de vn.saleGroup
 * @param vSectorCollectionFk Identificador de vn.sectorCollection
 */
 	DECLARE vHasSaleGroup INT;
	DECLARE vHasSectorCollection INT;

	SELECT COUNT(id) INTO vHasSaleGroup
		FROM saleGroup
		WHERE id = vSaleGroupFk;

	IF !vHasSaleGroup THEN 
		CALL util.throw ("invalid saleGroup");
	END IF;

	SELECT COUNT(id) INTO vHasSectorCollection
		FROM sectorCollection 
		WHERE id = vSectorCollectionFk;

	IF !vHasSectorCollection THEN 
		CALL util.throw ("invalid sectorCollection");
	END IF;

	REPLACE sectorCollectionSaleGroup
		SET sectorCollectionFk = vSectorCollectionFk, 
			saleGroupFk = vSaleGroupFk;
	
	UPDATE saleGroup sg
		JOIN sectorCollectionSaleGroup scsg ON scsg.saleGroupFk = sg.id
		JOIN sectorCollection sc ON sc.id = scsg.sectorCollectionFk
		SET sg.userFk = sc.userFk 
		WHERE sg.id = vSaleGroupFk;
	
	INSERT IGNORE saleTracking(
			saleFk,
			isChecked,
			workerFk,
			stateFk
		)
		SELECT sgd.saleFk ,
				FALSE,
				sc.userFk,
				s.id
			FROM saleGroupDetail sgd
				JOIN sectorCollectionSaleGroup scsg 
					ON scsg.saleGroupFk = sgd.saleGroupFk 
				JOIN sectorCollection sc ON sc.id = scsg.sectorCollectionFk
				JOIN state s ON s.code = 'PREVIOUS_PREPARATION'
			WHERE sgd.saleGroupFk = vSaleGroupFk;
END$$
DELIMITER ;