CREATE OR ALTER TRIGGER TTBPDV_B01U FOR TBPDV
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
BEGIN

    HISTORICO = '';

    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.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' ESTAB:'||OLD.ESTABELECIMENTO_ID||'->'||NEW.ESTABELECIMENTO_ID;
    END 

    IF ( OLD.ABATER_ICMS <> NEW.ABATER_ICMS) THEN
    BEGIN
        HISTORICO = HISTORICO||' ABAT.ICMS:'||OLD.ABATER_ICMS||'->'||NEW.ABATER_ICMS;
    END

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

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

    IF ( OLD.SAT_MODELO <> NEW.SAT_MODELO) THEN
    BEGIN
        HISTORICO = HISTORICO||' SAT.MODLO:'||OLD.SAT_MODELO||'->'||NEW.SAT_MODELO;
    END

    IF ( OLD.SAT_GRAVAR_LOG <> NEW.SAT_GRAVAR_LOG) THEN
    BEGIN
        HISTORICO = HISTORICO||' GRAV.LOG:'||OLD.SAT_GRAVAR_LOG||'->'||NEW.SAT_GRAVAR_LOG;
    END

    IF ( OLD.SAT_VERSAO_XML <> NEW.SAT_VERSAO_XML) THEN
    BEGIN
        HISTORICO = HISTORICO||' VR.XML:'||OLD.SAT_VERSAO_XML||'->'||NEW.SAT_VERSAO_XML;
    END

    IF ( OLD.SAT_COD_ATIVACAO <> NEW.SAT_COD_ATIVACAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' SAT.COD.ATIV:'||OLD.SAT_COD_ATIVACAO||'->'||NEW.SAT_COD_ATIVACAO;
    END 

    IF ( OLD.SAT_SH_CNPJ <> NEW.SAT_SH_CNPJ) THEN
    BEGIN
        HISTORICO = HISTORICO||' SAT.CNPJ:'||OLD.SAT_SH_CNPJ||'->'||NEW.SAT_SH_CNPJ;
    END 

    IF ( OLD.SAT_SH_ASSINATURA <> NEW.SAT_SH_ASSINATURA) THEN
    BEGIN
        HISTORICO = HISTORICO||' SAT.CNPJ:'||OLD.SAT_SH_ASSINATURA||'->'||NEW.SAT_SH_ASSINATURA;
    END 

    IF ( OLD.SAT_NUMERO_SERIE <> NEW.SAT_NUMERO_SERIE) THEN
    BEGIN
        HISTORICO = HISTORICO||' SAT.CNPJ:'||OLD.SAT_NUMERO_SERIE||'->'||NEW.SAT_NUMERO_SERIE;
    END 

    IF ( OLD.MFE_CHAVE_ACESSO <> NEW.MFE_CHAVE_ACESSO) THEN
    BEGIN
        HISTORICO = HISTORICO||' CHAVE MFE:'||OLD.MFE_CHAVE_ACESSO||'->'||NEW.MFE_CHAVE_ACESSO;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'REGISTRO ALTERADO: '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV',NEW.ID, HISTORICO);
    END
end;

CREATE TRIGGER TTBPDV_CAIXA_B02I FOR TBPDV_CAIXA
ACTIVE BEFORE INSERT POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

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

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV',NEW.PDV_ID, HISTORICO);
    END
END;

CREATE TRIGGER TTBPDV_CAIXA_B01U FOR TBPDV_CAIXA
ACTIVE BEFORE UPDATE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
BEGIN
  HISTORICO = '';
  IF(NEW.DESCRICAO <> OLD.DESCRICAO) THEN
  BEGIN
     HISTORICO = HISTORICO||' DESC:'||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
  END 

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

  IF(NEW.TABELA_PRECO_ID <> OLD.TABELA_PRECO_ID) THEN
  BEGIN
     HISTORICO = HISTORICO||' TBL.PRECO:'||FN_LPAD(OLD.TABELA_PRECO_ID,4,0)||'->'||FN_LPAD(NEW.TABELA_PRECO_ID,4,0);
  END

  IF(HISTORICO <> '') THEN
  BEGIN
     HISTORICO = 'CAIXA ID:'||fn_lpad(OLD.ID,4,0)||' ALTERADO '||HISTORICO;
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV', NEW.PDV_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_CAIXA_B01D FOR TBPDV_CAIXA
ACTIVE BEFORE DELETE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'CAIXA ID:'||FN_LPAD(OLD.ID,4,0)||' - '||OLD.DESCRICAO||' EXCLUIDO.';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV',OLD.PDV_ID, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBPDV_OPERADOR_B02I FOR TBPDV_OPERADOR
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500); 
DECLARE VARIABLE NOME      VARCHAR(200);
BEGIN
    NOME      = (SELECT FIRST 1 IIF(CHAR_LENGTH(A.NOME) > 0, A.NOME, A.USUARIO) FROM TBUSUARIO A WHERE A.CODIGO = NEW.USUARIO_ID);
    HISTORICO = '';

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

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV',NEW.PDV_ID, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBPDV_OPERADOR_B01U FOR TBPDV_OPERADOR
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
DECLARE VARIABLE NOME      VARCHAR(200);
BEGIN
  NOME      = (SELECT FIRST 1 IIF(CHAR_LENGTH(A.NOME) > 0, A.NOME, A.USUARIO) FROM TBUSUARIO A WHERE A.CODIGO = NEW.USUARIO_ID);
  HISTORICO = '';
  IF(NEW.TIPO_OPERADOR <> OLD.TIPO_OPERADOR) THEN
  BEGIN
     HISTORICO = HISTORICO||' GERENTE:'||OLD.TIPO_OPERADOR||'->'||NEW.TIPO_OPERADOR;
  END 

  IF(NEW.CODIGO_OPERADOR <> OLD.CODIGO_OPERADOR) THEN
  BEGIN
     HISTORICO = HISTORICO||' COD.OPERADOR:'||OLD.CODIGO_OPERADOR||'->'||NEW.CODIGO_OPERADOR;
  END

  IF(HISTORICO <> '') THEN
  BEGIN
     HISTORICO = 'OPERADOR ID:'||fn_lpad(OLD.ID,4,0)||' ALTERADO '||HISTORICO;
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV', NEW.PDV_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_OPERADOR_B01D FOR TBPDV_OPERADOR
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
DECLARE VARIABLE NOME      VARCHAR(200);
BEGIN
    NOME      = (SELECT FIRST 1 IIF(CHAR_LENGTH(A.NOME) > 0, A.NOME, A.USUARIO) FROM TBUSUARIO A WHERE A.CODIGO = old.USUARIO_ID);
    HISTORICO = '';

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

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV',OLD.PDV_ID, HISTORICO);
    END
END;

CREATE TRIGGER TTBPDV_B03I FOR TBPDV
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
declare variable pdv_id integer;
begin
   pdv_id = coalesce((select first 1 a.id from TBPDV a where a.ESTABELECIMENTO_ID = new.ESTABELECIMENTO_ID and a.STATUS = 1 and a.ID <> new.ID),0);
   if(pdv_id > 0 and new.status = 1)then
   begin
      EXCEPTION "..." 'JÁ EXISTE UM PDV CADASTRADO PARA ESTE ESTABELECIMENTO! <BR> OPERAÇÃO CANCELADA!';
   end
end;