CREATE trigger ttbcaixabanco_lancamento_b03u for tbcaixabanco_lancamento
active before update position 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

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

     IF ( OLD.caixabanco_codigo <> NEW.caixabanco_codigo) THEN
    BEGIN
        HISTORICO = HISTORICO||', Cxa/Bco.:'|| OLD.caixabanco_codigo||'->'||NEW.caixabanco_codigo;
    END

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

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

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

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

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

    IF ( OLD.numero_cheque <> NEW.numero_cheque) THEN
    BEGIN
        HISTORICO = HISTORICO||', Histórico';
    END

    IF ( OLD.observacao <> NEW.observacao) THEN
    BEGIN
        HISTORICO = HISTORICO||', Observação';
    END

    IF ( OLD.observacao <> NEW.observacao) THEN
    BEGIN
        HISTORICO = HISTORICO||', Classificações';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCAIXABANCO_LANCAMENTO',NEW.controle, HISTORICO);
    END
	
	EXECUTE PROCEDURE SPI_HISTORICO('TBCAIXABANCO_LANCAMENTO',NEW.controle, '(20300) Lanç.alterado');
	
end;

CREATE OR ALTER trigger ttbcaixabanco_lancamento_b1i_01 for tbcaixabanco_lancamento
active before insert position 1
AS
Declare Variable Saldo Numeric(15,4);
BEGIN

	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);

	   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

    EXECUTE PROCEDURE SPI_HISTORICO('TBCAIXABANCO_LANCAMENTO',NEW.controle, '(20300) Lanç.incluído');

END;

