SET TERM ^ ;
ALTER TABLE TBPDV_ADQUIRENTE
ADD TAXA_BANDEIRA_IMPORTACAO INTEGER^

ALTER TABLE TBCONCILIACAO_CARTAO
ADD TRANSFERENCIA_CUSTO NUMERIC(15,4)^

CREATE OR ALTER TRIGGER TTBCONCILIACAO_CARTAO_B03I FOR TBCONCILIACAO_CARTAO
ACTIVE BEFORE INSERT OR UPDATE POSITION 3
AS
DECLARE VARIABLE BANDEIRA_ID              INTEGER;
DECLARE VARIABLE TAXA_BANDEIRA_IMPORTACAO INTEGER;
DECLARE VARIABLE PERCENTUAL_TAXA_BANDEIRA NUMERIC(15,4);
DECLARE VARIABLE VALOR_TAXA_BANDEIRA      NUMERIC(15,4);
BEGIN
  IF(COALESCE(NEW.BANDEIRA_DESCRICAO, '') <> '' AND COALESCE(NEW.BANDEIRA, 0) = 0) THEN
  BEGIN
        
        :BANDEIRA_ID = COALESCE((SELECT FIRST 1 T.ID FROM TBCARTAO_BANDEIRA T WHERE UPPER(T.DESCRICAO) LIKE SUBSTRING(UPPER(NEW.BANDEIRA_DESCRICAO) FROM 1 FOR 4)||'%'), 0);

        NEW.BANDEIRA = :BANDEIRA_ID;

  END

  :TAXA_BANDEIRA_IMPORTACAO = COALESCE((SELECT FIRST 1 ADQ.TAXA_BANDEIRA_IMPORTACAO FROM TBPDV_ADQUIRENTE ADQ WHERE ADQ.ADQUIRENTE_ID = NEW.ADQUIRENTE_ID),0);
  IF(:TAXA_BANDEIRA_IMPORTACAO = 1)THEN
  BEGIN
      :PERCENTUAL_TAXA_BANDEIRA = COALESCE((SELECT FIRST 1 PERC.TAXA FROM TBPDV_ADQUIRENTE_TAXA PERC
                                    WHERE PERC.ADQUIRENTE_ID = COALESCE((SELECT FIRST 1 ADQ.ID FROM TBPDV_ADQUIRENTE ADQ WHERE ADQ.STATUS = 1 AND ADQ.ADQUIRENTE_ID = NEW.ADQUIRENTE_ID),0)
                                      AND PERC.BANDEIRA_ID   = NEW.BANDEIRA
                                      AND PERC.PARCELAS      = NEW.PARCELAS
                                      AND NEW.DATA_VENDA BETWEEN PERC.DATA_INICIAL AND PERC.DATA_FINAL),0.00);

      NEW.DESCONTO1 = CAST(CAST(NEW.VALOR AS DOUBLE PRECISION)*(CAST(:PERCENTUAL_TAXA_BANDEIRA AS DOUBLE PRECISION)/100.00) AS DOUBLE PRECISION);
      NEW.DESCONTO1 = CAST(NEW.DESCONTO1 AS NUMERIC(15,2));
      --NEW.TARIFA_ORIGINAL = NEW.DESCONTO1;
      IF(INSERTING)THEN
      BEGIN
        NEW.TARIFA_ORIGINAL = NEW.DESCONTO1;
      END
  END
END^

CREATE OR ALTER trigger ttbpdv_adquirente_b01u for tbpdv_adquirente
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

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

    IF ( OLD.CHAVE_REQUISICAO <> NEW.CHAVE_REQUISICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' CHAVE DE REQ.'|| OLD.CHAVE_REQUISICAO||'->'||NEW.CHAVE_REQUISICAO;
    END

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

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

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

    IF ( OLD.OPERACAO_OUTRAS_DESPESAS <> NEW.OPERACAO_OUTRAS_DESPESAS) THEN
    BEGIN
        HISTORICO = HISTORICO||' OP.DESP:'|| OLD.OPERACAO_OUTRAS_DESPESAS||'->'||NEW.OPERACAO_OUTRAS_DESPESAS;
    END
-- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
     IF ( OLD.OPERACAO_TAXA_MFE <> NEW.OPERACAO_TAXA_MFE) THEN
    BEGIN
        HISTORICO = HISTORICO||' OP.TX MFE:'|| OLD.OPERACAO_TAXA_MFE||'->'||NEW.OPERACAO_TAXA_MFE;
    END

    IF ( OLD.OPERACAO_BAIXA_MFE <> NEW.OPERACAO_BAIXA_MFE) THEN
    BEGIN
        HISTORICO = HISTORICO||' OP.BX MFE:'|| OLD.OPERACAO_BAIXA_MFE||'->'||NEW.OPERACAO_BAIXA_MFE;
    END

    IF ( OLD.OPERACAO_OUTRAS_DESPESAS_MFE <> NEW.OPERACAO_OUTRAS_DESPESAS_MFE) THEN
    BEGIN
        HISTORICO = HISTORICO||' OP.DESP MFE:'|| OLD.OPERACAO_OUTRAS_DESPESAS_MFE||'->'||NEW.OPERACAO_OUTRAS_DESPESAS_MFE;
    END 

    IF ( OLD.OPERACAO_AJUSTE_SALDO <> NEW.OPERACAO_AJUSTE_SALDO) THEN
    BEGIN
        HISTORICO = HISTORICO||' OP.SD MENOR:'|| OLD.OPERACAO_AJUSTE_SALDO||'->'||NEW.OPERACAO_AJUSTE_SALDO;
    END 

    IF ( OLD.OPERACAO_REDUZIR_SALDO <> NEW.OPERACAO_REDUZIR_SALDO) THEN
    BEGIN
        HISTORICO = HISTORICO||' OP.SD MAIOR:'|| OLD.OPERACAO_REDUZIR_SALDO||'->'||NEW.OPERACAO_REDUZIR_SALDO;
    END 

    IF ( OLD.taxa_bandeira_importacao is distinct FROM NEW.taxa_bandeira_importacao) THEN
    BEGIN
        HISTORICO = HISTORICO||' ORIGEM TAXA VENDA:'|| coalesce(OLD.taxa_bandeira_importacao,0)||'->'||coalesce(NEW.taxa_bandeira_importacao,0);
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ' REGISTRO ALTERADO: '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_ADQUIRENTE',NEW.ID, HISTORICO);
    END

    EXECUTE PROCEDURE SPI_INTEGRACAO('TBPDV_ADQUIRENTE',NEW.ID,1);
END^

 SET TERM ; ^