DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_split`(
	vTicketFk INT, 
	vTicketFutureFk INT, 
	vDated DATE
)
proc:BEGIN
/**
 * Mueve las lineas con problemas a otro ticket existente o a uno nuevo.
 *
 * @param vTicketFk Identificador del ticket a splittar
 * @param vTicketFutureFk Identificador del ticket al que se quieren mover las lineas
 * @param vDate Fecha a la que se va a mover
 * @table tmp.salesToSplit(saleFk, ticketFk, problem)
 */
	DECLARE vHasFullProblem BOOL;
	DECLARE vProblemLines INT;
	DECLARE vTotalLines INT;

	SELECT COUNT(*) INTO vProblemLines
		FROM tmp.salesToSplit
		WHERE ticketFk = vTicketFk;
	
	SELECT COUNT(*) INTO vTotalLines
		FROM sale s 
		WHERE s.ticketFk = vTicketFk;
	
	SET vHasFullProblem = (vTotalLines = vProblemLines);

	-- Ticket completo
	IF vHasFullProblem THEN
		UPDATE ticket
			SET landed = vDated + INTERVAL 1 DAY,
				shipped = vDated,
				nickname = CONCAT('(',DAY(util.VN_CURDATE()),') ', nickname)
			WHERE id = vTicketFk;
		
		SELECT 'moved' message, NULL ticketFuture;
		LEAVE proc;
	END IF;

	-- Ticket a futuro existe
	IF vTicketFutureFk THEN
		UPDATE sale s 
				JOIN tmp.salesToSplit ss ON s.id = ss.saleFk
			SET s.ticketFk = vTicketFutureFk,
				s.concept = CONCAT('(s) ', s.concept)
			WHERE ss.ticketFk = vTicketFk;
		
		SELECT 'future' message, NULL ticketFuture;
		LEAVE proc;
	END IF;

	-- Ticket nuevo
	CALL ticket_Clone(vTicketFk, vTicketFutureFk);

	UPDATE ticket t
			JOIN productionConfig pc
		SET t.routeFk = IF(t.shipped = vDated , t.routeFk, NULL),
			t.landed = vDated + INTERVAL 1 DAY,
			t.shipped = vDated,
			t.agencyModeFk = pc.defautlAgencyMode,
			t.zoneFk = pc.defaultZone 
		WHERE t.id = vTicketFutureFk;

	UPDATE sale s 
			JOIN tmp.salesToSplit sts ON sts.saleFk = s.id 
		SET s.ticketFk = vTicketFutureFk,
			s.concept = CONCAT('(s) ', s.concept)
		WHERE sts.ticketFk = vTicketFk;

	CALL ticket_setState(vTicketFutureFk, 'FIXING');

	SELECT 'new' message, vTicketFutureFk ticketFuture;
END$$
DELIMITER ;
