示例#1
0
        /// <summary>
        /// Método responsável pela obtenção de notificações do usuário realizando alguns filtros
        /// </summary>
        /// <param name="pIdUsuario"></param>
        /// <param name="DataGeracao"></param>
        /// <param name="ocultarVisualizadas"></param>
        /// <returns></returns>
        public IList <DTONotificacao> ConsultarNotificacaoPorUsuario(int pIdUsuario, DateTime?DataGeracao, bool ocultarVisualizadas = true)
        {
            notificacaoBM = new BMNotificacao();

            IList <Notificacao> lstNotificacao;

            if (!DataGeracao.HasValue)
            {
                lstNotificacao =
                    (notificacaoBM.ObterPorUsuario(new Usuario {
                    ID = pIdUsuario
                }, null)).OrderByDescending(
                        x => x.DataGeracao).ToList();
            }
            else
            {
                lstNotificacao =
                    (notificacaoBM.ObterPorUsuario(new Usuario {
                    ID = pIdUsuario
                }, DataGeracao)).OrderByDescending(
                        x => x.DataGeracao).ToList();
            }

            if (ocultarVisualizadas)
            {
                lstNotificacao = lstNotificacao.Where(n => !n.MensagemLida.Equals(Constantes.Sim)).ToList();
            }

            if (lstNotificacao.Count == 0)
            {
                return(new List <DTONotificacao>());
            }

            return(ConverterDominioDTO(lstNotificacao.ToList()));
        }
示例#2
0
        public void PublicarNotificacao(string link, string texto, DateTime?data, int[] ufs, int[] niveis, int[] perfis)
        {
            var        ufBm  = new BMUf();
            IList <Uf> lstUf = ufs.Select(uf => ufBm.ObterPorId(uf)).ToList();

            var nivelBm = new BMNivelOcupacional();
            IList <NivelOcupacional> lstNivel = niveis.Select(nivel => nivelBm.ObterPorID(nivel)).ToList();

            var            perfilBm  = new BMPerfil();
            IList <Perfil> lstPerfil = perfis.Select(perfil => perfilBm.ObterPorId(perfil)).ToList();


            var usuarios = new BMUsuario().ObterPorUfsNiveisPerfis(lstUf, lstNivel, lstPerfil);


            var notificacaoBm = new BMNotificacao();

            foreach (var u in usuarios)
            {
                notificacaoBm.Salvar(new Notificacao
                {
                    DataGeracao      = DateTime.Now,
                    Link             = link,
                    DataNotificacao  = data,
                    TextoNotificacao = texto,
                    Usuario          = new BMUsuario().ObterPorId(u.ID)
                });
            }
        }
示例#3
0
        public IQueryable <Notificacao> ObterPorFiltro(Usuario usuario, DateTime?dataDeEnvio, int idNotificacaoEnvio)
        {
            var query = new BMNotificacao().ObterTodosIqueryable();

            query = query.Where(x => x.NotificacaoEnvio.ID == idNotificacaoEnvio);

            if (!string.IsNullOrEmpty(usuario.Nome))
            {
                query = query.Where(x => x.Usuario.Nome.Contains(usuario.Nome));
            }

            if (!string.IsNullOrEmpty(usuario.CPF))
            {
                query = query.Where(x => x.Usuario.CPF == usuario.CPF);
            }

            if (!string.IsNullOrEmpty(usuario.Email))
            {
                query = query.Where(x => x.Usuario.Email == usuario.Email);
            }

            if (dataDeEnvio.HasValue)
            {
                query = query.Where(x => x.DataNotificacao.HasValue && x.DataNotificacao.Value.Date == dataDeEnvio.Value.Date);
            }

            return(query);
        }
示例#4
0
        public void RegistrarVisualizacao(List <int> listaNotificacao, AuthenticationRequest autenticacao)
        {
            notificacaoBM = new BMNotificacao();

            foreach (var item in listaNotificacao)
            {
                Notificacao notificacao = notificacaoBM.ObterPorID(item);
                notificacao.Visualizado      = true;
                notificacao.DataVisualizacao = DateTime.Now;
                notificacao.Auditoria        = new Auditoria(autenticacao.Login);
                notificacaoBM.Salvar(notificacao);
            }
        }
