DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`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 ;