CREATE OR ALTER TRIGGER TTBCFOP_B02I FOR TBCFOP
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( NEW.CODIGO > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Reg.incluido.';
    END

    IF ((SELECT A.CODIGO FROM TBCFOP A WHERE A.CODIGO = NEW.CODIGO) > 0) then
    BEGIN
        EXCEPTION "..." 'Registro ja existente com os dados informados! CFOP: '||NEW.CODIGO;
    END

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

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

    HISTORICO = '';

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

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

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

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

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

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

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

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

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

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

    IF (OLD.VALOR_CONTABIL <> NEW.VALOR_CONTABIL) THEN
    BEGIN
        HISTORICO = HISTORICO||' Gerar Valor Cont: '||OLD.VALOR_CONTABIL||'->'||NEW.VALOR_CONTABIL;
    END

    IF (OLD.DEVOLUCAO_RETORNO <> NEW.DEVOLUCAO_RETORNO) THEN
    BEGIN
        HISTORICO = HISTORICO||' Devolucao/Retorno: '||OLD.DEVOLUCAO_RETORNO||'->'||NEW.DEVOLUCAO_RETORNO;
    END

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

    IF (OLD.SPED_PISCOF <> NEW.SPED_PISCOF) THEN
    BEGIN
        HISTORICO = HISTORICO||' Ger. de Receita/Crédito(PIS/COFINS): '|| OLD.SPED_PISCOF||'->'||NEW.SPED_PISCOF;
    END

    IF (OLD.REDUCAO_BASE_PISCOF <> NEW.REDUCAO_BASE_PISCOF) THEN
    BEGIN
        HISTORICO = HISTORICO||' Red.Vr.Icms: '||OLD.REDUCAO_BASE_PISCOF||'->'||NEW.REDUCAO_BASE_PISCOF;
    END

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

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

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

CREATE OR ALTER TRIGGER TTBCFOP_B02D FOR TBCFOP
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.CODIGO > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Reg.Excluido.';
    END

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