SET TERM ^ ;

CREATE OR ALTER trigger ttbcheque_b01u for tbcheque
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_BANCO VARCHAR(500);
DECLARE VARIABLE NEW_BANCO VARCHAR(500);
BEGIN

    IF((OLD.DATA_RECEBIMENTO <> NEW.DATA_RECEBIMENTO) OR (OLD.BANCO_ID <> NEW.BANCO_ID) OR (OLD.AGENCIA <> NEW.AGENCIA) OR (OLD.CONTA <> NEW.CONTA) OR (OLD.CONTA_DIGITO <> NEW.CONTA_DIGITO) OR (OLD.NUMERO_CHEQUE <> NEW.NUMERO_CHEQUE) OR (OLD.NOME_TITULAR <> NEW.NOME_TITULAR) OR (OLD.DATA_CHEQUE <> NEW.DATA_CHEQUE) OR (OLD.VALOR <> NEW.VALOR))THEN
    BEGIN
        IF(NEW.CHEQUE_SEM_PARCELA > 0)THEN
        BEGIN
            IF((OLD.SITUACAO = 1) OR (OLD.SITUACAO = 4))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - BAIXADO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
            IF((OLD.SITUACAO = 2) OR (OLD.SITUACAO = 5))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - DEVOLVIDO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
        END
        IF(NEW.CHEQUE_SEM_PARCELA = 0)THEN
        BEGIN
            IF((OLD.SITUACAO = 1) OR (OLD.SITUACAO = 4))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - BAIXADO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
            IF((OLD.SITUACAO = 2) OR (OLD.SITUACAO = 5))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - DEVOLVIDO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
            IF(OLD.SITUACAO = 3)THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - QUITADO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
        END
    END

    HISTORICO = '';
    OLD_BANCO = COALESCE((SELECT FIRST 1 A.CODIGO||' - '||A.DESCRICAO FROM TBBANCO A WHERE A.CODIGO = OLD.BANCO_ID), '');
    NEW_BANCO = COALESCE((SELECT FIRST 1 A.CODIGO||' - '||A.DESCRICAO FROM TBBANCO A WHERE A.CODIGO = NEW.BANCO_ID), '');

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

        IF(OLD.SITUACAO = 0 AND NEW.SITUACAO = 3)THEN
        BEGIN
            /* Parcelas Baixadas */
            HISTORICO = HISTORICO||' BAIXA DAS PARCELAS DO CHEQUE REALIZADA';
        END
        IF(OLD.SITUACAO = 3 AND NEW.SITUACAO = 1)THEN
        BEGIN
            /* Cheque Baixado - Transferência */
            HISTORICO = HISTORICO||' BAIXA POR TRANSFERENCIA DO CHEQUE REALIZADA';
        END
        IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 2)THEN
        BEGIN
            /* Cheque Devolvido - Transferência */
            HISTORICO = HISTORICO||' DEVOLUCAO POR TRANSFERENCIA DO CHEQUE REALIZADA';
        END
        IF(OLD.SITUACAO = 3 AND NEW.SITUACAO = 4)THEN
        BEGIN
            /* Cheque Baixado - Antecipação */
            HISTORICO = HISTORICO||' BAIXA POR ANTECIPACAO DO CHEQUE REALIZADA';
        END
        IF(OLD.SITUACAO = 4 AND NEW.SITUACAO = 5)THEN
        BEGIN
            /* Cheque Devolvido - Antecipação */
            HISTORICO = HISTORICO||' DEVOLUCAO POR ANTECIPACAO DO CHEQUE REALIZADA';
        END
        -----------------------------------------------
        IF(OLD.SITUACAO = 3 AND NEW.SITUACAO = 0)THEN
        BEGIN
            /* Desfazer Parcelas Baixadas */
            HISTORICO = HISTORICO||' BAIXA DAS PARCELAS DO CHEQUE DESFEITA';
        END
        IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 3)THEN
        BEGIN
            /* Desfazer Cheque Baixado - Transferência */
            HISTORICO = HISTORICO||' BAIXA POR TRANSFERENCIA DO CHEQUE DESFEITA';
        END
        IF(OLD.SITUACAO = 2 AND NEW.SITUACAO = 1)THEN
        BEGIN
            /* Desfazer Cheque Devolvido - Transferência */
            HISTORICO = HISTORICO||' DEVOLUCAO POR TRANSFERENCIA DO CHEQUE DESFEITA';
        END
        IF(OLD.SITUACAO = 4 AND NEW.SITUACAO = 3)THEN
        BEGIN
            /* Desfazer Cheque Baixado - Antecipação */
            HISTORICO = HISTORICO||' BAIXA POR ANTECIPACAO DO CHEQUE DESFEITA';
        END
        IF(OLD.SITUACAO = 5 AND NEW.SITUACAO = 4)THEN
        BEGIN
            /* Desfazer Cheque Devolvido - Antecipação */
            HISTORICO = HISTORICO||' DEVOLUCAO POR ANTECIPACAO DO CHEQUE DESFEITA';
        END
    END

    IF(OLD.DATA_RECEBIMENTO <> NEW.DATA_RECEBIMENTO)THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.RECEBIMENTO:'||FORMATDATE(OLD.DATA_RECEBIMENTO)||'->'||FORMATDATE(NEW.DATA_RECEBIMENTO);
    END

    IF(OLD.BANCO_ID <> NEW.BANCO_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' BANCO:'||OLD_BANCO||'->'||NEW_BANCO;
    END

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

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

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

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

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

    IF(OLD.DATA_CHEQUE <> NEW.DATA_CHEQUE)THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.CHEQUE:'||FORMATDATE(OLD.DATA_CHEQUE)||'->'||FORMATDATE(NEW.DATA_CHEQUE);
    END

    IF(OLD.VALOR <> NEW.VALOR)THEN
    BEGIN
        HISTORICO = HISTORICO||' VALOR:R$'||CAST(OLD.VALOR AS NUMERIC(15,2))||'->R$'||CAST(NEW.VALOR AS NUMERIC(15,2));
    END

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

SET TERM ; ^