示例#5
0
        private void AtualizarNotificacoesNaoVisualizadas(int IdUsuario, string URL)
        {
            BMNotificacao      bmNotificacao = new BMNotificacao();
            List <Notificacao> ListaNotificacoesNaoVisualizadas = bmNotificacao.ObterNotificacoesNaoVisualizadas(IdUsuario, URL).ToList();

            if (ListaNotificacoesNaoVisualizadas != null && ListaNotificacoesNaoVisualizadas.Count > 0)
            {
                foreach (Notificacao notificacao in ListaNotificacoesNaoVisualizadas)
                {
                    notificacao.Visualizado      = true;
                    notificacao.DataVisualizacao = DateTime.Now;
                    bmNotificacao.Salvar(notificacao);
                }
            }
        }
示例#6
0
        public DTONotificacoes ConsultarNotificacaoPorUsuarioPaginado(int pIdUsuario, DateTime?DataGeracao, int pagina, int limitePorPagina, bool ocultarVisualizadas = true)
        {
            notificacaoBM = new BMNotificacao();

            var dto = new DTONotificacoes();

            IList <Notificacao> lstNotificacao;

            if (!DataGeracao.HasValue)
            {
                lstNotificacao = (notificacaoBM.ObterPorUsuario(new Usuario()
                {
                    ID = pIdUsuario
                }, null))
                                 .OrderByDescending(x => x.DataGeracao).ToList();
            }
            else
            {
                lstNotificacao = (notificacaoBM.ObterPorUsuario(new Usuario()
                {
                    ID = pIdUsuario
                }, DataGeracao))
                                 .OrderByDescending(x => x.DataGeracao).ToList();
            }

            if (lstNotificacao.Count == 0)
            {
                return(new DTONotificacoes());
            }

            if (ocultarVisualizadas)
            {
                lstNotificacao = lstNotificacao.Where(n => !n.MensagemLida.Equals(Constantes.Sim)).ToList();
            }

            // Retorna o total de páginas para contagem
            dto.TotalNotificacoes = lstNotificacao.Count;

            // Paginação
            lstNotificacao = lstNotificacao.Skip((pagina - 1) * limitePorPagina).Take(limitePorPagina).ToList();

            dto.Notificacoes = ConverterDominioDTO(lstNotificacao.ToList()).ToList();

            return(dto);
        }
示例#7
0
        public void PublicarNotificacao(string link, string texto, IQueryable <Usuario> usuarios = null)
        {
            var notificacaoBm = new BMNotificacao();

            var cpfAuditoria = new BMUsuario().ObterUsuarioLogado().CPF;

            // Verificar se está em modo debug para enviar para a thread. Se estiver, dá um output do tempo
            // que leva para enviar cada notificação.
            var debugLocal = ConfigurationManager.AppSettings["debugLocal"];
            var isDebug    = !string.IsNullOrEmpty(debugLocal) && !string.IsNullOrEmpty(debugLocal) && debugLocal == "S";

            // Configuração com a URL do SignalR. Tem que ser obtida fora da Thread.
            var confg = new ManterConfiguracaoSistema().ObterConfiguracaoSistemaPorID((int)enumConfiguracaoSistema.SignalR);

            // Começa as inserções em outra Thread para não congelar a UI do usuário
            var thread =
                new Thread(
                    () => ThreadInsertNotificacoes(usuarios, link, texto, notificacaoBm, cpfAuditoria, isDebug, confg));

            thread.Start();
        }
示例#8
0
        /// <summary>
        /// Adiciona uma notificação para o usuário informado
        /// </summary>
        public void PublicarNotificacao(string link, string texto, int idUsuario, NotificacaoEnvio notificacaoEnvio)
        {
            var usuario = new ManterUsuario().ObterUsuarioPorID(idUsuario);

            var notificacao = new Notificacao
            {
                Link             = link,
                TextoNotificacao = texto,
                DataGeracao      = DateTime.Now,
                DataNotificacao  = DateTime.Now,
                Usuario          = usuario,
                NotificacaoEnvio = notificacaoEnvio
            };

            var notificacaoBm = new BMNotificacao();

            notificacaoBm.Salvar(notificacao);

            // Enviar notificação em tempo real.
            NotificarUsuario(usuario.CPF, notificacao);
        }
