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

    HISTORICO = '';
    IF(NEW.ID > 0)THEN
    BEGIN
        HISTORICO = 'REGISTRO INCLUIDO.';
    END

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

CREATE TRIGGER TTBPDV_MOVIMENTO_B01U FOR TBPDV_MOVIMENTO
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
  HISTORICO = '';

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

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

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

CREATE TRIGGER TTBPDV_MOVIMENTO_B02U FOR TBPDV_MOVIMENTO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
BEGIN
  HISTORICO = '';
  IF(NEW.DATAHORA_ABERTURA IS NOT NULL)THEN
  BEGIN
     HISTORICO = 'ABERTURA DO DIA: '||FORMATDATE(OLD.DATA)||' REALIZADA PELO OPERADOR: '||NEW.OPERADOR_ABERTURA;
  END

  IF(NEW.DATAHORA_FECHAMENTO IS NOT NULL)THEN
  BEGIN
     HISTORICO = 'FECHAMENTO DO DIA: '||FORMATDATE(OLD.DATA)||' REALIZADA PELO OPERADOR: '||NEW.OPERADOR_FECHAMENTO;
  END

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

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

    HISTORICO = '';
    IF(OLD.ID > 0)THEN
    BEGIN
       HISTORICO = 'REGISTRO EXCLUIDO.';
    END

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

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_DETALHE_B02I FOR TBPDV_MOVIMENTO_DETALHE
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
DECLARE VARIABLE OPERACAO  VARCHAR(500);
DECLARE VARIABLE CLIENTE   VARCHAR(500);
BEGIN
--    OPERACAO  = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,4,0)||' - '||A.DESCRICAO FROM TBCONTA_RECEBER_OPERACAO A WHERE A.CODIGO = NEW.OPERACAO_CODIGO),'');
--    CLIENTE   = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO,5,0)||' - '||B.RAZAOSOCIAL FROM TBEMPRESA B WHERE B.CODIGO = NEW.CLIENTE_ID),'');
    HISTORICO = '';
    IF(NEW.ID > 0)THEN
    BEGIN
       HISTORICO = 'MOV.ID:'||fn_lpad(NEW.ID,4,0)||', OP.COD:'||FN_LPAD(NEW.OPERACAO_CODIGO,4,0)||', CLIENTE:'||FN_LPAD(NEW.CLIENTE_ID,5,0)||' INCLUIDA.';
    END

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

CREATE TRIGGER TTBPDV_MOVIMENTO_DETALHE_B01U FOR TBPDV_MOVIMENTO_DETALHE
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
BEGIN
  HISTORICO = '';

  IF(NEW.OPERACAO_CODIGO <> OLD.OPERACAO_CODIGO) THEN
  BEGIN
     HISTORICO = HISTORICO||' OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||'->'||FN_LPAD(NEW.OPERACAO_CODIGO,4,0);
  END 

  IF(NEW.CLIENTE_ID <> OLD.CLIENTE_ID) THEN
  BEGIN
     HISTORICO = HISTORICO||' CLIENTE:'||FN_LPAD(OLD.CLIENTE_ID,5,0)||'->'||FN_LPAD(NEW.CLIENTE_ID,5,0);
  END  

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

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

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

  IF(HISTORICO <> '') THEN
  BEGIN
     HISTORICO = 'MOV.ID:'||fn_lpad(NEW.ID,4,0)||', OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||', CLIENTE:'||FN_LPAD(OLD.CLIENTE_ID,5,0)||' ALTERADA'||HISTORICO;
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', OLD.ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE TRIGGER TTBPDV_MOVIMENTO_DETALHE_B01D FOR TBPDV_MOVIMENTO_DETALHE
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
DECLARE VARIABLE OPERACAO  VARCHAR(500);
DECLARE VARIABLE CLIENTE   VARCHAR(500);
BEGIN
--    OPERACAO  = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,4,0)||' - '||A.DESCRICAO FROM TBCONTA_RECEBER_OPERACAO A WHERE A.CODIGO = NEW.OPERACAO_CODIGO),'');
--    CLIENTE   = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO,5,0)||' - '||B.RAZAOSOCIAL FROM TBEMPRESA B WHERE B.CODIGO = NEW.CLIENTE_ID),'');
    HISTORICO = '';
    IF(OLD.ID > 0)THEN
    BEGIN
       HISTORICO = 'MOV.ID:'||fn_lpad(OLD.ID,4,0)||', OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||', CLIENTE:'||FN_LPAD(OLD.CLIENTE_ID,5,0)||' INCLUIDA.';
    END

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

