private async Task GerarAulaDeRecorrenciaParaDias(Aula aula, Usuario usuario, IEnumerable <PodePersistirNaDataRetornoEolDto> datasParaPersistencia, IEnumerable <DateTime> datasComRegistro) { List <(DateTime data, string erro)> aulasQueDeramErro = new List <(DateTime, string)>(); List <DateTime> datasParaGeracao = datasParaPersistencia.Select(a => a.Data).ToList(); if (datasComRegistro.Count() > 0) { aulasQueDeramErro.AddRange( datasComRegistro.Select(d => (d, $"Já existe uma aula criada neste dia para este componente curricular.") )); } foreach (var dia in datasParaPersistencia) { if (dia.PodePersistir) { var aulaParaAdicionar = (Aula)aula.Clone(); aulaParaAdicionar.DataAula = dia.Data; aulaParaAdicionar.AdicionarAulaPai(aula); aulaParaAdicionar.RecorrenciaAula = RecorrenciaAula.AulaUnica; try { await Salvar(aulaParaAdicionar, usuario, aulaParaAdicionar.RecorrenciaAula, 0, true); } catch (NegocioException nex) { aulasQueDeramErro.Add((dia.Data, nex.Message)); } catch (Exception ex) { servicoLog.Registrar(ex); aulasQueDeramErro.Add((dia.Data, "Erro Interno.")); } } else { aulasQueDeramErro.Add((dia.Data, "Este professor não pode persistir nesta turma neste dia.")); } } await NotificarUsuario(usuario, aula, Operacao.Inclusao, datasParaPersistencia.ToList().Count - aulasQueDeramErro.ToList().Count, aulasQueDeramErro); }
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); }