CREATE TRIGGER TTBCAIXABANCO_LANCAMENTO_B03I FOR TBCAIXABANCO_LANCAMENTO
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(NEW.CONTROLE > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'REG. INCLUÍDO.';
    END

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

CREATE OR ALTER TRIGGER TTBCAIXABANCO_LANCAMENTO_B03U FOR TBCAIXABANCO_LANCAMENTO
ACTIVE BEFORE UPDATE POSITION 9
AS
declare variable HISTORICO VARCHAR(8000);
begin
    HISTORICO = '';

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

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

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

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

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

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

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

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

    IF(NEW.OBSERVACAO <> OLD.OBSERVACAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' OBS:'||FN_ELIPSES(OLD.OBSERVACAO,100)||'->'||FN_ELIPSES(NEW.OBSERVACAO,100);
    END

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

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

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

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

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

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

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

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

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

    IF(HISTORICO <> '') THEN
    BEGIN
       EXECUTE PROCEDURE SPI_HISTORICO('TBCAIXABANCO_LANCAMENTO', NEW.CONTROLE, FN_ELIPSES(HISTORICO,500));
    END
END;

CREATE TRIGGER TTBCAIXABANCO_LANCAMENTO_B03D FOR TBCAIXABANCO_LANCAMENTO
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(OLD.CONTROLE > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'REG. EXCLUÍDO.';
    END

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

CREATE OR ALTER TRIGGER TTBCAIXABANCO_LANC_CLASS_B03I FOR TBCAIXABANCO_LANCAMENTO_CLASS
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(NEW.CONTROLE > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'LANC.CLASS. ID:'||NEW.CONTROLE||', CLASSIF.FIN:'||NEW.CLASSIFICACAO_CODIGO||', CCUSTO:'||NEW.CCUSTO||', CCONTABIL:'||NEW.CONTA_CONTABIL||' INCLUÍDA.';
    END

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

CREATE OR ALTER TRIGGER TTBCAIXABANCO_LANC_CLASS_B03D FOR TBCAIXABANCO_LANCAMENTO_CLASS
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(OLD.CONTROLE > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'LANC.CLASS. ID:'||OLD.CONTROLE||', CLASSIF.FIN:'||OLD.CLASSIFICACAO_CODIGO||', CCUSTO:'||OLD.CCUSTO||', CCONTABIL:'||OLD.CONTA_CONTABIL||' EXCLUÍDA.';
    END

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


CREATE OR ALTER TRIGGER TTBCAIXABANCO_LANC_CLASS_B03U FOR TBCAIXABANCO_LANCAMENTO_CLASS
ACTIVE BEFORE UPDATE POSITION 9
AS
declare variable HISTORICO VARCHAR(8000);
begin
    HISTORICO = '';

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    IF(HISTORICO <> '') THEN
    BEGIN
       HISTORICO = 'LANC.CLASS. ID:'||NEW.CONTROLE||', CLASSIF.FIN:'||NEW.CLASSIFICACAO_CODIGO||', CCUSTO:'||NEW.CCUSTO||', CCONTABIL:'||NEW.CONTA_CONTABIL||' ALTERADA'||HISTORICO;
       EXECUTE PROCEDURE SPI_HISTORICO('TBCAIXABANCO_LANCAMENTO', NEW.CAIXABANCO_CONTROLE, FN_ELIPSES(HISTORICO,500));
    END
END;

CREATE OR ALTER TRIGGER TTBCAIXABCO_LANC_CLASS_SAL_B02I FOR TBCAIXABANCO_LANC_CLASS_SALDO
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE CODIGO INTEGER;
DECLARE VARIABLE EMPRESA INTEGER;
DECLARE VARIABLE CCUSTO VARCHAR(10);
DECLARE VARIABLE CCONTABIL VARCHAR(11);
BEGIN

    HISTORICO = '';
    CODIGO    = COALESCE((SELECT FIRST 1 A.CAIXABANCO_CONTROLE FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = NEW.LANC_CLASS_ID),0);
    EMPRESA   = COALESCE((SELECT FIRST 1 A.EMPRESA_ID FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = NEW.LANC_CLASS_ID),0);
    CCUSTO    = COALESCE((SELECT FIRST 1 A.CCUSTO FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = NEW.LANC_CLASS_ID),0);
    CCONTABIL = COALESCE((SELECT FIRST 1 A.CONTA_CONTABIL FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = NEW.LANC_CLASS_ID),0);

    IF(NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'LANC.CLASS.ITEM:'||NEW.LANC_CLASS_ID||', CCUSTO:'||:CCUSTO||', CCONTABIL:'||:CCONTABIL||', CLIENTE:'||NEW.EMPRESA_ID||', VALOR:'||NEW.VALOR||', SALDO:'||NEW.SALDO||' INCLUÍDO.';
    END
    
    IF(HISTORICO <> '' AND CODIGO > 0) THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCAIXABANCO_LANCAMENTO', CODIGO, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBCAIXABCO_LANC_CLASS_SAL_B02D FOR TBCAIXABANCO_LANC_CLASS_SALDO
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE CODIGO INTEGER;
DECLARE VARIABLE EMPRESA INTEGER;
DECLARE VARIABLE CCUSTO VARCHAR(10);
DECLARE VARIABLE CCONTABIL VARCHAR(11);
BEGIN

    HISTORICO = '';
    CODIGO    = COALESCE((SELECT FIRST 1 A.CAIXABANCO_CONTROLE FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = OLD.LANC_CLASS_ID),0);
    EMPRESA   = COALESCE((SELECT FIRST 1 A.EMPRESA_ID FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = OLD.LANC_CLASS_ID),0);
    CCUSTO    = COALESCE((SELECT FIRST 1 A.CCUSTO FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = OLD.LANC_CLASS_ID),0);
    CCONTABIL = COALESCE((SELECT FIRST 1 A.CONTA_CONTABIL FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = OLD.LANC_CLASS_ID),0);

    IF(OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'LANC.CLASS.ITEM:'||OLD.LANC_CLASS_ID||', CCUSTO:'||:CCUSTO||', CCONTABIL:'||:CCONTABIL||', CLIENTE:'||OLD.EMPRESA_ID||', VALOR:'||OLD.VALOR||', SALDO:'||OLD.SALDO||' EXCLUÍDO.';
    END
    
    IF(HISTORICO <> '' AND CODIGO > 0) THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCAIXABANCO_LANCAMENTO', CODIGO, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBCAIXABCO_LANC_CLASS_SAL_B02U FOR TBCAIXABANCO_LANC_CLASS_SALDO
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE CODIGO INTEGER;
DECLARE VARIABLE EMPRESA INTEGER;
DECLARE VARIABLE CCUSTO VARCHAR(10);
DECLARE VARIABLE CCONTABIL VARCHAR(11);
BEGIN

    HISTORICO = '';
    CODIGO    = COALESCE((SELECT FIRST 1 A.CAIXABANCO_CONTROLE FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = NEW.LANC_CLASS_ID),0);
    EMPRESA   = COALESCE((SELECT FIRST 1 A.EMPRESA_ID FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = NEW.LANC_CLASS_ID),0);
    CCUSTO    = COALESCE((SELECT FIRST 1 A.CCUSTO FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = NEW.LANC_CLASS_ID),0);
    CCONTABIL = COALESCE((SELECT FIRST 1 A.CONTA_CONTABIL FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.CONTROLE = NEW.LANC_CLASS_ID),0);

    IF(OLD.EMPRESA_ID <> NEW.EMPRESA_ID) THEN
    BEGIN
       HISTORICO = HISTORICO||' CLIENTE:'||OLD.EMPRESA_ID||'->'||NEW.EMPRESA_ID;
    END
    
    IF(OLD.VALOR <> NEW.VALOR) THEN
    BEGIN
       HISTORICO = HISTORICO||' VALOR:'||OLD.VALOR||'->'||NEW.VALOR;
    END
    
    IF(OLD.SALDO <> NEW.SALDO) THEN
    BEGIN
       HISTORICO = HISTORICO||' SALDO:'||OLD.SALDO||'->'||NEW.SALDO;
    END 
    
    IF(OLD.PEDIDO <> NEW.PEDIDO) THEN
    BEGIN
       HISTORICO = HISTORICO||' PEDIDO:'||OLD.PEDIDO||'->'||NEW.PEDIDO;
    END

    IF(HISTORICO <> '' AND CODIGO > 0) THEN
    BEGIN
       HISTORICO = 'LANC.CLASS.ITEM:'||NEW.LANC_CLASS_ID||', CCUSTO:'||:CCUSTO||', CCONTABIL:'||:CCONTABIL||', CLIENTE:'||OLD.EMPRESA_ID||', VALOR:'||OLD.VALOR||', SALDO:'||OLD.SALDO||' ALTERADO.'||HISTORICO;
       EXECUTE PROCEDURE SPI_HISTORICO('TBCAIXABANCO_LANCAMENTO', CODIGO, HISTORICO);
    END
END;

CREATE OR ALTER TRIGGER TTBMOVCONTABIL_A01I FOR TBMOVCONTABIL
ACTIVE AFTER INSERT OR UPDATE POSITION 9
AS
declare variable CODIGO INTEGER;
begin
    CODIGO = COALESCE((SELECT FIRST 1 A.CONTROLE FROM TBCAIXABANCO_LANCAMENTO_CLASS A, TBMOVCONTABIL B
                        WHERE NEW.DATA = A.DATA AND A.TIPO = NEW.NATUREZA
                        AND NEW.IDDOCUMENTO = FN_LPAD(A.CAIXABANCO_CONTROLE,6,0)
                        AND A.CONTA_CONTABIL = NEW.CONTA
                        AND B.DATA = A.DATA AND A.TIPO = B.NATUREZA
                        AND B.IDDOCUMENTO = FN_LPAD(A.CAIXABANCO_CONTROLE,6,0)
                        AND A.CONTA_CONTABIL = B.CONTA
                        AND B.CODORIGEM = 'BCO'),0);
    IF(CODIGO > 0)THEN
    BEGIN
        UPDATE TBCAIXABANCO_LANCAMENTO_CLASS A SET A.MOVCONTABIL_ID = NEW.ID WHERE A.CONTROLE = :CODIGO;
    END
end;