CREATE TRIGGER TTBPDV_MOVIMENTO_CAIXA_B02I FOR TBPDV_MOVIMENTO_CAIXA
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
DECLARE VARIABLE OPERACAO  VARCHAR(500);
DECLARE VARIABLE CLIENTE   VARCHAR(500);
BEGIN
--    OPERACAO  = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,4,0)||' - '||A.DESCRICAO FROM TBCONTA_RECEBER_OPERACAO A WHERE A.CODIGO = NEW.OPERACAO_CODIGO),'');
--    CLIENTE   = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO,5,0)||' - '||B.RAZAOSOCIAL FROM TBEMPRESA B WHERE B.CODIGO = NEW.CLIENTE_ID),'');
    HISTORICO = '';
    IF(NEW.ID > 0)THEN
    BEGIN
       HISTORICO = 'CAIXA ID:'||fn_lpad(NEW.PDV_CAIXA_ID,4,0)||', ABERTO PELO OPERADOR:'||FN_LPAD(NEW.OPERADOR_ABERTURA,4,0)||', DATA/HORA:'||FORMATDATETIME(NEW.DATAHORA_ABERTURA)||'.';
    END

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

CREATE TRIGGER TTBPDV_MOVIMENTO_CAIXA_DET_B02I FOR TBPDV_MOVIMENTO_CAIXA_DET
ACTIVE BEFORE INSERT POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
declare variable PDV_MOVIMENTO_ID INTEGER;
BEGIN
  HISTORICO = '';
  PDV_MOVIMENTO_ID = COALESCE((SELECT FIRST 1 A.ID FROM TBPDV_MOVIMENTO A WHERE A.ID = (SELECT FIRST 1 B.PDV_MOVIMENTO_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = NEW.PDV_MOVIMENTO_CAIXA_ID)),0);

  IF(NEW.PDV_MOVIMENTO_CAIXA_ID IS NOT NULL AND PDV_MOVIMENTO_ID > 0) THEN
  BEGIN
     HISTORICO = 'MOV.ID:'||fn_lpad(NEW.ID,4,0)||',CAIXA:'||FN_LPAD(NEW.PDV_MOVIMENTO_CAIXA_ID,4,0)||', OP:'||FN_LPAD(NEW.OPERACAO_CODIGO,4,0)||' INCLUIDO';
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', PDV_MOVIMENTO_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_CAIXA_B01U FOR TBPDV_MOVIMENTO_CAIXA
ACTIVE BEFORE UPDATE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
BEGIN
    HISTORICO = '';
    IF(OLD.ID > 0 AND NEW.OPERADOR_FECHAMENTO > 0)THEN
    BEGIN
       HISTORICO = 'CAIXA ID:'||fn_lpad(OLD.PDV_CAIXA_ID,4,0)||', ABERTO PELO OPERADOR:'||FN_LPAD(NEW.OPERADOR_FECHAMENTO,4,0)||', DATA/HORA:'||FORMATDATETIME(NEW.DATAHORA_FECHAMENTO)||'.';
    END

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

