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 vIsMovible BOOL;
	DECLARE vSubject VARCHAR(30);

	DECLARE vTravels CURSOR FOR
		SELECT GROUP_CONCAT(DISTINCT travelLink ORDER BY id SEPARATOR '\n\r'),
				buyerEmail,
				isMovable
			FROM tTravelToMove
			GROUP BY isMovable, 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,
				shipped <= util.VN_CURDATE() + INTERVAL daysInForward DAY isMovable
			FROM travel
			WHERE isRaid
				AND daysInForward
		)SELECT t.*,
				CONCAT(u.name, '@verdnatura.es') buyerEmail
			FROM travels t
				STRAIGHT_JOIN entry e ON e.travelFk = t.id
				JOIN buy b ON b.entryFk = e.id
				JOIN item i ON i.id = b.itemFk
				JOIN 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
		WHERE ttm.isMovable;

	OPEN vTravels;

	l: LOOP
		SET vDone = FALSE;
		FETCH vTravels INTO vTravelLink, vBuyerEmail, vIsMovible;

		IF vDone THEN
			LEAVE l;
		END IF;

		IF vIsMovible THEN
			SET vSubject = 'Cambio de fecha en Redadas';
			SET vMailBody = 'Se ha movido los siguientes travels';
		ELSE
			SET vSubject = 'ERROR al cambiar la fecha en Redadas';
			SET vMailBody = 'Ha ocurrido un error con las fechas al mover los siguiente travels';
		END IF;

		SET vMailBody = CONCAT(vMailBody, ': \n\r ', vTravelLink);

		CALL mail_insert(vBuyerEmail, 'noreply@verdnatura.es', vSubject, vMailBody);
	END LOOP;
	CLOSE vTravels;
	COMMIT;
	DROP TEMPORARY TABLE tTravelToMove;
END$$
DELIMITER ;
