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)); }
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)); } }
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; } }