fixes #4951 Comprobar longitud de cuentas contables al generar asientos #1238
|
@ -0,0 +1,83 @@
|
|||
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 NOT util.checkLength(NEW.SUBCTA, 10) THEN
|
||||
|
||||
CALL util.throw('INVALID_LENGTH');
|
||||
END IF;
|
||||
END IF;
|
||||
jgallego
commented
has valorat posar directament LENGTH(vString) <=> 10 en el if? has valorat posar directament LENGTH(vString) <=> 10 en el if?
i així no creem la funcio?
alexandre
commented
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
jgallego
commented
He parlat en Juan i ell tampoc crearia una funció, ni aporta molta legibilitat, ni lleva linies de codi. He parlat en Juan i ell tampoc crearia una funció, ni aporta molta legibilitat, ni lleva linies de codi.
No es justifica.
|
||||
IF NOT NEW.CONTRA <=> OLD.CONTRA THEN
|
||||
IF NOT util.checkLength(NEW.CONTRA, 10) THEN
|
||||
CALL util.throw('INVALID_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 NOT util.checkLength(NEW.SUBCTA, 10) THEN
|
||||
CALL util.throw('INVALID_LENGTH');
|
||||
END IF;
|
||||
IF NOT util.checkLength(NEW.CONTRA, 10) THEN
|
||||
CALL util.throw('INVALID_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 ;
|
||||
|
||||
|
||||
DROP FUNCTION IF EXISTS `util`.`checkLength`;
|
||||
|
||||
DELIMITER $$
|
||||
$$
|
||||
CREATE DEFINER=`root`@`localhost` FUNCTION `util`.`checkLength`(vString VARCHAR(10), vLength INT(11)) RETURNS tinyint(1)
|
||||
DETERMINISTIC
|
||||
BEGIN
|
||||
/**
|
||||
* Comprueba la longitud de un string
|
||||
*
|
||||
* @param vString String a comprobar
|
||||
* @param vLength Longitud que debe tener
|
||||
* @return Devuelve TRUE/FALSE en caso de que tenga la longitud correcta o no
|
||||
*/
|
||||
IF LENGTH(vString) <=> vLength THEN
|
||||
RETURN TRUE;
|
||||
END IF;
|
||||
RETURN FALSE;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
Loading…
Reference in New Issue
Este if, sobraria, perque si li pases '' la funció length ja et trau el fallo
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 entenc, pero si just baix valides la longitud, en cap cas insertes '' ni null, sino que trau fallo.
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