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.*,
				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 ;
