internal DownloadCVResponse GetLastCVCandidaturaByCandidatoId(ICandidaturaRepository candidaturaRepository, int candidatoId)
        {
            var response = new DownloadCVResponse();

            try
            {
                var candidaturaId = candidaturaRepository.GetByCriteria(x => x.CandidatoId == candidatoId).Max(t => t.CandidaturaId);
                var candidatura   = candidaturaRepository.GetOne(x => x.CandidaturaId == candidaturaId);


                response.IsValid       = true;
                response.UrlCV         = candidatura.UrlCV;
                response.NombreCV      = candidatura.NombreCV;
                response.CandidaturaId = candidatura.CandidaturaId;
            }
            catch (Exception ex)
            {
                response.IsValid      = false;
                response.ErrorMessage = ex.Message;
            }

            return(response);
        }
        private FiltroBitacoraModels GenerateViewElementsIndex(FiltroBitacoraModels model)
        {
            int CandidaturaId = Convert.ToInt32(_sesionBitacoras.Get <int>("CandidaturaId").ToString());

            model.CentroIdUsuarioLogueado = HttpContext.Session["CentroIdUsuario"] != null ? HttpContext.Session["CentroIdUsuario"].ToString() : string.Empty;


            var candidatura = _candidaturaRepository.GetByCriteria(x => x.CandidaturaId == CandidaturaId).FirstOrDefault();

            if (candidatura != null)
            {
                model.CandidaturaId         = candidatura.CandidaturaId;
                model.EstadoCandidatura     = candidatura.EstadoCandidatura != null ? candidatura.EstadoCandidatura.EstadoCandidatura : string.Empty;
                model.EtapaCandidatura      = candidatura.EtapaCandidatura != null ? candidatura.EtapaCandidatura.EtapaCandidatura : string.Empty;
                model.Perfil                = candidatura.Categoria != null ? candidatura.Categoria.Nombre : string.Empty;
                model.Entrevistador         = candidatura.Entrevistas.Count > 0 ? candidatura.Entrevistas.FirstOrDefault().Entrevistador.Nombre : string.Empty;
                model.NombreCandidato       = string.Concat(candidatura.Candidato.Nombre, " ", candidatura.Candidato.Apellidos);
                model.TipoTecnologia        = candidatura.TipoTecnologia != null ? candidatura.TipoTecnologia.Nombre : string.Empty;
                model.CentroUsuarioCreacion = candidatura.Usuario.Centro == null ? string.Empty : candidatura.Usuario.Centro.Nombre;
            }

            return(model);
        }
        private InfoEntrevistadorViewModel GetInfoEntrevistador(string UserName, int?CentroIdUsuario)
        {
            var response = new InfoEntrevistadorViewModel();

            try
            {
                var ListEntrevistas = _entrevistaRepository.GetByCriteria(x => x.Entrevistador.UserName == UserName && x.Candidatura.IsActivo &&
                                                                          (!(CentroIdUsuario.HasValue) || x.Candidatura.Usuario.CentroId == CentroIdUsuario.Value) &&
                                                                          x.Candidatura.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.Descartado &&
                                                                          x.Candidatura.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.Renuncia &&
                                                                          x.Candidatura.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.RechazaOferta).ToList();

                var ListSubEntrevistas = new List <SubEntrevista>();
                var ListEntrevistasConSubEntrevistas = _entrevistaRepository.GetByCriteria(x => x.SubEntrevista.Any(y => y.Entrevistador.UserName == UserName && y.IsActivo) && x.Candidatura.IsActivo &&
                                                                                           (!(CentroIdUsuario.HasValue) || x.Candidatura.Usuario.CentroId == CentroIdUsuario.Value) &&
                                                                                           x.Candidatura.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.Descartado &&
                                                                                           x.Candidatura.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.Renuncia &&
                                                                                           x.Candidatura.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.RechazaOferta).ToList();

                foreach (var entrevista in ListEntrevistasConSubEntrevistas)
                {
                    var subEntrevistas = from subEntrevista in entrevista.SubEntrevista
                                         where subEntrevista.Entrevistador.UserName == UserName
                                         select subEntrevista;
                    foreach (var subEntrevista in subEntrevistas)
                    {
                        if (subEntrevista.IsActivo)
                        {
                            ListSubEntrevistas.Add(subEntrevista);
                        }
                    }
                }

                var listaEntrevistasPlanificadas    = ListEntrevistas.ConvertToEntrevistasPlanificadasRowViewModel().ToList();
                var listaSubEntrevistasPlanificadas = ListSubEntrevistas.ConvertToEntrevistasPlanificadasRowViewModel().ToList();

                foreach (var entrevistaPlanificada in listaSubEntrevistasPlanificadas)
                {
                    listaEntrevistasPlanificadas.Add(entrevistaPlanificada);
                }

                response.ListEntrevistasPlanificadasViewModel = listaEntrevistasPlanificadas;

                _cartaOfertaRepository.GetByCriteria(x => x.Entrevistador.UserName == UserName && x.Candidatura.IsActivo && x.Candidatura.Usuario.CentroId == CentroIdUsuario);

                var userId = _usuarioRepository.GetOne(x => x.UserName == UserName).UsuarioId;

                var currentDateTime = DateTime.Now;
                var aMonthEarlier   = currentDateTime.AddMonths(-1);

                var ListaCandidaturasAFiltrar = _candidaturaRepository.GetByCriteria(x => (x.FiltradorId == userId) &&
                                                                                     (x.EtapaCandidaturaId == (int)TipoEtapaCandidaturaEnum.FiltradoTecnico) &&
                                                                                     (x.EstadoCandidaturaId == (int)TipoEstadoCandidaturaEnum.FiltradoPeople) &&
                                                                                     (x.Created > aMonthEarlier));

                response.ListFiltradoPendienteViewModel = ListaCandidaturasAFiltrar.ConvertToFiltradoPendienteViewModelList().ToList();
            }
            catch (Exception)
            {
                return(new InfoEntrevistadorViewModel());
            }

            return(response);
        }
        public GetCandidatosQueCumplenPerfilResponse GetCandidatosQueCumplenPerfil(DataTableRequest request)
        {
            var response = new GetCandidatosQueCumplenPerfilResponse();

            try
            {
                bool b = request.CustomFilters.Contains(new KeyValuePair <string, string>("Buscar", "true"));
                if (b)
                {
                    var tecnologiaId = Convert.ToInt32(request.CustomFilters["TipoTecnologiaId"]);
                    var perfilId     = Convert.ToInt32(request.CustomFilters["TipoPerfilId"]);
                    var centroId     = Convert.ToInt32(request.CustomFilters["Centro"]);
                    //establecer los filtros
                    var listaDeCandidaturasQueCumplenElPerfil =
                        _candidaturaRepository.GetByCriteria(x =>
                                                             (x.TipoTecnologiaId == tecnologiaId || x.TipoTecnologiaId == null) &&
                                                             (x.CategoriaId == perfilId || x.CategoriaId == null) &&
                                                             (x.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.Contratado &&
                                                              x.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.Descartado &&
                                                              x.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.KOOferta &&
                                                              x.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.RechazaOferta &&
                                                              x.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.Renuncia &&
                                                              x.EstadoCandidaturaId != (int)TipoEstadoCandidaturaEnum.Recontactado) &&
                                                             x.IsActivo &&
                                                             x.Usuario.CentroId == centroId
                                                             ).AsQueryable();

                    var listaCandidatosQueCumplenElPerfil = new List <CandidatoQueCumplePerfilRowViewModel>();

                    if (request.CustomFilters.ContainsKey("Nombre") && request.CustomFilters["Nombre"] != string.Empty)
                    {
                        string nombre = request.CustomFilters["Nombre"];
                        listaDeCandidaturasQueCumplenElPerfil = from c in listaDeCandidaturasQueCumplenElPerfil
                                                                where c.Candidato.Nombre.Contains(nombre)
                                                                select c;
                    }

                    if (request.CustomFilters.ContainsKey("Apellidos") && request.CustomFilters["Apellidos"] != string.Empty)
                    {
                        string apellidos = request.CustomFilters["Apellidos"];
                        listaDeCandidaturasQueCumplenElPerfil = from c in listaDeCandidaturasQueCumplenElPerfil
                                                                where c.Candidato.Apellidos.Contains(apellidos)
                                                                select c;
                    }

                    foreach (var candidatura in listaDeCandidaturasQueCumplenElPerfil)
                    {
                        if (candidatura.Candidato.IsActivo)
                        {
                            var candidato = CandidatoMapper.ConvertToCandidatoQueCumplePerfilRowViewModel(candidatura.Candidato, candidatura.CandidaturaId);
                            int Id        = candidatura.EtapaCandidaturaId;
                            if (Id != 0)
                            {
                                var etapaNombre = (TipoEtapaCandidaturaEnum)Id;
                                candidato.EtapaCandidatura = etapaNombre.ToString();
                            }
                            else
                            {
                                candidato.EtapaCandidatura = "";
                            }

                            listaCandidatosQueCumplenElPerfil.Add(candidato);
                        }
                    }

                    var filtered = listaCandidatosQueCumplenElPerfil.AsQueryable().ApplyColumnSettings(request, CandidatoMapper.GetPropertiePath);

                    response.CandidatosQueCumplenPerfilRowViewModel = filtered;
                    response.TotalElementos = listaCandidatosQueCumplenElPerfil.Count;
                }
                else
                {
                    response.CandidatosQueCumplenPerfilRowViewModel = new List <CandidatoQueCumplePerfilRowViewModel>();
                    response.TotalElementos = 0;
                }
                response.IsValid = true;
            }
            catch (Exception ex)
            {
                response.IsValid      = false;
                response.ErrorMessage = ex.Message;
            }

            return(response);
        }