ALTER TABLE TBCAIXABANCO_PREVISAO
ADD DATA_COMPETENCIA DATE
DEFAULT CURRENT_DATE;

UPDATE TBCAIXABANCO_PREVISAO SET DATA_COMPETENCIA = DATA_PREVISAO;

CREATE OR ALTER TRIGGER TTBCAIXABANCO_PREVISAO_B01U FOR TBCAIXABANCO_PREVISAO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';
    IF(NEW.DATA_PREVISAO <> OLD.DATA_PREVISAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.PREV:'||OLD.DATA_PREVISAO||'->'||NEW.DATA_PREVISAO;
    END            
    
    IF(NEW.DATA_COMPETENCIA <> OLD.DATA_COMPETENCIA) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.COMP:'||OLD.DATA_COMPETENCIA||'->'||NEW.DATA_COMPETENCIA;
    END    

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

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

    IF(NEW.CAIXABANCO_CODIGO <> OLD.CAIXABANCO_CODIGO) THEN
    BEGIN
        HISTORICO = HISTORICO||' CAIXA/BANCO: '||OLD.CAIXABANCO_CODIGO||'->'||NEW.CAIXABANCO_CODIGO;
    END

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

    IF(NEW.VALOR_TOTAL <> OLD.VALOR_TOTAL) THEN
    BEGIN
        HISTORICO = HISTORICO||' VALOR TOT:'||'R$'||cast(OLD.VALOR_TOTAL as numeric(15,2))||'->'||'R$'||cast(NEW.VALOR_TOTAL as numeric(15,2));
    END  

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

    IF(NEW.PENDENTE <> OLD.PENDENTE) THEN
    BEGIN
        HISTORICO = HISTORICO||' PENDENTE:'||IIF(OLD.PENDENTE = '1', 'SIM', 'NAO')||'->'||IIF(NEW.PENDENTE = '1', 'SIM', 'NAO');
    END

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

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

    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ' REGISTRO ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCAIXABANCO_PREVISAO',NEW.CONTROLE,FN_ELIPSES(HISTORICO,500));
    END
END;

CREATE INDEX ITBCAIXABANCO_LANC_CLASS_11
ON TBCAIXABANCO_LANCAMENTO_CLASS (PREVISAO_ID);