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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }