예제 #1
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;
            }
        }