DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_getProblems`(
	vIsTodayRelative tinyint(1)
)
BEGIN
/**
 * Calcula los problemas para un conjunto de tickets.
 * Agrupados por ticket
 *
 * @table tmp.sale_getProblems(ticketFk, clientFk, warehouseFk, shipped) Identificadores de los tickets a calcular
 * @return tmp.ticket_problems
 */
	CALL sale_getProblems(vIsTodayRelative);

	CREATE OR REPLACE TEMPORARY TABLE tmp.ticket_problems 
		(PRIMARY KEY (ticketFk))
		ENGINE = MEMORY
		SELECT ticketFk,
			MAX(isFreezed) isFreezed,
			MAX(risk) risk,
			MAX(hasRisk) hasRisk,
			MAX(hasHighRisk) hasHighRisk,
			MAX(hasTicketRequest) hasTicketRequest,
			MAX(itemShortage) itemShortage,
			MIN(isTaxDataChecked) isTaxDataChecked,
			MAX(hasComponentLack) hasComponentLack,
			MAX(isTooLittle) isTooLittle,
			MAX(itemDelay) itemDelay,
			MAX(hasRounding) hasRounding,
			MAX(itemLost) itemLost,
			MAX(isVip) isVip,
			0 totalProblems
		FROM tmp.sale_problems
			GROUP BY ticketFk;

	UPDATE tmp.ticket_problems
		SET totalProblems = (
			(isFreezed) +
			(hasRisk) +
			(hasTicketRequest) +
			(!isTaxDataChecked) +
			(hasComponentLack) +
			(itemDelay IS NOT NULL) +
			(isTooLittle) +
			(itemLost IS NOT NULL) +
			(hasRounding IS NOT NULL) +
			(itemShortage IS NOT NULL) +
			(isVip)
		);

	DROP TEMPORARY TABLE tmp.sale_problems;
END$$
DELIMITER ;
