Example #1
0
        private async Task TratarAbrangencia(AtribuicaoCJ atribuicaoCJ, IEnumerable <AtribuicaoCJ> atribuicoesAtuais)
        {
            var abrangenciasAtuais = await repositorioAbrangencia.ObterAbrangenciaSintetica(atribuicaoCJ.ProfessorRf, Perfis.PERFIL_CJ, atribuicaoCJ.TurmaId);

            if (atribuicaoCJ.Substituir)
            {
                if (abrangenciasAtuais != null && !abrangenciasAtuais.Any())
                {
                    var turma = repositorioTurma.ObterPorId(atribuicaoCJ.TurmaId);
                    if (turma == null)
                    {
                        throw new NegocioException($"Não foi possível localizar a turma {atribuicaoCJ.TurmaId} da abrangência.");
                    }

                    var abrangencias = new Abrangencia[] { new Abrangencia()
                                                           {
                                                               Perfil = Perfis.PERFIL_CJ, TurmaId = turma.Id
                                                           } };

                    servicoAbrangencia.SalvarAbrangencias(abrangencias, atribuicaoCJ.ProfessorRf);
                }
            }
            else
            {
                if (abrangenciasAtuais != null && abrangenciasAtuais.Any())
                {
                    if (!atribuicoesAtuais.Any(a => a.Id != atribuicaoCJ.Id && a.Substituir == true))
                    {
                        servicoAbrangencia.RemoverAbrangencias(abrangenciasAtuais.Select(a => a.Id).ToArray());
                    }
                }
            }
        }
Example #2
0
        private async Task TratarAbrangencia(AtribuicaoCJ atribuicaoCJ, IEnumerable <AtribuicaoCJ> atribuicoesAtuais)
        {
            var perfil = atribuicaoCJ.Modalidade == Modalidade.Infantil ? Perfis.PERFIL_CJ_INFANTIL : Perfis.PERFIL_CJ;

            var abrangenciasAtuais = await repositorioAbrangencia.ObterAbrangenciaSintetica(atribuicaoCJ.ProfessorRf, perfil, atribuicaoCJ.TurmaId);

            if (atribuicaoCJ.Substituir)
            {
                if (abrangenciasAtuais != null && !abrangenciasAtuais.Any())
                {
                    var turma = await repositorioTurma.ObterPorCodigo(atribuicaoCJ.TurmaId);

                    if (turma == null)
                    {
                        throw new NegocioException($"Não foi possível localizar a turma {atribuicaoCJ.TurmaId} da abrangência.");
                    }

                    var abrangencias = new Abrangencia[] { new Abrangencia()
                                                           {
                                                               Perfil = perfil, TurmaId = turma.Id
                                                           } };

                    servicoAbrangencia.SalvarAbrangencias(abrangencias, atribuicaoCJ.ProfessorRf);
                }
            }
            else if ((abrangenciasAtuais != null && abrangenciasAtuais.Any()) &&
                     (!atribuicoesAtuais.Any(a => a.Id != atribuicaoCJ.Id && a.Substituir)))
            {
                servicoAbrangencia.RemoverAbrangencias(abrangenciasAtuais.Select(a => a.Id).ToArray());
            }
        }
Example #3
0
        private async Task BuscaAbrangenciaEPersiste(string login, Guid perfil)
        {
            try
            {
                const string breadcrumb = "SGP API - Tratamento de Abrangência";

                Task <AbrangenciaCompactaVigenteRetornoEOLDTO> consultaEol = null;

                var ehSupervisor  = perfil == Perfis.PERFIL_SUPERVISOR;
                var ehProfessorCJ = perfil == Perfis.PERFIL_CJ;

                SentrySdk.AddBreadcrumb($"{breadcrumb} - Chamada BuscaAbrangenciaEPersiste - Login: {login}, perfil {perfil} - EhSupervisor: {ehSupervisor}, EhProfessorCJ: {ehProfessorCJ}", "SGP Api - Negócio");

                if (ehSupervisor)
                {
                    consultaEol = TratarRetornoSupervisor(ObterAbrangenciaEolSupervisor(login));
                }
                else if (ehProfessorCJ)
                {
                    return;
                }
                else
                {
                    consultaEol = servicoEOL.ObterAbrangenciaCompactaVigente(login, perfil);
                }

                if (consultaEol != null)
                {
                    // Enquanto o EOl consulta, tentamos ganhar tempo obtendo a consulta sintetica
                    var consultaAbrangenciaSintetica = repositorioAbrangencia.ObterAbrangenciaSintetica(login, perfil, string.Empty);

                    var abrangenciaEol       = await consultaEol;
                    var abrangenciaSintetica = await consultaAbrangenciaSintetica;

                    if (abrangenciaEol == null)
                    {
                        throw new NegocioException("Não foi possível localizar registros de abrangência para este usuário.");
                    }

                    IEnumerable <Dre>   dres   = Enumerable.Empty <Dre>();
                    IEnumerable <Ue>    ues    = Enumerable.Empty <Ue>();
                    IEnumerable <Turma> turmas = Enumerable.Empty <Turma>();

                    // sincronizamos as dres, ues e turmas
                    MaterializarEstruturaInstitucional(abrangenciaEol, ref dres, ref ues, ref turmas);

                    // sincronizamos a abrangencia do login + perfil
                    unitOfWork.IniciarTransacao();

                    SincronizarAbrangencia(abrangenciaSintetica, abrangenciaEol.Abrangencia.Abrangencia, ehSupervisor, dres, ues, turmas, login, perfil);

                    unitOfWork.PersistirTransacao();
                }
            }
            catch (Exception ex)
            {
                SentrySdk.CaptureException(ex);
                throw ex;
            }
        }
