-- TBAUTORIZACAO (Triggers de Histórico) --

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_B01I FOR TBAUTORIZACAO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GTBAUTORIZACAO,1);
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_B02I FOR TBAUTORIZACAO
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'AUTORIZACAO: '||FN_LPAD(NEW.ID, 4, 0)||' INCLUIDA';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBAUTORIZACAO', NEW.ID, FN_ELIPSES(:HISTORICO,500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_B01U FOR TBAUTORIZACAO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(OLD.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' ESTAB:'||OLD.ESTABELECIMENTO_ID||'->'||NEW.ESTABELECIMENTO_ID;
    END
    
    IF(OLD.CCUSTO_CODIGO <> NEW.CCUSTO_CODIGO)THEN
    BEGIN
        HISTORICO = HISTORICO||' C CUSTO:'||FN_MASK_V2(OLD.CCUSTO_CODIGO, 'CC')||'->'||FN_MASK_V2(NEW.CCUSTO_CODIGO, 'CC');
    END
    
    IF(OLD.GESTOR_ID <> NEW.GESTOR_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' GESTOR:'||OLD.GESTOR_ID||'->'||NEW.GESTOR_ID;
    END
    
    IF(OLD.COLABORADOR <> NEW.COLABORADOR)THEN
    BEGIN
        HISTORICO = HISTORICO||' COLAB:'||OLD.COLABORADOR||'->'||NEW.COLABORADOR;
    END

    IF(OLD.TOLERANCIA_COLAB <> NEW.TOLERANCIA_COLAB)THEN
    BEGIN
        HISTORICO = HISTORICO||' TOL ENT/SAI:'||OLD.TOLERANCIA_COLAB||'->'||NEW.TOLERANCIA_COLAB;
    END
    
    IF(OLD.TOLERANCIA_PORT <> NEW.TOLERANCIA_PORT)THEN
    BEGIN
        HISTORICO = HISTORICO||' TOL REG:'||OLD.TOLERANCIA_PORT||'->'||NEW.TOLERANCIA_PORT;
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ' REGISTRO ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBAUTORIZACAO', OLD.ID, FN_ELIPSES(:HISTORICO,500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_B01D FOR TBAUTORIZACAO
ACTIVE BEFORE DELETE POSITION 0
AS
    DECLARE VARIABLE AUT_DETALHE_ENT TIMESTAMP;
    DECLARE VARIABLE AUT_DETALHE_SAI TIMESTAMP;
BEGIN
    AUT_DETALHE_ENT = (SELECT FIRST 1 A.ENTRADA FROM TBAUTORIZACAO_DETALHE A WHERE A.AUTORIZACAO_ID = OLD.ID AND A.ENTRADA IS NOT NULL);
    AUT_DETALHE_SAI = (SELECT FIRST 1 A.SAIDA FROM TBAUTORIZACAO_DETALHE A WHERE A.AUTORIZACAO_ID = OLD.ID AND A.SAIDA IS NOT NULL);

    IF((AUT_DETALHE_ENT IS NOT NULL) OR (AUT_DETALHE_SAI IS NOT NULL)) THEN
    BEGIN
        EXCEPTION  "..." 'Autorização não pode ser excluída. Entrada/Saída já registrada em um dos Colaboradors/Terceiros cadastrados. ';
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_B02D FOR TBAUTORIZACAO
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'AUTORIZACAO: '||FN_LPAD(OLD.ID, 4, 0)||' EXCLUIDA';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBAUTORIZACAO', OLD.ID, FN_ELIPSES(:HISTORICO,500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_B03D FOR TBAUTORIZACAO
ACTIVE BEFORE DELETE POSITION 2
AS
BEGIN
  DELETE FROM TBAUTORIZACAO_DETALHE A WHERE A.AUTORIZACAO_ID = OLD.ID;  -- EXCLUI REGISTROS RELACIONADOS AO PAINEL DELETADO.
END
^

SET TERM ; ^

-- TBAUTORIZACAO_DETALHE (TRIGGERS DE HISTÓRICO) --

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_DETALHE_B01I FOR TBAUTORIZACAO_DETALHE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GTBAUTORIZACAO_DETALHE,1);
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_DETALHE_B02I FOR TBAUTORIZACAO_DETALHE
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'COLAB/PRESTADOR: '||FN_LPAD(NEW.ID, 4, 0)||' - '||NEW.NOME||' INCLUIDO';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBAUTORIZACAO', NEW.AUTORIZACAO_ID, FN_ELIPSES(:HISTORICO,500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_DETALHE_B01U FOR TBAUTORIZACAO_DETALHE
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(OLD.TIPO <> NEW.TIPO)THEN
    BEGIN
        HISTORICO = HISTORICO||' TIPO:'||OLD.TIPO||'->'||NEW.TIPO;
    END
    
    IF(OLD.NOME <> NEW.NOME)THEN
    BEGIN
        HISTORICO = HISTORICO||' NOME:'||OLD.NOME||'->'||NEW.NOME;
    END
    
    IF(OLD.ESTABELECIMENTO <> NEW.ESTABELECIMENTO)THEN
    BEGIN
        HISTORICO = HISTORICO||' ESTAB:'||OLD.ESTABELECIMENTO||'->'||NEW.ESTABELECIMENTO;
    END
    
    IF(OLD.DOCUMENTO <> NEW.DOCUMENTO)THEN
    BEGIN
        HISTORICO = HISTORICO||' DOCUMENTO:'||OLD.DOCUMENTO||'->'||NEW.DOCUMENTO;
    END
    
    IF(OLD.DATAHORA_ENTRADA <> NEW.DATAHORA_ENTRADA)THEN
    BEGIN
        HISTORICO = HISTORICO||' ENTRADA:'||OLD.DATAHORA_ENTRADA||'->'||NEW.DATAHORA_ENTRADA;
    END
    
    IF(OLD.DATAHORA_SAIDA <> NEW.DATAHORA_SAIDA)THEN
    BEGIN
        HISTORICO = HISTORICO||' SAIDA:'||OLD.DATAHORA_SAIDA||'->'||NEW.DATAHORA_SAIDA;
    END
    
    IF(OLD.INFORMACOES <> NEW.INFORMACOES)THEN
    BEGIN
        HISTORICO = HISTORICO||' INFORM:'||OLD.INFORMACOES||'->'||NEW.INFORMACOES;
    END
    
    IF(OLD.OBSERVACAO IS NULL AND NEW.OBSERVACAO IS NOT NULL)THEN
    BEGIN
        HISTORICO = HISTORICO||' OBS INCLUIDA:'||FN_ELIPSES(NEW.OBSERVACAO,50);
    END

    IF(OLD.OBSERVACAO <> NEW.OBSERVACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' OBS:'|| FN_ELIPSES(OLD.OBSERVACAO,50)||'->'||FN_ELIPSES(NEW.OBSERVACAO,50);
    END

    IF(OLD.ENTRADA IS NULL AND NEW.ENTRADA IS NOT NULL)THEN
    BEGIN
        HISTORICO = HISTORICO||' ENTRADA REGISTRADA, HORARIO:'||NEW.ENTRADA;
    END

    IF(OLD.ENTRADA IS NOT NULL AND NEW.ENTRADA IS NULL)THEN
    BEGIN
        HISTORICO = HISTORICO||' ENTRADA: '||OLD.ENTRADA||', REGISTRO EXCLUIDO';
    END
    
    IF(OLD.SAIDA IS NULL AND NEW.SAIDA IS NOT NULL)THEN
    BEGIN
        HISTORICO = HISTORICO||' SAIDA REGISTRADA, HORARIO:'||NEW.SAIDA;
    END

    IF(OLD.SAIDA IS NOT NULL AND NEW.SAIDA IS NULL)THEN
    BEGIN
        HISTORICO = HISTORICO||' SAIDA: '||OLD.SAIDA||', REGISTRO EXClUIDO';
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'COLAB/PRESTADOR: '||FN_LPAD(NEW.ID, 4, 0)||' - '||NEW.NOME||' DA AUTORIZACAO: '||FN_LPAD(OLD.AUTORIZACAO_ID, 4, 0)||' ALTERADO'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBAUTORIZACAO', OLD.AUTORIZACAO_ID, FN_ELIPSES(:HISTORICO,500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_DETALHE_B01D FOR TBAUTORIZACAO_DETALHE
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
    IF((OLD.ENTRADA IS NOT NULL) OR (OLD.SAIDA IS NOT NULL)) THEN
    BEGIN
        EXCEPTION  "..." 'Colaborador/Prestador '||OLD.NOME||' não pode ser excluído. Entrada/Saída já registrada. Entrada Registrada: '||FN_TIMESTAMP_TO_STRING(OLD.ENTRADA)||' Saída Registrada: '||FN_TIMESTAMP_TO_STRING(OLD.SAIDA);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBAUTORIZACAO_DETALHE_B02D FOR TBAUTORIZACAO_DETALHE
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'COLAB/PRESTADOR: '||FN_LPAD(OLD.ID, 4, 0)||' - '||OLD.NOME||' EXCLUIDO';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBAUTORIZACAO', OLD.AUTORIZACAO_ID, FN_ELIPSES(:HISTORICO,500));
    END
END
^

SET TERM ; ^