コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }