SET TERM ^ ;

CREATE OR ALTER trigger ttbunidademedida_b01i for tbunidademedida
active before insert position 0
AS
DECLARE VARIABLE REGISTRO INTEGER;
BEGIN

    IF(NEW.SIGLA IS NOT NULL) THEN
    BEGIN
        REGISTRO = COALESCE((SELECT FIRST 1 A.ID FROM TBUNIDADEMEDIDA A WHERE A.SIGLA = NEW.SIGLA), 0);

        IF(REGISTRO > 0) THEN
        BEGIN
            EXCEPTION "..." 'SIGLA: '||NEW.SIGLA||' PARA UNIDADE DE MEDIDA JA CADASTRADA!';
        END
    END

    IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GTBUNIDADEMEDIDA, 1);

    NEW.IMPORTADO = '0';
END
^

SET TERM ; ^

DROP TRIGGER TTBUNIDADEMEDIDA_B0I;
DROP TRIGGER TTBUNIDADEMEDIDA_B03I;

SET TERM ^ ;

CREATE OR ALTER trigger ttbunidademedida_b02i for tbunidademedida
active before insert position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    IF (NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'REGISTRO INCLUIDO';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBUNIDADEMEDIDA', NEW.ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbunidademedida_b01u for tbunidademedida
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    HISTORICO = '';

    IF (NEW.IMPORTADO > 0) THEN
    BEGIN
        NEW.DESCRICAO = OLD.DESCRICAO;

        NEW.IMPORTADO = '0';
    END

    IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC:'||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
    END
    
    IF (OLD.STATUS <> NEW.STATUS) THEN
    BEGIN
        HISTORICO = HISTORICO||' STATUS:'|| OLD.STATUS||'->'||NEW.STATUS;
    END
    
    IF (OLD.SIGLA <> NEW.SIGLA) THEN
    BEGIN
        HISTORICO = HISTORICO||' SIGLA:'||OLD.SIGLA||'->'||NEW.SIGLA;
    END
    
    IF (OLD.PODE_FRACIONAR <> NEW.PODE_FRACIONAR) THEN
    BEGIN
        HISTORICO = HISTORICO||' FRACIONAR:'||OLD.PODE_FRACIONAR||'->'||NEW.PODE_FRACIONAR;
    END

    IF (OLD.DESCRICAO_ALT <> NEW.DESCRICAO_ALT) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC.ALTERNATIVA:'||OLD.DESCRICAO_ALT||'->'||NEW.DESCRICAO_ALT;
    END
    
    
    IF (OLD.STATUSEXCLUSAO <> NEW.STATUSEXCLUSAO AND NEW.STATUSEXCLUSAO = 0) THEN
    BEGIN
        HISTORICO = ' REGISTRO EXCLUIDO';
    END
    
    IF (OLD.STATUSEXCLUSAO <> NEW.STATUSEXCLUSAO AND NEW.STATUSEXCLUSAO = 1) THEN
    BEGIN
        HISTORICO = ' EXCLUSÃO DESFEITA';
    END
    
    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'REGISTRO ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBUNIDADEMEDIDA', OLD.ID, FN_ELIPSE(HISTORICO, 500));
    END
end
^

SET TERM ; ^

DROP TRIGGER TTBUNIDADEMEDIDA_B0U;

DROP TRIGGER TTBUNIDADEMEDIDA_B01D;

SET TERM ^ ;

CREATE OR ALTER trigger ttbunidademedida_b02d for tbunidademedida
active before delete position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'REGISTRO EXCLUIDO';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBUNIDADEMEDIDA', OLD.ID, HISTORICO);
    END
end
^

SET TERM ; ^

DROP TRIGGER TTBUNIDADEMEDIDA_B0D_01;

SET TERM ^ ;

CREATE OR ALTER trigger ttbunidademedida_b01d for tbunidademedida
active before delete position 0
AS
DECLARE VARIABLE p1 integer;
DECLARE VARIABLE p2 integer;
Begin

For Select
(Select First 1 A.Codigo From TbFamilia A Where A.UNIDADEMEDIDA_SIGLA = OLD.SIGLA) ,
(Select First 1 A.Codigo From TbProduto A Where A.UNIDADEMEDIDA_SIGLA = OLD.SIGLA)

FROM RDB$DATABASE
Into :p1 , :p2
Do
begin

  if (:P1 > 0) Then Exception "..." 'REGISTRO JÁ VINCULADO AO CADASTRO DE FAMÍLIAS. ID.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
  if (:P2 > 0) Then Exception "..." 'REGISTRO JÁ VINCULADO AO CADASTRO DE PRODUTOS. ID.'||:P2||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';

end

End
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbunidademedida_b03d for tbunidademedida
active before delete position 2
AS
BEGIN
    DELETE FROM TBUNIDADEMEDIDA_REGRA A WHERE A.UNIDADEMEDIDA_ORIGEM = OLD.ID; /* Exclui registros filhos */
    DELETE FROM TBUNIDADEMEDIDA_REGRA A WHERE A.UNIDADEMEDIDA_DESTINO = OLD.ID; /* Exclui registros proporcionais */
END
^

SET TERM ; ^

