CREATE OR ALTER TRIGGER TTBCAIXABANCO_LANCAMENTO_B1U_01 FOR TBCAIXABANCO_LANCAMENTO
ACTIVE BEFORE UPDATE POSITION 1
AS
DECLARE VARIABLE SALDO NUMERIC(15,4);
BEGIN

IF (OLD.CAIXABANCO_CODIGO <> NEW.CAIXABANCO_CODIGO OR
    OLD.DATA_LANCAMENTO <> NEW.DATA_LANCAMENTO OR
    OLD.NATUREZA <> NEW.NATUREZA OR
    OLD.VALOR_TOTAL <> NEW.VALOR_TOTAL) THEN
    BEGIN

		IF(OLD.CONCILIACAO = '1')THEN
        BEGIN
			DELETE FROM TBCAIXABANCO_CONCILIACAO_DET Z WHERE Z.CAIXABANCO_LANC_ID = OLD.CONTROLE;
		END
		
        FOR
        SELECT
        COALESCE((SELECT FIRST 1 B.SALDO
           FROM TBCAIXABANCO_SALDO_DIARIO B
          WHERE B.CODIGO = NEW.CAIXABANCO_CODIGO
            AND B.DATA  <= NEW.DATA_LANCAMENTO
          ORDER BY B.DATA DESC),0) SALDO
        FROM RDB$DATABASE
        INTO :SALDO
        DO
        BEGIN
        
                UPDATE OR INSERT INTO TBCAIXABANCO_SALDO_DIARIO (CODIGO, DATA, SALDO)
                    VALUES (NEW.CAIXABANCO_CODIGO, NEW.DATA_LANCAMENTO, :SALDO)
                    MATCHING (CODIGO, DATA);
            
                IF (OLD.CAIXABANCO_CODIGO > 0) THEN
                    BEGIN
                    IF (OLD.NATUREZA = 'C') THEN
                        BEGIN
                
                        UPDATE TBCAIXABANCO_SALDO_DIARIO SET
                        SALDO = SALDO + OLD.VALOR_TOTAL
                         WHERE CODIGO = OLD.CAIXABANCO_CODIGO
                           AND DATA  >= OLD.DATA_LANCAMENTO;
                
                        UPDATE TBCAIXABANCO SET 
                        SALDO = SALDO + OLD.VALOR_TOTAL WHERE CODIGO = OLD.CAIXABANCO_CODIGO;
                
                        END
                    IF (OLD.NATUREZA = 'D') THEN
                        BEGIN
                
                        UPDATE TBCAIXABANCO_SALDO_DIARIO SET
                        SALDO = SALDO - OLD.VALOR_TOTAL
                         WHERE CODIGO = OLD.CAIXABANCO_CODIGO
                           AND DATA  >= OLD.DATA_LANCAMENTO;
                
                        UPDATE TBCAIXABANCO SET 
                        SALDO = SALDO - OLD.VALOR_TOTAL WHERE CODIGO = OLD.CAIXABANCO_CODIGO;
                
                        END
                    END
            
                IF (NEW.CAIXABANCO_CODIGO > 0) THEN
                    BEGIN

                    IF (NEW.NATUREZA = 'D') THEN
                        BEGIN
                        UPDATE TBCAIXABANCO_SALDO_DIARIO SET
                        SALDO = SALDO + NEW.VALOR_TOTAL
                         WHERE CODIGO = NEW.CAIXABANCO_CODIGO
                           AND DATA  >= NEW.DATA_LANCAMENTO;
                
                        UPDATE TBCAIXABANCO SET 
                        SALDO = SALDO + NEW.VALOR_TOTAL WHERE CODIGO = NEW.CAIXABANCO_CODIGO;
                        END
                
                    IF (NEW.NATUREZA = 'C') THEN
                        BEGIN
                        UPDATE TBCAIXABANCO_SALDO_DIARIO SET
                        SALDO = SALDO - NEW.VALOR_TOTAL
                         WHERE CODIGO = NEW.CAIXABANCO_CODIGO
                           AND DATA  >= NEW.DATA_LANCAMENTO;
                
                        UPDATE TBCAIXABANCO SET 
                        SALDO = SALDO - NEW.VALOR_TOTAL WHERE CODIGO = NEW.CAIXABANCO_CODIGO;
                        END
            
                    END
        END
    END

END;

CREATE OR ALTER TRIGGER TTBCAIXABANCO_LANCAMENTO_B1D_01 FOR TBCAIXABANCO_LANCAMENTO
ACTIVE BEFORE DELETE POSITION 1
AS
BEGIN

    IF(OLD.CONTROLE > 0) THEN
      BEGIN
        IF (OLD.NATUREZA = 'C') THEN
            BEGIN
    
            UPDATE TBCAIXABANCO_SALDO_DIARIO SET
            SALDO = SALDO + OLD.VALOR_TOTAL
             WHERE CODIGO = OLD.CAIXABANCO_CODIGO
               AND DATA  >= OLD.DATA_LANCAMENTO;
    
            UPDATE TBCAIXABANCO SET 
            SALDO = SALDO + OLD.VALOR_TOTAL WHERE CODIGO = OLD.CAIXABANCO_CODIGO;
    
            END
        IF (OLD.NATUREZA = 'D') THEN
            BEGIN
    
            UPDATE TBCAIXABANCO_SALDO_DIARIO SET
            SALDO = SALDO - OLD.VALOR_TOTAL
             WHERE CODIGO = OLD.CAIXABANCO_CODIGO
               AND DATA  >= OLD.DATA_LANCAMENTO;
    
            UPDATE TBCAIXABANCO SET 
            SALDO = SALDO - OLD.VALOR_TOTAL WHERE CODIGO = OLD.CAIXABANCO_CODIGO;
    
            END
    
         DELETE FROM TBCAIXABANCO_LANCAMENTO_CLASS WHERE CAIXABANCO_CONTROLE = OLD.CONTROLE;

         IF(OLD.CONCILIACAO = '1')THEN
         BEGIN
            DELETE FROM TBCAIXABANCO_CONCILIACAO_DET Z WHERE Z.CAIXABANCO_LANC_ID = OLD.CONTROLE;
         END
      END
END;