DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_recalcByScope`(
	vScope VARCHAR(255),
	vId INT
)
BEGIN
/**
 * Recalculates tickets in an scope.
 *
 * @param vScope The scope name
 * @param vId The scope id
 */
	DECLARE vDone BOOL;
	DECLARE vTicketFk INT;

	DECLARE cTickets CURSOR FOR
		SELECT DISTINCT t.id 
			FROM ticket t
				JOIN sale s ON s.ticketFk = t.id
				JOIN itemTaxCountry itc ON itc.itemFk = s.itemFk
			WHERE t.refFk IS NULL
				AND DATE(t.shipped) > util.VN_CURDATE()
				AND (
					(vScope = 'client' AND t.clientFk = vId)
					OR (vScope = 'address' AND t.addressFk = vId)
					OR (vScope = 'item' AND itc.itemFk = vId)
					OR (vScope = 'country' AND itc.countryFk = vId)
					OR (vScope = 'taxClass' AND itc.taxClassFk = vId)
				);

	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET vDone = TRUE;

	OPEN cTickets;

	myLoop: LOOP
		SET vDone = FALSE;
		FETCH cTickets INTO vTicketFk;

		IF vDone THEN
			LEAVE myLoop;
		END IF;

		CALL ticket_recalc(vTicketFk, NULL);
	END LOOP;

	CLOSE cTickets;
END$$
DELIMITER ;
