コード例 #1
0
        /// <summary>
        /// Envia o alerta por API para o sistema Notificações.
        /// </summary>
        /// <param name="notificacao"></param>
        private static bool EnviarNotificacao(NotificacaoDTO notificacao)
        {
            SYS_RecursoAPI recurso = new SYS_RecursoAPI {
                rap_id = (int)eRecursoAPI.Notificacoes
            };

            SYS_RecursoAPIBO.GetEntity(recurso);

            if (recurso.IsNew || string.IsNullOrEmpty(recurso.rap_url) || recurso.rap_situacao == (byte)RecursoAPISituacao.Excluido)
            {
                return(true);
            }

            HttpClient            client     = new HttpClient();
            List <SYS_UsuarioAPI> lstUsuario = SYS_RecursoUsuarioAPIBO.SelecionaUsuarioPorRecurso(eRecursoAPI.Notificacoes);

            if (lstUsuario.Any())
            {
                var auth = Encoding.ASCII.GetBytes(string.Format("{0}:{1}", lstUsuario.First().uap_usuario, lstUsuario.First().uap_senha));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(auth));
            }

            HttpContent         contentPost = new StringContent(JsonConvert.SerializeObject(notificacao), Encoding.UTF8, "application/json");
            HttpResponseMessage response    = client.PostAsync(recurso.rap_url, contentPost).Result;

            if (response.IsSuccessStatusCode)
            {
                return(true);
            }
            return(false);
        }
コード例 #2
0
        //Lista todas as notificações, inclusive invalidas, quando o check box está marcado na tela de listar todas as notificações
        public List <NotificacaoDTO> GetNotificacaosWithInvalidas()
        {
            #region Change attributes values
            //Atribuição dos valores que serão usados nesse metodo nas variáveis de uso comum da classe
            query      = $"CALL {notificationconstant.GetPListarNotificacoesWithInvalidas()}();";
            connection = new MySqlConnection(ConstantConnection.GetConnection());
            command    = new MySqlCommand(query, connection);
            #endregion

            #region
            //Criação da lista que será retornada com os valores vindos do banco
            List <NotificacaoDTO> notificacoes = new List <NotificacaoDTO>();
            notificacoes.Clear();
            #endregion

            #region Database Access
            //Abertura da conexão ao MySQL e tentativa de chamada da procedure para exibir notificações
            try
            {
                //Tentatica de abertura da conexão ao banco de dados
                connection.Open();

                //Usa a variável reader para armazenar o resultado, e em seguida preenche a lista com os registros vindos do banco
                using (reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        if (!reader.IsDBNull(0))
                        {
                            NotificacaoDTO notificacao = new NotificacaoDTO();
                            notificacao.notificacao = reader.GetString(0);
                            notificacao.texto       = reader.GetString(1);
                            notificacao.usuario     = reader.GetString(2);
                            notificacao.user_name   = reader.GetString(3);
                            notificacao.valido      = reader.GetString(4);
                            notificacoes.Add(notificacao);
                        }
                    }
                }
            }
            catch (MySqlException ex)
            {
                //Lança uma exceção, caso seja gerada alguma
                Error.SendError("Ocorreu um erro interno.\nCaso persista, contate o suporte com o codigo: " + ex.Number.ToString(), "Erro interno");
            }
            finally
            {
                //Encerramento da conexão ao banco de dados
                connection.Close();
            }
            #endregion

            #region Return
            //Retorna a lista de notificações para o local onde foi chamado se não estiver vazia
            return(notificacoes);

            #endregion
        }
