DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`sale_checkNoComponents`(vCreatedFrom DATETIME, vCreatedTo DATETIME) BEGIN /** * Comprueba que las ventas creadas entre un rango de fechas tienen componentes * * @param vCreatedFrom inicio del rango * @param vCreatedTo fin del rango */ DECLARE v_done BOOL DEFAULT FALSE; DECLARE vSaleFk INTEGER; DECLARE vTicketFk INTEGER; DECLARE vConcept VARCHAR(50); DECLARE vCur CURSOR FOR SELECT s.id FROM sale s JOIN ticket t ON t.id = s.ticketFk 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 s.created >= vCreatedFrom AND s.created <= vCreatedTo AND c.id IS NULL AND t.agencyModeFk IS NOT NULL AND t.isDeleted IS FALSE AND t.warehouseFk = 60 AND ic.merchandise != FALSE GROUP BY s.id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; DROP TEMPORARY TABLE IF EXISTS tmp.coste; DROP TEMPORARY TABLE IF EXISTS tmp.coste; CREATE TEMPORARY TABLE tmp.coste (PRIMARY KEY (id)) ENGINE = MEMORY SELECT s.id FROM sale s 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.id = 6 WHERE s.created >= vCreatedFrom AND ic.merchandise != FALSE; OPEN vCur; l: LOOP SET v_done = FALSE; FETCH vCur INTO vSaleFk; IF v_done THEN LEAVE l; END IF; SELECT ticketFk, concept INTO vTicketFk, vConcept FROM sale WHERE id = vSaleFk; CALL sale_calculateComponent(vSaleFk, 1); END LOOP; CLOSE vCur; DROP TEMPORARY TABLE tmp.coste; END$$ DELIMITER ;