示例#9
0
        private void NotificarUsuariosQueDesejamReceberNotificacaoOferta(Oferta oferta)
        {
            if (oferta.TipoOferta.Equals(enumTipoOferta.Exclusiva))
            {
                return;
            }
            IList <Usuario> ListaUsuariosQueDesejamReceberNotificacaoOferta = new BMUsuario().ObterUsuariosQueDesejamReceberNotificacaoOferta();

            if (ListaUsuariosQueDesejamReceberNotificacaoOferta != null && ListaUsuariosQueDesejamReceberNotificacaoOferta.Count > 0)
            {
                BMNotificacao notificacaoBM = new BMNotificacao();

                Notificacao notificacao = null;

                foreach (Usuario u in ListaUsuariosQueDesejamReceberNotificacaoOferta)
                {
                    notificacao = new Notificacao()
                    {
                        DataGeracao      = DateTime.Now,
                        DataNotificacao  = DateTime.Now,
                        Usuario          = new BMUsuario().ObterPorId(u.ID),
                        TextoNotificacao = "Há vaga para o curso de seu interesse",
                    };

                    if (oferta.SolucaoEducacional.IdNode > 0)
                    {
                        notificacao.Link = string.Concat(ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.EnderecoPortal).Registro,
                                                         string.Format("/Inscricoes/Inscricao/{0}", oferta.SolucaoEducacional.IdNode));
                    }
                    else
                    {
                        notificacao.Link = string.Concat(ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.EnderecoPortal).Registro, "/Inscricoes/");
                    }
                }
            }
        }
示例#10
0
 public ManterNotificacao()
 {
     _notificacaoBm = new BMNotificacao();
 }
示例#11
0
        /// <summary>
        /// Thread de envio de notificações.
        /// </summary>
        /// <param name="usuarios">Usuários que serão notificados.</param>
        /// <param name="link">Link da notificação.</param>
        /// <param name="texto">Texto da notificação.</param>
        /// <param name="notificacaoBm">BM da notificação para operações com o banco dentro da Thread.</param>
        /// <param name="cpfAuditoria">CPF de auditoria.</param>
        /// <param name="isDebug">Caso em modo debug, exibe timers no console pra ajudar no debug.</param>
        /// <param name="config">Configuração com os dados da URL do SignalR.</param>
        private void ThreadInsertNotificacoes(IQueryable <Usuario> usuarios, string link, string texto, BMNotificacao notificacaoBm, string cpfAuditoria, bool isDebug, ConfiguracaoSistema config)
        {
            var count = 0;

            var lstSize = usuarios.Count();

            // Tamanho de inserções por vez do batch.
            const int batchSize = 500;

            var stopWatch = new Stopwatch();

            var batchNotList = new List <Notificacao>();

            foreach (var usuario in usuarios)
            {
                // Zera o cronômetro e começa a marcar novamente
                // Só usa o cronômetro em debug.
                if (isDebug && !stopWatch.IsRunning)
                {
                    stopWatch.Reset();
                    stopWatch.Start();
                }

                var not = new Notificacao
                {
                    DataGeracao      = DateTime.Now,
                    Link             = link,
                    DataNotificacao  = DateTime.Now,
                    TextoNotificacao = texto,
                    Usuario          = usuario,
                    Auditoria        = new Auditoria(cpfAuditoria)
                };

                batchNotList.Add(not);

                // Faz inserts de x em x (sendo x = batchSize) ou menos na última página ou se só tiver um selecionado
                if (count != 0 && (count % batchSize == 0 || lstSize == count + 1) || lstSize == 1)
                {
                    notificacaoBm.SalvarEmLote(batchNotList, batchSize);

                    batchNotList = new List <Notificacao>();

                    // Mostra o tempo que demorou uma inserção
                    // Só usa o cronômetro em debug.
                    if (isDebug && stopWatch.IsRunning)
                    {
                        stopWatch.Stop();

                        var ts = stopWatch.Elapsed;

                        // Format and display the TimeSpan value.
                        var elapsedTime = string.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                                                        ts.Hours, ts.Minutes, ts.Seconds,
                                                        ts.Milliseconds / 10);

                        Console.WriteLine("Tempo de " + batchSize + " inserções: " + elapsedTime);
                    }
                }

                count++;

                try
                {
                    // Enviar a notificação em tempo real via SignalR.
                    NotificarUsuario(usuario.CPF, not, config);
                }
                catch (Exception)
                {
                    // ignored.
                    // Um dia pode precisar ter o log dos erros.
                }
            }
        }