//Baixar um título com base no id de referencia
        public override TituloReceita liquidar(int idReceita, List <TituloReceitaPagamento> listaPagamentos, int idUsuarioBaixa)
        {
            var OTituloReceita = this.OTituloReceitaBL.carregarPorReceita(idReceita);

            if (OTituloReceita == null)
            {
                var OAssociadoMensalidade = this.OAssociadoContribuicaoBL.carregar(idReceita);

                //this.OTituloReceitaBL.gerar(OAssociadoMensalidade);

                OTituloReceita = OTituloReceitaBL.carregarPorReceita(idReceita);
            }

            if (OTituloReceita.dtQuitacao.HasValue)
            {
                return(OTituloReceita);
            }

            //OTituloReceitaBL.removerParcelas(OTituloReceita.id, idUsuarioBaixa);

            foreach (var OPagamento in listaPagamentos)
            {
                OPagamento.idMeioPagamento = OPagamento.definirMeioPagamento();

                OPagamento.idFormaPagamento = OPagamento.definirFormaPagamento();

                OPagamento.dtCredito = OPagamento.dtCredito;

                OPagamento.idTituloReceita = OTituloReceita.id;

                OPagamento.valorOriginal = OTituloReceita.valorTotal.Value;

                OPagamento.valorRecebido = OTituloReceita.valorTotal.Value;

                OPagamento.dtBaixa = DateTime.Today;

                OPagamento.flagBaixaAutomatica = false;

                OPagamento.idUsuarioBaixa = idUsuarioBaixa;

                if (OTituloReceita.dtVencimento.HasValue)
                {
                    OPagamento.dtVencimento = OTituloReceita.dtVencimento.Value;
                }

                OPagamento.setDefaultInsertValues();

                this.db.TituloReceitaPagamento.Add(OPagamento);
            }

            this.db.SaveChanges();

            this.liquidar(OTituloReceita);

            this.onMensalidadeQuitada.subscribe(new OnMensalidadeQuitadaHandler());

            this.onMensalidadeQuitada.publish((OTituloReceita.id as object));

            return(OTituloReceita);
        }
        //Liquidar receita de acordo com lista de pagamentos informada
        public virtual TituloReceita liquidar(TituloReceita OTituloReceita, List <TituloReceitaPagamento> listaPagamentos)
        {
            if (OTituloReceita.dtQuitacao.HasValue)
            {
                this.liquidar(OTituloReceita);

                return(OTituloReceita);
            }

            //this.OTituloReceitaBL.removerParcelas(OTituloReceita.id, OTituloReceita.idUsuarioAlteracao);

            foreach (var OPagamento in listaPagamentos)
            {
                OPagamento.idMeioPagamento = OPagamento.definirMeioPagamento();

                OPagamento.idFormaPagamento = OPagamento.definirFormaPagamento();

                OPagamento.dtPrevisaoCredito = OPagamento.dtPrevisaoCredito.HasValue? OPagamento.dtPrevisaoCredito: OPagamento.dtCredito;

                OPagamento.dtCredito = OPagamento.dtCredito;

                OPagamento.idTituloReceita = OTituloReceita.id;

                OPagamento.valorOriginal = UtilNumber.toDecimal(OTituloReceita.valorTotal);

                OPagamento.dtBaixa = DateTime.Now;

                OPagamento.flagBaixaAutomatica = false;

                OPagamento.idUsuarioBaixa = OTituloReceita.idUsuarioAlteracao;

                if (OTituloReceita.dtVencimento.HasValue)
                {
                    OPagamento.dtVencimento = OTituloReceita.dtVencimento.Value;
                }

                OPagamento.setDefaultInsertValues();

                this.db.TituloReceitaPagamento.Add(OPagamento);
            }

            this.db.SaveChanges();

            this.liquidar(OTituloReceita);

            return(OTituloReceita);
        }