public ActionResult salvarParcelas(PedidoPagamentoVM ViewModel)
        {
            string mensagemRetorno = "";

            ViewModel.Pedido = this.OPedidoBL.carregar(ViewModel.Pedido.id);

            if (!ModelState.IsValid)
            {
                return(PartialView("partial-dados-pagamento", ViewModel));
            }

            if (!ViewModel.listaPagamentos.Any())
            {
                mensagemRetorno = "Atenção! Selecione a quantidade de parcelas e clique em 'Parcelar' para definir as datas de vencimento.";

                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, mensagemRetorno);

                return(Json(new { error = false, message = mensagemRetorno }));
            }

            if (ViewModel.listaPagamentos.Any(x => x.dtVencimento <= DateTime.Today))
            {
                mensagemRetorno = "Atenção! As parcelas devem ter o vencimento superior a hoje.";

                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, mensagemRetorno);

                return(Json(new { error = false, message = mensagemRetorno }));
            }

            var OTituloPedido = this.OTituloReceitaBL.carregarPorReceita(ViewModel.Pedido.id) ?? new TituloReceita();

            if (OTituloPedido.id == 0)
            {
                mensagemRetorno = "Atenção! Ocorreram problemas para gerar esse pedido, por favor, cancele este e crie um novo.";

                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, mensagemRetorno);

                return(Json(new { error = false, message = mensagemRetorno }));
            }

            ViewModel.listaPagamentos.ForEach(x => {
                x.idUsuarioCadastro = User.id();

                x.idUsuarioAlteracao = User.id();
            });

            //this.OTituloReceitaBL.salvarParcelas(OTituloPedido, ViewModel.listaPagamentos, true);

            mensagemRetorno = "Os dados do parcelamento foram salvos com sucesso.";

            this.Flash(UtilMessage.TYPE_MESSAGE_SUCCESS, mensagemRetorno);

            return(Json(new { error = false, message = mensagemRetorno }));
        }
        public ActionResult partialDadosPagamento(int idPedido)
        {
            var ViewModel = new PedidoPagamentoVM();

            ViewModel.Pedido = this.OPedidoBL.carregar(idPedido);

            var OTituloPedido = this.OTituloReceitaBL.carregarPorReceita(ViewModel.Pedido.id) ?? new TituloReceita();

            ViewModel.listaPagamentos = OTituloPedido.listaTituloReceitaPagamento.Where(x => x.dtExclusao == null).ToList();

            ViewModel.flagTemPagamento = ViewModel.listaPagamentos.Any();

            if (OTituloPedido.id == 0 && ViewModel.Pedido.idStatusPedido != StatusPedidoConst.CANCELADO)
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, "Atenção! Ocorreram problemas para gerar esse pedido, por favor, cancele este e crie um novo");
            }

            return(PartialView(ViewModel));
        }
        public ActionResult partialCarregarParcelas(int idPedido, int?qtdeParcelas)
        {
            if (UtilNumber.toInt32(qtdeParcelas) == 0)
            {
                return(Json(new { error = true, message = "Informe uma quantidade de parcelas maior do que zero." }));
            }

            var ViewModel = new PedidoPagamentoVM();

            ViewModel.Pedido = this.OPedidoBL.carregar(idPedido);

            decimal valorParcela = Decimal.Divide(ViewModel.Pedido.getValorTotal(), UtilNumber.toInt32(qtdeParcelas));

            decimal valorTotalParcelas = 0;

            decimal valorTotalPedido = ViewModel.Pedido.getValorTotal();

            for (int i = 0; i < qtdeParcelas; i++)
            {
                var OParcela = new TituloReceitaPagamento();

                OParcela.valorOriginal = Math.Round(valorParcela, 2);

                OParcela.dtVencimento = DateTime.Today.AddDays(1).AddMonths(i);

                ViewModel.listaPagamentos.Add(OParcela);

                valorTotalParcelas = Math.Round(decimal.Add(valorTotalParcelas, valorParcela), 2);
            }

            decimal valorDiferenca = Decimal.Subtract(valorTotalPedido, valorTotalParcelas);

            var OParcelaUltima = ViewModel.listaPagamentos.LastOrDefault();

            OParcelaUltima.valorOriginal = Decimal.Add(OParcelaUltima.valorOriginal, valorDiferenca);

            ViewModel.flagTemPagamento = false;

            return(PartialView("partial-dados-pagamento", ViewModel));
        }