CREATE TRIGGER TTBCADASTRO_REGRA_B02I FOR TBCADASTRO_REGRA
ACTIVE BEFORE INSERT POSITION 9
AS
declare variable historico varchar(500);
BEGIN
  historico = '';
  IF(NEW.ID > 0) then
  BEGIN
    historico = historico||' Reg.incluido';
  END

  IF(HISTORICO <> '') then
  BEGIN
    execute procedure spi_historico('TBCADASTRO_REGRA',NEW.ID,historico);
  END
END;

CREATE OR ALTER TRIGGER TTBCADASTRO_REGRA_B01U FOR TBCADASTRO_REGRA
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';
    IF(OLD.CADASTRO <> NEW.CADASTRO) THEN
    BEGIN
        HISTORICO = HISTORICO||' Cad:'||OLD.CADASTRO||' -> '||NEW.CADASTRO;
    END

    IF(old.FAMILIA_ID is null and new.FAMILIA_ID is not null
        or old.FAMILIA_ID is not null and new.FAMILIA_ID is null
        or old.FAMILIA_ID <> new.FAMILIA_ID) THEN
    BEGIN
       HISTORICO = HISTORICO||' Fam:'||COALESCE(OLD.FAMILIA_ID,'')||' -> '||COALESCE(NEW.FAMILIA_ID,'');
    END

    IF(OLD.MODULO <> NEW.MODULO)THEN
    BEGIN
        HISTORICO = HISTORICO||' Modulo:'||OLD.MODULO||' -> '||NEW.MODULO;
    END

    IF(OLD.TABELA <> NEW.TABELA)THEN
    BEGIN
        HISTORICO = HISTORICO||' Tab:'||OLD.TABELA||' -> '||NEW.TABELA;
    END 

    IF(OLD.CAMPO <> NEW.CAMPO)THEN
    BEGIN
        HISTORICO = HISTORICO||' Campo:'||OLD.CAMPO||' -> '||NEW.CAMPO;
    END 

    IF(OLD.CONDICAO_VALIDA <> NEW.CONDICAO_VALIDA)THEN
    BEGIN
        HISTORICO = HISTORICO||' Cond.Val:'||OLD.CONDICAO_VALIDA||' -> '||NEW.CONDICAO_VALIDA;
    END

    IF(OLD.TABELA_VALIDACAO <> NEW.TABELA_VALIDACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' Tab.Val:'||OLD.TABELA_VALIDACAO||' -> '||NEW.TABELA_VALIDACAO;
    END  

    IF(OLD.CAMPO_VALIDACAO <> NEW.CAMPO_VALIDACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' Campo.Val:'||OLD.CAMPO_VALIDACAO||' -> '||NEW.CAMPO_VALIDACAO;
    END  

    IF(OLD.VALOR_VALIDACAO <> NEW.VALOR_VALIDACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' Vl.Val:'||OLD.VALOR_VALIDACAO||' -> '||NEW.VALOR_VALIDACAO;
    END
    
    IF(OLD.CONDICAO_INTERNA <> NEW.CONDICAO_INTERNA)THEN
    BEGIN
        HISTORICO = HISTORICO||' Cond.Int. Alterada.';
    END   
    
    IF(OLD.CONDICAO_EXTERNA <> NEW.CONDICAO_EXTERNA)THEN
    BEGIN
        HISTORICO = HISTORICO||' Cond.Ext. Alterada.';
    END  

    IF(OLD.STATUS <> NEW.STATUS)THEN
    BEGIN
        HISTORICO = HISTORICO||' Status:'||OLD.STATUS||' -> '||NEW.STATUS;
    END

    IF(OLD.VALOR_VALIDACAO_MINIMO <> NEW.VALOR_VALIDACAO_MINIMO)THEN
    BEGIN
        HISTORICO = HISTORICO||' Vl.Val.Min:'||OLD.VALOR_VALIDACAO_MINIMO||' -> '||NEW.VALOR_VALIDACAO_MINIMO;
    END  

    IF(OLD.VALOR_VALIDACAO_MAXIMO <> NEW.VALOR_VALIDACAO_MAXIMO)THEN
    BEGIN
        HISTORICO = HISTORICO||' Vl.Val.Max:'||OLD.VALOR_VALIDACAO_MAXIMO||' -> '||NEW.VALOR_VALIDACAO_MAXIMO;
    END  

    IF(OLD.OBSERVACAO <> NEW.OBSERVACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' Obs. Alterada.';
    END   

    IF(OLD.MENSAGEM_ERRO <> NEW.MENSAGEM_ERRO)THEN
    BEGIN
        HISTORICO = HISTORICO||' Msg.Erro Alterada.';
    END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCADASTRO_REGRA',NEW.ID,FN_ELIPSES(HISTORICO,500));
    END
END;

CREATE TRIGGER TTBCADASTRO_REGRA_B01D FOR TBCADASTRO_REGRA
ACTIVE BEFORE DELETE POSITION 9
AS
declare variable historico varchar(500);
BEGIN
  historico = '';
  IF(OLD.ID > 0) then
  BEGIN
    historico = historico||' Reg.excluido';
  END

  IF(HISTORICO <> '') then
  BEGIN
    execute procedure spi_historico('TBCADASTRO_REGRA',OLD.ID,historico);
  END
END;