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 ;