Example #4
0
        private async Task BuscaAbrangenciaEPersiste(string login, Guid perfil)
        {
            try
            {
                const string breadcrumb = "SGP API - Tratamento de Abrangência";

                Task <AbrangenciaCompactaVigenteRetornoEOLDTO> consultaEol    = null;
                AbrangenciaCompactaVigenteRetornoEOLDTO        abrangenciaEol = null;

                var ehSupervisor  = perfil == Perfis.PERFIL_SUPERVISOR;
                var ehProfessorCJ = perfil == Perfis.PERFIL_CJ || perfil == Perfis.PERFIL_CJ_INFANTIL;

                SentrySdk.AddBreadcrumb($"{breadcrumb} - Chamada BuscaAbrangenciaEPersiste - Login: {login}, perfil {perfil} - EhSupervisor: {ehSupervisor}, EhProfessorCJ: {ehProfessorCJ}", "SGP Api - Negócio");

                if (ehSupervisor)
                {
                    var uesIds = ObterAbrangenciaEolSupervisor(login);
                    if (!uesIds.Any())
                    {
                        return;
                    }
                    var abrangenciaSupervisor = await servicoEOL.ObterAbrangenciaParaSupervisor(uesIds.ToArray());

                    abrangenciaEol = new AbrangenciaCompactaVigenteRetornoEOLDTO()
                    {
                        Abrangencia = abrangenciaSupervisor.Abrangencia,
                        IdUes       = abrangenciaSupervisor.Dres.SelectMany(x => x.Ues.Select(y => y.Codigo)).ToArray()
                    };
                }
                else if (ehProfessorCJ)
                {
                    return;
                }
                else
                {
                    consultaEol = servicoEOL.ObterAbrangenciaCompactaVigente(login, perfil);
                }

                if (consultaEol != null || abrangenciaEol != null)
                {
                    // Enquanto o EOl consulta, tentamos ganhar tempo obtendo a consulta sintetica
                    var consultaAbrangenciaSintetica = repositorioAbrangencia.ObterAbrangenciaSintetica(login, perfil, string.Empty);

                    if (abrangenciaEol == null)
                    {
                        abrangenciaEol = await consultaEol;
                    }
                    var abrangenciaSintetica = await consultaAbrangenciaSintetica;

                    if (abrangenciaEol != null)
                    {
                        IEnumerable <Dre>   dres   = Enumerable.Empty <Dre>();
                        IEnumerable <Ue>    ues    = Enumerable.Empty <Ue>();
                        IEnumerable <Turma> turmas = Enumerable.Empty <Turma>();

                        // sincronizamos as dres, ues e turmas
                        var estrutura = await MaterializarEstruturaInstitucional(abrangenciaEol, dres, ues, turmas);

                        dres   = estrutura.Item1;
                        ues    = estrutura.Item2;
                        turmas = estrutura.Item3;

                        // sincronizamos a abrangencia do login + perfil
                        unitOfWork.IniciarTransacao();

                        SincronizarAbrangencia(abrangenciaSintetica, abrangenciaEol.Abrangencia.Abrangencia, ehSupervisor, dres, ues, turmas, login, perfil);

                        unitOfWork.PersistirTransacao();
                    }
                }
            }
            catch (Exception ex)
            {
                SentrySdk.CaptureException(ex);
                throw;
            }
        }