public async Task validarMediaAlunos(IEnumerable <long> idsAtividadesAvaliativas, IEnumerable <string> alunosId, Usuario usuario, string disciplinaId) { var dataAtual = DateTime.Now; var notasConceitos = repositorioNotasConceitos.ObterNotasPorAlunosAtividadesAvaliativas(idsAtividadesAvaliativas, alunosId, disciplinaId); var atividadesAvaliativas = repositorioAtividadeAvaliativa.ListarPorIds(idsAtividadesAvaliativas); var notasPorAvaliacoes = notasConceitos.GroupBy(x => x.AtividadeAvaliativaID); var percentualAlunosInsuficientes = double.Parse(await mediator.Send(new ObterValorParametroSistemaTipoEAnoQuery(TipoParametroSistema.PercentualAlunosInsuficientes, DateTime.Today.Year))); foreach (var notasPorAvaliacao in notasPorAvaliacoes) { var atividadeAvaliativa = atividadesAvaliativas.FirstOrDefault(x => x.Id == notasPorAvaliacao.Key); var valoresConceito = await repositorioConceito.ObterPorData(atividadeAvaliativa.DataAvaliacao); var tipoNota = await TipoNotaPorAvaliacao(atividadeAvaliativa, dataAtual.Year != atividadeAvaliativa.DataAvaliacao.Year); var ehTipoNota = tipoNota.TipoNota == TipoNota.Nota; var notaParametro = await repositorioNotaParametro.ObterPorDataAvaliacao(atividadeAvaliativa.DataAvaliacao); var quantidadeAlunos = notasPorAvaliacao.Count(); var quantidadeAlunosSuficientes = 0; var turma = await repositorioTurma.ObterTurmaComUeEDrePorCodigo(atividadeAvaliativa.TurmaId); var periodosEscolares = await BuscarPeriodosEscolaresDaAtividade(atividadeAvaliativa); var periodoAtividade = periodosEscolares.FirstOrDefault(x => x.PeriodoInicio.Date <= atividadeAvaliativa.DataAvaliacao.Date && x.PeriodoFim.Date >= atividadeAvaliativa.DataAvaliacao.Date); foreach (var nota in notasPorAvaliacao) { var valorConceito = ehTipoNota ? valoresConceito.FirstOrDefault(a => a.Id == nota.ConceitoId):null; quantidadeAlunosSuficientes += ehTipoNota ? nota.Nota >= notaParametro.Media ? 1 : 0 : valorConceito != null && valorConceito.Aprovado ? 1 : 0; } string mensagemNotasConceitos = $"<p>Os resultados da atividade avaliativa '{atividadeAvaliativa.NomeAvaliacao}' da turma {turma.Nome} da {turma.Ue.Nome} (DRE {turma.Ue.Dre.Nome}) no bimestre {periodoAtividade.Bimestre} de {turma.AnoLetivo} foram alterados " + $"pelo Professor {usuario.Nome} ({usuario.CodigoRf}) em {dataAtual.ToString("dd/MM/yyyy")} às {dataAtual.ToString("HH:mm")} estão abaixo da média.</p>" + $"<a href='{hostAplicacao}diario-classe/notas/{disciplinaId}/{periodoAtividade.Bimestre}'>Clique aqui para visualizar os detalhes.</a>"; // Avalia se a quantidade de alunos com nota/conceito suficientes esta abaixo do percentual parametrizado para notificação if (quantidadeAlunosSuficientes < (quantidadeAlunos * percentualAlunosInsuficientes / 100)) { // Notifica todos os CPs da UE foreach (var usuarioCP in usuariosCPs) { servicoNotificacao.Salvar(new Notificacao() { Ano = atividadeAvaliativa.CriadoEm.Year, Categoria = NotificacaoCategoria.Alerta, DreId = atividadeAvaliativa.DreId, Mensagem = mensagemNotasConceitos, UsuarioId = usuarioCP.Id, Tipo = NotificacaoTipo.Notas, Titulo = $"Resultados de Atividade Avaliativa - Turma {turma.Nome}", TurmaId = atividadeAvaliativa.TurmaId, UeId = atividadeAvaliativa.UeId, }); } } } }
private void EnviaNotificacaoParaDre(long dreId, IEnumerable <PeriodoFechamentoBimestre> fechamentosBimestre) { var dre = repositorioDre.ObterPorId(dreId); if (dre != null) { try { Notificacao notificacao = MontaNotificacao(dre.Nome, "SME", fechamentosBimestre, null, dre.CodigoDre); var adminsSgpDre = servicoEol.ObterAdministradoresSGPParaNotificar(dre.CodigoDre).Result; if (adminsSgpDre != null && adminsSgpDre.Any()) { foreach (var adminSgpUe in adminsSgpDre) { var usuario = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(adminSgpUe); notificacao.UsuarioId = usuario.Id; servicoNotificacao.Salvar(notificacao); } } } catch (Exception) { throw; } } }
private void EnviaNotificacaoParaDre(IEnumerable <PeriodoFechamentoBimestre> fechamentosBimestre) { var dres = repositorioDre.ObterTodas(); if (dres != null && dres.Any()) { foreach (var dre in dres) { Notificacao notificacao = MontaNotificacao(dre.Nome, "SME", fechamentosBimestre, null, dre.CodigoDre); var adminsSgpDre = servicoEol.ObterAdministradoresSGPParaNotificar(dre.CodigoDre).Result; if (adminsSgpDre != null && adminsSgpDre.Any()) { foreach (var adminSgpUe in adminsSgpDre) { var rf = ""; if (long.TryParse(adminSgpUe, out long rfLong)) { rf = adminSgpUe; } var usuario = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(rf, adminSgpUe); notificacao.UsuarioId = usuario.Id; servicoNotificacao.Salvar(notificacao); } } } } }
private void NotificaRegistroDivergencia(Usuario usuario, RegistroAulaPrevistaDivergenteDto registroAulaPrevistaDivergente) { var tituloMensagem = $"Diferença entre aulas previstas e dadas - Turma {registroAulaPrevistaDivergente.NomeTurma}"; StringBuilder mensagemUsuario = new StringBuilder(); mensagemUsuario.Append($"O total de aulas previstas não corresponde ao total de aulas dadas no {registroAulaPrevistaDivergente.Bimestre}º bimestre "); mensagemUsuario.Append($"para a turma {registroAulaPrevistaDivergente.NomeTurma} da escola {registroAulaPrevistaDivergente.NomeUe} ({registroAulaPrevistaDivergente.NomeDre})"); var hostAplicacao = configuration["UrlFrontEnd"]; mensagemUsuario.Append($"<a href='{hostAplicacao}diario-classe/aula-dada-aula-prevista'>Clique aqui para visualizar os detalhes.</a>"); var notificacao = new Notificacao() { Ano = DateTime.Now.Year, Categoria = NotificacaoCategoria.Alerta, Tipo = NotificacaoTipo.Calendario, Titulo = tituloMensagem, Mensagem = mensagemUsuario.ToString(), UsuarioId = usuario.Id, TurmaId = registroAulaPrevistaDivergente.CodigoTurma, UeId = registroAulaPrevistaDivergente.CodigoUe, DreId = registroAulaPrevistaDivergente.CodigoDre, }; servicoNotificacao.Salvar(notificacao); repositorioNotificacaoAulaPrevista.Salvar(new NotificacaoAulaPrevista() { Bimestre = registroAulaPrevistaDivergente.Bimestre, NotificacaoCodigo = notificacao.Codigo, TurmaId = registroAulaPrevistaDivergente.CodigoTurma, DisciplinaId = registroAulaPrevistaDivergente.DisciplinaId, }); }
private void NotificaAlteracaoFrequencia(Usuario usuario, RegistroFrequenciaAulaDto registroFrequencia, string usuarioAlteracao) { // carregar nomes da turma, escola, disciplina e professor para notificacao var disciplina = ObterNomeDisciplina(registroFrequencia.CodigoDisciplina); var tituloMensagem = $"Título: Alteração extemporânea de frequência da turma {registroFrequencia.NomeTurma} na disciplina {disciplina}."; StringBuilder mensagemUsuario = new StringBuilder(); mensagemUsuario.Append($"O Professor {usuarioAlteracao} realizou alterações no registro de frequência do dia {registroFrequencia.DataAula} da turma {registroFrequencia.NomeTurma} ({registroFrequencia.NomeUe}) na disciplina {disciplina}."); var hostAplicacao = configuration["UrlFrontEnd"]; mensagemUsuario.Append($"<a href='{hostAplicacao}diario-classe/frequencia-plano-aula'>Clique aqui para acessar esse registro.</a>"); var notificacao = new Notificacao() { Ano = DateTime.Now.Year, Categoria = NotificacaoCategoria.Alerta, Tipo = NotificacaoTipo.Frequencia, Titulo = tituloMensagem, Mensagem = mensagemUsuario.ToString(), UsuarioId = usuario.Id, TurmaId = registroFrequencia.CodigoTurma, UeId = registroFrequencia.CodigoUe, DreId = registroFrequencia.CodigoDre, }; servicoNotificacao.Salvar(notificacao); }
public Task <bool> Handle(EnviaNotificacaoCriadorCommand request, CancellationToken cancellationToken) { var extensaoRelatorio = request.RelatorioCorrelacao.Formato.Name(); var urlNotificacao = $"{request.UrlRedirecionamentoBase}api/v1/downloads/sgp/{extensaoRelatorio}/{request.RelatorioCorrelacao.TipoRelatorio.ShortName()}.{extensaoRelatorio}/{request.RelatorioCorrelacao.Codigo}"; string descricaoDoRelatorio; if (string.IsNullOrEmpty(request.MensagemTitulo)) { descricaoDoRelatorio = request.RelatorioCorrelacao.TipoRelatorio.GetAttribute <DisplayAttribute>().Description; } else { descricaoDoRelatorio = request.MensagemTitulo; } var mensagem = FormatarMensagem(descricaoDoRelatorio, urlNotificacao, request.MensagemUsuario); var notificacao = new Notificacao() { Titulo = descricaoDoRelatorio, Ano = request.RelatorioCorrelacao.CriadoEm.Year, Categoria = NotificacaoCategoria.Aviso, Mensagem = mensagem, Tipo = NotificacaoTipo.Relatorio, UsuarioId = request.RelatorioCorrelacao.UsuarioSolicitanteId }; servicoNotificacao.Salvar(notificacao); return(Task.FromResult(true)); }
private void EnviarNotificacaoRegistroDeRecorrencia(Evento evento, List <DateTime> notificacoesSucesso, List <string> notificacoesFalha, long usuarioId) { var tipoCalendario = repositorioTipoCalendario.ObterPorId(evento.TipoCalendarioId); var mensagemNotificacao = new StringBuilder(); if (notificacoesSucesso.Any()) { var textoInicial = notificacoesSucesso.Count > 1 ? "Foram" : "Foi"; mensagemNotificacao.Append($"<br>{textoInicial} cadastrado(s) {notificacoesSucesso.Count} evento(s) de '{evento.TipoEvento.Descricao}' no calendário '{tipoCalendario.Nome}' de {tipoCalendario.AnoLetivo} nas seguintes datas:<br>"); notificacoesSucesso.ForEach(data => mensagemNotificacao.AppendLine($"<br>{data.ToString("dd/MM/yyyy")}")); } if (notificacoesFalha.Any()) { mensagemNotificacao.AppendLine($"<br>Não foi possível cadastrar o(s) evento(s) na(s) seguinte(s) data(s)<br>"); notificacoesFalha.ForEach(mensagem => mensagemNotificacao.AppendLine($"<br>{mensagem}")); } var notificacao = new Notificacao() { Titulo = $"Criação de Eventos Recorrentes - {evento.Nome}", Mensagem = mensagemNotificacao.ToString(), UsuarioId = usuarioId, Tipo = NotificacaoTipo.Calendario, Categoria = NotificacaoCategoria.Aviso }; servicoNotificacao.Salvar(notificacao); }
public void GerarNotificacaoAlteracaoLimiteDias(Turma turma, Usuario usuarioLogado, Ue ue, int bimestre, string alunosComNotaAlterada) { var dataAtual = DateTime.Now; var mensagem = $"<p>A(s) nota(s)/conceito(s) final(is) da turma {turma.Nome} da {ue.Nome} (DRE {ue.Dre.Nome}) no bimestre {bimestre} de {turma.AnoLetivo} foram alterados pelo Professor " + $"{usuarioLogado.Nome} ({usuarioLogado.CodigoRf}) em {dataAtual.ToString("dd/MM/yyyy")} às {dataAtual.ToString("HH:mm")} para o(s) seguinte(s) aluno(s):</p><br/>{alunosComNotaAlterada} "; var listaCPs = servicoEOL.ObterFuncionariosPorCargoUe(turma.Ue.CodigoUe, (long)Cargo.CP); var listaDiretores = servicoEOL.ObterFuncionariosPorCargoUe(turma.Ue.CodigoUe, (long)Cargo.Diretor); var listaSupervisores = consultasSupervisor.ObterPorUe(turma.Ue.CodigoUe); var usuariosNotificacao = new List <UsuarioEolRetornoDto>(); if (listaCPs != null) { usuariosNotificacao.AddRange(listaCPs); } if (listaDiretores != null) { usuariosNotificacao.AddRange(listaDiretores); } if (listaSupervisores != null) { usuariosNotificacao.Add(new UsuarioEolRetornoDto() { CodigoRf = listaSupervisores.SupervisorId, NomeServidor = listaSupervisores.SupervisorNome }); } foreach (var usuarioNotificacaoo in usuariosNotificacao) { var usuario = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(usuarioNotificacaoo.CodigoRf); var notificacao = new Notificacao() { Ano = turma.AnoLetivo, Categoria = NotificacaoCategoria.Alerta, DreId = ue.Dre.Id.ToString(), Mensagem = mensagem, UsuarioId = usuario.Id, Tipo = NotificacaoTipo.Notas, Titulo = $"Alteração em nota/conceito final - Turma {turma.Nome}", TurmaId = turma.Id.ToString(), UeId = turma.UeId.ToString(), }; servicoNotificacao.Salvar(notificacao); } }
public void Salvar(NotificacaoDto notificacaoDto) { var notificacao = MapearParaDominio(notificacaoDto); servicoNotificacao.Salvar(notificacao); }