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, }); } } } }
public async Task <double> ObterValorArredondado(DateTime data, double nota) { var notaParametro = await repositorioNotaParametro.ObterPorDataAvaliacao(data); if (notaParametro == null) { throw new NegocioException("Não foi possível localizar o parâmetro da nota."); } return(notaParametro.Arredondar(nota)); }