CREATE TRIGGER TTBPDV_MOVIMENTO_CAIXA_DET_BU0 FOR TBPDV_MOVIMENTO_CAIXA_DET
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
declare variable PDV_MOVIMENTO_ID INTEGER;
BEGIN
  HISTORICO = '';
  PDV_MOVIMENTO_ID = COALESCE((SELECT FIRST 1 A.ID FROM TBPDV_MOVIMENTO A WHERE A.ID = (SELECT FIRST 1 B.PDV_MOVIMENTO_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = NEW.PDV_MOVIMENTO_CAIXA_ID)),0);
  IF(NEW.OPERACAO_CODIGO <> OLD.OPERACAO_CODIGO) THEN
  BEGIN
     HISTORICO = HISTORICO||' OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||'->'||FN_LPAD(NEW.OPERACAO_CODIGO,4,0);
  END 

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

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

  IF(HISTORICO <> '' AND NEW.PDV_MOVIMENTO_CAIXA_ID IS NOT NULL AND PDV_MOVIMENTO_ID > 0) THEN
  BEGIN
     HISTORICO = 'MOV.ID:'||fn_lpad(OLD.ID,4,0)||',CAIXA:'||FN_LPAD(OLD.PDV_MOVIMENTO_CAIXA_ID,4,0)||', OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||' ALTERADA '||HISTORICO;
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', PDV_MOVIMENTO_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE TRIGGER TTBPDV_MOVIMENTO_CAIXA_DET_B02D FOR TBPDV_MOVIMENTO_CAIXA_DET
ACTIVE BEFORE DELETE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
declare variable PDV_MOVIMENTO_ID INTEGER;
BEGIN
  HISTORICO = '';
  PDV_MOVIMENTO_ID = COALESCE((SELECT FIRST 1 A.ID FROM TBPDV_MOVIMENTO A WHERE A.ID = (SELECT FIRST 1 B.PDV_MOVIMENTO_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = OLD.PDV_MOVIMENTO_CAIXA_ID)),0);

  IF(OLD.PDV_MOVIMENTO_CAIXA_ID IS NOT NULL AND PDV_MOVIMENTO_ID > 0) THEN
  BEGIN
     HISTORICO = 'MOV.ID:'||fn_lpad(OLD.ID,4,0)||',CAIXA:'||FN_LPAD(OLD.PDV_MOVIMENTO_CAIXA_ID,4,0)||', OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||' EXCLUIDO';
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', PDV_MOVIMENTO_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_B02U FOR TBPDV_MOVIMENTO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
declare variable OPERADOR VARCHAR(500);
BEGIN
  HISTORICO = '';
  IF(NEW.DATAHORA_ABERTURA IS NOT NULL AND OLD.DATAHORA_ABERTURA IS NULL)THEN
  BEGIN
     OPERADOR  = (SELECT FIRST 1 IIF(CHAR_LENGTH(B.NOME) > 0, B.NOME, B.USUARIO) FROM TBPDV_OPERADOR A, TBUSUARIO B WHERE A.ID = NEW.OPERADOR_ABERTURA AND B.CODIGO = A.USUARIO_ID AND A.PDV_ID = NEW.PDV_ID);
     HISTORICO = 'ABERTURA DO DIA: '||FORMATDATE(OLD.DATA)||' REALIZADA PELO OPERADOR: '||FN_LPAD(NEW.OPERADOR_ABERTURA,4,0)||' - '||OPERADOR||', DATA/HORA:'||FORMATDATETIME(NEW.DATAHORA_ABERTURA)||'.';
  END

  IF(NEW.DATAHORA_FECHAMENTO IS NOT NULL AND OLD.DATAHORA_FECHAMENTO IS NULL)THEN
  BEGIN
     OPERADOR  = (SELECT FIRST 1 IIF(CHAR_LENGTH(B.NOME) > 0, B.NOME, B.USUARIO) FROM TBPDV_OPERADOR A, TBUSUARIO B WHERE A.ID = NEW.OPERADOR_FECHAMENTO AND B.CODIGO = A.USUARIO_ID AND A.PDV_ID = NEW.PDV_ID);
     HISTORICO = 'FECHAMENTO DO DIA: '||FORMATDATE(OLD.DATA)||' REALIZADA PELO OPERADOR: '||FN_LPAD(NEW.OPERADOR_FECHAMENTO,4,0)||' - '||OPERADOR||', DATA/HORA:'||FORMATDATETIME(NEW.DATAHORA_FECHAMENTO)||'.';
  END

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

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_CAIXA_B01U FOR TBPDV_MOVIMENTO_CAIXA
ACTIVE BEFORE UPDATE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
BEGIN
    HISTORICO = '';
    IF(OLD.ID > 0 AND NEW.OPERADOR_FECHAMENTO > 0)THEN
    BEGIN
       HISTORICO = 'CAIXA ID:'||fn_lpad(OLD.PDV_CAIXA_ID,4,0)||', FECHADO PELO OPERADOR:'||FN_LPAD(NEW.OPERADOR_FECHAMENTO,4,0)||', DATA/HORA:'||FORMATDATETIME(NEW.DATAHORA_FECHAMENTO)||'.';
    END

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