コード例 #3
0
        public NotificacoesClassificadasDTO GetNotificacoesClassificadas(int idClient, int idAplicacao, string versaoAplicacao)
        {
            using (MiniProfiler.Current.Step("Obtendo notificações classificadas")) {
                if (!RedisCacheManager.CannotCache(RedisCacheConstants.DadosFakes.KeyGetNotificacoesClassificadas))
                {
                    return(RedisCacheManager.GetItemObject <NotificacoesClassificadasDTO> (RedisCacheConstants.DadosFakes.KeyGetNotificacoesClassificadas));
                }

                NotificacoesClassificadasDTO notificacoesClassificadas = new NotificacoesClassificadasDTO();
                List <NotificacaoDTO>        lstNotificacaoDTO         = new List <NotificacaoDTO> ();

                var notificacoes = GetNotificacoesPerfilAluno(idClient, idAplicacao, versao: versaoAplicacao);
                var cultureInfo  = new CultureInfo("pt-BR");

                foreach (var not in notificacoes)
                {
                    var notificacaoDTO = new NotificacaoDTO {
                        IdNotificacao     = not.IdNotificacao,
                        Texto             = not.Texto,
                        Titulo            = not.Titulo,
                        TipoNotificacaoId = not.TipoNotificacao.Id,
                        Matricula         = not.Matricula,
                        Data            = not.DataOriginal.ToString("MMM/yy", cultureInfo),
                        Dia             = not.DataOriginal.ToString("dd"),
                        DataUnix        = Utilidades.ToUnixTimespan(not.DataOriginal),
                        Quantidade      = not.Quantidade,
                        DataOriginal    = not.DataOriginal,
                        Lida            = not.Lida,
                        TipoNotificacao = not.TipoNotificacao,
                        InfoAdicional   = GetInfoAdicional(not),
                        Destaque        = not.Destaque
                    };

                    lstNotificacaoDTO.Add(notificacaoDTO);
                }
                notificacoesClassificadas.NotificacaoDestaque       = lstNotificacaoDTO.OrderByDescending(x => x.DataOriginal).FirstOrDefault(x => x.Destaque && !x.Lida);
                notificacoesClassificadas.NotificacoesClassificacao = lstNotificacaoDTO.GroupBy(x => new { x.TipoNotificacao.Ordem, x.TipoNotificacao.Alias })
                                                                      .Select(y => new NotificacaoClassificacaoDTO {
                    Notificacoes    = y.OrderByDescending(o => o.DataOriginal).ToList(),
                    TipoNotificacao = y.Key.Ordem,
                    Alias           = y.Key.Alias,
                    Ordem           = y.Key.Ordem,
                    Quantidade      = y.Count()
                }).OrderBy(x => x.Ordem).ToList();

                return(notificacoesClassificadas);
            }
        }
コード例 #4
0
        /// <summary>
        /// Processa o alerta de alunos com baixa frequência.
        /// </summary>
        public static void ExecJOB_AlertaAlunosBaixaFrequencia()
        {
            CFG_Alerta alerta = CFG_AlertaBO.GetEntity(new CFG_Alerta {
                cfa_id = (byte)CFG_AlertaBO.eChaveAlertas.AlertaAlunosBaixaFrequencia
            });

            if (alerta.cfa_periodoAnalise > 0 && !string.IsNullOrEmpty(alerta.cfa_assunto))
            {
                // Busca os usuários para envio da notificação
                DataTable dt = new GestaoEscolarServicoDAO().ExecJOB_AlertaAlunosBaixaFrequencia();
                List <sAlertaAlunosBaixaFrequencia> lstUsuarios = (from DataRow dr in dt.Rows
                                                                   select(sAlertaAlunosBaixaFrequencia) GestaoEscolarUtilBO.DataRowToEntity(dr, new sAlertaAlunosBaixaFrequencia())).ToList();
                List <int> lstEscolas = lstUsuarios.Select(p => p.esc_id).Distinct().ToList();
                DateTime   dataAtual  = DateTime.UtcNow;
                lstEscolas.ForEach(e =>
                {
                    NotificacaoDTO notificacao          = new NotificacaoDTO();
                    notificacao.SenderName              = "SGP";
                    notificacao.Recipient               = new DestinatarioNotificacao();
                    notificacao.Recipient.UserRecipient = new List <string>();
                    notificacao.MessageType             = 3;
                    notificacao.DateStartNotification   = string.Format("{0:yyyy-MM-ddTHH:mm:ss.0000000-00:00}", dataAtual);
                    notificacao.DateEndNotification     = alerta.cfa_periodoValidade > 0 ? string.Format("{0:yyyy-MM-ddTHH:mm:ss.0000000-00:00}", dataAtual.AddHours(alerta.cfa_periodoValidade)) : null;
                    notificacao.Title = alerta.cfa_nome;
                    List <sAlertaAlunosBaixaFrequencia> lstUsuariosEscola = lstUsuarios.FindAll(u => u.esc_id == e);
                    notificacao.Message = alerta.cfa_assunto
                                          .Replace("[NomeEscola]", lstUsuariosEscola.First().esc_nome.ToString())
                                          .Replace("[PercentualMinimoFrequencia]", lstUsuariosEscola.First().percentualBaixaFrequencia.ToString())
                                          .Replace("[Dias]", alerta.cfa_periodoAnalise.ToString())
                                          .Replace("[PulaLinha]", "<br/>");
                    lstUsuariosEscola.ForEach(ue => notificacao.Recipient.UserRecipient.Add(ue.usu_id.ToString()));
                    if (EnviarNotificacao(notificacao))
                    {
                        List <LOG_AlertaAlunosBaixaFrequencia> lstLog = new List <LOG_AlertaAlunosBaixaFrequencia>();
                        notificacao.Recipient.UserRecipient.ForEach(ur => lstLog.Add(new LOG_AlertaAlunosBaixaFrequencia {
                            usu_id = new Guid(ur), esc_id = e, lbf_dataEnvio = DateTime.Now
                        }));
                        LOG_AlertaAlunosBaixaFrequenciaBO.SalvarEmLote(lstLog);
                    }
                }
                                   );
            }
        }
