-- DROP PROCEDURE `vn`.`clonTravelComplete`; DELIMITER $$ USE `vn`$$ CREATE DEFINER = root@`%` PROCEDURE `vn`.`travel_cloneWithEntries`(IN vTravelFk INT, IN vDateStart DATE, IN vDateEnd DATE, IN vRef VARCHAR(255), OUT vNewTravelFk INT) BEGIN DECLARE vEntryNew INT; DECLARE vDone BOOLEAN DEFAULT FALSE; 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 = vNewTravelFk and b.entryFk=vNewTravelFk ORDER BY e.id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; 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 vNewTravelFk = LAST_INSERT_ID(); SET vDone = FALSE; 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, vNewTravelFk, 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, weight) SELECT vEntryNew, itemFk, quantity, buyingValue, packageFk, stickers, freightValue, packageValue, comissionValue, packing, `grouping`, groupingMode, location, price1, price2, price3, minPrice, producer, printedStickers, isChecked, weight FROM buy WHERE entryFk = vAuxEntryFk; FETCH vRsEntry INTO vAuxEntryFk; END WHILE; CLOSE vRsEntry; COMMIT; END;$$ DELIMITER ;