DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`sale_checkNoComponents`(vCreatedFrom DATETIME, vCreatedTo DATETIME)
BEGIN
/**
 * Comprueba que las ventas creadas entre un rango de fechas tienen componentes
 *
 * @param vCreatedFrom inicio del rango
 * @param vCreatedTo fin del rango
 */
	DECLARE v_done BOOL DEFAULT FALSE;
	DECLARE vSaleFk INTEGER;
	DECLARE vTicketFk INTEGER;
	DECLARE vConcept VARCHAR(50);
	DECLARE vCur CURSOR FOR
		SELECT s.id
			FROM sale s
				JOIN ticket t ON t.id = s.ticketFk
				JOIN item i ON i.id = s.itemFk
				JOIN itemType tp ON tp.id = i.typeFk
				JOIN itemCategory ic ON ic.id = tp.categoryFk
				LEFT JOIN tmp.coste c ON c.id = s.id
			WHERE s.created >= vCreatedFrom AND s.created <= vCreatedTo
				AND c.id IS NULL
				AND t.agencyModeFk IS NOT NULL
                AND t.isDeleted IS FALSE
                 AND t.warehouseFk = 60
				AND ic.merchandise != FALSE
			GROUP BY s.id;

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET v_done = TRUE; 

	DROP TEMPORARY TABLE IF EXISTS tmp.coste;

	DROP TEMPORARY TABLE IF EXISTS tmp.coste;
	CREATE TEMPORARY TABLE tmp.coste
		(PRIMARY KEY (id)) ENGINE = MEMORY
		SELECT s.id
		FROM sale s 
			JOIN item i ON i.id = s.itemFk
			JOIN itemType tp ON tp.id = i.typeFk
			JOIN itemCategory ic ON ic.id = tp.categoryFk
			JOIN saleComponent sc ON sc.saleFk = s.id
			JOIN component c ON c.id = sc.componentFk
			JOIN componentType ct ON ct.id = c.typeFk AND ct.id = 6
		WHERE s.created >= vCreatedFrom
			AND ic.merchandise != FALSE;

	OPEN vCur;

	l: LOOP
		SET v_done = FALSE;
		FETCH vCur INTO vSaleFk;

		IF v_done THEN
			LEAVE l;
		END IF;
		
		SELECT ticketFk, concept
			INTO vTicketFk, vConcept
			FROM sale
			WHERE id = vSaleFk;
			
		CALL sale_calculateComponent(vSaleFk, 'renewPrices');
	END LOOP;

	CLOSE vCur;
	DROP TEMPORARY TABLE tmp.coste;	
END$$
DELIMITER ;
