DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`travel_cloneWithEntries`( IN vTravelFk INT, IN vDateStart DATE, IN vDateEnd DATE, IN vWarehouseOutFk INT, IN vWarehouseInFk INT, IN vRef VARCHAR(255), IN vAgencyModeFk INT, OUT vNewTravelFk INT) BEGIN /** * Clona un travel junto con sus entradas y compras * @param vTravelFk travel plantilla a clonar * @param vDateStart fecha del shipment del nuevo travel * @param vDateEnd fecha del landing del nuevo travel * @param vWarehouseOutFk warehouse del salida del nuevo travel * @param vWarehouseInFk warehouse de landing del nuevo travel * @param vRef referencia del nuevo travel * @param vAgencyModeFk del nuevo travel * @param vNewTravelFk id del nuevo travel */ DECLARE vNewEntryFk INT; DECLARE vEvaNotes VARCHAR(255); DECLARE vDone BOOL; DECLARE vAuxEntryFk INT; DECLARE vIsRequiredTx BOOLEAN DEFAULT NOT @@in_transaction; DECLARE vRsEntry CURSOR FOR SELECT e.id FROM entry e JOIN travel t ON t.id = e.travelFk WHERE e.travelFk = vTravelFk; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN CALL util.tx_rollback(vIsRequiredTx); RESIGNAL; END; CALL util.tx_start(vIsRequiredTx); INSERT INTO travel (shipped, landed, warehouseInFk, warehouseOutFk, agencyModeFk, `ref`, isDelivered, isReceived, m3, cargoSupplierFk, kg,clonedFrom) SELECT vDateStart, vDateEnd, vWarehouseInFk, vWarehouseOutFk, vAgencyModeFk, vRef, isDelivered, isReceived, m3,cargoSupplierFk, kg,vTravelFk FROM travel WHERE id = vTravelFk; SET vNewTravelFk = LAST_INSERT_ID(); SET vDone = FALSE; SET @isModeInventory = TRUE; OPEN vRsEntry; l: LOOP SET vDone = FALSE; FETCH vRsEntry INTO vAuxEntryFk; IF vDone THEN LEAVE l; END IF; CALL entry_cloneHeader(vAuxEntryFk, vNewEntryFk, vNewTravelFk); CALL entry_copyBuys(vAuxEntryFk, vNewEntryFk); SELECT evaNotes INTO vEvaNotes FROM entry WHERE id = vAuxEntryFk; UPDATE entry SET evaNotes = vEvaNotes WHERE id = vNewEntryFk; CALL buy_recalcPricesByEntry(vNewEntryFk); END LOOP; SET @isModeInventory = FALSE; CLOSE vRsEntry; CALL util.tx_commit(vIsRequiredTx); END$$ DELIMITER ;