private List <PkUsuarioConversa> GetProfessoresOuCoordenadores(PkHistoricoDoAluno ultimoHistoricoDoAluno, string tipo,
                                                                       int codigoDoCliente)
        {
            List <PkUsuarioConversa> professoresOuCoordenadores = new List <PkUsuarioConversa>();

            if (ultimoHistoricoDoAluno != null)
            {
                List <PkHabilitacaoProfessor> habilitacoes = this._habilitaRepository
                                                             .GetHabilitacoes(ultimoHistoricoDoAluno)
                                                             .Content
                                                             .DistinctBy(x => x.CodigoDoProfessor)
                                                             .ToList();

                string cargo = TipoDeUsuarioDoChatTrata.TipoExtenso(tipo);

                professoresOuCoordenadores = (from profHabilita in habilitacoes
                                              join cadforps in this._db.Cadforps.Where(x =>
                                                                                       x.ProfNivel == tipo && x.Situacao == SaeSituacao.Ativo)
                                              on profHabilita.CodigoDoProfessor equals cadforps.Codigo
                                              join curso in this._db.Cursos.Where(x => x.Situacao == SaeSituacao.Ativo)
                                              on profHabilita.CodigoDoCurso equals curso.Nseq
                                              select new PkUsuarioConversa
                {
                    Codigo = cadforps.Codigo,
                    Tipo = TipoDeUsuarioDoChatTrata.Professor,
                    Foto = cadforps.Foto,
                    CodigoDoCliente = codigoDoCliente,
                    Nome = cadforps.Nome,
                    Status = $"{cargo} do curso: {curso.Descricao}",
                    TipoDeProfessor = tipo,
                    TipoParaExibicao = tipo
                }).ToList();
            }

            return(professoresOuCoordenadores);
        }
        public List <PkUsuarioConversa> Get(PesquisaContatosIndexModel index)
        {
            List <PkUsuarioConversa> listaParaRetorno = new List <PkUsuarioConversa>();

            this._usuarioLogado.GetUsuarioLogado();
            int    codigoDoUsuarioLogado = this._usuarioLogado.Codigo;
            string tipoDeUsuarioLogado   = this._usuarioLogado.TipoDeUsuario;
            int    codigoDoCliente       = this._saeHelperCookie.GetCookie(ECookie.CodigoDoCliente).ConvertToInt32();

            this.ExtraiCodigoECursoSelecionado(index, out int codigoDoCurso, out string fase);
            List <PkUsuarioConversa> professores   = new List <PkUsuarioConversa>();
            List <PkUsuarioConversa> coordenadores = new List <PkUsuarioConversa>();
            List <PkUsuarioConversa> alunos        = new List <PkUsuarioConversa>();
            List <PkUsuarioConversa> responsaveis  = new List <PkUsuarioConversa>();
            bool ehAluno                  = TipoDeUsuarioDoChatTrata.EhAluno(tipoDeUsuarioLogado);
            bool ehResponsavel            = TipoDeUsuarioDoChatTrata.EhResponsavel(tipoDeUsuarioLogado);
            bool ehCoordenadorOuProfessor = TipoDeUsuarioDoChatTrata.EhCoordenadorOuProfessor(tipoDeUsuarioLogado);

            List <string> tiposSelecionados = index.TiposSelecionados;

            if (ehAluno)
            {
                if (this._usuarioLogado.Permissoes.ConversaComAluno                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Aluno)*/)
                {
                    PkHistoricoDoAluno ultimoHistoricoDoAluno = this.GetUltimoHistoricoDoAluno(codigoDoUsuarioLogado);
                    if (ultimoHistoricoDoAluno != null)
                    {
                        alunos =
                            this.GetAlunos(
                                ultimoHistoricoDoAluno.CodigoDoCurso,
                                ultimoHistoricoDoAluno.Fase,
                                codigoDoCliente)
                            .Where(x => x.Codigo != codigoDoUsuarioLogado)
                            .ToList();
                    }
                }
                if (this._usuarioLogado.Permissoes.ConversaComCoordenador                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Coordenador)*/)
                {
                    PkHistoricoDoAluno ultimoHistoricoDoAluno = this.GetUltimoHistoricoDoAluno(codigoDoUsuarioLogado);
                    coordenadores = this.GetProfessoresOuCoordenadores(ultimoHistoricoDoAluno,
                                                                       TipoDeUsuarioDoChatTrata.Coordenador, codigoDoCliente);
                }
                if (this._usuarioLogado.Permissoes.ConversaComProfessor                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Professor)*/)
                {
                    PkHistoricoDoAluno ultimoHistoricoDoAluno = this.GetUltimoHistoricoDoAluno(codigoDoUsuarioLogado);
                    professores = this.GetProfessoresOuCoordenadores(ultimoHistoricoDoAluno,
                                                                     TipoDeUsuarioDoChatTrata.Professor, codigoDoCliente);
                }
                if (this._usuarioLogado.Permissoes.ConversaComResponsavel &&
                    tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Responsavel))
                {
                    //não vai fazer por enquanto
                }
            }
            else if (ehResponsavel)
            {
                if (this._usuarioLogado.Permissoes.ConversaComAluno                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Aluno)*/)
                {
                    //não vai fazer por enquanto
                }

                PkHistoricoDoAluno historicoDoAlunoRelacionado = this.GetUltimoHistoricoDoAluno(this._usuarioLogado.RelacaoComAluno.CodigoDoAluno);
                if (this._usuarioLogado.Permissoes.ConversaComCoordenador                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Coordenador)*/)
                {
                    coordenadores = this.GetProfessoresOuCoordenadores(historicoDoAlunoRelacionado, TipoDeUsuarioDoChatTrata.Coordenador, codigoDoCliente);
                }
                if (this._usuarioLogado.Permissoes.ConversaComProfessor                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Professor)*/)
                {
                    professores = this.GetProfessoresOuCoordenadores(historicoDoAlunoRelacionado, TipoDeUsuarioDoChatTrata.Professor, codigoDoCliente);
                }
                if (this._usuarioLogado.Permissoes.ConversaComResponsavel                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Responsavel)*/)
                {
                    responsaveis = this.GetResponsaveis(historicoDoAlunoRelacionado.CodigoDoCurso,
                                                        historicoDoAlunoRelacionado.Fase, codigoDoCliente)
                                   .Where(x => x.Codigo != codigoDoUsuarioLogado)
                                   .ToList();
                }
            }
            else if (ehCoordenadorOuProfessor)
            {
                if (this._usuarioLogado.Permissoes.ConversaComAluno                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Aluno)*/)
                {
                    alunos = this.GetAlunos(codigoDoCurso, fase, codigoDoCliente).ToList();
                }
                if (this._usuarioLogado.Permissoes.ConversaComCoordenador                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Coordenador)*/)
                {
                    coordenadores = this.GetProfessoresOuCoordenadores(codigoDoCurso, fase,
                                                                       TipoDeUsuarioDoChatTrata.Coordenador, codigoDoCliente)
                                    .Where(x => x.Codigo != codigoDoUsuarioLogado)
                                    .ToList();
                }
                if (this._usuarioLogado.Permissoes.ConversaComProfessor                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Professor)*/)
                {
                    professores = this.GetProfessoresOuCoordenadores(codigoDoCurso, fase,
                                                                     TipoDeUsuarioDoChatTrata.Professor, codigoDoCliente)
                                  .Where(x => x.Codigo != codigoDoUsuarioLogado)
                                  .ToList();
                }
                if (this._usuarioLogado.Permissoes.ConversaComResponsavel                 //&&
                    /*tiposSelecionados.Contains(TipoDeUsuarioDoChatTrata.Responsavel)*/)
                {
                    responsaveis = this.GetResponsaveis(codigoDoCurso, fase, codigoDoCliente);
                }
            }

            listaParaRetorno.AddRange(professores);
            listaParaRetorno.AddRange(coordenadores);
            listaParaRetorno.AddRange(alunos);
            listaParaRetorno.AddRange(responsaveis);

            listaParaRetorno = this.SetUltimaVezLogado(listaParaRetorno);

            listaParaRetorno = listaParaRetorno
                               .OrderBy(x => x.Nome)
                               .ThenBy(x => x.Tipo)
                               .ToList();

            return(listaParaRetorno);
        }
 public SaeResponseRepository <List <PkHabilitacaoProfessor> > GetHabilitacoes(PkHistoricoDoAluno historico)
 {
     return(this.GetHabilitacoes(historico.CodigoDoCurso, historico.Fase, historico.Ano));
 }