public ActionResult index(DespesaCadastroForm ViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(ViewModel));
            }

            ViewModel.carregarIdPessoa();
            ViewModel.gerarPagamento();

            ViewModel.TituloDespesa.dtVencimento = ViewModel.TituloDespesa.listaTituloDespesaPagamento.OrderBy(x => x.dtVencimento).FirstOrDefault()?.dtVencimento;

            var anoCompetencia = ViewModel.TituloDespesa.dtDespesa.HasValue ? ViewModel.TituloDespesa.dtDespesa?.Year : ViewModel.TituloDespesa.dtVencimento?.Year;
            var mesCompetencia = ViewModel.TituloDespesa.dtDespesa.HasValue ? ViewModel.TituloDespesa.dtDespesa?.Month : ViewModel.TituloDespesa.dtVencimento?.Month;

            ViewModel.TituloDespesa.anoCompetencia = Convert.ToInt16(anoCompetencia);
            ViewModel.TituloDespesa.mesCompetencia = Convert.ToByte(mesCompetencia);

            ViewModel.tratarPagamentos();

            var flagSucesso = ODespesaCadastroBL.salvar(ViewModel.TituloDespesa);

            if (flagSucesso)
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_SUCCESS, "Os dados foram salvos com sucesso.");

                return(RedirectToAction("editar", "DespesaDetalhe", new { area = "Financeiro", ViewModel.TituloDespesa.id, ViewModel.urlRetorno }));
            }

            this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, "Houve um problema ao salvar o registro. Tente novamente.");
            return(View(ViewModel));
        }
        public ActionResult index()
        {
            var ViewModel = new DespesaCadastroForm();

            ViewModel.TituloDespesa = new TituloDespesa();

            ViewModel.urlRetorno = UtilRequest.getString("urlRetorno");

            return(View(ViewModel));
        }
        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));
        }
 public PartialViewResult partialDadosPagamentoParcelado(DespesaCadastroForm ViewModel)
 {
     return(PartialView(ViewModel));
 }