CREATE OR ALTER TRIGGER TTBPDV_MOV_CAIXA_ABERTURA_B02I FOR TBPDV_MOV_CAIXA_ABERTURA
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
declare variable OPERADOR VARCHAR(500);
begin
  HISTORICO = '';

  IF(NEW.ID > 0 AND NEW.OPERADOR_ABERTURA > 0) THEN
  BEGIN
     OPERADOR  = (SELECT FIRST 1 IIF(CHAR_LENGTH(B.NOME) > 0, B.NOME, B.USUARIO) FROM TBPDV_OPERADOR A, TBUSUARIO B WHERE A.ID = NEW.OPERADOR_ABERTURA AND B.CODIGO = A.USUARIO_ID);
     HISTORICO = 'CAIXA ID:'||fn_lpad(NEW.PDV_CAIXA_ID,4,0)||', ABERTO PELO OPERADOR:'||FN_LPAD(NEW.OPERADOR_ABERTURA,4,0)||' - '||OPERADOR||', DATA/HORA:'||FORMATDATETIME(NEW.DATAHORA_ABERTURA)||'.';
  END            

  IF(NEW.ID > 0 AND NEW.OPERADOR_FECHAMENTO > 0) THEN
  BEGIN
     OPERADOR  = (SELECT FIRST 1 IIF(CHAR_LENGTH(B.NOME) > 0, B.NOME, B.USUARIO) FROM TBPDV_OPERADOR A, TBUSUARIO B WHERE A.ID = NEW.OPERADOR_FECHAMENTO AND B.CODIGO = A.USUARIO_ID);
     HISTORICO = 'CAIXA ID:'||fn_lpad(NEW.PDV_CAIXA_ID,4,0)||', FECHADO PELO OPERADOR:'||FN_LPAD(NEW.OPERADOR_FECHAMENTO,4,0)||' - '||OPERADOR||', DATA/HORA:'||FORMATDATETIME(NEW.DATAHORA_FECHAMENTO)||'.';
  END

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

