DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_checkNoComponents`(vShippedFrom DATETIME, vShippedTo DATETIME)
BEGIN

/**
 * Comprueba que los tickets entre un rango de fechas tienen componentes
 * y recalcula sus componentes
 *
 * @param vShippedFrom rango inicial de fecha 
 * @param vShippedTo rango final de fecha
 */
 
	CREATE OR REPLACE TEMPORARY TABLE tmp.coste
			(primary key (id)) ENGINE = MEMORY
		SELECT s.id
		FROM ticket t
			JOIN sale s ON s.ticketFk = t.id
			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.code = 'cost'
		WHERE t.shipped BETWEEN vShippedFrom AND vShippedTo
			AND ic.merchandise;

	CREATE OR REPLACE TEMPORARY TABLE tmp.recalculateSales
			(primary key (id)) ENGINE = MEMORY
		SELECT DISTINCT s.id
			FROM ticket t
				JOIN sale s ON s.ticketFk = t.id
				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 t.shipped >= vShippedFrom AND t.shipped <= vShippedTo
				AND c.id IS NULL
				AND ic.merchandise;

	CALL sale_recalcComponent('renewPrices');

	DROP TEMPORARY TABLE tmp.recalculateSales;
	DROP TEMPORARY TABLE tmp.coste;	
 END$$
DELIMITER ;
