DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticketClon`(vTicketFk INT, vNewShipped DATE)
BEGIN
	
    DECLARE done INT DEFAULT FALSE;
	DECLARE vNewTicketFk INT;    
	DECLARE vOldSaleFk INT;
    DECLARE vNewSaleFk INT;
    
    DECLARE cur1 CURSOR FOR
		SELECT id
			FROM vn.sale
            WHERE ticketFk = vTicketFk;
            
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
    SET vNewShipped = IFNULL(vNewShipped, util.VN_CURDATE());
        
    CALL vn.ticket_Clone(vTicketFk, vNewTicketFk);
    
    UPDATE vn.ticket 
		SET landed = TIMESTAMPADD(DAY, DATEDIFF(vNewShipped, shipped), landed),
			shipped = vNewShipped
        WHERE id = vNewTicketFk;
        
	OPEN cur1;
    
	read_loop: LOOP
 
    FETCH cur1 INTO vOldSaleFk;
    
    IF done THEN
      LEAVE read_loop;
    END IF;
    
		INSERT INTO vn.sale(ticketFk, itemFk, quantity, concept, price, discount, priceFixed, isPriceFixed)
			SELECT vNewTicketFk, itemFk, quantity, concept, price, discount, priceFixed, isPriceFixed
				FROM vn.sale
                WHERE id = vOldSaleFk;
        
        SELECT max(id) INTO vNewSaleFk
			FROM vn.sale
            WHERE ticketFk = vNewTicketFk;
        
		INSERT INTO vn.saleComponent(saleFk, componentFk, value, isGreuge)
			SELECT vNewSaleFk, componentFk, value, isGreuge
				FROM vn.saleComponent
                WHERE saleFk = vOldSaleFk;
    
	END LOOP;

	CLOSE cur1;
    
END$$
DELIMITER ;
