public async Task <bool> ChecarFrequenciaPlanoNaRecorrencia(long aulaId) { var existeRegistro = await ChecarFrequenciaPlanoAula(aulaId); if (!existeRegistro) { var aulaAtual = repositorio.ObterPorId(aulaId); var aulasRecorrentes = await repositorio.ObterAulasRecorrencia(aulaAtual.AulaPaiId ?? aulaAtual.Id, aulaId); if (aulasRecorrentes != null) { foreach (var aula in aulasRecorrentes) { existeRegistro = await ChecarFrequenciaPlanoAula(aula.Id); if (existeRegistro) { break; } } } } return(existeRegistro); }
private async Task AlterarRecorrencia(Aula aula, Usuario usuario, DateTime fimRecorrencia) { var dataRecorrencia = aula.DataAula.AddDays(7); var aulasRecorrencia = await repositorioAula.ObterAulasRecorrencia(aula.AulaPaiId ?? aula.Id, aula.Id, fimRecorrencia); List <(DateTime data, string erro)> aulasQueDeramErro = new List <(DateTime, string)>(); List <(DateTime data, bool existeFrequencia, bool existePlanoAula)> aulasComFrenciaOuPlano = new List <(DateTime data, bool existeFrequencia, bool existePlanoAula)>(); List <DateTime> diasParaAlterarRecorrencia = new List <DateTime>(); ObterDiasDaRecorrencia(dataRecorrencia, fimRecorrencia, diasParaAlterarRecorrencia); var datasComRegistro = await repositorioAula.ObterDatasAulasExistentes(diasParaAlterarRecorrencia, aula.TurmaId, aula.DisciplinaId, usuario.CodigoRf); if (datasComRegistro.Count() > 0) { aulasQueDeramErro.AddRange( datasComRegistro.Select(d => (d, $"Já existe uma aula criada neste dia para este componente curricular.") )); } foreach (var aulaRecorrente in aulasRecorrencia) { var ehDataComRegistro = datasComRegistro.Select(d => d.Equals(dataRecorrencia)).FirstOrDefault(); if (!ehDataComRegistro) { var existeFrequencia = await consultasFrequencia.FrequenciaAulaRegistrada(aulaRecorrente.Id); var existePlanoAula = await consultasPlanoAula.PlanoAulaRegistrado(aulaRecorrente.Id); if (existeFrequencia || existePlanoAula) { aulasComFrenciaOuPlano.Add((aulaRecorrente.DataAula, existeFrequencia, existePlanoAula)); } var quantidadeOriginal = aulaRecorrente.Quantidade; aulaRecorrente.DataAula = dataRecorrencia; aulaRecorrente.Quantidade = aula.Quantidade; try { await Salvar(aulaRecorrente, usuario, aulaRecorrente.RecorrenciaAula, quantidadeOriginal, true); } catch (NegocioException nex) { aulasQueDeramErro.Add((dataRecorrencia, nex.Message)); } catch (Exception ex) { servicoLog.Registrar(ex); aulasQueDeramErro.Add((dataRecorrencia, $"Erro Interno: {ex.Message}")); } } dataRecorrencia = dataRecorrencia.AddDays(7); } await NotificarUsuario(usuario, aula, Operacao.Alteracao, aulasRecorrencia.Count() - aulasQueDeramErro.Count, aulasQueDeramErro, aulasComFrenciaOuPlano); }
public async Task <bool> Handle(ObterFrequenciaOuPlanoNaRecorrenciaQuery request, CancellationToken cancellationToken) { var turmaInfantil = await repositorioAula.ObterTurmaInfantilPorAula(request.AulaId); var existeRegistro = await ChecarFrequenciaPlanoAula(request.AulaId, turmaInfantil); if (!existeRegistro) { var aulaAtual = repositorioAula.ObterPorId(request.AulaId); var aulasRecorrentes = await repositorioAula.ObterAulasRecorrencia(aulaAtual.AulaPaiId ?? aulaAtual.Id, request.AulaId); if (aulasRecorrentes != null) { foreach (var aula in aulasRecorrentes) { existeRegistro = await ChecarFrequenciaPlanoAula(aula.Id, turmaInfantil); if (existeRegistro) { break; } } } } return(existeRegistro); }
public async Task <int> ObterQuantidadeAulasRecorrentes(long aulaInicialId, RecorrenciaAula recorrencia) { var aulaInicioRecorrencia = repositorio.ObterPorId(aulaInicialId); var fimRecorrencia = await consultasPeriodoEscolar.ObterFimPeriodoRecorrencia(aulaInicioRecorrencia.TipoCalendarioId, aulaInicioRecorrencia.DataAula, recorrencia); var aulaIdOrigemRecorrencia = aulaInicioRecorrencia.AulaPaiId != null ? aulaInicioRecorrencia.AulaPaiId.Value : aulaInicialId; var aulasRecorrentes = await repositorio.ObterAulasRecorrencia(aulaIdOrigemRecorrencia, aulaInicioRecorrencia.Id, fimRecorrencia); return(aulasRecorrentes.Count() + 1); }
private async Task AlterarRecorrencia(AlterarAulaRecorrenteCommand request, Aula aulaOrigem, Turma turma) { var listaAlteracoes = new List <(bool sucesso, bool erro, DateTime data, string mensagem)>(); var dataAula = request.DataAula; var aulaPaiIdOrigem = aulaOrigem.AulaPaiId ?? aulaOrigem.Id; var fimRecorrencia = await mediator.Send(new ObterFimPeriodoRecorrenciaQuery(request.TipoCalendarioId, dataAula, request.RecorrenciaAula)); var aulasDaRecorrencia = await repositorioAula.ObterAulasRecorrencia(aulaPaiIdOrigem, aulaOrigem.Id, fimRecorrencia); var listaProcessos = await IncluirAulasEmManutencao(aulaOrigem, aulasDaRecorrencia); try { listaAlteracoes.Add(await TratarAlteracaoAula(request, aulaOrigem, dataAula, turma)); var diasRecorrencia = ObterDiasDaRecorrencia(dataAula.AddDays(7), fimRecorrencia); foreach (var diaAula in diasRecorrencia) { // Obter a aula na mesma semana da nova data var aulaRecorrente = aulasDaRecorrencia.FirstOrDefault(c => UtilData.ObterSemanaDoAno(c.DataAula) == UtilData.ObterSemanaDoAno(diaAula)); // Se não existir aula da recorrencia na semana cria uma nova if (aulaRecorrente != null) { listaAlteracoes.Add(await TratarAlteracaoAula(request, aulaRecorrente, diaAula, turma)); } else { listaAlteracoes.Add(await TratarAlteracaoAula(request, (Aula)aulaOrigem.Clone(), diaAula, turma)); } } } finally { await RemoverAulasEmManutencao(listaProcessos.Select(p => p.Id).ToArray()); } await NotificarUsuario(request.AulaId, listaAlteracoes, request.Usuario, request.NomeComponenteCurricular, turma); }
public async Task <bool> Handle(ExcluirAulaRecorrenteCommand request, CancellationToken cancellationToken) { var aulaOrigem = await repositorioAula.ObterCompletoPorIdAsync(request.AulaId); if (aulaOrigem == null) { throw new NegocioException("Não foi possível obter a aula."); } var fimRecorrencia = await mediator.Send(new ObterFimPeriodoRecorrenciaQuery(aulaOrigem.TipoCalendarioId, aulaOrigem.DataAula.Date, request.Recorrencia)); var aulasRecorrencia = await repositorioAula.ObterAulasRecorrencia(aulaOrigem.AulaPaiId ?? aulaOrigem.Id, aulaOrigem.Id, fimRecorrencia); var listaProcessos = await IncluirAulasEmManutencao(aulaOrigem, aulasRecorrencia); try { List <(DateTime data, bool existeFrequencia, bool existePlanoAula)> aulasComFrenciaOuPlano = new List <(DateTime data, bool existeFrequencia, bool existePlanoAula)>(); var listaExclusoes = new List <(DateTime dataAula, bool sucesso, string mensagem, bool existeFrequente, bool existePlanoAula)>(); listaExclusoes.Add(await TratarExclusaoAula(aulaOrigem, request.Usuario)); foreach (var aulaRecorrente in aulasRecorrencia) { listaExclusoes.Add(await TratarExclusaoAula(aulaRecorrente, request.Usuario)); } //usuario.PerfilAtual = perfilSelecionado; await NotificarUsuario(aulaOrigem.Id, listaExclusoes, request.Usuario, request.ComponenteCurricularNome, aulaOrigem.Turma); } finally { await RemoverAulasEmManutencao(listaProcessos.Select(p => p.Id).ToArray()); } return(true); }