DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_clone`(vSelf INT, vDays INT, OUT vNewTravelFk INT)
BEGIN
/**
 * Clona un travel el número de dias indicado y devuelve su id.
 *
 * @param vSelf Identificador de vn.travel
 * @param vDays Número de dias a futuro
 * @return vNewTravelFk Nuevo número de travel
 */
	SELECT tr.id INTO vNewTravelFk
		FROM vn.travel tr
			JOIN vn.travel tr2 USING(shipped, warehouseInFk, warehouseOutFk, agencyModeFk, `ref`)
		WHERE tr2.id = vSelf
			AND tr.landed = TIMESTAMPADD(DAY, vDays, tr2.landed);

	IF ISNULL(vNewTravelFk) THEN
		START TRANSACTION;

		INSERT INTO vn.travel(	shipped,
								shipmentHour,
								landed,
								landingHour,
								warehouseInFk,
								warehouseOutFk,
								agencyModeFk,
								`ref`,
								cargoSupplierFk,
								clonedFrom)
			SELECT 	shipped,
					shipmentHour,
					TIMESTAMPADD(DAY, vDays, landed),
					landingHour,
					warehouseInFk,
					warehouseOutFk,
					agencyModeFk,
					`ref`,
					cargoSupplierFk,
					vSelf
				FROM vn.travel
					WHERE id = vSelf;

		SELECT LAST_INSERT_ID() INTO vNewTravelFk;

		COMMIT;
	END IF;
END$$
DELIMITER ;