DELIMITER $$
CREATE OR REPLACE FUNCTION vn.sale_hasComponentLack(vSelf INT)
	RETURNS tinyint(1)
	READS SQL DATA
BEGIN
/**
 * Comprueba si la línea de sale tiene todos lo componentes obligatorios
 * 
 * @return BOOL
 */
	DECLARE vHasComponentLack TINYINT(1);

	WITH componentRequired AS(
	SELECT COUNT(*)total 
		FROM component  
		WHERE isRequired
	)SELECT SUM(IF(c.isRequired, TRUE, FALSE)) <> cr.total INTO vHasComponentLack
		FROM vn.sale s
			JOIN componentRequired cr 
			LEFT JOIN vn.saleComponent sc ON sc.saleFk = s.id 
			LEFT JOIN vn.component c ON c.id = sc.componentFk
		WHERE s.id = vSelf;
		
	RETURN vHasComponentLack;	
END$$
DELIMITER ;