コード例 #5
0
        /// <summary>
        /// Processa o alerta de preenchimento de frequência.
        /// </summary>
        public static void ExecJOB_AlertaPreenchimentoFrequencias()
        {
            CFG_Alerta alerta = CFG_AlertaBO.GetEntity(new CFG_Alerta {
                cfa_id = (byte)CFG_AlertaBO.eChaveAlertas.AlertaPreenchimentoFrequencia
            });

            if (!string.IsNullOrEmpty(alerta.cfa_assunto))
            {
                // Busca os usuários para envio da notificação
                DataTable dt = new GestaoEscolarServicoDAO().ExecJOB_AlertaPreenchimentoFrequencias();
                List <sAlertaPreenchimentoFrequencia> lstUsuarios = (from DataRow dr in dt.Rows
                                                                     select(sAlertaPreenchimentoFrequencia) GestaoEscolarUtilBO.DataRowToEntity(dr, new sAlertaPreenchimentoFrequencia())).ToList();
                if (lstUsuarios.Any())
                {
                    DateTime       dataAtual   = DateTime.UtcNow;
                    NotificacaoDTO notificacao = new NotificacaoDTO();
                    notificacao.SenderName = "SGP";
                    notificacao.Recipient  = new DestinatarioNotificacao();
                    notificacao.Recipient.UserRecipient = new List <string>();
                    notificacao.MessageType             = 3;
                    notificacao.DateStartNotification   = string.Format("{0:yyyy-MM-ddTHH:mm:ss.0000000-00:00}", dataAtual);
                    notificacao.DateEndNotification     = alerta.cfa_periodoValidade > 0 ? string.Format("{0:yyyy-MM-ddTHH:mm:ss.0000000-00:00}", dataAtual.AddHours(alerta.cfa_periodoValidade)) : null;
                    notificacao.Title   = alerta.cfa_nome;
                    notificacao.Message = alerta.cfa_assunto.Replace("[PulaLinha]", "<br/>");
                    lstUsuarios.ForEach(ue => notificacao.Recipient.UserRecipient.Add(ue.usu_id.ToString()));
                    if (EnviarNotificacao(notificacao))
                    {
                        List <LOG_AlertaPreenchimentoFrequencia> lstLog = new List <LOG_AlertaPreenchimentoFrequencia>();
                        notificacao.Recipient.UserRecipient.ForEach(ur => lstLog.Add(new LOG_AlertaPreenchimentoFrequencia {
                            usu_id = new Guid(ur), lpf_dataEnvio = DateTime.Now
                        }));
                        LOG_AlertaPreenchimentoFrequenciaBO.SalvarEmLote(lstLog);
                    }
                }
            }
        }
コード例 #6
0
 public void Notificar(NotificacaoDTO notificacao)
 {
     Notificacoes.Add(notificacao);
 }