end;

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_CAIXA_DET_B01U FOR TBPDV_MOVIMENTO_CAIXA_DET
ACTIVE BEFORE UPDATE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
declare variable PDV_MOVIMENTO_ID INTEGER;
declare variable CAIXA_ID INTEGER;
BEGIN
  HISTORICO        = '';
  CAIXA_ID         = COALESCE((SELECT FIRST 1 B.PDV_CAIXA_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = NEW.PDV_MOVIMENTO_CAIXA_ID),0);
  PDV_MOVIMENTO_ID = COALESCE((SELECT FIRST 1 B.PDV_MOVIMENTO_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = NEW.PDV_MOVIMENTO_CAIXA_ID),0);

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

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

  IF(NEW.OBSERVACAO <> OLD.OBSERVACAO) THEN
  BEGIN
     HISTORICO = HISTORICO||' OBS:'||OLD.OBSERVACAO||'->'||NEW.OBSERVACAO;
  END
  IF(HISTORICO <> '' AND NEW.PDV_MOVIMENTO_CAIXA_ID IS NOT NULL AND PDV_MOVIMENTO_ID > 0) THEN
  BEGIN
     HISTORICO = 'LANC.ID:'||fn_lpad(OLD.ID,4,0)||',CAIXA:'||FN_LPAD(CAIXA_ID,4,0)||', OPE:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||' ALTERADA '||HISTORICO;
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', PDV_MOVIMENTO_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_CAIXA_DET_B02D FOR TBPDV_MOVIMENTO_CAIXA_DET
ACTIVE BEFORE DELETE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
declare variable PDV_MOVIMENTO_ID INTEGER;
BEGIN
  HISTORICO = '';
  PDV_MOVIMENTO_ID = COALESCE((SELECT FIRST 1 A.ID FROM TBPDV_MOVIMENTO A WHERE A.ID = (SELECT FIRST 1 B.PDV_MOVIMENTO_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = OLD.PDV_MOVIMENTO_CAIXA_ID)),0);

  IF(OLD.PDV_MOVIMENTO_CAIXA_ID IS NOT NULL AND PDV_MOVIMENTO_ID > 0) THEN
  BEGIN
     HISTORICO = 'OP.ID:'||fn_lpad(OLD.ID,4,0)||',CAIXA:'||FN_LPAD(OLD.PDV_MOVIMENTO_CAIXA_ID,4,0)||', OPE:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||' EXCLUIDA';
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', PDV_MOVIMENTO_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_DETALHE_B01IUD FOR TBPDV_MOVIMENTO_DETALHE
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
 /* ATUALIZAR O SALDO DURANTE A INCLUSÃO DO LANÇAMENTO */
 if (inserting) then
 begin
      new.VALOR_SALDO = new.valor;
 end
 /* ATUALIZAR O SALDO DURANTE A ALTERAÇÃO DO LANÇAMENTO SE O SALDO NÃO TIVER SIDO ALTERADO */
 if(updating) then
 begin
      if((old.VALOR_SALDO <> old.VALOR) or (OLD.VALOR_SALDO = 0))THEN
      BEGIN
          EXCEPTION "..." 'SALDO DO LANÇAMENTO FOI UTILIZADO, OPERAÇÃO CANCELADA!';
      END
      if(new.VALOR <> old.valor and old.VALOR_SALDO = old.VALOR)THEN
      BEGIN
        new.VALOR_SALDO = new.valor;
      END
 end
 /* BLOQUEIO DE EXCLUSÃO DE LANÇAMENTO SE ACASO O SALDO TIVER SIDO UTILIZADO */
 if (DELETING) then
 begin
     if((old.VALOR_SALDO <> old.VALOR) or (OLD.VALOR_SALDO = 0) )THEN
     BEGIN
          EXCEPTION "..." 'SALDO DO LANÇAMENTO FOI UTILIZADO, OPERAÇÃO CANCELADA!';
     END
 end  

