/// <summary>
        /// Retornar Saldo
        /// </summary>
        public static decimal saldo(this TituloDespesaPagamento ODespesaPagamento)
        {
            decimal valorNegativo = ODespesaPagamento.valorOriginal.toDecimal() + ODespesaPagamento.valorJuros.toDecimal() + ODespesaPagamento.valorMulta.toDecimal();
            decimal valorPositivo = ODespesaPagamento.valorDesconto.toDecimal() + ODespesaPagamento.valorPago.toDecimal();

            return(valorPositivo - valorNegativo);
        }
        /// <summary>
        /// Altera Data de Competência
        /// </summary>
        private UtilRetorno alterarCampoDtCompetencia(TituloDespesaPagamento OItem, LogAlteracao OLog)
        {
            var ORetorno = UtilRetorno.newInstance(true);

            OLog.valorAntigo = OItem.alterarValorCampo(OLog.nomeCampoAlterado, OLog.valorNovo);

            if (OLog.valorAntigo == null)
            {
                ORetorno.listaErros.Add("O valor informado é inválido");
                return(ORetorno);
            }

            OItem.mesCompetencia = Convert.ToByte(OItem.dtCompetencia?.Month);
            OItem.anoCompetencia = Convert.ToInt16(OItem.dtCompetencia?.Year);

            var successSave = db.SaveChanges();

            if (successSave > 0)
            {
                OLog.valorNovo      = OItem.dtCompetencia.ToString();
                OLog.oldValueSelect = OLog.valorAntigo.isEmpty() ? null : OLog.oldValueSelect;
                OLogAlteracaoBL.salvar(OLog);

                ORetorno.flagError = false;
                return(ORetorno);
            }

            ORetorno.listaErros.Add("Não foi possível salvar o registro no banco.");
            return(ORetorno);
        }
        /// <summary>
        /// Altera o valor original do pagamento
        /// </summary>
        private UtilRetorno alterarCampoValorOriginal(TituloDespesaPagamento OItem, LogAlteracao OLog)
        {
            var ORetorno = UtilRetorno.newInstance(true);

            OLog.valorAntigo = OItem.valorOriginal.ToString();

            var valorOrginal = UtilNumber.toDecimal(OLog.valorNovo);

            if (valorOrginal == 0)
            {
                ORetorno.listaErros.Add("O valor informado é inválido");
                return(ORetorno);
            }

            OItem.valorOriginal = valorOrginal;
            var successSave = db.SaveChanges();

            if (successSave > 0)
            {
                OLog.valorNovo      = OItem.valorOriginal.ToString();
                OLog.oldValueSelect = OLog.valorAntigo.isEmpty() ? null : OLog.oldValueSelect;
                OLogAlteracaoBL.salvar(OLog);

                ORetorno.flagError = false;
                return(ORetorno);
            }

            ORetorno.listaErros.Add("Não foi possível salvar o registro no banco.");
            return(ORetorno);
        }
        public UtilRetorno registrarPagamento(TituloDespesaPagamento OTituloDespesaPagamento)
        {
            using (var Context = new DataContext()) {
                try {
                    //Atualizar dados do pagamento
                    var OTituloDespesaPagamentoDB = Context.TituloDespesaPagamento.condicoesSeguranca()
                                                    .SingleOrDefault(x => x.id == OTituloDespesaPagamento.id && x.dtExclusao == null && x.TituloDespesa.dtQuitacao == null && x.dtPagamento == null);

                    if (OTituloDespesaPagamentoDB == null)
                    {
                        return(UtilRetorno.newInstance(true, "Não foi possível localizar o registro para realizar a baixa do pagamento"));
                    }

                    int qtdePagamentosAbertos = this.listar(OTituloDespesaPagamentoDB.idTituloDespesa).Count(x => x.dtPagamento == null);

                    OTituloDespesaPagamentoDB.idStatusPagamento  = StatusPagamentoConst.PAGO;
                    OTituloDespesaPagamentoDB.dtPagamento        = OTituloDespesaPagamento.dtPagamento;
                    OTituloDespesaPagamentoDB.idMeioPagamento    = OTituloDespesaPagamento.idMeioPagamento;
                    OTituloDespesaPagamentoDB.idFormaPagamento   = OTituloDespesaPagamento.definirFormaPagamento();
                    OTituloDespesaPagamentoDB.dtBaixa            = DateTime.Now;
                    OTituloDespesaPagamentoDB.idUsuarioBaixa     = User.id();
                    OTituloDespesaPagamentoDB.valorPago          = OTituloDespesaPagamento.valorOriginal;
                    OTituloDespesaPagamentoDB.valorOutrasTarifas = OTituloDespesaPagamento.valorOutrasTarifas;
                    OTituloDespesaPagamentoDB.nroBanco           = OTituloDespesaPagamento.nroBanco;
                    OTituloDespesaPagamentoDB.nroContrato        = OTituloDespesaPagamento.nroContrato;
                    OTituloDespesaPagamentoDB.nroNotaFiscal      = OTituloDespesaPagamento.nroNotaFiscal;
                    OTituloDespesaPagamentoDB.nroDocumento       = OTituloDespesaPagamento.nroDocumento;
                    OTituloDespesaPagamentoDB.nroAgencia         = OTituloDespesaPagamento.nroAgencia;
                    OTituloDespesaPagamentoDB.nroDigitoAgencia   = OTituloDespesaPagamento.nroDigitoAgencia;
                    OTituloDespesaPagamentoDB.nroConta           = OTituloDespesaPagamento.nroConta;
                    OTituloDespesaPagamentoDB.nroDigitoConta     = OTituloDespesaPagamento.nroDigitoConta;
                    OTituloDespesaPagamentoDB.codigoAutorizacao  = OTituloDespesaPagamento.codigoAutorizacao;
                    OTituloDespesaPagamentoDB.valorOutrasTarifas = OTituloDespesaPagamento.valorOutrasTarifas;

                    Context.SaveChanges();

                    if (qtdePagamentosAbertos > 1)
                    {
                        return(UtilRetorno.newInstance(false, "Baixa do pagamento registrado com sucesso."));
                    }

                    var OTituloDespesa = Context.TituloDespesa.SingleOrDefault(x => x.id == OTituloDespesaPagamentoDB.idTituloDespesa);
                    OTituloDespesa.dtQuitacao = DateTime.Now;
                    Context.SaveChanges();

                    return(UtilRetorno.newInstance(false, "Baixa do pagamento registrado com sucesso. Despesa Quitada!"));
                } catch (Exception ex) {
                    UtilLog.saveError(ex, $"Erro ao registrar pagamento manualmente {OTituloDespesaPagamento.id}, {OTituloDespesaPagamento.dtPagamento}.");
                }
            }

            return(UtilRetorno.newInstance(true, "Não foi possível registrar a baixa pagamento."));
        }
        //Persistir e inserir um novo registro
        private TituloDespesaPagamento inserir(TituloDespesaPagamento OTituloDespesaPagamento)
        {
            OTituloDespesaPagamento.setDefaultInsertValues();

            using (var dataContext = new DataContext()) {
                dataContext.Configuration.AutoDetectChangesEnabled = false;

                dataContext.Configuration.ValidateOnSaveEnabled = false;

                dataContext.TituloDespesaPagamento.Add(OTituloDespesaPagamento);

                dataContext.SaveChanges();
            }

            return(OTituloDespesaPagamento);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Faz a alteração de qualquer campo informado
        /// </summary>
        private UtilRetorno alterarCampo(TituloDespesaPagamento OTituloDespesaPagamento, LogAlteracao OLog)
        {
            var ORetorno = UtilRetorno.newInstance(true);

//            var listaCamposEditaveis = new[] {
//                "descricao", "idContaBancaria", "idCentroCusto", "idMacroConta", "idCategoria",
//                "nroNotaFiscal", "nroContrato", "codigoBoleto", "idModoPagamento", "idContaBancariaFavorecida",
//                "documentoPessoaCredor","nomePessoaCredor","nroTelPrincipalCredor"
//            };
//
//            if (!listaCamposEditaveis.Contains(OLog.nomeCampoAlterado)) {
//
//                return UtilRetorno.newInstance(true, "O dado informado não pode ser alterado.");
//            }

            OLog.valorAntigo = OTituloDespesaPagamento.alterarValorCampo(OLog.nomeCampoAlterado, OLog.valorNovo);

            if (OLog.valorAntigo == null)
            {
                ORetorno.listaErros.Add("O valor informado é inválido");

                return(ORetorno);
            }

            var Retorno = db.validateAndSave();

            if (Retorno.flagError)
            {
                return(Retorno);
            }

            OLog.nomeCampoAlterado = OLog.nomeCampoAlterado.abreviar(255);

            OLog.nomeCampoDisplay = OLog.nomeCampoDisplay.abreviar(255);

            OLog.valorNovo = OTituloDespesaPagamento.getValorCampo(OLog.nomeCampoAlterado).removeTags().abreviar(255);

            OLog.valorAntigo = OLog.valorAntigo.removeTags().abreviar(255);

            OLog.oldValueSelect = OLog.valorAntigo.isEmpty() ? null : OLog.oldValueSelect.removeTags().abreviar(255);

            OLogAlteracaoBL.salvar(OLog);

            ORetorno.flagError = false;

            return(ORetorno);
        }
        //Definir se é um insert ou update e enviar o registro para o banco de dados
        public TituloDespesaPagamento salvar(TituloDespesaPagamento OTituloDespesaPagamento)
        {
            OTituloDespesaPagamento.TituloDespesa = null;

            OTituloDespesaPagamento.MeioPagamento = null;

            OTituloDespesaPagamento.FormaPagamento = null;

            OTituloDespesaPagamento.ativo = true;

            if (OTituloDespesaPagamento.id == 0)
            {
                return(this.inserir(OTituloDespesaPagamento));
            }

            return(this.atualizar(OTituloDespesaPagamento));
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Gera o Titulo despesa pagamentos para despesas de parcela única
        /// </summary>
        public void gerarPagamento()
        {
            if (this.flagTipoRepeticao == TipoRepeticaoConst.PARCELAMENTO)
            {
                this.TituloDespesa.listaTituloDespesaPagamento = this.TituloDespesa.listaTituloDespesaPagamento.OrderBy(x => x.dtVencimento).ToList();

                this.TituloDespesa.valorMulta    = this.TituloDespesa.listaTituloDespesaPagamento.Sum(x => x.valorMulta);
                this.TituloDespesa.valorJuros    = this.TituloDespesa.listaTituloDespesaPagamento.Sum(x => x.valorJuros);
                this.TituloDespesa.valorDesconto = this.TituloDespesa.listaTituloDespesaPagamento.Sum(x => x.valorDesconto);

                if (this.flagValorTotalParcelamento != "S")
                {
                    this.TituloDespesa.valorTotal = this.TituloDespesa.listaTituloDespesaPagamento.Sum(x => x.valorOriginal);
                }
                return;
            }

            this.TituloDespesa.qtdeRepeticao = 1;

            this.TituloDespesa.listaTituloDespesaPagamento = new List <TituloDespesaPagamento>();

            var OTituloDespesaPagamento = new TituloDespesaPagamento();

            OTituloDespesaPagamento.dtVencimento = this.TituloDespesa.dtVencimento.Value;

            OTituloDespesaPagamento.nroNotaFiscal = this.TituloDespesa.nroNotaFiscal;
            OTituloDespesaPagamento.nroDocumento  = this.TituloDespesa.nroDocumento;
            OTituloDespesaPagamento.nroContrato   = this.TituloDespesa.nroContrato;

            OTituloDespesaPagamento.valorOriginal = UtilNumber.toDecimal(this.TituloDespesa.valorTotal);
            OTituloDespesaPagamento.flagReembolso = this.flagReembolso;
            OTituloDespesaPagamento.dtDebito      = this.dtDebito ?? OTituloDespesaPagamento.dtVencimento;

            if (this.TituloDespesa.dtQuitacao.HasValue)
            {
                OTituloDespesaPagamento.dtPagamento       = this.TituloDespesa.dtQuitacao;
                OTituloDespesaPagamento.idMeioPagamento   = this.idMeioPagamento;
                OTituloDespesaPagamento.valorPago         = OTituloDespesaPagamento.valorOriginal;
                OTituloDespesaPagamento.idUsuarioCadastro = HttpContextFactory.Current.User.id();
                OTituloDespesaPagamento.dtBaixa           = DateTime.Now;
                OTituloDespesaPagamento.flagPago          = "S";
            }

            this.TituloDespesa.listaTituloDespesaPagamento.Add(OTituloDespesaPagamento);
        }
        /// <summary>
        /// Persistir e atualizar um registro existente
        /// </summary>
        private TituloDespesaPagamento atualizar(TituloDespesaPagamento OTituloDespesaPagamento)
        {
            //Localizar existentes no banco
            //Nao aplicado condicoes de seguranca pois a atualização é usada no checkout
            TituloDespesaPagamento dbPagamento = this.db.TituloDespesaPagamento.Find(OTituloDespesaPagamento.id);

            //Configurar valores padrão
            OTituloDespesaPagamento.setDefaultUpdateValues();

            //Atualizacao do pagamento
            var PagamentoEntry = db.Entry(dbPagamento);

            PagamentoEntry.CurrentValues.SetValues(OTituloDespesaPagamento);
            PagamentoEntry.ignoreFields();

            db.SaveChanges();

            return(OTituloDespesaPagamento);
        }
        //
        private void gerarPagamento(TituloDespesa OTituloDespesa)
        {
            var OPagamento = new TituloDespesaPagamento();

            OPagamento.transferirDadosTitulo(OTituloDespesa);

            OPagamento.idMeioPagamento = MeioPagamentoConst.TRANSFERENCIA_ELETRONICA;

            OPagamento.idFormaPagamento = FormaPagamentoConst.TRANSFERENCIA_BANCARIA;

            OPagamento.idStatusPagamento = StatusPagamentoConst.PAGO;

            OPagamento.dtPagamento = OTituloDespesa.dtQuitacao;

            OPagamento.dtDebito = OTituloDespesa.dtQuitacao;

            OPagamento.valorPago = OTituloDespesa.valorTotal;

            this.OTituloDespesaPagamentoCadastroBL.salvar(OPagamento);
        }
        //Carregamento de registro pelo ID
        public bool salvarClone(TituloDespesaPagamento TituloDespesaPagamento)
        {
            var OTituloDespesaPagamento = new TituloDespesaPagamento();

            OTituloDespesaPagamento.idTituloDespesa   = TituloDespesaPagamento.idTituloDespesa;
            OTituloDespesaPagamento.idStatusPagamento = TituloDespesaPagamento.idStatusPagamento;
            OTituloDespesaPagamento.idMacroConta      = TituloDespesaPagamento.idMacroConta;
            OTituloDespesaPagamento.idCentroCusto     = TituloDespesaPagamento.idCentroCusto;
            OTituloDespesaPagamento.idCategoria       = TituloDespesaPagamento.idCategoria;
            OTituloDespesaPagamento.descParcela       = TituloDespesaPagamento.descParcela;
            OTituloDespesaPagamento.valorOriginal     = TituloDespesaPagamento.valorOriginal;
            OTituloDespesaPagamento.dtVencimento      = TituloDespesaPagamento.dtVencimento;
            OTituloDespesaPagamento.dtCompetencia     = TituloDespesaPagamento.dtCompetencia;
            OTituloDespesaPagamento.mesCompetencia    = TituloDespesaPagamento.mesCompetencia;
            OTituloDespesaPagamento.anoCompetencia    = TituloDespesaPagamento.anoCompetencia;

            OTituloDespesaPagamento.setDefaultInsertValues();

            db.TituloDespesaPagamento.Add(OTituloDespesaPagamento);
            db.SaveChanges();

            return(OTituloDespesaPagamento.id > 0);
        }
        /// <summary>
        /// Faz a alteração de qualquer campo informado
        /// </summary>
        private UtilRetorno alterarCampo(TituloDespesaPagamento OItem, LogAlteracao OLog)
        {
            var ORetorno = UtilRetorno.newInstance(true);

            var listaCamposEditaveis = new[] {
                "idCentroCusto", "idMacroConta", "descParcela", "idCategoria", "idMeioPagamento", "idContaBancaria", "dtVencimento", "dtPrevisaoPagamento",
                "valorJuros", "valorMulta", "valorDesconto"
            };

            if (!listaCamposEditaveis.Contains(OLog.nomeCampoAlterado))
            {
                return(UtilRetorno.newInstance(true, "Campo informado não pode ser editado"));
            }

            OLog.valorAntigo = OItem.alterarValorCampo(OLog.nomeCampoAlterado, OLog.valorNovo);

            if (OLog.valorAntigo == null)
            {
                ORetorno.listaErros.Add("O valor informado é inválido");
                return(ORetorno);
            }

            var successSave = db.SaveChanges();

            if (successSave > 0)
            {
                OLog.valorNovo      = OItem.getValorCampo(OLog.nomeCampoAlterado);
                OLog.oldValueSelect = OLog.valorAntigo.isEmpty() ? null : OLog.oldValueSelect;
                OLogAlteracaoBL.salvar(OLog);

                ORetorno.flagError = false;
                return(ORetorno);
            }

            ORetorno.listaErros.Add("Não foi possível salvar o registro no banco.");
            return(ORetorno);
        }
        /// <summary>
        /// Altera o nroDocumento do pagamento
        /// </summary>
        private UtilRetorno alterarCampoNroDocumento(TituloDespesaPagamento OItem, LogAlteracao OLog)
        {
            var ORetorno = UtilRetorno.newInstance(true);

            OLog.valorAntigo = OItem.nroDocumento;

            var nroDocumento = UtilString.onlyAlphaNumber(OLog.valorNovo);

            OItem.nroDocumento = nroDocumento;
            var successSave = db.SaveChanges();

            if (successSave > 0)
            {
                OLog.valorNovo      = OItem.nroDocumento;
                OLog.oldValueSelect = OLog.valorAntigo.isEmpty() ? null : OLog.oldValueSelect;
                OLogAlteracaoBL.salvar(OLog);

                ORetorno.flagError = false;
                return(ORetorno);
            }

            ORetorno.listaErros.Add("Não foi possível salvar o registro no banco.");
            return(ORetorno);
        }
        public ActionResult importar(HttpPostedFileBase arquivoExcel)
        {
            var lista = new List <ImportacaoFinanceiroDTO>();

            string extensao            = UTIL.Upload.UploadConfig.getExtension(arquivoExcel);
            string pathExcelTemporario = Path.Combine(UtilConfig.pathAbsTempFiles, string.Concat(UtilString.onlyNumber(DateTime.Now.ToString()), extensao));

            arquivoExcel.SaveAs(pathExcelTemporario);

            using (FileStream stream = System.IO.File.Open(pathExcelTemporario, FileMode.Open, FileAccess.Read)) {
                IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
                excelReader.IsFirstRowAsColumnNames = true;
                DataSet result = excelReader.AsDataSet();

                foreach (DataTable table in result.Tables)
                {
                    for (int i = 0; i < table.Rows.Count; i++)
                    {
                        var OImportacao = new ImportacaoFinanceiroDTO();

                        OImportacao.ano         = getCampo(table, i, 0);
                        OImportacao.mes         = getCampo(table, i, 1);
                        OImportacao.dia         = getCampo(table, i, 2);
                        OImportacao.flagFixa    = getCampo(table, i, 3);
                        OImportacao.descricao   = getCampo(table, i, 4);
                        OImportacao.centroCusto = getCampo(table, i, 5);
                        //  OImportacao.CentroCusto = getCampo(table, i, 6);
                        OImportacao.categoria               = getCampo(table, i, 7);
                        OImportacao.tipoCategoria           = getCampo(table, i, 8);
                        OImportacao.detalheCategoria        = getCampo(table, i, 9);
                        OImportacao.qtdeParcela             = getCampo(table, i, 10);
                        OImportacao.formaPagamento          = getCampo(table, i, 11);
                        OImportacao.descricaoFormaPagamento = getCampo(table, i, 12);
                        OImportacao.valor = getCampo(table, i, 13);

                        lista.Add(OImportacao);
                    }
                }
            }

            if (lista.Count > 0)
            {
                foreach (var item in lista)
                {
                    if (!String.IsNullOrEmpty(item.ano))
                    {
                        var OTituloDespesaBL = new ContasAPagarBL();

                        var dtPagamento            = new DateTime(UtilNumber.toInt32(item.ano), UtilNumber.toInt32(item.mes), UtilNumber.toInt32(item.dia));
                        var idCategoria            = this.getCategoria(item.categoria);
                        var idTipoCategoria        = this.getTipoCategoria(item.tipoCategoria);
                        var idDetalheTipoCategoria = this.getDetalheCategoria(item.detalheCategoria);
                        var idCentroCusto          = this.getCentroCusto(item.centroCusto);
                        var idFormaPagamento       = this.getFormaPagamento(item.formaPagamento);

                        TituloDespesa OTituloDespesa = new TituloDespesa();
                        OTituloDespesa.descricao              = item.descricao;
                        OTituloDespesa.idDespesa              = 0;
                        OTituloDespesa.idCategoria            = idCategoria;
                        OTituloDespesa.idTipoCategoria        = idTipoCategoria;
                        OTituloDespesa.idDetalheTipoCategoria = idDetalheTipoCategoria;
                        OTituloDespesa.idCentroCusto          = idCentroCusto;
                        OTituloDespesa.idPeriodoRepeticao     = 1;
                        OTituloDespesa.idAgrupador            = 0;
                        OTituloDespesa.nroDocumento           = "";
                        OTituloDespesa.qtdeRepeticao          = 4;
                        OTituloDespesa.valorTotal             = Convert.ToDecimal(item.valor);
                        OTituloDespesa.qtdeRepeticao          = 1;
                        OTituloDespesa.dtQuitacao             = dtPagamento;

                        TituloDespesaPagamento OTituloDespesaPagamento = new TituloDespesaPagamento();
                        OTituloDespesaPagamento.dtPagamento      = dtPagamento;
                        OTituloDespesaPagamento.idFormaPagamento = idFormaPagamento;
                        //OTituloDespesaPagamento.descricao = OTituloDespesa.descricao;
                        OTituloDespesaPagamento.descParcela   = item.descricaoFormaPagamento;
                        OTituloDespesaPagamento.dtVencimento  = dtPagamento;
                        OTituloDespesaPagamento.flagPago      = "S";
                        OTituloDespesaPagamento.valorOriginal = OTituloDespesa.valorTotal.Value;
                        OTituloDespesaPagamento.valorPago     = OTituloDespesa.valorTotal.Value;

                        OTituloDespesa.listaTituloDespesaPagamento = new List <TituloDespesaPagamento>();
                        OTituloDespesa.listaTituloDespesaPagamento.Add(OTituloDespesaPagamento);

                        //if (!OTituloDespesaBL.exists(x => x.dtQuitacao == OTituloDespesa.dtQuitacao
                        //                                  && x.descricao == OTituloDespesa.descricao
                        //                                  && x.valorTotal == OTituloDespesa.valorTotal))
                        //{
                        // OTituloDespesaBL.salvar(OTituloDespesa);
                        //}
                    }
                }
            }

            return(View());
        }
        public ActionResult gerarDespesasPagamentosForm()
        {
            var valorTotal                 = UtilNumber.toDecimal(UtilRequest.getString("valorTotal"));
            var dtPrimeiroVencimento       = UtilRequest.getDateTime("dtPrimeiroVencimento") ?? DateTime.Now.AddMonths(1);
            var parcelas                   = UtilRequest.getInt32("parcelas");
            var flagValorTotalParcelamento = UtilRequest.getString("flagValorTotalParcelamento");
            var valorParcelas              = UtilNumber.toDecimal(UtilRequest.getString("valorParcelas"));
            var valorMulta                 = UtilNumber.toDecimal(UtilRequest.getString("valorMulta"));
            var valorJuros                 = UtilNumber.toDecimal(UtilRequest.getString("valorJuros"));
            var valorDesconto              = UtilNumber.toDecimal(UtilRequest.getString("valorDesconto"));
            var flagCompleteDtCompetencia  = UtilRequest.getString("flagCompleteDtCompetencia");
            var dtDespesa                  = UtilRequest.getDateTime("dtDespesa");

            if (flagValorTotalParcelamento == "S" && !(valorTotal > 0))
            {
                return(Json(new { error = true, message = "Informe o valor total da despesa" }));
            }

            if (!(valorParcelas > 0) && flagValorTotalParcelamento != "S")
            {
                return(Json(new { error = true, message = "Informe o valor de cada parcela" }));
            }

            if (parcelas < 2)
            {
                return(Json(new { error = true, message = "Informe o numero de parcelas a serem geradas" }));
            }

            var dtVencimento = dtPrimeiroVencimento;
            var listaTituloDespesaPagamento = new List <TituloDespesaPagamento>();

            for (var x = 0; x < parcelas; x++)
            {
                var OTituloDespesaPagamento = new TituloDespesaPagamento();
                OTituloDespesaPagamento.dtVencimento = dtVencimento.Date;

                OTituloDespesaPagamento.valorOriginal = flagValorTotalParcelamento == "S" ? Math.Round((UtilNumber.toDecimal(valorTotal) / UtilNumber.toInt32(parcelas)), 2) : valorParcelas;
                OTituloDespesaPagamento.valorMulta    = valorMulta;
                OTituloDespesaPagamento.valorJuros    = valorJuros;
                OTituloDespesaPagamento.valorDesconto = valorDesconto;

                OTituloDespesaPagamento.descParcela = (x + 1) + "° Parcela";

                dtVencimento = dtVencimento.AddMonths(1);

                var daysInMonth = DateTime.DaysInMonth(dtVencimento.Year, dtVencimento.Month);
                if (dtVencimento.Day < dtPrimeiroVencimento.Day && daysInMonth > dtVencimento.Day)
                {
                    var days = daysInMonth > dtPrimeiroVencimento.Day ? dtPrimeiroVencimento.Day : daysInMonth;
                    dtVencimento = new DateTime(dtVencimento.Year, dtVencimento.Month, days);
                }

                OTituloDespesaPagamento.dtCompetencia = (flagCompleteDtCompetencia == "S" ? dtDespesa : flagCompleteDtCompetencia == "N" ? OTituloDespesaPagamento.dtVencimento : (DateTime?)null);

                listaTituloDespesaPagamento.Add(OTituloDespesaPagamento);
            }

            //Faz um correção de valores quando for fornecido o valor total do parcelamento
            if (flagValorTotalParcelamento == "S")
            {
                var valorTotalPagamentos = 0M;
                listaTituloDespesaPagamento.ForEach(item => {
                    valorTotalPagamentos += item.valorOriginal;
                });

                listaTituloDespesaPagamento.LastOrDefault().valorOriginal += UtilNumber.toDecimal(valorTotal - valorTotalPagamentos);
            }

            var ViewModel = new DespesaCadastroForm();

            ViewModel.TituloDespesa = new TituloDespesa();
            ViewModel.TituloDespesa.listaTituloDespesaPagamento = listaTituloDespesaPagamento;

            return(View(ViewModel));
        }