-- TRIGGERS 

-- Inserts
-- Geração de ID - Generator
CREATE TRIGGER TTBCONTA_PAGAR_OPERACAO_B01I FOR TBCONTA_PAGAR_OPERACAO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF(NEW.CODIGO IS NULL) THEN
    NEW.CODIGO = GEN_ID(GTBCONTA_PAGAR_OPERACAO,1);
END;

-- Informação de Registro Incluído
CREATE TRIGGER TTBCONTA_PAGAR_OPERACAO_B02I FOR TBCONTA_PAGAR_OPERACAO
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

  HISTORICO = '';

  IF(NEW.CODIGO > 0) THEN
  BEGIN
    HISTORICO = HISTORICO||'Reg.incluido';
  END

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

-- Update 

CREATE OR ALTER TRIGGER TTBCONTA_PAGAR_OPERACAO_B01U FOR TBCONTA_PAGAR_OPERACAO
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';

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

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

    IF(OLD.CONTA_DEBITO <> NEW.CONTA_DEBITO) THEN
    BEGIN
        HISTORICO = HISTORICO||'C.Déb:'||OLD.CONTA_DEBITO||'->'||NEW.CONTA_DEBITO;
    END
    
    IF(OLD.CONTA_CREDITO <> NEW.CONTA_CREDITO) THEN
    BEGIN
        HISTORICO = HISTORICO||'C.Créd:'||OLD.CONTA_CREDITO||'->'||NEW.CONTA_CREDITO;
    END
    
    IF(OLD.HISTORICO_CONTABIL <> NEW.HISTORICO_CONTABIL) THEN
    BEGIN
        HISTORICO = HISTORICO||'Hist.Contábil alterado';
    END
    
    IF(OLD.TIPO <> NEW.TIPO) THEN
    BEGIN
        HISTORICO = HISTORICO||'Tipo:'||OLD.TIPO||'->'||NEW.TIPO;
    END
    
    IF(OLD.TIPO_DEBITO <> NEW.TIPO_DEBITO) THEN
    BEGIN
        HISTORICO = HISTORICO||'Tp.Déb:'||OLD.TIPO_DEBITO||'->'||NEW.TIPO_DEBITO;
    END
    
    IF(OLD.TIPO_CREDITO <> NEW.TIPO_CREDITO) THEN
    BEGIN
        HISTORICO = HISTORICO||'Tp.Créd:'||OLD.TIPO_CREDITO||'->'||NEW.TIPO_CREDITO;
    END
    
    IF(OLD.NOTAFISCAL <> NEW.NOTAFISCAL) THEN
    BEGIN
        HISTORICO = HISTORICO||'Disp.NF:'||OLD.NOTAFISCAL||'->'||NEW.NOTAFISCAL;
    END
    
    IF(OLD.CAIXABANCO <> NEW.CAIXABANCO) THEN
    BEGIN
        HISTORICO = HISTORICO||'Disp.Cx/Bco:'||OLD.CAIXABANCO||'->'||NEW.CAIXABANCO;
    END
    
    IF(OLD.CONTROLE_DEVOLUCAO <> NEW.CONTROLE_DEVOLUCAO) THEN
    BEGIN
        HISTORICO = HISTORICO||'Ctr.Dev:'||OLD.CONTROLE_DEVOLUCAO||'->'||NEW.CONTROLE_DEVOLUCAO;
    END
    
    IF(OLD.STATUS <> NEW.STATUS) THEN
    BEGIN
        HISTORICO = HISTORICO||'Status'||OLD.STATUS||'->'||NEW.STATUS;
    END

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

    IF(OLD.CONTROLE_ORCAMENTARIO <> NEW.CONTROLE_ORCAMENTARIO) THEN
    BEGIN
        HISTORICO = HISTORICO||'Contr.Orç.'||OLD.CONTROLE_ORCAMENTARIO||'->'||NEW.CONTROLE_ORCAMENTARIO;
    END

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

-- Delete

CREATE OR ALTER TRIGGER TTBCONTA_PAGAR_OPERACAO_B02D FOR TBCONTA_PAGAR_OPERACAO
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

  HISTORICO = '';

  IF(OLD.CODIGO > 0) THEN
  BEGIN
    HISTORICO = HISTORICO||'Reg.excluido';
  END

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

CREATE OR ALTER TRIGGER TTBCONTA_PAGAR_OPERACAO_B0D_01 FOR TBCONTA_PAGAR_OPERACAO
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE p1 Integer;
DECLARE VARIABLE p2 Integer;
Begin

For Select
(Select First 1 A.CONTROLE From tbcaixabanco_lancamento_reg A Where A.Operacao_Codigo = OLD.CODIGO and a.CODORIGEM = 'CPA'),
(Select First 1 A.NUMERO_NOTAFISCAL From TBNfe_Parcelamento A Where A.Conta_Pagar_Operacao = OLD.CODIGO)

FROM RDB$DATABASE
Into :p1,:p2
Do
begin

  if (:P1 > 0) Then Exception "..." 'OPERAÇÃO JÁ USADA NO REGISTRO DE LANÇAMENTOS DO CONTAS A PAGAR. ID.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
  if (:P2 > 0) Then Exception "..." 'OPERAÇÃO JÁ USADA NAS PARCELAS DE DOCUMENTOS FISCAIS. NFE.'||:P2||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';

end

End;
