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

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

            ViewModel.TituloReceita.dtVencimento  = ViewModel.TituloReceita.listaTituloReceitaPagamento.OrderBy(x => x.dtVencimento).FirstOrDefault()?.dtVencimento;
            ViewModel.TituloReceita.idTipoReceita = Convert.ToByte(TipoReceitaConst.OUTROS);

            var anoCompetencia = ViewModel.TituloReceita.dtCompetencia.HasValue ? ViewModel.TituloReceita.dtCompetencia?.Year : ViewModel.TituloReceita.dtVencimento?.Year;
            var mesCompetencia = ViewModel.TituloReceita.dtCompetencia.HasValue ? ViewModel.TituloReceita.dtCompetencia?.Month : ViewModel.TituloReceita.dtVencimento?.Month;

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

            ViewModel.tratarPagamentos();

            var flagSucesso = OReceitaCadastroBL.salvar(ViewModel.TituloReceita);

            if (flagSucesso)
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_SUCCESS, "Os dados foram salvos com sucesso.");
                return(RedirectToAction("editar", "ReceitaDetalhe", new { area = "Financeiro", ViewModel.TituloReceita.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 ReceitaCadastroForm();

            ViewModel.TituloReceita = new TituloReceita();

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

            return(View(ViewModel));
        }
        public ActionResult gerarReceitasPagamentosForm()
        {
            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 flagCompleteDtCompetencia  = UtilRequest.getString("flagCompleteDtCompetencia");
            var dtCompetencia              = UtilRequest.getDateTime("dtCompetencia");

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

            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 listaTituloReceitaPagamento = new List <TituloReceitaPagamento>();

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

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

                OTituloReceitaPagamento.descricaoParcela = (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);
                }

                OTituloReceitaPagamento.dtPrevisaoPagamento = OTituloReceitaPagamento.dtVencimento;

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

                listaTituloReceitaPagamento.Add(OTituloReceitaPagamento);
            }

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

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

            var ViewModel = new ReceitaCadastroForm();

            ViewModel.TituloReceita = new TituloReceita();
            ViewModel.TituloReceita.listaTituloReceitaPagamento = listaTituloReceitaPagamento;

            return(View(ViewModel));
        }
 public PartialViewResult partialDadosPagamentoParcelado(ReceitaCadastroForm ViewModel)
 {
     return(PartialView(ViewModel));
 }