end;

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_DETALHE_B02I FOR TBPDV_MOVIMENTO_DETALHE
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
DECLARE VARIABLE OPERACAO  VARCHAR(500);
DECLARE VARIABLE CLIENTE   VARCHAR(500);
BEGIN
--    OPERACAO  = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,4,0)||' - '||A.DESCRICAO FROM TBCONTA_RECEBER_OPERACAO A WHERE A.CODIGO = NEW.OPERACAO_CODIGO),'');
--    CLIENTE   = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO,5,0)||' - '||B.RAZAOSOCIAL FROM TBEMPRESA B WHERE B.CODIGO = NEW.CLIENTE_ID),'');
    HISTORICO = '';
    IF(NEW.ID > 0)THEN
    BEGIN
       HISTORICO = 'LANC.ID:'||fn_lpad(NEW.ID,4,0)||', OP:'||FN_LPAD(NEW.OPERACAO_CODIGO,4,0)||', CLIENTE:'||FN_LPAD(NEW.CLIENTE_ID,5,0)||' INCLUIDA.';
    END

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

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_DETALHE_B01U FOR TBPDV_MOVIMENTO_DETALHE
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
BEGIN
  HISTORICO = '';

  IF(NEW.OPERACAO_CODIGO <> OLD.OPERACAO_CODIGO) THEN
  BEGIN
     HISTORICO = HISTORICO||' OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||'->'||FN_LPAD(NEW.OPERACAO_CODIGO,4,0);
  END 

  IF(NEW.CLIENTE_ID <> OLD.CLIENTE_ID) THEN
  BEGIN
     HISTORICO = HISTORICO||' CLIENTE:'||FN_LPAD(OLD.CLIENTE_ID,5,0)||'->'||FN_LPAD(NEW.CLIENTE_ID,5,0);
  END  

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

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

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

  IF(HISTORICO <> '') THEN
  BEGIN
     HISTORICO = 'LANC.ID:'||fn_lpad(NEW.ID,4,0)||', OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||', CLIENTE:'||FN_LPAD(OLD.CLIENTE_ID,5,0)||' ALTERADA'||HISTORICO;
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', OLD.PDV_MOVIMENTO_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_DETALHE_B01D FOR TBPDV_MOVIMENTO_DETALHE
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
DECLARE VARIABLE OPERACAO  VARCHAR(500);
DECLARE VARIABLE CLIENTE   VARCHAR(500);
BEGIN
--    OPERACAO  = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,4,0)||' - '||A.DESCRICAO FROM TBCONTA_RECEBER_OPERACAO A WHERE A.CODIGO = NEW.OPERACAO_CODIGO),'');
--    CLIENTE   = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO,5,0)||' - '||B.RAZAOSOCIAL FROM TBEMPRESA B WHERE B.CODIGO = NEW.CLIENTE_ID),'');
    HISTORICO = '';
    IF(OLD.ID > 0)THEN
    BEGIN
       HISTORICO = 'LANC.ID:'||fn_lpad(OLD.ID,4,0)||', OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||', CLIENTE:'||FN_LPAD(OLD.CLIENTE_ID,5,0)||', VLR:'||OLD.VALOR||' EXCLUIDA.';
    END

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

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_CAIXA_DET_B01U FOR TBPDV_MOVIMENTO_CAIXA_DET
ACTIVE BEFORE UPDATE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
declare variable PDV_MOVIMENTO_ID INTEGER;
declare variable CAIXA_ID INTEGER;
BEGIN
  HISTORICO        = '';
  CAIXA_ID         = COALESCE((SELECT FIRST 1 B.PDV_CAIXA_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = NEW.PDV_MOVIMENTO_CAIXA_ID),0);
  PDV_MOVIMENTO_ID = COALESCE((SELECT FIRST 1 B.PDV_MOVIMENTO_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = NEW.PDV_MOVIMENTO_CAIXA_ID),0);

  IF(NEW.OPERACAO_CODIGO <> OLD.OPERACAO_CODIGO) THEN
  BEGIN
     HISTORICO = HISTORICO||' OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||'->'||FN_LPAD(NEW.OPERACAO_CODIGO,4,0);
  END 

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

  IF(NEW.OBSERVACAO <> OLD.OBSERVACAO) THEN
  BEGIN
     HISTORICO = HISTORICO||' OBS:'||OLD.OBSERVACAO||'->'||NEW.OBSERVACAO;
  END
  IF(HISTORICO <> '' AND NEW.PDV_MOVIMENTO_CAIXA_ID IS NOT NULL AND PDV_MOVIMENTO_ID > 0) THEN
  BEGIN
     HISTORICO = 'LANC.ID:'||fn_lpad(OLD.ID,4,0)||',CAIXA:'||FN_LPAD(CAIXA_ID,4,0)||',OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||' ALTERADA '||HISTORICO;
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', PDV_MOVIMENTO_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_CAIXA_DET_B02I FOR TBPDV_MOVIMENTO_CAIXA_DET
ACTIVE BEFORE INSERT POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
declare variable PDV_MOVIMENTO_ID INTEGER;
BEGIN
  HISTORICO = '';
  PDV_MOVIMENTO_ID = COALESCE((SELECT FIRST 1 A.ID FROM TBPDV_MOVIMENTO A WHERE A.ID = (SELECT FIRST 1 B.PDV_MOVIMENTO_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = NEW.PDV_MOVIMENTO_CAIXA_ID)),0);

  IF(NEW.PDV_MOVIMENTO_CAIXA_ID IS NOT NULL AND PDV_MOVIMENTO_ID > 0) THEN
  BEGIN
     HISTORICO = 'LANC.ID:'||fn_lpad(NEW.ID,4,0)||',CAIXA:'||FN_LPAD(NEW.PDV_MOVIMENTO_CAIXA_ID,4,0)||',OP:'||FN_LPAD(NEW.OPERACAO_CODIGO,4,0)||' INCLUIDO';
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', PDV_MOVIMENTO_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_CAIXA_DET_B02D FOR TBPDV_MOVIMENTO_CAIXA_DET
ACTIVE BEFORE DELETE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
declare variable PDV_MOVIMENTO_ID INTEGER;
declare variable CAIXA_ID INTEGER;
BEGIN
  HISTORICO        = '';
  CAIXA_ID         = COALESCE((SELECT FIRST 1 B.PDV_CAIXA_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = OLD.PDV_MOVIMENTO_CAIXA_ID),0);
  PDV_MOVIMENTO_ID = COALESCE((SELECT FIRST 1 B.PDV_MOVIMENTO_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = OLD.PDV_MOVIMENTO_CAIXA_ID),0);

  IF(OLD.PDV_MOVIMENTO_CAIXA_ID IS NOT NULL AND PDV_MOVIMENTO_ID > 0) THEN
  BEGIN
     HISTORICO = 'LANC.ID:'||fn_lpad(OLD.ID,4,0)||',CAIXA:'||FN_LPAD(CAIXA_ID,4,0)||',OP:'||FN_LPAD(OLD.OPERACAO_CODIGO,4,0)||' EXCLUIDO';
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', PDV_MOVIMENTO_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_CAIXA_DET_B02I FOR TBPDV_MOVIMENTO_CAIXA_DET
ACTIVE BEFORE INSERT POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
declare variable PDV_MOVIMENTO_ID INTEGER;
declare variable CAIXA_ID INTEGER;
BEGIN
  HISTORICO        = '';
  CAIXA_ID         = COALESCE((SELECT FIRST 1 B.PDV_CAIXA_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = NEW.PDV_MOVIMENTO_CAIXA_ID),0);
  PDV_MOVIMENTO_ID = COALESCE((SELECT FIRST 1 B.PDV_MOVIMENTO_ID FROM TBPDV_MOVIMENTO_CAIXA B WHERE B.ID = NEW.PDV_MOVIMENTO_CAIXA_ID),0);

  IF(NEW.PDV_MOVIMENTO_CAIXA_ID IS NOT NULL AND PDV_MOVIMENTO_ID > 0) THEN
  BEGIN
     HISTORICO = 'LANC.ID:'||fn_lpad(NEW.ID,4,0)||',CAIXA:'||FN_LPAD(CAIXA_ID,4,0)||',OP:'||FN_LPAD(NEW.OPERACAO_CODIGO,4,0)||' INCLUIDO';
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO', PDV_MOVIMENTO_ID, FN_ELIPSES(HISTORICO,500));
  END
END;

