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;
|
||||||
|
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