SET TERM ^ ;

CREATE OR ALTER TRIGGER TTBCONCIL_CARTAO_PARCELAS_B02U FOR TBCONCILIACAO_CARTAO_PARCELAS
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE ID_CONCILIACAO   INTEGER;
DECLARE VARIABLE PARCELA_CONTROLE INTEGER;
BEGIN
  /*TRIGGER CRIADA PARA ATUALIZAR AS PARCELAS DE RECEBIMENTOS CONCILIADOS*/
  IF(OLD.DATA_EXPIRACAO <> NEW.DATA_EXPIRACAO)THEN
  BEGIN
     :ID_CONCILIACAO = COALESCE((SELECT FIRST 1 XT.ID FROM TBCONCILIACAO_CARTAO XT
                        WHERE XT.NSU         = NEW.NSU
                        AND XT.ADQUIRENTE_ID = NEW.ADQUIRENTE_ID
                        AND XT.DATA_VENDA    = NEW.DATA_VENDA
                        AND XT.MERCHANT_ID   = NEW.MERCHANT_ID
                        AND XT.CONCILIACAO   = '1'),0);

     IF(:ID_CONCILIACAO > 0)THEN
     BEGIN
        FOR
          SELECT FIRST 1
            IIF(XC.TIPO = 'CFE',
                COALESCE((SELECT FIRST 1 PARC.CONTROLE
                            FROM TBNFS_PARCELAMENTO PARC
                            WHERE PARC.PDV_CFE_ID    = XC.DOCUMENTO_CONTROLE
                            AND PARC.PAGAMENTO_FORMA = XC.PAGAMENTO_FORMA_ID
                            AND PARC.SEQUENCIA       = NEW.NUMERO_PARCELA
                            AND PARC.VALOR           = NEW.VALOR),0),
                COALESCE((SELECT FIRST 1 PARC.CONTROLE
                            FROM TBNFS_PARCELAMENTO PARC
                            WHERE PARC.NFS_CONTROLE  = XC.DOCUMENTO_CONTROLE
                            AND PARC.PAGAMENTO_FORMA = XC.PAGAMENTO_FORMA_ID
                            AND PARC.SEQUENCIA       = NEW.NUMERO_PARCELA
                            AND PARC.VALOR           = NEW.VALOR),0)) AS PARCELA_CONTROLE

            FROM TBCONCILIACAO_CARTAO_DET XC
            WHERE XC.CONCILIACAO_CARTAO_ID = :ID_CONCILIACAO
              AND XC.CONCILIACAO_MULTIPLA IS DISTINCT FROM '1'
              AND XC.DIVERGENTE           IS DISTINCT FROM '1'
         INTO :PARCELA_CONTROLE DO
         BEGIN
            UPDATE TBNFS_PARCELAMENTO PARC SET PARC.DATA_VENCIMENTO = NEW.DATA_EXPIRACAO WHERE PARC.CONTROLE = :PARCELA_CONTROLE;
         END
     END

  END
END
^

SET TERM ; ^

