public async Task <PeriodoEscolar> ObterPeriodoEscolarPorTipoCalendarioBimestre(long tipoCalendarioId, int bimestre) => await repositorio.ObterPorTipoCalendarioEBimestreAsync(tipoCalendarioId, bimestre);
public async Task <ConselhoClasseAlunoResumoDto> ObterConselhoClasseTurma(string turmaCodigo, string alunoCodigo, int bimestre = 0, bool ehFinal = false, bool consideraHistorico = false) { var turma = await ObterTurma(turmaCodigo); var ehAnoAnterior = turma.AnoLetivo != DateTime.Today.Year; if (bimestre == 0 && !ehFinal) { bimestre = await ObterBimestreAtual(turma); } var fechamentoTurma = await consultasFechamentoTurma.ObterPorTurmaCodigoBimestreAsync(turmaCodigo, bimestre); if (fechamentoTurma == null && !ehAnoAnterior) { throw new NegocioException("Fechamento da turma não localizado " + (!ehFinal && bimestre > 0 ? $"para o bimestre {bimestre}" : "")); } var conselhoClasse = fechamentoTurma != null ? await repositorioConselhoClasse.ObterPorFechamentoId(fechamentoTurma.Id): null; var periodoEscolarId = fechamentoTurma?.PeriodoEscolarId; if (periodoEscolarId == null) { var tipoCalendario = await repositorioTipoCalendario.BuscarPorAnoLetivoEModalidade(turma.AnoLetivo, turma.ModalidadeTipoCalendario, turma.Semestre); if (tipoCalendario == null) { throw new NegocioException("Tipo de calendário não encontrado"); } var periodoEscolar = await repositorioPeriodoEscolar.ObterPorTipoCalendarioEBimestreAsync(tipoCalendario.Id, bimestre); periodoEscolarId = periodoEscolar?.Id; } var bimestreFechamento = !ehFinal ? bimestre : (await ObterPeriodoUltimoBimestre(turma)).Bimestre; PeriodoFechamentoBimestre periodoFechamentoBimestre = await consultasPeriodoFechamento .ObterPeriodoFechamentoTurmaAsync(turma, bimestreFechamento, periodoEscolarId); var tipoNota = await ObterTipoNota(turma, periodoFechamentoBimestre, consideraHistorico); var mediaAprovacao = double.Parse(await repositorioParametrosSistema .ObterValorPorTipoEAno(TipoParametroSistema.MediaBimestre)); var conselhoClasseAluno = conselhoClasse != null ? await repositorioConselhoClasseAluno.ObterPorConselhoClasseAlunoCodigoAsync(conselhoClasse.Id, alunoCodigo) : null; return(new ConselhoClasseAlunoResumoDto() { FechamentoTurmaId = fechamentoTurma?.Id, ConselhoClasseId = conselhoClasse?.Id, ConselhoClasseAlunoId = conselhoClasseAluno?.Id, Bimestre = bimestre, PeriodoFechamentoInicio = periodoFechamentoBimestre?.InicioDoFechamento, PeriodoFechamentoFim = periodoFechamentoBimestre?.FinalDoFechamento, TipoNota = tipoNota, Media = mediaAprovacao, AnoLetivo = turma.AnoLetivo }); }
public async Task <ConselhoClasseAlunoNotasConceitosRetornoDto> ObterNotasFrequencia(long conselhoClasseId, long fechamentoTurmaId, string alunoCodigo, string codigoTurma, int bimestre) { var fechamentoTurma = await consultasFechamentoTurma.ObterCompletoPorIdAsync(fechamentoTurmaId); var turma = fechamentoTurma?.Turma; var periodoEscolar = fechamentoTurma?.PeriodoEscolar; if (fechamentoTurma == null) { turma = await repositorioTurma.ObterPorCodigo(codigoTurma); if (turma == null) { throw new NegocioException("Turma não localizada"); } var tipoCalendario = await repositorioTipoCalendario.BuscarPorAnoLetivoEModalidade(turma.AnoLetivo, turma.ModalidadeTipoCalendario, turma.Semestre); if (tipoCalendario == null) { throw new NegocioException("Tipo de calendáro não encontrado"); } periodoEscolar = await repositorioPeriodoEscolar.ObterPorTipoCalendarioEBimestreAsync(tipoCalendario.Id, bimestre); if (turma.AnoLetivo == DateTime.Today.Year) { throw new NegocioException("Fechamento da Turma não encontrado"); } } var turmaCodigo = turma.CodigoTurma; var notasConselhoClasseAluno = await consultasConselhoClasseNota.ObterNotasAlunoAsync(conselhoClasseId, alunoCodigo); var notasFechamentoAluno = fechamentoTurma != null && fechamentoTurma.PeriodoEscolarId.HasValue ? await consultasFechamentoNota.ObterNotasAlunoBimestreAsync(fechamentoTurmaId, alunoCodigo) : await consultasConselhoClasseNota.ObterNotasFinaisBimestresAlunoAsync(alunoCodigo, turmaCodigo); var disciplinasDaTurmaEol = await servicoEOL.ObterDisciplinasPorCodigoTurma(turmaCodigo); var disciplinasDaTurma = await mediator.Send(new ObterComponentesCurricularesPorIdsQuery(disciplinasDaTurmaEol.Select(x => x.CodigoComponenteCurricular).Distinct().ToArray())); var retorno = new ConselhoClasseAlunoNotasConceitosRetornoDto(); var gruposMatrizesNotas = new List <ConselhoClasseAlunoNotasConceitosDto>(); // Retornar componentes que lançam nota var gruposMatrizes = disciplinasDaTurma.Where(c => c.LancaNota && c.GrupoMatrizNome != null).GroupBy(c => c.GrupoMatrizNome).ToList(); foreach (var grupoDisiplinasMatriz in gruposMatrizes.OrderBy(k => k.Key)) { var conselhoClasseAlunoNotas = new ConselhoClasseAlunoNotasConceitosDto(); conselhoClasseAlunoNotas.GrupoMatriz = grupoDisiplinasMatriz.Key; foreach (var disciplina in grupoDisiplinasMatriz) { // Carrega Frequencia Aluno var frequenciaAluno = await ObterFrequenciaAluno(turma, periodoEscolar, disciplina.CodigoComponenteCurricular, alunoCodigo); if (disciplina.Regencia) { conselhoClasseAlunoNotas.ComponenteRegencia = await ObterNotasFrequenciaRegencia(disciplina.CodigoComponenteCurricular, frequenciaAluno, periodoEscolar, turma, notasConselhoClasseAluno, notasFechamentoAluno); } else { conselhoClasseAlunoNotas.ComponentesCurriculares.Add(ObterNotasFrequenciaComponente(disciplina.Nome, disciplina.CodigoComponenteCurricular, frequenciaAluno, periodoEscolar, turma, notasConselhoClasseAluno, notasFechamentoAluno)); } } gruposMatrizesNotas.Add(conselhoClasseAlunoNotas); } retorno.PodeEditarNota = await VerificaSePodeEditarNota(alunoCodigo, turma, periodoEscolar); retorno.NotasConceitos = gruposMatrizesNotas; return(retorno); }