public ActionResult modalClonarReceitaPagamento(int?id, int?idTituloReceita)
        {
            var ViewModel = new TituloReceitaPagamentoClonarForm();

            ViewModel.TituloReceitaPagamento = this.OTituloReceitaPagamentoBL.carregar(UtilNumber.toInt32(id), null);

            if (ViewModel.TituloReceitaPagamento == null && idTituloReceita.toInt() == 0)
            {
                return(Json(new { error = true, message = "Registro não localizado" }, JsonRequestBehavior.AllowGet));
            }

            if (ViewModel.TituloReceitaPagamento == null)
            {
                ViewModel.TituloReceitaPagamento = new TituloReceitaPagamento();
                ViewModel.TituloReceitaPagamento.TituloReceita   = OTituloReceitaBL.carregar(idTituloReceita.toInt());
                ViewModel.TituloReceitaPagamento.idTituloReceita = idTituloReceita.toInt();

                if (ViewModel.TituloReceitaPagamento.TituloReceita?.listaTituloReceitaPagamento.Any(x => x.dtExclusao == null) == false)
                {
                    ViewModel.TituloReceitaPagamento.valorOriginal = ViewModel.TituloReceitaPagamento.TituloReceita.valorTotal ?? 0;
                }
            }

            if (ViewModel.TituloReceitaPagamento.TituloReceita == null)
            {
                return(Json(new { error = true, message = "Registro não localizado" }, JsonRequestBehavior.AllowGet));
            }

            if (ViewModel.TituloReceitaPagamento.TituloReceita.dtExclusao.HasValue)
            {
                return(Json(new { error = true, message = "Não é possível adicionar um pagamento a uma receita excluída" }, JsonRequestBehavior.AllowGet));
            }

            if (ViewModel.TituloReceitaPagamento.TituloReceita.dtQuitacao.HasValue)
            {
                return(Json(new { error = true, message = "Não é possível adicionar um pagamento a uma receita quitada" }, JsonRequestBehavior.AllowGet));
            }

            return(View(ViewModel));
        }
        public ActionResult salvarTituloReceitaPagamento(TituloReceitaPagamentoClonarForm ViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View("modal-clonar-receita-pagamento", ViewModel));
            }

            var OTituloReceita = this.OTituloReceitaBL.carregar(ViewModel.TituloReceitaPagamento.idTituloReceita);

            if (OTituloReceita == null)
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, "Não foi possível localizar o titulo despesa.");
                return(View("modal-clonar-receita-pagamento", ViewModel));
            }

            if (OTituloReceita.dtQuitacao.HasValue)
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, "Não é possível adicionar uma parcela a uma despesa quitada");
                return(View("modal-clonar-receita-pagamento", ViewModel));
            }

            ViewModel.TituloReceitaPagamento.idStatusPagamento = StatusPagamentoConst.ABERTO;
            ViewModel.TituloReceitaPagamento.dtCompetencia     = ViewModel.TituloReceitaPagamento.dtCompetencia ?? ViewModel.TituloReceitaPagamento.dtVencimento;
            ViewModel.TituloReceitaPagamento.anoCompetencia    = Convert.ToInt16(ViewModel.TituloReceitaPagamento.dtCompetencia?.Year);
            ViewModel.TituloReceitaPagamento.mesCompetencia    = Convert.ToByte(ViewModel.TituloReceitaPagamento.dtCompetencia?.Month);

            var flagSucesso = OTituloReceitaPagamentoCloneBL.salvarClone(ViewModel.TituloReceitaPagamento);

            if (flagSucesso)
            {
                this.onAtualizarValorTituloReceita.subscribe(new OnAtualizarValorTituloReceitaHandler());
                this.onAtualizarValorTituloReceita.publish(ViewModel.TituloReceitaPagamento.idTituloReceita as object);
                return(Json(new { error = false }));
            }

            this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, "Não foi possível salvar o registro, tente novamente.");
            return(View("modal-clonar-receita-pagamento", ViewModel));
        }