DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`travel_moveRaids`() BEGIN /** * Desplaza los travels en el futuro y avisa a los compradores * */ DECLARE vDone BOOL DEFAULT FALSE; DECLARE vBuyerEmail VARCHAR(40); DECLARE vTravelLink TEXT; DECLARE vMailBody TEXT; DECLARE vDaysBetweenDates INT; DECLARE vSubject VARCHAR(30); DECLARE vTravels CURSOR FOR SELECT GROUP_CONCAT(DISTINCT travelLink ORDER BY id SEPARATOR '\n\r'), buyerEmail FROM tTravelToMove GROUP BY buyerEmail; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; RESIGNAL; END; CREATE OR REPLACE TEMPORARY TABLE tTravelToMove WITH travels AS ( SELECT id, CONCAT('https://salix.verdnatura.es/#!/travel/', id,'/summary') travelLink, util.VN_CURDATE() + INTERVAL daysInForward DAY newLanded, util.VN_CURDATE() - INTERVAL DATEDIFF(landed, shipped) + daysInForward DAY newShipped FROM vn.travel WHERE isRaid AND daysInForward )SELECT t.id, t.travelLink, t.newLanded, t.newShipped, CONCAT(u.name, '@verdnatura.es') buyerEmail FROM travels t STRAIGHT_JOIN vn.entry e ON e.travelFk = t.id JOIN vn.buy b ON b.entryFk = e.id JOIN vn.item i ON i.id = b.itemFk JOIN vn.itemType it ON it.id = i.typeFk JOIN account.user u ON u.id = it.workerFk GROUP BY t.id; START TRANSACTION; UPDATE travel tr JOIN tTravelToMove ttm ON ttm.id = tr.id SET tr.landed = ttm.newLanded, tr.shipped = ttm.newShipped; OPEN vTravels; l: LOOP SET vDone = FALSE; FETCH vTravels INTO vTravelLink, vBuyerEmail; IF vDone THEN LEAVE l; END IF; SET vSubject = 'Cambio de fecha en Redadas', vMailBody = CONCAT('Se ha movido los siguientes travels: \n\r ', vTravelLink); CALL mail_insert(vBuyerEmail, 'noreply@verdnatura.es', vSubject, vMailBody); END LOOP; CLOSE vTravels; COMMIT; DROP TEMPORARY TABLE tTravelToMove; END$$ DELIMITER ;