public async Task <NotaTipoValor> TipoNotaPorAvaliacao(AtividadeAvaliativa atividadeAvaliativa, bool consideraHistorico = false) { var notaTipo = await ObterNotaTipo(atividadeAvaliativa.TurmaId, atividadeAvaliativa.DataAvaliacao, consideraHistorico); if (notaTipo == null) { throw new NegocioException("Não foi encontrado tipo de nota para a avaliação informada"); } return(notaTipo); }
private void ValidarDataAvaliacaoECriador(AtividadeAvaliativa atividadeAvaliativa, string professorRf) { if (atividadeAvaliativa.DataAvaliacao.Date > DateTime.Today) { throw new NegocioException("Não é possivel atribuir notas/conceitos para avaliação(es) com data(s) futura(s)"); } if (!atividadeAvaliativa.ProfessorRf.Equals(professorRf)) { throw new NegocioException("Somente o professor que criou a avaliação, pode atribuir e/ou editar notas/conceitos"); } }
private void NotificarUsuarioAlteracaoExtemporanea(AtividadeAvaliativa atividadeAvaliativa, string mensagem, long usuarioId, string turmaNome) { servicoNotificacao.Salvar(new Notificacao() { Ano = atividadeAvaliativa.CriadoEm.Year, Categoria = NotificacaoCategoria.Alerta, DreId = atividadeAvaliativa.DreId, Mensagem = mensagem, UsuarioId = usuarioId, Tipo = NotificacaoTipo.Notas, Titulo = $"Alteração em Atividade Avaliativa - Turma {turmaNome}", TurmaId = atividadeAvaliativa.TurmaId, UeId = atividadeAvaliativa.UeId, }); }
private async Task <IEnumerable <NotaConceito> > ValidarEObter(IEnumerable <NotaConceito> notasConceitos, AtividadeAvaliativa atividadeAvaliativa, IEnumerable <AlunoPorTurmaResposta> alunos, string professorRf, string disciplinaId, Usuario usuario, Turma turma) { var notasMultidisciplina = new List <NotaConceito>(); var alunosNotasExtemporaneas = new StringBuilder(); var nota = notasConceitos.FirstOrDefault(); var tipoNota = await TipoNotaPorAvaliacao(atividadeAvaliativa, atividadeAvaliativa.DataAvaliacao.Year != DateTime.Now.Year); var notaParametro = await repositorioNotaParametro.ObterPorDataAvaliacao(atividadeAvaliativa.DataAvaliacao); var dataAtual = DateTime.Now; // Verifica Bimestre Atual var dataPesquisa = DateTime.Today; var periodosEscolares = await BuscarPeriodosEscolaresDaAtividade(atividadeAvaliativa); var periodoEscolarAtual = periodosEscolares.FirstOrDefault(x => x.PeriodoInicio.Date <= dataPesquisa.Date && x.PeriodoFim.Date >= dataPesquisa.Date); var periodoEscolarAvaliacao = periodosEscolares.FirstOrDefault(x => x.PeriodoInicio.Date <= atividadeAvaliativa.DataAvaliacao.Date && x.PeriodoFim.Date >= atividadeAvaliativa.DataAvaliacao.Date); if (periodoEscolarAvaliacao == null) { throw new NegocioException("Período escolar da atividade avaliativa não encontrado"); } var bimestreAvaliacao = periodoEscolarAvaliacao.Bimestre; var existePeriodoEmAberto = periodoEscolarAtual != null && periodoEscolarAtual.Bimestre == periodoEscolarAvaliacao.Bimestre || await repositorioPeriodoFechamento.ExistePeriodoPorUeDataBimestre(turma.UeId, DateTime.Today, bimestreAvaliacao); foreach (var notaConceito in notasConceitos) { if (notaConceito.Id > 0) { notaConceito.Validar(professorRf); } var aluno = alunos.FirstOrDefault(a => a.CodigoAluno.Equals(notaConceito.AlunoId)); if (aluno == null) { throw new NegocioException($"Não foi encontrado aluno com o codigo {notaConceito.AlunoId}"); } if (tipoNota.TipoNota == TipoNota.Nota) { notaConceito.ValidarNota(notaParametro, aluno.NomeAluno); if (notaParametro == null) { throw new NegocioException("Não foi possível localizar o parâmetro de nota."); } } else { var conceitos = await repositorioConceito.ObterPorData(atividadeAvaliativa.DataAvaliacao); if (conceitos == null) { throw new NegocioException("Não foi possível localizar o parâmetro de conceito."); } } notaConceito.TipoNota = (TipoNota)tipoNota.Id; notaConceito.DisciplinaId = disciplinaId; if (atividadeAvaliativa.Categoria.Equals(CategoriaAtividadeAvaliativa.Interdisciplinar) && notaConceito.Id.Equals(0)) { var atividadeDisciplinas = repositorioAtividadeAvaliativaDisciplina.ListarPorIdAtividade(atividadeAvaliativa.Id).Result; foreach (var atividade in atividadeDisciplinas) { if (!atividade.DisciplinaId.Equals(disciplinaId)) { notasMultidisciplina.Add(new NotaConceito { AlunoId = notaConceito.AlunoId, AtividadeAvaliativaID = notaConceito.AtividadeAvaliativaID, DisciplinaId = atividade.DisciplinaId, Nota = notaConceito.Nota, ConceitoId = notaConceito.ConceitoId, TipoNota = notaConceito.TipoNota }); } } } if ((notaConceito.Id > 0) && (!existePeriodoEmAberto)) { alunosNotasExtemporaneas.AppendLine($"<li>{aluno.CodigoAluno} - {aluno.NomeAluno}</li>"); } } if (alunosNotasExtemporaneas.ToString().Length > 0) { string mensagem = $"<p>Os resultados da atividade avaliativa '{atividadeAvaliativa.NomeAvaliacao}' da turma {turma.Nome} da {turma.Ue.Nome} (DRE {turma.Ue.Dre.Nome}) no bimestre {bimestreAvaliacao} de {turma.AnoLetivo} foram alterados " + $"pelo Professor {usuario.Nome} ({usuario.CodigoRf}) em {dataAtual.ToString("dd/MM/yyyy")} às {dataAtual.ToString("HH:mm")} para os seguintes alunos:</p><br/>{alunosNotasExtemporaneas.ToString()}" + $"<a href='{hostAplicacao}diario-classe/notas/{nota.DisciplinaId}/{bimestreAvaliacao}'>Clique aqui para visualizar os detalhes.</a>"; foreach (var usuarioCP in usuariosCPs) { NotificarUsuarioAlteracaoExtemporanea(atividadeAvaliativa, mensagem, usuarioCP.Id, turma.Nome); } NotificarUsuarioAlteracaoExtemporanea(atividadeAvaliativa, mensagem, usuarioDiretor.Id, turma.Nome); } var result = notasConceitos.ToList(); result.AddRange(notasMultidisciplina); return(result); }
private async Task <IEnumerable <PeriodoEscolar> > BuscarPeriodosEscolaresDaAtividade(AtividadeAvaliativa atividadeAvaliativa) { var dataFinal = atividadeAvaliativa.DataAvaliacao.Date.AddHours(23).AddMinutes(59).AddSeconds(59); var aula = await repositorioAula.ObterAulaIntervaloTurmaDisciplina(atividadeAvaliativa.DataAvaliacao, dataFinal, atividadeAvaliativa.TurmaId, atividadeAvaliativa.Id); if (aula == null) { throw new NegocioException($"Não encontrada aula para a atividade avaliativa '{atividadeAvaliativa.NomeAvaliacao}' no dia {atividadeAvaliativa.DataAvaliacao.Date.ToString("dd/MM/yyyy")}"); } IEnumerable <PeriodoEscolar> periodosEscolares = await repositorioPeriodoEscolar.ObterPorTipoCalendario(aula.TipoCalendarioId); return(periodosEscolares); }