fixes #4951 Comprobar longitud de cuentas contables al generar asientos #1238

Merged
alexandre merged 5 commits from 4951-longitud-cuentaContables into dev 2023-01-17 07:30:37 +00:00
1 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1,73 @@
DROP TRIGGER IF EXISTS vn.XDiario_beforeUpdate;
USE vn;
DELIMITER $$
$$
CREATE DEFINER=`root`@`localhost` TRIGGER `vn`.`XDiario_beforeUpdate`
BEFORE UPDATE ON `XDiario`
FOR EACH ROW
BEGIN
IF NOT NEW.SUBCTA <=> OLD.SUBCTA THEN
IF NEW.SUBCTA <=> '' THEN
Review

Este if, sobraria, perque si li pases '' la funció length ja et trau el fallo

Este if, sobraria, perque si li pases '' la funció length ja et trau el fallo
Review

Ho gaste per a transformar '' en NULL. Me digué Carlos que ho posara aixina perque lo correcte seria que no se pogueren tindre camps buits (que es el que passa si borres directament el camp en la base de dades), sinó camps en NULL.

Ho gaste per a transformar '' en NULL. Me digué Carlos que ho posara aixina perque lo correcte seria que no se pogueren tindre camps buits (que es el que passa si borres directament el camp en la base de dades), sinó camps en NULL.
Review

Ho entenc, pero si just baix valides la longitud, en cap cas insertes '' ni null, sino que trau fallo.

Ho entenc, pero si just baix valides la longitud, en cap cas insertes '' ni null, sino que trau fallo.
Review

En el casos que siga '' o NULL no trau fallo, només trau fallo si la cadena no és null i la longitud no és 10

En el casos que siga '' o NULL no trau fallo, només trau fallo si la cadena no és null i la longitud no és 10
SET NEW.SUBCTA = NULL;
END IF;
IF NEW.SUBCTA IS NOT NULL AND NOT LENGTH(NEW.SUBCTA) <=> 10 THEN

has valorat posar directament LENGTH(vString) <=> 10 en el if?
i així no creem la funcio?

has valorat posar directament LENGTH(vString) <=> 10 en el if? i així no creem la funcio?

Me va dir Carlos que creara la funció i la posara en util perque aixina se pot gastar en més llocs

Me va dir Carlos que creara la funció i la posara en util perque aixina se pot gastar en més llocs

He parlat en Juan i ell tampoc crearia una funció, ni aporta molta legibilitat, ni lleva linies de codi.
No es justifica.

He parlat en Juan i ell tampoc crearia una funció, ni aporta molta legibilitat, ni lleva linies de codi. No es justifica.
CALL util.throw('INVALID_STRING_LENGTH');
END IF;
END IF;
IF NOT NEW.CONTRA <=> OLD.CONTRA THEN
IF NEW.CONTRA <=> '' THEN
SET NEW.CONTRA = NULL;
END IF;
IF NEW.CONTRA IS NOT NULL AND NOT LENGTH(NEW.CONTRA) <=> 10 THEN
CALL util.throw('INVALID_STRING_LENGTH');
END IF;
END IF;
IF NOT NEW.FECHA <=> OLD.FECHA THEN
CALL XDiario_checkDate(NEW.FECHA);
END IF;
IF NOT NEW.FECHA_EX <=> OLD.FECHA_EX THEN
CALL XDiario_checkDate(NEW.FECHA_EX);
END IF;
IF NOT NEW.FECHA_OP <=> OLD.FECHA_OP THEN
CALL XDiario_checkDate(NEW.FECHA_OP);
END IF;
IF NOT NEW.FECHA_RT <=> OLD.FECHA_RT THEN
CALL XDiario_checkDate(NEW.FECHA_RT);
END IF;
IF NOT NEW.FECREGCON <=> OLD.FECREGCON THEN
CALL XDiario_checkDate(NEW.FECREGCON);
END IF;
END$$
DELIMITER ;
DROP TRIGGER IF EXISTS vn.XDiario_beforeInsert;
USE vn;
DELIMITER $$
$$
CREATE DEFINER=`root`@`localhost` TRIGGER `vn`.`XDiario_beforeInsert`
BEFORE INSERT ON `XDiario`
FOR EACH ROW
BEGIN
IF NEW.SUBCTA <=> '' THEN
SET NEW.SUBCTA = NULL;
END IF;
IF NEW.SUBCTA IS NOT NULL AND NOT LENGTH(NEW.SUBCTA) <=> 10 THEN
CALL util.throw('INVALID_STRING_LENGTH');
END IF;
IF NEW.CONTRA <=> '' THEN
SET NEW.CONTRA = NULL;
END IF;
IF NEW.CONTRA IS NOT NULL AND NOT LENGTH(NEW.CONTRA) <=> 10 THEN
CALL util.throw('INVALID_STRING_LENGTH');
END IF;
CALL XDiario_checkDate(NEW.FECHA);
CALL XDiario_checkDate(NEW.FECHA_EX);
CALL XDiario_checkDate(NEW.FECHA_OP);
CALL XDiario_checkDate(NEW.FECHA_RT);
CALL XDiario_checkDate(NEW.FECREGCON);
END$$
DELIMITER ;