//con esto accedemos a los nombres de otras tablas
        public static CandidaturaRowViewModel convertToOferta(Candidatura candidatura)
        {
            var result = new CandidaturaRowViewModel();

            if ((candidatura.Oferta != null))
            {
                var entrevista = candidatura.Oferta.Nombre;

                result.Oferta = entrevista;
            }

            return(result);
        }
        private static CandidaturaRowViewModel ConvertToCandidaturaRowViewModel(this Candidatura candidatura, Dictionary <int, List <Bitacora> > bitacorasRevertibles)
        {
            var entrevistadorNombre = string.Empty;
            int?entrevistadorId     = null;
            var agendada            = new DateTime?();
            var ofertaNombre        = String.Empty;
            var nivelIngles         = "N/A";

            foreach (var cIdioma in candidatura.Candidato.CandidatoIdiomas)
            {
                if (cIdioma.IdiomaId == 15)
                {
                    nivelIngles = cIdioma.NivelIdioma.Nombre;
                }
            }

            var ofer = convertToOferta(candidatura);

            if (ofer != null)
            {
                ofertaNombre = ofer.Oferta;
            }


            var tupla = GetEntrevistadorYAgendada(candidatura, candidatura.EtapaCandidatura.TipoEtapaCandidaturaId);

            if (tupla != null)
            {
                if (tupla.Item1 != null)
                {
                    entrevistadorNombre = tupla.Item1.Nombre;
                    entrevistadorId     = tupla.Item1.UsuarioId;
                }
                agendada = (tupla.Item2.HasValue) ? (tupla.Item2): null;
            }

            var listaBitacorasRevertibles = new List <Bitacora>();

            if (bitacorasRevertibles.ContainsKey(candidatura.CandidaturaId))
            {
                listaBitacorasRevertibles = bitacorasRevertibles[candidatura.CandidaturaId];
            }

            var candidaturaRowViewModel = new CandidaturaRowViewModel()
            {
                CandidaturaId         = candidatura.CandidaturaId,
                Estado                = candidatura.EstadoCandidatura.EstadoCandidatura,
                Etapa                 = candidatura.EtapaCandidatura.EtapaCandidatura,
                Candidato             = candidatura.Candidato.Nombre + ' ' + candidatura.Candidato.Apellidos,
                Oferta                = ofertaNombre,
                OrigenCvId            = candidatura.OrigenCvId,
                FuenteReclutamientoId = candidatura.FuenteReclutamientoId,
                Entrevistador         = entrevistadorNombre,
                EntrevistadorId       = entrevistadorId,
                Agendada              = (agendada.HasValue) ? agendada.Value : new DateTime(),
                CandidatoId           = candidatura.CandidatoId,
                EstadoId              = candidatura.EstadoCandidaturaId,
                EtapaId               = candidatura.EtapaCandidaturaId,
                TipoTecnologiaId      = candidatura.TipoTecnologiaId,
                Modulo                = (candidatura.ModuloId.HasValue) ? candidatura.TipoModulo.Nombre : "",
                CVAvailable           = ((candidatura.CV != null && candidatura.UrlCV == null) || (candidatura.CV == null && candidatura.UrlCV != null)),
                Centro                = candidatura.Usuario.CentroId != null ? candidatura.Usuario.Centro.Nombre : string.Empty,
                //GeneradoCartaOferta = candidatura.CartaOfertas.FirstOrDefault() != null && candidatura.CartaOfertas.FirstOrDefault().CartaOfertaGenerada != null,
                GeneradoCartaOferta = candidatura.EtapaCandidatura.TipoEtapaCandidaturaId > (int)TipoEtapaCandidaturaEnum.AgendarEntrevistas && candidatura.EtapaCandidatura.TipoEtapaCandidaturaId != (int)TipoEtapaCandidaturaEnum.Inicio && candidatura.EtapaCandidatura.TipoEtapaCandidaturaId != (int)TipoEtapaCandidaturaEnum.FiltradoTelefonico && candidatura.EtapaCandidatura.TipoEtapaCandidaturaId != (int)TipoEtapaCandidaturaEnum.FeedbackPrimeraEntrevista,
                PuedeRetroceder     = listaBitacorasRevertibles.Any(),

                FiltradorId = candidatura.FiltradorId,
                SubEntrevistadoresString = "",
                NumeroDeEntrevistas      = 0,
                NivelIdioma        = nivelIngles,
                EmailsSeguimiento  = candidatura.EmailsSeguimiento,
                UbicacionCandidato = candidatura.UbicacionCandidato
            };

            if (candidatura.NumeroDeEntrevistas != null)
            {
                candidaturaRowViewModel.NumeroDeEntrevistas = (int)candidatura.NumeroDeEntrevistas;
            }


            if (candidatura.EstadoCandidaturaId == (int)TipoEstadoCandidaturaEnum.Entrevista)
            {
                var primeraEntrevista = (from entrevista in candidatura.Entrevistas
                                         where entrevista.TipoEntrevistaId == 1 &&
                                         entrevista.IsActivo
                                         select entrevista).ToList();

                foreach (var entrevista in primeraEntrevista)
                {
                    foreach (var subEntrevista in entrevista.SubEntrevista)
                    {
                        candidaturaRowViewModel.SubEntrevistadoresString = string.Concat(candidaturaRowViewModel.SubEntrevistadoresString, subEntrevista.EntrevistadorId, ",");
                    }
                }
                candidaturaRowViewModel.SubEntrevistadoresString = (candidaturaRowViewModel.SubEntrevistadoresString.Length > 0) ?
                                                                   candidaturaRowViewModel.SubEntrevistadoresString.Remove(candidaturaRowViewModel.SubEntrevistadoresString.Length - 1) :
                                                                   candidaturaRowViewModel.SubEntrevistadoresString;
            }
            if (candidatura.EstadoCandidaturaId == (int)TipoEstadoCandidaturaEnum.SegundaEntrevista)
            {
                var segundaEntrevista = (from entrevista in candidatura.Entrevistas
                                         where entrevista.TipoEntrevistaId == 2 &&
                                         entrevista.IsActivo
                                         select entrevista).ToList();
                foreach (var entrevista in segundaEntrevista)
                {
                    foreach (var subEntrevista in entrevista.SubEntrevista)
                    {
                        candidaturaRowViewModel.SubEntrevistadoresString = string.Concat(candidaturaRowViewModel.SubEntrevistadoresString, subEntrevista.EntrevistadorId, ",");
                    }
                }
                candidaturaRowViewModel.SubEntrevistadoresString = (candidaturaRowViewModel.SubEntrevistadoresString.Length > 0) ?
                                                                   candidaturaRowViewModel.SubEntrevistadoresString.Remove(candidaturaRowViewModel.SubEntrevistadoresString.Length - 1) :
                                                                   candidaturaRowViewModel.SubEntrevistadoresString;
            }

            if (candidatura.Categoria != null)
            {
                candidaturaRowViewModel.Perfil = candidatura.Categoria.Nombre;
            }

            candidaturaRowViewModel.TipoTecnologia = candidatura.TipoTecnologia == null ? null : (candidatura.TipoTecnologia.Nombre ?? null);
            if (candidaturaRowViewModel.OrigenCvId != null)
            {
                candidaturaRowViewModel.OrigenCv = candidatura.OrigenCv.Nombre;
            }
            else
            {
                candidaturaRowViewModel.OrigenCv = "";
            }


            return(candidaturaRowViewModel);
        }