private async Task <IEnumerable <DisciplinaDto> > ObterComponentesTurma(Turma turma) { var componentesTurma = new List <DisciplinaDto>(); var componentesCurriculares = await consultasDisciplina.ObterDisciplinasPorTurma(turma.CodigoTurma, false); if (componentesCurriculares == null) { throw new NegocioException("Não localizado disciplinas para a turma no EOL!"); } componentesTurma.AddRange(componentesCurriculares.Where(c => !c.Regencia)); foreach (var componenteCurricular in componentesCurriculares.Where(c => c.Regencia)) { // Adiciona lista de componentes relacionados a regencia componentesTurma.AddRange( consultasDisciplina.MapearParaDto( await consultasDisciplina.ObterComponentesRegencia(turma, componenteCurricular.CodigoComponenteCurricular))); } return(componentesTurma); }
public async Task <FechamentoFinalConsultaRetornoDto> ObterFechamentos(FechamentoFinalConsultaFiltroDto filtros) { var retorno = new FechamentoFinalConsultaRetornoDto(); var turma = await repositorioTurma.ObterTurmaComUeEDrePorCodigo(filtros.TurmaCodigo); if (turma == null) { throw new NegocioException("Não foi possível localizar a turma."); } var tipoCalendario = await repositorioTipoCalendario.BuscarPorAnoLetivoEModalidade(turma.AnoLetivo, turma.ObterModalidadeTipoCalendario()); if (tipoCalendario == null) { throw new NegocioException("Não foi encontrado tipo de calendário escolar, para a modalidade informada."); } var periodosEscolares = await repositorioPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id); if (periodosEscolares == null || !periodosEscolares.Any()) { throw new NegocioException("Não foi encontrado período Escolar para a modalidade informada."); } if (turma.AnoLetivo != 2020) { await VerificaSePodeFazerFechamentoFinal(periodosEscolares, turma); } var ultimoPeriodoEscolar = periodosEscolares.OrderByDescending(a => a.Bimestre).FirstOrDefault(); retorno.EventoData = ultimoPeriodoEscolar.PeriodoFim; var alunosDaTurma = await servicoEOL.ObterAlunosPorTurma(turma.CodigoTurma); if (alunosDaTurma == null || !alunosDaTurma.Any()) { throw new NegocioException("Não foram encontrandos alunos para a turma informada."); } var tipoNota = repositorioNotaTipoValor.ObterPorTurmaId(turma.Id); if (tipoNota == null) { throw new NegocioException("Não foi possível localizar o tipo de nota para esta turma."); } retorno.EhNota = tipoNota.EhNota(); //Codigo aluno / NotaConceito / Código Disciplina / bimestre var listaAlunosNotas = new List <(string, string, long, int)>(); var disciplinas = new List <DisciplinaResposta>(); var disciplinaEOL = await consultasDisciplina.ObterDisciplina(filtros.DisciplinaCodigo); var usuarioAtual = await servicoUsuario.ObterUsuarioLogado(); if (filtros.EhRegencia) { var disciplinasRegencia = await consultasDisciplina.ObterComponentesRegencia(turma, filtros.DisciplinaCodigo); if (disciplinasRegencia == null || !disciplinasRegencia.Any()) { throw new NegocioException("Não foram encontrados componentes curriculares para a regência informada."); } disciplinas.AddRange(disciplinasRegencia); } else { disciplinas.Add(new DisciplinaResposta() { Nome = disciplinaEOL.Nome, CodigoComponenteCurricular = disciplinaEOL.CodigoComponenteCurricular }); } retorno.EhSintese = !disciplinaEOL.LancaNota; var fechamentosTurmaDisciplina = await repositorioFechamentoTurmaDisciplina.ObterFechamentosTurmaDisciplinas(turma.CodigoTurma, new long[] { filtros.DisciplinaCodigo }); var notasFechamentosFinais = Enumerable.Empty <FechamentoNota>(); if (fechamentosTurmaDisciplina != null && fechamentosTurmaDisciplina.Any()) { notasFechamentosFinais = await repositorioFechamentoNota.ObterPorFechamentosTurma(fechamentosTurmaDisciplina.Select(ftd => ftd.Id).ToArray()); } var notasFechamentosBimestres = Enumerable.Empty <FechamentoNotaAlunoDto>(); if (!retorno.EhSintese) { notasFechamentosBimestres = await ObterNotasFechamentosBimestres(filtros.DisciplinaCodigo, turma, periodosEscolares, retorno.EhNota); } var usuarioEPeriodoPodeEditar = await PodeEditarNotaOuConceitoPeriodoUsuario(usuarioAtual, ultimoPeriodoEscolar, turma, filtros.DisciplinaCodigo.ToString(), retorno.EventoData); foreach (var aluno in alunosDaTurma.Where(a => a.NumeroAlunoChamada > 0 || a.CodigoSituacaoMatricula.Equals(SituacaoMatriculaAluno.Ativo)).OrderBy(a => a.NumeroAlunoChamada).ThenBy(a => a.NomeValido())) { FechamentoFinalConsultaRetornoAlunoDto fechamentoFinalAluno = await TrataFrequenciaAluno(filtros, periodosEscolares, aluno, turma); var marcador = servicoAluno.ObterMarcadorAluno(aluno, new PeriodoEscolar() { PeriodoFim = retorno.EventoData }); if (marcador != null) { fechamentoFinalAluno.Informacao = marcador.Descricao; } if (retorno.EhSintese) { var sinteseDto = await consultasFrequencia.ObterSinteseAluno(fechamentoFinalAluno.Frequencia, disciplinaEOL); fechamentoFinalAluno.Sintese = sinteseDto.Valor; } else { foreach (var periodo in periodosEscolares.OrderBy(a => a.Bimestre)) { foreach (var disciplinaParaAdicionar in disciplinas) { //BIMESTRE / NOTA / DISCIPLINA ID / ALUNO CODIGO var nota = notasFechamentosBimestres.FirstOrDefault(a => a.Bimestre == periodo.Bimestre && a.DisciplinaId == disciplinaParaAdicionar.CodigoComponenteCurricular && a.AlunoCodigo == aluno.CodigoAluno); var notaParaAdicionar = (nota == null ? null : nota.NotaConceito); fechamentoFinalAluno.NotasConceitoBimestre.Add(new FechamentoFinalConsultaRetornoAlunoNotaConceitoDto() { Bimestre = periodo.Bimestre, Disciplina = disciplinaParaAdicionar.Nome, DisciplinaCodigo = disciplinaParaAdicionar.CodigoComponenteCurricular, NotaConceito = notaParaAdicionar }); } } foreach (var disciplinaParaAdicionar in disciplinas) { var nota = notasFechamentosFinais.FirstOrDefault(a => a.DisciplinaId == disciplinaParaAdicionar.CodigoComponenteCurricular && a.FechamentoAluno.AlunoCodigo == aluno.CodigoAluno); string notaParaAdicionar = string.Empty; if (nota != null) { notaParaAdicionar = (tipoNota.EhNota() ? nota.Nota.ToString() : nota.ConceitoId.ToString()); } fechamentoFinalAluno.NotasConceitoFinal.Add(new FechamentoFinalConsultaRetornoAlunoNotaConceitoDto() { Disciplina = disciplinaParaAdicionar.Nome, DisciplinaCodigo = disciplinaParaAdicionar.CodigoComponenteCurricular, NotaConceito = notaParaAdicionar == string.Empty ? null : notaParaAdicionar, }); } } fechamentoFinalAluno.PodeEditar = usuarioEPeriodoPodeEditar ? aluno.PodeEditarNotaConceito() : false; fechamentoFinalAluno.Codigo = aluno.CodigoAluno; retorno.Alunos.Add(fechamentoFinalAluno); } retorno.AuditoriaAlteracao = MontaTextoAuditoriaAlteracao(fechamentosTurmaDisciplina.Any() ? fechamentosTurmaDisciplina.FirstOrDefault() : null, retorno.EhNota); retorno.AuditoriaInclusao = MontaTextoAuditoriaInclusao(fechamentosTurmaDisciplina.Any() ? fechamentosTurmaDisciplina.FirstOrDefault() : null, retorno.EhNota); retorno.NotaMedia = double.Parse(await mediator.Send(new ObterValorParametroSistemaTipoEAnoQuery(TipoParametroSistema.MediaBimestre, DateTime.Today.Year))); retorno.FrequenciaMedia = await consultasFrequencia.ObterFrequenciaMedia(disciplinaEOL); return(retorno); }