/// <summary>
        ///
        /// </summary>
        public UtilRetorno gerarNotificacao(object Origem)
        {
            ListaAssociadosDTO OListaAssociadosDTO = (ListaAssociadosDTO)Origem;

            var ORetorno = UtilRetorno.newInstance(false);

            var OMensagem = this.MensagemEmailConsultaBL.listar(IdentificacaoMensagemEmailConst.ASSOCIADO_LINK_ATUALIZACAO).FirstOrDefault() ?? new MensagemEmail();

            if (OMensagem.titulo.isEmpty())
            {
                OMensagem.titulo = AssociadoEmailsConst.tituloEmailAtualizacaoCadastral;
            }

            if (OMensagem.corpoEmail.isEmpty())
            {
                OMensagem.corpoEmail = AssociadoEmailsConst.corpoEmailAtualizacaoCadastral;
            }

            var ONotificacao = new NotificacaoSistema();

            ONotificacao.flagEmail = true;

            ONotificacao.flagTodosAssociados = false;

            ONotificacao.flagAssociadosEspecificos = true;

            ONotificacao.flagSistema = false;

            ONotificacao.flagMobile = false;

            ONotificacao.idTipoNotificacao = TipoNotificacaoConst.ASSOCIADO_ATUALIZACAO_CADASTRAL;

            ONotificacao.titulo = OMensagem.titulo;

            ONotificacao.notificacao = OMensagem.corpoEmail;

            ONotificacao.dtProgramacaoEnvio = DateTime.Now;

            var flagSucesso = false;

            if (!flagSucesso)
            {
                ORetorno.flagError = true;

                ORetorno.listaErros.Add("Houve algum problema ao gerar o e-mail de atualização cadastral. Tente novamente mais tarde.");

                return(ORetorno);
            }


            return(ORetorno);
        }
        /// <summary>
        ///
        /// </summary>
        private void vincularDestinos(ListaAssociadosDTO OListaAssociadosDTO, NotificacaoSistema ONotificacao)
        {
            var listaAssociados = OListaAssociadosDTO.listaAssociados;

            var listaNotificacoesVinculadas = new List <NotificacaoSistemaEnvio>();

            foreach (var OAssociado in listaAssociados)
            {
                var listaEmailsAssociado = OAssociado.Pessoa.ToEmailList();

                var listaEmail = new List <string>();

                listaEmail.AddRange(listaEmailsAssociado);

                foreach (var email in listaEmail)
                {
                    var OEnvio = new NotificacaoSistemaEnvio();

                    OEnvio.idNotificacao = ONotificacao.id;

                    OEnvio.idReferencia = OAssociado.id;

                    OEnvio.nome = OAssociado.Pessoa.nome;

                    OEnvio.email = email;


                    string parametrosPersonalizados = this.montarParametrosPersonalizados(OAssociado, email).abreviar(8000);

                    OEnvio.personalizacao = parametrosPersonalizados;

                    if (!UtilValidation.isEmail(OEnvio.email))
                    {
                        OEnvio.flagExcluido = true;

                        OEnvio.motivoExclusao = "O e-mail configurado não é válido.";
                    }

                    listaNotificacoesVinculadas.Add(OEnvio);
                }
            }
        }
        public ActionResult enviarLinkAlteracao(AssociadoFiltroVM DadosConsulta)
        {
            var listaAssociados = DadosConsulta.montarQuery().Where(x => x.ativo == "S")
                                  .Select(x => new {
                x.id
            }).ToList();

            if (!listaAssociados.Any())
            {
                return(Json(new { error = true, message = "Nenhum associado ativo foi encontrado para envio do link de atualização cadastral." }, JsonRequestBehavior.AllowGet));
            }

            var idsAssociados = listaAssociados.Select(x => x.id).ToList();

            var listaAssociadosNotificacao = this.OAssociadoBL.query(User.idOrganizacao())
                                             .Select(x => new{
                x.id,
                x.idOrganizacao,
                x.idTipoAssociado,
                TipoAssociado = new { x.TipoAssociado.descricao },
                Pessoa        = new { x.Pessoa.nome, listaEmails = x.Pessoa.listaEmails.Where(l => l.dtExclusao == null).Select(l => new { l.email }).ToList() }
            })
                                             .Where(x => idsAssociados.Contains(x.id))
                                             .ToListJsonObject <Associado>();

            ListaAssociadosDTO OListaAssociadosDTO = new ListaAssociadosDTO();

            OListaAssociadosDTO.listaAssociados = listaAssociadosNotificacao;

            UtilRetorno ORetorno = this.GeradorNotificacaoBL.gerarNotificacao(OListaAssociadosDTO);

            if (ORetorno.flagError)
            {
                return(Json(new { error = true, message = string.Join("<br>", ORetorno.listaErros) }, JsonRequestBehavior.AllowGet));
            }

            return(Json(new { error = false, message = "Notificação criada com sucesso!" }, JsonRequestBehavior.AllowGet));
        }