ALTER TABLE TBCHEQUE
    ADD OBSERVACAO_REEMBOLSO VARCHAR(200) CHARACTER SET UTF8 COLLATE UTF8;

COMMENT ON COLUMN TBCHEQUE.OBSERVACAO_REEMBOLSO IS
'OBSERVAÇÃO PARA REEMBOLSO DO CHEQUE (SIT: 7 e 8);';

/**************************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbcheque_b01u for tbcheque
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE NEW_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE OLD_BANCO VARCHAR(500);
DECLARE VARIABLE NEW_BANCO VARCHAR(500);
DECLARE VARIABLE OLD_CAIXABANCO VARCHAR(500);
DECLARE VARIABLE NEW_CAIXABANCO 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) OR (OLD.CAIXABANCO_ID <> NEW.CAIXABANCO_ID))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
            IF((OLD.SITUACAO = 7) OR (OLD.SITUACAO = 8))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - REEMBOLSADO, 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
            IF((OLD.SITUACAO = 7) OR (OLD.SITUACAO = 8))THEN
            BEGIN
                EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: '||OLD.SITUACAO||' - REEMBOLSADO, ALTERAÇÃO NÃO AUTORIZADA!';
            END
        END
    END

    HISTORICO = '';
    OLD_ESTABELECIMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.NOMEFANTASIA FROM TBESTABELECIMENTO C WHERE C.CODIGO = OLD.ESTABELECIMENTO_ID), '');
    NEW_ESTABELECIMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.NOMEFANTASIA FROM TBESTABELECIMENTO C WHERE C.CODIGO = NEW.ESTABELECIMENTO_ID), '');
    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), '');
    OLD_CAIXABANCO = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.NOME FROM TBCAIXABANCO B WHERE B.CODIGO = OLD.CAIXABANCO_ID), '');
    NEW_CAIXABANCO = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.NOME FROM TBCAIXABANCO B WHERE B.CODIGO = NEW.CAIXABANCO_ID), '');

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

        IF((OLD.SITUACAO = 0 AND NEW.SITUACAO = 3) AND (OLD.CHEQUE_SEM_PARCELA = NEW.CHEQUE_SEM_PARCELA))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 = 5 AND NEW.SITUACAO = 8) OR (OLD.SITUACAO = 2 AND NEW.SITUACAO = 7))THEN
        BEGIN
            /* Cheque Reembolsado */
            HISTORICO = HISTORICO||' REEMBOLSO DO CHEQUE REALIZADO';
        END
        -----------------------------------------------
        IF((OLD.SITUACAO = 3 AND NEW.SITUACAO = 0) AND (OLD.CHEQUE_SEM_PARCELA = NEW.CHEQUE_SEM_PARCELA))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
        IF((OLD.SITUACAO = 8 AND NEW.SITUACAO = 5) OR (OLD.SITUACAO = 7 AND NEW.SITUACAO = 2))THEN
        BEGIN
            /* Desfazer Cheque Reembolsado */
            HISTORICO = HISTORICO||' REEMBOLSO DO CHEQUE DESFEITO';
        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.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' ESTAB:'||OLD_ESTABELECIMENTO||'->'||NEW_ESTABELECIMENTO;
    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(OLD.CHEQUE_SEM_PARCELA <> NEW.CHEQUE_SEM_PARCELA)THEN
    BEGIN
        HISTORICO = HISTORICO||' SEM DOC.REF.:'||OLD.CHEQUE_SEM_PARCELA||'->'||NEW.CHEQUE_SEM_PARCELA;
    END

    IF(OLD.CAIXABANCO_ID <> NEW.CAIXABANCO_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' CAIXA/BANCO:'||OLD_CAIXABANCO||'->'||NEW_CAIXABANCO;
    END
    
    IF(OLD.DATAHORA_REEMBOLSO <> NEW.DATAHORA_REEMBOLSO)THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.REEMBOLSO:'||FN_TIMESTAMP_TO_STRING(OLD.DATAHORA_REEMBOLSO)||'->'||FN_TIMESTAMP_TO_STRING(NEW.DATAHORA_REEMBOLSO);
    END
    
    IF(OLD.OBSERVACAO <> NEW.OBSERVACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' OBSERVAÇÃO DO CHEQUE ALTERADA!';
    END

    IF(OLD.OBSERVACAO_REEMBOLSO <> NEW.OBSERVACAO_REEMBOLSO)THEN
    BEGIN
        HISTORICO = HISTORICO||' OBSERVAÇÃO PARA REEMBOLSO DO CHEQUE ALTERADA!';
    END

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

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcheque_b03u for tbcheque
active before update position 2
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    IF(OLD.OBSERVACAO_REEMBOLSO <> NEW.OBSERVACAO_REEMBOLSO)THEN
    BEGIN
        HISTORICO = HISTORICO||FN_ELIPSES(OLD.OBSERVACAO_REEMBOLSO, 200)||'->'||FN_ELIPSES(NEW.OBSERVACAO_REEMBOLSO, 200);
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ' OBSERVAÇÃO PARA REEMBOLSO DO CHEQUE ALTERADA:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCHEQUE', OLD.ID, FN_ELIPSES(HISTORICO, 500));
    END
END
^

SET TERM ; ^

