public PartialViewResult partialFormEditar(int?id, int?idAssociado)
        {
            var OAssociadoContribuicao = this.OAssociadoContribuicaoBL.carregar(UtilNumber.toInt32(id)) ?? new AssociadoContribuicao();

            OAssociadoContribuicao.idAssociado = (OAssociadoContribuicao.idAssociado > 0 ? OAssociadoContribuicao.idAssociado : UtilNumber.toInt32(idAssociado));

            AssociadoContribuicaoPartialForm ViewModel = new AssociadoContribuicaoPartialForm();

            ViewModel.AssociadoContribuicao = OAssociadoContribuicao;

            return(PartialView(ViewModel));
        }
        public ActionResult salvar(AssociadoContribuicaoPartialForm ViewModel)
        {
            DateTime?dtVencimentoAtual = UtilRequest.getDateTime("dtVencimentoAtual");

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

            var OAssociado = this.OAssociadoBL.carregar(ViewModel.AssociadoContribuicao.idAssociado);

            var OContribuicao = this.OContribuicaoBL.carregar(ViewModel.AssociadoContribuicao.idContribuicao);

            var TabelaPreco = OContribuicao.retornarTabelaVigente();

            var Preco = TabelaPreco.retornarPreco(UtilNumber.toInt32(OAssociado.idTipoAssociado));

            if (TabelaPreco.id == 0 || Preco.id == 0)
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, "Essa cobrança não está configurada para esse tipo de associado.");

                return(PartialView("partial-form-editar", ViewModel));
            }


            if (OContribuicao.dtValidade.HasValue && OContribuicao.dtValidade < ViewModel.AssociadoContribuicao.dtVencimentoOriginal)
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, $"Esse plano de cobrança é válido somente até {OContribuicao.dtValidade.exibirData()}.");

                return(PartialView("partial-form-editar", ViewModel));
            }

            if (OContribuicao.idTipoVencimento == TipoVencimentoConst.VENCIMENTO_PELA_ADMISSAO_ASSOCIADO &&
                (OAssociado.dtAdmissao?.Day != ViewModel.AssociadoContribuicao.dtVencimentoOriginal.Day ||
                 OAssociado.dtAdmissao?.Month != ViewModel.AssociadoContribuicao.dtVencimentoOriginal.Month))
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, "A data de vencimento deve ter o dia e o mês iguais à data de admissão do associado.");

                return(PartialView("partial-form-editar", ViewModel));
            }

            var dtVencimentoOriginal = ViewModel.AssociadoContribuicao.dtVencimentoOriginal;

            dtVencimentoAtual = dtVencimentoAtual ?? dtVencimentoOriginal;

            var OContribuicaoGeracaoBL = new AssociadoContribuicaoGeracaoBL();

            var Retorno = OContribuicaoGeracaoBL.gerarCobranca(OAssociado, OContribuicao, dtVencimentoOriginal, dtVencimentoAtual, false, ViewModel.AssociadoContribuicao.valorAtual);

            if (Retorno.flagError)
            {
                this.Flash(UtilMessage.TYPE_MESSAGE_ERROR, Retorno.listaErros.FirstOrDefault());

                return(Json(new { flagSucesso = Retorno.flagError }));
            }

            this.Flash(UtilMessage.TYPE_MESSAGE_SUCCESS, $"A cobrança do Associado {OAssociado.Pessoa.nome} foi salva com sucesso!");

            var listaDependentes = this.OAssociadoDependenteBL.listar(OAssociado.id, "", "S").ToList();

            if (!listaDependentes.Any())
            {
                return(Json(new { flagSucesso = Retorno.flagError }));
            }

            var OCobrancaPrincipal = Retorno.info as AssociadoContribuicao;

            foreach (var ODependente in listaDependentes)
            {
                OContribuicaoGeracaoBL = new AssociadoContribuicaoGeracaoBL();

                OContribuicaoGeracaoBL.gerarCobrancaDependente(ODependente, OCobrancaPrincipal);

                this.Flash(UtilMessage.TYPE_MESSAGE_SUCCESS, $"A cobrança do dependente {ODependente.Pessoa.nome} foi salva com sucesso!");
            }

            return(Json(new { flagSucesso = Retorno.flagError }));
        }