public async Task <IEnumerable <DadosLeituraAlunosComunicado> > Handle(ObterDadosLeituraAlunosQuery request, CancellationToken cancellationToken) { var alunosTurma = await alunoRepositorio.ObterAlunosTurma(request.CodigoTurma); var notificacaoAlunos = await notificacaoRepository.ObterNotificacoesAlunoPorId(request.NotificaoId); if (!alunosTurma.Any()) { throw new NegocioException("Não foi possível localizar alunos para a turma informada"); } string codigosAlunos = ""; if (notificacaoAlunos != null && notificacaoAlunos.Any()) { codigosAlunos = string.Join(',', notificacaoAlunos.Select(at => at.CodigoAluno).ToArray()); } else { codigosAlunos = string.Join(',', alunosTurma.Select(at => at.CodigoEOLAluno).ToArray()); } var dadosLeituraComunicados = await dadosLeituraRepositorio.ObterDadosLeituraAlunos(request.NotificaoId, codigosAlunos); if (notificacaoAlunos != null && notificacaoAlunos.Any()) { List <long> IDS = notificacaoAlunos.Select(aluno => aluno.CodigoAluno).ToList(); var dadosLeituraAlunos = alunosTurma.Where(a => IDS.Contains(a.CodigoEOLAluno)).Select(aluno => { var dataleitura = dadosLeituraComunicados .Where(dados => dados.CodigoAluno == aluno.CodigoEOLAluno) .Select(dados => dados.DataLeitura) .FirstOrDefault(); var cpf = aluno.Cpf.ToString("00000000000"); var usuario = usuarioRepository.ObterPorCpf(cpf).Result; var possueApp = usuario != null; var usuarioEol = responsavelEOLRepositorio.ObterDadosResumidosReponsavelPorCpf(cpf).Result; var telefone = possueApp ? usuarioEol.Celular : ""; if (string.IsNullOrWhiteSpace(telefone)) { if (!string.IsNullOrEmpty(aluno.DDDCelular) && !string.IsNullOrEmpty(aluno.Celular)) { telefone = $"{aluno.DDDCelular.Trim()}{aluno.Celular.Trim()}"; } } return(new DadosLeituraAlunosComunicado { CodigoAluno = aluno.CodigoEOLAluno, LeuComunicado = dataleitura.HasValue, DataLeitura = dataleitura, NomeAluno = $"{aluno.NomeAluno.Trim()} ({aluno.CodigoEOLAluno})", NomeResponsavel = $"{aluno.NomeResponsavel.Trim()} ({TipoFiliacao(aluno.TipoResponsavel)})", NumeroChamada = short.Parse(aluno.NumeroChamada ?? "0"), PossueApp = possueApp, TelefoneResponsavel = telefone, SituacaoAluno = aluno.SituacaoAluno, DataSituacaoAluno = aluno.DataSituacaoAluno }); }); return(dadosLeituraAlunos); } else { var dadosLeituraAlunos = alunosTurma .Select(aluno => { var dataleitura = dadosLeituraComunicados .Where(dados => dados.CodigoAluno == aluno.CodigoEOLAluno) .Select(dados => dados.DataLeitura) .FirstOrDefault(); var cpf = aluno.Cpf.ToString("00000000000"); var usuario = usuarioRepository.ObterPorCpf(cpf).Result; var possueApp = usuario != null; var usuarioEol = responsavelEOLRepositorio.ObterDadosResumidosReponsavelPorCpf(cpf).Result; var telefone = possueApp ? usuarioEol.Celular : ""; if (string.IsNullOrWhiteSpace(telefone)) { if (!string.IsNullOrEmpty(aluno.DDDCelular) && !string.IsNullOrEmpty(aluno.Celular)) { telefone = $"{aluno.DDDCelular.Trim()}{aluno.Celular.Trim()}"; } } return(new DadosLeituraAlunosComunicado { CodigoAluno = aluno.CodigoEOLAluno, LeuComunicado = dataleitura.HasValue, DataLeitura = dataleitura, NomeAluno = $"{aluno.NomeAluno.Trim()} ({aluno.CodigoEOLAluno})", NomeResponsavel = $"{aluno.NomeResponsavel.Trim()} ({TipoFiliacao(aluno.TipoResponsavel)})", NumeroChamada = short.Parse(aluno.NumeroChamada ?? "0"), PossueApp = possueApp, TelefoneResponsavel = telefone, SituacaoAluno = aluno.SituacaoAluno, DataSituacaoAluno = aluno.DataSituacaoAluno }); }); return(dadosLeituraAlunos); } }