#2687 - Fix Travel_cloneWithEntries #2021

Merged
jsegarra merged 9 commits from 2687_fix_travel_cloneWithEntries into test 2024-02-15 07:34:50 +00:00
6 changed files with 62 additions and 20 deletions

View File

@ -0,0 +1,13 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`tx_commit`(isTx BOOL)
jsegarra marked this conversation as resolved Outdated

El IN sobra, además, toda variable booleana tiene que tener el prefijo isXXX, hasXXXX (https://wiki.verdnatura.es/index.php/Convenciones_SQL#Booleano)

El IN sobra, además, toda variable booleana tiene que tener el prefijo isXXX, hasXXXX (https://wiki.verdnatura.es/index.php/Convenciones_SQL#Booleano)
BEGIN
/**
* Confirma los cambios asociados a una transacción.
jsegarra marked this conversation as resolved Outdated

Lo de procedimiento es redundante, cambiar a: "Confirma los cambios asociados a una transacción."

Poner el punto al final del comentario, ya que se suele poner.

Lo de procedimiento es redundante, cambiar a: "Confirma los cambios asociados a una transacción." Poner el punto al final del comentario, ya que se suele poner.
d9756a0f3f5074cb516458f222b7edea7c7dc09f
*
* @param isTx es true si existe transacción asociada
jsegarra marked this conversation as resolved Outdated

Aquí sobra lo de BOOL y la primera letra después de la variable debe de estar en mayúscula (https://wiki.verdnatura.es/index.php/Convenciones_SQL#Documentaci%C3%B3n)

Aquí sobra lo de BOOL y la primera letra después de la variable debe de estar en mayúscula (https://wiki.verdnatura.es/index.php/Convenciones_SQL#Documentaci%C3%B3n)
d9756a0f3f5074cb516458f222b7edea7c7dc09f
d9756a0f3f5074cb516458f222b7edea7c7dc09f
*/
IF isTx THEN
COMMIT;
END IF;
END$$
DELIMITER ;

View File

@ -0,0 +1,13 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`tx_rollback`(isTx BOOL)

Ahora una duda general para todos los procedimientos creados, por que has puesto tx? Entiendo que es lo mismo quitando la variable y quitando el if, si quieres lo llamas y si no no.

Ahora una duda general para todos los procedimientos creados, por que has puesto tx? Entiendo que es lo mismo quitando la variable y quitando el if, si quieres lo llamas y si no no.

Entiendo que hablas del if que hay definido dentro de cada procedure.
Se hace así para no tener que poner el IF desde cada llamada.
Si no he respondido a tu pregunta, nos juntamos

Entiendo que hablas del if que hay definido dentro de cada procedure. Se hace así para no tener que poner el IF desde cada llamada. Si no he respondido a tu pregunta, nos juntamos
BEGIN
/**
* Deshace los cambios asociados a una transacción.
jsegarra marked this conversation as resolved Outdated

Cambiar a: "Deshace los cambios asociados a una transacción."

Cambiar a: "Deshace los cambios asociados a una transacción."
d9756a0f3f5074cb516458f222b7edea7c7dc09f
*
* @param isTx es true si existe transacción asociada
*/
IF isTx THEN
ROLLBACK;
END IF;
END$$
DELIMITER ;

View File

@ -0,0 +1,13 @@
DELIMITER $$
jsegarra marked this conversation as resolved
Review

Quitar esos 2 saltos de linea

Quitar esos 2 saltos de linea
Review
d9756a0f3f5074cb516458f222b7edea7c7dc09f
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`tx_start`(isTx BOOL)
BEGIN
/**
* Inicia una transacción.
*
* @param isTx es true si existe transacción asociada
jsegarra marked this conversation as resolved Outdated

Cambiar a: "Inicia una transacción."

Cambiar a: "Inicia una transacción."
d9756a0f3f5074cb516458f222b7edea7c7dc09f
*/
IF isTx THEN
START TRANSACTION;
END IF;
END$$
DELIMITER ;

View File

@ -1,21 +1,20 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_cloneWithEntries`(
IN vTravelFk INT,
IN vDateStart DATE,
IN vTravelFk INT,
IN vDateStart DATE,
IN vDateEnd DATE,
IN vWarehouseOutFk INT,
IN vWarehouseInFk INT,
IN vRef VARCHAR(255),
IN vAgencyModeFk 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 fecha del salida 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
@ -25,34 +24,35 @@ BEGIN
DECLARE vEvaNotes VARCHAR(255);
DECLARE vDone BOOL;
DECLARE vAuxEntryFk INT;
DECLARE vTx BOOLEAN DEFAULT @@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
ROLLBACK;
BEGIN
CALL util.tx_rollback(vTx);
RESIGNAL;
END;
START TRANSACTION;
CALL util.tx_start(vTx);
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;
@ -62,7 +62,7 @@ BEGIN
END IF;
CALL entry_cloneHeader(vAuxEntryFk, vNewEntryFk, vNewTravelFk);
CALL entry_copyBuys(vAuxEntryFk, vNewEntryFk);
CALL entry_copyBuys(vAuxEntryFk, vNewEntryFk);
SELECT evaNotes INTO vEvaNotes
FROM entry
@ -76,6 +76,6 @@ BEGIN
SET @isModeInventory = FALSE;
CLOSE vRsEntry;
COMMIT;
CALL util.tx_commit(vTx);
END$$
DELIMITER ;

View File

@ -27,7 +27,7 @@ BEGIN
DECLARE vEvaNotes VARCHAR(255);
DECLARE vDone BOOL;
DECLARE vAuxEntryFk INT;
DECLARE vTx BOOLEAN DEFAULT !@@in_transaction;
DECLARE vTx BOOLEAN DEFAULT @@in_transaction;
DECLARE vRsEntry CURSOR FOR
SELECT e.id
FROM entry e
@ -41,8 +41,8 @@ BEGIN
CALL util.tx_rollback(vTx);
RESIGNAL;
END;
CALL util.tx_start(vTx);
CALL util.tx_start(vTx);
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

View File

@ -27,7 +27,10 @@ describe('Travel cloneWithEntries()', () => {
expect(newTravel.warehouseOutFk).toEqual(warehouseThree);
expect(newTravel.agencyModeFk).toEqual(agencyModeOne);
expect(travelEntries.length).toBeGreaterThan(0);
await models.Entry.destroyAll({
travelFk: newTravelId
}, options);
await models.Travel.destroyById(newTravelId, options);
alexm marked this conversation as resolved
Review

Comentario de Alex: Aunque fasa rollback cal borrar les entrades i el travel???

Comentario de Alex: Aunque fasa rollback cal borrar les entrades i el travel???
Review

Si, no hace rollback de las líneas clonadas

Si, no hace rollback de las líneas clonadas
await tx.rollback();
const travelRemoved = await models.Travel.findById(newTravelId, options);