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

View File

@ -27,7 +27,7 @@ BEGIN
DECLARE vEvaNotes VARCHAR(255); DECLARE vEvaNotes VARCHAR(255);
DECLARE vDone BOOL; DECLARE vDone BOOL;
DECLARE vAuxEntryFk INT; DECLARE vAuxEntryFk INT;
DECLARE vTx BOOLEAN DEFAULT !@@in_transaction; DECLARE vTx BOOLEAN DEFAULT @@in_transaction;
DECLARE vRsEntry CURSOR FOR DECLARE vRsEntry CURSOR FOR
SELECT e.id SELECT e.id
FROM entry e FROM entry e
@ -41,8 +41,8 @@ BEGIN
CALL util.tx_rollback(vTx); CALL util.tx_rollback(vTx);
RESIGNAL; RESIGNAL;
END; 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) 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 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.warehouseOutFk).toEqual(warehouseThree);
expect(newTravel.agencyModeFk).toEqual(agencyModeOne); expect(newTravel.agencyModeFk).toEqual(agencyModeOne);
expect(travelEntries.length).toBeGreaterThan(0); 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(); await tx.rollback();
const travelRemoved = await models.Travel.findById(newTravelId, options); const travelRemoved = await models.Travel.findById(newTravelId, options);