コード例 #1
0
        public async Task <AbrangenciaFiltroRetorno> ObterAbrangenciaTurma(string turma, bool consideraHistorico = false)
        {
            var login  = servicoUsuario.ObterLoginAtual();
            var perfil = servicoUsuario.ObterPerfilAtual();
            AbrangenciaCompactaVigenteRetornoEOLDTO abrangencia = await servicoEOL.ObterAbrangenciaCompactaVigente(login.ToString(), Guid.Parse(perfil.ToString()));

            bool abrangenciaPermitida = abrangencia.Abrangencia.Abrangencia == Infra.Enumerados.Abrangencia.UE ||
                                        abrangencia.Abrangencia.Abrangencia == Infra.Enumerados.Abrangencia.Dre ||
                                        abrangencia.Abrangencia.Abrangencia == Infra.Enumerados.Abrangencia.SME;

            return(await repositorioAbrangencia.ObterAbrangenciaTurma(turma, login, perfil, consideraHistorico, abrangenciaPermitida));
        }
コード例 #2
0
        private void MaterializarEstruturaInstitucional(AbrangenciaCompactaVigenteRetornoEOLDTO abrangenciaEol, ref IEnumerable <Dre> dres, ref IEnumerable <Ue> ues, ref IEnumerable <Turma> turmas)
        {
            string[] codigosNaoEncontrados;

            if (abrangenciaEol.IdDres != null && abrangenciaEol.IdDres.Length > 0)
            {
                dres = repositorioDre.MaterializarCodigosDre(abrangenciaEol.IdDres, out codigosNaoEncontrados);
            }

            if (abrangenciaEol.IdUes != null && abrangenciaEol.IdUes.Length > 0)
            {
                ues = repositorioUe.MaterializarCodigosUe(abrangenciaEol.IdUes, out codigosNaoEncontrados);
            }

            if (abrangenciaEol.IdTurmas != null && abrangenciaEol.IdTurmas.Length > 0)
            {
                turmas = repositorioTurma.MaterializarCodigosTurma(abrangenciaEol.IdTurmas, out codigosNaoEncontrados)
                         .Union(ImportarTurmasNaoEncontradas(codigosNaoEncontrados));
            }
        }
コード例 #3
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;
            }
        }