DROP procedure IF EXISTS `vn`.`clonTravelComplete`;

DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`clonTravelComplete`(IN `vTravelFk` INT, IN `vDateStart` DATE, IN `vDateEnd` DATE, IN `vRef` VARCHAR(255))
BEGIN
    
		DECLARE vTravelNew INT;
        DECLARE vEntryNew INT;
		DECLARE vDone BIT DEFAULT 0;
        DECLARE vAuxEntryFk INT;
		DECLARE vRsEntry CURSOR FOR
			SELECT e.id
				FROM entry e
					JOIN travel t 
						ON t.id = e.travelFk
				WHERE e.travelFk = vTravelFk;
			
		 DECLARE vRsBuy CURSOR FOR
			SELECT b.*
				FROM buy b
					JOIN entry  e 
					ON  b.entryFk = e.id
			WHERE 	e.travelFk = vTravelNew and b.entryFk=entryNew
			ORDER BY e.id;
            
		DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = 1;
        
        DECLARE EXIT HANDLER FOR SQLEXCEPTION 
			BEGIN 
				ROLLBACK;
				RESIGNAL;
			END;
              
		START TRANSACTION;
              
		INSERT INTO travel (shipped,landed, warehouseInFk, warehouseOutFk, agencyFk, ref, isDelivered, isReceived, m3, kg)
			SELECT vDateStart, vDateEnd,warehouseInFk, warehouseOutFk, agencyFk, vRef, isDelivered, isReceived, m3, kg
				FROM travel
				WHERE id = vTravelFk;
			
		SET vTravelNew = LAST_INSERT_ID();
		SET vDone = 0;	 
		OPEN vRsEntry ;
		FETCH vRsEntry INTO vAuxEntryFk;
		
			WHILE NOT vDone DO
				INSERT INTO entry (supplierFk,
									ref,
                                    isInventory,
                                    isConfirmed, 
                                    isOrdered,
                                    isRaid,
                                    commission,
                                    created,
                                    evaNotes,
                                    travelFk,
                                    currencyFk,
                                    companyFk,
                                    gestDocFk, 
                                    invoiceInFk)
						 SELECT supplierFk,
								ref,
								isInventory,
								isConfirmed, 
								isOrdered,
								isRaid,
								commission,
								created,
								evaNotes,
								vTravelNew,
								currencyFk,
								companyFk,
								gestDocFk, 
								invoiceInFk
						FROM entry
						WHERE id = vAuxEntryFk;
                                    
				SET vEntryNew  = LAST_INSERT_ID();
				
                            
                     INSERT INTO buy (entryFk,
										itemFk,
										quantity,
										buyingValue,
										packageFk,
										stickers,
										freightValue,
										packageValue,
										comissionValue,
										packing,
										`grouping`,
										groupingMode,
										location,
										price1,
										price2,
										price3,
										minPrice,
										producer,
										printedStickers,
										isChecked)
								SELECT vEntryNew,
										itemFk,
										quantity,
										buyingValue,
										packageFk,
										stickers,
										freightValue,
										packageValue,
										comissionValue,
										packing,
										`grouping`,
										groupingMode,
										location,
										price1,
										price2,
										price3,
										minPrice,
										producer,
										printedStickers,
										isChecked
									FROM buy
									WHERE entryFk = vAuxEntryFk;       
									
                              
				FETCH vRsEntry INTO vAuxEntryFk;
			END WHILE;
		CLOSE vRsEntry;
        COMMIT;
	END$$

DELIMITER ;

