/// <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())); }
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) }); } }
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); }
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); } }
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); } } }
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); }
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(); }
/// <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); }
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/"); } } } }
public ManterNotificacao() { _notificacaoBm = new BMNotificacao(); }
/// <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. } } }